home *** CD-ROM | disk | FTP | other *** search
- /*********************************************************/
- /* */
- /* 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);
- }
-
-