summaryrefslogtreecommitdiff
path: root/v4.0/src/SELECT/MACROS2.INC
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/SELECT/MACROS2.INC')
-rw-r--r--v4.0/src/SELECT/MACROS2.INC437
1 files changed, 437 insertions, 0 deletions
diff --git a/v4.0/src/SELECT/MACROS2.INC b/v4.0/src/SELECT/MACROS2.INC
new file mode 100644
index 0000000..6bb1741
--- /dev/null
+++ b/v4.0/src/SELECT/MACROS2.INC
@@ -0,0 +1,437 @@
1;;****************************************************************************
2;; Assembler MACROS for use with SELECT.
3;; File: MACROS2.INC
4;; Latest Change Date: August 04, 1987
5;;
6;; These macros define powerful assembler verbs neccessary for SELECT.
7;;
8;; Note: Many of the macros make use of an ASCII-N string for passing
9;; parameters. The string is defined below.
10;; DW count
11;; DB "string_variable",?
12;;
13;; COUNT is the length of the string and is a word.
14;; It is necessary to follow the string with at least one byte for the
15;; purpose of changing the ASCII-N string to an ASCII-Z string.
16;;
17;;****************************************************************************
18page ;AN000;
19;;************************************************************************
20;;
21;; CLOSE_FILE: Close File
22;;
23;; SYNTAX: CLOSE_FILE handle
24;;
25;; INPUT: handle = The handle of the file to close.
26;;
27;; OUTPUT: CY = 0, AX = undefined, successful
28;; CY = 1, AX = error code
29;;
30;; OPERATION:
31;;
32;; THIS MACROS CLOSES THE FILE WITH THE GIVEN FILE HANDLE.
33;; IT MAKES USE OF INT 21 (AH=3EH).
34;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
35;; IS RETURNED IN AX.
36;;
37;;**************************************************************************
38CLOSE_FILE MACRO HANDLE ;;AN000;
39 ;;
40 MOV BX, HANDLE ;;AN000;
41 CALL FAR PTR CLOSE_FILE_ROUTINE ;;AN000;
42 ENDM ;;AN000;
43;;**************************************************************
44;;
45;; CREATE_FILE: Create new File
46;;
47;; SYNTAX: CREATE_FILE name_file, immed_attr, var_handle
48;;
49;; INPUT: name_file - filename in ASCII-N string format.
50;; immed_attr - file attribute
51;;
52;; OUTPUT: CY = 0 Success: var_handle contain the file handle
53;; CY = 1 Error: AX contains as error code
54;;
55;;
56;; OPERATION:
57;;
58;; CREATE_FILE CREATES A FILE WITH THE GIVEN NAME USING INT 21H (AH=5BH)
59;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
60;; IS RETURNED IN AX.
61;;
62;;**************************************************************************
63CREATE_FILE MACRO NAME_FILE, IMMED_ATTR, VAR_HANDLE ;;AN000;
64 LEA DI, NAME_FILE ;;AN000;
65 MOV CX, IMMED_ATTR ;;AN000;
66 CALL CREATE_FILE_ROUTINE ;;AN000;
67 MOV VAR_HANDLE, AX ;;AN000;
68 ENDM ;;AN000;
69;;****************************************************************************
70;;
71;; ERASE_FILE: Erase File
72;;
73;; SYNTAX: ERASE_FILE filename
74;;
75;; INPUT: filename = POINTER TO ASCII-N STRING - FILE NAME
76;;
77;; OUTPUT: CY = 0, AX = undefined, successful
78;; CY = 1, AX = error code
79;;
80;; OPERATION:
81;;
82;; ERASE_FILE ERASES THE FILE USING INT 21H (AH=41H).
83;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
84;; IS RETURNED IN AX.
85;;
86;;****************************************************************************
87ERASE_FILE MACRO FILE_NAME ;;AN000;
88
89 LEA DI, FILE_NAME ;;AN000;
90 CALL ERASE_FILE_ROUTINE ;;AN000;
91 ENDM ;;AN000;
92;;****************************************************************************
93;;
94;; CHMOD_FILE: Change file attributes to read/write
95;;
96;; SYNTAX: CHMOD_FILE filename
97;;
98;; INPUT: filename = POINTER TO ASCII-N STRING - FILE NAME
99;;
100;; OUTPUT: None.
101;;
102;; OPERATION:
103;; The CHMOD dos call is executed (43H) to change the file's attributes
104;; to read/write.
105;;
106;;****************************************************************************
107CHMOD_FILE MACRO FILE_NAME ;;AN000;
108
109 LEA DI, FILE_NAME ;;AN000;
110 CALL CHMOD_FILE_ROUTINE ;;AN000;
111 ENDM ;;AN000;
112;;************************************************************************
113;; FIND_FILE: Find File
114;;
115;; SYNTAX: FIND_FILE name, attribute
116;;
117;; INPUT: name = POINTER TO ASCII-N STRING - FILE NAME
118;; attribute - the file attribute used in the search
119;;
120;; OUTPUT: CY = 0, AX = undefined, successful
121;; CY = 1, AX = error code
122;;
123;; OPERATION:
124;;
125;; FINDFILE FINDS THE FIRST FILENAME SPECIFIED USING INT 21 (AH=4EH).
126;; AND LOADS INFORMATION INTO THE CURRENT DTA.
127;; NOTE : THE DEFAULT DTA IS AT 80H IN THE PSP.
128;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
129;; IS RETURNED IN AX.
130;;
131;;************************************************************************
132FIND_FILE MACRO LOC_FILE,ATTRIBUTE ;;AN000;
133 ;;
134 LEA DI, LOC_FILE ;;AN000;
135 MOV CX, ATTRIBUTE ;;AN000;
136 CALL FIND_FILE_ROUTINE ;;AN000;
137 ENDM ;;AN000;
138;;************************************************************************
139;; FIND_NEXT: Find the next match in the directory.
140;;
141;; SYNTAX: FIND_NEXT
142;;
143;; INPUT:
144;; None.
145;;
146;; OUTPUT: CY = 0, AX = undefined, successful
147;; CY = 1, AX = error code
148;;
149;; OPERATION: This macro must be called after FIND_FIRST. It searched
150;; the same directory as the FIND_FIRST command for the next match.
151;; If none is found then the carry flag is set.
152;; This macro uses the data in the DTA for the directory seach so
153;; it is important not to change the address of the current DTA.
154;;
155;;
156;;************************************************************************
157FIND_NEXT MACRO LOC_FILE,ATTRIBUTE ;;AN000;
158 CALL HOOK_INT_24 ;;AN000;
159 MOV INT_24_ERROR, FALSE ;;AN000; Zero the number of critical errors
160 MOV AH,4FH ;;AN000;
161 DOSCALL ;;AN000;
162 CALL RESTORE_INT_24 ;;AN000;
163 ENDM ;;AN000;
164;;**************************************************************************
165;;
166;; OPEN_FILE - Open File
167;;
168;; SYNTAX: OPEN_FILE file_name, mode, handle
169;;
170;; INPUT: file_name = POINTER TO ASCII-N STRING - FILE NAME
171;; mode = 0,1,2 (read,write,read/write)
172;; handle = POINTER TO A LOCATION TO STORE FILE HANDLE
173;;
174;; OUTPUT: CY = 0, AX = FILE HANDLE, successful
175;; CY = 1, AX = error code
176;;
177;; OPERATION:
178;;
179;; THIS MACRO OPENS A FILE FOR READ/WRITE OPERATIONS.
180;; IT MAKES USE OF INT 21 (AH=3DH).
181;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
182;; IS RETURNED IN AX.
183;;
184;;**************************************************************************
185OPEN_FILE MACRO FILE_NAME,MODE,HANDLE ;;AN000;
186
187 LEA DI, FILE_NAME ;;AN000;
188 MOV AL, MODE ;;AN000;
189 CALL OPEN_FILE_ROUTINE ;;AN000;
190 MOV HANDLE, AX ;;AN000;
191 ENDM ;;AN000;
192;;**************************************************************************
193;;
194;; RENAME_FILE - Rename File
195;;
196;; SYNTAX: RENAME_FILE old_name, new_name
197;;
198;; INPUT: old_name = POINTER TO ASCII-N STRING -OLD FILE NAME
199;; new_name = POINTER TO ASCII-N STRING -NEW FILE NAME
200;;
201;; OUTPUT: CY = 0, AX = undefined, successful
202;; CY = 1, AX = error code
203;;
204;; OPERATION:
205;;
206;; THIS MACRO RENAMES A FILE GIVEN 2 NAMES.
207;; IT MAKES USE OF INT 21 (AH=56H).
208;; IF AN ERROR OCCURS, THE CARRY FLAG IS SET, AND THE ERROR CODE
209;; IS RETURNED IN AX.
210;;
211;;**************************************************************************
212RENAME_FILE MACRO OLD_NAME,NEW_NAME ;;AN000;
213 ;;
214 LEA SI, OLD_NAME ;;AN000;
215 LEA DI, NEW_NAME ;;AN000;
216 CALL RENAME_FILE_ROUTINE ;;AN000;
217 ENDM ;;AN000;
218;;**************************************************************************
219;;
220;; READ_FILE: Transfer the specified number of bytes from a file into a
221;; buffer location.
222;;
223;; SYNTAX: READ_FILE var_handle, buffer, immed_char, var_char
224;;
225;; INPUT:
226;; var_handle - The handle of the file to read.
227;; buffer - The address of where to store the data
228;; immed_char - The number of characters to read
229;;
230;; OUTPUT:
231;; CY = 0, Read success. var_char - number of bytes read
232;; CY = 1, Read error. AX contains the error code.
233;;
234;; OPERATION:
235;;
236;; THIS MACRO READS TO AN ALREADY OPENED FILE.
237;; IT MAKES USE OF INT 21 (AH=3FH).
238;; AX WILL RETURN THE NUMBER BYTES ACTUALLY WRITTEN.
239;;
240;;************************************************************************
241READ_FILE MACRO VAR_HANDLE,BUFFER,IMMED_CHAR, VAR_CHAR ;;AN000;
242
243 MOV BX,VAR_HANDLE ;;AN000;
244 MOV DX,OFFSET BUFFER ;;AN000;
245 MOV CX,IMMED_CHAR ;;AN000;
246 CALL READ_FILE_ROUTINE ;;AN000;
247 ENDM ;;AN000;
248;;**************************************************************************
249;;
250;; WRITE_FILE: Transfer the specified number of bytes from a buffer into a
251;; specified file.
252;;
253;; SYNTAX: WRITE_FILE var_handle, buffer, immed_char, var_char
254;;
255;; INPUT:
256;; var_handle - The handle of the file to write to.
257;; buffer - The address of where the data is stored.
258;; immed_char - The number of characters to write.
259;;
260;; OUTPUT:
261;; CY = 0, Write success. var_char - number of bytes written.
262;; CY = 1, Write error. AX contains the error code.
263;;
264;; OPERATION:
265;;
266;; THIS MACRO WRITES TO AN ALREADY OPENED FILE.
267;; IT MAKES USE OF INT 21 (AH=3DH).
268;; AX WILL RETURN THE NUMBER BYTES ACTUALLY WRITTEN.
269;;
270;;************************************************************************
271WRITE_FILE MACRO VAR_HANDLE, BUFFER, IMMED_CHAR, VAR_CHAR ;;AN000;
272 ;;
273 MOV BX,VAR_HANDLE ;;AN000;
274 MOV DX,OFFSET BUFFER ;;AN000;
275 MOV CX,IMMED_CHAR ;;AN000;
276 CALL WRITE_FILE_ROUTINE ;;AN000;
277 ENDM ;;AN000;
278;;**************************************************************************
279;;
280;; PREPARE_FILE: Prepare a file and a buffer for the construction of that
281;; file line by line.
282;;
283;; SYNTAX: PREPARE_FILE filename
284;;
285;; INPUT:
286;; filename = The name of the file to create. (ASCII-N format)
287;;
288;; OUTPUT: CY = 0: No error was encountered.
289;; CY = 1: There was an error encountered.
290;;
291;; OPERATION: A attempt is made to create the file. If it fails because
292;; the file already exists, then the file is opened for writing.
293;; The user will then write to the file be calling WRITE_LINE macro. The
294;; data will be temperarily stored in a buffer to limit the actual number
295;; of writes to the file.
296;;
297;;**************************************************************************
298PREPARE_FILE MACRO FILENAME ;;AN000;
299
300 MOV BX, OFFSET FILENAME ;;AN000; Pass the address of the filename string
301 CALL PREPARE_FILE_ROUTINE ;;AN000; Call a routine to do that actual work
302 ENDM ;;AN000;
303;;**************************************************************************
304;;
305;; WRITE_LINE: Write a line to the file being constructed.
306;;
307;; SYNTAX: WRITE_LINE line
308;;
309;; INPUT:
310;; line = The line to write to the file. (ASCII-N format)
311;;
312;; OUTPUT: CY = 0: No error was encountered.
313;; CY = 1: An error was encountered.
314;;
315;; OPERATION: The line that is passed, has a CR and a LF appended to the
316;; end of the line. The data is then stored in a buffer. When the
317;; buffer is full, the data is written to the disk.
318;;
319;;**************************************************************************
320WRITE_LINE MACRO LINE ;;AN000;
321
322 MOV BX, OFFSET LINE ;;AN000; Pass the address of the line to write
323 CALL WRITE_LINE_ROUTINE ;;AN000; Call a routine to do the actual work
324 ENDM ;;AN000;
325;;**************************************************************************
326;;
327;; SAVE_FILE: Empty the data in the buffer being used to create the file
328;; and then close the file.
329;;
330;; SYNTAX: SAVE_FILE file_name, error_code
331;;
332;; INPUT:
333;; file_name = The name of the file being built. If there has been
334;; an error encountered, then the file will be erased.
335;;
336;; OUTPUT: CY = 0: No error was encountered.
337;; CY = 1: An error was encountered.
338;; ERROR_CODE will contain the code of the error which
339;; occured.
340;;
341;; OPERATION: The routine will check to see if there is any data left in
342;; the buffer. If there is, the data is written to the file being
343;; created. The file is then closed. If errors were encountered at
344;; anytime during the create process, then the carry flag will be set
345;; and the error code will be returned in ERROR_CODE.
346;;
347;;**************************************************************************
348SAVE_FILE MACRO FILE_NAME, ERROR_CODE ;;AN000;
349
350 MOV BX, OFFSET FILE_NAME ;;AN000; Get the address of the file name string
351 CALL SAVE_FILE_ROUTINE ;;AN000; Call a subroutine to do the actual work
352 MOV ERROR_CODE, AX ;;AN000; Store the returned error code
353 ENDM ;;AN000;
354;;**************************************************************************
355;;
356;; CHECK_DOS_VERSION: Check DOS Version level is 4.00
357;;
358;; SYNTAX: CHECK_DOS_VERSION
359;;
360;; INPUT:
361;; None.
362;;
363;; OUTPUT: CY = 0: Current DOS Version is 4.00
364;; CY = 1: Current DOS Version is other than level 4.00
365;;
366;; OPERATION: DOS function call 30h is performed to get the current DOS
367;; version number. If the DOS version is not 4.00, the carry flag is set.
368;;
369;;**************************************************************************
370CHECK_DOS_VERSION MACRO ;;AN000;
371 MOV AH, 30H ;;AN000; DOS function number to perform
372 DOSCALL ;;AN000;
373 .IF < AL EQ MAJOR_VERSION > AND ;;AC047;SEH check is now made in VERSIONA.INC
374 .IF < AH EQ MINOR_VERSION > ;;AC047;SEH Check the DOS minor version
375 CLC ;;AN000; This is the correct version
376 .ELSE ;;AN000;
377 STC ;;AN000; This is the incorrect version
378 .ENDIF ;;AN000;
379 ENDM ;;AN000;
380;;**************************************************************************
381;;
382;; SET_DISPLAY_MODE: Set the display mode to 80 column.
383;;
384;; SYNTAX: SET_DISPLAY_MODE
385;;
386;; INPUT:
387;; None.
388;;
389;; OUTPUT:
390;; None.
391;;
392;; OPERATION: The Video Interrupt (INT 10H, AH = 0) is performed to set
393;; the display to 80 column mode.
394;;
395;;************************************************************************
396SET_DISPLAY_MODE MACRO ;;AN000;
397
398 CALL SET_DISPLAY_MODE_ROUTINE ;;AN000;
399 ENDM ;;AN000;
400
401;;************************************************************************
402;;
403;; CHECK_EXPANDED_MEMORY: Check if the system supports expanded memory.
404;;
405;; SYNTAX: CHECK_EXPANDED_MEMORY var_xma
406;;
407;; INPUT:
408;; None.
409;;
410;; OUTPUT:
411;; var_xma = 0: Expanded memory is NOT supported.
412;; = 1: Expanded memory is supported.
413;; var_mod80 = 0: Not model 80
414;; = 1: Model 80
415;;
416;; OPERATION: A call to the system services (INT 15H, AH = C0H) is performed
417;; to get the system configuration parameters. (model byte).
418;;
419;; The Personal System/2 Model 80 (model byte = 0F8h) always support
420;; expanded memory.
421;;
422;; The Personal System/2 Models 50 and 60 (model byte = 0FCh) support
423;; expanded memory if the ??? 2 is present. The ??? 2 card has
424;; the identity number of F7FEh. F7H is read through the port address
425;; 101h and FEH is read through port 100H
426;;
427;; All other models do not support expanded memory.
428;;
429;;************************************************************************
430CHECK_EXPANDED_MEMORY MACRO VAR_XMA, VAR_MOD80 ;;AC000;JW
431
432 CALL CHK_EX_MEM_ROUTINE ;;AN000;
433 MOV VAR_XMA, SI ;;AN000;
434 MOV VAR_MOD80,BX ;;AN000;JW
435 ENDM ;;AN000;
436
437INCLUDE MACROS3.INC ;;AN000;