home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 2
/
FreeSoftwareCollection2pd199x-jp.img
/
ms_dos
/
ish
/
ish200s
/
ish200s.lzh
/
MAKEISH.H
< prev
next >
Wrap
Text File
|
1990-03-27
|
26KB
|
1,274 lines
;
; ish file converter for MS-DOS Ver 2.00 (90/3/27)
;
;
; Copyright (c) 1986, 1987, 1989, 1990 by M. ishizuka
; All rights reserved.
;
;-----------------------------------------------;
; ;
; @@set_seq_number_and_copy_data ;
; ;
; INPUT : NON ;
; OUTPUT: al (vertical_frame_sequencde_number)
; di (vertical_frame_pointer) ;
; ERROR : NON ;
; BREAK : flags, cx, si ;
; ;
; ;
;-----------------------------------------------;
@@set_seq_number_and_copy_data macro
mov si, offset read_buffer
mov di, offset work_table2
mov al, 1
set_seq_number_and_copy_data:
stosb
inc al
mov cx, para_66_60
rep movsb
add di, 2
cmp al, byte ptr para_67_61
jb set_seq_number_and_copy_data
endm
;-----------------------------------------------;
; ;
; @@make_vertical_sum ;
; ;
; INPUT : al (sequence number) ;
; di (pointer to the vertical sum frame)
; OUTPUT: di (pointer to the slant sum frame)
; ERROR : NON ;
; BREAK : flags, al, cx, si ;
; ;
; ;
;-----------------------------------------------;
@@make_vertical_sum macro
mov si, offset work_table2 + 1
mov cx, para_66_60
stosb
make_sum1_1: push cx
lodsb
push si
dec si
mov cx, para_65_59
make_sum1_2: add si, para_69_63
add al, [si]
loop make_sum1_2
neg al
stosb
pop si
pop cx
loop make_sum1_1
add di, 2
endm
;-----------------------------------------------;
; ;
; @@make_slant_sum ;
; ;
; INPUT : di (pointer to the vertical sum frame)
; OUTPUT: NON ;
; ERROR : NON ;
; BREAK : flags, al, bx, cx, si, di ;
; ;
; ;
;-----------------------------------------------;
@@make_slant_sum macro
mov cx, para_67_61
mov al, byte ptr para_68_62
stosb
mov si, offset work_table2
xor bx, bx
make_sum2_1: push si
push bx
push cx
xor al, al
mov cx, para_67_61
make_sum2_2: add al, [bx+si]
add si, para_69_63
inc bx
cmp bx, para_67_61
jb make_sum2_3
xor bx, bx
make_sum2_3: loop make_sum2_2
neg al
stosb
pop cx
pop bx
pop si
inc bx
loop make_sum2_1
endm
;-----------------------------------------------;
; ;
; @@make_table_crc ;
; ;
; INPUT : NON ;
; OUTPUT: NON ;
; ERROR : NON ;
; BREAK : flags, ax, cx, dx, si ;
; ;
; ;
;-----------------------------------------------;
@@make_table_crc macro
mov si, offset work_table2
mov cx, para_68_62
mov dx, offset crc_table
make_table_crc_1:
push cx
cmp cx, 1
mov cx, para_67_61
jnz make_table_crc_3
cmp mode, 'o' + 80h
jz make_tabke_crc_2
inc byte ptr [si]
jmp make_table_crc_3
make_tabke_crc_2:
inc cx
make_table_crc_3:
@@crc_1
mov [si], ax
lodsw
pop cx
loop make_table_crc_1
endm
;-----------------------------------------------;
; ;
; @@make_table ;
; ;
; INPUT : NON ;
; OUTPUT: NON ;
; ERROR : NON ;
; BREAK : flags, ax, bx, cx, dx, si, di ;
; ;
; ;
;-----------------------------------------------;
@@make_table macro
@@set_seq_number_and_copy_data
@@make_vertical_sum
@@make_slant_sum
@@make_table_crc
endm
;-----------------------------------------------;
; ;
; @@make_header ;
; ;
; INPUT : si (input filename pointer) ;
; OUTPUT: NON ;
; ERROR : error_05, error_07 ;
; BREAK : flags, ax, bx, cx, dx, di ;
; ;
; ;
;-----------------------------------------------;
@@make_header macro
push si
mov di, offset work_table
mov ax, 0 ; SEQ#(al) : 0
; TYPE(ah) : 0
; error_line_detect : ccitt_crc
; correct method : タテ_sum & ナナメ_sum
; total_error_detect : ccitt_crc
stosw
add di, 4
cmp mode, '7'
jz jis7_1
cmp mode, 's'
jz sjis_1
cmp mode, 's' + 80h
jz sjis_1
; JIS8 or non-kana
mov ax, 69d ; number of character / line
stosw ; (include SEQ# and CRC)
mov ax, 68d ; number of line / block
stosw ; (include check sum)
cmp mode, 'n'
jz nonkana_1
; JIS8
mov ax, 808h ; source file (al) : 8-bits
stosw ; ish file (ah) : 8-bits
mov si, offset parameter_jis8
jmp copy_para
;
nonkana_1: ; non-kana
mov ax, 0e10h ; source file (al) : 8-bits
stosw ; ish file (ah) : 8-bits
mov si, offset parameter_nonkana
jmp copy_para
;
jis7_1: ; JIS7
mov ax, 63d ; number of character / line
stosw ; (include SEQ# and CRC)
mov ax, 62d ; number of line / block
stosw ; (include check sum)
mov ax, 0d10h ; source file (al) : 16-bits
stosw ; ish file (ah) : 13-bits
mov si, offset parameter_jis7
jmp copy_para
;
sjis_1: ; shift JIS
mov ax, 73d ; number of character / line
stosw ; (include SEQ# and CRC)
mov ax, 72d ; number of line / block
stosw ; (include check sum)
mov ax, 0f10h ; source file (al) : 16-bits
stosw ; ish file (ah) : 15-bits
mov si, offset parameter_sjis
copy_para: push di
mov di, offset para_81_80
mov cx, 21d
rep movsw
pop di
pop si
push si
push di
mov ax, 2900h
mov di, offset work_fcb
int 21h ; parse file name
or al, al
jnz error_07
mov si, di
pop di
mov cx, 11d
inc si
rep movsb
mov al, os
mov ah, 0ffh ; all OSs
dec al
jz set_os
dec ah ; other OSs
dec al
jz set_os
mov ah, 40h ; Mac
dec al
jz set_os
mov ah, 30h ; UNIX
dec al
jz set_os
mov ah, 20h ; OS-9
dec al
jz set_os
mov ah, 10h ; CP/M
dec al
jz set_os
xor ah, ah ; MS-DOS
set_os: xor al, al ; genre(ジャンル) : 0 (not defined)
; (1-255:for automatic genre selection)
stosw ; machine (ah)
mov ax, 0d00h
cmp mode, 'o' + 80h
jz set_auxiliary_type
inc al ; auxiliary type (al) : 1
; ( 0 : old version )
set_auxiliary_type:
cmp word ptr mv_num, 0
jz set_auxiliary_type_2
mov ah, 1dh
set_auxiliary_type_2:
stosw ; ah = 000x1101b
; time stamp is available
; CRC-16 is available
; CRC-32 is available
mov ax, 5700h
mov bx, read_handler
int 21h ; get date & time of input file
jb error_05
mov ax, cx ; time
stosw
mov ax, dx ; date
stosw
mov cx, para_18_15 ; clear reserved area
xor ax, ax
rep stosw
@@set_difference_of_time
pop si
endm
;-----------------------------------------------;
; ;
; @@make_header_title ;
; ;
; INPUT : si (input file pointer) ;
; OUTPUT: di (end of header title pointer);
; ERROR : error_10 ;
; BREAK : flags, ax, cx, dx, di ;
; ;
; ;
;-----------------------------------------------;
@@make_header_title macro
push si
mov di, offset header_title_buffer
mov si, offset msg_header1_esc
cmp byte ptr n_flag, 'e'
jz escape_1
mov si, offset msg_header1_non_esc
escape_1: call movsb1
pop si
push si
push di
mov di, offset save_fname + 1
; xor cx, cx ; now CX == 0
save_fname_1: lodsb
or al, al
jz save_fname_2
inc cl
cmp cl, 12d + 1
jnc error_07
stosb
jmp save_fname_1
save_fname_2: pop di
jcxz error_07
mov si, offset save_fname
mov [si], cl
call movsb1
mov al, os
mov si, offset msg_all_os
dec al
jz copy_os_name
dec al
jz copy_use_ish_msg
mov si, offset msg_mac
dec al
jz copy_os_name
mov si, offset msg_unix
dec al
jz copy_os_name
mov si, offset msg_os9
dec al
jz copy_os_name
mov si, offset msg_cpm
dec al
jz copy_os_name
mov si, offset msg_ms_dos
copy_os_name: call movsb1
copy_use_ish_msg:
mov si, offset msg_use_ish
call movsb1
push di
mov si, offset arc_data
mov di, offset work_fcb+9d
mov cx, 6
xor ax, ax
copy_usr_archiver_msg:
push di
add si, ax
push si
push cx
mov cx, 3
repz cmpsb
pop cx
pop si
pop di
pushf
add si, 3
lodsb
cbw
popf
loopnz copy_usr_archiver_msg
pop di
jnz copy_use_ish2_msg
mov cx, ax
rep movsb
copy_use_ish2_msg:
mov si, offset msg_use_ish2
mov cx, 4
rep movsb
mov si, word ptr mv_num
or si, si
jnz calc_multi_volume_lines_1
mov ax, word ptr work_table[2]
mov dx, word ptr work_table[4]
call calc_lines
jmp make_header_title_1
calc_multi_volume_lines_1:
xor ax, ax
xor dx, dx
mov cx, word ptr max_division
dec cx
calc_multi_volume_lines_2:
add ax, si
adc dx, 0
loop calc_multi_volume_lines_2
add ax, word ptr last_division_lines
adc dx, 0
make_header_title_1:
call hex_to_dec
mov si, offset msg_lines
mov cx, 8
rep movsb
mov si, offset msg_header2_esc
cmp byte ptr n_flag, 'e'
jz escape_2
mov si, offset msg_header2_non_esc
escape_2: call movsb1
pop si
endm
;-----------------------------------------------;
; ;
; @@check_ish_file ;
; ;
; INPUT : si (input file pointer) ;
; OUTPUT: NON ;
; ERROR : error_08, error_18 ;
; BREAK : flags, ax, bl, cx, dx, si, di ;
; ;
; ;
;-----------------------------------------------;
@@check_ish_file macro
push si
find_extension: lodsb
or al, al
jz change_extension_to_ish
cmp al, '.'
jnz find_extension
change_extension_to_ish:
mov di, si
dec di
mov si, offset ish_data
mov cx, 5
rep movsb
mov di, offset work_fcb_2
mov dx, di
mov al, os
mov si, offset all_os_path + 1
dec al
jz add_path
mov si, offset other_os_path + 1
dec al
jz add_path
mov si, offset mac_path + 1
dec al
jz add_path
mov si, offset unix_path + 1
dec al
jz add_path
mov si, offset os9_path + 1
dec al
jz add_path
mov si, offset cpm_path + 1
dec al
jz add_path
mov si, offset msdos_path +1
add_path: lodsb
or al, al
jz copy_ish_filename
stosb
jmp add_path
;
copy_ish_filename:
pop si
copy_ish_filename_1:
lodsb
stosb
or al, al
jnz copy_ish_filename_1
mov cx, word ptr max_division
sub di, 3
mov word ptr ixx, di
jcxz output_file_not_exist_check_1
mov bl, 10d
output_file_not_exist_check:
mov ax, cx
div bl
add ax, 3030h
cmp ah, '9'+1
jb output_file_not_exist_check_0
add ah, 'A' - ('9' + 1)
output_file_not_exist_check_0:
mov word ptr [di], ax
output_file_not_exist_check_1:
mov ax, 3d00h
int 21h ; output_file already exist ?
jnb error_18
cmp ax, 2h
jnz error_08
jcxz output_file_not_exist_check_2
loop output_file_not_exist_check
output_file_not_exist_check_2:
endm
;-----------------------------------------------;
; ;
; @@calc_file_size ;
; ;
; INPUT : ax (bytes/sector) ;
; di (end of header title pointer);
; OUTPUT: si, bx ;
; ERROR : error_08, error_18 ;
; BREAK : flags, bx, cx, dx, si, bp ;
; ;
; ;
;-----------------------------------------------;
@@calc_file_size macro
push ax
push di
xor bx, bx
xor si, si
mov ax, word ptr work_table[2]
mov dx, word ptr work_table[4]
cmp word ptr max_division, 0
jz calc_file_size_0
xor ax, ax
calc_file_size_loop:
inc ax
mov word ptr current_division, ax
mov save_count_low, 1
cmp ax, word ptr max_division
mov ax, word ptr work_table[40]
mov dx, word ptr work_table[42]
jnz calc_file_size_0_0
mov ax, word ptr last_division_bytes_low
mov dx, word ptr last_division_bytes_high
calc_file_size_0_0:
push si
push ax
push dx
call calc_lines
pop dx
pop ax
pop si
pop di
pop cx
push cx
push di
dec cx
add bx, cx
adc si, 0
not cx
and bx, cx
calc_file_size_0:
mov cx, word ptr para_65_59
mov word ptr para_A, cx
mov cx, word ptr para_66_60
mov word ptr para_B, cx
add ax, 2
adc dx, 0
call trunc
mov word ptr line1_h, dx
mov word ptr line1_l, ax
push dx
push ax
call trunc
mov word ptr line2_h, dx
mov word ptr line2_l, ax
cmp byte ptr mode, 'o' + 80h
jnz calc_file_size_1_0
add bx, ax
add si, dx
calc_file_size_1_0:
add ax, ax
adc dx, dx
pop cx
add ax, cx
pop cx
adc dx, cx
mov cx, para_81_80
calc_file_size_1:
add bx, ax
adc si, dx
loop calc_file_size_1
mov dx, bx
mov bx, offset encode_table_jis8
cmp mode, '8'
jz calc_file_size_2
cmp mode, '8' + 80h
jz calc_file_size_2
cmp mode, 's'
jz calc_file_size_2
cmp mode, 's' + 80h
jz calc_file_size_2
mov bx, offset encode_table_jis7
calc_file_size_2:
mov al, byte ptr para_66_60
inc al
xor ah, ah
push ax
xlat
mov di, ax
pop ax
inc al
cmp mode, 'o' + 80h
jz calc_file_size_2_1
inc al
calc_file_size_2_1:
xlat
cmp byte ptr [di][prefix_table], 0
jz calc_file_size_3
add dx, line2_l
adc si, line2_h
calc_file_size_3:
mov di, ax
cmp byte ptr [di][prefix_table], 0
jz calc_file_size_5
add dx, line2_l
adc si, line2_h
calc_file_size_5:
mov di, offset prefix_table + '!'
cmp mode, 80h
jc calc_file_size_5_1
mov di, offset prefix_table + '#'
calc_file_size_5_1:
cmp byte ptr [di], 0
jz calc_file_size_5_2
add dx, 3
adc si, 0
calc_file_size_5_2:
mov ah, 1
mov cx, line1_l
mov bp, line1_h
inc bp
calc_file_size_7:
mov al, ah
xlat
mov di, ax
and di, 0ffh
cmp byte ptr [di][prefix_table], 0
jz calc_file_size_8
add dx, 1
adc di, 0
calc_file_size_8:
inc ah
cmp ah, byte ptr para_66_60
jbe calc_file_size_9
mov ah, 1
calc_file_size_9:
loop calc_file_size_7
dec bp
jnz calc_file_size_7
mov bx, 80d * 3
cmp mode, 80h
jb calc_file_size_9_1
mov bx, para_81$3_80$3_81$3
calc_file_size_9_1:
add bx, dx
adc si, 0
pop ax
push ax
sub ax, offset header_title_buffer
add bx, ax
adc si, 0
mov cx, title_length
inc cx
jz calc_file_size_13
mov ax, save_max_count_low
mov dx, save_max_count_high
call calc_order
add al, 14d
cmp word ptr max_division, 0
jz calc_title_size_0
mov di, ax
mov ax, word ptr max_division
xor dx, dx
call calc_order
add al, 9d
add di, ax
mov ax, word ptr current_division
xor dx, dx
call calc_order
add ax, di
calc_title_size_0:
add al, save_fname
mov dx, ax
calc_title_size:
push dx
mov ax, save_count_low
mov dx, save_count_high
add ax, cx
adc dx, 0
mov save_count_low, ax
mov save_count_high, dx
cmp dx, save_max_count_high
jc calc_file_size_11
jnz calc_file_size_10
cmp ax, save_max_count_low
jc calc_file_size_11
calc_file_size_10:
mov ax, save_max_count_low
mov dx, save_max_count_high
calc_file_size_11:
call calc_order
pop dx
add ax, dx
cmp n_flag, 'e'
jz calc_file_size_11_1
cmp byte ptr prefix_table + '-', 0
jz calc_file_size_12
jmp calc_file_size_11_2
calc_file_size_11_1:
cmp byte ptr prefix_table + 01bh, 0
jz calc_file_size_12
calc_file_size_11_2:
inc ax
calc_file_size_12:
add bx, ax
adc si, 0
mov ax, save_count_high
cmp ax, save_max_count_high
jc calc_title_size
jnz calc_file_size_13
mov ax, save_count_low
cmp ax, save_max_count_low
jc calc_title_size
calc_file_size_13:
cmp n_flag, 'e'
jz calc_file_size_13_1
cmp byte ptr prefix_table + '<', 0
jz calc_file_size_14
jmp calc_file_size_13_2
calc_file_size_13_1:
cmp byte ptr prefix_table + 01bh, 0
jz calc_file_size_14
calc_file_size_13_2:
add bx, 1
adc si, 0
calc_file_size_14:
cmp word ptr max_division, 0
jz calc_file_size_14_3
mov ax, save_max_count_low
mov dx, save_max_count_high
call calc_order
add al, 29d
mov di, ax
mov ax, word ptr max_division
xor dx, dx
call calc_order
add di, ax
mov ax, word ptr current_division
xor dx, dx
call calc_order
add ax, di
add bx, ax
adc si, 0
cmp n_flag, 'e'
jz calc_file_size_14_1
cmp byte ptr prefix_table + '=', 0
jz calc_file_size_14_3
jmp calc_file_size_14_2
calc_file_size_14_1:
cmp byte ptr prefix_table + 01bh, 0
jz calc_file_size_14_3
calc_file_size_14_2:
add bx, 1
adc si, 0
calc_file_size_14_3:
xor ax, ax
mov save_count_low, ax
mov save_count_high, ax
mov ax, word ptr current_division
or ax, ax
jz calc_file_size_15
cmp ax, word ptr max_division
jc calc_file_size_loop
xor ax, ax
mov word ptr current_division, ax
calc_file_size_15:
pop di
pop ax
endm
;-----------------------------------------------;
; ;
; @@get_disk_free_space ;
; ;
; INPUT : NON ;
; OUTPUT: ax (bytes/sector) ;
; bx (free sectors) ;
; ERROR : error_08 ;
; BREAK : flags, cx, dx, si, di ;
; ;
; ;
;-----------------------------------------------;
@@get_disk_free_space macro
mov si, offset work_fcb_2
mov ax, [si]
cmp byte ptr dos_version, 3
jc get_disk_free_space_1
mov di, offset work_fcb_3
mov ah, 60h
int 21h
mov ax, word ptr work_fcb_3
get_disk_free_space_1:
xor dl, dl
cmp ah, ':'
jnz get_disk_free_space_2
or al, 20h
sub al, 60h
mov dl, al
get_disk_free_space_2:
mov ah, 36h
int 21h
cmp ax, 0ffffh
jz error_08
mul cx
endm
;-----------------------------------------------;
; ;
; @@cmp_dd ;
; ;
; cmpare double word (data1) - (data2) ;
; ;
; INPUT : data1_high, data1_low ;
; data2_high, data2_low ;
; OUTPUT: flags ;
; ( ZR: data1 == data2) ;
; ( CY: data1 < data2) ;
; ERROR : NON ;
; BREAK : flags ;
; ;
; ;
;-----------------------------------------------;
@@cmp_dd macro data1_high, data1_low, data2_high, data2_low
local cmp_dd_ret
cmp data1_high, data2_high
jnz cmp_dd_ret
cmp data1_low, data2_low
cmp_dd_ret:
endm
;-----------------------------------------------;
; ;
; @@create_ish_file ;
; ;
; INPUT : NON ;
; OUTPUT: NON ;
; ERROR : error_08 ;
; BREAK : flags, ax, cx, dx ;
; ;
; ;
;-----------------------------------------------;
@@create_ish_file macro
mov ax, 3c00h
mov dx, offset work_fcb_2
xor cx, cx
int 21h ; create output_file
jc error_08
mov write_handler, ax
endm
;-----------------------------------------------;
; ;
; @@write_header_title ;
; ;
; INPUT : cx (end of header title pointer);
; OUTPUT: NON ;
; ERROR : error_09, err or_33 ;
; BREAK : flags, ax, cx, dx, si, di, bp ;
; ;
;-----------------------------------------------;
@@write_header_title macro
mov dx, offset header_title_buffer
sub cx, dx
mov word ptr header_title_length_save, cx
call header_title_write
endm
;-----------------------------------------------;
; ;
; @@encode_table_data ;
; ;
; INPUT : NON ;
; OUTPUT: si (read pointer) ;
; di (write pointer) ;
; ERROR : NON ;
; BREAK : flags, ax, cx ;
; ;
;-----------------------------------------------;
@@encode_table_data macro
mov si, offset work_table2
mov di, offset write_buffer
mov cx, para_68_62
encode_table_1: push cx
cmp cx, 1
jnz encode_table_2
cmp mode, 'o' + 80h
jnz encode_table_2
call encode_7bit_old
jmp encode_table_3
encode_table_2: call word ptr encode_sub2
encode_table_3: pop cx
mov ax, offset cr_lf
stosw
loop encode_table_1
endm
;-----------------------------------------------;
; ;
; @@encode_sum ;
; ;
; INPUT : si (read pointer) ;
; di (write pointer) ;
; OUTPUT: ax (write length) ;
; ERROR : NON ;
; BREAK : flags, bl, cx, si, di ;
; ;
; ;
;-----------------------------------------------;
@@encode_sum macro
mov ax, read_length
cmp ax, para_66$66?1_60$60?1
jnc encode_sum_1
add ax, 2
encode_sum_1: add ax, para_65_59
mov bl, byte ptr para_66_60
div bl
mov bl, byte ptr para_81_80
mul bl
mov di, offset write_buffer
add di, ax
mov si, para_81$66_80$60_write_buffer
mov cx, para_81$2_80$2
cmp mode, 'o' + 80h
jnz encode_sum_2
inc cx
encode_sum_2: add ax, cx
rep movsb
endm
;-----------------------------------------------;
; ;
; @@write_table_sub ;
; ;
; INPUT : NON ;
; OUTPUT: NON ;
; ERROR : error_09, error_33 ;
; BREAK : flags, ax, cx, dx, si, di, bp ;
; ;
;-----------------------------------------------;
@@write_table_sub macro
mov dx, offset write_buffer
write_table_sub_1:
mov cx, para_81_80
sub ax, cx
jc write_table_sub_ret
cmp ax, 1
jnz write_table_sub_2
inc cx
write_table_sub_2:
push ax
push cx
push dx
call ins_prefix
call write_2
call title0
pop dx
pop cx
pop ax
add dx, cx
jmp write_table_sub_1
write_table_sub_ret:
endm
;-----------------------------------------------;
; ;
; @@write_table ;
; ;
; INPUT : NON ;
; OUTPUT: NON ;
; ERROR : error_09, error_33 ;
; BREAK : flags, ax, bl, cx, dx, si, di, ;
; bp ;
; ;
; ;
;-----------------------------------------------;
@@write_table macro
@@encode_table_data
@@encode_sum
@@write_table_sub
endm
;-----------------------------------------------;
; ;
; @@ish_main ;
; ;
; INPUT : cx (end of header title pointer);
; OUTPUT: NON ;
; ERROR : error_05. error_08, error_09, ;
; err or_33, ? ;
; BREAK : flags, ax, bx, cx, dx, si, di, ;
; bp ;
; ;
; ;
;-----------------------------------------------;
@@ish_main macro
@@write_header_title
ish_main_0: call make_header_title2_and_write
call write_header
mov ax, word ptr work_table[40]
mov word ptr current_division_length_low, ax
mov ax, word ptr work_table[42]
mov word ptr current_division_length_high, ax
ish_main: mov dx, offset read_buffer
mov cx, para_66$66_60$60
cmp mv_num, 0
jz ish_main_2
cmp word ptr current_division_length_high, 0
jnz ish_main_2
cmp cx, word ptr current_division_length_low
jc ish_main_2
mov cx, word ptr current_division_length_low
ish_main_2: call _read
jc error_05
mov cx, ax
sub word ptr current_division_length_low, ax
sbb word ptr current_division_length_high, 0
xchg read_length, ax
mov si, offset read_buffer
mov bx, para_66$66_60$60_read_buffer
mov bx, [bx]
mov dx, offset crc_table
xchg ax, bx
cmp bx, para_66$66?1_60$60?1
jz ish_main_1
inc bx
jnz not_begining
mov ax, 0ffffh
not_begining: jcxz skip_calc_crc
@@crc_sub
skip_calc_crc: mov cx, para_66$66_60$60_read_buffer
sub cx, si
jz not_end_of_file
not ax
not_end_of_file:
mov di, si
stosw
jmp fill_zero
ish_main_1: mov cx, para_66$66@1_60$60@1
mov di, si
stosb
fill_zero: xor ax, ax
rep stosb
@@make_table
@@write_table
mov ax, read_length
cmp ax, para_66$66?1_60$60?1
jnb ish_main
call title2
call _write_close
jc error_09
mov ax, word ptr mv_num
or ax, ax
jz ish_main_ret
; cmp word ptr title_count2, ax
; jnz title_ret
; add save_count_low, ax
; adc save_count_high, 0
inc byte ptr work_table[1]
mov al, byte ptr max_division
cmp al, byte ptr work_table[1]
jc ish_main_ret
jnz ish_main_3
mov ax, word ptr last_division_lines
mov word ptr mv_num, ax
ish_main_3: mov si, word ptr ixx
mov ax, [si]
inc ah
cmp ah, '9' + 1
jc title_4
add ax, 0f601h
cmp al, '9' + 1
jnz title_4
mov al, 'a'
title_4: mov [si], ax
cmp byte ptr stdout, 0
jnz title_5
mov ax, 3c00h
mov dx, offset work_fcb_2
xor cx, cx
int 21h ; create output_file
jc error_08
mov write_handler, ax
title_5:
; call disp_ish
call init_constants
call header_title_write
jmp ish_main_0
ish_main_ret: mov bx, read_handler
mov ah, 3eh ; close input file
int 21h
jc error_05
mov word ptr read_handler, 0
endm
;-----------------------------------------------;
; ;
; @@calc_crc_of_inputfile ;
; ;
; INPUT : NON ;
; OUTPUT: NON ;
; ERROR : error_05 ;
; BREAK : flags, ax, bx, cx, dx, bp, di ;
; ;
; ;
;-----------------------------------------------;
@@calc_crc_of_inputfile macro
push si
mov ax, word ptr work_table[2]
mov dx, word ptr work_table[4]
cmp word ptr max_division, 0
jnz calc_crc_of_inputfile_1
mov bx, word ptr read_handler
call calc_crc_of_file
jc error_05
jmp calc_crc_of_inputfile_4
calc_crc_of_inputfile_1:
mov word ptr length_low, ax
mov word ptr length_high, dx
mov ax, 0ffffh
mov dx, ax
mov bp, ax
mov word ptr current_division, 1
calc_crc_of_inputfile_2:
mov bx, word ptr work_table[40]
mov cx, word ptr work_table[42]
sub word ptr length_low, bx
sbb word ptr length_high, cx
calc_crc_of_inputfile_3:
mov word ptr length_of_file_low, bx
mov word ptr length_of_file_high, cx
mov di, 0ffffh
mov bx, word ptr read_handler
@@calc_crc_of_file_sub @@crc16_16_32_sub
jc error_05
mov bx, word ptr current_division
add bx, bx
not di
mov word ptr each_volume_crc16[bx-2], di
shr bx, 1
inc bx
mov word ptr current_division, bx
cmp bx, word ptr max_division
jc calc_crc_of_inputfile_2
mov bx, word ptr length_low
mov cx, word ptr length_high
jz calc_crc_of_inputfile_3
not ax
not dx
not bp
calc_crc_of_inputfile_4:
mov word ptr work_table[34], bp
mov word ptr work_table[36], ax
mov word ptr work_table[38], dx
mov ax, 4200h
mov bx, word ptr read_handler
xor cx, cx
xor dx, dx
int 21h ; move file pointer (rewind)
jc error_05
pop si
endm
;-----------------------------------------------;
; ;
; @@make_ish_main ;
; ;
; INPUT : NON ;
; OUTPUT: NON ;
; ERROR : ? ;
; BREAK : flags, ? ;
; ;
; ;
;-----------------------------------------------;
@@make_ish_main macro
@@make_header
@@set_each_size
@@make_header_title
push di
cmp byte ptr stdout, 0
jnz make_ish_main_1
@@check_ish_file
@@get_disk_free_space
pop di
push di
push bx
@@calc_file_size
pop cx
mul cx
@@cmp_dd dx, ax, si, bx
jc error_16_2
@@create_ish_file
make_ish_main_1:
@@calc_crc_of_inputfile
; mov word ptr file_block_length, 1 ;************
; call disp_ish
pop cx
@@ish_main
endm