30-JAN-76 10:20:18-PST,321;000000000001 Date: 30 JAN 1976 1020-PST From: MASINTER Subject: CIRCL To: Teitelman cc: HThompson, Sproull New CIRCL and CIRCL.COM on with feature added to COPYALL: The variable DONTCOPYDATATYPES (initially NIL) is used as a list of data-type numbers which should NOT be copied by COPYALL. Larry ------- 9-JAN-77 23:26:43-PST,812;000000000001 Date: 9 JAN 1977 2326-PST From: TEITELMAN Subject: EDITOR To: DRB at SU-AI cc: MASINTER Dave, whatyou want to do has been asked for before and an undocumented hook installed. this has remained fairly stable for a while so you probaby are ok to use it. ther is a function called EDITF1 which is used by EDITF, EDITV, and EDITP. it has five arguments, EXPR, COMS, ATM, TYPE, and IFCHANGEDFN TYPE currently is NIL, PROP, or T, and is used to distinguish the calls from editf, editv, etc. in any case, if IFCHANGEDFN is not NIL, and the edit results in a change, then IFCHANGEDFN is applied to ATM and EXPR. (i suppose it really shuld also be given ty`pe so you can use the same function for diffrent types, but anyway this should be sufficient for your purposes. warren ------- 2-JUL-78 22:28:17-PDT,291;000000000001 Date: 2 JUL 1978 2228-PDT From: TEITELMAN dontsavehistorycoms is a list of comands not saved by edit history. initially SAVE P ? PP PP* and E. compacthistorycoms is a lit of commands to be compacted and is initially NIL. numbers ae automatically on compacthistorycoms. ------- 3-AUG-78 12:36:50-PDT,908;000000000001 Date: 3 AUG 1978 1236-PDT From: TEITELMAN Subject: greeting To: kaplan, masinter greetdirectory is the directory on which the system initiatlizatio file is to be found. initially LISP greetfile is the name of the file, initially INIT greetext is the name of the extention, initially LISP greetfile and greetext apply to both the system initialization file and the users. the users file is always on his directory. note that greetdirectory would only be of use for makesyses or sysout other than lisp since there is no way for thatto be changed before it gets acessed, however it wuld be possible to put in init.lisp something which changed greetfile and greetext if a site wished to hae the init files stored on otherthan init.lisp. however, the main purpose of making these variables is to aid implementors in setting up their own makesyses or sysouts. warren ------- 27-SEP-78 02:47:06-PDT,952;000000000001 Date: 27 SEP 1978 0247-PDT From: MASINTER Subject: JSYS error It is now the case that JSYS calls which are followed by a JUMP (of any kind, not just ERJMP and ERCAL) which cause an illegal instruction trap, that the Lisp trap handler will resume the computation at the effective address of the JUMP instruction (normally JUMP is a no-op). By careful coding, it is possible to write JSYS calls which will not cause a "TRAP AT LOCATION" either on TENEX or TOPS-20. In addition, any JSYS trap in which the next instruction after the JSYS is a JFCL is assumed to be a "user JSYS" (i.e. rather than one of the ones in the system which are "critical region") and, rather than a TRAP AT LOCATION nnnn being executed, the error, JSYS ERROR (error number 0) is invoked. The "offender" (CADR (ERRORN)) of error 0 is always the error code. This permits an ERRORTYPELST entry which would print the error message out. Larry ------- 19-OCT-78 12:04:50-PDT,2299;000000000001 Date: 19 Oct 1978 12:04 pm (Thursday) From: bobrow at PARC-MAXC Subject: Revised Documentation for SetAlink, etc To: LEWIS at BBN-TENEXD,HARTLEY at BBN-TENEXD cc: Teitelman,lisp,bobrow This is the revised documentation for setalink, and setclink based on Daryl's last comment. There are four primitive functions for manipulating the ALINK and CLINK of a frame. Combined with the functions for manipulating the structures of a single frame (stknargs, stkname, setstkname, stkarg, setstkarg, stkargname, setstkargname) and those for setting up a new frame with specified access and control links (enveval, envapply), they form a complete set of primitives for manipulating the control structures of Lisp. Although all the other functions can be written in terms of these primitives, the user will usually want to use the higher level functions described above. alink[pos, opos) returns a stack pointer to the frame which is referred to by the access link of the frame specified by pos. If opos is supplied, and is a stackpointer, it is reused. Returns T if the access link points to the top level. Same as stknth(1,pos,opos) clink[pos, opos) returns a stack pointer to the frame which is referred to by the control link of the frame specified by pos. If opos is supplied, and is a stackpointer, it is reused. Returns T if the control link points to the top level. Same as stknth(-1,pos,opos) setalink[pos, newpos, relflg] sets the alink of the frame specified by pos to be the frame specified by newpos. Returns NIL, and does not set the link if the access chain of the frame specified by newpos contains the frame specified by pos. This prevents the user from accidentally creating a circular access chain. Returns pos otherwise, and if relflg is nonNil, and newpos is a stackpointer, then newpos is released. setclink[pos, newpos, relflg] sets the control of the frame specified by pos to be the frame specified by newpos. Returns NIL, and does not set the link if the control chain of the frame specified by newpos contains the frame specified by pos. This prevents the user from accidentally creating a circular control chain. Returns pos otherwise, and if relflg is nonNil, and newpos is a stackpointer, then newpos is released. 20-OCT-78 17:43:38-PDT,914;000000000001 Date: 20 Oct 1978 5:43 pm (Friday) From: Masinter To: laaser, lisp Subject: cc: of message re: FAKESYS Subject: MAKESYS -> FAKESYS Through a coincidence I realized that it was possible to have a lisp system which was a "sysout" in which a "makesys" had never been done. The importance of this is that such a sysout would be a good base in which to load up other packages (and in which to get rid of packages) because the space had never been tied down as system code. There is a function fakesys[file] on [maxc2]fakesys which creates such a sysout (all it does is to fool the system into thinking it is in a makesys on boot.sav and then call the (unadvised version of) sysout. The reason for calling the unadvised version is that, as a system which is just intended to save part of the loadup state, none of the GREET or SYSOUTFORMS operations should be performed). Larry 5-NOV-78 19:22:55-PST,1416;000000000001 Date: 5 NOV 1978 1922-PST From: TEITELMAN Subject: fileinfo To: lisp Date: 5 Nov 1978 1719-EST From: VITTAL at BBN-TENEXD Subject: fileinfo To: teitelman at MAXC2, masinter at MAXC2 cc: kaplan at MAXC2 There is a new fileinfo on . It should work thru dec release 4 (to be announced come the beginning of the year), and includes the following changes over the last one that I gave you. 1. getfileinfo now takes a third argument that is equivalent to the 3rd argument of gdate. It works (I hope) for all calls to gdate (attributes readdate, writedate and creationdate), and attribute author (a new attribute which returns the author of a file as a string -- clobbers the string pointer only on tops-20 versions release 3 and higher. It could work for everything else if somebody fixed USERNAME to do the same thing gdate does. Should I do it?). 2. The archive/invisible/off-line stuff should only work for BBN release 1B of tops-20, and DEC release 4 (which, for all intents, will be the same as bbn release 3A). It should also not crash if tried under standard DEC releases without archive stuff -- e.g. releases 1, 2 and 3. Turns out that the way to tell what release a tops-20 site is running is by looking at the length of an fdb. Look at function fisystemtype for specifics. John ------- ------- 9-NOV-78 23:27:51-PST,537;000000000001 Date: 9 NOV 1978 2327-PST From: TEITELMAN Subject: change to username To: lisp, yonke at BBND Date: 9 Nov 1978 1535-EST Sender: LEWIS at BBN-TENEXD Subject: files From: LEWIS at BBN-TENEXD To: teitelman at PARC-MAXC2, hartley Cc: masinter at MAXC2, vittal Message-ID: <[BBN-TENEXD] 9-Nov-78 15:35:10.LEWIS> New mac & .com on . USERNAME now take a 2nd arg, FLG, which is a string ptr to smash. I didnt use the name STRPTR because I plan to later add Marty's request using the same arg. Daryle ------- 13-NOV-78 23:25:44-PST,135;000000000001 Date: 13 NOV 1978 2325-PST From: TEITELMAN Subject: makekeylst To: lisp now takes autocompleteflg as an argument ------- 15-NOV-78 18:01:28-PST,306;000000000001 Date: 15 NOV 1978 1801-PST From: TEITELMAN Subject: errortypelst To: LISP, MASINTER, lewis at BBND now is a list of expressions of the form (n . expressions) rather than (n expression). this so you can have several for the same errortype and will do them one after another. warren ------- 15-NOV-78 22:29:52-PST,756;000000000001 Date: 15 NOV 1978 2229-PST From: TEITELMAN Subject: your problem with fltfmt To: YONKE at BBND cc: MASINTER, LEWIS at BBND, LISP in version 124, the determination of which format word to use for outputing floatng point numbers has been tied to PRXFLG., e.g. pack (and mkstring) will use the system default format rather than what the user has set via fltfmt (uless prxflg=T). this is consistent the interaction between radix and pack and mkstring. the purpose was that a numbe of clisp constructs e.g. would not dwimify correctly if fltfmt was changed. the problem hs nothing whatsoever to do with printnum. daryle - i wonder if we shuld not simply default prxflg to T and have dwim rebind it to NIL? warren ------- 19-NOV-78 16:07:34-PST,215;000000000001 Date: 19 NOV 1978 1607-PST From: MASINTER To: LISP The new name for what the manual calls MOVEITEM is MOVETOFILE. I wish I had thought of the better name before the manual went to press. Larry ------- 3-DEC-78 15:57:42-PST,3131;000000000001 Date: 3 Dec 1978 3:57 pm (Sunday) From: Masinter Subject: new DIR features To: lisp cc: Masinter a couple of weeks (months?) ago, I installed a new version of the DIRECTORY package, with a couple of things cleaned up. This version has been stable long enough that I am now documenting the new features. The following is a complete list of the 'commands' recognized by the DIRECTORY processor (some of these are old, and some are new): commands which print something: P prints file name PP prints file name sans version (used by NDIR) SIZE, READDATE, WRITEDATE, CREATIONDATE, LENGTH, BYTESIZE, PROTECTION, AUTHOR prints the appropriate information returned by GETFILEINFO. (the list fileinfotypes provides additional formatting information to the directory function). "string" print the given string commands which affect the value returned: COLLECT the value of DIRECTORY is a list of file names; add this file name to that list COUNTSIZE the value of DIRECTORY is a sum. Add the SIZE of this file to the sum. interactive commands: PAUSE wait until the user types something before proceeding with the rest of the commands. arbitrary expression or predicate: @ expression the expression following an @-sign is either a function of one argument (JFN), a function of two arguments (JFN FILENAME) or an arbitrary expression which uses JFN and/or FILENAME freely. (it is a minor efficiency hack that if FILENAME is not used in the expression, it isn't computed). OLDERTHAN n proceed if the file hasn't been referenced (read or written) in n days; e.g. DIR *.* OLDERTHAN 90 P DELETE will delete all files not referenced in 90 days). BY user proceed if the file was last written by the given user. OLDVERSIONS n proceed if there are at least n more recent versions of the same file (note that this IS NOT IMPLEMENTED for TOPS20 and DIRECTORY will complain if you try to use it on a TOPS-20 system). For example, to delete all but the most recent version of a file, DIR FILE OLDVERSIONS 1 P DELETE set internal directory state: DELETED allow DIRECTORY to examine deleted files (normally, they are not mapped over). OUT filename direct all output to given filename COLUMNS n attempt to format output in n columns (rather than just 1). perform actions on the given file: DELETE delete the file (undoably!) UNDELETE un-delete the file (undoably!). This also does a 'DELETED' so that DIRECTORY only considers deleted files. As before, DIRCOMMANDS is used as a spelling list and to supply defaults and abbreviations. Valid shorthand commands are: AU AUTHOR - PAUSE COLLECT? PROMPT " ? " COLLECT DA, TI WRITEDATE DEL DELETE DEL?, DELETE? PROMPT " delete? " DELETE OLD OLDERTHAN 90 PR PROTECTION SI SIZE Also as part of the DIRECTORY package, the functions /delfile[filename] delete filename (undoably). undelfile[filename] undelete filename /undelfile[filename] undelete filename (undoably) are provided. At type-in, delfile is converted to /delfile. Larry 16-DEC-78 17:49:43-PST,152;000000000001 Date: 16 DEC 1978 1749-PST From: TEITELMAN Subject: backtrace To: lisp p. 12.12 everything will be printed if flags=47q, not 7. ------- 18-DEC-78 15:52:52-PST,2086;000000000001 Date: 18 Dec 1978 3:52 pm (Monday) From: Masinter TO: LISP Date: 14 Dec 1978 0858-EST Sender: LEWIS at BBN-TENEXD Subject: SELECT From: LEWIS at BBN-TENEXD To: teitelman at MAXC2, masinter at MAXC2 Cc: hartley, yonke Message-ID: <[BBN-TENEXD]14-Dec-78 08:58:44.LEWIS> [Below is the documentation for a new system function SELECT. The documentation is written assuming it follows the description of SELECTQ in the manual (Section 5). Subscripts are enclosed in <> (e.g., "e sub i" is written as e).] ============================================================= select[x;clause<1>;clause<2>;...;clause;default] - SELECT is similiar to SELECTQ except that the selection key (s) is evaluated before the EQ test. That is, if s is an atom, the value of x is tested to see if it is EQ to the value of s. If so, the expressions e<1i> ... e are evaluated in sequence, and the value of the SELECT is the value of the last expression evaluated, i.e., e. If s is a list, the value of x is compared with the value of each element of s, and if x is EQ to any one of them, then e<1i> to e are evaluated in turn as above. Note that if is s is (FOO FIE) the test is (OR (EQ x FOO) (EQ x FIE)). To get the test (EQ x (FOO FIE)), s should be ((FOO FIE)). If clause is not selected in one of the two ways described, clause+1 is tested, etc., until all the clause's have been tested. If none is selected, the value of the SELECT is the value of default. default must be present. SELECT compiles open, and is therefore very fast; however, it will not work if the value of x is a large integer or floating point number, since SELECT uses EQ for all comparisons. ------------------------------------------------------------ 18-DEC-78 16:02:26-PST,633;000000000001 Date: 18 Dec 1978 4:02 pm (Monday) From: Masinter To: lisp The manual does not mention anything about the "2CHAR" argument of settermchars, or anything about control-N being a terminal character; however, it seems that the 'standard system' comes with control-N as the 2CHAR on editcharacters, confusing anyone who attempts to make control-N an interrupt during greet. I also left out of the documentation for the new PMAP stuff that if you mappage with "file"=777777Q and "page"=-1 that you will get a blank page. If you use the same "file" later (i.e. the EQ large integer) then you will get the same page. Larry 20-DEC-78 10:05:30-PST,1231;000000000001 Date: 20 Dec 1978 10:05 am (Wednesday) From: bobrow Subject: Change to the VM SPec To: LISP On page p 95, the top, add an alternatibve to "Save sufficient information ..." as "or, if the implementation allows immediate interrupts, call INTERRUPT[NIL;NIL;2] which will print Interrupted below and cause a break with BRKEXP = NIL. Any value returned from the break will be ignored, an d the computation will proceed." 2) CLEARBUF takes two arguments in the manual and only one in the VM ???? Is this a change to the VM. 3) GETINTERRUPT[char] allows char to be only character codes, class names, T or NIL as arguments. If char =T returns a list of all current interrupts. If char=NIL returns a list of just user interrupts. If char= returns the charactercode which is enabled for that interrup (or NIL if none); if char=charactercode returns the class of interrupt for that character code. 4)SETTINTERRUPT[char;class] if char is a system class name then disables that interrupt class, returns else if class is a system class name then disables the previous character for that class enables char with interrupt class class 21-DEC-78 14:15:13-PST,652;000000000001 Date: 21 Dec 1978 2:15 pm (Thursday) From: Masinter Subject: Re: MAX, MIN, IMAX, IMIN, FMAX, FMIN In-reply-to: Your message of 21 DEC 1978 1407-PST. To: KAPLAN, LISP cc: TEITELMAN, MASINTER The documentation in the manual is wrong: it should say that MAX() and IMAX() return MIN.INTEGER, while MIN() and IMIN() return MAX.INTEGER. These functions should obey the standard property that (fn arg) = (fn arg (fn)), e.g. (MAX A) = A = (MAX A (MAX)) = (MAX A MIN.INTEGER) {this property is shared by all of the 'spread' arithmetic functions, e.g. PLUS, TIMES, LOGOR, LOGAND, etc). FMAX and FMIN do need to be implemented. Larry 1-JAN-79 22:03:59-PST,1295;000000000001 Date: 1 JAN 1979 2203-PST From: TEITELMAN Subject: lisp To: lisp Date: 31 DEC 1978 1348-PST From: KAPLAN Subject: For next manual To: TEITELMAN I've been going over my old message files and eliminating things that are now in the manual. While doing that, I've noticed a few things that should be changed for the next manual (perish the thought). I'll pass them along as they come up, and you can file them someplace. p. 14.51 The description of fonprofile seems confused. Looks like part of a sentence disappared, and there is also som confusion abou whether the third element of the list is called FONT or FONT#. (The goofy sentence is the last one in the first paagraph). Also, FONT in the second paragraph should be underlined. Finally, a point of clarification: in my old message, it says that FONT can also be the name of a previusly defined fontclass, instead of a number. Is that still true? p 4.1, footnote 3 at bottom of page. Mentions PRINTSTRUCTURE instead of MASTERSCOPE. (That's Chapter 4, not chapter 14 as in the comment above). p. 14.9 Seprcase says that the various breaks and clisp haracters will be mapped into the SAME character, but it doesn't say which one. Is it space? Does it matter? --Ron ------- ------- 4-JAN-79 14:24:23-PST,159;000000000001 Date: 4 JAN 1979 1424-PST From: TEITELMAN To: lisp OEFP now implemented 0 functio for determinng if a file is at its end of file pointer. ------- 12-JAN-79 10:35:22-PST,335;000000000001 Date: 12 Jan 1979 10:34 am (Friday) From: Laaser Subject: bug in new manual To: teitelman cc: lisp, Laaser On page 21.13, the function ADDBUFFER is actually called ADDMAPBUFFER in the system. I.e. ADDBUFFER is undefined, but the function ADDMAPBUFFER exists and does what the documentation says ADDBUFFER does. Bill 12-JAN-79 11:42:14-PST,452;000000000001 Date: 12 JAN 1979 1142-PST From: TEITELMAN Subject: addbuffer or addmapbuffer? To: MASINTER, lisp Date: 12 Jan 1979 10:34 am (Friday) From: Laaser Subject: bug in new manual To: teitelman cc: lisp, Laaser On page 21.13, the function ADDBUFFER is actually called ADDMAPBUFFER in the system. I.e. ADDBUFFER is undefined, but the function ADDMAPBUFFER exists and does what the documentation says ADDBUFFER does. Bill ------- 22-JAN-79 23:12:11-PST,575;000000000001 Date: 22 JAN 1979 2312-PST From: TEITELMAN Subject: tightgc To: lisp Date: 17 Jan 1979 1118-EST Sender: LEWIS at BBN-TENEXD Subject: TIGHTGC From: LEWIS at BBN-TENEXD To: teitelman at MAXC2, masinter at MAXC2, hartley, yonke, vittal Message-ID: <[BBN-TENEXD]17-Jan-79 11:18:07.LEWIS> TIGHTGC[FLG] If FLG is non-nil, the garbage collector will never allocate pages for any datatype except the one currently being collected. If FLG is nil, GC will work as it currently does. TIGHTGC returns it's previous setting. The initial setting is NIL. ------- 25-JAN-79 10:52:04-PST,538;000000000001 Date: 25 JAN 1979 1052-PST From: BOBROW Subject: DWIM(C) interacts with DWIM command To: TEITELMAN cc: LISP, MASINTER Trying to invoke the function DWIM(C) at the top level caused me considerable grief because it just gave me an error message "Unable to figure out what you meant in" last history event Larry finally helped me track it down to the interpretation of DWIm as the LISPX command. This is not documented in the manual and causes some confusion if people want to change the DWIM setting. danny ------- 5-FEB-79 12:15:12-PST,140;000000000001 Date: 5 FEB 1979 1215-PST From: TEITELMAN To: lisp cc: manual p. 9.61 talks about newfile? rather than markaschangd. ------- 23-FEB-79 13:46:39-PST,284;000000000001 Date: 23 Feb 1979 1:45 pm (Friday) From: Masinter Subject: Re: The function NEEDUNSAVE has disappeared In-reply-to: Your message of 22 FEB 1979 0834-PST. To: KAPLAN cc: MASINTER, LISP The function is now called MSNEEDUNSAVE. It should be documented in next manual. Larry 26-FEB-79 20:54:42-PST,326;000000000001 Date: 26 FEB 1979 2054-PST From: TEITELMAN Subject: change to spellfile findfile To: MASINTER, LISP, YONKE at BBND, VITTAL at BBND, KAPLAN now take an xtra optional argument, DIRLST, which if specifies is used in place of DIRECTORIES. this to facilitate loading lispusers packages. morelater. warren ------- 26-FEB-79 21:39:18-PST,1297;000000000001 Date: 26 FEB 1979 2139-PST From: TEITELMAN To: LISP i dont have any objections with marty's suggestion and have made the necessary changes to the system to accomodate them. authors of lispusers packages should make the changes they need to. here is what i have done: (1) added argument DIRLST to FINDFILE and SPELLFILE (2) initialized LISPUSERSDIRECTORIES to LISPUSERS LISP). you can replace the LOAD? calls in the various lispusers files to (LOAD? (FINDFILE file T LISPUSERSDIRECTORIES) LDFLG) and individual sites can reset LISPUSERSDIRECTORIES as for changin the FILES file package command, i dont even know whatit does. (it is not in the lisp manual). note that in the case thatthe ue expllcitly calls load himself, and has a file by the same name on the connected directory, he will get that file. however i agree that in this case the user would be more reasonably be expected to be aware of possible name conflicts than when the file in question loads some other files.) thus if the site resets lispuserdirectories, it should also make sure thatthe value of DIRECTORIES is consistent. i.e. putting lispusers files on directory FOO and adding FOO to LISPUSERSDIRECTORIES is not sufficient, should also add FOO to DIRECTORIES. warren ------- 17-MAR-79 02:07:20-PST,671;000000000001 Date: 17 MAR 1979 0207-PST From: TEITELMAN Subject: dwimequivlst To: SHEIL cc: kaplan undocumented, experimental feature. i am sure you will find places where it is not checked and should be. its hard to look at every EQ test. in any case, i will fix these on a one by one basis, i.e. i am not going to invst a lot of time now trying to anticipate all problems. to make something dwimify like selectq, add (FOO . SELECTQ) entry. this should obviate the need for any info properties, but again, i may have missed some spots. i have not done anything with clispify with respect to dwimequivlst. this is in latest byte.sav warren ------- 9-MAY-79 11:55:41-PDT,1306;000000000001 Date: 9 MAY 1979 1155-PDT From: TEITELMAN Subject: ( Forwarded Mail ) To: lisp Mail-from: Arpanet host SU-AI rcvd at 7-MAY-79 1659-PDT Date: 7 May 1979 1657-PDT From: Dave Barstow Subject: INTERLISP bugs To: teitelman at PARC-MAXC, masinter at PARC-MAXC CC: DRB at SU-AI A couple of problems that we've noticed with the INTERLISP from 22-Jan-79: (1) page 14.74 of the manual gives CONTAIN as the name of the property used with FILEPKGCOM, but that doesn't get accepted. I looked at the source code, and it seems that CONTENTS and IN? are acceptable. (2) much more vexing is that the filepackage doesn't work very well with subdirectories on TOPS-20. for example, if I'm logged in as , and load a file called FOO, this gets recorded on FILELST as FOO.LISP>FOO, that is, the file name is put in the position of the first part of the subdirectory name. I looked around a little bit to see if I could fix it somehow, or at least put in a patch that would catch it when it occurs, but with no success. this problem is actually quite consequential, since some places (e.g. Yale), like to have people's directories as subdirectories of projects. Ditto for some people at Schlumberger. Any suggestions? Dave Barstow ------- 11-MAY-79 02:09:02-PDT,10677;000000000001 Date: 11 MAY 1979 0209-PDT From: TEITELMAN Subject: username,usernumber,directoryname,directorynumber To: lisp Mail-from: Arpanet host BBN-TENEXD rcvd at 10-MAY-79 0813-PDT Date: 10 May 1979 1106-EDT Sender: LEWIS at BBN-TENEXD Subject: y Subject: [YONKE at BBN-TENEXD: directory names] From: LEWIS at BBN-TENEXD To: teitelman at MAXC2 Message-ID: <[BBN-TENEXD]10-May-79 11:06:01.LEWIS> Warren, here is the description of the direcotry fns. Daryle Begin forwarded message Mail from BBN-TENEXD rcvd at 12-Feb-79 1344-EST Date: 12 Feb 1979 1344-EST From: YONKE at BBN-TENEXD To: Teitelman at MAXC2, Masinter at MAXC2, Kaplan at MAXC2, lewis, hartley Cc: vittal Subject: directory names Message-ID: <[BBN-TENEXD]12-Feb-79 13:44:05.YONKE> Sender: YONKE at BBN-TENEXD [Text]: Note by YONKE on 12 Feb 1979 1324-EST Below is a proposal for changing the way directory names and numbers are talked about in interlisp. This was brought on by a major change in TOPS20 in release 3. Daryle has volunteered to implement the functions maintaining TENEX/TOPS20 compatibility. Comments/uproars/suggestions are heartily welcome. /mdy ============================================================ Release 3 of TOPS20 contains a major change in the way one "talks" about directories. First, what is thought of on TENEX as a USERNAME/NUMBER has been split into two catagories: 1. A USERNAME is something you login or attach to (and that is all!). A USERNUMBER isn't good for much (except when used in conjunction with certain system tables) and can only be guarenteed to remain consistent with a particular USERNAME during a system's up-time (i.e., they may change when a system is brought up). A USERNAME has the same format (essentially) as a TENEX USERNAME (i.e., a string of characters not enclosed in <>s). 2. There are two new entities called DIRECTORYNAME and DIRECTORYNUMBER. These are essentially what one thinks of as USERNAME/NUMBER on TENEX and are what one uses to talk about directories and files. A DIRECTORYNAME has the format "structure:" where structure: can be thought of as a "device" in TENEX mode, but is a way of partitioning the disk (so there can be mountable structures that don't clutter up the disk space most of the time). When you ask for a DIRECTORYNAME from TOPS20 you'll always get back one of these -- including the structure: and <>s. A DIRECTORYNUMBER should be thought of as very temporary (akin to a JFN) and remains consistent with a particular DIRECTORYNAME only for the lifetime of the program that got the DIRECTORYNUMBER and only for that program (i.e., you can't pass DIRECTORYNUMBERs between programs). Both DIRECTORYNUMBER and USERNUMBER are full 36 bit quantites and are never the same number. Obviously, this change has a major impact on a single TENEX/TOPS20 INTERLISP. (At a minimum, almost all calls to the current function USERNUMBER should add T as the second parameter so that on TOPS20 you'll get the more useful DIRECTORYNUMBER back -- of course this implies a box on TOPS20 since you'll get back a full 36 bit number.) I'd like to propose some new functions (and change the use of some old functions) to "hide" the differences between between the two systems. To help keep things straight in this discussion, whenever I refer to a current system function (and its current use) I'll precede it by the string "old" (e.g., the current USERNUMBER will appear as oldUSERNUMBER in the text). Essentially, the proposal is rename the functions oldUSERNAME and oldUSERNUMBER to DIRECTORYNAME and DIRECTORYNUMBER respectively (details of all new functions will appear below). These are the functions to use when dealing with the file system. The functions USERNAME and USERNUMBER should then only be used to identify a user (not a directory). To alleviate calls to DIRECTORYNUMBER (i.e., oldUSERNUMBER) and USERNUMBER which become expensive on TOPS20 there should be two new functions: DIRECTORYNAMEP and USERNAMEP which determine if what they are given legitimate directory or user names -- I believe this was the major use of oldUSERNUMBER used in conjunction with oldUSERNAME. Also, DIRECTORYNAME and USERNAME have been expanded to take directory and user names (with escapes) as opposed to the oldUSERNAME which only took T, NIL, or a number. And finally, there should be a new system function CNDIR which should be used for connecting to another directory inside of Lisp (connecting to a directory on TOPS20 is (will be) radically different implementation wise). The documentation for the proposed functions follows. The parameter names DIRNAME and USERNAME can either be a litatom or string. DIRECTORYNAME[DIRNAME;STRPTR] - Returns a "full directory name" for DIRNAME. If DIRNAME=NIL then return the login directory. If DIRNAME=T then return the connected directory. If DIRNAME is a string or litatom with an $ (escape) on the end then name completion will be attempted; if unsuccessful NIL will be returned. DIRNAME can also be a number, in which case if DIRNAME is a valid directory number return its corresponding directory name. Normally the directory name is returned as a string. If STRPTR is a string pointer then it is smashed with the new string pointer. If STRPTR=T then the directory name is returned as an atom. DIRECTORYNAMEP[DIRNAME] - Returns T if DIRNAME is a legitimate directory name. If DIRNAME ends with an $ (escape) then name completion is attempted and T returned if successful, otherwise NIL. This function is provided for efficency so the DIRECTORYNAME string doesn't have to be created. DIRECTORYNUMBER[DIRNAME] - Returns the directory number for DIRNAME. DIRNAME may end with an $ (escape) in which case name completition is attempted. if DIRNAME=NIL then login directory number is returned. If DIRNAME=T then the connected directory is returned. USERNAME[USERNAME;STRPTR] - Returns a user name for USERNAME. If USERNAME=NIL then return the login user. If USERNAME is a string or litatom with an $ (escape) on the end then name completion will be attempted; if unsuccessful NIL will be returned. USERNAME can also be a number, in which case if USERNAME is a user number return its user name. Normally the user name is returned as a string. If STRPTR is a string pointer then it is smashed with the new string pointer. If STRPTR=T then the user name is returned as an atom. Note: USERNAME=T is meaningless (by the old interpretation, this would mean something like "connected login user") and will simply return NIL. USERNAMEP[USERNAME] - Returns T if USERNAME is a legitimate user name. If USERNAME ends with an $ (escape) then name completion is attempted and T returned if successful, otherwise NIL. USERNUMBER[USERNAME] - Returns the user number for USERNAME. USERNAME may end with an $ (escape) in which case name completition is attempted. if USERNAME=NIL then login user number is returned. CNDIR[DIRNAME;PASSWORD;-] - Tries to connect to DIRNAME and if successful returns a full directory name (as an atom) for DIRNAME otherwise it returns NIL. If PASSWORD (a string or litatom) is supplied it is used to aid in the connecting process. The third parameter (FLG) is only used on TOPS20 and is used to specify different ways to "connect" (more will be said about this in another message for those interested). Interactions with PACKFILENAME, UNPACKFILENAME, and FILENAMEFIELD: Since structure: looks exactly like DEVICE, UNPACKFILENAME works fine as is. PACKFILENAME on TOPS20 would have to check for a structure being on the "front" of a directory name. If it is there and there is no DEVICE specified then PACKFILENAME works essentially like it does now. If a device is specified separately and there is one in the directory name, I propose whichever occurs first be the one used (this is similiar to the way BODY is used). I would also like to propose that STRUCTURE become a synonym for DEVICE. PACKFILENAME and FILENAMEFIELD would accept either on both TENEX and TOPS20. UNPACKFILENAME would return with either the field being called DEVICE or STRUCTURE based on which type of system Lisp is running on. Impact on the system and user code: In system code all calls to USERNUMBER should be looked at to determine if it was being used in conjunction with USERNAME to get a legitimate and complete USERNAME. If so, these should be consolidated to one call to DIRECTORYNAME. (I did a MAPATOMS and found the only compiled functions which call USERNUMBER are FILEINFOBLOCK, SPELLFILE, and DIRECTORY. FILEINFOBLOCK when dealing with changing the author field in the FDB seems to be the only one which needs the new USERNUMBER.) All calls to USERNAME which exist after the previous alteration should just be renamed to DIRECTORYNAME (again, the only calls to USERNAME are in the functions FILEINFOBLOCK, GREETBLOCK, SETINITIALS, and WRITEFILE and non-functions such as AFTERSYSOUTFORMS). Since the parameters are compatable, this should be easy. Some files in LISPUSERS will also certainly be effected (especially EXEC), but the changes are similiar. Old user code running on TENEX should notice no difference since USERNAME and USERNUMBER work the same for them. They should however be advised of the new directory functions and to use them instead. Old user code running on TOPS20 will have to be modified similiarly to the system code, but since they were going to have to add the second parameter to oldUSERNUMBER when they got Release 3 of TOPS20 anyway this doesn't seem like a burden. -------------------- End forwarded message ------- 6-JUN-79 17:33:23-PDT,992;000000000001 Date: 6 JUN 1979 1733-PDT From: KAPLAN Subject: New HASH To: lisp A new version of the HASH package is released (on and ). It provides the following new features: 1. A new value-type, 2NUMBERS. The values of this type consist of a cons cell whose car is a 24-bit number and whose cdr is a 36 bit number. Such values are returned in a "transient" cons with "transient" numbers (meaning that they must be copied with CONS and/or IPLUS before another value is called for). This type might be used, for example, for storing the starting and ending byte positions of expressions printed in the print-region. 2. HASHFILEPROP recognizes two new attributes: #ENTRIES - returns the total number of entries in the file. ITEMLENGTH - returns the average number of characters per entry. These values may be given to CREATEHASHFILE to indicate what the initial allocations should be when creating a new hash-file based on an old one. ------- 28-JUN-79 10:23:30-PDT,1496;000000000001 Date: 28 JUN 1979 1023-PDT From: TEITELMAN Subject: interaction beween concat, pack* etc and defprint To: lisp Mail-from: Arpanet host BBN-TENEXD rcvd at 28-JUN-79 0851-PDT Date: 28 Jun 1979 1149-EDT Sender: YONKE at BBN-TENEXD Subject: defprint From: YONKE at BBN-TENEXD To: Goldman at USC-ISIE Cc: Teitelman at PARC-MAXC2, Lewis, Hartley Message-ID: <[BBN-TENEXD]28-Jun-79 11:49:02.YONKE> Neil, The manual says "Note that DEFPRINT also affects internal calls to print from PACK, CONCAT, etc...". This is much too weak a statment. It should probably say something like "if your DEFPRINT function calls anything that does internal printing like PACK, CONCAT, etc. the result is unknown and more than likely you will get garbage back". The problem is that the internal printing routines are not recursive and carry around pointers to internal strings, etc. If your function is called while inside a call to an internal printing function (which is highly likely since it is being called to return someting to print) these internal pointers get smashed. Of course, this is not "perfect", but the expense in cleaning up the internal printing routines is high and at this time it can't be done. Daryle didn't even want it documented in the manual because we knew of these problems. You were actually lucky that PACK* didn't do something funny. Sorry about this. Say "hi" to the folks at ISI for me and wave to the ocean. Regards, Martin ------- 29-JUN-79 03:08:13-PDT,1181;000000000001 Date: 29 JUN 1979 0308-PDT From: TEITELMAN Subject: lisp{sp} To: KAPLAN cc: HTHOMPSON, lisp at Thesis, lisp, masinter ok, here is what i did. i found a way to do it via init.lisp, so tha in act you can try it out with current lisp. typing lisp{sp} will cause neither system nor user initialization to be done. however pregreetforms will be executed. these are basically noops in the sense that they will get done again when the system next gets greeted, so no problem, i.e. they are the same at all sites, so that if you use the procedure below and ship the result to another site, then the fact thatpregreetforms have been executed once wont affect anything. the way you handle the fact thatyou might wish, in your loadup, to set something that normally is initialized in init.lisp is to add the expression to POSTGREETFORMS somewherealong the way. these are expression that get done AFTER the user is subsequently greted, so for example if you want to set DIRECTORIES, add it to POSTGREETFORMS. play around with it with current lisp. i will also be reloading so that we can make a new abc with the fix to defineq in. warren ------- 4-JUL-79 13:56:39,593;000000000001 Date: 4 JUL 1979 1356-PDT From: TEITELMAN Subject: compiler change To: PARC Lisp Users: cc: newlisp, yonke at BBND, wilber at SRI-KL, cc: goldman at USC-ISIE ther have been many occasions when, looking at a compiled file, it wold have been nice to know exactly how it had been compiled, i.e. bcompl, tcopl, recompile, brecompile, and if the lattter, which function were involved. i have fixed compile to do this. the information will appear in the first fillcreated expression on the compiled file, so you can do an infile and a read, and find it out. warren ------- 6-JUL-79 13:14:20-PDT,751;000000000001 Date: 6 JUL 1979 1314-PDT From: TEITELMAN Subject: ( Forwarded Mail ) To: LISP Mail-from: Arpanet host SRI-KL rcvd at 6-JUL-79 1257-PDT Date: 6 Jul 1979 1247-PDT From: Wilber at SRI-KL (Mike Wilber) Subject: manual typos To: teitelman at PARC-MAXC2 Date: 6 Jul 1979 1143-PDT From: Tyson Subject: Interlisp manual typo To: wilber On pages 23.55,56 the function PUT is used 10 times. Since PUT is not in the manual, I presume PUTPROP would be more appropriate. ------- ...also, minhash (footnote on p 10.10) isn't indexed in the section, master or function indices... in case i didn't mention it before, i think the new edition is a masterpiece, for which many, many thanks... cheers -- mike ------- ------- 11-JUL-79 16:51:00-PDT,438;000000000001 Date: 11 JUL 1979 1650-PDT From: TEITELMAN Subject: LISP To: LISP Date: 11 JUL 1979 1544-PDT From: HTHOMPSON Subject: Error in manual To: Gorlin at RAND-UNIX cc: Teitelman, Kaplan, Masinter The listing of arguments in the manual on p 23.36 for RECORDACCESS is wrong - the correct order is (as given in the index) recordaccess[field;value;dec;type;newvalue]. Sorry for the confusion. HT ------- ------- 17-JUL-79 22:08:41-PDT,286;000000000001 Date: 17 JUL 1979 2208-PDT From: TEITELMAN Subject: greeting is now under a resetsave To: LISP, YONKE at BBND permits user to change global settings just for the duration of the greeting. separate resetlst for system initialization and user initializaion. warren ------- 21-JUL-79 15:33:44-PDT,608;000000000001 Date: 21 JUL 1979 1533-PDT From: TEITELMAN Subject: recordaccess To: lisp Mail-from: Arpanet host BBN-TENEXD rcvd at 21-JUL-79 1500-PDT Date: 21 Jul 1979 1753-EDT Sender: YONKE at BBN-TENEXD Subject: documentation for RECORDACCESS From: YONKE at BBN-TENEXD To: Teitelman at PARC-MAXC2 Message-ID: <[BBN-TENEXD]21-Jul-79 17:53:54.YONKE> The parameter list for RECORDACCESS (p. 23.36) in the manual is not in the same order as the real function. It should read: recordaccess[field;value;dec;type;newvalue] Should be changed whenever a new manual gets generated. Martin ------- 24-JUL-79 12:56:27-PDT,2221;000000000001 Date: 24 JUL 1979 1256-PDT From: TEITELMAN Subject: filepkg changes To: lisp Date: 23 JUL 1979 2327-PDT From: KAPLAN Subject: New FILEPKG on To: TEITELMAN cc: MASINTER I think I fixed the rename of fields bug, but its a little tricky and we'll just have to see what happens. I also made a few other small changes: 1. I added a feature to the FILES command originally requested by Yonke so that he could more easily specify where lispusers files were to come from. THe keyword FROM can be followed by the keyword VALUEOF, in which case a FINDFILE exprssion gets put out instead of a simple quote. E.g. (FILES (SYSLOAD FROM VALUEOF LISPUSERSDIRECTORIES) HASH) yields the expression (LOAD? (FINDFILE (QUOTE HASH.COM) T LISPUSERSDIRECTORIES) (QUOTE SYSLOAD)) I think this does what Yoke wanted. The only glitch is in the case the file isn't found anywhere, the error message gives NIL not fond instead of HASH.COM not found (cause the FINDFILE returns NIL). I guess I could put out a more coplicted prog and test the value, but this will do for now. 2. In CHANGECALLERS, i changed the interpretation of DEFAULTRENAMEMETHOD slightly. If it is MASTERSCOPE and there is no masterscope data base, then it is assumed to be EDITCALLERS. (If the use actually secifies masterscope (i.e. not by default) then that assumption isn't made). Also, I made it cause an ERROR (instead of HELP) if the user specifies an unrecognized method. 3. I changed EDITDEF so that it does not print a warning that the definition won't be unsaved if the definition is in fact EQUAL to the current definition. That warning is spurious and confusing--it has been buggin me and Henry in ABC, where DFNFLG is PROP. 4. I changed CHANGECALLERS in another way: If the name to be changed is defined as more than one type (e.g. a FNS and a VARS), then the editor is called not with an EXAM command to let the user decide what to do, but with a much more complicated command that interrogtes the user as to what he wants done. The responses to the askuser are Yes, do the replacement, No skip to the next occurrence, and anything else, do a TTY:. --Ron ------- ------- 24-JUL-79 13:21:40-PDT,190;000000000001 Date: 24 JUL 1979 1321-PDT From: KAPLAN Subject: Manual description of EDITE talks about NEWFILE?, not MARKASCHANGED To: TEITELMAN, LISP SHould be changed in next edition. ------- 21-SEP-79 13:57:55-PDT,471;000000000001 Date: 21 SEP 1979 1357-PDT From: KAPLAN Subject: Manual error To: LISP cc: TEITELMAN The manual on p. 14.2 says that INFILEP is the filename if the file can be opened for input. This is false. It merely indicates that the file exists. Whether or not you can open it depends on whether you (or someone else) has it open for output at the time you do the INFILE. I.e., a non-NIL INFILEP does not mean you won't get a file won't open error. ------- 24-SEP-79 23:31:34-PDT,1115;000000000001 Date: 24 SEP 1979 2331-PDT From: TEITELMAN Subject: new error numbers and interpreter To: LEWIS at BBND cc: DEUTSCH, LISP, WILLIE-SUE (1) whenever a u.b.a error occurs the error number will be set to 44 (error string = UNBOUND ATOM) with culprit the atom. note thatif dwim corrects the error, no error occurs and error number is not set. however, if an error is going to occur, whether or not it will cause a brak, the error number will be set. (2) whenever an undefined car of form occurs, error number will be 45 (error string = UNDEFINED CAR OF FORM), and culprit is the form. (3) whenever an undefined function in aply occurs, error number 46, culprit is list[fn;args] (4) whenever user types control-e, error nummer will be 47, errorstring= CONTROL-E. the purpose of this is to allow programs to be written in lisp which can detect what caused an error, and thus be made sufficiently robust to use as servers. willie-sue, you should install these 4 new errors and errorstrings. you dont have to do anything else since is all aken care f in helpdl. warren ------- 25-SEP-79 00:32:38-PDT,996;000000000001 Date: 25 SEP 1979 0032-PDT From: TEITELMAN Subject: experimental new feeature in spelling corrector To: KAPLAN cc: LISP fixspell1 has been modified so that if the value returned fro askuser is a list, it simply passes this back. (fixspell1 used to always return T or NIL). the default keylst used by askuser and dwim have been modified to allow user to type U for Use and then a value (one value - having user be able to esentially type in two things meaning a run on correction was too complicated an interaction with fixspell). fixspell has een modified so thatif fixspell1 returns a list, it treats car of the list as the correct value. i will be reloadin gsoon. lets try playing with this and see if it has the desired properties. it was a little harder to put in that one would think at first because of all the interactios with runon corrections, synonyms, etc. and the fact that fixspell can be called in lots of different configuraions. warren ------- 14-NOV-79 15:46:06-PST,163;000000000001 Date: 14 NOV 1979 1546-PST From: TEITELMAN Subject: @ IN EDIT PATTERN To: KAPLAN cc: LISP now installed. shall i reload tonight? warren ------- 21-NOV-79 00:57:00-PST,1042;000000000001 Date: 21 NOV 1979 0057-PST From: KAPLAN Subject: New MASTERSCOPE on - ANALYZEUSERFNS To: TEITELMAN, LISP cc: MASINTER I added a hook to the masterscope function analyzer so that the user could specify his own computations. After a function has been analyzed, masterscope looks at the variable ANALYZEUSERFNS. If it is non-nil, it is assumed to be a list of functions. Each of them is applied in turn to the function-name, function-definition, and analysis data list for the function just analyzed. The function should return a new data list (or perhaps just the old one if all that is intened is side-effecting). This is the hook that is needed to add various user defined relations to masterscope. The MSHASH package will be able to store the argument list of a function so that DESCRIBE won't have to rummage around for it if the function is not loaded. Also, DECL will be able to store the RETURNS declaration for a function so that inter-function declarations can be checked. --Ron ------- 21-NOV-79 21:54:56-PST,201;000000000001 Date: 21 NOV 1979 2154-PST From: TEITELMAN To: KAPLAN cc: LISP by the way, is sufficient to use (& .. FOO) as a pattern, you dont have to do (*any* FOO (& .. FOO)). warren ------- 23-NOV-79 22:57:49-PST,886;000000000001 Date: 23 NOV 1979 2257-PST From: KAPLAN Subject: DESCRIBELST in masterscope To: teitelman cc: lisp, masinter there is also a new masterscope on . I modified the dESCRIBE command so that the user can specify additional information that he would like to include in a functions description, other than the information that is already provided by the system. DESCRIBELST is a list each of whose elements is a pair conisting of a string descriptor and a form. The form is evaluated (it can refer to the name of the funtion being described by the free variable FN), and if it returns a non-NIL value, the description string is printed followd by the items in the value in the standard describe format. Example: To include the types used by a function in the describe, the entry ("types: " (GETRELATION FN '(USE TYPE) T) would suffice. --Ron ------- 15-DEC-79 17:24:20-PST,342;000000000001 Date: 15 DEC 1979 1724-PST From: KAPLAN Subject: ADDMAPBUFFER To: TEITELMAN cc: LISP The manual says that it returns T if successful. That should be changed to "non-NIL". I had corrected LMMAC to obey the manual's description, but that led to bug in pmapping. I have reverted to the earlier definition. --RON ------- 17-DEC-79 21:43:44-PST,620;000000000001 Date: 17 DEC 1979 2143-PST From: KAPLAN Subject: SELECTC - SELECT on constant To: LISP cc: TEITELMAN This function lies somewhere between SELECTQ and SELECT (which previously existed but wasn't documented). With SELECTC, the selection keys are evaluated when called from interpreted code, just like SELECT. Unlike SELECT, the keys are also evaluated at compile-time to form a SELECTQ. The form of a selection clause is either 1. an atom or list of atoms, whose values are treated as the keys. 2. a list of lists, the elements of which are forms whose values are treated as the keys. ------- 17-DEC-79 23:50:59-PST,467;000000000001 Date: 17 DEC 1979 2350-PST From: KAPLAN Subject: SELECTC again To: lisp Description is now: SELECTC is like SELECTQ except that it evaluates the key positions of its arguments to obtain the actual keys for a selectq-type comparison. This evaluation is done at compile-time to produce a SELECTQ form--the keys are in a sense compile time constants. Note that the argument syntax for SELECTC differs from the undocumented function SELECT. ------- 21-JAN-80 20:32:13-PST,133;000000000001 Date: 21 JAN 1980 2032-PST From: TEITELMAN To: LISP existence of (getdummyvar) for use under i.s. translation ------- 15-FEB-80 00:15:23-PST,1842;000000000001 Date: 15 FEB 1980 0015-PST From: TEITELMAN To: LISP getdummyvar larry reported a serious problem in current loadup which is that any iteraive statement containing a COLLECT which does not translate into a mapcar, e.g. a collect with a WHILE or a BIND etc. does not dwimify correctly. (1) there is a new loadup which I believe fixes the problem. Hoever, the fix was not straightforard and it is possible i may hve introduced a new problem. if anything develops while i am away, you can simply (2) repair the fix in the current byte.sav by remproving the I.S.OPR property from fcollect (thereby causing it to translate using the (SETQ $$VAL (NCONC1 $$VAL body)) translation. the problem stemmed from fcollect, which is the nly i.s.opr in the world which both evaluates its argument, and also defines an i.s.type. the problem is that it used to be handled by a kluge to take into account the fact that there wasnt anyay to compute the i.s.type so as to use a dummy variable, and also compute an expressionwhich bound the same dummy variable. similar i.s.oprs for inside used to do something like (SUBST (GENSYM) 'VAR exp) where exp included the BIND. but in fcollects case, this didnt work because the BIND and the i.s.type had to be handled separately. I had fixed this up in general but not handled the fcollect case correctly. In case any ofyou wish to use the new faciliy, which is somewhat cleaner, thre is now a functon called GETDUMMYVAR which is to be called from inside of an i.s.opr. It first takes variables from the list ($$TEM1 ... $$TEM6) and then uses GENSYM. If its argument is T, it ALSO effectively binds the variable, i.e. puts it in the progvars list. To see how it is used, look at the i.s.opr def for fcollect, and also for inside, outof etc. warren ------- 18-MAR-80 07:14:44-PST,449;000000000001 Date: 18 MAR 1980 0714-PST From: KAPLAN Subject: New filepkg type property: WHENUNFILED To: TEITELMAN, MASINTER, GOLDMAN at ISIE cc: LISP FILEPKG allows for a new filepkg type proprty WHENUNFILED. Parallel to WHENFILED, its valu is a list of functions that will be applied to name, type, and file whenever an item named name of type type is removed from file by the function DELFROMFILES (or DELFROMFILE). --Ron ------- 18-JUL-80 12:02:37-PDT,1533;000000000001 Date: 18 JUL 1980 1202-PDT From: KAPLAN Subject: New FILEPKG on To: TEITELMAN cc: LISP I changed the way the FILES command works so that it puts out an expression that interprets the arguments at load-time instead of dump-time. In particular, this means that the load-time compile.ext will be used, so that the appropriate choice between COM and DBYTE will be made. The format of the command is checked at dump-time, by the function MAKEFILESCOMS, to make sure that there is no striking error. The expression put out on the file is of the form (FILESLOAD . arguments to the FILES command), where FILESLOAD is a new function that interprets the command. Another change: The ARRAY command will now report that it contains variables (as per a request by Larry). This request raises another issue about the ARRAY command, however: why have it at all. It seems to me that the VARS command should be smart enough to know that if the user asks for a variable with an array value to be dumped, he does not want to see #123456 on the file. The VARS command itself should be able to convert to what the ARRAY command current does in case the value is an array. (Then, for backward compatibility, we could make ARRAY just be a synonym for VARS, and eventually have it drop from the documentation.) This proposed cleanup must be implemeneted in PRETTY (I think in PRETTYVAR1). If you go along with this, let me know and I will make the appropriate cleanups in FILEPKG. --Ron ------- 15-JAN-81 22:36:28-PST,837;000000000001 Date: 15 JAN 1981 2236-PST From: MASINTER To: LISP Date: 17 Oct 1978 2205-EDT From: LEWIS at BBN-TENEXD Subject: set a/c link To: bobrow at MAXC2 cc: YONKE, VITTAL, masinter at MAXC2, TEITELMAN at PARC-MAXC2 Danny, It is now written and will be in the next lisp.mac (alice currently has a hold on the file for a bug fix). I made one change. The fns take a 3rd arg, FLG. If FLG=non-nil then NEWFRAME will be released if the change succeeds. eg, if you want to do the smash and release all the stack pointers, put still catch things if the smash fails, you could say (if not (RELSTK (SETALINK FOO FUM T)) then (SMASHLINKERROR FOO FUM)) or some such. Daryle p.s. A test case I was using was setalink[foo;fum] followed by setclink[fum;foo]. How's that for a case of lisp incest? ------- ------- 15-JAN-81 22:37:19-PST,6301;000000000001 Date: 15 JAN 1981 2237-PST From: MASINTER To: LISP Masterscope now notes which functions use which iterative statementnew features in Masterscope: operators. The command language allows "AS [A] CLISP WORD" as a modifier to USE. Examples: . SHOW WHERE ANY USE collect AS A CLISP WORD . WHICH CLISP WORDS ARE USED BY MYFN Valid synonyms: CLISPWORD = I.S.OPR = CLISP WORD ---------------------------------------------------------------------- The USE of record FIELDS has been split into FETCH of those fields and REPLACE, with USE AS A FIELD the union of those. E.g. . WHO FETCHES FOO will give the list of functions which do a (fetch FOO --) while . WHO REPLACES FOO will give a list of the functions which do a (replace FOO --). ---------------------------------------------------------------------- the LIKE will treat as a edit pattern if it has alt-modes in it...e.g. . SHOW WHERE FOO CALLS ANY LIKE /$ will print out all of the places where a function whose name begins with a "/" is called. --------------------------------------------------------------------- the FIELDS OF denotes all of the record fields of , e.g. . WHO USES ANY FIELDS OF BRECORD returns the list of all functions which do a fetch or replace with any of the field names declared in the record declaration of BRECORD. . WHO USES ANY FIELDS OF ANY RECORDS ON ACOMP gives the functions which use any field of any record on ACOMP. --------------------------------------------------------------------- Masterscope knows more about blocks declarations: You can talk about sets of things in blocks declarations. I.e., a may also be: [ON ] [OF ] where is one of ENTRIES, LOCALVARS, SPECVARS, LOCALFREEVARS, GLOBALVARS, BLKFNS, BLKAPPLYFNS. For example: ENTRIES ON MASTERSCOPE means all of the entries of all of the blocks on the file Masterscope. ENTRIES OF MSPARSE means the entries of the block which contains MSPARSE (MSPARSE could be the block name or one of the actual functions). The words OF and ON in this syntax may be followed by , e.g. ENTRIES OF ANY USING THE FIELD X For GLOBALVARS, SPECVARS, etc, the "ON" phrase will also find the ones that are in the fileCOMS, e.g. GLOBALVARS ON MASTERSCOPE means all of the GLOBALVARS of any block plus those dumped with the GLOBALVARS prettydef command. --------------------------------------------------------------------- In addition, Masterscope contains a fairly comprehensive checker for blocks declarations (as well as a few other anomolous conditions). The command: . CHECK will (a) analyze all of the functions on the file(s) given, if necessary. (b) read the blocks declaration and check for Things not properly declared ENTRIES (e.g. if no one in the block calls a function, and it isn't an entry (or a BLKAPPLYFN) there is no way to get to it). Variables declared improperly (checks LOCALFREEVAR declarations to make sure vars are bound above where they are used, for the deep-bound system, checks SPECVARS to see if they are used below where they are bound, for the shallow system). Variables used freely and not declared (often an error). Note that Masterscope checks for various problems even in the absence of BLOCKS declarations Suggestions for additional checks are welcome. --------------------------------------------------------------------- The EDIT command can be followed by a - and a list of edit commands, for example: . EDIT WHERE MYFN CALLS RPLACA - (R RPLACA FRPLACA) -------------------------------------------------------------------- Note that there are two forms of the EDIT command: . EDIT [WHERE] [- ] and . EDIT [- ] The latter just calls EDITF on each element of . For example: . EDIT WHERE ANY CALLS Y will edit the expressions where Y is called. . EDIT ANY CALLING Y will just call EDITF on the functions that call Y. ---------------------------------------------------------------------- Masterscope allows a command of the form: . FOR which will execute the iterative statment: (FOR IN '(elements of ) ) For example: . FOR X CALLING Y DO (PRINT X) will print on separate lines the names of the functions which call Y . FOR X ON MYFILE AND BINDING Z DO (UNSAVEDEF X) will call UNSAVEDEF on the functions on the file MYFILE which bind the variable Z. ---------------------------------------------------------------------- The command . COMPONENTS will print out a list of the "connected components" of (or everybody if you don't give a set). The connected components are such that if functions are in different components then there is no way to get from one to the other, nor do they call common sub-functions or do they have common callers. ---------------------------------------------------------------------- Questions with more than one question element in them, for example . WHO USES WHO FREELY . WHICH FNS ON MYFILE CALL WHO NOT @ GETD work much better now. ---------------------------------------------------------------------- Relative clauses: another way of saying a is via a "relative clause", introduced by one of the relative pronoun words THAT, WHICH, or WHO, i.e. a may also be: IS/ARE e.g. . EDIT WHERE X USES ANY THAT ARE BOUND BY Y . FOR X THAT BINDS Z DO (PRINT Z) . WHICH FUNCTIONS WHICH BIND Z OR ARE CALLED BY Y ...ARE CALLED SOMEHOW BY X --------------------------------------------------------------------- subject/verb inversion: you can ask questions of the form . DOES . IS e.g. . DOES X BIND Y . IS FOO CALLED SOMEHOW BY Z As usual DOES=DO, ARE=IS -------------------------------------------------------------------- ALL masterscope commands may now be followed by the phrase "OUTPUT filename" to have the results of the command printed on the given file. For example, . DESCRIBE THE FUNCTIONS ON MYFILE OUTPUT LPT: or . WHO ON MYFILE CALLS WHO LIKE /$ OUTPUT UNDOABLE.LIST ------- 25-JAN-81 23:01:30-PST,416;000000000001 Date: 25 JAN 1981 2301-PST From: KAPLAN Subject: New FILEPKG To: teitelman, masinter, lisp cc: goldman at ISI HASDEF now takes a SOURCE argument. If the OPTIONS to GETDEF is or contains a string, that string will be returned if not definition is found. The caller can thus determine whether a definition was found, even for types for which NIL/NOBIND are acceptable definitions. --Ron ------- 6-FEB-81 00:16:36-PST,590;000000000001 Date: 6 FEB 1981 0016-PST From: KAPLAN Subject: FILEPKG To: TEITELMAN, MASINTER cc: LISP Bugs in HASDEF/GETDEF fixed. There is a change in the interpretation of the SOURCE argument, which should be documented: If source is the atom ?, it is interpreted as either 0, T, or FILE. Most functions (e.g. EDTIDEF, GETDEF) default the source argument to ?, so that NIL gives the behavior as currently described. However, HASDEF defaults source to 0, the current definition. This also gives the currently expected behavior for that function. --Ron ------- 9-FEB-81 10:31:44-PST,367;000000000001 Date: 9 Feb. 1981 10:31 am PST (Monday) From: Teitelman.PA Subject: moveitem To: lisp Date: 9 Feb 1981 09:13 PST From: Masinter at PARC-MAXC Subject: Re: MOVEITEM problem In-reply-to: KAPLAN's message of 8 FEB 1981 2346-PST To: KAPLAN cc: VANBUER at USC-ECL, MASINTER, TEITELMAN minor note: MOVETOFILE is the "new" name for MOVEITEM. Larry 24-FEB-81 11:34:40-PST,793;000000000001 Date: 24 Feb. 1981 11:34 am PST (Tuesday) From: Teitelman.PA Subject: manual To: lisp --------------------------- Mail-from: Arpanet host SU-SCORE rcvd at 17-DEC-80 2353-PST Date: 17 Dec 1980 1415-PST From: CSD.DEA at SU-SCORE (Doug Appelt) Subject: A comment on the INTERLISP Manual To: TEITELMAN at PARC-MAXC2 Warren, A SCORE user pointed out the following problem with the INTERLISP manual's description of the ARCTAN2 function. The manual's description is logically correct, however it requires the user to assign the Y coordinate to the variable X and the X coordinate to the variable Y. Perhaps in the future, renaming these variables could eliminate some confusion. - Doug ------- ------------------------------------------------------------ 12-MAR-81 22:25:55-PST,1383;000000000001 Date: 12 March 1981 10:25 pm PST (Thursday) From: KAPLAN.PA Subject: Compile time constants To: Lisp This probably ought to be documented in the manual. --------------------------- Date: 12 MAR 1981 2000-PST From: MASINTER.PA Subject: new CONSTANTS To: Yonke at BBND, Lewis at BBND cc: LispCore^ I think I have a new implementation of CONSTANTS which is reasonable. The function CONSTANTS is on MISC (unfortunately, MACHINEINDEPENDENT, which contains the CONSTANTS macro, is too late for bootstrapping purposes). (CONSTANTS VAR1 VAR2 (VAR3 FORM3) VAR4) define VAR1, ... VAR4 to be "constants": the compiler, when it encounters a (free) reference to a constant will compile instead (CONSTANT VAR1) (CONSTANT VAR2) (CONSTANT FORM3) That is, variables which appeared as an atom in a call to CONSTANTS will merely get wrapped in a "CONSTANT" call. Variables which appear in the CONSTANTS call as (atm form) will get compiled as if the user had said (CONSTANT form) instead of atm. The CONSTANTS file package command (CONSTANTS var1 var2 (var3 form) var4) is equivalent to (DECLARE: EVAL@COMPILE (VARS var1 var2 (var3 form) var4) (P (CONSTANTS var1 var2 (var3 form) var4))) Note that CONSTANTS are no longer DONTCOPY as the default. Larry ------ ------------------------------------------------------------ 30-MAR-81 21:02:11-PST,3836;000000000001 Date: 30 MAR 1981 2102-PST From: MASINTER Subject: formerly TRYHARDER.TXT To: Lisp i have removed the automatic spelling correctionfor movd, putd, getd, setq etc on typein. instead i have replaced it with a new feature which i ae been working on and which is very neat. the feature looks much like the ? feature in that it is expliitly involked after the fact, and is not always guaranteed to be able to do anything. it is invokved via the old $ command which is still used to specify a reexecution following an error so that you dont have to specify the target. if an object to be substituted is also not specified, e.g. user justtypes $ , or $ IN event spec, it means "try harder". the p.a. looks in the indicated event and begins processing it. if it can find a form with quoted arguments, such that car of the form has the property TRYHARDER on it, and one of the elements of this value apples, it will perform the indicated transformation. for example, on the propety list of GETPROPLIST is the property ((GETPROPLIST ATM)). this may seem circular, but in the case f the GETPROPLIST on the proprty, this means that ATM (the argument to getproplist) is supposed to have a property list, so that the system will try to coerce the quoted argument to be such an atom, by spelling correction against userwords. e.g.if i type GETPROPLIST(FOOO) or (SETPROPLIST 'FIE (GETPROPLIST 'FOOO)) and then type $, the system will correcct FOOO to FOO. here is a more interesting example: on property list of GETPROP is ((GETPROPLIST ATM) (OR (MEMB PROP (PROPNAMES ATM)) (MEMB PROP SYSPROPS))) this says to try to fix the first argument if quoted) to be an atom with a property lit, and try to fix the second argument so that it is either one of theproperties on the list (PROPNAMES is simply (MAPLIST (GETPROPLIST X) (FUNCTION CAR)(FUNCTION CDDR))) and if that fails, then spelling correct against SYSPROPS. here is another example: on property list of SETQ is value ((BOUNDP XSET)). this says that if the use types $, then the variable that was set should (have been) bound at the time, i.e. not a new variable. (for thi reason, before checking any of the predicates, the system undoes the indicated event, and then undoes that if it doesnt make any change). thus if yu type SETQ(FOO --) and then SETQ(FOOO --) and notice that the syste didnt type (FOO RESET), you just type $ and it unsets FOOO and fixes it to be FOO. one fnal example: on property list of EDITF is an expression like (SOME FILELST (FUNCTION (LAMBDA (FL) (MEMB FN (FILEFNSLST FL] in this case, i you type EDITF(MUMBLLE) and system doesnt know abut MUMBLLE< thouh it is in one of the files it knows abut, and you type $, it will correct MUMBLLE. notice that the information on tryharder is in declarative form so thatit can be used first to check to see if th condition already holds, and then to make it hold. i debated separating thatout into two different expressions, but so far havent done so. currently, tryharder knows about GETPROPLIST, GETD, BOUNDP, MEMB, OR , and SOME, whic in fact covers a wide variety of spelling correction situations. the thing i like about this is that there are a lot of places in the system where spelling correction is built in because an error is going to occur anyway, but for something like GETD(FOOO), NIL might in fact be a reasonable thing to return. only the usr knows if he mistyped, so that being able to quickly say tryharder seems like a win. the feature is also useful for those cases where the system may not want to try a really involved correction, e.g. mapping through all of filelst to do a spelling correction, unless the user expliitly instructs it to do so knowing thatit will succeed. warren ------- 10-MAY-81 23:29:44-PDT,1450;000000000001 Date: 10 MAY 1981 2329-PDT From: KAPLAN Subject: WORDDELETE terminal class To: lispcore^, yonke at BBND cc: lisp I have implemented an extension to terminal tables so that a WORDDELETE character may be defined. This will wipe out to the first non-OTHER character preceding the first non-SEPR by printing the first-ch delete message and as many nth-char delete messages as needed. The syntax classes of the various characters are determined from the readtable given to the current read-function. I made ^W be the WORDDELETE character inthe ORIG termtable. In effect, this then replaces the current, kludgy implementation of word-delete as an immediate read macro. It does have one unfortunate side-effect, since ^W currently has another function: when ^W is typed as the first character to a READ, it causes the following expression to be evaluated before it gets placed on the history list. In order to get this facility, you must now type ^VW to suppress the word-delete function. Perhaps in INterlisp-D we should use one of the unmarked keys as word-delete. Suggestions? But perhaps it is also more reasonable to get the lispx function of ctl-W imlemented in some other way, perhaps as a lispx history command. Comments? Of course, individual users can change the default by doing a SETSYNTAX in their intializations. This will be in the next loadup (not the one Beau mentioned). --Ron ------- 11-MAY-81 23:24:53-PDT,1656;000000000001 Date: 11 MAY 1981 2324-PDT From: KAPLAN Subject: Change to * FILEPKGCOM and WHEREIS To: TEITELMAN cc: LISP I changed the basic WHEREIS function to bring it into alignment with the one in the WHEREIS package. Specifically, the simple WHEREIS now has an extra argument FN which, if given, is a function that will be applied to each file containing NAME. In the case, WHEREIS will return NIL instead of the list of files. This change means that code doesn't have to be written differently depending on whether the WHEREIS package is loaded. A second change: The fact that the * FILEPKGCOM always does a form-feed has been a singularly unappreciated feature, to the extent that most of us have redefined it. Taking the bull by the horns, I fixed it so that it puts out the formfeed only if the second element of the comment is a *. (* FOO) will just skip a few lines, but (* * FOO)will turn the page. File comments are therefore more similar to ordinary comments. We also introduced a varialbe LAMBDAFONTLINELENGTH, to hold the linelength for comments in the lambda font. THis variable is set in the fontdefs. (This is temporary, since we are heading towards a variable- pitched font world. A final thing about the * command: We removed the DECLARE: expressions that surround the comments, in the interests of cleaning up the way files look. It was argued that not that much structure is involved in that, and eventually recompile can be changed to simply suppress copying comment expressions. This message has gone to LISP for the manual; I hope it also helps you track what's going on. --Ron ------- 12-MAY-81 20:04:46-PDT,793;000000000001 Mail-from: Arpanet host BBNG rcvd at 12-MAY-81 2004-PDT Date: 12 May 1981 2300-EDT From: VITTAL at BBNG Subject: Re: I have forgotten what this is all about; can you illuminate? To: Masinter at PARC-MAXC cc: vanMelle at PARC, Yonke at BBND, Hartley at BBND, cc: Lewis at BBND Larry and Bill: There are some JSYS differences between TOPS20 releases that require knowing what release you are running. There is no way to find out from TOPS20 what release is being run, so the TOPS20.RELEASE file came into being. If I remember right, one of the primary places that required knowing that information was in the implementation of the USERNAME and DIRECTORYNAME functions. The value in the file should be just a number; it is read with the NIN jsys. John ------- 12-MAY-81 21:02:17-PDT,2819;000000000001 Date: 12 MAY 1981 2102-PDT From: MASINTER Subject: Current release has CHARCODE included To: lisp CHARCODE The facilities in this file make it possible to gain the efficiency that comes from dealing with character codes instead of character atoms without losing the symbolic advantages of the latter. Two functions (with appropriate macros, etc.) are provided: charcode[c] Nlambda that returns the character code structure specified by c. If c is a 1-character atom or string, the corresponding character code is simply returned. Thus (CHARCODE A) is 65, (CHARCODE 0) is 48. If c is a list structure, the value is an image of c with all the leaves replaced by the corresponding character codes. E.g., (CHARCODE (A (B C))) is (65 (66 67)). charcode permits easy specification of certain peculiar character codes: A multi-character atom or string whose first character is ^ is interpreted as the control-character corresponding to its second character. Thus, (CHARCODE ^A) is 1, the code for control-A. The following key words are mapped into the indicated codes: CR 13 LF 10 SPACE or SP 32 EOL 31 ESCAPE or ESC 27 BELL 7 BS 8 TAB 9 NULL 0 DEL 127 Finally, charcode maps NIL into NIL. This is included because some character-code producing functions sometimes return NIL (e.g. NTHCHARCODE); a test for that value can be included in a charcode list along with true character-code values. Charcode of symbolic arguments can be used wherever a structure of character codes would be appropriate. For example (FMEMB (NTHCHARCODE X 1) (CHARCODE (CR LF SPACE))) or (EQ (BIN FOO) (CHARCODE ^C)) There is a macro for charcode which causes the character-code structure to be constructed at compile-time. Thus, the compiled code for these examples is exactly as efficient as the less readable (FMEMB (NTHCHARCODE X 1) (QUOTE (13 10 32))) (EQ (BIN FOO) 3) The second function in this file is a selection function similar to SELECTQ, except that the selection keys are determined by applying charcode (instead of QUOTE) to the key-expressions: selcharq[e;clause1...clausen;default] Nlambda like selectq. If the value of e is a character code or NIL and it is EQ or MEMB to the result of applying charcode to the first element of a clause, the remaining forms of that clause are evaluated. Otherwise, the default is evaluated. Thus (SELCHARQ (BIN FOO) ((SPACE TAB) (FUM)) ((^D NIL) (BAR)) (a (BAZ)) (ZIP)) is exactly equivalent to (SELECTQ (BIN FOO) ((32 9) (FUM)) ((4 NIL) (BAR)) (97 (BAZ)) (ZIP)) Furthermore, selcharq has a macro such that it always compiles as an equivalent selectq. ----- Comments and suggestions to Ron Kaplan ------- 22-MAY-81 17:37:54-PDT,894;000000000001 Date: 22 May 1981 17:38 PDT From: Masinter at PARC-MAXC Subject: new Interlisp-10 loadup To: "@[parc-maxc]InterlispSites.dl" cc: LispCore^, DHARE@SRI-CSL Reply-To: Masinter There is a new loadup on [parc-maxc]netlisp.sav;142 Fixes problem reported by several sites with HPRINT on hash arrays. This release also fixes a minor problem HOSTNUMBER on hosts with high imp numbers. HOSTNUMBER() returns a number in accordance with the new 96-bit leader standard. (HOSTNUMBER fixes courtesy Wilber@SRI-AI.) IMPORTANT NOTE: In the past, it was usually the case that Interlisp-10 loadups were tested at PARC for at least a few weeks before releasing a Netlisp. However, our Interlisp-10 usage has been diminishing. Thus, this system is relatively untested; you should proceed with caution (e.g., release the system at first only to your pioneers.) Larry 10-JUN-81 08:25:02-PDT,9278;000000000001 Date: 10 June 1981 8:24 am PDT (Wednesday) From: Masinter.PA to: Lisp Subject: f.y.i., to appear in SIGART Interlisp-D: Further steps in the flight from time-sharing The Interlisp-D Group Cognitive and Instructional Sciences Xerox Palo Alto Research Center The Interlisp-D project was formed to develop a personal machine implementation of Interlisp for use as an environment for research in artificial intelligence and cognitive science [Burton et al., 80b]. This note describes the principal developments since our last report almost a year ago [Burton et al., 80a]. Principal characteristics of Interlisp-D Interlisp-D is an implementation of the Interlisp programming environment [Teitelman & Masinter, 81] for the Dolphin and Dorado personal computers. Both the Dolphin and Dorado are microprogrammed personal computers, with 16-bit data paths and relatively large main memories (~1 megabyte) and virtual address spaces (4M-16M 16 bit words). Both machines have a medium sized local disk, Ethernet controller, a large raster scanned display and a standard Alto keyboard and "mouse" pointing device. Both the internal structure of Interlisp-D and an account of its development are presented in [Burton et al, 80b]. Briefly, Interlisp-D uses a byte-coded instruction set, deep binding, CDR encoding (in a 32 bit CONS cell) and incremental, reference counted garbage collection. The use of deep binding, together with a complete implementation of spaghetti stacks, allows very rapid context switching for both system and user processes. Virtually all of the Interlisp-D system is written in Lisp. A relatively small amount of microcode implements the Interlisp-D instruction set and provides support for a small set of other performance critical operations. The at one time quite large Bcpl kernel has been all but completely absorbed into Lisp, for the reasons outlined in [Burton et al, 80b]. Interlisp-D is completely upward compatible with the widely used PDP-10 version. All the Interlisp system software documented in the Interlisp Reference Manual [Teitelman et al., 78] runs under Interlisp-D, excepting only a few capabilities explicitly indicated in that manual as applicable only to Interlisp-10. The completeness of the implementation has been demonstrated by the fact that several very large, independently developed, application systems, such as the KLONE knowledge representation language [Brachman, 78], have been brought up in Interlisp-D with little or no modification. Interlisp-D is in active use by researchers (other than its implementors) at both Xerox PARC and Stanford University and is now approaching the level of stability and reliability of Interlisp-10. Current performance The performance engineering of a large Lisp system is distinctly non-trivial. We have invested considerable effort, including the development of several performance analysis tools, on the performance of Interlisp-D and, as a result, seen its performance improve by nearly a factor of five over the last year. Although relative performance estimates can be misleading, because of variation due to choice of benchmarks and compilation strategy, the overall performance of Interlisp-D on the Dolphin currently seems to be about twice that of Interlisp-10 on an otherwise unloaded PDP KA-10. Although this level of performance makes the Dolphin a comfortable personal working environment, we have identified a number of improvements which we anticipate will further improve execution speed by between 20% and 100%. Machine independence Another major thrust has been to reduce the dependencies on specific features of the present environment, so as to facilitate Interlisp-D's implementation on other hardware. Dependencies on the operating system have been removed by absorbing most of the higher (generally machine independent) facilities provided by the operating system into Lisp code. Gratuitous dependencies on attributes of the hardware, such as the 16-bit word size, have been removed and inherent ones isolated. In addition to an abstract desire for transportability, our sharing of code with other Interlisp implementation projects provides a on-going motivation for this effort. Extended functionality The principal innovations in Interlisp-D, with respect to previous implementations of Interlisp, involve the extensions required to allow the Interlisp user access to a personal machine computing environment. Network facilities While network access is a valuable facility in any computing environment, it is of particular importance to the user of a personal machine, as it is the means by which the shared resources of the community are accessed. Over the last year, Interlisp-D has incorporated both low level Ethernet access and a collection of various higher level protocols used to communicate with the printing and file servers in use at PARC. It is now straightforward to conduct all file operations directly with remote file servers. This both allows the sharing of common files (e.g., for multi-person projects, such as the construction of Interlisp-D itself), permits a user to move easily from one machine to another, and eliminates any constraints of local disk size. We have also begun to investigate the possibility of paging from a remote virtual memory elsewhere on the network. This would not only allow completely transparent relocation of a user's environment from one machine to another, but would open up a variety of interesting schemes for distributing a computation across a set of machines. High level graphics facilities Interlisp-D has always had a complete set of raster scan graphics operations (documented in [Burton, 80b]). More recent developments include a collection of higher level user graphics facilities, akin to those found in other personal computing environments. The most important of these is the Interlisp-D window package. This facility differs in spirit from most other window systems in that, rather than imposing an elaborate structure on programs that use it, it is a self consciously minimal collection of facilities which allow multiple programs to share the same display. Although some mechanism is necessary to adjudicate a harmonious sharing of the display, we feel that higher level display structuring conventions are still an open research question and therefore should not yet be incorporated into a mandatory system facility. The window package does provide both interactive and programatic constructs for creating, moving, reshaping, overlapping and destroying windows, in such a way that a program can be embedded in a window in a completely transparent (to that program) fashion. This allows existing programs to continue to be used without change, while providing a base for experimentation with more complex window semantics in the context of individual applications. One such existing application is a display based, structural program editor. This editor, in contrast to the character orientation of most modern display based program editors, is the result of marrying display techniques (selection and command specification by pointing, incremental reprinting, etc) with the structure orientation of the existing Interlisp editor. Indeed, the two editors are interfaced so that the considerable symbolic editing power of the existing editor remains available under the display based one. Although our initial experience has been positive, the user interface is under continued revision as we gain further experience with this style of editing. Future plans The area in which we anticipate most future development of Interlisp-D is the personal computing facilities, such as graphics and networking, and their integration into Interlisp's rich collection of programming support tools. While radical changes to the underlying language structures are made difficult by our desire to preserve exact Interlisp compatibility, we also expect some language extensions, including some form of object oriented procedure invocation. One of the great strengths of Interlisp has been the many contributions made by its active, critical user community. We are hopeful that the recent commercial availability of Interlisp-D to other sites, and the consequent growth of its user community, will be a similar source of long term strength and, in the short term, significantly accelerate the pace with which Interlisp evolves away from its time-shared origins into a personal computing environment. REFERENCES Brachman, R. et al. KLONE Reference Manual. BBN Report No. 3848, 1978. Burton, R. et al. Overview and status of DoradoLisp. Proceedings of the 1980 Lisp Conference, Stanford, 1980a. Burton, R. et al. Papers on Interlisp-D. Xerox PARC report, SSL-80-4, 1980b. Teitelman, W. et al. The Interlisp reference manual. Xerox PARC, 1978. Teitelman, W. and Masinter, L. The Interlisp programming environment. IEEE Computer, 14:4 April 1981, pp. 25-34. The members of the Interlisp-D group are Beau Sheil, Bill van Melle, Alan Bell, Richard Burton, Ron Kaplan and Larry Masinter. 12-JUN-81 09:38:49-PDT,1552;000000000001 Date: 12 June 1981 9:27 am PDT (Friday) From: Masinter.PA Subject: New (untested) Interlisp-10: [PARC-MAXC]NETLISP.SAV;143 To: InterlispSites^ Reply-To: Masinter (note: you can now send mail to InterlispSites^@parc-maxc from other network sites to have mail redistributed to all sites.) There is a new (and poorly tested) loadup on [PARC-MAXC]NETLISP.SAV;143. (PARC users will find the equivalent loadup on LISP.SAV;143). This loadup purports to fix: * Problem with HPRINT of arrays (different problem than the previous problem of HPRINT on hash-arrays)> * Problem with CLISPIFY((MAPC X (FUNCTION(LAMBDA (Y Z) --))) (it doesn't do the transformation to a for because the lambda variables might be reset). * Problem with DWIMIFY((~(X~=NIL))) * recompile when GENNUM is high dropping functions Things not fixed: * [CMP.COHEN@UTEXAS-20;7 May 1981 2000-CDT] "LOAD of files with { instead of ( at top level". * [CSD.GREINER@SU-SCORE] "HASH Lispusers package files bigger now" * [APPELT@SRI-AI] "BQ NLAMBDA still dwimifies" * [??] "NAME causes infinite loop" * [Kay@parc-maxc] "broken puttable" - - - - - - - - - - - - - - - - - - - - - - - - - - Query (reply to Henry Sowizral ): "Would you know who I could contact to learn about making small Interlisps? i.e. INTERLISP with as much taken out as possible to free up core? (I assume some people out there have already tried)." - - - - - - - - - - - - - - - - - - - - - - - - - - 11-JUL-81 23:30:25-PDT,1601;000000000001 Date: 11 JUL 1981 2329-PDT From: MASINTER at PARC-MAXC Subject: BACKQUOTE To: Sussman at BBNA cc: LispDiscussion^, InterlispSites^ On [parc-maxc]BQUOTE.COM (and BQUOTE) is a version of the "backquote" macro for Interlisp. This is similar to the facility of the same name in other common lisp dialects as follows: |'form is equivalent to 'form, except that, in the body of form, an element preceded by a "," is evaluated, and an element preceded by ",," is evaluated and spliced in. For example, |'(A ,B ,,C D ,,E) is equivalent to (CONS 'A (CONS B (APPEND C (CONS 'D E] There are a couple of parts to the implementation: | is given a read macro, such that |'form reads in as (BQUOTE form). (the readmacro is in T, FILERDTBL and EDITRDTBL). During the READing of form (but not outside a |' context), "," is given a read macro such that ,X reads in as (UNBQUOTE X). BQUOTE has a macro property to expand out its argument into the appropriate nest of CONSes and APPENDs, looking for UNBQUOTEs. BQUOTE has an entry on PRETTYPRINTMACROS so that BQUOTEd expressions will prettyprint with |'. Rational: |' has been implemented in such a way that it doesn't conflict with the use of | as the "changechar"; since "|" has heretofor been a SEPR, this means that it should be possible to enable BQUOTE and not worry about files made without "|" preceeded by a "%". The read macro doesn't expand the form into CONSes and APPENDs because it is important that functions which use backquote prettyprint reasonably. Larry 16-JUL-81 09:28:25-PDT,793;000000000001 Date: 16 Jul 1981 09:24 PDT From: Masinter at PARC-MAXC Subject: BQUOTE To: LispDiscussion^, InterlispSites^ CC: CSD.JJF at SU-SCORE, csd.greiner at SU-SCORE, csd.dea at SU-SCORE, csd.smith at SU-SCORE Reply-To: Masinter There is (as of yesterday morning) a revised version of BQUOTE & BQUOTE.COM on [parc-maxc] and respectively with some slight extensions and fixes. Extended character set (LMLisp and MacLisp compatibility): ,@ means the same as ,, (splice in using APPEND) ,. means to splice in using NCONC. Minor fixes for some obscure cases, e.g., |'(... %, ...). I intend to include this in the standard Interlisp-10 system, at which time the character conventions will be more difficult to change. Comments appreciated. Larry 12-AUG-81 16:13:33-PDT,7889;000000000001 Date: 12 Aug 1981 16:11 PDT From: Masinter at PARC-MAXC Subject: Re: Interlisp version 27-Nov-79 requested In-reply-to: <10Aug81 150951 MR05@CMU-10A> To: Mike.Rychener at CMU-10A (A110MR05) cc: InterlispSites^, Gripe at cmu-20c Reply-To: Masinter (I'm sending this out to everyone on InterlispSites^ since some of the information has been slightly revised, and some of you may not have seen this.) I will add your name to the InterlispSites^ distribution list for future messages about Interlisp-10 releases. To get a current Interlisp-10: The lisp files are stored on [parc-maxc]. All files are available for FTP from PARC-MAXC, using account ANONYMOUS password . The only files you absolutely need are BOOT.SAV and NETLISP.SAV (which you should install as BOOT.SAV and SYS:LISP.EXE respectively). Other files of interest: *.*;0 *.;0 *.MAC;0 MESSAGE.TXT *.*;0 *.*;0 Some of these are explained as follows (excerpt from letter that goes out with tapes): Numbers in parenthesis denote chapters in the Interlisp Reference Manual: Many of these files are Lisp files, i.e. they consist of sequences of LISP expressions, and are intended to be read by the Interlisp function LOAD, using an appropriate readtable (14). Some of the files are .MAC files, i.e. are PDP-10 assembly language programs intended to be assembled with the MACRO assembler. The Lisp files all begin with an expression of the form (FILECREATED date --), and all end with the word STOP. Finally, there is also a .SAV file which contains a complete core image (makesys) for the current Interlisp system. MESSAGE.TXT internal documentation messages about changes to the system which have occured since the last edition of the manual. MESSAGE.TXT: message files about proposed Interlisp extensions in the future LISP.MAC, ATHASH.MAC, GC.MAC and SWAP.MAC PDP-10 assembly language files which implement the main body of the machine dependent part of Interlisp-10. All of the SUBRS, mechanism for function call, the garbage collector, common run-time routines used by the garbage collector, handling of the spaghetti stacks, the Interlisp-10 code swapper are all in these files. FNS/VARS This file can be used as in index for finding functions on the LISP files which are part of the standard released Interlisp system; it contains, for each file in the standard system the value of the fileCOMS and fileFNS. INIT.LISP initialization file which is used here at PARC; among other things, it sets up FILERDTBL to ignore font control characters as described above. BOOTSTRAP, BASIC, MISC contain the various low level, machine independent, functions that are written in LISP, e.g. APPEND, STRPOS, LOAD, PUTPROP, DEFINE, etc. BRKDWN implements BREAKDOWN (21). WTMISC defines additional general purpose functions, such as RESETSAVE, LVLPRINT, as well as redefining some of the functions in BOOTSTRAP, BASIC, and MISC. ADVISE implements the ADVISE package (section 19). LMMAC, ASSEMBLE, MAC Interlisp-10 implementation-dependent routines. SWAP Interface to the Interlisp-10 code swapper. (3). LOADUP contains the functions which automate the loading of a new interlisp, as well as a number of low level, machine dependent functions. DATATYPE implements some of the functions for user datatypes (section 3) and a few others (HARRAYP, conversion of type names to type numbers). CODEFORMAT routines which know about format of PDP-10 compiled code. COMPILE the user interface to the Interlisp compiler, e.g. the functions that compile, or recompile a file or collections of files (18). COMP, LAP the actual Interlisp-10 compiler, i.e. the programs that given a lisp expression produce a sequence of PDP-10 machine instructions (18). 10MACROS Interlisp-10 specific macros (18) MACROS Machine independent macros (18). PRETTY, COMMENT the prettyprint package (14). EDIT, WEDIT the Interlisp editor (9). BREAK the Interlisp break package (15). HELPDL contains functions that are invoked when an error occurs (but not the error correction machinery - see DWIM below), that search the stack and determine whether or not to go into a break, print a message etc. (16). ARITH various arithmetic and trigonometric functions, e.g. SQRT, SIN (13). LOADFNS implements the functions LOADFNS and its confederates, LOADFROM, LOADEFS etc. (14). FILEPKG the Interlisp file package (14). HIST contains the programmer's assistant (22). UNDO functions associated with saving undo information, and undoing the corresponding operations (22). DWIM, WTFIX, CLISP, DWIMIFY implements DWIM and CLISP (17, 23). CLISPIFY contains the package that converts ordinary Interlisp into CLISP (23). RECORD The Interlisp record package (23). MATCH The pattern match compiler (23). FFILEPOS implements fast file search which uses the Boyer-Moore algorithm. MASTERSCOPE The Masterscope system (20); MASTERSCOPE.SYNTAX is an additional (online) documentation file. HELPSYS the package that allows the user to interrogate the on-line Interlisp manual (section 20). ASSIST contains ASKUSER, GAINSPACE & a few others. UTILITY contains DIRECTORY (interface for searching file TENEX file system name space) and a few others (21). HPRINT HPRINT (21). EDITA the EDITA package (21) The following two files are the only files which are necessary in order to run Interlisp on a Tenex or TOPS-20. BOOT.SAV This file must be on the directory. LISP.SAV File which contains the Interlisp system. The following files are necessary in order for HELPSYS (21) to work. *LISP.TTY the Interlisp reference manual in machine readable form. HELPIDX, HELPADRF The HELPSYS Data base. Installing and running Interlisp The file LISP.SAV should be on directory . On TOPS-20 systems, it is conventional to name this file LISP.EXE. It is probably a good idea to use the same version number as appears on the DUMPER tape when storing this file so that it is clear which version of Interlisp you are running. Note that if you RENAME a LISP.SAV from one directory to another or even change version numbers, that SYSOUT's on that LISP will become confused. Some sites have chosen, therefore, to put the LISP.SAV on and put an "indirect" on which merely runs the appropriate version of LISP.SAV. There is a program MAKE-INDIRECT.SAV which makes these "indirect" files. The file BOOT.SAV must be on directory . Should you want to make HELPSYS available at your site, the helpsys files should be either on the directory or on the directory (HELPSYS will look for them in both places). Finally, the file INIT.LISP is a file containing S-expressions suitable for loading by LOAD, and, if found on the directory , is loaded automatically (silently) each time a user starts up a fresh Interlisp (i.e. not when a sysout is started). The INIT.LISP file can be used, for example, to change defaults for various Interlisp packages to be more suitable for the particular site or user community. For example, at PARC, we use the INIT.LISP file to enable some font change machinery for use with our printer (and in fact the PARC INIT.LISP file is on your tape). Note that Interlisp will run without INIT.LISP. Furthermore, each individual user can also have an INIT.LISP file on his own directory to establish his own defaults, which will be loaded after the INIT.LISP file. 18-AUG-81 14:40:02-PDT,432;000000000001 Date: 18 AUG 1981 1439-PDT From: KAPLAN.PA Subject: SHH: New LISPXMACRO To: LISPCORE^ cc: TEITELMAN, LISP I've installed a new LISPXMACRO named SHH. It is just like the E command, except that the evaluation or application is done quietly--no entry on the history list and not undoable. SHH thus substitutes for the quirky ^W read macro, which now conflicts with the terminal word-delete function of ^W. --Ron 15-SEP-81 10:35:27-PDT,526;000000000001 Date: 15 Sept. 1981 10:28 am PDT (Tuesday) From: Masinter.PA Subject: Re: Compiler version on Dolphin In-reply-to: Your message of 14 SEP 1981 2216-PDT To: KAPLAN cc: MASINTER, LispCore^, Lisp I have disabled the COMPVERSION check (in all systems) because the compversion message is wrong, not sensitive to compilermode, and doesn't differentiate between the "compiler" version and the "system" version. At some later date I may reinstall a mechanism for properly checking compiler vs. system version. Larry 21-SEP-81 14:33:13-PDT,184;000000000001 Date: 21 Sep 1981 14:33 PDT From: Masinter at PARC-MAXC Subject: I.S.OPRS To: Lisp, Goldman@ISI cc: Masinter Next release will have I.S.OPRS dumped in a EVAL@COMPILE. Larry 22-SEP-81 10:41:32-PDT,355;000000000001 Date: 22 Sept. 1981 10:41 am PDT (Tuesday) From: Masinter.PA To: LISP --------------------------- From: LEWIS at BBND Message-ID: <[BBND]10-Aug-81 14:52:24.LEWIS> Main changes are addition of compile time constants. Also, fixed several little bugs and some new optimizations were added (eg, selectq of literals and (SYSTEMTYPE)). Daryle 28-SEP-81 18:55:36-PDT,1246;000000000001 Date: 28 Sep 1981 18:54 PDT From: Masinter at PARC-MAXC Subject: Re: lisp software, packages In-reply-to: DONC's message of 4 Sep 1981 1719-PDT To: Don.Cohen cc: InterlispSites^, LispDiscussion^ Reply-To: Masinter Warren forwarded your inquiry about Lisp packages to me. New packages for are actively solicited. Minimal requirements are that the file be editable and compilable in a "standard" Interlisp (e.g., all declarations which need be are in DECLARE: EVAL@COMPILE's, including possibly (RESETSAVE DWIMIFYCOMPFLG T), no special file package commands which aren't explicitly imported, etc.), and that the file be accompanied by a text file which describes its use. The text file should include the name and net address of anyone who should get mail about the use of the package. For example, you might submit EVALHOOK, EVALHOOK.COM and EVALHOOK.TTY. We will put the file on at PARC and elsewhere. I will include it in the list I am putting together of files which are generally available. (Until then, you might just look, using FTP as ANONYMOUS at [parc-maxc] for things which you do not already have at your local site.) Larry 28-SEP-81 19:09:46-PDT,2083;000000000001 Date: 28 Sept. 1981 7:09 pm PDT (Monday) From: Masinter.PA Subject: Files and status To: InterlispSites^ cc: LispDiscussion^ Reply-to: Masinter I have been doing some shuffling of files in the last week or so, and thought I might warn anyone attempting to FTP files from PARC-MAXC about the current status: FILES MOVING: We have abandoned at PARC the special compiler and local microcode for Interlisp-Maxc, because our local use of Interlisp-10 has diminished to the point where it was no longer worth the effort to recompile all system files both for and for local use. There was thus no reason to keep separate copies of files on the directory, and I have been moving/recompiling files to and to . former location current location *.COM *.COM NETLISP.SAV NETLISP.SAV *.COM *.COM (We are still using some special Maxc-only features in LISP.MAC, so that you should NOT retrieve [parc-maxc]LISP.SAV and will not need MAXC*.*.) LOADUP STATUS: We are currently testing a version NETLISP.SAV;144. I have found in this version several small glitches, to the point that I would NOT recommend retrieving this version. I will send out a message again when there is a new system in which I have more confidence. FILE REORGANIZATION: For those that load up their own systems: I have reorganized the files which formerly were in "filegroups" so that they could be compiled independently. For those who run their own loadups, it may be necessary to alter your loadup procedure, as: PRETTY.COM -> PRETTY.COM, COMMENT.COM EDIT.COM -> EDIT.COM, WEDIT.COM WTFIX.COM -> WTFIX.COM, DWIMIFY.COM, CLISP.COM [n.b. to LispDiscussion: you might consider altering your compilation proceedures to no longer BCOMPL those files together; if you use LOADUP, I also have altered versions of LOADUP.LISP. When retrieving files, look on first, then on , as some of these changes are only in the files.] 29-SEP-81 15:29:03-PDT,482;000000000001 Date: 29 Sept. 1981 3:29 pm PDT (Tuesday) From: KAPLAN.PA Subject: ECHOCHAR, ECHOMETA, UPARROW --> INDICATE To: LISP At least for the non-pdp10 implementations, ECHOCONTROL has been modified to use INDICATE instead of UPARROW. For meta characters (128-255), INDICATE means prefix with #. ECHOMETA coerces characters into the meta range. The function ECHOCHAR takes char codes with no coercion--it is called by ECHOCONTROL and ECHOMETA after coercion to do the work. 9-DEC-81 09:17:09-PST,10966;000000000001 Date: 9 Dec. 1981 9:12 am PST (Wednesday) From: Masinter.PA Subject: New version of Interlisp-10 (release 145) To: InterlispSites^ cc: LispUsers^ This message announces a new version of Interlisp-10, version 145. This version is available to Arpanet sites as: [PARC-MAXC]NETLISP.SAV;145. Please forward as appropriate to your users. (Xerox users will find a version on LISP.SAV;145.) Sources and .COM files are also found on [PARC-MAXC]. Note that we have discontinued using PARC-specific .COM files, so that the need for a separate NETLISP and NETLISPUSERS directories have vanished. You should once again obtain all files from and , although MESSAGE.TXT may be of some interest.) This release includes a number of important bug fixes and improvements, as well as support for features to enable Interlisp programs to be written so that they may be more easily ported to other implementations of Interlisp (specifically, Interlisp-D, Interlisp-Jericho and Interlisp-VAX.) Note that most of these changes are not specific to Interlisp-10; they appear in Interlisp-D, -Jericho and -Vax. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (SYSTEMTYPE) [Function] The function (SYSTEMTYPE) is defined in all implementations to return the type of the currently running system. In Interlisp-10, it returns either the atom TOPS20 or TENEX. Programs which need to perform different actions depending on the type of system they are running under can write (SELECTQ (SYSTEMTYPE) ((TENEX TOPS20) (* Interlisp-10 version) --) (VAX (* Interlisp-VAX version) --) ((D ALTO) (* Interlisp-D version) --) (JERICHO (* Interlisp-Jericho version) --) --) All Interlisp compilers, including Interlisp-10, will actually perform the selection at compile-time (for the "target" system.) This means that, although the selection looks like it is run-time, it is actually handled at compile time. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (COMPILEMODE) [Function] The function (COMPILEMODE) is defined in all implementations to return the type of the system being compiled for. This differs from (SYSTEMTYPE) in that one can perform cross-compilation, e.g., run the Interlisp-D compiler under Interlisp-VAX. Note also that (COMPILEMODE) for Interlisp-10 is the atom PDP-10, rather than TENEX and/or TOPS20. This sometimes occurs, e.g., in the fileCOMS for a file, for example: (DECLARE: EVAL@COMPILEWHEN (EQ (COMPILEMODE) (QUOTE PDP-10)) (FILES (SYSLOAD FROM VALUEOF LISPUSERSDIRECTORIES) CJSYS] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 10MACRO [Property] MACRO [Property] VAXMACRO [Property] DMACRO (ALTOMACRO) [Property] JMACRO [Property] COMPILERMACROPROPS [Variable] Another way of conditionally compiling for different systems is to use different macro properties. The Interlisp-10 compiler (and other Interlisp compilers) now search for a number of properties (as determined by the variable COMPILERMACROPROPS) rather than a single one. The property MACRO should be reserved for machine-independent macros. If you have macros which are specific for a single implementation (e.g., Interlisp-10 macros which generate ASSEMBLE code), you should use the implementation-dependent macro name. In Interlisp-10, this is the atom 10MACRO. The packages EXPANDMACRO, MACROTRAN, ASSEMBLETRAN have all been modified to be compatible with this change. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (LINELENGTH N FILE) [Function] The notion of line length is now file-specific. Every file has its own individual line length. The linelength for T is set from the operating system via the function (SETLINELENGTH) {executed at every (RESET) and when starting an Interlisp-10 sysout}. The line length for disk files is initially set to be the value of FILELINELENGTH when a file is opened for output. This change was motivated primarily by multiple-window systems where each window wants to have its own notion of the length of a line, but is definitely an improvement in the semantics of LINELENGTH. Unfortunately, it is necessary to examine existing uses of the function LINELENGTH to ensure that they will continue to operate correctly. Since the FILE to LINELENGTH, if unsupplied, defaults to the current output file, most existing uses of LINELENGTH will continue to work unchanged. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (ARRAY SIZE TYPE INIT) [Function] The ARRAY function in Interlisp-10 has been extended to accept a TYPE argument as allowable in other Interlisp implementations. In particular, TYPE can be any "specification" which is allowable in a datatype declaration: (BITS n) POINTER FIXP FLOATP There are not actually any new array types in Interlisp-10; that is, the ARRAY function returns an array which will "hold" the values specified. This allows code to be written which takes advantage of the new features of the other Interlisp implementations but will still run in Interlisp-10. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (DEFPRINT TYPENAME FUNCTION) [Function] The interpretation of DEFPRINT function has been extended (compatibly) so that the user's function gets passed a second argument, FILE. If output is being directied to a file, the full name of the file will be passed. (If output is for one of the internal printing functions, e.g., NCHARS, the FILE argument will be NIL.) The value returned from the users DEFPRINT function is interpreted as follows: NIL - print the standard #nnnnn for this object a list - If the car is non-NIL, print it using PRIN1. Then, if the CDR is non-NIL, print it using PRIN2. (The non-NIL CDR test is a change. It means the user doesn't have to return (PACK) to avoid PRIN2 printing.] anything else - no additional printing (beyond what the user function did) is performed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (ECHOCONTROL CHAR MODE) [Function] The function ECHOCONTROL returns and will accept as its MODE argument the atom INDICATE (instead of UPARROW) to mean "indicate the character as appropriate". This change was made in order to handle reasonably the printing of characters in extended ranges, namely, the 8-bit character codes in other Interlisp implementations.) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (SKIPSEPRS FILE RDTBL) [Function] Advances the file pointer of FILE until a non-SEPR character in RDTBL is peeked at. Value is that non-sepr, or NIL if there are no non-seprs left on the file. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BREAKCHECK and NLSETQ interaction We have fixed the interaction with NLSETQ and BREAK so that it is guaranteed that no break will occur (unless HELPFLAG is !BREAK) and no error message will be printed (unless NLSETQGAG is NIL) under an NLSETQ. This change removes the necessity of re-binding HELPFLAG to ensure this behavior, e.g., (RESETVARS (HELPFLAG) (RETURN (NLSETQ --] can be re-written back as (NLSETQ --]. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (FINDFILE FILE NSFLG DIRS) [Function] The FINDFILE function has been modified slightly. If the DIRS argument is supplied, FINDFILE will no longer first look on the connected directory. The connected directory will be searched if and when the atom T is found in the list. NIL in the DIRS-list still means the "login" directory. (Note: FINDFILE is a "super" INFILEP; it attempts spelling correction, unless NSFLG is T, and will scan the given DIRS or the directories on the global variable DIRECTORIES. This mechanism may be used in lieu of or in addition to the directory-path feature of TOPS-20; many system packages when scanning for files use FINDFILE or its SPELLFILE equivalent.) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Font profile change The entries on the variable FONTPROFILE no longer need the "extra cell" documented in the manual. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - New (versions of) LISPUSERS packages, on [PARC-MAXC] Site maintainers should check to see if they have the latest versions of the following LISPUSERS packages. Unfortunately, some of the version numbers have been reset, so that the most reliable way of checking is to look at the FILECREATED date, or at least the creation-date of the file on our directory. Files recently updated or released include: BQUOTE (new package, see .TTY file), DECL, PERFORMTRAN (new package), ALL, COMMENT, REMIND All other packages have been recompiled using a somewhat improved PDP-10 compiler; it is probably also worth retrieving new .COM files for all packages. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GREET implementation change GREET no longer uses the GREETDIRECTORY/GREETFILE/GREETEXT mechanism to determine the "name" of the greet file. Instead, GREET calls a single function, GREETFILENAME, which can be advised or redefined if the user wants to modify the behavior of GREET. (GREETFILENAME USER) is called twice, once with USER=T and once with USER=USERNAME. In the standard system, (GREETFILENAME T) returns INIT.LISP, while (GREETFILENAME 'user) returns INIT.LISP. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FNS/VARS file Unfortunately, there is no FNS/VARS file for this loadup of Interlisp-10. We will attempt to provide a cross reference file in the near future. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Special loadups For those sites which make special loadups, please be advised that the "filegroups" (PRETTY COMMENT), (EDIT WEDIT), (DWIMIFY WTFIX CLISP) have been split up. If you were formerly explicity loading (or excluding) PRETTY.COM, you will have to explicitly load (or exclude) both PRETTY.COM and COMMENT.COM to have the same effect. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Various fixes: LOADCOMP? remembers more reasonably which files have been LOADCOMPed. Many minor fixes to the file package, break package, clispify, record. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A few reported bugs have not been fixed yet: (EXPT 16.0 16) still returns wrong result (Interlisp-10 only). Masterscope cannot analyze expressions beginning with "with". does not see field names used in conjunction with change-words. SHOW PATHS has problems with extremely long function names. If there are other bugs which have been reported and have not been fixed, please remind us. -- The Interlisp Maintainers [consisting currently of various people at Xerox, BBN, and ISI]. 9-DEC-81 09:54:46-PST,1550;000000000001 Date: 9 Dec. 1981 9:40 am PST (Wednesday) From: Masinter.PA Subject: Subject: New version of Interlisp-10 (release 145) ADDENDUM To: InterlispSites^ cc: LispUsers^ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Compiler This version of Interlisp-10 contains an improved compiler. In particular, the compiler performs some "constant-folding". For example, simple numeric expressions consisting only of constants will be computed at compile time. This is particularly useful in expressions which get generated via macros. [These optimizations are also performed by the Interlisp-D (and thus -VAX) compilers and, I believe, the Interlisp-Jericho compiler.] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (CONSTANTS . vars) [File package command] The user can now declare variables as constants (in all Interlisp implementations). The file package command (and function) CONSTANTS resembles the VARS file package command in format, but the value of the variable will actually be used in-line in the code generated by the compiler. This allows users to declare variables as compile-time-constants without having to explicitly wrap a CONSTANT around its use. This feature should be used with some caution, since functions must which use a constant must be recompiled when the value of the constant changes. If there is a Masterscope data base of the users functions, Masterscope will warn the user about which functions need recompilation when a CONSTANT is reassigned at the top level. 28-DEC-81 21:45:13-PST,325;000000000001 Mail-from: Arpanet host KESTREL rcvd at 28-DEC-81 2145-PST Date: 28 December 1981 21:41-PST (Monday) From: WESTFOLD at KESTREL To: MASINTER@PARC Cc: WESTFOLD Subject: Editor bug in LISP 145 (BK n) and (NX n) don't work. The problem is that (EDIT* C2) in EDITCOML has been dwimified to (ITIMES EDIT C1) ! steve 28-DEC-81 22:31:09-PST,280;000000000001 Date: 28 DEC 1981 2231-PST From: MASINTER Subject: Re: Editor bug in LISP 145 To: WESTFOLD at KESTREL cc: MASINTER In response to your message sent 28 December 1981 21:41-PST (Monday) Thanks for the bug report. I have fixed it; will be in next release. Larry 4-JAN-82 15:32:29-PST,131;000000000001 Date: 4 JAN 1982 1532-PST From: KAPLAN Subject: Change to ADDTOCOMS, ADDTOFILE: NEAR and LISTNAME are args now To: LISP 5-JAN-82 21:31:39-PST,365;000000000001 Date: 5 JAN 1982 2131-PST From: KAPLAN Subject: I added RESETTOPVALS in MACHINEINDEPENDENT To: MASINTER, LISP which is like RESETVARS except that it uniformly sets the top-value cell in both deep and shallow. The body is a PROGN body, not a PROG body. COmpiles open. I also distributed this as appropriate in COMPILE, and put the macro in MACROS. 11-JAN-82 12:38:23-PST,3905;000000000001 Date: 11 Jan. 1982 12:31 pm PST (Monday) From: Masinter.PA To: Lisp, LispCore^ COPYRIGHT The system now has a facility for automatically inserting a copyright notice near the front of files, right after the FILECREATED expression, specifying the years it was edited and the copyright owner. The format of the copyright notice is: (* Copyright (c) 1981 by Foo Bars Corporation) Once a file has a copyright notice then every version will have a new copyright notice inserted into the file without user intervention. (The copyright information necessary to keep the copyright up to date is stored at the end of the file.). COPYRIGHTFLG [Variable] COPYRIGHTOWNERS [Variable] DEFAULTCOPYRIGHTOWNER [Variable] The variables COPYRIGHTFLG, COPYRIGHTOWNERS, and DEFAULTCOPYRIGHTOWNER control the operation of the COPYRIGHT facility. If COPYRIGHTFLG=NIL (default), the system will preserve old copyright information, but will not ask the user about copyrighting new files. If COPYRIGHTFLG=T, then when a file is made, if it has no copyright information, the system will ask: filename copyright owner: The potential responses are controlled by the list COPYRIGHTOWNERS. COPYRIGHTOWNERS is a list of entries of the form (KEY OWNERSTRING) where KEY is used as a response to ASKUSER and OWNERSTRING is a string which is the full identification of the owner. In addition, there are three other possible responses the user can make (even if COPYRIGHTOWNERS is NIL) (1) Type a left-square-bracket. The system will then prompt for an arbitrary string which will be used as the owner-string (2) Type a right-square-bracket, which specifies that the user really does not want a copyright notice. (3) Type "NONE" which specifies that this file should never have a copyright notice. If the user does not respond in DWIMWAIT seconds to the copyright query, the value of DEFAULTCOPYRIGHTOWNER will be used instead. For example, if COPYRIGHTOWNERS has the value ((BBN "Bolt Beranek and Newman Inc.") (XEROX "Xerox Corporation")) then for a new file FOO the following interaction will take place: Do you want to Copyright FOO? Yes Copyright owner: {user typed ?} one of: BBN - Bolt Beranek and Newman Inc. XEROX - Xerox Corporation NONE - no copyright ever for this file [ - new copyright owner -- type one line of text ] - no copyright notice for this file now Copyright owner: BBN Then "Foo Bars Corporation" in the above copyright notice example would have been "Bolt Beranek and Newman Inc." Any year the file has been edited is considered a "copyright year" and therefore kept with the copyright information. For example, if a file has been edited in 1981, 1982, and 1984, then the copyright notice would look like: (* Copyright (c) 1981,1982,1984 by Martin D. Yonke) Implementation notes The copyright information for a file is stored on the property list of the file, under the COPYRIGHT property, which is a list of the form (OWNER year1 year2 ...). To remove all current copyright information about a file, call (REMPROP FILE 'COPYRIGHT). If COPYRIGHTFLG=NEVER, the system will neither prompt for new copyright information nor preserve old copyright information. Copyright information included via the previous COPYRIGHT package will be preserved (i.e., the copyright facility looks at the COPYRIGHTOWNER and COPYRIGHTYEARS property of a file.) = = = = = = = = = = = = = = = = = = = In addition, there is available on COPYRIGHT & .COM an extension of the copyright facility: if you load in this file, then copyright notices will be printed as (* Copyright (c) 1981, 1982, 1984 by Larry M. Masinter *) 11-JAN-82 20:58:08-PST,425;000000000001 Date: 11 Jan. 1982 8:55 pm PST (Monday) From: vanMelle.PA Subject: Common Lisp To: LispDiscussion^ cc: InterlispSites^ Reply-To: vanMelle For those interested in Common Lisp: In November, I attended a meeting about Common Lisp. Larry Masinter and I have prepared a report on that meeting and on the Common Lisp effort more generally, which can be found on [PARC-MAXC]COMLISP.REPORT. Bill van Melle 17-JAN-82 13:38:27-PST,333;000000000001 Date: 17 JAN 1982 1338-PST From: MASINTER Subject: BQUOTE To: Goldman at ISIF cc: masinter, Lisp I fixed BQUOTE's read macro not to say "FIRST". Since | was previously a sepr, this should not affect existing files. There are still a couple of outstanding problems with BQUOTE, but... one thing at a time. Larry 25-JAN-82 10:30:04-PST,755;000000000001 Date: 25 Jan 1982 10:28 PST From: Masinter at PARC-MAXC Subject: new COMP & .COM on fixing handling of constants To: Lewis@BBND cc: Lisp, Goldman@ISIB, Masinter Daryle-- I went in to look at what was going on and wound up fixing the problem in the PDP-10 compiler. It is now the case if you say (CONSTANTS (VAL1 (PLUS 1 2))(VAL2 (STKNTH 0 T)] that VAL1 will compile as 3, and compiling VAL2 will complain. I think it could be fixed so that VAL2 would compile as if you had said (CONSTANT (STKNTH 0 T)), but that would require even more major surgery. I also fixed what appeared to be a bug in that there was a (CADR (QUOPP --)) in one of the functions which was obviously wrong (QUOPP not returning a list). Larry 17-FEB-82 19:41:22-PST,308;000000000001 Date: 17 FEB 1982 1941-PST From: KAPLAN Subject: New I.S.OPRs: largest and smallest To: LISP Returns the value of I.V. that provides the greatest/smallest value of the body form. $$EXTREME is always bound to the current greatest/smallest value, $$VAL to the value of I.V. from which it came. 18-FEB-82 16:22:02-PST,562;000000000001 Date: 18 FEB 1982 1622-PST From: KAPLAN Subject: New definition format for FILEPKGCOMS To: LISP The definition of a FILEPKGCOMS is now a list of the form ((COM . props)(TYPE . props)), where props are the various attributes of the name thought of as a filepkg command or type. Properties not mentioned are assumed to have NIL values. This is the kind of object that GETDEF returns and that PUTDEF accepts. The functions FILEPKGCOM and FILEPKGTYPE allow for the setting of individual properties without redefining the whole thing. --Ron 24-FEB-82 23:14:58-PST,663;000000000001 Date: 24 FEB 1982 2314-PST From: MASINTER.PA Subject: (EOL CR), (EOL CRLF) To: LispCore^ cc: lisp I fixed it in Interlisp-10 so that the EOL mode is settable on a per-file basis, as one of the MACHINE.DEPENDENT.PARAMETERS using a (EOL type) element in the list. (I was in search of why I couldn't load files directly from Phylum using PUPFTP, and it was because Interlisp-10 was trying to gobble a LF after a CR and gobbled too much.) Is there any good reason why Interlisp-D shouldn't support this too? I imagine the EOL mode should be read/settable via GETFILEINFO, and perhaps #EOLCHARS should be a GETFILEINFO parameter too... Larry 1-MAR-82 14:11:31-PST,1847;000000000001 Date: 1 Mar 1982 13:09 PST From: Masinter at PARC-MAXC Subject: Re: MAPHASH problems in Interlisp?? In-reply-to: KINI's message of 23 Feb 1982 1604-PST To: Vittal Kini cc: InterlispSites^ (I'm cc:ing InterlispSites^ on the response because this problem is not widely known.) Vittal: (1) You have unfortunately run into one of the more subtle problems with MAPHASH in Interlisp-10: if a garbage collection which MOVES STORAGE occurs during the middle of a MAPHASH, it is possible for the hash pointers to move around, and for entries to be missed and for some entries to be visitied twice. This is the only situation in which MAPHASH will omit items or present them twice (note that "rehashing" actually copies the original array into another one, so that if a rehash occurs because of overflow, you may get outdated information but not any duplicates.) (2) The problem is that if a reclaim needs to increase the size of one of the contiguous areas (such as array space or string pointer space), it may actually move around pages of atoms. It isn't that atoms get compacted but rather that other spaces have to increase which causes the atoms to get moved around. (3) The way that I worked around this problem when I ran into it was (a) MAPHASH down the array, collecting a list of the "keys" (b) MAPC down that list, performing the operation This guarantees that no string/array/pname garbage collection will occur during MAPHASH. There are some proposals for fixing this problem in Interlisp-10 (e.g., marking the array that it is being maphashed, and if so marked, not rehashing during a reclaim but fixing it the next puthash) but so far (for the last 4 years) no progress on fixing it. This bug is not present in other Interlisp implementations, as far as I know. Larry 1-MAR-82 17:33:20-PST,714;000000000001 Mail-from: Arpanet host USC-ISIF rcvd at 1-MAR-82 1732-PST Date: 1 Mar 1982 1732-PST From: Steve Crocker Subject: Re: MAPHASH problems in Interlisp?? To: Masinter at PARC-MAXC, KINI at USC-ISIB cc: InterlispSites^ at PARC-MAXC In-Reply-To: Your message of 1-Mar-82 1309-PST An alternative strategy is not to use MAPHASH at all. An auxiliary list may be kept, suitably updated whenever items are added to or deleted from the table. If this sounds ridiculously expensive, I submit that it competes with the proposed solution for some frequencies of MAPHASHing, adding, deleting and accessing elements. It would be interesting to see the crossover point. Steve ------- 2-MAR-82 15:58:11-PST,465;000000000001 Mail-from: Arpanet host USC-ISIB rcvd at 2-MAR-82 1557-PST Date: 2 Mar 1982 1557-PST From: Dave Dyer Subject: Re: MAPHASH problems in Interlisp?? To: Masinter at PARC-MAXC, KINI at USC-ISIB cc: InterlispSites^ at PARC-MAXC In-Reply-To: Your message of 1-Mar-82 1309-PST Interlisp-VAX shares exactly the same problem, except that GC is much less frequent and therefore less likely to occur in a critical interval. ------- 15-APR-82 10:17:52-PST,1243;000000000001 Date: 15 Apr 1982 10:17 PST From: Masinter at PARC-MAXC Subject: WITH construct in record package To: Lisp, LispCore^ cc: Goldman@ISIF, Masinter This feature has been in the system for a while, but there were a few minor problems which prevented me from advertising it. I fixed them a couple of months ago: (WITH . ) [special form] The WITH construct can be used to talk about the fields of a record as if they were variables within a lexical scope. is the name of a record, and is an expression which evaluates to an instance of that record. The expressions in are evaluated in a way where references to variables which are field-names of are implemented via field-fetches and SETQs of those variables are implemented via field-replacement. For example, given (RECORD RECN (FLD1 FLD2)) (SETQ INST (CREATE RECN FLD1 _ 10 FLD2 _ 20)) Then the construct (with RECN INST (SETQ FLD2 (PLUS FLD1 FLD2] is equivalent to (replace FLD2 of INST with (PLUS (fetch FLD1 of INST) (fetch FLD2 of INST] Note that the substitution is lexical: this operates by actually doing a substitution inside . Larry 18-APR-82 16:19:24-PST,655;000000000001 Date: 18 APR 1982 1619-PST From: MASINTER Subject: Masterscope expanding macros To: Kaplan cc: lisp, masinter I fixed it so that masterscope expands any macros of MSMACROPROPS, initially = (MACROS). It works for OPENLAMBDA too (I think the PDP-10 compiler works for OPENLAMBDA too). I moved the code for macro expansion to the file MACROS (rather than DWIM). New entry (MACROEXPANSION form macroprop) given the macro property "macroprop", MACROEXPANSION does the expansion. (GETMACROPROP fn props) (maybe this should be renamed?) It actually just returns the first property of "fn" out of props. Larry 18-MAY-82 09:46:33-PDT,715;000000000001 Date: 18 May 1982 9:43 am PDT (Tuesday) From: Sannella.PA Subject: Interlisp Manual Revision -- request for comments To: InterlispSites^ cc: LispDiscussion^, LispUsers^ reply-to: Sannella.PA@parc-maxc Greetings! We am working on a completely new version of the Interlisp reference manual. We are updating the text, rewriting and extending some of the sections, changing the manual's overall organization, and reformatting the entire manual. I am coordinating this effort. If you (or any of your users) have online files of manual errors or other material, I would greatly appreciate it you could send them to me. Thank you for your assistance. Michael Sannella 12-JUN-82 15:22:27-PDT,1243;000000000001 Date: 12 JUN 1982 1522-PDT From: KAPLAN.PA Subject: New FILEPKG command: INITVARS To: lispcore^, lisp I have added a new filepkg command to the system. It is already included in BYTE.SAV and ABC, and will appear in any D loadups made Friday or after. INITVARS is used for initializing variables--setting their values only when they are currently NOBIND. A variable value defined in an INITVARS command will not clobber the current value. This means that re-loading files to work on some aspect will not change the variable values. The format of an INITVARS command is just like VARS. The only difference is that atomic elements in the argument of the command will not cause the current core value to be dumped; instead they will define NIL as the initialization value. Thus, (INITVARS FOO (FUM 2)) is the same as (INITVARS (FOO NIL)(FUM 2)). INITVARS should be used instead of VARS for almost all variables in system files. It also should be used instead of (ADDVARS (FOO)) when the purpose is merely to insure that the value is NIL. INITVARS puts out an RPAQ? command on the file instead of RPAQ. This is a new function that I also added to the system, and which should also be documented. --Ron 13-JUN-82 23:12:15-PDT,1502;000000000001 Date: 13 June 1982 11:12 pm PDT (Sunday) From: JonL.PA Subject: Re: New FILEPKG command: INITVARS; also RPAQ? etc. In-reply-to: KAPLAN's message of 12 JUN 1982 1522-PDT To: KAPLAN cc: lispcore^, lisp One thing that has to be considered about this feature is how to load "patch" files so that the INITVARS vars *do* get reset; the LISPM people have some trivial little thing to override the non-reSETting nature of a CommonLisp DEFVAR when a "patch" file is loaded, and I don't remember exactly how it works, but I'm sure almost any little trick will do once the problem is faced. Re RPAQ? (which looks equivalent to the MacLisp SETQ-IF-UNBOUND), I've often wanted yet a third version of SETQ which does the setqing only if the value is non-null (but returns the value obtained regardless). See example below. I've also heard lots of other people complain about Lisp's lack of "pronouns" a la the "IT" of lispx; SETQ-if-non-null catches some high percentages of these cases. Lack of "pronouns" means that you often see code like (IF (GET X 'FROBULATE) THEN (PRINT (GET X 'FROBULATE))) where you'd like to write (IF (GET X 'FROBULATE) THEN (PRINT it)) Example use of SETQ-IF-VALUE-NON-NULL: (COND ((SETQ.IFNN WHATTODO (FIND.MORE.WORK)) (CARRYON.ANEW WHATTODO)) ((ASKUSER ...if I should just try "polishing-up" the old some more ...) (POLISHUP.OLD WHATTODO)) (T (GO AROUNDLOOP))) 28-JUN-82 23:00:44-PDT,389;000000000001 Date: 28 JUN 1982 2300-PDT From: KAPLAN.PA Subject: New function: FILECHANGES To: SANELLA, LISP (FILECHANGES filename type) returns the list of changes in the filecreated expression of filename. If type is NIL, this will be an alist whose elements are of the form (type . changes). If type is a filepkgtype, then the value will be just the changes (if any) for that type. 2-JUL-82 23:05:39-PDT,205;000000000001 Date: 2 JUL 1982 2305-PDT From: MASINTER.PA Subject: little known feature in ? handling To: lisp, lispcore^ Just as ?= in typin prints out args of current function, ?^ will attempt to PF it. 4-JUL-82 15:43:27-PDT,5056;000000000001 Date: 4 JUL 1982 1543-PDT From: MASINTER Subject: Summary of Interlisp system changes To: Kaplan, Masinter, Lisp Compatibility with other Interlisp implementations: (SYSTEMTYPE) [Function] Returns one of TOPS20, TENEX, D, JERICHO, VAX. Most implementations have a compile-time optimization for (SELECTQ (SYSTEMTYPE) --) (COMPILEMODE) [Function] Returns one of PDP-10, D, JERICHO, VAX. For EVAL@COMPILE conditionalization. Not the same as SYSTEMTYPE to allow cross-compilation. COMPILE.EXT [Variable] Be sure to reference compiled files via a PACKFILENAME with COMPILE.EXT rather than binding the ".COM" extension into your program. (the FILES file package command is another way of referencing files without explicitly naming compile-extension). e.g., (LOAD (PACKFILENAME 'NAME FOO 'EXTENSION COMPILE.EXT] rather than (LOAD 'FOO.COM] - - - - - - - - - - - BQUOTE: A "BACKQUOTE" facility This is similar to the facility of the same name in other common lisp dialects as follows: (BQUOTE FORM) is like to (QUOTE FORM) except that, in the body of FORM, an element preceded by a "," is evaluated, an element preceded by ",@" is evaluated and spliced in using APPEND and an element preceded by ",." is spliced in, using NCONC. For example, (BQUOTE (A , B ,@ C D)) is equivalent to (CONS (QUOTE A) (CONS B (APPEND C (QUOTE (D]. As a shorthand, (BQUOTE form) can also be typed in as |'FORM. In this case, the comma forms are automatically parsed without following them with spaces, e.g., |'(A B ,C) reads in as (BQUOTE (A B , C)). This format is also recognized on files. Vertical bar was chosen since it normally is treated as a separator in files. Vertical-bar, both in typein and in files, has also been "overloaded" to introdoce HPRINT-format expressions. This facility makes it possible, although not particularly convenient, to type in circular lists and arbitrary other data structures. - - - - - - - - ARRAY types expanded The ARRAY function now accepts any "type" which is legal in datatypes, and coerces it into the next "enclosing" ARRAY type. Since the low-level system only allows arrays of type FIXP, or POINTER, types are coerced. However, this allows programmers to specify more exactly what they intend. - - - - - - - - - - - - - - - - - - - - - - Masterscope expands MACRO definitions When it encounters a macro which has no template and is not otherwise defined or is a NLAMBDA. Masterscope only looks at MACRO properties (and not 10MACRO, DMACRO, etc.) in the theory that the machine-dependent properties are more likely "optimizers". Also, this avoids the problem of Masterscope having to worry about those properties which are really part of the compiler, and which contain calls to internal compiler functions. ------------------------------------------------------------ WITH construct in record package: (WITH . ) [special form] The WITH construct can be used to talk about the fields of a record as if they were variables within a lexical scope. is the name of a record, and is an expression which evaluates to an instance of that record. The expressions in are evaluated in a way where references to variables which are field-names of are implemented via field-fetches and SETQs of those variables are implemented via field-replacement. For example, given (RECORD RECN (FLD1 FLD2)) (SETQ INST (CREATE RECN FLD1 _ 10 FLD2 _ 20)) Then the construct (with RECN INST (SETQ FLD2 (PLUS FLD1 FLD2] is equivalent to (replace FLD2 of INST with (PLUS (fetch FLD1 of INST) (fetch FLD2 of INST] Note that the substitution is lexical: this operates by actually doing a substitution inside . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - New FILEPKG command: INITVARS INITVARS is used for initializing variables--setting their values only when they are currently NOBIND. A variable value defined in an INITVARS command will not clobber the current value. This means that re-loading files to work on some aspect will not change the variable values. The format of an INITVARS command is just like VARS, except that the atomic form does not make sense; all elements are lists (var defaultvalue). INITVARS puts out a RPAQ? command on the file instead of RPAQ. This is a new function that has been added to the system in this release. Hence, INITVARS will not load into older releases. - - - - - - Change to FILE, FILECHANGES properties and FILECREATED expression on files: The file package now keeps better track of what changes are made to a file to disambiguate from changes to items of different file package types. For example, if you change the FOO record, the change will get posted in a (RECORDS -- FOO --) section. Changes to a FOO function will appear in a separate (FNS -- FOO --) section. 4-JUL-82 15:47:27-PDT,795;000000000001 Date: 4 JUL 1982 1547-PDT From: MASINTER Subject: 10MACROS vs MACROS To: Lisp cc: kaplan, masinter The Interlisp-10 compiler now looks at a list of properties for macros; the list, COMPILERMACROPROPS, is initialized to (10MACROS MACROS). This list is distinct from the list MACROPROPS, which are all "potential" macro properties which should be saved by the (MACROS --) file package command. 10MACRO should be used for macros only appropriate for Interlisp-10. (Interlisp-D has DMACRO, Interlisp-Jericho has JMACRO and Interlisp-VAX has VAXMACRO.) MACRO should be used for "implementation independent" macros. System facilities for dealing with macros (e.g., EXPANDMACRO, MACROTRAN, MASTERSCOPE, etc.) have been upgraded to deal with the multiple macro properties. 4-JUL-82 15:49:38-PDT,239;000000000001 Date: 4 JUL 1982 1549-PDT From: MASINTER Subject: lispx feature remoed To: Lisp The facility where, after the user typed a single ? on a line and waited for a while, and then the system responded "beats me" has been removed. 4-JUL-82 15:50:52-PDT,243;000000000001 Date: 4 JUL 1982 1550-PDT From: MASINTER Subject: CLISPIFYENGLISH removed To: lisp The system will no longer attempt to turn Lisp into Clisp-English, even if CLISPIFYENGLSHFLG is T. DWIMIFY of clisp-english is still supported. 4-JUL-82 15:51:49-PDT,204;000000000001 Date: 4 JUL 1982 1551-PDT From: MASINTER Subject: ARRAYORIG To: lisp A dummy "ARRAYORIG" function supplied which in Interlisp-10 returns 1. The ORIG argument as supplied to ARRAY originally. 14-JUL-82 04:39:35-PDT,802;000000000001 Date: 14 JUL 1982 0438-PDT From: MASINTER.PA Subject: CLEARCLISPARRAY To: lisp cc: lispsupport (CLEARCLISPARRAY name - -) [Function] Clears the clisp translation for all forms beginning with "name". (In interpreted definitions only, and only if CLISPARRAY translation feature has not been disabled.) CLEARCLISPARRAY is used as the file package WHENCHANGED function for the type MACROS, so that when a macro is edited or redefined, the "cache" of its macro translation will be discarded. Sometimes, a macro translation can depend on more than merely the body of the macro, and the user may want to call CLEARCLISPARRAY directly. For example, if a computed macro calls a function, and the function is edited, the system currently does not know enough to clear the array. 16-JUL-82 22:52:30-PDT,659;000000000001 Date: 16 JUL 1982 2252-PDT From: KAPLAN.PA Subject: Property list of NIL To: MASINTER, SANELLA, LISP Date: 16 JUL 1982 1555-PDT From: ROACH Subject: PROPERTIES To: KAPLAN The way section 7 of the manual starts, any litatom can have a property list. When you read the fine print, you see that NIL's property list can never be anything but NIL. You can GETPROP and REMPROP from NIL and you can even (SETPROPLIST NIL NIL). Why not be honest and admit that because of the way NIL is implemented, NIL does not have a property list? Kelly Why is it that NIL has a NIL property list. Doesn't seem at all necessary to me. 18-JUL-82 17:06:32-PDT,167;000000000001 Date: 18 JUL 1982 1706-PDT From: KAPLAN Subject: IMPORT is now an option for the FILES command and FILESLOAD function To: LISP It means to call CHECKIMPORTS. 20-JUL-82 22:47:44-PDT,562;000000000001 Date: 20 Jul 1982 22:47 PDT From: Masinter at PARC-MAXC Subject: CLISPIFY of ENGLISH To: Raim.EOS cc: Lisp, VANBUER@USC-ECL, Masinter The ability to CLISPIFY code and produce 'english' has been removed as one of the 'standard' packages in Interlisp. It is now available as a separately loadable file CLISPENG. The source for this file is on [parc-maxc] (although it may move to , please check there). I don't know if I have an Interlisp-D version of a compiled file, but it is simple enough to BCOMPL in a default feature. Larry 8-AUG-82 23:46:57-PDT,213;000000000001 Date: 8 AUG 1982 2345-PDT From: KAPLAN.PA Subject: PRINTDEF, CHANGEFONT now have an additional FILE argument To: LISPCORE^ cc: SANELLA, LISP This required a change to OUTPUTDSP in LLDISPLAY. --Ron 1-NOV-82 12:46:48-PST,729;000000000001 Date: 1-Nov-82 12:46:44 PST (Monday) From: Masinter.PA Subject: to change HELPSYS directories, set HELPSYSDIRLST, not HELPSYSDIRECTORIES To: lisp cc: ------------------------------ Mail-from: Arpanet host SUMEX-AIM rcvd at 27-OCT-82 1055-PDT Date: 27 Oct 1982 1038-PDT From: CSCHMIDT at SUMEX-AIM Subject: To: LispSupport at PARC-MAXC cc: White at SUMEX-AIM, CSchmidt at SUMEX-AIM (HELPSYS) now works with the files resident only in . The trick was to use HELPSYSDIRLST = '( ) rather than setting HELPSYSDIRECTORIES which was prescribed in some ancient piece of mail which I can no longer put my hand on. This works on both TENEX and on TOPS-20 --Christopher ------- 17-NOV-82 14:48:04-PST,260;000000000001 Date: 17-Nov-82 14:48:00 PST (Wednesday) From: Masinter.PA Subject: new function, CONCATLIST To: Sannella cc: Lisp, Masinter.PA (CONCATLIST x):(PACK x) = (CONCAT x):(PACK* x) i.e., CONCATLIST takes a list of things and CONCATs them all. Larry 19-NOV-82 18:11:23-PST,309;000000000001 Date: 19-Nov-82 18:11:04 PST (Friday) From: Masinter.PA Subject: CONS no longer infix To: Lisp cc: , Masinter.PA DWIMIFY will no longer try to treat (A CONS B) as (CONS A B). This wound up having several negative implications in a number of systems. CLISPIFY never put it out, in any case. Larry 3-DEC-82 18:07:50-PST,9539;000000000001 Date: 3-Dec-82 18:03:06 PST (Friday) From: Masinter at PARC-MAXC Subject: new version of Interlisp-10 available To: InterlispSites^ cc: Kaplan@parc-maxc, Masinter@parc-maxc I have not generally been sending out announcements about new releases of Interlisp-10, even though I have been making up new systems rather frequently. The current release is version 154. I normally test it out rather minimally for a week before releasing it to the directory at PARC. I expect a new release about once a month. Almost all releases are bug-fixes or new features. Backward incompatibilities are rare, and are generally documented in MESSAGE.TXT. I will be sending out messages more frequently about new releases. Please send bug reports to LispSupport@parc-maxc, identifying the system you are running in (i.e., Interlisp-10) and MAKESYSDATE. Your organization & location would help me keep track of things, too. In addition to the frequent releases of NETLISP.SAV, there are a large number of packages available, some of which have been more recently updated. Following is a list of packages and their FILEDATEs. If you have packages you wish to add to , please let me know. I send out tapes of Interlisp-10 to those who write me requesting it; I normally include the directory on the tape as well. My current distribution list is quite out of date. If people should be removed or added, please let me know. Here is the current list: ACHENBACH@SUMEX-AIM, Admin.MRC@SU-SCORE, ATP.Tyson@UTEXAS-20, BARRY@CIT-20, barstow@SUMEX-AIM, CC.Clive@UTEXAS-20, cmp.Cohen@UTEXAS-20, CROCKER@ISI, CSD.GENESERETH@SU-SCORE, CSD.Restivo@su-score, CUTLER@USC-ECL, DDYER@ISIB, DHARE@SRI-CSL, GOLDMAN@ISIE, GREEN@KESTREL, GREENFELD@BBND, Hal.Cornell@UDel, Hartley@BBND, Heathman@sri-kl, Hedrick@rutgers, HENRY@RAND-AI, JAMES@USC-ECL, josh@Rutgers, Kaplan.pa, Lewis@BBND, LIPKIS@ISI, MARK@ISI, MEpstein@NLM-MCS, Mike.Rychener@CMU-CS-A, Pepin@USC-ECL, RBATES@ISIC, RDG@SU-AI, REF@SU-AI, Rindfleisch@SUMEX-AIM, RWW@SU-AI, Ryland@SRI-KL, Schoen@SUMEX-AIM, Wescourt@Rand-ai, WESTFOLD@SCI-ICS FILES ON [PARC-MAXC]: file FILECREATED date ALL.;4 6-May-82 16:02:55 ALL.COM;2 6-May-82 16:03:05 ALL.TTY;2 ARITHDECLS.;1 10-APR-79 16:07:09 ARITHDECLS.COM;6 24-SEP-81 21:21:58 ARITHDECLS.TTY;1 ARITHMAC.;2 1-DEC-81 11:51:59 ARITHMAC.COM;1 1-DEC-81 11:53:34 ARITHMAC.TTY;2 CHARCODE.;1 8-FEB-81 21:33:51 CHARCODE.TTY;1 CHAT.;1 26-DEC-81 10:10:11 CHAT.COM;1 26-DEC-81 12:33:24 CIALPHORDER.;1 18-Jan-79 19:55:53 CIALPHORDER.COM;3 24-SEP-81 21:20:43 CIALPHORDER.TTY;1 CIRCLPRINT.COM;5 24-SEP-81 21:33:53 CIRCLPRINT.;1 30-MAY-79 00:25:14 CJSYS.;63 27-NOV-82 12:04:22 CJSYS.COM;70 27-NOV-82 12:04:49 COMMENT.COM;2 6-May-82 16:10:42 COMMENT.LISP;2 6-May-82 16:10:28 COMMENT.TTY;2 COMPILEBANG.COM;9 16-MAR-82 00:00:44 COMPILEBANG.;3 18-JAN-82 17:08:00 COMPILEBANG.TTY;1 COMPILEFORMSLIST.COM;4 23-SEP-81 23:03:29 COMPILEFORMSLIST.;1 17-JAN-79 08:20:41 COMPILEFORMSLIST.TTY;1 COMPMODEREC.;1 16-DEC-81 09:22:16 COMPMODEREC.COM;1 16-DEC-81 09:22:31 COMPMODEREC.TTY;2 COPYFILE.;1 11-Sep-81 13:11:15 COPYFILE.TTY;1 COPYFILE.COM;1 17-JAN-82 00:03:56 COPYRIGHT.COM;9 3-JAN-82 19:34:04 COPYRIGHT.;12 3-JAN-82 19:33:38 COPYRIGHT.TTY;1 CSET.COM;8 30-DEC-81 20:08:55 CSET.;2 30-DEC-81 13:30:06 CSET.TTY;1 DATABASEFNS.COM;72 23-SEP-81 22:39:47 DATABASEFNS.;1 29-APR-81 20:27:35 DATABASEFNS.DCOM;1 DATEFORMAT.;3 2-Jan-79 10:37:32 DATEFORMAT.COM;4 24-SEP-81 21:42:30 DATETIME.COM;8 16-MAR-82 00:00:56 DATETIME.;1 30-AUG-81 23:02:17 DATETIME.TTY;1 DATETIMERECORDS.;1 5-Jul-79 23:01:26 DECL.COM;182 14-SEP-82 22:19:44 DECL.;13 14-SEP-82 22:18:53 DFOR10.;3 27-NOV-82 12:05:13 DFOR10.COM;4 27-NOV-82 12:14:59 DICTIONARY.;1 2-DEC-78 20:58:11 DICTIONARY.TTY;1 DURATION.;23 30-NOV-82 00:35:59 DURATION.COM;8 30-NOV-82 00:57:57 EXEC.;50 13-JUN-82 15:27:46 EXEC.COM;54 13-JUN-82 15:28:33 FILEINDEX.;19 28-May-81 08:37:09 FILEINDEX.COM;17 24-SEP-81 21:36:26 FONTN.;1 24-NOV-81 09:58:58 FONTN.TTY;1 FORKWAITFORINPUT.;3 26-SEP-78 19:34:04 FTP.;29 30-JAN-82 23:28:24 FTP.COM;23 31-JAN-82 19:44:05 FTP.NEWS;1 GLISP.LSP;3 18-FEB-82 08:35:22 GLISP.COM;2 28-Jan-82 10:06:24 GLISP.TXT;3 HASH.;26 18-SEP-79 09:21:49 HASH.COM;29 28-FEB-82 23:01:32 IGNORECHAR.;1 18-MAR-77 17:41:21 IGNORECHAR.TTY;1 IOWAITDAEMON.COM;7 16-MAR-82 00:07:48 IOWAITDAEMON.;1 19-Mar-79 19:42:08 IOWAITDAEMON.TTY;1 LABEL.;6 15-FEB-82 08:29:06 LABEL.TTY;5 LABEL.COM;5 15-FEB-82 08:29:11 LAMBDATRAN.COM;26 18-NOV-81 22:30:33 LAMBDATRAN.;1 18-NOV-79 22:45:22 LAMBDATRAN.DCOM;1 LISPUSERSHELP.;14 26-JUL-78 20:49:25 LISPUSERSHELP.TTY;2 LOADFILES.COM;22 20-NOV-82 13:02:22 LOADFILES.;3 11-AUG-82 09:52:07 LOADFILES.TTY;1 LOADTIMECONSTANT.;6 2-NOV-79 10:40:54 LOADTIMECONSTANT.COM;9 23-SEP-81 22:55:53 LOADTIMECONSTANT.TTY;2 LOSTLISTS.;2 11-Apr-82 09:50:52 LOSTLISTS.COM;2 11-Apr-82 09:51:09 LOSTLISTS.TTY;2 MAIL.;21 15-MAY-79 16:57:59 MAIL.TTY;5 MAIL.COM;23 18-NOV-81 22:36:43 MSDATABASESIZE.;1 7-NOV-77 15:22:31 MSDATABASESIZE.TTY;2 MSG.;39 24-JAN-82 11:19:39 MSG.TTY;3 MSG.COM;35 24-JAN-82 11:20:37 MSHASH.;195 10-APR-82 14:07:45 MSHASH.COM;177 10-APR-82 14:08:06 MSHASH.TTY;3 MSSWAP.;8 1-OCT-80 20:57:30 MSSWAP.COM;11 23-SEP-81 22:40:46 MSSWAP.TTY;3 MULTIFILEINDEX.COM;12 24-SEP-81 21:25:32 MULTIFILEINDEX.;1 4-Jun-81 12:29:40 MULTIFILEINDEX.TTY;1 NET.;36 18-DEC-78 18:19:35 NET.COM;36 24-SEP-81 09:27:00 NOBOX.COM;32 13-MAY-82 22:53:27 NOBOX.;3 13-MAY-82 22:53:14 NOBOX.TTY;1 PASSWORDS.;12 6-FEB-82 20:19:17 PASSWORDS.COM;15 6-FEB-82 20:19:30 PERFORMTRAN.;8 4-SEP-81 21:44:36 PERFORMTRAN.COM;10 18-NOV-81 22:31:41 PERFORMTRAN.TTY;3 PERIODICALLYSYSOUT.;17 19-SEP-78 03:33:59 PERMSTATUS.;7 24-AUG-81 13:50:30 PERMSTATUS.COM;10 18-NOV-81 22:31:14 PRINTL.;21 25-MAY-81 22:51:02 PRINTL.COM;25 29-NOV-81 15:05:10 PROMPTREMINDERS.;29 30-NOV-82 00:19:51 PROMPTREMINDERS.COM;3 30-NOV-82 01:01:05 REMIND.COM;26 4-DEC-81 00:02:03 REMIND.;2 4-DEC-81 00:01:34 REMIND.TTY;1 REMOTECLEANUP.;4 15-JAN-79 12:29:16 REMOTECLEANUP.COM;4 15-JAN-79 12:29:29 REMOTECLEANUP.TTY;3 REMOTECLEANUPSUPPORT.;10 24-JAN-79 09:37:20 SAMEDIR.COM;11 21-NOV-82 00:03:31 SAMEDIR.;2 15-OCT-82 23:31:50 SAMEDIR.TTY;1 SCRATCHLIST.;7 22-AUG-80 21:45:38 SCRATCHLIST.COM;7 24-SEP-81 21:45:08 SEE16.;6 20-FEB-78 16:04:10 SEE16.TTY;2 SHOW.COM;19 24-SEP-81 16:14:31 SHOW.;1 21-AUG-81 12:37:07 SHOW.TTY;1 SIMPLEFNS.COM;15 11-JUL-82 23:42:06 SIMPLEFNS.;5 11-JUL-82 23:41:59 SIMPLIFY.COM;6 16-NOV-81 00:09:27 SIMPLIFY.;1 6-NOV-79 17:25:50 SINGLEFILEINDEX.COM;34 21-NOV-82 00:04:23 SINGLEFILEINDEX.;6 5-NOV-82 16:14:06 SINGLEFILEINDEX.TTY;1 SIZETABLE.;34 5-AUG-79 22:34:51 SIZETABLE.TTY;5 SIZETABLE.COM;39 24-SEP-81 21:46:13 SMARTARG.;23 24-DEC-81 00:39:26 SMARTARG.COM;29 24-DEC-81 16:41:55 SMARTARG.TTY;1 STRINGFNS.;14 13-NOV-82 17:20:48 STRINGFNS.COM;15 13-NOV-82 17:21:07 SWAPHASH.;55 15-JUN-79 22:58:23 SWAPHASH.COM;48 23-SEP-81 22:54:00 SWAPHASH.TTY;7 SYSALL.COM;7 16-NOV-82 12:35:34 SYSALL.LSP;4 16-NOV-82 12:35:13 SYSALL.TXT;1 SYSCOND.;6 15-JAN-81 18:18:00 SYSCOND.COM;6 24-SEP-81 21:44:14 TELL.;1 30-OCT-76 17:01:41 TELL.TTY;1 TELNET.;10 10-Sep-80 21:41:28 TELNET.COM;10 24-SEP-81 12:28:14 TIME.;10 10-OCT-78 15:56:04 TIME.COM;14 10-OCT-78 15:56:22 TIME.TTY;3 TRACEIN.COM;1 4-Sep-81 13:01:45 TRACEIN.;1 4-Sep-81 12:59:55 TRACEIN.TTY;1 TRANSOR.;1 3-JUN-79 09:42:58 TRANSOR.COM;1 23-SEP-81 23:17:23 TSET.;1 3-JUN-79 09:49:57 TTYIN.COM;1 22-Feb-81 00:56:17 TTYPAGE.;1 4-Jan-79 17:08:36 TTYPAGE.TTY;1 TTYPAGELENGTH.;4 2-Jan-79 10:41:40 TXDT.COM;1 27-JUN-78 15:16:51 TXDT.10;1 27-JUN-78 14:26:13 UTIL.;4 16-MAR-81 22:05:39 UTIL.COM;6 24-SEP-81 00:45:16 VMFIND.;5 2-FEB-78 14:02:45 VMFIND.TTY;1 VMFIND.COM;6 24-SEP-81 00:47:00 WHATS.;7 12-MAY-78 00:38:46 WHATS.COM;12 24-SEP-81 00:47:41 WHATS.TTY;1 WHEREIS.;45 27-NOV-82 12:21:42 WHEREIS.COM;51 27-NOV-82 12:22:06 WHOIS.;14 3-JUL-78 03:01:50 WHOIS.COM;17 23-SEP-81 22:59:04 WHOIS.TTY;4 8-DEC-82 15:58:49-PST,640;000000000001 Date: 8-Dec-82 15:56:44 PST (Wednesday) From: Masinter at PARC-MAXC Subject: Re: Interlisp-10, 21 Nov 82 In-reply-to: CSCHMIDT's message of 7 Dec 1982 0916-PST To: CSCHMIDT at SUMEX-AIM cc: Lisp The missing "Hi, Christopher" is a mistake rather than an intended change. The variable GREETDATES initialization was accidentally removed, so that greeting does not take place. I've actually removed some of the greet logic which seemed merely to slow down the initialization without doing anything, so startup should be faster; typing out "Hi, firstname" seems rather trivial, though. Will be back in next release. Larry 26-DEC-82 21:57:30-PST,604;000000000001 Date: 26 DEC 1982 2157-PST From: MASINTER Subject: this now works... To: lisp 102 - ******************************************* Mail-from: Arpanet host USC-ISIB rcvd at 15-SEP-82 0834-PDT Date: 15 Sep 1982 0834-PDT From: GOLDMAN at USC-ISIB Subject: LAMBDATRAN To: KAPLAN at PARC-MAXC cc: MASINTER at PARC-MAXC It would be nice if user-defined lambdas were understood by the macro expander as legitimate "open" macro definitions. I.e., just as a macro definition can be (LAMBDA (X) ...) or (NLAMBDA (X Y Z) ...) it should be possible for it to be (DLAMBDA ...] neil ------- 30-DEC-82 00:15:03-PST,197;000000000001 Date: 30 DEC 1982 0015-PST From: MASINTER Subject: frivolity in greeting reinstated To: lisp System will now once again greet with Hi, Hello, Good Morning, Happy New Year as appropriate. 19-OCT-82 00:15:30-PDT,682;000000000001 Date: 19 OCT 1982 0012-PDT From: JONL.PA Subject: INTEGERLENGTH, and IMOD, EVENP, and ODDP To: LISPCORE^ Ron and I have moved the definition of INTEGERLENGTH (formerly HAULONG) into LLARITH for Interlisp-D and into MACHINEDEPENDENT for Interlisp-10. The functions IMOD, EVENP and ODDP are now in MACHINEINDEPENDENT; there are macro definitions for them which optimize out the case when the modulus is a constant power of two. Someone should re-load the 10 and D systems to include thiese changes. Sooner or later, there should be a general renaming of MOD (in system files) to be IMOD; for now, there is an EXPORTed macro on ADDARITH which does this renaming. 19-OCT-82 00:16:37-PDT,283;000000000001 Date: 19 OCT 1982 0015-PDT From: JONL.PA Subject: POWEROFTWOP To: LISPCORE^ POWEROFTWOP is now in MACHINEINDEPENDENT, since the proper operation of the macros for IMOD etc depend upon it. (a SELECTQ on (SYSTEMTYPE) tries to optimize some of the cases for Interlisp-D). 8-JAN-83 22:24:27-PST,5924;000000000001 Date: 8 JAN 1983 2224-PST From: MASINTER Subject: GLOBALRESOURCE in system To: lisp [The GLOBALRESOURCE file contains mechanisms for handling global resources, ensuring that consumers of such resources don't trash each other. There are two parts to the facility: a file package type, and a set of five macros for paradigmatic usage.] A "global resource" is an association between a name (non-null LITATOM) and a form to be evaluated for producing fresh instances of the resource. Most often, a "resource" is some chunk of data which one may want to use as temporary storage. For example, a list which will be given as second argument to DCHON, or a string used as some kind of character buffer; but in fact it can be any non-null thing returned by the defining form. A global resource, in this context, will be stored in a GLOBALVAR, and users of that resource obtain it through the VAR. The normal use of such a "resource" is to take the instance from the VAR, set the VAR to null, do some associated code, and then "give back" the instance by setting it back into VAR; in the case when VAR found to be null, then a fresh instance is created, which will later be put back into VAR. Thus a function will not clobber the instance of the resource in use at higher function-call level. On the other hand, only the topmost instance will be spared from the ravages of the garbage collector. The expectation is that creating fresh instances for each toplevel usage is "costly" (either in construction time or subsequent reclamation time); a further expectation is that there will be few simultaneous usages of a given resource, so it is better to let these instances be reclaimed, rather than hoarding them for some possible future collision. Defining GLOBALRESOURCES Since GLOBALRESOURCES is a filepkgtype, one may use PUTDEF to define a resource; and the filepkgcom GLOBALRESOURCES should be used to declare them. The file package command takes a list of pairs as its argument, each pair consisting of a resource name and its associated form for making new instances. For example, (GLOBALRESOURCES (\NUMSTR (ALLOCSTRING 38)) (\PNAMESTRING (ALLOCSTRING 100))) is a plausible example. Note well: Because it is necessary to initialize the name of a resource to NIL, the GLOBALRESOURCES command must NOT be embedded in a DONTCOPY. [Presumably, this command will be EXPORTed; if you don't know what EXPORT is, don't worry about it.] Primitives for Using GLOBALRESOURCES The macros RESOURCECONTEXT, GETRESOURCE, FREERESOURCE, and RELEASERESOURCE are the lower-level primitives for utilizing resources. A fifth macro, GLOBALRESOURCE, is restricted to simple lexical scoping, and is the primary facililty to be used by users. RESOURCECONTEXT (RESOURCECONTEXT resource-names . forms) sets up an environment whereby the resources in resource-names may be used inside (the lexical scope of) forms. The resource may be referred to in forms by its name. The user is responsible for explicitly getting and freeing the various resources by specifying GETRESOURCE and FREERESOURCE inside forms. The value of RESOURCECONTEXT is the value of the last form. Will cause an error at macro expansion time if any of the resource names have not been declared. GETRESOURCE (GETRESOURCE resource-name) makes an instance of resource-name available inside the current resource context. A new instance will be created if the resource is currently in use. The resource itself is the value of GETRESOURCE, and the resource may be referred to by resource-name in subsequent statements inside the current resource context (until another GETRESOURCE or FREERESOURCE of that name is invoked). Will cause an error at macro expansion time if not within the lexical scope of a matching RESOURCECONTEXT. FREERESOURCE (FREERESOURCE resource-name) makes the resource available for other uses. Will cause an error at macro expansion time if not within the lexical scope of a matching RESOURCECONTEXT. RELEASERESOURCE (RELEASERESOURCE rname rvalvar . forms) provides a mechanism for releasing a resource during the evaluation of forms but reacquiring the resource after forms have been executed. This need not appear in the lexical scope of a RESOURCECONTEXT, but rvalvar must be the name of a variable whose current value is the result of a GETRESOURCE. The value of rvalvar is "released"--made available for other consumers inside forms, and that variable is then set to another instance (usually the same) of the resource for subsequent use (and freeing). RELEASERESOURCE causes an error at macro expansion time if rname is not a valid resource name. Note: the user must guarantee that the value of rvalvar is in fact a legitimate instance of rname. These 4 macros allow resource management to be intertwined with other complicated control structures, such as in the \SUBREAD function. When the scope of resource usage conforms to simple control scopes, the macro GLOBALRESOURCE may be used. GLOBALRESOURCE (GLOBALRESOURCE resource-names . forms) sets up a RESOURCECONTEXT, then does the appropriate GETRESOURCEs, evaluates forms, and does the appropriate FREERESOURCEs. Its value is the value of the last form. CAUTION: It is up to the user of these facilities to make sure that a resource isn't being used implicitly after it has been freed (e.g. by passing it back as a value) The association between names and forms is maintained on the list GLOBAL.RESOURCES, each element of which is of the form (name instanceform) just as would be put on the file package command. 10-JAN-83 18:43:56-PST,1712;000000000001 Date: 10-Jan-83 17:14:38 PST (Monday) From: Masinter.PA Subject: New release of Interlisp-10 available (version 155) To: InterlispSites^ cc: LispSupport, Masinter.PA Retrieve [parc-maxc]NETLISP.SAV;155. This version contains a number of minor bug fixes & enhancements. Minimal documentation contained in message.txt. Most changes are backward compatible extensions which will be documented in the forthcoming revision to the Interlisp Reference Manual, which is proceeding slowly but surely. A number of packages have been updated since the last message I sent, as well as a few new contributions. Retrieve updated files from [PARC-MAXC]. If you or any of your users have contributions, you can either maintain them at your site (and send a message about it to InterlispSites^.PA@parc-maxc), or send me a message. If you know of sites which are running older versions of Interlisp and wish updates, please have them send me a message. The current list I have includes: Admin.MR@SU-SCORE, Admin.JQJ@su-score, ATP.Tyson@UTEXAS-20, BARRY@CIT-20, barstow@SUMEX-AIM, Borning@Washington, CC.Clive@UTEXAS-20, cmp.Cohen@UTEXAS-20, CROCKER@ISI, CSchmidt@sumex-aim, CSD.GENESERETH@SU-SCORE, csd.novak@Su-Score, CSD.Restivo@su-score, cutler%aerospace@isid, DDYER@ISIB, DHARE@SRI-CSL, GOLDMAN@ISIE, Green@kestrel, greenfeld@bbng, Hal@Cornell, Hartley@BBNG, heathman@sri-kl, Hedrick@rutgers, JAMES@USC-ECL, josh@Rutgers, LIPKIS@ISI, MARK@ISI, MEpstein@NLM-MCS, Mike.Rychener@CMU-CS-A, Pepin@USC-ECL, RBATES@ISIC, RDG@SU-AI, REF@SU-AI, Rindfleisch@SUMEX-AIM, RWW@SU-AI, Ryland@SRI-KL, Schoen@SUMEX-AIM, wescourt@isi, WESTFOLD@kestral, White@sumex-aim 18-FEB-83 12:23:02-PST,2422;000000000001 Date: 18 FEB 83 11:32 PST From: MASINTER at PARC-MAXC Subject: Interlisp-10 bug reports To: Hal at CORNELL cc: LispSupport, Lisp Thank Professor Brown for his revised GCD. I have installed it in Interlisp-10 & it will be in next release. Thank you for your comments on file names. I have made the following patches: a) (SUBSYS) will default to SYSTEM:EXEC.EXE on Tops-20s rather than EXEC.SAV. b) When starting up Lisp, it will look first for BOOT.SAV and then LISP:BOOT.SAV. This will solve the problem of requiring a directory on each structure. We and several other sites still run Tenex, and the advantages of having the same files work for Tenex and Tops-20 outweigh the cost of the additional complexity of supporting both (Tenex doesn't allow redefinition of devices like LISP:). If you find other similar problems, please let me know. Yes, we know about HELPSYS. When the new manual is complete, we will begin work on a revised, machine independent and more intelligent HELPSYS. Making SYSOUT handle disk overflow gracefully is tricky -- I wonder if ANY of the Interlisp file I/O routines handle storage allocation correctly. In Tenex, you only get an error return from writing data at OPENF time. I think the Tops-20 behavior is reasonable, but I doubt that any of the I/O system was written with the awareness of storage errors. LISTFILES assumes that the command for printing a file is "LIST ...". The SINGLEFILEINDEX package formats the file and sends it directly to LPT:. There are additional parameters in LISTFILES; it may be necessary to advise or redefine some of these to get it right. If Interlisp is in conflict with Tops-20 "standards" then let me know what it SHOULD say and I will incorporate the change. Re: finding out what you have defined so far, the (FILES?) function prints that information and also queries user about where things should go. (Note that (CLEANUP) starts out by calling (FILES?).) The code for DISPLAYTERMP (in the file MACHINEDEPENDENT) says that something is DISPLAYTERMP if its terminal type is 10. This is clearly wrong. Some of the code for figuring out terminal types and behaving more appropriately is in the EXEC package. Again, I would appreciate your inputs on what the appropriate behavior for DISPLAYTERMP should be for "standard" Tops-20s. Larry 23-FEB-83 22:21:51-PST,560;000000000001 Date: 23 FEB 83 22:20 PST From: MASINTER at PARC-MAXC Subject: BREAKIN, TRACEIN To: DonC at ISIF cc: Masinter, Lisp I fixed BREAKIN. What happened was that the editor changed to allow the token used by MBD to be changed (it is the variable EDITEMBEDTOKEN, initially *). I had to change BREAKIN because it generated an MBD edit macro. When I changed BREAKIN I made a mistake. Fix will be in next loadup. I didn't install your advice to BREAKIN; I am wary of making BREAKIN(FOO) cause FOO to be unadvised, etc. Can you be more convincing? 23-FEB-83 23:07:07-PST,822;000000000001 Date: 23 FEB 83 23:06 PST From: MASINTER at PARC-MAXC Subject: Interlisp-10 changes To: hal at CORNELL, DDyer at ISIB cc: Masinter, Lisp I have changed Interlisp-10 to look for BOOT.SAV and INIT.LISP on INTERLISP: instead of when running on a Tops-20. This will be in next release. Along with the changes to make SUBSYS(EXEC) go to SYSTEM:EXEC.EXE and SUBSYS(xxx) go to SYS:xxx.EXE, this eliminates most of the built-in names. It is still necessary to set up HELPSYSDIRLST etc. in the site init file. Note that elements of a "directories" list can be logical names, e.g., it is ok to set up LISPUSERSDIRECTORIES to be (INTERLISP:). I have not installed any change to DISPLAYTERMP pending better understanding of the situation. Why should the system know which terminal is a VT100? Larry 23-FEB-83 23:39:34-PST,738;000000000001 Date: 23 FEB 83 23:38 PST From: MASINTER at PARC-MAXC Subject: DISPLAYTERMP, SYSTEMTERMTYPES To: hal at CORNELL, DDyer at ISIB cc: Masinter, Lisp I should have read your messages more carefully. On second reading, things seemed clear. I have installed the following changes: SYSTEMTERMTYPES is initialized as Hal suggested, something on the order of ((12 . VT52)(13 . VT100)). [I don't have the code here. It was whatever numbers Hal mentioned in his message.] DISPLAYTERMP is now defined to take the terminal-type-number and look it up on SYSTEMTERMTYPES, returning NIL if no entry found otherwise CDR of the entry. I retained the obscure feature that if CDR of the ALIST entry is LISTP it is EVAL'd. Larry 24-FEB-83 11:28:49-PST,645;000000000001 Received: from USC-ISIB.ARPA by PARC-MAXC.ARPA; 24 FEB 83 11:27:34 PST Date: 24 Feb 83 11:25 PST Subject: Re: DISPLAYTERMP, SYSTEMTERMTYPES From: Dave Dyer To: MASINTER.PA, hal@CORNELL.ARPA, DDyer@USC-ISIB.ARPA cc: Lisp.PA In-Reply-To: Your message of 23 FEB 83 23:38 PST The actual situation determining how to do an erase is much more complex than "ERASECHAR ^H". To really do the job, one has to consider a lot of oddities of the terminal and of interlisp's defined rubout mechanism. If one were to allow anything like ERASECHAR ^H on SYSTEMTERMTYPES, it would be the entire termcap string. ------- 24-FEB-83 11:42:20-PST,1011;000000000001 Received: from USC-ISIB.ARPA by PARC-MAXC.ARPA; 24 FEB 83 11:41:32 PST Date: 24 Feb 83 11:31 PST Subject: Re: DISPLAYTERMP, SYSTEMTERMTYPES From: Dave Dyer To: MASINTER.PA In-Reply-To: Your message of 23 FEB 83 23:38 PST Remailed-Date: 24 Feb 1983 1134-PST Remailed-From: Dave Dyer Remailed-To: hal@CORNELL, lisp.pa@PARC-MAXC See the code in (PREPAREDELETENEXT) in SCREENOP for the complications involved in setting erase to work correctly. One thing that is definitely incorrect in the Interlisp paradigm is that the erase sequences must use the same terminal table as the reader - hence, strangeness to make sure the characters needed to do an erase are all echo'd as "REAL". Also not considered is that ^H and ^A and compete for the privilege of being the primary erase key, and setting the various echo and interrupt states of these keys if you want to change the system's default involves a lot of screwing around. ------- 24-FEB-83 11:52:43-PST,1515;000000000001 Received: from CORNELL.ARPA by PARC-MAXC.ARPA; 24 FEB 83 11:52:23 PST Date: 24 Feb 83 14:50:08 EST From: hal@Cornell.ARPA To: DDyer@USC-ISIB.ARPA, MASINTER.PA Subject: Re: DISPLAYTERMP, SYSTEMTERMTYPES Cc: Lisp.PA, hal@Cornell.ARPA For the time being, I think it would be best to just make minimal changes to Interlisp-10 so that DISPLAYTERMP works, but do this in such a way that it blends nicely with SCREENOP. Adding more complex terminal support to Interlisp-10 shouldn't be done unless it is done in a very general way, like Termcap or SCREENOP. Improved handling of character and line delete should probably be done in a package for now, rather than tinkering with Interlisp-10 directly. Perhaps SCREENOP could include a function that sets up correct character/line delete echoing depending on the termcap information for the terminal type (actually, I think this is in there already). Maybe it would be a good idea to put together a small subset of SCREENOP that can fix up the character/line delete and make that package available on for those who don't want the full generality of SCREENOP, or who don't have the space for it in their program. One final thought (for Dyer in particular): Does the Unix license agreement allow us to copy the Termcap database and include it with Interlisp-10? This might not be a problem, since the Termcap stuff was done at Berkley, but it would be a good idea to check before giving it wide distribution. Hal 24-FEB-83 14:04:42-PST,576;000000000001 Received: from USC-ISIB.ARPA by PARC-MAXC.ARPA; 24 FEB 83 14:03:21 PST Date: 24 Feb 83 14:01 PST Subject: Re: DISPLAYTERMP, SYSTEMTERMTYPES From: Dave Dyer To: hal@CORNELL.ARPA, DDyer@USC-ISIB.ARPA, MASINTER.PA cc: Lisp.PA In-Reply-To: Your message of 24 Feb 1983 14:50:08-EST I don't think there are any license problems with SCREENOP.TC, since it is significantly reprocessed from the original /etc/termcap and since it involves descriptions of terminals rather than the code berkely implemented to interpret the descriptions. ------- 17-APR-83 15:30:07-PST,925;000000000001 Date: 17 APR 83 14:56 PST From: MASINTER.PA@PARC-MAXC.ARPA Subject: Version 157 of Interlisp-10 available To: InterlispSites^.PA@PARC-MAXC.ARPA Version 157 of Interlisp-10 has been in use at a number of sites for a while now, with no reported problems. Among other changes, this version has the following change for Tops-20 sites: When running under TOPS-20, Lisp will look for BOOT.SAV and INIT.LISP on logical device INTERLISP: and then on . This means that you can use lisp while connected to other structures which don't have a directory. It is still necessary to set up LISPUSERSDIRECTORIES and HELPSYSDIRLST and DIRECTORIES to point at the appropriate places; it is acceptable to set them all to be (INTERLISP:). Some more changes are noted in MESSAGE.TXT. Questions, problems, complaints, reminders of bugs that are STILL not fixed, etc. ---> LispSupport@PARC-MAXC. 11-MAY-83 15:36:27-PDT,368;000000000001 Date: 11 May 1983 3:37 pm PDT (Wednesday) From: MASINTER.PA Subject: Re: MASTERSCOPE In-reply-to: Your message of 2 May 83 10:25 EDT To: Jeffrey Shulman cc: Lisp, masinter Masterscope looks at the value of MSHELPFILE as the name of the file used by the HELP command. This should be one of the variables set in the system INIT file. 18-MAY-83 06:54:53-PDT,664;000000000001 Date: 18 May 83 06:52:40 PDT (Wednesday) From: Masinter.PA Subject: Interlisp-10 problem with SETCLINK To: Lewis@BBNG cc: Yonke, Masinter, Lisp ---------------------------------------------------------------- Received: from USC-ISIB.ARPA by PARC-MAXC.ARPA; 5 MAY 83 01:30:21 PDT Date: 5 May 83 01:27 PDT Subject: Interlisp-10 From: Dave Dyer To: masinter.PA For the record (thought I doubt anyone cares) Interlisp-10 has trouble doing SETCLINK of block compiled functions, even when the functions in question appear on RETFNS in the block declaration. ---------------------------------------------------------------- 20-Jul-83 14:03:32-PDT,557;000000000011 Return-Path: MASINTER.PA@PARC-MAXC.ARPA Received: from PARC-MAXC.ARPA by SUMEX-AIM.ARPA with TCP; Wed 20 Jul 83 14:03:29-PDT Date: 20 JUL 83 14:02 PDT From: MASINTER.PA@PARC-MAXC.ARPA Subject: ARRAY origin in Interlisp-10 To: Schmidt@sumex-aim.ARPA cc: LispSupport.PA@PARC-MAXC.ARPA Sorry, this is going to remain a documented non-feature of Interlisp-10. I've actually spent a good deal of time thinking about how I could fake it, but it doesn't seem doable without more drastic reconfiguration of Interlisp-10 than I want to contemplate. 3-JUN-83 23:45:06-PDT,10474;000000000001 Date: 3 JUN 83 23:44 PDT From: MASINTER.PA To: lisp cc: masinter Functions and I.S.OPRS for "Time-Limited" Evaluations File: Duration.tty Revised: Feb 26, 1983, by JonL White Often one needs to loop over some code, stopping when a certain interval of time has passed. A primitive notion of an "alarmclock", which wakes up and signals the looping process to stop would be quite useful; however, this would presume some pre-emptive scheduling of processes, and thus might not be as generally useful in Interlisp-D as the following facilities. Three new functions are provided -- SETUPTIMER, SETUPTIMER.DATE, and TIMEREXPRED? -- a macro TIMERP, and several new CLISP words which effectively function as I.S.OPRS -- "during", "forDuration", "untilDate", "timerUnits", "usingTimer", and "resourceName" (reasonable variations on upper/lower case are permissible). As of 2/26/83, these facilites have been tested out on the D machines, and on Interlisp-10; they are expected to work on Interlisp/VAX. TIMERs and Timer Units A new object called a TIMER is introduced, which encodes a future clock time at which a signal is desired Actually, it should come as no surprise that, for now, a TIMER is merely a FIXP; but it's possible that, in the future, some more structure may be involved. At any rate, the macro TIMERP provides an adequate test for 'being a timer'. A TIMER is constructed by the functions SETUPTIMER and SETUPTIMER.DATE, and is created with a basic clock "unit" selected from among {SECONDS, MILLISECONDS, or TICKS}. The first two timer units provide a machine/system independent interface, and the latter provides access to the "real", basic strobe unit of the machine's clock on which the program is running. [The folllowing are acceptable abbreviations for the time unit names: SECS for SECONDS; MS and MILLISECS for MILLISECONDS; and TICS for TICKS]. As of now, the TICKS units for Interlisp-10 and Interlisp/VAX are milliseconds, but for the D series machines it is: Dorado and Dolphin have about 0.5952 microseconds per tick (1680 ticks per millisecond); Dandelion has about 28.78 microseconds per tick (34.746 ticks per millisecond). The advantage of using TICKS rather than one of the uniform interfaces is primarily speed; e.g., on a Dolphin, it may take as much as 400 microseconds to interface the milliseconds clock (a software facility actually based over the real clock), whereas reading the real clock itself should take less than about ten microseconds. Of course, the disadvantge of the TICKS unit is its short roll-over interval -- about 20 minutes, compared to about two weeks for the MILLISECONDS unit -- and also the dependency on particular machine parameters. SETUPTIMER, SETUPTIMER.DATE, and TIMEREXPRED? (SETUPTIMER ) SETUPTIMER has one required and three optional arguments. The first argument must be a integer specifying how long an interval is desired, and the third argument (defaults to MILLISECONDS) specifies the units of measure for the interval. The time-interval is added to the current internal clock time, measured in the specified units, and then stored in the timer specified by (NIL defaults to allocate new storage) [of course, since "timers" are currently fixp values, then Interlisp/VAX (and often Interlisp-10) do not actually allocate new cells in order to cons up a new timer; thus this argument is often moot and would be ignored]. The fourth argument, specifies the units in which the second argument is expressed; NIL defaults to mean same as the timer-units (obtained from the third argument). The result is a TIMER, which may be tested with TIMEREXPRED? function. (SETUPTIMER.DATE ) The first argument to SETUPTIMER.DATE is a Date/Time string such as would be returned by GDATE (or such as would be input to IDATE); a timer is constructed, with timer units in SECONDS, to "go off" at that specified date and time. The second argument is used the same as in the SETUPTIMER function. [Implementation note 2/26/83: Both SETUPTIMER and SETUPTIMER.DATE have compiler macro properties which cause them to "open-code" into a call on the appropriate clock function. (CLOCK 0) and (SETUPTIMER 0) do the same thing; similarly, (SETUPTIMER 0 <...> 'TICKS) provides a way to read the hardware clock. SETUPTIMER.DATE operates by first subtracting (IDATE) from (IDATE ), so there may be some consing involved, even if the argument is provided.] (TIMEREXPIRED? ) When a TIMER's "time has come", then TIMEREXPIRED? will be non-NIL on it; generally this means comparing the TIMER's stored value with the current value of the corresponding clock. However, it is permissible to provide the clock value directly, as the second argument. This is useful when one has two different timers in hand and wishes to see which one will "go off" sooner; if X and Y are TIMERs, then (TIMEREXPIRED? X Y) means that X is set for a **later** time than Y. Of course, from the Implementation note on SETUPTIMER, one can see that X and Y could also just be the output of any of the clock functions, and TIMEREXPIRED? would be somewhat equivalent to GREATERP for them. [Implementation note 2/26/83: It must be noted that timer storage is not open-ended -- on the D machines it is 32 bits, on the PDP10 is is 36 bits, and on the VAX it is 31 bits. Thus, (TIMEREXPIRED? X Y), where Y is an integer and N is the number of bits of storage, is really (ILESSP (MOD (IDIFFERENCE Y X) 2^N) 2^) The upshot of this is that no "edge-effects" will be noticed due to the finite nature of the storage box, but the effective "roll-over" period will be 2^ units rather than 2^N.] New I.S.OPRS In this paragraph, each new CLISP word is introduced in a "canonical" form, with equivalent canonical spelling variations enclosed in parentheses; in general, the all-caps version, or the all-lower-case version, or the "capitalization of the second syllable" version is acceptable too. The basic CLISP word functioning like an I.S.OPRS is "forDuration" (and "during"), which specifies an interval of time during which the statement will be executed; also, "untilDate" specifies an interval by specifying its endpoint. Since a call to SETUPTIMER is implicit in this facililty, one may specify which clock to use with the CLISP word "timerUnits"; one may wish to provide an "empty" timer to use as storage for the timer, so that no consing will be done when going around the loop, hence the word "usingTimer" will specify this storage. The word "resourceName" will specify a GLOBALRESOURCES (q.v.) name to be used as the timer storage (a "resourceName" of T will be converted to a common internal name used by this package). One may think of these CLISP words as being equivalent to the "FOR" words (such as "for", "find", etc), except that if any of them are used, then one of them must be the first item in the list. I.e., (during LONGTIME for I to 500 do . . . ) (usingTimer \Temp.box find C suchthat (WINNER C) forDuration 5HOURS) are acceptable, but (for I to 500 during LONGTIME do . . . ) is not. It is likely that the implementation of these I.S.OPRS will be extended someday so that this restriction will go away. Example usages: (during 6MONTHS timerUnits 'SECS until (TENANT-VACATED? HouseHolder) do (DISMISS ) (HARRASS HouseHolder) finally (if (NOT (TENANT-VACATED? HouseHolder)) then (EVICT-TENANT HouseHolder))) This humorous little example shows that how is is possible to have two termination condition: 1) when the time interval of MONTHS has elapsed, or 2) when the predicate (TENANT-VACATED? HouseHolder) becomes true. As with the other I.S.OPRS formats, the "finally" clause is executed regardless of which termination condition caused it. Note also that SECS is an acceptable spelling of SECONDS; also MS and MILLISECS are acceptable for MILLISECONDS. [Since the millisecond clock will "roll over" about every two weeks, "6MONTHS" wouldn't be an appropriate interval if the timer units were the default case, namely MILLISECONDS.] (do (forDuration (CONSTANT (ITIMES 10 24 60 60 1000)) do (CARRY.ON.AS.USUAL) finally (PROMPTPRINT "Have you had your 10-day check-up?"))) This infinite loop breaks out with a warning message every 10 days. One could still question whether the millisecond clock, which is used by default, is appropriate for this loop. (SETQ \RandomTimer (SETUPTIMER 0)) (untilDate "31-DEC-83 23:59:59" usingTimer \RandomTimer do (if (WINNING?) then (RETURN)) finally (ERROR "You've been losing this whole year!")) Here we see a usage of an explicit date for the time interval; also, the user has squirreled away some storage (as the value of \RandomTimer) for use by the call to SETUPTIMER in this loop. (FORDURATION SOMEINTERVAL resourcename '\INNERLOOPBOX timerunits 'TICKS do (CRITICAL.INNER.LOOP)) Here we incidentally see that the CLISP words in all lower case, or in all upper case, are acceptable. The facililty of critical interest, however, is "resourcename"; for this loop, the user doesn't want any consing to take place, so \INNERLOOPBOX will be defined as a GLOBALRESOURCES which "caches" a timer cell (if it isn't already so defined), and wraps the entire statement in a GLOBALRESOURCE call. Furthermore, he has specified a time unit of TICkS, for lower overhead in this critical inner loop. In fact specifying a resourcename of "T" would have been the same as specifying it to be "\ForDurationOfBox" -- just a simpler way to specify that a globalresource is wanted, but without having to think up a name. 11-JUL-83 16:37:18-PDT,324;000000000001 Date: 11 Jul 83 16:07:26 PDT (Monday) From: Masinter.PA Subject: change to EDITEMBEDTOKEN To: LispCore^ cc: Lisp, Masinter To be quite specific: in this and subsequent loadups, EDITEMBEDTOKEN is &. Sites that don't like it can change it back or to something else. This affects MBD commands and the like. Larry 4-AUG-83 23:55:16-PDT,252;000000000001 Date: 4 AUG 83 23:55 PDT From: MASINTER.PA Subject: infinite loop in Masterscope fixed To: lisp cc: shulman@rutgers Caused when doing a SHOW PATHS where A calls B and the combination of the names of A and B didn't fit on a line. Larry 12-AUG-83 00:26:17-PDT,412;000000000001 Date: 12 AUG 83 00:24 PDT From: MASINTER.PA Subject: FLG and RDTBL args for MKSTRING and BKSYSBUF To: Lisp, LispSupport cc: LispDiscussion^ I have fixed Interlisp-10 also to allow FLG and RDTBL arguments for MKSTRING and BKSYSBUF. This is a slightly incompatible change for BKSYSBUF: it used to be that BKSYSBUF((A)) didn't do ANYTHING and now it actually bksysbuf's the PRIN1-pname of (A). 31-AUG-83 17:08:01-PDT,282;000000000001 Date: 31 AUG 83 17:06 PDT From: MASINTER.PA Subject: HASDEF To: Koomen.wbst cc: LispSupport I corrected what I thought was a bug in the definition of HASDEF: HASDEF now means "would GETDEF cause an error". Thus HASDEF(CAR) is NIL if GETDEF(CAR) would fail. Larry 27-SEP-83 14:11:27-PDT,540;000000000001 Date: 27 Sep 83 14:08:51 PDT (Tuesday) From: masinter.pa Subject: New Version of Interlisp-10 To: InterlispSites^ There is a new version of Interlisp-10 available on [parc-maxc], version 159. Please see the latter messages in MESSAGE.TXT for user visible changes. You will be pleased to know that the new Interlisp Reference Manual has gone to press. There is not yet a firm date as to when copies will be available, but an announcement will be made to this distribution list when that info is known. Larry