1 /* demanguse.c -- libiberty demangler usage 2 Copyright (C) 2021-2022 Free Software Foundation, Inc. 3 4 This file is part of GNU Binutils. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 19 02110-1301, USA. */ 20 21 #include <stdio.h> 22 #include <string.h> 23 #include "demangle.h" 24 #include "demanguse.h" 25 26 /* Print the list of demangling styles to STREAM. A one line MSG is 27 printed before the styles. Output is limited to 80 columns, with 28 continuation lines being indented by leading spaces in MSG. */ 29 30 void 31 display_demangler_styles (FILE *stream, const char *msg) 32 { 33 const struct demangler_engine *info = libiberty_demanglers; 34 int col; 35 int lead_spaces = 0; 36 const char *cont = ""; 37 38 while (msg[lead_spaces] == ' ') 39 ++lead_spaces; 40 col = fprintf (stream, "%s", msg); 41 while (info->demangling_style_name) 42 { 43 if (col + strlen (info->demangling_style_name) >= 75) 44 { 45 fprintf (stream, "%.1s\n", cont); 46 col = fprintf (stream, "%.*s", lead_spaces, msg); 47 cont = ""; 48 } 49 col += fprintf (stream, "%s\"%s\"", cont, info->demangling_style_name); 50 cont = ", "; 51 ++info; 52 } 53 fprintf (stream, "\n"); 54 } 55