Machine-Independent MDL for TOPS-20 and VAX.
[pdp10-muddle.git] / mim / development / mim / 20c / file.mud
diff --git a/mim/development/mim/20c/file.mud b/mim/development/mim/20c/file.mud
new file mode 100644 (file)
index 0000000..9b0eea5
--- /dev/null
@@ -0,0 +1,1200 @@
+
+
+<BLOCK (<ROOT>)>
+
+;"GETS names"
+
+<NEWTYPE LOSE FIX>
+
+COMPILER-INPUT
+
+<COND (<NOT <GASSIGNED? GVAL-CAREFUL>> <SETG GVAL-CAREFUL <>>)>
+<COND (<NOT <GASSIGNED? ADJBP-HACK>> <SETG ADJBP-HACK <>>)>
+
+ACTIVATION
+
+MRETURN
+
+LOOP
+
+TBIND
+
+BINDID
+
+DISPATCH 
+
+ARGS 
+
+OBLIST 
+
+INGC
+
+UBLOCK 
+
+UUBLOCK
+
+USBLOCK
+
+SBLOCK
+
+BIND 
+
+PAGPTR 
+
+MINF 
+
+ICALL 
+
+ECALL 
+
+NCALL 
+
+UWATM 
+
+MAPPER 
+
+ENVIR 
+
+RUNINT 
+
+PURVEC 
+
+DBVEC 
+
+M$$BINDID 
+
+FRAME 
+
+SFRAME 
+
+ADJ 
+
+SCALL 
+
+CALL 
+
+NTHR 
+
+= 
+
+FCN 
+
+GFCN 
+
+IFSYS 
+
+IFCANNOT
+
+IFCAN
+
+ENDIF 
+
+TEMP 
+
+MAKTUP 
+
+END 
+
+COMPERR 
+
+UNWCONT 
+
+IOERR 
+
+JUMP 
+
+OPT-DISPATCH 
+
+ICALL 
+
+ACALL 
+
+BRANCH-FALSE 
+
+DEAD-FALL
+
+DEAD-JUMP
+
+STACK 
+
+TYPE-CODE 
+
+TYPE-WORD 
+
+RECORD-TYPE 
+
+DEAD 
+
+ALL 
+
+<SETG TYPE-LENGTHS
+      [T$LBIND
+       16
+       LBIND
+       16
+       T$GBIND
+       10
+       GBIND
+       10
+       T$ATOM
+       10
+       ATOM
+       10
+       T$OBLIST
+       10
+       OBLIST
+       10
+       T$LINK
+       10
+       LINK
+       10
+       T$LVAL
+       10
+       LVAL
+       10
+       T$GVAL
+       10
+       GVAL
+       10
+       T$FRAME
+       12
+       FRAME
+       12
+       T$SFRAME
+       12
+       SFRAME
+       12
+       T$PAGET
+       256
+       T$MINF
+       10
+       MSUBR
+       4
+       T$MSUBR
+       4]>
+
+<SETG TYPE-WORDS
+      [UNBOUND
+       0
+       T$UNBOUND
+       0
+       FIX
+       64
+       CHARACTER
+       128
+       FLOAT
+       192
+       LIST
+       257
+       FALSE
+       321
+       DECL
+       385
+       STRING
+       453
+       MCODE
+       518
+       T$MCODE
+       518
+       VECTOR
+       583
+       MSUBR
+       647
+       T$MSUBR
+       647
+       IMSUBR
+       *4007*
+       T$IMSUBR
+       *4007*
+       FRAME
+       706
+       T$FRAME
+       706
+       LBIND
+       770
+       T$LBIND
+       770
+       ATOM
+       834
+       T$ATOM
+       834
+       OBLIST
+       898
+       T$OBLIST
+       898
+       GBIND
+       962
+       T$GBIND
+       962
+       FORM
+       1025
+       T$TYPE-C
+       1088
+       TYPE-C
+       1088
+       I$TERMIN
+       1152
+       SEGMENT
+       1217
+       T$DEFER
+       1281
+       DEFER
+       1281
+       T$FUNCTION
+       1345
+       FUNCTION
+       1345
+       T$MACRO
+       1409
+       MACRO
+       1409
+       T$CHANNEL
+       1479
+       CHANNEL
+       1479
+       I$SDTABLE
+       2247
+       I$DISK-CHANNEL
+       2311
+       T$MUD-CHAN
+       2375
+       MUD-CHAN
+       2375
+       T$TYPE-ENTRY
+       1543
+       ADECL
+       1607
+       T$OFFSET
+       1671
+       OFFSET
+       1671
+       T$LVAL
+       1730
+       LVAL
+       1730
+       T$GVAL
+       1794
+       GVAL
+       1794
+       T$LINK
+       1858
+       LINK
+       1858
+       T$TUPLE
+       1927
+       TUPLE
+       1927
+       T$UVECTOR
+       1990
+       UVECTOR
+       1990
+       T$TAT
+       2183
+       TAT
+       2183
+       T$PAGET
+       1990                                                  ;"really UVECTOR"
+       T$MINF
+       1990                                                           ;"ditto"
+       T$WORD
+       2432
+       WORD
+       2432
+       T$PCODE
+       2502
+       PCODE
+       2502
+       T$ZONE
+       2567
+       ZONE
+       2567
+       T$GC-PARAMS
+       2630
+       GC-PARAMS
+       2630
+       T$AREA
+       2694
+       AREA
+       2694
+       T$SFRAME
+       2754
+       SFRAME
+       2754
+       T$BYTES
+       2820
+       BYTES
+       2820
+       T$TYPE-W
+       2880
+       TYPE-W
+       2880
+       T$BITS
+       3008
+       BITS
+       3008
+       T$KIND-ENTRY
+       *6007*
+       KIND-ENTRY
+       *6007*
+       T$SPLICE
+       *6101*
+       SPLICE
+       *6101*]>
+
+<COND (<NOT <GASSIGNED? PEEP-ENABLED>> <SETG PEEP-ENABLED <>>)>
+
+<COND (<NOT <GASSIGNED? LABEL-OBLIST>> <SETG LABEL-OBLIST <MOBLIST LB 0>>)>
+
+<COND (<NOT <GASSIGNED? VICTIMS>> <SETG VICTIMS ()>)>
+
+<COND (<NOT <GASSIGNED? SURVIVORS>> <SETG SURVIVORS ()>)>
+
+<ENDBLOCK>
+
+<COND (<NOT <GASSIGNED? WIDTH-MUNG>>
+       <FLOAD "MIMOC20DEFS.MUD">
+       <FLOAD "MSGLUE-PM.MUD">)>
+
+<COND (<NOT <GASSIGNED? CONSTANT-TABLE>>
+       <SETG CONSTANT-TABLE <IVECTOR ,CONSTANT-TABLE-LENGTH ()>>)>
+
+<COND (<NOT <GASSIGNED? MV-TABLE>>
+       <SETG MV-TABLE <IVECTOR ,MV-TABLE-LENGTH ()>>)>
+
+<COND (<NOT <GASSIGNED? DEATH-TRQ>> <SETG DEATH-TRQ T>)>
+
+<COND (<NOT <GASSIGNED? MIM-OBL>> <SETG MIM-OBL <LIST !.OBLIST>>)>
+
+<COND (<NOT <GASSIGNED? NO-AC-FUNNYNESS>> <SETG NO-AC-FUNNYNESS <>>)>
+
+<COND (<NOT <GASSIGNED? V1>> <SETG V1 <>>)>
+
+<COND (<NOT <GASSIGNED? V2>> <SETG V2 <>>)>
+
+<COND (<NOT <GASSIGNED? BOOT-MODE>> <SETG BOOT-MODE <>>)>
+
+<COND (<NOT <GASSIGNED? INT-MODE>> <SETG INT-MODE <>>)>
+
+<COND (<NOT <GASSIGNED? GC-MODE>> <SETG GC-MODE <>>)>
+
+<COND (<NOT <GASSIGNED? GLUE-MODE>> <SETG GLUE-MODE <>>)>
+
+<COND (<NOT <GASSIGNED? ACA-AC>> <SETG ACA-AC <>>)>
+
+<COND (<NOT <GASSIGNED? NEXT-FLUSH>> <SETG NEXT-FLUSH 0>)>
+
+<COND (<NOT <GASSIGNED? MAX-SPACE>> <SETG MAX-SPACE <>>)>
+
+<COND (<NOT <GASSIGNED? SURVIVOR-MODE>> <SETG SURVIVOR-MODE <>>)>
+
+<COND (<NOT <GASSIGNED? LIST-OF-FCNS>> <SETG LIST-OF-FCNS ()>)>
+
+<SETG CB-LENGTH 512>
+
+<SETG BUFL 1024>
+
+<MANIFEST CB-LENGTH BUFL>
+
+<USE "FILE-INDEX">
+
+<COND (<NOT <GASSIGNED? CODE-BUFFER>>
+       <SETG CODE-BUFFER <IUVECTOR ,CB-LENGTH 0>>
+       <SETG ONE-WD ![0]>)>
+
+<COND (<NOT <GASSIGNED? OUTPUT-BUFFER>>
+       <SETG OUTPUT-BUFFER <ISTRING ,OUTPUT-LENGTH>>)>
+
+<SETG CTLZ+1 <+ <SETG CTLZ 26> 1>>
+
+<SETG MIM <==? <TYPEPRIM FIX> FIX>>
+
+<COND (<GASSIGNED? CRLF-STRING!-INTERNAL>
+       <SETG WORD-STRING <STRING ,CRLF-STRING!-INTERNAL "#WORD " <ASCII ,CTLZ>>>)>
+
+<COND (,MIM <SETG PKG-OBL <CHTYPE PACKAGE OBLIST>>)
+      (ELSE <SETG PKG-OBL <GETPROP PACKAGE OBLIST>>)>
+
+<COND (<OR <NOT <ASSIGNED? READ-TABLE>> <L? <LENGTH .READ-TABLE> ,CTLZ+1>>
+       <SETG READ-TABLE <SET READ-TABLE <IVECTOR ,CTLZ+1 <>>>>)>
+
+<SETG FCN-OBL <MOBLIST FOO>>
+
+<SETG FCN-OBL-L (,FCN-OBL)>
+
+<DEFINE TERMIN-PRINT (TERMIN)
+       #DECL ((TERMIN) I$TERMIN)
+       <PRINC "#I$TERMIN ">
+       <PRIN1 <CHTYPE .TERMIN FIX>>
+       <PRINC !\ >>
+
+<COND (<NOT <GASSIGNED? FOOSTR>> <SETG FOOSTR " ">)>
+
+<GDECL (FOOSTR) STRING>
+
+<DEFINE CHR-PRINT (CHR)
+       #DECL ((CHR) CHARACTER)
+       <COND (<G? <CHTYPE .CHR FIX> 127>
+              <PRINC "#CHARACTER ">
+              <PRIN1 <CHTYPE .CHR FIX>>)
+             (<PRINC  "!\\">
+              <PUT ,FOOSTR 1 .CHR>
+              <PRINC ,FOOSTR>)>>
+
+<PRINTTYPE I$TERMIN ,TERMIN-PRINT>
+
+<DEFINE ATOM-PRINT (ATM "AUX" (SPN <SPNAME .ATM>))
+       #DECL ((ATM) ATOM (SPN) STRING)
+       <COND (<AND <G=? <LENGTH .SPN> 2>
+                   <==? <1 .SPN> !\T>
+                   <==? <2 .SPN> !\$>>
+              <PRINC <REST .SPN 2>>
+              <OR ,BOOT-MODE <PRINC "!-">>)
+             (<AND <OR <==? <OBLIST? .ATM> <ROOT>>
+                       <MEMBER <SPNAME .ATM> ,ROOT-ATOMS>>
+                   <NOT ,BOOT-MODE>>
+              <PRINC .SPN>
+              <PRINC "!-">)
+             (T <PRINC .SPN>)>
+       <PRINC " ">>
+
+<COND (<NOT <GASSIGNED? ROOT-ATOMS>>
+       <SETG ROOT-ATOMS ["M$$BINDID" "M$$INT-LEVEL"]>)>
+
+<GDECL (ROOT-ATOMS) <VECTOR [REST STRING]>>
+
+<DEFINE T$UNBOUND-PRINT (UNB)
+       #DECL ((UNB) T$UNBOUND)
+       <PRINC "#UNBOUND ">
+       <PRIN1 <CHTYPE .UNB FIX>>
+       <PRINC !\ >>
+
+<PRINTTYPE T$UNBOUND ,T$UNBOUND-PRINT>
+
+<DEFINE XGLOC-PRINT (X)
+       #DECL ((X) XGLOC)
+       <COND (,BOOT-MODE
+              <PRIN1 <CHTYPE .X ATOM>>)
+             (<PRINC "%<GBIND ">
+              <PRIN1 <CHTYPE .X ATOM>>
+              <PRINC " T> ">)>>
+
+<PRINTTYPE XGLOC ,XGLOC-PRINT>
+
+<SET REDEFINE T>
+
+<DEFINE XTYPE-C-PRINT  (X "AUX" ATM)
+       #DECL ((X) XTYPE-C (ATM) ATOM)
+       <SET ATM <CHTYPE .X ATOM>>
+       <PRINC "%<TYPE-C ">
+       <PRIN1 .ATM>
+       <PRINC !\ >
+       <COND (<==? <SET ATM <TYPEPRIM .ATM>> WORD>
+              <SET ATM FIX>)>
+       <PRIN1 .ATM>
+       <PRINC ">">>
+
+<DEFINE XTYPE-W-PRINT  (X "AUX" ATM)
+       #DECL ((X) XTYPE-W (ATM) ATOM)
+       <SET ATM <CHTYPE .X ATOM>>
+       <PRINC "%<TYPE-W ">
+       <PRIN1 .ATM>
+       <PRINC !\ >
+       <COND (<==? <SET ATM <TYPEPRIM .ATM>> WORD>
+              <SET ATM FIX>)>
+       <PRIN1 .ATM>
+       <PRINC ">">>
+
+<PRINTTYPE XTYPE-C ,XTYPE-C-PRINT>
+
+<PRINTTYPE XTYPE-W ,XTYPE-W-PRINT>
+
+<COND (<NOT <GASSIGNED? OPS>>
+       <COND (<GASSIGNED? BLOAT> <BLOAT 100000 5000 100 1500>)>
+       <FLOAD "<MIM.20C>OP.MUD">)
+      (<GASSIGNED? BLOAT> <BLOAT 100000 5000 100 100>)>
+
+<COND (<NOT <GASSIGNED? OPCODE>> <FLOAD "<MIM.20C>MIMOPS.MUD">)>
+
+<GDECL (SURVIVORS INCHANS) LIST (OPT-LIST) <OR FALSE LIST>
+       (THIS-GUY) <LIST ATOM <LIST [REST OBLIST]>>>
+
+<DEFINE PROCESS-IFSYS (L) #DECL ((L) LIST)
+       <REPEAT ((IFL ()) IFOBJ ITM (LP .L) (LL <REST .L>))
+               #DECL ((IFL LP LL) LIST)
+               <COND (<EMPTY? .LL> <RETURN>)>
+               <COND (<AND <TYPE? <SET ITM <1 .LL>> FORM>
+                           <MEMQ <SET IFOBJ <1 .ITM>>
+                                 '[IFSYS ENDIF IFCAN IFCANNOT]>>
+                      <COND (<==? .IFOBJ IFSYS>
+                             <COND (<=? <2 .ITM> "TOPS20">
+                                    <SET IFL (<2 .ITM> !.IFL)>
+                                    <PUTREST .LP <SET LL <REST .LL>>>)
+                                   (T
+                                    <PUTREST .LP <SET LL <FLUSH-TO-ENDIF
+                                                          .LL  <2 .ITM>>>>)>)
+                            (<OR <==? .IFOBJ IFCAN> <==? .IFOBJ IFCANNOT>>
+                             <COND (<COND (<==? .IFOBJ IFCAN>
+                                           <LOOKUP <2 .ITM> ,MIMOC-OBLIST>)
+                                          (ELSE
+                                           <NOT <LOOKUP <2 .ITM> ,MIMOC-OBLIST>>)>
+                                    <SET IFL (<2 .ITM> !.IFL)>
+                                    <PUTREST .LP <SET LL <REST .LL>>>)
+                                   (T
+                                    <PUTREST .LP <SET LL <FLUSH-TO-ENDIF
+                                                          .LL  <2 .ITM>>>>)>)
+                            (T
+                             <COND (<OR <EMPTY? .IFL> <N=? <2 .ITM> <1 .IFL>>>
+                                    <ERROR UNBALANCED-IFSYS!-ERRORS
+                                           <2 .ITM> .IFL>)
+                                   (ELSE
+                                    <SET IFL <REST .IFL>>)>
+                             <PUTREST .LP <SET LL <REST .LL>>>)>
+                      <AGAIN>)>
+               <SET LL <REST <SET LP .LL>>>>>
+
+<DEFINE FLUSH-TO-ENDIF (L FLG "AUX" THING (CT 1) FRST)
+       #DECL ((L) LIST)
+  <REPEAT ()
+    <COND (<EMPTY? <SET L <REST .L>>>
+          <ERROR EOF-BEFORE-ENDIF!-ERRORS>
+          <RETURN>)>
+    <SET THING <1 .L>>
+    <COND (<TYPE? .THING FORM>
+          <COND (<==? <SET FRST <1 .THING>> ENDIF>
+                 <COND (<0? <SET CT <- .CT 1>>> <RETURN <REST .L>>)>)
+                (<OR <==? .FRST IFSYS> <==? .FRST IFCAN> <==? .FRST IFCANNOT>>
+                 <SET CT <+ .CT 1>>)>)>>>
+
+<DEFINE GET-NM1 (STR "AUX" (SEEN-OP <>)) #DECL ((STR) STRING)
+       <MAPF ,STRING <FUNCTION (CH) <COND (<==? .CH !\<> <SET SEEN-OP T>)
+                                          (<==? .CH !\>> <SET SEEN-OP <>>)
+                                          (<AND <NOT .SEEN-OP>
+                                                <==? .CH !\.>> <MAPSTOP>)
+                                          (ELSE .CH)>> .STR>>
+
+<DEFINE FILE-MIMOC ("TUPLE" FILES "AUX" C OC (OUTCHAN .OUTCHAN)
+                   (EXPFLOAD <AND <ASSIGNED? EXPFLOAD> .EXPFLOAD>)
+                   F-OR-G (PREC <>) PRE-INDEX COMPILER-INPUT
+                   (REDO <AND <ASSIGNED? REDO> .REDO>) ON
+                   (PRECOMPILED <AND <ASSIGNED? PRECOMPILED> .PRECOMPILED>))
+       #DECL ((FILES) <<PRIMTYPE VECTOR> [REST STRING]> (OUTCHAN) <SPECIAL ANY>
+              (PREC OC C) <OR FALSE CHANNEL> (COMPILER-INPUT) <SPECIAL CHANNEL>
+              (PRE-INDEX) <LIST [REST !<LIST ATOM FIX FIX>]>
+              (REDO) <LIST [REST ATOM]>)
+       <COND (<AND <SET C <OPEN "READ" <1 .FILES>>>
+                   <SET OC <OPEN "PRINT" <SET ON <STRING <GET-NM1 <1 .FILES>>
+                                                         ".MSUBR">>>>
+                   <OR <NOT .PRECOMPILED>
+                       <AND <SET PREC <OPEN "READ" .PRECOMPILED>>
+                            <SET PRE-INDEX <BUILD-INDEX .PREC ,FCN-OBL>>
+                            <OR <EMPTY? .REDO>
+                                <MAPR <>
+                                  <FUNCTION (L "AUX" (SN <SPNAME <1 .L>>))
+                                       <PUT .L 1
+                                            <OR <LOOKUP .SN ,FCN-OBL>
+                                                <INSERT .SN ,FCN-OBL>>>>
+                                  .REDO>>>>>
+              <SET COMPILER-INPUT .C>
+              <SETG INCHANS (.C)>
+              <SET FILES <REST .FILES>> 
+              <REPEAT (ATM (BUFFER <ISTRING ,BUFL>)) #DECL ((BUFFER) STRING)
+                <REPEAT ((IFL ()) NAME L NXT (END <>) ITM NM ACCESS-DATA
+                         SPN HASH-CODE)
+                  #DECL ((L) LIST (NAME) <SPECIAL ATOM> (NXT) FORM
+                         (END) <SPECIAL <OR FALSE ATOM>> (HASH-CODE) WORD
+                         (ACCESS-DATA) <LIST FIX FIX>)
+                  <COND (<SET ITM <FINISH-FILE .C .OC .EXPFLOAD>>
+                         <COND (<TYPE? .ITM FORM>
+                                <COND (<AND <G=? <LENGTH .ITM> 2>
+                                            <TYPE? <SET ATM <2 .ITM>> ATOM>>
+                                       <SET SPN <SPNAME .ATM>>
+                                       <SET NM
+                                            <OR <LOOKUP .SPN ,FCN-OBL>
+                                                <INSERT .SPN ,FCN-OBL>>>)>
+                                <SET NXT .ITM>)>)
+                        (T
+                         <SET END T>)>
+                  <AND .END <RETURN>>
+                  <SET C <1 ,INCHANS>>
+                  <COND
+                   (<TYPE? .ITM WORD> <SET HASH-CODE .ITM>)
+                   (<AND .PREC
+                          <NOT <MEMQ .NM .REDO>>
+                          <MAPF <>
+                                <FUNCTION (LL)
+                                    #DECL ((LL) !<LIST ATOM FIX FIX>)
+                                    <COND (<==? <1 .LL> .NM>
+                                           <SET ACCESS-DATA <REST .LL>>
+                                           <COND (<OR <L? <LENGTH .ACCESS-DATA> 3>
+                                                      <NOT <ASSIGNED? HASH-CODE>>
+                                                      <==? <3 .ACCESS-DATA>
+                                                           .HASH-CODE>>
+                                                  <MAPLEAVE>)
+                                                 (ELSE <MAPLEAVE <>>)>)>>
+                                .PRE-INDEX>>
+                    <ACCESS .PREC <1 .ACCESS-DATA>>
+                    <CRLF .OC>
+                    <REPEAT ((NCHRS <- <2 .ACCESS-DATA> <1 .ACCESS-DATA>>))
+                            #DECL ((NCHRS) FIX)
+                            <COND (<L? .NCHRS ,BUFL>
+                                   <READSTRING .BUFFER .PREC .NCHRS>
+                                   <PRINTSTRING .BUFFER .OC .NCHRS>
+                                   <RETURN>)
+                                  (ELSE
+                                   <READSTRING .BUFFER .PREC ,BUFL>
+                                   <PRINTSTRING .BUFFER .OC ,BUFL>
+                                   <SET NCHRS <- .NCHRS ,BUFL>>)>>
+                    <SKIP-MIMA .C .NM>)
+                   (ELSE
+                    <SET L (.NXT !<READ-LIST .C END '<SET END T>>)>
+                    <COND (.END <CLOSE .C>)>
+                    <SET F-OR-G <1 .NXT>>
+                    <SET NAME <2 .NXT>>
+                    <COND (,VERBOSE
+                           <OR <==? .OUTCHAN ,OUTCHAN>
+                               <PRINC <ASCII 12>>>
+                           <CRLF>
+                           <PRINC "Open coding: ">
+                           <PRIN1 .NAME>)>
+                    <PROCESS-IFSYS .L>
+                    <CALL-ANA .L>
+                    <MIMOC .L>
+                    <LOCATION-CHECK>
+                    <FIXUP-ONE-GLUE <REST ,CODE> ,LABELS>
+                    <ALLOCATE-CONSTANTS ,CONSTANT-VECTOR ,CODE-LENGTH>
+                    <FIXUP-CONSTANTS <REST ,CODE>>
+                    <WRITE-MSUBR .OC <> .F-OR-G>
+                    <MAPF <>
+                          <FUNCTION (LB) #DECL ((LB) LAB)
+                               <GUNASSIGN <REMOVE <LAB-NAM .LB>>>>
+                          ,LABELS>)>
+                  <AND .END <RETURN>>>
+                <COND (<EMPTY? .FILES>
+                       <RETURN>)>
+                <CLOSE .C>
+                <COND (<SET C <OPEN "READ" <1 .FILES>>>
+                       <SET FILES <REST .FILES>>
+                       <SETG INCHANS (.C)>)
+                      (<ERROR .C FILE-MIMOC>)>>
+              <CLOSE .C>
+              <CLOSE .OC>
+              ,NULL)
+             (ELSE
+              <COND (<AND <ASSIGNED? C> .C>
+                     <CLOSE .C>
+                     <COND (<AND <ASSIGNED? OC> .OC>
+                            <CLOSE .OC>
+                            <DELFILE .ON>
+                            <ERROR .PREC>)
+                           (ELSE <ERROR .OC>)>)
+                    (ELSE
+                     <ERROR .C>)>)>>
+
+<DEFINE FILE-GLUE ("TUPLE" FILES "AUX" C OC (TC <>) NMSTR (LEN 0) (FCN-COUNT 0)
+                  MSUBR-ACCESS (LOWERSTR <>) (TFILES .FILES) TN (OUTCHAN .OUTCHAN)
+                  (EXPFLOAD <AND <ASSIGNED? EXPFLOAD> .EXPFLOAD>) TOC PN ON TON
+                  TFILE-LENGTH COMPILER-INPUT (OB ,OUTPUT-BUFFER))
+       #DECL ((TFILES FILES) <<PRIMTYPE VECTOR> [REST STRING]> (OB) STRING
+              (OC TC C) <OR FALSE CHANNEL> (LEN MSUBR-ACCESS TFILE-LENGTH) FIX
+              (FCN-COUNT) FIX (LOWERSTR) <OR FALSE STRING>
+              (OUTCHAN) <SPECIAL ANY> (COMPILER-INPUT) <SPECIAL CHANNEL>)
+       <COND (,SURVIVOR-MODE
+              <COND (<OR <NOT <ASSIGNED? READ-TABLE>>
+                         <L? <LENGTH .READ-TABLE> ,CTLZ+1>>
+                     <SETG READ-TABLE <SET READ-TABLE <IVECTOR ,CTLZ+1 <>>>>)>
+              <COND (<NOT <NTH .READ-TABLE ,CTLZ+1>>
+                     <PUT .READ-TABLE
+                          ,CTLZ+1
+                          [<ASCII ,CTLZ> <ASCII !\A> <> <> <>]>)>)>
+       <SETG GLUE-MODE T>
+       <SETG PRE-LIST ()>
+       <SETG PRE-NAMES ()>
+       <SETG PRE-OPTS ()>
+       <SETG GLUE-LIST ()>
+       <SETG GLUE-PC 0>
+       <SETG MVECTOR (T FOO FOO)>
+       <MAPR <> <FUNCTION (B:<VECTOR LIST>) <PUT .B 1 ()>> ,MV-TABLE>
+       <SETG MV-COUNT 0>
+       <SETG FREE-CONSTS ()>
+       <SETG CONSTANT-VECTOR ()>
+       <MAPR <> <FUNCTION (B:<VECTOR LIST>) <PUT .B 1 ()>> ,CONSTANT-TABLE>
+       <SETG FINAL-LOCALS ()>
+       <SETG MV <REST ,MVECTOR 2>>
+       <COND (<AND <SET C <OPEN "READ" <1 .FILES>>>
+                   <SET OC <OPEN "PRINT" <SET ON <STRING <GET-NM1 <1 .FILES>>
+                                                 ".MSUBR">>>>
+                   <SET TOC <OPEN "PRINT" <SET TON <STRING <GET-NM1 <1 .FILES>>
+                                                           ".TMSUBR">>>>
+                   <OR <NOT ,MAX-SPACE>
+                       <SET TC <OPEN "PRINTB"
+                                     <SET TN <STRING <GET-NM1 <1 .FILES>>
+                                                      ".MIMOCTEMP">>>>>>
+              <SETG INCHANS (.C)>
+              <SET COMPILER-INPUT .C>
+              <SET FILES <REST .FILES>>
+              <REPEAT () 
+                <REPEAT (NAME ITM TMP SPN L X)
+                      #DECL ((NAME) ATOM (ITM) <OR <FORM ANY> FALSE>)
+                      <COND (<SET ITM <FINISH-FILE .C <> .EXPFLOAD>>
+                             <SET C <1 ,INCHANS>>
+                             <SET FCN-COUNT <+ .FCN-COUNT 1>>
+                             <COND (<AND ,SURVIVOR-MODE
+                                         <==? <1 <SET SPN <SPNAME <2 .ITM>>>>
+                                              <ASCII ,CTLZ>>>
+                                    <SET SPN <REST .SPN>>
+                                    <SET NAME <OR <LOOKUP .SPN ,FCN-OBL>
+                                                  <INSERT .SPN ,FCN-OBL>>>
+                                    <PUT .ITM 2 .NAME>
+                                    <COND (<MAPF <>
+                                                 <FUNCTION (X:<LIST ATOM LIST>)
+                                                      <COND (<AND <==? <1 .X>
+                                                                       .NAME>
+                                                                  <=? <2 .X>
+                                                                      .OBLIST>>
+                                                             <MAPLEAVE>)>>
+                                                 ,LIST-OF-FCNS>)
+                                          (ELSE
+                                           <SETG LIST-OF-FCNS
+                                                 ((.NAME <LIST !.OBLIST>)
+                                                  !,LIST-OF-FCNS)>)>)
+                                   (ELSE
+                                    <SET NAME <2 .ITM>>)>
+                             <COND
+                              (<NOT .LOWERSTR>
+                               <SET LOWERSTR
+                                <MAPF ,STRING
+                                 <FUNCTION (CHR "AUX" (I <ASCII .CHR>))
+                                   #DECL ((CHR) CHARACTER)
+                                   <COND (<AND <L=? .I <ASCII !\Z>>
+                                               <G=? .I <ASCII !\A>>>
+                                          <ASCII <+ .I 32>>)
+                                         (.CHR)>>
+                                 <SPNAME .NAME>>>)>
+                             <COND
+                              (<==? <1 .ITM> GFCN>
+                               <COND (<EMPTY? ,PRE-NAMES>
+                                      <PUT ,MVECTOR 2 .NAME>)>
+                               <SETG PRE-NAMES (.NAME !,PRE-NAMES)>
+                               <COND (<MEMBER "TUPLE" <3 .ITM>>
+                                      <SETG PRE-OPTS
+                                            (.NAME <> !,PRE-OPTS)>)
+                                     (<MEMBER "OPTIONAL" <3 .ITM>>
+                                      <SET TMP <READ .C>>
+                                      <MAPR <>
+                                            <FUNCTION (TP)
+                                                 #DECL ((TP) <LIST ATOM>)
+                                                 <PUT .TP 1
+                                                      <GENLBL
+                                                       <STRING <SPNAME <1 .TP>>
+                                                               <SPNAME .NAME>>>>>
+                                            <REST <CHTYPE .TMP LIST> 3>>
+                                      <SETG PRE-OPTS
+                                            (.NAME .TMP  !,PRE-OPTS)>)>)>
+                             <SET L <READ-LIST .C END '<ERROR EOF!-ERRORS>>>
+                             <COND (<N==? <1 .ITM> GFCN> <AGAIN>)>
+                             <MAPF <>
+                                   <FUNCTION (ITM "AUX" OP)
+                                        <COND
+                                         (<TYPE? .ITM FORM>
+                                          <COND
+                                           (<OR <==? <SET OP <1 .ITM>> BIND>
+                                                <==? .OP BBIND>
+                                                <AND <OR <==? .OP TUPLE>
+                                                         <==? .OP ADJ>>
+                                                     <NOT <TYPE? <2 .ITM> FIX>>>
+                                                <AND <MEMQ .OP
+                                                           '[CALL SCALL ACALL
+                                                             UBLOCK SBLOCK
+                                                             USBLOCK LIST]>
+                                                     <NOT <TYPE? <3 .ITM> FIX>>>>
+                                            <PUTPROP ,PRE-NAMES NDFRM T>
+                                            <MAPLEAVE>)>)>>
+                                   .L>)
+                            (ELSE <RETURN>)>>
+                <CLOSE .C>
+                <COND (<EMPTY? .FILES>
+                       <RETURN>)>
+                <COND (<SET C <OPEN "READ" <1 .FILES>>>
+                       <SETG INCHANS (.C)>
+                       <SET FILES <REST .FILES>>)
+                      (<ERROR .C FILE-GLUE>)>>
+              <DETERMINE-VICTIMS>
+              <SET FILES .TFILES>
+              <PUT .READ-TABLE ,CTLZ+1 <>>
+              <COND (<SET C <OPEN "READ" <1 .FILES>>>
+                     <SETG INCHANS (.C)>
+                     <SET FILES <REST .FILES>>)
+                    (<ERROR .C FILE-GLUE>)>
+              <REPEAT GLOOP (NAME L (NXT <>) (END <>) ITM (FCN-FOUND 0)
+                       (FIRST T) MSBASE (IFL ()))
+                  #DECL ((L) LIST (NAME) <SPECIAL ATOM> (NXT) <OR FALSE FORM>
+                         (END) <SPECIAL <OR FALSE ATOM>>
+                         (ITM) ANY (FCN-FOUND) FIX (IFL MSBASE) LIST)
+                  <REPEAT ()
+                          <COND (<SET ITM <FINISH-FILE .C .TOC .EXPFLOAD>>
+                                 <SET C <1 ,INCHANS>>
+                                 <SET FCN-FOUND <+ .FCN-FOUND 1>>
+                                 <RETURN <SET NXT .ITM>>)
+                                (T
+                                 <CLOSE .C>
+                                 <COND (<EMPTY? .FILES>
+                                        <RETURN T .GLOOP>)>
+                                 <COND (<SET C <OPEN "READ" <1 .FILES>>>
+                                        <SETG INCHANS (.C)>
+                                        <SET FILES <REST .FILES>>)
+                                       (<ERROR .C FILE-GLUE>)>)>>
+                  <SET L (.NXT !<READ-LIST .C END '<SET END T>>)>
+                  <COND (.END <CLOSE .C>)>
+                  <COND (,VERBOSE
+                         <OR <==? .OUTCHAN ,OUTCHAN>
+                             <PRINC <ASCII 12>>>
+                         <CRLF>
+                         <PRINC "Open coding: ">
+                         <PRIN1 <SET NAME <2 .NXT>>>)
+                        (ELSE
+                         <SET NAME <2 .NXT>>)>
+                  <PROCESS-IFSYS .L>
+                  <CALL-ANA .L>
+                  <MIMOC .L <AND ,SURVIVOR-MODE
+                                 <SET PN <FIND-CALL .NAME ,PRE-NAMES>>
+                                 <NOT <GETPROP .PN NDFRM>> 
+                                 <NOT <FIND-OPT .NAME ,PRE-OPTS>>
+                                 <NOT <SURVIVOR? .NAME>>>>
+                  <UNASSIGN NAME>
+                  <LOCATION-CHECK>
+                  <COND (,MAX-SPACE
+                         <PRINTTYPE LOCAL-NAME ,PRINT>
+                         <PRINTTYPE CONSTANT-LABEL ,PRINT>
+                         <FIXUP-ONE-GLUE <REST ,CODE> ,LABELS>
+                         <FIXUP-CONSTANTS <REST ,CODE> ()>
+                         <DUMP-CODE ,CODE .TC>
+                         <PRINTTYPE LOCAL-NAME ,PLOCAL-NAME>
+                         <PRINTTYPE CONSTANT-LABEL ,PCONST-LABEL>)>
+                  <MAPF <>
+                        <FUNCTION (LB) #DECL ((LB) LAB)
+                             <LAB-STATE .LB ()>
+                             <LAB-FINAL-STATE .LB <>>
+                             <LAB-DEAD-VARS .LB ()>
+                             <LAB-CODE-PNTR .LB ()>
+                             <REMOVE <LAB-NAM .LB>>>
+                        ,LABELS>
+                  <SETG GLUE-LIST (<SET MSBASE
+                                    (,GLUE-NAME
+                                     ,GLUE-DECL
+                                     ,GLUE-PC
+                                     <COND (,MAX-SPACE ()) (ELSE ,CODE)>
+                                     ,LABELS
+                                     ,GREFS
+                                     ,GCALS)>
+                                   !,GLUE-LIST)>
+                  <COND (.FIRST
+                         <SET FIRST <>>
+                         <SET MSUBR-ACCESS <DO-ACCESS .TOC>>)>
+                  <COND (<OR <NOT ,SURVIVOR-MODE>
+                             <SURVIVOR? <1 .MSBASE>>>
+                         <PRINT-ENTRY .MSBASE .TOC .LOWERSTR>)>
+                  <SETG GLUE-PC <+ ,GLUE-PC ,CODE-LENGTH>>
+                  <COND (<==? .FCN-COUNT .FCN-FOUND>
+                         <RETURN>)>>
+              <ALLOCATE-CONSTANTS ,CONSTANT-VECTOR  ,GLUE-PC>
+              <CLOSE .TOC>
+              <SET TFILE-LENGTH <- <FILE-LENGTH <SET TOC <OPEN "READ" .TON>>>
+                                   .MSUBR-ACCESS>>
+              <REPEAT ((BUFSTR <ISTRING 1024>))
+                      <COND (<L? .MSUBR-ACCESS 1024>
+                             <SET BUFSTR
+                                  <REST .BUFSTR <- 1024 .MSUBR-ACCESS>>>)>
+                      <COND (<NOT <EMPTY? .BUFSTR>>
+                             <READSTRING .BUFSTR .TOC>
+                             <PRINTSTRING .BUFSTR .OC>)>
+                      <COND (<L=? <SET MSUBR-ACCESS <- .MSUBR-ACCESS 1024>> 0>
+                             <RETURN>)>>
+              <COND (.TC
+                     <CLOSE .TC>
+                     <SET TC <OPEN "READB" .TN>>
+                     <COND (,VERBOSE
+                            <PRINC "
+Doing fixup and output
+">)>
+                     <SET NMSTR <WRITE-MSUBR .OC .LOWERSTR>>
+                     <MAPF <>
+                           <FUNCTION (FROB "AUX" (CODE <READ-CODE .TC>))
+                                #DECL ((FROB) <LIST ATOM LIST FIX LIST LIST>
+                                       (CODE) UVECTOR)
+                                <MAPF <>
+                                      <FUNCTION (X) #DECL ((X) <LIST FIX>)
+                                          <PUT .CODE
+                                               <1 .X>
+                                               <CHTYPE <ORB <NTH .CODE <1 .X>>
+                                                            <GFIND <2 .X> <3 .X>>>
+                                                       FIX>>>
+                                      <CHTYPE <7 .FROB> LIST>>
+                                <MAPF <>
+                                      <FUNCTION (X)
+                                           #DECL ((X) <LIST FIX CONSTANT-BUCKET>)
+                                           <PUT .CODE
+                                                <1 .X>
+                                                <ORB <NTH .CODE <1 .X>>
+                                                     <CB-LOC <2 .X>>>>>
+                                      <6 .FROB>>
+                                <MAPF <>
+                                      <FUNCTION (WRD)
+                                          <REPEAT ((I 4)) #DECL ((I) FIX)
+                                                  <PRINTBYTE
+                                                       <SET WRD 
+                                                            <CHTYPE
+                                                             <ROT .WRD 9> FIX>>>
+                                                  <COND (<==? <SET I <- .I 1>> 0>
+                                                         <RETURN>)>>>
+                                      .CODE>
+                                <SET LEN <+ <LENGTH .CODE> .LEN>>>
+                           ,GLUE-LIST>
+                     <CLOSE .TC>
+                     <DELFILE .TN>
+                     <SETG MAX-SPACE <>>
+                     <WRITE-CODE .OC .NMSTR () .OB .LEN>
+                     <AND ,INT-MODE <PRINTTYPE ATOM ,PRINT>>
+                     <REPEAT ((BUFSTR <ISTRING 1024>))
+                             #DECL ((BUFSTR) STRING)
+                             <COND (<L? .TFILE-LENGTH 1024>
+                                    <SET BUFSTR
+                                         <REST .BUFSTR <- 1024 .TFILE-LENGTH>>>)>
+                             <READSTRING .BUFSTR .TOC>
+                             <PRINTSTRING .BUFSTR .OC>
+                             <COND (<L? <SET TFILE-LENGTH
+                                             <- .TFILE-LENGTH  1024>> 0>
+                                    <RETURN>)>>
+                     <FINISH-FILE .C .OC .EXPFLOAD>
+                     <CLOSE .OC>)
+                    (ELSE
+                     <COND (,VERBOSE
+                            <PRINC "
+Fixing Up CALLs
+">)>
+                     <GLUE-FIXUP>
+                     <COND (,VERBOSE
+                            <PRINC "Writing MSUBR
+">)>
+                     <WRITE-MSUBR .OC .LOWERSTR>
+                     <REPEAT ((BUFSTR <ISTRING 1024>))
+                      #DECL ((BUFSTR) STRING)
+                      <COND (<L? .TFILE-LENGTH 1024>
+                             <SET BUFSTR
+                                  <REST .BUFSTR <- 1024 .TFILE-LENGTH>>>)>
+                      <READSTRING .BUFSTR .TOC>
+                      <PRINTSTRING .BUFSTR .OC>
+                      <COND (<L? <SET TFILE-LENGTH
+                                      <- .TFILE-LENGTH  1024>> 0>
+                             <RETURN>)>>
+              <FINISH-FILE .C .OC .EXPFLOAD>
+              <CLOSE .C>
+              <CLOSE .OC>)>
+              <CLOSE .TOC>
+              <DELFILE .TON>
+              ,NULL)
+             (ELSE
+              <COND (<AND <ASSIGNED? C> .C>
+                     <CLOSE .C>
+                     <COND (<AND <ASSIGNED? OC> .OC>
+                            <CLOSE .OC>
+                            <DELFILE .ON>
+                            <ERROR .TC>)
+                           (ELSE <ERROR .OC>)>)
+                    (ELSE
+                     <ERROR .C>)>)>>
+
+<DEFMAC DO-ACCESS ('CH)
+       <COND (<GASSIGNED? M-HLEN> <FORM ACCESS .CH>)
+             (ELSE <FORM 17 .CH>)>>
+
+<DEFINE SURVIVOR? (A "AUX" (SP <SPNAME .A>) (VL ,VICTIMS)) 
+       #DECL ((VL) LIST)
+       <NOT <OR <MEMQ .A .VL>
+                <MEMBER .SP .VL>
+                <MAPF <>
+                      <FUNCTION (OBJ) 
+                              <COND (<AND <TYPE? .OBJ LIST>
+                                          <=? <1 .OBJ> .SP>
+                                          <MEMQ <OBLIST? .A>
+                                                <CHTYPE <2 .OBJ> LIST>>>
+                                     <MAPLEAVE>)>>
+                      .VL>>>>
+
+<DEFMAC CHTYPE-OBLIST ('O)
+       <COND (<GASSIGNED? M-HLEN> <FORM CHTYPE .O ATOM>)
+             (ELSE <FORM GETPROP .O OBLIST>)>>
+
+<DEFINE DETERMINE-VICTIMS ("AUX" (VL ()) (LOF ,LIST-OF-FCNS))
+       #DECL ((VL LOF AO) LIST)
+       <MAPF <>
+             <FUNCTION (LL "AUX" (A <1 .LL>) (SP <SPNAME .A>) O (PP <>)
+                                 PO)
+                  #DECL ((LL) !<LIST ATOM LIST>)
+                  <COND (<OR <EMPTY? ,PRE-NAMES>
+                             <MAPR <>
+                                   <FUNCTION (PN "AUX" (NM <1 .PN>))
+                                        #DECL ((PN) LIST)
+                                        <COND (<=? <SPNAME .NM> .SP>
+                                               <SET PP .PN>
+                                               <MAPLEAVE <>>)
+                                              (ELSE T)>>
+                                   ,PRE-NAMES>
+                             <AND ,INT-MODE
+                                  <OR <L? <LENGTH .SP> 2>
+                                      <NOT <AND <==? <1 .SP> !\I>
+                                                <==? <2 .SP> !\$>>>>>
+                             <AND <SET O <OBLIST? .A>>
+                                  <SET O <OBLIST? <CHTYPE-OBLIST .O>>> 
+                                  <OR <==? .O ,PKG-OBL> <==? .O <ROOT>>>>
+                             <MAPF <>
+                                   <FUNCTION (NM)
+                                        <COND (<AND <=? <SPNAME .NM> .SP>
+                                                    <MEMQ <OBLIST? .NM> <2 .LL>>>
+                                               <MAPLEAVE T>)>>
+                                   ,SURVIVORS>>)
+                        (<NOT <MAPF <>
+                               <FUNCTION (O)
+                                    <COND (<LOOKUP .SP .O> <MAPLEAVE>)>>
+                               <2 .LL>>>
+                         <SET VL ((.SP <2 .LL>) !.VL)>)>
+                  <COND (.PP
+                         <PUT .PP 1 <OR <MAPF <>
+                                              <FUNCTION (O "AUX" AA)
+                                                   <COND (<SET AA
+                                                               <LOOKUP .SP
+                                                                       .O>>
+                                                          <MAPLEAVE .AA>)>>
+                                              <2 .LL>>
+                                        <INSERT .SP <1 <2 .LL>>>>>
+                         <COND (<SET PO <MEMQ .A ,PRE-OPTS>>
+                                <PUT .PO 1 <1 .PP>>)>)>>
+             .LOF>
+       <SETG VICTIMS (!,VICTIMS !.VL)>
+       <SETG FIRST-PASS-SURVIVOR-GLUE <>>>
+
+<GDECL (GLUE-LIST) <LIST [REST LIST]>>
+
+<DEFINE PRINT-ENTRY (MSBASE OUTCHAN LOWERSTR)
+  #DECL ((MSBASE) LIST (OUTCHAN) CHANNEL)
+  <COND (,INT-MODE <PRINTTYPE ATOM ,ATOM-PRINT>)>
+  <WIDTH-MUNG .OUTCHAN 100000000>
+  <PRINC "<SETG " .OUTCHAN>
+  <PRIN1 <1 .MSBASE> .OUTCHAN>
+  <PRINC " #MSUBR [" .OUTCHAN>
+  <PRINC .LOWERSTR .OUTCHAN>
+  <COND (,INT-MODE <PRINC "!-IMSUBR!- " .OUTCHAN>)
+       (ELSE <PRINC "-IMSUBR " .OUTCHAN>)>
+  <PRIN1 <1 .MSBASE> .OUTCHAN>
+  <PRINC !\  .OUTCHAN>
+  <PRIN1 <2 .MSBASE> .OUTCHAN>
+  <PRINC !\  .OUTCHAN>
+  <PRIN1 <3 .MSBASE> .OUTCHAN>
+  <PRINC "]>" .OUTCHAN>
+  <CRLF .OUTCHAN>
+  <COND (,INT-MODE <PRINTTYPE ATOM ,PRINT>)>
+  <WIDTH-MUNG .OUTCHAN 80>>
+
+<DEFINE FINISH-FILE (INCHAN OUTCHAN EXPFLOAD "OPTIONAL" END?
+                    (EVAL? T) "AUX" (IND '(1)) (WORD-OK? <>))
+  #DECL ((INCHAN) CHANNEL (OUTCHAN) <OR CHANNEL FALSE>
+        (END?) <VECTOR [REST ATOM]> (EXPFLOAD EVAL?) <OR ATOM FALSE>)
+  <COND (<NOT <ASSIGNED? END?>>
+        <SET WORD-OK? T>
+        <SET END? '[FCN GFCN]>)>
+  <REPEAT (ITM NCH)
+    <COND (<==? <SET ITM <READ .INCHAN '.IND>> .IND>
+          <CLOSE .INCHAN>
+          <COND (<EMPTY? <SETG INCHANS <REST ,INCHANS>>>
+                 <RETURN <>>)>
+          <SET INCHAN <1 ,INCHANS>>
+          <AGAIN>)>
+    <COND (<NOT <OR <TYPE? .ITM STRING CHARACTER FIX>
+                   <AND <TYPE? .ITM ATOM>
+                        <=? <SPNAME .ITM> "\f">>>>
+          <COND (<AND <TYPE? .ITM FORM>
+                      <NOT <EMPTY? .ITM>>
+                      <MEMQ <1 .ITM> .END?>>
+                 <RETURN .ITM>)
+                (<AND .WORD-OK? <TYPE? .ITM WORD>>
+                 <COND (<OR ,INT-MODE ,BOOT-MODE ,GLUE-MODE> <AGAIN>)>
+                 <COND (.OUTCHAN
+                        <PRINC ,WORD-STRING .OUTCHAN>
+                        <PRIN-OCT <CHTYPE .ITM FIX> .OUTCHAN>
+                        <CRLF .OUTCHAN>)>
+                 <RETURN .ITM>)>
+          <COND (<AND .EXPFLOAD
+                      <TYPE? .ITM FORM>
+                      <NOT <EMPTY? .ITM>>
+                      <COND (<==? <1 .ITM> FLOAD>
+                             <SET NCH <OPEN "READ" !<REST .ITM>>>)
+                            (<==? <1 .ITM> L-FLOAD>
+                             <SET NCH <L-OPEN <2 .ITM>>>)>>
+                 <SET INCHAN .NCH>
+                 <SETG INCHANS (.NCH !,INCHANS)>)
+                (T
+                 <COND (.EVAL?
+                        <PROG (SG AZ TMP)
+                              <COND (<AND <TYPE? .ITM FORM>
+                                           <NOT <EMPTY? .ITM>>
+                                           <MEMQ <1 .ITM>
+                                                 '[INCLUDE-WHEN USE-WHEN]>
+                                           <NOT <EMPTY? <REST .ITM>>>
+                                           <TYPE? <SET TMP <2 .ITM>> FORM>
+                                           <NOT <EMPTY? .TMP>>
+                                           <==? <1 .TMP> COMPILING?>>
+                                      <EVAL .ITM>
+                                      <PUT .TMP 1 DEBUGGING?>)
+                                     (ELSE
+                                      <EVAL .ITM>)>>)>
+                 <COND (.OUTCHAN
+                        <COND (,INT-MODE <PRINTTYPE ATOM ,ATOM-PRINT>)>
+                        <PRINTTYPE CHARACTER ,CHR-PRINT>
+                        <WIDTH-MUNG .OUTCHAN 100000>
+                        <PRIN1 .ITM .OUTCHAN>
+                        <CRLF .OUTCHAN>
+                        <WIDTH-MUNG .OUTCHAN 80>
+                        <COND (,INT-MODE <PRINTTYPE ATOM ,PRINT>)>
+                        <PRINTTYPE CHARACTER ,PRINT>)>)>)>>>
+
+<DEFINE PRIN-OCT (X CH)
+       #DECL ((X) FIX)
+       <PRINC !\* .CH>
+       <COND (<0? .X> <PRINC !\0 .CH>)
+             (ELSE <POCT .X .CH>)>
+       <PRINC !\* .CH>>
+
+<DEFINE POCT (X CH) #DECL ((X) FIX)
+       <COND (<N==? .X 0>
+              <POCT <LSH .X -3> .CH>
+              <PRINC <ASCII <+ <ANDB .X 7> <ASCII !\0>>> .CH>)>>
+
+
+<GDECL (SUBRIFIED-PKGS SUBRIFIED-MSUBRS) <LIST [REST ATOM]>>
+
+<DEFINE SUBRIFY? (NAME "AUX" (OBL <OBLIST? .NAME>) MS OO)
+       <COND (<AND <GASSIGNED? .NAME>
+                   <TYPE? <SET MS ,.NAME> MSUBR>
+                   <OR <AND .OBL
+                            <OR <==? <SET OO <OBLIST? <CHTYPE .OBL ATOM>>>
+                                     #OBLIST PACKAGE>
+                                <AND <==? <OBLIST? <CHTYPE .OO ATOM>>
+                                          #OBLIST PACKAGE>
+                                     <SET OBL .OO>>>
+                            <MEMQ <CHTYPE .OBL ATOM> ,SUBRIFIED-PKGS>>
+                       <MEMQ .NAME ,SUBRIFIED-MSUBRS>>>
+              <CHTYPE [.NAME
+                       <REPEAT ((DCL:LIST <REST <3 .MS> 2>) (CNT:FIX 0) IT)
+                               <COND (<EMPTY? .DCL> <RETURN .CNT>)>
+                               <COND (<NOT <TYPE? <SET IT <1 .DCL>> STRING>>
+                                      <SET CNT <+ .CNT 1>>)
+                                     (<MEMQ .IT '["OPT" "OPTIONAL" "TUPLE"]>
+                                      <RETURN <>>)>
+                               <SET DCL <REST .DCL>>>] SUBR-INFO>)>>
+
+<DEFINE PRINT-SUBR-INFO (S:SUBR-INFO)
+       <PRINC "%<SUBR-ENTRY ">
+       <PRIN1 <1 .S>>
+       <PRINC ">">>
+
+<COND (<GASSIGNED? PRINT-SUBR-INFO>
+       <PRINTTYPE SUBR-INFO ,PRINT-SUBR-INFO>)>
\ No newline at end of file