Home » Archimedes archive » Acorn User » AU 1998-12.adf » Regulars » StarInfo/Fletcher/reformc/c/reformc
StarInfo/Fletcher/reformc/c/reformc
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Archimedes archive » Acorn User » AU 1998-12.adf » Regulars |
Filename: | StarInfo/Fletcher/reformc/c/reformc |
Read OK: | ✔ |
File size: | 357C bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
/******************************************************************* RCS * $Id: c.reformc 1.2 98/04/04 14:36:05 gerph Exp $ * File: reformc.c * Purpose: Reformats C code for various documentation purposes * Author: Justin Fletcher * Date: 12 Mar 1998 * Note: This source code is supplied for recompilation purposes * only. Distribution in modified form requires the * permission of the author. Contact <gerph@innocent.com>. * * $Log: c.reformc $ * Revision 1.2 98/04/04 14:36:05 gerph * Added \0 escapes and character bracketing (char_pre, char_post). * * Revision 1.1 98/04/04 13:25:03 gerph * Initial revision * ******************************************************************/ /* test // hello Start of program */ // Honest it is #include <ctype.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #define ERROR(x) { fprintf(stderr,x "\n"); exit(1); } char *DIRECTIVE_PRE =""; char *DIRECTIVE_POST =""; char *STRING_PRE =""; char *STRING_POST =""; char *CHAR_PRE =""; char *CHAR_POST =""; char *COMMENT_PRE =""; char *COMMENT_POST =""; char *CPPCOMMENT_PRE =""; char *CPPCOMMENT_POST=""; char *escape =""; char **escapeto =NULL; char *LINE_PRE =""; char *LINE_POST =""; char *DOC_PRE =""; char *DOC_POST =""; typedef struct { char *name; enum { string, array } type; char **storage; int size; } lookup_t; lookup_t lookup[] = { /* name, type of storage, place to store result, size of result atm */ { "directive_pre", string, &DIRECTIVE_PRE, 0 }, { "directive_post", string, &DIRECTIVE_POST, 0 }, { "string_pre", string, &STRING_PRE, 0 }, { "string_post", string, &STRING_POST, 0 }, { "char_pre", string, &CHAR_PRE, 0 }, { "char_post", string, &CHAR_POST, 0 }, { "comment_pre", string, &COMMENT_PRE, 0 }, { "comment_post", string, &COMMENT_POST, 0 }, { "cppcomment_pre", string, &CPPCOMMENT_PRE, 0 }, { "cppcomment_post", string, &CPPCOMMENT_POST, 0 }, { "escapes", string, &escape, 0 }, { "escape", array, (char**)&escapeto, 0 }, { "line_pre", string, &LINE_PRE, 0 }, { "line_post", string, &LINE_POST, 0 }, { "doc_pre", string, &DOC_PRE, 0 }, { "doc_post", string, &DOC_POST, 0 } }; /*********************************************** <c> Gerph ********* Function: read_desc Description: Reads the description file Parameters: file-> filename Returns: none ******************************************************************/ void read_desc(char *file); /*********************************************** <c> Gerph ********* Function: sendescaped Description: Send an escaped sequence to the file; 1 1 -> 0 1 2 -> 1 Parameters: output-> output file string-> the string to write Returns: none ******************************************************************/ void sendescaped(FILE *output,char *string) { int l=strlen(string); int i; if (l!=0) { for (i=0;i<l;i++) { if (string[i]=='\x01') { char c; i++; c=string[i]; /* the character we really want follows */ fputc(c-1,output); /* but it's one less */ } else fputc(string[i],output); } } } /*********************************************** <c> Gerph ********* Function: stricmp Description: Case insensitive comparison Parameters: str1 = one string str2 = the other one Returns: <0 if str1 < str2 >0 if str1 > str2 =0 if str1 = str2 ******************************************************************/ int stricmp(char *str1,char *str2) { char one,two; int index; int len=strlen(str1); /* speeds things up a tad */ for(index=0; index<=len; index++) { one=tolower(str1[index]); two=tolower(str2[index]); if (one!=two) { if (one<two) return -1; else return 1; } } return 0; } /*********************************************** <c> Gerph ********* Function: main Description: Does the main stuff (oddly!) Parameters: as normal Returns: as normal7 ******************************************************************/ int main(int argc,char *argv[]) { int incomment=0; int incppcomment=0; int inquotes=0; int insquote=0; int indirective=0; int last='\n'; FILE *output; FILE *input; char *infile; char *outfile; if ( (argc!=4) ) { fprintf(stderr,"ReformC, v1.01 (c) Justin Fletcher\n"); ERROR("Syntax: reformc <desc> <input> <output>"); } infile=argv[2]; outfile=argv[3]; read_desc(argv[1]); /* read the description */ input=fopen(infile,"r"); output=fopen(outfile,"w"); if (input==NULL) { ERROR("Could not open input file"); } if (output==NULL) { ERROR("Could not open output file"); } sendescaped(output,DOC_PRE); sendescaped(output,LINE_PRE); while (!feof(input)) { int c=fgetc(input); /* read a character */ if (c!=EOF) { if (incppcomment) { switch (c) { case '\\': /* next character is literal */ fputc(c,output); c=fgetc(input); break; case '\n': /* end of line */ incppcomment=0; sendescaped(output,CPPCOMMENT_POST); sendescaped(output,LINE_POST); } } else { switch (c) { case '#': /* a # directive */ if (last=='\n') { indirective=1; sendescaped(output,DIRECTIVE_PRE); } break; case '\'': /* a single quote */ if ( (!inquotes) && (!incomment) ) { if (insquote) { fprintf(output,"\'"); /* we have to do the quote then post */ sendescaped(output,CHAR_POST); c=-1; /* ensure we don't send this one */ } else sendescaped(output,CHAR_PRE); insquote=!insquote; } break; case '\"': /* a double quote */ if ( (!insquote) && (!incomment) ) { inquotes=!inquotes; if (inquotes) sendescaped(output,STRING_PRE); else { fprintf(output,"\""); /* do the quote then the post */ sendescaped(output,STRING_POST); c=-1; /* stop us sending the quote */ } } break; case '/': /* a slash */ if ( (last=='/') && (!inquotes) && (!incomment) ) { if (indirective) { indirective=0; sendescaped(output,DIRECTIVE_POST); } incppcomment=1; fseek(output,-1,1); /* move back a character */ sendescaped(output,CPPCOMMENT_PRE); fprintf(output,"/"); } else if ( (last=='*') && (!inquotes) && (incomment) ) { incomment=0; /* we've dropped out of the comment */ fprintf(output,"/"); sendescaped(output,COMMENT_POST); c=-1; } break; case '*': /* a star, probably following a / */ if ( (last=='/') && (!inquotes) && (!incomment) ) { if (indirective) { indirective=0; sendescaped(output,DIRECTIVE_POST); } incomment=1; fseek(output,-1,1); /* move back a character */ sendescaped(output,COMMENT_PRE); fprintf(output,"/"); } break; case '\\': /* next character is literal */ fputc(c,output); c=fgetc(input); break; case ' ': case '\t': /* whitespace */ if (indirective==2) { /* we've had all the text of the directive string */ sendescaped(output,DIRECTIVE_POST); indirective=0; } break; case '\n': /* a new line */ if (indirective!=0) { indirective=0; sendescaped(output,DIRECTIVE_POST); } sendescaped(output,LINE_POST); break; default: /* any other character */ if (indirective==1) indirective=2; } } last=c; if (c!=-1) { char *i; if ( (i=strchr(escape,c)) == NULL) { fputc(c,output); if (c=='\n') sendescaped(output,LINE_PRE); } else { sendescaped(output,escapeto[i-escape]); } } } } sendescaped(output,LINE_POST); sendescaped(output,DOC_POST); fclose(output); fclose(input); } /*********************************************** <c> Gerph ********* Function: read_desc Description: Read the description of for this type Parameters: file-> filename to read Returns: none ******************************************************************/ void read_desc(char *file) { FILE *in=fopen(file,"r"); if (in==NULL) ERROR("Description file not found"); while (!feof(in)) { char str[256]; char *x=fgets(str,256,in); if (x!=NULL) { char *name; char *value; { int l=strlen(x); if (x[l-1]=='\n') x[l-1]='\0'; } /* strip terminator */ value=strchr(x,'"'); /* find the end of the string */ if (value!=NULL) { int num=-1; int entry; char *y; value[0]=0; /* terminate it */ value++; { int l=strlen(x); while( (x[l-1]==' ') || (x[l-1]=='\t') ) x[--l]='\0'; /* take a character off */ } name=x; /* now we parse the string we read */ { char *i=value; char *o=value; int c; while ( ( (c=i[0])!='"') && (c!='\0') ) { if (c=='\\') { i=&i[1]; /* next character */ c=i[0]; /* and read it */ switch (c) { case 'n': c='\n'; break; case 't': c='\t'; break; case 'b': c='\b'; break; case 'f': c='\f'; break; case 'e': c='\x1B'; break; case '0': o[0]='\x01'; o=&o[1]; /* assign and move to next */ c='\x01'; /* a 0 code is actually a 1 followed by a 1 */ break; case 'x': { const char hex[]="0123456789abcdef"; c=(strchr(hex,tolower(i[1]))-hex)*16; c+=strchr(hex,tolower(i[2]))-hex; if (i[1]==0) i=&i[0]; else if (i[2]==0) i=&i[1]; else i=&i[2]; } if (c==1) { o[0]='\x01'; o=&o[1]; /* assign and move to next */ c='\x02'; } /* a 1 code is actually a 1 followed by a 2 */ break; } } i=&i[1]; o[0]=c; o=&o[1]; /* assign and move to next */ } if (i[0]=='"') o[0]='\0'; else ERROR("Malformed description line"); } if ( (y=strchr(name,' '))!=NULL) { y[0]='\0'; num=atoi(&y[1]); /* an array reference */ } /* printf("Attempting to find %s\n",name); */ for (entry=0; entry< (sizeof(lookup)/sizeof(lookup_t)); entry++) { if (stricmp(lookup[entry].name,name)==0) { /* they are the same */ if (lookup[entry].type==string) { /* it's a string entry */ if (lookup[entry].size==1) { free(lookup[entry].name); /* lose the old one */ fprintf(stderr,"Redefinition of %s\n",lookup[entry].name); } *lookup[entry].storage=malloc(strlen(value)+1); strcpy(*lookup[entry].storage,value); /* copy it there */ lookup[entry].size=1; /* and mark it as allocated */ /* printf("Set string %s to %s\n", */ /* lookup[entry].name,*lookup[entry].storage); */ } else { /* it's an array entry */ char **array; if (lookup[entry].size==0) { if (lookup[entry-1].size==0) ERROR("Attempt to allocate to unassigned array"); *lookup[entry].storage=malloc(sizeof(char *)* strlen(*lookup[entry-1].storage)); lookup[entry].size=strlen(*lookup[entry-1].storage); /* and mark it as allocated */ } if (num>lookup[entry].size) { /* if it's bigger than current, it's an error */ ERROR("Attempt to store outside array bounds"); } array=(char **)*lookup[entry].storage; /* printf("%p %p\n",array,escapeto); */ array[num-1]=malloc(strlen(value)+1); strcpy(array[num-1],value); /* copy it there */ /* printf("Set array %s [%i] to %s\n", */ /* lookup[entry].name,num,array[num-1]); */ } } } /* for loop to find entry */ } } } fclose(in); }
00000000 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |/***************| 00000010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00000040 2a 2a 2a 2a 20 52 43 53 0a 20 2a 20 24 49 64 3a |**** RCS. * $Id:| 00000050 20 63 2e 72 65 66 6f 72 6d 63 20 31 2e 32 20 39 | c.reformc 1.2 9| 00000060 38 2f 30 34 2f 30 34 20 31 34 3a 33 36 3a 30 35 |8/04/04 14:36:05| 00000070 20 67 65 72 70 68 20 45 78 70 20 24 0a 20 2a 20 | gerph Exp $. * | 00000080 46 69 6c 65 3a 20 20 20 20 20 72 65 66 6f 72 6d |File: reform| 00000090 63 2e 63 0a 20 2a 20 50 75 72 70 6f 73 65 3a 20 |c.c. * Purpose: | 000000a0 20 52 65 66 6f 72 6d 61 74 73 20 43 20 63 6f 64 | Reformats C cod| 000000b0 65 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64 6f |e for various do| 000000c0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 70 75 72 70 |cumentation purp| 000000d0 6f 73 65 73 0a 20 2a 20 41 75 74 68 6f 72 3a 20 |oses. * Author: | 000000e0 20 20 4a 75 73 74 69 6e 20 46 6c 65 74 63 68 65 | Justin Fletche| 000000f0 72 0a 20 2a 20 44 61 74 65 3a 20 20 20 20 20 31 |r. * Date: 1| 00000100 32 20 4d 61 72 20 31 39 39 38 0a 20 2a 20 4e 6f |2 Mar 1998. * No| 00000110 74 65 3a 20 20 20 20 20 54 68 69 73 20 73 6f 75 |te: This sou| 00000120 72 63 65 20 63 6f 64 65 20 69 73 20 73 75 70 70 |rce code is supp| 00000130 6c 69 65 64 20 66 6f 72 20 72 65 63 6f 6d 70 69 |lied for recompi| 00000140 6c 61 74 69 6f 6e 20 70 75 72 70 6f 73 65 73 0a |lation purposes.| 00000150 20 2a 20 20 20 20 20 20 20 20 20 20 20 6f 6e 6c | * onl| 00000160 79 2e 20 44 69 73 74 72 69 62 75 74 69 6f 6e 20 |y. Distribution | 00000170 69 6e 20 6d 6f 64 69 66 69 65 64 20 66 6f 72 6d |in modified form| 00000180 20 72 65 71 75 69 72 65 73 20 74 68 65 0a 20 2a | requires the. *| 00000190 20 20 20 20 20 20 20 20 20 20 20 70 65 72 6d 69 | permi| 000001a0 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 61 75 74 |ssion of the aut| 000001b0 68 6f 72 2e 20 43 6f 6e 74 61 63 74 20 3c 67 65 |hor. Contact <ge| 000001c0 72 70 68 40 69 6e 6e 6f 63 65 6e 74 2e 63 6f 6d |rph@innocent.com| 000001d0 3e 2e 0a 20 2a 0a 20 2a 20 24 4c 6f 67 3a 09 63 |>.. *. * $Log:.c| 000001e0 2e 72 65 66 6f 72 6d 63 20 24 0a 20 2a 20 52 65 |.reformc $. * Re| 000001f0 76 69 73 69 6f 6e 20 31 2e 32 20 20 39 38 2f 30 |vision 1.2 98/0| 00000200 34 2f 30 34 20 20 31 34 3a 33 36 3a 30 35 20 20 |4/04 14:36:05 | 00000210 67 65 72 70 68 0a 20 2a 20 41 64 64 65 64 20 5c |gerph. * Added \| 00000220 30 20 65 73 63 61 70 65 73 20 61 6e 64 20 63 68 |0 escapes and ch| 00000230 61 72 61 63 74 65 72 20 62 72 61 63 6b 65 74 69 |aracter bracketi| 00000240 6e 67 20 28 63 68 61 72 5f 70 72 65 2c 20 63 68 |ng (char_pre, ch| 00000250 61 72 5f 70 6f 73 74 29 2e 0a 20 2a 0a 20 2a 20 |ar_post).. *. * | 00000260 52 65 76 69 73 69 6f 6e 20 31 2e 31 20 20 39 38 |Revision 1.1 98| 00000270 2f 30 34 2f 30 34 20 20 31 33 3a 32 35 3a 30 33 |/04/04 13:25:03| 00000280 20 20 67 65 72 70 68 0a 20 2a 20 49 6e 69 74 69 | gerph. * Initi| 00000290 61 6c 20 72 65 76 69 73 69 6f 6e 0a 20 2a 0a 20 |al revision. *. | 000002a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 000002e0 2a 2a 2f 0a 0a 2f 2a 20 74 65 73 74 20 2f 2f 20 |**/../* test // | 000002f0 68 65 6c 6c 6f 20 20 53 74 61 72 74 20 6f 66 20 |hello Start of | 00000300 70 72 6f 67 72 61 6d 20 2a 2f 0a 2f 2f 20 48 6f |program */.// Ho| 00000310 6e 65 73 74 20 69 74 20 69 73 0a 23 69 6e 63 6c |nest it is.#incl| 00000320 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 69 |ude <ctype.h>.#i| 00000330 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 |nclude <stdlib.h| 00000340 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 |>.#include <stdi| 00000350 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 |o.h>.#include <s| 00000360 74 72 69 6e 67 2e 68 3e 0a 0a 23 64 65 66 69 6e |tring.h>..#defin| 00000370 65 20 45 52 52 4f 52 28 78 29 20 7b 20 66 70 72 |e ERROR(x) { fpr| 00000380 69 6e 74 66 28 73 74 64 65 72 72 2c 78 20 22 5c |intf(stderr,x "\| 00000390 6e 22 29 3b 20 65 78 69 74 28 31 29 3b 20 7d 0a |n"); exit(1); }.| 000003a0 0a 63 68 61 72 20 2a 44 49 52 45 43 54 49 56 45 |.char *DIRECTIVE| 000003b0 5f 50 52 45 20 20 3d 22 22 3b 0a 63 68 61 72 20 |_PRE ="";.char | 000003c0 2a 44 49 52 45 43 54 49 56 45 5f 50 4f 53 54 20 |*DIRECTIVE_POST | 000003d0 3d 22 22 3b 0a 63 68 61 72 20 2a 53 54 52 49 4e |="";.char *STRIN| 000003e0 47 5f 50 52 45 20 20 20 20 20 3d 22 22 3b 0a 63 |G_PRE ="";.c| 000003f0 68 61 72 20 2a 53 54 52 49 4e 47 5f 50 4f 53 54 |har *STRING_POST| 00000400 20 20 20 20 3d 22 22 3b 0a 63 68 61 72 20 2a 43 | ="";.char *C| 00000410 48 41 52 5f 50 52 45 20 20 20 20 20 20 20 3d 22 |HAR_PRE ="| 00000420 22 3b 0a 63 68 61 72 20 2a 43 48 41 52 5f 50 4f |";.char *CHAR_PO| 00000430 53 54 20 20 20 20 20 20 3d 22 22 3b 0a 63 68 61 |ST ="";.cha| 00000440 72 20 2a 43 4f 4d 4d 45 4e 54 5f 50 52 45 20 20 |r *COMMENT_PRE | 00000450 20 20 3d 22 22 3b 0a 63 68 61 72 20 2a 43 4f 4d | ="";.char *COM| 00000460 4d 45 4e 54 5f 50 4f 53 54 20 20 20 3d 22 22 3b |MENT_POST ="";| 00000470 0a 63 68 61 72 20 2a 43 50 50 43 4f 4d 4d 45 4e |.char *CPPCOMMEN| 00000480 54 5f 50 52 45 20 3d 22 22 3b 0a 63 68 61 72 20 |T_PRE ="";.char | 00000490 2a 43 50 50 43 4f 4d 4d 45 4e 54 5f 50 4f 53 54 |*CPPCOMMENT_POST| 000004a0 3d 22 22 3b 0a 0a 63 68 61 72 20 2a 65 73 63 61 |="";..char *esca| 000004b0 70 65 20 20 20 20 20 20 20 20 20 3d 22 22 3b 0a |pe ="";.| 000004c0 63 68 61 72 20 2a 2a 65 73 63 61 70 65 74 6f 20 |char **escapeto | 000004d0 20 20 20 20 20 3d 4e 55 4c 4c 3b 0a 0a 63 68 61 | =NULL;..cha| 000004e0 72 20 2a 4c 49 4e 45 5f 50 52 45 20 20 20 20 20 |r *LINE_PRE | 000004f0 20 20 3d 22 22 3b 0a 63 68 61 72 20 2a 4c 49 4e | ="";.char *LIN| 00000500 45 5f 50 4f 53 54 20 20 20 20 20 20 3d 22 22 3b |E_POST ="";| 00000510 0a 63 68 61 72 20 2a 44 4f 43 5f 50 52 45 20 20 |.char *DOC_PRE | 00000520 20 20 20 20 20 20 3d 22 22 3b 0a 63 68 61 72 20 | ="";.char | 00000530 2a 44 4f 43 5f 50 4f 53 54 20 20 20 20 20 20 20 |*DOC_POST | 00000540 3d 22 22 3b 0a 0a 74 79 70 65 64 65 66 20 73 74 |="";..typedef st| 00000550 72 75 63 74 20 7b 0a 20 20 63 68 61 72 20 2a 6e |ruct {. char *n| 00000560 61 6d 65 3b 0a 20 20 65 6e 75 6d 20 7b 20 73 74 |ame;. enum { st| 00000570 72 69 6e 67 2c 20 61 72 72 61 79 20 7d 20 74 79 |ring, array } ty| 00000580 70 65 3b 0a 20 20 63 68 61 72 20 2a 2a 73 74 6f |pe;. char **sto| 00000590 72 61 67 65 3b 0a 20 20 69 6e 74 20 20 73 69 7a |rage;. int siz| 000005a0 65 3b 0a 7d 20 6c 6f 6f 6b 75 70 5f 74 3b 0a 0a |e;.} lookup_t;..| 000005b0 6c 6f 6f 6b 75 70 5f 74 20 6c 6f 6f 6b 75 70 5b |lookup_t lookup[| 000005c0 5d 20 3d 20 7b 0a 20 20 2f 2a 20 6e 61 6d 65 2c |] = {. /* name,| 000005d0 20 74 79 70 65 20 6f 66 20 73 74 6f 72 61 67 65 | type of storage| 000005e0 2c 20 70 6c 61 63 65 20 74 6f 20 73 74 6f 72 65 |, place to store| 000005f0 20 72 65 73 75 6c 74 2c 20 73 69 7a 65 20 6f 66 | result, size of| 00000600 20 72 65 73 75 6c 74 20 61 74 6d 20 2a 2f 0a 20 | result atm */. | 00000610 20 7b 20 22 64 69 72 65 63 74 69 76 65 5f 70 72 | { "directive_pr| 00000620 65 22 2c 20 20 20 73 74 72 69 6e 67 2c 20 26 44 |e", string, &D| 00000630 49 52 45 43 54 49 56 45 5f 50 52 45 2c 20 30 20 |IRECTIVE_PRE, 0 | 00000640 7d 2c 0a 20 20 7b 20 22 64 69 72 65 63 74 69 76 |},. { "directiv| 00000650 65 5f 70 6f 73 74 22 2c 20 20 73 74 72 69 6e 67 |e_post", string| 00000660 2c 20 26 44 49 52 45 43 54 49 56 45 5f 50 4f 53 |, &DIRECTIVE_POS| 00000670 54 2c 20 30 20 7d 2c 0a 20 20 7b 20 22 73 74 72 |T, 0 },. { "str| 00000680 69 6e 67 5f 70 72 65 22 2c 20 20 20 20 20 20 73 |ing_pre", s| 00000690 74 72 69 6e 67 2c 20 26 53 54 52 49 4e 47 5f 50 |tring, &STRING_P| 000006a0 52 45 2c 20 30 20 7d 2c 0a 20 20 7b 20 22 73 74 |RE, 0 },. { "st| 000006b0 72 69 6e 67 5f 70 6f 73 74 22 2c 20 20 20 20 20 |ring_post", | 000006c0 73 74 72 69 6e 67 2c 20 26 53 54 52 49 4e 47 5f |string, &STRING_| 000006d0 50 4f 53 54 2c 20 30 20 7d 2c 0a 20 20 7b 20 22 |POST, 0 },. { "| 000006e0 63 68 61 72 5f 70 72 65 22 2c 20 20 20 20 20 20 |char_pre", | 000006f0 20 20 73 74 72 69 6e 67 2c 20 26 43 48 41 52 5f | string, &CHAR_| 00000700 50 52 45 2c 20 30 20 7d 2c 0a 20 20 7b 20 22 63 |PRE, 0 },. { "c| 00000710 68 61 72 5f 70 6f 73 74 22 2c 20 20 20 20 20 20 |har_post", | 00000720 20 73 74 72 69 6e 67 2c 20 26 43 48 41 52 5f 50 | string, &CHAR_P| 00000730 4f 53 54 2c 20 30 20 7d 2c 0a 20 20 7b 20 22 63 |OST, 0 },. { "c| 00000740 6f 6d 6d 65 6e 74 5f 70 72 65 22 2c 20 20 20 20 |omment_pre", | 00000750 20 73 74 72 69 6e 67 2c 20 26 43 4f 4d 4d 45 4e | string, &COMMEN| 00000760 54 5f 50 52 45 2c 20 30 20 7d 2c 0a 20 20 7b 20 |T_PRE, 0 },. { | 00000770 22 63 6f 6d 6d 65 6e 74 5f 70 6f 73 74 22 2c 20 |"comment_post", | 00000780 20 20 20 73 74 72 69 6e 67 2c 20 26 43 4f 4d 4d | string, &COMM| 00000790 45 4e 54 5f 50 4f 53 54 2c 20 30 20 7d 2c 0a 20 |ENT_POST, 0 },. | 000007a0 20 7b 20 22 63 70 70 63 6f 6d 6d 65 6e 74 5f 70 | { "cppcomment_p| 000007b0 72 65 22 2c 20 20 73 74 72 69 6e 67 2c 20 26 43 |re", string, &C| 000007c0 50 50 43 4f 4d 4d 45 4e 54 5f 50 52 45 2c 20 30 |PPCOMMENT_PRE, 0| 000007d0 20 7d 2c 0a 20 20 7b 20 22 63 70 70 63 6f 6d 6d | },. { "cppcomm| 000007e0 65 6e 74 5f 70 6f 73 74 22 2c 20 73 74 72 69 6e |ent_post", strin| 000007f0 67 2c 20 26 43 50 50 43 4f 4d 4d 45 4e 54 5f 50 |g, &CPPCOMMENT_P| 00000800 4f 53 54 2c 20 30 20 7d 2c 0a 20 20 7b 20 22 65 |OST, 0 },. { "e| 00000810 73 63 61 70 65 73 22 2c 20 20 20 20 20 20 20 20 |scapes", | 00000820 20 73 74 72 69 6e 67 2c 20 26 65 73 63 61 70 65 | string, &escape| 00000830 2c 20 30 20 7d 2c 0a 20 20 7b 20 22 65 73 63 61 |, 0 },. { "esca| 00000840 70 65 22 2c 20 20 20 20 20 20 20 20 20 20 61 72 |pe", ar| 00000850 72 61 79 2c 20 20 28 63 68 61 72 2a 2a 29 26 65 |ray, (char**)&e| 00000860 73 63 61 70 65 74 6f 2c 20 30 20 7d 2c 0a 20 20 |scapeto, 0 },. | 00000870 7b 20 22 6c 69 6e 65 5f 70 72 65 22 2c 20 20 20 |{ "line_pre", | 00000880 20 20 20 20 20 73 74 72 69 6e 67 2c 20 26 4c 49 | string, &LI| 00000890 4e 45 5f 50 52 45 2c 20 30 20 7d 2c 0a 20 20 7b |NE_PRE, 0 },. {| 000008a0 20 22 6c 69 6e 65 5f 70 6f 73 74 22 2c 20 20 20 | "line_post", | 000008b0 20 20 20 20 73 74 72 69 6e 67 2c 20 26 4c 49 4e | string, &LIN| 000008c0 45 5f 50 4f 53 54 2c 20 30 20 7d 2c 0a 20 20 7b |E_POST, 0 },. {| 000008d0 20 22 64 6f 63 5f 70 72 65 22 2c 20 20 20 20 20 | "doc_pre", | 000008e0 20 20 20 20 73 74 72 69 6e 67 2c 20 26 44 4f 43 | string, &DOC| 000008f0 5f 50 52 45 2c 20 30 20 7d 2c 0a 20 20 7b 20 22 |_PRE, 0 },. { "| 00000900 64 6f 63 5f 70 6f 73 74 22 2c 20 20 20 20 20 20 |doc_post", | 00000910 20 20 73 74 72 69 6e 67 2c 20 26 44 4f 43 5f 50 | string, &DOC_P| 00000920 4f 53 54 2c 20 30 20 7d 0a 7d 3b 0a 0a 2f 2a 2a |OST, 0 }.};../**| 00000930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00000950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 3c 63 |************* <c| 00000960 3e 20 47 65 72 70 68 20 2a 2a 2a 2a 2a 2a 2a 2a |> Gerph ********| 00000970 2a 0a 20 46 75 6e 63 74 69 6f 6e 3a 20 20 20 20 |*. Function: | 00000980 20 72 65 61 64 5f 64 65 73 63 0a 20 44 65 73 63 | read_desc. Desc| 00000990 72 69 70 74 69 6f 6e 3a 20 20 52 65 61 64 73 20 |ription: Reads | 000009a0 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 |the description | 000009b0 66 69 6c 65 0a 20 50 61 72 61 6d 65 74 65 72 73 |file. Parameters| 000009c0 3a 20 20 20 66 69 6c 65 2d 3e 20 66 69 6c 65 6e |: file-> filen| 000009d0 61 6d 65 0a 20 52 65 74 75 72 6e 73 3a 20 20 20 |ame. Returns: | 000009e0 20 20 20 6e 6f 6e 65 0a 20 2a 2a 2a 2a 2a 2a 2a | none. *******| 000009f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00000a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 76 6f 69 |***********/.voi| 00000a30 64 20 72 65 61 64 5f 64 65 73 63 28 63 68 61 72 |d read_desc(char| 00000a40 20 2a 66 69 6c 65 29 3b 0a 0a 2f 2a 2a 2a 2a 2a | *file);../*****| 00000a50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00000a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 3c 63 3e 20 47 |********** <c> G| 00000a80 65 72 70 68 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 |erph *********. | 00000a90 46 75 6e 63 74 69 6f 6e 3a 20 20 20 20 20 73 65 |Function: se| 00000aa0 6e 64 65 73 63 61 70 65 64 0a 20 44 65 73 63 72 |ndescaped. Descr| 00000ab0 69 70 74 69 6f 6e 3a 20 20 53 65 6e 64 20 61 6e |iption: Send an| 00000ac0 20 65 73 63 61 70 65 64 20 73 65 71 75 65 6e 63 | escaped sequenc| 00000ad0 65 20 74 6f 20 74 68 65 20 66 69 6c 65 3b 0a 20 |e to the file;. | 00000ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 20 | 1 | 00000af0 31 20 2d 3e 20 30 0a 20 20 20 20 20 20 20 20 20 |1 -> 0. | 00000b00 20 20 20 20 20 20 31 20 32 20 2d 3e 20 31 0a 20 | 1 2 -> 1. | 00000b10 50 61 72 61 6d 65 74 65 72 73 3a 20 20 20 6f 75 |Parameters: ou| 00000b20 74 70 75 74 2d 3e 20 6f 75 74 70 75 74 20 66 69 |tput-> output fi| 00000b30 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 |le. | 00000b40 20 20 73 74 72 69 6e 67 2d 3e 20 74 68 65 20 73 | string-> the s| 00000b50 74 72 69 6e 67 20 74 6f 20 77 72 69 74 65 0a 20 |tring to write. | 00000b60 52 65 74 75 72 6e 73 3a 20 20 20 20 20 20 6e 6f |Returns: no| 00000b70 6e 65 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |ne. ************| 00000b80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00000bb0 2a 2a 2a 2a 2a 2a 2f 0a 76 6f 69 64 20 73 65 6e |******/.void sen| 00000bc0 64 65 73 63 61 70 65 64 28 46 49 4c 45 20 2a 6f |descaped(FILE *o| 00000bd0 75 74 70 75 74 2c 63 68 61 72 20 2a 73 74 72 69 |utput,char *stri| 00000be0 6e 67 29 0a 7b 0a 20 20 69 6e 74 20 6c 3d 73 74 |ng).{. int l=st| 00000bf0 72 6c 65 6e 28 73 74 72 69 6e 67 29 3b 0a 20 20 |rlen(string);. | 00000c00 69 6e 74 20 69 3b 0a 20 20 69 66 20 28 6c 21 3d |int i;. if (l!=| 00000c10 30 29 0a 20 20 7b 0a 20 20 20 20 66 6f 72 20 28 |0). {. for (| 00000c20 69 3d 30 3b 69 3c 6c 3b 69 2b 2b 29 0a 20 20 20 |i=0;i<l;i++). | 00000c30 20 7b 0a 20 20 20 20 20 20 69 66 20 28 73 74 72 | {. if (str| 00000c40 69 6e 67 5b 69 5d 3d 3d 27 5c 78 30 31 27 29 0a |ing[i]=='\x01').| 00000c50 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 | {. | 00000c60 63 68 61 72 20 63 3b 0a 20 20 20 20 20 20 20 20 |char c;. | 00000c70 69 2b 2b 3b 0a 20 20 20 20 20 20 20 20 63 3d 73 |i++;. c=s| 00000c80 74 72 69 6e 67 5b 69 5d 3b 20 20 20 20 20 20 20 |tring[i]; | 00000c90 2f 2a 20 74 68 65 20 63 68 61 72 61 63 74 65 72 |/* the character| 00000ca0 20 77 65 20 72 65 61 6c 6c 79 20 77 61 6e 74 20 | we really want | 00000cb0 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20 |follows */. | 00000cc0 20 20 20 66 70 75 74 63 28 63 2d 31 2c 6f 75 74 | fputc(c-1,out| 00000cd0 70 75 74 29 3b 20 2f 2a 20 62 75 74 20 69 74 27 |put); /* but it'| 00000ce0 73 20 6f 6e 65 20 6c 65 73 73 20 2a 2f 0a 20 20 |s one less */. | 00000cf0 20 20 20 20 7d 20 65 6c 73 65 0a 20 20 20 20 20 | } else. | 00000d00 20 20 20 66 70 75 74 63 28 73 74 72 69 6e 67 5b | fputc(string[| 00000d10 69 5d 2c 6f 75 74 70 75 74 29 3b 0a 20 20 20 20 |i],output);. | 00000d20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a |}. }.}../******| 00000d30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00000d50 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 3c 63 3e 20 47 65 |********* <c> Ge| 00000d60 72 70 68 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 46 |rph *********. F| 00000d70 75 6e 63 74 69 6f 6e 3a 20 20 20 20 20 73 74 72 |unction: str| 00000d80 69 63 6d 70 0a 20 44 65 73 63 72 69 70 74 69 6f |icmp. Descriptio| 00000d90 6e 3a 20 20 43 61 73 65 20 69 6e 73 65 6e 73 69 |n: Case insensi| 00000da0 74 69 76 65 20 63 6f 6d 70 61 72 69 73 6f 6e 0a |tive comparison.| 00000db0 20 50 61 72 61 6d 65 74 65 72 73 3a 20 20 20 73 | Parameters: s| 00000dc0 74 72 31 20 3d 20 6f 6e 65 20 73 74 72 69 6e 67 |tr1 = one string| 00000dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. | 00000de0 73 74 72 32 20 3d 20 74 68 65 20 6f 74 68 65 72 |str2 = the other| 00000df0 20 6f 6e 65 0a 20 52 65 74 75 72 6e 73 3a 20 20 | one. Returns: | 00000e00 20 20 20 20 3c 30 20 69 66 20 73 74 72 31 20 3c | <0 if str1 <| 00000e10 20 73 74 72 32 0a 20 20 20 20 20 20 20 20 20 20 | str2. | 00000e20 20 20 20 20 20 3e 30 20 69 66 20 73 74 72 31 20 | >0 if str1 | 00000e30 3e 20 73 74 72 32 0a 20 20 20 20 20 20 20 20 20 |> str2. | 00000e40 20 20 20 20 20 20 3d 30 20 69 66 20 73 74 72 31 | =0 if str1| 00000e50 20 3d 20 73 74 72 32 0a 20 2a 2a 2a 2a 2a 2a 2a | = str2. *******| 00000e60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00000e90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 69 6e 74 |***********/.int| 00000ea0 20 73 74 72 69 63 6d 70 28 63 68 61 72 20 2a 73 | stricmp(char *s| 00000eb0 74 72 31 2c 63 68 61 72 20 2a 73 74 72 32 29 0a |tr1,char *str2).| 00000ec0 7b 0a 20 20 63 68 61 72 20 6f 6e 65 2c 74 77 6f |{. char one,two| 00000ed0 3b 0a 20 20 69 6e 74 20 20 69 6e 64 65 78 3b 0a |;. int index;.| 00000ee0 20 20 69 6e 74 20 20 6c 65 6e 3d 73 74 72 6c 65 | int len=strle| 00000ef0 6e 28 73 74 72 31 29 3b 20 2f 2a 20 73 70 65 65 |n(str1); /* spee| 00000f00 64 73 20 74 68 69 6e 67 73 20 75 70 20 61 20 74 |ds things up a t| 00000f10 61 64 20 2a 2f 0a 20 20 66 6f 72 28 69 6e 64 65 |ad */. for(inde| 00000f20 78 3d 30 3b 20 69 6e 64 65 78 3c 3d 6c 65 6e 3b |x=0; index<=len;| 00000f30 20 69 6e 64 65 78 2b 2b 29 0a 20 20 7b 0a 20 20 | index++). {. | 00000f40 20 20 6f 6e 65 3d 74 6f 6c 6f 77 65 72 28 73 74 | one=tolower(st| 00000f50 72 31 5b 69 6e 64 65 78 5d 29 3b 0a 20 20 20 20 |r1[index]);. | 00000f60 74 77 6f 3d 74 6f 6c 6f 77 65 72 28 73 74 72 32 |two=tolower(str2| 00000f70 5b 69 6e 64 65 78 5d 29 3b 0a 20 20 20 20 69 66 |[index]);. if| 00000f80 20 28 6f 6e 65 21 3d 74 77 6f 29 0a 20 20 20 20 | (one!=two). | 00000f90 7b 0a 20 20 20 20 20 20 69 66 20 28 6f 6e 65 3c |{. if (one<| 00000fa0 74 77 6f 29 0a 20 20 20 20 20 20 20 20 72 65 74 |two). ret| 00000fb0 75 72 6e 20 2d 31 3b 0a 20 20 20 20 20 20 65 6c |urn -1;. el| 00000fc0 73 65 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 |se. retur| 00000fd0 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 |n 1;. }. }. | 00000fe0 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a | return 0;.}../*| 00000ff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00001010 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 3c |************** <| 00001020 63 3e 20 47 65 72 70 68 20 2a 2a 2a 2a 2a 2a 2a |c> Gerph *******| 00001030 2a 2a 0a 20 46 75 6e 63 74 69 6f 6e 3a 20 20 20 |**. Function: | 00001040 20 20 6d 61 69 6e 0a 20 44 65 73 63 72 69 70 74 | main. Descript| 00001050 69 6f 6e 3a 20 20 44 6f 65 73 20 74 68 65 20 6d |ion: Does the m| 00001060 61 69 6e 20 73 74 75 66 66 20 28 6f 64 64 6c 79 |ain stuff (oddly| 00001070 21 29 0a 20 50 61 72 61 6d 65 74 65 72 73 3a 20 |!). Parameters: | 00001080 20 20 61 73 20 6e 6f 72 6d 61 6c 0a 20 52 65 74 | as normal. Ret| 00001090 75 72 6e 73 3a 20 20 20 20 20 20 61 73 20 6e 6f |urns: as no| 000010a0 72 6d 61 6c 37 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a |rmal7. *********| 000010b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 000010e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 69 6e 74 20 6d |*********/.int m| 000010f0 61 69 6e 28 69 6e 74 20 61 72 67 63 2c 63 68 61 |ain(int argc,cha| 00001100 72 20 2a 61 72 67 76 5b 5d 29 0a 7b 0a 20 20 69 |r *argv[]).{. i| 00001110 6e 74 20 69 6e 63 6f 6d 6d 65 6e 74 3d 30 3b 0a |nt incomment=0;.| 00001120 20 20 69 6e 74 20 69 6e 63 70 70 63 6f 6d 6d 65 | int incppcomme| 00001130 6e 74 3d 30 3b 0a 20 20 69 6e 74 20 69 6e 71 75 |nt=0;. int inqu| 00001140 6f 74 65 73 3d 30 3b 0a 20 20 69 6e 74 20 69 6e |otes=0;. int in| 00001150 73 71 75 6f 74 65 3d 30 3b 0a 20 20 69 6e 74 20 |squote=0;. int | 00001160 69 6e 64 69 72 65 63 74 69 76 65 3d 30 3b 0a 20 |indirective=0;. | 00001170 20 69 6e 74 20 6c 61 73 74 3d 27 5c 6e 27 3b 0a | int last='\n';.| 00001180 0a 20 20 46 49 4c 45 20 2a 6f 75 74 70 75 74 3b |. FILE *output;| 00001190 0a 20 20 46 49 4c 45 20 2a 69 6e 70 75 74 3b 0a |. FILE *input;.| 000011a0 20 20 63 68 61 72 20 2a 69 6e 66 69 6c 65 3b 0a | char *infile;.| 000011b0 20 20 63 68 61 72 20 2a 6f 75 74 66 69 6c 65 3b | char *outfile;| 000011c0 0a 0a 20 20 69 66 20 28 20 28 61 72 67 63 21 3d |.. if ( (argc!=| 000011d0 34 29 20 29 0a 20 20 7b 0a 20 20 20 20 66 70 72 |4) ). {. fpr| 000011e0 69 6e 74 66 28 73 74 64 65 72 72 2c 22 52 65 66 |intf(stderr,"Ref| 000011f0 6f 72 6d 43 2c 20 76 31 2e 30 31 20 28 63 29 20 |ormC, v1.01 (c) | 00001200 4a 75 73 74 69 6e 20 46 6c 65 74 63 68 65 72 5c |Justin Fletcher\| 00001210 6e 22 29 3b 0a 20 20 20 20 45 52 52 4f 52 28 22 |n");. ERROR("| 00001220 53 79 6e 74 61 78 3a 20 72 65 66 6f 72 6d 63 20 |Syntax: reformc | 00001230 3c 64 65 73 63 3e 20 3c 69 6e 70 75 74 3e 20 3c |<desc> <input> <| 00001240 6f 75 74 70 75 74 3e 22 29 3b 0a 20 20 7d 0a 20 |output>");. }. | 00001250 20 69 6e 66 69 6c 65 3d 61 72 67 76 5b 32 5d 3b | infile=argv[2];| 00001260 20 6f 75 74 66 69 6c 65 3d 61 72 67 76 5b 33 5d | outfile=argv[3]| 00001270 3b 0a 20 20 72 65 61 64 5f 64 65 73 63 28 61 72 |;. read_desc(ar| 00001280 67 76 5b 31 5d 29 3b 20 2f 2a 20 72 65 61 64 20 |gv[1]); /* read | 00001290 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 |the description | 000012a0 2a 2f 0a 0a 20 20 69 6e 70 75 74 3d 66 6f 70 65 |*/.. input=fope| 000012b0 6e 28 69 6e 66 69 6c 65 2c 22 72 22 29 3b 0a 20 |n(infile,"r");. | 000012c0 20 6f 75 74 70 75 74 3d 66 6f 70 65 6e 28 6f 75 | output=fopen(ou| 000012d0 74 66 69 6c 65 2c 22 77 22 29 3b 0a 0a 20 20 69 |tfile,"w");.. i| 000012e0 66 20 28 69 6e 70 75 74 3d 3d 4e 55 4c 4c 29 0a |f (input==NULL).| 000012f0 20 20 7b 20 45 52 52 4f 52 28 22 43 6f 75 6c 64 | { ERROR("Could| 00001300 20 6e 6f 74 20 6f 70 65 6e 20 69 6e 70 75 74 20 | not open input | 00001310 66 69 6c 65 22 29 3b 20 7d 0a 20 20 69 66 20 28 |file"); }. if (| 00001320 6f 75 74 70 75 74 3d 3d 4e 55 4c 4c 29 0a 20 20 |output==NULL). | 00001330 7b 20 45 52 52 4f 52 28 22 43 6f 75 6c 64 20 6e |{ ERROR("Could n| 00001340 6f 74 20 6f 70 65 6e 20 6f 75 74 70 75 74 20 66 |ot open output f| 00001350 69 6c 65 22 29 3b 20 7d 0a 0a 20 20 73 65 6e 64 |ile"); }.. send| 00001360 65 73 63 61 70 65 64 28 6f 75 74 70 75 74 2c 44 |escaped(output,D| 00001370 4f 43 5f 50 52 45 29 3b 0a 20 20 73 65 6e 64 65 |OC_PRE);. sende| 00001380 73 63 61 70 65 64 28 6f 75 74 70 75 74 2c 4c 49 |scaped(output,LI| 00001390 4e 45 5f 50 52 45 29 3b 0a 20 20 77 68 69 6c 65 |NE_PRE);. while| 000013a0 20 28 21 66 65 6f 66 28 69 6e 70 75 74 29 29 0a | (!feof(input)).| 000013b0 20 20 7b 0a 20 20 20 20 69 6e 74 20 63 3d 66 67 | {. int c=fg| 000013c0 65 74 63 28 69 6e 70 75 74 29 3b 20 2f 2a 20 72 |etc(input); /* r| 000013d0 65 61 64 20 61 20 63 68 61 72 61 63 74 65 72 20 |ead a character | 000013e0 2a 2f 0a 20 20 20 20 69 66 20 28 63 21 3d 45 4f |*/. if (c!=EO| 000013f0 46 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 69 |F). {. i| 00001400 66 20 28 69 6e 63 70 70 63 6f 6d 6d 65 6e 74 29 |f (incppcomment)| 00001410 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 |. {. | 00001420 20 73 77 69 74 63 68 20 28 63 29 0a 20 20 20 20 | switch (c). | 00001430 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 | {. | 00001440 63 61 73 65 20 27 5c 5c 27 3a 20 2f 2a 20 6e 65 |case '\\': /* ne| 00001450 78 74 20 63 68 61 72 61 63 74 65 72 20 69 73 20 |xt character is | 00001460 6c 69 74 65 72 61 6c 20 2a 2f 0a 20 20 20 20 20 |literal */. | 00001470 20 20 20 20 20 20 20 66 70 75 74 63 28 63 2c 6f | fputc(c,o| 00001480 75 74 70 75 74 29 3b 20 63 3d 66 67 65 74 63 28 |utput); c=fgetc(| 00001490 69 6e 70 75 74 29 3b 0a 20 20 20 20 20 20 20 20 |input);. | 000014a0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 | break;. | 000014b0 20 20 20 20 20 63 61 73 65 20 27 5c 6e 27 3a 20 | case '\n': | 000014c0 2f 2a 20 65 6e 64 20 6f 66 20 6c 69 6e 65 20 2a |/* end of line *| 000014d0 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e |/. in| 000014e0 63 70 70 63 6f 6d 6d 65 6e 74 3d 30 3b 0a 20 20 |cppcomment=0;. | 000014f0 20 20 20 20 20 20 20 20 20 20 73 65 6e 64 65 73 | sendes| 00001500 63 61 70 65 64 28 6f 75 74 70 75 74 2c 43 50 50 |caped(output,CPP| 00001510 43 4f 4d 4d 45 4e 54 5f 50 4f 53 54 29 3b 0a 20 |COMMENT_POST);. | 00001520 20 20 20 20 20 20 20 20 20 20 20 73 65 6e 64 65 | sende| 00001530 73 63 61 70 65 64 28 6f 75 74 70 75 74 2c 4c 49 |scaped(output,LI| 00001540 4e 45 5f 50 4f 53 54 29 3b 0a 20 20 20 20 20 20 |NE_POST);. | 00001550 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 | }. }. | 00001560 20 20 65 6c 73 65 0a 20 20 20 20 20 20 7b 0a 20 | else. {. | 00001570 20 20 20 20 20 20 20 73 77 69 74 63 68 20 28 63 | switch (c| 00001580 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 |). {. | 00001590 20 20 20 20 20 20 63 61 73 65 20 27 23 27 3a 20 | case '#': | 000015a0 2f 2a 20 61 20 23 20 64 69 72 65 63 74 69 76 65 |/* a # directive| 000015b0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 | */. | 000015c0 69 66 20 28 6c 61 73 74 3d 3d 27 5c 6e 27 29 0a |if (last=='\n').| 000015d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 | {. | 000015e0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 69 | indi| 000015f0 72 65 63 74 69 76 65 3d 31 3b 0a 20 20 20 20 20 |rective=1;. | 00001600 20 20 20 20 20 20 20 20 20 73 65 6e 64 65 73 63 | sendesc| 00001610 61 70 65 64 28 6f 75 74 70 75 74 2c 44 49 52 45 |aped(output,DIRE| 00001620 43 54 49 56 45 5f 50 52 45 29 3b 0a 20 20 20 20 |CTIVE_PRE);. | 00001630 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 | }. | 00001640 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 | break;. | 00001650 20 20 20 20 20 20 20 63 61 73 65 20 27 5c 27 27 | case '\''| 00001660 3a 20 2f 2a 20 61 20 73 69 6e 67 6c 65 20 71 75 |: /* a single qu| 00001670 6f 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 |ote */. | 00001680 20 20 20 69 66 20 28 20 28 21 69 6e 71 75 6f 74 | if ( (!inquot| 00001690 65 73 29 20 26 26 20 28 21 69 6e 63 6f 6d 6d 65 |es) && (!incomme| 000016a0 6e 74 29 20 29 0a 20 20 20 20 20 20 20 20 20 20 |nt) ). | 000016b0 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 | {. | 000016c0 20 20 69 66 20 28 69 6e 73 71 75 6f 74 65 29 0a | if (insquote).| 000016d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a | {.| 000016e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000016f0 66 70 72 69 6e 74 66 28 6f 75 74 70 75 74 2c 22 |fprintf(output,"| 00001700 5c 27 22 29 3b 20 2f 2a 20 77 65 20 68 61 76 65 |\'"); /* we have| 00001710 20 74 6f 20 64 6f 20 74 68 65 20 71 75 6f 74 65 | to do the quote| 00001720 20 74 68 65 6e 20 70 6f 73 74 20 2a 2f 0a 20 20 | then post */. | 00001730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 | se| 00001740 6e 64 65 73 63 61 70 65 64 28 6f 75 74 70 75 74 |ndescaped(output| 00001750 2c 43 48 41 52 5f 50 4f 53 54 29 3b 0a 20 20 20 |,CHAR_POST);. | 00001760 20 20 20 20 20 20 20 20 20 20 20 20 20 63 3d 2d | c=-| 00001770 31 3b 20 2f 2a 20 65 6e 73 75 72 65 20 77 65 20 |1; /* ensure we | 00001780 64 6f 6e 27 74 20 73 65 6e 64 20 74 68 69 73 20 |don't send this | 00001790 6f 6e 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 |one */. | 000017a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 | }. | 000017b0 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 | else. | 000017c0 20 20 20 20 20 20 20 20 20 20 73 65 6e 64 65 73 | sendes| 000017d0 63 61 70 65 64 28 6f 75 74 70 75 74 2c 43 48 41 |caped(output,CHA| 000017e0 52 5f 50 52 45 29 3b 0a 20 20 20 20 20 20 20 20 |R_PRE);. | 000017f0 20 20 20 20 20 20 69 6e 73 71 75 6f 74 65 3d 21 | insquote=!| 00001800 69 6e 73 71 75 6f 74 65 3b 0a 20 20 20 20 20 20 |insquote;. | 00001810 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 | }. | 00001820 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 | break;. | 00001830 20 20 20 20 20 63 61 73 65 20 27 5c 22 27 3a 20 | case '\"': | 00001840 2f 2a 20 61 20 64 6f 75 62 6c 65 20 71 75 6f 74 |/* a double quot| 00001850 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 |e */. | 00001860 20 69 66 20 28 20 28 21 69 6e 73 71 75 6f 74 65 | if ( (!insquote| 00001870 29 20 26 26 20 28 21 69 6e 63 6f 6d 6d 65 6e 74 |) && (!incomment| 00001880 29 20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 |) ). | 00001890 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |{. | 000018a0 69 6e 71 75 6f 74 65 73 3d 21 69 6e 71 75 6f 74 |inquotes=!inquot| 000018b0 65 73 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 |es;. | 000018c0 20 20 69 66 20 28 69 6e 71 75 6f 74 65 73 29 0a | if (inquotes).| 000018d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000018e0 73 65 6e 64 65 73 63 61 70 65 64 28 6f 75 74 70 |sendescaped(outp| 000018f0 75 74 2c 53 54 52 49 4e 47 5f 50 52 45 29 3b 0a |ut,STRING_PRE);.| 00001900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c | el| 00001910 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 |se. | 00001920 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | {. | 00001930 20 20 20 66 70 72 69 6e 74 66 28 6f 75 74 70 75 | fprintf(outpu| 00001940 74 2c 22 5c 22 22 29 3b 20 2f 2a 20 64 6f 20 74 |t,"\""); /* do t| 00001950 68 65 20 71 75 6f 74 65 20 74 68 65 6e 20 74 68 |he quote then th| 00001960 65 20 70 6f 73 74 20 2a 2f 0a 20 20 20 20 20 20 |e post */. | 00001970 20 20 20 20 20 20 20 20 20 20 73 65 6e 64 65 73 | sendes| 00001980 63 61 70 65 64 28 6f 75 74 70 75 74 2c 53 54 52 |caped(output,STR| 00001990 49 4e 47 5f 50 4f 53 54 29 3b 0a 20 20 20 20 20 |ING_POST);. | 000019a0 20 20 20 20 20 20 20 20 20 20 20 63 3d 2d 31 3b | c=-1;| 000019b0 20 2f 2a 20 73 74 6f 70 20 75 73 20 73 65 6e 64 | /* stop us send| 000019c0 69 6e 67 20 74 68 65 20 71 75 6f 74 65 20 2a 2f |ing the quote */| 000019d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d |. }| 000019e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 |. }. | 000019f0 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b | break| 00001a00 3b 0a 20 20 20 20 20 20 20 20 20 20 63 61 73 65 |;. case| 00001a10 20 27 2f 27 3a 20 2f 2a 20 61 20 73 6c 61 73 68 | '/': /* a slash| 00001a20 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 | */. | 00001a30 69 66 20 28 20 28 6c 61 73 74 3d 3d 27 2f 27 29 |if ( (last=='/')| 00001a40 20 26 26 20 28 21 69 6e 71 75 6f 74 65 73 29 20 | && (!inquotes) | 00001a50 26 26 20 28 21 69 6e 63 6f 6d 6d 65 6e 74 29 20 |&& (!incomment) | 00001a60 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a |). {.| 00001a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 | if| 00001a80 20 28 69 6e 64 69 72 65 63 74 69 76 65 29 0a 20 | (indirective). | 00001a90 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 | {. | 00001aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 | i| 00001ab0 6e 64 69 72 65 63 74 69 76 65 3d 30 3b 0a 20 20 |ndirective=0;. | 00001ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 | se| 00001ad0 6e 64 65 73 63 61 70 65 64 28 6f 75 74 70 75 74 |ndescaped(output| 00001ae0 2c 44 49 52 45 43 54 49 56 45 5f 50 4f 53 54 29 |,DIRECTIVE_POST)| 00001af0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |;. | 00001b00 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |}. | 00001b10 69 6e 63 70 70 63 6f 6d 6d 65 6e 74 3d 31 3b 0a |incppcomment=1;.| 00001b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 73 | fs| 00001b30 65 65 6b 28 6f 75 74 70 75 74 2c 2d 31 2c 31 29 |eek(output,-1,1)| 00001b40 3b 20 2f 2a 20 6d 6f 76 65 20 62 61 63 6b 20 61 |; /* move back a| 00001b50 20 63 68 61 72 61 63 74 65 72 20 2a 2f 0a 20 20 | character */. | 00001b60 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6e 64 | send| 00001b70 65 73 63 61 70 65 64 28 6f 75 74 70 75 74 2c 43 |escaped(output,C| 00001b80 50 50 43 4f 4d 4d 45 4e 54 5f 50 52 45 29 3b 0a |PPCOMMENT_PRE);.| 00001b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 70 | fp| 00001ba0 72 69 6e 74 66 28 6f 75 74 70 75 74 2c 22 2f 22 |rintf(output,"/"| 00001bb0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d |);. }| 00001bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 |. els| 00001bd0 65 20 69 66 20 28 20 28 6c 61 73 74 3d 3d 27 2a |e if ( (last=='*| 00001be0 27 29 20 26 26 20 28 21 69 6e 71 75 6f 74 65 73 |') && (!inquotes| 00001bf0 29 20 26 26 20 28 69 6e 63 6f 6d 6d 65 6e 74 29 |) && (incomment)| 00001c00 20 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b | ). {| 00001c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 |. i| 00001c20 6e 63 6f 6d 6d 65 6e 74 3d 30 3b 20 2f 2a 20 77 |ncomment=0; /* w| 00001c30 65 27 76 65 20 64 72 6f 70 70 65 64 20 6f 75 74 |e've dropped out| 00001c40 20 6f 66 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 | of the comment | 00001c50 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 |*/. | 00001c60 20 66 70 72 69 6e 74 66 28 6f 75 74 70 75 74 2c | fprintf(output,| 00001c70 22 2f 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 |"/");. | 00001c80 20 20 20 20 73 65 6e 64 65 73 63 61 70 65 64 28 | sendescaped(| 00001c90 6f 75 74 70 75 74 2c 43 4f 4d 4d 45 4e 54 5f 50 |output,COMMENT_P| 00001ca0 4f 53 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 |OST);. | 00001cb0 20 20 20 20 63 3d 2d 31 3b 0a 20 20 20 20 20 20 | c=-1;. | 00001cc0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 | }. | 00001cd0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 | break;. | 00001ce0 20 20 20 20 20 63 61 73 65 20 27 2a 27 3a 20 2f | case '*': /| 00001cf0 2a 20 61 20 73 74 61 72 2c 20 70 72 6f 62 61 62 |* a star, probab| 00001d00 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 2f |ly following a /| 00001d10 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 | */. | 00001d20 69 66 20 28 20 28 6c 61 73 74 3d 3d 27 2f 27 29 |if ( (last=='/')| 00001d30 20 26 26 20 28 21 69 6e 71 75 6f 74 65 73 29 20 | && (!inquotes) | 00001d40 26 26 20 28 21 69 6e 63 6f 6d 6d 65 6e 74 29 20 |&& (!incomment) | 00001d50 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a |). {.| 00001d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 | if| 00001d70 20 28 69 6e 64 69 72 65 63 74 69 76 65 29 0a 20 | (indirective). | 00001d80 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 | {. | 00001d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 | i| 00001da0 6e 64 69 72 65 63 74 69 76 65 3d 30 3b 0a 20 20 |ndirective=0;. | 00001db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 | se| 00001dc0 6e 64 65 73 63 61 70 65 64 28 6f 75 74 70 75 74 |ndescaped(output| 00001dd0 2c 44 49 52 45 43 54 49 56 45 5f 50 4f 53 54 29 |,DIRECTIVE_POST)| 00001de0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |;. | 00001df0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |}. | 00001e00 69 6e 63 6f 6d 6d 65 6e 74 3d 31 3b 0a 20 20 20 |incomment=1;. | 00001e10 20 20 20 20 20 20 20 20 20 20 20 66 73 65 65 6b | fseek| 00001e20 28 6f 75 74 70 75 74 2c 2d 31 2c 31 29 3b 20 2f |(output,-1,1); /| 00001e30 2a 20 6d 6f 76 65 20 62 61 63 6b 20 61 20 63 68 |* move back a ch| 00001e40 61 72 61 63 74 65 72 20 2a 2f 0a 20 20 20 20 20 |aracter */. | 00001e50 20 20 20 20 20 20 20 20 20 73 65 6e 64 65 73 63 | sendesc| 00001e60 61 70 65 64 28 6f 75 74 70 75 74 2c 43 4f 4d 4d |aped(output,COMM| 00001e70 45 4e 54 5f 50 52 45 29 3b 0a 20 20 20 20 20 20 |ENT_PRE);. | 00001e80 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 | fprintf(| 00001e90 6f 75 74 70 75 74 2c 22 2f 22 29 3b 0a 20 20 20 |output,"/");. | 00001ea0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 | }. | 00001eb0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 | break;. | 00001ec0 20 20 20 20 20 20 20 20 63 61 73 65 20 27 5c 5c | case '\\| 00001ed0 27 3a 20 2f 2a 20 6e 65 78 74 20 63 68 61 72 61 |': /* next chara| 00001ee0 63 74 65 72 20 69 73 20 6c 69 74 65 72 61 6c 20 |cter is literal | 00001ef0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 |*/. f| 00001f00 70 75 74 63 28 63 2c 6f 75 74 70 75 74 29 3b 20 |putc(c,output); | 00001f10 63 3d 66 67 65 74 63 28 69 6e 70 75 74 29 3b 0a |c=fgetc(input);.| 00001f20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 | brea| 00001f30 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 63 61 73 |k;. cas| 00001f40 65 20 27 20 27 3a 0a 20 20 20 20 20 20 20 20 20 |e ' ':. | 00001f50 20 63 61 73 65 20 27 5c 74 27 3a 20 2f 2a 20 77 | case '\t': /* w| 00001f60 68 69 74 65 73 70 61 63 65 20 2a 2f 0a 20 20 20 |hitespace */. | 00001f70 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 | if (ind| 00001f80 69 72 65 63 74 69 76 65 3d 3d 32 29 0a 20 20 20 |irective==2). | 00001f90 20 20 20 20 20 20 20 20 20 7b 20 2f 2a 20 77 65 | { /* we| 00001fa0 27 76 65 20 68 61 64 20 61 6c 6c 20 74 68 65 20 |'ve had all the | 00001fb0 74 65 78 74 20 6f 66 20 74 68 65 20 64 69 72 65 |text of the dire| 00001fc0 63 74 69 76 65 20 73 74 72 69 6e 67 20 2a 2f 0a |ctive string */.| 00001fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 | se| 00001fe0 6e 64 65 73 63 61 70 65 64 28 6f 75 74 70 75 74 |ndescaped(output| 00001ff0 2c 44 49 52 45 43 54 49 56 45 5f 50 4f 53 54 29 |,DIRECTIVE_POST)| 00002000 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |;. | 00002010 69 6e 64 69 72 65 63 74 69 76 65 3d 30 3b 0a 20 |indirective=0;. | 00002020 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 | }. | 00002030 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a | break;.| 00002040 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 27 | case '| 00002050 5c 6e 27 3a 20 2f 2a 20 61 20 6e 65 77 20 6c 69 |\n': /* a new li| 00002060 6e 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 |ne */. | 00002070 20 20 69 66 20 28 69 6e 64 69 72 65 63 74 69 76 | if (indirectiv| 00002080 65 21 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 |e!=0). | 00002090 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 | {. | 000020a0 20 20 69 6e 64 69 72 65 63 74 69 76 65 3d 30 3b | indirective=0;| 000020b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 |. s| 000020c0 65 6e 64 65 73 63 61 70 65 64 28 6f 75 74 70 75 |endescaped(outpu| 000020d0 74 2c 44 49 52 45 43 54 49 56 45 5f 50 4f 53 54 |t,DIRECTIVE_POST| 000020e0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d |);. }| 000020f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6e |. sen| 00002100 64 65 73 63 61 70 65 64 28 6f 75 74 70 75 74 2c |descaped(output,| 00002110 4c 49 4e 45 5f 50 4f 53 54 29 3b 0a 20 20 20 20 |LINE_POST);. | 00002120 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 | break;. | 00002130 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 | default| 00002140 3a 20 2f 2a 20 61 6e 79 20 6f 74 68 65 72 20 63 |: /* any other c| 00002150 68 61 72 61 63 74 65 72 20 2a 2f 0a 20 20 20 20 |haracter */. | 00002160 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 69 | if (indi| 00002170 72 65 63 74 69 76 65 3d 3d 31 29 0a 20 20 20 20 |rective==1). | 00002180 20 20 20 20 20 20 20 20 20 20 69 6e 64 69 72 65 | indire| 00002190 63 74 69 76 65 3d 32 3b 0a 20 20 20 20 20 20 20 |ctive=2;. | 000021a0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 | }. }. | 000021b0 20 6c 61 73 74 3d 63 3b 0a 20 20 20 20 20 20 69 | last=c;. i| 000021c0 66 20 28 63 21 3d 2d 31 29 0a 20 20 20 20 20 20 |f (c!=-1). | 000021d0 7b 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a |{. char *| 000021e0 69 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28 20 |i;. if ( | 000021f0 28 69 3d 73 74 72 63 68 72 28 65 73 63 61 70 65 |(i=strchr(escape| 00002200 2c 63 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 |,c)) == NULL). | 00002210 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 | {. | 00002220 20 20 66 70 75 74 63 28 63 2c 6f 75 74 70 75 74 | fputc(c,output| 00002230 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 |);. if | 00002240 28 63 3d 3d 27 5c 6e 27 29 0a 20 20 20 20 20 20 |(c=='\n'). | 00002250 20 20 20 20 20 20 73 65 6e 64 65 73 63 61 70 65 | sendescape| 00002260 64 28 6f 75 74 70 75 74 2c 4c 49 4e 45 5f 50 52 |d(output,LINE_PR| 00002270 45 29 3b 0a 20 20 20 20 20 20 20 20 7d 20 65 6c |E);. } el| 00002280 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73 |se {. s| 00002290 65 6e 64 65 73 63 61 70 65 64 28 6f 75 74 70 75 |endescaped(outpu| 000022a0 74 2c 65 73 63 61 70 65 74 6f 5b 69 2d 65 73 63 |t,escapeto[i-esc| 000022b0 61 70 65 5d 29 3b 0a 20 20 20 20 20 20 20 20 7d |ape]);. }| 000022c0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 |. }. }. | 000022d0 20 7d 0a 20 20 73 65 6e 64 65 73 63 61 70 65 64 | }. sendescaped| 000022e0 28 6f 75 74 70 75 74 2c 4c 49 4e 45 5f 50 4f 53 |(output,LINE_POS| 000022f0 54 29 3b 0a 20 20 73 65 6e 64 65 73 63 61 70 65 |T);. sendescape| 00002300 64 28 6f 75 74 70 75 74 2c 44 4f 43 5f 50 4f 53 |d(output,DOC_POS| 00002310 54 29 3b 0a 20 20 66 63 6c 6f 73 65 28 6f 75 74 |T);. fclose(out| 00002320 70 75 74 29 3b 0a 20 20 66 63 6c 6f 73 65 28 69 |put);. fclose(i| 00002330 6e 70 75 74 29 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a |nput);.}../*****| 00002340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00002360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 3c 63 3e 20 47 |********** <c> G| 00002370 65 72 70 68 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 |erph *********. | 00002380 46 75 6e 63 74 69 6f 6e 3a 20 20 20 20 20 72 65 |Function: re| 00002390 61 64 5f 64 65 73 63 0a 20 44 65 73 63 72 69 70 |ad_desc. Descrip| 000023a0 74 69 6f 6e 3a 20 20 52 65 61 64 20 74 68 65 20 |tion: Read the | 000023b0 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 66 |description of f| 000023c0 6f 72 20 74 68 69 73 20 74 79 70 65 0a 20 50 61 |or this type. Pa| 000023d0 72 61 6d 65 74 65 72 73 3a 20 20 20 66 69 6c 65 |rameters: file| 000023e0 2d 3e 20 66 69 6c 65 6e 61 6d 65 20 74 6f 20 72 |-> filename to r| 000023f0 65 61 64 0a 20 52 65 74 75 72 6e 73 3a 20 20 20 |ead. Returns: | 00002400 20 20 20 6e 6f 6e 65 0a 20 2a 2a 2a 2a 2a 2a 2a | none. *******| 00002410 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a |****************| * 00002440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 76 6f 69 |***********/.voi| 00002450 64 20 72 65 61 64 5f 64 65 73 63 28 63 68 61 72 |d read_desc(char| 00002460 20 2a 66 69 6c 65 29 0a 7b 0a 20 20 46 49 4c 45 | *file).{. FILE| 00002470 20 2a 69 6e 3d 66 6f 70 65 6e 28 66 69 6c 65 2c | *in=fopen(file,| 00002480 22 72 22 29 3b 0a 20 20 69 66 20 28 69 6e 3d 3d |"r");. if (in==| 00002490 4e 55 4c 4c 29 0a 20 20 20 20 45 52 52 4f 52 28 |NULL). ERROR(| 000024a0 22 44 65 73 63 72 69 70 74 69 6f 6e 20 66 69 6c |"Description fil| 000024b0 65 20 6e 6f 74 20 66 6f 75 6e 64 22 29 3b 0a 0a |e not found");..| 000024c0 20 20 77 68 69 6c 65 20 28 21 66 65 6f 66 28 69 | while (!feof(i| 000024d0 6e 29 29 0a 20 20 7b 0a 20 20 20 20 63 68 61 72 |n)). {. char| 000024e0 20 73 74 72 5b 32 35 36 5d 3b 0a 20 20 20 20 63 | str[256];. c| 000024f0 68 61 72 20 2a 78 3d 66 67 65 74 73 28 73 74 72 |har *x=fgets(str| 00002500 2c 32 35 36 2c 69 6e 29 3b 0a 20 20 20 20 69 66 |,256,in);. if| 00002510 20 28 78 21 3d 4e 55 4c 4c 29 0a 20 20 20 20 7b | (x!=NULL). {| 00002520 0a 20 20 20 20 20 20 63 68 61 72 20 2a 6e 61 6d |. char *nam| 00002530 65 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 76 |e;. char *v| 00002540 61 6c 75 65 3b 0a 20 20 20 20 20 20 7b 20 69 6e |alue;. { in| 00002550 74 20 6c 3d 73 74 72 6c 65 6e 28 78 29 3b 0a 20 |t l=strlen(x);. | 00002560 20 20 20 20 20 20 20 69 66 20 28 78 5b 6c 2d 31 | if (x[l-1| 00002570 5d 3d 3d 27 5c 6e 27 29 20 78 5b 6c 2d 31 5d 3d |]=='\n') x[l-1]=| 00002580 27 5c 30 27 3b 20 7d 20 2f 2a 20 73 74 72 69 70 |'\0'; } /* strip| 00002590 20 74 65 72 6d 69 6e 61 74 6f 72 20 2a 2f 0a 20 | terminator */. | 000025a0 20 20 20 20 20 76 61 6c 75 65 3d 73 74 72 63 68 | value=strch| 000025b0 72 28 78 2c 27 22 27 29 3b 20 2f 2a 20 66 69 6e |r(x,'"'); /* fin| 000025c0 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 |d the end of the| 000025d0 20 73 74 72 69 6e 67 20 2a 2f 0a 20 20 20 20 20 | string */. | 000025e0 20 69 66 20 28 76 61 6c 75 65 21 3d 4e 55 4c 4c | if (value!=NULL| 000025f0 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 |). {. | 00002600 20 20 69 6e 74 20 6e 75 6d 3d 2d 31 3b 0a 20 20 | int num=-1;. | 00002610 20 20 20 20 20 20 69 6e 74 20 65 6e 74 72 79 3b | int entry;| 00002620 0a 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 79 |. char *y| 00002630 3b 0a 20 20 20 20 20 20 20 20 76 61 6c 75 65 5b |;. value[| 00002640 30 5d 3d 30 3b 20 2f 2a 20 74 65 72 6d 69 6e 61 |0]=0; /* termina| 00002650 74 65 20 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 |te it */. | 00002660 20 76 61 6c 75 65 2b 2b 3b 0a 20 20 20 20 20 20 | value++;. | 00002670 20 20 7b 20 69 6e 74 20 6c 3d 73 74 72 6c 65 6e | { int l=strlen| 00002680 28 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 77 |(x);. w| 00002690 68 69 6c 65 28 20 28 78 5b 6c 2d 31 5d 3d 3d 27 |hile( (x[l-1]=='| 000026a0 20 27 29 20 7c 7c 20 28 78 5b 6c 2d 31 5d 3d 3d | ') || (x[l-1]==| 000026b0 27 5c 74 27 29 20 29 0a 20 20 20 20 20 20 20 20 |'\t') ). | 000026c0 20 20 20 20 78 5b 2d 2d 6c 5d 3d 27 5c 30 27 3b | x[--l]='\0';| 000026d0 20 2f 2a 20 74 61 6b 65 20 61 20 63 68 61 72 61 | /* take a chara| 000026e0 63 74 65 72 20 6f 66 66 20 2a 2f 0a 20 20 20 20 |cter off */. | 000026f0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6e 61 | }. na| 00002700 6d 65 3d 78 3b 0a 20 20 20 20 20 20 20 20 2f 2a |me=x;. /*| 00002710 20 6e 6f 77 20 77 65 20 70 61 72 73 65 20 74 68 | now we parse th| 00002720 65 20 73 74 72 69 6e 67 20 77 65 20 72 65 61 64 |e string we read| 00002730 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 | */. {. | 00002740 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 69 3d | char *i=| 00002750 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 20 |value;. | 00002760 20 63 68 61 72 20 2a 6f 3d 76 61 6c 75 65 3b 0a | char *o=value;.| 00002770 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 3b | int c;| 00002780 0a 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 |. while| 00002790 20 28 20 28 20 28 63 3d 69 5b 30 5d 29 21 3d 27 | ( ( (c=i[0])!='| 000027a0 22 27 29 20 26 26 20 28 63 21 3d 27 5c 30 27 29 |"') && (c!='\0')| 000027b0 20 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 | ). {. | 000027c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 | if (c| 000027d0 3d 3d 27 5c 5c 27 29 0a 20 20 20 20 20 20 20 20 |=='\\'). | 000027e0 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 | {. | 000027f0 20 20 20 20 69 3d 26 69 5b 31 5d 3b 20 2f 2a 20 | i=&i[1]; /* | 00002800 6e 65 78 74 20 63 68 61 72 61 63 74 65 72 20 2a |next character *| 00002810 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |/. | 00002820 63 3d 69 5b 30 5d 3b 20 20 2f 2a 20 61 6e 64 20 |c=i[0]; /* and | 00002830 72 65 61 64 20 69 74 20 2a 2f 0a 20 20 20 20 20 |read it */. | 00002840 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 | switch | 00002850 28 63 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 |(c). | 00002860 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 | {. | 00002870 20 20 20 20 63 61 73 65 20 27 6e 27 3a 20 63 3d | case 'n': c=| 00002880 27 5c 6e 27 3b 20 62 72 65 61 6b 3b 0a 20 20 20 |'\n'; break;. | 00002890 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 | cas| 000028a0 65 20 27 74 27 3a 20 63 3d 27 5c 74 27 3b 20 62 |e 't': c='\t'; b| 000028b0 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 |reak;. | 000028c0 20 20 20 20 20 20 63 61 73 65 20 27 62 27 3a 20 | case 'b': | 000028d0 63 3d 27 5c 62 27 3b 20 62 72 65 61 6b 3b 0a 20 |c='\b'; break;. | 000028e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 | c| 000028f0 61 73 65 20 27 66 27 3a 20 63 3d 27 5c 66 27 3b |ase 'f': c='\f';| 00002900 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 | break;. | 00002910 20 20 20 20 20 20 20 20 63 61 73 65 20 27 65 27 | case 'e'| 00002920 3a 20 63 3d 27 5c 78 31 42 27 3b 20 62 72 65 61 |: c='\x1B'; brea| 00002930 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 |k;. | 00002940 20 20 20 63 61 73 65 20 27 30 27 3a 0a 20 20 20 | case '0':. | 00002950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f | o| 00002960 5b 30 5d 3d 27 5c 78 30 31 27 3b 0a 20 20 20 20 |[0]='\x01';. | 00002970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 3d | o=| 00002980 26 6f 5b 31 5d 3b 20 20 2f 2a 20 61 73 73 69 67 |&o[1]; /* assig| 00002990 6e 20 61 6e 64 20 6d 6f 76 65 20 74 6f 20 6e 65 |n and move to ne| 000029a0 78 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 |xt */. | 000029b0 20 20 20 20 20 20 20 20 63 3d 27 5c 78 30 31 27 | c='\x01'| 000029c0 3b 20 2f 2a 20 61 20 30 20 63 6f 64 65 20 69 73 |; /* a 0 code is| 000029d0 20 61 63 74 75 61 6c 6c 79 20 61 20 31 20 66 6f | actually a 1 fo| 000029e0 6c 6c 6f 77 65 64 20 62 79 20 61 20 31 20 2a 2f |llowed by a 1 */| 000029f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. | 00002a00 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 | break;. | 00002a10 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 27 | case '| 00002a20 78 27 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 |x':. | 00002a30 20 20 20 20 20 20 7b 20 63 6f 6e 73 74 20 63 68 | { const ch| 00002a40 61 72 20 68 65 78 5b 5d 3d 22 30 31 32 33 34 35 |ar hex[]="012345| 00002a50 36 37 38 39 61 62 63 64 65 66 22 3b 0a 20 20 20 |6789abcdef";. | 00002a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002a70 20 63 3d 28 73 74 72 63 68 72 28 68 65 78 2c 74 | c=(strchr(hex,t| 00002a80 6f 6c 6f 77 65 72 28 69 5b 31 5d 29 29 2d 68 65 |olower(i[1]))-he| 00002a90 78 29 2a 31 36 3b 0a 20 20 20 20 20 20 20 20 20 |x)*16;. | 00002aa0 20 20 20 20 20 20 20 20 20 20 20 63 2b 3d 73 74 | c+=st| 00002ab0 72 63 68 72 28 68 65 78 2c 74 6f 6c 6f 77 65 72 |rchr(hex,tolower| 00002ac0 28 69 5b 32 5d 29 29 2d 68 65 78 3b 0a 20 20 20 |(i[2]))-hex;. | 00002ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002ae0 20 69 66 20 28 69 5b 31 5d 3d 3d 30 29 20 69 3d | if (i[1]==0) i=| 00002af0 26 69 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 |&i[0];. | 00002b00 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 | else | 00002b10 69 66 20 28 69 5b 32 5d 3d 3d 30 29 20 69 3d 26 |if (i[2]==0) i=&| 00002b20 69 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 |i[1];. | 00002b30 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 | else i| 00002b40 3d 26 69 5b 32 5d 3b 0a 20 20 20 20 20 20 20 20 |=&i[2];. | 00002b50 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 | }. | 00002b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 | if| 00002b70 20 28 63 3d 3d 31 29 0a 20 20 20 20 20 20 20 20 | (c==1). | 00002b80 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 | {. | 00002b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002ba0 6f 5b 30 5d 3d 27 5c 78 30 31 27 3b 0a 20 20 20 |o[0]='\x01';. | 00002bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002bc0 20 6f 3d 26 6f 5b 31 5d 3b 20 2f 2a 20 61 73 73 | o=&o[1]; /* ass| 00002bd0 69 67 6e 20 61 6e 64 20 6d 6f 76 65 20 74 6f 20 |ign and move to | 00002be0 6e 65 78 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 |next */. | 00002bf0 20 20 20 20 20 20 20 20 20 20 20 20 63 3d 27 5c | c='\| 00002c00 78 30 32 27 3b 0a 20 20 20 20 20 20 20 20 20 20 |x02';. | 00002c10 20 20 20 20 20 20 20 20 7d 20 2f 2a 20 61 20 31 | } /* a 1| 00002c20 20 63 6f 64 65 20 69 73 20 61 63 74 75 61 6c 6c | code is actuall| 00002c30 79 20 61 20 31 20 66 6f 6c 6c 6f 77 65 64 20 62 |y a 1 followed b| 00002c40 79 20 61 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 |y a 2 */. | 00002c50 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b | break| 00002c60 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |;. | 00002c70 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a |}. }.| 00002c80 20 20 20 20 20 20 20 20 20 20 20 20 69 3d 26 69 | i=&i| 00002c90 5b 31 5d 3b 20 6f 5b 30 5d 3d 63 3b 20 6f 3d 26 |[1]; o[0]=c; o=&| 00002ca0 6f 5b 31 5d 3b 20 2f 2a 20 61 73 73 69 67 6e 20 |o[1]; /* assign | 00002cb0 61 6e 64 20 6d 6f 76 65 20 74 6f 20 6e 65 78 74 |and move to next| 00002cc0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7d 0a | */. }.| 00002cd0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 5b | if (i[| 00002ce0 30 5d 3d 3d 27 22 27 29 0a 20 20 20 20 20 20 20 |0]=='"'). | 00002cf0 20 20 20 20 20 6f 5b 30 5d 3d 27 5c 30 27 3b 0a | o[0]='\0';.| 00002d00 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20 | else. | 00002d10 20 20 20 20 20 20 20 20 20 20 20 45 52 52 4f 52 | ERROR| 00002d20 28 22 4d 61 6c 66 6f 72 6d 65 64 20 64 65 73 63 |("Malformed desc| 00002d30 72 69 70 74 69 6f 6e 20 6c 69 6e 65 22 29 3b 0a |ription line");.| 00002d40 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 | }. | 00002d50 20 20 69 66 20 28 20 28 79 3d 73 74 72 63 68 72 | if ( (y=strchr| 00002d60 28 6e 61 6d 65 2c 27 20 27 29 29 21 3d 4e 55 4c |(name,' '))!=NUL| 00002d70 4c 29 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 |L). {. | 00002d80 20 20 20 20 20 20 20 79 5b 30 5d 3d 27 5c 30 27 | y[0]='\0'| 00002d90 3b 0a 20 20 20 20 20 20 20 20 20 20 6e 75 6d 3d |;. num=| 00002da0 61 74 6f 69 28 26 79 5b 31 5d 29 3b 20 2f 2a 20 |atoi(&y[1]); /* | 00002db0 61 6e 20 61 72 72 61 79 20 72 65 66 65 72 65 6e |an array referen| 00002dc0 63 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a |ce */. }.| 00002dd0 20 20 20 20 20 20 20 20 2f 2a 20 70 72 69 6e 74 | /* print| 00002de0 66 28 22 41 74 74 65 6d 70 74 69 6e 67 20 74 6f |f("Attempting to| 00002df0 20 66 69 6e 64 20 25 73 5c 6e 22 2c 6e 61 6d 65 | find %s\n",name| 00002e00 29 3b 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f |); */. fo| 00002e10 72 20 28 65 6e 74 72 79 3d 30 3b 20 65 6e 74 72 |r (entry=0; entr| 00002e20 79 3c 20 28 73 69 7a 65 6f 66 28 6c 6f 6f 6b 75 |y< (sizeof(looku| 00002e30 70 29 2f 73 69 7a 65 6f 66 28 6c 6f 6f 6b 75 70 |p)/sizeof(lookup| 00002e40 5f 74 29 29 3b 20 65 6e 74 72 79 2b 2b 29 0a 20 |_t)); entry++). | 00002e50 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 | {. | 00002e60 20 20 20 69 66 20 28 73 74 72 69 63 6d 70 28 6c | if (stricmp(l| 00002e70 6f 6f 6b 75 70 5b 65 6e 74 72 79 5d 2e 6e 61 6d |ookup[entry].nam| 00002e80 65 2c 6e 61 6d 65 29 3d 3d 30 29 0a 20 20 20 20 |e,name)==0). | 00002e90 20 20 20 20 20 20 7b 20 2f 2a 20 74 68 65 79 20 | { /* they | 00002ea0 61 72 65 20 74 68 65 20 73 61 6d 65 20 2a 2f 0a |are the same */.| 00002eb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 | if (| 00002ec0 6c 6f 6f 6b 75 70 5b 65 6e 74 72 79 5d 2e 74 79 |lookup[entry].ty| 00002ed0 70 65 3d 3d 73 74 72 69 6e 67 29 0a 20 20 20 20 |pe==string). | 00002ee0 20 20 20 20 20 20 20 20 7b 20 2f 2a 20 69 74 27 | { /* it'| 00002ef0 73 20 61 20 73 74 72 69 6e 67 20 65 6e 74 72 79 |s a string entry| 00002f00 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 | */. | 00002f10 20 20 69 66 20 28 6c 6f 6f 6b 75 70 5b 65 6e 74 | if (lookup[ent| 00002f20 72 79 5d 2e 73 69 7a 65 3d 3d 31 29 0a 20 20 20 |ry].size==1). | 00002f30 20 20 20 20 20 20 20 20 20 20 20 7b 20 66 72 65 | { fre| 00002f40 65 28 6c 6f 6f 6b 75 70 5b 65 6e 74 72 79 5d 2e |e(lookup[entry].| 00002f50 6e 61 6d 65 29 3b 20 2f 2a 20 6c 6f 73 65 20 74 |name); /* lose t| 00002f60 68 65 20 6f 6c 64 20 6f 6e 65 20 2a 2f 0a 20 20 |he old one */. | 00002f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 70 | fp| 00002f80 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 52 65 |rintf(stderr,"Re| 00002f90 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 25 73 |definition of %s| 00002fa0 5c 6e 22 2c 6c 6f 6f 6b 75 70 5b 65 6e 74 72 79 |\n",lookup[entry| 00002fb0 5d 2e 6e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 |].name);. | 00002fc0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 | }. | 00002fd0 20 20 20 20 20 20 20 2a 6c 6f 6f 6b 75 70 5b 65 | *lookup[e| 00002fe0 6e 74 72 79 5d 2e 73 74 6f 72 61 67 65 3d 6d 61 |ntry].storage=ma| 00002ff0 6c 6c 6f 63 28 73 74 72 6c 65 6e 28 76 61 6c 75 |lloc(strlen(valu| 00003000 65 29 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 20 |e)+1);. | 00003010 20 20 20 20 20 73 74 72 63 70 79 28 2a 6c 6f 6f | strcpy(*loo| 00003020 6b 75 70 5b 65 6e 74 72 79 5d 2e 73 74 6f 72 61 |kup[entry].stora| 00003030 67 65 2c 76 61 6c 75 65 29 3b 20 2f 2a 20 63 6f |ge,value); /* co| 00003040 70 79 20 69 74 20 74 68 65 72 65 20 2a 2f 0a 20 |py it there */. | 00003050 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6f | loo| 00003060 6b 75 70 5b 65 6e 74 72 79 5d 2e 73 69 7a 65 3d |kup[entry].size=| 00003070 31 3b 20 2f 2a 20 61 6e 64 20 6d 61 72 6b 20 69 |1; /* and mark i| 00003080 74 20 61 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a |t as allocated *| 00003090 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |/. | 000030a0 2f 2a 20 70 72 69 6e 74 66 28 22 53 65 74 20 73 |/* printf("Set s| 000030b0 74 72 69 6e 67 20 25 73 20 74 6f 20 25 73 5c 6e |tring %s to %s\n| 000030c0 22 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 |", */. | 000030d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6c | /* l| 000030e0 6f 6f 6b 75 70 5b 65 6e 74 72 79 5d 2e 6e 61 6d |ookup[entry].nam| 000030f0 65 2c 2a 6c 6f 6f 6b 75 70 5b 65 6e 74 72 79 5d |e,*lookup[entry]| 00003100 2e 73 74 6f 72 61 67 65 29 3b 20 2a 2f 0a 20 20 |.storage); */. | 00003110 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 | } else| 00003120 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 2f |. { /| 00003130 2a 20 69 74 27 73 20 61 6e 20 61 72 72 61 79 20 |* it's an array | 00003140 65 6e 74 72 79 20 2a 2f 0a 20 20 20 20 20 20 20 |entry */. | 00003150 20 20 20 20 20 20 20 63 68 61 72 20 2a 2a 61 72 | char **ar| 00003160 72 61 79 3b 0a 20 20 20 20 20 20 20 20 20 20 20 |ray;. | 00003170 20 20 20 69 66 20 28 6c 6f 6f 6b 75 70 5b 65 6e | if (lookup[en| 00003180 74 72 79 5d 2e 73 69 7a 65 3d 3d 30 29 0a 20 20 |try].size==0). | 00003190 20 20 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 | {. | 000031a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 | if| 000031b0 20 28 6c 6f 6f 6b 75 70 5b 65 6e 74 72 79 2d 31 | (lookup[entry-1| 000031c0 5d 2e 73 69 7a 65 3d 3d 30 29 0a 20 20 20 20 20 |].size==0). | 000031d0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 52 52 | ERR| 000031e0 4f 52 28 22 41 74 74 65 6d 70 74 20 74 6f 20 61 |OR("Attempt to a| 000031f0 6c 6c 6f 63 61 74 65 20 74 6f 20 75 6e 61 73 73 |llocate to unass| 00003200 69 67 6e 65 64 20 61 72 72 61 79 22 29 3b 0a 20 |igned array");. | 00003210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a | *| 00003220 6c 6f 6f 6b 75 70 5b 65 6e 74 72 79 5d 2e 73 74 |lookup[entry].st| 00003230 6f 72 61 67 65 3d 6d 61 6c 6c 6f 63 28 73 69 7a |orage=malloc(siz| 00003240 65 6f 66 28 63 68 61 72 20 2a 29 2a 0a 20 20 20 |eof(char *)*. | 00003250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003260 73 74 72 6c 65 6e 28 2a 6c 6f 6f 6b 75 70 5b 65 |strlen(*lookup[e| 00003270 6e 74 72 79 2d 31 5d 2e 73 74 6f 72 61 67 65 29 |ntry-1].storage)| 00003280 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 |);. | 00003290 20 20 20 6c 6f 6f 6b 75 70 5b 65 6e 74 72 79 5d | lookup[entry]| 000032a0 2e 73 69 7a 65 3d 73 74 72 6c 65 6e 28 2a 6c 6f |.size=strlen(*lo| 000032b0 6f 6b 75 70 5b 65 6e 74 72 79 2d 31 5d 2e 73 74 |okup[entry-1].st| 000032c0 6f 72 61 67 65 29 3b 0a 20 20 20 20 20 20 20 20 |orage);. | 000032d0 20 20 20 20 20 20 20 20 2f 2a 20 61 6e 64 20 6d | /* and m| 000032e0 61 72 6b 20 69 74 20 61 73 20 61 6c 6c 6f 63 61 |ark it as alloca| 000032f0 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 |ted */. | 00003300 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 | }. | 00003310 20 20 20 20 20 69 66 20 28 6e 75 6d 3e 6c 6f 6f | if (num>loo| 00003320 6b 75 70 5b 65 6e 74 72 79 5d 2e 73 69 7a 65 29 |kup[entry].size)| 00003330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b |. {| 00003340 20 2f 2a 20 69 66 20 69 74 27 73 20 62 69 67 67 | /* if it's bigg| 00003350 65 72 20 74 68 61 6e 20 63 75 72 72 65 6e 74 2c |er than current,| 00003360 20 69 74 27 73 20 61 6e 20 65 72 72 6f 72 20 2a | it's an error *| 00003370 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |/. | 00003380 20 20 45 52 52 4f 52 28 22 41 74 74 65 6d 70 74 | ERROR("Attempt| 00003390 20 74 6f 20 73 74 6f 72 65 20 6f 75 74 73 69 64 | to store outsid| 000033a0 65 20 61 72 72 61 79 20 62 6f 75 6e 64 73 22 29 |e array bounds")| 000033b0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |;. | 000033c0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |}. | 000033d0 61 72 72 61 79 3d 28 63 68 61 72 20 2a 2a 29 2a |array=(char **)*| 000033e0 6c 6f 6f 6b 75 70 5b 65 6e 74 72 79 5d 2e 73 74 |lookup[entry].st| 000033f0 6f 72 61 67 65 3b 0a 20 20 20 20 20 20 20 20 20 |orage;. | 00003400 20 20 20 20 20 2f 2a 20 70 72 69 6e 74 66 28 22 | /* printf("| 00003410 25 70 20 25 70 5c 6e 22 2c 61 72 72 61 79 2c 65 |%p %p\n",array,e| 00003420 73 63 61 70 65 74 6f 29 3b 20 2a 2f 0a 20 20 20 |scapeto); */. | 00003430 20 20 20 20 20 20 20 20 20 20 20 61 72 72 61 79 | array| 00003440 5b 6e 75 6d 2d 31 5d 3d 6d 61 6c 6c 6f 63 28 73 |[num-1]=malloc(s| 00003450 74 72 6c 65 6e 28 76 61 6c 75 65 29 2b 31 29 3b |trlen(value)+1);| 00003460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 |. s| 00003470 74 72 63 70 79 28 61 72 72 61 79 5b 6e 75 6d 2d |trcpy(array[num-| 00003480 31 5d 2c 76 61 6c 75 65 29 3b 20 2f 2a 20 63 6f |1],value); /* co| 00003490 70 79 20 69 74 20 74 68 65 72 65 20 2a 2f 0a 20 |py it there */. | 000034a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 | /* | 000034b0 70 72 69 6e 74 66 28 22 53 65 74 20 61 72 72 61 |printf("Set arra| 000034c0 79 20 25 73 20 5b 25 69 5d 20 74 6f 20 25 73 5c |y %s [%i] to %s\| 000034d0 6e 22 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 |n", */. | 000034e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 | /* | 000034f0 6c 6f 6f 6b 75 70 5b 65 6e 74 72 79 5d 2e 6e 61 |lookup[entry].na| 00003500 6d 65 2c 6e 75 6d 2c 61 72 72 61 79 5b 6e 75 6d |me,num,array[num| 00003510 2d 31 5d 29 3b 20 2a 2f 0a 20 20 20 20 20 20 20 |-1]); */. | 00003520 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 | }. | 00003530 20 7d 0a 20 20 20 20 20 20 20 20 7d 20 2f 2a 20 | }. } /* | 00003540 66 6f 72 20 6c 6f 6f 70 20 74 6f 20 66 69 6e 64 |for loop to find| 00003550 20 65 6e 74 72 79 20 2a 2f 0a 20 20 20 20 20 20 | entry */. | 00003560 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 63 |}. }. }. fc| 00003570 6c 6f 73 65 28 69 6e 29 3b 0a 7d 0a |lose(in);.}.| 0000357c