1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
data segment PUBLIC para 'DATA' ;AC000;bgb
;*****************************************************************************
; Data Area
;*****************************************************************************
;
lastchar dw 0 ;an024;bgb
lastbs dw 0 ;an024;bgb
fndback dw 0 ;point to where backslash found
old_subdir db 64 dup(0) ;current sub directory
new_subdir db 64 dup(0) ;new sub directory
paras_per_64k dw 0
paras_per_fat dw 0
secs_per_64k dw 0
sec_count dw 0
sixteen dw 16 ; mul ax for 32 bytes / fat entry
exit_sw dw ? ; loop exit switch ;AN000;bgb
exit_sw2 dw ? ; loop exit switch ;AN000;bgb
old_drive db 0 ;original drive to restore to ;an008;bgb
drvlet db 'A: ',13,10,13,10,0 ; ;AN000;
rec_num dw ? ; ;AN000;
x_value_lo dw ? ; ;AN000;
x_value_hi dw ? ; ;AN000;
y_value_lo dw ? ; ;AN000;
y_value_hi dw ? ; ;AN000;
DRVLET1 db "A",0
;
HEADER DB "Vers 2.00"
;-----------------------------------------------------------------------;
Prompted db 0 ; TRUE => prompt has already been done
hardch dd ? ; saved int 24 vector
the_root db 0 ; root directory flag
fudge db 0 ; directory changed flag
user_drive db 0
drive db 0
dirchar db "/",0
userdir db "/",0
db (dirstrlen) dup(0)
fname_buffer db 128 dup(0)
found db no
done db no
PSP_Segment dw 0
ExitStatus db 0 ;Errorlevel code ;AN000;
;
BPB_Buffer A_DeviceParameters <> ; ;AN000;
TranSrc db "A:\",0 ; ;AN000;
Data_Start_Low dw ? ; ;AN000;
Data_Start_High dw ? ; ;AN000;
INT_23_Old_Off dw ? ; ;AN000;
INT_23_Old_Seg dw ? ; ;AN000;
INT_24_Old_Off dw ? ; ;AN000;
INT_24_Old_Seg dw ? ; ;AN000;
Command_Line_Buffer db 128 dup(0) ; ;AN000;
Fatal_Error db 0 ; ;AN000;
Command_Line db NO ; ;AN000;
;These should stay together ; ;an022;bgb
; --------------------------------------- ; ; ;an022;bgb
ifdef fsexec ;an022;bgb
FS_String_Buffer db 13 dup(" ") ; ;AN000; ;an022;bgb
FS_String_End db "REC.EXE",0 ; ;AN000; ;an022;bgb
;---------------------------------------- ; ;an022;bgb
FS_Not_Fat db 0 ; ;AN000;;an022;bgb
FAT12_String db "FAT12 " ;
FAT16_String db "FAT16 " ;
Media_ID_Buffer Media_ID <> ; ;AN000;
endif ;an022;bgb
Append db 0 ;
dirent db 'FILE0000REC'
db 21 dup (00)
fcb_copy db 32 dup (?)
filcnt dw 0000
fatcnt db 00
fatnum db 00
fatsiz dw 0000
firfat dw 0000
fatptr dw 0000
secall dw 0000 ; sectors per cluster
target dw 0000
maxent dw 0000
firrec dw 0000
firdir dw 0000
bytes_per_sector dw 0000
secsiz dw 0000
siztmp dw 0000
dw 0000
filsiz dw 0000
dw 0000 ;carry noted here - 2 bytes after filsiz
MaxClus DW 0
lastfat dw 0000
;
dbcs_sw db 0 ;zero if not dbcs - one if dbcs found ;an024;bgb
DBCS_Vector db 0
DBCS_Vector_Off dw 0
DBCS_Vector_Seg dw 0
Read_Write_Relative Relative_Sector_Buffer <>
Drive_Letter_Msg db "A:",0 ;Drive for exec fail message
ifdef fsexec ;an022;bgb
;Exec_Block Exec_Block_Parms <> ;an022;bgb
;EXEC_Path db 66 dup(0) ;an022;bgb
;These next two should stay together
; ---------------------------------------
;Path_String db "PATH=" ; ;an022;bgb
;Len_Path_String equ 5 ; length of path= string ;AN000;bgb ;an022;bgb
endif ;an022;bgb
;
;----------------------------------------
driveLetter db "X",":",0
; ; ;
;----------------------------------------
;Path_SI dw 0
;Env_DS dw 0
table dw offset dg:fattbl ;AC000;bgb
data ends
;*****************************************************************************
; LAST DATA AREA
; this data area writes over ram, so leave it at the very end of the pgm.
;*****************************************************************************
lastseg segment PUBLIC para 'last' ;AC000;bgb
assume ds:dg
fattbl db 0 ;AC000;bgb
lastseg ends ;AN000;bgb
;
data segment public para 'DATA' ;AC000;bgb
;******************************************************************************
; Public Data
;******************************************************************************
public header, prompted, hardch, the_root, fudge, user_drive, drive, dirchar ;AN000;bgb
public userdir, fname_buffer, found, done, driveletter, psp_segment, exitstatus ;AN000;bgb
public drvlet, bpb_buffer, transrc, data_start_low, data_start_high, ;AN000;bgb
public int_23_old_off, int_23_old_seg, int_24_old_off, int_24_old_seg, append ;AN000;bgb
public command_line_buffer, command_line_length, fatal_error, command_line, ;AN000;bgb
ifdef fsexec ;an022;bgb
public fs_string_buffer, fs_string_end, len_fs_string_end, fs_not_fat, ;an022;bgb;AN000;bgb
public fat12_string, fat16_string, len_fs_id_string, media_id_buffer, ;an022;bgb;AN000;bgb
public exec_block, exec_path, path_string ;AN000;bgb ;an022;bgb
public len_path_string ;an022;bgb;AN011;bgb
endif ;an022;bgb
public dirent, fcb_copy, filcnt, fatcnt, fatnum, fatsiz, firfat, fatptr ;AN000;bgb
public secall, target, maxent, firrec, firdir, secsiz, siztmp, filsiz, maxclus ;AN000;bgb
public lastfat, table, fattbl, dbcs_vector, dbcs_vector_off, dbcs_vector_seg ;AN000;bgb
public read_write_relative, drive_letter_msg ;AN000;bgb ;an022;bgb
public drvlet1, rec_num, x_value_lo, x_value_hi, y_value_lo, y_value_hi
public bytes_per_sector, exit_sw, exit_sw2, paras_per_fat, secs_per_64k
public sec_count, paras_per_64k
data ends ;put this 1st so that the recmsg works
|