- * we store zero into WORD if there's no checksum error, else nonzero. */
-
- if(OP != 0){long ifvar; ifvar=(STATE); switch (ifvar<0? -1 : ifvar>0? 1 :
- 0) { case -1: goto L30; case 0: goto L10; case 1: goto L30; }}
- if(STATE == 0)return;
- if(N == 250)SAVEIO(1,STATE > 0,BUF);
- N=MOD(N,250)+1;
- H1=MOD(HASH*1093L+221573L,1048576L);
- HASH=MOD(H1*1093L+221573L,1048576L);
- H1=MOD(H1,1234)*765432+MOD(HASH,123);
- N--;
- if(STATE > 0)WORD=BUF[N]+H1;
- BUF[N]=WORD-H1;
- N++;
- CKSUM=MOD(CKSUM*13+WORD,1000000000L);
- return;
-
-L10: STATE=OP;
- SAVEIO(0,STATE > 0,BUF);
- N=1;
- if(STATE > 0) goto L15;
- HASH=MOD(WORD,1048576L);
- BUF[0]=1234L*5678L-HASH;
-L13: CKSUM=BUF[0];
- return;
-
-L15: SAVEIO(1,true,BUF);
- HASH=MOD(1234L*5678L-BUF[0],1048576L);
- goto L13;
-
-L30: if(N == 250)SAVEIO(1,STATE > 0,BUF);
- N=MOD(N,250)+1;
- if(STATE > 0) goto L32;
- N--; BUF[N]=CKSUM; N++;
- SAVEIO(1,false,BUF);
-L32: N--; WORD=BUF[N]-CKSUM; N++;
- SAVEIO(-1,STATE > 0,BUF);
- STATE=0;
+ * we store zero into *PWORD if there's no checksum error, else nonzero. */
+{
+ static long buf[250], cksum = 0, h1, hash = 0, n = 0, state = 0;
+
+ if (op != 0)
+ {
+ long ifvar = state;
+ switch (ifvar<0 ? -1 : (ifvar>0 ? 1 : 0))
+ {
+ case -1:
+ case 1:
+ if(n == 250)SAVEIO(1,state > 0,buf);
+ n=MOD(n,250)+1;
+ if(state <= 0) {
+ n--; buf[n]=cksum; n++;
+ SAVEIO(1,false,buf);
+ }
+ n--; *pword=buf[n]-cksum; n++;
+ SAVEIO(-1,state > 0,buf);
+ state=0;
+ break;
+ case 0: /* FIXME: Huh? should be impossible */
+ state=op;
+ SAVEIO(0,state > 0,buf);
+ n=1;
+ if(state <= 0) {
+ hash=MOD(*pword,1048576L);
+ buf[0]=1234L*5678L-hash;
+ }
+ SAVEIO(1,true,buf);
+ hash=MOD(1234L*5678L-buf[0],1048576L);
+ cksum=buf[0];
+ return;
+ }
+ }
+ if(state == 0)