A Dynamic Debugging System for MDL, Joel Berez 1978.
[pdp10-muddle.git] / <mdl.comp> / mudref.mud.1
1
2         <NEWTYPE        MUDREF!-OP WORD>
3
4
5         <TITLE  MUDREFIN>
6         <DECLARE ("VALUE" MUDREF!-OP CHARACTER)>
7         <PUSH   TP* (AB)>
8         <PUSH   TP* 1(AB)>
9         <PUSHJ  P* MUDR1>
10         <JRST   FINIS>
11
12         <INTERNAL-ENTRY MUDR1 1>
13         <SUBM   M* (P)>
14         <SUB    TP* [<2 (2)>]>                  ; "CLEAN OFF USELESS ARGUMENT"
15         <PUSH   P* [0]>                         ; "NUMBER OF ARGUMENTS TO STRING"
16         <MOVSI  A* <TYPE-CODE ATOM>>            ; "GET CHANNEL AND PUSH IT"
17         <MOVE   B* <MQUOTE INCHAN>>
18         <PUSHJ  P* CILVAL>
19         <PUSH   TP* A>
20         <PUSH   TP* B>
21         <PUSH   P* [0]>
22 LP1     <MOVE   A* -1(TP)>
23         <MOVE   B* (TP)>
24         <PUSHJ  P* CNXTC1>
25         <CAIE   B* <ASCII !"$>>
26         <CAIN   B* <ASCII !".>>
27         <JRST   LP3>
28         <CAIN   B* <ASCII !"%>>
29         <JRST   LP3>
30         <CAIG   B* *132*>                       ; "Between 0 and Z?"
31         <CAIGE  B* *57*>
32         <JRST   LP2>
33         <CAILE  B* *71*>                        ; "Skip if digit."
34         <CAILE  B* *100*>                       ; "Skip if an upper case letter."
35 LP3     <SKIPA  B* (TP)>                        ; "GET BACK CHANNEL"
36         <JRST   LP2>
37         <PUSHJ  P* CREDC1>
38         <MOVE   A* (P)>
39         <TLNE   A* *770000*>
40         <JRST   LP1>
41         <LSH    A* 6>
42         <SUBI   B* *40*>
43         <DPB    B* [<(*000600* ) A>]>
44         <MOVEM  A* (P)>
45         <JRST   LP1>
46 LP2
47 ISYM    <MOVSI  C* (<CHTYPE <* *50* *50* *50* *50* *50* *50*> OPCODE>)>
48         <MOVEI  B* 0>
49         <MOVE   E* [<(*440600*) (P)>]>
50
51 ISYM0   <ILDB   A* E>
52         <JUMPE  A* ISYM0>
53         <SUBI   A* <- <ASCII !"0> 33>>
54         <CAIL   A* <- <ASCII !"A> <ASCII !"0> -1>>
55         <SUBI   A* <- <ASCII !"A> <ASCII !"0> *12*>>
56         <JUMPGE A* ISYM2>
57         <ADDI   A* *61*>
58         <CAIN   A* *60*>
59         <MOVEI  A* *45*>
60 ISYM2   <IDIVI  C* *50*>
61         <IMUL   A* C>
62         <ADDM   A* B>
63         <TLNE   E* *770000*>
64         <JRST   ISYM0>
65
66 ISYM3   <MOVSI  A* <TYPE-CODE MUDREF!-OP >>
67         <SUB    P* [<2 (2)>]>
68         <JRST   MPOPJ>
69
70
71
72         <SUB-ENTRY OUTPUT-MUDREF ("VALUE" ANY MUDREF!-OP )>
73         <PUSH   TP* (AB)>
74         <PUSH   TP* 1 (AB)>
75         <PUSHJ  P* IOUT>
76         <JRST   FINIS>
77
78         <INTERNAL-ENTRY IOUT 1>
79         <SUBM   M* (P)>
80         <MOVSI  A* <TYPE-CODE ATOM>>
81         <MOVE   B* <MQUOTE OUTCHAN>>
82         <PUSHJ  P* CILVAL>
83         <PUSH   TP* A>
84         <PUSH   TP* B>
85         <GETYP E* A>
86         <CAIE E* <TYPE-CODE CHANNEL>>
87         <JRST STARTP>
88         <MOVE E* 27 (B)>
89         <ADDI E* 7>
90         <CAMGE E* 25 (B)>
91         <JRST STARTP>
92         <MOVEI D* 13>           ; "Carriage ret lf first"
93         <PUSHJ  P* CPCH>
94         <MOVEI  D* 10>
95         <MOVSI  A* <TYPE-CODE CHANNEL>>
96         <MOVE   B* (TP)>
97         <PUSHJ  P* CPCH>
98         <MOVSI  A* <TYPE-CODE CHANNEL>>
99         <MOVE   B* (TP)>
100
101 STARTP  <MOVEI  D* <ASCII !"|>>
102         <PUSHJ  P* CPCH>
103 LPS     <MOVE   D* -2 (TP)>
104         <PUSHJ  P* SPT1>
105         <POP    TP* B>
106         <POP    TP* A>
107         <MOVEI  D* <ASCII !" >>
108         <PUSHJ  P* CPCH>
109 LEAVE   <SUB    TP* [<2 (2)>]>
110         <JRST   MPOPJ>
111
112 SPT1    <SUBM   M* (P)>
113 SPT2    <IDIVI  D* *50*>
114         <HRLM   E* (P)>
115         <JUMPE  D* SPT3>
116         <JUMPE  E* SPT2>
117         <PUSHJ  P* SPT1>
118 SPT3    <HLRE   D* (P)>
119         <ADDI   D* <- <ASCII !"0> 1>>
120         <CAILE  D* <ASCII !"9>>
121         <ADDI   D* <- <ASCII !"A> <ASCII !"9> 1>>
122         <CAILE  D* <ASCII !"Z>>
123         <SUBI   D* <- <ASCII !"Z> <ASCII !"#> -1>>
124         <CAIN   D* <ASCII !"#>>
125         <MOVEI  D* <ASCII !".>>
126         <CAIN   D* <ASCII !"/>>
127 SPC     <MOVEI  D* *40*>
128         <MOVE   A* -1 (TP)>
129         <MOVE   B* (TP)>
130         <PUSHJ  P* CPCH>
131         <HRROS  (P)>
132         <JRST   MPOPJ>
133
134
135 \f\ 3\ 3