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