/*********************************************************/ /* */ /* PISTOL-Portably Implemented Stack Oriented Language */ /* Version 1.3 */ /* (C) 1982 by Ernest E. Bergmann */ /* Physics, Building #16 */ /* Lehigh Univerisity */ /* Bethlehem, Pa. 18015 */ /* */ /* Permission is hereby granted for all reproduction and */ /* distribution of this material provided this notice is */ /* is included. */ /* */ /*********************************************************/ /* fifth module, February, 1982 */ #include "bdscio.h" #include "pistol.h" int *find(ptoken) /*returns address of dict'ary word or FALS*/ int *ptoken; /* string to be looked up;"int" more efficient*/ {int *loc,*v; for(loc=FALS,v=ram[-32].pw;(v>&ram[VBASE-1]) && !loc ;v--) loc=vfind(ptoken,v); return(loc); } int *vfind(ptoken,v) int *ptoken,*v; {/*vloc &vmatch are at end of pist.h*/ vloc=*v; vloc=*vloc; if(vloc) do {vmatch=FALS; if(Pw=*(vloc-2),*Pw==*ptoken) vmatch=pstrcmp(ptoken); if(!vmatch) vloc=*(vloc-3); } while(vloc && !vmatch); return(vloc); } char pstrcmp(str2) /* returns FALS if not a PISTOL string match*/ char *str2; {/*char pcount,*Pc3; is at end of pist.h*/ Pc3=Pw; pcount=*Pc3; Pc3++ ; str2 ++ ; for(; pcount ; --pcount,++Pc3,++str2) if(*Pc3 != *str2) break; return( !pcount ); } intoken() /* Feb 13 remove need for ptr,partly ptr2 */ {char count,*ptr2; ptr2=ram[-4].pc; for(count=0;!white(*ram[-15].pc);nextch()) { count++ ; ptr2++ ; if(ram[-17].in) *ptr2=toupper(*ram[-15].pc) ; else *ptr2 =*ram[-15].pc ; } *ram[-4].pc=count ; } nextch() /* Feb 13 removed Pc crutch */ {if (*ram[-15].pc != NEWLINE) ram[-15].pc++ ; } ignrblnks() /* Feb 13 removed Pc crutch */ { while((*ram[-15].pc==9) ||(*ram[-15].pc==32)) ram[-15].pc++ ; } prompt() {if(ram[-50].pw) interpret(ram[-50].pw); else {if(ram[-24].in) carret(); if(ram[-14].in) putch(strings[0]); message(&strings[1]); if(ram[-14].in) puts("> "); if(ram[-12].in)fputs("> ",list); } } int white(c) /* better than isspace(c) */ char c; { if(c==32) return(TRU); if(c==9) return(TRU); if(c==NEWLINE) return(TRU); return(c==0); } .