OpenCores
URL https://opencores.org/ocsvn/System09/System09/trunk

Subversion Repositories System09

[/] [System09/] [trunk/] [Tools/] [as09/] [ffwd.c] - Diff between revs 74 and 83

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.