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