📄 icfile.c
字号:
#include "defs"struct { char chars[ 10 ]; };crii() /* create names for intermediate files */{#ifdef unixsprintf(icfile->filename, "eflc.%d", getpid());sprintf(idfile->filename, "efld.%d", getpid());sprintf(iefile->filename, "efle.%d", getpid());#endif#ifdef gcossprintf(icfile->filename, "code.efl");sprintf(idfile->filename, "data.efl");sprintf(iefile->filename, "equv.efl");#endif}rmiis(){rmii(icfile);rmii(idfile);rmii(iefile);}rmii(p) /* discard the intermediate file */struct fileblock *p;{#ifdef unixif(p) { fclose(p->fileptr); unlink(p->filename); }#endif#ifdef gcosif(p) fclose(p->fileptr, "d");#endif}opiis(){opii(icfile);opii(idfile);opii(iefile);}opii(p) /* open the intermediate file for writing */struct fileblock *p;{#ifdef unixif( (p->fileptr = fopen(p->filename, "w")) == NULL) fatal("cannot open intermediate file");#endif#ifdef gcosif( (p->fileptr = fopen(p->filename, "wi")) == NULL) fatal("cannot open intermediate file");#endif}swii(p)struct fileblock *p;{iifilep = p;}putii(w,n)int *w, n;{if( fwrite(w,sizeof(int),n, iifilep->fileptr) != n) fatal("write error");}getii(w, n)int *w, n;{if( fread(w,sizeof(int), n, iifilep->fileptr) != n) fatal("read error");}cliis(){clii(icfile);clii(idfile);clii(iefile);}clii(p) /* close the intermediate file */struct fileblock *p;{#ifdef unixfclose(p->fileptr);#endif#ifdef gcosfclose(p->fileptr, "rl");#endif}rewii(p) /* close and rewind the intermediate file for reading */struct fileblock *p;{swii(p);putic(ICEOF,0);clii(p);#ifdef unixif( (p->fileptr = fopen(p->filename, "r")) == NULL) fatal("cannot open intermediate file");#endif#ifdef gcosif( (p->fileptr = fopen(p->filename, "ri")) == NULL) fatal("cannot open intermediate file");#endif}putic(c,p)int c;int p;{int w[2];prevbg = (c==ICINDENT);w[0] = c;w[1] = p;putii(w,2);}getic(p)int *p;{int w[2];getii(w,2);*p = w[1];return( w[0] );}putsii(l, p)int l;char *p;{int word;register int i, m, n;n = strlen(p);putic(l, n);m = (n/sizeof(int)) ;while(m-- > 0) { for(i=0 ; i<sizeof(int); ++i) word.chars[i] = *p++; putii(&word, 1); }n -= (n/sizeof(int))*sizeof(int);if(n > 0) { for(i=0 ; i<n ; ++i) word.chars[i] = *p++; putii(&word,1); }}ptr getsii(n)int n;{static int incomm[100];int m;register int *q, *qm;char *p;m = (n + sizeof(int)-1 ) / sizeof(int);q = incomm;qm = q + m;while(q < qm) getii(q++, 1);p = incomm;p[n] = '\0';return(incomm);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -