home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C!T ROM 5
/
ctrom5b.zip
/
ctrom5b
/
DOS
/
UTILITY
/
DIVERSEN
/
KWIKHELP
/
KWIKTEXT.A86
< prev
next >
Wrap
Text File
|
1994-12-01
|
29KB
|
849 lines
;----------------------------------------------------------------
; KWIKTEXT 21 August 1994
; jtucker@adam.com.au
; JIM TUCKER 3:800/805
; This reads a text file then goes resident
; The text file will pop up with hot key
;----------------------------------------------------------------
INCLUDE E:\ALIB\MACROS.INC
jmp install
KEY_SCAN db 20 ;Default hotkey 'T' (See /K=)
KEY_SHIFT db 12 ;CTRL-ALT
POP_REQUESTED db 0 ;Set by hotkey combination
PUSH_REQUESTED db 0 ;Set by ESC
ACTIVE db 0 ;Set if displaying
BUSY db 0 ;Set by disk write and video
ZERO_WORD dw 0 ;For setting ES segment
CURPOS dw ? ;Saved by popup
CURSIZE dw ?
VIDEO_SEG dw 0B800h ;default for now
DISPLAY_SEG dw ? ;the ".BIN" file
;----------------------------------------------------------------
; BIOS VIDEO So we don't pop up in the middle of it
;----------------------------------------------------------------
NEW_INT10: cli
inc cs:BUSY ;say doin' sumthin'
pushf ;call while busy
db 09Ah ;far call opcode
OLD_INT10 dd ? ;call address
dec cs:BUSY ;doin' nothin'
iret ;done
;----------------------------------------------------------------
; BIOS DISK So we don't pop while disking
;----------------------------------------------------------------
NEW_INT13: cli ;just set busy
inc cs:BUSY
pushf ;needed for call
db 09Ah ;far call opcode
OLD_INT13 dd ? ;call address
pushf ;must preserve CF
dec cs:BUSY ;done, not busy
popf
retf 2 ;preserve flags
;----------------------------------------------------------------
; BIOS KEYBOARD Sets a flag if we are popped up and ESC
; Sets a flag if we are not popped up and HOTKEY
;----------------------------------------------------------------
NEW_INT09: pushf
STI
test cs:ACTIVE ;are we up?
jnz >l3 ;yes, just exit
push ax,es
in al,60h ;get key code
cmp al,cs:key_scan ;our key?
jne >l2 ;no, restore flags and exit
mov ah,2 ;get shift status
int 16h
and al,cs:key_shift
cmp al,cs:key_shift ;shift down?
jne >l2 ;no
mov cs:pop_requested,1 ;set for timer
; How this works: Set the high bit of port 61h to 1 and then back to 0.
; This will tell the keyboard controller that the scan code has been
; read (when it really hasn't) so that the keyboard controller will take
; the key off of its buffer.
in al,61h ;reset keyboard
mov ah,al
or al,80h
out 61h,al
mov al,ah
out 61h,al
; Tell the interrupt controller that we have reached the end of the int 9
; handler. That way, the interrupt controller will allow further interrupt
; 9s to occur.
cli
mov al,20h
out 20h,al
sti
; Now loop for ESC. DOS idle allows keyboard activity etc
L1: mov ah,0 ;dos idle
int 28h ;... while in a loop
mov ah,1 ;get key
int 16h ;one ready?
jz l1 ;no
mov ah,0 ;yes, get it
int 16h
cmp al,27 ;ESC?
jne l1 ;no
; We have ESC, tell him to pop down
mov cs:push_requested,1 ;request pop back
xor ax,ax
mov es,ax
mov ax,es:[041Ch] ;get kb tail
mov es:[041Ah],ax ;make it the head
pop es,ax ;restore regs
popf ;and return
iret
L2: pop es,ax
L3: popf
db 0EAh ;jmp imm16
OLD_INT09 dd ?
;----------------------------------------------------------------
; BIOS TIMER POP up if pop_requested and we aren't busy
; PUSH if ESC and we aren't busy
;----------------------------------------------------------------
NEW_INT1C: pushf
sti
db 09Ah ;call imm16
OLD_INT1C dd ?
test cs:BUSY ;can we do it?
if nz jmp exit_1C ;no
test cs:pop_requested ;pop up?
if nz jmp popup ;yes
test cs:push_requested ;pop down?
if nz jmp popdown ;yes
jmp exit_1C ;nothing to do
; Pop up - Save his screen and display ours
POPUP: mov cs:ACTIVE,1
mov cs:pop_requested,0
pushall
mov cs:video_seg,0B800h ;guess
mov ah,0Fh ;get mode
int 10h
cmp al,7 ;mono?
jne >l1 ;no
mov cs:video_seg,0B000h ;bad guess
L1: mov ah,03h ;save the curpos
mov bh,0
int 10h
mov cs:curpos,dx
mov ah,02h ;move it off the screen
mov dx,1A00h ;line 26
int 10h
mov ds,cs:display_seg ;establish the segments
mov es,cs:video_seg
jmp screen_swap
; Here if ESC hit
POPDOWN: mov cs:ACTIVE,0 ;clear active
mov cs:push_requested,0 ;clear request
pushall
mov ah,02h ;restore the cursor
mov dx,cs:curpos
mov bh,0
int 10h
mov ds,cs:video_seg ;opposite to above
mov es,cs:display_seg ;... and fall thru
; This swaps the screens so we do not need a separate buffer
SCREEN_SWAP: xor si,si
mov cx,2000 ;words to move
L1: mov ax,[si] ;get char to display
xchg ax,dx ;save it in dx
mov ax,es:[si] ;get char from screen
mov es:[si],dx ;display the char
mov [si],ax ;and save the screen char
add si,2
loop l1
popall
EXIT_1C: iret
; This is the termination for the install portion
; We move the data to the end of the resident portion
FINI: rep movsw ;this moves it to below
int 21h ;this exits resident
EVEN 16 ;must be segment boundary
DISPLAY_SCREEN db ;display moved to here
;================================================================
; NON-RESIDENT INSTALL CODE FOLLOWS
; You can load it as many times as you like. To prevent multiple
; loads you would have to check the /H=X hotkey and I cannot be
; bothered chaining back.
;----------------------------------------------------------------
; Note: Although the following are called procedures we do not
; return if an error is found
.NOLIST
include E:\ALIB\CMDLINE.INC
.LIST
INSTALL: call cmdline ;* .INC FILE
call get_color ;read the color switch
call read_file ;read the file
call get_scan ;read the hotkey switch
call write_file ;write the text
mov bx,OFFSET display_screen ;set up segment
shr bx,4 ; address for display
mov ax,cs ;this segment
add ax,bx ;add it
mov display_seg,ax ;segment
; Trap INT 1C, 09, 10, 13,
mov ax,351Ch
dosf
mov word ptr old_int1C, bx
mov word ptr old_int1C+2,es
mov ax,251Ch
mov dx, OFFSET new_int1C
dosf
mov ax,3509h
dosf
mov word ptr old_int09, bx
mov word ptr old_int09+2,es
mov ax,2509h
mov dx, OFFSET new_int09
dosf
mov ax,3510h
dosf
mov word ptr old_int10, bx
mov word ptr old_int10+2,es
mov ax,2510h
mov dx, OFFSET new_int10
dosf
mov ax,3513h
dosf
mov word ptr old_int13, bx
mov word ptr old_int13+2,es
mov ax,2513h
mov dx, OFFSET new_int13
dosf
mov es,[2Ch]
mov ah,49h
dosf
mov dx, OFFSET installed
mov ah,9
dosf
cmp key_scan,59
je >l1
write hot_key_mesg1
jmp >l2
L1: mov dx,OFFSET hot_key_mesg2
mov ah,9
dosf
L2: mov si,[filename1]W
mov ah,2
L3: mov dl,[si]
or dl,dl
jz >l4
dosf
inc si
jmp l3
L4: call crlf
; This sets up for the REP MOVSW
mov cx,2000 ;length of file
mov di,OFFSET display_screen ;where it goes
mov si,OFFSET DISPLAY_DATA ;starting offset
mov es,cs
; This sets up for the INT 21H to remain resident
mov dx,di ;table address
add dx,4000 ;add size of table
add dx,15 ;rounding
shr dx,4 ;div by 16 for pars
mov ax,3100h ;exit resident
jmp fini ;end it
;----------------------------------------------------------------
INSTALLED db cr,lf,'KWIKTEXT V1.01 ■ Release 1994 JIM TUCKER',cr,lf
db 'Copyright (c) 1994 JIM TUCKER. All rights reserved',cr,lf,eom
HOT_KEY_MESG1 db 'Use <CTRL-ALT-'
HOT_KEY db 'T'
db '> to pop up ',0
HOT_KEY_MESG2 db 'Use F1 to pop up ',eom
;----------------------------------------------------------------
; READ_FILE - Read the text file
;----------------------------------------------------------------
LENGTH dw ?
READ_FILE: test filename1
if z jmp help
mov dx,filename1 ;open file
mov ax,3D00h
int 21h
jnc >l1
mov dx,OFFSET not_found_mesg
jmp error_message
L1: mov bx,ax ;handle
mov ax,4202h ;get length
mov cx,0
mov dx,0
int 21h
mov length,ax
jnc >l2
mov dx,OFFSET bad_size_mesg
jmp error_message
L2: cmp ax,2050 ;test for size
jbe >l3
mov dx,OFFSET bad_size_mesg
jmp error_message
L3: mov ax,4200h ;rewind it
mov cx,0
mov dx,0
int 21h
mov ax,3F00h ;read file
mov cx,length
mov dx,TEXT_DATA
int 21h
jnc >l4
mov dx,OFFSET read_err_mesg
jmp error_message
L4: mov ah,3Eh ;close file
int 21h
mov bx,TEXT_DATA ;terminate zero
add bx,LENGTH
mov B[bx],0
ret
;----------------------------------------------------------------
; GET_SCAN This gets scan code from switch /K=X
;----------------------------------------------------------------
GET_SCAN: mov si,OFFSET switch_buffer
L1: lodsb
L2: or al,al
jz ret ;done
cmp al,'/' ;switch?
jne l1 ;no
lodsb ;get next
cmp al,'K' ;for us?
jne l2 ;no
lodsb ;get next
cmp al,':' ;must be this
je >l3 ;yes
cmp al,'=' ;or this
if ne jmp help
L3: lodsb
cmp al,' ' ;space or less is illegal
if be jmp help
cmp al,'#' ;# substitute F1
jne >l3 ;must be a key
mov al,59 ;F1 keycode
mov key_shift,0 ;no CLTR-ALT
jmp >l5 ;save keycode
L3: and al,7Fh ;no funny stuff
mov di,OFFSET char_string
mov cx,string_length
repne scasb
jne >l4
add key_shift,2
L4: mov hot_key,al ;save ASCII
mov si,OFFSET scan ;get scan code
mov ah,0
add si,ax
lodsb
L5: mov key_scan,al ;save scan code
ret
;----------------------------------------------------------------
; GET_COLOR: This gets color from /C=nn
;----------------------------------------------------------------
SIXTEEN dw 16
GET_COLOR: mov si,OFFSET switch_buffer
L1: lodsb
L2: or al,al
jz ret
cmp al,'/'
jne l1
lodsb
cmp al,'C'
jne l2
lodsb
cmp al,':'
je >l3
cmp al,'='
jne color_help
L3: xor ax,ax
xor bx,bx
xor dx,dx
L2: mov bl,[si] ;get next char
cmp bl,0 ;end of it?
je >l5 ;yes
cmp bl,'/' ;end of it?
je >l5 ;yes
xchg bx,ax
call caps
xchg bx,ax
L3: sub bl,'0' ;make binary
jc color_help ;bad
cmp bl,9
jbe >l4 ;ok
sub bl,7 ;try A-F
cmp bl,10
jb color_help ;can't be in between
cmp bl,15 ;above Fh?
ja color_help ;not a digit
L4: mul sixteen ;previous times 16
add ax,bx ;add this one
inc si
jmp l2 ;get next
L5: test ax
jz color_help
test dx
jnz color_help
test ah
jnz color_help
mov text_color,al
ret
; This displays the default screen we have included
COLOR_HELP: mov B[exit_1C],0C3h ;real cheat stuff!
mov bx,OFFSET display_data ;set up segment
shr bx,4 ; address for display
mov ax,cs ;this segment
add ax,bx ;add it
mov display_seg,ax ;segment
call popup ;this uses the routines
mov ah,8 ; we created for INT_1C
dosf ;wait for key
call popdown
mov ax,4C00h
dosf
;----------------------------------------------------------------
; WRITE_FILE: Put text in the display area
;----------------------------------------------------------------
LINE_NUMBER dw 0 ;initial line
TEXT_COLOR db 07h ;set by /C=nn switch
CHAR_COUNT db 0 ;so we don't bust a line
WRITE_FILE: mov di,OFFSET display_data
mov ah,text_color
mov al,20h
mov cx,2000
rep stosw
mov si,TEXT_DATA
mov di,OFFSET display_data
mov bx,160
L1: lodsb ;get char from text buffer
cmp al,cr ;new line?
je >l3 ;yes
cmp al,lf ;ignore lf
je l1
cmp al,0 ;end of it?
je ret ;yes
L2: inc char_count
cmp char_count,80 ;don't go too wide
ja l1 ;ignore rest of line
mov ah,text_color ;make it /C=nn
stosw ;save char and color
jmp l1 ;do more
ret ;exit here
; Here at CR, start a new line
L3: mov char_count,0 ;reset this
inc line_number ;bump this
mov ax,line_number
cmp ax,25
ja ret ;yes
mul bx ;(line_number*160)+offset
mov di,ax ; is offset for this line
add di,OFFSET display_data
jmp l1 ;do more
;----------------------------------------------------------------
HELP: mov dx,OFFSET help_mesg
ERROR_MESSAGE: mov ah,9
int 21h
mov ax,4CFFh
int 21h
CAPS: cmp al,'a'
jb >l1
cmp al,'z'
ja >l1
and al,5Ch
L1: ret
CRLF: mov ah,2
mov dl,cr
dosf
mov dl,lf
dosf
ret
NOT_FOUND_MESG db cr,lf,'File not found',cr,lf,eom
BAD_SIZE_MESG db cr,lf,'Text file cannot exceed 2050 bytes',cr,lf,eom
READ_ERR_MESG db cr,lf,'Error reading file',cr,lf,eom
BAD_COLOR_MESG db cr,lf,'Invalid color',cr,lf,eom
HELP_MESG db cr,lf
db 'KWIKTEXT V1.01 ■ Release 1994 JIM TUCKER',cr,lf
db 'Copyright (c) 1994 JIM TUCKER. All rights reserved',cr,lf
db 'Creates popup screen from ASCII text file',cr,lf
db 'USAGE: KWIKTEXT FILENAME [/K=Hotkey] [/C=Color]',cr,lf
db 'ENTER: KWIKTEXT /C=? to show color options',cr,lf,eom
; Translation table: ASCII codes into keyboard scan codes
scan db 03, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38, 50, 49, 24
db 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 01, 26, 53, 27, 12
db 57, 02, 40, 04, 05, 06, 08, 40, 10, 11, 09, 13, 51, 12, 52, 53
db 11, 02, 03, 04, 05, 06, 07, 08, 09, 10, 39, 39, 51, 13, 52, 53
db 03, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38, 50, 49, 24
db 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 26, 43, 27, 07, 12
db 41, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38, 50, 49, 24
db 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 26, 43, 27, 41, 14
CHAR_STRING db '~!@#$%^&*()_+|{}:"<>?'
STRING_LENGTH EQU $-OFFSET CHAR_STRING
; The text file is placed over the display_data
; The 2000 words are moved before we go resident
EVEN 16 ;must be segment boundary
DISPLAY_DATA DB ;label
.NOLIST
; This is data for the color help screen
dw 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh
dw 0FDCh, 0FDCh, 0FDCh, 70DBh, 0F20h, 0FDCh, 0FDCh, 0FDCh
dw 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh
dw 0720h, 0720h, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh
dw 70DBh, 70DBh, 70DBh, 70DBh, 70DBh, 70DBh, 0FDCh, 0FDCh
dw 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh
dw 0FDCh, 0F20h, 0F20h, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh
dw 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh, 0FDCh
dw 0F20h, 0720h, 0720h, 0720h, 0F20h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 3FDBh, 3F20h, 3F20h, 3FDCh, 3FDCh, 3FDCh, 3FDCh, 3FDCh
dw 3F20h, 3F20h, 3FDBh, 70DBh, 0F20h, 3FDBh, 3F20h, 3F20h
dw 3FDCh, 3FDCh, 3FDCh, 3FDCh, 3FDCh, 3F20h, 3F20h, 3FDBh
dw 0720h, 0720h, 3FDBh, 3FDCh, 3F20h, 3F20h, 3FDCh, 3FDBh
dw 70DBh, 70DBh, 70DBh, 70DBh, 70DBh, 70DBh, 3FDBh, 3F20h
dw 3F20h, 3FDCh, 3FDCh, 3FDCh, 3FDCh, 3FDCh, 3F20h, 3F20h
dw 3FDBh, 0F20h, 0F20h, 3FDBh, 3FDCh, 3F20h, 3F20h, 3FDCh
dw 3FDCh, 3FDCh, 3FDCh, 3FDCh, 3FDCh, 3F20h, 3F20h, 3FDBh
dw 0F20h, 0720h, 0720h, 0720h, 0F20h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 5FDBh, 5F20h, 5F20h, 5FDBh, 70DBh, 70DBh, 70DBh, 5FDBh
dw 5FDCh, 5FDCh, 5FDBh, 70DBh, 0F20h, 5FDBh, 5F20h, 5F20h
dw 5FDBh, 70DBh, 70DBh, 70DBh, 5FDBh, 5F20h, 5F20h, 5FDBh
dw 0720h, 0720h, 70DBh, 5FDBh, 5F20h, 5F20h, 5FDBh, 70DBh
dw 70DBh, 70DBh, 70DBh, 70DBh, 70DBh, 70DBh, 5FDBh, 5F20h
dw 5F20h, 5FDBh, 70DBh, 70DBh, 70DBh, 5FDBh, 5F20h, 5F20h
dw 5FDBh, 0F20h, 0F20h, 70DBh, 5FDBh, 5F20h, 5F20h, 5FDBh
dw 70DBh, 70DBh, 70DBh, 70DBh, 5FDBh, 5F20h, 5F20h, 5FDBh
dw 0F20h, 0720h, 0720h, 0720h, 0F20h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 7FDBh, 7F20h, 7F20h, 7FDBh, 70DBh, 70DBh, 70DBh, 70DBh
dw 70DBh, 70DBh, 70DBh, 70DBh, 0F20h, 7FDBh, 57DBh, 57DBh
dw 7FDBh, 70DBh, 70DBh, 70DBh, 7FDBh, 7F20h, 7F20h, 7FDBh
dw 0720h, 0720h, 70DBh, 7FDBh, 7F20h, 7F20h, 7FDBh, 70DBh
dw 70DBh, 70DBh, 70DBh, 70DBh, 70DBh, 70DBh, 7FDBh, 7F20h
dw 7F20h, 7FDBh, 70DBh, 70DBh, 70DBh, 7FDBh, 7F20h, 7F20h
dw 7FDBh, 0F20h, 0F20h, 70DBh, 7FDBh, 7F20h, 7F20h, 7FDBh
dw 0FDCh, 0FDCh, 0FDCh, 0FDCh, 7FDBh, 7F20h, 7F20h, 7FDBh
dw 0F20h, 0720h, 0720h, 0720h, 0F20h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 4FDBh, 4F20h, 4F20h, 4FDBh, 70DBh, 70DBh, 70DBh, 70DBh
dw 70DBh, 70DBh, 70DBh, 70DBh, 0F20h, 4FDBh, 4F20h, 4F20h
dw 4FDBh, 70DBh, 70DBh, 70DBh, 4FDBh, 4F20h, 4F20h, 4FDBh
dw 0720h, 0720h, 70DBh, 4FDBh, 4F20h, 4F20h, 4FDBh, 70DBh
dw 70DBh, 70DBh, 70DBh, 70DBh, 70DBh, 70DBh, 4FDBh, 4F20h
dw 4F20h, 4FDBh, 70DBh, 70DBh, 70DBh, 4FDBh, 4F20h, 4F20h
dw 4FDBh, 0F20h, 0F20h, 70DBh, 4FDBh, 4F20h, 4F20h, 4FDCh
dw 4FDCh, 4FDCh, 4FDCh, 4F20h, 4F20h, 4FDCh, 4FDCh, 4FDBh
dw 0F20h, 0720h, 0720h, 0720h, 0F20h, 0F20h, 0F20h, 0F20h
dw 0F20h, 0F20h, 0F20h, 0F20h, 0F20h, 0F20h, 0F20h, 0F20h
dw 2FDBh, 2F20h, 2F20h, 2FDBh, 70DBh, 70DBh, 70DBh, 0FDCh
dw 0FDCh, 0FDCh, 0FDCh, 70DBh, 0F20h, 2FDBh, 2F20h, 2F20h
dw 2FDBh, 70DBh, 70DBh, 70DBh, 2FDBh, 2F20h, 2F20h, 2FDBh
dw 0720h, 0720h, 70DBh, 5FDBh, 57DBh, 57DBh, 2FDBh, 70DBh
dw 70DBh, 70DBh, 0FDCh, 0FDCh, 0FDCh, 70DBh, 2FDBh, 2F20h
dw 2F20h, 2FDBh, 70DBh, 70DBh, 70DBh, 2FDBh, 2F20h, 2F20h
dw 2FDBh, 0F20h, 0F20h, 70DBh, 2FDBh, 2F20h, 2F20h, 2FDBh
dw 70DBh, 70DBh, 2FDBh, 2F20h, 2F20h, 2FDBh, 70DBh, 70DBh
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0A2Ch, 0A20h, 0A2Ch, 0720h, 0720h, 0720h, 0720h
dw 3FDBh, 3F20h, 3F20h, 3FDBh, 0FDCh, 0FDCh, 0FDCh, 3FDBh
dw 3F20h, 3F20h, 3FDBh, 70DBh, 0F20h, 3FDBh, 3F20h, 3F20h
dw 3FDBh, 0FDCh, 0FDCh, 0FDCh, 3FDBh, 3F20h, 3F20h, 3FDBh
dw 0720h, 0720h, 0FDCh, 3FDBh, 3F20h, 3F20h, 3FDBh, 0FDCh
dw 0FDCh, 0FDCh, 3FDBh, 3F20h, 3FDBh, 70DBh, 3FDBh, 3F20h
dw 3F20h, 3FDBh, 0FDCh, 0FDCh, 0FDCh, 3FDBh, 3F20h, 3F20h
dw 3FDBh, 0F20h, 0F20h, 0FDCh, 3FDBh, 3F20h, 3F20h, 3FDBh
dw 0FDCh, 70DBh, 3FDBh, 3F20h, 3F20h, 3FDBh, 0FDCh, 0FDCh
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0A2Ch, 0A60h, 0E2Ah, 0A2Ch, 0A20h, 0A2Ch, 0720h, 0720h
dw 1FDBh, 5FDCh, 5FDCh, 5FDCh, 5FDCh, 5FDCh, 5FDCh, 5FDCh
dw 5FDCh, 5FDCh, 1FDBh, 70DBh, 0F20h, 1FDBh, 1FDCh, 1FDCh
dw 1FDCh, 1FDCh, 1FDCh, 1FDCh, 1FDCh, 1FDCh, 1FDCh, 1FDBh
dw 0720h, 0720h, 1FDBh, 5FDCh, 5FDCh, 5FDCh, 5FDCh, 5FDCh
dw 5FDCh, 5FDCh, 5FDCh, 5FDCh, 1FDBh, 70DBh, 1FDBh, 1FDCh
dw 1FDCh, 1FDCh, 1FDCh, 1FDCh, 1FDCh, 1FDCh, 1FDCh, 1FDCh
dw 1FDBh, 0F20h, 0F20h, 1FDBh, 5FDCh, 5FDCh, 5FDCh, 5FDCh
dw 1FDBh, 70DBh, 1FDBh, 5FDCh, 5FDCh, 5FDCh, 5FDCh, 1FDBh
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0A2Ch, 0A20h, 0A2Ch
dw 0E2Ah, 0A2Fh, 0A28h, 0A5Ch, 0E2Ah, 0A27h, 0A2Ch, 0720h
dw 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0020h
dw 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0020h
dw 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0020h
dw 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0020h
dw 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0020h
dw 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0020h
dw 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0020h
dw 0720h, 0720h, 0720h, 0720h, 0F20h, 0F20h, 0F20h, 0720h
dw 0720h, 0F20h, 0F20h, 0720h, 0720h, 0A60h, 0E2Ah, 0A29h
dw 6A28h, 6A60h, 6A20h, 6A27h, 6A29h, 0A29h, 0E2Ah, 0A27h
dw 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 0030h, 0030h
dw 0720h, 0130h, 0131h, 0720h, 0230h, 0232h, 0720h, 0330h
dw 0333h, 0720h, 0430h, 0434h, 0720h, 0530h, 0535h, 0720h
dw 0630h, 0636h, 0720h, 0730h, 0737h, 0720h, 0830h, 0838h
dw 0720h, 0930h, 0939h, 0720h, 0A30h, 0A41h, 0720h, 0B30h
dw 0B42h, 0720h, 0C30h, 0C43h, 0720h, 0D30h, 0D44h, 0720h
dw 0E30h, 0E45h, 0720h, 0F30h, 0F46h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 07DEh, 7720h, 7720h
dw 7720h, 7720h, 7720h, 7720h, 7720h, 7720h, 7720h, 7720h
dw 7720h, 7720h, 7720h, 7720h, 07DBh, 0A60h, 0A2Ch, 0720h
dw 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 1031h, 1030h
dw 0720h, 1131h, 1131h, 0720h, 1231h, 1232h, 0720h, 1331h
dw 1333h, 0720h, 1431h, 1434h, 0720h, 1531h, 1535h, 0720h
dw 1631h, 1636h, 0720h, 1731h, 1737h, 0720h, 1831h, 1838h
dw 0720h, 1931h, 1939h, 0720h, 1A31h, 1A41h, 0720h, 1B31h
dw 1B42h, 0720h, 1C31h, 1C43h, 0720h, 1D31h, 1D44h, 0720h
dw 1E31h, 1E45h, 0720h, 1F31h, 1F46h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 7E20h, 0FDCh
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 7F20h, 0A28h, 0E2Ah, 0A60h, 0720h
dw 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 2032h, 2030h
dw 0720h, 2132h, 2131h, 0720h, 2232h, 2232h, 0720h, 2332h
dw 2333h, 0720h, 2432h, 2434h, 0720h, 2532h, 2535h, 0720h
dw 2632h, 2636h, 0720h, 2732h, 2737h, 0720h, 2832h, 2838h
dw 0720h, 2932h, 2939h, 0720h, 2A32h, 2A41h, 0720h, 2B32h
dw 2B42h, 0720h, 2C32h, 2C43h, 0720h, 2D32h, 2D44h, 0720h
dw 2E32h, 2E45h, 0720h, 2F32h, 2F46h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 7D20h, 0FDBh
dw 0EDEh, 4F09h, 0BDEh, 0BDDh, 20CDh, 04DEh, 03DBh, 02DEh
dw 01B1h, 05DEh, 05DDh, 7520h, 0720h, 0A29h, 0A2Ch, 0720h
dw 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 3033h, 3030h
dw 0720h, 3133h, 3131h, 0720h, 3233h, 3232h, 0720h, 3333h
dw 3333h, 0720h, 3433h, 3434h, 0720h, 3533h, 3535h, 0720h
dw 3633h, 3636h, 0720h, 3733h, 3737h, 0720h, 3833h, 3838h
dw 0720h, 3933h, 3939h, 0720h, 3A33h, 3A41h, 0720h, 3B33h
dw 3B42h, 0720h, 3C33h, 3C43h, 0720h, 3D33h, 3D44h, 0720h
dw 3E33h, 3E45h, 0720h, 3F33h, 3F46h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 7F20h, 0FDBh
dw 0EDEh, 4F20h, 0BDEh, 0BDDh, 2020h, 04DEh, 03DBh, 02DEh
dw 01B1h, 05DEh, 05DDh, 7520h, 0A28h, 0E2Ah, 0A27h, 0720h
dw 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 4034h, 4030h
dw 0720h, 4134h, 4131h, 0720h, 4234h, 4232h, 0720h, 4334h
dw 4333h, 0720h, 4434h, 4434h, 0720h, 4534h, 4535h, 0720h
dw 4634h, 4636h, 0720h, 4734h, 4737h, 0720h, 4834h, 4838h
dw 0720h, 4934h, 4939h, 0720h, 4A34h, 4A41h, 0720h, 4B34h
dw 4B42h, 0720h, 4C34h, 4C43h, 0720h, 4D34h, 4D44h, 0720h
dw 4E34h, 4E45h, 0720h, 4F34h, 4F46h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 7720h, 07DFh
dw 07DFh, 07DFh, 07DFh, 07DFh, 07DFh, 07DFh, 07DFh, 07DFh
dw 07DFh, 07DFh, 07DFh, 7720h, 0A60h, 0A20h, 0A60h, 0720h
dw 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 5035h, 5030h
dw 0720h, 5135h, 5131h, 0720h, 5235h, 5232h, 0720h, 5335h
dw 5333h, 0720h, 5435h, 5434h, 0720h, 5535h, 5535h, 0720h
dw 5635h, 5636h, 0720h, 5735h, 5737h, 0720h, 5835h, 5838h
dw 0720h, 5935h, 5939h, 0720h, 5A35h, 5A41h, 0720h, 5B35h
dw 5B42h, 0720h, 5C35h, 5C43h, 0720h, 5D35h, 5D44h, 0720h
dw 5E35h, 5E45h, 0720h, 5F35h, 5F46h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 7720h, 05B2h
dw 0CDEh, 0CDEh, 0320h, 0320h, 0320h, 0BB2h, 0CDDh, 0DDCh
dw 0BDEh, 0AB1h, 0A20h, 7A20h, 0720h, 0F20h, 0F20h, 0720h
dw 0020h, 0020h, 0020h, 0020h, 0020h, 0020h, 6036h, 6030h
dw 0720h, 6136h, 6131h, 0720h, 6236h, 6232h, 0720h, 6336h
dw 6333h, 0720h, 6436h, 6434h, 0720h, 6536h, 6535h, 0720h
dw 6636h, 6636h, 0720h, 6736h, 6737h, 0720h, 6836h, 6838h
dw 0720h, 6936h, 6939h, 0720h, 6A36h, 6A41h, 0720h, 6B36h
dw 6B42h, 0720h, 6C36h, 6C43h, 0720h, 6D36h, 6D44h, 0720h
dw 6E36h, 6E45h, 0720h, 6F36h, 6F46h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 7F20h, 05B2h
dw 0CDEh, 0CDEh, 03DEh, 03DBh, 035Dh, 0BB2h, 0CDDh, 0DDBh
dw 0BDEh, 0AB1h, 0A20h, 7A20h, 0720h, 0F20h, 0F20h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0020h, 7037h, 7030h
dw 0720h, 7137h, 7131h, 0720h, 7237h, 7232h, 0720h, 7337h
dw 7333h, 0720h, 7437h, 7434h, 0720h, 7537h, 7535h, 0720h
dw 7637h, 7636h, 0720h, 7737h, 7737h, 0720h, 7837h, 7838h
dw 0720h, 7937h, 7939h, 0720h, 7A37h, 7A41h, 0720h, 7B37h
dw 7B42h, 0720h, 7C37h, 7C43h, 0720h, 7D37h, 7D44h, 0720h
dw 7E37h, 7E45h, 0720h, 7F37h, 7F46h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 7E20h, 07DFh
dw 07DFh, 07DFh, 07DFh, 07DFh, 07DFh, 07DFh, 07DFh, 07DFh
dw 07DFh, 07DFh, 07DFh, 7720h, 0720h, 0F20h, 0F20h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 7720h, 0ADEh
dw 09DBh, 06B1h, 06DEh, 06DEh, 05DEh, 05DDh, 04DBh, 03DEh
dw 03DDh, 02B2h, 0FDEh, 7F20h, 0720h, 0F20h, 0F20h, 0720h
dw 0754h, 0748h, 0745h, 0720h, 0761h, 0762h, 076Fh, 0776h
dw 0765h, 0720h, 0761h, 0772h, 0765h, 0720h, 0748h, 0745h
dw 0758h, 0720h, 076Eh, 0775h, 076Dh, 0762h, 0765h, 0772h
dw 0773h, 0720h, 0766h, 076Fh, 0772h, 0720h, 074Bh, 0757h
dw 0749h, 074Bh, 0754h, 0745h, 0758h, 0754h, 0720h, 0763h
dw 076Fh, 076Ch, 076Fh, 0772h, 0773h, 072Eh, 0720h, 0745h
dw 0778h, 0761h, 076Dh, 0770h, 076Ch, 0765h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 7F20h, 4CB1h
dw 4CB1h, 06B1h, 06DEh, 06DEh, 05DEh, 05DDh, 04DBh, 03DEh
dw 03DDh, 02B2h, 0FDEh, 7F20h, 0720h, 0F20h, 0F20h, 0720h
dw 0766h, 076Fh, 0772h, 0720h, 0762h, 0772h, 0769h, 0767h
dw 0768h, 0774h, 0720h, 0779h, 0765h, 076Ch, 076Ch, 076Fh
dw 0777h, 0720h, 076Fh, 076Eh, 0720h, 0762h, 076Ch, 0775h
dw 0765h, 073Ah, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 7E20h, 4CB1h
dw 4CB1h, 07DFh, 07DFh, 07DFh, 07DFh, 07DFh, 07DFh, 07DFh
dw 07DFh, 07DFh, 07DFh, 7720h, 0720h, 0F20h, 0F20h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 7E20h, 4CB1h
dw 4CB1h, 0EDDh, 0DB0h, 0CDEh, 0CDDh, 01B2h, 03DEh, 09DEh
dw 09DDh, 0ADBh, 0CDEh, 7C20h, 0720h, 0F20h, 0F20h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 1E20h, 1E4Bh, 1E57h, 1E49h, 1E4Bh, 1E54h, 1E45h, 1E58h
dw 1E54h, 1E20h, 1E46h, 1E49h, 1E4Ch, 1E45h, 1E4Eh, 1E41h
dw 1E4Dh, 1E45h, 1E20h, 1E2Fh, 1E43h, 1E3Dh, 1E31h, 1E45h
dw 1E20h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0120h, 4CB1h, 4CB1h, 4CB1h, 4CB1h, 4CB1h
dw 4CB1h, 0EDDh, 0DB0h, 0CDEh, 0CDDh, 17E3h, 03DEh, 09DEh
dw 09DDh, 0ADBh, 0CDEh, 7C20h, 0720h, 0F20h, 0F20h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 4CB1h, 4CB1h, 4CB1h, 4CB1h, 4CB1h, 4CB1h
dw 4CB1h, 07DFh, 07DFh, 07DFh, 07DFh, 07DFh, 07DFh, 07DFh
dw 07DFh, 07DFh, 07DFh, 7720h, 0720h, 0F20h, 0F20h, 0720h
dw 0749h, 0766h, 0720h, 076Eh, 076Fh, 0720h, 0763h, 076Fh
dw 076Ch, 076Fh, 0772h, 0720h, 0769h, 0773h, 0720h, 0773h
dw 0770h, 0765h, 0763h, 0769h, 0766h, 0769h, 0765h, 0764h
dw 0720h, 0777h, 0768h, 0769h, 0774h, 0765h, 0720h, 076Fh
dw 076Eh, 0720h, 0762h, 076Ch, 0761h, 0763h, 076Bh, 0720h
dw 0728h, 0730h, 0737h, 0729h, 0720h, 0777h, 0769h, 076Ch
dw 076Ch, 0720h, 0762h, 0765h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0820h, 07B1h, 07DBh, 0BB1h
dw 0ADEh, 09DEh, 0FDEh, 0FDDh, 0BB1h, 0ADEh, 09DEh, 09DEh
dw 06DEh, 05DEh, 04DDh, 7420h, 0720h, 0F20h, 0F20h, 0720h
dw 0775h, 0773h, 0765h, 0764h, 072Eh, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h, 0720h
dw 0720h, 0720h, 0730h, 07DFh, 07DFh, 0730h, 07DFh, 07DFh
dw 0730h, 785Fh, 785Fh, 785Fh, 785Fh, 785Fh, 785Fh, 785Fh
dw 785Fh, 785Fh, 785Fh, 785Fh, 0720h, 0F20h, 0876h, 0873h
.LIST
; END COLRHELP DATA
TEXT_DATA EQU $ ;where we put the text file
END