|
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 s
Length: 5775 (0x168f) Types: TextFile Names: »support.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Abermud/support.c«
/* * Some more basic functions * Note that state(obj) setobjstate(obj,val) destroy(obj) * are elsewhere *Pflags * 0 sex * 1 May not be exorcised ok * 2 May change pflags ok * 3 May use rmedit ok * 4 May use debugmode ok * 5 May use patch * 6 May be snooped upon * 7 Always Log This User * 8 Brief * 9 Invis start */ #include "kernel.h" #ifdef RCSID static char RCS[] = "$Header: support.c,v 1.1 89/03/13 09:37:48 rsalz Exp $"; #endif /* RCSID */ #define CHAR1 0x00FF #define CHAR2 0xFF00 /* VARARGS2 */ mudlog(args, arg1, arg2) char *args, *arg1, *arg2; { time_t tm; FILE *x; char *z; time(&tm); z = ctime(&tm); *strchr(z, '\n') = 0; if ((x = openlock(LOG_FILE, "a")) == NULL) { loseme(); crapup("Log fault : Access Failure"); } fprintf(x, "%s: ", z); fprintf(x, args, arg1, arg2); fprintf(x, "\n"); closelock(x); } byte_put(x, y, z) int *x, y, z; { if (y == 1) { *x &= ~CHAR1; *x |= z; } else { *x &= ~CHAR2; *x |= ((z << 8) & CHAR2); } } byte_fetch(x, y) int x, y; { return (y == 1 ? x : x >> 8) & CHAR1; } bit_fetch(x, y) int x, y; { return (x >> (16 + y)) & 1; } bit_set(x, y) int *x, y; { *x |= (1 << (16 + y)); } bit_clear(x, y) int *x, y; { *x &= ~(1 << (16 + y)); } setoloc(ob, l, c) int ob, l, c; { /* MINE LADDERS SPECIAL CASE */ if (c == 0) { if (l == -1116 || l == -1117 || l == -1119 || l == -1120 || l == -1121 || l == -1122) { l = -1124; bprintf("The %s falls down the ladder\n", oname(ob)); } if (l == -579 || l == -580 || l == -581) { l = -563; bprintf("The %s falls down the airshaft\n"); } if (l >= -999 && l <= -900 && ob != 202) l = -906; } objinfo[4 * ob] = l; objinfo[4 * ob + 3] = c; } ohany(mask) int mask; { int a; for (mask <<= 16, a = 0; a < numobs; a++) if ((iscarrby(a, mynum) || ishere(a)) && (objinfo[4 * a + 2] & mask)) return 1; return 0; } setpsex(chr, v) int chr, v; { if (v) psetflg(chr, 0); else pclrflg(chr, 0); } ptothlp(pl) int pl; { int ct; for (ct = 0; ct < MAXUSERS; ct++) { if (ploc(ct) != ploc(pl) || phelping(ct) != pl) continue; return ct; } return -1; } ptstflg(ch, x) int ch; int x; { if ((x == 2 || x == 15) && op(globme)) return 1 << x; return ublock[16 * ch + 9] & (1 << x); } int willhold(x, y) int x, y; { int a; int b; for (a = 0, b = 0; a < numobs; a++) if (iscontin(a, x)) b += osize(a); b += osize(y); return b > osize(x) ? 0 : 1; } setpfighting(x, y) int x, y; { int ct; ublock[16 * x + 14] = y; if (y == -1) { for (ct = 0; ct < 64; ct++) if (pfighting(ct) == x) ublock[16 * ct + 14] = -1; } else ublock[16 * y + 14] = x; } /* Can't be macros because of multiple evaluations... */ otstmask(ob, v) int ob; int v; { v <<= 16; return (objinfo[4 * ob + 2] & v) == v; } isavl(ob) int ob; { return ishere(ob) ? 1 : iscarrby(ob, mynum); } ospare(ob) int ob; { return otstbit(ob, 0) ? -1 : 0; } /* Too ugly to be a macro. */ char * pname(chr) int chr; { return (char *)&ublock[16 * chr]; } #ifndef USE_MACROS ocarrf(ob) int ob; { return objinfo[4 * ob + 3]; } oloc(ob) int ob; { return objinfo[4 * ob]; } ploc(chr) int chr; { return ublock[16 * chr + 4]; } plev(chr) int chr; { return ublock[16 * chr + 10]; } setplev(chr, v) int chr, v; { ublock[16 * chr + 10] = v; } pstr(chr) int chr; { return ublock[16 * chr + 7]; } setpstr(chr, v) int chr, v; { ublock[16 * chr + 7] = v; } pvis(chr) int chr; { return ublock[16 * chr + 8]; } setpvis(chr, v) int chr, v; { ublock[16 * chr + 8] = v; } psex(chr) int chr; { return ublock[16 * chr + 9] & 1; } setpsexall(chr, v) int chr; int v; { ublock[16 * chr + 9] = v; } psexall(chr) int chr; { return ublock[16 * chr + 9]; } char * oname(ob) int ob; { return objects[ob].o_name; } char * olongt(ob, st) int ob, st; { return objects[ob].o_desc[st]; } omaxstate(ob) int ob; { return objects[ob].o_maxstate; } oflannel(ob) int ob; { return objects[ob].o_flannel; } obaseval(ob) int ob; { return objects[ob].o_value; } ppos(chr) int chr; { return ublock[16 * chr + 5]; } setppos(chr, v) int chr, v; { ublock[16 * chr + 5] = v; } setploc(chr, n) int chr, n; { ublock[16 * chr + 4] = n; } pwpn(chr) int chr; { return ublock[16 * chr + 11]; } setpwpn(chr, n) int chr, n; { ublock[16 * chr + 11] = n; } osetbit(ob, x) int ob, x; { bit_set(&objinfo[4 * ob + 2], x); } oclrbit(ob, x) int ob, x; { bit_clear(&objinfo[4 * ob + 2], x); } otstbit(ob, x) int ob, x; { return bit_fetch(objinfo[4 * ob + 2], x); } osetbyte(o, x, y) int o, x, y; { byte_put(&objinfo[4 * o + 2], x, y); } obyte(o, x) int o, x; { return byte_fetch(objinfo[4 * o + 2], x); } phelping(x) int x; { return ublock[16 * x + 13]; } setphelping(x, y) int x, y; { ublock[16 * x + 13] = y; } psetflg(ch, x) int ch; int x; { ublock[16 * ch + 9] |= (1 << x); } pclrflg(ch, x) int ch; int x; { ublock[16 * ch + 9] &= ~(1 << x); } ptstflg(ch, x) int ch; int x; { return ptstflg(ch, x); } char * oaltname(x) int x; { return objects[x].o_altname; } osize(x) int x; { return objects[x].o_size; } pfighting(x) int x; { return ublock[16 * x + 14]; } pscore(x) int x; { return ublock[16 * x + 15]; } setpscore(x, y) int x; int y; { ublock[16 * x + 15] = y; } #endif /* USE_MACROS */