summaryrefslogtreecommitdiff
path: root/v4.0/src/CMD/GRAFTABL
diff options
context:
space:
mode:
authorGravatar Mark Zbikowski2024-04-25 21:24:10 +0100
committerGravatar Microsoft Open Source2024-04-25 22:32:27 +0000
commit2d04cacc5322951f187bb17e017c12920ac8ebe2 (patch)
tree80ee017efa878dfd5344b44249e6a241f2a7f6e2 /v4.0/src/CMD/GRAFTABL
parentMerge pull request #430 from jpbaltazar/typoptbr (diff)
downloadms-dos-main.tar.gz
ms-dos-main.tar.xz
ms-dos-main.zip
MZ is back!HEADmain
Diffstat (limited to 'v4.0/src/CMD/GRAFTABL')
-rw-r--r--v4.0/src/CMD/GRAFTABL/GRAFTABL.LNK12
-rw-r--r--v4.0/src/CMD/GRAFTABL/GRAFTABL.SKL28
-rw-r--r--v4.0/src/CMD/GRAFTABL/GRTAB.ASM1218
-rw-r--r--v4.0/src/CMD/GRAFTABL/GRTABCF.ASM1196
-rw-r--r--v4.0/src/CMD/GRAFTABL/GRTABHAN.ASM223
-rw-r--r--v4.0/src/CMD/GRAFTABL/GRTABML.ASM1187
-rw-r--r--v4.0/src/CMD/GRAFTABL/GRTABMS.INC115
-rw-r--r--v4.0/src/CMD/GRAFTABL/GRTABNO.ASM1188
-rw-r--r--v4.0/src/CMD/GRAFTABL/GRTABP.ASM144
-rw-r--r--v4.0/src/CMD/GRAFTABL/GRTABPAR.ASM538
-rw-r--r--v4.0/src/CMD/GRAFTABL/GRTABPO.ASM1316
-rw-r--r--v4.0/src/CMD/GRAFTABL/GRTABSM.ASM152
-rw-r--r--v4.0/src/CMD/GRAFTABL/GRTABUS.ASM1182
-rw-r--r--v4.0/src/CMD/GRAFTABL/MAKEFILE74
14 files changed, 8573 insertions, 0 deletions
diff --git a/v4.0/src/CMD/GRAFTABL/GRAFTABL.LNK b/v4.0/src/CMD/GRAFTABL/GRAFTABL.LNK
new file mode 100644
index 0000000..ebc5869
--- /dev/null
+++ b/v4.0/src/CMD/GRAFTABL/GRAFTABL.LNK
@@ -0,0 +1,12 @@
1 GRTABHAN+
2 GRTABUS+
3 GRTABML+
4 GRTABPO+
5 GRTABCF+
6 GRTABNO+
7 GRTABSM+
8 GRTABPAR+
9 GRTABP+
10 GRTAB
11 GRAFTABL.EXE;
12 \ No newline at end of file
diff --git a/v4.0/src/CMD/GRAFTABL/GRAFTABL.SKL b/v4.0/src/CMD/GRAFTABL/GRAFTABL.SKL
new file mode 100644
index 0000000..e148585
--- /dev/null
+++ b/v4.0/src/CMD/GRAFTABL/GRAFTABL.SKL
@@ -0,0 +1,28 @@
1:util GRAFTABL ;AN000;utility name
2:class A ;AN000;system messages
3:use 1 COMMON1 ;AN000;MSG 1 is always "Incorrect DOS version"
4
5;In these next 2 messages, %1 will be replaced with one from list, 4-5, ;AN000;
6; or with one entry of the list at "CPID". (see GRTABMS.INC) ;AN000;
7
8:def 2 "Active Code Page: %1",CR,LF ;AN000;
9:def 3 "Previous Code Page: %1",CR,LF ;AN000;
10
11:def 4 "None",NULL ;AN000;
12:def 5 "Non-standard",NULL ;AN000;
13
14:def 6 CR,LF,"DOS command line parameters supported",COLON,CR,LF,LF ;AC007;
15
16:def 7 " /STA - Request Status only",CR,LF ;AC007;
17" ? - Display this summary of parameters",CR,LF,CR,LF ;AC007;
18
19:def 8 " Code Pages available",COLON,CR,LF ;AC007;
20" 437 - USA Graphic Character Set",CR,LF ;AC007;
21
22:def 9 " 850 - Multi-lingual Graphic Character Set",CR,LF ;AC007;
23" 860 - Portuguese Graphic Character Set",CR,LF ;AC007;
24
25:def 10 " 863 - Canadian French Graphic Character Set",CR,LF ;AC007;
26" 865 - Nordic Graphic Character Set",CR,LF ;AC007;
27:end ;AN000;
28 \ No newline at end of file
diff --git a/v4.0/src/CMD/GRAFTABL/GRTAB.ASM b/v4.0/src/CMD/GRAFTABL/GRTAB.ASM
new file mode 100644
index 0000000..b0ef30c
--- /dev/null
+++ b/v4.0/src/CMD/GRAFTABL/GRTAB.ASM
@@ -0,0 +1,1218 @@
1 PAGE 90,132 ;A2
2 TITLE GRTAB - DEFINE ROM GRAPHIC CHARACTERS FOR 128-255
3 IF1
4 %OUT GRTAB.SAL...
5 ELSE
6; %OUT GRTAB.SAL...
7 ENDIF
8LISTPARM = 1 ;0=SUPPRESS LIST; 1=ALLOW LIST ;AN000;
9;.XLIST ; ;AN000;
10;****************** START OF SPECIFICATIONS *****************************
11; MODULE NAME: GRTAB
12; (MAIN ROUTINE FOR UTILITY "GRAFTABL")
13
14; DESCRIPTIVE NAME: Makes resident a 1K block of data defining the
15; graphic character set when in graphics mode.
16
17;FUNCTION: When in normal text mode (BASIC SCREEN 0), the CGA will properly
18; handle all 255 characters in the screen display.
19; However, when in graphics mode (BASIC SCREEN 1), then only the
20; first 128 characters are properly shown on the screen.
21; The upper 128 characters are defined in graphics mode by
22; the 8 by 128 byte table pointed to by interrupt 1FH
23; vector, which is normally set to 0:0, thus producing
24; garbage on the screen for the upper set of characters.
25
26; The purpose of this routine is to define an 8 by 128 byte
27; table that defines each of these graphic characters in
28; the upper 128 byte range, and also to put the vector
29; pointer to this table into the interrupt 1FH. Once
30; loaded, this table remains resident.
31
32; An interrupt handler is hooked into the INT 2FH vector that
33; screens INT 2FH calls for the MULTIPLEX ID value of hex B0,
34; as defined by an equate, MY_MULTIPLEX_NUMBER, in GRATABHAN.
35; The response indicates that GRAFTABL has been loaded, thus
36; permitting the redefinition of the original 1K table with
37; some new specification.
38
39; ENTRY POINT: Entry_Point, JMP from GRTABHAN.SAL at his ORG 100H.
40; LINKAGE: [d:][path] GRAFTABL [437 | 850 | 860 | 863 | 865 | ? | /STATUS]
41
42; INPUT: (DOS COMMAND LINE PARAMETERS)
43; '/STATUS'- (OR /STA) Identify the table already loaded, if any.
44; '?' - Display the list of operands supported by GRAFTABL.
45; 437 - Install the USA Graphic Character Set
46; (BLANK) - Means same as '437', the 'USA' definition table
47; 850 - Install the Multi-lingual Graphic Character Set
48; 860 - Install the Portuguese Graphic Character Set
49; 863 - Install the Canadian French Graphic Character Set
50; 865 - Install the Nordic Graphic Character Set
51
52; EXIT-NORMAL: ERRORLEVEL 0 - Leaving the 1K block of newly defined
53; characters resident. There was no
54; previously defined character table.
55; Available RAM reduced by hex 1360 bytes.
56
57; ERRORLEVEL 1 - No change in size of available RAM storage.
58; A previously loaded character table exists.
59; If a new table was requested, it has replaced
60; the previous table at its original location.
61
62; ERRORLEVEL 2 - No change in size of available RAM storage.
63; No previously loaded character table exists.
64;
65; (The request for status, with parm="/sta[tus]",
66; or the request for HELP, with parm="?",
67; will result in either code 1 or 2.)
68
69; EXIT-ERROR: ERRORLEVEL 3 - Incorrect parameter.
70; No action taken, assumes "?" requested HELP.
71; No change in size of available RAM storage.
72
73; ERRORLEVEL 4 - Incorrect version of DOS, DOS 4.0 required
74
75; EFFECTS: Either the desired table is hooked into Interrupt 1FH,
76; or the identity of the previously loaded table is
77; displayed.
78
79; INTERNAL REFERENCES:
80; ROUTINES:
81; FINDTYPE - Scan existing table to see who is already loaded
82; MOVTAB - Moves the specified table to overlay a portion of the PSP
83; BADPARMS - Displays error message, and sets error ERRORLEVEL code
84; SENDMSG - passes parms to regs and invokes the system message routine.
85
86; DATA AREAS:
87; PSP - Contains the DOS command line parameters. Partly overlayed
88; with the installation of the character table.
89; WORKAREA - Temporary storage
90
91; EXTERNAL REFERENCES:
92; ROUTINES:
93; GRTABHAN (ENTRY is "HANDLER") - hooked into INT 2FH to identify
94; that GRAFTABL is loaded and resident.
95; SYSDISPMSG - Uses the MSG parm lists to construct the messages
96; on STDOUT.
97; SYSLOADMSG - Loads messages, makes them accessable.
98; SYSPARSE - Processes the DOS Command line, finds parms.
99; PARSE - Interfaces with the system Parser.
100
101; DATA AREAS:
102; GRTABUS - 1k binary table of the USA graphic character set
103; GRTABML - 1k binary table of the Multi-Lingual graphic
104; character set
105; GRTABPO - 1k binary table of the Portuguese graphic
106; character set
107; GRTABCF - 1k binary table of the Canada French graphic
108; character set
109; GRTABNO - 1k binary table of the Nordic graphic character
110; set
111; GRTABSM - Definition of messages, text and MSG parm lists,
112; and COPYRIGHT notice
113; GRTABPAR - Control blocks to define the DOS command line parms.
114; MPEXNUM - Byte containing the value of the multiplex number
115; (For ease of patching, if such should ever become needed,
116; this byte is immediately just before the interrupt 2FH
117; handler's entry point, after that handler is loaded. To
118; change this value here in these source modules, that value
119; is defined in GRTABHAN as the equate: MY_MULTIPLEX_NUMBER.
120; For purposes of patching the GRAFTABL.EXE file, this byte
121; is at offset 5FH into the module.)
122
123; NOTES:
124; This module should be processed with the SALUT preprocessor
125; with the re-alignment not requested, as:
126
127; SALUT GRTAB,NUL
128
129; To assemble these modules, the alphabetical or sequential
130; ordering of segments may be used.
131
132; Sample LINK command:
133
134; LINK @GRTABLK.ARF
135
136; Where the GRTABLK.ARF is defined as:
137; GRTABHAN+ (must be first in this list)
138; GRTABUS+ (these languages must be linked in this order)
139; GRTABML+ (Multi-Lingual)
140; GRTABPO+ (Portuguese)
141; GRTABCF+ (Canadian French)
142; GRTABNO+ (Nordic)
143; GRTABSM+ (contains COPYRIGHT, SYSDISPMSG, SYSLOADMSG code)
144; GRTABPAR+ (contains PARSE control blocks, code to call SYSPARSE)
145; GRTABP+ (contains SYSPARSE to decode COMMAND line parms)
146; GRTAB (MAIN ROUTINE)
147; GRAFTABL;
148
149; These modules must be linked in this order. The load module is
150; a COM file, to be converted to COM with EXE2BIN.
151
152; REVISION HISTORY:
153; A000 Version 4.00: add PARSER, System Message Handler,
154; A001 PTM 382 display "ACTIVE" OR "PREVIOUS" CP.
155; A002 PTM 474 Avoid duplicate switches
156; A003 PTM 538 Display parm in error
157; A004 PTM1821 INCLUDE COPYRIGH.INC moved to msg_service macro.
158; A005 PTM3262 specify BASESW EQU 1 before PARSE.ASM
159; A006 PTM3512 PATHGEN START/END LABELS
160; A007 PTM3621 break up large help msg into smaller messages
161; A008 PTM3899 Free Environment, close all STDxxx handles
162; when leaving a resident portion
163;
164; COPYRIGHT: The following notice is found in the OBJ code generated from
165; the "GRTABSM.ASM" module:
166
167; "Version 4.00 (C) Copyright Microsoft Corp 1981, 1988"
168; "Licensed Material - Program Property of Microsoft"
169
170;****************** END OF SPECIFICATIONS *****************************
171 HEADER <MACRO DEFINITIONS, LOCAL EQUATES>
172 INCLUDE PATHMAC.INC ;AN006;
173; $SALUT (0,36,41,52)
174DOSCALL MACRO FN,SF ;; ;AN000;
175 IFNB <FN> ;;ARE THERE ANY PARMS AT ALL?;AN000;
176 IFNB <SF> ;; ;AN000;
177 MOV AX,(FN SHL 8)+SF ;;AH=FN;AH=SF ;AN000;
178 ELSE ;;SINCE THERE IS NO SUB FUNC ;AN000;
179 MOV AH,FN ;; ;AN000;
180 ENDIF ;; ;AN000;
181 ENDIF ;; ;AN000;
182 INT 21H ;; ;AN000;
183 ENDM ;; ;AN000;
184; = = = = = = = = = = = =
185; $SALUT (4,19,23,36)
186FIXLIST MACRO LP,DOIT ;; ;AN000;
187IF LP ;; ;AN000;
188DOIT ;; ;AN000;
189ENDIF ;; ;AN000;
190 ENDM ;; ;AN000;
191; = = = = = = = = = = = =
192HEADER MACRO TEXT ;; ;AN000;
193 FIXLIST LISTPARM,.XLIST ;; ;AN000;
194 SUBTTL TEXT ;; ;AN000;
195 FIXLIST LISTPARM,.LIST ;; ;AN000;
196 PAGE ;; ;AN000;
197 ENDM ;; ;AN000;
198; = = = = = = = = = = = =
199; DEFINITION OF FUNCTIONS TO BE REQUESTED OF INT 2FH
200GET_INST_STATE EQU 0 ;FUNCTION = "GET INSTALLED STATE"
201WHERE_R_U EQU 1 ;FUNCTION = "WHERE ARE YOU?"
202 ; REQUESTS VECTOR OF LOADED TABLE BE
203 ; PUT IN VECTOR POINTED TO BY DS:[BX]
204
205; DOS FUNCTIONS:
206SHOW_MSG EQU 09H ;"SEND MESSAGE TO CONSOLE" DOS FUNCTION
207SET_VECT EQU 25H ;"SET VECTOR" DOS FUNCTION
208GET_VERSION EQU 30H ;"GET DOS VERSION"
209RET_RES EQU 31H ;"RETURN TO DOS" REMAIN RESIDENT
210GET_VECT EQU 35H ;"GET VECTOR" DOS FUNCTION
211CLOSE EQU 3EH ;AN008; CLOSE A FILE HANDLE
212FREE_AL_MEM EQU 49H ;AN008; FREE ALLOCATED MEM
213RET_FN EQU 4CH ;"RETURN TO DOS" NOT REMAIN RESIDENT
214
215; VECTOR TABLE ENTRIES USED
216VEC_GRAF_CHAR EQU 1FH ;VECTOR THAT POINTS TO GRAPHIC CHAR TABLE
217VEC_MULTIPLX EQU 2FH ;VECTOR OF MULTIPLEX HANDLER
218VEC_DOS EQU 21H ;VECTOR POINTS TO DOS FUNCTIONS
219VEC_RET EQU 20H ;RETURN TO DOS, WITHOUT RET CODE ;AN000;
220
221; DOS COMMAND LINE PARAMETERS
222RETCODE_QUESTION EQU -1 ;VALUE IN BX, IF PARM=?
223ZERO EQU 0 ;VALUE IN BX IF PARM=/STATUS OR /STA
224 FIXLIST LISTPARM,.XLIST ; ;AN000;
225;SLASH EQU "/" ;REQUEST FOR STATUS
226;PARM? EQU "?" ;REQUEST FOR HELP
227; THE PARM THAT ASKS FOR A PARTICULAR LANGUAGE
228; IS THE TWO CHAR PAIR, DEFINED AS "LANID"
229; IN THE STRUC, "LANGUAGE"
230 FIXLIST LISTPARM,.LIST ; ;AN000;
231
232; STANDARD FILE HANDLES
233STDIN EQU 0 ;AN008; STANDARD INPUT DEVICE
234STDOUT EQU 1 ;STANDARD OUTPUT DEVICE
235STDERR EQU 2 ;STANDARD ERROR OUTPUT DEVICE
236STDAUX EQU 3 ;AN008; STANDARD AUX DEVICE
237STDPRN EQU 4 ;AN008; STANDARD PRINTER DEVICE
238
239; OTHER EQUATES
240BLANK EQU " " ;BLANK CHARACTER
241NIBBLE_SIZE EQU 4 ;SHIFT COUNT TO MOVE ONE NIBBLE ;AN000;
242 FIXLIST LISTPARM,.XLIST ; ;AN000;
243;CASEBIT EQU 0FFH-20H ;TURN OFF THIS BIT TO MAKE UPPER CASE
244;LOWERA EQU 'a' ;LOWER CASE CHARACTER 'a'
245;LOWERZ EQU "z" ;LOWER CASE CHARACTER 'z'
246 FIXLIST LISTPARM,.LIST ; ;AN000;
247
248 EXTRN HANDLER_SIZE:ABS ;THE BYTE SIZE REQUIREMENTS
249 EXTRN CPID_L:ABS ;NO. BYTES IN EACH CPID ENTRY
250
251VECTOR STRUC ;DEFINITION OF ANY DOUBLE WORD VECTOR POINTER
252VECOFF DW ? ;OFFSET PORTION OF VECTOR POINTER
253VECSEG DW ? ;SEGMENT PORTION OF VECTOR POINTER
254VECTOR ENDS
255; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
256LANGUAGE STRUC ;DEFINITION OF EACH LANGUAGE TABLE
257LANCHAR DB 1024 DUP(?) ;8 BYTES PER EACH OF 128 CHARACTERS
258LANID DW ? ;TWO BYTE CODEPAGE ID, TO MATCH
259 ; GRAFTABL CMD LINE PARM
260LANNAME DB 14 DUP(?) ;ASCIIZ STRING NAME OF LANGUAGE
261LANGUAGE ENDS
262
263TABSIZE EQU SIZE LANCHAR + SIZE LANID + SIZE LANNAME ;SIZE OF
264 ; EACH GRAPHIC CHAR TABLE + ID + NAME
265; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
266; VALUES FOR THE MSG_DESC CONTROL BLOCK
267ONE_SUBS EQU 1 ;ONE VARIABLE FIELD IN MESSAGE ;AN000;
268TWO_SUBS EQU 2 ;TWO VARIABLE FIELDS IN MESSAGE ;AN000;
269CLASS_1 EQU 0100H ;CLASS 1 (DOS EXTENDED ERRORS) ;AN000;
270CLASS_2 EQU 0200H ;CLASS 2 (PARSE ERRORS) ;AN000;
271CLASS_A EQU 0A00H ;CLASS A TYPE MESSAGE ;AN000;
272
273;THIS MESSAGE DESCRIPTOR CONTROL BLOCK IS GENERATED, ONE PER MESSAGE,
274;TO DEFINE THE SEVERAL PARAMETERS THAT ARE EXPECTED TO BE PASSED IN
275;CERTAIN REGISTERS WHEN THE SYSDISPMSG FUNCTION IS TO BE INVOKED.
276
277MSG_DESC STRUC ; ;AN000;
278MSG_NUM DW 0 ;MESSAGE NUMBER (TO AX) ;AN000;
279MSG_HANDLE DW STDOUT ;HANDLE OF OUTPUT DEVICE (TO BX) ;AN000;
280MSG_SUBLIST DW 0 ;POINTER TO SUBLIST (TO SI) ;AN000;
281MSG_COUNT DW 0 ;SUBSTITUTION COUNT (TO CX) ;AN000;
282MSG_CLASS DW CLASS_A ;MESSAGE CLASS (IN HIGH BYTE, TO DH) ;AN000;
283 ; LOW BYTE HAS 0 (FUNCTION "NO INPUT", TO DL)
284MSG_DESC ENDS ; ;AN000;
285; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
286SUBLIST STRUC ; ;AN000;
287SUB_SIZE DB TYPE SUBLIST ;SUBLIST SIZE (POINTER TO NEXT SUBLIST) ;AN000;
288SUB_RES DB 0 ;RESERVED ;AN000;
289 ;NEXT FIELD IS TO BE USED AS A DOUBLE WORD
290SUB_VALUE DW 0 ;TIME, DATE, OR PTR TO DATA ITEM ;AN000;
291SUB_VALUE_SEG DW 0 ;SEG ID OF PTR ;AN000;
292 ;(ABOVE FIELD MUST BE FILLED AT EXECUTION TIME
293 ; IF THIS IS A .COM FILE)
294SUB_ID DB 0 ;N OF %N ;AN000;
295SUB_FLAGS DB 0 ;DATA TYPE FLAGS ;AN000;
296SUB_MAX_WIDTH DB 0 ;MAXIMUM FIELD WIDTH (0=UNLIMITED) ;AN000;
297SUB_MIN_WIDTH DB 0 ;MINIMUM FIELD WIDTH ;AN000;
298SUB_PAD_CHAR DB " " ;CHARACTER FOR PAD FIELD ;AN000;
299SUBLIST ENDS ; ;AN000;
300; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
301DEFPSP STRUC
302 DB 2CH DUP(?) ;AN008;
303ENVIRON_SEG DW ? ;AN008; SEG ID OF ENVIRONMENT
304 DB 32H DUP(?) ;AN008; SET WHERE
305MOV_DEST DB 20H DUP(?) ; INT HANDLER IS TO BE MOVED TO
306 ;AT MOV_DEST+HANDLER_SIZE WILL GO THE
307 ; TABLE ITSELF
308PARMCNT DB ? ;COUNT OF CHARS IN DOS COMMAND LINE PARM LIST
309PARMDOS DB 127 DUP(?) ;DOS COMMAND LINE PARM TEXT
310DEFPSP ENDS
311
312PSPSIZE EQU SIZE DEFPSP ;SIZE OF THE PSP ITSELF
313SHIFT_SIZE EQU PSPSIZE - MOV_DEST ; HOW FAR HANDLER/TABLE MOVED
314 ;WHEN THEY BECAME RESIDENT
315SHIFT_SIZE_SEG EQU SHIFT_SIZE SHR NIBBLE_SIZE ;DIVIDE BY 16 ;AN000;
316 ; TO CONVERT BYTES TO SEGS
317; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
318.LIST
319 HEADER <EXTERNALS AND WORKAREA>
320; $SALUT (4,6,12,28)
321
322CSEG SEGMENT WORD PUBLIC
323 ASSUME CS:CSEG ;AS A .COM FILE, THE DOS
324 ASSUME DS:CSEG ; LOADER HAS ALREADY
325 ASSUME ES:CSEG ; INITIALIZED ALL THESE
326 ASSUME SS:CSEG ; SEGMENT REGISTERS
327
328GRTAB_BASE EQU $ ;FOR EASE IN DEBUGGING ;AN000;
329 PUBLIC GRTAB_BASE ; TELL LINK MAP WHERE THIS IS ;AN000;
330
331 EXTRN END_PSP:BYTE ;MOVE RESIDENT CODE FROM HERE TO "MOV_DEST"
332 EXTRN MPEXNUM:BYTE ;MULTIPLEXOR ID VALUE
333 EXTRN HANDLER:NEAR ;ENTRY TO INT2FH HANDLER
334 EXTRN PREV_OWN:DWORD ;VECTOR TO SAVE PREVIOUS INT2FH OWNER
335 EXTRN PATCH_OFF:WORD ;THESE TWO PATCH LOCATION IN GRTABHAN.SAL
336 EXTRN PATCH_SEG:WORD ; ARE TO RECEIVE LOCATION WHERE TABLE IS MOVED TO
337 EXTRN TABLEUS:BYTE ;START OF THE USA CHAR TABLE
338 EXTRN COPYRIGHT:BYTE ;USED TO MARK THE END OF THE ARRAY OF CHAR TABLES
339 ; THE COPYRIGHT TEXT IS ITSELF UN-REFERENCED
340 FIXLIST LISTPARM,.XLIST ; ;AN000;
341; EXTRN MSG1:WORD ;NON-STD VER OF GRAPHIC CHAR SET TABLE IS ALREADY LOADED
342; EXTRN MSG2:WORD ;XXX VER OF GRAPHIC CHAR SET TABLE IS ALREADY LOADED
343; EXTRN MSG3:WORD ;XXX VER OF GRAPHIC CHAR SET HAS JUST BEEN LOADED
344; EXTRN MSG4:WORD ;INCORRECT PARAMETER
345; EXTRN MSG5:WORD ;NO VER OF GRAPHIC CHAR SET TABLE IS ALREADY LOADED
346; EXTRN MSG6:WORD ;INCORRECT DOS VERSION
347; EXTRN MSG7:WORD ;DOS COMMAND LINE PARAMETERS SUPPORTED:
348; EXTRN MSG8:WORD ;ID - LANGUAGE NAME
349; EXTRN LANGUAGE_NAME:BYTE ;14 BYTE AREA TO RECEIVE ASCIIZ OF LANGUAGE NAME
350 FIXLIST LISTPARM,.LIST ; ;AN000;
351 EXTRN MSGNUM_EXTERR:WORD ;ALL DOS EXTENDED ERRORS ;AN000;
352 EXTRN MSGNUM_PARSE:WORD ;ALL PARSING ERRORS ;AN000;
353 EXTRN SUBLIST_PARSE:WORD ;DEFINES THE BAD PARM AS %0 ;AN003;
354 EXTRN MSGNUM_VER:WORD ;"Incorrect DOS Version" ;AN000;
355 EXTRN MSGNUM_ACTIVE:WORD ;"Active Code Page: %1" ;AN000;
356 EXTRN MSGNUM_PREVIOUS:WORD ;"Previous Code Page: %1" ;AN000;
357 EXTRN CPID:BYTE ;4 BYTE STRING OF CODE PAGE ID ;AN000;
358 EXTRN SLIST_23:WORD ;SET VECTOR TO POINT TO "NONE" OR "NON-STANDARD", ;AN000;
359 ; OR TO ONE OF THE "CPID" ENTRIES
360 EXTRN MSGNUM_NONE:WORD ;"None" ;AN000;
361 EXTRN MSGNUM_NSTD:WORD ;"Non-Standard" ;AN000;
362 EXTRN MSGNUM_HELP_TITLE:WORD ;"DOS command line parameters supported:" ;AN000;
363 EXTRN MSGNUM_HELP_TITLE7:WORD ;AN007;
364 EXTRN MSGNUM_HELP_TITLE8:WORD ;AN007;
365 EXTRN MSGNUM_HELP_TITLE9:WORD ;AN007;
366 EXTRN MSGNUM_HELP_TITLE10:WORD ;AN007;
367 EXTRN SYSDISPMSG:NEAR ;DISPLAY MESSAGE SUBROUTINE ;AN000;
368 EXTRN SYSLOADMSG:NEAR ;LOAD MESSAGE SUBROUTINE ;AN000;
369 EXTRN SYSGETMSG:NEAR ;GET MESSAGE SUBROUTINE ;AN000;
370 EXTRN PARSER:NEAR ;INVOKES SYSTEM DOS COMMAND LINE PARSER ;AN000;
371; $SALUT (4,17,22,32)
372WHERE DD 0 ;VECTOR POINTING TO PREVIOUS GRAFTABL TABLE
373 ; VECTOR AS SET BY "GRTABHAN" MULTIPLEX HANDLER.
374 ;THIS IS NOT NECESSARILY WHAT INT 1FH HAS.
375ADPSP DW 0 ;SEG ID OF PSP.
376 ; CHANGED TO SHOW ITS SHIFTED LOCATION
377 FIXLIST LISTPARM,.XLIST ; ;AN000;
378;ACC DW 0 ;ACCUMULATES VALUE OF CODEPAGE ID
379;TEN DW 10 ;CONSTANT TO CONVERT ASCII DECIMAL TO BINARY
380;TOKEN DB " " ;RECEIVES THE TEXT OF DOS PARMS, AND OVERFLOW AREA
381;TOKEN_SIZE EQU $-TOKEN
382 FIXLIST LISTPARM,.LIST ; ;AN000;
383RESSIZE_PARA DW 0 ;SIZE OF RESIDENT PORTION, HANDLER+TABLE, IN PARAGRAPHS
384RESSIZE_BYTE DW 0 ;SIZE OF RESIDENT PORTION, HANDLER+TABLE, IN BYTES
385SAVESI DW 0 ;REMEMBER WHERE CURRENT TABLE STARTS
386CPIDPOINTER DW CPID ;POINTER TO ENTRY IN CPID TABLE OF PREVIOUS ENTRY
387ACTIVECPID DW CPID ;POINTER TO ENTRY IN CPID TABLE OF ACTIVE ENTRY
388 PUBLIC ACTIVECPID
389IDXXX DW 0 ;ID OF PREVIOUSLY LOADED TABLE
390INSTALLED DB 0 ;OUTPUT OF INT 2FH, "FF"=GRAFTABL ALREADY INSTALLED
391 ; AND 'WHERE' WILL POINT TO PREVIOUS TABLE
392 ;"00"=GRAFTABL NOT INSTALLED
393
394; DEFINITIONS OF VALUES OF CONTENTS OF "INSTALLED".
395LOADED EQU 0FFH ;GRAFTABLE IS ALREADY IN VECTOR
396
397
398; DEFINITIONS OF VALUES OF CONTENTS OF 'EXITFL'.
399; THESE VALUES ARE THE RETURN CODES CHECKED BY ERRORLEVEL.
400EXVER EQU 4 ;RETURN TO DOS, INVALID DOS VERSION
401EXPAR EQU 3 ;RETURN TO DOS, INVALID DOS COMMAND LINE PARMS
402 ; OR SYSTEM MESSAGE HANDLER ERROR
403EXNONE EQU 2 ;RETURN TO DOS, NO TABLE WAS LOADED
404EXDOS EQU 1 ;RETURN TO DOS, CHAR TABLE PREVIOUSLY LOADED
405EXRES EQU 0 ;RETURN TO DOS, LEAVING THE 1K BLOCK OF CHAR RESIDENT
406
407EXITFL DB EXDOS ;ERRORLEVEL RETURN CODE, INITIALLY SET TO "EXDOS"
408 PUBLIC EXITFL
409BAD1F DB 0 ;FLAG, GET SET TO "RESET" IF GRAFTABL FONT IS
410RESET EQU 1 ; LOADED, BUT 1FH DOES NOT POINT TO IT
411; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
412 PATHLABL GRTAB ;AN006;
413; $SALUT (3,4,9,32)
414 HEADER <EXECUTABLE CODE, INITIALIZATION>
415MAIN PROC NEAR
416ENTRY_POINT LABEL NEAR ;JUMPED TO FROM ENTRY POINT IN GRTABHAN
417 PUBLIC ENTRY_POINT
418;VERSION CHECKING AND SYSTEM MESSAGE INITIALIZATION
419
420 CALL SYSLOADMSG ; INIT SYSMSG HANDLER ;AN000;
421
422; $IF C ; IF THERE WAS A PROBLEM ;AN000;
423 JNC $$IF1
424 CALL SYSDISPMSG ; LET HIM SAY WHY HE HAD A PROBLEM ;AN000;
425
426 MOV EXITFL,EXVER ; TELL ERRORLEVEL BAD DOS VERSION ;AN000;
427 MOV AH,RET_FN ;RETURN TO DOS, DO NOT STAY RESIDENT ;AN000;
428; $ELSE ; SINCE SYSDISPMSG IS HAPPY ;AN000;
429 JMP SHORT $$EN1
430$$IF1:
431 CLD ;CLEAR DIRECTION TO AUTO-INCREMENT ;AN000;
432 CALL MAIN_GRTAB ;PERFORM REST OF GRAFTABL FUNCTIONS ;AN000;
433 ;AH=DOS FUNCTION OF TYPE OF RETURN TO DOS
434; $ENDIF ;LOAD OF SYS MSGS OK? ;AN000;
435$$EN1:
436 MOV AL,EXITFL ;PASS BACK ERRORLEVEL RET CODE
437 INT VEC_DOS ;(21H) RETURN TO DOS WITH RET CODE
438
439 INT VEC_RET ;(20H) IF ABOVE NOT WORK, EXIT ANYWAY ;AN000;
440MAIN ENDP
441; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
442 HEADER <MAIN_GRTAB - PERFORM FUNCTIONS INDICATED BY PARMS>
443MAIN_GRTAB PROC NEAR
444 PUBLIC MAIN_GRTAB
445;INPUT: SYSTEM MESSAGE HANDLER IS LOADED, DOS VERSION IS CORRECT.
446;OUTPUT: AH=FUNCTION NUMBER FOR PROPER TYPE OF RETURN TO DOS.
447
448 MOV SLIST_23.SUB_VALUE_SEG,CS ;DO MY OWN SEGMENT FIXUPS ;AN000;
449 MOV SUBLIST_PARSE.SUB_VALUE_SEG,CS ; ;AN003;
450
451 MOV ADPSP,ES ;SAVE SEG ID OF PSP
452 SUB ADPSP,SHIFT_SIZE_SEG ;WHERE THE SEG BASE OF MOVED INT HANDLER WILL BE
453 PUSH ES ;SAVE PSP SEGID
454
455 MOV AX,HANDLER_SIZE ;GET SIZE OF MULTIPLEX HANDLER (NOT PSP) ;AN000;
456 ADD AX,TABSIZE ;ADD THE SIZE OF THE CHAR TABLE
457 MOV RESSIZE_BYTE,AX ;SAVE BYTE LENGTH OF HANDLER + CHAR TABLE
458 ; THIS IS THE AMOUNT TO BE SHIFTED
459 ADD AX,OFFSET MOV_DEST ;ADD ON PART OF PSP NOT OVERLAID BY CODE MOVE ;AN000;
460 MOV CL,NIBBLE_SIZE ;DIVIDE ;AN000;
461 SHR AX,CL ; BYTE SIZE BY 16
462 MOV RESSIZE_PARA,AX ;SAVE PARA LENGTH OF HANDLER + CHAR TABLE
463 ; AND FIRST PART OF PSP
464 ;THIS IS THE AMOUNT TO STAY RESIDENT
465
466 ;PATCH INT2FH HANDLER IN CASE LATER
467 ; IT BECOMES RESIDENT AND IS ASKED
468 ; TO TELL WHERE ITS CHAR TABLE WENT
469 MOV AX,ADPSP ;TELL INT2FH HANDLER WHERE TO SAY HIS TABLE IS
470 MOV PATCH_SEG,AX
471 MOV PATCH_OFF,OFFSET TABLEUS ;TELL INT2FH HANDLER
472 ; WHERE TO SAY HIS TABLE IS
473 MOV AH,GET_VECT ;REQUEST "GET VECTOR" FUNCTION
474 MOV AL,VEC_MULTIPLX ; FOR INTERRUPT 2FH
475 INT VEC_DOS ;OUTPUT: ES:BX = VECTOR OF CONTENTS
476
477 ASSUME ES:NOTHING ;SINCE ORIG PSP POINTER IS LOST
478 ;PATCH INT2FH HANDLER TO TELL HIM WHERE
479 ; THE CURRENT INT2FH HANDLER IS IN CASE
480 ; THIS NEW HANDLER REPLACES THE OLD ONE
481 MOV PREV_OWN.VECOFF,BX ;REMEMBER WHERE THE PREVIOUS
482 MOV PREV_OWN.VECSEG,ES ; OWNER OF INT 2FH WAS
483
484 POP ES ;RESTORE THE PSP SEGID BAS ;AN000;
485 ASSUME ES:CSEG ;REG IS RESET BACK LIKE IT WAS
486 CALL FINDTYPE ;SET 'IDXXX' TO SHOW
487 ; WHAT IS IN THE LOW RAM TABLE NOW
488
489 FIXLIST LISTPARM,.XLIST ; ;AN000;
490; CALL PROCESS ;RESPOND TO REQUEST DEFINED BY PARMS
491; ; SETTING 'EXITFL' TO INDICATE RESULTS
492 FIXLIST LISTPARM,.LIST ; ;AN000;
493 CALL PARSER ;LOOK AT DOS COMMAND LINE PARMS ;AN000;
494
495 ;IF A CODEPAGE NUMBER WAS SPECIFIED
496 ; BX = OFFSET TO LANGUAGE TABLE TO BE LOADED
497 ; DX = INTEGER VALUE OF CODEPAGE SPECIFIED
498 ;IF /STATUS WAS SPECIFIED
499 ; BX = 0
500 ;IF QUESTION MARK WAS SPECIFIED
501 ; BX=-1
502
503 CALL DOFUNCTION ; RESPOND TO PARMS ;AN000;
504 ; SETTING 'EXITFL' TO INDICATE RESULTS
505
506
507 FIXLIST LISTPARM,.XLIST ; ;AN000;
508; $ELSE ;SINCE THE DOS VERSION IS NOT ACCEPTABLE,
509; THE LOCATION, "MSG6", CONTAINS OFFSET TO TEXT OF
510; MOV DX,MSG6 ;"INCORRECT DOS VERSION" (THIS MSG ENDS WITH "$")
511; ;GET POINTER TO MESSAGE TEXT TO DS:DX
512; MOV AH,SHOW_MSG ;'WRITE TO CONSOLE' DOS FUNCTION
513; INT VEC_DOS
514;
515; MOV EXITFL,EXVER ;SET ERROR CODE TO ERROR TERMINATION, BAD VERSION
516; $ENDIF ;CHECK DOS VERSION NUMBER
517 FIXLIST LISTPARM,.LIST ; ;AN000;
518
519 CMP EXITFL,EXRES ;CHECK THE EXIT TYPE FLAG
520; $IF E ;IF NEW TABLE HAS JUST BEEN LOADED
521 JNE $$IF4
522;THE INT2FH HANDLER AND THE CHAR TABLE HAVE ALREADY BEEN MOVED INTO THE PSP.
523;CHANGE THE TWO VECTORS TO POINT TO WHERE THEN WENT.
524;THE TWO VECTORS ARE:
525; 2FH - MULTIPLEX INTERRUPT HANDLER
526; 1FH - 128 CHAR DEFINITION TABLE
527
528 PUSH DS
529
530 MOV AX,ADPSP
531 MOV DS,AX ;FIND SEG WHERE TABLE WENT
532 ASSUME DS:NOTHING
533
534;SET INTERRUPT VECTOR 1FH TO POINT TO WHERE THE CHAR TABLE IS
535 LEA DX,TABLEUS ;WHERE CHAR TABLE IS
536 ; DS:DX = VECTOR POINTING TO CHAR TABLE AFTER MOVE
537 MOV AH,SET_VECT ;FUNCTION TO MOVE DS:DX INTO VECTOR FOR INT 1FH
538 MOV AL,VEC_GRAF_CHAR ;INTERRUPT NUMBER TO RECEIVE NEW CONTENTS
539 INT VEC_DOS ;CHANGE THE VECTOR
540
541;SET INTERRUPT VECTOR 2FH (MULTIPLEXOR) TO WHERE THE INTERRUPT HANDLER IS
542 LEA DX,HANDLER ;SET DS:DX = INT 2FH INTERRUPT HANDLER
543 MOV AH,SET_VECT ;FUNCTION TO MOVE DS:DX INTO VECTOR FOR INT 2FH
544 MOV AL,VEC_MULTIPLX ;CHANGE THE CONTENTS OF THE MULTIPLEX INTERRUPT
545 INT VEC_DOS ;HOOK IN THE INTERRUPT HANDLER
546
547 POP DS ;RESTORE SEG REG
548 ASSUME DS:CSEG
549
550;FREE THE SEGMENT CONTAINING THE ENVIRONMENT
551 PUSH ES ;AN008; SAVE NORMAL ES
552 MOV AX,DS:ENVIRON_SEG ;AN008; FROM PSP GET SEG OF ENVIRONMENT
553 MOV ES,AX ;AN008; SET SEGREG TO POINT TO ENVIRONMENT SEG
554 ASSUME ES:NOTHING ;AN008; ES NOW HAS SEG OF ENVIRONMENT
555
556 MOV AH,FREE_AL_MEM ;AN008; (49H) FREE MEM ALLOC TO ENVIRON
557 ;ES = SEGID OF BLOCK BEING RETURNED
558 INT VEC_DOS ;AN008; FREE ENVIRONMENT
559 ;IF CARRY IS SET, THERE WAS A PROBLEM
560 ;THIS IS NOT CHECKED, IGNORING ANY ERROR
561
562 POP ES ;AN008; RESTORE ES TO NORMAL VALUE
563 ASSUME ES:CSEG ;AN008;
564
565;LOOP THRU ALL THE STANDARD EXTERNALLY OPENED HANDLES, 0-4,
566; AND CLOSE EACH ONE BEFORE RETURNING TO DOS, STAYING RESIDENT.
567 MOV BX,STDIN ;AN008; START WITH FIRST STANDARD HANDLE
568; $DO COMPLEX
569 JMP SHORT $$SD5
570$$DO5:
571 INC BX ;AN008; SELECT NEXT HANDLE
572; $STRTDO
573$$SD5:
574 MOV AH,CLOSE ;AN008; (3EH) CLOSE A FILE HANDLE
575 ; BX=FILE HANDLE
576 INT VEC_DOS ;AN008; CLOSE THE HANDLE
577 ;CARRY IS SET IF A PROBLEM WITH CLOSE
578 ;IN THIS CASE, ERRORS ARE IGNORED.
579
580 CMP BX,STDPRN ;AN008; WAS THIS THE LAST ONE?
581; $ENDDO E ;AN008; QUIT IF LAST ONE
582 JNE $$DO5
583
584;SET UP TO LEAVE A PORTION OF GRAFTABL RESIDENT:
585; THE MULTIPLEXOR INTERRUPT HANDLER, AND
586; THE FIRST 1K PIXEL TABLE.
587
588 MOV DX,RESSIZE_PARA ;MARK END OF AREA TO REMAIN RESIDENT
589 MOV AH,RET_RES ;FUNCTION TO RETURN TO DOS, BUT STAY RESIDENT
590; $ELSE ;SINCE NEW TABLE NOT LOADED
591 JMP SHORT $$EN4
592$$IF4:
593 ; MAYBE BECAUSE TABLE ALREADY LOADED
594 ; OR MAYBE BECAUSE BAD DOS COMMAND LINE PARMS
595 MOV AH,RET_FN ;RETURN TO DOS, DO NOT STAY RESIDENT
596; $ENDIF
597$$EN4:
598 RET ;RETURN TO CALLER
599MAIN_GRTAB ENDP
600; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
601 HEADER <LOCAL SUBROUTINES, SCAN TO SEE WHO IS ALREADY LOADED>
602FINDTYPE PROC NEAR
603 PUBLIC FINDTYPE
604;OUTPUT = IDXXX HAS 2 CHAR ID OF WHATEVER IS ALREADY LOADED
605; OR IS JUST 0 IF 1FH DOES NOT POINT TO A GRAFTABL DEFINED FONT.
606; SUBLIST_23 IS SET TO CONTAIN THE ORIGINAL CP PREVIOUSLY LOADED
607; OR "NONE". THIS SUBLIST IS USED BY BOTH MESSAGES 2 AND 3
608; WHICH STATE THE "ACTIVE CODEPAGE" AND "PREVIOUS CODEPAGE".
609; THE MESSAGE ACTUALLY TO USE THIS SUBLIST IS SELECTED IN "DOFUNCTION"
610; AFTER INTERROGATING THE PARMS, SO THAT "/STATUS" & "?" WILL REFER TO
611; THE "ACTIVE CODEPAGE", AND OTHER REQUESTS WILL SAY "PREVIOUS CP".
612
613 ASSUME ES:NOTHING
614 MOV AH,MPEXNUM ;REQUEST "GET INSTALLED STATE"
615 MOV AL,GET_INST_STATE ;IDENTIFY THAT IT IS ME I AM LOOKING FOR
616 ;AH=MULTIPLEXOR NUMBER, AL=FUNCTION REQUEST
617 INT VEC_MULTIPLX ;SEE IF I AM ALREADY LOADED
618
619 MOV INSTALLED,AL ;SAVE THE "INSTALLED?" INDICATOR
620 CMP AL,LOADED
621; $IF E ;IF I AM ALREADY INSTALLED
622 JNE $$IF10
623; GRAFTABL HAS BEEN LOADED. SEVERAL CONDITIONS MAY EXIST:
624; INT 1FH STILL POINTS TO THE TABLE GRAFTABL LOADED
625; AND THAT TABLE HAS NOT BEEN ALTERED.
626; INT 1FH STILL POINTS TO THE TABLE GRAFTABL LOADED
627; BUT THE CONTENTS OF THAT TABLE HAS BEEN ALTERED.
628; INT 1FH NO LONGER POINTS TO THE TABLE GRAFTABL LOADED,
629; BUT POINTS TO SOME OTHER CHARACTER TABLE.
630
631; NOW WE ASK THE MULTIPLEXOR HANDLER OF GRAFTABLE, SINCE WE
632; KNOW HE HAS BEEN LOADED, TO TELL US WHERE HIS GRAFTABL
633; CHARACTER FONT TABLE IS IN RESIDENT RAM, BY SETTING THE
634; DWORD AT "WHERE" TO POINT TO THE OLD GRAFTABL FONT TABLE.
635
636 ;AH STILL SHOULD HAVE "MY_MULTIPLEX_NUMBER"
637 MOV AL,WHERE_R_U ;ASK "WHERE ARE YOU"
638 LEA BX,WHERE ;PASS POINTER TO VECTOR TO RECEIVE ANSWER
639 ;AH=MULTIPLEXOR NUMBER, AL=FUNCTION REQUEST
640 ;DS:BX POINTS TO "WHERE", TO RECEIVE RESPONSE
641 INT VEC_MULTIPLX ;SET VECTOR "WHERE" TO POINT TO HIS TABLE
642
643; COMPARE THE CONTENTS OF VECTOR 1FH WITH THE VECTOR AT "WHERE"
644; WHICH POINTS TO THE CURRENTLY LOADED TABLE OF GRAFTABL.
645; THE USER MAY HAVE ALTERED THE CONTENTS OF VECTOR 1FH AFTER
646; HAVING PREVIOUSLY LOADED A GRAFTABL CHARACTER FONT.
647 XOR AX,AX ;ZERO A REG
648 MOV ES,AX ;LOOK AT THE VECTOR TABLE
649 ;ES IS STILL ASSUMED "NOTHING"
650 MOV AX,ES:[VEC_GRAF_CHAR * DWORD] ;AN000;
651 CMP AX,WHERE.VECOFF
652; $IF E,AND
653 JNE $$IF11
654 MOV AX,ES:[VEC_GRAF_CHAR * 4]+2 ;AN000;
655 CMP AX,WHERE.VECSEG
656; $IF E ;IF THE 1FH VECTOR IS POINTING TO A GRAFTABLE
657 JNE $$IF11
658 ; DEFINED CHARACTER TABLE.
659 ;NOW TO FIND OUT WHICH TABLE HE IS POINT TO.
660 LEA SI,TABLEUS ;GET WHERE NEW TABLE IS IN THIS LOAD MODULE
661 ; DS:SI POINT TO NEW TABLE
662; IN THIS SEARCH, WE ARE GOING TO STEP THRU THE ARRAY OF
663; TABLES WE HAVE DEFINED, COMPARING EACH ONE WITH WHATEVER "WHERE"
664; POINTS TO, TO SEE IF WHAT WAS PREVIOUSLY LOADED IS LIKE ONE
665; OF THE TABLES WE HAVE DEFINED HERE. A MATCH LETS US IDENTIFY
666; THE ONE PREVIOUSLY LOADED; A NON-MATCH MEANS THAT WHATEVER
667; THAT WAS PREVIOUSLY LOADED HAS APPARENTLY BEEN ALTERED,
668; SO WHATEVER IT WAS, WE CANNOT SAY WHICH TABLE IT IS, AND SO WE
669; IDENTIFY IT AS SIMPLY A NON-STANDARD TABLE. THIS SEARCH WILL
670; SELECT WHICH OF TWO MESSAGES TO BE DISPLAYED.
671 MOV SAVESI,SI ;SAVE WHERE TABLE STARTS
672; $SEARCH COMPLEX
673 JMP SHORT $$SS12
674$$DO12:
675 ADD CPIDPOINTER,CPID_L ;BUMP TO NEXT ENTRY IN CPID TABLE. ;AN000;
676 MOV SI,SAVESI ;GO BACK TO START OF TABLE ;AN000;
677 ADD SI,TABSIZE ;BUMP TO NEXT TABLE ;AN000;
678 MOV SAVESI,SI ;SAVE WHERE TABLE STARTS ;AN000;
679; $STRTSRCH
680$$SS12:
681; THIS CHANGES ES TO PREVIOUSLY LOADED TABLE
682
683 LES DI,WHERE ;GET THE CONTENTS OF THE VECTOR
684 ;ES:DI POINTS TO THE OLD TABLE OF CHARACTERS
685 ;ES IS STILL ASSUMED "NOTHING"
686 MOV CX,TABSIZE ;GET SIZE OF TABLE
687 REP CMPSB ;COMPARE ES:[DI] WITH DS:[SI]
688; $EXITIF E ;IF THIS TABLE ALREADY LOADED
689 JNE $$IF12
690 LES DI,WHERE ;RESTORE THE POINTERS TO RESIDENT TABLE
691 MOV AX,ES:[DI].LANID ;PICK UP 2 CHAR ID OF PREVIOUS TABLE
692 MOV IDXXX,AX ;REMEMBER WHAT THAT WAS PREVIOUSLY LOADED
693
694 PUSH DS ;SET UP THE ES REG TO ;AN000;
695 POP ES ; BE THE SAME AS DS, THE COMMON SEGMENT ;AN000;
696 ASSUME ES:CSEG ; ;AN000;
697
698 MOV AX,CPIDPOINTER ;GET OFFSET TO CURRENT CPID ENTRY ;AN000;
699 MOV SLIST_23.SUB_VALUE,AX ;PUT CP NAME IN MSG ;AN000;
700 ;SO MSG IS "PREVIOUS CODE PAGE: XXX"
701 FIXLIST LISTPARM,.XLIST ; ;AN000;
702; LEA DI,LANGUAGE_NAME ;TO THE MESSAGES' VARIABLE NAME OF LANGUAGE FIELD
703; MOV SI,SAVESI ;FROM THE NAME OF THE LANGUAGE
704; ADD SI,OFFSET LANNAME ; IN THE NEW TABLE
705; MOV CX,SIZE LANNAME ;PASS NAME OF LANGUAGE
706; REP MOVSB ; TO THE MESSAGES
707; ; AND THEN TELL THE OPERATOR WHAT WAS FOUND
708; LEA AX,MSG2 ;XXX VER OF GRAPHIC CHAR SET TABLE IS ALREADY LOADED
709 FIXLIST LISTPARM,.LIST ; ;AN000;
710; $ORELSE ;SINCE THIS VERSION IS NOT ALREADY LOADED
711 JMP SHORT $$SR12
712$$IF12:
713 ASSUME ES:NOTHING ;SINCE BASE REG NOT RESET YET,
714 LEA AX,COPYRIGHT ;WHICH IS IMMEDIATELY FOLLOWING THE LAST TABLE
715 CMP AX,SI ;HAVE WE INCREMENTED THE INDEX TO BE BEYOND
716 ; THE LAST TABLE TO BE CHECKED
717; $ENDLOOP BE ;QUIT IF NO NEXT TABLE TO BE LOOKED AT
718 JNBE $$DO12
719 PUSH DS ;SET UP THE ES REG TO ;AN000;
720 POP ES ; BE THE SAME AS DS, THE COMMON SEGMENT ;AN000;
721 ASSUME ES:CSEG ;TELL THE ASSEMBLER WHAT I JUST DID ;AN000;
722
723 FIXLIST LISTPARM,.XLIST ; ;AN000;
724; LEA AX,MSG1 ;NON-STD VER OF GRAPHIC CHAR SET TABLE IS ALREADY LOADED
725 FIXLIST LISTPARM,.LIST ; ;AN000;
726 CALL PREV_NONSTD ;SET MSG TO SAY "NON STANDARD" ;AN000;
727 ; SO MSG IS "PREVIOUS CODE PAGE: NON-STANDARD"
728; $ENDSRCH
729$$SR12:
730; $ELSE ;SINCE THE 1FH VECTOR DOES NOT POINT TO
731 JMP SHORT $$EN11
732$$IF11:
733 ; THE SAME PLACE AS "WHERE"
734 ; THEN THE USER MUST HAVE USED GRAFTABL TO
735 ; LOAD A CHAR FONT, THEN LOADED SOME OTHER
736 ; TABLE AND CHANGED VECTOR 1FH TO POINT TO THE NEW ONE.
737 PUSH DS ;SET UP THE ES REG TO ;AN000;
738 POP ES ; BE THE SAME AS DS, THE COMMON SEGMENT ;AN000;
739 ASSUME ES:CSEG ;TELL THE ASSEMBLER WHAT I JUST DID ;AN000;
740
741 CALL PREV_NONSTD ;SET MSG TO SAY "NON STANDARD" ;AN000;
742
743 FIXLIST LISTPARM,.XLIST ; ;AN000;
744; LEA AX,MSG1 ;NON-STD VER OF GRAPHIC CHAR SET TABLE IS ALREADY LOADED
745 FIXLIST LISTPARM,.LIST ; ;AN000;
746 MOV BAD1F,RESET ;INDICATE THAT THE 1FH VECTOR DOES NOT POINT
747 ; TO THE GRAFTABL FONT
748; $ENDIF ;HAS 1Fh BEEN CHANGED?
749$$EN11:
750; $ELSE ;SINCE GRAFTABLE IS NOT LOADED,
751 JMP SHORT $$EN10
752$$IF10:
753 PUSH DS ;SET UP THE ES REG TO ;AN000;
754 POP ES ; BE THE SAME AS DS, THE COMMON SEGMENT ;AN000;
755 ASSUME ES:CSEG ;TELL THE ASSEMBLER WHAT I JUST DID ;AN000;
756
757 CALL PREV_NONE ;SET MSG TO SAY "NONE" ;AN000;
758
759 FIXLIST LISTPARM,.XLIST ; ;AN000;
760; LEA AX,MSG5 ;NO VER OF CHAR TABLE IS ALREADY LOADED
761 FIXLIST LISTPARM,.LIST ; ;AN000;
762; $ENDIF ;ALREADY INSTALLED?
763$$EN10:
764 RET
765FINDTYPE ENDP
766; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
767 HEADER <PREV_NONSTD - SET UP MESSAGE TO SAY 'NON-STANDARD'> ; ;AN000;
768PREV_NONSTD PROC NEAR ; ;AN000;
769 PUBLIC PREV_NONSTD ; ;AN000;
770;SET UP SUBLIST FOR MSGS 2-3 TO HAVE THE VARIABLE TEXT: "NON-STANDARD".
771 ASSUME ES:CSEG ; ;AN000;
772
773 MOV AX,MSGNUM_NSTD.MSG_NUM ;PASS MESSAGE NUMBER OF "NON-STANDARD" ;AN000;
774 MOV DH,BYTE PTR MSGNUM_NSTD.MSG_CLASS+BYTE ;PASS MSG'S CLASS ;AN000;
775 CALL SYSGETMSG ;FIND WHERE THE TEXT OF "NON-STANDARD" IS ;AN000;
776 ;ES:SI=VECTOR TO MESSAGE TEXT
777 MOV SLIST_23.SUB_VALUE,SI ;PUT OFFSET INTO SUBLIST ;AN000;
778 RET ;RETURN TO CALLER ;AN000;
779PREV_NONSTD ENDP ; ;AN000;
780; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
781 HEADER <PREV_NONE - SET UP MESSAGE TO SAY 'NONE'> ; ;AN000;
782PREV_NONE PROC NEAR ; ;AN000;
783 PUBLIC PREV_NONE ; ;AN000;
784;SET UP SUBLIST FOR MSGS 2-3 TO HAVE THE VARIABLE TEXT: "NONE".
785 ASSUME ES:CSEG ; ;AN000;
786
787 MOV AX,MSGNUM_NONE.MSG_NUM ;PASS MESSAGE NUMBER OF "NONE" ;AN000;
788 MOV DH,BYTE PTR MSGNUM_NONE.MSG_CLASS+BYTE ;PASS MSG'S CLASS ;AN000;
789 CALL SYSGETMSG ;FIND WHERE THE TEXT OF "NONE" IS ;AN000;
790 ;ES:SI=VECTOR TO MESSAGE TEXT
791 MOV SLIST_23.SUB_VALUE,SI ;PUT OFFSET INTO SUBLIST ;AN000;
792 RET ;RETURN TO CALLER ;AN000;
793PREV_NONE ENDP ; ;AN000;
794; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
795 FIXLIST LISTPARM,.XLIST ; ;AN000;
796; HEADER <PARSE THE COMMAND LINE PARMS>
797;PROCESS PROC NEAR ;LOOK AT RESPONSE TO DOS COMMAND LINE PARMS
798; PUBLIC PROCESS
799;INPUT: DS, ES - PSP SEG ID
800;OUTPUT:EXITFL IS SET TO REFLECT EXISTING CONDITIONS
801
802; CALL PARSER ;LOOK AT DOS COMMAND LINE PARMS
803;
804; ;IF A CODEPAGE NUMBER WAS SPECIFIED
805; ; BX = OFFSET TO LANGUAGE TABLE TO BE LOADED
806; ; DX = INTEGER VALUE OF CODEPAGE SPECIFIED
807; ;IF /STATUS WAS SPECIFIED
808; ; BX = 0
809; ;IF QUESTION MARK WAS SPECIFIED
810; ; BX=-1
811;
812; CALL DOFUNCTION ; RESPOND TO PARMS
813; ; SETTING 'EXITFL' TO INDICATE RESULTS
814;
815; ASSUME ES:CSEG
816; PUSH ES ;SAVE BASE REG
817; MOV SI,OFFSET PARMDOS ;GET WHERE DOS PARMS START
818; SUB DI,DI ;INIT INDEX TO ZERO, WHERE TO PUT PARMS IN TOKEN
819; MOV CL,DS:PARMCNT ;GET HOW MANY CHARS ARE IN THE DOS COMMAND LINE
820; XOR CH,CH ;CLEAR COUNTER OF OUTPUT CHARS
821; CALL UPCASE ;CONVERT ANY LOWER CASE CHARS TO UPPERCASE
822;
823; $SEARCH
824; CMP CL,0 ;ANY DOS PARMS?
825; $LEAVE BE ;QUIT IF NOT PARMS
826; MOV DL,BYTE PTR [SI] ;SET DL TO A PARM CHAR FROM PARMDOS IN PSP
827; CMP DL,BLANK ;IGNORE THE SPECIAL CHARS:
828; $IF A ; BLANK AND LOWER NUMBERED CONTROL CHARS
829; CMP DL,"?" ;IS THE SPECIFIED PARAMETER
830; $IF E ; A QUESTION MARK?
831; MOV BYTE PTR TOKEN[DI],DL ;PUT DL CONVERTED TO TOKEN
832; INC DI ;BUMP TO NEXT AVAIL SPOT IN TOKEN
833; ADD CH,3 ;COUNT THIS AS AN OUTPUT CHAR,WITH NO ROOM FOR MORE
834; $ELSE ;SINCE NOT "?"
835; CMP DL,'0' ;IF CHAR IN RANGE OF NUMERICS
836; $IF AE,AND ;UNSIGNED TEST
837; CMP DL,'9'
838; $IF BE
839; PUSH DX
840; MOV AX,ACC
841; IMUL TEN ;CLOBBERS DX
842; POP DX ;FIX IT BACK
843; SUB DL,'0' ;CONVERT FROM NUMERIC CHAR TO BINARY
844; ADD AL,DL ;ADD NEW NUMBER FROM PARM
845; ADC AH,0 ;PROPOGATE CARRY
846; MOV ACC,AX ;SAVE RESULTS SO FAR
847; INC CH ;COUNT THIS AS AN OUTPUT CHAR
848; $ELSE ;SINCE NOT A NUMERIC CHARACTER
849; MOV CH,TOKEN_SIZE ;FORCE PARM ERROR, MAY BE CHANGED TO OK
850; CMP CL,4
851; $IF AE ;IF AT LEAST 4 CHARS ARE PRESENT
852; CMP WORD PTR [SI],"S/" ;FIRST TWO CHARS OF "/STA"
853; $IF E,AND
854; CMP WORD PTR [SI]+WORD,"AT" ;NEXT TWO CHARS OF "/STA"
855; $IF E
856; MOV BYTE PTR TOKEN[DI],'/' ;PUT "/" CONVERTED TO TOKEN
857; INC DI ;BUMP TO NEXT AVAIL SPOT IN TOKEN
858; MOV CH,3 ;COUNT THIS AS AN OUTPUT CHAR,WITH NO ROOM FOR MORE
859; MOV CL,1 ;PRETEND THAT IS ALL OF THE COMMAND LINE THERE IS
860; $ENDIF ;"/STA"?
861; $ENDIF ;LENGTH 4?
862; $ENDIF ;IS CHAR IN NUMERIC RANGE?
863; $ENDIF ;IS PARM A QUESTION MARK?
864; $ENDIF ;BLANK OR LOWER VALUED CONTROL CHARS?
865; CMP CH,TOKEN_SIZE ;IS OUTPUT AREA OVERLY FULL?
866; $EXITIF GE
867; CALL BADPARMS ;FUSS ABOUT INVALID PARMS
868; $ORELSE
869; INC SI ;BUMP INDEX TO NEXT PARM CHAR IN PSP
870; DEC CL ;DEC COUNT OF INPUT CHARS FROM PARMS
871; $ENDLOOP
872; ;SINCE CL COUNT WENT TO ZERO,
873; CMP CH,0 ;ANY DOS PARMS LEFT AFTER CLEANUP?
874; $IF E ;IF NONE,
875; MOV WORD PTR TOKEN,437 ;MAKE IT LOOK LIKE "US" WAS SPECIFIED
876; $ELSE ;SOME PARM WAS SPECIFIED
877; CMP BYTE PTR TOKEN,PARM?
878; $IF NE,AND ;IF NOT A QUESTION MARK, AND
879; CMP BYTE PTR TOKEN,SLASH
880; $IF NE ;IF NOT A SLASH (FOR /STATUS)
881; MOV AX,ACC ;GET ACCUMULATOR
882; MOV WORD PTR TOKEN,AX ; TO TOKEN
883; $ENDIF ;QUESTION MARK?
884; $ENDIF ;ANY DOS PARMS?
885; CALL DOFUNCTION ;RESPOND TO PARAMETER IN "TOKEN"
886;
887; $ENDSRCH ;SCANNING DOS COMMAND LINE FOR PARMS
888;
889; POP ES ;RESTORE BASE REG
890; ASSUME ES:CSEG
891;
892; RET
893;PROCESS ENDP
894; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
895;UPCASE PROC NEAR
896;;CONVERT CHARACTERS IN PARMLIST TO UPPER CASE
897;;INPUT: SI=OFFSET IN DS: TO PARM TEXT
898;; CX=NUMBER OF CHARS OF PARMS
899;
900; OR CX,CX ;IF THERE ARE CHARS IN PARMLIST
901; $IF NZ ; THEN GO LOOK AT EACH CHAR
902; PUSH SI ;SAVE POINTER TO PARMS
903; PUSH CX ;SAVE COUNTER OF PARMS
904; $DO ;STEP THRU ALL CHARS OF PARM LIST, CONVERTING TO UPPER CASE
905; MOV AL,[SI] ;GET CHAR FROM PARMLIST TO AL
906; CMP AL,LOWERA ;COMPARE WITH LOWER CASE "a"
907; $IF AE,AND ;UNSIGNED TEST
908; CMP AL,LOWERZ ;COMPARE WITH LOWER CASE "z"
909; $IF BE ;IF CHAR IS LOWER CASE
910; AND AL,CASEBIT ;CONVERT TO UPPER CASE BY DELETING THE 20H BIT
911; MOV [SI],AL ;RESTORE CHAR TO PARMLIST
912; $ENDIF
913; INC SI ;BUMP INDEX TO LOOK AT NEXT CHAR
914; $ENDDO LOOP
915; POP CX ;RESTORE COUNTER OF PARMS
916; POP SI ;RESTORE POINTER TO PARMS
917; $ENDIF ;ANY CHARS IN PARMLIST?
918;
919; RET
920;UPCASE ENDP
921; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
922 FIXLIST LISTPARM,.LIST ; ;AN000;
923 HEADER <RESPOND TO PARAMETER> ;AC000;
924DOFUNCTION PROC NEAR ;RESPOND TO PARM ;AC000;
925 PUBLIC DOFUNCTION
926;INPUT: IF A CODEPAGE NUMBER WAS SPECIFIED
927; BX = OFFSET TO LANGUAGE TABLE TO BE LOADED
928; DX = INTEGER VALUE OF CODEPAGE SPECIFIED
929; IF /STATUS WAS SPECIFIED
930; BX = 0
931; IF QUESTION MARK WAS SPECIFIED
932; BX=-1
933
934 ASSUME ES:CSEG
935 CMP BX,RETCODE_QUESTION ;IS QUESTION MARK SPECFIED?
936; $IF E
937 JNE $$IF22
938 CALL HELP ;DISPLAY RESULTS OF "?" SPECIFICATION
939
940; $ELSE ;SINCE QUESTION MARK IS NOT PARM SPECIFIED
941 JMP SHORT $$EN22
942$$IF22:
943 CMP BX,ZERO ;IS /STATUS SPECIFIED?
944; $IF NE ;IF NOT STATUS, MUST BE REQUEST TO LOAD A TABLE
945 JE $$IF24
946 LEA DI,MSGNUM_PREVIOUS ;"Previous Code Page: xxx" ;AN001;
947 CALL SENDMSG ;SEND THE MSG TO STDOUT ;AN001;
948
949 MOV DX,[BX].LANID ;FETCH THE TWO CHAR ID FROM TABLE
950 CMP DX,IDXXX ;IS THIS ONE ALREADY LOADED?
951; $IF NE ;IF NOT, LOAD IT
952 JE $$IF25
953
954 FIXLIST LISTPARM,.XLIST ; ;AN000;
955; MOV CX,LENGTH LANNAME ;GET LENGTH OF NAME FIELD
956; LEA SI,[BX].LANNAME ;GET WHERE NAME FIELD IS IN THE NEW TABLE
957; LEA DI,LANGUAGE_NAME ;WHERE WHERE TO PUT NAME IN VARIABLE MESSAGE FIELD
958; REP MOVSB ;MOVE LANGUAGE NAME TO PRINTF VARIABLE FIELD
959 FIXLIST LISTPARM,.LIST ; ;AN000;
960
961 MOV SI,BX ;PASS START OF CHAR TABLE
962 CALL MOVTAB ;PUT THIS TABLE INTO THE USA POSITION
963
964 FIXLIST LISTPARM,.XLIST ; ;AN000;
965; LEA AX,MSG3 ;XXXXX VER OF GRAPHIC CHAR SET HAS JUST BEEN LOADED
966 FIXLIST LISTPARM,.LIST ; ;AN000;
967 LEA DI,MSGNUM_ACTIVE ;"ACTIVE CODE PAGE: XXX" ;AN000;
968 MOV AX,ACTIVECPID ;GET POINTER TO CP JUST ACTIVATED ;AN000;
969 MOV SLIST_23.SUB_VALUE,AX ;INTO SUBLIST ;AN000;
970 CALL SENDMSG ;SHOW "ACTIVE CODE PAGE: XXX" ;AN000;
971
972 CMP BAD1F,RESET ;THIS FLAG SET TO '1' MEANS INT 1FH POINTS TO
973; $IF E ; A TABLE OTHER THAN ONE LOADED BY GRAFTABL
974 JNE $$IF26
975 PUSH DS
976 ASSUME DS:NOTHING
977 LDS DX,WHERE ;SET DS:DX POINT TO PREVIOUSLY LOADED GRAFTABL FONT
978 MOV AH,SET_VECT ;FUNCTION TO MOVE DS:DX INTO VECTOR FOR INT 1FH
979 MOV AL,VEC_GRAF_CHAR ;INTERRUPT NUMBER TO RECEIVE NEW CONTENTS
980 INT VEC_DOS ;CHANGE THE VECTOR
981
982 POP DS
983 ASSUME DS:CSEG
984; $ENDIF ;BAD 1FH?
985$$IF26:
986; $ENDIF ;THIS TABLE ALREADY LOADED?
987$$IF25:
988 FIXLIST LISTPARM,.XLIST ; ;AN000;
989; ADD BX,TYPE LANGUAGE ;STEP BASE TO NEXT TABLE
990; LEA AX,COPYRIGHT ;AT START OF MSGS, BEYOND LAST TABLE
991; CMP BX,AX
992; $ENDLOOP AE ;GO TRY THE NEXT TABLE, IF ANY
993; ;NOT ANY NEXT TABLE
994; CALL BADPARMS ;FUSS ABOUT INVALID PARMS
995;
996; $ENDSRCH ;COMPARING TOKEN WITH ID IN TABLES
997 FIXLIST LISTPARM,.LIST ; ;AN000;
998; $ELSE ;SINCE /STATUS SPECIFIED,
999 JMP SHORT $$EN24
1000$$IF24:
1001 LEA DI,MSGNUM_ACTIVE ;POINT TO "ACTIVE CODE PAGE: XXX" ;AN001;
1002 CALL SENDMSG ; VARIABLE FILLED BY "FINDTYPE" ;AN001;
1003
1004 CMP IDXXX,ZERO ;SEE WHO IS LOADED, IF ANYBODY
1005; $IF E
1006 JNE $$IF30
1007 MOV EXITFL,EXNONE ;SET EXIT CODE TO SAY NO TABLE LOADED AT ALL
1008; $ELSE ;SINCE SOMEONE IS LOADED,
1009 JMP SHORT $$EN30
1010$$IF30:
1011 MOV EXITFL,EXDOS ;SAY A TABLE IS LOADED
1012; $ENDIF ;ANY TABLE PREVIOUSLY LOADED?
1013$$EN30:
1014
1015; $ENDIF ;/STATUS?
1016$$EN24:
1017; $ENDIF ;QUESTION MARK?
1018$$EN22:
1019 RET
1020DOFUNCTION ENDP
1021; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
1022 HEADER <LOCAL SUBROUTINE, INSTALL A PARTICULAR TABLE>
1023MOVTAB PROC NEAR
1024 PUBLIC MOVTAB
1025;INPUT: SI = OFFSET OF SOURCE TABLE
1026; ES = PSP
1027 ASSUME ES:CSEG
1028;OUTPUT: THE SOURCE TABLE WILL BE MOVED TO ONE OF TWO PLACES,
1029; EITHER
1030; (IF THIS IS THE FIRST TIME FOR GRAFTABL)
1031; TO THE "TABLEUS" IN THE PSP (IF USA NOT SPECIFIED),
1032; AND THEN BOTH INT2FH AND TABLEUS MOVED TO MOV_DEST IN THE PSP,
1033; OR
1034; ON TOP OF THE PREVIOUS TABLE LEFT BY A PREVIOUS GRAFTABL CALL,
1035; AS POINTED TO BY THE VECTOR, "WHERE".
1036
1037 PUSH ES ;SAVE THE PSP
1038 CMP INSTALLED,LOADED ;IF A PREVIOUS COPY OF GRAFTABL
1039; $IF E ; HAS ALREADY BEEN LOADED
1040 JNE $$IF35
1041
1042 LES DI,WHERE ;REMEMBER WHERE PREVIOUSLY TABLE WENT
1043 ASSUME ES:NOTHING ;ES IS BASE OF OLD PREVIOUSLY LOADED TABLE
1044 MOV CX,TABSIZE ;THE TABLE,2 CHAR ID,& LANGUAGE NAME ARE TO BE MOVED
1045 REP MOVSB ;MOVE NEW TABLE ON TOP OF OLD TABLE
1046 ;WHEN EXITING, LEAVE NOTHING RESIDENT
1047; $ELSE ;SINCE NO PREVIOUS LOAD OF GRAFTABL EXISTS,
1048 JMP SHORT $$EN35
1049$$IF35:
1050 ASSUME ES:CSEG ;SINCE ES WAS NOT CHANGED,
1051 MOV EXITFL,EXRES ;WHEN EXITING, LEAVE TABLE RESIDENT
1052 ; ALONG WITH THE INT2FH HANDLER
1053
1054 ;SINCE IT IS THE USA TABLE THAT IS
1055 ; PHYSICALLY NEXT TO THE INTERRUPT HANDLER,
1056 ; THAT PAIR OF AREAS IS WHAT WILL STAY
1057 ; RESIDENT. IF THE USA TABLE IS NOT THE
1058 ; DESIRED VERSION, THEN FIRST MOVE THE
1059 ; VERSION DESIRED ON TOP OF THE USA VERSION,
1060 ; THEN MOVE THE PAIR DOWN ON TOP OF THE PSP
1061 ; WHERE THEY WILL STAY RESIDENT.
1062
1063 LEA DI,TABLEUS ;FIND WHERE FIRST TABLE NOW IS
1064 CMP SI,DI
1065; $IF NE ;IF NOT THE USA TABLE,
1066 JE $$IF37
1067 MOV CX,TABSIZE ;SIZE OF THE TABLE
1068 REP MOVSB ;MOVE THE XX TABLE ONTO THE USA TABLE
1069; $ENDIF
1070$$IF37:
1071 MOV DI,OFFSET MOV_DEST ;WHERE TO MOVE EVERYTHING TO
1072 LEA SI,END_PSP ;START WITH THE INT2FH HANDLER, ON THRU THE TABLE
1073 ;ES:DI POINT TO DESTINATION, DS:SI POINT TO SOURCE
1074 MOV CX,RESSIZE_BYTE ;GET SIZE OF TABLE + RESIDENT CODE INT HANDLER
1075 REP MOVSB ;MOVE THE TABLE ONTO THE PSP OF THIS LOAD
1076; $ENDIF
1077$$EN35:
1078 POP ES ;RESTORE THE PSP POINTER TO ES
1079 RET
1080MOVTAB ENDP
1081; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
1082 HEADER <HELP - GENERATE DISPLAY RESPONDING TO STATUS REQUEST>
1083HELP PROC NEAR ;RESPOND TO "?" PARM SPECIFIED
1084 PUBLIC HELP
1085;INPUT: DS, ES = POINTS TO PSP
1086; IDXXX = CP OF WHO IS ALREADY LOADED
1087; EXITFL = ERROR LEVEL RET CODE
1088; NORMAL VALUE SAYS SOME TABLE HAS BEEN LOADED, BUT
1089; INVALID PARMS COULD HAVE ALREADY ALTERED THIS VALUE.
1090;OUTPUT: EXITFL MAY BE CHANGED TO "EXNONE", IF NO TABLE LOADED
1091
1092 ASSUME ES:CSEG
1093 LEA DI,MSGNUM_ACTIVE ;POINT TO "ACTIVE CODE PAGE: XXX" ;AN001;
1094 CALL SENDMSG ; VARIABLE FILLED BY "FINDTYPE" ;AN001;
1095
1096 CMP EXITFL,EXDOS ;IS RET CODE UNTOUCHED SO FAR?
1097; $IF E ;IF SO, REPORT WHO IS LOADED
1098 JNE $$IF40
1099 CMP IDXXX,ZERO ;SEE WHO IS LOADED, IF ANYBODY
1100; $IF E
1101 JNE $$IF41
1102 MOV EXITFL,EXNONE ;SET EXIT CODE TO SAY NO TABLE LOADED AT ALL
1103; $ENDIF ;ANY TABLE PREVIOUSLY LOADED?
1104$$IF41:
1105; $ENDIF ;RET CODE UNTOUCHED?
1106$$IF40:
1107
1108 FIXLIST LISTPARM,.XLIST ; ;AN000;
1109; LEA AX,MSG7 ;"DOS command line parameters supported:"
1110 FIXLIST LISTPARM,.LIST ; ;AN000;
1111 LEA DI,MSGNUM_HELP_TITLE ;"DOS command line parameters supported:" ;AN000;
1112 CALL SENDMSG ;DISPLAY MSG IN STDOUT ;AN000;
1113
1114 LEA DI,MSGNUM_HELP_TITLE7 ;AN007;
1115 CALL SENDMSG ;AN007;DISPLAY MSG IN STDOUT ;AN000;
1116
1117 LEA DI,MSGNUM_HELP_TITLE8 ;AN007;
1118 CALL SENDMSG ;AN007;DISPLAY MSG IN STDOUT ;AN000;
1119
1120 LEA DI,MSGNUM_HELP_TITLE9 ;AN007;
1121 CALL SENDMSG ;AN007;DISPLAY MSG IN STDOUT ;AN000;
1122
1123 LEA DI,MSGNUM_HELP_TITLE10 ;AN007;
1124 CALL SENDMSG ;AN007;DISPLAY MSG IN STDOUT ;AN000;
1125
1126 FIXLIST LISTPARM,.XLIST ; ;AN000;
1127; LEA SI,TABLEUS ;START WITH THE FIRST TABLE
1128; $DO
1129; LEA DI,LANGUAGE_NAME ;FIND WHERE NAME OF LANGUAGE GOES
1130; MOV CX,LENGTH LANNAME ;HOW LONG IS THIS FIELD
1131; SUB BX,BX ;CLEAR INDEX TO NAME FIELD TO ZERO
1132; $DO
1133; MOV AL,[SI][BX].LANNAME ;GET CHAR FROM LANGUAGE NAME IN TABLE
1134; MOV [DI][BX],AL ;MOVE THAT CHAR TO MSG VARIABLE FIELD
1135; INC BX ;POINT TO NEXT POSITION
1136; $ENDDO LOOP
1137; MOV AX,[SI].LANID ;PICK UP THE 2 CHAR ID
1138; MOV IDXXX,AX ;PUT IT WHERE MSG8 IS LOOKING FOR IT
1139; LEA AX,MSG8 ;"%d - %s"
1140; CALL SENDMSG ;DISPLAY "IDXXX" AND "LANGUAGE_NAME"
1141;
1142; ADD SI,TYPE LANGUAGE ;BUMP TO THE NEXT TABLE
1143; LEA AX,COPYRIGHT ;IT IMMEDIATELY FOLLOWS THE LAST TABLE
1144; CMP SI,AX
1145; $ENDDO AE
1146 FIXLIST LISTPARM,.LIST ; ;AN000;
1147 RET
1148HELP ENDP
1149; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
1150 FIXLIST LISTPARM,.XLIST ; ;AN000;
1151;BADPARMS PROC NEAR
1152; LEA AX,MSG4 ;"INCORRECT PARAMETER"
1153; CALL SENDMSG
1154;
1155; CALL HELP ;DISPLAY RESULTS OF "?" SPECIFICATION
1156;
1157; MOV EXITFL,EXPAR ;ERRORLEVEL CODE TO "PARM ERROR"
1158; RET
1159;BADPARMS ENDP
1160; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
1161 FIXLIST LISTPARM,.LIST
1162
1163 HEADER <SENDMSG - PASS IN REGS DATA FROM MSG DESCRIPTOR TO DISP MSG> ;AN000;
1164SENDMSG PROC NEAR ; ;AN000;
1165 PUBLIC SENDMSG ; ;AN000;
1166;INPUT - DI=POINTER TO MSG_DESC STRUC FOR THIS MESSAGE
1167;OUTPUT - IF CARRY SET, EXTENDED ERROR MSG ATTEMPTED DISPLAYED
1168; IF CARRY CLEAR, ALL OK
1169; IN EITHER CASE, DI AND AX ALTERED, OTHERS OK
1170; = = = = = = = = = = = =
1171
1172 PUSH BX ; SAVE CALLER'S REGS ;AN000;
1173 PUSH CX ; ;AN000;
1174 PUSH DX ; ;AN000;
1175 PUSH SI ; ;AN000;
1176
1177; PASS PARMS TO MESSAGE HANDLER IN
1178; THE APPROPRIATE REGISTERS IT NEEDS.
1179 MOV AX,[DI].MSG_NUM ;MESSAGE NUMBER ;AN000;
1180 MOV BX,[DI].MSG_HANDLE ;HANDLE TO DISPLAY TO ;AN000;
1181 MOV SI,[DI].MSG_SUBLIST ;OFFSET IN ES: OF SUBLIST, OR 0 IF NONE ;AN000;
1182 MOV CX,[DI].MSG_COUNT ;NUMBER OF %PARMS, 0 IF NONE ;AN000;
1183 MOV DX,[DI].MSG_CLASS ;CLASS IN HIGH BYTE, INPUT FUNCTION IN LOW ;AN000;
1184 CALL SYSDISPMSG ;DISPLAY THE MESSAGE ;AN000;
1185
1186; $IF C ;IF THERE IS A PROBLEM ;AN000;
1187 JNC $$IF44
1188 ;AX=EXTENDED ERROR NUMBER ;AN000;
1189 LEA DI,MSGNUM_EXTERR ;GET REST OF ERROR DESCRIPTOR ;AN000;
1190 MOV BX,[DI].MSG_HANDLE ;HANDLE TO DISPLAY TO ;AN000;
1191 MOV SI,[DI].MSG_SUBLIST ;OFFSET IN ES: OF SUBLIST, OR 0 IF NONE ;AN000;
1192 MOV CX,[DI].MSG_COUNT ;NUMBER OF %PARMS, 0 IF NONE ;AN000;
1193 MOV DX,[DI].MSG_CLASS ;CLASS IN HIGH BYTE, INPUT FUNCTION IN LOW ;AN000;
1194 CALL SYSDISPMSG ;TRY TO SAY WHAT HAPPENED ;AN000;
1195
1196 STC ;REPORT PROBLEM ;AN000;
1197; $ENDIF ;PROBLEM WITH DISPLAY? ;AN000;
1198$$IF44:
1199
1200 POP SI ;RESTORE CALLER'S REGISTERS ;AN000;
1201 POP DX ; ;AN000;
1202 POP CX ; ;AN000;
1203 POP BX ; ;AN000;
1204 FIXLIST LISTPARM,.XLIST ; ;AN000;
1205;;INPUT: AX = OFFSET OF MSG PARM LIST
1206; PUSH AX
1207; PUSH CS ;MATCH REQUIREMENTS OF PRINTF, WHICH IS "FAR"
1208; CALL PRINTF ;USING MSG PARM LIST, BUILD MSG, DISPLAY MSG
1209; ;PRINTF WILL POP OFF THE PARM, PUSHED FROM AX
1210;
1211 FIXLIST LISTPARM,.LIST ; ;AN000;
1212
1213 RET ; ;AN000;
1214SENDMSG ENDP ; ;AN000;
1215 PATHLABL GRTAB ;AN006;
1216CSEG ENDS
1217 END
1218 \ No newline at end of file
diff --git a/v4.0/src/CMD/GRAFTABL/GRTABCF.ASM b/v4.0/src/CMD/GRAFTABL/GRTABCF.ASM
new file mode 100644
index 0000000..a456896
--- /dev/null
+++ b/v4.0/src/CMD/GRAFTABL/GRTABCF.ASM
@@ -0,0 +1,1196 @@
1 PAGE 90,132 ;A2
2 TITLE GRTABCF - CANADIAN FRENCH CHARACTER SET FOR GRAFTABL COMMAND
3;This module is to be linked with the OBJ of GRTAB.SAL. Refer to the
4;Prolog of that module for more complete description.
5
6;This module contains the binary description of the pixels that are used
7;in graphics mode to define the Canadian French character set when loaded to
8;interrupt 1FH by the GRAFTABL command in DOS 3.3.
9 IF1
10 %OUT GRTABCF.ASM...
11 ELSE
12; $OUT GRTABCF.ASM...
13 ENDIF
14CSEG SEGMENT PARA PUBLIC
15TABLECF EQU THIS BYTE
16 PUBLIC TABLECF
17
18;(note: the display of the character to the right of the decimal number
19;value of this location is not necessarily the graphic that these pixels
20;will produce. The displayed character is from the USA character set, and
21;does not represent the language character set generated by this table.)
22
23;These fonts are as defined in the Canadian French Code Page = 863.
24
25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
26;
27; 8 x 8 Character Set information
28; for the 5153 A/N and low-res APA
29;
30; CODE NAME: CARIBOU (L'ACCENT)
31; CODE PAGE: 863
32; DATE: 12-06-86
33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
34; 128 €
35 DB 01111000B
36 DB 11001100B
37 DB 11000000B
38 DB 11000000B
39 DB 11001100B
40 DB 01111000B
41 DB 00011000B
42 DB 01110000B
43; 129
44 DB 00000000B
45 DB 11001100B
46 DB 00000000B
47 DB 11001100B
48 DB 11001100B
49 DB 11001100B
50 DB 01111110B
51 DB 00000000B
52; 130 ‚
53 DB 00110000B
54 DB 01100000B
55 DB 01111000B
56 DB 11001100B
57 DB 11111100B
58 DB 11000000B
59 DB 01111000B
60 DB 00000000B
61; 131 ƒ
62 DB 01111100B
63 DB 11000110B
64 DB 01111000B
65 DB 00001100B
66 DB 01111100B
67 DB 11001100B
68 DB 01111110B
69 DB 00000000B
70; 132 „
71 DB 01111100B
72 DB 11000110B
73 DB 00111000B
74 DB 01101100B
75 DB 11000110B
76 DB 11111110B
77 DB 11000110B
78 DB 00000000B
79; 133 …
80 DB 00110000B
81 DB 00011000B
82 DB 01111000B
83 DB 00001100B
84 DB 01111100B
85 DB 11001100B
86 DB 01111110B
87 DB 00000000B
88; 134 †
89 DB 01111111B
90 DB 11011011B
91 DB 11011011B
92 DB 01111011B
93 DB 00011011B
94 DB 00011011B
95 DB 00011011B
96 DB 00000000B
97; 135 ‡
98 DB 00000000B
99 DB 00000000B
100 DB 01111100B
101 DB 11000000B
102 DB 11000000B
103 DB 01111100B
104 DB 00011000B
105 DB 01110000B
106; 136 ˆ
107 DB 01111110B
108 DB 11000011B
109 DB 00111100B
110 DB 01100110B
111 DB 01111110B
112 DB 01100000B
113 DB 00111100B
114 DB 00000000B
115; 137 ‰
116 DB 01100110B
117 DB 00000000B
118 DB 00111100B
119 DB 01100110B
120 DB 01111110B
121 DB 01100000B
122 DB 00111100B
123 DB 00000000B
124; 138 Š
125 DB 00011000B
126 DB 00001100B
127 DB 00111100B
128 DB 01100110B
129 DB 01111110B
130 DB 01100000B
131 DB 00111100B
132 DB 00000000B
133; 139 ‹
134 DB 01100110B
135 DB 00000000B
136 DB 00111000B
137 DB 00011000B
138 DB 00011000B
139 DB 00011000B
140 DB 00111100B
141 DB 00000000B
142; 140 Œ
143 DB 01111100B
144 DB 11000110B
145 DB 00111000B
146 DB 00011000B
147 DB 00011000B
148 DB 00011000B
149 DB 00111100B
150 DB 00000000B
151; 141
152 DB 00000000B
153 DB 00000000B
154 DB 00000000B
155 DB 00000000B
156 DB 00000000B
157 DB 11111111B
158 DB 00000000B
159 DB 11111111B
160; 142 Ž
161 DB 00011000B
162 DB 00001100B
163 DB 00111000B
164 DB 01101100B
165 DB 11000110B
166 DB 11111110B
167 DB 11000110B
168 DB 00000000B
169; 143
170 DB 00111110B
171 DB 01100011B
172 DB 00111000B
173 DB 01101100B
174 DB 01101100B
175 DB 00111000B
176 DB 11001100B
177 DB 01111000B
178; 144
179 DB 00011000B
180 DB 00110000B
181 DB 11111100B
182 DB 11000000B
183 DB 11111000B
184 DB 11000000B
185 DB 11111100B
186 DB 00000000B
187; 145 ‘
188 DB 01100000B
189 DB 00110000B
190 DB 11111100B
191 DB 11000000B
192 DB 11111000B
193 DB 11000000B
194 DB 11111100B
195 DB 00000000B
196; 146 ’
197 DB 01111100B
198 DB 11000110B
199 DB 11111100B
200 DB 11000000B
201 DB 11111000B
202 DB 11000000B
203 DB 11111100B
204 DB 00000000B
205; 147 “
206 DB 01111000B
207 DB 11001100B
208 DB 00000000B
209 DB 01111000B
210 DB 11001100B
211 DB 11001100B
212 DB 01111000B
213 DB 00000000B
214; 148 ”
215 DB 11001100B
216 DB 00000000B
217 DB 11111100B
218 DB 11000000B
219 DB 11111000B
220 DB 11000000B
221 DB 11111100B
222 DB 00000000B
223; 149 •
224 DB 11001100B
225 DB 00000000B
226 DB 01111000B
227 DB 00110000B
228 DB 00110000B
229 DB 00110000B
230 DB 01111000B
231 DB 00000000B
232; 150 –
233 DB 01111000B
234 DB 11001100B
235 DB 00000000B
236 DB 11001100B
237 DB 11001100B
238 DB 11001100B
239 DB 01111110B
240 DB 00000000B
241; 151 —
242 DB 01100000B
243 DB 00110000B
244 DB 00000000B
245 DB 11001100B
246 DB 11001100B
247 DB 11001100B
248 DB 01111110B
249 DB 00000000B
250; 152 ˜
251 DB 00000000B
252 DB 11000110B
253 DB 01111100B
254 DB 11000110B
255 DB 11000110B
256 DB 01111100B
257 DB 11000110B
258 DB 00000000B
259; 153 ™
260 DB 01111100B
261 DB 10000010B
262 DB 00111000B
263 DB 01101100B
264 DB 11000110B
265 DB 01101100B
266 DB 00111000B
267 DB 00000000B
268; 154 š
269 DB 11001100B
270 DB 00000000B
271 DB 11001100B
272 DB 11001100B
273 DB 11001100B
274 DB 11001100B
275 DB 01111000B
276 DB 00000000B
277; 155 ›
278 DB 00011000B
279 DB 00011000B
280 DB 01111110B
281 DB 11000000B
282 DB 11000000B
283 DB 01111110B
284 DB 00011000B
285 DB 00011000B
286; 156 œ
287 DB 00111000B
288 DB 01101100B
289 DB 01100100B
290 DB 11110000B
291 DB 01100000B
292 DB 11100110B
293 DB 11111100B
294 DB 00000000B
295; 157
296 DB 01100000B
297 DB 00110000B
298 DB 11001100B
299 DB 11001100B
300 DB 11001100B
301 DB 11001100B
302 DB 01111000B
303 DB 00000000B
304; 158 ž
305 DB 01111000B
306 DB 11001100B
307 DB 00000000B
308 DB 11001100B
309 DB 11001100B
310 DB 11001100B
311 DB 01111000B
312 DB 00000000B
313; 159 Ÿ
314 DB 00001110B
315 DB 00011011B
316 DB 00011000B
317 DB 00111100B
318 DB 00011000B
319 DB 00011000B
320 DB 11011000B
321 DB 01110000B
322; 160  
323 DB 00011000B
324 DB 00011000B
325 DB 00011000B
326 DB 00000000B
327 DB 00000000B
328 DB 00011000B
329 DB 00011000B
330 DB 00011000B
331; 161 ¡
332 DB 00001100B
333 DB 00011000B
334 DB 00110000B
335 DB 00000000B
336 DB 00000000B
337 DB 00000000B
338 DB 00000000B
339 DB 00000000B
340; 162 ¢
341 DB 00011000B
342 DB 00110000B
343 DB 00000000B
344 DB 01111000B
345 DB 11001100B
346 DB 11001100B
347 DB 01111000B
348 DB 00000000B
349; 163 £
350 DB 00011000B
351 DB 00110000B
352 DB 00000000B
353 DB 11001100B
354 DB 11001100B
355 DB 11001100B
356 DB 01111110B
357 DB 00000000B
358; 164 ¤
359 DB 00000000B
360 DB 11000110B
361 DB 00000000B
362 DB 00000000B
363 DB 00000000B
364 DB 00000000B
365 DB 00000000B
366 DB 00000000B
367; 165 ¥
368 DB 00000000B
369 DB 00000000B
370 DB 00000000B
371 DB 00000000B
372 DB 00000000B
373 DB 00011000B
374 DB 00001100B
375 DB 01111000B
376; 166 ¦
377 DB 01110000B
378 DB 00011000B
379 DB 01110000B
380 DB 00011000B
381 DB 01110000B
382 DB 00000000B
383 DB 00000000B
384 DB 00000000B
385; 167 §
386 DB 11111111B
387 DB 00000000B
388 DB 00000000B
389 DB 00000000B
390 DB 00000000B
391 DB 00000000B
392 DB 00000000B
393 DB 00000000B
394; 168 ¨
395 DB 01111110B
396 DB 10000001B
397 DB 00111100B
398 DB 00011000B
399 DB 00011000B
400 DB 00011000B
401 DB 00111100B
402 DB 00000000B
403; 169 ©
404 DB 00000000B
405 DB 00000000B
406 DB 00000000B
407 DB 11111110B
408 DB 11000000B
409 DB 11000000B
410 DB 00000000B
411 DB 00000000B
412; 170 ª
413 DB 00000000B
414 DB 00000000B
415 DB 00000000B
416 DB 11111110B
417 DB 00000110B
418 DB 00000110B
419 DB 00000000B
420 DB 00000000B
421; 171 «
422 DB 11100001B
423 DB 01100010B
424 DB 01100100B
425 DB 01101110B
426 DB 00010011B
427 DB 00100110B
428 DB 01001100B
429 DB 10001111B
430; 172 ¬
431 DB 11100001B
432 DB 01100010B
433 DB 01100100B
434 DB 01101010B
435 DB 00010110B
436 DB 00101010B
437 DB 01011111B
438 DB 10000010B
439; 173 ­
440 DB 11100001B
441 DB 00110010B
442 DB 01100100B
443 DB 00111010B
444 DB 11110110B
445 DB 00101010B
446 DB 01011111B
447 DB 10000010B
448; 174 ®
449 DB 00000000B
450 DB 00110011B
451 DB 01100110B
452 DB 11001100B
453 DB 01100110B
454 DB 00110011B
455 DB 00000000B
456 DB 00000000B
457; 175 ¯
458 DB 00000000B
459 DB 11001100B
460 DB 01100110B
461 DB 00110011B
462 DB 01100110B
463 DB 11001100B
464 DB 00000000B
465 DB 00000000B
466; 176 °
467 DB 00100010B
468 DB 10001000B
469 DB 00100010B
470 DB 10001000B
471 DB 00100010B
472 DB 10001000B
473 DB 00100010B
474 DB 10001000B
475; 177 ±
476 DB 01010101B
477 DB 10101010B
478 DB 01010101B
479 DB 10101010B
480 DB 01010101B
481 DB 10101010B
482 DB 01010101B
483 DB 10101010B
484; 178 ²
485 DB 11011011B
486 DB 01110111B
487 DB 11011011B
488 DB 11101110B
489 DB 11011011B
490 DB 01110111B
491 DB 11011011B
492 DB 11101110B
493; 179 ³
494 DB 00011000B
495 DB 00011000B
496 DB 00011000B
497 DB 00011000B
498 DB 00011000B
499 DB 00011000B
500 DB 00011000B
501 DB 00011000B
502; 180 ´
503 DB 00011000B
504 DB 00011000B
505 DB 00011000B
506 DB 00011000B
507 DB 11111000B
508 DB 00011000B
509 DB 00011000B
510 DB 00011000B
511; 181 µ
512 DB 00011000B
513 DB 00011000B
514 DB 11111000B
515 DB 00011000B
516 DB 11111000B
517 DB 00011000B
518 DB 00011000B
519 DB 00011000B
520; 182 ¶
521 DB 00110110B
522 DB 00110110B
523 DB 00110110B
524 DB 00110110B
525 DB 11110110B
526 DB 00110110B
527 DB 00110110B
528 DB 00110110B
529; 183 ·
530 DB 00000000B
531 DB 00000000B
532 DB 00000000B
533 DB 00000000B
534 DB 11111110B
535 DB 00110110B
536 DB 00110110B
537 DB 00110110B
538; 184 ¸
539 DB 00000000B
540 DB 00000000B
541 DB 11111000B
542 DB 00011000B
543 DB 11111000B
544 DB 00011000B
545 DB 00011000B
546 DB 00011000B
547; 185 ¹
548 DB 00110110B
549 DB 00110110B
550 DB 11110110B
551 DB 00000110B
552 DB 11110110B
553 DB 00110110B
554 DB 00110110B
555 DB 00110110B
556; 186 º
557 DB 00110110B
558 DB 00110110B
559 DB 00110110B
560 DB 00110110B
561 DB 00110110B
562 DB 00110110B
563 DB 00110110B
564 DB 00110110B
565; 187 »
566 DB 00000000B
567 DB 00000000B
568 DB 11111110B
569 DB 00000110B
570 DB 11110110B
571 DB 00110110B
572 DB 00110110B
573 DB 00110110B
574; 188 ¼
575 DB 00110110B
576 DB 00110110B
577 DB 11110110B
578 DB 00000110B
579 DB 11111110B
580 DB 00000000B
581 DB 00000000B
582 DB 00000000B
583; 189 ½
584 DB 00110110B
585 DB 00110110B
586 DB 00110110B
587 DB 00110110B
588 DB 11111110B
589 DB 00000000B
590 DB 00000000B
591 DB 00000000B
592; 190 ¾
593 DB 00011000B
594 DB 00011000B
595 DB 11111000B
596 DB 00011000B
597 DB 11111000B
598 DB 00000000B
599 DB 00000000B
600 DB 00000000B
601; 191 ¿
602 DB 00000000B
603 DB 00000000B
604 DB 00000000B
605 DB 00000000B
606 DB 11111000B
607 DB 00011000B
608 DB 00011000B
609 DB 00011000B
610; 192 À
611 DB 00011000B
612 DB 00011000B
613 DB 00011000B
614 DB 00011000B
615 DB 00011111B
616 DB 00000000B
617 DB 00000000B
618 DB 00000000B
619; 193 Á
620 DB 00011000B
621 DB 00011000B
622 DB 00011000B
623 DB 00011000B
624 DB 11111111B
625 DB 00000000B
626 DB 00000000B
627 DB 00000000B
628; 194 Â
629 DB 00000000B
630 DB 00000000B
631 DB 00000000B
632 DB 00000000B
633 DB 11111111B
634 DB 00011000B
635 DB 00011000B
636 DB 00011000B
637; 195 Ã
638 DB 00011000B
639 DB 00011000B
640 DB 00011000B
641 DB 00011000B
642 DB 00011111B
643 DB 00011000B
644 DB 00011000B
645 DB 00011000B
646; 196 Ä
647 DB 00000000B
648 DB 00000000B
649 DB 00000000B
650 DB 00000000B
651 DB 11111111B
652 DB 00000000B
653 DB 00000000B
654 DB 00000000B
655; 197 Å
656 DB 00011000B
657 DB 00011000B
658 DB 00011000B
659 DB 00011000B
660 DB 11111111B
661 DB 00011000B
662 DB 00011000B
663 DB 00011000B
664; 198 Æ
665 DB 00011000B
666 DB 00011000B
667 DB 00011111B
668 DB 00011000B
669 DB 00011111B
670 DB 00011000B
671 DB 00011000B
672 DB 00011000B
673; 199 Ç
674 DB 00110110B
675 DB 00110110B
676 DB 00110110B
677 DB 00110110B
678 DB 00110111B
679 DB 00110110B
680 DB 00110110B
681 DB 00110110B
682; 200 È
683 DB 00110110B
684 DB 00110110B
685 DB 00110111B
686 DB 00110000B
687 DB 00111111B
688 DB 00000000B
689 DB 00000000B
690 DB 00000000B
691; 201 É
692 DB 00000000B
693 DB 00000000B
694 DB 00111111B
695 DB 00110000B
696 DB 00110111B
697 DB 00110110B
698 DB 00110110B
699 DB 00110110B
700; 202 Ê
701 DB 00110110B
702 DB 00110110B
703 DB 11110111B
704 DB 00000000B
705 DB 11111111B
706 DB 00000000B
707 DB 00000000B
708 DB 00000000B
709; 203 Ë
710 DB 00000000B
711 DB 00000000B
712 DB 11111111B
713 DB 00000000B
714 DB 11110111B
715 DB 00110110B
716 DB 00110110B
717 DB 00110110B
718; 204 Ì
719 DB 00110110B
720 DB 00110110B
721 DB 00110111B
722 DB 00110000B
723 DB 00110111B
724 DB 00110110B
725 DB 00110110B
726 DB 00110110B
727; 205 Í
728 DB 00000000B
729 DB 00000000B
730 DB 11111111B
731 DB 00000000B
732 DB 11111111B
733 DB 00000000B
734 DB 00000000B
735 DB 00000000B
736; 206 Î
737 DB 00110110B
738 DB 00110110B
739 DB 11110111B
740 DB 00000000B
741 DB 11110111B
742 DB 00110110B
743 DB 00110110B
744 DB 00110110B
745; 207 Ï
746 DB 00011000B
747 DB 00011000B
748 DB 11111111B
749 DB 00000000B
750 DB 11111111B
751 DB 00000000B
752 DB 00000000B
753 DB 00000000B
754; 208 Ð
755 DB 00110110B
756 DB 00110110B
757 DB 00110110B
758 DB 00110110B
759 DB 11111111B
760 DB 00000000B
761 DB 00000000B
762 DB 00000000B
763; 209 Ñ
764 DB 00000000B
765 DB 00000000B
766 DB 11111111B
767 DB 00000000B
768 DB 11111111B
769 DB 00011000B
770 DB 00011000B
771 DB 00011000B
772; 210 Ò
773 DB 00000000B
774 DB 00000000B
775 DB 00000000B
776 DB 00000000B
777 DB 11111111B
778 DB 00110110B
779 DB 00110110B
780 DB 00110110B
781; 211 Ó
782 DB 00110110B
783 DB 00110110B
784 DB 00110110B
785 DB 00110110B
786 DB 00111111B
787 DB 00000000B
788 DB 00000000B
789 DB 00000000B
790; 212 Ô
791 DB 00011000B
792 DB 00011000B
793 DB 00011111B
794 DB 00011000B
795 DB 00011111B
796 DB 00000000B
797 DB 00000000B
798 DB 00000000B
799; 213 Õ
800 DB 00000000B
801 DB 00000000B
802 DB 00011111B
803 DB 00011000B
804 DB 00011111B
805 DB 00011000B
806 DB 00011000B
807 DB 00011000B
808; 214 Ö
809 DB 00000000B
810 DB 00000000B
811 DB 00000000B
812 DB 00000000B
813 DB 00111111B
814 DB 00110110B
815 DB 00110110B
816 DB 00110110B
817; 215 ×
818 DB 00110110B
819 DB 00110110B
820 DB 00110110B
821 DB 00110110B
822 DB 11111111B
823 DB 00110110B
824 DB 00110110B
825 DB 00110110B
826; 216 Ø
827 DB 00011000B
828 DB 00011000B
829 DB 11111111B
830 DB 00011000B
831 DB 11111111B
832 DB 00011000B
833 DB 00011000B
834 DB 00011000B
835; 217 Ù
836 DB 00011000B
837 DB 00011000B
838 DB 00011000B
839 DB 00011000B
840 DB 11111000B
841 DB 00000000B
842 DB 00000000B
843 DB 00000000B
844; 218 Ú
845 DB 00000000B
846 DB 00000000B
847 DB 00000000B
848 DB 00000000B
849 DB 00011111B
850 DB 00011000B
851 DB 00011000B
852 DB 00011000B
853; 219 Û
854 DB 11111111B
855 DB 11111111B
856 DB 11111111B
857 DB 11111111B
858 DB 11111111B
859 DB 11111111B
860 DB 11111111B
861 DB 11111111B
862; 220 Ü
863 DB 00000000B
864 DB 00000000B
865 DB 00000000B
866 DB 00000000B
867 DB 11111111B
868 DB 11111111B
869 DB 11111111B
870 DB 11111111B
871; 221 Ý
872 DB 11110000B
873 DB 11110000B
874 DB 11110000B
875 DB 11110000B
876 DB 11110000B
877 DB 11110000B
878 DB 11110000B
879 DB 11110000B
880; 222 Þ
881 DB 00001111B
882 DB 00001111B
883 DB 00001111B
884 DB 00001111B
885 DB 00001111B
886 DB 00001111B
887 DB 00001111B
888 DB 00001111B
889; 223 ß
890 DB 11111111B
891 DB 11111111B
892 DB 11111111B
893 DB 11111111B
894 DB 00000000B
895 DB 00000000B
896 DB 00000000B
897 DB 00000000B
898; 224 à
899 DB 00000000B
900 DB 00000000B
901 DB 01110110B
902 DB 11011100B
903 DB 11001000B
904 DB 11011100B
905 DB 01110110B
906 DB 00000000B
907; 225 á
908 DB 00000000B
909 DB 01111000B
910 DB 11001100B
911 DB 11111000B
912 DB 11001100B
913 DB 11111000B
914 DB 11000000B
915 DB 11000000B
916; 226 â
917 DB 00000000B
918 DB 11111100B
919 DB 11001100B
920 DB 11000000B
921 DB 11000000B
922 DB 11000000B
923 DB 11000000B
924 DB 00000000B
925; 227 ã
926 DB 00000000B
927 DB 11111110B
928 DB 01101100B
929 DB 01101100B
930 DB 01101100B
931 DB 01101100B
932 DB 01101100B
933 DB 00000000B
934; 228 ä
935 DB 11111100B
936 DB 11001100B
937 DB 01100000B
938 DB 00110000B
939 DB 01100000B
940 DB 11001100B
941 DB 11111100B
942 DB 00000000B
943; 229 å
944 DB 00000000B
945 DB 00000000B
946 DB 01111110B
947 DB 11011000B
948 DB 11011000B
949 DB 11011000B
950 DB 01110000B
951 DB 00000000B
952; 230 æ
953 DB 00000000B
954 DB 01100110B
955 DB 01100110B
956 DB 01100110B
957 DB 01100110B
958 DB 01111100B
959 DB 01100000B
960 DB 11000000B
961; 231 ç
962 DB 00000000B
963 DB 01110110B
964 DB 11011100B
965 DB 00011000B
966 DB 00011000B
967 DB 00011000B
968 DB 00011000B
969 DB 00000000B
970; 232 è
971 DB 11111100B
972 DB 00110000B
973 DB 01111000B
974 DB 11001100B
975 DB 11001100B
976 DB 01111000B
977 DB 00110000B
978 DB 11111100B
979; 233 é
980 DB 00111000B
981 DB 01101100B
982 DB 11000110B
983 DB 11111110B
984 DB 11000110B
985 DB 01101100B
986 DB 00111000B
987 DB 00000000B
988; 234 ê
989 DB 00111000B
990 DB 01101100B
991 DB 11000110B
992 DB 11000110B
993 DB 01101100B
994 DB 01101100B
995 DB 11101110B
996 DB 00000000B
997; 235 ë
998 DB 00011100B
999 DB 00110000B
1000 DB 00011000B
1001 DB 01111100B
1002 DB 11001100B
1003 DB 11001100B
1004 DB 01111000B
1005 DB 00000000B
1006; 236 ì
1007 DB 00000000B
1008 DB 00000000B
1009 DB 01111110B
1010 DB 11011011B
1011 DB 11011011B
1012 DB 01111110B
1013 DB 00000000B
1014 DB 00000000B
1015; 237 í
1016 DB 00000110B
1017 DB 00001100B
1018 DB 01111110B
1019 DB 11011011B
1020 DB 11011011B
1021 DB 01111110B
1022 DB 01100000B
1023 DB 11000000B
1024; 238 î
1025 DB 00111000B
1026 DB 01100000B
1027 DB 11000000B
1028 DB 11111000B
1029 DB 11000000B
1030 DB 01100000B
1031 DB 00111000B
1032 DB 00000000B
1033; 239 ï
1034 DB 01111000B
1035 DB 11001100B
1036 DB 11001100B
1037 DB 11001100B
1038 DB 11001100B
1039 DB 11001100B
1040 DB 11001100B
1041 DB 00000000B
1042; 240 ð
1043 DB 00000000B
1044 DB 11111100B
1045 DB 00000000B
1046 DB 11111100B
1047 DB 00000000B
1048 DB 11111100B
1049 DB 00000000B
1050 DB 00000000B
1051; 241 ñ
1052 DB 00110000B
1053 DB 00110000B
1054 DB 11111100B
1055 DB 00110000B
1056 DB 00110000B
1057 DB 00000000B
1058 DB 11111100B
1059 DB 00000000B
1060; 242 ò
1061 DB 01100000B
1062 DB 00110000B
1063 DB 00011000B
1064 DB 00110000B
1065 DB 01100000B
1066 DB 00000000B
1067 DB 11111100B
1068 DB 00000000B
1069; 243 ó
1070 DB 00011000B
1071 DB 00110000B
1072 DB 01100000B
1073 DB 00110000B
1074 DB 00011000B
1075 DB 00000000B
1076 DB 11111100B
1077 DB 00000000B
1078; 244 ô
1079 DB 00001110B
1080 DB 00011011B
1081 DB 00011011B
1082 DB 00011000B
1083 DB 00011000B
1084 DB 00011000B
1085 DB 00011000B
1086 DB 00011000B
1087; 245 õ
1088 DB 00011000B
1089 DB 00011000B
1090 DB 00011000B
1091 DB 00011000B
1092 DB 00011000B
1093 DB 11011000B
1094 DB 11011000B
1095 DB 01110000B
1096; 246 ö
1097 DB 00110000B
1098 DB 00110000B
1099 DB 00000000B
1100 DB 11111100B
1101 DB 00000000B
1102 DB 00110000B
1103 DB 00110000B
1104 DB 00000000B
1105; 247 ÷
1106 DB 00000000B
1107 DB 01110110B
1108 DB 11011100B
1109 DB 00000000B
1110 DB 01110110B
1111 DB 11011100B
1112 DB 00000000B
1113 DB 00000000B
1114; 248 ø
1115 DB 00111000B
1116 DB 01101100B
1117 DB 01101100B
1118 DB 00111000B
1119 DB 00000000B
1120 DB 00000000B
1121 DB 00000000B
1122 DB 00000000B
1123; 249 ù
1124 DB 00000000B
1125 DB 00000000B
1126 DB 00000000B
1127 DB 00011000B
1128 DB 00011000B
1129 DB 00000000B
1130 DB 00000000B
1131 DB 00000000B
1132; 250 ú
1133 DB 00000000B
1134 DB 00000000B
1135 DB 00000000B
1136 DB 00011000B
1137 DB 00000000B
1138 DB 00000000B
1139 DB 00000000B
1140 DB 00000000B
1141; 251 û
1142 DB 00001111B
1143 DB 00001100B
1144 DB 00001100B
1145 DB 00001100B
1146 DB 11101100B
1147 DB 01101100B
1148 DB 00111100B
1149 DB 00011100B
1150; 252 ü
1151 DB 01111000B
1152 DB 01101100B
1153 DB 01101100B
1154 DB 01101100B
1155 DB 01101100B
1156 DB 00000000B
1157 DB 00000000B
1158 DB 00000000B
1159; 253 ý
1160 DB 01110000B
1161 DB 00011000B
1162 DB 00110000B
1163 DB 01100000B
1164 DB 01111000B
1165 DB 00000000B
1166 DB 00000000B
1167 DB 00000000B
1168; 254 þ
1169 DB 00000000B
1170 DB 00000000B
1171 DB 00111100B
1172 DB 00111100B
1173 DB 00111100B
1174 DB 00111100B
1175 DB 00000000B
1176 DB 00000000B
1177; 255 ÿ
1178 DB 00000000B
1179 DB 00000000B
1180 DB 00000000B
1181 DB 00000000B
1182 DB 00000000B
1183 DB 00000000B
1184 DB 00000000B
1185 DB 00000000B
1186;
1187 DW 863 ;TABLE ID
1188; include graftcfm.inc
1189 DB "Can. French",0 ;LANGUAGE NAME, IN ASCIIZ FORMAT
1190;(the above "DB" is an example of the ENGLISH version of the above include file)
1191 IF ($-CSEG) MOD 16 ;IF NOT ALREADY ON 16 BYTE BOUNDARY
1192 DB (16-(($-CSEG) MOD 16)) DUP(0) ;ADD PADDING TO GET TO 16 BYTE BOUNDARY
1193 ENDIF
1194CSEG ENDS
1195 END
1196 \ No newline at end of file
diff --git a/v4.0/src/CMD/GRAFTABL/GRTABHAN.ASM b/v4.0/src/CMD/GRAFTABL/GRTABHAN.ASM
new file mode 100644
index 0000000..d94ede4
--- /dev/null
+++ b/v4.0/src/CMD/GRAFTABL/GRTABHAN.ASM
@@ -0,0 +1,223 @@
1 PAGE 90,132 ;A2
2 TITLE GRTABHAN - INTERRUPT HANDLER FOR INT 2FH, GRAFTABL LOADED
3;****************** START OF SPECIFICATIONS *****************************
4; MODULE NAME: GRTABHAN.SAL
5
6; DESCRIPTIVE NAME: For GRAFTABL, this is the Multiplexor Interrupt Handler
7
8;FUNCTION: This module contains the Interrupt Handler that will be hooked
9; into the INT 2FH vector. When invoked with AL=0, it responds
10; that GRAFTABL is loaded by changing AL to contain hex FF. If
11; option AL=1 specified, it puts into the vector at DS:[BX] the
12; pointer to the previously loaded table.
13
14; NOTES:
15; This module should be processed with the SALUT preprocessor:
16
17; SALUT GRTABHAN
18
19; To assemble these modules, the alphabetical or sequential
20; ordering of segments may be used.
21
22; For LINK instructions, refer to the PROLOG of the main module,
23; GRTAB.SAL. This module, containing a resident interrupt handler,
24; should be first in the list of .OBJ to be linked.
25
26; At the time this handler code is made resident, the loader, GRTAB,
27; made certain instruction modifications. PATCH_OFF and PATCH_SEG
28; are the immediate word fields of two move word immediate to
29; storage type of instructions. The loaded Revised these to
30; contain the offset and the segid respectively of where the
31; resident font table would be that is to stay resident.
32
33; Also at load time, GRTAB made another instruction modification by
34; changing the JUMP DUMMY instruction's DWORD immediate field to
35; contain the vector pointing to the previous owner of the
36; Multiplexor Interrupt Vector.
37
38; ENTRY POINT: There are two entry points: one, from DOS at 100H, is
39; END_PSP. The jump instruction there has nothing to do with
40; the interrupt handler, but merely jumps to the GRTAB module to
41; what is effectively the real DOS entry point, ENTRY_POINT.
42
43; The other is where the interrupt vector will be set to point,
44; the entry point to the interrupt handler code: HANDLER.
45
46; For the rest of this module description, the HANDLER entry
47; point conditions are being described.
48
49; INPUT: AH = Multiplexor Number. I do nothing if this is not my own.
50; The value of the Multiplexor Number is defined in the EQU:
51; MY_MULTIPLEXOR_NUMBER as being the value, B0H.
52; AL = Function Request. There are two functions recognized:
53; 0 = "GET INSTALLED STATE"
54; 1 = "WHERE ARE YOU?"
55; and DS:BX points to vector to receive pointer
56; to the previously installed GRAFTABL table.
57; If Function request is not '1', it is assumed to be '0'.
58
59; EXIT-NORMAL: If the proper multiplexor number is presented, respond with
60; AH = 0FFH, otherwise, pass control to previous owner
61; of this interrupt.
62
63; EXIT-ERROR: None
64
65; INTERNAL REFERENCES:
66; ROUTINES: none
67
68; DATA AREAS:
69; PUBLIC symbols:
70; PREV_OWN Far jump direct to previous owner of interrupt 2FH.
71; PATCH_OFF Offset portion of vector pointing to loaded char cable.
72; PATCH_SEG Segment portion of vector pointing to loaded char table.
73; HANDLER Entry point pointed to by the vector at interrupt 2FH.
74; HANDLER_SIZE Location of the end of the resident code portion of the
75; interrupt 2FH handler, including the 60H bytes left of
76; the PSP, so this offset is relative to the start of the PSP
77; after the code has been relocated downward into the PSP.
78; MPEXNUM The byte containing the value defined
79; as being the id checked for when INT 2FH is called used
80; to identify this GRAFTABL member of the multiplexor chain.
81;
82
83; EXTERNAL REFERENCES:
84; ROUTINES: none
85
86; DATA AREAS: none
87
88;****************** END OF SPECIFICATIONS *****************************
89 IF1
90 %OUT COMPONENT=GRAFTABL, MODULE=GRTABHAN.SAL...
91 ENDIF
92; $SALUT (4,21,25,41)
93 HEADER <MACRO DEFINITIONS, STRUC DEFINITIONS, EQUATES>
94 INCLUDE PATHMAC.INC ;AN006;
95HEADER MACRO TEXT
96.XLIST
97 SUBTTL TEXT
98.LIST
99 PAGE
100 ENDM
101; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
102VECTOR STRUC
103VECOFF DW ? ;OFFSET PORTION OF VECTOR POINTER
104VECSEG DW ? ;SEGMENT PORTION OF VECTOR POINTER
105VECTOR ENDS
106; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
107; DEFINITION OF FUNCTIONS TO BE REQUESTED OF INT 2FH
108GET_INST_STATE EQU 0 ;FUNCTION = "GET INSTALLED STATE"
109WHERE_R_U EQU 1 ;FUNCTION = "WHERE ARE YOU?"
110 ; REQUESTS VECTOR OF LOADED TABLE BE
111 ; PUT IN VECTOR POINTED TO BY DS:[BX]
112RES_FUNC EQU 0F8H ;RESERVED FUNCTIONS IN RANGE OF F8 TO FF, IGNORE
113
114; OTHER EQUATES
115PATCHED EQU 0 ;DUMMY VALUE, TO BE REPLACED AT EXECUTION TIME
116INSTALLED EQU 0FFH ;RESPONSE, INDICATES THIS HANDLER IS INSTALLED
117MY_MULTIPLEX_NUMBER EQU 0B0H ;THE UNIQUE IDENTIFICATION NUMBER ASSIGNED
118 ; TO "GRAFTABL" FOR INT 2FH
119; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
120DUMMY_SEG SEGMENT AT 0
121DUMMY LABEL FAR ;NOTHING HERE REALLY, ONLY
122 ; USED TO MAKE MASM GENERATE A FAR CALL DIRECT
123 ; THE ABSOLUTE VECTOR IN THAT INS WILL BE PATCHED
124
125DUMMY_SEG ENDS
126; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
127 HEADER <DOS ENTRY POINT>
128CSEG SEGMENT PARA PUBLIC
129;THIS SEGMENT IS ALIGNED ON PARA SINCE IT IS THE START OF THE LOAD MODULE,
130; WHICH IS ON A PARA BOUNDARY ANYWAY. THIS MODULE IS PADDED AT THE END
131; TO A MULTIPLE OF 16 BYTES, SO THE NEXT SEGMENT WILL ALSO START
132; ON A PARA BOUNDARY, WHICH WILL BE THE US CHARACTER SET TABLE.
133
134 ASSUME CS:CSEG
135
136 EXTRN ENTRY_POINT:NEAR
137
138 ORG 60H
139 PUBLIC MOV_DEST
140MOV_DEST LABEL BYTE ;WHERE THIS INTERRUPT HANDLER
141 ; WILL BE MOVED TO, FOLLOWED BY THE 1K TABLE.
142 ORG 100H
143 PUBLIC END_PSP ;BEGINNING HERE, THIS WILL BE MOVED TO "MOV_DEST"
144END_PSP EQU $ ;ENTRY POINT FROM DOS
145 JMP ENTRY_POINT ;INIT THE INT HANDLER, SET UP CHAR TABLES
146 ; THIS JUMP TARGET IS DEFINED
147 ; IN THE GRTAB.SAL MODULE
148; AREAS TO BE PATCHED WITHIN THIS MODULE
149
150 PUBLIC PREV_OWN ;PATCH IS IN JMP INSTR TO PREVIOUS OWNER
151;THE ABOVE PATCH IS FIXED BY THE GRTAB.SAL MODULE, JUST BEFORE ALTERING THE 2FH VECTOR
152
153 PUBLIC PATCH_OFF ;OFFSET PORTION OF VECTOR POINTING TO LOADED CHAR TABLE
154 PUBLIC PATCH_SEG ;SEGMENT PORTION OF VECTOR POINTING TO LOADED CHAR TABLE
155;THE ABOVE TWO PATCHES ARE FIXED BY THE GRTAB.SAL MODULE, AT THE VERY BEGINNING.
156
157;THIS NEXT ONE BYTE FIELD SHOULD BE KEPT AS THE BYTE JUST PREVIOUS TO THE
158;INTERRUPT HANDLER ENTRY POINT AT "HANDLER".
159 PUBLIC MPEXNUM
160MPEXNUM DB MY_MULTIPLEX_NUMBER ;PATCHING THIS ONE BYTE WILL CHANGE FOR ALL THE VALUE
161 HEADER <MULTIPLEXOR INTERRUPT HANDLER>
162;CONDITIONS OF REGS AT ENTRY TO HANDLER:
163;INPUT: AH = MULTIPLEXOR NUMBER. I DO NOTHING IF THIS IS NOT MY OWN.
164; AL = FUNCTION REQUEST. THERE ARE TWO FUNCTIONS RECOGNIZED:
165; 0 = "GET INSTALLED STATE"
166; 1 = "WHERE ARE YOU?"
167; AND DS:BX POINTS TO VECTOR TO RECEIVE POINTER
168; TO THE PREVIOUSLY INSTALLED GRAFTABL TABLE.
169; IF FUNCTION REQUEST IS NOT '1', IT IS ASSUMED TO BE '0'.
170
171 PUBLIC HANDLER
172HANDLER PROC FAR ;INTERRUPT HANDLER ENTRY POINT
173; $SALUT (4,3,9,41)
174 PATHLABL GRTABHAN ;AN006;
175 CMP AH,MPEXNUM ;IS THIS MULTIPLEXOR REQUEST IS FOR ME?
176; $IF E ;IF MY MULTIPLEX NUMBER IS CALLED
177 JNE $$IF1
178 CMP AL,RES_FUNC ;IF IN RANGE F8-FF, DO NOTHING, JUST RETURN
179; $IF B
180 JNB $$IF2
181 CMP AL,WHERE_R_U ;IF REQUEST FOR "WHERE ARE YOU?"
182; $IF E
183 JNE $$IF3
184 ;FOR THIS REQUEST, DS:BX POINTS TO A VECTOR
185 ; WHICH IS TO RECEIVE THE POINTER TO
186 ; WHERE THE ORIGINAL TABLE WAS LOADED
187
188 ;PASS OFFSET OF WHERE TABLE IS
189 MOV [BX].VECOFF,PATCHED ; TO FIRST WORD OF RESPONSE AREA
190PATCH_OFF EQU WORD PTR $-2 ;THE ACTUAL VALUE OF THE IMMEDIATE IS PATCHED IN
191
192 ;PASS SEGID OF WHERE TABLE IS
193 MOV [BX].VECSEG,PATCHED ; TO SECOND WORD OF RESPONSE AREA
194PATCH_SEG EQU WORD PTR $-2 ;THE ACTUAL VALUE OF THE IMMEDIATE IS PATCHED IN
195; $ENDIF
196$$IF3:
197 MOV AL,INSTALLED ;SAY "INSTALLED"
198; $ENDIF
199$$IF2:
200 IRET ;RETURN TO INTERRUPT INVOKER
201; $ENDIF
202$$IF1:
203;SINCE THE MULTIPLEX NUMBER IS FOR SOMEBODY ELSE, PASS THE CALL ON TO PREVIOUS OWNER
204JMPREV: ;REFERENCED WHEN PATCHING OUT "DUMMY"
205 JMP DUMMY ;CHAIN ON TO THE PREVIOUS OWNER
206 ; OF THE VECTOR AT 1FH*4.
207 ; USAGE OF "DUMMY" HERE IS JUST A PLACE-HLDER
208 ; WHICH WILL BE REPLACED DURING EXECUTION OF LOADER
209 PATHLABL GRTABHAN ;AN006;
210;=================================================================
211 HEADER <POINTERS TO PREVIOUS OWNER, INSTRUCTION MODIFICATION>
212; $SALUT (4,14,20,41)
213PREV_OWN EQU DWORD PTR JMPREV+1 ;REFERENCED DURING REPLACEMENT OF "HANDLER"
214 ; IN THE ABOVE JMP INSTRUCTION
215HANDLER ENDP
216 IF ($-CSEG) MOD 16 ;IF NOT ALREADY ON 16 BYTE BOUNDARY
217 ORG ($-CSEG)+16-(($-CSEG) MOD 16) ;ADD PADDING TO GET TO 16 BYTE BOUNDARY
218 ENDIF
219HANDLER_SIZE EQU ($-CSEG)-(END_PSP-CSEG) ;MARK THE END OF RESIDENT EXECUTABLE ;AN000;
220 PUBLIC HANDLER_SIZE ; PORTION, NOT INCLUDING THE PSP ;AN000;
221CSEG ENDS
222 END END_PSP
223 \ No newline at end of file
diff --git a/v4.0/src/CMD/GRAFTABL/GRTABML.ASM b/v4.0/src/CMD/GRAFTABL/GRTABML.ASM
new file mode 100644
index 0000000..123e9c3
--- /dev/null
+++ b/v4.0/src/CMD/GRAFTABL/GRTABML.ASM
@@ -0,0 +1,1187 @@
1 PAGE 90,132 ;AN000;A2
2 TITLE GRTABML - MULTI-LINGUAL EUROPEAN STANDARD ;AN000;
3;This module is to be linked with the OBJ of GRTAB.SAL. Refer to the
4;Prolog of that module for more complete description.
5
6;This module contains the binary description of the pixels that are used
7;in graphics mode to define the multi-lingual character set when loaded to
8;interrupt 1FH by the GRAFTABL command in DOS 3.3.
9 IF1 ;AN000;
10 %OUT GRTABML.ASM... ;AN000;
11 ELSE ;AN000;
12; %OUT GRTABML.ASM...
13 ENDIF ;AN000;
14CSEG SEGMENT PARA PUBLIC ;AN000;
15TABLEML EQU THIS BYTE ;AN000;
16 PUBLIC TABLEML ;AN000;
17
18;(note: the display of the character to the right of the decimal number
19;value of this location is not necessarily the graphic that these pixels
20;will produce. The displayed character is from the USA character set, and
21;does not represent the language character set generated by this table.)
22
23;These fonts are as defined in the Multi-lingual Code Page = 850.
24
25; 128 €
26 DB 00000000B ;AN000;
27 DB 00111110B ;AN000;
28 DB 01100000B ;AN000;
29 DB 01100000B ;AN000;
30 DB 01100000B ;AN000;
31 DB 00111110B ;AN000;
32 DB 00001100B ;AN000;
33 DB 00111110B ;AN000;
34; 129
35 DB 00000000B ;AN000;
36 DB 11001100B ;AN000;
37 DB 00000000B ;AN000;
38 DB 11001100B ;AN000;
39 DB 11001100B ;AN000;
40 DB 11001100B ;AN000;
41 DB 01110110B ;AN000;
42 DB 00000000B ;AN000;
43.XLIST ;AN000;
44; 130 ‚
45 DB 00000000B ;AN000;
46 DB 00011110B ;AN000;
47 DB 00000000B ;AN000;
48 DB 01111100B ;AN000;
49 DB 11000110B ;AN000;
50 DB 11111100B ;AN000;
51 DB 01111110B ;AN000;
52 DB 00000000B ;AN000;
53; 131 ƒ
54 DB 00000000B ;AN000;
55 DB 01111100B ;AN000;
56 DB 11000110B ;AN000;
57 DB 01111100B ;AN000;
58 DB 00011110B ;AN000;
59 DB 01100110B ;AN000;
60 DB 00111011B ;AN000;
61 DB 00000000B ;AN000;
62; 132 „
63 DB 00000000B ;AN000;
64 DB 01100110B ;AN000;
65 DB 00000000B ;AN000;
66 DB 01111100B ;AN000;
67 DB 00011110B ;AN000;
68 DB 01100110B ;AN000;
69 DB 00111011B ;AN000;
70 DB 00000000B ;AN000;
71; 133 …
72 DB 00000000B ;AN000;
73 DB 11110000B ;AN000;
74 DB 00000000B ;AN000;
75 DB 01111100B ;AN000;
76 DB 00011110B ;AN000;
77 DB 01100110B ;AN000;
78 DB 00111011B ;AN000;
79 DB 00000000B ;AN000;
80; 134 †
81 DB 00111000B ;AN000;
82 DB 01101100B ;AN000;
83 DB 00111000B ;AN000;
84 DB 01111100B ;AN000;
85 DB 00011110B ;AN000;
86 DB 01100110B ;AN000;
87 DB 00111011B ;AN000;
88 DB 00000000B ;AN000;
89; 135 ‡
90 DB 00000000B ;AN000;
91 DB 00000000B ;AN000;
92 DB 00111110B ;AN000;
93 DB 01100000B ;AN000;
94 DB 01100000B ;AN000;
95 DB 00111110B ;AN000;
96 DB 00001100B ;AN000;
97 DB 00111110B ;AN000;
98; 136 ˆ
99 DB 00000000B ;AN000;
100 DB 01111100B ;AN000;
101 DB 11000110B ;AN000;
102 DB 01111100B ;AN000;
103 DB 11000110B ;AN000;
104 DB 11111100B ;AN000;
105 DB 01111110B ;AN000;
106 DB 00000000B ;AN000;
107; 137 ‰
108 DB 00000000B ;AN000;
109 DB 11001100B ;AN000;
110 DB 00000000B ;AN000;
111 DB 01111100B ;AN000;
112 DB 11000110B ;AN000;
113 DB 11111100B ;AN000;
114 DB 01111110B ;AN000;
115 DB 00000000B ;AN000;
116; 138 Š
117 DB 00000000B ;AN000;
118 DB 11110000B ;AN000;
119 DB 00000000B ;AN000;
120 DB 01111100B ;AN000;
121 DB 11000110B ;AN000;
122 DB 11111100B ;AN000;
123 DB 01111110B ;AN000;
124 DB 00000000B ;AN000;
125; 139 ‹
126 DB 00000000B ;AN000;
127 DB 01100110B ;AN000;
128 DB 00000000B ;AN000;
129 DB 00111000B ;AN000;
130 DB 00011000B ;AN000;
131 DB 00011000B ;AN000;
132 DB 00111100B ;AN000;
133 DB 00000000B ;AN000;
134; 140 Œ
135 DB 00000000B ;AN000;
136 DB 00111100B ;AN000;
137 DB 01100110B ;AN000;
138 DB 00011000B ;AN000;
139 DB 00011000B ;AN000;
140 DB 00011000B ;AN000;
141 DB 00111100B ;AN000;
142 DB 00000000B ;AN000;
143; 141
144 DB 00000000B ;AN000;
145 DB 11110000B ;AN000;
146 DB 00000000B ;AN000;
147 DB 00111000B ;AN000;
148 DB 00011000B ;AN000;
149 DB 00011000B ;AN000;
150 DB 00111100B ;AN000;
151 DB 00000000B ;AN000;
152; 142 Ž
153 DB 01100110B ;AN000;
154 DB 00000000B ;AN000;
155 DB 00111100B ;AN000;
156 DB 01100110B ;AN000;
157 DB 01111110B ;AN000;
158 DB 01100110B ;AN000;
159 DB 01100110B ;AN000;
160 DB 00000000B ;AN000;
161; 143
162 DB 00011000B ;AN000;
163 DB 00000000B ;AN000;
164 DB 00111100B ;AN000;
165 DB 01100110B ;AN000;
166 DB 01111110B ;AN000;
167 DB 01100110B ;AN000;
168 DB 01100110B ;AN000;
169 DB 00000000B ;AN000;
170; 144
171 DB 00001111B ;AN000;
172 DB 00000000B ;AN000;
173 DB 11111110B ;AN000;
174 DB 01100000B ;AN000;
175 DB 01111100B ;AN000;
176 DB 01100000B ;AN000;
177 DB 11111110B ;AN000;
178 DB 00000000B ;AN000;
179; 145 ‘
180 DB 00000000B ;AN000;
181 DB 00000000B ;AN000;
182 DB 00000000B ;AN000;
183 DB 11101110B ;AN000;
184 DB 00110011B ;AN000;
185 DB 11011110B ;AN000;
186 DB 01111111B ;AN000;
187 DB 00000000B ;AN000;
188; 146 ’
189 DB 00000000B ;AN000;
190 DB 00000000B ;AN000;
191 DB 01111111B ;AN000;
192 DB 11001100B ;AN000;
193 DB 11111111B ;AN000;
194 DB 11001100B ;AN000;
195 DB 11001111B ;AN000;
196 DB 00000000B ;AN000;
197; 147 “
198 DB 00000000B ;AN000;
199 DB 00111100B ;AN000;
200 DB 01100110B ;AN000;
201 DB 00111100B ;AN000;
202 DB 01100110B ;AN000;
203 DB 01100110B ;AN000;
204 DB 00111100B ;AN000;
205 DB 00000000B ;AN000;
206; 148 ”
207 DB 00000000B ;AN000;
208 DB 01100110B ;AN000;
209 DB 00000000B ;AN000;
210 DB 00111100B ;AN000;
211 DB 01100110B ;AN000;
212 DB 01100110B ;AN000;
213 DB 00111100B ;AN000;
214 DB 00000000B ;AN000;
215; 149 •
216 DB 00000000B ;AN000;
217 DB 11110000B ;AN000;
218 DB 00000000B ;AN000;
219 DB 00111100B ;AN000;
220 DB 01100110B ;AN000;
221 DB 01100110B ;AN000;
222 DB 00111100B ;AN000;
223 DB 00000000B ;AN000;
224; 150 –
225 DB 00000000B ;AN000;
226 DB 01111110B ;AN000;
227 DB 11000011B ;AN000;
228 DB 01100110B ;AN000;
229 DB 01100110B ;AN000;
230 DB 01100110B ;AN000;
231 DB 00111011B ;AN000;
232 DB 00000000B ;AN000;
233; 151 —
234 DB 00000000B ;AN000;
235 DB 11110000B ;AN000;
236 DB 00000000B ;AN000;
237 DB 01100110B ;AN000;
238 DB 01100110B ;AN000;
239 DB 01100110B ;AN000;
240 DB 00111011B ;AN000;
241 DB 00000000B ;AN000;
242; 152 ˜
243 DB 00000000B ;AN000;
244 DB 01100110B ;AN000;
245 DB 00000000B ;AN000;
246 DB 01100110B ;AN000;
247 DB 01100110B ;AN000;
248 DB 00111110B ;AN000;
249 DB 00000110B ;AN000;
250 DB 01111100B ;AN000;
251; 153 ™
252 DB 11000110B ;AN000;
253 DB 00000000B ;AN000;
254 DB 01111100B ;AN000;
255 DB 11000110B ;AN000;
256 DB 11000110B ;AN000;
257 DB 11000110B ;AN000;
258 DB 01111100B ;AN000;
259 DB 00000000B ;AN000;
260; 154 š
261 DB 01100110B ;AN000;
262 DB 00000000B ;AN000;
263 DB 01100110B ;AN000;
264 DB 01100110B ;AN000;
265 DB 01100110B ;AN000;
266 DB 01100110B ;AN000;
267 DB 00111100B ;AN000;
268 DB 00000000B ;AN000;
269; 155 ›
270 DB 00000000B ;AN000;
271 DB 00000000B ;AN000;
272 DB 00000010B ;AN000;
273 DB 01111100B ;AN000;
274 DB 11011110B ;AN000;
275 DB 11110110B ;AN000;
276 DB 01111100B ;AN000;
277 DB 10000000B ;AN000;
278; 156 œ
279 DB 00111000B ;AN000;
280 DB 01101100B ;AN000;
281 DB 01100100B ;AN000;
282 DB 11110000B ;AN000;
283 DB 01100000B ;AN000;
284 DB 11100110B ;AN000;
285 DB 11111100B ;AN000;
286 DB 00000000B ;AN000;
287; 157
288 DB 00000000B ;AN000;
289 DB 00000010B ;AN000;
290 DB 01110100B ;AN000;
291 DB 11001110B ;AN000;
292 DB 11010110B ;AN000;
293 DB 11100110B ;AN000;
294 DB 01011100B ;AN000;
295 DB 10000000B ;AN000;
296; 158 ž
297 DB 00000000B ;AN000;
298 DB 00000000B ;AN000;
299 DB 01100110B ;AN000;
300 DB 00111100B ;AN000;
301 DB 00111100B ;AN000;
302 DB 01100110B ;AN000;
303 DB 00000000B ;AN000;
304 DB 00000000B ;AN000;
305; 159 Ÿ
306 DB 00001110B ;AN000;
307 DB 00011011B ;AN000;
308 DB 00011000B ;AN000;
309 DB 00111100B ;AN000;
310 DB 00011000B ;AN000;
311 DB 00011000B ;AN000;
312 DB 11011000B ;AN000;
313 DB 01110000B ;AN000;
314; 160  
315 DB 00000000B ;AN000;
316 DB 00001111B ;AN000;
317 DB 00000000B ;AN000;
318 DB 01111100B ;AN000;
319 DB 00011110B ;AN000;
320 DB 01100110B ;AN000;
321 DB 00111011B ;AN000;
322 DB 00000000B ;AN000;
323; 161 ¡
324 DB 00000000B ;AN000;
325 DB 00011110B ;AN000;
326 DB 00000000B ;AN000;
327 DB 00111000B ;AN000;
328 DB 00011000B ;AN000;
329 DB 00011000B ;AN000;
330 DB 00111100B ;AN000;
331 DB 00000000B ;AN000;
332; 162 ¢
333 DB 00000000B ;AN000;
334 DB 00001111B ;AN000;
335 DB 00000000B ;AN000;
336 DB 00111100B ;AN000;
337 DB 01100110B ;AN000;
338 DB 01100110B ;AN000;
339 DB 00111100B ;AN000;
340 DB 00000000B ;AN000;
341; 163 £
342 DB 00000000B ;AN000;
343 DB 00011110B ;AN000;
344 DB 00000000B ;AN000;
345 DB 11001100B ;AN000;
346 DB 11001100B ;AN000;
347 DB 11001100B ;AN000;
348 DB 01110110B ;AN000;
349 DB 00000000B ;AN000;
350; 164 ¤
351 DB 00000000B ;AN000;
352 DB 01110110B ;AN000;
353 DB 11011100B ;AN000;
354 DB 01111100B ;AN000;
355 DB 01100110B ;AN000;
356 DB 01100110B ;AN000;
357 DB 01100110B ;AN000;
358 DB 00000000B ;AN000;
359; 165 ¥
360 DB 01110110B ;AN000;
361 DB 11011100B ;AN000;
362 DB 01100110B ;AN000;
363 DB 01110110B ;AN000;
364 DB 01111110B ;AN000;
365 DB 01101110B ;AN000;
366 DB 01100110B ;AN000;
367 DB 00000000B ;AN000;
368; 166 ¦
369 DB 00111100B ;AN000;
370 DB 01101100B ;AN000;
371 DB 01101100B ;AN000;
372 DB 00111110B ;AN000;
373 DB 00000000B ;AN000;
374 DB 01111110B ;AN000;
375 DB 00000000B ;AN000;
376 DB 00000000B ;AN000;
377; 167 §
378 DB 00111000B ;AN000;
379 DB 01101100B ;AN000;
380 DB 01101100B ;AN000;
381 DB 00111000B ;AN000;
382 DB 00000000B ;AN000;
383 DB 01111100B ;AN000;
384 DB 00000000B ;AN000;
385 DB 00000000B ;AN000;
386; 168 ¨
387 DB 00110000B ;AN000;
388 DB 00000000B ;AN000;
389 DB 00110000B ;AN000;
390 DB 01100000B ;AN000;
391 DB 11000000B ;AN000;
392 DB 11001100B ;AN000;
393 DB 01111000B ;AN000;
394 DB 00000000B ;AN000;
395; 169 ©
396 DB 00111100B ;AN000;
397 DB 01000010B ;AN000;
398 DB 10111001B ;AN000;
399 DB 10101101B ;AN000;
400 DB 10111001B ;AN000;
401 DB 10101101B ;AN000;
402 DB 01000010B ;AN000;
403 DB 00111100B ;AN000;
404; 170 ª
405 DB 00000000B ;AN000;
406 DB 00000000B ;AN000;
407 DB 00000000B ;AN000;
408 DB 11111100B ;AN000;
409 DB 00001100B ;AN000;
410 DB 00001100B ;AN000;
411 DB 00000000B ;AN000;
412 DB 00000000B ;AN000;
413; 171 «
414 DB 11000011B ;AN000;
415 DB 11000110B ;AN000;
416 DB 11001100B ;AN000;
417 DB 11011110B ;AN000;
418 DB 00110011B ;AN000;
419 DB 01100110B ;AN000;
420 DB 11001100B ;AN000;
421 DB 00001111B ;AN000;
422; 172 ¬
423 DB 11000011B ;AN000;
424 DB 11000110B ;AN000;
425 DB 11001100B ;AN000;
426 DB 11011011B ;AN000;
427 DB 00110111B ;AN000;
428 DB 01101111B ;AN000;
429 DB 11001111B ;AN000;
430 DB 00000011B ;AN000;
431; 173 ­
432 DB 00000000B ;AN000;
433 DB 00011000B ;AN000;
434 DB 00000000B ;AN000;
435 DB 00011000B ;AN000;
436 DB 00111100B ;AN000;
437 DB 00111100B ;AN000;
438 DB 00011000B ;AN000;
439 DB 00000000B ;AN000;
440; 174 ®
441 DB 00000000B ;AN000;
442 DB 00110011B ;AN000;
443 DB 01100110B ;AN000;
444 DB 11001100B ;AN000;
445 DB 01100110B ;AN000;
446 DB 00110011B ;AN000;
447 DB 00000000B ;AN000;
448 DB 00000000B ;AN000;
449; 175 ¯
450 DB 00000000B ;AN000;
451 DB 11001100B ;AN000;
452 DB 01100110B ;AN000;
453 DB 00110011B ;AN000;
454 DB 01100110B ;AN000;
455 DB 11001100B ;AN000;
456 DB 00000000B ;AN000;
457 DB 00000000B ;AN000;
458; 176 °
459 DB 00100010B ;AN000;
460 DB 10001000B ;AN000;
461 DB 00100010B ;AN000;
462 DB 10001000B ;AN000;
463 DB 00100010B ;AN000;
464 DB 10001000B ;AN000;
465 DB 00100010B ;AN000;
466 DB 10001000B ;AN000;
467; 177 ±
468 DB 01010101B ;AN000;
469 DB 10101010B ;AN000;
470 DB 01010101B ;AN000;
471 DB 10101010B ;AN000;
472 DB 01010101B ;AN000;
473 DB 10101010B ;AN000;
474 DB 01010101B ;AN000;
475 DB 10101010B ;AN000;
476; 178 ²
477 DB 11011011B ;AN000;
478 DB 01110111B ;AN000;
479 DB 11011011B ;AN000;
480 DB 11101110B ;AN000;
481 DB 11011011B ;AN000;
482 DB 01110111B ;AN000;
483 DB 11011011B ;AN000;
484 DB 11101110B ;AN000;
485; 179 ³
486 DB 00011000B ;AN000;
487 DB 00011000B ;AN000;
488 DB 00011000B ;AN000;
489 DB 00011000B ;AN000;
490 DB 00011000B ;AN000;
491 DB 00011000B ;AN000;
492 DB 00011000B ;AN000;
493 DB 00011000B ;AN000;
494; 180 ´
495 DB 00011000B ;AN000;
496 DB 00011000B ;AN000;
497 DB 00011000B ;AN000;
498 DB 00011000B ;AN000;
499 DB 11111000B ;AN000;
500 DB 00011000B ;AN000;
501 DB 00011000B ;AN000;
502 DB 00011000B ;AN000;
503; 181 µ
504 DB 00001111B ;AN000;
505 DB 00000000B ;AN000;
506 DB 00111100B ;AN000;
507 DB 01100110B ;AN000;
508 DB 01111110B ;AN000;
509 DB 01100110B ;AN000;
510 DB 01100110B ;AN000;
511 DB 00000000B ;AN000;
512; 182 ¶
513 DB 00111100B ;AN000;
514 DB 01100110B ;AN000;
515 DB 00111100B ;AN000;
516 DB 01100110B ;AN000;
517 DB 01111110B ;AN000;
518 DB 01100110B ;AN000;
519 DB 01100110B ;AN000;
520 DB 00000000B ;AN000;
521; 183 ·
522 DB 11110000B ;AN000;
523 DB 00000000B ;AN000;
524 DB 00111100B ;AN000;
525 DB 01100110B ;AN000;
526 DB 01111110B ;AN000;
527 DB 01100110B ;AN000;
528 DB 01100110B ;AN000;
529 DB 00000000B ;AN000;
530; 184 ¸
531 DB 00111100B ;AN000;
532 DB 01000010B ;AN000;
533 DB 10111101B ;AN000;
534 DB 10100001B ;AN000;
535 DB 10100001B ;AN000;
536 DB 10111101B ;AN000;
537 DB 01000010B ;AN000;
538 DB 00111100B ;AN000;
539; 185 ¹
540 DB 00110110B ;AN000;
541 DB 00110110B ;AN000;
542 DB 11110110B ;AN000;
543 DB 00000110B ;AN000;
544 DB 11110110B ;AN000;
545 DB 00110110B ;AN000;
546 DB 00110110B ;AN000;
547 DB 00110110B ;AN000;
548; 186 º
549 DB 00110110B ;AN000;
550 DB 00110110B ;AN000;
551 DB 00110110B ;AN000;
552 DB 00110110B ;AN000;
553 DB 00110110B ;AN000;
554 DB 00110110B ;AN000;
555 DB 00110110B ;AN000;
556 DB 00110110B ;AN000;
557; 187 »
558 DB 00000000B ;AN000;
559 DB 00000000B ;AN000;
560 DB 11111110B ;AN000;
561 DB 00000110B ;AN000;
562 DB 11110110B ;AN000;
563 DB 00110110B ;AN000;
564 DB 00110110B ;AN000;
565 DB 00110110B ;AN000;
566; 188 ¼
567 DB 00110110B ;AN000;
568 DB 00110110B ;AN000;
569 DB 11110110B ;AN000;
570 DB 00000110B ;AN000;
571 DB 11111110B ;AN000;
572 DB 00000000B ;AN000;
573 DB 00000000B ;AN000;
574 DB 00000000B ;AN000;
575; 189 ½
576 DB 00011000B ;AN000;
577 DB 00011000B ;AN000;
578 DB 01111110B ;AN000;
579 DB 11000000B ;AN000;
580 DB 11000000B ;AN000;
581 DB 01111110B ;AN000;
582 DB 00011000B ;AN000;
583 DB 00011000B ;AN000;
584; 190 ¾
585 DB 11001100B ;AN000;
586 DB 11001100B ;AN000;
587 DB 01111000B ;AN000;
588 DB 11111100B ;AN000;
589 DB 00110000B ;AN000;
590 DB 11111100B ;AN000;
591 DB 00110000B ;AN000;
592 DB 00110000B ;AN000;
593; 191 ¿
594 DB 00000000B ;AN000;
595 DB 00000000B ;AN000;
596 DB 00000000B ;AN000;
597 DB 00000000B ;AN000;
598 DB 11111000B ;AN000;
599 DB 00011000B ;AN000;
600 DB 00011000B ;AN000;
601 DB 00011000B ;AN000;
602; 192 À
603 DB 00011000B ;AN000;
604 DB 00011000B ;AN000;
605 DB 00011000B ;AN000;
606 DB 00011000B ;AN000;
607 DB 00011111B ;AN000;
608 DB 00000000B ;AN000;
609 DB 00000000B ;AN000;
610 DB 00000000B ;AN000;
611; 193 Á
612 DB 00011000B ;AN000;
613 DB 00011000B ;AN000;
614 DB 00011000B ;AN000;
615 DB 00011000B ;AN000;
616 DB 11111111B ;AN000;
617 DB 00000000B ;AN000;
618 DB 00000000B ;AN000;
619 DB 00000000B ;AN000;
620; 194 Â
621 DB 00000000B ;AN000;
622 DB 00000000B ;AN000;
623 DB 00000000B ;AN000;
624 DB 00000000B ;AN000;
625 DB 11111111B ;AN000;
626 DB 00011000B ;AN000;
627 DB 00011000B ;AN000;
628 DB 00011000B ;AN000;
629; 195 Ã
630 DB 00011000B ;AN000;
631 DB 00011000B ;AN000;
632 DB 00011000B ;AN000;
633 DB 00011000B ;AN000;
634 DB 00011111B ;AN000;
635 DB 00011000B ;AN000;
636 DB 00011000B ;AN000;
637 DB 00011000B ;AN000;
638; 196 Ä
639 DB 00000000B ;AN000;
640 DB 00000000B ;AN000;
641 DB 00000000B ;AN000;
642 DB 00000000B ;AN000;
643 DB 11111111B ;AN000;
644 DB 00000000B ;AN000;
645 DB 00000000B ;AN000;
646 DB 00000000B ;AN000;
647; 197 Å
648 DB 00011000B ;AN000;
649 DB 00011000B ;AN000;
650 DB 00011000B ;AN000;
651 DB 00011000B ;AN000;
652 DB 11111111B ;AN000;
653 DB 00011000B ;AN000;
654 DB 00011000B ;AN000;
655 DB 00011000B ;AN000;
656; 198 Æ
657 DB 00000000B ;AN000;
658 DB 01110110B ;AN000;
659 DB 11011100B ;AN000;
660 DB 11111000B ;AN000;
661 DB 00111100B ;AN000;
662 DB 11001100B ;AN000;
663 DB 01110110B ;AN000;
664 DB 00000000B ;AN000;
665; 199 Ç
666 DB 00110110B ;AN000;
667 DB 01101100B ;AN000;
668 DB 00111100B ;AN000;
669 DB 01100110B ;AN000;
670 DB 01111110B ;AN000;
671 DB 01100110B ;AN000;
672 DB 01100110B ;AN000;
673 DB 00000000B ;AN000;
674; 200 È
675 DB 00110110B ;AN000;
676 DB 00110110B ;AN000;
677 DB 00110111B ;AN000;
678 DB 00110000B ;AN000;
679 DB 00111111B ;AN000;
680 DB 00000000B ;AN000;
681 DB 00000000B ;AN000;
682 DB 00000000B ;AN000;
683; 201 É
684 DB 00000000B ;AN000;
685 DB 00000000B ;AN000;
686 DB 00111111B ;AN000;
687 DB 00110000B ;AN000;
688 DB 00110111B ;AN000;
689 DB 00110110B ;AN000;
690 DB 00110110B ;AN000;
691 DB 00110110B ;AN000;
692; 202 Ê
693 DB 00110110B ;AN000;
694 DB 00110110B ;AN000;
695 DB 11110111B ;AN000;
696 DB 00000000B ;AN000;
697 DB 11111111B ;AN000;
698 DB 00000000B ;AN000;
699 DB 00000000B ;AN000;
700 DB 00000000B ;AN000;
701; 203 Ë
702 DB 00000000B ;AN000;
703 DB 00000000B ;AN000;
704 DB 11111111B ;AN000;
705 DB 00000000B ;AN000;
706 DB 11110111B ;AN000;
707 DB 00110110B ;AN000;
708 DB 00110110B ;AN000;
709 DB 00110110B ;AN000;
710; 204 Ì
711 DB 00110110B ;AN000;
712 DB 00110110B ;AN000;
713 DB 00110111B ;AN000;
714 DB 00110000B ;AN000;
715 DB 00110111B ;AN000;
716 DB 00110110B ;AN000;
717 DB 00110110B ;AN000;
718 DB 00110110B ;AN000;
719; 205 Í
720 DB 00000000B ;AN000;
721 DB 00000000B ;AN000;
722 DB 11111111B ;AN000;
723 DB 00000000B ;AN000;
724 DB 11111111B ;AN000;
725 DB 00000000B ;AN000;
726 DB 00000000B ;AN000;
727 DB 00000000B ;AN000;
728; 206 Î
729 DB 00110110B ;AN000;
730 DB 00110110B ;AN000;
731 DB 11110111B ;AN000;
732 DB 00000000B ;AN000;
733 DB 11110111B ;AN000;
734 DB 00110110B ;AN000;
735 DB 00110110B ;AN000;
736 DB 00110110B ;AN000;
737; 207 Ï
738 DB 00000000B ;AN000;
739 DB 11000110B ;AN000;
740 DB 01111100B ;AN000;
741 DB 11000110B ;AN000;
742 DB 11000110B ;AN000;
743 DB 01111100B ;AN000;
744 DB 11000110B ;AN000;
745 DB 00000000B ;AN000;
746; 208 Ð
747 DB 00000000B ;AN000;
748 DB 00011000B ;AN000;
749 DB 00111110B ;AN000;
750 DB 00001100B ;AN000;
751 DB 01111110B ;AN000;
752 DB 11000110B ;AN000;
753 DB 01111100B ;AN000;
754 DB 00000000B ;AN000;
755; 209 Ñ
756 DB 00000000B ;AN000;
757 DB 00000000B ;AN000;
758 DB 11111100B ;AN000;
759 DB 01100110B ;AN000;
760 DB 11110110B ;AN000;
761 DB 01100110B ;AN000;
762 DB 11111100B ;AN000;
763 DB 00000000B ;AN000;
764; 210 Ò
765 DB 00111000B ;AN000;
766 DB 01101100B ;AN000;
767 DB 11111110B ;AN000;
768 DB 01100000B ;AN000;
769 DB 01111100B ;AN000;
770 DB 01100000B ;AN000;
771 DB 11111110B ;AN000;
772 DB 00000000B ;AN000;
773; 211 Ó
774 DB 11000110B ;AN000;
775 DB 00000000B ;AN000;
776 DB 11111110B ;AN000;
777 DB 01100000B ;AN000;
778 DB 01111100B ;AN000;
779 DB 01100000B ;AN000;
780 DB 11111110B ;AN000;
781 DB 00000000B ;AN000;
782; 212 Ô
783 DB 11111000B ;AN000;
784 DB 00000000B ;AN000;
785 DB 01111111B ;AN000;
786 DB 00110000B ;AN000;
787 DB 00111110B ;AN000;
788 DB 00110000B ;AN000;
789 DB 01111111B ;AN000;
790 DB 00000000B ;AN000;
791; 213 Õ
792 DB 00000000B ;AN000;
793 DB 00000000B ;AN000;
794 DB 00000000B ;AN000;
795 DB 00111000B ;AN000;
796 DB 00011000B ;AN000;
797 DB 00011000B ;AN000;
798 DB 00111100B ;AN000;
799 DB 00000000B ;AN000;
800; 214 Ö
801 DB 00011110B ;AN000;
802 DB 00000000B ;AN000;
803 DB 00111100B ;AN000;
804 DB 00011000B ;AN000;
805 DB 00011000B ;AN000;
806 DB 00011000B ;AN000;
807 DB 00111100B ;AN000;
808 DB 00000000B ;AN000;
809; 215 ×
810 DB 00111100B ;AN000;
811 DB 01100110B ;AN000;
812 DB 00111100B ;AN000;
813 DB 00011000B ;AN000;
814 DB 00011000B ;AN000;
815 DB 00011000B ;AN000;
816 DB 00111100B ;AN000;
817 DB 00000000B ;AN000;
818; 216 Ø
819 DB 01100110B ;AN000;
820 DB 00000000B ;AN000;
821 DB 00111100B ;AN000;
822 DB 00011000B ;AN000;
823 DB 00011000B ;AN000;
824 DB 00011000B ;AN000;
825 DB 00111100B ;AN000;
826 DB 00000000B ;AN000;
827; 217 Ù
828 DB 00011000B ;AN000;
829 DB 00011000B ;AN000;
830 DB 00011000B ;AN000;
831 DB 00011000B ;AN000;
832 DB 11111000B ;AN000;
833 DB 00000000B ;AN000;
834 DB 00000000B ;AN000;
835 DB 00000000B ;AN000;
836; 218 Ú
837 DB 00000000B ;AN000;
838 DB 00000000B ;AN000;
839 DB 00000000B ;AN000;
840 DB 00000000B ;AN000;
841 DB 00011111B ;AN000;
842 DB 00011000B ;AN000;
843 DB 00011000B ;AN000;
844 DB 00011000B ;AN000;
845; 219 Û
846 DB 11111111B ;AN000;
847 DB 11111111B ;AN000;
848 DB 11111111B ;AN000;
849 DB 11111111B ;AN000;
850 DB 11111111B ;AN000;
851 DB 11111111B ;AN000;
852 DB 11111111B ;AN000;
853 DB 11111111B ;AN000;
854; 220 Ü
855 DB 00000000B ;AN000;
856 DB 00000000B ;AN000;
857 DB 00000000B ;AN000;
858 DB 00000000B ;AN000;
859 DB 11111111B ;AN000;
860 DB 11111111B ;AN000;
861 DB 11111111B ;AN000;
862 DB 11111111B ;AN000;
863; 221 Ý
864 DB 00011000B ;AN000;
865 DB 00011000B ;AN000;
866 DB 00011000B ;AN000;
867 DB 00000000B ;AN000;
868 DB 00011000B ;AN000;
869 DB 00011000B ;AN000;
870 DB 00011000B ;AN000;
871 DB 00000000B ;AN000;
872; 222 Þ
873 DB 01111000B ;AN000;
874 DB 00000000B ;AN000;
875 DB 00111100B ;AN000;
876 DB 00011000B ;AN000;
877 DB 00011000B ;AN000;
878 DB 00011000B ;AN000;
879 DB 00111100B ;AN000;
880 DB 00000000B ;AN000;
881; 223 ß
882 DB 11111111B ;AN000;
883 DB 11111111B ;AN000;
884 DB 11111111B ;AN000;
885 DB 11111111B ;AN000;
886 DB 00000000B ;AN000;
887 DB 00000000B ;AN000;
888 DB 00000000B ;AN000;
889 DB 00000000B ;AN000;
890; 224 à
891 DB 00011111B ;AN000;
892 DB 00000000B ;AN000;
893 DB 01111100B ;AN000;
894 DB 11000110B ;AN000;
895 DB 11000110B ;AN000;
896 DB 11000110B ;AN000;
897 DB 01111100B ;AN000;
898 DB 00000000B ;AN000;
899; 225 á
900 DB 00000000B ;AN000;
901 DB 01111000B ;AN000;
902 DB 11001100B ;AN000;
903 DB 11111000B ;AN000;
904 DB 11001100B ;AN000;
905 DB 11111000B ;AN000;
906 DB 11000000B ;AN000;
907 DB 11000000B ;AN000;
908; 226 â
909 DB 00111000B ;AN000;
910 DB 01101100B ;AN000;
911 DB 01111100B ;AN000;
912 DB 11000110B ;AN000;
913 DB 11000110B ;AN000;
914 DB 11000110B ;AN000;
915 DB 01111100B ;AN000;
916 DB 00000000B ;AN000;
917; 227 ã
918 DB 11111000B ;AN000;
919 DB 00000000B ;AN000;
920 DB 00111110B ;AN000;
921 DB 01100011B ;AN000;
922 DB 01100011B ;AN000;
923 DB 01100011B ;AN000;
924 DB 00111110B ;AN000;
925 DB 00000000B ;AN000;
926; 228 ä
927 DB 00000000B ;AN000;
928 DB 01110110B ;AN000;
929 DB 11011100B ;AN000;
930 DB 00111100B ;AN000;
931 DB 01100110B ;AN000;
932 DB 01100110B ;AN000;
933 DB 00111100B ;AN000;
934 DB 00000000B ;AN000;
935; 229 å
936 DB 01110110B ;AN000;
937 DB 11011100B ;AN000;
938 DB 01111100B ;AN000;
939 DB 11000110B ;AN000;
940 DB 11000110B ;AN000;
941 DB 11000110B ;AN000;
942 DB 01111100B ;AN000;
943 DB 00000000B ;AN000;
944; 230 æ
945 DB 00000000B ;AN000;
946 DB 01100110B ;AN000;
947 DB 01100110B ;AN000;
948 DB 01100110B ;AN000;
949 DB 01100110B ;AN000;
950 DB 01111100B ;AN000;
951 DB 01100000B ;AN000;
952 DB 11000000B ;AN000;
953; 231 ç
954 DB 00000000B ;AN000;
955 DB 00000000B ;AN000;
956 DB 11100000B ;AN000;
957 DB 01111100B ;AN000;
958 DB 01100110B ;AN000;
959 DB 01111100B ;AN000;
960 DB 01100000B ;AN000;
961 DB 11111000B ;AN000;
962; 232 è
963 DB 11110000B ;AN000;
964 DB 01100000B ;AN000;
965 DB 01111100B ;AN000;
966 DB 01100110B ;AN000;
967 DB 01111100B ;AN000;
968 DB 01100000B ;AN000;
969 DB 11110000B ;AN000;
970 DB 00000000B ;AN000;
971; 233 é
972 DB 00001111B ;AN000;
973 DB 00000000B ;AN000;
974 DB 01100110B ;AN000;
975 DB 01100110B ;AN000;
976 DB 01100110B ;AN000;
977 DB 01100110B ;AN000;
978 DB 00111100B ;AN000;
979 DB 00000000B ;AN000;
980; 234 ê
981 DB 01111110B ;AN000;
982 DB 11000011B ;AN000;
983 DB 01100110B ;AN000;
984 DB 01100110B ;AN000;
985 DB 01100110B ;AN000;
986 DB 01100110B ;AN000;
987 DB 00111100B ;AN000;
988 DB 00000000B ;AN000;
989; 235 ë
990 DB 11110000B ;AN000;
991 DB 00000000B ;AN000;
992 DB 01100110B ;AN000;
993 DB 01100110B ;AN000;
994 DB 01100110B ;AN000;
995 DB 01100110B ;AN000;
996 DB 00111100B ;AN000;
997 DB 00000000B ;AN000;
998; 236 ì
999 DB 00000000B ;AN000;
1000 DB 00001111B ;AN000;
1001 DB 00000000B ;AN000;
1002 DB 01100110B ;AN000;
1003 DB 01100110B ;AN000;
1004 DB 00111110B ;AN000;
1005 DB 00000110B ;AN000;
1006 DB 01111100B ;AN000;
1007; 237 í
1008 DB 00001111B ;AN000;
1009 DB 00000000B ;AN000;
1010 DB 01100110B ;AN000;
1011 DB 01100110B ;AN000;
1012 DB 00111100B ;AN000;
1013 DB 00011000B ;AN000;
1014 DB 00111100B ;AN000;
1015 DB 00000000B ;AN000;
1016; 238 î
1017 DB 11111100B ;AN000;
1018 DB 00000000B ;AN000;
1019 DB 00000000B ;AN000;
1020 DB 00000000B ;AN000;
1021 DB 00000000B ;AN000;
1022 DB 00000000B ;AN000;
1023 DB 00000000B ;AN000;
1024 DB 00000000B ;AN000;
1025; 239 ï
1026 DB 00001100B ;AN000;
1027 DB 00011000B ;AN000;
1028 DB 00110000B ;AN000;
1029 DB 00000000B ;AN000;
1030 DB 00000000B ;AN000;
1031 DB 00000000B ;AN000;
1032 DB 00000000B ;AN000;
1033 DB 00000000B ;AN000;
1034; 240 ð
1035 DB 00000000B ;AN000;
1036 DB 00000000B ;AN000;
1037 DB 00000000B ;AN000;
1038 DB 11111100B ;AN000;
1039 DB 00000000B ;AN000;
1040 DB 00000000B ;AN000;
1041 DB 00000000B ;AN000;
1042 DB 00000000B ;AN000;
1043; 241 ñ
1044 DB 00110000B ;AN000;
1045 DB 00110000B ;AN000;
1046 DB 11111100B ;AN000;
1047 DB 00110000B ;AN000;
1048 DB 00110000B ;AN000;
1049 DB 00000000B ;AN000;
1050 DB 11111100B ;AN000;
1051 DB 00000000B ;AN000;
1052; 242 ò
1053 DB 00000000B ;AN000;
1054 DB 00000000B ;AN000;
1055 DB 00000000B ;AN000;
1056 DB 00000000B ;AN000;
1057 DB 00000000B ;AN000;
1058 DB 11111100B ;AN000;
1059 DB 00000000B ;AN000;
1060 DB 11111100B ;AN000;
1061; 243 ó
1062 DB 11100011B ;AN000;
1063 DB 00010110B ;AN000;
1064 DB 01110100B ;AN000;
1065 DB 00010011B ;AN000;
1066 DB 11100111B ;AN000;
1067 DB 00001111B ;AN000;
1068 DB 01101111B ;AN000;
1069 DB 11000011B ;AN000;
1070; 244 ô
1071 DB 01111111B ;AN000;
1072 DB 11011011B ;AN000;
1073 DB 11011011B ;AN000;
1074 DB 01111011B ;AN000;
1075 DB 00011011B ;AN000;
1076 DB 00011011B ;AN000;
1077 DB 00011011B ;AN000;
1078 DB 00000000B ;AN000;
1079; 245 õ
1080 DB 00111110B ;AN000;
1081 DB 01100011B ;AN000;
1082 DB 00111000B ;AN000;
1083 DB 01101100B ;AN000;
1084 DB 01101100B ;AN000;
1085 DB 00111000B ;AN000;
1086 DB 11001100B ;AN000;
1087 DB 01111000B ;AN000;
1088; 246 ö
1089 DB 00110000B ;AN000;
1090 DB 00110000B ;AN000;
1091 DB 00000000B ;AN000;
1092 DB 11111100B ;AN000;
1093 DB 00000000B ;AN000;
1094 DB 00110000B ;AN000;
1095 DB 00110000B ;AN000;
1096 DB 00000000B ;AN000;
1097; 247 ÷
1098 DB 00000000B ;AN000;
1099 DB 00000000B ;AN000;
1100 DB 00000000B ;AN000;
1101 DB 00000000B ;AN000;
1102 DB 00000000B ;AN000;
1103 DB 00111000B ;AN000;
1104 DB 00001100B ;AN000;
1105 DB 11111000B ;AN000;
1106; 248 ø
1107 DB 00111000B ;AN000;
1108 DB 01101100B ;AN000;
1109 DB 01101100B ;AN000;
1110 DB 00111000B ;AN000;
1111 DB 00000000B ;AN000;
1112 DB 00000000B ;AN000;
1113 DB 00000000B ;AN000;
1114 DB 00000000B ;AN000;
1115; 249 ù
1116 DB 11000110B ;AN000;
1117 DB 00000000B ;AN000;
1118 DB 00000000B ;AN000;
1119 DB 00000000B ;AN000;
1120 DB 00000000B ;AN000;
1121 DB 00000000B ;AN000;
1122 DB 00000000B ;AN000;
1123 DB 00000000B ;AN000;
1124; 250 ú
1125 DB 00000000B ;AN000;
1126 DB 00000000B ;AN000;
1127 DB 00000000B ;AN000;
1128 DB 00000000B ;AN000;
1129 DB 00011000B ;AN000;
1130 DB 00000000B ;AN000;
1131 DB 00000000B ;AN000;
1132 DB 00000000B ;AN000;
1133; 251 û
1134 DB 00110000B ;AN000;
1135 DB 01110000B ;AN000;
1136 DB 00110000B ;AN000;
1137 DB 00110000B ;AN000;
1138 DB 01111000B ;AN000;
1139 DB 00000000B ;AN000;
1140 DB 00000000B ;AN000;
1141 DB 00000000B ;AN000;
1142; 252 ü
1143 DB 11110000B ;AN000;
1144 DB 00011000B ;AN000;
1145 DB 01110000B ;AN000;
1146 DB 00011000B ;AN000;
1147 DB 11110000B ;AN000;
1148 DB 00000000B ;AN000;
1149 DB 00000000B ;AN000;
1150 DB 00000000B ;AN000;
1151; 253 ý
1152 DB 01110000B ;AN000;
1153 DB 11011000B ;AN000;
1154 DB 00110000B ;AN000;
1155 DB 01100000B ;AN000;
1156 DB 11111000B ;AN000;
1157 DB 00000000B ;AN000;
1158 DB 00000000B ;AN000;
1159 DB 00000000B ;AN000;
1160.LIST ;AN000;
1161; 254 þ
1162 DB 00000000B ;AN000;
1163 DB 00000000B ;AN000;
1164 DB 00111100B ;AN000;
1165 DB 00111100B ;AN000;
1166 DB 00111100B ;AN000;
1167 DB 00111100B ;AN000;
1168 DB 00000000B ;AN000;
1169 DB 00000000B ;AN000;
1170; 255 ÿ
1171 DB 00000000B ;AN000;
1172 DB 00000000B ;AN000;
1173 DB 00000000B ;AN000;
1174 DB 00000000B ;AN000;
1175 DB 00000000B ;AN000;
1176 DB 00000000B ;AN000;
1177 DB 00000000B ;AN000;
1178 DB 00000000B ;AN000;
1179
1180 DW 850 ;AN000;TABLE ID
1181 DB "Multi-lingual",0 ;AN000;LANGUAGE NAME, IN ASCIIZ FORMAT
1182 IF ($-CSEG) MOD 16 ;AN000;IF NOT ALREADY ON 16 BYTE BOUNDARY
1183 DB (16-(($-CSEG) MOD 16)) DUP(0) ;AN000;ADD PADDING TO GET TO 16 BYTE BOUNDARY
1184 ENDIF ;AN000;
1185CSEG ENDS ;AN000;
1186 END ;AN000;
1187 \ No newline at end of file
diff --git a/v4.0/src/CMD/GRAFTABL/GRTABMS.INC b/v4.0/src/CMD/GRAFTABL/GRTABMS.INC
new file mode 100644
index 0000000..79c7e85
--- /dev/null
+++ b/v4.0/src/CMD/GRAFTABL/GRTABMS.INC
@@ -0,0 +1,115 @@
1;:util GRAFTABL ;utility name ;AN000;
2;:class 1 ;DOS extended errors:
3;:class 2 ;parse errors:
4;1 Too many parameters
5;2 Required parameter missing
6;3 Invalid switch
7;4 Invalid keyword
8;5 Parameter value not in allowed range
9;6 Parameter value not allowed [parse ret codes 6 and 7]
10;7 (undefined)
11;8 Parameter format not correct
12;9 (undefined)
13;10 Invalid parameter [no corresponding parse ret code]
14;11 Invalid parameter combination [no corresponding parse ret code]
15;;
16;:class A ;system messages
17;:use 1 COMMON1 ;MSG 1 is always "Incorrect DOS version"
18;;
19;;In these next 2 messages, %1 will be replaced with one from list, 4-5,
20;; or with one entry of the list at "CPID". (see GRTABMS.INC)
21;;
22;:def 2 "Active Code Page: %1",CR,LF
23;:def 3 "Previous Code Page: %1",CR,LF
24
25;:def 4 "None",NULL
26;:def 5 "Non-standard",NULL
27;;
28;:def 6 CR,LF,"DOS command line parameters supported:",CR,LF,LF
29;
30;:def 7 " /STA - Request Status only",CR,LF
31;" ? - Display this summary of parameters",CR,LF,CR,LF
32
33;:def 8 " Code Pages available:",CR,LF
34;" 437 - USA Graphic Character Set",CR,LF
35
36;:def 9 " 850 - Multi-lingual Graphic Character Set",CR,LF
37;" 860 - Portuguese Graphic Character Set",CR,LF
38
39;:def 10 " 863 - Canadian French Graphic Character Set",CR,LF
40;" 865 - Nordic Graphic Character Set",CR,LF
41;
42;
43;:end
44; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
45 IF1 ;AN000;
46 %OUT COMPONENT=GRAFTABL, MODULE=GRTABMS.INC...;AN000;
47 ENDIF ;AN000;
48;THIS MODULE IS INCLUDED IN GRTABSM.SAL.
49; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
50SUBLIST_PARSE SUBLIST <,,FILL_OFF,FILL_SEG,PC_ID_0,SF_BITS <SF_LEFT,,SF_ASCIIZ,SF_CHAR>,MAX_0,MIN_1,PAD_BLK> ;AN003;
51 PUBLIC SUBLIST_PARSE ;AN003;
52
53; THE NEXT GROUP ARE ADDITIONAL CLASS "A" MESSAGES
54; SPECIFICALLY DEFINED FOR THE GRAFTABL UTILITY
55MSGNUM_ACTIVE MSG_DESC <2,,SLIST_23,ONE_SUBS> ;AN000;"Active Code Page: %1",CR,LF
56 PUBLIC MSGNUM_ACTIVE ;AN000;
57
58MSGNUM_PREVIOUS MSG_DESC <3,,SLIST_23,ONE_SUBS> ;AN000;"Previous Code Page: %1",CR,LF
59 PUBLIC MSGNUM_PREVIOUS ;AN000;
60
61;BEFORE USING THE NEXT SUBLIST, THE SEG ID OF CPID
62;(OR OF "NONE" OR "NON-STANDARD") MUST BE FILLED IN
63;SINCE COM FILE CANNOT HAVE SEGMENT FIXUP.
64
65;THIS NEXT SUBLIST IS USED BOTH MY MESSAGE 2 AND MESSAGE 3.
66
67SLIST_23 SUBLIST <,,,,PC_ID_1,SF_BITS <SF_LEFT,,SF_ASCIIZ,SF_CHAR>,MAX_0,MIN_1,PAD_BLK> ;AN000;
68 PUBLIC SLIST_23 ;AN000;
69;NOTE: IN THE ABOVE SUBLIST, ID=1, THE VECTOR POINTING TO THE MSG NO. 2-3.
70; WILL NEED TO BE PUT INTO THE SUBLIST DURING MESSAGES INITIALIZATION.
71; TO SELECT "None" OR "Non Standard", OR TO POINT TO ELEMENT OF "CPID".
72
73 PUBLIC CPID,CPID_L ;AN000;
74CPID DB "437",NULL ;AN000;
75CPID_L EQU $-CPID ;AN000;NUMBER OF CHARS IN CPID
76 DB "850",NULL ;AN000;
77 DB "860",NULL ;AN000;
78 DB "863",NULL ;AN000;
79 DB "865",NULL ;AN000;
80
81; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
82MSGNUM_NONE MSG_DESC <4> ;AN000;"None",NULL
83 PUBLIC MSGNUM_NONE ;AN000;
84
85MSGNUM_NSTD MSG_DESC <5> ;AN000;"Non-Standard",NULL
86 PUBLIC MSGNUM_NSTD ;AN000;
87; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
88
89;CR,LF,"DOS command line parameters supported:",CR,LF,LF ;AN000;
90;" /STA - Request Status only",CR,LF ;AN000;
91;" ? - Display this summary of parameters",CR,LF ;AN000;
92;" Code Pages available:",CR,LF
93;" 437 - USA Graphic Character Set",CR,LF ;AN000;
94;" 850 - Multi-lingual Graphic Character Set",CR,LF ;AN000;
95;" 860 - Portuguese Graphic Character Set",CR,LF ;AN000;
96;" 863 - Canadian French Graphic Character Set",CR,LF ;AN000;
97;" 865 - Nordic Graphic Character Set",CR,LF ;AN000;
98
99MSGNUM_HELP_TITLE MSG_DESC <6> ;AN000;NO SUBSTITUTIONS
100 PUBLIC MSGNUM_HELP_TITLE ;AN000;
101
102MSGNUM_HELP_TITLE7 MSG_DESC <7> ;AN007;NO SUBSTITUTIONS
103 PUBLIC MSGNUM_HELP_TITLE7 ;AN007;
104
105MSGNUM_HELP_TITLE8 MSG_DESC <8> ;AN007;NO SUBSTITUTIONS
106 PUBLIC MSGNUM_HELP_TITLE8 ;AN007;
107
108MSGNUM_HELP_TITLE9 MSG_DESC <9> ;AN007;NO SUBSTITUTIONS
109 PUBLIC MSGNUM_HELP_TITLE9 ;AN007;
110
111MSGNUM_HELP_TITLE10 MSG_DESC <10> ;AN007;NO SUBSTITUTIONS
112 PUBLIC MSGNUM_HELP_TITLE10 ;AN007;
113
114; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
115;end of GRTABMS.INC
diff --git a/v4.0/src/CMD/GRAFTABL/GRTABNO.ASM b/v4.0/src/CMD/GRAFTABL/GRTABNO.ASM
new file mode 100644
index 0000000..d1e9333
--- /dev/null
+++ b/v4.0/src/CMD/GRAFTABL/GRTABNO.ASM
@@ -0,0 +1,1188 @@
1 PAGE 90,132 ;A2
2 TITLE GRTABNO - NORDIC CHARACTER SET FOR GRAFTABL COMMAND
3;This module is to be linked with the OBJ of GRTAB.SAL. Refer to the
4;Prolog of that module for more complete description.
5
6;This module contains the binary description of the pixels that are used
7;in graphics mode to define the Nordic character set when loaded to
8;interrupt 1FH by the GRAFTABL command in DOS 3.3.
9 IF1
10 %OUT GRTABNO.ASM...
11 ELSE
12; %OUT GRTABNO.ASM...
13 ENDIF
14CSEG SEGMENT PARA PUBLIC
15TABLENO EQU THIS BYTE
16 PUBLIC TABLENO
17
18;(note: the display of the character to the right of the decimal number
19;value of this location is not necessarily the graphic that these pixels
20;will produce. The displayed character is from the USA character set, and
21;does not represent the language character set generated by this table.)
22
23;These fonts are as defined in the Nordic Code Page = 865.
24
25 DB 00111100B ;128 €
26 DB 01100110B
27 DB 01100000B
28 DB 01100110B
29 DB 00111100B
30 DB 00001100B
31 DB 00000110B
32 DB 00111100B
33;
34 DB 00000000B ;129
35 DB 01100110B
36 DB 00000000B
37 DB 01100110B
38 DB 01100110B
39 DB 01100110B
40 DB 00111111B
41 DB 00000000B
42.XLIST
43;
44 DB 00001110B ;130 ‚
45 DB 00000000B
46 DB 00111100B
47 DB 01100110B
48 DB 01111110B
49 DB 01100000B
50 DB 00111100B
51 DB 00000000B
52;
53 DB 01111110B ;131 ƒ
54 DB 11000011B
55 DB 00111100B
56 DB 00000110B
57 DB 00111110B
58 DB 01100110B
59 DB 00111111B
60 DB 00000000B
61;
62 DB 01100110B ;132 „
63 DB 00000000B
64 DB 00111100B
65 DB 00000110B
66 DB 00111110B
67 DB 01100110B
68 DB 00111111B
69 DB 00000000B
70;
71 DB 01110000B ;133 …
72 DB 00000000B
73 DB 00111100B
74 DB 00000110B
75 DB 00111110B
76 DB 01100110B
77 DB 00111111B
78 DB 00000000B
79;
80 DB 00011000B ;134 †
81 DB 00011000B
82 DB 00111100B
83 DB 00000110B
84 DB 00111110B
85 DB 01100110B
86 DB 00111111B
87 DB 00000000B
88;
89 DB 00000000B ;135 ‡
90 DB 00000000B
91 DB 00111100B
92 DB 01100000B
93 DB 01100000B
94 DB 00111100B
95 DB 00000110B
96 DB 00011100B
97;
98 DB 01111110B ;136 ˆ
99 DB 11000011B
100 DB 00111100B
101 DB 01100110B
102 DB 01111110B
103 DB 01100000B
104 DB 00111100B
105 DB 00000000B
106;
107 DB 01100110B ;137 ‰
108 DB 00000000B
109 DB 00111100B
110 DB 01100110B
111 DB 01111110B
112 DB 01100000B
113 DB 00111100B
114 DB 00000000B
115;
116 DB 01110000B ;138 Š
117 DB 00000000B
118 DB 00111100B
119 DB 01100110B
120 DB 01111110B
121 DB 01100000B
122 DB 00111100B
123 DB 00000000B
124;
125 DB 01100110B ;139 ‹
126 DB 00000000B
127 DB 00111000B
128 DB 00011000B
129 DB 00011000B
130 DB 00011000B
131 DB 00111100B
132 DB 00000000B
133;
134 DB 01111100B ;140 Œ
135 DB 11000110B
136 DB 00111000B
137 DB 00011000B
138 DB 00011000B
139 DB 00011000B
140 DB 00111100B
141 DB 00000000B
142;
143 DB 01110000B ;141
144 DB 00000000B
145 DB 00111000B
146 DB 00011000B
147 DB 00011000B
148 DB 00011000B
149 DB 00111100B
150 DB 00000000B
151;
152 DB 01100011B ;142 Ž
153 DB 00011100B
154 DB 00110110B
155 DB 01100011B
156 DB 01111111B
157 DB 01100011B
158 DB 01100011B
159 DB 00000000B
160;
161 DB 00011000B ;143
162 DB 00011000B
163 DB 00000000B
164 DB 00111100B
165 DB 01100110B
166 DB 01111110B
167 DB 01100110B
168 DB 00000000B
169;
170 DB 00001110B ;144
171 DB 00000000B
172 DB 01111110B
173 DB 00110000B
174 DB 00111100B
175 DB 00110000B
176 DB 01111110B
177 DB 00000000B
178;
179 DB 00000000B ;145 ‘
180 DB 00000000B
181 DB 01111111B
182 DB 00001100B
183 DB 01111111B
184 DB 11001100B
185 DB 01111111B
186 DB 00000000B
187;
188 DB 00011111B ;146 ’
189 DB 00110110B
190 DB 01100110B
191 DB 01111111B
192 DB 01100110B
193 DB 01100110B
194 DB 01100111B
195 DB 00000000B
196;
197 DB 00111100B ;147 “
198 DB 01100110B
199 DB 00000000B
200 DB 00111100B
201 DB 01100110B
202 DB 01100110B
203 DB 00111100B
204 DB 00000000B
205;
206 DB 00000000B ;148 ”
207 DB 01100110B
208 DB 00000000B
209 DB 00111100B
210 DB 01100110B
211 DB 01100110B
212 DB 00111100B
213 DB 00000000B
214;
215 DB 00000000B ;149 •
216 DB 01110000B
217 DB 00000000B
218 DB 00111100B
219 DB 01100110B
220 DB 01100110B
221 DB 00111100B
222 DB 00000000B
223;
224 DB 00111100B ;150 –
225 DB 01100110B
226 DB 00000000B
227 DB 01100110B
228 DB 01100110B
229 DB 01100110B
230 DB 00111111B
231 DB 00000000B
232;
233 DB 00000000B ;151 —
234 DB 01110000B
235 DB 00000000B
236 DB 01100110B
237 DB 01100110B
238 DB 01100110B
239 DB 00111111B
240 DB 00000000B
241;
242 DB 00000000B ;152 ˜
243 DB 01100110B
244 DB 00000000B
245 DB 01100110B
246 DB 01100110B
247 DB 00111110B
248 DB 00000110B
249 DB 01111100B
250;
251 DB 11000011B ;153 ™
252 DB 00011000B
253 DB 00111100B
254 DB 01100110B
255 DB 01100110B
256 DB 00111100B
257 DB 00011000B
258 DB 00000000B
259;
260 DB 01100110B ;154 š
261 DB 00000000B
262 DB 01100110B
263 DB 01100110B
264 DB 01100110B
265 DB 01100110B
266 DB 00111100B
267 DB 00000000B
268;
269 DB 00000000B ;155 › *
270 DB 00000000B
271 DB 00000000B
272 DB 00111100B
273 DB 01101110B
274 DB 01110110B
275 DB 00111100B
276 DB 00000000B
277;
278 DB 00011100B ;156 œ
279 DB 00110110B
280 DB 00110010B
281 DB 01111000B
282 DB 00110000B
283 DB 01110011B
284 DB 01111110B
285 DB 00000000B
286;
287 DB 01111100B ;157 *
288 DB 11000110B
289 DB 11001110B
290 DB 11011110B
291 DB 11110110B
292 DB 11100110B
293 DB 01111100B
294 DB 00000000B
295;
296 DB 11111000B ;158 ž
297 DB 11001100B
298 DB 11001100B
299 DB 11111010B
300 DB 11000110B
301 DB 11001111B
302 DB 11000110B
303 DB 11000111B
304;
305 DB 00001110B ;159 Ÿ
306 DB 00011011B
307 DB 00011000B
308 DB 00111100B
309 DB 00011000B
310 DB 00011000B
311 DB 11011000B
312 DB 01110000B
313;
314 DB 00001110B ;160  
315 DB 00000000B
316 DB 00111100B
317 DB 00000110B
318 DB 00111110B
319 DB 01100110B
320 DB 00111111B
321 DB 00000000B
322;
323 DB 00011100B ;161 ¡
324 DB 00000000B
325 DB 00111000B
326 DB 00011000B
327 DB 00011000B
328 DB 00011000B
329 DB 00111100B
330 DB 00000000B
331;
332 DB 00000000B ;162 ¢
333 DB 00001110B
334 DB 00000000B
335 DB 00111100B
336 DB 01100110B
337 DB 01100110B
338 DB 00111100B
339 DB 00000000B
340;
341 DB 00000000B ;163 £
342 DB 00001110B
343 DB 00000000B
344 DB 01100110B
345 DB 01100110B
346 DB 01100110B
347 DB 00111111B
348 DB 00000000B
349;
350 DB 00000000B ;164 ¤
351 DB 01111100B
352 DB 00000000B
353 DB 01111100B
354 DB 01100110B
355 DB 01100110B
356 DB 01100110B
357 DB 00000000B
358;
359 DB 01111110B ;165 ¥
360 DB 00000000B
361 DB 01100110B
362 DB 01110110B
363 DB 01111110B
364 DB 01101110B
365 DB 01100110B
366 DB 00000000B
367;
368 DB 00111100B ;166 ¦
369 DB 01101100B
370 DB 01101100B
371 DB 00111110B
372 DB 00000000B
373 DB 01111110B
374 DB 00000000B
375 DB 00000000B
376;
377 DB 00111000B ;167 §
378 DB 01101100B
379 DB 01101100B
380 DB 00111000B
381 DB 00000000B
382 DB 01111100B
383 DB 00000000B
384 DB 00000000B
385;
386 DB 00011000B ;168 ¨
387 DB 00000000B
388 DB 00011000B
389 DB 00110000B
390 DB 01100000B
391 DB 01100110B
392 DB 00111100B
393 DB 00000000B
394;
395 DB 00000000B ;169 ©
396 DB 00000000B
397 DB 00000000B
398 DB 11111100B
399 DB 11000000B
400 DB 11000000B
401 DB 00000000B
402 DB 00000000B
403;
404 DB 00000000B ;170 ª
405 DB 00000000B
406 DB 00000000B
407 DB 11111100B
408 DB 00001100B
409 DB 00001100B
410 DB 00000000B
411 DB 00000000B
412;
413 DB 11000011B ;171 «
414 DB 11000110B
415 DB 11001100B
416 DB 11011110B
417 DB 00110011B
418 DB 01100110B
419 DB 11001100B
420 DB 00001111B
421;
422 DB 11000011B ;172 ¬
423 DB 11000110B
424 DB 11001100B
425 DB 11011011B
426 DB 00110111B
427 DB 01101111B
428 DB 11001111B
429 DB 00000011B
430;
431 DB 00011000B ;173 ­
432 DB 00011000B
433 DB 00000000B
434 DB 00011000B
435 DB 00011000B
436 DB 00011000B
437 DB 00011000B
438 DB 00000000B
439;
440 DB 00000000B ;174 ®
441 DB 00110011B
442 DB 01100110B
443 DB 11001100B
444 DB 01100110B
445 DB 00110011B
446 DB 00000000B
447 DB 00000000B
448;
449 DB 00000000B ;175 ¯ *
450 DB 11000110B
451 DB 01111100B
452 DB 11000110B
453 DB 11000110B
454 DB 01111100B
455 DB 11000110B
456 DB 00000000B
457;
458 DB 00100010B ;176 °
459 DB 10001000B
460 DB 00100010B
461 DB 10001000B
462 DB 00100010B
463 DB 10001000B
464 DB 00100010B
465 DB 10001000B
466;
467 DB 01010101B ;177 ±
468 DB 10101010B
469 DB 01010101B
470 DB 10101010B
471 DB 01010101B
472 DB 10101010B
473 DB 01010101B
474 DB 10101010B
475;
476 DB 11011011B ;178 ²
477 DB 01110111B
478 DB 11011011B
479 DB 11101110B
480 DB 11011011B
481 DB 01110111B
482 DB 11011011B
483 DB 11101110B
484;
485 DB 00011000B ;179 ³
486 DB 00011000B
487 DB 00011000B
488 DB 00011000B
489 DB 00011000B
490 DB 00011000B
491 DB 00011000B
492 DB 00011000B
493;
494 DB 00011000B ;180 ´
495 DB 00011000B
496 DB 00011000B
497 DB 00011000B
498 DB 11111000B
499 DB 00011000B
500 DB 00011000B
501 DB 00011000B
502;
503 DB 00011000B ;181 µ
504 DB 00011000B
505 DB 11111000B
506 DB 00011000B
507 DB 11111000B
508 DB 00011000B
509 DB 00011000B
510 DB 00011000B
511;
512 DB 00110110B ;182 ¶
513 DB 00110110B
514 DB 00110110B
515 DB 00110110B
516 DB 11110110B
517 DB 00110110B
518 DB 00110110B
519 DB 00110110B
520;
521 DB 00000000B ;183 ·
522 DB 00000000B
523 DB 00000000B
524 DB 00000000B
525 DB 11111110B
526 DB 00110110B
527 DB 00110110B
528 DB 00110110B
529;
530 DB 00000000B ;184 ¸
531 DB 00000000B
532 DB 11111000B
533 DB 00011000B
534 DB 11111000B
535 DB 00011000B
536 DB 00011000B
537 DB 00011000B
538;
539 DB 00110110B ;185 ¹
540 DB 00110110B
541 DB 11110110B
542 DB 00000110B
543 DB 11110110B
544 DB 00110110B
545 DB 00110110B
546 DB 00110110B
547;
548 DB 00110110B ;186 º
549 DB 00110110B
550 DB 00110110B
551 DB 00110110B
552 DB 00110110B
553 DB 00110110B
554 DB 00110110B
555 DB 00110110B
556;
557 DB 00000000B ;187 »
558 DB 00000000B
559 DB 11111110B
560 DB 00000110B
561 DB 11110110B
562 DB 00110110B
563 DB 00110110B
564 DB 00110110B
565;
566 DB 00110110B ;188 ¼
567 DB 00110110B
568 DB 11110110B
569 DB 00000110B
570 DB 11111110B
571 DB 00000000B
572 DB 00000000B
573 DB 00000000B
574;
575 DB 00110110B ;189 ½
576 DB 00110110B
577 DB 00110110B
578 DB 00110110B
579 DB 11111110B
580 DB 00000000B
581 DB 00000000B
582 DB 00000000B
583;
584 DB 00011000B ;190 ¾
585 DB 00011000B
586 DB 11111000B
587 DB 00011000B
588 DB 11111000B
589 DB 00000000B
590 DB 00000000B
591 DB 00000000B
592;
593 DB 00000000B ;191 ¿
594 DB 00000000B
595 DB 00000000B
596 DB 00000000B
597 DB 11111000B
598 DB 00011000B
599 DB 00011000B
600 DB 00011000B
601;
602 DB 00011000B ;192 À
603 DB 00011000B
604 DB 00011000B
605 DB 00011000B
606 DB 00011111B
607 DB 00000000B
608 DB 00000000B
609 DB 00000000B
610;
611 DB 00011000B ;193 Á
612 DB 00011000B
613 DB 00011000B
614 DB 00011000B
615 DB 11111111B
616 DB 00000000B
617 DB 00000000B
618 DB 00000000B
619;
620 DB 00000000B ;194 Â
621 DB 00000000B
622 DB 00000000B
623 DB 00000000B
624 DB 11111111B
625 DB 00011000B
626 DB 00011000B
627 DB 00011000B
628;
629 DB 00011000B ;195 Ã
630 DB 00011000B
631 DB 00011000B
632 DB 00011000B
633 DB 00011111B
634 DB 00011000B
635 DB 00011000B
636 DB 00011000B
637;
638 DB 00000000B ;196 Ä
639 DB 00000000B
640 DB 00000000B
641 DB 00000000B
642 DB 11111111B
643 DB 00000000B
644 DB 00000000B
645 DB 00000000B
646;
647 DB 00011000B ;197 Å
648 DB 00011000B
649 DB 00011000B
650 DB 00011000B
651 DB 11111111B
652 DB 00011000B
653 DB 00011000B
654 DB 00011000B
655;
656 DB 00011000B ;198 Æ
657 DB 00011000B
658 DB 00011111B
659 DB 00011000B
660 DB 00011111B
661 DB 00011000B
662 DB 00011000B
663 DB 00011000B
664;
665 DB 00110110B ;199 Ç
666 DB 00110110B
667 DB 00110110B
668 DB 00110110B
669 DB 00110111B
670 DB 00110110B
671 DB 00110110B
672 DB 00110110B
673;
674 DB 00110110B ;200 È
675 DB 00110110B
676 DB 00110111B
677 DB 00110000B
678 DB 00111111B
679 DB 00000000B
680 DB 00000000B
681 DB 00000000B
682;
683 DB 00000000B ;201 É
684 DB 00000000B
685 DB 00111111B
686 DB 00110000B
687 DB 00110111B
688 DB 00110110B
689 DB 00110110B
690 DB 00110110B
691;
692 DB 00110110B ;202 Ê
693 DB 00110110B
694 DB 11110111B
695 DB 00000000B
696 DB 11111111B
697 DB 00000000B
698 DB 00000000B
699 DB 00000000B
700;
701 DB 00000000B ;203 Ë
702 DB 00000000B
703 DB 11111111B
704 DB 00000000B
705 DB 11110111B
706 DB 00110110B
707 DB 00110110B
708 DB 00110110B
709;
710 DB 00110110B ;204 Ì
711 DB 00110110B
712 DB 00110111B
713 DB 00110000B
714 DB 00110111B
715 DB 00110110B
716 DB 00110110B
717 DB 00110110B
718;
719 DB 00000000B ;205 Í
720 DB 00000000B
721 DB 11111111B
722 DB 00000000B
723 DB 11111111B
724 DB 00000000B
725 DB 00000000B
726 DB 00000000B
727;
728 DB 00110110B ;206 Î
729 DB 00110110B
730 DB 11110111B
731 DB 00000000B
732 DB 11110111B
733 DB 00110110B
734 DB 00110110B
735 DB 00110110B
736;
737 DB 00011000B ;207 Ï
738 DB 00011000B
739 DB 11111111B
740 DB 00000000B
741 DB 11111111B
742 DB 00000000B
743 DB 00000000B
744 DB 00000000B
745;
746 DB 00110110B ;208 Ð
747 DB 00110110B
748 DB 00110110B
749 DB 00110110B
750 DB 11111111B
751 DB 00000000B
752 DB 00000000B
753 DB 00000000B
754;
755 DB 00000000B ;209 Ñ
756 DB 00000000B
757 DB 11111111B
758 DB 00000000B
759 DB 11111111B
760 DB 00011000B
761 DB 00011000B
762 DB 00011000B
763;
764 DB 00000000B ;210 Ò
765 DB 00000000B
766 DB 00000000B
767 DB 00000000B
768 DB 11111111B
769 DB 00110110B
770 DB 00110110B
771 DB 00110110B
772;
773 DB 00110110B ;211 Ó
774 DB 00110110B
775 DB 00110110B
776 DB 00110110B
777 DB 00111111B
778 DB 00000000B
779 DB 00000000B
780 DB 00000000B
781;
782 DB 00011000B ;212 Ô
783 DB 00011000B
784 DB 00011111B
785 DB 00011000B
786 DB 00011111B
787 DB 00000000B
788 DB 00000000B
789 DB 00000000B
790;
791 DB 00000000B ;213 Õ
792 DB 00000000B
793 DB 00011111B
794 DB 00011000B
795 DB 00011111B
796 DB 00011000B
797 DB 00011000B
798 DB 00011000B
799;
800 DB 00000000B ;214 Ö
801 DB 00000000B
802 DB 00000000B
803 DB 00000000B
804 DB 00111111B
805 DB 00110110B
806 DB 00110110B
807 DB 00110110B
808;
809 DB 00110110B ;215 ×
810 DB 00110110B
811 DB 00110110B
812 DB 00110110B
813 DB 11111111B
814 DB 00110110B
815 DB 00110110B
816 DB 00110110B
817;
818 DB 00011000B ;216 Ø
819 DB 00011000B
820 DB 11111111B
821 DB 00011000B
822 DB 11111111B
823 DB 00011000B
824 DB 00011000B
825 DB 00011000B
826;
827 DB 00011000B ;217 Ù
828 DB 00011000B
829 DB 00011000B
830 DB 00011000B
831 DB 11111000B
832 DB 00000000B
833 DB 00000000B
834 DB 00000000B
835;
836 DB 00000000B ;218 Ú
837 DB 00000000B
838 DB 00000000B
839 DB 00000000B
840 DB 00011111B
841 DB 00011000B
842 DB 00011000B
843 DB 00011000B
844;
845 DB 11111111B ;219 Û
846 DB 11111111B
847 DB 11111111B
848 DB 11111111B
849 DB 11111111B
850 DB 11111111B
851 DB 11111111B
852 DB 11111111B
853;
854 DB 00000000B ;220 Ü
855 DB 00000000B
856 DB 00000000B
857 DB 00000000B
858 DB 11111111B
859 DB 11111111B
860 DB 11111111B
861 DB 11111111B
862;
863 DB 11110000B ;221 Ý
864 DB 11110000B
865 DB 11110000B
866 DB 11110000B
867 DB 11110000B
868 DB 11110000B
869 DB 11110000B
870 DB 11110000B
871;
872 DB 00001111B ;222 Þ
873 DB 00001111B
874 DB 00001111B
875 DB 00001111B
876 DB 00001111B
877 DB 00001111B
878 DB 00001111B
879 DB 00001111B
880;
881 DB 11111111B ;223 ß
882 DB 11111111B
883 DB 11111111B
884 DB 11111111B
885 DB 00000000B
886 DB 00000000B
887 DB 00000000B
888 DB 00000000B
889;
890 DB 00000000B ;224 à
891 DB 00000000B
892 DB 00111011B
893 DB 01101110B
894 DB 01100100B
895 DB 01101110B
896 DB 00111011B
897 DB 00000000B
898;
899 DB 00000000B ;225 á
900 DB 00111100B
901 DB 01100110B
902 DB 01111100B
903 DB 01100110B
904 DB 01111100B
905 DB 01100000B
906 DB 01100000B
907;
908 DB 00000000B ;226 â
909 DB 01111110B
910 DB 01100110B
911 DB 01100000B
912 DB 01100000B
913 DB 01100000B
914 DB 01100000B
915 DB 00000000B
916;
917 DB 00000000B ;227 ã
918 DB 01111111B
919 DB 00110110B
920 DB 00110110B
921 DB 00110110B
922 DB 00110110B
923 DB 00110110B
924 DB 00000000B
925;
926 DB 01111110B ;228 ä
927 DB 01100110B
928 DB 00110000B
929 DB 00011000B
930 DB 00110000B
931 DB 01100110B
932 DB 01111110B
933 DB 00000000B
934;
935 DB 00000000B ;229 å
936 DB 00000000B
937 DB 00111111B
938 DB 01101100B
939 DB 01101100B
940 DB 01101100B
941 DB 00111000B
942 DB 00000000B
943;
944 DB 00000000B ;230 æ
945 DB 00110011B
946 DB 00110011B
947 DB 00110011B
948 DB 00110011B
949 DB 00111110B
950 DB 00110000B
951 DB 01100000B
952;
953 DB 00000000B ;231 ç
954 DB 00111011B
955 DB 01101110B
956 DB 00001100B
957 DB 00001100B
958 DB 00001100B
959 DB 00001100B
960 DB 00000000B
961;
962 DB 01111110B ;232 è
963 DB 00011000B
964 DB 00111100B
965 DB 01100110B
966 DB 01100110B
967 DB 00111100B
968 DB 00011000B
969 DB 01111110B
970;
971 DB 00011100B ;233 é
972 DB 00110110B
973 DB 01100011B
974 DB 01111111B
975 DB 01100011B
976 DB 00110110B
977 DB 00011100B
978 DB 00000000B
979;
980 DB 00011100B ;234 ê
981 DB 00110110B
982 DB 01100011B
983 DB 01100011B
984 DB 00110110B
985 DB 00110110B
986 DB 01110111B
987 DB 00000000B
988;
989 DB 00001110B ;235 ë
990 DB 00011000B
991 DB 00001100B
992 DB 00111110B
993 DB 01100110B
994 DB 01100110B
995 DB 00111100B
996 DB 00000000B
997;
998 DB 00000000B ;236 ì
999 DB 00000000B
1000 DB 01111110B
1001 DB 11011011B
1002 DB 11011011B
1003 DB 01111110B
1004 DB 00000000B
1005 DB 00000000B
1006;
1007 DB 00000110B ;237 í
1008 DB 00001100B
1009 DB 01111110B
1010 DB 11011011B
1011 DB 11011011B
1012 DB 01111110B
1013 DB 01100000B
1014 DB 11000000B
1015;
1016 DB 00011100B ;238 î
1017 DB 01100000B
1018 DB 11000000B
1019 DB 11111100B
1020 DB 11000000B
1021 DB 01100000B
1022 DB 00011100B
1023 DB 00000000B
1024;
1025 DB 00111100B ;239 ï
1026 DB 01100110B
1027 DB 01100110B
1028 DB 01100110B
1029 DB 01100110B
1030 DB 01100110B
1031 DB 01100110B
1032 DB 00000000B
1033;
1034 DB 00000000B ;240 ð
1035 DB 01111110B
1036 DB 00000000B
1037 DB 01111110B
1038 DB 00000000B
1039 DB 01111110B
1040 DB 00000000B
1041 DB 00000000B
1042;
1043 DB 00011000B ;241 ñ
1044 DB 00011000B
1045 DB 01111110B
1046 DB 00011000B
1047 DB 00011000B
1048 DB 00000000B
1049 DB 01111110B
1050 DB 00000000B
1051;
1052 DB 00110000B ;242 ò
1053 DB 00011000B
1054 DB 00001100B
1055 DB 00011000B
1056 DB 00110000B
1057 DB 00000000B
1058 DB 01111110B
1059 DB 00000000B
1060;
1061 DB 00001100B ;243 ó
1062 DB 00011000B
1063 DB 00110000B
1064 DB 00011000B
1065 DB 00001100B
1066 DB 00000000B
1067 DB 01111110B
1068 DB 00000000B
1069;
1070 DB 00001110B ;244 ô
1071 DB 00011011B
1072 DB 00011011B
1073 DB 00011000B
1074 DB 00011000B
1075 DB 00011000B
1076 DB 00011000B
1077 DB 00011000B
1078;
1079 DB 00011000B ;245 õ
1080 DB 00011000B
1081 DB 00011000B
1082 DB 00011000B
1083 DB 00011000B
1084 DB 11011000B
1085 DB 11011000B
1086 DB 01110000B
1087;
1088 DB 00011000B ;246 ö
1089 DB 00011000B
1090 DB 00000000B
1091 DB 01111110B
1092 DB 00000000B
1093 DB 00011000B
1094 DB 00011000B
1095 DB 00000000B
1096;
1097 DB 00000000B ;247 ÷
1098 DB 01110110B
1099 DB 11011100B
1100 DB 00000000B
1101 DB 01110110B
1102 DB 11011100B
1103 DB 00000000B
1104 DB 00000000B
1105;
1106 DB 00111000B ;248 ø
1107 DB 01101100B
1108 DB 01101100B
1109 DB 00111000B
1110 DB 00000000B
1111 DB 00000000B
1112 DB 00000000B
1113 DB 00000000B
1114;
1115 DB 00000000B ;249 ù
1116 DB 00000000B
1117 DB 00000000B
1118 DB 00011000B
1119 DB 00011000B
1120 DB 00000000B
1121 DB 00000000B
1122 DB 00000000B
1123;
1124 DB 00000000B ;250 ú
1125 DB 00000000B
1126 DB 00000000B
1127 DB 00000000B
1128 DB 00011000B
1129 DB 00000000B
1130 DB 00000000B
1131 DB 00000000B
1132;
1133 DB 00001111B ;251 û
1134 DB 00001100B
1135 DB 00001100B
1136 DB 00001100B
1137 DB 11101100B
1138 DB 01101100B
1139 DB 00111100B
1140 DB 00011100B
1141;
1142 DB 01111000B ;252 ü
1143 DB 01101100B
1144 DB 01101100B
1145 DB 01101100B
1146 DB 01101100B
1147 DB 00000000B
1148 DB 00000000B
1149 DB 00000000B
1150;
1151 DB 01110000B ;253 ý
1152 DB 00011000B
1153 DB 00110000B
1154 DB 01100000B
1155 DB 01111000B
1156 DB 00000000B
1157 DB 00000000B
1158 DB 00000000B
1159.LIST
1160;
1161 DB 00000000B ;254 þ
1162 DB 00000000B
1163 DB 00111100B
1164 DB 00111100B
1165 DB 00111100B
1166 DB 00111100B
1167 DB 00000000B
1168 DB 00000000B
1169;
1170 DB 00000000B ;255
1171 DB 00000000B
1172 DB 00000000B
1173 DB 00000000B
1174 DB 00000000B
1175 DB 00000000B
1176 DB 00000000B
1177 DB 00000000B
1178;
1179 DW 865 ;TABLE ID
1180; include graftnom.inc
1181 DB "Nordic",0 ;LANGUAGE NAME, IN ASCIIZ FORMAT
1182;(the above "DB" is an example of the ENGLISH version of the above include file)
1183 IF ($-CSEG) MOD 16 ;IF NOT ALREADY ON 16 BYTE BOUNDARY
1184 DB (16-(($-CSEG) MOD 16)) DUP(0) ;ADD PADDING TO GET TO 16 BYTE BOUNDARY
1185 ENDIF
1186CSEG ENDS
1187 END
1188 \ No newline at end of file
diff --git a/v4.0/src/CMD/GRAFTABL/GRTABP.ASM b/v4.0/src/CMD/GRAFTABL/GRTABP.ASM
new file mode 100644
index 0000000..76503ac
--- /dev/null
+++ b/v4.0/src/CMD/GRAFTABL/GRTABP.ASM
@@ -0,0 +1,144 @@
1 PAGE 90,132 ;AN000;A2
2 TITLE GRTABP.SAL - GRAFTABL SYSTEM COMMAND LINE PARSER ;AN000;
3;****************** START OF SPECIFICATIONS *****************************
4; MODULE NAME: GRTABP.SAL
5;
6; DESCRIPTIVE NAME: Include the DOS system PARSER in the SEGMENT
7; configuration expected by the modules of GRAFTABL.
8;
9;FUNCTION: The common code of the DOS command line PARSER is optimized by
10; the setting of certain switches that cause the conditional
11; assembly of only the required portions of the common PARSER.
12; The segment registers are ASSUMED according to the type .COM.
13; The Common PARSER is then INCLUDEd.
14;
15; ENTRY POINT: SYSPARSE, near
16;
17; INPUT:
18; ES - has seg id of the SEGMENT
19; that contains the input control blocks,
20; defined below.
21;
22; DI - offset into ES of the PARMS INPUT BLOCK
23;
24; DS - has seg id of the SEGMENT
25; that contains the DOS input COMMAND
26; string, which is originally presented at 81h
27; in the PSP.
28;
29; SI - offset into DS of the text of the DOS input COMMAND string
30; as originally presented at 81H in the PSP.
31;
32; DX - zero
33;
34; CX - ordinal value, intially zero, updated on each subsequent call
35; to the value returned in CX on the previous call.
36;
37; CS - points to the segment containing the
38; INCLUDE PARSE.ASM statement
39;
40; DS - also points to the segment containing the INCLUDE
41; PARSE.ASM statement.
42;
43; EXIT-NORMAL: Output registers:
44; AX - return code:
45; RC_No_Error equ 0 ; No error
46; RC_EOL equ -1 ; End of command line
47;
48; DX - Offset into ES of the selected RESULT BLOCK.
49; BL - terminated delimiter code
50; CX - new operand ordinal
51; SI - set past scanned operand
52;
53; EXIT-ERROR: Output registers:
54; AX - return code:
55; RC_Too_Many equ 1 ; Too many operands
56; RC_Op_Missing equ 2 ; Required operand missing
57; RC_Not_In_SW equ 3 ; Not in switch list provided
58; RC_Not_In_Key equ 4 ; Not in keyword list provided
59; RC_Out_Of_Range equ 6 ; Out of range specified
60; RC_Not_In_Val equ 7 ; Not in value list provided
61; RC_Not_In_Str equ 8 ; Not in string list provided
62; RC_Syntax equ 9 ; Syntax error
63;
64; INTERNAL REFERENCES:
65; ROUTINES: SYSPARSE:near (INCLUDEd in PARSE.ASM)
66;
67; DATA AREAS: none
68;
69; EXTERNAL REFERENCES:
70; ROUTINES: none
71;
72; DATA AREAS: control blocks pointed to by input registers.
73;
74; NOTES:
75; This module should be processed with the SALUT preprocessor
76; with the re-alignment not requested, as:
77;
78; SALUT GRTABP,NUL,;
79;
80; To assemble these modules, the alphabetical or sequential
81; ordering of segments may be used.
82;
83; For LINK instructions, refer to the PROLOG of the main module,
84; GRTAB.SAL.
85;
86;****************** END OF SPECIFICATIONS *****************************
87 IF1 ;AN000;
88 %OUT COMPONENT=GRAFTABL, MODULE=GRTABP.SAL... ;AN000;
89 ENDIF ;AN000;
90; = = = = = = = = = = = =
91 HEADER <MACRO DEFINITION> ;AN000;
92 INCLUDE PATHMAC.INC ;AN006;
93; = = = = = = = = = = = =
94
95HEADER MACRO TEXT ;;AN000;
96.XLIST ;AN000;
97 SUBTTL TEXT ;AN000;
98.LIST ;AN000;
99 PAGE ;AN000;
100 ENDM ;;AN000;
101
102; = = = = = = = = = = = =
103 HEADER <SYSPARSE - SYSTEM COMMAND LINE PARSER> ;AN000;
104CSEG SEGMENT PARA PUBLIC ;AN000;
105 ASSUME CS:CSEG,DS:CSEG,ES:CSEG,SS:CSEG ;AN000;
106
107FARSW EQU 0 ;AN000;CALL THE PARSER BY NEAR CALL
108DATESW EQU 0 ;AN000;SUPPRESS DATE CHECKING
109TIMESW EQU 0 ;AN000;SUPPRESS TIME CHECKING
110FILESW EQU 0 ;AN000;SUPPRESS CHECKING FILE SPECIFICATION
111CAPSW EQU 0 ;AN000;SUPPRESS FILE TABLE CAPS
112CMPXSW EQU 0 ;AN000;SUPPRESS CHECKING COMPLEX LIST
113DRVSW EQU 0 ;AN000;SUPPRESS SUPPORT OF DRIVE ONLY FORMAT
114QUSSW EQU 0 ;AN000;SUPPRESS SUPPORT OF QUOTED STRING FORMAT
115NUMSW EQU 0 ;AN000;SUPPRESS CHECKING NUMERIC VALUE
116KEYSW EQU 0 ;AN000;SUPPRESS KEYWORD SUPPORT
117SWSW EQU 1 ;AN000;DO SUPPORT SWITCHES
118VAL1SW EQU 0 ;AN000;SUPPRESS SUPPORT OF VALUE DEFINITION 1
119VAL2SW EQU 0 ;AN000;SUPPRESS SUPPORT OF VALUE DEFINITION 2
120VAL3SW EQU 1 ;AN000;DO SUPPORT VALUE DEFINITION 3
121BASESW EQU 1 ;AN005;SPECIFY, PSDATA POINTED TO BY "DS"
122INCSW EQU 0 ;AN006;DO NOT INCLUDE PSDATA.INC
123
124
125; INCLUDE PSDATA.INC ;AN006; WORK AREA FOR PARSER
126.XLIST ;AN000;
127.XCREF ;AN000;
128 INCLUDE PSDATA.INC ;AN006; WORK AREA FOR PARSER
129.LIST ;AN000;
130.CREF ;AN000;
131 PATHLABL GRTABP ;AN006;
132
133 PUBLIC SYSPARSE ;AN000;SUBROUTINE ENTRY POINT
134
135; INCLUDE PARSE.ASM ;GENERATED CODE SUPPRESSED FROM LISTING ;AN000;
136.XLIST ;AN000;
137.XCREF ;AN000;
138 INCLUDE PARSE.ASM ;AN000;
139.LIST ;AN000;
140.CREF ;AN000;
141 PATHLABL GRTABP ;AN006;
142CSEG ENDS ;AN000;
143 END ;AN000;
144 \ No newline at end of file
diff --git a/v4.0/src/CMD/GRAFTABL/GRTABPAR.ASM b/v4.0/src/CMD/GRAFTABL/GRTABPAR.ASM
new file mode 100644
index 0000000..320161d
--- /dev/null
+++ b/v4.0/src/CMD/GRAFTABL/GRTABPAR.ASM
@@ -0,0 +1,538 @@
1 PAGE 90,132 ;AN000;A2
2 TITLE GRTABPAR.SAL - LOOK AT COMMAND LINE PARMS ;AN000;
3;****************** START OF SPECIFICATIONS *****************************
4; MODULE NAME: GRTABPAR.SAL
5
6; DESCRIPTIVE NAME: Handle the definition of the DOS command line parameters
7; and the interface to the DOS system PARSER.
8
9;FUNCTION: The static data areas are prescribed by the DOS system PARSER
10; to define the several parameters presented to GRAFTABL. These
11; data areas are passed to the PARSER, and its responses checked
12; to determine the nature of the user's specifications. Any errors
13; found in the user's parameters are defined in messages back
14; to the user.
15
16; ENTRY POINT: PARSER, near
17
18; INPUT: (DOS COMMAND LINE PARAMETERS)
19
20; [d:][path] GRAFTABL [cp|?|/STA|/STATUS]
21
22; WHERE
23; [d:][path] - Path where the GRAFTABL command resides.
24
25; [cp] - Codepage number to be loaded. If blank,
26; 437 is assumed
27
28; [?] - This requests a display of the parameters
29; supported by the GRAFTABL command.
30
31; [/STATUS] - (May be shortened to just /STA.) This
32; requests the current codepage already
33; loaded by a previous GRAFTABL, if any,
34; be displayed.
35
36; Upon entry to PARSER in this module,
37; "CURRENT_PARM" = offset to start of parm text in command string
38; "ORDINAL" = initialized to zero
39; PSP+81H = text of DOS command line parms string
40
41; EXIT-NORMAL: If a Code Page number was specified
42; BX = Offset to language table to be loaded
43; DX = Integer value of Code Page specified
44; If /STATUS (or /STA) was specified
45; BX = 0
46; If Question mark was specified
47; BX=-1
48
49; EXIT-ERROR: If there was any problem with the parms,
50; the question mark is assumed, and the appropriate
51; PARSE error message is displayed.
52; The Errorlevel code of "EXPAR" (3), meaning: "PARM ERROR",
53; set in "EXITFL", is requested to be returned to the user.
54
55; INTERNAL REFERENCES:
56; ROUTINES:
57; PARSE_ERROR:NEAR Display the appropriate Parse error message.
58
59; DATA AREAS:
60; The several parameter control blocks, defined by the System
61; PARSER interface, defining the GRAFTABL parameters.
62
63; EXTERNAL REFERENCES:
64; ROUTINES:
65; SENDMSG:NEAR Uses Msg Descriptor to drive message handler.
66; SYSPARSE:NEAR System Command Line Common Parser.
67
68; DATA AREAS:
69; TABLEUS:BYTE First table of Fonts, happens to be the USA version.
70; (Format of language Font defined in LANGUAGE STRUC.)
71; EXITFL:BYTE Errorlevel return code.
72; MSGNUM_PARSE:WORD Message descriptor for all parse errors.
73; ACTIVECPID:WORD Pointer to CPID entry of active entry, where the
74; CPID table is a set of 4 byte asciiz strings,
75; each defining the number of a Code Page font.
76
77; NOTES:
78; This module should be processed with the SALUT preprocessor
79; with the re-alignment not requested, as:
80
81; SALUT GRTABPAR,NUL
82
83; To assemble these modules, the alphabetical or sequential
84; ordering of segments may be used.
85
86; For LINK instructions, refer to the PROLOG of the main module,
87; GRTAB.SAL.
88
89; REVISION HISTORY:
90; A001 PTM 382 display "ACTIVE" OR "PREVIOUS" CP.
91; A002 PTM 474 Avoid duplicate switches
92; A003 PTM 538 Display parm in error
93
94;****************** END OF SPECIFICATIONS *****************************
95 IF1 ;AN000;
96 %OUT COMPONENT=GRAFTABL, MODULE=GRTABPAR.SAL... ;AN000;
97 ENDIF ;AN000;
98; = = = = = = = = = = = =
99 INCLUDE PATHMAC.INC ;AN006;
100; = = = = = = = = = = = =
101HEADER MACRO TEXT ;;AN000;
102.XLIST ;AN000;
103 SUBTTL TEXT ;AN000;
104.LIST ;AN000;
105 PAGE ;AN000;
106 ENDM ;;AN000;
107; = = = = = = = = = = = =
108; $SALUT (4,23,28,36) ;AN000;
109 EXTRN CPID_L:ABS ;AN000;BYTES PER CPID ENTRY
110
111MSG_DESC STRUC ;AN003;
112MSG_NUM DW ? ;AN003;MESSAGE NUMBER (TO AX)
113MSG_HANDLE DW ? ;AN003;HANDLE OF OUTPUT DEVICE (TO BX)
114MSG_SUBLIST DW ? ;AN003;POINTER TO SUBLIST (TO SI)
115MSG_COUNT DW ? ;AN003;SUBSTITUTION COUNT (TO CX)
116MSG_CLASS DW ? ;AN003;MESSAGE CLASS (IN HIGH BYTE, TO DH)
117 ; LOW BYTE HAS 0 (FUNCTION "NO INPUT", TO DL);AN003;
118MSG_DESC ENDS ;AN003;
119
120ONE_SUBS EQU 1 ;AN003;NUMBER OF VARIABLES
121
122SUBLIST STRUC ;AN000;
123SUB_SIZE DB ? ;AN003;SUBLIST SIZE (POINTER TO NEXT SUBLIST)
124SUB_RES DB ? ;AN003;RESERVED
125 ;NEXT FIELD IS TO BE USED AS A DOUBLE WORD ;AN003;
126SUB_VALUE DW ? ;AN003;TIME, DATE, OR PTR TO DATA ITEM
127SUB_VALUE_SEG DW ? ;AN003;SEG ID OF PTR
128 ;(ABOVE FIELD MUST BE FILLED AT EXECUTION TIME ;AN003;
129 ; IF THIS IS A .COM FILE) ;AN003;
130SUB_ID DB ? ;AN003;N OF %N
131SUB_FLAGS DB ? ;AN003;DATA TYPE FLAGS
132SUB_MAX_WIDTH DB ? ;AN003;MAXIMUM FIELD WIDTH (0=UNLIMITED)
133SUB_MIN_WIDTH DB ? ;AN003;MINIMUM FIELD WIDTH
134SUB_PAD_CHAR DB ? ;AN003;CHARACTER FOR PAD FIELD
135 ; CAN BE " ", "0" OR ",". ;AN003;
136 ; "," CAUSES INSERTION OF THE ACTIVE ;AN003;
137 ; THOUSANDS SEPARATOR BETWEEN EVERY 3 DIGITS. ;AN003;
138SUBLIST ENDS ;AN003;
139
140; LOCAL EQUATES
141ZERO EQU 0 ;AN000;COMPARAND FOR MISSING PARMS
142RETCODE_QUESTION EQU -1 ;AN000;VALUE IN BX, IF PARM=?
143EXPAR EQU 3 ;AN000;RETURN TO DOS, INVALID DOS COMND LINE PARMS
144CR EQU 13 ;AN000;CARRIAGE RETURN
145BLANK EQU " " ;AN002;AVOIDS DUPLICATES SWITCHES
146NUL EQU 0 ;AN003;ASCIIZ DELIMITER
147; = = = = = = = = = = = =
148; EXIT CODES FROM SYSPARSE (WHEN CY=0)
149
150SYSPRM_EX_OK EQU 0 ;AN000; no error
151SYSPRM_EX_MANY EQU 1 ;AN000; too many operands
152SYSPRM_EX_MISSING EQU 2 ;AN000; required operand missing
153SYSPRM_EX_NOT_SWLIST EQU 3 ;AN000; not in switch list provided
154SYSPRM_EX_NOT_KEYLIST EQU 4 ;AN000; not in keyword list provided
155SYSPRM_EX_RANGE EQU 6 ;AN000; out of range specified
156SYSPRM_EX_VALUE EQU 7 ;AN000; not in value list provided
157SYSPRM_EX_STRING EQU 8 ;AN000; not in string list provided
158SYSPRM_EX_SYNTAX EQU 9 ;AN000; syntax error
159SYSPRM_EX_EOL EQU -1 ;AN000; end of command line
160; = = = = = = = = = = = =
161 HEADER <STRUC - DEFINITIONS OF EXTERNAL CONTROL BLOCKS> ;AN000;
162LANGUAGE STRUC ;AN000;DEFINITION OF EACH LANGUAGE TABLE
163LANCHAR DB 1024 DUP(?) ;AN000;8 BYTES PER EACH OF 128 CHARACTERS
164LANID DW ? ;AN000;TWO BYTE CODEPAGE ID, TO MATCH
165 ; GRAFTABL CMD LINE PARM
166LANNAME DB 14 DUP(?) ;AN000;ASCIIZ STRING NAME OF LANGUAGE
167LANGUAGE ENDS ;AN000;
168; = = = = = = = = = = = =
169PSP STRUC ;AN000;
170 DB 80H DUP (?) ;AN000;SKIP OVER FIRST HALF OF PSP
171PSP_PARMLEN DB ? ;AN000;NUMBER OF BYTES IN DOS COMMAND LINE
172PSP_COMMAND DB 127 DUP(?) ;AN000;TEXT OF DOS COMMAND LINE
173PSP ENDS ;AN000;
174; = = = = = = = = = = = =
175 HEADER <PARSING WORKAREAS> ;AN000;
176; $SALUT (4,14,19,36) ;AN000;
177CSEG SEGMENT PARA PUBLIC ;AN000;
178 ASSUME CS:CSEG,DS:CSEG,ES:CSEG,SS:CSEG ;AN000;
179
180 EXTRN SENDMSG:NEAR ;AN000;USES MSG DESCRIPTOR TO DRIVE MESSAGE HANDLR
181 EXTRN SYSPARSE:NEAR ;AN000;SYSTEM COMMAND LINE PARSER
182
183 EXTRN TABLEUS:BYTE ;AN000;FIRST TABLE OF FONTS
184 EXTRN EXITFL:BYTE ;AN000;ERRORLEVEL RETURN CODE
185 EXTRN MSGNUM_PARSE:WORD ;AN000;MESSAGE DESCRIPTOR FOR ALL PARSE ERRORS
186 EXTRN SUBLIST_PARSE:WORD ;AN003;POINTS TO INVALID PARM
187 EXTRN ACTIVECPID:WORD ;AN000;POINTER TO CPID ENTRY OF ACTIVE ENTRY
188; = = = = = = = = = = = =
189
190CURRENT_PARM DW 81H ;AN000;POINTER INTO COMMAND OF NEXT OPERAND
191 PUBLIC CURRENT_PARM ;AN000;
192
193ORDINAL DW 0 ;AN000;ORDINAL NUMBER OF WHICH PARM TO PARSE
194 PUBLIC ORDINAL ;AN000;
195
196FIRST_TIME DB 0 ;AN000;INDICATES IF A PARM ALREADY FOUND
197PARSE_RESULT DW 0 ;AN000;TEMP, HOLDS BX TO BE RETURNED
198; If a Code Page number was specified
199; BX = Offset to language table to be loaded
200; DX = Integer value of Code Page specified
201; If /STATUS (or /STA) was specified
202; BX = 0
203; If Question mark was specified
204; BX=-1
205; = = = = = = = = = = = =
206 HEADER <DOS COMMAND LINE PARSER CONTROL BLOCKS> ;AN000;
207
208;INPUT PARAMETERS CONTROL BLOCK, POINTED TO BY ES:DI WHEN CALLING PARSER
209
210 PUBLIC PARMS ;AN000;LET LINK MAKE PARMS BLOCK ADDRESSABLE
211PARMS LABEL BYTE ;AN000;PARMS CONTROL BLOCK
212 DW PARMSX ;AN000;POINTER TO PARMS EXTENSION
213 DB 0 ;AN000; NUMBER OF STRINGS (0, 1, 2)
214 ; NEXT LIST WOULD BE EXTRA DELIM LIST
215 ; (,& WHITESPACE ALWAYS)
216 ; NEXT LIST WOULD BE EXTRA END OF LINE LIST
217 ; (CR,LF,0 ALWAYS)
218
219;SYSTEM PARSER PARAMETER EXTENSION CONTROL BLOCK
220PARMSX LABEL BYTE ;AN000;PARMS EXTENSION CONTROL BLOCK
221 DB 0,1 ;AN000; MIN, MAX POSITIONAL OPERANDS ALLOWED
222 DW CONTROL_POS ;AN000; DESCRIPTION OF POSITIONAL 1
223
224 DB 1 ;AN000; MAX SWITCH OPERANDS ALLOWED
225 DW CONTROL_SW ;AN000; DESCRIPTION OF SWITCH 1
226
227 DB 0 ;AN000; MAX KEYWORD OPERANDS ALLOWED
228 ; THERE IS NO CONTROL BLOCK
229 ; DEFINING KEYWORDS
230
231; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
232 HEADER <POSITIONAL PARM DESCRIPTOR BLOCK> ;AN000;
233;PARSER CONTROL BLOCK DEFINING THE ONLY POSITIONAL PARAMETER, OPTIONAL
234
235;FIRST POSITIONAL PARAMETER IS:
236; [cp|?] THE CODEPAGE NUMBER, OR THE QUESTION MARK
237
238 PUBLIC CONTROL_POS ;AN000;LET LINK MAKE THIS ADDRESSABLE
239CONTROL_POS LABEL BYTE ;AN000;FIRST POSITIONAL DESCRIPTOR FOR FILESPEC,
240 ; OPTIONAL
241 DW 2001H ;AN000; CONTROLS TYPE MATCHED
242 ; SELECTED BITS: "SIMPLE STRING" AND "OPTIONAL"
243
244 ; 8000H=NUMERIC VALUE, (VALUE LIST WILL BE CHECKED)
245 ; 4000H=SIGNED NUMERIC VALUE (VALUE LIST WILL BE
246 ; CHECKED)
247 ; 2000H=SIMPLE STRING(VALUE LIST WILL BE CHECKED)
248 ; 1000H=DATE STRING (VALUE LIST WON'T BE CHECKED)
249 ; 0800H=TIME STRING (VALUE LIST WON'T BE CHECKED)
250 ; 0400H=COMPLEX LIST (VALUE LIST WON'T BE CHECKED)
251 ; 0200H=FILE SPEC (VALUE LIST WON'T BE CHECKED)
252 ; 0100H=DRIVE ONLY (VALUE LIST WON'T BE CHECKED)
253 ; 0080H=QUOTED STRING (VALUE LIST WON'T BE CHECKED)
254 ; 0010H=IGNORE ":" AT END IN MATCH
255 ; 0002H=REPEATS ALLOWED
256 ; 0001H=OPTIONAL
257
258 DW 0000H ;AN000;FUNCTION_FLAGS ("NO CAPS")
259 ; 0001H=CAP RESULT BY FILE TABLE
260 ; 0002H=CAP RESULT BY CHAR TABLE
261 ; 0010H=REMOVE ":" AT END
262 DW RESULT ;AN000; RESULT BUFFER
263 DW VALS ;AN000; VALUE LISTS
264 DB 0 ;AN000; NUMBER OF KEYWORD/SWITCH SYNONYMS
265 ; IN FOLLOWING LIST
266
267;VALUE CONTROL BLOCK FOR THE POSITIONAL PARAMETERS
268VALS DB 3 ;AN000;NUMBER OF VALS DEFINITIONS (0-3)
269 DB 0 ;AN000;NUMBER OF RANGES (NONE)
270 DB 0 ;AN000;NUMBER OF NUMERIC CHOICES (NONE)
271 DB 6 ;AN000;NUMBER OF CHOICE STRINGS
272
273
274;THE ORDER OF THESE VALUE DEFINITIONS IS SIGNIFICANT. THEIR ORDER MUST
275;MATCH THE ORDER IN WHICH THE CORRESPONDING FONT TABLE MODULES ARE
276;LINKED TOGETHER. THUE THE "VALUE RETURNED" OF 1 MEANS THE FIRST LINKED
277;FONT TABLE, THE VALUE OF 5 MEANS THE FIFTH LINKED FONT TABLE, ETC.
278
279VAL_437 EQU 1 ;AN000;VALUE RETURNED
280 DB VAL_437 ;AN000; FOR:
281 DW S437 ;AN000;SPECIFIC CHOICE IF STRING
282
283VAL_850 EQU 2 ;AN000;VALUE RETURNED
284 DB VAL_850 ;AN000; FOR:
285 DW S850 ;AN000;SPECIFIC CHOICE IF STRING
286
287VAL_860 EQU 3 ;AN000;VALUE RETURNED
288 DB VAL_860 ;AN000; FOR:
289 DW S860 ;AN000;SPECIFIC CHOICE IF STRING
290
291VAL_863 EQU 4 ;AN000;VALUE RETURNED
292 DB VAL_863 ;AN000; FOR:
293 DW S863 ;AN000;SPECIFIC CHOICE IF STRING
294
295VAL_865 EQU 5 ;AN000;VALUE RETURNED
296 DB VAL_865 ;AN000; FOR:
297 DW S865 ;AN000;SPECIFIC CHOICE IF STRING
298
299VAL_QUESTION EQU 6 ;AN000;VALUE RETURNED
300 DB VAL_QUESTION ;AN000; FOR:
301 DW SQU ;AN000;SPECIFIC CHOICE IF STRING
302
303; SET OF ASCIIZ STRINGS, DEFINING THE POSITIONAL PARAMETER
304S437 DB "437",0 ;AN000;USA
305S850 DB "850",0 ;AN000;MULTI-LINGUAL
306S860 DB "860",0 ;AN000;PORTUGUESE
307S863 DB "863",0 ;AN000;CANADIAN FRENCH
308S865 DB "865",0 ;AN000;NORDIC
309SQU DB "?",0 ;AN000;
310
311;RESULTS CONTROL BLOCK FOR THE POSITIONAL PARAMETER, AND SWITCH PARAMETER
312RESULT LABEL BYTE ;AN000; BELOW FILLED IN FOR DEFAULTS
313 DB 3 ;AN000; TYPE RETURNED: 0=RESERVED,
314 ; 1=NUMBER, 2=LIST INDEX,
315 ; 3=STRING, 4=COMPLEX,
316 ; 5=FILESPEC, 6=DRIVE
317 ; 7=DATE, 8=TIME
318 ; 9=QUOTED STRING
319RESULT_TAG DB 0FFH ;AN000; MATCHED ITEM TAG
320RESULT_SYN DW 0 ;AN000;POINTER TO SYNONYM
321
322RESULT_PTR DD ? ;AN000;OFFSET OF STRING VALUE
323
324; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
325 HEADER <SWITCH PARM DESCRIPTOR BLOCK> ;AN000;
326;PARSER CONTROL BLOCK DEFINING THE ONLY SWITCH, OPTIONAL
327
328;THE SWITCH IS "/STA" OR "/STATUS". WHEN REQUESTED, IT MEANS TO IDENTIFY
329;WHAT CODEPAGE IS CURRENTLY SUPPORTED BY THE PREVIOUS GRAFTABL, IF ANY.
330 PUBLIC CONTROL_SW ;AN000;LET LINK MAKE THIS ADDRESSABLE
331CONTROL_SW LABEL BYTE ;AN000;SWITCH DESCRIPTOR FOR /STA
332 DW 0001H ;AN000; CONTROLS TYPE MATCHED
333 ;SELECTED BITS: "OPTIONAL"
334 ; 8000H=NUMERIC VALUE, (VALUE LIST WILL BE CHECKED)
335 ; 4000H=SIGNED NUMERIC VALUE (VALUE LIST WILL BE
336 ; CHECKED)
337 ; 2000H=SIMPLE STRING(VALUE LIST WILL BE CHECKED)
338 ; 1000H=DATE STRING (VALUE LIST WON'T BE CHECKED)
339 ; 0800H=TIME STRING (VALUE LIST WON'T BE CHECKED)
340 ; 0400H=COMPLEX LIST (VALUE LIST WON'T BE CHECKED)
341 ; 0200H=FILE SPEC (VALUE LIST WON'T BE CHECKED)
342 ; 0100H=DRIVE ONLY (VALUE LIST WON'T BE CHECKED)
343 ; 0080H=QUOTED STRING (VALUE LIST WON'T BE CHECKED)
344 ; 0010H=IGNORE ":" AT END IN MATCH
345 ; 0002H=REPEATS ALLOWED
346 ; 0001H=OPTIONAL
347
348 DW 0000H ;AN000;FUNCTION_FLAGS ("NO CAPS")
349 ; 0001H=CAP RESULT BY FILE TABLE
350 ; 0002H=CAP RESULT BY CHAR TABLE
351 ; 0010H=REMOVE ":" AT END
352
353 DW RESULT ;AN000; RESULT BUFFER
354 ;(USE SAME RESULT BUF AS DID POSITIONAL PARM)
355 DW NOVALS ;AN000; VALUE LISTS
356 DB 2 ;AN000; NUMBER OF KEYWORD/SWITCH SYNONYMS
357 ; IN FOLLOWING LIST
358SW_STA DB "/STA",0 ;AN000; IF n >0, KEYWORD 1
359SW_STATUS DB "/STATUS",0 ;AN000;SECOND KEYWORD
360
361;VALUE CONTROL BLOCK FOR THE SWITCHES
362NOVALS LABEL BYTE ;AN000;
363 DB 0 ;AN000; NUMBER OF VALUE DEFINITIONS (0 - 3)
364; = = = = = = = = = = = =
365 PATHLABL GRTABPAR ;AN006;
366 HEADER <PARSER - ASK SYSPARM TO DECODE PARAMETERS> ;AN000;
367; $SALUT (4,4,9,36) ;AN000;
368PARSER PROC NEAR ;AN000;
369 PUBLIC PARSER ;AN000;
370
371;INPUT: "CURRENT_PARM" = OFFSET TO NEXT PARM IN COMMAND STRING
372; "ORDINAL" = COUNT OF NEXT PARM TO PARSE
373; PSP+81H = TEXT OF DOS COMMAND LINE PARMS STRING
374;OUTPUT: IF A CODEPAGE NUMBER WAS SPECIFIED
375; BX = OFFSET TO LANGUAGE TABLE TO BE LOADED
376; DX = INTEGER VALUE OF CODEPAGE SPECIFIED
377; IF /STATUS WAS SPECIFIED
378; BX = 0
379; IF QUESTION MARK WAS SPECIFIED
380; BX=-1
381
382;IF THERE WAS ANY PROBLEM WITH THE PARMS, THE QUESTION MARK IS ASSUMED,
383;AND "EXITFL" SET TO "EXPAR" TO INDICATE PARM ERROR.
384
385;IT A CP IS SPECIFIED, A STATUS REPORT IS ALWAYS GIVEN TO SAY WHAT WHAT
386;THERE PREVIOUSLY, SO IF THE USER SPECIFIED A CP AND THE /STATUS SWITCH,
387;THEN THE /STATUS DOES NOTHING BEYOND WHAT WOULD HAVE BEEN DONE ALREADY
388;WITH JUST THE CP SPECIFICATION. I ALWAYS REPORT STATUS. THE ONLY
389;REASON TO HAVE /STATUS IS TO BE ABLE TO SEE WHAT IS THERE ALREADY
390;WITHOUT INVOKING THE DEFAULT OF 437 (USA) BY NOT SPECIFYING A CP.
391; = = = = = = = = = = = =
392
393; $SEARCH COMPLEX ;AN000;LOOP THRU COMMAND LINE
394 JMP SHORT $$SS1
395$$DO1:
396 ;LOOKING AT RET CODE IN AX SET BY SYSPARSE
397 CMP AX,ZERO ;AN000;WERE THERE ANY ERRORS?
398; $EXITIF NE ;AN000;HAD A PROBLEM
399 JE $$IF1
400 CALL PARSE_ERROR ;AN000;DISPLAY REASON FOR ERROR
401
402; $ORELSE LONG ;AN000;SINCE NO PROBLEM, SO FAR
403 JMP $$SR1
404$$IF1:
405 MOV ORDINAL,CX ;AN000;SAVE UPDATED COUNT
406 CMP FIRST_TIME,ZERO ;AN000;DO I HAVE A PARM YET?
407; $IF E ;AN000;NOT YET, LOOK AT THIS ONE JUST FOUND
408 JNE $$IF4
409 MOV CURRENT_PARM,SI ;AN000;REMEMBER HOW FAR I GOT
410 CMP RESULT_SYN,ZERO ;AN000;WAS POSITIONAL PARM SPECIFIED?
411; $IF E ;AN000;IF POSITIONAL PARM SPECIFIED,
412 JNE $$IF5
413 MOV CL,RESULT_TAG ;AN000;GET ID OF SPECIFIED PARM
414 XOR CH,CH ;AN000;CLEAR HIGH BYTE
415 CMP CL,VAL_QUESTION ;AN000;WAS "?" SPECIFIED?
416; $IF E ;AN000;IF "?" SPECIFIED
417 JNE $$IF6
418 MOV BX,RETCODE_QUESTION ;AN000;INDICATE THAT "?" SPECIFIED
419; $ELSE ;AN000;SINCE "?" NOT SPECIFIED
420 JMP SHORT $$EN6
421$$IF6:
422 LEA BX,TABLEUS ;AN000;GET WHERE FIRST CODEPAGE STARTS, USING CX
423 ; AS A COUNTER, STEP THRU THE LANGUAGE TABLES
424 ; UNTIL GETTING TO THE SPECIFIED ONE
425; $DO COMPLEX ;AN000;
426 JMP SHORT $$SD8
427$$DO8:
428 ADD BX,TYPE LANGUAGE ;AN000;POINT TO NEXT TABLE
429 ADD ACTIVECPID,CPID_L ;AN000;SELECT NEXT CPID ENTRY
430; $STRTDO ;AN000;
431$$SD8:
432; $ENDDO LOOP ;AN000;DECREMENT INDEX
433 LOOP $$DO8
434 ;BX-OFFSET TO LANGUAGE TABLE
435 ; INDICATED BY POSITIONAL PARM
436; $ENDIF ;AN000;"?" SPECIFIED?
437$$EN6:
438; $ELSE ;AN000;SINCE NOT POSITIONAL PARM SPECIFIED
439 JMP SHORT $$EN5
440$$IF5:
441 ;RESULT_SYN POINTS TO A SWITCH
442 XOR BX,BX ;AN000; MUST HAVE BEEN THE SWITCH, /STATUS
443 MOV SW_STA,BLANK ;AN002;AVOID THE DUPLICATION OF THIS SWITCH
444 MOV SW_STATUS,BLANK ;AN002;AVOID THE DUPLICATION OF THIS SWITCH
445; $ENDIF ;AN000;POSITIONAL?
446$$EN5:
447 INC FIRST_TIME ;AN000;INDICATE A PARM HAS BEEN FOUND
448; $ELSE ;AN000;SINCE ALREADY HAVE A PARM
449 JMP SHORT $$EN4
450$$IF4:
451 PUSH SI ;AN003;SAVE NEW INDEX TO COMMAND LINE
452 CALL PARSE_ERROR ;AN000;FUSS ABOUT TOO MANY PARMS
453
454 POP CURRENT_PARM ;AN000;REMEMBER HOW FAR I GOT
455
456; $ENDIF ;AN000;ALREADY HAVE A PARM?
457$$EN4:
458 MOV PARSE_RESULT,BX ;AN000;SAVE THE RESULT OF THIS PARSE
459; $STRTSRCH ;AN000;
460$$SS1:
461 LEA DI,PARMS ;AN000; ES:DI = PARSE CONTROL DEFINITON
462 MOV SI,CURRENT_PARM ;AN000; DS:SI = COMMAND STRING, NEXT PARM
463 XOR DX,DX ;AN000; RESERVED, INIT TO ZERO
464 MOV CX,ORDINAL ;AN000; OPERAND ORDINAL, INITIALLY ZERO
465 CALL SYSPARSE ;AN000;LOOK AT DOS PARMS
466 ; AX=EXIT CODE
467 ; BL=TERMINATED DELIMETER CODE
468 ; CX=NEW OPERAND ORDINAL
469 ; SI=SET TO PAST SCANNED OPERAND
470 ; DX=SELECTED RESULT BUFFER
471 CMP AX,SYSPRM_EX_EOL ;AN000; IS THAT THE END OF THE PARMS?
472 ;IF NOT, LOOP BACK AND FIND OUT
473 ; WHAT THAT PARM IS
474; $ENDLOOP E ;AN000;END OF LIST
475 JNE $$DO1
476 CMP FIRST_TIME,ZERO ;AN000;FIND ANYTHING YET?
477; $IF E ;AN000;IF NO PARM SPECIFIED
478 JNE $$IF18
479 LEA BX,TABLEUS ;AN000;SPECIFY 437 (USA) AS DEFAULT
480; $ELSE ;AN000;SINCE A PARM WAS FOUND
481 JMP SHORT $$EN18
482$$IF18:
483 MOV BX,PARSE_RESULT ;AN000;REMEMBER PARM ALREADY FOUND
484; $ENDIF ;AN000;
485$$EN18:
486 ;BX=-1, "?"; BX=0, "/STATUS";BX>0, CP TABLE
487 CMP BX,ZERO ;AN000;WAS A CP TABLE FOUND?
488; $IF A ;AN000;IF A CP TABLE FOUND
489 JNA $$IF21
490 MOV DX,[BX].LANID ;AN000;FETCH THE TWO CHAR ID FROM TABLE
491; $ENDIF ;AN000;
492$$IF21:
493; $ENDSRCH ;AN000;FINISHED WITH DOS COMMAND LINE
494$$SR1:
495 RET ;AN000;RETURN TO CALLER
496PARSER ENDP ;AN000;
497; = = = = = = = = = = = = ;AN000;
498 HEADER <PARSE_ERROR - DISPLAY REASON FOR PARSE ERROR> ;AN000;
499PARSE_ERROR PROC NEAR ;AN000;
500;INPUT: "FIRST_TIME" - IF NON-ZERO, FORCE ERROR CODE TO "TOO MANY PARMS"
501; AX - ERROR NUMBER RETURNED FROM PARSE.
502; SI - OFFSET INTO COMMAND OF FIRST BYTE BEYOND PARM IN ERROR
503; "CURRENT_PARM" - OFFSET INTO COMMAND OF WHERE TO START LOOKING FOR PARM
504;OUTPUT: APPROPRIATE ERROR MESSAGE IS DISPLAYED.
505; BX IS SET TO PRETEND THAT THE "?" WAS SPECIFIED.
506; "EXITFL" SET TO "EXPAR" TO INDICATE PARM ERROR.
507; = = = = = = = = = = = =
508
509 CMP FIRST_TIME,ZERO ;AN000;ANY PARMS FOUND YET?
510; $IF NE ;AN000;IF PARM ALREADY FOUND
511 JE $$IF24
512 MOV AX,SYSPRM_EX_MANY ;AN000;CHANGE RETURN CODE TO "TOO MANY PARMS"
513; $ENDIF ;AN000;PARMS FOUND?
514$$IF24:
515 MOV MSGNUM_PARSE,AX ;AN000;PASS MESSAGE NUMBER TO DESCRIPTOR
516 MOV AX,CURRENT_PARM ;AN003;GET POINTER TO START OF BAD PARM
517 CMP SI,AX ;AN003;HAS THE INDEX TO COMMAND LINE MOVED?
518; $IF NE ;AN003;YES, THERE IS A FAULTY PARM
519 JE $$IF26
520 MOV BYTE PTR [SI],NUL ;AN003;DELIMIT THE BAD PARM
521 MOV SUBLIST_PARSE.SUB_VALUE,AX ;AN000;POINT SUBLIST TO BAD PARM
522
523 MOV MSGNUM_PARSE.MSG_SUBLIST,OFFSET SUBLIST_PARSE ;AN003;POINT TO SUBLIST
524 MOV MSGNUM_PARSE.MSG_COUNT,ONE_SUBS ;AN003;SET COUNT OF SUBLISTS TO ONE
525; $ENDIF ;AN003;INDEX MOVED?
526$$IF26:
527 LEA DI,MSGNUM_PARSE ;AN000;PASS MESSAGE DESCRIPTOR
528 CALL SENDMSG ;AN000;DISPLAY ERROR MESSAGE
529
530 MOV BX,RETCODE_QUESTION ;AN000;INDICATE THAT "?" SPECIFIED
531 MOV EXITFL,EXPAR ;AN000;ERRORLEVEL CODE TO "PARM ERROR"
532 RET ;AN000;RETURN TO CALLER
533PARSE_ERROR ENDP ;AN000;
534; = = = = = = = = = = = =
535 PATHLABL GRTABPAR ;AN006;
536CSEG ENDS ;AN000;
537 END ;AN000;
538 \ No newline at end of file
diff --git a/v4.0/src/CMD/GRAFTABL/GRTABPO.ASM b/v4.0/src/CMD/GRAFTABL/GRTABPO.ASM
new file mode 100644
index 0000000..e81e54b
--- /dev/null
+++ b/v4.0/src/CMD/GRAFTABL/GRTABPO.ASM
@@ -0,0 +1,1316 @@
1 PAGE 90,132 ;A2
2 TITLE GRTABPO - PORTUGUESE CHARACTER SET FOR GRAFTABL COMMAND
3;This module is to be linked with the OBJ of GRTAB.SAL. Refer to the
4;Prolog of that module for more complete description.
5
6;This module contains the binary description of the pixels that are used
7;in graphics mode to define the Portuguese character set when loaded to
8;interrupt 1FH by the GRAFTABL command in DOS 3.3.
9 IF1
10 %OUT GRTABPO.ASM...
11 ELSE
12; %OUT GRTABPO.ASM...
13 ENDIF
14CSEG SEGMENT PARA PUBLIC
15TABLEPO EQU THIS BYTE
16 PUBLIC TABLEPO
17
18;(note: the display of the character to the right of the decimal number
19;value of this location is not necessarily the graphic that these pixels
20;will produce. The displayed character is from the USA character set, and
21;does not represent the language character set generated by this table.)
22
23;These fonts are as defined in the Portugal Code Page = 860.
24
25; 128 €
26 DB 01111000B
27 DB 11001100B
28 DB 11000000B
29 DB 11001100B
30 DB 01111000B
31 DB 00011000B
32 DB 00001100B
33 DB 01111000B
34
35; 129
36 DB 00000000B
37 DB 11001100B
38 DB 00000000B
39 DB 11001100B
40 DB 11001100B
41 DB 11001100B
42 DB 01110110B
43 DB 00000000B
44.XLIST
45
46; 130 ‚
47 DB 00011100B
48 DB 00000000B
49 DB 01111000B
50 DB 11001100B
51 DB 11111100B
52 DB 11000000B
53 DB 01111000B
54 DB 00000000B
55
56; 131 ƒ
57 DB 01111110B
58 DB 10000001B
59 DB 00111100B
60 DB 00000110B
61 DB 00111110B
62 DB 01100110B
63 DB 00111011B
64 DB 00000000B
65
66; 132 „
67 DB 01110010B
68 DB 10001100B
69 DB 01111000B
70 DB 00001100B
71 DB 01111100B
72 DB 11001100B
73 DB 01110110B
74 DB 00000000B
75
76; 133 …
77 DB 11100000B
78 DB 00000000B
79 DB 01111000B
80 DB 00001100B
81 DB 01111100B
82 DB 11001100B
83 DB 01110110B
84 DB 00000000B
85
86; 134 †
87 DB 00011100B
88 DB 00000000B
89 DB 00110000B
90 DB 01111000B
91 DB 11001100B
92 DB 11111100B
93 DB 11001100B
94 DB 00000000B
95
96; 135 ‡
97 DB 00000000B
98 DB 00000000B
99 DB 01111000B
100 DB 11000000B
101 DB 11000000B
102 DB 01111100B
103 DB 00011000B
104 DB 00111000B
105
106; 136 ˆ
107 DB 01111110B
108 DB 10000001B
109 DB 00111100B
110 DB 01100110B
111 DB 01111110B
112 DB 01100000B
113 DB 00111100B
114 DB 00000000B
115
116; 137 ‰
117 DB 01111110B
118 DB 10000001B
119 DB 01111110B
120 DB 00110000B
121 DB 00111100B
122 DB 00110000B
123 DB 01111110B
124 DB 00000000B
125
126; 138 Š
127 DB 11100000B
128 DB 00000000B
129 DB 01111000B
130 DB 11001100B
131 DB 11111100B
132 DB 11000000B
133 DB 01111000B
134 DB 00000000B
135
136; 139 ‹
137 DB 00011100B
138 DB 00000000B
139 DB 01111000B
140 DB 00110000B
141 DB 00110000B
142 DB 00110000B
143 DB 01111000B
144 DB 00000000B
145
146; 140 Œ
147 DB 01111100B
148 DB 10000010B
149 DB 00000000B
150 DB 01111100B
151 DB 11000110B
152 DB 11000110B
153 DB 01111100B
154 DB 00000000B
155
156; 141
157 DB 11100000B
158 DB 00000000B
159 DB 01110000B
160 DB 00110000B
161 DB 00110000B
162 DB 00110000B
163 DB 01111000B
164 DB 00000000B
165
166; 142 Ž
167 DB 01110110B
168 DB 11011100B
169 DB 00110000B
170 DB 01111000B
171 DB 11001100B
172 DB 11111100B
173 DB 11001100B
174 DB 00000000B
175
176; 143
177 DB 01111000B
178 DB 10000100B
179 DB 00110000B
180 DB 01111000B
181 DB 11001100B
182 DB 11111100B
183 DB 11001100B
184 DB 00000000B
185
186; 144
187 DB 00011100B
188 DB 00000000B
189 DB 11111100B
190 DB 01100000B
191 DB 01111000B
192 DB 01100000B
193 DB 11111100B
194 DB 00000000B
195
196; 145 ‘
197 DB 11100000B
198 DB 00000000B
199 DB 00110000B
200 DB 01111000B
201 DB 11001100B
202 DB 11111100B
203 DB 11001100B
204 DB 00000000B
205
206; 146 ’
207 DB 11100000B
208 DB 00000000B
209 DB 11111100B
210 DB 01100000B
211 DB 01111000B
212 DB 01100000B
213 DB 11111100B
214 DB 00000000B
215
216; 147 “
217 DB 01111000B
218 DB 11001100B
219 DB 00000000B
220 DB 01111000B
221 DB 11001100B
222 DB 11001100B
223 DB 01111000B
224 DB 00000000B
225
226; 148 ”
227 DB 01101100B
228 DB 11011000B
229 DB 00000000B
230 DB 01111000B
231 DB 11001100B
232 DB 11001100B
233 DB 01111000B
234 DB 00000000B
235
236; 149 •
237 DB 00000000B
238 DB 11100000B
239 DB 00000000B
240 DB 01111000B
241 DB 11001100B
242 DB 11001100B
243 DB 01111000B
244 DB 00000000B
245
246; 150 –
247 DB 00011100B
248 DB 00000000B
249 DB 11001100B
250 DB 11001100B
251 DB 11001100B
252 DB 11001100B
253 DB 01111000B
254 DB 00000000B
255
256; 151 —
257 DB 00000000B
258 DB 11100000B
259 DB 00000000B
260 DB 11001100B
261 DB 11001100B
262 DB 11001100B
263 DB 01110110B
264 DB 00000000B
265
266; 152 ˜
267 DB 11100000B
268 DB 00000000B
269 DB 01111000B
270 DB 00110000B
271 DB 00110000B
272 DB 00110000B
273 DB 01111000B
274 DB 00000000B
275
276; 153 ™
277 DB 01110110B
278 DB 11011100B
279 DB 00000000B
280 DB 01111100B
281 DB 11000110B
282 DB 11000110B
283 DB 01111100B
284 DB 00000000B
285
286; 154 š
287 DB 11001100B
288 DB 00000000B
289 DB 11001100B
290 DB 11001100B
291 DB 11001100B
292 DB 11001100B
293 DB 01111000B
294 DB 00000000B
295
296; 155 ›
297 DB 00011000B
298 DB 00011000B
299 DB 01111110B
300 DB 11000000B
301 DB 11000000B
302 DB 01111110B
303 DB 00011000B
304 DB 00011000B
305
306; 156 œ
307 DB 00111000B
308 DB 01101100B
309 DB 01100100B
310 DB 11110000B
311 DB 01100000B
312 DB 11100110B
313 DB 11111100B
314 DB 00000000B
315
316; 157 *
317 DB 11100000B
318 DB 00000000B
319 DB 11001100B
320 DB 11001100B
321 DB 11001100B
322 DB 11001100B
323 DB 01111000B
324 DB 00000000B
325
326; 158 ž
327 DB 11111000B
328 DB 11001100B
329 DB 11001100B
330 DB 11111010B
331 DB 11000110B
332 DB 11001111B
333 DB 11000110B
334 DB 11000111B
335
336; 159 Ÿ *
337 DB 00011110B
338 DB 00000000B
339 DB 00000000B
340 DB 01111100B
341 DB 11000110B
342 DB 11000110B
343 DB 01111100B
344 DB 00000000B
345
346; 160  
347 DB 00011100B
348 DB 00000000B
349 DB 01111000B
350 DB 00001100B
351 DB 01111100B
352 DB 11001100B
353 DB 01110110B
354 DB 00000000B
355
356; 161 ¡
357 DB 00011100B
358 DB 00000000B
359 DB 01110000B
360 DB 00110000B
361 DB 00110000B
362 DB 00110000B
363 DB 01111000B
364 DB 00000000B
365
366; 162 ¢
367 DB 00000000B
368 DB 00011100B
369 DB 00000000B
370 DB 01111000B
371 DB 11001100B
372 DB 11001100B
373 DB 01111000B
374 DB 00000000B
375
376; 163 £
377 DB 00000000B
378 DB 00011100B
379 DB 00000000B
380 DB 11001100B
381 DB 11001100B
382 DB 11001100B
383 DB 01110110B
384 DB 00000000B
385
386; 164 ¤
387 DB 00000000B
388 DB 11111000B
389 DB 00000000B
390 DB 11111000B
391 DB 11001100B
392 DB 11001100B
393 DB 11001100B
394 DB 00000000B
395
396; 165 ¥
397 DB 11111100B
398 DB 00000000B
399 DB 11001100B
400 DB 11101100B
401 DB 11111100B
402 DB 11011100B
403 DB 11001100B
404 DB 00000000B
405
406; 166 ¦
407 DB 00111100B
408 DB 01101100B
409 DB 01101100B
410 DB 00111110B
411 DB 00000000B
412 DB 01111110B
413 DB 00000000B
414 DB 00000000B
415
416; 167 §
417 DB 00111000B
418 DB 01101100B
419 DB 01101100B
420 DB 00111000B
421 DB 00000000B
422 DB 01111100B
423 DB 00000000B
424 DB 00000000B
425
426; 168 ¨
427 DB 00110000B
428 DB 00000000B
429 DB 00110000B
430 DB 01100000B
431 DB 11000000B
432 DB 11001100B
433 DB 01111000B
434 DB 00000000B
435
436; 169 © *
437 DB 11110000B
438 DB 00000000B
439 DB 00000000B
440 DB 01111100B
441 DB 11000110B
442 DB 11000110B
443 DB 01111100B
444 DB 00000000B
445
446; 170 ª
447 DB 00000000B
448 DB 00000000B
449 DB 00000000B
450 DB 11111100B
451 DB 00001100B
452 DB 00001100B
453 DB 00000000B
454 DB 00000000B
455
456; 171 «
457 DB 11000011B
458 DB 11000110B
459 DB 11001100B
460 DB 11011110B
461 DB 00110011B
462 DB 01100110B
463 DB 11001100B
464 DB 00001111B
465
466; 172 ¬
467 DB 11000011B
468 DB 11000110B
469 DB 11001100B
470 DB 11011011B
471 DB 00110111B
472 DB 01101111B
473 DB 11001111B
474 DB 00000011B
475
476; 173 ­
477 DB 00011000B
478 DB 00011000B
479 DB 00000000B
480 DB 00011000B
481 DB 00011000B
482 DB 00011000B
483 DB 00011000B
484 DB 00000000B
485
486; 174 ®
487 DB 00000000B
488 DB 00110011B
489 DB 01100110B
490 DB 11001100B
491 DB 01100110B
492 DB 00110011B
493 DB 00000000B
494 DB 00000000B
495
496; 175 ¯
497 DB 00000000B
498 DB 11001100B
499 DB 01100110B
500 DB 00110011B
501 DB 01100110B
502 DB 11001100B
503 DB 00000000B
504 DB 00000000B
505
506; 176 °
507 DB 00100010B
508 DB 10001000B
509 DB 00100010B
510 DB 10001000B
511 DB 00100010B
512 DB 10001000B
513 DB 00100010B
514 DB 10001000B
515
516; 177 ±
517 DB 01010101B
518 DB 10101010B
519 DB 01010101B
520 DB 10101010B
521 DB 01010101B
522 DB 10101010B
523 DB 01010101B
524 DB 10101010B
525
526; 178 ²
527 DB 11011011B
528 DB 01110111B
529 DB 11011011B
530 DB 11101110B
531 DB 11011011B
532 DB 01110111B
533 DB 11011011B
534 DB 11101110B
535
536; 179 ³
537 DB 00011000B
538 DB 00011000B
539 DB 00011000B
540 DB 00011000B
541 DB 00011000B
542 DB 00011000B
543 DB 00011000B
544 DB 00011000B
545
546; 180 ´
547 DB 00011000B
548 DB 00011000B
549 DB 00011000B
550 DB 00011000B
551 DB 11111000B
552 DB 00011000B
553 DB 00011000B
554 DB 00011000B
555
556; 181 µ
557 DB 00011000B
558 DB 00011000B
559 DB 11111000B
560 DB 00011000B
561 DB 11111000B
562 DB 00011000B
563 DB 00011000B
564 DB 00011000B
565
566; 182 ¶
567 DB 00110110B
568 DB 00110110B
569 DB 00110110B
570 DB 00110110B
571 DB 11110110B
572 DB 00110110B
573 DB 00110110B
574 DB 00110110B
575
576; 183 ·
577 DB 00000000B
578 DB 00000000B
579 DB 00000000B
580 DB 00000000B
581 DB 11111110B
582 DB 00110110B
583 DB 00110110B
584 DB 00110110B
585
586; 184 ¸
587 DB 00000000B
588 DB 00000000B
589 DB 11111000B
590 DB 00011000B
591 DB 11111000B
592 DB 00011000B
593 DB 00011000B
594 DB 00011000B
595
596; 185 ¹
597 DB 00110110B
598 DB 00110110B
599 DB 11110110B
600 DB 00000110B
601 DB 11110110B
602 DB 00110110B
603 DB 00110110B
604 DB 00110110B
605
606; 186 º
607 DB 00110110B
608 DB 00110110B
609 DB 00110110B
610 DB 00110110B
611 DB 00110110B
612 DB 00110110B
613 DB 00110110B
614 DB 00110110B
615
616; 187 »
617 DB 00000000B
618 DB 00000000B
619 DB 11111110B
620 DB 00000110B
621 DB 11110110B
622 DB 00110110B
623 DB 00110110B
624 DB 00110110B
625
626; 188 ¼
627 DB 00110110B
628 DB 00110110B
629 DB 11110110B
630 DB 00000110B
631 DB 11111110B
632 DB 00000000B
633 DB 00000000B
634 DB 00000000B
635
636; 189 ½
637 DB 00110110B
638 DB 00110110B
639 DB 00110110B
640 DB 00110110B
641 DB 11111110B
642 DB 00000000B
643 DB 00000000B
644 DB 00000000B
645
646; 190 ¾
647 DB 00011000B
648 DB 00011000B
649 DB 11111000B
650 DB 00011000B
651 DB 11111000B
652 DB 00000000B
653 DB 00000000B
654 DB 00000000B
655
656; 191 ¿
657 DB 00000000B
658 DB 00000000B
659 DB 00000000B
660 DB 00000000B
661 DB 11111000B
662 DB 00011000B
663 DB 00011000B
664 DB 00011000B
665
666; 192 À
667 DB 00011000B
668 DB 00011000B
669 DB 00011000B
670 DB 00011000B
671 DB 00011111B
672 DB 00000000B
673 DB 00000000B
674 DB 00000000B
675
676; 193 Á
677 DB 00011000B
678 DB 00011000B
679 DB 00011000B
680 DB 00011000B
681 DB 11111111B
682 DB 00000000B
683 DB 00000000B
684 DB 00000000B
685
686; 194 Â
687 DB 00000000B
688 DB 00000000B
689 DB 00000000B
690 DB 00000000B
691 DB 11111111B
692 DB 00011000B
693 DB 00011000B
694 DB 00011000B
695
696; 195 Ã
697 DB 00011000B
698 DB 00011000B
699 DB 00011000B
700 DB 00011000B
701 DB 00011111B
702 DB 00011000B
703 DB 00011000B
704 DB 00011000B
705
706; 196 Ä
707 DB 00000000B
708 DB 00000000B
709 DB 00000000B
710 DB 00000000B
711 DB 11111111B
712 DB 00000000B
713 DB 00000000B
714 DB 00000000B
715
716; 197 Å
717 DB 00011000B
718 DB 00011000B
719 DB 00011000B
720 DB 00011000B
721 DB 11111111B
722 DB 00011000B
723 DB 00011000B
724 DB 00011000B
725
726; 198 Æ
727 DB 00011000B
728 DB 00011000B
729 DB 00011111B
730 DB 00011000B
731 DB 00011111B
732 DB 00011000B
733 DB 00011000B
734 DB 00011000B
735
736; 199 Ç
737 DB 00110110B
738 DB 00110110B
739 DB 00110110B
740 DB 00110110B
741 DB 00110111B
742 DB 00110110B
743 DB 00110110B
744 DB 00110110B
745
746; 200 È
747 DB 00110110B
748 DB 00110110B
749 DB 00110111B
750 DB 00110000B
751 DB 00111111B
752 DB 00000000B
753 DB 00000000B
754 DB 00000000B
755
756; 201 É
757 DB 00000000B
758 DB 00000000B
759 DB 00111111B
760 DB 00110000B
761 DB 00110111B
762 DB 00110110B
763 DB 00110110B
764 DB 00110110B
765
766; 202 Ê
767 DB 00110110B
768 DB 00110110B
769 DB 11110111B
770 DB 00000000B
771 DB 11111111B
772 DB 00000000B
773 DB 00000000B
774 DB 00000000B
775
776; 203 Ë
777 DB 00000000B
778 DB 00000000B
779 DB 11111111B
780 DB 00000000B
781 DB 11110111B
782 DB 00110110B
783 DB 00110110B
784 DB 00110110B
785
786; 204 Ì
787 DB 00110110B
788 DB 00110110B
789 DB 00110111B
790 DB 00110000B
791 DB 00110111B
792 DB 00110110B
793 DB 00110110B
794 DB 00110110B
795
796; 205 Í
797 DB 00000000B
798 DB 00000000B
799 DB 11111111B
800 DB 00000000B
801 DB 11111111B
802 DB 00000000B
803 DB 00000000B
804 DB 00000000B
805
806; 206 Î
807 DB 00110110B
808 DB 00110110B
809 DB 11110111B
810 DB 00000000B
811 DB 11110111B
812 DB 00110110B
813 DB 00110110B
814 DB 00110110B
815
816; 207 Ï
817 DB 00011000B
818 DB 00011000B
819 DB 11111111B
820 DB 00000000B
821 DB 11111111B
822 DB 00000000B
823 DB 00000000B
824 DB 00000000B
825
826; 208 Ð
827 DB 00110110B
828 DB 00110110B
829 DB 00110110B
830 DB 00110110B
831 DB 11111111B
832 DB 00000000B
833 DB 00000000B
834 DB 00000000B
835
836; 209 Ñ
837 DB 00000000B
838 DB 00000000B
839 DB 11111111B
840 DB 00000000B
841 DB 11111111B
842 DB 00011000B
843 DB 00011000B
844 DB 00011000B
845
846; 210 Ò
847 DB 00000000B
848 DB 00000000B
849 DB 00000000B
850 DB 00000000B
851 DB 11111111B
852 DB 00110110B
853 DB 00110110B
854 DB 00110110B
855
856; 211 Ó
857 DB 00110110B
858 DB 00110110B
859 DB 00110110B
860 DB 00110110B
861 DB 00111111B
862 DB 00000000B
863 DB 00000000B
864 DB 00000000B
865
866; 212 Ô
867 DB 00011000B
868 DB 00011000B
869 DB 00011111B
870 DB 00011000B
871 DB 00011111B
872 DB 00000000B
873 DB 00000000B
874 DB 00000000B
875
876; 213 Õ
877 DB 00000000B
878 DB 00000000B
879 DB 00011111B
880 DB 00011000B
881 DB 00011111B
882 DB 00011000B
883 DB 00011000B
884 DB 00011000B
885
886; 214 Ö
887 DB 00000000B
888 DB 00000000B
889 DB 00000000B
890 DB 00000000B
891 DB 00111111B
892 DB 00110110B
893 DB 00110110B
894 DB 00110110B
895
896; 215 ×
897 DB 00110110B
898 DB 00110110B
899 DB 00110110B
900 DB 00110110B
901 DB 11111111B
902 DB 00110110B
903 DB 00110110B
904 DB 00110110B
905
906; 216 Ø
907 DB 00011000B
908 DB 00011000B
909 DB 11111111B
910 DB 00011000B
911 DB 11111111B
912 DB 00011000B
913 DB 00011000B
914 DB 00011000B
915
916; 217 Ù
917 DB 00011000B
918 DB 00011000B
919 DB 00011000B
920 DB 00011000B
921 DB 11111000B
922 DB 00000000B
923 DB 00000000B
924 DB 00000000B
925
926; 218 Ú
927 DB 00000000B
928 DB 00000000B
929 DB 00000000B
930 DB 00000000B
931 DB 00011111B
932 DB 00011000B
933 DB 00011000B
934 DB 00011000B
935
936; 219 Û
937 DB 11111111B
938 DB 11111111B
939 DB 11111111B
940 DB 11111111B
941 DB 11111111B
942 DB 11111111B
943 DB 11111111B
944 DB 11111111B
945
946; 220 Ü
947 DB 00000000B
948 DB 00000000B
949 DB 00000000B
950 DB 00000000B
951 DB 11111111B
952 DB 11111111B
953 DB 11111111B
954 DB 11111111B
955
956; 221 Ý
957 DB 11110000B
958 DB 11110000B
959 DB 11110000B
960 DB 11110000B
961 DB 11110000B
962 DB 11110000B
963 DB 11110000B
964 DB 11110000B
965
966; 222 Þ
967 DB 00001111B
968 DB 00001111B
969 DB 00001111B
970 DB 00001111B
971 DB 00001111B
972 DB 00001111B
973 DB 00001111B
974 DB 00001111B
975
976; 223 ß
977 DB 11111111B
978 DB 11111111B
979 DB 11111111B
980 DB 11111111B
981 DB 00000000B
982 DB 00000000B
983 DB 00000000B
984 DB 00000000B
985
986; 224 à
987 DB 00000000B
988 DB 00000000B
989 DB 01110110B
990 DB 11011100B
991 DB 11001000B
992 DB 11011100B
993 DB 01110110B
994 DB 00000000B
995
996; 225 á
997 DB 00000000B
998 DB 01111000B
999 DB 11001100B
1000 DB 11111000B
1001 DB 11001100B
1002 DB 11111000B
1003 DB 11000000B
1004 DB 11000000B
1005
1006; 226 â
1007 DB 00000000B
1008 DB 11111100B
1009 DB 11001100B
1010 DB 11000000B
1011 DB 11000000B
1012 DB 11000000B
1013 DB 11000000B
1014 DB 00000000B
1015
1016; 227 ã
1017 DB 00000000B
1018 DB 11111110B
1019 DB 01101100B
1020 DB 01101100B
1021 DB 01101100B
1022 DB 01101100B
1023 DB 01101100B
1024 DB 00000000B
1025
1026; 228 ä
1027 DB 11111100B
1028 DB 11001100B
1029 DB 01100000B
1030 DB 00110000B
1031 DB 01100000B
1032 DB 11001100B
1033 DB 11111100B
1034 DB 00000000B
1035
1036; 229 å
1037 DB 00000000B
1038 DB 00000000B
1039 DB 01111110B
1040 DB 11011000B
1041 DB 11011000B
1042 DB 11011000B
1043 DB 01110000B
1044 DB 00000000B
1045
1046; 230 æ
1047 DB 00000000B
1048 DB 01100110B
1049 DB 01100110B
1050 DB 01100110B
1051 DB 01100110B
1052 DB 01111100B
1053 DB 01100000B
1054 DB 11000000B
1055
1056; 231 ç
1057 DB 00000000B
1058 DB 01110110B
1059 DB 11011100B
1060 DB 00011000B
1061 DB 00011000B
1062 DB 00011000B
1063 DB 00011000B
1064 DB 00000000B
1065
1066; 232 è
1067 DB 11111100B
1068 DB 00110000B
1069 DB 01111000B
1070 DB 11001100B
1071 DB 11001100B
1072 DB 01111000B
1073 DB 00110000B
1074 DB 11111100B
1075
1076; 233 é
1077 DB 00111000B
1078 DB 01101100B
1079 DB 11000110B
1080 DB 11111110B
1081 DB 11000110B
1082 DB 01101100B
1083 DB 00111000B
1084 DB 00000000B
1085
1086; 234 ê
1087 DB 00111000B
1088 DB 01101100B
1089 DB 11000110B
1090 DB 11000110B
1091 DB 01101100B
1092 DB 01101100B
1093 DB 11101110B
1094 DB 00000000B
1095
1096; 235 ë
1097 DB 00011100B
1098 DB 00110000B
1099 DB 00011000B
1100 DB 01111100B
1101 DB 11001100B
1102 DB 11001100B
1103 DB 01111000B
1104 DB 00000000B
1105
1106; 236 ì
1107 DB 00000000B
1108 DB 00000000B
1109 DB 01111110B
1110 DB 11011011B
1111 DB 11011011B
1112 DB 01111110B
1113 DB 00000000B
1114 DB 00000000B
1115
1116; 237 í
1117 DB 00000110B
1118 DB 00001100B
1119 DB 01111110B
1120 DB 11011011B
1121 DB 11011011B
1122 DB 01111110B
1123 DB 01100000B
1124 DB 11000000B
1125
1126; 238 î
1127 DB 00111000B
1128 DB 01100000B
1129 DB 11000000B
1130 DB 11111000B
1131 DB 11000000B
1132 DB 01100000B
1133 DB 00111000B
1134 DB 00000000B
1135
1136; 239 ï
1137 DB 01111000B
1138 DB 11001100B
1139 DB 11001100B
1140 DB 11001100B
1141 DB 11001100B
1142 DB 11001100B
1143 DB 11001100B
1144 DB 00000000B
1145
1146; 240 ð
1147 DB 00000000B
1148 DB 11111100B
1149 DB 00000000B
1150 DB 11111100B
1151 DB 00000000B
1152 DB 11111100B
1153 DB 00000000B
1154 DB 00000000B
1155
1156; 241 ñ
1157 DB 00110000B
1158 DB 00110000B
1159 DB 11111100B
1160 DB 00110000B
1161 DB 00110000B
1162 DB 00000000B
1163 DB 11111100B
1164 DB 00000000B
1165
1166; 242 ò
1167 DB 01100000B
1168 DB 00110000B
1169 DB 00011000B
1170 DB 00110000B
1171 DB 01100000B
1172 DB 00000000B
1173 DB 11111100B
1174 DB 00000000B
1175
1176; 243 ó
1177 DB 00011000B
1178 DB 00110000B
1179 DB 01100000B
1180 DB 00110000B
1181 DB 00011000B
1182 DB 00000000B
1183 DB 11111100B
1184 DB 00000000B
1185
1186; 244 ô
1187 DB 00001110B
1188 DB 00011011B
1189 DB 00011011B
1190 DB 00011000B
1191 DB 00011000B
1192 DB 00011000B
1193 DB 00011000B
1194 DB 00011000B
1195
1196; 245 õ
1197 DB 00011000B
1198 DB 00011000B
1199 DB 00011000B
1200 DB 00011000B
1201 DB 00011000B
1202 DB 11011000B
1203 DB 11011000B
1204 DB 01110000B
1205
1206; 246 ö
1207 DB 00110000B
1208 DB 00110000B
1209 DB 00000000B
1210 DB 11111100B
1211 DB 00000000B
1212 DB 00110000B
1213 DB 00110000B
1214 DB 00000000B
1215
1216; 247 ÷
1217 DB 00000000B
1218 DB 01110110B
1219 DB 11011100B
1220 DB 00000000B
1221 DB 01110110B
1222 DB 11011100B
1223 DB 00000000B
1224 DB 00000000B
1225
1226; 248 ø
1227 DB 00111000B
1228 DB 01101100B
1229 DB 01101100B
1230 DB 00111000B
1231 DB 00000000B
1232 DB 00000000B
1233 DB 00000000B
1234 DB 00000000B
1235
1236; 249 ù
1237 DB 00000000B
1238 DB 00000000B
1239 DB 00000000B
1240 DB 00011000B
1241 DB 00011000B
1242 DB 00000000B
1243 DB 00000000B
1244 DB 00000000B
1245
1246; 250 ú
1247 DB 00000000B
1248 DB 00000000B
1249 DB 00000000B
1250 DB 00000000B
1251 DB 00011000B
1252 DB 00000000B
1253 DB 00000000B
1254 DB 00000000B
1255
1256; 251 û
1257 DB 00001111B
1258 DB 00001100B
1259 DB 00001100B
1260 DB 00001100B
1261 DB 11101100B
1262 DB 01101100B
1263 DB 00111100B
1264 DB 00011100B
1265
1266; 252 ü
1267 DB 01111000B
1268 DB 01101100B
1269 DB 01101100B
1270 DB 01101100B
1271 DB 01101100B
1272 DB 00000000B
1273 DB 00000000B
1274 DB 00000000B
1275
1276; 253 ý
1277 DB 01110000B
1278 DB 00011000B
1279 DB 00110000B
1280 DB 01100000B
1281 DB 01111000B
1282 DB 00000000B
1283 DB 00000000B
1284 DB 00000000B
1285.LIST
1286
1287; 254 þ
1288 DB 00000000B
1289 DB 00000000B
1290 DB 00111100B
1291 DB 00111100B
1292 DB 00111100B
1293 DB 00111100B
1294 DB 00000000B
1295 DB 00000000B
1296
1297; 255 ÿ
1298 DB 00000000B
1299 DB 00000000B
1300 DB 00000000B
1301 DB 00000000B
1302 DB 00000000B
1303 DB 00000000B
1304 DB 00000000B
1305 DB 00000000B
1306;
1307 DW 860 ;TABLE ID
1308; include graftpom.inc
1309 DB "Portuguese",0 ;LANGUAGE NAME, IN ASCIIZ FORMAT
1310;(the above "DB" is an example of the ENGLISH version of the above include file)
1311 IF ($-CSEG) MOD 16 ;IF NOT ALREADY ON 16 BYTE BOUNDARY
1312 DB (16-(($-CSEG) MOD 16)) DUP(0) ;ADD PADDING TO GET TO 16 BYTE BOUNDARY
1313 ENDIF
1314CSEG ENDS
1315 END
1316 \ No newline at end of file
diff --git a/v4.0/src/CMD/GRAFTABL/GRTABSM.ASM b/v4.0/src/CMD/GRAFTABL/GRTABSM.ASM
new file mode 100644
index 0000000..bcb4c9e
--- /dev/null
+++ b/v4.0/src/CMD/GRAFTABL/GRTABSM.ASM
@@ -0,0 +1,152 @@
1 PAGE 90,132 ;AN000;A2
2 TITLE GRTABSM.SAL - GRAFTABL SYSTEM MESSAGES ;AN000;
3;****************** START OF SPECIFICATIONS *****************************
4; MODULE NAME: GRTABSM.SAL
5;
6; DESCRIPTIVE NAME: Include the DOS system MESSAGE HANDLER in the SEGMENT
7; configuration expected by the modules of GRAFTABL.
8;
9;FUNCTION: The common code of the DOS SYSTEM MESSAGE HANDLER is made a
10; part of the GRAFTABL module by using INCLUDE to bring in the
11; common portion, in SYSMSG.INC. This included code contains
12; the routines to initialize for message services, to find
13; where a particular message is, and to display a message.
14;
15; ENTRY POINT: SYSDISPMSG:near
16; SYSGETMSG:near
17; SYSLOADMSG:near
18;
19; INPUT:
20; AX = MESSAGE NUMBER
21; BX = HANDLE TO DISPLAY TO (-1 means use DOS functions 1-12)
22; SI = OFFSET IN ES: OF SUBLIST, OR 0 IF NONE
23; CX = NUMBER OF %PARMS, 0 IF NONE
24; DX = CLASS IN HIGH BYTE, INPUT FUNCTION IN LOW
25; CALL SYSDISPMSG ;DISPLAY THE MESSAGE
26
27; If carry set, extended error already called:
28; AX = EXTENDED MESSAGE NUMBER
29; BH = ERROR CLASS
30; BL = SUGGESTED ACTION
31; CH = LOCUS
32; _ _ _ _ _ _ _ _ _ _ _ _
33
34; AX = MESSAGE NUMBER
35; DH = MESSAGE CLASS (1=DOS EXTENDED ERROR, 2=PARSE ERROR, -1=UTILITY MSG)
36; CALL SYSGETMSG ;FIND WHERE A MSG IS
37
38; If carry set, error
39; CX = 0, MESSAGE NOT FOUND
40; If carry NOT set, ok, and resulting regs are:
41; CX = MESSAGE SIZE
42; DS:SI = MESSAGE TEXT
43; _ _ _ _ _ _ _ _ _ _ _ _
44
45; CALL SYSLOADMSG ;SET ADDRESSABILITY TO MSGS, CHECK DOS VERSION
46; If carry not set:
47; CX = SIZE OF MSGS LOADED
48
49; If carry is set, regs preset up for SYSDISPMSG, as:
50; AX = ERROR CODE IF CARRY SET
51; AX = 1, INCORRECT DOS VERSION
52; DH =-1, (Utility msg)
53; OR,
54; AX = 1, Error loading messages
55; DH = 0, (Message manager error)
56; BX = STDERR
57; CX = NO_REPLACE
58; DL = NO_INPUT
59;
60; EXIT-NORMAL: CARRY is not set
61;
62; EXIT-ERROR: CARRY is set
63; Call Get Extended Error for reason code, for SYSDISPMSG and
64; SYSGETMSG.
65;
66; INTERNAL REFERENCES:
67; ROUTINES: (Generated by the MSG_SERVICES macro)
68; SYSLOADMSG
69; SYSDISPMSG
70; SYSGETMSG
71;
72; DATA AREAS:
73; INCLUDE GRTABMS.INC ;message defining control blocks
74; INCLUDE SYSMSG.INC ;Permit System Message handler definition
75; INCLUDE COPYRIGH.INC ;Standard copyright notice
76; INCLUDE MSGHAN.INC ;Defines message control blocks STRUCs
77; INCLUDE VERSIONA.INC ;INCLUDEd by code generated by SYSMSG.INC
78;
79; EXTERNAL REFERENCES:
80; ROUTINES: none
81;
82; DATA AREAS: control blocks pointed to by input registers.
83;
84; NOTES:
85; This module should be processed with the SALUT preprocessor
86; with the re-alignment not requested, as:
87;
88; SALUT GRTABSM,NUL,;
89;
90; To assemble these modules, the alphabetical or sequential
91; ordering of segments may be used.
92;
93; For LINK instructions, refer to the PROLOG of the main module,
94; GRTAB.SAL.
95;
96; COPYRIGHT: "Version 4.00 (C)Copyright Microsoft Corp 1981,1988 "
97; "Licensed Material - Program Property of Microsoft"
98;
99;****************** END OF SPECIFICATIONS *****************************
100 IF1 ;AN000;
101 %OUT COMPONENT=GRAFTABL, MODULE=GRTABSM.SAL... ;AN000;
102 ENDIF ;AN000;
103 INCLUDE PATHMAC.INC ;AN006;
104; INCLUDE SYSMSG.INC ;PERMIT SYSTEM MESSAGE HANDLER DEFINITION ;AN000;
105.XLIST ;AN000;
106 INCLUDE SYSMSG.INC ;AN000;PERMIT SYSTEM MESSAGE HANDLER DEFINITION
107.LIST ;AN000;
108 MSG_UTILNAME <GRAFTABL> ;AN000;IDENTIFY THE COMPONENT
109; = = = = = = = = = = = =
110; $SALUT (4,12,18,36) ;AN000;
111CSEG SEGMENT PARA PUBLIC ;AN000;
112 ASSUME CS:CSEG,DS:CSEG,ES:CSEG,SS:CSEG ;AN000;
113
114;THIS MODULE IS EXPECTED TO BE LINKED DIRECTLY FOLLOWING THE LAST
115;FONT DEFINITION MODULE, SINCE THE VARIABLE, "COPYRIGHT", IS USED
116;TO DETERMINE THE END OF THE ARRAY OF FONT TABLES.
117
118 PUBLIC COPYRIGHT ;AN000;
119COPYRIGHT LABEL BYTE ;AN006;
120;(deleted ;AN004;) INCLUDE COPYRIGH.INC ;(this is now being done in MSG_SERVICES)
121
122 INCLUDE MSGHAN.INC ;AN000;DEFINE MESSAGE HANDLER CONTROL BLOCKS
123 INCLUDE GRTABMS.INC ;AN000;DEFINE THE MESSAGES, AND CONTROL BLOCKS
124 MSG_SERVICES <GRAFTABL.CLA,GRAFTABL.CL1,GRAFTABL.CL2> ;AN000;
125 MSG_SERVICES <MSGDATA> ;AN000;
126; = = = = = = = = = = = =
127 PUBLIC SYSLOADMSG ;AN000;
128 PUBLIC SYSDISPMSG ;AN000;
129 PUBLIC SYSGETMSG ;AN000;
130 PATHLABL GRTABSM ;AN006;
131 ;DEFAULT=CHECK DOS VERSION
132 ;DEFAULT=NEARmsg
133 ;DEFAULT=NO INPUTmsg
134 ;DEFAULT=NO NUMmsg
135 ;DEFAULT=NO TIMEmsg
136 ;DEFAULT=NO DATEmsg
137; MSG_SERVICES <LOADmsg,GETmsg,DISPLAYmsg,CHARmsg> ;AN000;
138.XLIST ;AN000;
139.XCREF ;AN000;
140 MSG_SERVICES <LOADmsg,GETmsg,DISPLAYmsg,CHARmsg> ;AN000;
141.LIST ;AN000;
142.CREF ;AN000;
143; = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
144 PATHLABL GRTABSM ;AN006;
145
146
147CSEG ENDS ;AN000;
148
149include msgdcl.inc
150
151 END ;AN000;
152 \ No newline at end of file
diff --git a/v4.0/src/CMD/GRAFTABL/GRTABUS.ASM b/v4.0/src/CMD/GRAFTABL/GRTABUS.ASM
new file mode 100644
index 0000000..f3a4536
--- /dev/null
+++ b/v4.0/src/CMD/GRAFTABL/GRTABUS.ASM
@@ -0,0 +1,1182 @@
1 PAGE 90,132 ;A2
2 TITLE GRTABUS - USA CHARACTER SET FOR THE GRAFTABL COMMAND
3;This module is to be linked with the OBJ of GRTAB.SAL. Refer to the
4;Prolog of that module for more complete description.
5
6;This module contains the binary description of the pixels that are used
7;in graphics mode to define the USA character set when loaded to
8;interrupt 1FH by the GRAFTABL command in DOS 3.3.
9 IF1
10 %OUT GRTABUS.ASM...
11 ELSE
12; %OUT GRTABUS.ASM...
13 ENDIF
14CSEG SEGMENT PARA PUBLIC
15TABLEUS EQU THIS BYTE
16 PUBLIC TABLEUS
17
18; 128 €
19 DB 01111000B
20 DB 11001100B
21 DB 11000000B
22 DB 11001100B
23 DB 01111000B
24 DB 00011000B
25 DB 00001100B
26 DB 01111000B
27; 129
28 DB 00000000B
29 DB 11001100B
30 DB 00000000B
31 DB 11001100B
32 DB 11001100B
33 DB 11001100B
34 DB 01111110B
35 DB 00000000B
36; 130 ‚
37 DB 00011100B
38 DB 00000000B
39 DB 01111000B
40 DB 11001100B
41 DB 11111100B
42 DB 11000000B
43 DB 01111000B
44 DB 00000000B
45; 131 ƒ
46 DB 01111110B
47 DB 11000011B
48 DB 00111100B
49 DB 00000110B
50 DB 00111110B
51 DB 01100110B
52 DB 00111111B
53 DB 00000000B
54; 132 „
55 DB 11001100B
56 DB 00000000B
57 DB 01111000B
58 DB 00001100B
59 DB 01111100B
60 DB 11001100B
61 DB 01111110B
62 DB 00000000B
63; 133 …
64 DB 11100000B
65 DB 00000000B
66 DB 01111000B
67 DB 00001100B
68 DB 01111100B
69 DB 11001100B
70 DB 01111110B
71 DB 00000000B
72; 134 †
73 DB 00110000B
74 DB 00110000B
75 DB 01111000B
76 DB 00001100B
77 DB 01111100B
78 DB 11001100B
79 DB 01111110B
80 DB 00000000B
81; 135 ‡
82 DB 00000000B
83 DB 00000000B
84 DB 01111000B
85 DB 11000000B
86 DB 11000000B
87 DB 01111000B
88 DB 00001100B
89 DB 00111000B
90; 136 ˆ
91 DB 01111110B
92 DB 11000011B
93 DB 00111100B
94 DB 01100110B
95 DB 01111110B
96 DB 01100000B
97 DB 00111100B
98 DB 00000000B
99; 137 ‰
100 DB 11001100B
101 DB 00000000B
102 DB 01111000B
103 DB 11001100B
104 DB 11111100B
105 DB 11000000B
106 DB 01111000B
107 DB 00000000B
108; 138 Š
109 DB 11100000B
110 DB 00000000B
111 DB 01111000B
112 DB 11001100B
113 DB 11111100B
114 DB 11000000B
115 DB 01111000B
116 DB 00000000B
117; 139 ‹
118 DB 11001100B
119 DB 00000000B
120 DB 01110000B
121 DB 00110000B
122 DB 00110000B
123 DB 00110000B
124 DB 01111000B
125 DB 00000000B
126; 140 Œ
127 DB 01111100B
128 DB 11000110B
129 DB 00111000B
130 DB 00011000B
131 DB 00011000B
132 DB 00011000B
133 DB 00111100B
134 DB 00000000B
135; 141
136 DB 11100000B
137 DB 00000000B
138 DB 01110000B
139 DB 00110000B
140 DB 00110000B
141 DB 00110000B
142 DB 01111000B
143 DB 00000000B
144; 142 Ž
145 DB 11000110B
146 DB 00111000B
147 DB 01101100B
148 DB 11000110B
149 DB 11111110B
150 DB 11000110B
151 DB 11000110B
152 DB 00000000B
153; 143
154 DB 00110000B
155 DB 00110000B
156 DB 00000000B
157 DB 01111000B
158 DB 11001100B
159 DB 11111100B
160 DB 11001100B
161 DB 00000000B
162; 144
163 DB 00011100B
164 DB 00000000B
165 DB 11111100B
166 DB 01100000B
167 DB 01111000B
168 DB 01100000B
169 DB 11111100B
170 DB 00000000B
171; 145 ‘
172 DB 00000000B
173 DB 00000000B
174 DB 01111111B
175 DB 00001100B
176 DB 01111111B
177 DB 11001100B
178 DB 01111111B
179 DB 00000000B
180; 146 ’
181 DB 00111110B
182 DB 01101100B
183 DB 11001100B
184 DB 11111110B
185 DB 11001100B
186 DB 11001100B
187 DB 11001110B
188 DB 00000000B
189; 147 “
190 DB 01111000B
191 DB 11001100B
192 DB 00000000B
193 DB 01111000B
194 DB 11001100B
195 DB 11001100B
196 DB 01111000B
197 DB 00000000B
198; 148 ”
199 DB 00000000B
200 DB 11001100B
201 DB 00000000B
202 DB 01111000B
203 DB 11001100B
204 DB 11001100B
205 DB 01111000B
206 DB 00000000B
207; 149 •
208 DB 00000000B
209 DB 11100000B
210 DB 00000000B
211 DB 01111000B
212 DB 11001100B
213 DB 11001100B
214 DB 01111000B
215 DB 00000000B
216; 150 –
217 DB 01111000B
218 DB 11001100B
219 DB 00000000B
220 DB 11001100B
221 DB 11001100B
222 DB 11001100B
223 DB 01111110B
224 DB 00000000B
225; 151 —
226 DB 00000000B
227 DB 11100000B
228 DB 00000000B
229 DB 11001100B
230 DB 11001100B
231 DB 11001100B
232 DB 01111110B
233 DB 00000000B
234; 152 ˜
235 DB 00000000B
236 DB 11001100B
237 DB 00000000B
238 DB 11001100B
239 DB 11001100B
240 DB 01111100B
241 DB 00001100B
242 DB 11111000B
243; 153 ™
244 DB 11000011B
245 DB 00011000B
246 DB 00111100B
247 DB 01100110B
248 DB 01100110B
249 DB 00111100B
250 DB 00011000B
251 DB 00000000B
252; 154 š
253 DB 11001100B
254 DB 00000000B
255 DB 11001100B
256 DB 11001100B
257 DB 11001100B
258 DB 11001100B
259 DB 01111000B
260 DB 00000000B
261; 155 ›
262 DB 00011000B
263 DB 00011000B
264 DB 01111110B
265 DB 11000000B
266 DB 11000000B
267 DB 01111110B
268 DB 00011000B
269 DB 00011000B
270; 156 œ
271 DB 00111000B
272 DB 01101100B
273 DB 01100100B
274 DB 11110000B
275 DB 01100000B
276 DB 11100110B
277 DB 11111100B
278 DB 00000000B
279; 157
280 DB 11001100B
281 DB 11001100B
282 DB 01111000B
283 DB 11111100B
284 DB 00110000B
285 DB 11111100B
286 DB 00110000B
287 DB 00110000B
288; 158 ž
289 DB 11111000B
290 DB 11001100B
291 DB 11001100B
292 DB 11111010B
293 DB 11000110B
294 DB 11001111B
295 DB 11000110B
296 DB 11000111B
297; 159 Ÿ
298 DB 00001110B
299 DB 00011011B
300 DB 00011000B
301 DB 00111100B
302 DB 00011000B
303 DB 00011000B
304 DB 11011000B
305 DB 01110000B
306; 160  
307 DB 00011100B
308 DB 00000000B
309 DB 01111000B
310 DB 00001100B
311 DB 01111100B
312 DB 11001100B
313 DB 01111110B
314 DB 00000000B
315; 161 ¡
316 DB 00111000B
317 DB 00000000B
318 DB 01110000B
319 DB 00110000B
320 DB 00110000B
321 DB 00110000B
322 DB 01111000B
323 DB 00000000B
324; 162 ¢
325 DB 00000000B
326 DB 00011100B
327 DB 00000000B
328 DB 01111000B
329 DB 11001100B
330 DB 11001100B
331 DB 01111000B
332 DB 00000000B
333; 163 £
334 DB 00000000B
335 DB 00011100B
336 DB 00000000B
337 DB 11001100B
338 DB 11001100B
339 DB 11001100B
340 DB 01111110B
341 DB 00000000B
342; 164 ¤
343 DB 00000000B
344 DB 11111000B
345 DB 00000000B
346 DB 11111000B
347 DB 11001100B
348 DB 11001100B
349 DB 11001100B
350 DB 00000000B
351; 165 ¥
352 DB 11111100B
353 DB 00000000B
354 DB 11001100B
355 DB 11101100B
356 DB 11111100B
357 DB 11011100B
358 DB 11001100B
359 DB 00000000B
360; 166 ¦
361 DB 00111100B
362 DB 01101100B
363 DB 01101100B
364 DB 00111110B
365 DB 00000000B
366 DB 01111110B
367 DB 00000000B
368 DB 00000000B
369; 167 §
370 DB 00111000B
371 DB 01101100B
372 DB 01101100B
373 DB 00111000B
374 DB 00000000B
375 DB 01111100B
376 DB 00000000B
377 DB 00000000B
378; 168 ¨
379 DB 00110000B
380 DB 00000000B
381 DB 00110000B
382 DB 01100000B
383 DB 11000000B
384 DB 11001100B
385 DB 01111000B
386 DB 00000000B
387; 169 ©
388 DB 00000000B
389 DB 00000000B
390 DB 00000000B
391 DB 11111100B
392 DB 11000000B
393 DB 11000000B
394 DB 00000000B
395 DB 00000000B
396; 170 ª
397 DB 00000000B
398 DB 00000000B
399 DB 00000000B
400 DB 11111100B
401 DB 00001100B
402 DB 00001100B
403 DB 00000000B
404 DB 00000000B
405; 171 «
406 DB 11000011B
407 DB 11000110B
408 DB 11001100B
409 DB 11011110B
410 DB 00110011B
411 DB 01100110B
412 DB 11001100B
413 DB 00001111B
414; 172 ¬
415 DB 11000011B
416 DB 11000110B
417 DB 11001100B
418 DB 11011011B
419 DB 00110111B
420 DB 01101111B
421 DB 11001111B
422 DB 00000011B
423; 173 ­
424 DB 00011000B
425 DB 00011000B
426 DB 00000000B
427 DB 00011000B
428 DB 00011000B
429 DB 00011000B
430 DB 00011000B
431 DB 00000000B
432; 174 ®
433 DB 00000000B
434 DB 00110011B
435 DB 01100110B
436 DB 11001100B
437 DB 01100110B
438 DB 00110011B
439 DB 00000000B
440 DB 00000000B
441; 175 ¯
442 DB 00000000B
443 DB 11001100B
444 DB 01100110B
445 DB 00110011B
446 DB 01100110B
447 DB 11001100B
448 DB 00000000B
449 DB 00000000B
450; 176 °
451 DB 00100010B
452 DB 10001000B
453 DB 00100010B
454 DB 10001000B
455 DB 00100010B
456 DB 10001000B
457 DB 00100010B
458 DB 10001000B
459; 177 ±
460 DB 01010101B
461 DB 10101010B
462 DB 01010101B
463 DB 10101010B
464 DB 01010101B
465 DB 10101010B
466 DB 01010101B
467 DB 10101010B
468; 178 ²
469 DB 11011011B
470 DB 01110111B
471 DB 11011011B
472 DB 11101110B
473 DB 11011011B
474 DB 01110111B
475 DB 11011011B
476 DB 11101110B
477; 179 ³
478 DB 00011000B
479 DB 00011000B
480 DB 00011000B
481 DB 00011000B
482 DB 00011000B
483 DB 00011000B
484 DB 00011000B
485 DB 00011000B
486; 180 ´
487 DB 00011000B
488 DB 00011000B
489 DB 00011000B
490 DB 00011000B
491 DB 11111000B
492 DB 00011000B
493 DB 00011000B
494 DB 00011000B
495; 181 µ
496 DB 00011000B
497 DB 00011000B
498 DB 11111000B
499 DB 00011000B
500 DB 11111000B
501 DB 00011000B
502 DB 00011000B
503 DB 00011000B
504; 182 ¶
505 DB 00110110B
506 DB 00110110B
507 DB 00110110B
508 DB 00110110B
509 DB 11110110B
510 DB 00110110B
511 DB 00110110B
512 DB 00110110B
513; 183 ·
514 DB 00000000B
515 DB 00000000B
516 DB 00000000B
517 DB 00000000B
518 DB 11111110B
519 DB 00110110B
520 DB 00110110B
521 DB 00110110B
522; 184 ¸
523 DB 00000000B
524 DB 00000000B
525 DB 11111000B
526 DB 00011000B
527 DB 11111000B
528 DB 00011000B
529 DB 00011000B
530 DB 00011000B
531; 185 ¹
532 DB 00110110B
533 DB 00110110B
534 DB 11110110B
535 DB 00000110B
536 DB 11110110B
537 DB 00110110B
538 DB 00110110B
539 DB 00110110B
540; 186 º
541 DB 00110110B
542 DB 00110110B
543 DB 00110110B
544 DB 00110110B
545 DB 00110110B
546 DB 00110110B
547 DB 00110110B
548 DB 00110110B
549; 187 »
550 DB 00000000B
551 DB 00000000B
552 DB 11111110B
553 DB 00000110B
554 DB 11110110B
555 DB 00110110B
556 DB 00110110B
557 DB 00110110B
558; 188 ¼
559 DB 00110110B
560 DB 00110110B
561 DB 11110110B
562 DB 00000110B
563 DB 11111110B
564 DB 00000000B
565 DB 00000000B
566 DB 00000000B
567; 189 ½
568 DB 00110110B
569 DB 00110110B
570 DB 00110110B
571 DB 00110110B
572 DB 11111110B
573 DB 00000000B
574 DB 00000000B
575 DB 00000000B
576; 190 ¾
577 DB 00011000B
578 DB 00011000B
579 DB 11111000B
580 DB 00011000B
581 DB 11111000B
582 DB 00000000B
583 DB 00000000B
584 DB 00000000B
585; 191 ¿
586 DB 00000000B
587 DB 00000000B
588 DB 00000000B
589 DB 00000000B
590 DB 11111000B
591 DB 00011000B
592 DB 00011000B
593 DB 00011000B
594; 192 À
595 DB 00011000B
596 DB 00011000B
597 DB 00011000B
598 DB 00011000B
599 DB 00011111B
600 DB 00000000B
601 DB 00000000B
602 DB 00000000B
603; 193 Á
604 DB 00011000B
605 DB 00011000B
606 DB 00011000B
607 DB 00011000B
608 DB 11111111B
609 DB 00000000B
610 DB 00000000B
611 DB 00000000B
612; 194 Â
613 DB 00000000B
614 DB 00000000B
615 DB 00000000B
616 DB 00000000B
617 DB 11111111B
618 DB 00011000B
619 DB 00011000B
620 DB 00011000B
621; 195 Ã
622 DB 00011000B
623 DB 00011000B
624 DB 00011000B
625 DB 00011000B
626 DB 00011111B
627 DB 00011000B
628 DB 00011000B
629 DB 00011000B
630; 196 Ä
631 DB 00000000B
632 DB 00000000B
633 DB 00000000B
634 DB 00000000B
635 DB 11111111B
636 DB 00000000B
637 DB 00000000B
638 DB 00000000B
639; 197 Å
640 DB 00011000B
641 DB 00011000B
642 DB 00011000B
643 DB 00011000B
644 DB 11111111B
645 DB 00011000B
646 DB 00011000B
647 DB 00011000B
648; 198 Æ
649 DB 00011000B
650 DB 00011000B
651 DB 00011111B
652 DB 00011000B
653 DB 00011111B
654 DB 00011000B
655 DB 00011000B
656 DB 00011000B
657; 199 Ç
658 DB 00110110B
659 DB 00110110B
660 DB 00110110B
661 DB 00110110B
662 DB 00110111B
663 DB 00110110B
664 DB 00110110B
665 DB 00110110B
666; 200 È
667 DB 00110110B
668 DB 00110110B
669 DB 00110111B
670 DB 00110000B
671 DB 00111111B
672 DB 00000000B
673 DB 00000000B
674 DB 00000000B
675; 201 É
676 DB 00000000B
677 DB 00000000B
678 DB 00111111B
679 DB 00110000B
680 DB 00110111B
681 DB 00110110B
682 DB 00110110B
683 DB 00110110B
684; 202 Ê
685 DB 00110110B
686 DB 00110110B
687 DB 11110111B
688 DB 00000000B
689 DB 11111111B
690 DB 00000000B
691 DB 00000000B
692 DB 00000000B
693; 203 Ë
694 DB 00000000B
695 DB 00000000B
696 DB 11111111B
697 DB 00000000B
698 DB 11110111B
699 DB 00110110B
700 DB 00110110B
701 DB 00110110B
702; 204 Ì
703 DB 00110110B
704 DB 00110110B
705 DB 00110111B
706 DB 00110000B
707 DB 00110111B
708 DB 00110110B
709 DB 00110110B
710 DB 00110110B
711; 205 Í
712 DB 00000000B
713 DB 00000000B
714 DB 11111111B
715 DB 00000000B
716 DB 11111111B
717 DB 00000000B
718 DB 00000000B
719 DB 00000000B
720; 206 Î
721 DB 00110110B
722 DB 00110110B
723 DB 11110111B
724 DB 00000000B
725 DB 11110111B
726 DB 00110110B
727 DB 00110110B
728 DB 00110110B
729; 207 Ï
730 DB 00011000B
731 DB 00011000B
732 DB 11111111B
733 DB 00000000B
734 DB 11111111B
735 DB 00000000B
736 DB 00000000B
737 DB 00000000B
738; 208 Ð
739 DB 00110110B
740 DB 00110110B
741 DB 00110110B
742 DB 00110110B
743 DB 11111111B
744 DB 00000000B
745 DB 00000000B
746 DB 00000000B
747; 209 Ñ
748 DB 00000000B
749 DB 00000000B
750 DB 11111111B
751 DB 00000000B
752 DB 11111111B
753 DB 00011000B
754 DB 00011000B
755 DB 00011000B
756; 210 Ò
757 DB 00000000B
758 DB 00000000B
759 DB 00000000B
760 DB 00000000B
761 DB 11111111B
762 DB 00110110B
763 DB 00110110B
764 DB 00110110B
765; 211 Ó
766 DB 00110110B
767 DB 00110110B
768 DB 00110110B
769 DB 00110110B
770 DB 00111111B
771 DB 00000000B
772 DB 00000000B
773 DB 00000000B
774; 212 Ô
775 DB 00011000B
776 DB 00011000B
777 DB 00011111B
778 DB 00011000B
779 DB 00011111B
780 DB 00000000B
781 DB 00000000B
782 DB 00000000B
783; 213 Õ
784 DB 00000000B
785 DB 00000000B
786 DB 00011111B
787 DB 00011000B
788 DB 00011111B
789 DB 00011000B
790 DB 00011000B
791 DB 00011000B
792; 214 Ö
793 DB 00000000B
794 DB 00000000B
795 DB 00000000B
796 DB 00000000B
797 DB 00111111B
798 DB 00110110B
799 DB 00110110B
800 DB 00110110B
801; 215 ×
802 DB 00110110B
803 DB 00110110B
804 DB 00110110B
805 DB 00110110B
806 DB 11111111B
807 DB 00110110B
808 DB 00110110B
809 DB 00110110B
810; 216 Ø
811 DB 00011000B
812 DB 00011000B
813 DB 11111111B
814 DB 00011000B
815 DB 11111111B
816 DB 00011000B
817 DB 00011000B
818 DB 00011000B
819; 217 Ù
820 DB 00011000B
821 DB 00011000B
822 DB 00011000B
823 DB 00011000B
824 DB 11111000B
825 DB 00000000B
826 DB 00000000B
827 DB 00000000B
828; 218 Ú
829 DB 00000000B
830 DB 00000000B
831 DB 00000000B
832 DB 00000000B
833 DB 00011111B
834 DB 00011000B
835 DB 00011000B
836 DB 00011000B
837; 219 Û
838 DB 11111111B
839 DB 11111111B
840 DB 11111111B
841 DB 11111111B
842 DB 11111111B
843 DB 11111111B
844 DB 11111111B
845 DB 11111111B
846; 220 Ü
847 DB 00000000B
848 DB 00000000B
849 DB 00000000B
850 DB 00000000B
851 DB 11111111B
852 DB 11111111B
853 DB 11111111B
854 DB 11111111B
855; 221 Ý
856 DB 11110000B
857 DB 11110000B
858 DB 11110000B
859 DB 11110000B
860 DB 11110000B
861 DB 11110000B
862 DB 11110000B
863 DB 11110000B
864; 222 Þ
865 DB 00001111B
866 DB 00001111B
867 DB 00001111B
868 DB 00001111B
869 DB 00001111B
870 DB 00001111B
871 DB 00001111B
872 DB 00001111B
873; 223 ß
874 DB 11111111B
875 DB 11111111B
876 DB 11111111B
877 DB 11111111B
878 DB 00000000B
879 DB 00000000B
880 DB 00000000B
881 DB 00000000B
882; 224 à
883 DB 00000000B
884 DB 00000000B
885 DB 01110110B
886 DB 11011100B
887 DB 11001000B
888 DB 11011100B
889 DB 01110110B
890 DB 00000000B
891; 225 á
892 DB 00000000B
893 DB 01111000B
894 DB 11001100B
895 DB 11111000B
896 DB 11001100B
897 DB 11111000B
898 DB 11000000B
899 DB 11000000B
900; 226 â
901 DB 00000000B
902 DB 11111100B
903 DB 11001100B
904 DB 11000000B
905 DB 11000000B
906 DB 11000000B
907 DB 11000000B
908 DB 00000000B
909; 227 ã
910 DB 00000000B
911 DB 11111110B
912 DB 01101100B
913 DB 01101100B
914 DB 01101100B
915 DB 01101100B
916 DB 01101100B
917 DB 00000000B
918; 228 ä
919 DB 11111100B
920 DB 11001100B
921 DB 01100000B
922 DB 00110000B
923 DB 01100000B
924 DB 11001100B
925 DB 11111100B
926 DB 00000000B
927; 229 å
928 DB 00000000B
929 DB 00000000B
930 DB 01111110B
931 DB 11011000B
932 DB 11011000B
933 DB 11011000B
934 DB 01110000B
935 DB 00000000B
936; 230 æ
937 DB 00000000B
938 DB 01100110B
939 DB 01100110B
940 DB 01100110B
941 DB 01100110B
942 DB 01111100B
943 DB 01100000B
944 DB 11000000B
945; 231 ç
946 DB 00000000B
947 DB 01110110B
948 DB 11011100B
949 DB 00011000B
950 DB 00011000B
951 DB 00011000B
952 DB 00011000B
953 DB 00000000B
954; 232 è
955 DB 11111100B
956 DB 00110000B
957 DB 01111000B
958 DB 11001100B
959 DB 11001100B
960 DB 01111000B
961 DB 00110000B
962 DB 11111100B
963; 233 é
964 DB 00111000B
965 DB 01101100B
966 DB 11000110B
967 DB 11111110B
968 DB 11000110B
969 DB 01101100B
970 DB 00111000B
971 DB 00000000B
972; 234 ê
973 DB 00111000B
974 DB 01101100B
975 DB 11000110B
976 DB 11000110B
977 DB 01101100B
978 DB 01101100B
979 DB 11101110B
980 DB 00000000B
981; 235 ë
982 DB 00011100B
983 DB 00110000B
984 DB 00011000B
985 DB 01111100B
986 DB 11001100B
987 DB 11001100B
988 DB 01111000B
989 DB 00000000B
990; 236 ì
991 DB 00000000B
992 DB 00000000B
993 DB 01111110B
994 DB 11011011B
995 DB 11011011B
996 DB 01111110B
997 DB 00000000B
998 DB 00000000B
999; 237 í
1000 DB 00000110B
1001 DB 00001100B
1002 DB 01111110B
1003 DB 11011011B
1004 DB 11011011B
1005 DB 01111110B
1006 DB 01100000B
1007 DB 11000000B
1008; 238 î
1009 DB 00111000B
1010 DB 01100000B
1011 DB 11000000B
1012 DB 11111000B
1013 DB 11000000B
1014 DB 01100000B
1015 DB 00111000B
1016 DB 00000000B
1017; 239 ï
1018 DB 01111000B
1019 DB 11001100B
1020 DB 11001100B
1021 DB 11001100B
1022 DB 11001100B
1023 DB 11001100B
1024 DB 11001100B
1025 DB 00000000B
1026; 240 ð
1027 DB 00000000B
1028 DB 11111100B
1029 DB 00000000B
1030 DB 11111100B
1031 DB 00000000B
1032 DB 11111100B
1033 DB 00000000B
1034 DB 00000000B
1035; 241 ñ
1036 DB 00110000B
1037 DB 00110000B
1038 DB 11111100B
1039 DB 00110000B
1040 DB 00110000B
1041 DB 00000000B
1042 DB 11111100B
1043 DB 00000000B
1044; 242 ò
1045 DB 01100000B
1046 DB 00110000B
1047 DB 00011000B
1048 DB 00110000B
1049 DB 01100000B
1050 DB 00000000B
1051 DB 11111100B
1052 DB 00000000B
1053; 243 ó
1054 DB 00011000B
1055 DB 00110000B
1056 DB 01100000B
1057 DB 00110000B
1058 DB 00011000B
1059 DB 00000000B
1060 DB 11111100B
1061 DB 00000000B
1062; 244 ô
1063 DB 00001110B
1064 DB 00011011B
1065 DB 00011011B
1066 DB 00011000B
1067 DB 00011000B
1068 DB 00011000B
1069 DB 00011000B
1070 DB 00011000B
1071; 245 õ
1072 DB 00011000B
1073 DB 00011000B
1074 DB 00011000B
1075 DB 00011000B
1076 DB 00011000B
1077 DB 11011000B
1078 DB 11011000B
1079 DB 01110000B
1080; 246 ö
1081 DB 00110000B
1082 DB 00110000B
1083 DB 00000000B
1084 DB 11111100B
1085 DB 00000000B
1086 DB 00110000B
1087 DB 00110000B
1088 DB 00000000B
1089; 247 ÷
1090 DB 00000000B
1091 DB 01110110B
1092 DB 11011100B
1093 DB 00000000B
1094 DB 01110110B
1095 DB 11011100B
1096 DB 00000000B
1097 DB 00000000B
1098; 248 ø
1099 DB 00111000B
1100 DB 01101100B
1101 DB 01101100B
1102 DB 00111000B
1103 DB 00000000B
1104 DB 00000000B
1105 DB 00000000B
1106 DB 00000000B
1107; 249 ù
1108 DB 00000000B
1109 DB 00000000B
1110 DB 00000000B
1111 DB 00011000B
1112 DB 00011000B
1113 DB 00000000B
1114 DB 00000000B
1115 DB 00000000B
1116; 250 ú
1117 DB 00000000B
1118 DB 00000000B
1119 DB 00000000B
1120 DB 00000000B
1121 DB 00011000B
1122 DB 00000000B
1123 DB 00000000B
1124 DB 00000000B
1125; 251 û
1126 DB 00001111B
1127 DB 00001100B
1128 DB 00001100B
1129 DB 00001100B
1130 DB 11101100B
1131 DB 01101100B
1132 DB 00111100B
1133 DB 00011100B
1134; 252 ü
1135 DB 01111000B
1136 DB 01101100B
1137 DB 01101100B
1138 DB 01101100B
1139 DB 01101100B
1140 DB 00000000B
1141 DB 00000000B
1142 DB 00000000B
1143; 253 ý
1144 DB 01110000B
1145 DB 00011000B
1146 DB 00110000B
1147 DB 01100000B
1148 DB 01111000B
1149 DB 00000000B
1150 DB 00000000B
1151 DB 00000000B
1152; 254 þ
1153 DB 00000000B
1154 DB 00000000B
1155 DB 00111100B
1156 DB 00111100B
1157 DB 00111100B
1158 DB 00111100B
1159 DB 00000000B
1160 DB 00000000B
1161; 255 ÿ
1162 DB 00000000B
1163 DB 00000000B
1164 DB 00000000B
1165 DB 00000000B
1166 DB 00000000B
1167 DB 00000000B
1168 DB 00000000B
1169 DB 00000000B
1170;
1171ENDTABL EQU THIS BYTE
1172 PUBLIC ENDTABL
1173 DW 437 ;TABLE ID
1174; include graftusm.inc
1175 DB "USA",0 ;LANGUAGE NAME, IN ASCIIZ FORMAT
1176;(the above "DB" is an example of the ENGLISH version of the above include file)
1177 IF ($-CSEG) MOD 16 ;IF NOT ALREADY ON 16 BYTE BOUNDARY
1178 DB (16-(($-CSEG) MOD 16)) DUP(0) ;ADD PADDING TO GET TO 16 BYTE BOUNDARY
1179 ENDIF
1180CSEG ENDS
1181 END
1182 \ No newline at end of file
diff --git a/v4.0/src/CMD/GRAFTABL/MAKEFILE b/v4.0/src/CMD/GRAFTABL/MAKEFILE
new file mode 100644
index 0000000..5fa792b
--- /dev/null
+++ b/v4.0/src/CMD/GRAFTABL/MAKEFILE
@@ -0,0 +1,74 @@
1#************************** makefile for cmd\... ***************************
2
3msg =..\..\messages
4dos =..\..\dos
5inc =..\..\inc
6hinc =..\..\h
7
8#
9####################### dependencies begin here. #########################
10#
11
12all: graftabl.com
13
14graftabl.ctl: graftabl.skl \
15 $(msg)\$(COUNTRY).msg \
16 makefile
17
18grtab.obj: grtab.asm \
19 makefile
20
21grtabp.obj: grtabp.asm \
22 makefile \
23 $(inc)\psdata.inc \
24 $(inc)\parse.asm
25
26grtabsm.obj: grtabsm.asm \
27 makefile \
28 $(inc)\copyrigh.inc \
29 $(inc)\versiona.inc \
30 $(inc)\sysmsg.inc \
31 $(inc)\msgserv.asm \
32 graftabl.ctl \
33 graftabl.cl1 \
34 graftabl.cl2 \
35 graftabl.cla \
36 $(inc)\msghan.inc \
37 grtabms.inc
38
39grtabpar.obj: grtabpar.asm \
40 makefile
41
42grtabhan.obj: grtabhan.asm \
43 makefile
44
45grtabus.obj: grtabus.asm \
46 makefile
47
48grtabno.obj: grtabno.asm \
49 makefile
50
51grtabpo.obj: grtabpo.asm \
52 makefile
53
54grtabcf.obj: grtabcf.asm \
55 makefile
56
57grtabml.obj: grtabml.asm \
58 makefile
59
60graftabl.com: grtab.obj \
61 makefile \
62 graftabl.lnk \
63 grtabp.obj \
64 grtabsm.obj \
65 grtabpar.obj \
66 grtabhan.obj \
67 grtabus.obj \
68 grtabno.obj \
69 grtabpo.obj \
70 grtabcf.obj \
71 grtabml.obj
72 link @graftabl.lnk
73 exe2bin graftabl.exe graftabl.com
74 del graftabl.exe