|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T n
Length: 3681 (0xe61) Types: TextFile Names: »nxtsct.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Empire.V/V1.1/EMPSUBS/nxtsct.c«
#define D_UPDATE #define D_NATSTR #define D_SCTSTR #define D_DCHRSTR #define D_ICHRSTR #define D_NSCSTR #define D_FILES #include "empdef.h" snxtsct(nsp, sectarg) struct nstr *nsp; char *sectarg; { register char *cp; char c, *bp, buf[16]; if( sargs(sectarg) == -1 ) { printf("'%s'? -- Can't decipher sector(s) arg.\n", sectarg); return(-1); } nsp->n_lx = lx; nsp->n_hx = hx; nsp->n_ly = ly; nsp->n_hy = hy; nsp->n_ncond = 0; cp = condarg; X146: if( *cp == '\0' ) goto X442; for( bp = buf; (c = *cp++) != '\0'; bp++ ) { if( c == '<' ) break; if( c == '=' ) break; if( c == '>' ) break; if( c == '#' ) break; *bp = c; } if( c == '\0' ) { printf("'%s'? -- meaningless condition?\n", condarg); return(-1); } *bp = '\0'; nsp->n_cond[nsp->n_ncond].n_oper = c; if( (nsp->n_cond[nsp->n_ncond].n_fld1 = encode(buf)) == -1 ) return(-1); if( (nsp->n_cond[nsp->n_ncond++].n_fld2 = encode(cp)) == -1 ) return(-1) ; X416: if( (c = *cp++) == '\0' ) goto X434; if( c != '&' ) goto X416; X434: if( c != '\0' ) goto X146; X442: nsp->n_ix = ix; nsp->n_iy = iy; nsp->n_x = nsp->n_lx - nsp->n_ix; nsp->n_y = nsp->n_ly; return(0); } nxtsct(nsp, selup) struct nstr *nsp; int selup; { register i, oper; int val1, val2, pkgs; X10: nsp->n_x += nsp->n_ix; if( nsp->n_x != nsp->n_hx ) goto X130; nsp->n_x = nsp->n_lx; nsp->n_y += nsp->n_iy; if( nsp->n_y != nsp->n_hy ) goto X130; return(0); X130: if( getsect(nsp->n_x, nsp->n_y, selup) < 0 ) goto X10; pkgs = dchr[sect.sct_desig].d_pkg; i = nsp->n_ncond; X216: i--; if( i < 0 ) goto X424; val1 = decode(nsp->n_cond[i].n_fld1, pkgs); val2 = decode(nsp->n_cond[i].n_fld2, pkgs); oper = nsp->n_cond[i].n_oper; if( oper != '<' ) goto X352; if( val1 >= val2 ) goto X424; X352: if( oper != '=' ) goto X370; if( val1 != val2 ) goto X424; X370: if( oper != '>' ) goto X406; if( val1 <= val2 ) goto X424; X406: if( oper != '#' ) goto X216; if( val1 != val2 ) goto X216; X424: if( i < 0 ) goto X434; goto X10; X434: return(1); } encode(string) char *string; { register char *cp; register i; cp = string; if( *cp < '0' ) goto X34; if( *cp > '9' ) goto X34; return(atoi(cp) & 03777); X34: if( *(cp+1) == '\0' ) goto X52; if( *(cp+1) != '&' ) goto X156; X52: i = 0; goto X102; X56: if( *cp != dchr[i].d_mnem ) goto X100; return(i); X100: i++; X102: if( dchr[i].d_mnem != '\0' ) goto X56; printf("%s -- not a designation", cp); return(-1); X156: i = stmtch(cp, &ichr[0].i_name, sizeof(struct ichrstr)); if( i < 0 ) goto X212; return(i | 04000); X212: printf("%s -- %s commodity", cp, ((i == -2) ? "ambiguous" : "not a")); return(-1); } decode(code, pkgs) int code, pkgs; { register char *cp; if( (04000 & code) != 0 ) { code &= 0177; cp = (char *)§ + (int)code; code = ichr[code].i_pkg[pkgs] * *cp; } return(code); }