]> wirehaze git hosting - MS-DOS.git/blob - v4.0/src/CMD/COMMAND/TDATA.ASM

wirehaze git hosting

MZ is back!
[MS-DOS.git] / v4.0 / src / CMD / COMMAND / TDATA.ASM
1 page 80,132
2 ; SCCSID = @(#)tdata.asm 4.3 85/05/17
3 ; SCCSID = @(#)tdata.asm 4.3 85/05/17
4 TITLE COMMAND Transient Initialized DATA
5
6 ; MODIFICATION HISTORY
7 ;
8 ; EE 10-20-83 Changed the drive check indicator bytes (DCIB's) in
9 ; COMTAB to be a flag byte in which bit 0 is now the
10 ; DCIB(bit) and bit 1 is on if the command can take
11 ; switches.
12
13 fmt macro name,string,args
14 local a
15 a db string
16 PUBLIC name
17 name dw offset trangroup:a
18 irp val,<args>
19 dw offset trangroup:val
20 endm
21 endm
22
23 btab macro b,sym
24 db b
25 dw offset trangroup:sym
26 endm
27
28 .xlist
29 .xcref
30 INCLUDE comsw.asm ;AC000;
31 INCLUDE comseg.asm
32 INCLUDE EA.inc ;AN030;
33 INCLUDE dirent.inc ;AN042;
34 .list
35 .cref
36
37 BREAK MACRO subtitle
38 SUBTTL subtitle
39 PAGE
40 ENDM
41
42 ;
43 ; WARNING: DO NOT INCLUDE DOSSYM.INC BECAUSE IT DESTROYS THE MACRO 'FMT' THAT
44 ; has been defined above - RS.
45 ;
46 INCLUDE CURDIR.INC
47 INCLUDE ERROR.INC
48 INCLUDE ifequ.asm
49 INCLUDE comequ.asm
50
51 TRANSPACE SEGMENT PUBLIC BYTE ;AC000;
52 EXTRN arg_buf:BYTE
53 EXTRN bwdbuf:byte
54 EXTRN bytes_free:WORD
55 EXTRN charbuf:byte
56 EXTRN copy_Num:WORD
57 EXTRN cpyflag:BYTE
58 EXTRN DATE_OUTPUT:BYTE ;AC000;
59 EXTRN Dir_Num:WORD
60 EXTRN DRIVE_OUTPUT:BYTE ;AC000;
61 EXTRN file_size_high:WORD
62 EXTRN file_size_low:WORD
63 EXTRN major_ver_num:WORD
64 EXTRN minor_ver_num:WORD
65 EXTRN one_char_val:BYTE
66 EXTRN PARSE1_OUTPUT:BYTE ;AC000;
67 EXTRN srcbuf:byte
68 EXTRN string_ptr_2:WORD
69 EXTRN system_cpage:word
70 EXTRN TIME_OUTPUT:BYTE ;AC000;
71 EXTRN vol_drv:BYTE
72 EXTRN vol_serial:dword ;AN000;
73 TRANSPACE ENDS
74
75 TRANCODE SEGMENT PUBLIC BYTE ;AC000;
76 EXTRN $CALL:NEAR
77 EXTRN $CHDIR:NEAR
78 EXTRN $EXIT:NEAR
79 EXTRN $FOR:NEAR
80 EXTRN $IF:NEAR
81 EXTRN $MKDIR:NEAR
82 EXTRN $RMDIR:NEAR
83 EXTRN ADD_NAME_TO_ENVIRONMENT:NEAR
84 EXTRN ADD_PROMPT:NEAR
85 EXTRN build_dir_for_prompt:near
86 EXTRN CATALOG:NEAR
87 EXTRN CHCP:NEAR
88 EXTRN CLS:NEAR
89 EXTRN CNTRLC:NEAR
90 EXTRN COPY:NEAR
91 EXTRN CRENAME:NEAR
92 EXTRN CRLF2:NEAR
93 EXTRN CTIME:NEAR
94 EXTRN CTTY:NEAR
95 EXTRN DATE:NEAR
96 EXTRN ECHO:NEAR
97 EXTRN ERASE:NEAR
98 EXTRN GOTO:NEAR
99 EXTRN IFERLEV:NEAR
100 EXTRN IFEXISTS:NEAR
101 EXTRN IFNOT:NEAR
102 EXTRN PATH:NEAR
103 EXTRN PAUSE:NEAR
104 EXTRN PRINT_B:NEAR
105 EXTRN PRINT_BACK:NEAR
106 EXTRN PRINT_DATE:NEAR
107 EXTRN PRINT_CHAR:NEAR
108 EXTRN PRINT_DRIVE:NEAR
109 EXTRN PRINT_EQ:NEAR
110 EXTRN PRINT_ESC:NEAR
111 EXTRN PRINT_G:NEAR
112 EXTRN PRINT_L:NEAR
113 EXTRN PRINT_TIME:NEAR
114 EXTRN PRINT_VERSION:NEAR
115 EXTRN SHIFT:NEAR
116 EXTRN TCOMMAND:NEAR
117 EXTRN TRUENAME:NEAR ;AN000;
118 EXTRN TYPEFIL:NEAR
119 EXTRN VERSION:NEAR
120 EXTRN VOLUME:NEAR
121 EXTRN VERIFY:NEAR
122 ;
123 ; WARNING!!! No code may appear after this label!!!!
124 ;
125 PUBLIC TranCodeLast
126 TranCodeLast LABEL BYTE
127 TRANCODE ENDS
128
129 ; Data for transient portion
130
131 TRANDATA SEGMENT PUBLIC BYTE
132
133 PUBLIC accden_ptr ;AN000;
134 PUBLIC acrlf_ptr ;AN000;
135 PUBLIC arg_buf_ptr ;AN000;
136 PUBLIC badbat_ptr ;AN000;
137 PUBLIC badcd_ptr ;AN000;
138 PUBLIC badCPmes_ptr ;AN000;
139 PUBLIC badcurdrv ;AN000;
140 PUBLIC baddat_ptr ;AN000;
141 PUBLIC baddev_ptr ;AN000;
142 PUBLIC baddrv_ptr ;AN000;
143 PUBLIC badlab_ptr ;AN000;
144 PUBLIC badmkd_ptr ;AN000;
145 PUBLIC badnam_ptr ;AN000;
146 PUBLIC bad_on_off_ptr ;AN000;
147 PUBLIC badPmes_ptr ;AN000;
148 PUBLIC badrmd_ptr ;AN000;
149 PUBLIC badtim_ptr ;AN000;
150 PUBLIC batext
151 PUBLIC bytmes_ptr ;AN000;
152 PUBLIC CLSSTRING
153 PUBLIC comext
154 PUBLIC COMSPECSTR
155 PUBLIC COMTAB
156 PUBLIC copied_ptr ;AN000;
157 PUBLIC cp_active_ptr ;AN000;
158 PUBLIC cp_not_all_ptr ;AN000;
159 PUBLIC cp_not_set_ptr ;AN000;
160 PUBLIC ctrlcmes_ptr ;AN000;
161 PUBLIC curdat_mo_day ;AN000;
162 PUBLIC curdat_ptr ;AN000;
163 PUBLIC curdat_yr ;AN000;
164 PUBLIC curtim_hr_min ;AN000;
165 PUBLIC curtim_ptr ;AN000;
166 PUBLIC curtim_sec_hn ;AN000;
167 PUBLIC dback_ptr ;AN000;
168 PUBLIC del_Y_N_ptr ;AN000;
169 PUBLIC devwmes_ptr ;AN000;
170 PUBLIC dirdattim_ptr ;AN000;
171 PUBLIC dirdat_mo_day ;AN000;
172 PUBLIC dirdat_yr ;AN000;
173 PUBLIC dirhead_ptr ;AN000;
174 PUBLIC dirmes_ptr ;AN000;
175 PUBLIC dirtim_hr_min ;AN000;
176 PUBLIC dirtim_sec_hn ;AN000;
177 PUBLIC DIR_W_SYN ;AN000;
178 PUBLIC disp_file_size_ptr ;AN000;
179 PUBLIC dmes_ptr ;AN000;
180 PUBLIC echomes_ptr ;AN000;
181 PUBLIC enverr_ptr ;AN000;
182 PUBLIC eurdat_ptr ;AN000;
183 PUBLIC exeext
184 PUBLIC extend_buf_off ;AN000;
185 PUBLIC extend_buf_ptr ;AN000;
186 PUBLIC extend_buf_seg ;AN000;
187 PUBLIC extend_buf_sub ;AN000;
188 PUBLIC file_name_ptr ;AN000;
189 PUBLIC fornestmes_ptr ;AN000;
190 PUBLIC fuldir_ptr ;AN000;
191 PUBLIC IFTAB
192 PUBLIC inBdev_ptr ;AN000;
193 PUBLIC inornot_ptr ;AN000;
194 PUBLIC Inv_code_page ;AN000;
195 PUBLIC inval_path_ptr ;AN000;
196 PUBLIC japdat_ptr ;AN000;
197 PUBLIC Losterr_ptr ;AN000;
198 PUBLIC md_exists_ptr ;AN006;
199 PUBLIC msg_cont_flag ;AN000;
200 PUBLIC msg_disp_class ;AN000;
201 PUBLIC needbat_ptr ;AN000;
202 PUBLIC newdat_format ;AN000;
203 PUBLIC newdat_ptr ;AN000;
204 PUBLIC newtim_ptr ;AN000;
205 PUBLIC NLSFUNC_ptr ;AN000;
206 PUBLIC nospace_ptr ;AN000;
207 PUBLIC no_values ;AN000;
208 PUBLIC nulpath_ptr ;AN000;
209 PUBLIC offmes_ptr ;AN000;
210 PUBLIC onmes_ptr ;AN000;
211 PUBLIC overwr_ptr ;AN000;
212 PUBLIC PARSE_BREAK ;AN000;
213 PUBLIC PARSE_CHCP ;AN000;
214 PUBLIC PARSE_CHDIR ;AN000;
215 PUBLIC PARSE_CTTY ;AN000;
216 PUBLIC PARSE_DATE ;AN000;
217 PUBLIC PARSE_DIR ;AN000;
218 PUBLIC PARSE_ERASE ;AN000;
219 PUBLIC PARSE_MRDIR ;AN000;
220 PUBLIC PARSE_RENAME ;AN000;
221 PUBLIC PARSE_TIME ;AN000;
222 PUBLIC PARSE_VOL ;AN000;
223 PUBLIC PATH_TEXT
224 PUBLIC pausemes_ptr ;AN000;
225 PUBLIC pipeEmes_ptr ;AN000;
226 PUBLIC promptdat_moday ;AN000;
227 PUBLIC promptdat_ptr ;AN000;
228 PUBLIC promptdat_yr ;AN000;
229 PUBLIC PROMPT_TABLE
230 PUBLIC PROMPT_TEXT
231 PUBLIC promtim_hr_min ;AN000;
232 PUBLIC promtim_ptr ;AN000;
233 PUBLIC promtim_sec_hn ;AN000;
234 PUBLIC renerr_ptr ;AN000;
235 PUBLIC SLASH_P_SYN ;AN000;
236 PUBLIC string_buf_ptr ;AN000;
237 PUBLIC suremes_ptr ;AN000;
238 PUBLIC switch_list
239 PUBLIC syntmes_ptr ;AN000;
240 PUBLIC tab_ptr ;AN000;
241 PUBLIC TRANDATAEND
242 PUBLIC usadat_ptr ;AN000;
243 PUBLIC verimes_ptr ;AN000;
244 PUBLIC vermes_ptr ;AN000;
245 PUBLIC volmes_ptr ;AN000;
246 PUBLIC volmes_ptr_2 ;AN000;
247 PUBLIC volsermes_ptr ;AN000;
248 PUBLIC WEEKTAB
249 PUBLIC xa_cp ;AN030;
250
251 INCLUDE tranmsg.asm
252
253 CLSSTRING DB 4,01BH,"[2J" ; ANSI Clear screen
254
255 PROMPT_TABLE LABEL BYTE
256 btab "B",Print_B
257 btab "D",PRINT_DATE
258 btab "E",PRINT_ESC
259 btab "G",PRINT_G
260 btab "H",PRINT_BACK
261 btab "L",PRINT_L
262 btab "N",PRINT_DRIVE
263 btab "P",build_dir_for_prompt
264 btab "Q",PRINT_EQ
265 btab "T",PRINT_TIME
266 btab "V",PRINT_VERSION
267 btab "_",CRLF2
268 btab "$",PRINT_CHAR
269 DB 0 ; NUL TERMINATED
270
271 IFTAB LABEL BYTE ; Table of IF conditionals
272 DB 3,"NOT" ; First byte is count
273 DW OFFSET TRANGROUP:IFNOT
274 DB 10,"ERRORLEVEL"
275 DW OFFSET TRANGROUP:IFERLEV
276 DB 5,"EXIST"
277 DW OFFSET TRANGROUP:IFEXISTS
278 DB 0
279
280 ; Table for internal command names
281 COMTAB DB 3,"DIR",fSwitchAllowed+fCheckDrive
282 DW OFFSET TRANGROUP:CATALOG ; In TCMD1.ASM
283 DB 4,"CALL",fSwitchAllowed
284 DW OFFSET TRANGROUP:$CALL ; In TBATCH2.ASM
285 DB 4,"CHCP",fSwitchAllowed
286 DW OFFSET TRANGROUP:CHCP ; In TCMD2B.ASM
287 DB 6,"RENAME",fSwitchAllowed+fCheckDrive ;AC018; P3903
288 DW OFFSET TRANGROUP:CRENAME ; In TCMD1.ASM
289 DB 3,"REN",fSwitchAllowed+fCheckDrive ;AC018; P3903
290 DW OFFSET TRANGROUP:CRENAME ; In TCMD1.ASM
291 DB 5,"ERASE",fSwitchAllowed+fCheckDrive
292 DW OFFSET TRANGROUP:ERASE ; In TCMD1.ASM
293 DB 3,"DEL",fSwitchAllowed+fCheckDrive
294 DW OFFSET TRANGROUP:ERASE ; In TCMD1.ASM
295 DB 4,"TYPE",fSwitchAllowed+fCheckDrive ;AC018; P3903
296 DW OFFSET TRANGROUP:TYPEFIL ; In TCMD1.ASM
297 DB 3,"REM",fSwitchAllowed
298 DW OFFSET TRANGROUP:TCOMMAND ; In TCODE.ASM
299 DB 4,"COPY",fSwitchAllowed+fCheckDrive
300 DW OFFSET TRANGROUP:COPY ; In COPY.ASM
301 DB 5,"PAUSE",fSwitchAllowed
302 DW OFFSET TRANGROUP:PAUSE ; In TCMD1.ASM
303 DB 4,"DATE",fSwitchAllowed
304 DW OFFSET TRANGROUP:DATE ; In TPIPE.ASM
305 DB 4,"TIME",fSwitchAllowed ;AC018; P3903
306 DW OFFSET TRANGROUP:CTIME ; In TPIPE.ASM
307 DB 3,"VER",0
308 DW OFFSET TRANGROUP:VERSION ; In TCMD2.ASM
309 DB 3,"VOL",fSwitchAllowed+fCheckDrive ;AC018; P3903
310 DW OFFSET TRANGROUP:VOLUME ; In TCMD1.ASM
311 DB 2,"CD",fSwitchAllowed+fCheckDrive ;AC018; P3903
312 DW OFFSET TRANGROUP:$CHDIR ; In TENV.ASM
313 DB 5,"CHDIR",fSwitchAllowed+fCheckDrive ;AC018; P3903
314 DW OFFSET TRANGROUP:$CHDIR ; In TENV.ASM
315 DB 2,"MD",fSwitchAllowed+fCheckDrive ;AC018; P3903
316 DW OFFSET TRANGROUP:$MKDIR ; In TENV.ASM
317 DB 5,"MKDIR",fSwitchAllowed+fCheckDrive ;AC018; P3903
318 DW OFFSET TRANGROUP:$MKDIR ; In TENV.ASM
319 DB 2,"RD",fSwitchAllowed+fCheckDrive ;AC018; P3903
320 DW OFFSET TRANGROUP:$RMDIR ; In TENV.ASM
321 DB 5,"RMDIR",fSwitchAllowed+fCheckDrive ;AC018; P3903
322 DW OFFSET TRANGROUP:$RMDIR ; In TENV.ASM
323 DB 5,"BREAK",fSwitchAllowed ;AC018; P3903
324 DW OFFSET TRANGROUP:CNTRLC ; In TUCODE.ASM
325 DB 6,"VERIFY",fSwitchAllowed ;AC018; P3903
326 DW OFFSET TRANGROUP:VERIFY ; In TUCODE.ASM
327 DB 3,"SET",fSwitchAllowed
328 DW OFFSET TRANGROUP:ADD_NAME_TO_ENVIRONMENT; In TENV.ASM
329 DB 6,"PROMPT",fSwitchAllowed
330 DW OFFSET TRANGROUP:ADD_PROMPT ; In TENV.ASM
331 DB 4,"PATH",fSwitchAllowed
332 DW OFFSET TRANGROUP:PATH ; In TCMD2.ASM
333 DB 4,"EXIT",0
334 DW OFFSET TRANGROUP:$EXIT ; In TCMD2.ASM
335 DB 4,"CTTY",fCheckDrive+fSwitchAllowed
336 DW OFFSET TRANGROUP:CTTY ; In TCMD2.ASM
337 DB 4,"ECHO",fSwitchAllowed
338 DW OFFSET TRANGROUP:ECHO ; In TUCODE.ASM
339 DB 4,"GOTO",fSwitchAllowed
340 DW OFFSET TRANGROUP:GOTO ; In TBATCH.ASM
341 DB 5,"SHIFT",fSwitchAllowed
342 DW OFFSET TRANGROUP:SHIFT ; In TBATCH.ASM
343 DB 2,"IF",fSwitchAllowed
344 DW OFFSET TRANGROUP:$IF ; In TBATCH.ASM
345 DB 3,"FOR",fSwitchAllowed
346 DW OFFSET TRANGROUP:$FOR ; In TBATCH.ASM
347 DB 3,"CLS",0
348 DW OFFSET TRANGROUP:CLS ; In TCMD2.ASM
349 DB 8,"TRUENAME",fSwitchAllowed+fCheckDrive ;AN000; P3903 changed
350 DW OFFSET TRANGROUP:TRUENAME ;AN000;
351 DB 0 ; Terminate command table
352
353
354 comext dB ".COM"
355 exeext dB ".EXE"
356 batext dB ".BAT"
357
358 switch_list DB "VBAPW" ; flags we can recognize
359
360
361 XA_cp Label byte ;AN030; list for one extended attribute
362 DW 1 ;AN030;
363 DB EAISBINARY ;AN030; type
364 DW EASYSTEM ;AN030; flags
365 DB 2 ;AN030; name length
366 DB "CP" ;AN030; name
367
368
369
370
371 PUBLIC BatBufLen
372 BatBufLen DW BatLen
373
374 ; *****************************************************
375 ; EMG 4.00
376 ; DATA STARTING HERE WAS ADDED BY EMG FOR 4.00
377 ; FOR IMPLEMENTATION OF COMMON PARSE ROUTINE
378 ; *****************************************************
379
380 ;
381 ; COMMON PARSE BLOCKS
382 ;
383
384 ;
385 ; Indicates no value list for PARSE.
386 ;
387
388 NO_VALUES DW 0 ;AN000; no values
389
390 ;
391 ; PARSE control block for a required file specification (upper cased)
392 ;
393
394 FILE_REQUIRED LABEL BYTE ;AN000;
395 DW 0200H ;AN000; filespec - required
396 DW 1 ;AN000; capitalize - file table
397 DW TRANGROUP:PARSE1_OUTPUT ;AN000; result buffer
398 DW TRANGROUP:NO_VALUES ;AN000;
399 DB 0 ;AN000; no keywords
400
401 ;
402 ; PARSE control block for an optional file specification (upper cased)
403 ; or drive number
404 ;
405
406 FILE_OPTIONAL LABEL BYTE ;AN000;
407 DW 0301H ;AN000; filespec or drive number
408 ; optional
409 DW 1 ;AN000; capitalize - file table
410 DW TRANGROUP:PARSE1_OUTPUT ;AN000; result buffer
411 DW TRANGROUP:NO_VALUES ;AN000;
412 DB 0 ;AN000; no keywords
413
414 ;
415 ; PARSE control block for an optional file specification (upper cased)
416 ;
417
418 FILE_OPTIONAL2 LABEL BYTE ;AN000;
419 DW 0201H ;AN000; filespec or drive number
420 ; optional
421 DW 1 ;AN000; capitalize - file table
422 DW TRANGROUP:PARSE1_OUTPUT ;AN000; result buffer
423 DW TRANGROUP:NO_VALUES ;AN000;
424 DB 0 ;AN000; no keywords
425
426 ;
427 ; PARSE control block for an optional /P switch
428 ;
429
430 SLASH_P_SWITCH LABEL BYTE ;AN000;
431 DW 0 ;AN000; no match flags
432 DW 2 ;AN000; capitalize - char table
433 DW TRANGROUP:PARSE1_OUTPUT ;AN000; result buffer
434 DW TRANGROUP:NO_VALUES ;AN000;
435 DB 1 ;AN000; 1 keyword
436 SLASH_P_SYN DB "/P",0 ;AN000; /P switch
437
438
439
440 ; PARSE BLOCK FOR BREAK, VERIFY, ECHO
441
442 ;
443 ; The following parse control block can be used for any command which
444 ; needs only the optional "ON" and "OFF" keywords as operands. Allows
445 ; the equal sign as an additional delimiter. Returns verified result
446 ; in PARSE1_OUTPUT. Currently used for the BREAK, VERIFY, and ECHO
447 ; internal commands.
448 ;
449
450 PARSE_BREAK LABEL BYTE ;AN000;
451 DW TRANGROUP:BREAK_PARMS ;AN000;
452 DB 0 ;AN032; no extra delimiter
453
454 BREAK_PARMS LABEL BYTE ;AN000;
455 DB 0,1 ;AN000; 1 positional parm
456 DW TRANGROUP:BREAK_CONTROL1;AN000;
457 DB 0 ;AN000; no switches
458 DB 0 ;AN000; no keywords
459
460 BREAK_CONTROL1 LABEL BYTE ;AN000;
461 DW 2001H ;AN000; string value - optional
462 DW 2 ;AN000; capitalize - char table
463 DW TRANGROUP:PARSE1_OUTPUT ;AN000; result buffer
464 DW TRANGROUP:BREAK_VALUES ;AN000;
465 DB 0 ;AN000; no keywords
466
467 BREAK_VALUES LABEL BYTE ;AN000;
468 DB 3 ;AN000;
469 DB 0 ;AN000; no ranges
470 DB 0 ;AN000; no numeric values
471 DB 2 ;AN000; 2 string values
472 DB 0 ;AN000; returned if ON
473 DW TRANGROUP:BREAK_ON ;AN000; point to ON string
474 DB 'f' ;AN000; returned if OFF
475 DW TRANGROUP:BREAK_OFF ;AN000; point to OFF string
476
477 BREAK_ON DB "ON",0 ;AN000;
478 BREAK_OFF DB "OFF",0 ;AN000;
479
480 ;
481 ; PARSE BLOCK FOR CHCP
482 ;
483
484 ;
485 ; The following parse control block can be used for any command which
486 ; needs only one optional three digit decimal parameter for operands.
487 ; Returns verified result in PARSE1_OUTPUT. Currently used for the
488 ; CHCP internal command.
489 ;
490 CHCP_MINVAL EQU 100 ;AN000;
491 CHCP_MAXVAL EQU 999 ;AN000;
492
493 PARSE_CHCP LABEL BYTE ;AN000;
494 DW TRANGROUP:CHCP_PARMS ;AN000;
495 DB 0 ;AN000; no extra delimiter
496
497 CHCP_PARMS LABEL BYTE ;AN000;
498 DB 0,1 ;AN000; 1 positional parm
499 DW TRANGROUP:CHCP_CONTROL1 ;AN000;
500 DB 0 ;AN000; no switches
501 DB 0 ;AN000; no keywords
502
503 CHCP_CONTROL1 LABEL BYTE ;AN000;
504 DW 8001H ;AN000; numeric value - optional
505 DW 0 ;AN000; no function flags
506 DW TRANGROUP:PARSE1_OUTPUT ;AN000; result buffer
507 DW TRANGROUP:CHCP_VALUES ;AN000;
508 DB 0 ;AN000; no keywords
509
510 CHCP_VALUES LABEL BYTE ;AN000;
511 DB 1 ;AN000;
512 DB 1 ;AN000; 1 range
513 DB 1 ;AN000; returned if result
514 DD CHCP_MINVAL,CHCP_MAXVAL ;AN000; minimum & maximum value
515 DB 0 ;AN000; no numeric values
516 DB 0 ;AN000; no string values
517
518
519 ;
520 ; PARSE BLOCK FOR DATE
521 ;
522
523 ;
524 ; The following parse control block can be used for any command which
525 ; needs only an optional date string as an operand. Returns unverified
526 ; result in DATE_OUTPUT. Currently used for the DATE internal command.
527 ;
528
529 PARSE_DATE LABEL BYTE ;AN000;
530 DW TRANGROUP:DATE_PARMS ;AN000;
531 DB 0 ;AN000; no extra delimiter
532
533 DATE_PARMS LABEL BYTE ;AN000;
534 DB 0,1 ;AN000; 1 positional parm
535 DW TRANGROUP:DATE_CONTROL1 ;AN000;
536 DB 0 ;AN000; no switches
537 DB 0 ;AN000; no keywords
538
539 DATE_CONTROL1 LABEL BYTE ;AN000;
540 DW 1001H ;AN000; date - optional
541 DW 0 ;AN000; no function flags
542 DW TRANGROUP:DATE_OUTPUT ;AN000; result buffer
543 DW TRANGROUP:NO_VALUES ;AN000;
544 DB 0 ;AN000; no keywords
545
546 ;
547 ; PARSE BLOCK FOR TIME
548 ;
549
550 ;
551 ; The following parse control block can be used for any command which
552 ; needs only an optional time string as an operand. Returns unverified
553 ; result in TIME_OUTPUT. Currently used for the TIME internal command.
554 ;
555
556 PARSE_TIME LABEL BYTE ;AN000;
557 DW TRANGROUP:TIME_PARMS ;AN000;
558 DB 0 ;AN000; no extra delimiter
559
560 TIME_PARMS LABEL BYTE ;AN000;
561 DB 0,1 ;AN000; 1 positional parm
562 DW TRANGROUP:TIME_CONTROL1 ;AN000;
563 DB 0 ;AN000; no switches
564 DB 0 ;AN000; no keywords
565
566 TIME_CONTROL1 LABEL BYTE ;AN000;
567 DW 0801H ;AN000; TIME - optional
568 DW 0 ;AN000; no function flags
569 DW TRANGROUP:TIME_OUTPUT ;AN000; result buffer
570 DW TRANGROUP:NO_VALUES ;AN000;
571 DB 0 ;AN000; no keywords
572
573
574 ;
575 ; PARSE BLOCK FOR VOL
576 ;
577
578 ;
579 ; The following parse control block can be used for any command which
580 ; needs only an optional drive letter as an operand. Returns unverified
581 ; drive number (one based) in DRIVE_OUTPUT. Currently used for the VOL
582 ; internal command.
583 ;
584
585 PARSE_VOL LABEL BYTE ;AN000;
586 DW TRANGROUP:VOL_PARMS ;AN000;
587 DB 0 ;AN000; no extra delimiter
588
589 VOL_PARMS LABEL BYTE ;AN000;
590 DB 0,1 ;AN000; 1 positional parm
591 DW TRANGROUP:DRIVE_CONTROL1;AN000;
592 DB 0 ;AN000; no switches
593 DB 0 ;AN000; no keywords
594
595 DRIVE_CONTROL1 LABEL BYTE ;AN000;
596 DW 0101H ;AN000; DRIVE - optional
597 DW 1 ;AN000; capitalize - file table
598 DW TRANGROUP:DRIVE_OUTPUT ;AN000; result buffer
599 DW TRANGROUP:NO_VALUES ;AN000;
600 DB 0 ;AN000; no keywords
601
602
603 ;
604 ; PARSE BLOCK FOR MKDIR, RMDIR, TYPE
605 ;
606
607 ;
608 ; The following parse control block can be used for any command which
609 ; needs only one required file specification as an operand. Returns a
610 ; pointer to the unverified string in PARSE1_OUTPUT. Currently used
611 ; for the MKDIR, RMDIR, and TYPE internal commands.
612 ;
613
614 PARSE_MRDIR LABEL BYTE ;AN000;
615 DW TRANGROUP:MRDIR_PARMS ;AN000;
616 DB 0 ;AN000; no extra delimiter
617
618 MRDIR_PARMS LABEL BYTE ;AN000;
619 DB 1,1 ;AN000; 1 positional parm
620 DW TRANGROUP:FILE_REQUIRED ;AN000;
621 DB 0 ;AN000; no switches
622 DB 0 ;AN000; no keywords
623
624 ;
625 ; PARSE BLOCK FOR CHDIR, TRUENAME
626 ;
627
628 ;
629 ; The following parse control block can be used for any command which
630 ; needs only one optional file specification an operand. Returns a
631 ; pointer to the unverified string in PARSE1_OUTPUT. Currently used
632 ; for the CHDIR and TRUENAME internal commands.
633 ;
634
635 PARSE_CHDIR LABEL BYTE ;AN000;
636 DW TRANGROUP:CHDIR_PARMS ;AN000;
637 DB 0 ;AN000; no extra delimiter
638
639 CHDIR_PARMS LABEL BYTE ;AN000;
640 DB 0,1 ;AN000; 1 positional parm
641 DW TRANGROUP:FILE_OPTIONAL ;AN000;
642 DB 0 ;AN000; no switches
643 DB 0 ;AN000; no keywords
644
645 ;
646 ; PARSE BLOCK FOR ERASE
647 ;
648
649 ;
650 ; The following parse control block is used for the DEL/ERASE internal
651 ; commands. This command has one required file specification and an
652 ; optional switch (/p) as operands. The verified switch or unverified
653 ; file specification is returned in PARSE1_OUTPUT.
654 ;
655
656 PARSE_ERASE LABEL BYTE ;AN000;
657 DW TRANGROUP:ERASE_PARMS ;AN000;
658 DB 0 ;AN000; no extra delimiter
659
660 ERASE_PARMS LABEL BYTE ;AN000;
661 DB 1,1 ;AN000; 1 positional parm
662 DW TRANGROUP:FILE_REQUIRED ;AN000;
663 DB 1 ;AN000; 1 switch
664 DW TRANGROUP:SLASH_P_SWITCH;AN000;
665 DB 0 ;AN000; no keywords
666
667 ;
668 ; PARSE BLOCK FOR DIR
669 ;
670
671 ;
672 ; The following parse control block is used for the DIR internal command.
673 ; This command has one optional file specification and two optional
674 ; switches (/p and /w) as operands. The verified switch or unverified
675 ; file specification is returned in PARSE1_OUTPUT.
676 ;
677
678 PARSE_DIR LABEL BYTE ;AN000;
679 DW TRANGROUP:DIR_PARMS ;AN000;
680 DB 0 ;AN000; no extra delimiter
681
682 DIR_PARMS LABEL BYTE ;AN000;
683 DB 0,1 ;AN000; 1 positional parm
684 DW TRANGROUP:FILE_OPTIONAL2;AN000;
685 DB 2 ;AN000; 2 switches
686 DW TRANGROUP:SLASH_P_SWITCH;AN000;
687 DW TRANGROUP:DIR_SWITCH1 ;AN000;
688 DB 0 ;AN000; no keywords
689
690 DIR_SWITCH1 LABEL BYTE ;AN000;
691 DW 0 ;AN000; no match flags
692 DW 2 ;AN000; capitalize by char table
693 DW TRANGROUP:PARSE1_OUTPUT ;AN000; result buffer
694 DW TRANGROUP:NO_VALUES ;AN000;
695 DB 1 ;AN000; 1 keyword
696 DIR_W_SYN DB "/W",0 ;AN000; /W switch
697
698 ;
699 ; PARSE BLOCK FOR RENAME
700 ;
701
702 ;
703 ; The following parse control block can be used for any command which
704 ; needs only two required file specifications as operands. Returns
705 ; pointers to the unverified string in PARSE1_OUTPUT.
706 ; Currently used for the RENAME internal command.
707 ;
708
709 PARSE_RENAME LABEL BYTE ;AN000;
710 DW TRANGROUP:RENAME_PARMS ;AN000;
711 DB 0 ;AN000; no extra delimiter
712
713 RENAME_PARMS LABEL BYTE ;AN000;
714 DB 2,2 ;AN000; 2 positional parms
715 DW TRANGROUP:FILE_REQUIRED ;AN000;
716 DW TRANGROUP:FILE_REQUIRED ;AN000;
717 DB 0 ;AN000; no switches
718 DB 0 ;AN000; no keywords
719
720 ;
721 ; PARSE BLOCK FOR CTTY
722 ;
723
724 ;
725 ; The following parse control block can be used for any command which
726 ; needs one required device name as an operand. Returns a pointer to
727 ; unverified string in PARSE1_OUTPUT. Currently used for the CTTY
728 ; internal command.
729 ;
730
731 PARSE_CTTY LABEL BYTE ;AN000;
732 DW TRANGROUP:CTTY_PARMS ;AN000;
733 DB 0 ;AN000; no extra delimiter
734
735 CTTY_PARMS LABEL BYTE ;AN000;
736 DB 1,1 ;AN000; 1 positional parm
737 DW TRANGROUP:CTTY_CONTROL1 ;AN000;
738 DB 0 ;AN000; no switches
739 DB 0 ;AN000; no keywords
740
741 CTTY_CONTROL1 LABEL BYTE ;AN000;
742 DW 2000H ;AN000; string value - required
743 DW 11H ;AN000; capitalize - file table
744 ;AN000; remove colon at end
745 DW TRANGROUP:PARSE1_OUTPUT ;AN000; result buffer
746 DW TRANGROUP:NO_VALUES ;AN000;
747 DB 0 ;AN000; no keywords
748
749 TRANDATA ENDS
750
751 TRANCODE SEGMENT PUBLIC BYTE ;AN000;
752
753 .xlist
754 .xcref
755
756 INCLUDE SYSMSG.INC ;AN000;
757
758 .list
759 .cref
760
761 ASSUME DS:TRANGROUP,ES:TRANGROUP,CS:TRANGROUP
762
763 MSG_UTILNAME <COMMAND> ;AN000; define utility name
764
765 MSG_SERVICES <COMT,COMMAND.CLF,COMMAND.CL1,COMMAND.CL2> ;AN000; The transient messages
766
767 include msgdcl.inc
768
769 TRANCODE ENDS ;AN000;
770
771 TRANDATA SEGMENT PUBLIC BYTE
772
773 TRANDATAEND LABEL BYTE
774
775 TRANDATA ENDS ;AN000;
776
777 END