home *** CD-ROM | disk | FTP | other *** search
- page 66,132
- ;============================================================================
- ; BAT2EXEC.COM - a batch file compiler
- ;
- ; Syntax:
- ; BAT2EXEC filename
- ;
- ; Revision History:
- ;
- ; Version 1.0 Initial Release PC Magazine Vol 9 Num 14
- ; Version 1.1 Bug Fixes July 19, 1990
- ; Version 1.2 Bug Fixes July 28, 1990
- ; Added ability to read large BAT files.
- ; Version 1.3 PATH cmd fix. Oct. 3, 1990
- ; Echo cmd fix
- ; Other small bug fixes.
- ;
- ;============================================================================
-
- code segment
- assume cs:code
-
- org 2ch
- local_environment dw ? ;Word containing the segment
- ; of the program's env. block.
- org 80h
- command_tail db ? ;Offset of the command tail.
-
- org 100h
-
- main: jmp initialize
- program db 13,10,"BAT2EXEC 1.3 "
- copyright db "(c) 1990 Ziff Communications Co.",10,13
- author db "PC Magazine ",254," Douglas Boling"
- db 10,13,"$",1Ah
- ;----------------------------------------------------------------------------
- ;Equates used to find data offsets in the compiled program.
- ;----------------------------------------------------------------------------
- BUFF_SIZE equ 255 ;Size of runtime buffers
-
- std_data_size equ offset data_end - data_start
- code_start_ptr equ [bp + offset code_start - offset data_start]
- com_stack_ptr equ [bp + offset stack_ptr - offset data_start]
- com_prog_size equ [bp + offset prog_segsize - offset data_start]
- com_label_start equ [bp + offset label_list_strt - offset data_start]
- parse_buff equ [bp + offset prse_buff_ptr - offset data_start]
- parse2_buff equ [bp + offset prs2_buff_ptr - offset data_start]
- exec_buff equ [bp + offset exec_buff_ptr - offset data_start]
- forloop_buff equ [bp + offset for_buff_ptr - offset data_start]
- forloop_ptr equ [bp + offset floop_ptr - offset data_start]
- stdout_hdl equ [bp + offset file_handle1 - offset data_start]
- outfile_hdl equ [bp + offset file_handle2 - offset data_start]
- stdin_hdl equ [bp + offset file_handle3 - offset data_start]
- infile_hdl equ [bp + offset file_handle4 - offset data_start]
- environment_seg equ [bp + offset master_env - offset data_start]
- dos_version equ [bp + offset version_num - offset data_start]
- process_rc equ [bp + offset proc_rc - offset data_start]
- shift_count equ [bp + offset shift_cnt - offset data_start]
-
- code_call_size equ offset code_call_end - offset code_call
- code_jmp_size equ offset code_jmp_end - offset code_jmp
- code_jc_size equ offset code_jc_end - offset code_jc
- code_jnc_size equ offset code_jnc_end - offset code_jnc
- code_jmpdis_size equ offset code_jmpdis_end - offset code_jmpdis
- code_leasi_size equ offset code_leasi_end - offset code_leasi
- code_movsi_size equ offset code_movsi_end - offset code_movsi
- code_movsiim_size equ offset code_movsiim_end - offset code_movsiim
- code_leadi_size equ offset code_leadi_end - offset code_leadi
- code_movdi_size equ offset code_movdi_end - offset code_movdi
- code_movdiim_size equ offset code_movdiim_end - offset code_movdiim
- ;============================================================================
- ;Compiler data
- ;============================================================================
- command_table db "IF",0 ;Commands processed by
- db "REM",0 ; compiler
- db "FOR",0
- db "ECHO",0
- db "GOTO",0
- db "EXIT",0
- db "PAUSE",0
- db "SHIFT",0
- db "SET",0
- db "CALL",0
- db "PATH",0
- db "PROMPT",0
- db "CD",0 ;DOS commands internal to
- db "MD",0 ; command.com.
- db "RD",0
- db "CLS",0
- db "DIR",0
- db "DEL",0
- db "REN",0
- db "VER",0
- db "VOL",0
- db "CTTY",0
- db "CHCP",0
- db "TYPE",0
- db "COPY",0
- db "DATE",0
- db "TIME",0
- db "ERASE",0
- db "CHDIR",0
- db "MKDIR",0
- db "RMDIR",0
- db "BREAK",0
- db "RENAME",0
- db "DELETE",0
- db "VERIFY",0
- db "COMMAND",0,0
-
- batcmd_jmptbl dw if_cmd ;if command
- dw rem_cmd ;rem command
- dw for_cmd ;for command
- dw echo_cmd ;echo command
- dw goto_cmd ;goto command
- dw rem_cmd ;exit command
- dw pause_cmd ;pause command
- dw shift_cmd ;shift command
- dw set_cmd ;set command
-
- dw internal_cmd ;call command
- dw path_cmd ;Path command
- dw prompt_cmd ;Prompt command
- dw internal_cmd ;DOS internal command
- dw external_cmd ;DOS program
- dw label_cmd ;Process BAT label
- batcmd_jmptbl1 = $
-
- ifstr1 db "ERRORLEVEL"
- ifstr2 db "EXIST"
-
- internal_cmdsw db "/C " ;Switch for transient commands
-
- for_active_flag db 0 ;Set if parsing a FOR loop
- goto_active db 0 ;Set if goto parsed
- goto_data_ptr dw 0 ;Data offset of last goto
-
- temp1 dw 0 ;Temp data storage.
-
- cmd_switches db ? ;Used if command line/ä ⇩⇧î③ê⇦ppî Ç⇦ ⇩⇧î⇨Ç✓ ë≥@rI≥rr@OנÇê✓ ê ij≡p≡püÄ⇦⇧Ç⇦Ç ⇧é êr Çr ✓êä✓⇧נé é⇧Ç ê ê⇨ü≥@①Ä⇦⇧נî Çê נäÇ ⇧é êOÇ⇦✓✓⑦╱à{@ `╱Xï⇦⑤Ü">✓⇨ ⇨Σ③ ΣÅΣΣΣÇ9 ①①⓪ ƒ⇨ ƒ⑧ ⇧✓⇨