1 01/07/85  Multics Maclisp Differences
  2 
  3 
  4 This info segment describes the differences betwen Multics Maclisp and
  5 PDP-10 (ITS/TOPS-20) MACLISP, as defined in "The Revised Maclisp
  6 Manual", MIT/LCS/TR-295, dated May 21, 1983.  The topics in this info
  7 segment are in the order that they appear in this manual, and are also
  8 accompanied by the page numbers on which the topic will be found.
  9 Function and variable names in this segment will be in uppercase for
 10 consistency with the manual and also to make them stand out; note that
 11 in Multics Maclisp all the builtin functions are in lowercase and case
 12 is significant.
 13 
 14 This info segment only lists missing features or differences in
 15 operation.  Multics-only features are not listed.
 16 
 17 Unless noted otherwise, if this info segment specifies that a Status
 18 option does not exist then the corresponding SStatus option also does
 19 not exist.
 20 
 21 
 22 A number of functions which are in the default PDP-10 Maclisp
 23 environment are only available on Multics after loading a file from the
 24 extension library.  These files are available in >ldd>include as Lisp
 25 include files.  If (%include library) is used then all the extensions
 26 will be available, or individual library files may be loaded using
 27 (%include NAME); functions in the library will be noted here in entries
 28 of the form:
 29           FUNCs (p.N): ext - NAME
 30 
 31 
 32 INTRODUCTION:
 33 Getting started (p. 2): On Multics, Lisp may be entered by the "lisp"
 34 command.
 35 
 36 Init files (p. 2): On Multics, the init file is [hd]>start_up.lisp.
 37 No COMMENT statement is necessary.
 38 
 39 ALLOC? (p.3): Multics Maclisp does not ask the "ALLOC?" question.  An
 40 initial COMMENT statement in the init file is ignored.
 41 
 42 JCL (p. 3): The first argument to the "lisp" command is the pathname
 43 of a saved environment, not an init file.
 44 
 45 
 46 Datatypes:
 47 TYPEP (p.5): The possible values of TYPEP are LIST, SYMBOL, FIXNUM,
 48 FLONUM, BIGNUM, ARRAY, STRING, RANDOM.  This is the same as PDP-10
 49 Maclisp, except for the lack of hunks and the addition of STRING.
 50 
 51 
 52 The Evaluator:
 53 PSETQ (p.9): ext - other_other
 54 
 55 LEXPR-FUNCALL (p.15): ext - other_other
 56 
 57 
 58 The Read-Eval-Print Loop:
 59 *BREAK (p.19): does not exist.
 60 
 61 $P variable (p.20): does not exist.  The break loop always looks for
 62 the symbol $P.
 63 
 64 (STATUS BREAKLEVEL) (p.21): does not exist.
 65 
 66 READ variable (p.21): does not exist.  The standard READ function is
 67 always used by the Read-Eval-Print loop.
 68 
 69 *-READ-EVAL-PRINT, etc. (p.22,23): do not exist.
 70 
 71 
 72 Control Forms:
 73 CASEQ, SELECTQ (p.26,27): ext - other_other
 74 
 75 LET with destructuring (p.31): ext - destructuring_let.  The default
 76 LET special form only allows symbols in the CARs of the initialization
 77 forms.
 78 
 79 LET*, DESETQ (p.32): ext - destructuring_let
 80 
 81 LOOP (p.39): ext - loop
 82 
 83 *CATCH, *THROW (p.47): ext - other_other
 84 
 85 CATCH-BARRIER, CATCHALL (p.51): do not exist.
 86 
 87 
 88 SETF:
 89 SETF, DEFSETF (p.54-56): ext - setf
 90 
 91 PUSH, POP (p.57): ext - other_other
 92 
 93 
 94 Definitional Forms:
 95 DEFUN &keyword support (p.65,66): ext - defun.  Other DEFUN features
 96 are available in the default environment.
 97 
 98 DEFVAR, DEFCONST (p.69): ext - other_other.  Note that the Emacs
 99 extension include file "e-macros" defines an incompatible version of
