📄 look.c
字号:
#include <stdio.h>#include <ctype.h>FILE *dfile;char *filenam = "/usr/dict/words";int fold;int dict;int tab;char entry[250];char word[250];char key[50];main(argc,argv)char **argv;{ register c; long top,bot,mid; while(argc>=2 && *argv[1]=='-') { for(;;) { switch(*++argv[1]) { case 'd': dict++; continue; case 'f': fold++; continue; case 't': tab = argv[1][1]; if(tab) ++argv[1]; continue; case 0: break; default: continue; } break; } argc --; argv++; } if(argc<=1) return; if(argc==2) { fold++; dict++; } else filenam = argv[2]; dfile = fopen(filenam,"r"); if(dfile==NULL) { fprintf(stderr,"look: can't open %s\n",filenam); exit(2); } canon(argv[1],key); bot = 0; fseek(dfile,0L,2); top = ftell(dfile); for(;;) { mid = (top+bot)/2; fseek(dfile,mid,0); do { c = getc(dfile); mid++; } while(c!=EOF && c!='\n'); if(!getword(entry)) break; canon(entry,word); switch(compare(key,word)) { case -2: case -1: case 0: if(top<=mid) break; top = mid; continue; case 1: case 2: bot = mid; continue; } break; } fseek(dfile,bot,0); while(ftell(dfile)<top) { if(!getword(entry)) return; canon(entry,word); switch(compare(key,word)) { case -2: return; case -1: case 0: puts(entry,stdout); break; case 1: case 2: continue; } break; } while(getword(entry)) { canon(entry,word); switch(compare(key,word)) { case -1: case 0: puts(entry,stdout); continue; } break; }}compare(s,t)register char *s,*t;{ for(;*s==*t;s++,t++) if(*s==0) return(0); return(*s==0? -1: *t==0? 1: *s<*t? -2: 2);}getword(w)char *w;{ register c; for(;;) { c = getc(dfile); if(c==EOF) return(0); if(c=='\n') break; *w++ = c; } *w = 0; return(1);}canon(old,new)char *old,*new;{ register c; for(;;) { *new = c = *old++; if(c==0||c==tab) { *new = 0; break; } if(dict) { if(!isalnum(c)) continue; } if(fold) { if(isupper(c)) *new += 'a' - 'A'; } new++; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -