* subsegs.c (subseg_change): allow and handle a change into SEG_BSS.
[deliverable/binutils-gdb.git] / gas / listing.c
1 /* listing.c - mainting assembly listings
2 Copyright (C) 1991, 1992 Free Software Foundation, Inc.
3
4 This file is part of GAS, the GNU Assembler.
5
6 GAS 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 2, or (at your option)
9 any later version.
10
11 GAS 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 GAS; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20 /*
21 Contributed by Steve Chamberlain
22 sac@cygnus.com
23
24
25 A listing page looks like:
26
27 LISTING_HEADER sourcefilename pagenumber
28 TITLE LINE
29 SUBTITLE LINE
30 linenumber address data source
31 linenumber address data source
32 linenumber address data source
33 linenumber address data source
34
35 If not overridden, the listing commands are:
36
37 .title "stuff"
38 Put "stuff" onto the title line
39 .sbttl "stuff"
40 Put stuff onto the subtitle line
41
42 If these commands come within 10 lines of the top of the page, they
43 will affect the page they are on, as well as any subsequent page
44
45 .eject
46 Thow a page
47 .list
48 Increment the enable listing counter
49 .nolist
50 Decrement the enable listing counter
51
52 .psize Y[,X]
53 Set the paper size to X wide and Y high. Setting a psize Y of
54 zero will suppress form feeds except where demanded by .eject
55
56 If the counter goes below zero, listing is suppressed.
57
58
59 Listings are a maintained by read calling various listing_<foo>
60 functions. What happens most is that the macro NO_LISTING is not
61 defined (from the Makefile), then the macro LISTING_NEWLINE expands
62 into a call to listing_newline. The call is done from read.c, every
63 time it sees a newline, and -l is on the command line.
64
65 The function listing_newline remembers the frag associated with the
66 newline, and creates a new frag - note that this is wasteful, but not
67 a big deal, since listing slows things down a lot anyway. The
68 function also rememebers when the filename changes.
69
70 When all the input has finished, and gas has had a chance to settle
71 down, the listing is output. This is done by running down the list of
72 frag/source file records, and opening the files as needed and printing
73 out the bytes and chars associated with them.
74
75 The only things which the architecture can change about the listing
76 are defined in these macros:
77
78 LISTING_HEADER The name of the architecture
79 LISTING_WORD_SIZE The make of the number of bytes in a word, this determines
80 the clumping of the output data. eg a value of
81 2 makes words look like 1234 5678, whilst 1
82 would make the same value look like 12 34 56
83 78
84 LISTING_LHS_WIDTH Number of words of above size for the lhs
85
86 LISTING_LHS_WIDTH_SECOND Number of words for the data on the lhs
87 for the second line
88
89 LISTING_LHS_CONT_LINES Max number of lines to use up for a continutation
90 LISTING_RHS_WIDTH Number of chars from the input file to print
91 on a line
92 */
93
94 #include "as.h"
95 <<<<<<< listing.c
96 #include <ansidecl.h>
97 =======
98
99 >>>>>>> 1.13
100 #include <obstack.h>
101 #include "input-file.h"
102 #include "targ-cpu.h"
103
104 char *malloc();
105
106 #ifndef NO_LISTING
107 #ifndef LISTING_HEADER
108 #define LISTING_HEADER "GAS LISTING"
109 #endif
110 #ifndef LISTING_WORD_SIZE
111 #define LISTING_WORD_SIZE 4
112 #endif
113 #ifndef LISTING_LHS_WIDTH
114 #define LISTING_LHS_WIDTH 1
115 #endif
116 #ifndef LISTING_LHS_WIDTH_SECOND
117 #define LISTING_LHS_WIDTH_SECOND 1
118 #endif
119 #ifndef LISTING_RHS_WIDTH
120 #define LISTING_RHS_WIDTH 100
121 #endif
122 #ifndef LISTING_LHS_CONT_LINES
123 #define LISTING_LHS_CONT_LINES 4
124 #endif
125
126
127
128
129 /* This structure remembers which .s were used */
130 typedef struct file_info_struct
131 {
132 char *filename;
133 int linenum;
134 FILE *file;
135 struct file_info_struct *next;
136 int end_pending;
137
138 } file_info_type ;
139
140
141 /* this structure rememebrs which line from which file goes into which
142 frag */
143 typedef struct list_info_struct
144 {
145 /* Frag which this line of source is nearest to */
146 fragS *frag;
147 /* The actual line in the source file */
148 unsigned int line;
149 /* Pointer to the file info struct for the file which this line
150 belongs to */
151 file_info_type *file;
152
153 /* Next in list */
154 struct list_info_struct *next;
155
156
157 /* Pointer to the file info struct for the high level language
158 source line that belongs here */
159 file_info_type *hll_file;
160
161 /* High level language source line */
162 int hll_line;
163
164
165 /* Pointer to any error message associated with this line */
166 char *message;
167
168 enum
169 {
170 EDICT_NONE,
171 EDICT_SBTTL,
172 EDICT_TITLE,
173 EDICT_NOLIST,
174 EDICT_LIST,
175 EDICT_EJECT
176 } edict;
177 char *edict_arg;
178
179 } list_info_type;
180
181
182 static struct list_info_struct *head;
183 struct list_info_struct *listing_tail;
184 extern int listing;
185 extern unsigned int physical_input_line;
186 extern fragS *frag_now;
187
188
189 static int paper_width = 200;
190 static int paper_height = 60;
191
192
193 /* this static array is used to keep the text of data to be printed
194 before the start of the line.
195 It is stored so we can give a bit more info on the next line. To much, and large
196 initialized arrays will use up lots of paper.
197 */
198
199 static char data_buffer[100];
200 static unsigned int data_buffer_size;
201
202
203 static void
204 DEFUN(listing_message,(name, message),
205 char *name AND
206 char *message)
207 {
208 unsigned int l = strlen(name) + strlen(message)+1;
209 char *n = (char*)malloc(l);
210 strcpy(n,name);
211 strcat(n,message);
212 if(listing_tail != (list_info_type *)NULL)
213 {
214 listing_tail->message = n;
215 }
216
217 }
218
219
220
221
222 void
223 DEFUN(listing_warning,(message),
224 char *message)
225 {
226 listing_message("Warning:", message);
227 }
228
229 void
230 DEFUN(listing_error,(message),
231 char *message)
232 {
233 listing_message("Error:", message);
234 }
235
236
237
238
239 static file_info_type *file_info_head;
240
241 static file_info_type *
242 DEFUN(file_info, (file_name),
243 char *file_name)
244 {
245 /* Find an entry with this file name */
246 file_info_type *p = file_info_head;
247
248 while (p != (file_info_type *)NULL)
249 {
250 if (strcmp(p->filename, file_name) == 0)
251 return p;
252 p = p->next;
253 }
254
255 /* Make new entry */
256
257 p = (file_info_type *)xmalloc(sizeof(file_info_type));
258 p->next = file_info_head;
259 file_info_head = p;
260 p->filename = xmalloc(strlen(file_name)+1);
261 strcpy(p->filename, file_name);
262 p->linenum = 0;
263 p->end_pending = 0;
264
265 p->file = fopen(p->filename,"rb");
266 if (p->file) fgetc(p->file);
267
268
269
270 return p;
271
272 }
273
274
275 static void
276 DEFUN_VOID(new_frag)
277 {
278
279 frag_wane(frag_now);
280 frag_new(0);
281
282 }
283
284 void
285 DEFUN(listing_newline,(ps),
286 char *ps)
287 {
288 char *s = ps;
289 extern char *file_name;
290 static unsigned int last_line =0xffff ;
291
292
293 list_info_type *new;
294 if (physical_input_line != last_line)
295 {
296 last_line = physical_input_line;
297 new_frag();
298
299 new = (list_info_type *)malloc(sizeof(list_info_type));
300 new->frag = frag_now;
301 new->line = physical_input_line ;
302 new->file = file_info(file_name);
303
304 if (listing_tail)
305 {
306 listing_tail->next = new;
307 }
308 else
309 {
310 head = new;
311 }
312 listing_tail = new;
313 new->next = (list_info_type *)NULL;
314 new->message = (char *)NULL;
315 new->edict = EDICT_NONE;
316 new->hll_file = (file_info_type*)NULL;
317 new->hll_line = 0;
318 new_frag();
319 }
320 }
321
322
323 /*
324 This function returns the next source line from the file supplied,
325 truncated to size. It appends a fake line to the end of each input
326 file to make
327 */
328
329 static char *
330 DEFUN(buffer_line,(file, line, size),
331 file_info_type *file AND
332 char *line AND
333 unsigned int size)
334 {
335 unsigned int count = 0;
336 int c;
337
338 char *p = line;
339
340 /* If we couldn't open the file, return an empty line */
341 if (file->file == (FILE*)NULL)
342 {
343 return "";
344 }
345
346 if (file->end_pending == 10) {
347 *p ++ = '\n';
348 fseek(file->file, 0,0 );
349 file->linenum = 0;
350 file->end_pending = 0;
351 }
352 c = fgetc(file->file);
353
354
355 size -= 1; /* leave room for null */
356
357 while (c != EOF && c != '\n')
358 {
359 if (count < size)
360 *p++ = c;
361 count++;
362
363 c= fgetc(file->file);
364
365 }
366 if (c == EOF)
367 {
368 file->end_pending ++;
369 *p++ = '.';
370 *p++ = '.';
371 *p++ = '.';
372 }
373 file->linenum++;
374 *p++ = 0;
375 return line;
376 }
377
378
379 static char *fn;
380
381 static unsigned int eject; /* Eject pending */
382 static unsigned int page; /* Current page number */
383 static char *title; /* current title */
384 static char *subtitle; /* current subtitle */
385 static unsigned int on_page; /* number of lines printed on current page */
386
387
388 static void
389 DEFUN(listing_page,(list),
390 list_info_type *list)
391 {
392 /* Grope around, see if we can see a title or subtitle edict coming up
393 soon (we look down 10 lines of the page and see if it's there)*/
394 if ((eject || (on_page >= paper_height)) && paper_height != 0)
395 {
396 unsigned int c = 10;
397 int had_title = 0;
398 int had_subtitle = 0;
399
400 page++;
401
402 while (c != 0 && list)
403 {
404 if (list->edict == EDICT_SBTTL && !had_subtitle)
405 {
406 had_subtitle = 1;
407 subtitle = list->edict_arg;
408 }
409 if (list->edict == EDICT_TITLE && !had_title)
410 {
411 had_title = 1;
412 title = list->edict_arg;
413 }
414 list = list->next;
415 c--;
416 }
417
418
419 if (page > 1)
420 {
421 printf("\f");
422 }
423
424 printf("%s %s \t\t\tpage %d\n", LISTING_HEADER, fn, page);
425 printf("%s\n", title);
426 printf("%s\n", subtitle);
427 on_page = 3;
428 eject = 0;
429 }
430 }
431
432
433 static unsigned int
434 DEFUN(calc_hex,(list),
435 list_info_type *list)
436 {
437 list_info_type *first = list;
438 list_info_type *last = first;
439 unsigned int address = ~0;
440
441 fragS *frag;
442 fragS *frag_ptr;
443
444 unsigned int byte_in_frag = 0;
445
446 int anything = 0;
447
448 /* Find first frag which says it belongs to this line */
449 frag = list->frag;
450 while (frag && frag->line != list)
451 frag = frag->fr_next;
452
453 frag_ptr = frag;
454
455 data_buffer_size = 0;
456
457 /* Dump all the frags which belong to this line */
458 while (frag_ptr != (fragS *)NULL && frag_ptr->line == first)
459 {
460 /* Print as many bytes from the fixed part as is sensible */
461 while(byte_in_frag < frag_ptr->fr_fix && data_buffer_size < sizeof(data_buffer)-10)
462 {
463 if (address == ~0)
464 {
465 address = frag_ptr->fr_address;
466 }
467
468 sprintf(data_buffer + data_buffer_size,
469 "%02X",
470 (frag_ptr->fr_literal[byte_in_frag]) & 0xff);
471 data_buffer_size += 2;
472 byte_in_frag++;
473 }
474 {
475 unsigned int var_rep_max = byte_in_frag;
476 unsigned int var_rep_idx = byte_in_frag;
477
478 /* Print as many bytes from the variable part as is sensible */
479 while (byte_in_frag < frag_ptr->fr_var * frag_ptr->fr_offset
480 && data_buffer_size < sizeof(data_buffer)-10)
481 {
482 if (address == ~0)
483 {
484 address = frag_ptr->fr_address;
485 }
486 sprintf(data_buffer + data_buffer_size,
487 "%02X",
488 (frag_ptr->fr_literal[var_rep_idx]) & 0xff);
489 #if 0
490 data_buffer[data_buffer_size++] = '*';
491 data_buffer[data_buffer_size++] = '*';
492 #endif
493 data_buffer_size +=2;
494
495 var_rep_idx ++;
496 byte_in_frag++;
497
498 if (var_rep_idx >= frag_ptr->fr_var)
499 var_rep_idx = var_rep_max;
500 }
501 }
502
503 frag_ptr = frag_ptr->fr_next;
504 }
505 data_buffer[data_buffer_size++] = 0;
506 return address;
507 }
508
509
510
511
512
513
514 static void
515 DEFUN(print_lines,(list, string, address),
516 list_info_type *list AND
517 char *string AND
518 unsigned int address)
519 {
520 unsigned int idx;
521 unsigned int nchars;
522 unsigned int lines;
523 unsigned int byte_in_word =0;
524 char *src = data_buffer;
525
526 /* Print the stuff on the first line */
527 listing_page(list);
528 nchars = (LISTING_WORD_SIZE*2 +1) * LISTING_LHS_WIDTH ;
529 /* Print the hex for the first line */
530 if (address == ~0)
531 {
532 printf("% 4d ", list->line);
533 for (idx = 0; idx < nchars; idx++)
534 printf(" ");
535
536 printf("\t%s\n", string ? string : "");
537 on_page++;
538 listing_page(0);
539
540 }
541 else
542 {
543 if (had_errors())
544 {
545 printf("% 4d ???? ", list->line);
546 }
547 else
548 {
549 printf("% 4d %04x ", list->line, address);
550 }
551
552 /* And the data to go along with it */
553 idx = 0;
554
555 while (*src && idx < nchars)
556 {
557 printf("%c%c", src[0], src[1]);
558 src += 2;
559 byte_in_word++;
560 if (byte_in_word == LISTING_WORD_SIZE)
561 {
562 printf(" ");
563 idx++;
564 byte_in_word = 0;
565 }
566 idx+=2;
567 }
568
569 for (;idx < nchars; idx++)
570 printf(" ");
571
572 printf("\t%s\n", string ? string : "");
573 on_page++;
574 listing_page(list);
575 if (list->message)
576 {
577 printf("**** %s\n",list->message);
578 listing_page(list);
579 on_page++;
580 }
581
582 for (lines = 0;
583 lines < LISTING_LHS_CONT_LINES
584 && *src;
585 lines++) {
586 nchars = ((LISTING_WORD_SIZE*2) +1) * LISTING_LHS_WIDTH_SECOND -1;
587 idx = 0;
588 /* Print any more lines of data, but more compactly */
589 printf("% 4d ", list->line);
590
591 while (*src && idx < nchars)
592 {
593 printf("%c%c", src[0], src[1]);
594 src+=2;
595 idx+=2;
596 byte_in_word++;
597 if (byte_in_word == LISTING_WORD_SIZE)
598 {
599 printf(" ");
600 idx++;
601 byte_in_word = 0;
602 }
603 }
604
605 printf("\n");
606 on_page++;
607 listing_page(list);
608
609 }
610
611
612 }
613 }
614
615
616
617
618
619
620 static void
621 DEFUN_VOID(list_symbol_table)
622 {
623 extern symbolS *symbol_rootP;
624
625 symbolS *ptr ;
626 eject = 1;
627 listing_page(0);
628 printf("DEFINED SYMBOLS\n");
629 on_page++;
630
631 for (ptr = symbol_rootP; ptr != (symbolS*)NULL; ptr = symbol_next(ptr))
632 {
633 if (ptr->sy_frag->line)
634 {
635 if (S_GET_NAME(ptr))
636 {
637
638 if (strlen(S_GET_NAME(ptr)))
639 {
640 printf("%20s:%-5d %2d:%08x %s \n",
641 ptr->sy_frag->line->file->filename,
642 ptr->sy_frag->line->line,
643 S_GET_SEGMENT(ptr),
644 S_GET_VALUE(ptr),
645 S_GET_NAME(ptr));
646 }
647
648 else
649 {
650 printf("%20s:%-5d %2d:%08x\n",
651 ptr->sy_frag->line->file->filename,
652 ptr->sy_frag->line->line,
653 S_GET_SEGMENT(ptr),
654 S_GET_VALUE(ptr));
655
656
657 }
658
659 on_page++;
660 listing_page(0);
661 }
662 }
663
664 }
665 printf("\n");
666 on_page++;
667 listing_page(0);
668 printf("UNDEFINED SYMBOLS\n");
669 on_page++;
670 listing_page(0);
671
672 for (ptr = symbol_rootP; ptr != (symbolS*)NULL; ptr = symbol_next(ptr))
673 {
674 if (S_GET_NAME(ptr) && strlen(S_GET_NAME(ptr)) != 0)
675 {
676 if (ptr->sy_frag->line == 0)
677 {
678 printf("%s\n", S_GET_NAME(ptr));
679 on_page++;
680 listing_page(0);
681 }
682 }
683 }
684 }
685
686 void
687 DEFUN(print_source,(current_file, list, buffer, width),
688 file_info_type *current_file AND
689 list_info_type *list AND
690 char *buffer AND
691 unsigned int width)
692 {
693 if (current_file->file) {
694 while (current_file->linenum < list->hll_line)
695 {
696 char * p = buffer_line(current_file, buffer, width);
697 printf("%4d:%-13s **** %s\n", current_file->linenum, current_file->filename, p);
698 on_page++;
699 listing_page(list);
700 }
701 }
702 }
703
704 /* Sometimes the user doesn't want to be bothered by the debugging
705 records inserted by the compiler, see if the line is suspicioous */
706
707 static int
708 DEFUN(debugging_pseudo,(line),
709 char *line)
710 {
711 while (isspace(*line))
712 line++;
713
714 if(*line != '.') return 0;
715
716 line++;
717
718 if (strncmp(line, "def",3) == 0) return 1;
719 if (strncmp(line, "val",3) == 0) return 1;
720 if (strncmp(line, "scl",3) == 0) return 1;
721 if (strncmp(line, "line",4) == 0) return 1;
722 if (strncmp(line, "endef",5) == 0) return 1;
723 if (strncmp(line, "ln",2) ==0) return 1;
724 if (strncmp(line, "type",4) ==0) return 1;
725 if (strncmp(line, "size",4) == 0) return 1;
726 if (strncmp(line, "dim",3) ==0) return 1;
727 if (strncmp(line, "tag",3) == 0) return 1;
728
729 return 0;
730
731 }
732
733 void
734 DEFUN(listing_listing,(name),
735 char *name)
736 {
737 list_info_type *list = head;
738 file_info_type *current_hll_file = (file_info_type *)NULL;
739
740 unsigned int page= 1;
741 unsigned int prev = 0;
742 char *message;
743 char *buffer;
744 char *p;
745 unsigned int addr = 0;
746 int on_page = 0;
747 int show_listing = 1;
748 unsigned int width;
749
750 buffer = malloc(LISTING_RHS_WIDTH);
751 eject = 1;
752 list = head;
753
754 while (list != (list_info_type *)NULL && 0)
755 {
756 if (list->next)
757 list->frag = list->next->frag;
758 list = list->next;
759
760 }
761
762 list = head->next;
763
764
765 while ( list)
766 {
767 width = LISTING_RHS_WIDTH > paper_width ? paper_width :
768 LISTING_RHS_WIDTH;
769
770 switch (list->edict) {
771 case EDICT_LIST:
772 show_listing++;
773 break;
774 case EDICT_NOLIST:
775 show_listing--;
776 break;
777 case EDICT_EJECT:
778 break;
779 case EDICT_NONE:
780 break;
781 case EDICT_TITLE:
782 title = list->edict_arg;
783 break;
784 case EDICT_SBTTL:
785 subtitle = list->edict_arg;
786 break;
787 default:
788 abort();
789 }
790
791 if (show_listing > 0)
792 {
793 /* Scan down the list and print all the stuff which can be done
794 with this line (or lines) */
795 message = 0;
796
797 if (list->hll_file)
798 {
799 current_hll_file = list->hll_file;
800 }
801
802 if (current_hll_file && list->hll_line && listing & LISTING_HLL)
803 {
804 print_source(current_hll_file, list, buffer, width);
805 }
806
807 p = buffer_line(list->file, buffer, width);
808
809 if (! ((listing & LISTING_NODEBUG) && debugging_pseudo(p)))
810 {
811 print_lines(list, p, calc_hex(list));
812 }
813
814 if (list->edict == EDICT_EJECT)
815 {
816 eject = 1;
817 }
818 }
819 else
820 {
821
822 p = buffer_line(list->file, buffer, width);
823 }
824
825 list = list->next;
826 }
827 free(buffer);
828 }
829
830 void
831 DEFUN(listing_print,(name),
832 char *name)
833 {
834 title = "";
835 subtitle = "";
836
837 if (listing & LISTING_NOFORM)
838 {
839 paper_height = 0;
840 }
841
842 if (listing & LISTING_LISTING)
843 {
844 listing_listing(name);
845
846 }
847 if (listing & LISTING_SYMBOLS)
848 {
849 list_symbol_table();
850 }
851 }
852
853
854 void
855 DEFUN(listing_file,(name),
856 char *name)
857 {
858 fn = name;
859 }
860
861 void
862 DEFUN_VOID(listing_eject)
863 {
864 listing_tail->edict = EDICT_EJECT;
865 }
866
867 void
868 DEFUN_VOID(listing_flags)
869 {
870
871 }
872 void
873 DEFUN(listing_list,(on),
874 unsigned int on)
875 {
876 listing_tail->edict = on ? EDICT_LIST : EDICT_NOLIST;
877 }
878
879
880 void
881 DEFUN_VOID(listing_psize)
882 {
883 paper_height = get_absolute_expression();
884
885 if (paper_height < 0 || paper_height > 1000)
886 {
887 paper_height = 0;
888 as_warn("strange paper height, set to no form");
889 }
890 if (*input_line_pointer == ',')
891 {
892 input_line_pointer++;
893 paper_width = get_absolute_expression();
894 }
895 }
896
897
898 void
899 DEFUN(listing_title,(depth),
900 unsigned int depth)
901 {
902 char *start;
903 char *title;
904 unsigned int length;
905
906 SKIP_WHITESPACE();
907 if (*input_line_pointer=='\"') {
908 input_line_pointer++;
909 start = input_line_pointer;
910
911 while (*input_line_pointer)
912 {
913 if (*input_line_pointer == '\"')
914 {
915 length = input_line_pointer - start;
916 title = malloc(length + 1);
917 memcpy(title, start, length);
918 title[length] = 0;
919 listing_tail->edict = depth ? EDICT_SBTTL : EDICT_TITLE;
920 listing_tail->edict_arg = title;
921 input_line_pointer++;
922 demand_empty_rest_of_line();
923 return;
924 }
925 else if (*input_line_pointer == '\n')
926 {
927 as_bad("New line in title");
928 demand_empty_rest_of_line();
929 return;
930 }
931 else
932 {
933 input_line_pointer++;
934 }
935 }
936 }
937 else
938 {
939 as_bad("expecting title in quotes");
940 }
941 }
942
943
944
945 void
946 DEFUN(listing_source_line,(line),
947 unsigned int line)
948 {
949 new_frag();
950 listing_tail->hll_line = line;
951 new_frag();
952
953 }
954
955 void
956 DEFUN(listing_source_file,(file),
957 char *file)
958 {
959 listing_tail->hll_file = file_info(file);
960 }
961
962
963
964 #else
965
966
967 /* Dummy functions for when compiled without listing enabled */
968
969 void
970 DEFUN_VOID(listing_flags)
971 {
972 s_ignore();
973 }
974
975 void DEFUN_VOID(listing_list)
976 {
977 s_ignore();
978 }
979
980 void DEFUN_VOID(listing_eject)
981 {
982 s_ignore();
983 }
984 void DEFUN_VOID(listing_psize)
985 {
986 s_ignore();
987 }
988
989 void DEFUN(listing_title, (depth),
990 unsigned int depth)
991 {
992 s_ignore();
993 }
994 void
995 DEFUN(listing_file,(name),
996 char *name)
997 {
998
999 }
1000
1001 void DEFUN(listing_newline,(name),
1002 char *name)
1003 {
1004
1005 }
1006
1007 void DEFUN(listing_source_line,(n),
1008 unsigned int n)
1009 {
1010
1011 }
1012 void DEFUN(listing_source_file, (n),
1013 char *n)
1014 {
1015
1016 }
1017
1018
1019
1020 #endif
1021
This page took 0.084921 seconds and 4 git commands to generate.