Begin to split undifferentiated longs into semantic types.

This commit is contained in:
Eric S. Raymond 2017-06-06 14:28:27 -04:00
parent 75bf848ecd
commit c1ee521f73
2 changed files with 16 additions and 13 deletions

View file

@ -9,6 +9,9 @@ typedef struct lcg_state
unsigned long a, c, m, x; unsigned long a, c, m, x;
} lcg_state; } lcg_state;
typedef long token_t; /* word token - someday this will be a character array */
typedef long vocab_t; /* index into a vocabulary array */
extern long ABB[], ATLOC[], BLKLIN, DFLAG, DLOC[], FIXED[], HOLDNG, extern long ABB[], ATLOC[], BLKLIN, DFLAG, DLOC[], FIXED[], HOLDNG,
LINK[], LNLENG, LNPOSN, LINK[], LNLENG, LNPOSN,
PARMS[], PLACE[]; PARMS[], PLACE[];
@ -21,17 +24,17 @@ extern lcg_state lcgstate;
#define READ_MODE "rb" #define READ_MODE "rb"
#define WRITE_MODE "wb" #define WRITE_MODE "wb"
extern void SPEAK(long); extern void SPEAK(vocab_t);
extern void PSPEAK(long,long); extern void PSPEAK(vocab_t,int);
extern void RSPEAK(long); extern void RSPEAK(vocab_t);
extern void SETPRM(long,long,long); extern void SETPRM(long,long,long);
extern bool fGETIN(FILE *,long*,long*,long*,long*); extern bool fGETIN(FILE *,token_t*,token_t*,token_t*,token_t*);
#define GETIN(input,WORD1,WORD1X,WORD2,WORD2X) fGETIN(input,&WORD1,&WORD1X,&WORD2,&WORD2X) #define GETIN(input,WORD1,WORD1X,WORD2,WORD2X) fGETIN(input,&WORD1,&WORD1X,&WORD2,&WORD2X)
extern long YES(FILE *,long,long,long); extern long YES(FILE *,vocab_t,vocab_t,vocab_t);
extern long GETTXT(long,long,long); extern long GETTXT(bool,bool,bool);
extern long MAKEWD(long); extern token_t MAKEWD(long);
extern void fPUTTXT(long,long*,long); extern void fPUTTXT(long,long*,long);
#define PUTTXT(WORD,STATE,CASE) fPUTTXT(WORD,&STATE,CASE) #define PUTTXT(WORD,STATE,CASE) fPUTTXT(WORD,&STATE,CASE)

12
misc.c
View file

@ -12,7 +12,7 @@
/* I/O routines (SPEAK, PSPEAK, RSPEAK, SETPRM, GETIN, YES) */ /* 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; 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 /* Print the message which starts at LINES(N). Precede it with a blank line
@ -111,7 +111,7 @@ L40: if(BLANK)TYPE0();
return; return;
} }
void PSPEAK(long MSG,long SKIP) { void PSPEAK(vocab_t MSG,int SKIP) {
long I, M; long I, M;
/* Find the skip+1st message from msg and print it. MSG should be the index of /* Find the skip+1st message from msg and print it. MSG should be the index of
@ -129,7 +129,7 @@ L9: SPEAK(M);
return; return;
} }
void RSPEAK(long I) { void RSPEAK(vocab_t I) {
/* Print the I-TH "random" message (section 6 of database). */ /* Print the I-TH "random" message (section 6 of database). */
@ -194,8 +194,8 @@ L22: JUNK=GETTXT(false,true,true);
#undef WORD2X #undef WORD2X
#define GETIN(SRC,WORD1,WORD1X,WORD2,WORD2X) fGETIN(SRC,&WORD1,&WORD1X,&WORD2,&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 YES(FILE *input, vocab_t X, vocab_t Y, vocab_t Z) {
long YEAH, REPLY, JUNK1, JUNK2, JUNK3; token_t YEAH, REPLY, JUNK1, JUNK2, JUNK3;
/* Print message X, wait for yes/no answer. If yes, print Y and return true; /* Print message X, wait for yes/no answer. If yes, print Y and return true;
* if no, print Z and return false. */ * if no, print Z and return false. */
@ -223,7 +223,7 @@ L20: YEAH=false;
* machine dependent i/o stuff is on the following page. See that page * machine dependent i/o stuff is on the following page. See that page
* for a description of MAPCOM's inline array. */ * for a description of MAPCOM's inline array. */
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. /* 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 * 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 * blank. UPPER says to map all letters to uppercase. If we reach the