Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 1 1: /* 2: * getrno -- Convert macro comments to .rno for documentation 3: */ 4: 5: /*)BUILD $(TKBOPTIONS) = { 6: TASK = ...GTR 7: } 8: */ 9: 10: #ifdef DOCUMENTATION 11: title getrno Build Documentation Source 12: index Convert Comments To Runoff Source Format 13: 14: synopsis 15: 16: getrno [-options] -o output -h header input_files 17: 18: description 19: 20: getrno reads a list of files, compiling comments to runoff source. 21: Switches are: 22: .lm +8 23: 24: -d Debugging 25: 26: -b Blank lines in C source become .s 27: 28: -c C source files (default) 29: 30: -m Macro source files 31: 32: -r RSTS/E title hack flag; see below 33: 34: -u Usage -- output an abbreviated documentation 35: containing only the information between "Usage" and "Description". 36: (Note: ignored if -c option selected.) 37: 38: -w Wizard: output package internal calls, too. 39: 40: -o file Write output to "file", rather than stdout. 41: 42: -h file Process "file" as a header file and prepend to the output. 43: 44: .lm -8 45: There is an error in the RSTS/E V7.0 runoff (RNO.TSK) such 46: that title lines do not get correct page numbers. If the -r 47: flag is set, .t lines in the header program will be marked for 48: the fixdoc.c program. Note, for a title to be recognized, it 49: must have the exact form: 50: 51: .t Anything (or .t ########Anything) 52: 53: Getrno will change it to: 54: 55: .t [[Anything]] 56: 57: and fixdoc.c will look for same for post processing. Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 2 58: .tp 10 59: 60: C source file format 61: 62: C source must have the following format: 63: 64: #ifdef DOCUMENTATION 65: title tool_name header_text 66: index index text 67: section_head 68: text for the section 69: #endif 70: 71: Note that the comment leadin must be 72: 73: #ifdefDOCUMENTATION 74: 75: .tp 8 76: In order to define a uniform environment, getrno will insert the 77: following commands at the beginning of the output file: 78: 79: .no autosubtitle .style headers 3,0,0 80: .pg.uc.ps 58,80.lm 8.rm 72 81: .hd 82: .hd mixed 83: .head mixed 84: 85: (Various flavors of runoff will flag one or more of these commands as 86: errors, none of them fatal.) 87: 88: Getrno inserts the following commands between the data from each pair 89: of files scanned: 90: 91: .lm 8.rm 72.nhy 92: 93: Within the body of the documentation, lines are handled depending on 94: what column their text starts in (i.e. where the first non-, 95: non- character falls); a is always assumed to put the next 96: character at column 8. (And you thought card images were dead!) 97: 98: An empty line becomes a .space command. 99: 100: Section heads begin in column 1. They will be left-justified 101: and printed in upper case with a trailing ":". The only section heads 102: with any special meaning to getrno are "title", "index", and 103: "internal"; they are recognized regardless of case. "Title" and 104: "index" must come first, as shown in the example. "Internal" flags 105: the beginning of data that is output only if the -w switch was used; 106: the next section head ends the "wizards only" data. However, if 107: "internal" appears before any other section head (not counting 108: "index"), nothing at all will be output for this file unless -w 109: appears. 110: 111: Normal text starts in column 8 with a character other than a or 112: ; it will be justified and filled, and will start in column 16 113: on the paper. The 's and 's that filled the first 7 114: columns are stripped. 115: Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 3 116: A line that has a or in column 8 will be output with the 117: 's and 's that filled the first 7 columns stripped, and 118: with runoff set to nofill mode. 119: 120: A line that starts with a but has a non-blank before column 8 121: will have the leading 's stripped and will be output with a 122: leading ".i -8;". Lines of this form are normally used between 123: ".lm +8"/".lm -8" pairs, as shown in the example below. 124: 125: A line whose first character AFTER stripping leading blanks as defined 126: above is a "." has leading runoff commands. It is your responsibility 127: to maintain alignment and to quote runoff-specific characters on such 128: lines; in all other cases, getrno will do it for you. For example: 129: .tp 9 130: 131: diagnostics 132: .lm +8 133: .s.i-8;bad file _& other stuff 134: .s.i-8;something else 135: .lm -8 136: .s 137: author 138: etc... 139: 140: Avoid manipulating fill mode directly. Getrno keeps track of whether 141: it has set runoff to fill or nofill mode, and can get confused if you 142: shift modes on it. Hence, the results may then not be as you expect. 143: 144: Note that the above example can be more easily handled as: 145: .tp 11 146: 147: diagnostics 148: .lm +8 149: 150: bad file & other stuff 151: 152: something else 153: .lm -8 154: 155: author 156: etc... 157: 158: Macro source file format 159: 160: The Macro input must have the following syntax: 161: 162: .title name Title line 163: ; 164: ;+ (Start of commentary) 165: ; 166: ; Index Short description for kwik index 167: ; Index (Another short description) 168: ; 169: ; Usage (Start of usage information) 170: ; 171: ; Usage information, output, starting in column 1 172: ; exactly as it is written (rno .nf mode). The 173: ; leading semicolon is not output, but the tab (or Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 4 174: ; spaces) is. 175: ; 176: ; Description 177: ; 178: ; Description, output, starting in column 8 in 179: ; runoff .fill mode, except that any line starting 180: ; with ";" will be output in 181: ; .no fill mode. The leading ";" will not be 182: ; output. 183: ; 184: ; A line consisting of just ";" will generate a 185: ; runoff .space while a line consisting of 186: ; ";text" will generate ".indent -8 ;text". 187: ; 188: ;- (End of commentary) 189: 190: If the wizard flag (-w) is not given, a Macro source line of 191: the format: 192: 193: ; Internal 194: 195: may be used to signal the start of package-internal information. 196: If "Internal" preceeds "Usage", no information will be output for 197: this file. If it follows "Usage" or "Description", text following 198: (up to the next section initiator) will not be output. 199: 200: Header file format 201: 202: The header file is assumed to be in runoff format. It 203: should start as follows: 204: 205: .comment Set top-of-form at 4 lines 206: .comment below perforation. 207: .ps 58,80 ! 58 lines per page, 80 columns. 208: .lm 8 ! left margin at 8 209: .rm 72 ! right margin at 72 210: .hd Mixed ! Mixed case headings 211: 212: Because the left margin is set to 8, titles and subtitles should 213: be written as: 214: 215: .t ########Title 216: .st ########Subtitle 217: 218: The wizard flag may be used to select parts of the header file: 219: 220: .comment wizard 221: *** For wizards only *** 222: .comment else 223: *** For non-wizards only *** 224: .comment mundane 225: *** Exit wizard section *** 226: 227: A line indicating the date on which the documentation was built, and 228: optionally some other information, can be inserted by: 229: 230: .comment date[ info] 231: Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 5 232: The optional info will be included on the date line, which is 233: centered. A single must appear after "date" if info appears; 234: it is not part of info. The format of the date line is: 235: 236: Document compiled [info] 237: 238: The date inserted is in the format returned by ctime() (so it's 239: actually the date and time). 240: 241: The format of all the comments is EXACTLY ".commentargument" - 242: one space only. 243: 244: Workfile format: 245: 246: Each file builds one or more records (lines) in the workfile. 247: The first has the title line, (information following .title). 248: To allow building an index, this should be in the format: 249: 250: nameTitle information 251: 252: Following this are lines containing .rno text. The last 253: line is followed by a record containing "!!" in the first 254: two bytes. 255: 256: Records with "!" in the first byte may be used to communicate 257: information between passes: they are not written to the output. 258: This allows writing Usage information as a separate file. 259: 260: Note that there is a bug in the RSTS RNO (as distributed with Version 261: 7.0). Consequently, if your runoff source has chapter headings, 262: you should not have explicit titles, or have page numbers. 263: 264: bugs 265: 266: Getrno was written to aid in documenting the Decus C libraries. 267: (I.e., getrno and the library documentation are interdependent.) 268: An attempt has been made to make the C-style processing generally 269: useful; the Macro-style processing is more closely tied to the 270: library documentation and is probably of less general interest. 271: Further, the program, particularly in Macro mode, is very sensitive 272: to the exact format of the input; minor variations can produce 273: unexpected results. Some attempt has been made to avoid this in 274: C-style processing; in Macro mode, you are on your own. 275: 276: Due to the size of the files involved, the usage option (-u) is 277: no longer used in building library documentation, and is not 278: supported in C-mode. Perhaps it should be. 279: 280: There should be a way to pass a "#" through to runoff within a line 281: that is otherwise processed normally. 282: 283: All files are processed in the same mode. It might be useful to 284: allow mixed-mode processing so that libraries consisting of both 285: Macro and C modules could be handled. 286: 287: diagnostics 288: 289: A warning message is printed if a file does not have any Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 6 290: documentation. 291: 292: There are many other messages, hopefully self-explanatory. 293: 294: author 295: 296: Martin Minow 297: 298: #endif 299: 300: /* Revision History 301: * 0.0 ??-???-?? MM Invention 302: * 1.0 ??-???-?? MM Added support for C source. 303: * 1.1 24-Jun-82 JSL Added ".comment date" 304: * 2.0 28-Jun-82 JSL Many minor cleanups. Support 8-bit ascii. 305: * 2.1 30-Jun-82 JSL Go by columns instead of leading /space; 306: * added -m, made C mode the default. 307: * 2.2 16-Jul-82 JSL Indented lines have RUNOFF char's escaped. 308: */ 309: 310: #include 311: #ifndef nomacarg 312: #include 313: #endif 314: 315: #define EOS 0 316: #define FALSE 0 317: #define TRUE 1 318: #define REALSHARP '\001' 319: #define NENTRIES 200 320: #define NAMESIZE 17 321: #define WORKFILE "getrno.tmp" 322: #define LINESIZE 257 323: 324: typedef struct { 325: char e_name[NAMESIZE]; /* Entry name */ 326: long e_place; /* File position */ 327: } ITEM; 328: 329: ITEM entries[NENTRIES]; 330: ITEM *free_entry = entries; 331: #define ELAST &entries[NENTRIES] 332: 333: extern long ftell(); 334: 335: int rstshack = 0; /* If -r flag set */ 336: unsigned linect = 0; /* Needed for debugging */ 337: int debug = 0; /* Set for debugging */ 338: int uflag = 0; /* Set if -u flagged */ 339: int wizard = 0; /* Set if -w flagged */ 340: int cflag = TRUE; /* Set if -c flagged */ 341: 342: int fill_flag = TRUE; /* If runoff will fill */ 343: 344: char line[LINESIZE]; 345: char temptext[LINESIZE]; 346: char macfile[81]; 347: char *section; /* For bug() */ Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 7 348: char header[LINESIZE]; /* Header file name */ 349: FILE *infd; /* Input file */ 350: FILE *workfd; /* Temporary file */ 351: long place; /* For work file */ 352: char name_text[NAMESIZE]; /* From title header */ 353: char title_text[LINESIZE]; /* From title header */ 354: extern char *skipbl(); 355: 356: /* 357: * Define C documentation layout: 358: * .left margin 8 (16 in documentation body) 359: * .right margin 72 360: * Note: various flavors of runoff give various error messages, 361: * none fatal. 362: */ 363: 364: char *layout = ".no autosubtitle .style headers 3,0,0\n\ 365: .pg.uc.ps 58,80.lm 8.rm 72\n.hd\n.hd mixed\n.head mixed\n"; 366: 367: char *interfile = ".lm 8.rm 72.nhy\n"; 368: Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 8 369: 370: main(argc, argv) 371: int argc; 372: char *argv[]; 373: { 374: register int i; 375: register char *ap; 376: register char c; 377: 378: for (i = 1; i < argc; i++) { 379: ap = argv[i]; 380: if (*ap == '-') { 381: switch (c = tolower(ap[1])) { 382: case 'c': 383: cflag = TRUE; 384: break; 385: 386: case 'd': debug++; 387: break; 388: 389: case 'm': 390: cflag = FALSE; 391: break; 392: 393: case 'r': rstshack++; 394: break; 395: 396: case 'u': uflag++; 397: break; 398: 399: case 'w': wizard++; 400: break; 401: 402: default: 403: switch (c) { 404: 405: case 'h': 406: if (++i >= argc) 407: error("?No file after -h\n"); 408: strcpy(header, argv[i]); 409: break; 410: 411: case 'o': 412: if (++i >= argc) 413: error("?No file after -o\n"); 414: if (freopen(argv[i], "w", stdout) 415: == NULL) 416: cant("output", argv[i]); 417: break; 418: 419: default: 420: error("?Illegal switch '%c'\n",c); 421: } 422: argv[i-1] = NULL; 423: } 424: argv[i] = NULL; /* Erase this argument */ 425: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 9 426: } 427: /* 428: * Now open the work file and process all files 429: */ 430: if ((workfd = fopen(WORKFILE, "w")) == NULL) 431: cant("work", WORKFILE); 432: 433: for (i = 1; i < argc; i++) { 434: if ((ap = argv[i]) == NULL) 435: continue; /* 'Twas a switch */ 436: if ((infd = fwild(ap, "r")) == NULL) 437: cant("wild card input", ap); 438: else { 439: while (fnext(infd) != NULL) { 440: filename(infd, macfile); 441: if (debug) 442: fprintf(stderr, "* %s\n", macfile); 443: linect = 0; 444: process(); 445: } 446: } 447: } 448: if (debug) 449: fprintf(stderr, "* EOF\n"); 450: /* 451: * All file information read, now write it out 452: */ 453: fclose(workfd); 454: doheader(); 455: if (debug) 456: fprintf(stderr, "* Header processed\n"); 457: if ((workfd = fopen(WORKFILE, "r")) == NULL) 458: cant("work (reopening)", WORKFILE); 459: puts(interfile); 460: output(); 461: fgetname(workfd, line); 462: fclose(workfd); 463: delete(line); 464: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 10 465: 466: filename(fd, outbuf) 467: FILE *fd; 468: char *outbuf; 469: /* 470: * Get the file name, account number, and extension. 471: * Remove the device name and the version number. 472: */ 473: { 474: register char *tp; 475: register char *op; 476: register int c; 477: 478: fgetname(fd, temptext); 479: /* 480: * Skip over the device name 481: */ 482: for (tp = temptext; (c = *tp++) && c != ':';); 483: if (c == EOS) 484: tp = temptext; 485: /* 486: * Don't bother outputting the version number 487: */ 488: for (op = tp; (c = *op) && c != ';'; op++); 489: *op = EOS; 490: /* 491: * Copy the file spec, forcing lowercase. 492: */ 493: for (op = outbuf; (c = *tp++) ;) { 494: *op++ = tolower(c); 495: } 496: *op = EOS; 497: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 11 498: 499: doheader() 500: /* 501: * Process the header file 502: */ 503: { 504: register int inwizard; 505: register int skipit; 506: register char *lp; 507: 508: if (*header == EOS) 509: return; 510: if ((infd = fopen(header, "r")) == NULL) { 511: fprintf(stderr, "can't open "); 512: perror(header); 513: return; 514: } 515: strcpy(macfile, header); 516: inwizard = FALSE; 517: skipit = FALSE; 518: linect = 0; 519: while (getline(infd)) { 520: if (match(line, ".comment wizard")) { 521: if (inwizard) 522: bug("headfile: embedded .comment wizard", 523: NULL); 524: inwizard = TRUE; 525: skipit = !wizard; 526: } 527: else if (match(line, ".comment else")) { 528: if (!inwizard) 529: bug("headfile: else, no .comment wizard", 530: NULL); 531: else 532: skipit = !skipit; 533: } 534: else if (match(line, ".comment mundane")) { 535: if (!inwizard) 536: bug("headfile: mundane, no .comment wizard", 537: NULL); 538: inwizard = FALSE; 539: skipit = FALSE; 540: } 541: if (!skipit) { 542: if (rstshack 543: && line[0] == '.' 544: && tolower(line[1]) == 't' 545: && (isspace(line[2]) || line[2] == ';')) { 546: lp = &line[2]; 547: while ((*lp != EOS) && isspace(*lp)) 548: lp++; 549: if (*lp == ';') 550: lp++; 551: printf(".t [[%s]]\n", lp); 552: } 553: else if ((lp = match(line, ".comment date")) 554: && (isspace(*lp) || *lp == EOS)) { Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 12 555: printf(".c ;Document compiled %s%s\n", 556: ctime(0), lp); 557: } 558: else 559: printf("%s\n", line); 560: } 561: } 562: fclose(infd); 563: macfile[0] = EOS; 564: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 13 565: 566: process() 567: /* 568: * Process input text, saving it in the workfile. 569: */ 570: { 571: register int flag; 572: 573: if (cflag) { 574: if (docstuff()) 575: return; 576: } 577: else { 578: section = "Title scan"; 579: title(); 580: section = "Usage scan"; 581: if ((flag = usage()) == 2) 582: return; 583: else if (flag && !uflag) { 584: section = "Document scan"; 585: rest(); 586: } 587: } 588: fill_flag = TRUE; 589: save("!!", FALSE); /* Terminate entry */ 590: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 14 591: 592: docstuff() 593: /* 594: * Process C documentation. Return FALSE if all OK, TRUE if output for this 595: * file should be discarded. 596: */ 597: { 598: register int titlestate; 599: register int skipit; 600: 601: skipit = FALSE; 602: while (getline(infd)) { 603: if (match(line, "#ifdef") 604: && streq(skipbl(line+6), "DOCUMENTATION")) 605: break; 606: } 607: if (feof(infd)) { 608: fprintf(stderr, "Warning: no documentation in %s\n", macfile); 609: return (TRUE); 610: } 611: /* 612: * Do some documentation 613: */ 614: titlestate = 0; /* No title seen yet */ 615: while (getline(infd)) { 616: if (match(line, "title")) { 617: savetitle(skipbl(&line[5])); 618: titlestate = 1; /* Title, no real */ 619: /* section heads yet */ 620: } 621: else if (match(line, "index")) 622: continue; 623: else { 624: switch (titlestate) { 625: case 0: 626: if (line[0] == EOS) 627: continue; 628: section = "document scan"; 629: bug("Need a title, using", macfile); 630: strcpy(name_text, macfile); 631: strcpy(title_text, ""); 632: /* 633: * Fall through 634: */ 635: case 1: 636: if (line[0] == EOS) 637: continue; 638: if (!wizard && match(line, "internal")) 639: return (TRUE); 640: savename(); 641: save(".lm +8", FALSE); 642: if (wizard) { 643: concat(temptext, 644: ".s.i -8;File name:\t", 645: macfile, NULL); 646: save(temptext, FALSE); 647: save(".s 2", FALSE); Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 15 648: } 649: concat(temptext, 650: ".s.i -8;NAME:\t", name_text, 651: " -- ", title_text, NULL); 652: save(temptext, FALSE); 653: save(".s.f", FALSE); 654: fill_flag = TRUE; 655: titlestate = 2; 656: /* 657: * Fall through 658: */ 659: case 2: /* Write the .rno stuff */ 660: if (match(line, "#endif")) 661: return(FALSE); 662: if (!wizard && isgraph(line[0])) 663: skipit = match(line, "internal"); 664: if (!skipit) 665: docline(); 666: } 667: } 668: } 669: return (FALSE); 670: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 16 671: 672: docline() 673: /* 674: * Process a line from a c document 675: */ 676: { 677: register char *lp; 678: register int skip; 679: 680: switch(line[0]) { 681: 682: case EOS: 683: save("",FALSE); 684: break; 685: 686: case ' ': 687: for (skip = 1; skip < 8; skip++) 688: if (line[skip] == '\t') 689: goto tabcase; 690: else if (line[skip] != ' ') 691: break; 692: fill(); 693: 694: /* The following two save()'s are done in two calls so that they end */ 695: /* up on two lines; otherwise, runoff characters in the line won't */ 696: /* get "escaped". */ 697: save(".i -8",FALSE); 698: save(&line[skip],FALSE); 699: break; 700: 701: case '\t': 702: skip = 0; 703: tabcase: 704: if (line[++skip] == ' ' || line[skip] == '\t') 705: nofill(); 706: else 707: fill(); 708: save(&line[skip],FALSE); 709: break; 710: 711: default: 712: /* 713: * sub-header 714: */ 715: for (lp = line; *lp != EOS; lp++) 716: *lp = toupper(*lp); 717: if (lp[-1] != ':') { 718: *lp++ = ':'; 719: *lp = EOS; 720: } 721: fill(); 722: concat(temptext, ".i -8;", line, NULL); 723: save(temptext, FALSE); 724: break; 725: } 726: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 17 727: 728: title() 729: /* 730: * First, skip to the title 731: */ 732: { 733: register char *lp; 734: register char *np; 735: 736: while (getline(infd)) { 737: lp = skipbl(line); 738: if (!match(lp, ".title")) 739: continue; 740: savetitle(skipbl(lp + 6)); 741: break; 742: } 743: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 18 744: 745: savetitle(lp) 746: register char *lp; 747: /* 748: * Save the title text, on entry lp -> just after "title " 749: */ 750: { 751: register char *np; 752: 753: place = ftell(workfd); 754: np = name_text; 755: while (*lp > ' ' && np < &name_text[sizeof name_text - 2]) { 756: *np++ = *lp; 757: if (*lp++ == '_') /* Needed for runoff */ 758: *np++ = '_'; 759: } 760: while (np < &name_text[sizeof name_text]) 761: *np++ = EOS; 762: strcpy(title_text, skipbl(lp)); 763: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 19 764: 765: savename() 766: /* 767: * Save info. in name/place which were setup by title() 768: */ 769: { 770: register ITEM *ep; 771: register ITEM *lastep; 772: 773: /* 774: * Save in sorted order 775: */ 776: if ((lastep = free_entry++) >= ELAST) 777: error("?Too many files, %d maximum", NENTRIES); 778: for (ep = entries; ep < lastep && 779: strcmp(ep->e_name, name_text) <= 0; ep++); 780: for (; lastep > ep; lastep--) { 781: lastep->e_place = (lastep-1)->e_place; 782: copy(lastep->e_name, (lastep-1)->e_name, NAMESIZE); 783: } 784: ep->e_place = place; 785: copy(ep->e_name, name_text, NAMESIZE); 786: /* 787: * Save the title line 788: */ 789: save((title_text[0]) ? title_text : "!", TRUE); /* Title line */ 790: fill_flag = TRUE; 791: } 792: #ifdef vms 793: copy(out, in, count) 794: char *out; 795: char *in; 796: int count; 797: /* 798: * Copy a buffer -- not in vms library 799: */ 800: { 801: while (--count >= 0) { 802: *out++ = *in++; 803: } 804: } 805: #endif Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 20 806: 807: int 808: usage() 809: /* 810: * Skip to ";+" (ignored what preceeds), then to "; Usage" 811: * and put out usage section. Return 1 if ok, 0 if trouble, 2 to skip. 812: */ 813: { 814: register char *lp; 815: register int usage_seen; 816: register int skipit; 817: 818: skipit = FALSE; 819: for (;;) { /* Skip to ;+ */ 820: if (!getline(infd)) { 821: fprintf(stderr, "Warning, no documentation for %s\n", 822: macfile); 823: return(0); /* Ignore if none */ 824: } 825: if (line[0] == ';' && line[1] == '+') 826: break; 827: } 828: usage_seen = 0; 829: while (getline(infd)) { 830: if (line[0] != ';') { 831: bug("Expecting ';', got", line); 832: return(0); 833: } 834: else if (line[1] == 0) { 835: if (usage_seen && !skipit) 836: save(&line[1], 1); 837: continue; 838: } 839: else if (line[1] == '-') { 840: bug("No Description, etc.", NULL); 841: return(0); 842: } 843: else if (line[1] == ' ') { 844: if (match(&line[2], "internal")) { 845: if (wizard) { /* Do internal */ 846: if (usage_seen) 847: unjust(); 848: continue; 849: } 850: else if (usage_seen) { 851: skipit = TRUE; 852: continue; 853: } 854: else return(2); 855: } 856: else if (usage_seen == FALSE) { 857: if (match(&line[2], "index")) 858: continue; 859: if (match(&line[2], "usage") 860: || match(&line[2], "synopsis")) { 861: savename(); 862: usage_seen = TRUE; Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 21 863: save(".lm +8.nf", FALSE); 864: if (wizard) { 865: concat(line, 866: ".s.i -8;File name:\t", 867: macfile, NULL); 868: save(line, FALSE); 869: save(".s 2", FALSE); 870: } 871: save(".i -8;Usage", FALSE); 872: save("!b", FALSE); 873: fill_flag = FALSE; 874: continue; 875: } 876: } 877: if (line[2] >= 'A') { 878: if (usage_seen) 879: save("!e", FALSE); 880: return(1); 881: } 882: else if (usage_seen && line[2] == ' ') { 883: if (!skipit) { 884: unjust(); 885: } 886: continue; 887: } 888: } 889: else if (usage_seen) { 890: if (line[1] == '\t') { 891: if (!skipit) 892: save(&line[2], TRUE); 893: continue; 894: } 895: } 896: bug("Ununderstandable line", line); 897: return(0); 898: } 899: bug("No ;- at end of file", NULL); 900: return(0); 901: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 22 902: 903: rest() 904: /* 905: * Output the remainder of the commentary. 906: * The line buffer contains "; Description" 907: */ 908: { 909: register int skipit; 910: 911: skipit = 0; 912: indent(&line[2]); 913: while (getline(infd)) { 914: if (line[0] != ';') { 915: bug("Line doesn't start with a ';'", line); 916: continue; 917: } 918: else if (line[1] == '-') { 919: save(".lm -8.fill", FALSE); 920: fill_flag = 1; 921: return; 922: } 923: else if (line[1] == EOS) { 924: if (!skipit) 925: save(&line[1], 1); 926: } 927: else if (line[1] == ' ') { 928: if (line[2] < 'A') { 929: if (!skipit) { 930: unjust(); 931: } 932: } 933: else { 934: if (!wizard) { 935: if (match(&line[2], "internal")) 936: skipit++; 937: else skipit = 0; 938: } 939: if (!skipit) 940: indent(&line[2]); 941: } 942: continue; 943: } 944: else if (line[1] == '\t') { 945: if (skipit) 946: continue; 947: else if (line[2] <= ' ') { 948: nofill(); 949: save(&line[2], TRUE); 950: } 951: else { 952: fill(); 953: save(&line[2], TRUE); 954: } 955: continue; 956: } 957: else 958: bug("Ununderstandable line", line); Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 23 959: } 960: bug("Unexpected end of file", NULL); 961: save(".lm -8.fill", FALSE); 962: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 24 963: 964: unjust() 965: /* 966: * Unjustify the line 967: */ 968: { 969: register char *lp; 970: 971: line[0] = REALSHARP; 972: for (lp = line + 1; *lp == ' ';) 973: *lp++ = REALSHARP; 974: indent(line); 975: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 25 976: 977: save(text, dotflag) 978: char *text; 979: int dotflag; 980: /* 981: * Write the text to the work file. If dotflag is set, initial '.' 982: * is quoted. 983: */ 984: { 985: if (dotflag && *text == '.') 986: putc('_', workfd); 987: fprintf(workfd, "%s\n", (*text != 0) ? text : ".s"); 988: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 26 989: 990: indent(text) 991: char *text; 992: /* 993: * Save an indented text item 994: */ 995: { 996: 997: sprintf(temptext, ".i -8;%s", text); 998: save(temptext, FALSE); 999: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 27 1000: 1001: fill() 1002: /* 1003: * Turn on fill mode 1004: */ 1005: { 1006: if (!fill_flag) { 1007: save(".fill", FALSE); 1008: fill_flag = TRUE; 1009: } 1010: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 28 1011: 1012: nofill() 1013: /* 1014: * Turn off fill mode 1015: */ 1016: { 1017: if (fill_flag) { 1018: save(".nf", FALSE); 1019: fill_flag = FALSE; 1020: } 1021: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 29 1022: 1023: int 1024: match(text, lookfor) 1025: register char *text; 1026: register char *lookfor; 1027: /* 1028: * If the beginning of text matches lookfor (ignoring case), followed by a 1029: * no-alphanumeric, returns pointer to the first thing after lookfor; 1030: * otherwise, returns NULL. lookfor must always be in lowercase. 1031: */ 1032: { 1033: while (*lookfor != EOS) { 1034: if (tolower(*text++) != *lookfor++) 1035: return(NULL); 1036: } 1037: return(isalnum(*text) ? NULL : text); 1038: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 30 1039: 1040: output() 1041: /* 1042: * Write out all records 1043: */ 1044: { 1045: register int namlen; 1046: register char *tp; 1047: int stars; 1048: register ITEM *ep; 1049: 1050: if (cflag) { 1051: puts(layout); 1052: } 1053: for (ep = entries; ep < free_entry; ep++) { 1054: fseek(workfd, ep->e_place, 0); 1055: if (!getline(workfd)) { 1056: bug("Can't read record", NULL); 1057: fprintf(stderr, "rfa = %08o\n", ep->e_place); 1058: continue; 1059: } 1060: if (uflag) { 1061: printf(".tp 10.s 4.lm +8.nf\n.i -8 ;%s", 1062: ep->e_name); 1063: if (line[0] != '!') 1064: printf("\t%s", line); 1065: } 1066: else { 1067: printf(".st ########%s", ep->e_name); 1068: if (line[0] != '!') { 1069: namlen = 8 - (strlen(ep->e_name) & 7); 1070: while (--namlen >= 0) 1071: putchar('#'); 1072: printf("%s", line); 1073: } 1074: printf("\n.pg\n.hl 1 "); 1075: if (line[0] != '!') 1076: printf("^&%s\\&\n", line); 1077: else 1078: printf("#\n"); 1079: printf(".s 2\n.c ;"); 1080: namlen = 4; 1081: for (tp = ep->e_name; *tp != EOS; tp++) { 1082: if (*tp == '_') /* Hack */ 1083: tp++; 1084: namlen++; 1085: } 1086: for (stars = namlen; --stars >= 0;) 1087: putchar('*'); 1088: printf("\n.c ;* %s *\n.c ;", ep -> e_name); 1089: for (stars = namlen; --stars >= 0;) 1090: putchar('*'); 1091: } 1092: printf("\n.s 2\n"); 1093: if (uflag) { 1094: /* 1095: * Usage Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 31 1096: */ 1097: while (getline(workfd) && 1098: line[0] != '!' && line[1] != 'b'); 1099: while (getline(workfd)) { 1100: if (line[0] == '!' && (line[1] == 'e' 1101: || line[1] == '!')) 1102: break; 1103: writeout(line); 1104: } 1105: } 1106: else { 1107: /* 1108: * Not usage 1109: */ 1110: while (getline(workfd)) { 1111: if (line[0] == '!') { 1112: if (line[1] == '!') { 1113: break; 1114: } 1115: } 1116: else if (cflag && line[0] == '.') 1117: puts(line); 1118: else 1119: writeout(line); 1120: } 1121: } 1122: puts(interfile); 1123: } 1124: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 32 1125: 1126: writeout(text) 1127: char *text; 1128: /* 1129: * Write this line to the .rno output, watching out for weird .rno 1130: * characters. Note: to put a wierd .rno character out, flag it with 1131: * an initial underline. 1132: */ 1133: { 1134: register char c; 1135: register char *tp; 1136: 1137: tp = text; 1138: while ((c = *tp++) != 0) { 1139: switch (c) { 1140: case REALSHARP: 1141: putchar('#'); 1142: break; 1143: case '_': 1144: if (tp - text == 1 && *tp == '.') 1145: goto ignore; 1146: case '%': 1147: case '&': 1148: case '\\': 1149: case '^': 1150: case '#': 1151: putchar('_'); 1152: default: 1153: ignore: putchar(c); 1154: } 1155: } 1156: putchar('\n'); 1157: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 33 1158: 1159: getline(fd) 1160: FILE *fd; 1161: /* 1162: * Read a line from fd into line[]. Return 0 at end of file. 1163: */ 1164: { 1165: register char *lp; 1166: 1167: if (fgets(line, sizeof line, fd) == NULL) { 1168: if (debug) 1169: fprintf(stderr, "* end of \"%s\" after %u lines\n", 1170: macfile, linect); 1171: return(0); 1172: } 1173: linect++; 1174: /* 1175: * Erase trailing , spaces, and tabs. Note that 1176: * line[strlen(line)] is the newline. 1177: */ 1178: for (lp = &line[strlen(line)]; lp > line && lp[-1] <= ' '; lp--); 1179: *lp = 0; 1180: if (debug > 1) 1181: fprintf(stderr, "\"%s\"\n", line); 1182: return(1); 1183: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 34 1184: 1185: char 1186: *skipbl(text) 1187: register char *text; 1188: /* 1189: * Skip blanks, return -> first non blank (or -> trailing null) 1190: */ 1191: { 1192: register char c; 1193: 1194: while ((c = *text) && c <= ' ') 1195: text++; 1196: return(text); 1197: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 35 1198: 1199: bug(mess, arg) 1200: char *mess; 1201: char *arg; 1202: { 1203: fprintf(stderr, "?GETRNO-E-Confused at %s", section); 1204: if (macfile[0]) 1205: fprintf(stderr, " at line %u in file \"%s\"\n", 1206: linect, macfile); 1207: fprintf(stderr, "%s", mess); 1208: if (arg != NULL) 1209: fprintf(stderr, ": \"%s\"", arg); 1210: fprintf(stderr, "\n"); 1211: } 1212: 1213: cant(what, who) 1214: char *what; 1215: char *who; 1216: /* 1217: * Can't open the file, die 1218: */ 1219: { 1220: error("?Can't open %s file \"%s\", fatal.\n", what, who); 1221: } Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 36 A 116 120 125 184 227 233 289 AFTER 125 All 283 An 98 268 And 96 Another 167 Anything 51 51 55 Avoid 140 Because 212 Blank 26 Build 11 C 26 28 60 62 266 268 274 278 285 Comments 12 Conseque 261 Convert 12 DOCUMENT 10 64 73 Debuggin 24 Decus 266 Descript 176 178 Document 11 236 Due 276 E 32 45 ELAST 331 776 EOS 315 483 489 496 508 547 554 563 626 636 682 715 719 761 923 1033 1081 EXACTLY 241 Each 246 End 188 Exit 225 FALSE 316 390 516 517 538 539 589 601 641 646 647 652 653 661 669 683 697 698 708 723 818 856 863 868 869 871 872 873 879 919 961 998 1007 1018 1019 FILE 349 350 467 1160 Followin 252 For 128 221 223 Format 12 Further 271 Getrno 53 88 140 266 Header 200 Hence 142 However 106 I 267 ITEM 327 329 330 770 771 1048 If 46 190 196 197 In 76 Index 166 167 Internal 193 It 126 202 283 LINESIZE 322 344 345 348 353 Lines 122 Macro 30 158 160 190 269 271 274 285 Martin 296 Minow 296 Mixed 210 210 NAMESIZE 320 325 352 782 785 NENTRIES 319 329 331 777 NULL 415 422 424 430 434 436 439 457 510 523 530 537 645 651 722 840 867 899 960 1035 1037 1056 1167 1208 Normal 111 Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 37 Note 36 48 71 144 260 Perhaps 278 Process 42 REALSHAR 318 971 973 1140 RNO 45 260 RSTS 32 45 260 Records 256 Runoff 12 Section 100 Set 205 Short 166 Some 273 Source 11 12 Start 164 169 Subtitle 216 Switches 21 TRUE 317 340 342 383 524 588 609 639 654 789 790 851 862 892 949 953 1008 TSK 45 The 101 113 160 172 181 202 218 232 234 238 241 247 252 There 45 280 292 They 100 This 258 Title 162 215 250 To 12 248 Usage 34 169 171 258 V7 45 Various 85 Version 260 WORKFILE 321 430 431 457 458 Within 93 Wizard 38 Workfile 244 Write 40 _ 133 a 20 42 48 76 95 98 101 111 111 116 120 120 126 184 185 190 253 258 260 280 280 280 289 abbrevia 34 above 126 144 actually 239 after 233 aid 266 alignmen 127 all 108 128 241 allow 248 284 allows 258 always 95 an 34 45 248 and 35 42 57 101 102 103 112 112 117 127 141 212 227 239 267 270 277 285 any 102 107 179 289 ap 375 379 380 381 434 436 437 appear 233 appears 107 109 233 are 21 93 102 103 114 122 252 257 267 274 283 292 arg 1199 1201 1208 1209 argc 370 371 378 406 412 433 argv 370 372 379 408 414 416 422 424 434 as 42 85 104 123 125 142 144 172 203 213 258 260 assumed 95 202 at 77 96 108 205 208 209 Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 38 attempt 268 273 author 137 155 294 autosubt 79 avoid 273 b 26 bad 133 150 be 47 48 71 100 108 112 116 142 144 180 181 195 196 198 202 213 218 228 232 248 256 278 280 283 285 become 26 becomes 98 been 268 273 before 107 120 begin 100 beginnin 77 105 below 32 123 206 between 35 88 122 257 blank 120 blanks 125 body 93 both 284 bug 260 522 529 536 629 831 840 896 899 915 958 960 1056 1199 bugs 264 building 248 277 builds 246 built 227 but 120 173 by 228 238 253 byte 256 bytes 254 c 28 36 48 57 376 381 403 420 476 482 482 483 488 488 493 494 1134 1138 1139 1153 1192 1194 1194 calls 38 can 141 144 228 272 cant 416 431 437 458 1213 card 96 cases 128 centered 233 cflag 340 383 390 573 1050 1116 change 53 chapter 261 characte 95 96 111 125 127 closely 269 column 94 96 100 111 112 116 120 171 178 columns 114 117 207 come 104 command 98 commands 77 85 88 126 comment 71 205 206 220 222 224 230 commenta 164 188 comments 20 241 communic 256 compiled 236 compilin 20 concat 643 649 722 865 confused 141 consisti 184 185 284 containi 35 252 253 copy 782 785 793 correct 46 Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 39 could 285 count 793 796 801 counting 107 ctime 238 556 ctype 312 d 24 data 88 105 106 date 227 230 232 234 238 239 dead 96 debug 337 386 441 448 455 1168 1180 define 76 315 316 317 318 319 320 321 322 331 defined 125 delete 463 dependin 93 descript 18 166 167 diagnost 131 147 287 directly 140 distribu 260 docline 665 672 docstuff 574 592 document 34 93 227 266 267 270 277 290 does 289 doheader 454 499 dotflag 977 979 985 e 94 267 e_name 325 779 782 782 785 1062 1067 1069 1081 1088 e_place 326 781 781 784 1054 1057 each 88 easily 144 empty 98 endif 69 298 313 805 ends 106 entries 329 330 331 778 1053 environm 76 ep 770 778 778 779 779 780 784 785 1048 1053 1053 1053 1054 1057 1062 1067 1069 1081 1088 error 45 407 413 420 777 1220 errors 86 etc 138 156 exact 49 272 exactly 172 example 104 123 128 144 except 179 expect 142 explanat 292 explicit 262 falls 95 fatal 86 fclose 453 462 562 fd 466 467 478 1159 1160 1167 feof 607 fgetname 461 478 fgets 1167 file 40 42 42 60 77 108 133 150 158 197 200 202 218 246 258 289 filename 440 466 files 20 28 30 89 276 283 fill 140 141 179 181 692 707 721 952 1001 fill_fla 342 588 654 790 873 920 1006 1008 1017 1019 filled 112 113 117 Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 40 first 94 104 113 117 125 247 253 256 fixdoc 48 57 flag 32 47 85 190 218 571 581 583 flags 104 flavors 85 fnext 439 followed 253 followin 62 77 88 160 197 247 follows 197 203 fopen 430 457 510 form 49 122 205 format 60 62 158 191 200 202 234 238 241 244 248 272 fprintf 442 449 456 511 608 821 987 1057 1169 1181 1203 1205 1207 1209 1210 free_ent 330 776 1053 freopen 414 from 88 fseek 1054 ftell 333 753 fwild 436 general 270 generall 268 generate 184 186 get 46 141 getline 519 602 615 736 820 829 913 1055 1097 1099 1110 1159 getrno 11 16 20 76 102 128 267 given 190 h 16 42 310 312 hack 32 handled 93 144 285 has 116 120 126 141 247 261 268 273 have 49 62 121 160 262 262 289 hd 81 82 210 365 365 head 83 106 107 365 header 16 42 47 202 218 348 408 508 510 512 515 header_t 65 headers 79 headings 210 261 heads 100 101 hopefull 292 i 94 133 134 374 378 378 378 379 406 408 412 414 416 422 424 433 433 433 434 ifdef 10 64 73 792 ifndef 311 ignore 1145 1153 ignored 36 images 96 in 26 45 47 94 100 101 104 111 112 116 123 128 171 178 178 180 202 238 246 248 253 256 260 266 271 273 274 277 278 283 793 795 802 include 310 312 included 232 indent 912 940 974 990 index 12 66 66 166 248 indicati 227 infd 349 436 439 440 510 519 562 602 607 615 736 820 829 913 info 230 232 233 234 informat 35 169 171 195 196 228 247 250 257 258 initiato 198 input 160 272 input_fi 16 Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 41 insert 76 inserted 228 238 inserts 88 interdep 267 interest 270 interfil 367 459 1122 internal 38 195 involved 276 inwizard 504 516 521 524 528 535 538 is 45 47 95 105 126 126 172 173 174 190 202 212 232 234 234 238 241 253 260 269 270 271 276 277 281 289 isalnum 1037 isgraph 662 isspace 545 547 554 it 48 53 112 128 141 142 172 197 234 238 278 just 184 justifie 100 112 keeps 140 kwik 166 last 252 lastep 771 776 778 780 780 781 781 782 782 layout 364 1051 leadin 71 leading 121 122 125 126 173 181 left 100 208 212 less 270 librarie 266 284 library 267 270 277 line 98 116 120 125 162 179 184 185 190 227 232 234 247 253 280 344 461 463 520 527 534 543 544 545 545 546 553 559 603 604 616 617 621 626 636 638 660 662 663 680 688 690 698 704 704 708 715 722 737 825 825 830 831 834 836 839 843 844 857 859 860 865 868 877 882 890 892 896 912 914 915 918 923 925 927 928 935 940 944 947 949 953 958 971 972 974 1063 1064 1068 1072 1075 1076 1098 1098 1100 1100 1101 1103 1111 1112 1116 1117 1119 1167 1167 1178 1178 1178 1181 linect 336 443 518 1170 1173 1206 lines 26 46 47 93 128 205 207 246 252 list 20 lm 22 44 80 91 132 135 148 153 208 365 longer 277 look 57 lookfor 1024 1026 1033 1034 lp 506 546 547 547 548 549 550 551 553 554 554 556 677 715 715 715 716 716 717 718 719 733 737 738 740 745 746 755 756 757 762 814 969 972 972 973 1165 1178 1178 1178 1178 1179 m 30 macfile 346 440 442 515 563 608 629 630 645 822 867 1170 1204 1206 made 268 273 main 370 maintain 127 make 268 manipula 140 many 292 margin 208 209 212 marked 47 match 520 527 534 553 603 616 621 638 660 663 738 844 857 859 860 935 1024 may 142 195 218 256 meaning 102 mess 1199 1200 1207 message 289 messages 292 Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 42 might 283 minor 272 mixed 82 83 284 365 365 mode 118 140 141 172 179 181 271 274 278 283 284 modes 142 modules 285 more 85 144 246 269 mundane 224 must 49 62 71 104 160 233 n 365 365 365 365 name 162 250 name_tex 352 630 650 754 755 755 760 760 779 785 namlen 1045 1069 1070 1080 1084 1086 1089 next 95 106 198 nf 172 nhy 91 no 79 181 196 277 nofill 118 141 705 948 1012 nomacarg 311 non 94 95 120 223 none 86 normally 122 281 not 46 107 142 173 181 190 198 234 257 262 277 289 nothing 108 np 734 751 754 755 756 758 760 761 numbers 46 262 o 16 40 of 20 77 85 85 86 89 93 103 105 122 140 164 169 184 185 188 190 195 205 218 234 234 241 270 272 276 284 on 93 113 127 142 227 232 274 one 85 242 246 only 35 101 105 221 223 242 op 475 488 488 488 489 493 494 496 option 36 276 optional 228 232 options 16 or 51 85 111 116 141 173 197 246 262 order 76 other 107 111 128 133 150 228 292 otherwis 281 out 793 794 802 outbuf 466 468 493 output 16 34 38 40 42 77 105 108 116 171 173 178 180 182 196 198 257 460 1040 own 274 package 38 195 page 46 207 262 pair 88 pairs 123 paper 113 part 234 particul 271 parts 218 pass 280 passes 257 per 207 perforat 206 perror 512 pg 80 365 Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 43 place 351 753 784 post 57 preceeds 196 prepend 42 printed 101 289 printf 551 555 559 1061 1064 1067 1072 1074 1076 1078 1079 1088 1092 probably 270 process 444 566 processe 281 283 processi 57 268 269 274 284 produce 272 program 47 48 271 ps 80 207 365 put 95 putc 986 putchar 1071 1087 1090 1141 1151 1153 1156 puts 459 1051 1117 1122 quote 127 r 32 46 rather 40 reads 20 recogniz 48 103 record 253 records 246 regardle 103 responsi 126 rest 585 903 results 142 273 returned 238 right 209 rm 80 91 209 365 rno 172 252 rstshack 335 393 542 runoff 20 45 85 118 126 127 141 179 185 202 261 280 s 26 113 117 133 134 136 same 57 283 save 589 641 646 647 652 653 683 697 698 708 723 789 836 863 868 869 871 872 879 892 919 925 949 953 961 977 998 1007 1018 savename 640 765 861 savetitl 617 740 745 scanned 89 section 68 101 106 107 198 225 347 578 580 584 628 1203 section_ 67 see 32 select 218 selected 36 self 292 semicolo 173 sensitiv 271 separate 258 set 47 118 141 212 shift 142 should 203 212 248 262 278 280 shown 104 123 signal 195 single 233 size 276 skip 678 687 687 687 688 690 698 702 704 704 708 Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 44 skipbl 354 604 617 737 740 762 1186 skipit 505 517 525 532 532 539 541 599 601 663 664 816 818 835 851 883 891 909 911 924 929 936 937 939 945 so 238 284 some 228 somethin 134 152 source 20 26 28 30 60 62 158 190 261 space 94 98 112 113 116 117 120 121 185 233 242 spaces 174 special 102 specific 127 sprintf 997 st 216 stars 1047 1086 1086 1089 1089 start 112 195 203 starting 171 178 179 starts 94 111 120 stderr 442 449 456 511 608 821 1057 1169 1181 1203 1205 1207 1209 1210 stdio 310 stdout 40 414 strcmp 779 strcpy 408 515 630 631 762 streq 604 stripped 114 117 strippin 125 strlen 1069 1178 stuff 133 150 style 79 268 269 274 subtitle 212 such 45 127 supporte 278 synopsis 14 syntax 160 t 47 51 51 55 215 tab 73 95 95 111 116 173 250 tabcase 689 703 temptext 345 478 482 484 643 646 649 652 722 723 997 998 text 66 68 94 111 197 252 977 978 985 987 987 990 991 997 1024 1025 1034 1037 1037 1126 1127 1137 1144 1186 1187 1194 1195 1196 than 40 111 that 46 71 105 113 116 117 120 144 179 260 281 284 the 35 42 45 46 47 48 49 62 68 71 76 77 77 88 88 93 93 94 95 104 105 105 106 106 113 113 116 117 121 123 142 144 160 173 190 191 195 198 212 218 227 227 232 234 238 239 241 246 247 248 253 256 257 260 266 267 268 269 269 271 272 272 276 276 276 283 their 94 them 86 then 142 there 260 these 85 they 103 257 this 108 122 197 248 252 273 thought 96 through 280 tied 269 time 239 title 11 32 46 48 65 162 247 247 579 728 title_te 353 631 651 762 789 789 titles 212 262 Cross Reference of: GETRNO.C;1 Tue May 06 17:21:57 1986 Page 45 titlesta 598 614 618 624 655 to 20 40 42 48 53 76 95 102 118 127 127 141 195 198 202 212 218 256 257 266 268 269 272 273 276 280 280 283 today 236 tolower 381 494 544 1034 too 38 tool_nam 65 top 205 toupper 716 tp 58 75 129 145 474 482 482 484 488 493 1046 1081 1081 1081 1082 1083 1135 1137 1138 1144 1144 track 140 trailing 101 two 254 u 34 276 uc 80 365 uflag 338 396 583 1060 1093 unexpect 273 uniform 76 unjust 847 884 930 964 unless 108 up 198 upper 101 usage 169 276 581 808 usage_se 815 828 835 846 850 856 862 878 882 889 used 105 122 195 218 256 277 useful 269 283 variatio 272 very 271 vms 792 w 38 105 108 190 warning 289 was 105 227 266 way 280 were 96 what 94 1213 1214 1220 where 94 whether 140 which 227 232 who 1213 1215 1220 whose 125 will 47 53 57 76 85 100 108 112 112 116 121 128 180 181 184 186 196 198 232 with 101 102 111 116 118 120 180 256 260 within 280 wizard 190 218 220 225 339 399 525 638 642 662 845 864 934 wizards 221 223 workfd 350 430 453 457 461 462 753 986 987 1054 1055 1097 1099 1110 workfile 246 writeout 1103 1119 1126 writing 258 written 172 213 257 266 you 96 128 141 142 262 274 your 126 261 274