         page ,132
TITLE   COMMAND Transient Initialized DATA
;
;                        IBM Confidential
;                        Copyright (C) IBM Corporation 1991-1993
;                        All Rights Reserved.
;

; MODIFICATION HISTORY
;
;       EE 10-20-83     Changed the drive check indicator bytes (DCIB's) in
;                       COMTAB to be a flag byte in which bit 0 is now the
;                       DCIB(bit) and bit 1 is on if the command can take
;                       switches.
;
;       M003    SR      07/16/90        Added LoadHigh to command table, added
;                                       parse control block for LoadHigh
;
;       M008    SA      8/1/90          Remove /h parameter. Eliminate code to
;                                       internally handle /? message.
;
;       M010    SA      8/5/90          Add support for /l (lowercase) option.
;
;       M016    SR      08/09/90        Added public statements for new error
;                               messages for LoadHigh.
;



comment %

The TRANDATA segment contains data that is assumed to have predefined
initial values at the beginning of each command cycle.  It is
included in the transient checksum area.  If values in TRANDATA
change, the transient will be reloaded for the next command cycle.

Modification History
--------------------

8/12/89         DBO     History resumes after six years.

8/12/89         DBO     Added for new DIR:
-8/14/89                DirEnvVar, AttrLtrs, OrderLtrs;
                        New PARSE_DIR and subordinate parse blocks
                        (called PARSE_DIR_E for now);

%




fmt macro   name,string,args
        local   a
a       db  string
PUBLIC  name
name    dw  offset trangroup:a
irp val,<args>
        dw  offset trangroup:val
endm
endm

btab    macro   b,sym
    db  b
    dw      offset trangroup:sym
    endm

.xlist
.xcref
        INCLUDE version.inc
        INCLUDE comsw.asm                               ;AC000;
        INCLUDE comseg.asm
        INCLUDE dirent.inc                              ;AN042;
.list
.cref

BREAK   MACRO   subtitle
        SUBTTL  subtitle
        PAGE
ENDM

;
; WARNING: DO NOT INCLUDE DOSSYM.INC BECAUSE IT DESTROYS THE MACRO 'FMT' THAT
; has been defined above - RS.
;
        INCLUDE ERROR.INC
        INCLUDE ifequ.asm
        INCLUDE comequ.asm
;       Note curdir.inc is included by comequ.asm

TRANSPACE       SEGMENT PUBLIC BYTE     ;AC000;
        EXTRN   arg_buf:BYTE
        EXTRN   bwdbuf:byte
        EXTRN   bytes_free:WORD
        EXTRN   charbuf:byte
        EXTRN   copy_Num:WORD
        EXTRN   DATE_OUTPUT:BYTE        ;AC000;
        EXTRN   Dir_Num:WORD
IF 0    ; Delete compression ratio code
        EXTRN   Dir_CRatio_1:BYTE
        EXTRN   Dir_CRatio_2:BYTE
ENDIF
        EXTRN   DRIVE_OUTPUT:BYTE       ;AC000;
        EXTRN   file_size_high:WORD
        EXTRN   file_size_low:WORD
        EXTRN   FileSiz:DWORD           ; accumulated file size for DIR
        EXTRN   major_ver_num:WORD
        EXTRN   minor_ver_num:WORD
        EXTRN   one_char_val:BYTE
        EXTRN   PARSE1_OUTPUT:BYTE      ;AC000;
        EXTRN   srcbuf:byte
        EXTRN   string_ptr_2:WORD
        EXTRN   system_cpage:word
        EXTRN   TIME_OUTPUT:BYTE        ;AC000;
        EXTRN   vol_drv:BYTE
        EXTRN   vol_serial:dword        ;AN000;
TRANSPACE       ENDS

TRANCODE        SEGMENT PUBLIC BYTE     ;AC000;
        EXTRN   $CALL:NEAR
        EXTRN   $CHDIR:NEAR
        EXTRN   $EXIT:NEAR
        EXTRN   $FOR:NEAR
        EXTRN   $IF:NEAR
        EXTRN   $MKDIR:NEAR
        EXTRN   $RMDIR:NEAR
        EXTRN   ADD_NAME_TO_ENVIRONMENT:NEAR
        EXTRN   ADD_PROMPT:NEAR
        EXTRN   build_dir_for_prompt:near
        EXTRN   CATALOG:NEAR
        EXTRN   CHCP:NEAR
        EXTRN   CLS:NEAR
        EXTRN   CNTRLC:NEAR
        EXTRN   COPY:NEAR
        EXTRN   CRENAME:NEAR
        EXTRN   CRLF2:NEAR
        EXTRN   CTIME:NEAR
        EXTRN   CTTY:NEAR
        EXTRN   DATE:NEAR
        EXTRN   ECHO:NEAR
        EXTRN   ERASE:NEAR
        EXTRN   GOTO:NEAR
        EXTRN   IFERLEV:NEAR
        EXTRN   IFEXISTS:NEAR
        EXTRN   IFNOT:NEAR
        EXTRN   PATH:NEAR
        EXTRN   PAUSE:NEAR
        EXTRN   PRINT_B:NEAR
        EXTRN   PRINT_BACK:NEAR
        EXTRN   PRINT_DATE:NEAR
        EXTRN   PRINT_CHAR:NEAR
        EXTRN   PRINT_DRIVE:NEAR
        EXTRN   PRINT_EQ:NEAR
        EXTRN   PRINT_ESC:NEAR
        EXTRN   PRINT_G:NEAR
        EXTRN   PRINT_L:NEAR
        EXTRN   PRINT_TIME:NEAR
        EXTRN   PRINT_VERSION:NEAR
        EXTRN   SHIFT:NEAR
        EXTRN   TCOMMAND:NEAR
        EXTRN   TRUENAME:NEAR           ;AN000;
        EXTRN   TYPEFIL:NEAR
        EXTRN   VERSION:NEAR
        EXTRN   VOLUME:NEAR
        EXTRN   VERIFY:NEAR

        extrn   LoadHigh:NEAR           ; M003
;
; WARNING!!! No code may appear after this label!!!!
;
;
; Bugbug:
;   8/12/89 Looks like somebody ignored/missed this warning.  TRANCODE
;           is added to at the end of this file.  Fortunately, it looks
;           like no modules refer to this label.
;
PUBLIC  TranCodeLast
TranCodeLast    LABEL   BYTE
TRANCODE        ENDS

; Data for transient portion

TRANDATA        SEGMENT PUBLIC BYTE

        PUBLIC  prompt_Y_N_ptr
        PUBLIC  answer_Y_N_ptr
        PUBLIC  accden_ptr              ;AN000;
        PUBLIC  acrlf_ptr               ;AN000;
        PUBLIC  arg_buf_ptr             ;AN000;
        PUBLIC  AttrLtrs
        PUBLIC  badbat_ptr              ;AN000;
        PUBLIC  badcd_ptr               ;AN000;
        PUBLIC  badCPmes_ptr            ;AN000;
        PUBLIC  badcurdrv               ;AN000;
        PUBLIC  baddat_ptr              ;AN000;
        PUBLIC  baddev_ptr              ;AN000;
        PUBLIC  baddrv_ptr              ;AN000;
        PUBLIC  badlab_ptr              ;AN000;
        PUBLIC  badmkd_ptr              ;AN000;
        PUBLIC  badnam_ptr              ;AN000;
        PUBLIC  bad_on_off_ptr          ;AN000;
        PUBLIC  badPmes_ptr             ;AN000;
        PUBLIC  badrmd_ptr              ;AN000;
        PUBLIC  badtim_ptr              ;AN000;
        PUBLIC  batext
        PUBLIC  bytes_ptr
        PUBLIC  bytes_ptr2
        PUBLIC  bytmes_ptr              ;AN000;
        PUBLIC  bytmes_ptr2             ;AN000;
        PUBLIC  kbytmes_ptr             ;D6209;
        PUBLIC  kbytmes_ptr2            ;D6209;
        PUBLIC  CLSSTRING
        PUBLIC  comext
        PUBLIC  CommaOff                ;MARMAR
        PUBLIC  comspec_flag            ;AN071;
        PUBLIC  COMSPECSTR
        PUBLIC  COMTAB
        PUBLIC  copied_ptr              ;AN000;
        PUBLIC  cp_active_ptr           ;AN000;
        PUBLIC  cp_not_all_ptr          ;AN000;
        PUBLIC  cp_not_set_ptr          ;AN000;
        PUBLIC  ctrlcmes_ptr            ;AN000;
        PUBLIC  curdat_mo_day           ;AN000;
        PUBLIC  curdat_ptr              ;AN000;
        PUBLIC  curdat_yr               ;AN000;
        PUBLIC  curtim_hr_min           ;AN000;
        PUBLIC  curtim_ptr              ;AN000;
        PUBLIC  curtim_sec_hn           ;AN000;
        PUBLIC  dback_ptr               ;AN000;
        PUBLIC  del_Y_N_ptr             ;AN000;
        PUBLIC  devwmes_ptr             ;AN000;
        PUBLIC  dircont_ptr
        PUBLIC  dirdattim_ptr           ;AN000;
IF 0    ; Delete compression ratio code
        PUBLIC  DirCompRatio_Ptr
        PUBLIC  AveCompRatio_Ptr
ENDIF
        PUBLIC  dirdat_mo_day           ;AN000;
        PUBLIC  dirdat_yr               ;AN000;
        PUBLIC  DirEnvVar
        PUBLIC  dirhead_ptr             ;AN000;
        PUBLIC  dirmes_ptr              ;AN000;
        PUBLIC  dirmes_ptr2             ;AN000;
        PUBLIC  dirtim_hr_min           ;AN000;
        PUBLIC  dirtim_sec_hn           ;AN000;
        PUBLIC  DIR_SW_PTRS
        PUBLIC  disp_file_size_ptr      ;AN000;
        PUBLIC  disp_file_size_ptr2     ;AN000;
        PUBLIC  DosHma_Ptr
        PUBLIC  DosLow_Ptr
        PUBLIC  DosRev_Ptr
        PUBLIC  DosRom_Ptr
        PUBLIC  dmes_ptr                ;AN000;
        PUBLIC  dmes_ptr2               ;AN000;
        PUBLIC  echomes_ptr             ;AN000;
        PUBLIC  enverr_ptr              ;AN000;
        PUBLIC  errparsenv_ptr
        PUBLIC  eurdat_ptr              ;AN000;
        PUBLIC  exeext
        PUBLIC  extend_buf_off          ;AN000;
        PUBLIC  extend_buf_ptr          ;AN000;
        PUBLIC  extend_buf_seg          ;AN000;
        PUBLIC  extend_buf_sub          ;AN000;
        PUBLIC  file_name_ptr           ;AN000;
        PUBLIC  fornestmes_ptr          ;AN000;
        PUBLIC  fuldir_ptr              ;AN000;
        PUBLIC  IFTAB
        PUBLIC  inBdev_ptr              ;AN000;
        PUBLIC  inornot_ptr             ;AN000;
        PUBLIC  Inv_code_page           ;AN000;
        PUBLIC  inval_path_ptr          ;AN000;
        PUBLIC  japdat_ptr              ;AN000;
        PUBLIC  Losterr_ptr             ;AN000;
        PUBLIC  md_exists_ptr           ;AN006;
        PUBLIC  msg_cont_flag           ;AN000;
        PUBLIC  msg_disp_class          ;AN000;
        PUBLIC  needbat_ptr             ;AN000;
        PUBLIC  newdat_format           ;AN000;
        PUBLIC  newdat_ptr              ;AN000;
        PUBLIC  newtim_ptr              ;AN000;
        PUBLIC  NLSFUNC_ptr             ;AN000;
        PUBLIC  No_Comma
        PUBLIC  nospace_ptr             ;AN000;
        PUBLIC  no_values               ;AN000;
        PUBLIC  nulpath_ptr             ;AN000;
        PUBLIC  offmes_ptr              ;AN000;
        PUBLIC  onmes_ptr               ;AN000;
        PUBLIC  OrderLtrs               ; list of sort order letters for DIR
        PUBLIC  overwr_ptr              ;AN000;
        PUBLIC  PARSE_BREAK             ;AN000;
        PUBLIC  PARSE_CHCP              ;AN000;
        PUBLIC  PARSE_CHDIR             ;AN000;
        PUBLIC  PARSE_CTTY              ;AN000;
        PUBLIC  PARSE_DATE              ;AN000;
        PUBLIC  PARSE_DIR               ;AN000;
        PUBLIC  PARSE_ERASE             ;AN000;
        PUBLIC  PARSE_MRDIR             ;AN000;
        PUBLIC  PARSE_RENAME            ;AN000;
        PUBLIC  PARSE_TIME              ;AN000;
        PUBLIC  PARSE_VER
        PUBLIC  PARSE_VOL               ;AN000;

        public  Parse_LoadHi            ; Parse block for LoadHigh; M003

        PUBLIC  PATH_TEXT
        PUBLIC  pausemes_ptr            ;AN000;
        PUBLIC  pipeEmes_ptr            ;AN000;
        PUBLIC  promptdat_moday         ;AN000;
        PUBLIC  promptdat_ptr           ;AN000;
        PUBLIC  promptdat_yr            ;AN000;
        PUBLIC  PROMPT_TABLE
        PUBLIC  PROMPT_TEXT
        PUBLIC  promtim_hr_min          ;AN000;
        PUBLIC  promtim_ptr             ;AN000;
        PUBLIC  promtim_sec_hn          ;AN000;
        PUBLIC  renerr_ptr              ;AN000;
        PUBLIC  SLASH_P_SYN             ;AN000;
        PUBLIC  string_buf_ptr          ;AN000;
        PUBLIC  suremes_ptr             ;AN000;
        PUBLIC  switch_list
        PUBLIC  syntmes_ptr             ;AN000;
        PUBLIC  tab_ptr                 ;AN000;
        PUBLIC  total_ptr
        PUBLIC  TRANDATAEND
        PUBLIC  usadat_ptr              ;AN000;
        PUBLIC  verimes_ptr             ;AN000;
        PUBLIC  vermes_ptr              ;AN000;
        PUBLIC  volmes_ptr              ;AN000;
        PUBLIC  volmes_ptr_2            ;AN000;
        PUBLIC  volsermes_ptr           ;AN000;
        PUBLIC  WEEKTAB

        public  NoExecBat_Ptr           ; M016
        public  LhInvFil_Ptr            ; M016
        public  NoCntry_Ptr             ; M045
        public  LhInvArg_Ptr
        public  ReqParmMiss
        public  LhInvSwt_Ptr
        public  LhBadUMB_Ptr
; VCB - Add support for REXX
        public  NoREXX_Ptr

INCLUDE tranmsg.asm

; Lists of help message numbers for internal commands and /?

;;NoHelpMsgs    dw      1200,0          ;M014
BreakHelpMsgs   dw      1300,0
ChcpHelpMsgs    dw      1320,1321,0
CdHelpMsgs      dw      1340,1341,1342,0
ClsHelpMsgs     dw      1360,0
CopyHelpMsgs    dw      1400,1401,1402,1403,1404,1405,1406,1407,0
CttyHelpMsgs    dw      1420,0
DateHelpMsgs    dw      1440,1441,0
DelHelpMsgs     dw      1460,1461,1462,0
DirHelpMsgs     dw      1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,0
ExitHelpMsgs    dw      1500,0
MdHelpMsgs      dw      1520,0
PathHelpMsgs    dw      1540,1541,1542,0
PromptHelpMsgs  dw      1560,1561,1562,1563,1564,1565,1566,1567,1568,0
RdHelpMsgs      dw      1580,0
RenHelpMsgs     dw      1600,1601,1602,0
SetHelpMsgs     dw      1620,1621,1622,0
TimeHelpMsgs    dw      1640,1641,0
TypeHelpMsgs    dw      1660,0
VerHelpMsgs     dw      1680,0
VerifyHelpMsgs  dw      1700,0
VolHelpMsgs     dw      1720,0

CallHelpMsgs    dw      1740,1741,0     ;M014
RemHelpMsgs     dw      1760,0          ;M014
PauseHelpMsgs   dw      1780,0          ;M014
EchoHelpMsgs    dw      1800,1801,0     ;M014
GotoHelpMsgs    dw      1820,1821,0     ;M014
ShiftHelpMsgs   dw      1840,0          ;M014
IfHelpMsgs      dw      1860,1861,1862,1863,1864,1865,1866,0    ;M014
ForHelpMsgs     dw      1880,1881,1882,1883,0   ;M014
TruenameHelpMsgs dw     1900,0                  ;M014
LoadhighHelpMsgs dw     1920,1921,1922,1923,1924,1925,1926,1927,0       ;M014


NO_COMMA        db      0       ; Will we use comma delimiters?  MARMAR

CLSSTRING DB    4,01BH,"[2J"            ; ANSI Clear screen

PROMPT_TABLE LABEL BYTE
        btab    "B",Print_B
        btab    "D",PRINT_DATE
        btab    "E",PRINT_ESC
        btab    "G",PRINT_G
        btab    "H",PRINT_BACK
        btab    "L",PRINT_L
        btab    "N",PRINT_DRIVE
        btab    "P",build_dir_for_prompt
        btab    "Q",PRINT_EQ
        btab    "T",PRINT_TIME
        btab    "V",PRINT_VERSION
        btab    "_",CRLF2
        btab    "$",PRINT_CHAR
        DB      0                               ; NUL TERMINATED

IFTAB   LABEL   BYTE                            ; Table of IF conditionals
        DB      3,"NOT"                         ; First byte is count
        DW      OFFSET TRANGROUP:IFNOT
        DB      10,"ERRORLEVEL"
        DW      OFFSET TRANGROUP:IFERLEV
        DB      5,"EXIST"
        DW      OFFSET TRANGROUP:IFEXISTS
        DB      0

; Table for internal command names
COMTAB  DB      3,"DIR",fSwitchAllowed+fCheckDrive
        DW      OFFSET TRANGROUP:CATALOG        ; In TCMD1.ASM
        DW      TRANGROUP:DirHelpMsgs
        DB      4,"CALL",fSwitchAllowed
        DW      OFFSET TRANGROUP:$CALL          ; In TBATCH2.ASM
        DW      TRANGROUP:CallHelpMsgs
        DB      4,"CHCP",fSwitchAllowed
        DW      OFFSET TRANGROUP:CHCP           ; In TCMD2B.ASM
        DW      TRANGROUP:ChcpHelpMsgs
        DB      6,"RENAME",fSwitchAllowed+fCheckDrive  ;AC018; P3903
        DW      OFFSET TRANGROUP:CRENAME        ; In TCMD1.ASM
        DW      TRANGROUP:RenHelpMsgs
        DB      3,"REN",fSwitchAllowed+fCheckDrive     ;AC018; P3903
        DW      OFFSET TRANGROUP:CRENAME        ; In TCMD1.ASM
        DW      TRANGROUP:RenHelpMsgs
        DB      5,"ERASE",fSwitchAllowed+fCheckDrive
        DW      OFFSET TRANGROUP:ERASE          ; In TCMD1.ASM
        DW      TRANGROUP:DelHelpMsgs
        DB      3,"DEL",fSwitchAllowed+fCheckDrive
        DW      OFFSET TRANGROUP:ERASE          ; In TCMD1.ASM
        DW      TRANGROUP:DelHelpMsgs
        DB      4,"TYPE",fSwitchAllowed+fCheckDrive  ;AC018; P3903
        DW      OFFSET TRANGROUP:TYPEFIL        ; In TCMD1.ASM
        DW      TRANGROUP:TypeHelpMsgs
        DB      3,"REM",fSwitchAllowed+fLimitHelp
        DW      OFFSET TRANGROUP:TCOMMAND       ; In TCODE.ASM
        DW      TRANGROUP:RemHelpMsgs
        DB      4,"COPY",fSwitchAllowed+fCheckDrive
        DW      OFFSET TRANGROUP:COPY           ; In COPY.ASM
        DW      TRANGROUP:CopyHelpMsgs
        DB      5,"PAUSE",fSwitchAllowed+fLimitHelp
        DW      OFFSET TRANGROUP:PAUSE          ; In TCMD1.ASM
        DW      TRANGROUP:PauseHelpMsgs
        DB      4,"DATE",fSwitchAllowed
        DW      OFFSET TRANGROUP:DATE           ; In TPIPE.ASM
        DW      TRANGROUP:DateHelpMsgs
        DB      4,"TIME",fSwitchAllowed         ;AC018; P3903
        DW      OFFSET TRANGROUP:CTIME          ; In TPIPE.ASM
        DW      TRANGROUP:TimeHelpMsgs
        DB      3,"VER",fSwitchAllowed
        DW      OFFSET TRANGROUP:VERSION        ; In TCMD2.ASM
        DW      TRANGROUP:VerHelpMsgs
        DB      3,"VOL",fSwitchAllowed+fCheckDrive   ;AC018; P3903
        DW      OFFSET TRANGROUP:VOLUME         ; In TCMD1.ASM
        DW      TRANGROUP:VolHelpMsgs
        DB      2,"CD",fSwitchAllowed+fCheckDrive    ;AC018; P3903
        DW      OFFSET TRANGROUP:$CHDIR         ; In TENV.ASM
        DW      TRANGROUP:CdHelpMsgs
        DB      5,"CHDIR",fSwitchAllowed+fCheckDrive ;AC018; P3903
        DW      OFFSET TRANGROUP:$CHDIR         ; In TENV.ASM
        DW      TRANGROUP:CdHelpMsgs
        DB      2,"MD",fSwitchAllowed+fCheckDrive    ;AC018; P3903
        DW      OFFSET TRANGROUP:$MKDIR         ; In TENV.ASM
        DW      TRANGROUP:MdHelpMsgs
        DB      5,"MKDIR",fSwitchAllowed+fCheckDrive ;AC018; P3903
        DW      OFFSET TRANGROUP:$MKDIR         ; In TENV.ASM
        DW      TRANGROUP:MdHelpMsgs
        DB      2,"RD",fSwitchAllowed+fCheckDrive    ;AC018; P3903
        DW      OFFSET TRANGROUP:$RMDIR         ; In TENV.ASM
        DW      TRANGROUP:RdHelpMsgs
        DB      5,"RMDIR",fSwitchAllowed+fCheckDrive ;AC018; P3903
        DW      OFFSET TRANGROUP:$RMDIR         ; In TENV.ASM
        DW      TRANGROUP:RdHelpMsgs
        DB      5,"BREAK",fSwitchAllowed        ;AC018; P3903
        DW      OFFSET TRANGROUP:CNTRLC         ; In TUCODE.ASM
        DW      TRANGROUP:BreakHelpMsgs
        DB      6,"VERIFY",fSwitchAllowed       ;AC018; P3903
        DW      OFFSET TRANGROUP:VERIFY         ; In TUCODE.ASM
        DW      TRANGROUP:VerifyHelpMsgs
        DB      3,"SET",fSwitchAllowed+fLimitHelp
        DW      OFFSET TRANGROUP:ADD_NAME_TO_ENVIRONMENT; In TENV.ASM
        DW      TRANGROUP:SetHelpMsgs
        DB      6,"PROMPT",fSwitchAllowed+fLimitHelp
        DW      OFFSET TRANGROUP:ADD_PROMPT     ; In TENV.ASM
        DW      TRANGROUP:PromptHelpMsgs
        DB      4,"PATH",fSwitchAllowed
        DW      OFFSET TRANGROUP:PATH           ; In TCMD2.ASM
        DW      TRANGROUP:PathHelpMsgs
        DB      4,"EXIT",0
        DW      OFFSET TRANGROUP:$EXIT          ; In TCMD2.ASM
        DW      TRANGROUP:ExitHelpMsgs
        DB      4,"CTTY",fCheckDrive+fSwitchAllowed
        DW      OFFSET TRANGROUP:CTTY           ; In TCMD2.ASM
        DW      TRANGROUP:CttyHelpMsgs
        DB      4,"ECHO",fSwitchAllowed+fLimitHelp
        DW      OFFSET TRANGROUP:ECHO           ; In TUCODE.ASM
        DW      TRANGROUP:EchoHelpMsgs
        DB      4,"GOTO",fSwitchAllowed+fLimitHelp
        DW      OFFSET TRANGROUP:GOTO           ; In TBATCH.ASM
        DW      TRANGROUP:GotoHelpMsgs
        DB      5,"SHIFT",fSwitchAllowed
        DW      OFFSET TRANGROUP:SHIFT          ; In TBATCH.ASM
        DW      TRANGROUP:ShiftHelpMsgs
        DB      2,"IF",fSwitchAllowed+fLimitHelp
        DW      OFFSET TRANGROUP:$IF            ; In TBATCH.ASM
        DW      TRANGROUP:IfHelpMsgs
        DB      3,"FOR",fSwitchAllowed+fLimitHelp
        DW      OFFSET TRANGROUP:$FOR           ; In TBATCH.ASM
        DW      TRANGROUP:ForHelpMsgs
        DB      3,"CLS",0
        DW      OFFSET TRANGROUP:CLS            ; In TCMD2.ASM
        DW      TRANGROUP:ClsHelpMsgs
        DB      8,"TRUENAME",fSwitchAllowed+fCheckDrive  ;AN000; P3903 changed
        DW      OFFSET TRANGROUP:TRUENAME       ;AN000;
        DW      TRANGROUP:TruenameHelpMsgs
        DB      8,"LOADHIGH",fSwitchAllowed     ; M003
        DW      OFFSET TRANGROUP:LoadHigh               ; In loadhi.asm ; M003
        DW      TRANGROUP:LoadhighHelpMsgs      ; M003
        DB      2,"LH",fSwitchAllowed                   ; Short form; M003
        DW      OFFSET TRANGROUP:LoadHigh               ; In loadhi.asm ; M003
        DW      TRANGROUP:LoadhighHelpMsgs      ; M003
        DB      0                               ; Terminate command table


comext  dB      ".COM"
exeext  dB      ".EXE"
batext  dB      ".BAT"

switch_list     DB      "-Y?VBAPW"                ; flags we can recognize

AttrLtrs        DB      "RHSvDA"                ; attribute letters for DIR

;               Attribute letters in AttrLtrs must appear in the order that
;               attribute bits occur in the attribute byte returned by
;               directory searches, starting with bit 0.
;               The volume label attribute is lowercased to keep it from
;               being matched (by an uppercase comparison).

IF 0    ; Delete compression ratio code
OrderLtrs       DB      "NEDSGC"             ; sort order letters for DIR
ELSE
OrderLtrs       DB      "NEDSG"             ; sort order letters for DIR
ENDIF

;               Sort order letters stand for file name, extension,
;               date/time, size, grouped (directory files before others),
;               and compression ratio.  DIR routines rely on the specific
;               order of the letters in this list.

comspec_flag    db      0                       ;AN071;



PUBLIC  BatBufLen
BatBufLen   DW  BatLen

; *****************************************************
; EMG 4.00
; DATA STARTING HERE WAS ADDED BY EMG FOR 4.00
; FOR IMPLEMENTATION OF COMMON PARSE ROUTINE
; *****************************************************

;
; COMMON PARSE BLOCKS
;

;
; Indicates no value list for PARSE.
;

NO_VALUES       DW      0                       ;AN000;  no values

NULL_VALUE_LIST LABEL   BYTE                    ; for unvalidated value
                DB      0                       ; no value lists

;
; PARSE control block for a required file specification (upper cased)
;

FILE_REQUIRED   LABEL   BYTE                    ;AN000;
                DW      0200H                   ;AN000;  filespec - required
                DW      1                       ;AN000;  capitalize - file table
                DW      TRANGROUP:PARSE1_OUTPUT ;AN000;  result buffer
                DW      TRANGROUP:NO_VALUES     ;AN000;
                DB      0                       ;AN000;  no keywords

;
; PARSE control block for an optional file specification (upper cased)
; or drive number
;

FILE_OPTIONAL   LABEL   BYTE                    ;AN000;
                DW      0301H                   ;AN000;  filespec or drive number
                                                ;        optional
                DW      1                       ;AN000;  capitalize - file table
                DW      TRANGROUP:PARSE1_OUTPUT ;AN000;  result buffer
                DW      TRANGROUP:NO_VALUES     ;AN000;
                DB      0                       ;AN000;  no keywords

;
; PARSE control block for an optional file specification (upper cased)
;

FILE_OPTIONAL2  LABEL   BYTE                    ;AN000;
                DW      0201H                   ;AN000;  filespec optional
                DW      1                       ;AN000;  capitalize - file table
                DW      TRANGROUP:PARSE1_OUTPUT ;AN000;  result buffer
                DW      TRANGROUP:NO_VALUES     ;AN000;
                DB      0                       ;AN000;  no keywords

;
; PARSE control block for an optional /P switch
;

SLASH_P_SWITCH  LABEL   BYTE                    ;AN000;
                DW      0                       ;AN000;  no match flags
                DW      2                       ;AN000;  capitalize - char table
                DW      TRANGROUP:PARSE1_OUTPUT ;AN000;  result buffer
                DW      TRANGROUP:NO_VALUES     ;AN000;
                DB      1                       ;AN000;  1 keyword
SLASH_P_SYN     DB      "/P",0                  ;AN000;  /P switch



; PARSE BLOCK FOR BREAK, VERIFY, ECHO

;
; The following parse control block can be used for any command which
; needs only the optional "ON" and "OFF" keywords as operands.  Allows
; the equal sign as an additional delimiter.  Returns verified result
; in PARSE1_OUTPUT.  Currently used for the BREAK, VERIFY, and  ECHO
; internal commands.
;

PARSE_BREAK     LABEL   BYTE                    ;AN000;
                DW      TRANGROUP:BREAK_PARMS   ;AN000;
                DB      0                       ;AN032; no extra delimiter

BREAK_PARMS     LABEL   BYTE                    ;AN000;
                DB      0,1                     ;AN000;  1 positional parm
                DW      TRANGROUP:BREAK_CONTROL1;AN000;
                DB      0                       ;AN000;  no switches
                DB      0                       ;AN000;  no keywords

BREAK_CONTROL1  LABEL   BYTE                    ;AN000;
                DW      2001H                   ;AN000;  string value - optional
                DW      2                       ;AN000;  capitalize - char table
                DW      TRANGROUP:PARSE1_OUTPUT ;AN000;  result buffer
                DW      TRANGROUP:BREAK_VALUES  ;AN000;
                DB      0                       ;AN000;  no keywords

BREAK_VALUES    LABEL   BYTE                    ;AN000;
                DB      3                       ;AN000;
                DB      0                       ;AN000;  no ranges
                DB      0                       ;AN000;  no numeric values
                DB      2                       ;AN000;  2 string values
                DB      0                       ;AN000;  returned if ON
                DW      TRANGROUP:BREAK_ON      ;AN000;  point to ON string
                DB      'f'                     ;AN000;  returned if OFF
                DW      TRANGROUP:BREAK_OFF     ;AN000;  point to OFF string

BREAK_ON        DB      "ON",0                  ;AN000;
BREAK_OFF       DB      "OFF",0                 ;AN000;

;
; PARSE BLOCK FOR CHCP
;

;
; The following parse control block can be used for any command which
; needs only one optional three digit decimal parameter for operands.
; Returns verified result in PARSE1_OUTPUT.  Currently used for the
; CHCP internal command.
;
CHCP_MINVAL     EQU     100                     ;AN000;
CHCP_MAXVAL     EQU     999                     ;AN000;

PARSE_CHCP      LABEL   BYTE                    ;AN000;
                DW      TRANGROUP:CHCP_PARMS    ;AN000;
                DB      0                       ;AN000;  no extra delimiter

CHCP_PARMS      LABEL   BYTE                    ;AN000;
                DB      0,1                     ;AN000;  1 positional parm
                DW      TRANGROUP:CHCP_CONTROL1 ;AN000;
                DB      0                       ;AN000;  no switches
                DB      0                       ;AN000;  no keywords

CHCP_CONTROL1   LABEL   BYTE                    ;AN000;
                DW      8001H                   ;AN000;  numeric value - optional
                DW      0                       ;AN000;  no function flags
                DW      TRANGROUP:PARSE1_OUTPUT ;AN000;  result buffer
                DW      TRANGROUP:CHCP_VALUES   ;AN000;
                DB      0                       ;AN000;  no keywords

CHCP_VALUES     LABEL   BYTE                    ;AN000;
                DB      1                       ;AN000;
                DB      1                       ;AN000;  1 range
                DB      1                       ;AN000;  returned if result
                DD      CHCP_MINVAL,CHCP_MAXVAL ;AN000;  minimum & maximum value
                DB      0                       ;AN000;  no numeric values
                DB      0                       ;AN000;  no string values


;
; PARSE BLOCK FOR DATE
;

;
; The following parse control block can be used for any command which
; needs only an optional date string as an operand.  Returns unverified
; result in DATE_OUTPUT.  Currently used for the DATE internal command.
;

PARSE_DATE      LABEL   BYTE                    ;AN000;
                DW      TRANGROUP:DATE_PARMS    ;AN000;
                DB      0                       ;AN000;  no extra delimiter

DATE_PARMS      LABEL   BYTE                    ;AN000;
                DB      0,1                     ;AN000;  1 positional parm
                DW      TRANGROUP:DATE_CONTROL1 ;AN000;
                DB      0                       ;AN000;  no switches
                DB      0                       ;AN000;  no keywords

DATE_CONTROL1   LABEL   BYTE                    ;AN000;
                DW      1001H                   ;AN000;  date - optional
                DW      0                       ;AN000;  no function flags
                DW      TRANGROUP:DATE_OUTPUT   ;AN000;  result buffer
                DW      TRANGROUP:NO_VALUES     ;AN000;
                DB      0                       ;AN000;  no keywords

;
; PARSE BLOCK FOR TIME
;

;
; The following parse control block can be used for any command which
; needs only an optional time string as an operand.  Returns unverified
; result in TIME_OUTPUT.  Currently used for the TIME internal command.
;

PARSE_TIME      LABEL   BYTE                    ;AN000;
                DW      TRANGROUP:TIME_PARMS    ;AN000;
                DB      0                       ;AN000;  no extra delimiter

TIME_PARMS      LABEL   BYTE                    ;AN000;
                DB      0,1                     ;AN000;  1 positional parm
                DW      TRANGROUP:TIME_CONTROL1 ;AN000;
                DB      0                       ;AN000;  no switches
                DB      0                       ;AN000;  no keywords

TIME_CONTROL1   LABEL   BYTE                    ;AN000;
                DW      0801H                   ;AN000;  TIME - optional
                DW      0                       ;AN000;  no function flags
                DW      TRANGROUP:TIME_OUTPUT   ;AN000;  result buffer
                DW      TRANGROUP:NO_VALUES     ;AN000;
                DB      0                       ;AN000;  no keywords


;
; PARSE BLOCK FOR VOL
;

;
; The following parse control block can be used for any command which
; needs only an optional drive letter as an operand.  Returns unverified
; drive number (one based) in DRIVE_OUTPUT.  Currently used for the VOL
; internal command.
;

PARSE_VOL       LABEL   BYTE                    ;AN000;
                DW      TRANGROUP:VOL_PARMS     ;AN000;
                DB      0                       ;AN000;  no extra delimiter

VOL_PARMS       LABEL   BYTE                    ;AN000;
                DB      0,1                     ;AN000;  1 positional parm
                DW      TRANGROUP:DRIVE_CONTROL1;AN000;
                DB      0                       ;AN000;  no switches
                DB      0                       ;AN000;  no keywords

DRIVE_CONTROL1  LABEL   BYTE                    ;AN000;
                DW      0101H                   ;AN000;  DRIVE - optional
                DW      1                       ;AN000;  capitalize - file table
                DW      TRANGROUP:DRIVE_OUTPUT  ;AN000;  result buffer
                DW      TRANGROUP:NO_VALUES     ;AN000;
                DB      0                       ;AN000;  no keywords


;
; PARSE BLOCK FOR MKDIR, RMDIR, TYPE
;

;
; The following parse control block can be used for any command which
; needs only one required file specification as an operand.  Returns a
; pointer to the unverified string in PARSE1_OUTPUT.  Currently used
; for the MKDIR, RMDIR, and TYPE internal commands.
;

PARSE_MRDIR     LABEL   BYTE                    ;AN000;
                DW      TRANGROUP:MRDIR_PARMS   ;AN000;
                DB      0                       ;AN000;  no extra delimiter

MRDIR_PARMS     LABEL   BYTE                    ;AN000;
                DB      1,1                     ;AN000;  1 positional parm
                DW      TRANGROUP:FILE_REQUIRED ;AN000;
                DB      0                       ;AN000;  no switches
                DB      0                       ;AN000;  no keywords

;
; PARSE BLOCK FOR CHDIR, TRUENAME
;

;
; The following parse control block can be used for any command which
; needs only one optional file specification an operand.  Returns a
; pointer to the unverified string in PARSE1_OUTPUT.  Currently used
; for the CHDIR and TRUENAME internal commands.
;

PARSE_CHDIR     LABEL   BYTE                    ;AN000;
                DW      TRANGROUP:CHDIR_PARMS   ;AN000;
                DB      0                       ;AN000;  no extra delimiter

CHDIR_PARMS     LABEL   BYTE                    ;AN000;
                DB      0,1                     ;AN000;  1 positional parm
                DW      TRANGROUP:FILE_OPTIONAL ;AN000;
                DB      0                       ;AN000;  no switches
                DB      0                       ;AN000;  no keywords

;
; PARSE BLOCK FOR ERASE
;

;
; The following parse control block is used for the DEL/ERASE internal
; commands.  This command has one required file specification and an
; optional switch (/p) as operands. The verified switch or unverified
; file specification is returned in PARSE1_OUTPUT.
;

PARSE_ERASE     LABEL   BYTE                    ;AN000;
                DW      TRANGROUP:ERASE_PARMS   ;AN000;
                DB      0                       ;AN000;  no extra delimiter

ERASE_PARMS     LABEL   BYTE                    ;AN000;
                DB      1,1                     ;AN000;  1 positional parm
                DW      TRANGROUP:FILE_REQUIRED ;AN000;
                DB      1                       ;AN000;  1 switch
                DW      TRANGROUP:SLASH_P_SWITCH;AN000;
                DB      0                       ;AN000;  no keywords

;
; PARSE BLOCK FOR DIR
;

;
; The following parse control block is used for the DIR internal command.
; This command has one optional file specification and several optional
; switches.  Switches, switch values, and the filespec are returned in
; PARSE1_OUTPUT.
;
; Switches are /a[value], /-a, /o[value], /-o, /s, /-s, /?, /b, /-b,
; /w, /-w, /p, and /-p.  The string values for /a and /o are optional,
; do not require colons, and are not checked against a value list.
;
; Switch /h has been removed from the DIR command       ;M008
; Switch /? is no longer handled internally             ;M008
;
; A list of pointers to all the switch synonyms is provided here to
; help identify which switch has been matched.
;

PARSE_DIR       LABEL   BYTE
                DW      TRANGROUP:DIR_PARMS
                DB      0                       ; no extra delimiters

DIR_PARMS       LABEL   BYTE
                DB      0,1                     ; 1 optional positional param
                DW      TRANGROUP:FILE_OPTIONAL2
                DB      2                       ; 2 kinds of switches
                DW      TRANGROUP:DIR_SW_VALUED
                DW      TRANGROUP:DIR_SW_UNVALUED
                DB      0                       ; no keywords

DIR_SW_VALUED   LABEL   BYTE
                DW      2001H                     ; optional string value
                DW      21H                       ; optional colon; capitalize
                DW      TRANGROUP:PARSE1_OUTPUT   ; result buffer
                DW      TRANGROUP:NULL_VALUE_LIST ; don't validate value
                DB      2                         ; 2 'synonyms'
DIR_SW_A        DB      "/A",0
DIR_SW_O        DB      "/O",0
IF 0    ; Delete compression ratio code
DIR_SW_C        DB      "/C",0
ENDIF

DIR_SW_UNVALUED LABEL   BYTE
                DW      0                         ; no value
                DW      0                         ; no format functions
                DW      TRANGROUP:PARSE1_OUTPUT   ; result buffer
                DW      TRANGROUP:NO_VALUES
                DB      12                        ; 12 'synonyms'
DIR_SW_NEG_A    DB      "/-A",0
DIR_SW_NEG_O    DB      "/-O",0
DIR_SW_S        DB      "/S",0
DIR_SW_NEG_S    DB      "/-S",0
DIR_SW_B        DB      "/B",0
DIR_SW_NEG_B    DB      "/-B",0
DIR_SW_W        DB      "/W",0
DIR_SW_NEG_W    DB      "/-W",0
DIR_SW_P        DB      "/P",0
DIR_SW_NEG_P    DB      "/-P",0
DIR_SW_L        DB      "/L",0                  ;M010
DIR_SW_NEG_L    DB      "/-L",0                 ;M010
IF 0    ; Delete compression ratio code
DIR_SW_NEG_C    DB      "/-C",0
ENDIF

;
; Here's a list of pointers to DIR's switch synonyms, for easier
; identification.  Order is critical - DIR routines rely on the
; specific order in this list.  Negated options appear at odd
; positions in the list, and simple on/off options appear first.
;

DIR_SW_PTRS     LABEL   WORD            ; list of ptrs to switch synonyms
IF 0    ; Delete compression ratio code
                DW      TRANGROUP:DIR_SW_NEG_C
                DW      TRANGROUP:DIR_SW_C
ENDIF
                DW      TRANGROUP:DIR_SW_NEG_W
                DW      TRANGROUP:DIR_SW_W
                DW      TRANGROUP:DIR_SW_NEG_P
                DW      TRANGROUP:DIR_SW_P
                DW      TRANGROUP:DIR_SW_NEG_S
                DW      TRANGROUP:DIR_SW_S
                DW      TRANGROUP:DIR_SW_NEG_B
                DW      TRANGROUP:DIR_SW_B
                DW      TRANGROUP:DIR_SW_NEG_L  ;M010
                DW      TRANGROUP:DIR_SW_L      ;M010
                DW      TRANGROUP:DIR_SW_NEG_O
                DW      TRANGROUP:DIR_SW_O
                DW      TRANGROUP:DIR_SW_NEG_A
                DW      TRANGROUP:DIR_SW_A

;
; PARSE BLOCK FOR RENAME
;

;
; The following parse control block can be used for any command which
; needs only two required file specifications as operands.  Returns
; pointers to the unverified string in PARSE1_OUTPUT.
; Currently used for the RENAME internal command.
;

PARSE_RENAME    LABEL   BYTE                    ;AN000;
                DW      TRANGROUP:RENAME_PARMS  ;AN000;
                DB      0                       ;AN000;  no extra delimiter

RENAME_PARMS    LABEL   BYTE                    ;AN000;
                DB      2,2                     ;AN000;  2 positional parms
                DW      TRANGROUP:FILE_REQUIRED ;AN000;
                DW      TRANGROUP:FILE_REQUIRED ;AN000;
                DB      0                       ;AN000;  no switches
                DB      0                       ;AN000;  no keywords

;
; PARSE BLOCK FOR CTTY
;

;
; The following parse control block can be used for any command which
; needs one required device name as an operand.  Returns a pointer to
; unverified string in PARSE1_OUTPUT. Currently used for the CTTY
; internal command.
;

PARSE_CTTY      LABEL   BYTE                    ;AN000;
                DW      TRANGROUP:CTTY_PARMS    ;AN000;
                DB      0                       ;AN000;  no extra delimiter

CTTY_PARMS      LABEL   BYTE                    ;AN000;
                DB      1,1                     ;AN000;  1 positional parm
                DW      TRANGROUP:CTTY_CONTROL1 ;AN000;
                DB      0                       ;AN000;  no switches
                DB      0                       ;AN000;  no keywords

CTTY_CONTROL1   LABEL   BYTE                    ;AN000;
                DW      2000H                   ;AN000;  string value - required
                DW      11H                     ;AN000;  capitalize - file table
                                                ;AN000;  remove colon at end
                DW      TRANGROUP:PARSE1_OUTPUT ;AN000;  result buffer
                DW      TRANGROUP:NO_VALUES     ;AN000;
                DB      0                       ;AN000;  no keywords

;
; PARSE BLOCK FOR VER
;

;
; The following parse control block can be used for any command which
; needs an optional switch "/debug".  Currently used for the VER command.
;

PARSE_VER       LABEL   BYTE
                DW      TRANGROUP:VER_PARMS
                DB      0                       ; no extra delimiters

VER_PARMS       LABEL   BYTE
                DB      0,0                     ; no positional parameters
                DB      1                       ; one switch
                DW      TRANGROUP:SLASH_R
                DB      0                       ; no keywords

SLASH_R         LABEL   BYTE
                DW      0                       ; no values
                DW      2                       ; capitalize by filename table
                DW      TRANGROUP:PARSE1_OUTPUT ; result buffer
                DW      TRANGROUP:NO_VALUES     ; no values
                DB      1                       ; one synonym
SLASH_R_SYN     DB      "/R",0

;
; M003 ; Start of changes for LoadHigh support
;

;
;Parse Control Block for LOADHIGH command
;

Parse_LoadHi    label   byte
        dw      TRANGROUP:LoadHi_Parms  ;extended parm table
        db      0                       ;no extra delimiters

LoadHi_Parms    label   byte
        db      1,1                     ;min. 1 parm, max. 1 parm
        dw      TRANGROUP:File_Required ;control struc for filename
        db      0                       ;no switches
        db      0                       ;no keywords
;
; M003 ; End of changes for LoadHigh support
;

public TempVarName
TempVarName     db      "TEMP=",0

public env_var
env_var db      "COPYCMD="
len_env_var equ $ - env_var

IF 0    ; Delete compression ratio code
public  sCVFRoot, cbCVFRoot
sCVFRoot        db      "\DBLSPACE."    ;Compressed Volume File root file name
cbCVFRoot       equ     $-sCVFRoot
ENDIF

; VCB - Add support for REXX
                public  rexxname
rexxname        db      "REXX.EXE",0

TRANDATA        ENDS

TRANCODE        SEGMENT PUBLIC BYTE             ;AN000;

.xlist
.xcref

INCLUDE SYSMSG.INC                              ;AN000;

.list
.cref

ASSUME DS:TRANGROUP,ES:TRANGROUP,CS:TRANGROUP

MSG_UTILNAME <COMMAND>                          ;AN000; define utility name

MSG_SERVICES <COMT,COMMAND.CLF,COMMAND.CL1,COMMAND.CL2> ;AN000; The transient messages

          public $m_f_00450h_msg        ; overwrite "A" character

include msgdcl.inc

TRANCODE        ENDS                            ;AN000;

TRANDATA        SEGMENT PUBLIC BYTE

TRANDATAEND     LABEL   BYTE

TRANDATA        ENDS                            ;AN000;

        END
