(FILECREATED "13-FEB-83 19:09:17" {PHYLUM}<LISPUSERS>NOBOX.;6 5644
changes to: (MACROS FBOX IBOX)
previous date: " 9-FEB-83 21:41:43" {PHYLUM}<LISPUSERS>NOBOX.;5)
(* Copyright (c) 1983 by Xerox Corporation)
(PRETTYCOMPRINT NOBOXCOMS)
(RPAQQ NOBOXCOMS [(* use of this package is not recommended for interlisp-d. it is supplied for
compatibility with old code)
(FNS IBOX FBOX NBOX)
(P (MOVD? (QUOTE LIST)
(QUOTE LBOX))
(MOVD? (QUOTE CONS)
(QUOTE CBOX)))
(DECLARE: EVAL@COMPILE (RECORDS FBOX IBOX)
(MACROS NOBOX.MAKEFLOAT NOBOX.MAKELARGE)
(MACROS IBOX FBOX NBOX)
(MACROS CBOX LBOX)
(I.S.OPRS scratchcollect)
(ADDVARS (SYSLOCALVARS $$SCCONS $$SCPTR)
(INVISIBLEVARS $$SCCONS $$SCPTR])
(* use of this package is not recommended for interlisp-d. it is supplied for compatibility
with old code)
(DEFINEQ
(IBOX
[LAMBDA (IVAL) (* rmk: " 4-SEP-80 22:00")
(* If needed, give field the initial value defined in the record)
(* 100000 should really be (CONSTANT
(create IBOX)), so that information about size of LARGEP's is stored in
one place.)
(create IBOX
I ←(OR IVAL 100000])
(FBOX
[LAMBDA (FVAL) (* rmk: "23-SEP-77 09:39")
(create FBOX
F ←(OR FVAL 0.0])
(NBOX
[LAMBDA (NVAL) (* rmk: "10-OCT-77 10:17")
(* A boxing function for numbers of unknown type. Since most functions that produce unknown-typed numbers compile closed and box
internally, this is really useful only to copy boxes produced by those functions into new boxes at setq's. E.g.
(SETQ X (NBOX Y)), where previously there was (SETQ Y (DIFFERENCE A B)))
(if (FLOATP NVAL)
then (create FBOX
F ← NVAL)
else (create IBOX
I ← NVAL])
)
(MOVD? (QUOTE LIST)
(QUOTE LBOX))
(MOVD? (QUOTE CONS)
(QUOTE CBOX))
(DECLARE: EVAL@COMPILE
[DECLARE: EVAL@COMPILE
(BLOCKRECORD FBOX ((F FLOATING))
(CREATE (NOBOX.MAKEFLOAT)))
(BLOCKRECORD IBOX ((I INTEGER))
(CREATE (NOBOX.MAKELARGE)))
]
(DECLARE: EVAL@COMPILE
(PUTPROPS NOBOX.MAKEFLOAT 10MACRO (NIL (FPLUS 0.0)))
(PUTPROPS NOBOX.MAKEFLOAT DMACRO (NIL (CREATECELL (CONSTANT \FLOATP))))
(PUTPROPS NOBOX.MAKELARGE 10MACRO (NIL (IPLUS 1000000)))
(PUTPROPS NOBOX.MAKELARGE DMACRO (NIL (CREATECELL (CONSTANT \FIXP))))
)
(DECLARE: EVAL@COMPILE
(PUTPROPS IBOX 10MACRO [ARGS (COND [(CAR ARGS)
(LIST (QUOTE ASSEMBLE)
NIL
[LIST (QUOTE CQ)
(LIST (QUOTE VAG)
(LIST (QUOTE FIX)
(CAR ARGS]
(QUOTE (MOVE 2 , 1))
(LIST (QUOTE CQ)
(create IBOX))
(QUOTE (MOVEM 2 , 0 (1]
(T (QUOTE (create IBOX])
(PUTPROPS IBOX DMACRO [ARGS (COND (ARGS (APPEND (QUOTE (create IBOX smashing (CONSTANT (create IBOX))
I ←))
ARGS))
(T (QUOTE (create IBOX])
(PUTPROPS FBOX 10MACRO [ARGS (COND [(CAR ARGS)
(LIST (QUOTE ASSEMBLE)
NIL
[LIST (QUOTE CQ)
(LIST (QUOTE VAG)
(LIST (QUOTE FLOAT)
(CAR ARGS]
(QUOTE (MOVE 2 , 1))
(LIST (QUOTE CQ)
(create FBOX))
(QUOTE (MOVEM 2 , 0 (1]
(T (QUOTE (create FBOX])
(PUTPROPS FBOX DMACRO [ARGS (COND (ARGS (APPEND (QUOTE (create FBOX smashing (CONSTANT (create FBOX))
F ←))
ARGS))
(T (QUOTE (create FBOX])
(PUTPROPS NBOX 10MACRO [ARGS (SUBPAIR (QUOTE (NVAL FBOX))
(LIST (CAR ARGS)
(create FBOX))
(QUOTE (ASSEMBLE NIL (CQ NVAL)
(CQ (COND [(FLOATP (AC))
(ASSEMBLE NIL
(MOVE 2 , 0 (1))
(CQ FBOX)
(MOVEM 2 , 0 (1]
(T (IBOX (AC])
(PUTPROPS NBOX DMACRO [OPENLAMBDA (NVAL)
(COND ((FLOATP NVAL)
(FBOX NVAL))
(T (IBOX NVAL])
)
(DECLARE: EVAL@COMPILE
(PUTPROPS CBOX MACRO ((X Y)
(FRPLNODE (CONSTANT (CONS))
X Y)))
(PUTPROPS CBOX DMACRO (= . CONS))
(PUTPROPS LBOX MACRO [ARGLIST (PROG (NILIST (FORM (QUOTE $X$)))
[MAP ARGLIST (FUNCTION (LAMBDA (ARG)
(SETQ NILIST (CONS NIL NILIST))
(SETQ FORM (LIST (QUOTE FRPLACA)
FORM
(CAR ARG)))
(AND (CDR ARG)
(SETQ FORM (LIST (QUOTE CDR)
FORM]
(RETURN (LIST (LIST (QUOTE LAMBDA)
(QUOTE ($X$))
(QUOTE (DECLARE (LOCALVARS $X$)))
FORM
(QUOTE $X$))
(KWOTE NILIST])
(PUTPROPS LBOX DMACRO (= . LIST))
)
(DECLARE: EVAL@COMPILE
[I.S.OPR (QUOTE scratchcollect)
(QUOTE (SETQ $$SCPTR (FRPLACA [OR (CDR $$SCPTR)
(CDR (FRPLACD $$SCPTR (CAR (FRPLACA $$SCCONS (CONS]
BODY)))
(QUOTE (BIND $$SCPTR $$SCCONS ← (CONSTANT (CONS))
FIRST
(SETQ $$SCPTR $$SCCONS)
FINALLY
(SETQ $$VAL (AND (NEQ $$SCPTR $$SCCONS)
(PROG1 (CDR $$SCCONS)
(COND ((CDR $$SCPTR)
(FRPLACD $$SCCONS
(PROG1 (CDR $$SCPTR)
(FRPLACD $$SCPTR NIL)
(FRPLACD (PROG1 (CAR $$SCCONS)
(FRPLACA
$$SCCONS
$$SCPTR))
(CDR $$SCCONS]
)
(ADDTOVAR SYSLOCALVARS $$SCCONS $$SCPTR)
(ADDTOVAR INVISIBLEVARS $$SCCONS $$SCPTR)
)
(PUTPROPS NOBOX COPYRIGHT ("Xerox Corporation" 1983))
(DECLARE: DONTCOPY
(FILEMAP (NIL (911 2102 (IBOX 921 . 1401) (FBOX 1403 . 1540) (NBOX 1542 . 2100)))))
STOP