1 "DYNAMIC LOADER - USES 2 LIBRARY FILES AND RELATIVE ACCESS POINTERS"
3 "Expects ERROR to have been SETGd to the proper thing. See FLODYN bootstrapper."
6 <BLOCK <SETG NDYN!- (<MOBLIST NDYN!- 37> <ROOT>)>>
9 "Each library specification is a vector of four elements."
11 <SETG MLIB <EVAL <SETG ULIB [ [] ;"Vector of PNAMEs"
12 ![] ;"Uvector of relative access pointers."
13 #FALSE () ;"Channel to library."
14 0 ;"Base of access." ]>>>
18 <DEFINE NEWLIB OUTNEW (WHERE "AUX" (LIBVEC <IVECTOR 4>))
19 <PUT .LIBVEC 3 <OPEN "READ" !.WHERE>>
21 <PUT .LIBVEC 1 <READ '<EXIT .OUTNEW <ERROR NO-PNAME-VECTOR!-ERRORS NEWLIB>>
23 <PUT .LIBVEC 2 <READ '<EXIT .OUTNEW <ERROR NO-ACCESS-VECTOR!-ERRORS NEWLIB>>
25 <PUT .LIBVEC 4 <17 <3 .LIBVEC>>>)>
31 <AND <3 ,ULIB> <NOT <0? <1 <3 ,ULIB>>>> <CLOSE <3 ,ULIB>>>
32 <SETG ULIB <NEWLIB ("NMUDLI")>>
33 <AND <3 ,MLIB> <NOT <0? <1 <3 ,MLIB>>>> <CLOSE <3 ,MLIB>>>
34 <SETG MLIB <NEWLIB ("NMUDLI" ">" "DSK" "MUDDLE")>>
39 "Error checker. Calls dynamic loader."
41 <SETG RERR <FUNCTION (TR)
42 <COND (<AND <==? 3 <LENGTH .TR>>
43 <==? UNBOUND-VARIABLE!-ERRORS <1 .TR>>
46 (ELSE <FORM REAL.ERROR !.TR>)>>>
49 "Real dynamic loader."
51 <DEFINE FLODYN (ATM "AUX" (PNAM <PNAME .ATM>) T1)
52 <COND (<AND <SET T1 <LOOKUP .PNAM <1 ,NDYN>>>
54 <EXIT .ERRACT <SETG .ATM ,.T1>>)
55 (<SET T1 <OR <DIRLOAD .PNAM '()>
56 <SET T1 <LIBLOAD .PNAM ,ULIB>>
57 <DIRLOAD .PNAM '("DSK" "MUDDLE")>
58 <SET T1 <LIBLOAD .PNAM ,MLIB>>
60 <COND (<GASSIGNED? .ATM> <EXIT .ERRACT ,.ATM>)
61 (<ASSIGNED? .ATM> <EXIT .ERRACT ..ATM>)
62 (ELSE <EXIT .ERRACT <SETG .ATM .T1>>)>)>>
64 "Loader from directories."
66 <DEFINE DIRLOAD (PN WHERE "AUX" (THERE <OPEN "READ" .PN ">" !.WHERE>))
67 <AND .THERE <LOAD .THERE> <CLOSE .THERE>>>
69 "Loader from libraries"
70 "Expects USEROB to have been given a GVAL by BOOT."
72 <DEFINE LIBLOAD (PN LIBR "OPTIONAL" (ROBL ,USEROB) "AUX" TLS)
73 <COND (<AND <3 .LIBR> <NOT <0? <1 <3 .LIBR>>>> <SET TLS <MEMBER .PN <1 .LIBR>>>>
75 <+ <4 .LIBR> <<- <LENGTH <1 .LIBR>> <LENGTH .TLS> -1> <2 .LIBR>>>>
76 <SET TLS <EVAL <READ '<ERROR OVERRAN-END-OF-FILE!-ERRORS LIBLOAD><3 .LIBR> .ROBL>>>
77 <COND (<==? <TYPE .TLS> ATOM> ,.TLS) (ELSE .TLS)>)>>
79 <SETG SPECR ![PPRINF!- FRM!- PF!- TRACEF!- ]>
81 <SETG SPECF <UVECTOR ("TRACE" ">" "DSK" "MUDDLE")
82 ("LF" ">" "DSK" "MUDDLE")
83 ("FRAMES" ">" "DSK" "MUDDLE")
84 ("PPRINT" ">" "DSK" "MUDDLE")>>
86 <DEFINE SPECLOAD (ATM "AUX" (T <MEMQ .ATM ,SPECR>)) <AND .T <FLOAD !<<LENGTH .T> ,SPECF>>>>
89 \f\ 3\f\ 3ð`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\að`Á
\83\a