]> wirehaze git hosting - MS-DOS.git/blob - v2.0/source/RUCODE.ASM

wirehaze git hosting

Create README.fr-fr.md
[MS-DOS.git] / v2.0 / source / RUCODE.ASM
1 TITLE COMMAND Language modifiable Code Resident
2
3
4 .xlist
5 .xcref
6 INCLUDE DOSSYM.ASM
7 INCLUDE DEVSYM.ASM
8 INCLUDE COMSEG.ASM
9 INCLUDE COMSW.ASM
10 .list
11 .cref
12
13 INCLUDE COMEQU.ASM
14
15 DATARES SEGMENT PUBLIC
16 EXTRN ENDBATMES:BYTE,BATCH:WORD,ECHOFLAG:BYTE,CDEVAT:BYTE
17 EXTRN DEVENAM:BYTE,DRVLET:BYTE,MREAD:BYTE,MWRITE:BYTE,IOTYP:BYTE
18 EXTRN ERRCD_24:WORD,MESBAS:BYTE,ERRMES:BYTE,DEVEMES:BYTE
19 EXTRN DRVNUM:BYTE,LOADING:BYTE,REQUEST:BYTE,PIPEFLAG:BYTE
20 EXTRN SINGLECOM:WORD,FORFLAG:BYTE,BADFAT:BYTE,NEWLIN:BYTE
21 EXTRN MESADD:BYTE
22 DATARES ENDS
23
24
25 CODERES SEGMENT PUBLIC BYTE
26
27 EXTRN SAVHAND:NEAR,RESTHAND:NEAR,CONTCTERM:NEAR
28 EXTRN GETCOMDSK2:NEAR
29
30 PUBLIC ASKEND,DSKERR,RPRINT
31
32 ASSUME CS:RESGROUP,DS:NOTHING,ES:NOTHING,SS:NOTHING
33
34 ;********************************************
35 ; TERMINATE BATCH JOB PROMPTER
36
37 ASSUME DS:RESGROUP
38 ASKEND:
39 CALL SAVHAND
40 ASKEND2:
41 MOV DX,OFFSET RESGROUP:ENDBATMES
42 CALL RPRINT
43 MOV AX,(STD_CON_INPUT_FLUSH SHL 8)+STD_CON_INPUT
44 INT int_command
45 AND AL,5FH
46 CMP AL,"N"
47 JZ RESTHJ
48 CMP AL,"Y"
49 JNZ ASKEND2
50 MOV ES,[BATCH]
51 MOV AH,DEALLOC
52 INT int_command
53 MOV [BATCH],0 ; Flag no batch AFTER DEALLOC in case
54 ; of ^C
55 MOV [ECHOFLAG],1 ; Make sure ECHO turned back on
56 RESTHJ:
57 CALL RESTHAND
58 JMP CONTCTERM
59
60
61
62 DSKERR:
63 ASSUME DS:NOTHING,ES:NOTHING,SS:NOTHING
64 ; ******************************************************
65 ; THIS IS THE DEFAULT DISK ERROR HANDLING CODE
66 ; AVAILABLE TO ALL USERS IF THEY DO NOT TRY TO
67 ; INTERCEPT INTERRUPT 24H.
68 ; ******************************************************
69 STI
70 PUSH DS
71 PUSH ES
72 PUSH DI
73 PUSH CX
74 PUSH AX
75 MOV DS,BP
76 MOV AX,[SI.SDEVATT]
77 MOV [CDEVAT],AH
78 PUSH CS
79 POP ES
80 MOV DI,OFFSET RESGROUP:DEVENAM
81 MOV CX,8
82 ADD SI,SDEVNAME ; Suck up device name (even on Block)
83 REP MOVSB
84 POP AX
85 POP CX
86 POP DI
87 POP ES ; Stack just contains DS at this point
88 CALL SAVHAND
89 PUSH CS
90 POP DS ; Set up local data segment
91 ASSUME DS:RESGROUP
92
93 PUSH DX
94 CALL CRLF
95 POP DX
96
97 ADD AL,"A" ; Compute drive letter (even on character)
98 MOV [DRVLET],AL
99 TEST AH,80H ; Check if hard disk error
100 JZ NOHARDE
101 TEST [CDEVAT],DEVTYP SHR 8
102 JNZ NOHARDE
103 JMP FATERR
104 NOHARDE:
105 MOV SI,OFFSET RESGROUP:MREAD
106 TEST AH,1
107 JZ SAVMES
108 MOV SI,OFFSET RESGROUP:MWRITE
109 SAVMES:
110 LODSW
111 MOV WORD PTR [IOTYP],AX
112 LODSW
113 MOV WORD PTR [IOTYP+2],AX
114 AND DI,0FFH
115 CMP DI,12
116 JBE HAVCOD
117 MOV DI,12
118 HAVCOD:
119 MOV [ERRCD_24],DI
120 SHL DI,1
121 MOV DI,WORD PTR [DI+MESBAS] ; Get pointer to error message
122 XCHG DI,DX ; May need DX later
123 CALL RPRINT ; Print error type
124 MOV DX,OFFSET RESGROUP:ERRMES
125 CALL RPRINT
126 TEST [CDEVAT],DEVTYP SHR 8
127 JZ BLKERR
128 MOV DX,OFFSET RESGROUP:DEVEMES
129 MOV AH,STD_CON_STRING_OUTPUT
130 INT int_command
131 JMP SHORT ASK ; Don't ralph on COMMAND
132
133 BLKERR:
134 MOV DX,OFFSET RESGROUP:DRVNUM
135 CALL RPRINT
136 CMP [LOADING],0
137 JZ ASK
138 CALL RESTHAND
139 JMP GETCOMDSK2 ; If error loading COMMAND, re-prompt
140 ASK:
141 MOV DX,OFFSET RESGROUP:REQUEST
142 CALL RPRINT
143 MOV AX,(STD_CON_INPUT_FLUSH SHL 8)+STD_CON_INPUT
144 INT int_command ; Get response
145 CALL CRLF
146 OR AL,20H ; Convert to lower case
147 MOV AH,0 ; Return code for ignore
148 CMP AL,"i" ; Ignore?
149 JZ EEXIT
150 INC AH
151 CMP AL,"r" ; Retry?
152 JZ EEXIT
153 INC AH
154 CMP AL,"a" ; Abort?
155 JNZ ASK
156 XOR DX,DX
157 XCHG DL,[PIPEFLAG] ; Abort a pipe in progress
158 OR DL,DL
159 JZ CHECKFORA
160 CMP [SINGLECOM],0
161 JZ CHECKFORA
162 MOV [SINGLECOM],-1 ; Make sure SINGLECOM exits
163 CHECKFORA:
164 CMP [ERRCD_24],0 ; Write protect
165 JZ ABORTFOR
166 CMP [ERRCD_24],2 ; Drive not ready
167 JNZ EEXIT ; Don't abort the FOR
168 ABORTFOR:
169 MOV [FORFLAG],0 ; Abort a FOR in progress
170 CMP [SINGLECOM],0
171 JZ EEXIT
172 MOV [SINGLECOM],-1 ; Make sure SINGLECOM exits
173 EEXIT:
174 MOV AL,AH
175 MOV DX,DI
176 RESTHD:
177 CALL RESTHAND
178 POP DS
179 IRET
180
181 FATERR:
182 MOV DX,OFFSET RESGROUP:BADFAT
183 CALL RPRINT
184 MOV DX,OFFSET RESGROUP:ERRMES
185 CALL RPRINT
186 MOV DX,OFFSET RESGROUP:DRVNUM
187 CALL RPRINT
188 MOV AL,2 ; Abort
189 JMP RESTHD
190
191
192 ;*********************************************
193 ; Print routines for Tokenized resident messages
194
195 ASSUME DS:RESGROUP,SS:RESGROUP
196
197 CRLF:
198 MOV DX,OFFSET RESGROUP:NEWLIN
199
200 RPRINT:
201 PUSH AX ; Tokenized message printer
202 PUSH BX
203 PUSH DX
204 PUSH SI
205 MOV SI,DX
206 RPRINT1:
207 LODSB
208 PUSH AX
209 AND AL,7FH
210 CMP AL,"0"
211 JB RPRINT2
212 CMP AL,"9"
213 JA RPRINT2
214 SUB AL,"0"
215 CBW
216 SHL AX,1
217 MOV BX,OFFSET RESGROUP:MESADD
218 ADD BX,AX
219 MOV DX,[BX]
220 CALL RPRINT
221 JMP SHORT RPRINT3
222 RPRINT2:
223 MOV DL,AL
224 MOV AH,STD_CON_OUTPUT
225 INT int_command
226 RPRINT3:
227 POP AX
228 TEST AL,10000000B ; High bit set indicates end
229 JZ RPRINT1
230 POP SI
231 POP DX
232 POP BX
233 POP AX
234 RET
235
236 CODERES ENDS
237 END
238