100 DEFVAR.  If this is already defined then loading the library will not
101 redefine it.
102 
103 DEFMACRO, MACRO (p.70,71): ext - defmacro
104 
105 DEFMACRO-DISPLACE, DEFSIMPLEMAC (p.72): do not exist.
106 
107 DEFMACRO-CHECK-ARGS (p.72): does not exist.  DEFMACRO acts as if it
108 were T.
109 
110 DEFMACRO-DISPLACE-CALL (p.72): does not exist.  Multics DEFMACRO always
111 generates displacing macros, so it acts as if it were T.
112 
113 DEFMACRO-FOR-COMPILING (p.72): does not exist.  The MACROS compiler
114 flag is obeyed, although the defmacro include file sets it to T when
115 it is first loaded.
116 
117 
118 MACRO-EXPANSION-USE (p.73): does not exist.  Multics DEFMACRO always
119 generates displacing macros, so it acts as if this were set to DISPLACE.
120 
121 MACROEXPAND, MACROEXPAND-1, MACROEXPAND-1* (p.73): do not exist.
122 
123 MACROEXPANDED (p.74): does not exist.
124 
125 DEFUN& (p.74): ext - defun
126 
127 DEFUN&-CHECK-ARGS (p.74): does not exist.  DEFUN& acts as if it were
128 T.
129 
130 DEFSTRUCT (p.76): ext - defstruct
131 
132 
133 List Structure:
134 MAKE-LIST (p.91): ext - runtime
135 
136 LISTP (p.92): ext - other_other.  This is the Lisp Machine definition,
137 not the Maclisp definition.  It is equivalent to (not (atom x)).
138 
139 PAIRP (p.92): does not exist.
140 
141 SUBLIS property (p.108): not affected.  Portable programs should not
142 use it, though.
143 
144 CAR/CDR Control Variables: do not exist.  CAR and CDR check for a
145 fixnum/flonum argument.  For other argument types it assumes it is a
146 list and may fault doing the operation.  For symbols, the CAR is the
147 value and the CDR is the property list, but this should not be depended
148 upon.
149 
150 
151 Numbers:
152 FIXNUMP (p.113): ext - other_other
153 
154 (STATUS RANDOM) (p.123): does not exist.
155 
156 ZFUZZ (p.123): does not exist, so effectively 0.0.
157 
158 
159 Symbol Manipulation
160 PNGET, PNPUT (p.131): do not exist.
161 
162 SYMBOLCONC (p.134): ext - runtime
163 
164 
165 Array Creation/Manipulation:
166 LISTARRAY (p.144): Takes an optional second argument, N, which is the
167 maximum length of the list which should be returned.  If the array has
168 more than this number of elements, only the first N elements will be
169 returned.
170 
171 ARRAY-/#-DIMS, ARRAY-DIMENSION-N, ARRAY-TYPE (p.145): do not exist.
172 
173 DUMPARRAYS (p.145): Only types FIXNUM and FLONUM are handled.  If the
174 filespec is (pdp-10 FILESPEC) then the file is written in PDP-10
175 dumparrays format.
176 
177 LOADARRAYS (p.145): Only FIXNUM and FLONUM arrays are handled.
178 
179 
180 Hunks (p.146-8): do not exist.
181 
182 
183 Strings (p.149):
184 Multics strings are first class data types.  There are no "real" or
185 "fake" strings.
186 
187 +INTERNAL-STRING-MARKER property (p.149): does not exist.
188 
189 
190 Bit Manipulation:
191 LOGAND, etc., BIT-TEST, etc. (p.151): ext - other_other
192 
193 ASH (p.152): if "runtime" included then this turns into BIGNUM-ASH.
194 
195 DEPOSIT-BYTE, LOAD-BYTE (p.155): do not exist.
196 
197 LDB, DPB (p.155): ext - runtime
198 
199 *DEPOSIT-BYTE, *LOAD-BYTE, *DPB, *LDB (p.156): do not exist.
200 
201 
202 New-I/O:
203 SFA concept (p.157): does not exist.
204 
205 T concept (p.157): since TYI/TYO variables do not exist, T is always
206 equivalent to user_input/user_output as appropriate.
207 
208 TYI variable (p.160): does not exist.  Input functions act as if it
209 were equivalent to user_input I/O switch.
210 
211 TTYSCAN-STRINGERS/| (p.160): does not exist.
212 
213 TYO variable (p.161): does not exist.  Output functions act as if it
214 were equivalent to user_output I/O switch.
215 
216 OUTFILES (p.161): defaults to NIL.
217 
218 MSGFILES (p.161): does not exist.  T is always used for messages.
219 
220 ECHOFILES (p.161): does not exist.  There is no echoing facility.
221 
222 *NOPOINT function (p.164): does not exist.
223 
224 CURSORPOS (p.164,165): only works in the video system.  Output affects
225 the specified window, so all references to the screen should be
226 replaced by window.  The P and Q functions are not supported.  There is
227 currently a bug where the [ (insert line) and \ (delete line) functions
228 are interchanged.
229 
230 
231 OPEN (p.166): does not work properly unless you specify all of the
232 direction, data mode, device type, and buffering mode.  The ECHO and
233 CLA modes are not supported.
234 
235 CNAMEF (p.167): does not exist.
236 
237 CLEAR-OUTPUT (p.167): does not exist.
238 
239 FORMAT (p.169): ext - format.  To prevent compiler warnings, put
240           (declare (*lexpr format))
241 in your source files that use FORMAT.
242 
243 ?FORMAT (p.179): ext - format
244 
245 Y-OR-N-P, YES-OR-NO-P (p.182): do not exist.
246 
247 UNTYI (p.183): does not exist.
248 
249 +TYO (p.186): does not exist.
250 
251 RUBOUT (p.186): does not exist.
252 
253 
254 (SSTATUS LINMODE) (p.188): not settable.  (STATUS LINMODE) is OK.
255 
256 TTYSCAN, TTYIFA, TTYOFA, TTYCONS, FASLNAMELIST, FASLOAD, TTYTYPE,
257 OSPEED, TTYSIZE, TTY (p.189-192): do not exist.
258 
259 SPRIN1 (p.193): does not exist.
260 
261 GRIND-MACROEXPANDED (p.193): does not exist.
262 
263 CGOL, CGOLREAD (p.194): does not exist.
264 
265 
266 SFAs (p.194-202): do not exist.
267 
268 
269 Old-I/O:
270 UREAD, UWRITE variables (p.203): unbound until the old I/O package is
271 autoloaded.
272 
273 
274 Files:
275 FASLOAD variable (p.211): does not exist.
276 
277 INCLUDE (p.211): does not exist.  %INCLUDE is similar, but uses the
278 translator search path if not given a pathname.
279 
280 DEFAULTF variable (p.212): does not exist.
281 
282 LENGTHF, FASLP (p.213): do not exist.
283 
284 PROBEF, RENAMEF (p.214): do not exist.
285 
286 MAPPALLFILES, DIRECTORY, MAPDIRECTORY (p.215,216): do not exist.
287 
288 
289 Syntax:
290 # reader macro (p.218-223): ext - sharpsign.  However, #| and #% are
291 not defined.
292 
293 SETSYNTAX-SHARP-MACRO (p.227): does not exist.  There is a
294 SHARPSIGN-SET-SYNTAX which is equivalent except that it does not take
295 the optional fourth argument.  ext - sharpsign.
296 
297 /#-MACRO-DATALIST (p.228): Called SHARPSIGN-DATA-LIST.  ext - sharpsign.
298 
299 /#-SYMBOLIC-CHARACTERS-TABLE (p.228): Called SHARPSIGN-CHARACTER-ALIST.
300 ext- sharpsign.
301 
302 Error Handlers:
303 CERROR (p.231): does not exist.
304 
305 FERROR (p.231): ext - format
306 
307 Error Channels (p.233-235): The default value of the error channel
308 variables are *INTERNAL-xxx-BREAK, where xxx is the name of the
309 variable.  These symbols are not interned, though.
310 
311 IO-LOSSAGE, MACHINE-ERROR variable (p.234,235): do not exist.
312 
313 ERROR-BREAK-ENVIRONMENT (p.236): does not exist.
314 
315 AUTOLOAD variable (p.237): does not exist.
316 
317 
318 Debugging:
319 BAKLIST (p.239): does not exist.
320 
321 FRETRY (p.240): does not exist.
322 
323 EVALHOOK (p.241): does not take the optional third argument.
324 
325 SUBR (p.245): does not exist.
326 
327 EVAL variable (p.247): does not exist.
328 
329 (STATUS PUNT) (p.247): does not exist.  It is effectively NIL.
330 
331 
332 Declarations and the Compiler:
333 COMPILER-STATE (p.253): is not bound in the interpreter.
334 
335 FIXNUM-IDENTITY, FLONUM-IDENTITY (p.253): do not exist.
336 
337 HERALD (p.254): does not exist.
338 
339 SQUID (p.255): does not exist.
340 
341 
342 System Programming:
343 (STATUS TTYINT) (p.257): does not exist.  It may be possible to get
344 some of its functionality using (STATUS INTERRUPT).
345 
346 ALARMCLOCK function and variable (p.259): does exist, although the
347 manual says it is ITS only.
348 
349 (STATUS NOINTERRUPTS) (p.260): does not exist.
350 
351 WITHOUT-INTERRUPTS (p.260); ext - other_other
352 
353 STATUS, SSTATUS (p.261): only the first four characters of the key
354 argument are significant, as opposed to five on PDP-10's.
355 
356 (STATUS SITE), (STATUS FILESYSTEM-TYPE), (STATUS OPSYSTEM-TYPE),
357 (STATUS XJNAME), (STATUS SUBSYSTEM), (STATUS JNAME), (STATUS JNUMBER),
358 (STATUS USERID), (STATUS XUNAME), (STATUS HOMEDIR), (STATUS HSNAME)
359 (p.263-265): do not exist.
360 
361 (STATUS UDIR) (p.265): returns the default working dir as a symbol.
362 
363 
364 SUSPEND (p.267): exists, even though the manual says PDP-10 Only.  It
365 takes no arguments, and just pushes to a new Multics command level.
366 
367 VALRET (p.269): does not exist.  CLINE will execute a command line.
368 
369 GETDDTSYM, PUTDDTSYM, LH/|, EXAMINE, DEPOSIT, VALUE-CELL-LOCATION
370 (p.270): do not exist.
371 
372 (STATUS SXHASH) (p.272): does not exist.
373 
374 GCPROTECT (p.274): does not exist.
375 
376 GCTWA variable (p.274): does not exist.
377 
378 (STATUS SYSTEM sym) (p.275): The list returned never contains the
379 symbol SYMBOL, MACRO, or AUTOLOAD.
380 
381 RECLAIM (p.276): does not exist.
382 
383 GC-OVERFLOW, GCPROTECT (p.276): do not exist.
384 
385 (STATUS GCMAX), (STATUS GCMIN), (STATUS GCSIZE), (STATUS ARRAY),
386 (STATUS BPSH), (STATUS BPSL), (STATUS MEMFREE), (STATUS FLUSH),
387 (STATUS LOSEF), (STATUS PDLNAMES), (STATUS FXPDL), (STATUS FLPDL),
388 (STATUS PDL), (STATUS SPDL), (STATUS SEGLOG), (STATUS PURSIZE),
389 (STATUS PURSPCNAMES) (p.277-280): do not exist.
390 
391 (STATUS PAGING) (p.278): the first elemtn of the result is always 0, as
392 there is no longer a paging device (bulk store).
393 
394 
395 BPORG, BPEND, PAGEBPORG, GETSP (p.281): do not exist.
396 
397 NORET (p.281): The variable does not exist (it used to be a Status
398 option).  The function sets the internal NORET flag, but nothing uses
399 it.
400 
401 Pure cells, pure pages, ...  (p.282-284): Multics Maclisp does not have
402 the concept of pure data structure.  The only things which are pure are
403 compiled functions.
404 
405 *PURE, PUTPROP variable, PURCOPY variable, PURIFY, PURE, PURCLOBRL
406 (p.282-4): do not exist.
407 
408 
409 Editors:
410 LEDIT (p.288): does not exist.
411 
412 
413 Internal System Functions:
414 (STATUS USRHUNK), (STATUS CALLI), (STATUS SENDI), (STATUS VECTOR)
415 (p.294,295): do not exist.
416 
417 *-READ-EVAL-PRINT, etc. (p.295): do not exist.
418 
419 *APPLY, *EVAL, etc, except *DIF and *QUO. (p.296-298): do not exist.
420 
421 Initial Condition Handlers (p.298,299): Most of these are named
422 *INTERNAL-xxx-BREAK, where xxx is the name of the condition.  They are
423 also not interned.
424 
425 +INTERNAL-AUTOLOAD (p.298): does not exist.  Actually, there is an
426 analogue, but its name is uninterned and it is the value of an
427 uninterned symbol, so there is no way to access it.
428 
429 +INTERNAL-*RSET-BREAK (p.299): named *INTERNAL-*RSET-BREAK, and is
430 uninterned.
431 
432 +INTERNAL-IOL-BREAK (p.299): does not exist, and has no equivalent.
433 There is no IO-LOSSAGE condition.