home *** CD-ROM | disk | FTP | other *** search
/ RISC DISC 2 / RISC_DISC_2.iso / pd_share / program / language / motasm / src_c_ffwdansi < prev    next >
Encoding:
C/C++ Source or Header  |  1995-09-04  |  2.9 KB  |  122 lines

  1. #include <stdio.h>
  2.  
  3. #include "mselect.h"    /*external selection of microprocessor symbol table*/
  4. #include "proto.h"
  5. #include "as.h"
  6. #include "extvars.h"
  7. #include "structs.h"
  8.  
  9.  
  10. /*
  11.  * file I/O version of forward ref handler 
  12.  * ANSI C version - Maurizio Ferrari 1993
  13.  */
  14.  
  15.  
  16. /*
  17.  * fwdinit --- initialize forward ref file
  18.  */
  19. void 
  20. fwdinit(void)
  21. {
  22.         if ((Forward = fopen(Fwd_name, "w+b")) == NULL)
  23.                 fatal("Cannot open forward reference file - no Wimp$ScrapDir?");
  24.         return;
  25. }
  26.  
  27. /*
  28.  * fwdreinit --- reinitialize forward ref file
  29.  */
  30. void
  31. fwdreinit(void)
  32. {
  33.         int             stat;
  34.         extern int      Ffn;
  35.         extern int      F_ref;
  36.  
  37.  
  38.         F_ref = 0;
  39.         Ffn = 0;
  40.         rewind(Forward);        /* rewind forward refs */
  41.         stat = fread(&Ffn, 1, sizeof(int), Forward);
  42.         if (ferror(Forward) != 0)
  43.                 fatal("Unable to read forward ref file");
  44.         /*
  45.          * ad first forward ref into mem
  46.          */
  47.         stat = fread(&F_ref, 1, sizeof(int), Forward);  /* read first forward
  48.                                                          * ref into mem */
  49.         if (ferror(Forward) != 0)
  50.                 fatal("Unable to read forward ref file");
  51. #ifdef DEBUG
  52.         printf("First fwd ref: %d,%d\n", Ffn, F_ref);
  53. #endif
  54. }
  55.  
  56. /*
  57.  * fwdmark --- mark current file/line as containing a forward ref
  58.  */
  59. void
  60. fwdmark(void)
  61. {
  62.         int             stat;
  63.         extern int      Cfn, Line_num;
  64.  
  65.         stat = fwrite(&Cfn, sizeof(Cfn), sizeof(char), Forward);
  66.         /*
  67.          * if( stat < sizeof(int)) fatal("Unable to write to forward ref
  68.          * file");
  69.          */
  70.         stat = fwrite(&Line_num, sizeof(Line_num), sizeof(char), Forward);
  71.         /*
  72.          * if( stat < sizeof(int)) fatal("Unable to write to forward ref
  73.          * file");
  74.          */
  75. }
  76.  
  77. /*
  78.  * fwdnext --- get next forward ref
  79.  */
  80. void
  81. fwdnext(void)
  82. {
  83.  
  84.         int             stat;
  85.         extern int      F_ref, Ffn;
  86.  
  87.         stat = fread(&Ffn, 1, sizeof(int), Forward);
  88.         if (ferror(Forward))
  89.                 fatal("Unable to read forward ref file");
  90. #ifdef DEBUG
  91.         printf("Ffn stat=%d ", stat);
  92. #endif
  93.         stat = fread(&F_ref, 1, sizeof(int), Forward);
  94.         /*
  95.          * if( stat < sizeof(F_ref) ){ if( ferror(Forward) ) fatal("Unable to
  96.          * read forward ref file"); F_ref=0; Ffn=0; }
  97.          */
  98.         if (stat < 2) {
  99.                 if (ferror(Forward))
  100.                         fatal("Unable to read forward ref file");
  101.                 F_ref = 0;
  102.                 Ffn = 0;
  103.         }
  104. #ifdef DEBUG
  105.         printf("F_ref stat=%d  ", stat);
  106.         printf("Next Fwd ref: %d,%d\n", Ffn, F_ref);
  107. #endif
  108. }
  109.  
  110. /*
  111.  * fwd_done --- closes & deletes forward reference file
  112.  */
  113. void 
  114. fwd_done(void)
  115. {
  116.         fclose(Forward);        /* Have to close first on MS-DOS or you leave
  117.                                  * lost clusters. */
  118. #ifndef DEBUG
  119.         remove(Fwd_name);
  120. #endif
  121. }
  122.