Trailing-Edge
-
PDP-10 Archives
-
BB-H311B-RM
-
rsx20f-swskit/listings/ufd.lis
There are no other files named ufd.lis in the archive.
CDT2B - CONVERT FROM DECIMAL TO MACRO M1108 05-DEC-77 21:11 PAGE 3
1 .TITLE CDT2B - CONVERT FROM DECIMAL TO TWO BINARY WORDS
2 .IDENT /01/
3 ;
4 ;
5 ; COPYRIGHT (C) 1974, 1978 BY
6 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD MASS.
7 ;
8 ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
9 ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION
10 ; OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES THERE-
11 ; OF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON.
12 ; NO TITLE TO OR OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
13 ;
14 ; THE INFORMATION CONTAINED IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
15 ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
16 ; CORPORATION.
17 ;
18 ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
19 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPILED BY DIGITAL.
20 ;
21
22 ;
23 ; VERSION: V001A
24 ; BY: STEVE HORT
25 ; DATE: 03/26/74
26 ;
27 .MCALL RETURN
CDT2B - CONVERT FROM DECIMAL TO MACRO M1108 05-DEC-77 21:11 PAGE 4
29 ;+
30 ; *** - .CDT2B - CONVERT A DECIMAL NUMBER TO TWO BINARY WORDS.
31 ; THIS SUBROUTINE CONVERTS AN ASCII DECIMAL NUMBER STRING
32 ; TO A DOUBLE LENGTH BINARY NUMBER.
33 ;
34 ; INPUT:
35 ; R0 - ADDRESS OF NEXT CHARACTER IN BUFFER (DECIMAL DIGIT)
36 ; R1 - ADDRESS OF TWO WORD FIELD TO HOLD CONVERTED NUMBER
37 ; WORD 1 - LOW ORDER 16 BITS
38 ; WORD 2 - HIGH ORDER 16 BITS
39 ;
40 ; OUTPUT:
41 ; R0 - UPDATED BUFFER POINTER (NEXT CHARACTER + 1)
42 ; R1 - REMAINS UNCHANGED
43 ; R2 - NEXT CHARACTER IN STRING
44 ;
45 ; CC-C
46 ; CLEAR - 16 BIT NUMBER ONLY
47 ; SET - 32 BIT NUMBER
48 ;
49 ;-
50
51 000000 005011 .CDT2B::CLR (R1) ; ZERO LOW ORDER 16 BITS
52 000002 005061 000002 CLR 2(R1) ; ZERO HIGH ORDER 16 BITS
53 000006 112002 10$: MOVB (R0)+,R2 ; YES, FETCH IT NOW
54 000010 122702 000060 CMPB #'0,R2 ; CHECK FOR POSSIBLE DECIMAL DIGIT
55 000014 101025 BHI 20$ ; NOT A DECIMAL CHARACTER
56 000016 122702 000071 CMPB #'9,R2 ; LAST CHANCE TO BE IN RANGE
57 000022 103422 BLO 20$ ; DEFINITELY NOT DECIMAL
58 000024 162702 000060 SUB #60,R2 ; CONVERT TO A BINARY DIGIT
59 000030 006321 ASL (R1)+ ; MULTIPLY CURRENT BINARY NUMBER BY
60 000032 006111 ROL (R1) ; USE FULL 32 BIT ACCURACY
61 000034 011146 MOV (R1),-(SP) ; SAVE HIGH ORDER BITS
62 000036 014146 MOV -(R1),-(SP) ; SAVE LOW ORDER BITS
63 000040 006321 ASL (R1)+ ; MULTIPLY AGAIN BY
64 000042 006111 ROL (R1) ; KEEP THOSE BITS MOVING
65 000044 006341 ASL -(R1) ; MAKE TOTAL MULTIPLICATION BY 8
66 000046 006161 000002 ROL 2(R1) ; NOW HAVE (NEW NUMBER) = (OLD NUMBER)*8
67 000052 062621 ADD (SP)+,(R1)+ ; ADD BACK (OLD NUMBER)*2
68 000054 005511 ADC (R1) ; ADD ANY OVERFLOW TO HIGH ORDER
69 000056 062611 ADD (SP)+,(R1) ; NOW HAVE (NEW NUMBER) = (OLD NUMBER)*10
70 000060 060241 ADD R2,-(R1) ; ADD THIS DECIMAL DIGIT TO MAKE NEW TOTAL
71 000062 005561 000002 ADC 2(R1) ; MAKE SURE OVERFLOW IS CONSIDERED
72 000066 000747 BR 10$ ; GO GET NEXT DIGIT
73 000070 005761 000002 20$: TST 2(R1) ; MORE THAN 16 BITS IN CONVERTED NUMBER?
74 000074 001401 BEQ 30$ ; YES
75 000076 000261 SEC ; NO, SO SET THE 32-BIT FLAG
76 000100 30$: RETURN ; RETURN TO CALLER
77 ;
78 000001 .END
CDT2B - CONVERT FROM DECIMAL TO MACRO M1108 05-DEC-77 21:11 PAGE 4-1
SYMBOL TABLE
E$$MSG= 000001 F$$LVL= 000001 R$$10F= 000001 R$$20F= 000001 .CDT2B 000000RG
E$$TRP= 000001 M$$HDR= 000001 R$$11D= 000001
. ABS. 000000 000
000102 001
ERRORS DETECTED: 0
VIRTUAL MEMORY USED: 146 WORDS ( 1 PAGES)
DYNAMIC MEMORY: 3104 WORDS ( 11 PAGES)
ELAPSED TIME: 00:00:04
[53,10]CDT2B,[53,20]CDT2B/-SP=[53,30]RSXDC,CDT2B
RSXDC MACRO M1108 05-DEC-77 21:11 PAGE 3
1 ; COPYRIGHT (C) 1975, 1978 BY
2 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD MASS.
3 ;
4 ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
5 ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION
6 ; OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES THERE-
7 ; OF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON.
8 ; NO TITLE TO OR OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
9 ;
10 ; THE INFORMATION CONTAINED IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
11 ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
12 ; CORPORATION.
13 ;
14 ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
15
16 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPILED BY DIGITAL.
17
18
19 .MCALL RETURN
20 000000 000241 .CKPRV:: CLC
21 000002 RETURN
22 000001 .END
RSXDC MACRO M1108 05-DEC-77 21:11 PAGE 3-1
SYMBOL TABLE
E$$MSG= 000001 F$$LVL= 000001 R$$10F= 000001 R$$20F= 000001 .CKPRV 000000RG
E$$TRP= 000001 M$$HDR= 000001 R$$11D= 000001
. ABS. 000000 000
000004 001
ERRORS DETECTED: 0
VIRTUAL MEMORY USED: 126 WORDS ( 1 PAGES)
DYNAMIC MEMORY: 3104 WORDS ( 11 PAGES)
ELAPSED TIME: 00:00:03
[53,10]CKPRV,[53,20]CKPRV/-SP=[53,30]RSXDC,CKPRV
COT2B - CONVERT FROM OCTAL TO T MACRO M1108 05-DEC-77 21:11 PAGE 3
1 .TITLE COT2B - CONVERT FROM OCTAL TO TWO BINARY WORDS
2 .IDENT "01"
3 ;
4 ; COPYRIGHT (C) 1973, 1978 BY
5 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD MASS.
6 ;
7 ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
8 ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION
9 ; OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES THERE-
10 ; OF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON.
11 ; NO TITLE TO OR OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
12 ;
13 ; THE INFORMATION CONTAINED IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
14 ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
15 ; CORPORATION.
16 ;
17 ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
18 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPILED BY DIGITAL.
19 ;
20 ;
21
22 ;
23 ; VERSION: 01
24 ; BY: H.LEV
25 ; DATE: 09/19/73
26 ;
27 .MCALL RETURN
28
29 ;+
30 ; *** - .COT2B - CONVERT OCTAL NUMBER TO TWO BINARY WORDS
31 ; THIS SUBROUTINE CONVERTS AN ASCII OCTAL
32 ; NUMBER TO BINARY. IT ACCEPTS ONLY
33 ; OCTAL DIGITS.
34 ;
35 ; INPUT:
36 ; R0 - ADDRESS OF NEXT DIGIT IN BUFFER FOR NUMBER
37 ; R1 - ADDRESS OF TWO WORD FIELD TO PUT CONVERTED NUMBER IN
38 ; WORD 1 - LOW 16 BITS
39 ; WORD 2 - HIGH 16 BITS
40 ;
41 ; OUTPUT:
42 ; R0 - UPDATED BUFFER POINTER
43 ; R1 - UNCHANGED
44 ; R2 - TERMINATING CHARACTER
45 ;
46 ; CARRY BIT
47 ; CLEAR - ONLY 16 BIT NUMBER
48 ; SET - 32 BIT NUMBER
49 ;
50 ;-
51 000000 005011 .COT2B::CLR (R1) ; ZERO OUT LOW 16 BITS
52 000002 005061 000002 CLR 2(R1) ; ZERO OUT HIGH 16 BITS
53 000006 112002 10$: MOVB (R0)+,R2 ; GET NEXT CHARACTER
54 000010 120227 000060 CMPB R2,#'0 ; IS IT <0 ?
55 000014 002420 BLT 30$ ; YES
56 000016 120227 000067 CMPB R2,#'7 ; IS IT >7 ?
57 000022 003015 BGT 30$ ; YES
COT2B - CONVERT FROM OCTAL TO T MACRO M1108 05-DEC-77 21:11 PAGE 3-1
58 000024 042702 177770 BIC #177770,R2 ; STRIP OF ASCII BITS
59 000030 012746 000003 MOV #3,-(SP) ; SET SHIFT COUNT
60 000034 000241 20$: CLC ; ZERO CARRY BIT
61 000036 006111 ROL (R1) ; ROTATE BIT 15
62 000040 006161 000002 ROL 2(R1) ; INTO BIT 16
63 000044 005316 DEC (SP) ; DONE ?
64 000046 001372 BNE 20$ ; NO, LOOP FOR THREE BITS
65 000050 005726 TST (SP)+ ; POP OFF COUNTER
66 000052 050211 BIS R2,(R1) ; PUT IT IN
67 000054 000754 BR 10$ ; GET NEXT DIGIT
68 000056 005761 000002 30$: TST 2(R1) ; IS THERE MORE THAN 16 BITS ?
69 000062 001401 BEQ 50$ ; NO
70 000064 000261 SEC ; YES, SET 32 BIT FLAG
71 000066 50$: RETURN ; RETURN TO CALLER
72
73 000001 .END
COT2B - CONVERT FROM OCTAL TO T MACRO M1108 05-DEC-77 21:11 PAGE 3-2
SYMBOL TABLE
E$$MSG= 000001 F$$LVL= 000001 R$$10F= 000001 R$$20F= 000001 .COT2B 000000RG
E$$TRP= 000001 M$$HDR= 000001 R$$11D= 000001
. ABS. 000000 000
000070 001
ERRORS DETECTED: 0
VIRTUAL MEMORY USED: 151 WORDS ( 1 PAGES)
DYNAMIC MEMORY: 3104 WORDS ( 11 PAGES)
ELAPSED TIME: 00:00:04
[53,10]COT2B,[53,20]COT2B/-SP=[53,30]RSXDC,COT2B
GTCML - GET COMMAND LINE WITH C MACRO M1108 05-DEC-77 21:11 PAGE 3
1 .TITLE GTCML - GET COMMAND LINE WITH CONTINUATIONS
2
3 .IDENT "V0004"
4
5 ; COPYRIGHT (C) 1975, 1978 BY
6 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD MASS.
7 ;
8 ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
9 ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION
10 ; OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES THERE-
11 ; OF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON.
12 ; NO TITLE TO OR OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
13 ;
14 ; THE INFORMATION CONTAINED IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
15 ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
16 ; CORPORATION.
17 ;
18 ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
19 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPILED BY DIGITAL.
20 ;
21 ;
22 ; ANDREW C. GOLDSTEIN 23 JAN 75 19:57
23
24 ;
25 ; THIS ROUTINE ACCEPTS A COMMAND LINE WITH CONTINUATIONS FOR THE FILES
26 ; MCR FUNCTIONS. IT FIRST GETS THE MCR COMMAND LINE. IF THERE IS NONE,
27 ; OR IF CONTINUATIONS ARE CALLED FOR, IT PROMPTS AND READS INPUT FROM
28 ; THE TASK'S LUN #1, WHICH IS HOPEFULLY ASSIGNED TO TI. ALL ERROR
29 ; HANDLING IS DONE INTERNALLY.
30 ;
31
32 000001 LUN = 1 ; LUN FOR CONSOLE I/O
33 000001 EFN = 1 ; LIKEWISE EFN
34
35 000015 CR = 15 ; CARRIAGE RETURN CHAR
36
37 .MCALL QIOW$,QIOW$S,GMCR$,DIR$,CALL,RETURN,EXIT$S
38 ;
39 ; BUFFER TO BUILD COMMAND LINE
40 ;
41 000376 BUFSIZ = 256.-2.
42
43 000000 BUFFER: GMCR$
44 .BLKB BUFSIZ+BUFFER+G.MCRB-.
45 ;
46 ; QIO TO OUTPUT PROMPT TO TERMINAL
47 ;
48 000400 PROMPT: QIOW$ IO.WVB,LUN,EFN,,IOSTAT,,<,,<'$>>
49
50 000422 IOSTAT: .BLKW 2 ; I/O STATUS BLOCK
51 ;
52 ; ERROR MESSAGES FOR VARIOUS FORMS OF LOSSAGE
53 ;
54 000426 015 130 130 IOERRM: .ASCII <CR>"XXX -- COMMAND I/O ERROR"
000431 130 040 055
000434 055 040 103
000437 117 115 115
GTCML - GET COMMAND LINE WITH C MACRO M1108 05-DEC-77 21:11 PAGE 3-1
000442 101 116 104
000445 040 111 057
000450 117 040 105
000453 122 122 117
000456 122
55 000031 IOERRL = .-IOERRM
56
57 000457 015 130 130 OVERM: .ASCII <CR>"XXX -- COMMAND TOO LONG"
000462 130 040 055
000465 055 040 103
000470 117 115 115
000473 101 116 104
000476 040 124 117
000501 117 040 114
000504 117 116 107
58 000030 OVERL = .-OVERM
59
60 .EVEN
GTCML - GET COMMAND LINE WITH C MACRO M1108 05-DEC-77 21:11 PAGE 4
62 ;+
63 ;
64 ; *** - .GTCML - GET COMMAND LINE WITH CONTINUATION
65 ;
66 ; THIS ROUTINE OBTAINS A COMMAND LINE FROM THE MCR COMMAND LINE
67 ; BUFFER OR FROM THE CONSOLE TERMINAL. A TRAILING HYPHEN (-)
68 ; CAUSES CONTINUATION: THE ROUTINE PROMPTS AND ACCEPTS ANOTHER
69 ; LINE FROM THE CONSOLE TERMINAL.
70 ;
71 ; INPUTS:
72 ;
73 ; R3 = LENGTH OF PROMPT STRING
74 ; R4 = ADDRESS OF PROMPT STRING
75 ;
76 ; OUTPUTS:
77 ;
78 ; R3 = LENGTH OF COMMAND STRING
79 ; R4 = ADDRESS OF COMMAND STRING
80 ; R0-R2 ARE GARBAGED
81 ;
82 ;-
83
84 .ENABL LSB
85
86 000510 .GTCML::
87 000510 010467 177700 MOV R4,PROMPT+Q.IOPL ; SET UP PROMPT STRING
88 000514 010367 177676 MOV R3,PROMPT+Q.IOPL+2 ; IN QIO DPB
89 000520 012701 000376 MOV #BUFSIZ,R1 ; AND MAXIMUM BYTE COUNT
90 000524 DIR$ #BUFFER ; TRY FOR MCR COMMAND BUFFER
91 000532 103421 BCS 30$ ; BRANCH IF NONE
92 000534 013703 000000G MOV @#$DSW,R3 ; PICK UP THE BYTE COUNT
93 000540 001416 BEQ 30$ ; BRANCH IF NULL
94 000542 160301 SUB R3,R1 ; COMPUTE SPACE LEFT
95 000544 012704 000002' MOV #BUFFER+G.MCRB,R4 ; POINT TO START OF ACTUAL COMMAND LINE
96 000550 10$: CALL SPTEST ; SEARCH FOR THE FIRST SPACE
97 000554 103003 BCC 20$
98 000556 005204 INC R4 ; TRY NEXT CHARACTER
99 000560 077305 SOB R3,10$
100 000562 000405 BR 30$ ; NO SPACES - THROW COMMAND LINE AWAY
101
102 000564 20$: CALL SPTEST ; NOW LOOK FOR FIRST REAL COMMAND CHAR
103 000570 103411 BCS 40$
104 000572 005204 INC R4 ; TRY THE NEXT
105 000574 077305 SOB R3,20$
106 ;
107 ; THERE IS NO MCR COMMAND LINE, EITHER BECAUSE THE DIRECTIVE FAILED
108 ; OR THERE WAS NO USEFUL INFORMATION IN IT. SET UP TO GET COMMAND
109 ; FROM THE TERMINAL.
110 ;
111 000576 012704 000002' 30$: MOV #BUFFER+G.MCRB,R4 ; RE-INIT POINTER
112 000602 005003 CLR R3
113 000604 012701 000376 MOV #BUFSIZ,R1 ; R1 = SPACE AVAILABLE
114 000610 010400 MOV R4,R0 ; R0 = ADDRESS FOR INPUT
115 000612 000411 BR 60$
116 ;
117 ; WE HAVE A GOOD MCR COMMAND LINE. UPDATE VARIOUS REGISTERS.
118 ;
GTCML - GET COMMAND LINE WITH C MACRO M1108 05-DEC-77 21:11 PAGE 4-1
119 000614 010400 40$: MOV R4,R0 ; POINT TO END OF DATA
120 000616 060300 ADD R3,R0
121 ;
122 ; WE HAVE A COMMAND LINE FROM SOMEWHERE. LOOK FOR CONTINUATION.
123 ;
124 000620 126027 177777 000055 50$: CMPB -1(R0),#'- ; CONTINUATION CHARACTER IS A "-"
125 000626 001051 BNE EOL ; NO - ALL DONE
126 000630 005300 DEC R0 ; YES - THROW IT AWAY
127 000632 005201 INC R1
128 000634 005303 DEC R3 ; ADJUST THE CHARACTER COUNT
129 ;
130 ; READ AN INPUT LINE FROM THE TERMINAL.
131 ;
132 000636 60$: DIR$ #PROMPT ; OUTPUT THE PROMPT STRING
133 000644 103444 BCS IOERR ; CHECK FOR DIRECTIVE ERROR
134 000646 105767 177550 TSTB IOSTAT ; AND FOR I/O ERROR
135 000652 002441 BLT IOERR
136 000654 QIOW$S #IO.RVB,#LUN,#EFN,,#IOSTAT,,<R0,R1,<#' >>
137 000716 103417 BCS IOERR ; DIRECTIVE ERROR
138 000720 105767 177476 TSTB IOSTAT
139 000724 002414 BLT IOERR ; I/O ERROR
140 000726 105767 177471 TSTB IOSTAT+1 ; CHECK FOR A TERMINATED LINE
141 000732 001422 BEQ OVER ; NO - BUFFER HAS OVERFLOWED
142 000734 016702 177464 MOV IOSTAT+2,R2 ; GET THE BYTE COUNT
143 000740 001736 BEQ 60$ ; IGNORE NULL LINES
144 000742 160201 SUB R2,R1 ; ADJUST THE REMAINING SPACE COUNT
145 000744 060203 ADD R2,R3 ; ACCUMULATE BYTE COUNT
146 000746 060200 ADD R2,R0 ; POINT TO NEW END OF DATA
147 000750 000723 BR 50$ ; AND LOOK FOR CONTINUATION AGAIN
148 ;
149 ; END OF LINE
150 ;
151 000752 105010 EOL: CLRB (R0) ; THROW IN A TERMINATING NULL
152 000754 RETURN
153 ;
154 ; TO HERE ON I/O ERROR
155 ;
156 000756 126727 177440 000000G IOERR: CMPB IOSTAT,#IE.EOF ; LOOK FOR CONTROL Z
157 000764 001441 BEQ 90$ ; YES - JUST GET OUT QUIETLY
158 000766 012700 000426' MOV #IOERRM,R0 ; SET UP MESSAGE POINTER
159 000772 012701 000031 MOV #IOERRL,R1 ; AND BYTE COUNT
160 000776 000404 BR 70$
161 ;
162 ; TO HERE IF THE INPUT BUFFER OVERFLOWS
163 ;
164 001000 012700 000457' OVER: MOV #OVERM,R0
165 001004 012701 000030 MOV #OVERL,R1
166 001010 010002 70$: MOV R0,R2
167 001012 005202 INC R2
168 001014 012703 000003 MOV #3,R3 ; COUNT 3 BYTES OF THE PROMPT STRING
169 001020 016704 177370 MOV PROMPT+Q.IOPL,R4 ; POINT TO PROMPT STRING
170 001024 112422 80$: MOVB (R4)+,(R2)+ ; COPY PROMPT INTO ERROR MESSAGE
171 001026 077302 SOB R3,80$
172 001030 QIOW$S #IO.WVB,#LUN,#EFN,,,,<R0,R1,<#' >>
173 001070 90$: EXIT$S ; DON'T GO AWAY MAD, JUST GO AWAY....
174
175 ;
GTCML - GET COMMAND LINE WITH C MACRO M1108 05-DEC-77 21:11 PAGE 4-2
176 ; SUBROUTINE TO CHECK FOR BLANKS OR TABS. R4 POINTS TO CHARACTER
177 ; BEING TESTED. CARRY CLEAR MEANS BLANK OR TAB.
178 ;
179 001076 121427 000040 SPTEST: CMPB (R4),#40 ; BLANK?
180 001102 001405 BEQ 100$ ; YES
181 001104 121427 000011 CMPB (R4),#11 ; TAB?
182 001110 001402 BEQ 100$ ; YES
183 001112 000261 SEC ; NEITHER
184 001114 RETURN
185 001116 000241 100$: CLC
186 001120 RETURN
187
188 .DSABL LSB
189
190
191
192 000001 .END
GTCML - GET COMMAND LINE WITH C MACRO M1108 05-DEC-77 21:11 PAGE 4-3
SYMBOL TABLE
BUFFER 000000R G.MCRB= 000002 LUN = 000001 Q.IOFN= 000002 SPTEST 001076R
BUFSIZ= 000376 IE.EOF= ****** GX M$$HDR= 000001 Q.IOLU= 000004 $DSW = ****** GX
CR = 000015 IOERR 000756R OVER 001000R Q.IOPL= 000014 $$ = 000067
EFN = 000001 IOERRL= 000031 OVERL = 000030 Q.IOPR= 000007 $$$ARG= 000003
EOL 000752R IOERRM 000426R OVERM 000457R Q.IOSB= 000010 $$$OST= 000014
E$$MSG= 000001 IOSTAT 000422R PROMPT 000400R R$$10F= 000001 $$$T1 = 000011
E$$TRP= 000001 IO.RVB= ****** GX Q.IOAE= 000012 R$$11D= 000001 .GTCML 000510RG
F$$LVL= 000001 IO.WVB= ****** GX Q.IOEF= 000006 R$$20F= 000001
. ABS. 000000 000
001122 001
ERRORS DETECTED: 0
VIRTUAL MEMORY USED: 1904 WORDS ( 8 PAGES)
DYNAMIC MEMORY: 3104 WORDS ( 11 PAGES)
ELAPSED TIME: 00:00:18
[53,10]GTCML,[53,20]GTCML/-SP=[53,30]RSXDC,GTCML
.TPARS - TABLE DRIVEN FINITE ST MACRO M1108 05-DEC-77 21:11
TABLE OF CONTENTS
3- 5 TITLE PAGE
4- 29 MACRO DEFINITIONS
4- 64 IMPURE DATA
5- 80 MAIN ROUTINE BODY
6- 202 COMPLEX TYPE ROUTINES
7- 281 GET STRING ROUTINE
.TPARS - TABLE DRIVEN FINITE ST MACRO M1108 05-DEC-77 21:11 PAGE 3
1 .TITLE .TPARS - TABLE DRIVEN FINITE STATE PARSER
2
3 .IDENT "V0112"
4
5 .SBTTL TITLE PAGE
6
7 ; COPYRIGHT (C) 1975, 1978 BY
8 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD MASS.
9 ;
10 ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
11 ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION
12 ; OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES THERE-
13 ; OF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON.
14 ; NO TITLE TO OR OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
15 ;
16 ; THE INFORMATION CONTAINED IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
17 ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
18 ; CORPORATION.
19 ;
20 ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
21 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPILED BY DIGITAL.
22 ;
23 ;
24 ; ANDREW C. GOLDSTEIN 5 MAR 75 20:51
25
26
27 000000 R$$EIS = 0 ; USE EIS
.TPARS - TABLE DRIVEN FINITE ST MACRO M1108 05-DEC-77 21:11 PAGE 4
MACRO DEFINITIONS
29 .SBTTL MACRO DEFINITIONS
30
31 .MCALL CALL,RETURN
32
33 ; INTERNAL MACROS
34
35 .MACRO PUSH LIST
36 .IRP RX,<LIST>
37 MOV RX,-(SP)
38 .ENDM
39 .ENDM PUSH
40
41 .MACRO POP LIST
42 .IRP RX,<LIST>
43 MOV (SP)+,RX
44 .ENDM
45 .ENDM POP
46
47 ; MACRO TO DO SOB'S ON SMALL MACHINES
48
49 .IF NDF R$$EIS
50 .MACRO SOB RX,LABEL
51 DEC RX
52 BNE LABEL
53 .ENDM SOB
54 .ENDC
55
56 ; RANDOM CHARACTERS
57
58 000011 TAB= 11
59 000015 CR= 15
60 000033 AM= 33
61 000040 SPA= 40
62
63
64 .SBTTL IMPURE DATA
65
66 000000 .PSECT IMPURE,D
67
68 ; ITEMS OF INTEREST TO ACTION ROUTINES AND THE OUTSIDE WORLD
69 ; IN GENERAL.
70
71 000000 .PSTCN::.BLKW 1 ; CHARACTER COUNT OF FOUND STRING
72 000002 .PSTPT::.BLKW 1 ; POINTER TO FOUND STRING
73
74 000004 .PNUMH::.BLKW 1 ; HIGH ORDER VALUE AND ....
75 000006 .PNUMB::.BLKW 1 ; LOW ORDER VALUE OF FOUND NUMBER
76 000010 .PCHAR::.BLKW 1 ; FOUND CHARACTER
77
78 000000 .PSECT
.TPARS - TABLE DRIVEN FINITE ST MACRO M1108 05-DEC-77 21:11 PAGE 5
MAIN ROUTINE BODY
80 .SBTTL MAIN ROUTINE BODY
81
82 ;+
83 ;
84 ; *** - .TPARS
85 ;
86 ; ENTRY: CALL .TPARS
87 ;
88 ; INPUTS:
89 ;
90 ; R1 = 0 IGNORE ALL SPACES BETWEEN SYNTACTIC ELEMENTS
91 ; >< 0 TREAT SPACES AS SIGNIFICANT CHARACTERS
92 ; R2 = POINTER TO KEYWORD TABLE
93 ; R3 = LENGTH OF COMMAND STRING
94 ; R4 = ADDRESS OF COMMAND STRING
95 ; R5 = INITIAL STATE POINTER
96 ;
97 ; OUTPUTS:
98 ;
99 ; C = 0 SUCCESSFUL PARSE
100 ; C = 1 SYNTAX OR STATE TABLE ERROR
101 ; R3 = NUMBER OF CHARACTERS NOT SCANNED
102 ; R4 = POINTER TO UNSCANNED PART OF COMMAND STRING
103 ;
104 ; ALL OTHER REGISTERS ARE PRESERVED.
105 ;
106 ; .TPARS PARSES THE COMMAND STRING ACCORDING TO THE FINITE
107 ; STATE MACHINE REPRESENTED IN THE STATE AND KEYWORD TABLES
108 ; SUPPLIED BY THE CALLER. USER SUPPLIED ACTION ROUTINES ARE
109 ; CALLED AS SPECIFIED.
110 ;
111 ;-
112
113
114 000000 .TPARS::
115 000000 PUSH <R0,R5,R2,R1> ; SAVE REGISTERS
116
117 ; ENTER THE STATE SPECIFIED IN R5 AND
118 ; EVALUATE POSSIBLE STATE TRANSITIONS
119
120 000010 005067 000000' TSTAT: CLR .PSTCN ; KILL ANY OLD STRING
121 000014 005716 TST (SP) ; CHECK SPACE FLUSH FLAG
122 000016 001002 BNE 10$
123 000020 CALL GETSP ; EAT SPACES IF FLAG IS ZERO
124 000024 112500 10$: MOVB (R5)+,R0 ; GET TYPE BYTE
125 000026 002044 BGE TSCHAR ; BIT 7 = 0 - MATCH SPECIFIED CHAR
126 000030 120027 000300 CMPB R0,#300
127 000034 002573 BLT DOKEY ; 200 - 277 - MATCH KEYWORD
128 000036 120027 000320 CMPB R0,#MAXTYP ; CHECK TYPE CODE FOR LEGALITY
129 000042 003034 BGT SYNERR ; TOO HIGH - OUT
130 000044 010701 MOV PC,R1 ; GARBAGE R1 FOR USE AS A FLAG
131 000046 042700 177700 BIC #^C77,R0 ; RETAIN ONLY THE TYPE INDEX
132 000052 060007 ADD R0,PC ; AND DISPATCH ON IT
133 000054 000440 BR DOLAMB ; $LAMDA = 300 - MATCH EMPTY
134 000056 000510 BR DONUMB ; $NUMBR = 302 - MATCH NUMBER
135 000060 000503 BR DOSTRG ; $STRNG = 304 - MATCH ANY STRING
136 000062 000553 BR DOBLNK ; $BLANK = 306 - MATCH ANY SET OF BLANKS
.TPARS - TABLE DRIVEN FINITE ST MACRO M1108 05-DEC-77 21:11 PAGE 5-1
MAIN ROUTINE BODY
137 000064 000455 BR DOSUBR ; $SUBXP = 310 - MATCH A SUBEXPRESSION
138 000066 000403 BR DOENDS ; $EOS = 312 - MATCH END OF STRING
139 000070 000502 BR DODNMB ; $DNUMB = 314 - MATCH DECIMAL NUMBER
140 000072 000475 BR DORD50 ; $RAD50 = 316 - MATCH RAD-50 STRING
141 000074 000423 BR DOCHAR ; $ANY = 320 - MATCH ANY CHARACTER
142
143 ; NOTE - IT IS CRITICAL THAT R0 AND R1 BE NON-ZERO AT THE DISPATCH
144
145 000320 MAXTYP = 320
146
147 ; CHECK FOR END OF STRING
148
149 000076 005703 DOENDS: TST R3 ; CHECK CHAR COUNT
150 000100 001426 BEQ DOTRAN ; YES
151
152 ; TYPE MATCH FAILED - TRY NEXT ENTRY IN TRANSITION TABLE
153
154 000102 066703 000000' NXTRAN: ADD .PSTCN,R3 ; RETURN ANY STRING
155 000106 166704 000000' SUB .PSTCN,R4 ; TO THE COMMAND LINE
156 000112 112500 MOVB (R5)+,R0 ; GET FLAGS BYTE
157 000114 002407 BLT SYNERR ; THIS WAS LAST TRANSITION - YOU LOSE
158 000116 012701 000003 MOV #3,R1 ; COUNT OF FLAG BITS TO TEST
159 000122 006000 20$: ROR R0 ; CHECK FLAG BIT
160 000124 103001 BCC 30$
161 000126 005725 TST (R5)+ ; SKIP POINTER WORD
162 000130 077104 30$: SOB R1,20$ ; COUNT BITS
163 000132 000726 BR TSTAT ; TRY NEXT TRANSITION
164
165 ; OUT OF TRANSITION TABLE ENTRIES, OR SOME OTHER ANOMALY,
166 ; LIKE A BAD TYPE CODE. ALL ARE SYNTAX ERRORS.
167
168 000134 000261 SYNERR: SEC ; SAY SO
169 000136 000423 BR EXIT ; AND QUIT
170
171 ; TEST FOR SPECIFIED CHARACTER
172
173 000140 120014 TSCHAR: CMPB R0,(R4) ; CHECK CHAR IN COMMAND STRING
174 000142 001357 BNE NXTRAN ; IF NO MATCH, TRY ANOTHER TRANSITION
175
176 ; GOBBLE A CHARACTER AND DO THE TRANSITION
177
178 000144 005703 DOCHAR: TST R3 ; CHECK FOR END OF STRING
179 000146 003755 BLE NXTRAN ; IF YES, DON'T TRY THIS
180 000150 112467 000010' MOVB (R4)+,.PCHAR ; SAVE CHAR FOR ACTION ROUTINE
181 000154 005303 DEC R3 ; COUNT IT
182
183 ; DO THE STATE TRANSITION
184
185 000156 DOLAMB:
186 000156 112500 DOTRAN: MOVB (R5)+,R0 ; GET FLAGS BYTE
187 000160 006000 ROR R0 ; CHECK EXTENSION BIT
188 000162 103001 BCC 40$
189 000164 005725 TST (R5)+ ; SKIP EXTENSION WORD
190 000166 006000 40$: ROR R0 ; CHECK ACTION BIT
191 000170 103001 BCC 50$
192 000172 CALL @(R5)+ ; CALL ACTION ROUTINE
193 000174 006000 50$: ROR R0 ; CHECK EXPLICIT TRANSITION BIT
.TPARS - TABLE DRIVEN FINITE ST MACRO M1108 05-DEC-77 21:11 PAGE 5-2
MAIN ROUTINE BODY
194 000176 103304 BCC TSTAT
195 000200 012505 MOV (R5)+,R5 ; POINT TO NEXT STATE
196 000202 001302 60$: BNE TSTAT ; PROCESS NEXT STATE
197 000204 000257 CCC ; STATE NUMBER OF ZERO MEANS STOP
198
199 000206 EXIT: POP <R1,R2,R5,R0> ; RESTORE ALL THE REGISTERS
200 000216 RETURN
.TPARS - TABLE DRIVEN FINITE ST MACRO M1108 05-DEC-77 21:11 PAGE 6
COMPLEX TYPE ROUTINES
202 .SBTTL COMPLEX TYPE ROUTINES
203
204 ; SUB EXPRESSION TYPE - CALL ONESELF RECURSIVELY
205
206 000220 011601 DOSUBR: MOV (SP),R1 ; SET SPACE FLUSH FLAG
207 000222 016602 000002 MOV 2(SP),R2 ; SET KEYWORD TABLE POINTER
208 000226 PUSH <R3,R4> ; SAVE STRING POINTERS FOR UNWIND
209 000232 010500 MOV R5,R0 ; SAVE STATE TABLE POINTER
210 000234 016505 000001 MOV 1(R5),R5 ; GET STARTING STATE
211 000240 CALL .TPARS ; AND TRY TO PARSE SUBEXPRESSION
212 000244 010005 MOV R0,R5 ; RESTORE STATE POINTER
213 000246 103402 BCS 10$ ; CHECK FOR SUCCESS
214 000250 022626 CMP (SP)+,(SP)+ ; THROW AWAY STRING POINTER SAVE
215 000252 000741 BR DOTRAN ; AND TAKE THE TRANSITION
216
217 000254 005067 000000' 10$: CLR .PSTCN ; FLUSH ANY STRINGS FOUND
218 000260 POP <R4,R3> ; RESTORE STRING POINTERS
219 000264 000706 BR NXTRAN ; AND TRY SOMETHING ELSE
220
221 ; MATCH ANY ALPHANUMERIC STRING
222
223 000266 005000 DORD50: CLR R0 ; SET RAD-50 FLAG
224 000270 DOSTRG: CALL GETSTR ; JUST DRAG IN THE STRING
225 000274 000730 BR DOTRAN
226
227 ; MATCH ANY NUMBER
228
229 000276 005001 DODNMB: CLR R1 ; SET DECIMAL MODE
230 000300 DONUMB: CALL GETSTR ; GET A STRING
231 000304 005767 000000' TST .PSTCN ; CHECK STRING LENGTH
232 000310 001674 BEQ NXTRAN ; COME ON, AT LEAST ONE DIGIT
233 000312 005701 TST R1 ; CHECK MODE
234 000314 001411 BEQ 20$ ; DECIMAL - DON'T LOOK FOR TRAILING DOT
235 000316 005703 TST R3 ; SEE IF WE'RE AT END OF STRING
236 000320 003407 BLE 20$ ; YES
237 000322 121427 000056 CMPB (R4),#'. ; CHECK FOR TRAILING DECIMAL
238 000326 001004 BNE 20$ ; NO
239 000330 005204 INC R4 ; YES - INCLUDE IN NUMBER STRING
240 000332 005303 DEC R3
241 000334 005267 000000' INC .PSTCN ; BUMP STRING COUNT
242 000340 20$: PUSH <R3,R4,R5> ; SAVE REGISTERS
243 000346 016705 000002' MOV .PSTPT,R5 ; GET STRING POINTER
244 000352 016704 000000' MOV .PSTCN,R4 ; AND STRING COUNT
245 000356 012703 000004' MOV #.PNUMH,R3 ; POINT TO DOUBLE WORD FOR NUMBER
246 000362 005701 TST R1 ; CHECK IF OCTAL OR DECIMAL
247 000364 001003 BNE 30$ ; OCTAL
248 000366 CALL .DD2CT ; DECIMAL
249 000372 000402 BR 40$
250 000374 30$: CALL .OD2CT ; DO OCTAL/DECIMAL CONVERT
251 000400 40$: POP <R5,R4,R3> ; RESTORE REGISTERS
252 000406 103635 BCS NXTRAN ; IF ERRORS, FORGET IT
253 000410 000662 BR DOTRAN ; ELSE JUST DO TRANSITION
254
255 ; MATCH ANY NON-EMPTY STRING OF SPACES OF TABS
256
257 000412 DOBLNK: CALL GETSP ; LOOK FOR SPACES
258 000416 005702 TST R2 ; CHECK NUMBER FOUND
.TPARS - TABLE DRIVEN FINITE ST MACRO M1108 05-DEC-77 21:11 PAGE 6-1
COMPLEX TYPE ROUTINES
259 000420 001630 BEQ NXTRAN ; NO BLANKS - TRY SOMETHING ELSE
260 000422 000655 BR DOTRAN ; YES - DO IT
261
262 ; MATCH SPECIFIED KEYWORD
263
264 000424 DOKEY: CALL GETSTR ; GET ALPHA STRING
265 000430 042700 177700 BIC #^C77,R0 ; GET KEYWORD INDEX
266 000434 006300 ASL R0 ; CONVERT TO OFFSET
267 000436 006300 ASL R0
268 000440 006300 ASL R0
269 000442 066600 000002 ADD 2(SP),R0 ; INDEX INTO KEYWORD TABLE
270 000446 016701 000000' MOV .PSTCN,R1 ; GET STRING DESCRIPTOR
271 000452 001613 BEQ NXTRAN ; DON'T TRY TO MATCH NULL STRING
272 000454 016702 000002' MOV .PSTPT,R2
273
274 000460 122022 50$: CMPB (R0)+,(R2)+ ; COMPARE TO KEYWORD
275 000462 001207 BNE NXTRAN ; OUT ON MISMATCH
276 000464 077103 SOB R1,50$ ; COUNT CHARS AND LOOP
277 000466 121027 000377 CMPB (R0),#377 ; CHECK FOR KEYWORD TERMINATOR
278 000472 001203 BNE NXTRAN ; STRING WAS SUBSET - NO
279 000474 000630 BR DOTRAN ; MATCH
.TPARS - TABLE DRIVEN FINITE ST MACRO M1108 05-DEC-77 21:11 PAGE 7
GET STRING ROUTINE
281 .SBTTL GET STRING ROUTINE
282
283 ; THIS ROUTINE POINTS THE STRING DESCRIPTOR AT THE ALPHA-NUMERIC
284 ; STRING AT THE CURRENT POSITION IN THE COMMAND LINE.
285
286 000476 010467 000002' GETSTR: MOV R4,.PSTPT ; INIT STRING POINTER
287 000502 005067 000000' CLR .PSTCN ; AND COUNT
288 000506 005703 TST R3 ; CHECK FOR END OF STRING
289 000510 003414 BLE 20$ ; IF YES, DON'T TRY THIS
290
291 000512 121427 000060 10$: CMPB (R4),#'0 ; CHECK NEXT CHAR IN COMMAND LINE
292 000516 002411 BLT 20$ ; LESS THAN "0" - OUT
293 000520 121427 000071 CMPB (R4),#'9
294 000524 003416 BLE 30$ ; LESS THAN "9" - OK
295 000526 121427 000101 CMPB (R4),#'A
296 000532 002403 BLT 20$ ; LESS THAN "A" - OUT
297 000534 121427 000132 CMPB (R4),#'Z
298 000540 003410 BLE 30$ ; LESS THAN "Z" - OK
299 000542 005700 20$: TST R0 ; SEE IF RAD-50 MODE
300 000544 001012 BNE 40$ ; NO
301 000546 121427 000056 CMPB (R4),#'. ; CHECK FOR "."
302 000552 001403 BEQ 30$
303 000554 121427 000044 CMPB (R4),#'$ ; CHECK FOR "$"
304 000560 001004 BNE 40$
305 000562 005267 000000' 30$: INC .PSTCN ; GOOD CHAR - BUMP COUNT
306 000566 005204 INC R4 ; GOBBLE THE CHAR
307 000570 077330 SOB R3,10$ ; COUNT IT AND LOOP
308 000572 40$: RETURN ; END OF LINE OR NON-ALPHA NUMERIC
309
310
311 ; THIS ROUTINE FINDS AND PASSES OVER BLANKS AND TABS AT THE CURRENT
312 ; POSITION IN THE COMMAND LINE.
313
314 000574 005002 GETSP: CLR R2 ; ZERO CHAR COUNT
315 000576 005703 TST R3 ; CHECK FOR END OF STRING
316 000600 003411 BLE 70$ ; IF YES, DON'T TRY THIS
317 000602 121427 000040 50$: CMPB (R4),#SPA ; TEST FOR SPACE IN COMMAND LINE
318 000606 001403 BEQ 60$
319 000610 121427 000011 CMPB (R4),#TAB ; TEST FOR TAB
320 000614 001003 BNE 70$
321 000616 005202 60$: INC R2 ; BLANK OR TAB FOUND - BUMP COUNT
322 000620 005204 INC R4 ; BUMP STRING POINTER
323 000622 077311 SOB R3,50$ ; COUNT CHARS AND LOOP
324 000624 70$: RETURN
325
326
327
328 000001 .END
.TPARS - TABLE DRIVEN FINITE ST MACRO M1108 05-DEC-77 21:11 PAGE 7-1
SYMBOL TABLE
AM = 000033 DONUMB 000300R F$$LVL= 000001 R$$11D= 000001 .DD2CT= ****** GX
CR = 000015 DORD50 000266R GETSP 000574R R$$20F= 000001 .OD2CT= ****** GX
DOBLNK 000412R DOSTRG 000270R GETSTR 000476R SPA = 000040 .PCHAR 000010RG 002
DOCHAR 000144R DOSUBR 000220R MAXTYP= 000320 SYNERR 000134R .PNUMB 000006RG 002
DODNMB 000276R DOTRAN 000156R M$$HDR= 000001 TAB = 000011 .PNUMH 000004RG 002
DOENDS 000076R EXIT 000206R NXTRAN 000102R TSCHAR 000140R .PSTCN 000000RG 002
DOKEY 000424R E$$MSG= 000001 R$$EIS= 000000 TSTAT 000010R .PSTPT 000002RG 002
DOLAMB 000156R E$$TRP= 000001 R$$10F= 000001 $$ = 000067 .TPARS 000000RG
. ABS. 000000 000
000626 001
IMPURE 000012 002
ERRORS DETECTED: 0
VIRTUAL MEMORY USED: 562 WORDS ( 3 PAGES)
DYNAMIC MEMORY: 3104 WORDS ( 11 PAGES)
ELAPSED TIME: 00:00:12
[53,10]TPARS,[53,20]TPARS/-SP=[53,30]RSXDC,TPARS
UFD - CREATE DIRECTORY FILE MACRO M1108 05-DEC-77 20:56
TABLE OF CONTENTS
3- 2 TITLE PAGE
3- 30 MACRO CALLS AND DEFINITIONS
4- 57 ASSORTED DATA - DPB'S
5- 122 OTHER RANDOM DATA
6- 175 ERROR MESSAGES
7- 209 MAIN PROGRAM
8- 327 ERROR EXITS
9- 361 QIO CALL ROUTINE
UFD - CREATE DIRECTORY FILE MACRO M1108 05-DEC-77 20:56 PAGE 3
1 .TITLE UFD - CREATE DIRECTORY FILE
2 .SBTTL TITLE PAGE
3
4 .IDENT "V0415"
5
6 ; COPYRIGHT (C) 1975, 1978 BY
7 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD MASS.
8 ;
9 ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
10 ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION
11 ; OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES THERE-
12 ; OF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON.
13 ; NO TITLE TO OR OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
14 ;
15 ; THE INFORMATION CONTAINED IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
16 ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
17 ; CORPORATION.
18 ;
19 ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
20 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPILED BY DIGITAL.
21 ;
22 ;
23 ; ANDREW C. GOLDSTEIN 25 FEB 75 19:13
24
25 000001 UFDLUN = 1
26 000001 UFDEFN = 1
27 000002 COLUN = 2
28 000002 COEFN = 2
29
30 .SBTTL MACRO CALLS AND DEFINITIONS
31
32 ; MACROS FROM SYSTEM LIBRARY
33
34 .MCALL DIR$,GMCR$,GLUN$C,EXIT$S,ALUN$,CALL,RETURN,WTSE$S,NMBLK$
35 .MCALL QIO$,QIO$S,NBOF$L,FDOF$L
36 .IIF NDF,R$$11M .MCALL QIOW$
37
38 000000 FDOF$L
39 000000 NBOF$L
40
41 ; MACRO TO CALL QIO ROUTINE
42
43 .MACRO QIO DPB
44 JSR R5,XQIO
45 .WORD DPB
46 .ENDM QIO
47
48 ; MACRO FOR SOB'S
49
50 .IF NDF R$$EIS
51 .MACRO SOB RX,LABEL
52 DEC RX
53 BNE LABEL
54 .ENDM SOB
55 .ENDC
UFD - CREATE DIRECTORY FILE MACRO M1108 05-DEC-77 20:56 PAGE 4
ASSORTED DATA - DPB'S
57 .SBTTL ASSORTED DATA - DPB'S
58
59 000000 .PSECT IMPURE,D
60
61 000000 GCML: GMCR$ ; GET MCR COMMAND LINE FOR ERROR EXIT ONLY
62
63 ; ASSIGN LUN TO DEVICE
64
65 000122 ASLUN: ALUN$ UFDLUN,XX,0
66
67 000126' $UDEV== ASLUN+A.LUNA
68 000130' $UUNIT==ASLUN+A.LUNU
69
70 .IF NDF,R$$11M
71
72 ; CREATE NEW DIRECTORY FILE
73
74 000132 CREATE: QIOW$ IO.CRE,UFDLUN,UFDEFN,,IOSTAT,,<$FNB,,102400,1,,>
75
76 000154' $UDSIZ= CREATE+Q.IOPL+6
77
78 ; ENTER DIRECTORY IN MFD
79
80 000162 ENTER: QIOW$ IO.ENA,UFDLUN,UFDEFN,,IOSTAT,,<,,,,,$FNB>
81
82 ; WRITE ATTRIBUTES TO NEW DIRECTORY
83
84 000212 WATT: QIOW$ IO.WAT,UFDLUN,UFDEFN,,IOSTAT,,<$FNB,ATTBLK,,,,>
85
86 ; ERROR RECOVERY
87 ; REMOVE DIRECTORY FROM MFD ON WRITE ATTRIBUTES FAILURE
88
89 000242 REMOVE: QIOW$ IO.RNA,UFDLUN,UFDEFN,,IOSTAT,,<,,,,,$FNB>
90
91 ; DELETE DIRECTORY ON ENTER OR WRITE ATTRIBUTES FAILURE
92
93 000272 DELET: QIOW$ IO.DEL,UFDLUN,UFDEFN,,IOSTAT,,<$FNB,,,,,>
94
95 .IFF
96
97 ; CREATE NEW DIRECTORY FILE
98
99 CREATE: QIO$ IO.CRE,UFDLUN,UFDEFN,,IOSTAT,,<$FNB,,102400,1,,>
100
101 $UDSIZ= CREATE+Q.IOPL+6
102
103 ; ENTER DIRECTORY IN MFD
104
105 ENTER: QIO$ IO.ENA,UFDLUN,UFDEFN,,IOSTAT,,<,,,,,$FNB>
106
107 ; WRITE ATTRIBUTES TO NEW DIRECTORY
108
109 WATT: QIO$ IO.WAT,UFDLUN,UFDEFN,,IOSTAT,,<$FNB,ATTBLK,,,,>
110
111 ; ERROR RECOVERY
112 ; REMOVE DIRECTORY FROM MFD ON WRITE ATTRIBUTES FAILURE
113
UFD - CREATE DIRECTORY FILE MACRO M1108 05-DEC-77 20:56 PAGE 4-1
ASSORTED DATA - DPB'S
114 REMOVE: QIO$ IO.RNA,UFDLUN,UFDEFN,,IOSTAT,,<,,,,,$FNB>
115
116 ; DELETE DIRECTORY ON ENTER OR WRITE ATTRIBUTES FAILURE
117
118 DELET: QIO$ IO.DEL,UFDLUN,UFDEFN,,IOSTAT,,<$FNB,,,,,>
119
120 .ENDC
UFD - CREATE DIRECTORY FILE MACRO M1108 05-DEC-77 20:56 PAGE 5
OTHER RANDOM DATA
122 .SBTTL OTHER RANDOM DATA
123
124 ; WRITE ATTRIBUTES CONTROL BLOCK
125
126 000322 005 010 ATTBLK: .BYTE 5,10 ; FILE NAME AND TYPE
127 000324 000374' .WORD $FNB+N.FNAM
128 000326 007 002 .BYTE 7,2 ; VERSION NUMBER
129 000330 000404' .WORD $FNB+N.FVER
130 000332 004 016 .BYTE 4,S.FATT ; RECORD ATTRIBUTES
131 000334 000350' .WORD RECATT
132 000336 001 002 .BYTE 1,2 ; FILE OWNER
133 000340 000430' .WORD $UUIC
134 000342 002 002 $PRFLG::.BYTE 2,2 ; FILE PROTECTION
135 000344 000432' .WORD $UPRO
136 000346 000000 .WORD 0 ; END
137
138 ; RECORD ATTRIBUTES
139
140 000350 000G 000 RECATT: .BYTE R.FIX,0
141 000352 000020 .WORD 16. ; RECORD LENGTH
142 000354 000000 000000 .WORD 0,0 ; FILE LENGTH
143 000360 000000 000001 .WORD 0,1 ; END OF FILE VBN
144 000364 000000 .WORD 0 ; FIRST FREE BYTE
145
146 ; FILE NAME BLOCK FOR CREATE AND ENTER
147
148 000366 $FNB:: NMBLK$ ,DIR,1
149 000412' . = $FNB+N.DID
150 000412 000004 000004 000000 .WORD 4,4,0
151 000424' . = $FNB+S.FNB
152
153 ; PROMPT FOR COMMAND INPUT
154
155 000424 125 106 104 PROMPT: .ASCII "UFD>"
000427 076
156 000004 PROMPL = .-PROMPT
157
158 .EVEN
159
160 ; RANDOM VARIABLES.
161
162 000430 000000 $UUIC:: .WORD 0 ; FILE OWNER
163 000432 000000 $UPRO:: .WORD 0 ; PROTECTION
164 000434 000000 $UALL:: .WORD 0 ; RECORDS TO ALLOCATE
165 000436 000000 $UVNAM::.WORD 0 ; POINTER TO VOLUME NAME
166 000440 000000 $UVNML::.WORD 0 ; CHAR COUNT OF VOLUME LABEL
167
168 000442 000000 ERRNUM: .WORD 0 ; ERROR INDEX
169 000444 STRING: ; STRING BUFFER
170 000444 LUNBUF: .BLKW 6 ; AND BUFFER FOR GET LUN INFO
171
172 000460 IOSTAT: .BLKW 2 ; I/O STATUS BLOCK
173
UFD - CREATE DIRECTORY FILE MACRO M1108 05-DEC-77 20:56 PAGE 6
ERROR MESSAGES
175 .SBTTL ERROR MESSAGES
176
177 000000 .PSECT MSGSTR,D
178
179 ; ERROR MESSAGE INDEX TABLE
180
181 000000 000026' ERRMSG: .WORD ERRM1
182 000002 000073' .WORD ERRM2
183 000004 000117' .WORD ERRM3
184 000006 000153' .WORD ERRM4
185 000010 000206' .WORD ERRM5
186 000012 000246' .WORD ERRM6
187 000014 000304' .WORD ERRM7
188 000016 000346' .WORD ERRM8
189 000020 000406' .WORD ERRM9
190 000022 000440' .WORD ERRM10
191 000024 000502' .WORD ERRM11
192
193 ; THE ERROR MESSAGES THEMSELVES
194
195 000026 125 106 104 ERRM1: .ASCIZ "UFD -- CAN'T READ MCR COMMAND BUFFER"
000031 040 055 055
000034 040 103 101
000037 116 047 124
000042 040 122 105
000045 101 104 040
000050 115 103 122
000053 040 103 117
000056 115 115 101
000061 116 104 040
000064 102 125 106
000067 106 105 122
000072 000
196 000073 125 106 104 ERRM2: .ASCIZ "UFD -- SYNTAX ERROR"
000076 040 055 055
000101 040 123 131
000104 116 124 101
000107 130 040 105
000112 122 122 117
000115 122 000
197 000117 125 106 104 ERRM3: .ASCIZ "UFD -- DEVICE NOT IN SYSTEM"
000122 040 055 055
000125 040 104 105
000130 126 111 103
000133 105 040 116
000136 117 124 040
000141 111 116 040
000144 123 131 123
000147 124 105 115
000152 000
198 000153 125 106 104 ERRM4: .ASCIZ "UFD -- NOT FILES-11 DEVICE"
000156 040 055 055
000161 040 116 117
000164 124 040 106
000167 111 114 105
000172 123 055 061
000175 061 040 104
UFD - CREATE DIRECTORY FILE MACRO M1108 05-DEC-77 20:56 PAGE 6-1
ERROR MESSAGES
000200 105 126 111
000203 103 105 000
199 000206 125 106 104 ERRM5: .ASCIZ "UFD -- DIRECTORY ALREADY EXISTS"
000211 040 055 055
000214 040 104 111
000217 122 105 103
000222 124 117 122
000225 131 040 101
000230 114 122 105
000233 101 104 131
000236 040 105 130
000241 111 123 124
000244 123 000
200 000246 125 106 104 ERRM6: .ASCIZ "UFD -- FAILED TO ENTER IN MFD"
000251 040 055 055
000254 040 106 101
000257 111 114 105
000262 104 040 124
000265 117 040 105
000270 116 124 105
000273 122 040 111
000276 116 040 115
000301 106 104 000
201 000304 125 106 104 ERRM7: .ASCIZ "UFD -- FAILED TO CREATE DIRECTORY"
000307 040 055 055
000312 040 106 101
000315 111 114 105
000320 104 040 124
000323 117 040 103
000326 122 105 101
000331 124 105 040
000334 104 111 122
000337 105 103 124
000342 117 122 131
000345 000
202 000346 125 106 104 ERRM8: .ASCIZ "UFD -- WRITE ATTRIBUTES FAILURE"
000351 040 055 055
000354 040 127 122
000357 111 124 105
000362 040 101 124
000365 124 122 111
000370 102 125 124
000373 105 123 040
000376 106 101 111
000401 114 125 122
000404 105 000
203 000406 125 106 104 ERRM9: .ASCIZ "UFD -- VOLUME NOT MOUNTED"
000411 040 055 055
000414 040 126 117
000417 114 125 115
000422 105 040 116
000425 117 124 040
000430 115 117 125
000433 116 124 105
000436 104 000
204 000440 125 106 104 ERRM10: .ASCIZ "UFD -- PRIVILEGE VIOLATION ON MFD"
000443 040 055 055
UFD - CREATE DIRECTORY FILE MACRO M1108 05-DEC-77 20:56 PAGE 6-2
ERROR MESSAGES
000446 040 120 122
000451 111 126 111
000454 114 105 107
000457 105 040 126
000462 111 117 114
000465 101 124 111
000470 117 116 040
000473 117 116 040
000476 115 106 104
000501 000
205 000502 125 106 104 ERRM11: .ASCIZ "UFD -- ILLEGAL FUNCTION FOR NON-PRIVILEGED TERMINAL"
000505 040 055 055
000510 040 111 114
000513 114 105 107
000516 101 114 040
000521 106 125 116
000524 103 124 111
000527 117 116 040
000532 106 117 122
000535 040 116 117
000540 116 055 120
000543 122 111 126
000546 111 114 105
000551 107 105 104
000554 040 124 105
000557 122 115 111
000562 116 101 114
000565 000
206
207 .EVEN
UFD - CREATE DIRECTORY FILE MACRO M1108 05-DEC-77 20:56 PAGE 7
MAIN PROGRAM
209 .SBTTL MAIN PROGRAM
210
211 ;+
212 ;
213 ; *** - $UFD - ENTRY FOR UFD MAIN PROGRAM
214 ;
215 ; CREATING A NEW DIRECTORY IS REALLY CRETINOUSLY SIMPLE. WE GET
216 ; THE COMMAND LINE AND PARSE IT FOR THE NECESSARY INFORMATION
217 ; AND OPTIONS. THEN WE VERIFY THAT THE DEVICE EXISTS AND WILL
218 ; TAKE MULTIPLE DIRECTORIES. FINALLY
219 ; WE CREATE THE DIRECTORY FILE, ENTER IT IN THE VOLUME MFD, AND
220 ; SET UP THE ATTRIBUTES CORRECTLY. THE WRITE ATTRIBUTES IS DONE
221 ; LAST TO ENSURE THAT AN ERROR UNWIND FROM AN ENTER FAILURE IS
222 ; POSSIBLE.
223 ;
224 ;-
225
226
227 000000 .PSECT CODE
228
229 000000 $UFD::
230 000000 005067 000342' CLR $PRFLG ; SET PROTECTION TO DEFAULT
231 000004 005067 000442' CLR ERRNUM ; INIT ERROR INDEX
232 000010 005067 000130' CLR $UUNIT ; CLEAN OUT UNIT NUMBER
233 000014 10$: CALL .CKPRV ; CHECK IF INVOKING TERMINAL IS PRIVILEGED
234 000020 000406 PRIVLG::BR 20$ ; IGNORE PRIVILEGE CHECK
235 000022 103005 BCC 20$ ; YES
236 000024 DIR$ #GCML ; PICK UP COMMAND LINE FOR NEATNESS SAKE
237 000032 000167 000326 JMP PRIVT ; NO - OUT
238 000036 012704 000424' 20$: MOV #PROMPT,R4 ; PICK UP PROMPT STRING
239 000042 012703 000004 MOV #PROMPL,R3 ; AND ITS BYTE COUNT
240 000046 CALL .GTCML ; GO FIND A COMMAND LINE
241 000052 005001 CLR R1 ; SET BLANK SUPPRESSION
242 000054 012702 000000G MOV #.UFDKT,R2 ; GET KEYWORD TABLE
243 000060 012705 000000G MOV #.PSTRT,R5 ; GET START STATE FOR PARSER
244 000064 CALL .TPARS ; AND PARSE THE COMMAND LINE
245 000070 103002 BCC 30$
246 000072 000167 000332 JMP SYNERR ; SYNTAX ERROR
247 ;
248 ; TO AVOID PRIVILEGE PROBLEMS WITH THE MFD, THIS TASK MUST RUN
249 ; UNDER [1,1]. MAKE IT SO.
250 ;
251 000076 012746 30$: MOV (PC)+,-(SP)
252 000100 006 177 .BYTE 6,177 ; PDR FOR 4K ACCESS
253 000102 016700 000000G MOV .CRTSK,R0 ; GET ATL ADDRESS
254
255 ; ASSIGN THE LUN AND SEE IF THE DEVICE IS SUITABLE
256
257 000106 DIR$ #ASLUN ; ASSIGN LUN
258 000114 103543 BCS BADDEV ; DEVICE DOES NOT EXIST
259
260 000116 GLUN$C UFDLUN,LUNBUF,CODE ; GET LUN INFORMATION
261
262 .IF DF,R$$11M
263 BIT LUNBUF+U.C1,#DV.F11 ; TEST FOR FILES-11 DEVICE
264 .IFF
265 000124 036727 000000C 000000G BIT LUNBUF+U.C1,#UC.F11 ; TEST FOR FILES-11 DEVICE
UFD - CREATE DIRECTORY FILE MACRO M1108 05-DEC-77 20:56 PAGE 7-1
MAIN PROGRAM
266 .ENDC
267 000132 001404 BEQ 40$
268 000134 036727 000000C 000000C BIT LUNBUF+U.C1,#FD.SDI!FD.SQD ; TEST FOR MULTI DIRECTORY DEVICE
269 000142 001402 BEQ 50$
270 000144 000167 000250 40$: JMP NDDEV ; ANYTHING ELSE - OUT
271
272 ; PRODUCE THE UFD FILE NAME FROM THE BINARY UIC
273
274 000150 012702 000444' 50$: MOV #STRING,R2 ; POINT TO STRING BUFFER
275 000154 016703 000430' MOV $UUIC,R3 ; GET UIC
276 000160 012704 000003 MOV #3,R4 ; REQUEST NO PUNCTUATION, LEADING ZEROES
277 000164 CALL .PPASC ; CONVERT UIC TO ASCII
278
279 000170 012705 000374' MOV #$FNB+N.FNAM,R5 ; POINT TO FILE NAME AREA
280 000174 012700 000444' MOV #STRING,R0 ; POINT TO ASCII STRING
281 000200 CALL $CAT5 ; CONVERT TO RAD-50
282 000204 010125 MOV R1,(R5)+ ; PUT IN NAME
283 000206 CALL $CAT5 ; GET 2ND RAD-50 WORD
284 000212 010125 MOV R1,(R5)+
285
286 ; COMPUTE NUMBER OF BLOCKS TO ALLOCATE FOR DIRECTORY.
287
288 000214 016701 000434' MOV $UALL,R1 ; GET NUMBER OF ENTRIES TO ALLOCATE
289 000220 006201 ASR R1 ; DIVIDE BY 32. ENTRIES PER BLOCK
290 000222 006201 ASR R1
291 000224 006201 ASR R1
292 000226 006201 ASR R1
293 000230 006201 ASR R1
294 000232 005201 INC R1 ; ROUND UP
295 000234 010167 000154' MOV R1,$UDSIZ ; SET UP SIZE IN CREATE CALL
296 000240 QIO CREATE ; AND CREATE THE FILE
297 000246 103441 BCS 80$
298 000250 016767 000462' 000356' MOV IOSTAT+2,RECATT+F.HIBK+2 ; ALSO SET UP RECORD ATTRIBUTES
299 000256 QIO ENTER ; ENTER IN MFD
300 000264 103407 BCS 60$ ; ENTER FAILURE
301 000266 QIO WATT ; SET UP FILE ATTRIBUTES
302 000274 103417 BCS 70$
303 000276 EXIT$S ; THAT'S ALL, FOLKS!
304
305 ; FAILED TO ENTER DIRECTORY IN MFD
306
307 000304 116705 000460' 60$: MOVB IOSTAT,R5 ; SAVE I/O STATUS
308 000310 QIO DELET ; DELETE THE FILE
309 000316 120527 000000G CMPB R5,#IE.DUP ; WAS NAME A DUPLICATE?
310 000322 001434 BEQ DUPLIC ; YES
311 000324 120527 000000G CMPB R5,#IE.PRI ; CHECK FOR PRIVILEGE VIOLATION
312 000330 001417 BEQ PRIV
313 000332 000426 BR NENTER ; SOMETHING ELSE
314
315 ; FAILED TO WRITE ATTRIBUTES
316
317 000334 70$: QIO REMOVE ; REMOVE FROM MFD
318 000342 QIO DELET ; DELETE THE FILE
319 000350 000413 BR WATF
320
321 ; ERROR ON CREATE
322
UFD - CREATE DIRECTORY FILE MACRO M1108 05-DEC-77 20:56 PAGE 7-2
MAIN PROGRAM
323 000352 126727 000460' 000000G 80$: CMPB IOSTAT,#IE.SRE ; CHECK FOR SEND/REQUEST FAILURE
324 000360 001405 BEQ VNMO ; YES - VOLUME NOT MOUNTED
325 000362 000410 BR NCREAT
UFD - CREATE DIRECTORY FILE MACRO M1108 05-DEC-77 20:56 PAGE 8
ERROR EXITS
327 .SBTTL ERROR EXITS
328
329 ; BRANCHES TO THE ERROR EXITS BUMP UP AN ERROR INDEX WHICH IS
330 ; USED TO LOCATE THE APPROPRIATE ERROR MESSAGE. THE MESSAGE IS
331 ; OUTPUT TO "TI".
332
333
334 000364 005267 000442' PRIVT: INC ERRNUM ; TERMINAL NOT PRIVILEGED
335 000370 005267 000442' PRIV: INC ERRNUM ; PRIVILEGE VIOLATION ON MFD
336 000374 005267 000442' VNMO: INC ERRNUM ; VOLUME NOT MOUNTED
337 000400 005267 000442' WATF: INC ERRNUM ; WRITE ATTRIBUTES FAILURE
338 000404 005267 000442' NCREAT: INC ERRNUM ; FAILED TO CREATE
339 000410 005267 000442' NENTER: INC ERRNUM ; FAILED TO ENTER IN MFD
340 000414 005267 000442' DUPLIC: INC ERRNUM ; DUPLICATE DIRECTORY
341 000420 005267 000442' NDDEV: INC ERRNUM ; NOT A DIRECTORY DEVICE
342 000424 005267 000442' BADDEV: INC ERRNUM ; BAD DEVICE NAME
343 000430 .SYNER::
344 000430 005267 000442' SYNERR: INC ERRNUM ; SYNTAX ERROR
345 000434 CMLERR: ; COMMAND LINE I/O ERROR
346 000434 016700 000442' MOV ERRNUM,R0 ; GET ERROR INDEX
347 000440 006300 ASL R0
348 000442 016000 000000' MOV ERRMSG(R0),R0 ; GET ERROR MESSAGE ADDR
349 000446 010001 MOV R0,R1
350 000450 105721 10$: TSTB (R1)+ ; LOOK FOR THE TERMINATOR
351 000452 001401 BEQ 20$
352 000454 000775 BR 10$
353 000456 160001 20$: SUB R0,R1 ; COMPUTE CHARACTER COUNT
354
355 000460 QIO$S #IO.WVB,#COLUN,#COEFN,,,,<R0,R1,<#' >>
356 000520 103405 BCS 30$
357 000522 WTSE$S #COEFN ; WAIT FOR MESSAGE
358 000534 30$: EXIT$S
359
UFD - CREATE DIRECTORY FILE MACRO M1108 05-DEC-77 20:56 PAGE 9
QIO CALL ROUTINE
361 .SBTTL QIO CALL ROUTINE
362
363 ;+
364 ;
365 ; CALL: JSR R5,XQIO
366 ; .WORD DPB
367 ; (RETURN)
368 ;
369 ;-
370
371
372 000542 XQIO: DIR$ (R5)+ ; DO IT
373 000546 103404 BCS 1$ ; CHECK FOR DIRECTIVE ERROR
374
375 .IF DF R$$11M
376 WTSE$S #UFDEFN ; WAIT FOR COMPLETION
377 .ENDC
378
379 000550 105767 000460' TSTB IOSTAT ; CHECK FOR I/O ERROR
380 000554 003001 BGT 1$
381 000556 000261 SEC ; SET CARRY ON ERROR
382 000560 000205 1$: RTS R5
383
384
385
386 000000' .END $UFD
UFD - CREATE DIRECTORY FILE MACRO M1108 05-DEC-77 20:56 PAGE 9-1
SYMBOL TABLE
ASLUN 000122R 002 F.BKDN= 000026 F.STBK= 000036 N.NEXT= 000022 U.C1 = ****** GX
ATTBLK 000322R 002 F.BKDS= 000020 F.UNIT= 000136 N.STAT= 000020 VNMO 000374R 004
A.LULU= 000002 F.BKEF= 000050 F.URBD= 000020 N.UNIT= 000034 WATF 000400R 004
A.LUNA= 000004 F.BKP1= 000051 F.VBN = 000064 PRIV 000370R 004 WATT 000212R 002
A.LUNU= 000006 F.BKST= 000024 F.VBSZ= 000060 PRIVLG 000020RG 004 XQIO 000542R 004
BADDEV 000424R 004 F.BKVB= 000064 GCML 000000R 002 PRIVT 000364R 004 $CAT5 = ****** GX
CMLERR 000434R 004 F.CNTG= 000034 G.LUBA= 000004 PROMPL= 000004 $FNB 000366RG 002
COEFN = 000002 F.DFNB= 000046 G.LUCW= 000004 PROMPT 000424R 002 $PRFLG 000342RG 002
COLUN = 000002 F.DSPT= 000044 G.LUFB= 000003 Q.IOAE= 000012 $UALL 000434RG 002
CREATE 000132R 002 F.DVNM= 000134 G.LULU= 000002 Q.IOEF= 000006 $UDEV = 000126RG 002
DELET 000272R 002 F.EFBK= 000010 G.LUNA= 000000 Q.IOFN= 000002 $UDSIZ= 000154R 002
DUPLIC 000414R 004 F.EFN = 000050 G.LUNU= 000002 Q.IOLU= 000004 $UFD 000000RG 004
ENTER 000162R 002 F.EOBB= 000032 G.MCRB= 000002 Q.IOPL= 000014 $UPRO 000432RG 002
ERRMSG 000000R 003 F.ERR = 000052 IE.DUP= ****** GX Q.IOPR= 000007 $UUIC 000430RG 002
ERRM1 000026R 003 F.FACC= 000043 IE.PRI= ****** GX Q.IOSB= 000010 $UUNIT= 000130RG 002
ERRM10 000440R 003 F.FFBY= 000014 IE.SRE= ****** GX RECATT 000350R 002 $UVNAM 000436RG 002
ERRM11 000502R 003 F.FNAM= 000110 IOSTAT 000460R 002 REMOVE 000242R 002 $UVNML 000440RG 002
ERRM2 000073R 003 F.FNB = 000102 IO.CRE= ****** GX R$$10F= 000001 $$ = 000067
ERRM3 000117R 003 F.FTYP= 000116 IO.DEL= ****** GX R$$11D= 000001 $$$ = 000000R 005
ERRM4 000153R 003 F.FVER= 000120 IO.ENA= ****** GX R$$20F= 000001 $$$ARG= 000003
ERRM5 000206R 003 F.HIBK= 000004 IO.RNA= ****** GX R.FIX = ****** GX $$$OST= 000006
ERRM6 000246R 003 F.LUN = 000042 IO.WAT= ****** GX STRING 000444R 002 $$$T1 = 000011
ERRM7 000304R 003 F.MBCT= 000054 IO.WVB= ****** GX SYNERR 000430R 004 .CKPRV= ****** GX
ERRM8 000346R 003 F.MBC1= 000055 LUNBUF 000444R 002 S.FATT= 000016 .CRTSK= ****** GX
ERRM9 000406R 003 F.MBFG= 000056 M$$HDR= 000001 S.FDB = 000140 .GTCML= ****** GX
ERRNUM 000442R 002 F.NRBD= 000024 NCREAT 000404R 004 S.FNAM= 000006 .PPASC= ****** GX
E$$MSG= 000001 F.NREC= 000030 NDDEV 000420R 004 S.FNB = 000036 .PSTRT= ****** GX
E$$TRP= 000001 F.OVBS= 000030 NENTER 000410R 004 S.FNBW= 000017 .SYNER 000430RG 004
FD.SDI= ****** GX F.RACC= 000016 N.DID = 000024 S.FNTY= 000004 .TPARS= ****** GX
FD.SQD= ****** GX F.RATT= 000001 N.DVNM= 000032 S.FTYP= 000002 .UFDKT= ****** GX
F$$LVL= 000001 F.RCNM= 000034 N.FID = 000000 S.NFEN= 000020 ...PC1= 000000
F.ALOC= 000040 F.RCTL= 000017 N.FNAM= 000006 UC.F11= ****** GX ...PC2= 000404R 002
F.BBFS= 000062 F.RSIZ= 000002 N.FTYP= 000014 UFDEFN= 000001 ...PC3= 000000
F.BDB = 000070 F.RTYP= 000000 N.FVER= 000016 UFDLUN= 000001 ...TPC= 000140
F.BGBC= 000057
. ABS. 000000 000
000000 001
IMPURE 000464 002
MSGSTR 000566 003
CODE 000562 004
$DPB$$ 000006 005
ERRORS DETECTED: 0
VIRTUAL MEMORY USED: 3943 WORDS ( 16 PAGES)
DYNAMIC MEMORY: 5216 WORDS ( 20 PAGES)
ELAPSED TIME: 00:00:50
[53,10]UFD,[53,20]UFD/-SP=[53,30]RSXDC,UFD
STATE TABLE FOR UFD COMMAND LIN MACRO M1108 05-DEC-77 20:57
TABLE OF CONTENTS
3- 3 TITLE PAGE
4- 31 MACRO CALLS AND DEFINITIONS
4- 49 IMPURE DATA
5- 55 STATE TABLE FOR PARSER
6- 136 ACTION ROUTINES FOR THE COMMAND LINE PARSER
STATE TABLE FOR UFD COMMAND LIN MACRO M1108 05-DEC-77 20:57 PAGE 3
1 .TITLE STATE TABLE FOR UFD COMMAND LINE
2
3 .SBTTL TITLE PAGE
4
5 .IDENT "V0105"
6
7 ; COPYRIGHT (C) 1975, 1978 BY
8 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD MASS.
9 ;
10 ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
11 ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION
12 ; OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES THERE-
13 ; OF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON.
14 ; NO TITLE TO OR OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
15 ;
16 ; THE INFORMATION CONTAINED IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
17 ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
18 ; CORPORATION.
19 ;
20 ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
21 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPILED BY DIGITAL.
22 ;
23 ;
24 ; ANDREW C. GOLDSTEIN 20 JAN 75 20:00
25
26 .NLIST MEB
27 .NLIST ME
28
29 000000 R$$EIS=0
STATE TABLE FOR UFD COMMAND LIN MACRO M1108 05-DEC-77 20:57 PAGE 4
MACRO CALLS AND DEFINITIONS
31 .SBTTL MACRO CALLS AND DEFINITIONS
32
33 ; SYSTEM MACRO CALLS
34
35 .MCALL CALL,RETURN,FHDOF$
36
37 000000 FHDOF$
38
39 .IF NDF,R$$EIS
40
41 .MACRO SOB RX,ADDR
42 DEC RX
43 BNE ADDR
44 .ENDM SOB
45
46 .ENDC
47
48
49 .SBTTL IMPURE DATA
50
51 000000 .PSECT IMPURE,D
52
53 000000 GRCNT: .BLKW 1 ; GROUP COUNTER FOR PROTECTION PARSE
STATE TABLE FOR UFD COMMAND LIN MACRO M1108 05-DEC-77 20:57 PAGE 5
STATE TABLE FOR PARSER
55 .SBTTL STATE TABLE FOR PARSER
56
57 .MCALL ISTAT$,STATE$,TRAN$
58
59 000002 ISTAT$ .UFDST,.UFDKT
60
61 .GLOBL .PSTRT
62
63 ; READ DEVICE AND UNIT NUMBER
64
65 000000 STATE$ .PSTRT
66 000000 TRAN$ $ANY,,SETDV1
67
68 000000 STATE$
69 000000 TRAN$ $ANY,,SETDV2
70
71 000000 STATE$
72 000000 TRAN$ $NUMBR,DEV1,SETUNT
73 000000 TRAN$ $LAMDA
74
75 000000 STATE$ DEV1
76 000000 TRAN$ ':
77
78 ; READ VOLUME LABEL
79
80 000000 STATE$
81 000000 TRAN$ $STRNG,,SETLAB
82
83 ; READ UIC
84
85 000000 STATE$
86 000000 TRAN$ '[
87
88 000000 STATE$
89 000000 TRAN$ $NUMBR,,SETGN
90
91 000000 STATE$
92 000000 TRAN$ <',>
93
94 000000 STATE$
95 000000 TRAN$ $NUMBR,,SETPN
96
97 000000 STATE$
98 000000 TRAN$ ']
99
100 ; SCAN FOR OPTIONS AND END OF LINE
101
102 000000 STATE$ OPTS
103 000000 TRAN$ $EOS,$EXIT
104 000000 TRAN$ '/
105
106 000000 STATE$
107 000000 TRAN$ "ALLOC",ALC
108 000000 TRAN$ "PRO",PRO
109
110 ; SET ALLOCATION
111
STATE TABLE FOR UFD COMMAND LIN MACRO M1108 05-DEC-77 20:57 PAGE 5-1
STATE TABLE FOR PARSER
112 000000 STATE$ ALC
113 000000 TRAN$ '=
114
115 000000 STATE$
116 000000 TRAN$ $NUMBR,OPTS,SETALC
117
118 ; PROTECTION
119
120 000000 STATE$ PRO
121 000000 TRAN$ '=
122
123 000000 STATE$
124 000000 TRAN$ '[,,IGROUP
125
126 000000 STATE$ SPRO
127 000000 TRAN$ '],OPTS,ENDGRP
128 000000 TRAN$ <',>,SPRO,NXGRP
129 000000 TRAN$ 'R,SPRO,SETRP
130 000000 TRAN$ 'W,SPRO,SETWP
131 000000 TRAN$ 'E,SPRO,SETEP
132 000000 TRAN$ 'D,SPRO,SETDP
133
134 000000 STATE$
STATE TABLE FOR UFD COMMAND LIN MACRO M1108 05-DEC-77 20:57 PAGE 6
ACTION ROUTINES FOR THE COMMAND LINE PARSER
136 .SBTTL ACTION ROUTINES FOR THE COMMAND LINE PARSER
137
138 000000 .PSECT CODE
139
140 ; DEVICE NAME CHAR 1
141
142 000000 116767 000000G 000000G SETDV1: MOVB .PCHAR,$UDEV
143 000006 RETURN
144
145 ; DEVICE NAME CHAR 2
146
147 000010 116767 000000G 000001G SETDV2: MOVB .PCHAR,$UDEV+1
148 000016 016767 000000G 000000C MOV $UDEV,$FNB+N.DVNM
149 000024 RETURN
150
151 ; UNIT NUMBER
152
153 000026 016767 000000G 000000G SETUNT: MOV .PNUMB,$UUNIT
154 000034 016767 000000G 000000C MOV $UUNIT,$FNB+N.UNIT
155 000042 RETURN
156
157 ; VOLUME LABEL
158
159 000044 016767 000000G 000000G SETLAB: MOV .PSTCN,$UVNML
160 000052 016767 000000G 000000G MOV .PSTPT,$UVNAM
161 000060 RETURN
162
163 ; PPN - GROUP NUMBER
164
165 000062 116767 000000G 000001G SETGN: MOVB .PNUMB,$UUIC+1
166 000070 105767 000001G TSTB .PNUMB+1 ; CHECK IF NUMBER IS IN RANGE
167 000074 001065 BNE SYNERR ; GREATER THAN 377 - OUT
168 000076 RETURN
169
170 ; PPN - PROGRAMMER NUMBER
171
172 000100 116767 000000G 000000G SETPN: MOVB .PNUMB,$UUIC
173 000106 105767 000001G TSTB .PNUMB+1 ; CHECK IF NUMBER IS IN RANGE
174 000112 001056 BNE SYNERR ; GREATER THAN 377 - OUT
175 000114 RETURN
176
177 ; NUMBER OF ENTRIES TO ALLOCATE
178
179 000116 016767 000000G 000000G SETALC: MOV .PNUMB,$UALL
180 000124 RETURN
181
182 ; SET PERMISSIONS
183 ; INITIALIZE
184
185 000126 012767 000004 000000' IGROUP: MOV #4,GRCNT
186
187 ; MOVE TO NEXT PERMISSIONS CATEGORY
188
189 000134 000261 NXGRP: SEC ; FORCE ONES
190 000136 006067 000000G ROR $UPRO
191 000142 006267 000000G ASR $UPRO ; SHIFT TO NEXT GROUP
192 000146 006267 000000G ASR $UPRO
STATE TABLE FOR UFD COMMAND LIN MACRO M1108 05-DEC-77 20:57 PAGE 6-1
ACTION ROUTINES FOR THE COMMAND LINE PARSER
193 000152 006267 000000G ASR $UPRO
194 000156 005367 000000' DEC GRCNT ; COUNT GROUPS
195 000162 002432 BLT SYNERR ; TOO MANY IS AN ERROR
196 000164 RETURN
197
198 ; SET READ PERMIT
199
200 000166 042767 010000 000000G SETRP: BIC #FP.RDV*10000,$UPRO
201 000174 RETURN
202
203 ; SET WRITE PERMIT
204
205 000176 042767 020000 000000G SETWP: BIC #FP.WRV*10000,$UPRO
206 000204 RETURN
207
208 ; SET EXTEND PERMIT
209
210 000206 042767 040000 000000G SETEP: BIC #FP.EXT*10000,$UPRO
211 000214 RETURN
212
213 ; SET DELETE PERMIT
214
215 000216 042767 100000 000000G SETDP: BIC #FP.DEL*10000,$UPRO
216 000224 RETURN
217
218 ; END OF PROTECTION SPEC
219
220 000226 005767 000000' ENDGRP: TST GRCNT ; CHECK THE GROUP COUNT
221 000232 001402 BEQ 10$
222 000234 000167 000010 JMP SYNERR ; MUST HAVE 4
223 000240 012737 10$: MOV (PC)+,@(PC)+ ; ENABLE PROTECTION ON WRITE ATTRIBUTES
224 000242 002 002 .BYTE 2,2
225 000244 000000G .WORD $PRFLG
226 000246 RETURN
227
228 ; TO HERE FOR ACTION ROUTINE DETECTED SYNTAX ERRORS
229
230 000250 000167 000000G SYNERR: JMP .SYNER
231
232
233
234 000001 .END
STATE TABLE FOR UFD COMMAND LIN MACRO M1108 05-DEC-77 20:57 PAGE 6-2
SYMBOL TABLE
ALC 000062R 003 H.PROJ= 000011 M.LBSZ= 000007 SETPN 000100R 005 $SUBXP= 000310
DEV1 000020R 003 H.SCHA= 000015 M.MAX = 000011 SETRP 000166R 005 $UALL = ****** GX
ENDGRP 000226R 005 H.UCHA= 000014 M.RTRV= 000012 SETUNT 000026R 005 $UDEV = ****** GX
E$$MSG= 000001 H.UFAT= 000016 M.USE = 000010 SETWP 000176R 005 $UPRO = ****** GX
E$$TRP= 000001 IGROUP 000126R 005 NXGRP 000134R 005 SPRO 000100R 003 $UUIC = ****** GX
FP.DEL= 000010 I.CRDT= 000031 N.DVNM= ****** GX SYNERR 000250R 005 $UUNIT= ****** GX
FP.EXT= 000004 I.CRTI= 000040 N.UNIT= ****** GX S.HDHD= 000056 $UVNAM= ****** GX
FP.RAT= 000001 I.DASZ= 000007 OPTS 000044R 003 S.IDHD= 000056 $UVNML= ****** GX
FP.RDV= 000001 I.EXDT= 000046 PRO 000072R 003 S.MPHD= 000012 $$$FLG= 177777
FP.WRV= 000002 I.FNAM= 000000 R$$EIS= 000000 UC.CON= 000200 $$$KEY= 000001
F$$LVL= 000001 I.FTYP= 000006 R$$10F= 000001 UC.DLK= 000100 $$$STA= 000100R 003
GRCNT 000000R 002 I.FVER= 000010 R$$11D= 000001 $ANY = 000320 $$$TMP= 000010R 004
H.CKSM= 000776 I.RVDT= 000014 R$$20F= 000001 $BLANK= 000306 .PCHAR= ****** GX
H.FCHA= 000014 I.RVNO= 000012 SC.BAD= 000100 $DNUMB= 000314 .PNUMB= ****** GX
H.FLEV= 000006 I.RVTI= 000023 SC.MDL= 000200 $EOS = 000312 .PSTCN= ****** GX
H.FNUM= 000002 I.TISZ= 000006 SETALC 000116R 005 $EXIT = 000000 .PSTPT= ****** GX
H.FOWN= 000010 M$$HDR= 000001 SETDP 000216R 005 $FNB = ****** GX .PSTRT 000000RG 003
H.FPRO= 000012 M.CTSZ= 000006 SETDV1 000000R 005 $LAMDA= 000300 .SYNER= ****** GX
H.FSEQ= 000004 M.EFNU= 000002 SETDV2 000010R 005 $NUMBR= 000302 .UFDKT 000000RG 004
H.IDOF= 000000 M.EFSQ= 000004 SETEP 000206R 005 $PRFLG= ****** GX .UFDST 000000RG 003
H.MPOF= 000001 M.ERVN= 000001 SETGN 000062R 005 $RAD50= 000316 ...GBL= 000000
H.PROG= 000010 M.ESQN= 000000 SETLAB 000044R 005 $STRNG= 000304 ...TPC= 000012
. ABS. 000000 000
000000 001
IMPURE 000002 002
$STATE 000144 003
$KTAB 000020 004
CODE 000254 005
ERRORS DETECTED: 0
VIRTUAL MEMORY USED: 2073 WORDS ( 9 PAGES)
DYNAMIC MEMORY: 3104 WORDS ( 11 PAGES)
ELAPSED TIME: 00:01:05
[53,10]UFDPTB,[53,20]UFDPTB/-SP=[53,30]RSXDC,UFDPTB