|
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 m
Length: 8345 (0x2099) Types: TextFile Names: »majors.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Adventure/src/munge/majors.c«
/* ** Copyright (c) 1985 Ken Wellsch ** ** Permission is hereby granted to all users to possess, use, copy, ** distribute, and modify the programs and files in this package ** provided it is not for direct commercial benefit and secondly, ** that this notice and all modification information be kept and ** maintained in the package. ** */ #include "mdefs.h" static short int nxtint = 0 ; static short int nxtrep = 500 ; static short int nxtlab = 1000 ; static short int nxtvrb = 2000 ; static short int nxtplc = 4000 ; static short int nxttxt = 7000 ; static short int nxtobj = 8000 ; static short int nxtvar = 11000 ; int act () { register struct symstr *p ; register int key ; int interval, limit ; extern struct symstr *lookup () ; if ( gettok (token,MAXLINE) != OK ) { synerr ("Action","Missing Verb name.") ; return ; } if ( ( p = lookup (token) ) == NIL ) { synerr ("Action","%s -- Undefined Verb.",token) ; return ; } if ( type (p->s_val) == OBJECT ) { if ( p->s_aux < MAXOTEXT ) p->s_aux = MAXOTEXT ; interval = MAXOBJECTS ; limit = MAXOTEXT + MAXOCODE ; } else { interval = MAXVERBS ; limit = MAXVCODE ; } key = (p->s_val) + ( (p->s_aux) * interval ) ; if ( type (key) != VERB && type (key) != OBJECT ) { synerr ("Action","%s -- that's no action!",token) ; return ; } if ( (++(p->s_aux)) >= limit ) error ("Action","too many code definitions for %s (%d)!", token,MAXOCODE) ; if ( gettok (token,MAXLINE) == OK ) { pbstr (token) ; pbstr (" KEYWORD ") ; } compile (key) ; return ; } int at () { register struct symstr *p ; register int key ; extern struct symstr *lookup () ; if ( gettok (token,MAXLINE) != OK ) { synerr ("At","Missing Place name.") ; return ; } if ( ( p = lookup (token) ) == NIL ) { synerr ("At","%s -- Undefined Place.",token) ; return ; } key = (p->s_val) + ((p->s_aux) * MAXPLACES) ; if ( (++(p->s_aux)) >= MAXPCODE ) error ("At","too many code definitions for %s (%d)!", token,MAXPCODE) ; if ( type (key) != PLACE ) { synerr ("At","%s -- that's no Place!",token) ; return ; } flushline () ; compile (key) ; return ; } int def () { register struct symstr *p ; extern struct symstr *lookup () ; while ( gettok (token,MAXLINE) == OK ) { if ( ( p = lookup (token) ) == NIL ) { synerr ("Define","%s -- Undefined symbol.",token) ; return ; } p->s_mod = KEEP ; } return ; } #include <strings.h> int inc () { register char *s ; if ( gettok (token,MAXLINE) != OK ) { synerr ("Include","Missing file name.") ; return ; } if ( push (inunit) == ERROR ) { synerr ("Include","include's nested too deeply!") ; return ; } if ( ( inunit = openf (token) ) == ERROR ) { synerr ("Include","%s -- unable to open file.",token) ; inunit = pop () ; return ; } if ( ( s = rindex (token,'/') ) == (char *)0 ) errout ("%s:\n",token) ; else errout ("%s:\n",&(s[1])) ; flushline () ; return ; } int init () { flushline () ; compile (nxtint) ; nxtint ++ ; ninit ++ ; return ; } int lab () { extern struct symstr *define () ; if ( gettok (token,MAXLINE) != OK ) { synerr ("Label","Missing Label name.") ; return ; } if ( define (token,nxtlab,status(nxtlab)) == NIL ) { synerr ("Label","%s -- duplicate label name.",token) ; return ; } flushline () ; compile (nxtlab) ; nxtlab++ ; return ; } int null () { extern struct symstr *define () ; while ( gettok (token,MAXLINE) == OK ) { if ( define (token,NULLWORD,KEEP) == NIL ) { synerr ("Null","%s -- duplicate Null symbol",token) ; return ; } } return ; } int obj () { register struct symstr *p ; register int m, n ; extern struct symstr *define () ; if ( gettok (token,MAXLINE) != OK ) { synerr ("Object","Missing Object name.") ; return ; } if ( ( p = define (token,nxtobj,status(nxtobj)) ) == NIL ) { synerr ("Object","%s -- duplicate Obect name.",token) ; return ; } flushline () ; n = 0 ; m = getline (token,MAXLINE) ; if ( m == NEXT ) { n++ ; m = getline (token,MAXLINE) ; } if ( m == OK && token[0] == NEWLINE ) { while ( getline (token,MAXLINE) == OK ) ; m = getline (token,MAXLINE) ; n++ ; } for ( ; m != MAJOR && m != EOF ; m = getline (token,MAXLINE) ) { clrtext () ; do { if ( strncmp (token,NULLOBJECT,3) == 0 ) { clrtext () ; break ; } apptext (token) ; } while ( getline (token,MAXLINE) == OK ) ; outtext (nxtobj+((n++)*MAXOBJECTS)) ; } if ( n > 0 ) n-- ; p->s_aux = n ; nxtobj++ ; nobj ++ ; return ; } int place () { register struct symstr *p ; extern struct symstr *define () ; if ( gettok (token,MAXLINE) != OK ) { synerr ("Place","Missing Place name.") ; return ; } if ( ( p = define (token,nxtplc,status(nxtplc)) ) == NIL ) { synerr ("Place","%s -- duplicate Place name.",token) ; return ; } flushline () ; if ( getline (token,MAXLINE) == OK ) /* short description */ { if ( strncmp (token,LINKPLACE,3) == 0 ) { plink (token,SHORTDESC) ; while ( getline (token,MAXLINE) == OK ) ; } else { clrtext () ; do { apptext (token) ; } while ( getline (token,MAXLINE) == OK ) ; outtext (nxtplc) ; } } if ( getline (token,MAXLINE) == OK ) /* long description */ { if ( strncmp (token,LINKPLACE,3) == 0 ) plink (token,LONGDESC) ; else { clrtext () ; do { apptext (token) ; } while ( getline (token,MAXLINE) == OK ) ; outtext (nxtplc+MAXPLACES) ; } } p->s_aux = 2 ; nxtplc ++ ; nplace ++ ; return ; } int plink (line,which) char *line ; int which ; { char tok1[32] ; char tok2[32] ; register struct symstr *p ; register int oldkey, newkey ; extern struct symstr *lookup () ; pbstr (line) ; if ( gettok (tok1,32) != OK || gettok (tok1,32) != OK ) { synerr ("Plink","invalid link(%s)!",LINKPLACE) ; return ; } if ( tok1[0] == 'd' || tok1[0] == 'D' ) { if ( which == SHORTDESC ) { synerr ("Plink","impossible to `ditto' short description!") ; return ; } if ( dupk (dbunit,nxtplc,(nxtplc+MAXPLACES)) == ERROR ) { synerr ("Plink","unable to link to %d!",nxtplc) ; return ; } flushline () ; return ; } if ( gettok (tok2,32) != OK ) { synerr ("Plink","missing place name!") ; return ; } flushline () ; if ( ( p = lookup (tok2) ) == NIL ) synerr ("Plink","%s -- undefined place name!",tok2) ; if ( tok1[0] == 's' || tok1[0] == 'S' ) oldkey = p->s_val ; else oldkey = ( (p->s_val) + MAXPLACES ) ; if ( which == SHORTDESC ) newkey = nxtplc ; else newkey = nxtplc + MAXPLACES ; if ( dupk (dbunit,oldkey,newkey) == ERROR ) { synerr ("Plink","unable to link %d to %d!",oldkey,newkey) ; return ; } return ; } int rep () { flushline () ; compile (nxtrep) ; nxtrep ++ ; nrep ++ ; return ; } int syn () { register int val ; extern struct symstr *define () ; if ( gettok (token,MAXLINE) != OK ) { synerr ("Synonym","Missing symbol.") ; return ; } val = eval (token) ; while ( gettok (token,MAXLINE) == OK ) { if ( define (token,val,status(val)) == NIL ) { synerr ("Synonym","%s -- duplicate name.",token) ; return ; } } return ; } int text () { extern struct symstr *define () ; if ( gettok (token,MAXLINE) == OK ) { if ( define (token,nxttxt,status(nxttxt)) == NIL ) { synerr ("Text","%s -- duplicate Text name.") ; return ; } flushline () ; } clrtext () ; while ( getline (token,MAXLINE) == OK ) apptext (token) ; outtext (nxttxt) ; nxttxt ++ ; return ; } int var () { extern struct symstr *define () ; while ( gettok (token,MAXLINE) == OK ) { if ( define (token,nxtvar,status(nxtvar)) == NIL ) { synerr ("Variable","%s -- duplicate symbol.",token) ; return ; } nxtvar++ ; nvars ++ ; } return ; } int verb () { extern struct symstr *define () ; if ( gettok (token,MAXLINE) != OK ) { synerr ("Verb","Missing symbol.") ; return ; } if ( define (token,nxtvrb,status(nxtvrb)) == NIL ) { synerr ("Verb","%s -- duplicate symbol.",token) ; return ; } while ( gettok (token,MAXLINE) == OK ) { if ( define (token,nxtvrb,status(nxtvrb)) == NIL ) { synerr ("Verb","%s -- duplicate synonym.",token) ; return ; } } nxtvrb++ ; return ; }