home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 4 / CDPD_IV.bin / utilities / hypertext / adtoht / source / readxref.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-22  |  5.4 KB  |  165 lines

  1. /* Read an existing crossreference file */
  2.  
  3. #include "global.h"
  4. #include "misc.h"
  5. #include "readdir.h"
  6. #include "adfile.h"
  7. #include "incfile.h"
  8. #include "readxref.h"
  9.  
  10. /***********************************************/
  11.  
  12. static UBYTE MyBuffer[1000];
  13.  
  14. static struct RDArgs *RDArgs;
  15. static struct RDArgs __aligned MyArgs=
  16.    {
  17.       {Buffer,0,0},
  18.       NULL,
  19.       MyBuffer,1000,
  20.       NULL,
  21.       0
  22.    };
  23.  
  24. static struct
  25.    {
  26.       char *Name;
  27.       char *File;
  28.       long *Line;
  29.       long *Type;
  30.       char *Comment;
  31.    } Line;
  32.  
  33. /***********************************************/
  34.  
  35. #define XREF_ERROR 0
  36. #define XREF_OK    1
  37. #define XREF_END   2
  38.  
  39. static WORD GetLine(void)
  40.  
  41. {
  42.    if (!ReadLine(TRUE,TRUE)) return(XREF_ERROR);
  43.    if (Buffer[0]!='\n')
  44.       {
  45.          MyArgs.RDA_Source.CS_Length=strlen(Buffer);
  46.          MyArgs.RDA_Source.CS_CurChr=0;
  47.          MyArgs.RDA_DAList=NULL;
  48.          if (RDArgs=ReadArgs("Name/A,File/A,Line/A/N,Type/A/N,Comment/F",(long *)&Line,&MyArgs))
  49.             {
  50.                return(XREF_OK);
  51.             }
  52.          else
  53.             {
  54.                PrintFault(IoErr(),NULL);
  55.                printf("File %s, line %ld\n",CurrentSource,CurrentLine);
  56.                return(XREF_ERROR);
  57.             }
  58.       }
  59.    return(XREF_END);
  60. }
  61.  
  62. /***********************************************/
  63.  
  64. BOOL ReadXRef(void)
  65.  
  66. {
  67.    BOOL Success;
  68.    BOOL SectionDone;
  69.    int Index;
  70.  
  71.    Success=TRUE;
  72.    if (CurrentSource=Arguments.XRefIn)
  73.       {
  74.          printf("*** Reading crossreference file ***\n");
  75.          CurrentLine=0;
  76.          if (CurrentFile=Open(Arguments.XRefIn,MODE_OLDFILE))
  77.             {
  78.                for (Index=0; Index<6 && Success; Index++)
  79.                   {
  80.                      Success=ReadLine(TRUE,TRUE);
  81.                   }
  82.                SectionDone=FALSE;
  83.                while (!SectionDone && Success)
  84.                   {
  85.                      switch(GetLine())
  86.                         {
  87.                            case XREF_ERROR: Success=FALSE;
  88.                                             break;
  89.                            case XREF_OK:    if (!AddFile("",Line.File)) Success=FALSE;
  90.                                             FreeArgs(RDArgs);
  91.                                             break;
  92.                            case XREF_END:   SectionDone=TRUE;
  93.                                             break;
  94.                         }
  95.                   }
  96.                if (Success && !ReadLine(TRUE,TRUE)) Success=FALSE;
  97.                SectionDone=FALSE;
  98.                while (!SectionDone && Success)
  99.                   {
  100.                      switch(GetLine())
  101.                         {
  102.                            case XREF_ERROR: Success=FALSE;
  103.                                             break;
  104.                            case XREF_OK:    if (!AddIdent(Line.Name,Line.File,*Line.Line,FALSE)) Success=FALSE;
  105.                                             FreeArgs(RDArgs);
  106.                                             break;
  107.                            case XREF_END:   SectionDone=TRUE;
  108.                                             break;
  109.                         }
  110.                   }
  111.                if (Success && !ReadLine(TRUE,TRUE)) Success=FALSE;
  112.                SectionDone=FALSE;
  113.                while (!SectionDone && Success)
  114.                   {
  115.                      switch(GetLine())
  116.                         {
  117.                            case XREF_ERROR: Success=FALSE;
  118.                                             break;
  119.                            case XREF_OK:    if (!AddIdent(Line.Name,Line.File,*Line.Line,TRUE)) Success=FALSE;
  120.                                             FreeArgs(RDArgs);
  121.                                             break;
  122.                            case XREF_END:   SectionDone=TRUE;
  123.                                             break;
  124.                         }
  125.                   }
  126.                if (Success && !ReadLine(TRUE,TRUE)) Success=FALSE;
  127.                SectionDone=FALSE;
  128.                while (!SectionDone && Success)
  129.                   {
  130.                      switch(GetLine())
  131.                         {
  132.                            case XREF_ERROR: Success=FALSE;
  133.                                             break;
  134.                            case XREF_OK:    if (Line.Comment)
  135.                                                {
  136.                                                   char *Temp;
  137.                                                   Line.Comment+=3;
  138.                                                   for (Temp=Line.Comment; *Temp && *Temp!=' '; Temp++) ;
  139.                                                   *Temp='\0';
  140.                                                   if (!AddAutodoc(Line.Comment,Line.File,*Line.Type)) Success=FALSE;
  141.                                                }
  142.                                             else
  143.                                                {
  144.                                                }
  145.                                             FreeArgs(RDArgs);
  146.                                             break;
  147.                            case XREF_END:   SectionDone=TRUE;
  148.                                             break;
  149.                         }
  150.                   }
  151.                if (!IoErr())
  152.                   {
  153.                      Success=TRUE;
  154.                   }
  155.                Close(CurrentFile);
  156.             }
  157.          else
  158.             {
  159.                PrintFault(IoErr(),CurrentSource);
  160.                Success=FALSE;
  161.             }
  162.       }
  163.    return(Success);
  164. }
  165.