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

wirehaze git hosting

Update SECURITY.md
[MS-DOS.git] / v2.0 / source / TUCODE.ASM
1 TITLE COMMAND Language midifiable Code Transient
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 ECHOFLAG:BYTE
17 DATARES ENDS
18
19 TRANDATA SEGMENT PUBLIC
20 EXTRN SUREMES:BYTE,NOTFND:BYTE,ECHOMES:BYTE,CTRLCMES:BYTE
21 EXTRN ONMES:BYTE,OFFMES:BYTE,VERIMES:BYTE,BAD_ON_OFF:BYTE
22 EXTRN VOLMES:BYTE,GOTVOL:BYTE,NOVOL:BYTE,WeekTab:BYTE
23 EXTRN CurDat_Mid:BYTE
24 TRANDATA ENDS
25
26 TRANSPACE SEGMENT PUBLIC
27 EXTRN RESSEG:WORD,CURDRV:BYTE,DIRBUF:BYTE,CHARBUF:BYTE
28 TRANSPACE ENDS
29
30 TRANCODE SEGMENT PUBLIC BYTE
31
32 EXTRN PRINT:NEAR,SCANOFF:NEAR,CRLF2:NEAR,RESTUDIR:NEAR,CERROR:NEAR
33 EXTRN CRPRINT:NEAR,OUT:NEAR,ZPRINT:NEAR
34 EXTRN ERROR_PRINT:NEAR,MesTran:NEAR,P_Date:NEAR
35
36 IF KANJI
37 EXTRN TESTKANJ:NEAR
38 ENDIF
39 PUBLIC NOTEST2,ECHO,CNTRLC,VERIFY,PRINTVOL,GetDate,PRINT_DATE
40
41 ASSUME CS:TRANGROUP,DS:TRANGROUP,ES:TRANGROUP,SS:NOTHING
42
43 ;***************************************
44 ; ARE YOU SURE prompt when deleting *.*
45
46 NOTEST2:
47 MOV CX,11
48 MOV SI,FCB+1
49 AMBSPEC:
50 LODSB
51 CMP AL,"?"
52 JNZ ALLFIL
53 LOOP AMBSPEC
54 ALLFIL:
55 CMP CX,0
56 JNZ NOPRMPT
57 ASKAGN:
58 MOV DX,OFFSET TRANGROUP:SUREMES ; "Are you sure (Y/N)?"
59 CALL PRINT
60 MOV SI,80H
61 MOV DX,SI
62 MOV WORD PTR [SI],120 ; zero length
63 MOV AX,(STD_CON_INPUT_FLUSH SHL 8) OR STD_CON_STRING_INPUT
64 INT int_command
65 LODSW
66 OR AH,AH
67 JZ ASKAGN
68 CALL SCANOFF
69 OR AL,20H ; Convert to lower case
70 CMP AL,'n'
71 JZ RETERA
72 CMP AL,'y'
73 PUSHF
74 CALL CRLF2
75 POPF
76 JNZ ASKAGN
77 NOPRMPT:
78 MOV AH,FCB_DELETE
79 MOV DX,FCB
80 INT int_command
81 PUSH AX
82 CALL RESTUDIR
83 POP AX
84 MOV DX,OFFSET TRANGROUP:NOTFND
85 INC AL
86 JZ CERRORJ
87 RETERA:
88 RET
89
90
91 ;************************************************
92 ; ECHO, BREAK, and VERIFY commands. Check for "ON" and "OFF"
93
94 ECHO:
95 ASSUME DS:TRANGROUP,ES:TRANGROUP
96 CALL ON_OFF
97 JC DOEMES
98 MOV DS,[RESSEG]
99 ASSUME DS:RESGROUP
100 JNZ ECH_OFF
101 MOV [ECHOFLAG],1
102 RET
103 ECH_OFF:
104 MOV [ECHOFLAG],0
105 RET
106
107 ASSUME DS:TRANGROUP
108 DOEMES:
109 MOV AL,BYTE PTR DS:[80H]
110 CMP AL,2
111 JB PECHO ; Gota have at least 2 characters
112 MOV DX,82H ; Skip one char after "ECHO"
113 CALL CRPRINT
114 JMP CRLF2
115
116 PECHO:
117 MOV DS,[RESSEG]
118 ASSUME DS:RESGROUP
119 MOV BL,[ECHOFLAG]
120 PUSH CS
121 POP DS
122 ASSUME DS:TRANGROUP
123 MOV DX,OFFSET TRANGROUP:ECHOMES
124 JMP SHORT PYN
125
126
127 CERRORJ:
128 JMP CERROR
129
130 ; is rest of line blank?
131 IsBlank:
132 MOV SI,81h ; point at text spot
133 CALL SCANOFF ; skip separators
134 SUB SI,81h ; number of characters advanced
135 MOV CX,SI ; put count in byte addressable spot
136 CMP CL,DS:[80h] ; compare with count
137 return ; bye!
138
139 ;The BREAK command
140 CNTRLC:
141 CALL ON_OFF
142 MOV AX,(SET_CTRL_C_TRAPPING SHL 8) OR 1
143 JC PCNTRLC
144 JNZ CNTRLC_OFF
145 MOV DL,1
146 INT int_command ; Set ^C
147 RET
148 CNTRLC_OFF:
149 XOR DL,DL
150 INT int_command ; Turn off ^C check
151 RET
152
153 PCNTRLC:
154 CALL IsBlank ; rest of line blank?
155 JNZ CERRORJ ; no, oops!
156 XOR AL,AL
157 INT int_command
158 MOV BL,DL
159 MOV DX,OFFSET TRANGROUP:CTRLCMES
160 PYN:
161 CALL PRINT
162 MOV DX,OFFSET TRANGROUP:ONMES
163 OR BL,BL
164 JNZ PRINTVAL
165 MOV DX,OFFSET TRANGROUP:OFFMES
166 PRINTVAL:
167 JMP PRINT
168
169 VERIFY:
170 CALL ON_OFF
171 MOV AX,(SET_VERIFY_ON_WRITE SHL 8) OR 1
172 JC PVERIFY
173 JNZ VER_OFF
174 INT int_command ; Set verify
175 RET
176 VER_OFF:
177 DEC AL
178 INT int_command ; Turn off verify after write
179 RET
180
181 PVERIFY:
182 CALL IsBlank ; is rest of line blank?
183 JNZ CERRORJ ; nope...
184 MOV AH,GET_VERIFY_ON_WRITE
185 INT int_command
186 MOV BL,AL
187 MOV DX,OFFSET TRANGROUP:VERIMES
188 JMP PYN
189
190 ON_OFF:
191 MOV SI,FCB+1
192 LODSB
193 OR AL,20H
194 CMP AL,'o'
195 JNZ BADONF
196 LODSW
197 OR AX,2020H ; Convert to lower case
198 CMP AL,'n'
199 JNZ OFFCHK
200 CMP AH,' ' ; ' ' ORed with 20H is still ' '
201 JNZ BADONF
202 RET ; Carry clear from CMP
203 OFFCHK:
204 CMP AX,6666H ; 'ff'
205 JNZ BADONF
206 LODSB
207 CMP AL,' '
208 JNZ BADONF
209 INC AL ; Reset zero Carry clear from CMP
210 RET
211 BADONF:
212 MOV DX,OFFSET TRANGROUP:BAD_ON_OFF
213 STC
214 RET
215
216 ;********************************
217 ; Print volume ID info
218
219 ASSUME DS:TRANGROUP,ES:TRANGROUP
220
221 PRINTVOL:
222 PUSH AX ; AX return from SEARCH_FIRST for VOL ID
223 MOV DX,OFFSET TRANGROUP:VOLMES
224 CALL PRINT
225 MOV AL,DS:[FCB]
226 ADD AL,'@'
227 CMP AL,'@'
228 JNZ DRVOK
229 MOV AL,[CURDRV]
230 ADD AL,'A'
231 DRVOK:
232 CALL OUT
233 POP AX
234 OR AL,AL
235 JZ GOODVOL
236 MOV DX,OFFSET TRANGROUP:NOVOL
237 CALL PRINT
238 JMP CRLF2
239 GOODVOL:
240 MOV DX,OFFSET TRANGROUP:GOTVOL
241 CALL PRINT
242 MOV SI,OFFSET TRANGROUP:DIRBUF + 8
243 MOV CX,11
244 MOV DI,OFFSET TRANGROUP:CHARBUF
245 MOV DX,DI
246 REP MOVSB
247 MOV AX,0A0DH
248 STOSW
249 XOR AX,AX
250 STOSB
251 JMP ZPRINT
252
253 ;*************************************************************************
254 ; print date
255 PRINT_DATE:
256 PUSH ES
257 PUSH DI
258 PUSH CS
259 POP ES
260 MOV DI,OFFSET TRANGROUP:CHARBUF
261 MOV AH,GET_DATE
262 INT int_command ; Get date in CX:DX
263 CBW
264 CALL GetDate ; get date and put into DI
265 MOV AL," "
266 STOSB
267 MOV SI,OFFSET TRANGROUP:CURDAT_MID
268 CALL MESTRAN
269 CALL P_DATE
270 XOR AX,AX
271 STOSB
272 MOV DX,OFFSET TRANGROUP:CHARBUF
273 CALL ZPRINT
274 POP ES
275 POP DI
276 return
277
278 GetDate:
279 MOV SI,AX
280 SHL SI,1
281 ADD SI,AX ; SI=AX*3
282 ADD SI,OFFSET TRANGROUP:WEEKTAB
283 MOV BX,CX
284 MOV CX,3
285 REP MOVSB
286 return
287
288 TRANCODE ENDS
289 END
290