ITS Muddle.
[pdp10-muddle.git] / MUDDLE / flodyn.1
1                 "DYNAMIC LOADER - USES 2 LIBRARY FILES AND RELATIVE ACCESS POINTERS"
2
3 "Expects ERROR to have been SETGd to the proper thing.  See FLODYN bootstrapper."
4
5
6 <BLOCK <SETG NDYN!- (<MOBLIST NDYN!- 37> <ROOT>)>>
7
8
9 "Each library specification is a vector of four elements."
10
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." ]>>>
15
16 "Library setup."
17
18 <DEFINE NEWLIB OUTNEW (WHERE "AUX" (LIBVEC <IVECTOR 4>))
19         <PUT .LIBVEC 3 <OPEN "READ" !.WHERE>>
20         <COND (<3 .LIBVEC>
21                 <PUT .LIBVEC 1 <READ '<EXIT .OUTNEW <ERROR NO-PNAME-VECTOR!-ERRORS NEWLIB>>
22                                       <3 .LIBVEC>>>
23                 <PUT .LIBVEC 2 <READ '<EXIT .OUTNEW <ERROR NO-ACCESS-VECTOR!-ERRORS NEWLIB>>
24                                       <3 .LIBVEC>>>
25                 <PUT .LIBVEC 4 <17 <3 .LIBVEC>>>)>
26         .LIBVEC>
27
28 "Initializer."
29
30 <DEFINE LIBINIT ()
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")>>
35         "DONE">
36
37 <LIBINIT>
38
39 "Error checker. Calls dynamic loader."
40
41 <SETG RERR <FUNCTION (TR)
42          <COND (<AND <==? 3 <LENGTH .TR>>
43                      <==? UNBOUND-VARIABLE!-ERRORS <1 .TR>>
44                      <==? VALUE <3 .TR>>
45                      <FLODYN <2 .TR>>>)
46               (ELSE <FORM REAL.ERROR !.TR>)>>>
47
48
49 "Real dynamic loader."
50
51 <DEFINE FLODYN (ATM "AUX" (PNAM <PNAME .ATM>) T1)
52         <COND (<AND <SET T1 <LOOKUP .PNAM <1 ,NDYN>>>
53                     <GASSIGNED? .T1>>
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>>
59                            <SPECLOAD .ATM>>>
60                 <COND (<GASSIGNED? .ATM> <EXIT .ERRACT ,.ATM>)
61                       (<ASSIGNED? .ATM> <EXIT .ERRACT ..ATM>)
62                       (ELSE <EXIT .ERRACT <SETG .ATM .T1>>)>)>>
63
64 "Loader from directories."
65
66 <DEFINE DIRLOAD (PN WHERE "AUX" (THERE <OPEN "READ" .PN ">" !.WHERE>))
67         <AND .THERE <LOAD .THERE> <CLOSE .THERE>>>
68
69 "Loader from libraries"
70 "Expects USEROB to have been given a GVAL by BOOT."
71
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>>>>
74                 <ACCESS <3 .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)>)>>
78
79 <SETG SPECR ![PPRINF!- FRM!- PF!- TRACEF!- ]>
80
81 <SETG SPECF <UVECTOR    ("TRACE" ">" "DSK" "MUDDLE")
82                         ("LF" ">" "DSK" "MUDDLE")
83                         ("FRAMES" ">" "DSK" "MUDDLE")
84                         ("PPRINT" ">" "DSK" "MUDDLE")>>
85
86 <DEFINE SPECLOAD (ATM "AUX" (T <MEMQ .ATM ,SPECR>)) <AND .T <FLOAD !<<LENGTH .T> ,SPECF>>>>
87
88 <ENDBLOCK>
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