home *** CD-ROM | disk | FTP | other *** search
- /*
- * file I/O version of forward ref handler
- */
-
- #define FILEMODE 0644 /* file creat mode */
- #define UPDATE 2 /* file open mode */
- #define ABS 0 /* absolute seek */
-
- int Forward =0; /* temp file's file descriptor */
- char Fwd_name[] = { "Fwd_refs" } ;
-
- /*
- * fwdinit --- initialize forward ref file
- */
- fwdinit()
- {
- Forward = creat(Fwd_name,FILEMODE);
- if(Forward <0)
- fatal("Can't create temp file");
- close(Forward); /* close and reopen for reads and writes */
- Forward = open(Fwd_name,UPDATE);
- if(Forward <0)
- fatal("Forward ref file has gone.");
- #ifndef DEBUG
- close(Forward); /* Have to close first on MS-DOS or you leave lost clusters. */
- unlink(Fwd_name);
- #endif
- }
-
- /*
- * fwdreinit --- reinitialize forward ref file
- */
- fwdreinit()
- {
- F_ref = 0;
- Ffn = 0;
- lseek(Forward,0L,ABS); /* rewind forward refs */
- read(Forward,&Ffn,sizeof(Ffn));
- read(Forward,&F_ref,sizeof(F_ref)); /* read first forward ref into mem */
- #ifdef DEBUG
- printf("First fwd ref: %d,%d\n",Ffn,F_ref);
- #endif
- }
-
- /*
- * fwdmark --- mark current file/line as containing a forward ref
- */
- fwdmark()
- {
- write(Forward,&Cfn,sizeof(Cfn));
- write(Forward,&Line_num,sizeof(Line_num));
- }
-
- /*
- * fwdnext --- get next forward ref
- */
- fwdnext()
- {
- int stat;
-
- stat = read(Forward,&Ffn,sizeof(Ffn));
- #ifdef DEBUG
- printf("Ffn stat=%d ",stat);
- #endif
- stat = read(Forward,&F_ref,sizeof(F_ref));
- #ifdef DEBUG
- printf("F_ref stat=%d ",stat);
- #endif
- if( stat < 2 ){
- F_ref=0;Ffn=0;
- }
- #ifdef DEBUG
- printf("Next Fwd ref: %d,%d\n",Ffn,F_ref);
- #endif
- }
- ə