⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keywhash.c

📁 坦尼保姆
💻 C
字号:
/* $Header: keywhash.c,v 2.17 03/08/12 14:55:13 evert Exp $ *//* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". *//* @(#)keywhash.c	1.6 *//* * Micro processor assembler framework written by *	Johan Stevenson, Vrije Universiteit, Amsterdam * modified by *	Johan Stevenson, Han Schaminee and Hans de Vries *		Philips S&I, T&M, PMDS, Eindhoven#include	"comm0.h"#include	"comm1.h" */#include <stdio.h> FILE *inptr, *uitptr; char includfil[] = "#include", includnam[100];char *bigdarr[] = { "ALIGN", "ASCII", "ASCIZ", "ASSERT", "BASE", "BYTE", "BSS","COMM", "DATA", "DEFINE", "EXTERN", "FILE", "LINE", "LIST", "LONG", "NOLIST","SECT", "SPACE", "SYMB", "SYMD", "TEXT", "WORD", ""};char *bigaarr[] = { "AAA", "AAD", "AAM", "AAS", "ADC", "ADCB", "ADD", "ADDB","AH", "AL", "AND", "ANDB", "AX", "BH", "BL", "BP", "BX", "CALL", "CALLF", "CBW","CH", "CL", "CLC", "CLD", "CLI", "CMC", "CMP", "CMPB", "CMPS", "CMPSB", "CMPSW","CS", "CSEG", "CWD", "CX", "DAA", "DAS", "DEC", "DECB", "DH", "DI", "DIV","DIVB", "DL", "DS", "DSEG", "DX", "ES", "ESC", "ESEG", "HLT", "IDIV", "IDIVB","IMUL", "IMULB", "IN", "INB", "INC", "INCB", "INT", "INTO", "INW", "IRET", "JA","JAE", "JB", "JBE", "JC", "JCXZ", "JE", "JG", "JGE", "JL", "JLE", "JMP", "JMPF","JNA", "JNAE", "JNB", "JNBE", "JNC", "JNE", "JNG", "JNGE", "JNL", "JNLE", "JNO","JNP", "JNS", "JNZ", "JO", "JP", "JPE", "JPO", "JS", "JZ", "LAHF", "LDS", "LEA","LES", "LOCK", "LODS", "LODSB", "LODSW", "LOOP", "LOOPE", "LOOPNE", "LOOPNZ","LOOPZ", "MOV", "MOVB", "MOVS", "MOVSB", "MOVSW", "MOVW", "MUL", "MULB", "NEG","NEGB", "NOP", "NOT", "NOTB", "OR", "ORB", "OUT", "OUTB", "OUTW", "POP", "POPF","PUSH", "PUSHF", "RCL", "RCLB", "RCR", "RCRB", "REP", "REPE", "REPNE", "REPNZ","REPZ", "RET", "RETF", "ROL", "ROLB", "ROR", "RORB", "SAHF", "SAL", "SALB","SAR", "SARB", "SBB", "SBBB", "SCAS", "SCASB", "SCASW", "SHL", "SHLB", "SHR","SHRB", "SI", "SP", "SS", "SSEG", "STC", "STD", "STI", "STOS", "STOSB", "STOSW","SUB", "SUBB", "SYS", "TEST", "TESTB", "WAIT", "XCHG", "XCHGB", "XLAT", "XOR","XORB", ""};int teld, tela, ltaba[200], ltabd[25], tabnr, nxtabd[25], nxtaba[200];int htabd[33], htaba[33];char chdarr[128], chaarr[1024], tokenc[10], regel[256], *tptr, aord, *sptr;int maaktoken(m,n) int m,n; {  int len,hsh,i,j;  char *p,c,t;  len = hsh = 0;  if(m) p = bigaarr[n]; else p = bigdarr[n];  while(*p) { len++; hsh += *p++;} hsh &= 0x17;  if(m) {nxtaba[n] = htaba[hsh]; htaba[hsh] = n; ltaba[n] = len;}  else  {nxtabd[n] = htabd[hsh]; htabd[hsh] = n; ltabd[n] = len;}}int getregel() {  int i,c;  i = 0; while ((c=getc(inptr)) != '\n') {if (c==EOF) return(-1);    if(c=='\r'){c = getc(inptr); if(c=='\n') ungetc(c,inptr); else break;}    else { regel[i++] = (char)(c&255);      if(i>250){fprintf(stderr,"Buffer too small. Line truncated.\n"); break;}}    }    regel[i++] = '\0'; regel[i++] = '\0'; regel[i] = '\0';        /*fprintf(stderr,"%s\n",regel);*/  return(i-1);}int zoektoken(){  int len, hsh, n;  char t,*dptr, *tt, bk;  t = '?'; len = hsh = n = 0; tt=tokenc;  if(*tptr == '\0') return(-1);  bk = *tptr; if((bk == '\0') || (bk == '!') || (bk == '"')) return(-1);  while (bk=t, t = *tptr++){ /*fprintf(stderr," -%c-%c- %s\n",bk,t,(tptr-1));*/   if((bk == '\0') || (bk == '!') || (bk == '"')) return(-1);    if(t=='.' && *tptr>='a' && *tptr <= 'z') { /* search the d-tables */      sptr = dptr = tptr; t= *dptr++; len++; hsh = t; *tt++ = t; t = *dptr++;      while((t >'@') && (t<= 'Z')) {len++; hsh += t; *tt++ = t; t = *dptr++;}      hsh &= 0x17; n = htabd[hsh];      while(n>=0){	if((len == ltabd[n]) && (!strncmp(bigdarr[n],tokenc,len))) return(len);	n = nxtabd[n];      }      return(0);    }    if(t>'@' && t<='Z') { /* search the a-tables */      dptr = sptr = tptr; sptr--; len++; hsh = t; *tt++ = t; t = *dptr++;      while((t >'@') && (t<= 'Z')) {len++; hsh += t; *tt++ = t; t = *dptr++;}      hsh &= 0x17; n = htaba[hsh];      while(n>=0){	if((len == ltaba[n]) && (!strncmp(bigaarr[n],tokenc,len))) return(len);	n = nxtaba[n];      }      tptr = dptr-1; return(0);    }  }  return(-1);}hashh(){  int i,j,k,l;  for(i=0;i<33;i++) htaba[i] = htabd[i] = -1;  i=0; while(bigdarr[i][0]){maaktoken(0,i); i++;} teld = i;  /*for(i=0;i<32;i++){fprintf(stderr,"i %d\t",i); j = htabd[i];	while(j>=0) {fprintf(stderr,"%3d j %6s  ",j,bigdarr[j]); j=nxtabd[j];}	putc('\n',stderr);} putc('\n',stderr);*/  i=0; while(bigaarr[i][0]){maaktoken(1,i); i++;} tela = i;  /*for(i=0;i<32;i++){fprintf(stderr,"i %d\t",i); j = htaba[i];	while(j>=0) {fprintf(stderr,"%3d j %6s  ",j,bigaarr[j]); j=nxtaba[j];}	putc('\n',stderr);} putc('\n',stderr);*/  hphash();}hphash(){  int i,j,rlen;  char *p;  FILE *inputsafe;  while((rlen = getregel())>-1){ tptr = regel;    if((rlen>10) && (regel[8]<=' ') && !(strncmp(includfil,regel,8))) {	inputsafe = inptr; while(*tptr != '"') tptr++; tptr++; p=tptr;	while(*tptr != '"') tptr++; *tptr = '\0';	if((inptr = fopen(p,"r")) == NULL){ fprintf(stderr,	    "cannot open include file %s\n",p); inptr = inputsafe; continue;}	else fprintf(stderr,"Include file found %s\n",p);	hphash(); inptr = inputsafe;    }    else {while((j=zoektoken())>=0){      if(j){ for(i=0;i<j;i++) *sptr++ |= 0x20; tptr = sptr;}    }    fprintf(uitptr,"%s\n",regel);}  }}main(){ inptr = stdin; uitptr = stdout; hashh();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -