Annotation of 42BSD/games/ddl/doc/wishlist, revision 1.1.1.1

1.1       root        1: Date: 25 Apr 1980 1546-PST (Friday)
                      2: From: mike at UCLA Computer Science VAX (Mike Urban)
                      3: Subject: ATTN: DDL Implementors
                      4: To: cc (UCLA Computer Club)
                      5: 
                      6:    I would like the following changes made in DDL:
                      7: 
                      8: 1) Friendlier Parsing.  You should be able to say 
                      9:        give troll the knife
                     10:    and get away with it (with "knife" as Dobj and "troll" as Iobj).  You
                     11:    should get messages like "I don't know how to tke" in the event
                     12:    of a bad verb, and "I think 'north' is a verb" in the event
                     13:    of a weird parse like "push north wall".  You should be able
                     14:    to say things like "e.s.s.take thing. eat thing. look" and have
                     15:    the parser treat the "." as equivalent to and end-of-line.  
                     16:                /* ACCOMPLISHED 6/13/80.  Syntax errors are now
                     17:                of the form "I don't know how to xxx" if an unknown
                     18:                word is encountered (the whole word, not just 5 letters
                     19:                is printed); "I don't know the word 'xxxxxx'" for other
                     20:                unknown words; and "I don't understand, because I 
                     21:                think 'xxxxxx' is a [noun/verb/adjective/etc]" for
                     22:                other syntax errors.  The separator was already
                     23:                built into the lexer, but it's a comma, not a period.
                     24:                And VERB IOBJ DOBJ is a legal syntax now, but 
                     25:                VERB PREP IOBJ DOBJ isn't (tho it's easy to add) */
                     26:        MAYBE
                     27:    (if it isn't hard), you should be able to say "take this, that, the other"
                     28:    and have a more sophisticated control loop which causes it to act
                     29:    like "take this.  take that.  take the other" with the EXCEPTION that
                     30:    no daemon/fuse processing is performed (no turn increment) and that
                     31:    the whole thing can be short-circuited by an appropriate Exit code.
                     32: 
                     33: 2) Generalized routine and object handling.  The routines associated with
                     34:    objects should be properties of that object just like the others.  The
                     35:    constants that tell WHICH property is, say, the Action property should
                     36:    be predefined.  So ($setp room1 LDESC Rubbl) would set the long 
                     37:    description of room1 to the routine Rubbl (which describes the rubble
                     38:    left by the explosion you just triggered...).   
                     39: 
                     40:        /*** ACCOMPLISHED 6/6/80 ***/
                     41: 
                     42: 3) Improved global handling.  The programmer shouldn't have to know the
                     43:    "address" of his globals.  Instead, a construct like 
                     44:        VAR score
                     45:    would be the equivalent of saying "score = xxx" where xxx is one less
                     46:    than the last VAR done.  
                     47: 
                     48:        /*** ACCOMPLISHED 5/29/80 ***/
                     49: 
                     50: 
                     51: 4) Improved grammeme access.  There should be predefined VARs which
                     52:    contain the values of ($verb) ($dobj) and ($iobj).  You should
                     53:    be able to re-assign these.  SO, you should be able to say
                     54:        turn off lamp   
                     55:    and the PreVerb routine for "turn" might contain something like
                     56:        (($eq @Iobj off):
                     57:                ($setg Verb douse)
                     58:                ($setg Iobj 0)
                     59:        )
                     60:                /*** Accomplished 6/12/80; Only change in
                     61:                        ddlrun is #defines for verbtodo, etc */
                     62: 
                     63:    Because verbs don't have properties, we may wish for functions
                     64:    to access their preverb and action routines as well.
                     65: 
                     66: 5) String handling:  It'd sure be nice to have someone type
                     67:        incant "abra ca dabra" 
                     68:    and be able to talk about ($subs Dobj @var 1) or ($indx @Dobj "abra")
                     69:    or whatever.  I don't know exactly how to implement it yet.
                     70:                /*** Accomplished 7/28/80;  STRINGs are negative-valued
                     71:                objects.  If the lexer gets a string, it puts it into
                     72:                a temporary string area (that is flushed every turn) and
                     73:                returns an index (not pointer) into that are as a negative
                     74:                number.  The parser knows about these and can handle
                     75:                verb string  and  verb string prep iobj   sentences.
                     76:                (the latter being for "Incant "rise" over seed".)
                     77: 
                     78:                If the dobj or iobj of an input is a string, the dobj
                     79:                and iobj routines called are the ones associated with
                     80:                the object STRING (if such is defined by the DDL
                     81:                programmer).  At present, the functions $substr, $length
                     82:                and $eqst  are defined.  $substr returns a negative
                     83:                pointer into the temp string area; this can be stored
                     84:                in a global, for example.  A permanent string area
                     85:                is available, but I haven't written the function 
                     86:                ($sets glbl string) which would move the string to the
                     87:                permanent area and put its index therein into glbl.
                     88:                                Mike            ***/
                     89:                /*** On 8/20/80, I added a new function (which, mirable dictu,
                     90:                will allow coding of the "echo" room!), ($read), which
                     91:                pauses, gets a line of input, and returns the line as
                     92:                a string!  Gee, if we code up ($pars str verb dobj iobj)...
                     93: 
                     94: 6) Ctrl-D should terminate the program.  Ctrl-C should interrupt whatever
                     95:    is happening and begin a new turn.
                     96:    Note that this may leave things in a bad state.
                     97: 
                     98: 7) New language construct: (WHILE condexp : formlist) is essentially
                     99:    equivalent to (condexp : formlist ($____ formlist+condexp)) where
                    100:    "($____ formlist+condexp)" is a new operator, JUMPB (jump back),
                    101:    which is just like the current $.... jump forward instruction, but
                    102:    (obviously) negative, and unconditional.  It goes back exactly to
                    103:    the beginning of the test.
                    104:                /*** ACCOMPLISHED 8/18/80 --Mike ***/
                    105: 
                    106: 8) New routine ($rand n) produces a somewhat random number in the range
                    107:    1..n .      /*** ACCOMPLISHED 8/18/80 ***/
                    108: 
                    109: 9) DDLRUN sources should be reorganized so as to enable recompilation
                    110:    of less than the entire program if some less global change (such
                    111:    as the addition of a new routine, or a bug fix in the parser) is
                    112:    made.
                    113:                /*** Somewhat accomplished 10/80.  Still needs 
                    114:                     work.  In particular, changes in extvars.c must
                    115:                     be reflected in extvars.h ***/
                    116: 
                    117: 10) The symbol table, and the hash routine, are simple-minded.  The
                    118:    5-character limitation on names is a real pain for some people.
                    119:    For example, you can't even fake the Zork puzzle room by allowing
                    120:    someone to say "push northern wall".  
                    121:    These changes don't have to go together.
                    122: 
                    123:                /*** ACCOMPLISHED(!!) 11/80.  Identifiers are pretty
                    124:                        much as long as you like.  The symbol table,
                    125:                        now alphabetized, contains indices (not pointers)
                    126:                        into a pool of identifiers that starts at
                    127:                        sbrk(0).  A binary search algorithm is used.
                    128:                        This will enable a future version to respond
                    129:                        correctly to unambiguous abbreviations for
                    130:                        things at runtime (like news for the aard
                    131:                        newspaper, for a cogent example).  This
                    132:                        hasn't been tested for portability to a
                    133:                        PDP-11 under V7, so beware. As of 11/18,
                    134:                        the symbol table is still unencrypted ***/
                    135:                /*** The runtime parser recognizes unambiguous 
                    136:                        abbreviations.  The symbol table is still
                    137:                        unencrypted.  1/81 ***/
                    138: 
                    139: 11) It should be available on a micro.
                    140:                        /* Not yet.  But the thinking has begun! */
                    141:                        /* This will necessitate some rearchitecture
                    142:                           especially wrt buffering of routines/strings */
                    143: 
                    144: 12) The ACTION routine for verbs should execute AFTER the action 
                    145:     routine for your room; this enables east(ACTION) to correctly
                    146:     default to ($say "Can't go that way.") and allow one to generally
                    147:     live without $hit and $miss, crocky routines that they are.
                    148:     See ../sample (espec. transit.ddl) for a specimen of how this works.
                    149: 
                    150:                        /* 11/80 */
                    151: 
                    152: 13) Routines that get the action and preaction routines for verbs
                    153:     should be made available.  
                    154: 
                    155: 14) Fuses and daemons aren't QUITE right (fuses go off after your daemon
                    156:        has typed a prompt, for a real-world example).  Maybe they
                    157:        shd be on a homogenized priority queue?
                    158: 
                    159: 15) It should be frozen real soon.
                    160:                        /* As of 1/81, we're STILL thinking in terms
                    161:                           of "just this ONE more feature..."  Damn. */
                    162: 
                    163: 
                    164: 
                    165:        Mike
                    166: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.