X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=misc.c;h=5c71c744d7067f4806e5664e2878324c8ce82ff0;hb=07c0020a7aaa0ab34ee0e4f6e3a9ae0e1fe06c25;hp=04792eb9c38fb3955cecaa2f1ce30ff0f65ee909;hpb=4babd6d05829d1710f68914a25dd6c1ba30fe204;p=open-adventure.git diff --git a/misc.c b/misc.c index 04792eb..5c71c74 100644 --- a/misc.c +++ b/misc.c @@ -12,7 +12,7 @@ /* I/O routines (SPEAK, PSPEAK, RSPEAK, SETPRM, GETIN, YES) */ -void SPEAK(long N) { +void SPEAK(vocab_t N) { long BLANK, CASE, I, K, L, NEG, NPARMS, PARM, PRMTYP, STATE; /* Print the message which starts at LINES(N). Precede it with a blank line @@ -22,7 +22,7 @@ long BLANK, CASE, I, K, L, NEG, NPARMS, PARM, PRMTYP, STATE; BLANK=BLKLIN; K=N; NPARMS=1; -L10: L=IABS(LINES[K])-1; +L10: L=labs(LINES[K])-1; K=K+1; LNLENG=0; LNPOSN=1; @@ -52,7 +52,7 @@ L32: if(LNPOSN > LNLENG) goto L40; if(PRMTYP < 1 || PRMTYP > 9) goto L30; SHFTXT(LNPOSN+2,PRMTYP-2); LNPOSN=LNPOSN+PRMTYP; - PARM=IABS(PARMS[NPARMS]); + PARM=labs(PARMS[NPARMS]); NEG=0; if(PARMS[NPARMS] < 0)NEG=9; /* 390 */ for (I=1; I<=PRMTYP; I++) { @@ -111,7 +111,7 @@ L40: if(BLANK)TYPE0(); return; } -void PSPEAK(long MSG,long SKIP) { +void PSPEAK(vocab_t MSG,int SKIP) { long I, M; /* Find the skip+1st message from msg and print it. MSG should be the index of @@ -121,7 +121,7 @@ long I, M; M=PTEXT[MSG]; if(SKIP < 0) goto L9; for (I=0; I<=SKIP; I++) { -L1: M=IABS(LINES[M]); +L1: M=labs(LINES[M]); if(LINES[M] >= 0) goto L1; /*etc*/ ; } /* end loop */ @@ -129,7 +129,7 @@ L9: SPEAK(M); return; } -void RSPEAK(long I) { +void RSPEAK(vocab_t I) { /* Print the I-TH "random" message (section 6 of database). */ @@ -194,8 +194,8 @@ L22: JUNK=GETTXT(false,true,true); #undef WORD2X #define GETIN(SRC,WORD1,WORD1X,WORD2,WORD2X) fGETIN(SRC,&WORD1,&WORD1X,&WORD2,&WORD2X) -long YES(FILE *input, long X, long Y, long Z) { -long YEAH, REPLY, JUNK1, JUNK2, JUNK3; +long YES(FILE *input, vocab_t X, vocab_t Y, vocab_t Z) { +token_t YEAH, REPLY, JUNK1, JUNK2, JUNK3; /* Print message X, wait for yes/no answer. If yes, print Y and return true; * if no, print Z and return false. */ @@ -215,7 +215,7 @@ L20: YEAH=false; } -/* Line-parsing routines (GETNUM, GETTXT, MAKEWD, PUTTXT, SHFTXT, TYPE0) +/* Line-parsing routines (GETTXT, MAKEWD, PUTTXT, SHFTXT, TYPE0) */ /* The routines on this page handle all the stuff that would normally be * taken care of by format statements. We do it this way instead so that @@ -223,40 +223,7 @@ L20: YEAH=false; * machine dependent i/o stuff is on the following page. See that page * for a description of MAPCOM's inline array. */ -long GETNUM(FILE *source) { -long DIGIT, NUMBER, SIGN; - -/* Obtain the next integer from an input line. If K>0, we first read a - * new input line from a file; if K<0, we read a line from the keyboard; - * if K=0 we use a line that has already been read (and perhaps partially - * scanned). If we're at the end of the line or encounter an illegal - * character (not a digit, hyphen, or blank), we return 0. */ - - - if(source != NULL)MAPLIN(source); - NUMBER=0; -L10: if(LNPOSN > LNLENG)return(NUMBER); - if(INLINE[LNPOSN] != 0) goto L20; - LNPOSN=LNPOSN+1; - goto L10; - -L20: SIGN=1; - if(INLINE[LNPOSN] != 9) goto L32; - SIGN= -1; -L30: LNPOSN=LNPOSN+1; -L32: if(LNPOSN > LNLENG || INLINE[LNPOSN] == 0) goto L42; - DIGIT=INLINE[LNPOSN]-64; - if(DIGIT < 0 || DIGIT > 9) goto L40; - NUMBER=NUMBER*10+DIGIT; - goto L30; - -L40: NUMBER=0; -L42: NUMBER=NUMBER*SIGN; - LNPOSN=LNPOSN+1; - return(NUMBER); -} - -long GETTXT(long SKIP,long ONEWRD, long UPPER) { +long GETTXT(bool SKIP,bool ONEWRD, bool UPPER) { /* Take characters from an input line and pack them into 30-bit words. * Skip says to skip leading blanks. ONEWRD says stop if we come to a * blank. UPPER says to map all letters to uppercase. If we reach the @@ -305,7 +272,7 @@ long GETTXT(long SKIP,long ONEWRD, long UPPER) { return(TEXT); } -long MAKEWD(long LETTRS) { +token_t MAKEWD(long LETTRS) { long I, L, WORD; /* Combine five uppercase letters (represented by pairs of decimal digits @@ -315,15 +282,13 @@ long I, L, WORD; * kludgey workaround, you can increment a letter by 5 by adding 50 to * the next pair of digits. */ - WORD=0; I=1; - L=LETTRS; -L10: WORD=WORD+I*(MOD(L,50)+10); - I=I*64; - if(MOD(L,100) > 50)WORD=WORD+I*5; - L=L/100; - if(L != 0) goto L10; + for (L=LETTRS; L != 0; L=L/100) { + WORD=WORD+I*(MOD(L,50)+10); + I=I*64; + if(MOD(L,100) > 50)WORD=WORD+I*5; + } I=64L*64L*64L*64L*64L/I; WORD=WORD*I; return(WORD); @@ -331,7 +296,7 @@ L10: WORD=WORD+I*(MOD(L,50)+10); #define STATE (*sTATE) -void fPUTTXT(long WORD, long *sTATE, long CASE) { +void fPUTTXT(token_t WORD, long *sTATE, long CASE) { long ALPH1, ALPH2, BYTE, DIV, I, W; /* Unpack the 30-bit value in word to obtain up to 5 integer-encoded chars, @@ -346,13 +311,13 @@ long ALPH1, ALPH2, BYTE, DIV, I, W; ALPH1=13*CASE+24; - ALPH2=26*IABS(CASE)+ALPH1; - if(IABS(CASE) > 1)ALPH1=ALPH2; + ALPH2=26*labs(CASE)+ALPH1; + if(labs(CASE) > 1)ALPH1=ALPH2; /* ALPH1&2 DEFINE RANGE OF WRONG-CASE CHARS, 11-36 OR 37-62 OR EMPTY. */ DIV=64L*64L*64L*64L; W=WORD; /* 18 */ for (I=1; I<=5; I++) { - if(W <= 0 && STATE == 0 && IABS(CASE) <= 1)return; + if(W <= 0 && STATE == 0 && labs(CASE) <= 1)return; BYTE=W/DIV; if(STATE != 0 || BYTE != 63) goto L12; STATE=63; @@ -544,7 +509,7 @@ long I, J; I=PLACE[OBJECT]; J=FIXED[OBJECT]; MOVE(OBJECT,I); - MOVE(OBJECT+100,J); + MOVE(OBJECT+NOBJECTS,J); return; } @@ -556,10 +521,10 @@ long FROM; * are not at any loc, since carry wants to remove objects from ATLOC chains. */ - if(OBJECT > 100) goto L1; + if(OBJECT > NOBJECTS) goto L1; FROM=PLACE[OBJECT]; goto L2; -L1: {long x = OBJECT-100; FROM=FIXED[x];} +L1: {long x = OBJECT-NOBJECTS; FROM=FIXED[x];} L2: if(FROM > 0 && FROM <= 300)CARRY(OBJECT,FROM); DROP(OBJECT,WHERE); return; @@ -580,10 +545,10 @@ void CARRY(long OBJECT, long WHERE) { long TEMP; /* Start toting an object, removing it from the list of things at its former - * location. Incr holdng unless it was already being toted. If OBJECT>100 + * location. Incr holdng unless it was already being toted. If OBJECT>NOBJECTS * (moving "fixed" second loc), don't change PLACE or HOLDNG. */ - if(OBJECT > 100) goto L5; + if(OBJECT > NOBJECTS) goto L5; if(PLACE[OBJECT] == -1)return; PLACE[OBJECT]= -1; HOLDNG=HOLDNG+1; @@ -602,11 +567,11 @@ void DROP(long OBJECT, long WHERE) { /* Place an object at a given loc, prefixing it onto the ATLOC list. Decr * HOLDNG if the object was being toted. */ - if(OBJECT > 100) goto L1; + if(OBJECT > NOBJECTS) goto L1; if(PLACE[OBJECT] == -1)HOLDNG=HOLDNG-1; PLACE[OBJECT]=WHERE; goto L2; -L1: {long x = OBJECT-100; FIXED[x]=WHERE;} +L1: {long x = OBJECT-NOBJECTS; FIXED[x]=WHERE;} L2: if(WHERE <= 0)return; LINK[OBJECT]=ATLOC[WHERE]; ATLOC[WHERE]=OBJECT; @@ -626,9 +591,9 @@ long AT, I; AT=0; if(DFLAG < 2)return(AT); AT= -1; - for (I=1; I<=5; I++) { - if(DLOC[I] == WHERE) goto L2; - if(DLOC[I] != 0)AT=0; + for (I=1; I<=NDWARVES-1; I++) { + if(game.dloc[I] == WHERE) goto L2; + if(game.dloc[I] != 0)AT=0; } /* end loop */ return(AT); @@ -641,7 +606,7 @@ L2: AT=I; long SETBIT(long bit) { /* Returns 2**bit for use in constructing bit-masks. */ - 2 << bit; + return(2 << bit); } bool TSTBIT(long mask, int bit) { @@ -768,7 +733,7 @@ long I, VAL; if(MAP2[1] == 0)MPINIT(); - if (!oldstyle && SETUP && OPENED == stdin) + if (!oldstyle && OPENED == stdin) fputs("> ", stdout); do { IGNORE(fgets(rawbuf,sizeof(rawbuf)-1,OPENED)); @@ -885,5 +850,4 @@ void DATIME(long* D, long* T) { *T = (long) tv.tv_usec; } -long IABS(N)long N; {return(N<0? -N : N);} long MOD(N,M)long N, M; {return(N%M);}