01/07/85 Multics Maclisp Differences This info segment describes the differences betwen Multics Maclisp and PDP-10 (ITS/TOPS-20) MACLISP, as defined in "The Revised Maclisp Manual", MIT/LCS/TR-295, dated May 21, 1983. The topics in this info segment are in the order that they appear in this manual, and are also accompanied by the page numbers on which the topic will be found. Function and variable names in this segment will be in uppercase for consistency with the manual and also to make them stand out; note that in Multics Maclisp all the builtin functions are in lowercase and case is significant. This info segment only lists missing features or differences in operation. Multics-only features are not listed. Unless noted otherwise, if this info segment specifies that a Status option does not exist then the corresponding SStatus option also does not exist. A number of functions which are in the default PDP-10 Maclisp environment are only available on Multics after loading a file from the extension library. These files are available in >ldd>include as Lisp include files. If (%include library) is used then all the extensions will be available, or individual library files may be loaded using (%include NAME); functions in the library will be noted here in entries of the form: FUNCs (p.N): ext - NAME INTRODUCTION: Getting started (p. 2): On Multics, Lisp may be entered by the "lisp" command. Init files (p. 2): On Multics, the init file is [hd]>start_up.lisp. No COMMENT statement is necessary. ALLOC? (p.3): Multics Maclisp does not ask the "ALLOC?" question. An initial COMMENT statement in the init file is ignored. JCL (p. 3): The first argument to the "lisp" command is the pathname of a saved environment, not an init file. Datatypes: TYPEP (p.5): The possible values of TYPEP are LIST, SYMBOL, FIXNUM, FLONUM, BIGNUM, ARRAY, STRING, RANDOM. This is the same as PDP-10 Maclisp, except for the lack of hunks and the addition of STRING. The Evaluator: PSETQ (p.9): ext - other_other LEXPR-FUNCALL (p.15): ext - other_other The Read-Eval-Print Loop: *BREAK (p.19): does not exist. $P variable (p.20): does not exist. The break loop always looks for the symbol $P. (STATUS BREAKLEVEL) (p.21): does not exist. READ variable (p.21): does not exist. The standard READ function is always used by the Read-Eval-Print loop. *-READ-EVAL-PRINT, etc. (p.22,23): do not exist. Control Forms: CASEQ, SELECTQ (p.26,27): ext - other_other LET with destructuring (p.31): ext - destructuring_let. The default LET special form only allows symbols in the CARs of the initialization forms. LET*, DESETQ (p.32): ext - destructuring_let LOOP (p.39): ext - loop *CATCH, *THROW (p.47): ext - other_other CATCH-BARRIER, CATCHALL (p.51): do not exist. SETF: SETF, DEFSETF (p.54-56): ext - setf PUSH, POP (p.57): ext - other_other Definitional Forms: DEFUN &keyword support (p.65,66): ext - defun. Other DEFUN features are available in the default environment. DEFVAR, DEFCONST (p.69): ext - other_other. Note that the Emacs extension include file "e-macros" defines an incompatible version of DEFVAR. If this is already defined then loading the library will not redefine it. DEFMACRO, MACRO (p.70,71): ext - defmacro DEFMACRO-DISPLACE, DEFSIMPLEMAC (p.72): do not exist. DEFMACRO-CHECK-ARGS (p.72): does not exist. DEFMACRO acts as if it were T. DEFMACRO-DISPLACE-CALL (p.72): does not exist. Multics DEFMACRO always generates displacing macros, so it acts as if it were T. DEFMACRO-FOR-COMPILING (p.72): does not exist. The MACROS compiler flag is obeyed, although the defmacro include file sets it to T when it is first loaded. MACRO-EXPANSION-USE (p.73): does not exist. Multics DEFMACRO always generates displacing macros, so it acts as if this were set to DISPLACE. MACROEXPAND, MACROEXPAND-1, MACROEXPAND-1* (p.73): do not exist. MACROEXPANDED (p.74): does not exist. DEFUN& (p.74): ext - defun DEFUN&-CHECK-ARGS (p.74): does not exist. DEFUN& acts as if it were T. DEFSTRUCT (p.76): ext - defstruct List Structure: MAKE-LIST (p.91): ext - runtime LISTP (p.92): ext - other_other. This is the Lisp Machine definition, not the Maclisp definition. It is equivalent to (not (atom x)). PAIRP (p.92): does not exist. SUBLIS property (p.108): not affected. Portable programs should not use it, though. CAR/CDR Control Variables: do not exist. CAR and CDR check for a fixnum/flonum argument. For other argument types it assumes it is a list and may fault doing the operation. For symbols, the CAR is the value and the CDR is the property list, but this should not be depended upon. Numbers: FIXNUMP (p.113): ext - other_other (STATUS RANDOM) (p.123): does not exist. ZFUZZ (p.123): does not exist, so effectively 0.0. Symbol Manipulation PNGET, PNPUT (p.131): do not exist. SYMBOLCONC (p.134): ext - runtime Array Creation/Manipulation: LISTARRAY (p.144): Takes an optional second argument, N, which is the maximum length of the list which should be returned. If the array has more than this number of elements, only the first N elements will be returned. ARRAY-/#-DIMS, ARRAY-DIMENSION-N, ARRAY-TYPE (p.145): do not exist. DUMPARRAYS (p.145): Only types FIXNUM and FLONUM are handled. If the filespec is (pdp-10 FILESPEC) then the file is written in PDP-10 dumparrays format. LOADARRAYS (p.145): Only FIXNUM and FLONUM arrays are handled. Hunks (p.146-8): do not exist. Strings (p.149): Multics strings are first class data types. There are no "real" or "fake" strings. +INTERNAL-STRING-MARKER property (p.149): does not exist. Bit Manipulation: LOGAND, etc., BIT-TEST, etc. (p.151): ext - other_other ASH (p.152): if "runtime" included then this turns into BIGNUM-ASH. DEPOSIT-BYTE, LOAD-BYTE (p.155): do not exist. LDB, DPB (p.155): ext - runtime *DEPOSIT-BYTE, *LOAD-BYTE, *DPB, *LDB (p.156): do not exist. New-I/O: SFA concept (p.157): does not exist. T concept (p.157): since TYI/TYO variables do not exist, T is always equivalent to user_input/user_output as appropriate. TYI variable (p.160): does not exist. Input functions act as if it were equivalent to user_input I/O switch. TTYSCAN-STRINGERS/| (p.160): does not exist. TYO variable (p.161): does not exist. Output functions act as if it were equivalent to user_output I/O switch. OUTFILES (p.161): defaults to NIL. MSGFILES (p.161): does not exist. T is always used for messages. ECHOFILES (p.161): does not exist. There is no echoing facility. *NOPOINT function (p.164): does not exist. CURSORPOS (p.164,165): only works in the video system. Output affects the specified window, so all references to the screen should be replaced by window. The P and Q functions are not supported. There is currently a bug where the [ (insert line) and \ (delete line) functions are interchanged. OPEN (p.166): does not work properly unless you specify all of the direction, data mode, device type, and buffering mode. The ECHO and CLA modes are not supported. CNAMEF (p.167): does not exist. CLEAR-OUTPUT (p.167): does not exist. FORMAT (p.169): ext - format. To prevent compiler warnings, put (declare (*lexpr format)) in your source files that use FORMAT. ?FORMAT (p.179): ext - format Y-OR-N-P, YES-OR-NO-P (p.182): do not exist. UNTYI (p.183): does not exist. +TYO (p.186): does not exist. RUBOUT (p.186): does not exist. (SSTATUS LINMODE) (p.188): not settable. (STATUS LINMODE) is OK. TTYSCAN, TTYIFA, TTYOFA, TTYCONS, FASLNAMELIST, FASLOAD, TTYTYPE, OSPEED, TTYSIZE, TTY (p.189-192): do not exist. SPRIN1 (p.193): does not exist. GRIND-MACROEXPANDED (p.193): does not exist. CGOL, CGOLREAD (p.194): does not exist. SFAs (p.194-202): do not exist. Old-I/O: UREAD, UWRITE variables (p.203): unbound until the old I/O package is autoloaded. Files: FASLOAD variable (p.211): does not exist. INCLUDE (p.211): does not exist. %INCLUDE is similar, but uses the translator search path if not given a pathname. DEFAULTF variable (p.212): does not exist. LENGTHF, FASLP (p.213): do not exist. PROBEF, RENAMEF (p.214): do not exist. MAPPALLFILES, DIRECTORY, MAPDIRECTORY (p.215,216): do not exist. Syntax: # reader macro (p.218-223): ext - sharpsign. However, #| and #% are not defined. SETSYNTAX-SHARP-MACRO (p.227): does not exist. There is a SHARPSIGN-SET-SYNTAX which is equivalent except that it does not take the optional fourth argument. ext - sharpsign. /#-MACRO-DATALIST (p.228): Called SHARPSIGN-DATA-LIST. ext - sharpsign. /#-SYMBOLIC-CHARACTERS-TABLE (p.228): Called SHARPSIGN-CHARACTER-ALIST. ext- sharpsign. Error Handlers: CERROR (p.231): does not exist. FERROR (p.231): ext - format Error Channels (p.233-235): The default value of the error channel variables are *INTERNAL-xxx-BREAK, where xxx is the name of the variable. These symbols are not interned, though. IO-LOSSAGE, MACHINE-ERROR variable (p.234,235): do not exist. ERROR-BREAK-ENVIRONMENT (p.236): does not exist. AUTOLOAD variable (p.237): does not exist. Debugging: BAKLIST (p.239): does not exist. FRETRY (p.240): does not exist. EVALHOOK (p.241): does not take the optional third argument. SUBR (p.245): does not exist. EVAL variable (p.247): does not exist. (STATUS PUNT) (p.247): does not exist. It is effectively NIL. Declarations and the Compiler: COMPILER-STATE (p.253): is not bound in the interpreter. FIXNUM-IDENTITY, FLONUM-IDENTITY (p.253): do not exist. HERALD (p.254): does not exist. SQUID (p.255): does not exist. System Programming: (STATUS TTYINT) (p.257): does not exist. It may be possible to get some of its functionality using (STATUS INTERRUPT). ALARMCLOCK function and variable (p.259): does exist, although the manual says it is ITS only. (STATUS NOINTERRUPTS) (p.260): does not exist. WITHOUT-INTERRUPTS (p.260); ext - other_other STATUS, SSTATUS (p.261): only the first four characters of the key argument are significant, as opposed to five on PDP-10's. (STATUS SITE), (STATUS FILESYSTEM-TYPE), (STATUS OPSYSTEM-TYPE), (STATUS XJNAME), (STATUS SUBSYSTEM), (STATUS JNAME), (STATUS JNUMBER), (STATUS USERID), (STATUS XUNAME), (STATUS HOMEDIR), (STATUS HSNAME) (p.263-265): do not exist. (STATUS UDIR) (p.265): returns the default working dir as a symbol. SUSPEND (p.267): exists, even though the manual says PDP-10 Only. It takes no arguments, and just pushes to a new Multics command level. VALRET (p.269): does not exist. CLINE will execute a command line. GETDDTSYM, PUTDDTSYM, LH/|, EXAMINE, DEPOSIT, VALUE-CELL-LOCATION (p.270): do not exist. (STATUS SXHASH) (p.272): does not exist. GCPROTECT (p.274): does not exist. GCTWA variable (p.274): does not exist. (STATUS SYSTEM sym) (p.275): The list returned never contains the symbol SYMBOL, MACRO, or AUTOLOAD. RECLAIM (p.276): does not exist. GC-OVERFLOW, GCPROTECT (p.276): do not exist. (STATUS GCMAX), (STATUS GCMIN), (STATUS GCSIZE), (STATUS ARRAY), (STATUS BPSH), (STATUS BPSL), (STATUS MEMFREE), (STATUS FLUSH), (STATUS LOSEF), (STATUS PDLNAMES), (STATUS FXPDL), (STATUS FLPDL), (STATUS PDL), (STATUS SPDL), (STATUS SEGLOG), (STATUS PURSIZE), (STATUS PURSPCNAMES) (p.277-280): do not exist. (STATUS PAGING) (p.278): the first elemtn of the result is always 0, as there is no longer a paging device (bulk store). BPORG, BPEND, PAGEBPORG, GETSP (p.281): do not exist. NORET (p.281): The variable does not exist (it used to be a Status option). The function sets the internal NORET flag, but nothing uses it. Pure cells, pure pages, ... (p.282-284): Multics Maclisp does not have the concept of pure data structure. The only things which are pure are compiled functions. *PURE, PUTPROP variable, PURCOPY variable, PURIFY, PURE, PURCLOBRL (p.282-4): do not exist. Editors: LEDIT (p.288): does not exist. Internal System Functions: (STATUS USRHUNK), (STATUS CALLI), (STATUS SENDI), (STATUS VECTOR) (p.294,295): do not exist. *-READ-EVAL-PRINT, etc. (p.295): do not exist. *APPLY, *EVAL, etc, except *DIF and *QUO. (p.296-298): do not exist. Initial Condition Handlers (p.298,299): Most of these are named *INTERNAL-xxx-BREAK, where xxx is the name of the condition. They are also not interned. +INTERNAL-AUTOLOAD (p.298): does not exist. Actually, there is an analogue, but its name is uninterned and it is the value of an uninterned symbol, so there is no way to access it. +INTERNAL-*RSET-BREAK (p.299): named *INTERNAL-*RSET-BREAK, and is uninterned. +INTERNAL-IOL-BREAK (p.299): does not exist, and has no equivalent. There is no IO-LOSSAGE condition. ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved