TITLE USER 17-Jun-82 USER PATCH AREAS ;-----------------------------------------------------------------------| ; REVISION HISTORY | ; | ; Number DD-MMM-YY WHO WHY | ;-------|---------------|-----------------------|-----------------------| ; 3.60a | 10-Jan-83 | Phil Glatz |Remove StarIndex, print| ; | | |time cond. dot commands| ;-----------------------------------------------------------------------| ;********************************************************** ; ; INTRODUCTION ; ; For WordStar Release 3.60 ; ; All user patchable options are contained in this module ; with the exception of the MailMerge dot commands ; which are in the Mailmerge overlay. ; ; The first section makes up the terminal patch area. ; It is the section which defines the communication ; with the terminal hardware and is used by all of ; the overlays. If you change the arrangement of the ; locations, you must also change SpellStar, INSTALL, ; REVER, RETEXT, and MailMerge. ; ; The second section contains the WordStar installation ; options such as initial help mode, insert ON/OFF ; and various other toggles. ; ; The third section contains the command dispatch tables. ; ; The fourth section makes up the printer patch area, ; which is also used by INSTALL and MAILMERGE. ; ;********************************************************** INCLUDE SYSEQU.INC ; system equates INCLUDE INCOND.INC ; global equates LSTING EQU TRUE IF LSTING ASEG ; absolute segment for listing ORG TPA + 132H ; origin address ENDIF SUBTTL MicroPro Business Confidential SECTION ONE PAGE 65 ;********************************************************** ; ; TERMINAL PATCH AREA ; ; This section contains the user-modifiable constants and ; routines for hardware-dependent terminal functions ; and characteristics required by the editor. ; ; There are three types of patches in this area. One can ; patch data values (HITE, WID) which describe the ; terminal, strings (CLEAD1, IVON) which define ; control sequences, or actual microprocessor ; instructions. ; In all character strings sent to the terminal, the ; first byte defines the number of characters to send ; to the terminal. ; ; This area is normally patched for your specific terminal ; by the interactive INSTALL program. Additional ; patching to this area is needed only for unusual ; terminals or video boards, or to meet special ; requirements, or to enhance or personalize your ; copy of WordStar. ; ; REQUIRED DATA : HITE, WID, and cursor controls. ; ;********************************************************** ;********************************************************** ; ; Video screen height and width parameters are required. ; ;********************************************************** HITE:: DB 24 ; Must be exact screen height in ; lines, current maximum is 48. WID:: DB 80 ; Must be <= exact screen width, ; current maximum is 240. PAGE ;********************************************************** ; ; Cursor positioning control sequences are required. ; ; Cursor positioning for most terminals is accomplished ; by sending : ; ; 1. A 'lead-in' string of one or more terminal ; specific characters. ; 2. The line number, with an offset (often 0) added. ; For some terminals, the column number is ; sent first. ; 3. For some terminals, another 'lead-in' string. ; 4. The column (or line) number, with an offset. ; 5. For some terminals, a terminating string. ; ; For most terminals, the line and column number are sent ; as one-byte binary numbers. Some terminals require ; that a two- or three-digit ASCII number is sent. ; ; For terminals that do not fit the above patterns, you ; must code your own subroutine. ; ;********************************************************** PAGE ;********************************************************** ; For example, the cursor is positioned on the ADM-3A ; terminal by sending : ; ; ESCAPE, '=', ; line number plus 20H, ; column number plus 20H. ; ; The following area is set up for this terminal. ; ;********************************************************** CLEAD1:: ; initial lead-in string DB 2 ; number of characters DB ESC ; first character DB '=' ; second character DB 0,0,0 ; space for six more characters DB 0,0,0 CLEAD2:: ; sent between line and column DB 0 ; number of characters,none in our ; example DB 0 ; first character DB 0,0,0 ; space for three more characters CTRAIL:: ; terminating string DB 0 ; number of characters DB 0,0,0,0 ; space for four characters CB4LFG:: ; send column before line ? DB 0 ; set non-zero to send column first LINOFF:: ; offset to add to line DB 20H ; add 20H to line number (0 is top ; line of screen before offset) COLOFF:: ; offset to add to column DB 20H ; add 20H to column number (0 is ; left-most column of screen ; before offset) ASCUR:: ; binary/ASCII digit flag DB 0 ; 0 to send binary line and column ; 2 to send 2-digit ASCII numbers ; 3 to send 3-digit ASCII numbers PAGE ;********************************************************** ; ; Provision for positioning cursor by user-coded ; subroutine, instead of under control of above ; items. For use in exceptional cases only. ; ; Insert a JMP instruction to your subroutine in the ; following three bytes. Whenever the first byte ; is non-zero, this location will be CALLed to ; position the cursor, and the above cursor patch ; items will be ignored. ; ;********************************************************** UCRPOS::NOP ; normally 0, or JMP to your cursor NOP ; positioning routine RET ;********************************************************** ; ; Examine the MORPAT area at the end of this section for ; space to put your subroutine. ; ; Your subroutine will receive the line number in the L ; register (0 = top line), and the column number in ; the H register (0 = left-most column). Your ; subroutine will also receive the following data, ; which may be useful for video board drivers : ; ; BC = number of character positions from the ; beginning of the screen to the beginning of ; the line in which the cursor is being placed. ; DE = number of character positions from the ; beginning of the screen to the new cursor ; position. ; ; Your subroutine may alter all registers. ; ; To output a character to the terminal from within your ; subroutine, CALL OUTCHR. Examine the following two ; bytes with your debugger to determine the correct ; address to CALL in the current release of WordStar. ; ;********************************************************** DW OUTCHR## ; the address of the byte ; output routine is loaded ; here PAGE ;********************************************************** ; ; Everything in the rest of this section is optional. ; The items relate either to enhanced performance ; (use of inverse video or altered intensity to set ; off blocks of text), or for accomodating unusual ; terminals. ; ;********************************************************** ; Erase to end of line string. If this function is not ; available, leave the first byte zero, and the editor ; will perform the function more slowly via software. ERAEOL::DB 0 ; number of characters DB 0 ; first character DB 0,0,0 ; additional characters DB 0,0 ; Delete screen line containing the cursor, and move lower ; lines on the screen up one line. If this function ; is not available, leave the first byte zero, and ; the editor will perform the function more slowly ; via software. LINDEL::DB 0 ; number of characters DB 0 ; first character DB 0,0,0 ; additional characters DB 0,0 ; Insert a blank line on the screen, moving the line ; containing the cursor, and the lines below it down ; one line. If this function is not available, leave ; the first byte zero, and the editor will perform ; the function more slowly via software. ; If your terminal inserts below the cursor line, put ; a 'cursor up' code before the 'insert line' code. LININS::DB 0 ; number of characters DB 0 ; first character DB 0,0,0,0 ; additional characters DB 0,0,0 PAGE ; Turn on hilighting (inverse video, altered intensity, or ; some other means of hilighting a block of text). ; Applicable only if MEMAPV is zero. OPTIONAL. IVON:: DB 0 ; number of characters DB 0,0,0 ; up to 6 characters DB 0,0,0 ; Turn off hilighting. If no string is patched in, the ; IVON string will be used to turn off as well as to ; turn on. OPTIONAL. IVOFF:: DB 0 ; number of characters DB 0,0,0 ; up to 6 characters DB 0,0,0 ; Terminal initialization string. A string of bytes which ; will be sent to the terminal at the beginning of a ; session. See also INISUB. OPTIONAL. TRMINI::DB 0 ; number of bytes DB 0,0,0,0 ; up to 8 bytes DB 0,0,0,0 ; Terminal un-initialization string. A string of bytes ; which will be sent to the terminal at the end of a ; session. See also UNISUB. OPTIONAL. TRMUNI::DB 0 ; number of bytes DB 0,0,0,0 ; up to 8 bytes DB 0,0,0,0 ; User-patchable initialization subroutine. CALLed before ; the TRMINI string is sent. This subroutine may be ; used for special console initialization or other ; purposes. See UCRPOS comments. OPTIONAL. INISUB::NOP ; normally 0, or JMP to NOP ; your subroutine RET ; User patchable un-initialization subroutine. CALLed ; before the TRMUNI string is sent. This subroutine ; may be used to 'undo' any special terminal status ; used for the editor. See UCRPOS comments. OPTIONAL. UNISUB::NOP ; normally 0, or JMP to NOP ; your subroutine RET PAGE ;********************************************************** ; ; Miscellaneous terminal-related items ; ;********************************************************** ; Flag to permit display in the last column of the last ; line of the video screen. Usually disabled, as ; many terminals scroll up one line when a character ; is displayed in this position. Memory-mapped video ; boards usually can enable this feature. USELST::DB 0 ; set non-zero to display in the ; last screen position ; Delays executed after various terminal functions, before ; the next character is sent to the terminal, to ; allow response time required by certain terminals ; when operating at a high baud rate. Set to a ; larger value if you suffer a loss of characters ; after a terminal function. ; Each delay is approximately the number of ; milliseconds on a 4 Mhz Z-80, about twice as long ; on a 2 Mhz 8080. DELCUS::DB 10 ; 10+ millisecond delay after ; cursor positioning DELMIS::DB 5 ; 5+ millisecond delay after other ; functions PAGE ;********************************************************** ; ; Provisions for memory-mapped video boards that meet the ; following restrictions : ; ; 1. Character positions appear as sequential memory ; locations increasing from a base address. ; ; 2. Hilighting, is used, is invoked by setting the high- ; order bit of the character. ; ; 3. The video board must always be 'mapped-in' to the ; address space, or must be able to be 'switched in' ; at an address above approximately 8000H, and the ; routines for 'switching in' and 'switching out' ; must be patched at SWIN and SWOUT in this section. ; ; If MEMAPV is set to non-zero, WordStar will store ; directly into your video board, rather than doing ; console output via the operating system. This is ; the fastest method for video boards meeting the ; above named restrictions. ; ;********************************************************** MEMAPV::DB 0 ; set non-zero to use memory-mapped ; video direct storage method MEMADR::DW 00 ; address of video screen RAM, top ; line, left-most column PAGE ;********************************************************** ; ; Discussion of memory-mapped video board installation ; ; 1. The simplest installation method is to access the ; board through the operating system, as though it ; were a terminal. This requires that the cursor can ; be positioned by outputting a character sequence. ; Only the optional features (line insert, erase to ; end of line, etc.) that can be invoked by sending ; character sequences may be used. ; ; 2. For boards that meet the MEMAPV/MEMADR restrictions ; (see above), the direct character storage method is ; the most efficient in terms of speed, memory ; utilization, and because other special features ; (erase to end of line, line insert, line delete, ; etc.) are implicitly available with no installation ; considerations. ; ; 3. For boards that do not meet the MEMAPV/MEMADR ; restrictions : ; ; A. Access the board as a terminal (item 1) ; ; B. Boards that cannot be accessed as a terminal (if ; cursor positioning or some other desired ; feature is not accessable through the ; operating system) require that you write ; a special routine to provide the desired ; features ; ;********************************************************** PAGE ;********************************************************** ; ; Suggestions for coding your own video board driver : ; ; Build the driver around a custom character output ; routine accessed through the UCONO patch. This ; routine will receive the ASCII character codes 20H ; through 7EH (which it must display), the control ; codes for 'carriage-return' and 'line-feed', which ; it must properly interpret, and whatever other ; character sequences you have patched into the ; cursor positioning items and other optional ; terminal items. Note that UCONO receives other ; possibly useful information in BC, DE, and HL. ; ; Cursor positioning may be accomplished by the use ; of a character sequence (by using the cursor ; positioning patch items) that your routine will ; interpret, or by another custom routine accessed ; through the UCRPOS patch item. Note that UCRPOS ; also receives useful information in BC, DE, and HL. ; ; Hilighting may be flagged by setting the high-order ; bit of characters to be hilighted (see HIBIV above) ; or by character sequences (see IVON and IVOFF), ; which would be interpreted by your routine. ; ; Erase to end of line, line delete, etc., if ; implemented, must be invoked by character sequences ; patched into ERAEOL, LINDEL, etc., which would also ; be interpreted by your routine. ; ; Initialization may be done through TRMINI or INISUB ; ;********************************************************** PAGE ; Flag that hilighting will occur if the high-order bit of ; the console output character is set. Intended ; primarily for use when MEMAPV is non-zero, but this ; might be useful when custom console output routines ; are being used. See UCONO. HIBIV:: DB 0 ; set non-zero if hilighting is ; invoked by the high-order bit ; Flag that the display of the cursor on memory-mapped ; video boards is accomplished by setting the high- ; order bit of the character under the cursor, rather ; than by sending a cursor positioning string as ; described by the cursor control items. This saves ; time, and eliminates interaction problems that can ; arise if the character display is by direct storage, ; but cursor positioning is done by an external board ; driver. ; The cursor positioning items should still be ; installed to interface to the external cursor ; positioning function; it is used at start-up and ; exit to position internal and external cursors in ; the same place. HIBCUR::DB 0 ; set non-zero to display the ; cursor by setting the high-order ; bit of a character ; Flag that the cursor must be blinked by the editor, in ; order to be visible, when on, or adjacent to a ; hilighted area. This should be 0FFH if your cursor ; is not visually distinct from your hilighted areas, ; and if hilighting is used (via IVON/IVOFF or HIBIV). ; This is normally needed for memory-mapped video ; boards with HIBIV and HIBCUR both set non-zero. ; This flag is applicable to both terminals and video ; boards. The blink method used for a terminal is to ; alternately send IVON and IVOFF strings, with short ; delays. CRBLIV::DB 0 ; set to 0FFH for the editor to ; control blinking PAGE ;********************************************************** ; ; Here are two schemes for circumventing operating systems ; that 'backspace' when 'delete' is input. ; ; A number of proprietary versions of CP/M output ; backspace-space-backspace after a 'delete' (rubout) ; is input. The code to do this is in the BIOS ; section of your system. The intent of this feature ; is to make the 'delete' key erase a character on ; the screen, instead of echoing the deleted ; character, during system command line input. ; Unfortunately, this feature causes a mess on the screen ; after the delete key is pressed in WordStar, as the ; character that your system replaces is usually the ; first character of a cursor positioning sequence ; being output by WordStar. ; ; The 'delete-backspace' feature must be disabled during ; WordStar operation. The two methods are : ; ; 1. By referring to your BIOS listing in your system ; documentation, identify the location in which your ; operating system saves the last character input in ; order to test for 'delete' on output. In some ; systems, this is location 4FH. Patch this address, ; low-order byte first, into ZAFCIN below. ; ; 2. Patch RUBFXF below to non-zero. The contents of ; RFIXER will then be output immediately after a ; 'delete' is input. This character, rather than the ; next cursor positioning string, should then be ; replaced by backspace-space-backspace, thereby ; reducing the consequences of your system's ; machinations. Try null (00H) in RFIXER first; if ; that doesn't work, try backspace (08H) or possibly ; space (20H). ; ;********************************************************** ZAFCIN::DW 00 ; zero, or pointer to the location ; to zero after each keyboard ; character is input RUBFXF::DB 0 ; non-zero to output the character ; in RFIXER after each 'delete' is ; input RFIXER::DB 0 ; character to output after each ; 'delete' is input if RUBFXF is ; non-zero PAGE ;********************************************************** ; ; Optional user-supplied console I/O subroutines. You may ; patch JMP's here to your own console input, console ; output, and console status subroutines, in which ; case these routines, instead of the operating ; system BIOS entry points, will be used for all ; console I/O (except I/O to printer as alternate ; console). ; These subroutines may alter all registers. ; ; Use of a custom subroutine accessed here is suggested, ; for example, to drive a video board that cannot be ; driven via output to the operating system, and ; which does not meet the restrictions for use of ; MEMAPV above. ; ; UCONO also receives : ; L = line number on screen ; H = column number on screen ; BC = number of bytes from beginning of screen to ; beginning of current line ; DE = Number of bytes from beginning of screen to ; character position ; ; UCONO subroutine must handle the following characters : ; ASCII printing characters 20H through 7EH : ; Display the character, advance the cursor ; to the next printing position. ; CR (0DH) : ; Position the cursor at the beginning of the ; current line. ; LF (0AH) : ; Move the cursor down one line, or, if ; already on the bottom line of the screen, ; scroll the screen up one line. ; Plus handle all control sequences generated by the ; cursor patch items above (unless UCRPOS is ; used), and the optional patch items ERAEOL, ; LINDEL, LININS, IVON, IVOFF, TRMINI, and ; TRMUNI described above. ; ; Your subroutine may alter all registers. ; ;********************************************************** PAGE UCNSTA:: ; user console status subroutine NOP ; normally 0, or JMP to your own NOP ; subroutine. Must return 0 if no RET ; character ready, 0FFH if one is ; ready. UCONI:: ; user console input subroutine NOP ; normally 0, or JMP to your own NOP ; subroutine. Must return the RET ; character in A. May be called ; before a character is ready. If ; no character is ready, routine ; must wait until a character is ; available. UCONO:: ; user console output subroutine NOP ; normally 0, or JMP to your own NOP ; subroutine. Subroutine receives RET ; the character in A. If hi-bit ; hilighting is in use (HIBIV set ; above, the high-order bit will ; be on if the character should be ; hilighted. PAGE ;********************************************************** ; ; Provision for switching a memory-mapped video board into ; and out of the address space. ; ; Most video boards always appear in memory. However, ; certain boards must be 'switched in' to be accessed ; and 'switched out' when not being accessed, so that ; system ROM or RAM at the same addresses may be ; accessed. If you have a video board that requires ; 'switching in' and 'switching out', the board may ; may be accessed on a direct memory-mapped basis by ; WordStar without losing the use of other memory at ; the same addresses. To do this, suitable routines ; must be patched at SWIN and SWOUT below. ; ; When 'switched in', the addresses occupied by the board ; must not conflict with WordStar's code area, so the ; board addresses must appear at or above 8000H. The ; board may, however, appear at the same addresses ; normally occupied by the operating system. ; ; See MEMAPV and other related items listed above for ; other aspects of installation for direct memory ; access to a memory-mapped video board. ; ; Six bytes of space is provided for each routine. If your ; routines are longer, patch in a JMP instruction to ; a routine in MORPAT or elsewhere. Your routines ; MUST preserve all registers except PSW. When no ; routine is present, the sequence : ; ; NOP ; NOP ; RET ; ; should be left in the patch area. No routines ; should be installed, except when a video board is ; being used on a direct memory-mapped basis. ; ;********************************************************** SWIN:: NOP ; 'switch in' routine or JMP NOP RET DB 0,0,0 ; extra space SWOUT:: NOP ; 'switch out' routine or JMP NOP RET DB 0,0,0 ; extra space PAGE ;********************************************************** ; ; The following delay constants may be altered to adjust ; for variations in CPU speed, and to fit individual ; preferences. Each of the following five items may ; be set to values between 01H (minimum delay) and ; 7FH (maximum delay). It is suggested that you ; retain the relative proportions of these delays. ; ;********************************************************** DEL1:: DB 3 ; short delay, uses include: ; cursor blink when on hilighted ; character and CRBLIV is non-zero ; ('on' portion of cycle) ; cursor blink between "Y/N: " in ; status line and file display ; during replace command ; (time in file display) DEL2:: DB 9 ; medium-short delay, uses include: ; cursor blink when on hilighted ; character and CRBLIV is non-zero ; ('off' portion of cycle) ; cursor blink between "Y/N: " in ; status line and file display ; during replace command ; (time in status line) DEL3:: DB 25 ; medium-long delay, uses include: ; time from hitting a prefix key ; until prefix menu is displayed ; delay at a "FILE NAME? " prompt ; before the display of the ; special characters menu DEL4:: DB 64 ; long delay, uses include: ; time signon remains on screen ; time "NEW FILE" message remains ; on screen ; time "ABANDON" message remains ; on screen DEL5:: DB 9 ; delay used for a full screen ; redisplay during horizontal ; scrolling PAGE ;********************************************************** ; ; Patch items for non-standard versions of WordStar ; ; Inoperative in normal WordStar ; ;********************************************************** TRSCRS::DB 0 ; set to 0FFH for TRS-80 model I to ; use special cursor driver TRSCIF::DB 0 ; set to 0FFH for TRS-80 model I to ; use special keyboard driver HETHBS::DB 0 ; set to 0FFH for HEATH89 with ; Lifeboat CP/M 1.42 and 1.43, will ; allow WordStar to patch BIOS to ; alleviate BS, SPACE, BS problem ; when RUBOUT is entered APLFLG::DB 0 ; used only by the APPLE ][ version ; of WordStar, set by INSTALL, no ; need for users to change MPMFLG::DB 0 ; set to 0FFH if your version of ; WordStar will be running under ; an MP/M system. Setting this flag ; will affect various sections of ; WordStar, such as : A) WordStar ; will swap users more frequently ; which will help prevent system ; slowdown; B) WordStar will not ; request disk resets, which ; would probably be ignored; ; C) WordStar will MP/M function ; number 141 for delays, instead ; of performing timing loops. ; You will probably wish to adjust ; the DEL1..DEL5 values to make ; the delays more reasonable; ; D) Neither WordStar nor SpellStar ; will make adjustments to the ; XIOS areas in common memory, ; which would normally make other ; users seem to disappear DEFDSK::DB 'A'-40H ; the drive code of the disk drive ; to test for WSMSGS.OVR and ; WSOVLY1.OVR if the necessary ; file is not on the currently ; logged drive SCRLSZ::DB 20 ; the number of column positions to ; horizontal scroll at one time. PAGE ;********************************************************** ; ; The following table is used by WordStar and SpellStar to ; handle any non-English ASCII characters which ; should be interpreted as valid letters, instead of ; word delimiters. Up to 15 special characters may be ; included in this table, and a zero byte marks the ; end of the table. For example : the French word ; pass`ee is normally entered into a WordStar file as ; "pass`^Hee", and both WordStar and SpellStar would ; think that there are actually two words, "pass" and ; "ee". By patching both the accent mark (60H) and the ; backspace (08H) into this table, both WordStar and ; SpellStar will treat "pass`^Hee" as a single word. ; Be careful that the spelling you use in your ; WordStar file is identical to the spelling in your ; SpellStar dictionary (that is, the "`" before the ; "^H") or SpellStar will still mark the word as ; misspelled. As an added convenience, accent marks ; may also be patched into the AUTOBS table below, ; and WordStar will automatically provide the ; backspace (^H) character in the right place. ; ;********************************************************** CNVTBL::DB 0,0,0,0 ; up to 15 bytes may be patched, DB 0,0,0,0 ; with a zero byte at the end of DB 0,0,0,0 ; the table DB 0,0,0,0 PAGE ;********************************************************** ; ; Space for user-added subroutines ; ;********************************************************** MORPAT::DB 0,0,0,0 ; additional space that may be used DB 0,0,0,0 ; for other patches DB 0,0,0,0 ; For example : a cursor positioning DB 0,0,0,0 ; subroutine, or for INISUB or DB 0,0,0,0 ; UNISUB subroutines DB 0,0,0,0 ; For more space, see PBGMEM below DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 PAGE ;********************************************************** ; ; Provision for extended patching ; ; PBGMEM points to the beginning of memory that WordStar ; can use for working storage. If more space is ; needed for patches, first run INSTALL, then put the ; extra code beginning at the address in PBGMEM, and ; then increase the value in PBGMEM to point beyond ; your patches. Be sure to use a large enough "SAVE" ; command -- the save size required is MUCH larger ; than for the normal WS.COM file without added ; patches. ; ;********************************************************** PBGMEM::DW MEMORY##; an indefinite amount of code may ; be added after the address in ; PBGMEM AFTER installation. Do ; not add code before INSTALLing, ; as INSTALL will delete it. ;********************************************************** ; ; END OF TERMINAL MODIFICATION AREA ; ;********************************************************** PAGE SUBTTL MicroPro Business Confidential SECTION TWO ;********************************************************** ; ; DEFAULT VALUE PATCH AREA ; ; This section contains values that the user may alter ; in order to change the initial values that WordStar ; uses at start-up, or to disable or modify certain ; features. ; ;********************************************************** PUBLIC LIPF, LIPFE ; public equates PAGE ;********************************************************** ; ; INITIALIZATION ITEMS ; ; Any of the following patch items can be set by a command ; from WordStar -- the values listed below reflect ; the default state that WordStar will use when the ; program begins. Changing any of these values will ; allow you to 'personalize' your version of WordStar ; and eliminate the need to issue the relevant ; command each time the editor is invoked. ; ;********************************************************** ; Initial help level, which is normally set to 3 for ; maximum help -- all menus are displayed while ; editing. Patch to 2 to suppress the main editing ; menu (to make more of the screen available for file ; display). Patch to 1 to also suppress prefix help ; menus. Patch to 0 to suppress all help. This value ; is changed while editing by the ^JH command. ITHELP::DB 3 ; set for maximum help ; Initial help message -- enables the display of the ; message "For maximum help type ^JH3" at the start ; of the first edit if ITHELP is 1 or 2. NITHLF::DB 0FFH ; set so that message will not ; display, set to 0 to enable the ; display of the message ; Flag to describe initial state of insert toggle. This ; value is changed while editing by the ^V command. ITITOG::DB 0FFH ; set to start in insert mode, set ; to 0 to start with insert off ; Flag to describe initial state of OPENING directory ; display toggle. This value is changed from the ; OPENING menu by the F command. Directory display ; during editing defaults to off. ITDSDR::DB 0FFH ; set to display the directory, ; set to 0 to initially not ; display the directory PAGE ; Initial page format for page break display while editing ; and for pagination while printing. Dot commands in ; the file override these values, both during editing ; and during print. INITPF::DB 8 ; line height, in 48ths of an inch ; for daisy printers DB 66 ; paper length (.PL) in lines DW 8 * 66 ; and in 48ths of an inch DB 8 ; line height repeated here DB 3 ; top margin (.MT) in lines DW 8 * 3 ; and in 48ths of an inch DB 8 ; line height repeated here DB 2 ; heading margin (.HM) in lines DW 8 * 2 ; and in 48ths of an inch DB 8 ; line height repeated here DB 8 ; bottom margin (.MB) in lines DW 8 * 8 ; and in 48ths of an inch DB 8 ; line height repeated here LIPFE EQU $ - INITPF ; length of INITPF for edit DB 2 ; footing margin (.FM) in lines DW 2 * 8 ; and in 48ths of an inch DB 8 ; line height repeated here DB 0 ; storage for standard width DB 12 ; standard character width in ; 120ths of an inch : 1/10 inch DB 10 ; alternate character width in ; 120ths of an inch : 1/12 inch DB 8 ; page offset in characters LIPF EQU $ - INITPF ; length of INITPF for print PAGE INITLM::DB 0 ; left margin column number - 1 ; valid values are 0..INITRM - 3 INITRM::DB 64 ; right margin column number - 1 ; valid values are 2..WID - 4 ; NOTE -> INITRM will be reduced to WID - 4 if it ; is patched too large. The user may subsequently ; increase (to a maximum of 240) if desired. ; NOTE -> INITRM is also the default applied by ; MailMerge at the beginning of a file, before the ; first soft carriage-return is seen, if MailMerge's ; print time line forming is invoked. ; NOTE -> the initial page number column (.PC) is ; set to half way between INITLM and INITRM ; Initial subscript/superscript roll in 48ths of an inch ; for printing on incremental printers INITSR::DB 3 ; set to 3/48ths of an inch PAGE ;********************************************************** ; ; The following values are used for editing in 'document' ; mode (the D command from the OPENING menu), but are ; set to zero for editing in the 'non-document' mode ; (the N command from the OPENING menu). For each, ; the value 0FFH means 'ON' and 00H means 'OFF'. No ; other values should be used. ; ;********************************************************** INITWF::DB 0FFH ; word wrap flag (^OW command) DB 0FFH ; justify flag (0 for ragged right) ; (^OJ command) DB 0FFH ; variable tabs flag -- 0 for tab ; characters in file with fixed ; display at every 8 columns ; (^OV command) DB 0 ; soft hyphen entry flag, 0FFH sets ; soft hyphen when '-' typed ; (^OE command) DB 0FFH ; hyphen help flag (^OH command) ; if zero, paragraph reform will ; not allow user to hyphenate DB 0FFH ; print control and soft hyphen ; display (^OD command) DB 0FFH ; display 'ruler line' showing tab ; stops and margins (^OT command) DB 0FFH ; dynamic page break determination ; flag: set to zero to eliminate ; page breaks during editing, will ; not use hi-order bits as markers, ; page number will not show in ; status line, and next item can ; not be set to non-zero. Not ; changeable by command. DB 0FFH ; page break display flag, set to ; zero to prevent line of dashes ; (---) at page break and suppress ; page number in status line ; (^OP command) DB 1 ; initial line spacing, set to 1 ; to single space text as entered ; (^OS command) DB 0 ; block/column move flag, set to ; 0FFH to enable column move ; (^KN command) PAGE ;********************************************************** ; ; The following items are not initialization items. They ; may be changed only by patching here. ; ;********************************************************** NONDOC::DB 0 ; set to 0FFH to enter WordStar in ; non-document mode if a filename ; is specified on the command line DOTSON::DB 0FFH ; enable interpretation of all dot ; commands, with regard to dynamic ; page break display, and the ; display of a '?' flag for invalid ; dot commands DECCHR::DB '.' ; 'decimal point' character which ; will terminate alignment action ; when decimal tab is in use DOTCHR::DB '.' ; character used to begin a dot ; command ; Table of find/replace options -- do not change order BAKCHR::DB 'B' ; 'search backwards' CASCHR::DB 'U' ; 'ignore case' GLOCHR::DB 'G' ; 'entire file' (global) NASCHR::DB 'N' ; 'no ask before replace' WORCHR::DB 'W' ; 'whole-words only' ; Table of spelling check options -- do not change order BYPCHR::DB 'B' ; 'bypass' DCTCHR::DB 'D' ; 'add to dictionary' FIXCHR::DB 'F' ; 'fix word' IGNCHR::DB 'I' ; 'ignore word' SPLCHR::DB 'S' ; 'add to supplement' BLNCHR::DB CTRLO ; non-break space character, is ; printed as a space but is not ; treated as a word break by word ; wrap or paragraph reform, nor as ; a place to add justification PAGE ;********************************************************** ; ; MailMerge special characters ; ;********************************************************** CMTCHR::DB ';' ; character that begins a ; .IF/.EX/.EF comment and ends ; that dot command ENDEXP::DB 'G' ; character that indicates the end ; of an expression for .IF/.EX ; evaluation RVELIM::DB ',' ; delimiter for data values on line RVQUOT::DB '"' ; encloses values containing commas, ; leading or trailing blanks DB 0 ; end of table TXBACK::DB '/B' ; 2 characters that indicate a ; 'search to beginning of file' ; for .EF command VARCH1::DB '&' ; character that introduces variable VARCH2::DB '&' ; character that terminates variable VAROPC::DB '/' ; character after name but before ; option letters DB 'O' ; option letter for 'omit line if ; variable is null' PAGE COCODE::DW COMPOP ; points to table of comparison ; operators -- 9 entries LOCODE::DW LOGICP ; points to table of logical ; operators -- 2 entries COMPOP: ; comparison operators DB '<>' ; not equal DB 0,0FDH ; terminator, operator code DB '><' ; not equal DB 0,0FDH DB '<=' ; less than or equal DB 0,0FCH DB '=<' ; less than or equal DB 0,0FCH DB '>=' ; greater than or equal DB 0,0FBH DB '=>' ; greater than or equal DB 0,0FBH DB '<' ; less than DB 0,0FAH DB '>' ; greater than DB 0,0F9H DB '=' ; equal DB 0,0F8H LOGICP: ; logical operators DB '.AND.' ; logical AND DB 0,0FFH DB '.OR.' ; logical OR DB 0,0FEH DB 0,0,0 ; extra patch space DB 0,0 PAGE ;********************************************************** ; ; Hyphenation help -- Hyphenation criterion ; ; The HZONE value below (adjusted somewhat depending on ; the number of words on a line) determines the ; maximum number of columns short of the right margin ; the last full word on a line may end, without a ; hyphenation stop occuring during paragraph reform, ; with hyphenation help on. Increase for fewer ; hyphenation stops, decrease for more stops. ; ;********************************************************** HZONE:: DB 4 ; a nice number for 65 column text ;********************************************************** ; ; Vowels and consonants -- the tests that position the ; cursor at a hyphenation stop classify characters ; as either vowels or consonants by using the ; following tables. ; ;********************************************************** PNCON:: DW NONCON ; address of non-consonant table PVWTB:: DW VOWTAB ; address of vowel table VOWTAB: ; table of all vowels begins here DB 'Y' ; 'Y' can be either DB '[]{}' ; these codes can be used in ; European languages as accented ; vowels NONCON: ; table of non-consonants DB 'AEIOU' ; true vowels DB 0 ; zero byte terminates table DB 0,0,0,0 ; space for expanding above tables PAGE ;********************************************************** ; ; Characters used for screen display while editing, and ; display in the right-most column of screen ; ;********************************************************** BOFCHR::DB ':' ; beginning-of-file flag character CONCHR::DB '+' ; line continuation flag character EOFCHR::DB '.' ; end-of-file flag character FDTCHR::DB 'M' ; MailMerge dot command flag char HARDCR::DB '<' ; end of paragraph flag character, ; will not move unless moved by ; the user LFCHR:: DB 'J' ; line ends in line-feed OVPCHR::DB '-' ; overprint line flag character PAGCHR::DB 'P' ; last line of page flag character SOFTCR::DB ' ' ; line is not a paragraph ending ; paragraph reform may move the ; position of this character WDTCHR::DB 'I' ; StarIndex dot command flag char SOFHYC::DB '-' + 80H ; this character is used to display both inactive ; soft hyphens (in mid-line), and active soft ; hyphens (at the end of a line) PAGFIL::DB '-' ; character used to fill line at ; page break PAGE ;********************************************************** ; ; Display characters for the 15 place-markers, internally ; numbered 1..15. The table is indexed by the marker ; number - 1. Each entry is the ASCII character to ; display between brackets (<>), or 00H to prevent ; display of a marker. ; ;********************************************************** MARKS:: DB 'B' ; internal #1 : block beginning DB 'K' ; internal #2 : block end ; NOTE -> when supported by the terminal in use ; (and the patches in Section One reflect this ; support), the marked block is displayed as ; hilighted text, with the and suppressed. ; When such hardware support is available, these ; markers are displayed if a) only one is set; ; b) the end is before the beginning or; c) they ; are both in the same place. DB 0 ; internal #3 : beginning of ; command, used by ^QP command DB 0 ; internal #4 : start of last find/ ; replace, or source of text for ; last block move or copy, used by ; ^QV command DB 0 ; internal #5 : currently not used DB '0123456789' ; internals #6..#15 are user place ; markers 0..9 PAGE ;********************************************************** ; ; Defaults for print options ; ; The following variables correspond to the options ; questions asked when printing is initiated. Each is ; set to zero for the indicated option to default to ; 'NO', or 0FFH to default to 'YES'. The default is ; used when a character other than YESCHR or NOCHR ; has been input. ; ;********************************************************** PODBLK::DB 0 ; disk file output DB 0 ; use form feeds DB 0 ; suppress page formatting DB 0 ; pause between pages NOUFF:: DB 0 ; set to non-zero to suppress the ; "USE FORM FEEDS" question in the ; print initiate dialog, for those ; printers which cannot form feed ITPOPN::DB 0 ; initial "OMIT PAGE NUMBERS" flag, ; set to 0FFH to print no page ; numbers (.OP/.PN commands) ITMIJ:: DB 0FFH ; initial microjustify switch, set ; to zero to suppress change during ; print with .UJ command ITBIP:: DB 0FFH ; initial bidirectional print switch, ; set to zero to disable .BP command PAGE ;********************************************************** ; ; Names of the various files which constitute WordStar ; ;********************************************************** ; name of file containing WordStar root. Normally ; WS.COM, but if another name is selected from ; the INSTALL program, the actual name is stored ; here. This must be the actual name of the file ; for correct operation of SpellStar, StarIndex, ; and the R command (run external program) from ; the OPENING menu. FNWSCM::DB 0,'WS COM' ; name of the file containing message and menu ; texts. Normally WSMSGS.OVR, but the file may be ; renamed, and the new name may be patched here. DSKTNA::DB 0,'WSMSGS OVR' ; name of the overlay file. Normally WSOVLY1.OVR, ; but the file may be renamed, and the new name ; may be patched here. FNOVLY::DB 0,'WSOVLY1 OVR' ; name of MailMerge overlay file. Normally ; MAILMRGE.OVR, but the file may be renamed, and ; the new name may be patched here. FNMRGP::DB 0,'MAILMRGEOVR' PAGE ;********************************************************** ; ; Automatic backspace character table ; ; Up to 10 characters, typically accent marks, may be ; patched into the following table. Whenever one of ; these characters is entered, WordStar will ; automatically enter a backspace (08H) print control ; immediately after the character. ; ;********************************************************** AUTOBS::DB 0,0,0,0 ; the table is initially empty. DB 0,0,0,0 ; Patch in the desired characters, DB 0,0 ; starting with the first byte. A DB 0 ; zero ends the table. BSCHR:: DB 8 ; backspace code, change if desired ; to auto-enter another character ;********************************************************** ; ; END OF DEFAULT VALUE PATCH AREA ; ;********************************************************** PAGE SUBTTL MicroPro Business Confidential SECTION THREE ;********************************************************** ; ; COMMAND DISPATCH TABLES ; ; The following tables are used to interpret characters ; entered by the operator as commands to WordStar. ; ; Each table entry consists of four bytes : ; ; Byte 0 = (first) command character ; Byte 1 = zero for one-key commands, or the second ; character of two-key commands ; Bytes 3,4 = the address to call (DO NOT ALTER), or ; if the value is less than 256, the ; index (see WSMSGS.OVR) to a text ; string to display ; ; The last entry is followed by a zero. ; ; The command character portion (first two bytes) of the ; entries may be freely changed between single and ; double keystrokes, or to a different prefix (first ; key) for a two-keystoke command. However, the same ; key may not be used for both a one-key command and ; as the prefix key of two-key commands. ; ; Duplicate entries are allowed. You may add a new key or ; key pair for an existing function, without deleting ; the old command, by using the extra space provided ; at the end of each table. ; ; Command characters in the first byte of each table entry ; should be control codes (01H..3FH), as codes not in ; the tables are taken as text to be entered into the ; current file. ; ; The second character can be any character EXCEPT a lower ; case letter. The editor ignores bit 6 (40H) when ; matching the second keystroke against the table ; entry, so that control characters and letters are ; equivalent. Lower case characters entered as the ; second keystroke of a command are converted to upper ; case before the table is searched. ; ;********************************************************** ; Definitions of symbols used for prefix characters QCKPRE EQU CTRLQ ; for 'quick' commands BLKPRE EQU CTRLK ; for 'block' commands FILPRE EQU CTRLK ; for 'file' commands ONSPRE EQU CTRLO ; for 'onscreen' commands HELPRE EQU CTRLJ ; for 'help' commands PAGE ;********************************************************** ; ; OPENING MENU DISPATCH TABLE ; ; This table is used to interpret characters entered from ; the OPENING menu. ; ;********************************************************** NOFTAB:: DB CTRLD,0 DW SFIL## ; edit file, document mode DB CTRLN,0 DW SFILP## ; edit file, non-document mode DB CTRLH,0 DW SETHEL## ; set help level DB CTRLX,0 DW EXITIF## ; exit to system DB CTRLP,0 DW PFIL## ; print file DB CTRLM,0 DW FPFIL## ; MailMerge file DB CTRLY,0 DW DELFIL## ; delete file DB CTRLF,0 DW DIRTGL## ; toggle directory display DB CTRLZ,0 DW DSCRUP## ; scroll directory up DB CTRLW,0 DW DSCRDN## ; scroll directory down DB CTRLL,0 DW SELDRV## ; select logged disk drive DB CTRLR,0 DW XPROG## ; run a program DB CTRLO,0 DW COPYF## ; copy file DB CTRLE,0 DW RENF## ; rename file DB CTRLV,0 DW VDDT## DB CTRLS,0 DW SPLSTR## ; run SpellStar ; DB CTRLI,0 ; DW WINDEX## ; run StarIndex DB 0,0 ; space for additional or DW 00 ; duplicate entries DB 0,0 DW 00 DB 0,0 DW 00 DB 0 ; zero marks end of table PAGE ;********************************************************** ; ; FILE EDITING COMMAND DISPATCH TABLE ; ; This table is used to interpret commands input during ; the editing of a file. ; ;********************************************************** VTAB:: ; Special entries for help messages for prefixes. ; These must be first, you normally would not ; wish to alter these. The second byte is set to ; 0FFH to flag that the appropriate help text ; should be displayed first (if the current help ; level is high enough), then the second keystroke ; should be input. DB QCKPRE,0FFH DW HELPF## ; help for ^Q group DB BLKPRE,0FFH DW HELPB## ; help for ^K group DB ONSPRE,0FFH DW HELPU## ; help for ^O group DB HELPRE,0FFH DW HELPZ## ; help for ^J group ; ^P prefix help is displayed from the ^P routine, ; see VESC in WMC2.MAC DB HELPRE,CTRLH DW SETHEL## ; set current help level DB CTRLS,0 DW CRB## ; cursor back character DB CTRLH,0 ; backspace also works DW CRB## ; cursor back character DB CTRLD,0 DW CRF## ; cursor forward character DB CTRLA,0 DW CBW## ; cursor back word DB CTRLF,0 DW CFW## ; cursor forward word DB CTRLX,0 DW CRD## ; cursor down line DB CTRLE,0 DW CRU## ; cursor up line DB QCKPRE,CTRLS DW CLL## ; cursor left edge screen DB QCKPRE,CTRLD DW CRR## ; cursor right edge screen DB QCKPRE,CTRLX DW CBB## ; cursor bottom of screen DB QCKPRE,CTRLE DW CTT## ; cursor top screen PAGE DB QCKPRE,'B' ; cursor to internal marker 1 - DW CMAR1## ; block beginning DB QCKPRE,'K' ; cursor to marker 2 - DW CMAR2## ; block end DB QCKPRE,'P' ; cursor to marker 3 - where DW CMAR3## ; last command began DB QCKPRE,'V' ; cursor to marker 4 - where DW CMAR4## ; search or move began DB QCKPRE,'0' ; cursor to internal marker 6 DW CMAR6## ; - user place marker 0 DB QCKPRE,'1' ; cursor to internal marker 7 DW CMAR7## ; - user place marker 1 DB QCKPRE,'2' ; cursor to internal marker 8 DW CMAR8## ; - user place marker 2 DB QCKPRE,'3' ; cursor to internal marker 9 DW CMAR9## ; - user place marker 3 DB QCKPRE,'4' ; cursor to internal marker 10 DW CMAR10## ; - user place marker 4 DB QCKPRE,'5' ; cursor to internal marker 11 DW CMAR11## ; - user place marker 5 DB QCKPRE,'6' ; cursor to internal marker 12 DW CMAR12## ; - user place marker 6 DB QCKPRE,'7' ; cursor to internal marker 13 DW CMAR13## ; - user place marker 7 DB QCKPRE,'8' ; cursor to internal marker 14 DW CMAR14## ; - user place marker 8 DB QCKPRE,'9' ; cursor to internal marker 15 DW CMAR15## ; - user place marker 9 DB QCKPRE,CTRLR DW BFIL## ; cursor to beginning of file DB QCKPRE,CTRLC DW EFIL## ; cursor to end of file DB QCKPRE,CTRLF DW VFIND## ; find text DB QCKPRE,CTRLA DW VSUBS## ; replace text DB QCKPRE,CTRLL DW VSPELL## ; SpellStar's special find/replace DB QCKPRE,CTRLW DW DNGO## ; start scrolling down DB QCKPRE,CTRLZ DW UPGO## ; start scrolling up DB QCKPRE,RUBOUT DW DBOL## ; delete to beginning of line DB QCKPRE,US ; alternate for convenience on DW DBOL## ; some terminals: ctrl-underline DB QCKPRE,CTRLY DW DEOL## ; delete to end of line DB QCKPRE,CTRLQ DW IRPT## ; repeat next command PAGE DB CTRLL,0 ; repeat last find/replace or last DW SAGIN2## ; spell command, with old args. DB CTRLZ,0 DW FILU1## ; scroll up line DB CTRLW,0 DW FILD1## ; scroll down line DB CTRLR,0 DW FILDS## ; scroll down screen DB CTRLC,0 DW FILUS## ; scroll up screen DB RUBOUT,0 DW DELEF## ; delete character left DB US,0 ; alternate for convenience on DW DELEF## ; some terminals: ctrl-underline DB CTRLG,0 DW DERIT## ; delete character right DB CTRLY,0 DW DELIN## ; delete entire line DB CTRLT,0 DW DELWD## ; delete word right DB CTRLV,0 DW TOGL## ; toggle insert mode DB CTRLB,0 DW MRGNAT## ; reform paragraph DB CTRLN,0 DW INLIN## ; insert crlf after cursor DB CTRLI,0 DW TABBER## ; insert tab DB CR,0 DW CARRET## ; carriage-return, special handling DB CTRLP,0 ; see also LITCHR below DW VESC## ; insert next char in file even if control PAGE DB BLKPRE,CTRLH DW REMAR## ; hide/display marking of text DB BLKPRE,'B' ; set internal marker # 1 - DW SMAR1## ; mark beginning of block DB BLKPRE,'K' ; set internal marker # 2 - DW SMAR2## ; mark end of block DB BLKPRE,'0' ; set internal marker # 6 - DW SMAR6## ; - user place marker 0 DB BLKPRE,'1' ; set internal marker # 7 - DW SMAR7## ; - user place marker 1 DB BLKPRE,'2' ; set internal marker # 8 - DW SMAR8## ; - user place marker 2 DB BLKPRE,'3' ; set internal marker # 9 - DW SMAR9## ; - user place marker 3 DB BLKPRE,'4' ; set internal marker # 10 - DW SMAR10## ; - user place marker 4 DB BLKPRE,'5' ; set internal marker # 11 - DW SMAR11## ; - user place marker 5 DB BLKPRE,'6' ; set internal marker # 12 - DW SMAR12## ; - user place marker 6 DB BLKPRE,'7' ; set internal marker # 13 - DW SMAR13## ; - user place marker 7 DB BLKPRE,'8' ; set internal marker # 14 - DW SMAR14## ; - user place marker 8 DB BLKPRE,'9' ; set internal marker # 15 - DW SMAR15## ; - user place marker 9 DB BLKPRE,CTRLV DW MOVMAR## ; move marked text DB BLKPRE,CTRLC DW DUPMAR## ; copy marked text DB BLKPRE,CTRLY DW DELMAR## ; delete marked text DB BLKPRE,CTRLN DW TGLMOV## ; toggle column move on/off DB BLKPRE,CTRLZ DW VDDT## DB CTRLU,0 ; stop character must dispatch DW RRET## ; to work in all cases ; if you alter this entry, you must also alter the ; byte at STPCHR below to match PAGE DB FILPRE,CTRLX DW UPEX## ; end edit and exit DB FILPRE,CTRLD DW UPDAT## ; done editing this file DB FILPRE,CTRLS DW UPRED## ; save file and continue editing DB FILPRE,CTRLQ DW ABANDN## ; abandon edit DB FILPRE,CTRLR DW RFIL## ; read another file at cursor DB FILPRE,CTRLW DW WFIL## ; write marked block on file DB FILPRE,CTRLJ DW DELFIL## ; delete file DB FILPRE,CTRLF DW DIRTGL## ; toggle file directory display DB FILPRE,CTRLP DW PFIL## ; print file DB FILPRE,CTRLL DW SELDRV## ; select logged disk drive DB FILPRE,CTRLO DW COPYF## ; copy file DB FILPRE,CTRLE DW RENF## ; rename file PAGE DB ONSPRE,CTRLL DW SETLM## ; set left margin DB ONSPRE,CTRLR DW SETRM## ; set right margin DB ONSPRE,CTRLI DW SETTAB## ; set tab stop DB ONSPRE,CTRLN DW CLRTAB## ; clear tab stop(s) DB ONSPRE,CTRLF DW SETRUL## ; set margins/tabs from file line DB ONSPRE,CTRLW DW SWRAP## ; toggle word wrap DB ONSPRE,CTRLJ DW SJUST## ; toggle justification DB ONSPRE,CTRLV DW SVTAB## ; toggle variable tabs DB ONSPRE,CTRLD DW SSHOWD## ; toggle dot command display DB ONSPRE,CTRLT DW SSHOWM## ; toggle ruler line display DB ONSPRE,CTRLP DW SSHOWP## ; toggle page break display DB ONSPRE,CTRLE DW SOFHY## ; toggle soft hyphen entry DB ONSPRE,CTRLH DW HYASK## ; toggle hyphen help DB ONSPRE,CTRLG DW PARAT## ; set paragraph tab DB ONSPRE,CTRLX DW RELMAR## ; margin release DB ONSPRE,CTRLC DW CENTER## ; center line containing cursor DB ONSPRE,CTRLS DW SLSPAC## ; set line spacing DB HELPRE,CTRLD DW DDOTS## ; explain dot commands DB HELPRE,CTRLS DW STATX## ; explain status line DB HELPRE,CTRLF DW FLAGTX## ; explain line flags DB HELPRE,CTRLP DW PLACTX## ; explain place markers DB HELPRE,CTRLB DW REFORX## ; explain paragraph reform DB HELPRE,CTRLM DW MARGX## ; explain margins and tabs DB HELPRE,CTRLI DW FINCTX## ; explain command index DB HELPRE,CTRLV DW MOVTX## ; explain moving text DB HELPRE,CTRLR DW RULTX## ; explain ruler line PAGE ;********************************************************** ; ; EXPANSION SPACE ; ; Redundant entries using your favorite keys may be entered ; in the following space, if you wish to keep the ; original entries so the original keys still operate. ; ; In creating additional entries, copy the address portion ; carefully from the entry above for the desired ; function. ; ; Use the spaces from the first one forward, as the first ; entry with a zero in its first byte ends the table. ; ; Additional 'help' commands may be added by patching an ; entry here and modifying the disk text file WSMSGS.OVR. ; The third byte in the entry should be the index ; (number of bytes) into the pointer table at the ; beginning of WSMSGS.OVR for the added text. The ; fourth byte should be zero. Menus can also be ; changed by modifying WSMSGS.OVR. ; ; The INSTALL program may use some of these spaces for ; special cursor control keys for some terminals, so ; locate a space that is still zero in your installed ; WordStar before patching. ; ;********************************************************** XTAB:: DB 0,0 DW 00 DB 0,0 DW 00 DB 0,0 DW 00 DB 0,0 DW 00 DB 0,0 DW 00 DB 0,0 DW 00 DB 0,0 DW 00 DB 0,0 DW 00 DB 0,0 DW 00 DB 0 ; zero marks the table end PAGE ;********************************************************** ; ; MAILMERGE COMMAND DISPATCH TABLE ; ; This table is used to interpret keystrokes entered ; during the execution of MailMerge. The format is ; similar to other command tables, but only one-key ; commands are handled. ; ;********************************************************** FPTAB:: DB CTRLP,0 DW FPAWSC## ; stop print DB CTRLZ,0 DW DSCRUP## ; scroll directory up DB CTRLW,0 DW DSCRDN## ; scroll directory down DB CTRLV,0 DW VDDT## DB 0 ; zero marks table end PAGE ;********************************************************** ; ; POINTERS TO THE COMMAND TABLES ; ; These pointers must be changed if you need to move one ; or more of the command tables in order to rearrange ; the patching space to allow the addition of more ; entries to one of the tables. ; ;********************************************************** PNFTAB::DW NOFTAB ; pointer to OPENING dispatch table PVTAB:: DW VTAB ; pointer to editing dispatch table PFPTAB::DW FPTAB ; pointer to MailMerge dispatch table PAGE ;********************************************************** ; ; The following are selected control characters used in ; the line input routine, which accepts responses to ; "FILE NAME?", "FIND?", and other prompts which end ; in a question mark. ; ; While almost any character will work here, you will ; usually want them to be consistent with the similar ; editing command. Thus, if you alter the 'cursor left' ; command in the editing command dispatch table above, ; you will want to consider changing CLCHR to the same ; thing here. ; ;********************************************************** CLCHR:: DB CTRLS ; delete character (cursor left) CRCHR:: DB CTRLD ; restore character (cursor right) LITCHR::DB CTRLP ; take the next character literally, ; do not interpret as special. ; Permits searching for control ; characters, entering CR without ; LF in search string, etc. DIRCH:: DB CTRLF ; toggle directory display DB CTRLZ ; scroll directory up DB CTRLW ; scroll directory down ; Special item for 'interrupt' character. This must match ; the entry in the editing command dispatch table above. ; If you change one, you must change both or the editor ; will not behave correctly. STPCHR::DB CTRLU ; interrupt character ; Error release character. This is the key that must be ; pressed after errors, in order to continue editing. ; May be patched to any character desired. ERELCH::DB ESC ; error release, normally escape ;********************************************************** ; ; END OF COMMAND DISPATCH TABLES ; ;********************************************************** PAGE SUBTTL MicroPro Business Confidential SECTION FOUR ;********************************************************** ; ; PRINTER PATCH AREA ; ; Items in this file are normally set by the INSTALL ; program, or used without change. ; ; There is normally no need to refer to this listing in ; order to make WordStar operational, as the INSTALL ; program will set the essential items as required ; for all normal installations. ; ; Some users may wish to make modifications to the items ; listed below, such as : ; ; A. Adding control sequences for a teletype-like (non- ; daisy) printer to support additional features, ; such as : ; character pitch change ; ribbon color change ; partial line motion (for super/subscripts) ; ; B. Modifying or adding to the driver code used to send ; characters to, and receive characters from the ; printer, for one of the following (or other) ; reasons, in case WordStar's port driver (which can ; be enabled by the INSTALL program) cannot be used. ; ; 1. To receive characters from the printer, for ; printers which require ETX/ACK protocol to ; operate at maximum baud rate. ; ; 2. To allow WordStar to determine if the printer is ; ready to receive a character, for faster ; performance during concurrent printing. ; ; 3. To install a custom driver for the printer, not ; normally supported by the user's operating ; system, nor supportable with WordStar's port ; driver. ; ;********************************************************** PAGE ;********************************************************** ; ; Items relating to all printers -- ; printer characteristics and printing methods ; ; Printer type / overstrike method : ; Determines the method of double strike, underline, ; etc., and whether daisy-like printer is capable of ; microspace justification. ; ; POSMTH = 0 : ; Printer can overprint by backspacing as well as by ; carriage-returning and re-printing. ; NOTE -> with POSMTH = 0, CR-overprint is used only ; for overprint lines in file. For printers that can ; backspace but cannot carriage-return without line- ; feed, use POSMTH = 0 and do not use overprint lines. ; ; POSMTH = 1 : ; Printer is a daisy wheel of similar incremental ; printer. Can print without spacing and can space ; and roll in small increments. Microjustification ; occurs only if POSMTH = 1. ; ; POSMTH = 0FFH : ; Printer can overprint only by carriage-return ; without line-feed. ; ;********************************************************** POSMTH::DB 1 ; set for daisy printer BLDSTR::DB 2 ; number of strikes for 'boldface', ; set to a larger number for darker ; 'boldface' on a non-daisy printer ; but leave alone for daisies DBLSTR::DB 2 ; number of strikes for 'double ; strike', increase as desired PAGE ;********************************************************** ; ; Strings for non-daisy printers -- items below apply only ; when POSMTH (above) is 0 or 0FFH (not 1). ; ;********************************************************** ; String to advance to next line, used when CR,LF is ; encountered in file. ; If your printer requires that nulls be sent after the ; carriage-return (for delay), increase the count so ; that some of the trailing zeros are sent. ; If your printer performs automatic line-feed after a CR ; code is sent, remove the line-feed code. If ; possible, turn off the AUTO-LF in your printer for ; greater flexibility of WordStar use. PSCRLF::DB 2 ; number of characters DB CR ; first character : carriage-return DB LF ; second character : line-feed DB 0,0,0,0 ; space for 8 more characters DB 0,0,0,0 ; String to return carriage to the beginning of the same ; line, to overprint. Used for : ; Underline, double strike, etc. when POSMTH = 0FFH ; When CR without LF is encountered in file and ; POSMTH is 0FFH or 0 ; When backspace (^H) is encountered in file and ; POSMTH = 0FFH PSCR:: DB 2 ; two characters, a CR and a null, ; to allow a little delay DB CR ; carriage-return DB 0 ; null for delay DB 0,0,0,0 ; space for 4 more characters ; String to perform carriage-return and half line-feed, ; for printers that can do half line-feed downward ; but not upward. Used to print super/subscripts at ; half-line intervals if ROLUP (below) is not ; installed and POSMTH is 0FFH or 0. ; For example : for a selectric that always feeds half ; lines, install one CRLF here, and two in PSCRLF. PSHALF::DB 0 ; number of characters DB 0,0,0 ; space for 6 more characters DB 0,0,0 ; String to backspace, to overprint the last character ; printed. Used for underline, double strike, etc., ; if POSMTH = 0. Also used when backspace (^H) is ; encountered in file if POSMTH = 0. PBACKS::DB 1 ; one character DB BS ; ASCII backspace DB 0,0,0,0 ; space for 4 more characters PAGE ;********************************************************** ; ; The following are optional strings, permitting the use ; of additional features supported by your printer. ; ;********************************************************** ; String to set alternate character width, if available PALT:: DB 0 ; zero, not available DB 0,0,0,0 ; String to reset to standard character width PSTD:: DB 0 ; zero, not available DB 0,0,0,0 ; String to roll carriage up a partial line, without ; altering the carriage column, for use before ; superscript and after subscript. ROLDOW should also ; be installed to roll the carriage the same amount, ; in the opposite direction. Only applies if POSMTH ; is 0FFH or 0. ROLUP:: DB 0 ; zero, not available DB 0,0,0,0 ; String to roll down, after superscript and before ; subscript. Used only if ROLUP is also installed. ROLDOW::DB 0 ; zero, not available DB 0,0,0,0 PAGE ;********************************************************** ; ; Items for both daisy and non-daisy printers ; ;********************************************************** ; Strings for user-defined functions 1..4, invokable with ; print control characters imbedded in file. Use only ; with extreme caution and very thorough testing on ; daisy printers, as WordStar's control sequences and ; yours could easily interfere with one another. ; Lines containing print controls that invoke these always ; print forward, even if bidirectional print is on. USR1:: DB 0 DB 0,0,0,0 USR2:: DB 0 DB 0,0,0,0 USR3:: DB 0 DB 0,0,0,0 USR4:: DB 0 DB 0,0,0,0 RIBBON::DB 0 ; change to alternate ribbon color DB 0,0,0,0 RIBOFF::DB 0 ; change back to standard color DB 0,0,0,0 ; String to initialize printer. Sent at start of printing, ; may be used to turn motor on, set standard character ; size and line height, or other functions for your ; specific hardware. These are always patched by the ; INSTALL program, so add your patches afterwards. PSINIT::DB 1 ; one character DB CR ; carriage-return, to make sure DB 0,0,0 ; that printing starts at left edge DB 0,0,0,0 ; space for 16 characters DB 0,0,0,0 DB 0,0,0,0 ; String sent to printer at conclusion of printing, for ; example : to turn the motor off. PSFINI::DB 0 ; none for us DB 0,0,0,0 ; space for 16 characters DB 0,0,0,0 DB 0,0,0,0 DB 0,0,0,0 SOCHR:: DB '-' ; character to use for 'strikeout' ; print enhancement ULCHR:: DB '_' ; character to use for 'underscore' ; print enhancement PAGE ;********************************************************** ; ; Provision for a custom printer initialization subroutine, ; called before PSINIT string is sent. Use for ; anything that can't be accomplished by sending a ; string, such as assignment or initializing a special ; driver in your BIOS. ; ;********************************************************** PRINIT::NOP ; initially null, patch a JMP NOP ; instruction to your routine here RET ;********************************************************** ; ; Provision for a custom printer finish (close) routine, ; called after PSFINI string is sent. ; ;********************************************************** PRFINI::NOP ; initially null, patch a JMP NOP ; instruction to your routine here RET PAGE ;********************************************************** ; ; Flags relating to transmission of characters to the ; printer. These flags relate to all printers. ; ;********************************************************** ; Where to send each output character : ; 00 = to CP/M list device (HAVBSY should be 0 unless ; you install a 'busy' routine at LIBSY) ; 01 = to port driver (INSTALL patchable) ; 02 = to user subroutine, at entry points PUBSY, ; PUSEND, and PUINP ; 03 = to OEM daisy printer driver. Forces POSMTH = 1 ; 04 = to alternate console printer driver CSWTCH::DB 0 ; set for CP/M list device driver ; Flag to say that the printer driver, as installed and ; patched, has a 'busy' test separate from 'print a ; character'. If non-zero, concurrent editing and ; printing will perform better. This value must be ; zero if we cannot find out whether or not the ; printer is 'busy' (as when characters are output ; through the CP/M list device). HAVBSY::DB 0 ; set to say we have no 'busy' test PAGE ;********************************************************** ; ; Printer drivers ; ; There are five drivers, corresponding to the setting of ; CSWTCH (previous page) = 00, 01, 02, 03, 04 ; ; Each of the drivers has three entry points : ; 1. Busy status entry. Returns CY = 1 if the printer ; is not ready. If unimplemented, must return ; CY = 0. HAVBSY should be 0 if unimplemented ; or 0FFH if implemented. ; 2. Send the character in the A register entry. ; 3. Input a character to the A register, or return ; CY = 1 if no input character is ready. This ; entry is used only for ETX/ACK and XON/XOFF ; buffer full protocols implemented within ; the editor (see PROTCL below). ; ; These routines may alter all registers. ; ;********************************************************** ;********************************************************** ; ; Printer driver to output to the CP/M list device. Only ; called if CSWTCH = 00. ; ;********************************************************** ; Busy test entry -- busy test may be added here if your ; operating system allows you to determine whether or ; not the printer is ready. If used, patch HAVBSY to ; 0FFH. LIBSY:: NOP ORA A ; return CY = 0 to say not busy RET ; Output the character in A to the list device LISEND::MOV E,A ; get character in E for CP/M MVI C,LSTOUT; function number in C CALL BDOS## ; call the system ORA A ; set CY = 0 RET ; and return to caller ; Input a character to A or return CY = 1 if none ; available. This function is not supplied by the ; operating system, so the user must supply a ; subroutine if ETX/ACK or XON/XOFF protocol is to ; be used. LISINP::NOP STC ; if no routine is installed, set RET ; CY = 1 to say no character ready PAGE ;********************************************************** ; ; Port driver -- called only if CSWTCH = 1 ; ; This routine does direct printer I/O through the hardware ; ports. Port number and status bits may be set as ; desired by correctly answering the questions asked ; by the INSTALL program, after choosing the 'port ; driver'. ; Initially set up to use port 4 for data, port 5 bit 0 to ; indicate ready status, and port 5 bit 1 to indicate ; input status. ; Selecting the 'port driver' from INSTALL automatically ; sets HAVBSY to 0FFH. ; ;********************************************************** POBSY:: ; port driver status entry DB (IN) ; input from port instruction POSTAT::DB 5 ; output status port number NOP ; port 5 shown as example DB (ANI) ; mask bits of interest POMASK::DB 1 ; bit 0 shown as example DB (XRI) ; complement bits which must be set POOM:: DB 1 ; for printer ready ; we now have Z = 0 if printer not ready STC ; set CY = 1, not ready RNZ ; if NZ: not ready, exit ORA A ; otherwise set CY = 0, ready RET ; and return POSEND:: ; port driver send character entry DB (OUT) ; output to port instruction POOP:: DB 4 ; output data port number NOP ; port 4 shown as example RET POINP:: ; port driver input character entry, ; used only if PROTCL = 1 or 2 DB (IN) ; input from port instruction PISTAT::DB 5 ; input status port number NOP ; port 5 shown as example DB (ANI) ; mask bits of interest POINSK::DB 2 ; bit 1 shown as example DB (XRI) ; complement bits which must be set POIM:: DB 2 ; when input character is ready ; we now have Z = 0 if input character not ready STC ; set CY = 1, not ready RNZ ; if NZ: not ready, exit ; character is ready, input it DB (IN) ; input from port instruction POIP:: DB 4 ; input data port number NOP ; port 4 shown as example ORA A ; set CY = 0, character ready RET ; and return with character in A PAGE ;********************************************************** ; ; Provisions for user-supplied printer output subroutines, ; called only if CSWTCH = 1. ; ; These may be used where special interface requirements ; necessitate a more complex routine than the port ; driver listed above. ; ; Space is provided here only for the JMPs to the routines, ; so you must patch the drivers over the drivers ; listed above, or in the MORPAT area at the end of ; Section One. For more space, see PBGMEM and the ; associated comments at the end of Section One. ; ;********************************************************** ; Entry point for user-supplied routine to return CY = 1 ; if the printer is not ready PUBSY:: NOP ORA A ; if unimplemented, return CY = 0 RET ; Entry point for user-supplied routine to print a ; character provided in the A register PUSEND::NOP ; patch in a JMP here NOP RET ; Entry point for user-supplied routine to input a ; character, or return CY = 1 if none ready. Used ; only if PROTCL = 1 or 2 PUINP:: NOP STC ; if unimplemented, return CY = 1 RET ;********************************************************** ; ; The printer driver for CSWTCH = 3 is not included in ; the user areas ; ;********************************************************** PAGE ;********************************************************** ; ; 'Alternate console' printer driver -- called only if ; CSWTCH = 4. ; ; This driver allows access to printers requiring character ; input (for a communications protocol), without ; patching in a driver, which support multiple ; multiple consoles selected by the IOBYTE I/O ; assignments byte. ; ; The specific console device to be used is selected by ; setting the item CONFIE below to 00, 01, 02, or 03. ; ; HAVBSY should be 0 when using an alternate console ; driver, unless you add a busy test routine. ; ;********************************************************** ; Entry point for 'output busy' test. No routine supplied, ; as normal operating system does not provide a ; 'console output busy' function. ACBSY:: NOP ORA A ; set CY = 0 to say 'not busy' RET ; Entry point to send character in A o the printer ACSEND::CALL ACSTAR ; set IOBYTE to alternate console, ; saving original IOBYTE in B CALL COUCH## ; output character to console, ; saving BCDEHL JMP ACFIN ; restore IOBYTE and return ; Entry point to return console input character in the A ; register, or return CY = 1 if not ready. ACINP:: CALL ACSTAR ; save and set IOBYTE CALL CONSTA##; returns Z = 1 if no character is ; ready at console, saves BCDEHL CNZ INCHR## ; if NZ: character ready, get it ; into A, otherwise leave 0 in A MOV D,A ; hold return value in A ; fall through to ACFIN, on the next page, to ; restore the IOBYTE, return D in A, and CY = 1 ; if no character is ready PAGE ; Alternate console driver common exit ACFIN:: MOV A,B ; A = original IOBYTE, saved by ACSTAR ACSTA1:: ; ACSTAR routine joins here STA IOBYTE ; set new IOBYTE or restore original MOV A,D ; restore A register ; return CY = 1 if A = 0, needed at exit from ACINP ; routine, does no harm in other cases ORA A ; set flags RNZ ; if NZ: return CY = 0 STC ; otherwise set CY = 1 RET ; Common entry routine for alternate console driver ACSTAR::MOV D,A ; save A in D, for ACSEND LDA IOBYTE ; A = (IOBYTE) MOV B,A ; save initial (IOBYTE) in B ANI 0FCH ; zero the 'console' part of IOBYTE DB (ORI) ; set desired console bits CONFIE::DB 01 ; set desired console bits here ; 00 = TTY: physical device ; 01 = CRT: physical device ; 02 = BAT: physical device ; 03 = UC1: physical device ; new IOBYTE value is in A JMP ACSTA1 ; set IOBYTE from A, restore A ; register from D, and return PAGE ;********************************************************** ; ; Printer communications protocol -- applicable if ; CSWTCH = 0, 1, or 2, and for all POSMTH values ; ; Three 'buffer full' protocols are supported : ; ; 1. No protocol (PROTCL = 0) : no protocol is executed by ; WordStar -- use if none required, or if it is ; handled elsewhere, such as in the operating system ; or in user driver routines. ; ; 2. ETX/ACK protocol (PROTCL = 1) : WordStar transmits ; 'ETX' (03H) at the end of a string of characters, ; and the printer responds with 'ACK' (06H) when all ; of these characters have been printed. The driver ; must be able to input characters from the printer. ; EAKBSZ must be set to the ETX/ACK message length, ; normally one-half of the printer's buffer size. ; ; 3. XON/XOFF protocol (PROTCL = 2) : The printer sends ; 'XOFF' (13H) when WordStar should stop sending ; characters, and then 'XON' (11H) when transmission ; should be resumed. The driver must be able to input ; characters from the printer. ; ;********************************************************** PROTCL::DB 0 ; set for no protocol EAKBSZ::DB 127 ; set to one-half of a 255 character ; printer buffer, applicable only ; if PROTCL = 1 PAGE ;********************************************************** ; ; Function strings for daisy printers ; ; Items on the next two pages apply only to daisy printers ; (POSMTH = 1) that are manipulated with escape ; sequences, that is, those daisy printers with ; serial or 8-bit parallel (Centronics-like) interfaces ; (CSWTCH = 00, 01, 02, or 04), as opposed to OEM ; interfaces (CSWTCH = 03). For OEM daisy printers, ; see the OEM daisy driver listing. ; ;********************************************************** ; Vertical motion index lead-in string : WordStar will ; send this string, followed by a byte value to ; specify the number of 48ths of an inch to roll DVMILE::DB 2 ; two characters DB ESC,RS ; for 1610/50/Sprint 5 DB 0,0 ; Limits for vertical motion index argument bytes DVMMIN::DW 01 ; min value (represents 0) DVMRNG::DW 125 + 1 ; range + 1, max value representable, ; plus one, before DVMMIN is added. ; DVMMIN + DVMRNG must be < 256 ; Horizontal motion lead-in string : WordStar will send ; this string, followed by a byte value to specify ; the number of 60/120ths of an inch to move DHMILE::DB 2 ; two characters DB ESC,US ; for 1610/50/Sprint 5 DB 0,0 ; Horizontal motion increment size, zero for 120ths of an ; inch, 0FFH for 60ths of an inch. Applies to OEM ; daisy printers also. DHMIFG::DB 0 ; set for 120ths ; Limits for horizontal motion index argument bytes DHMIN:: DW 01 ; min value (represents 0) DHRNG:: DW 125 + 1 ; range + 1, max value representable, ; plus one, before DHMIN is added. ; DHMIN + DHRNG must be < 256 PAGE ; Set forward print motion for daisy DFWD:: DB 2 ; two characters DB ESC,'5' ; for 1610/50/Sprint 5 DB 0,0 ; Set backward print motion for daisy DBAK:: DB 2 ; two characters DB ESC,'6' ; for 1610/50/Sprint 5 DB 0,0 ; Forward space horizontal motion index increments DSP:: DB 1 ; one character DB ' ' ; a space DB 0,0,0 ; Backspace horizontal motion index increments DBS:: DB 1 ; one character DB BS ; a backspace DB 0,0,0 ; Line feed vertical motion index increments DLF:: DB 1 ; one character DB LF ; a line-feed DB 0,0,0 ; Reverse line feed (up) vertical motion index increments DRLF:: DB 2 ; two characters DB ESC,LF ; for 1610/50/Sprint 5 DB 0,0 ; Print 'phantom space' (cents sign) on a daisy DPHSPC::DB 2 ; two characters DB ESC,'Y' ; for 1610/50/Sprint 5 DB 0 ; Print 'phantom rubout' on 96-character wheels DPHRUB::DB 2 ; two characters DB ESC,'Z' ; for 1610/50/Sprint 5 DB 0 PAGE ;********************************************************** ; ; Flags for daisy printers ; ; These apply when POSMTH = 1, regardless of CSWTCH ; ;********************************************************** ; Flag to suppress proportional spacing, including the ; minor adjustments normally applied to periods, etc., ; even for 'non-proportional typewheels DNPROS::DB 0 ; set to 0FFH to suppress all ; proportional spacing ; Flag to alter microjustification algorithm to put more ; emphasis on expanding spaces between words, and less ; on spreading out characters within a line DMJWB:: DB 0 ; set to 0FFH to alter algorithm PAGE ;********************************************************** ; ; Proportional spacing table ; ; For each entry, bits 4..6 are moderate adjustments to ; apply to non-proportional typewheels, the value is ; the characters relative width in 60ths of an inch, ; with the value of a standard space set to 5. ; Bits 0..2 are for true proportional spacing ; typewheels, standard space = 3. ; Bits 3 and 7 are unassigned. ; ;********************************************************** PSTAB:: DB 52H ; phantom space (cent sign, | ) DB 43H ; ! DB 44H ; " DB 54H ; # DB 54H ; $ DB 56H ; % DB 56H ; & DB 32H ; ' DB 43H ; ( DB 43H ; ) DB 54H ; * DB 54H ; + DB 42H ; , DB 54H ; - DB 32H ; . DB 53H ; / DB 54H ; 0 DB 54H ; 1 DB 54H ; 2 DB 54H ; 3 DB 54H ; 4 DB 54H ; 5 DB 54H ; 6 DB 54H ; 7 DB 54H ; 8 DB 54H ; 9 DB 43H ; : DB 42H ; ; DB 54H ; < DB 54H ; = DB 54H ; > DB 54H ; ? DB 56H ; @ DB 55H ; A DB 55H ; B DB 55H ; C DB 56H ; D DB 55H ; E DB 55H ; F DB 56H ; G DB 56H ; H DB 53H ; I DB 53H ; J DB 56H ; K DB 55H ; L DB 66H ; M DB 56H ; N DB 56H ; O DB 54H ; P DB 56H ; Q DB 56H ; R DB 54H ; S DB 55H ; T DB 56H ; U DB 56H ; V DB 67H ; W DB 56H ; X DB 56H ; Y DB 55H ; Z DB 54H ; [ DB 56H ; \ DB 54H ; ] DB 56H ; ^ DB 55H ; _ DB 54H ; ` DB 54H ; a DB 54H ; b DB 54H ; c DB 54H ; d DB 54H ; e DB 53H ; f DB 54H ; g DB 54H ; h DB 52H ; i DB 52H ; j DB 54H ; k DB 52H ; l DB 66H ; m DB 54H ; n DB 54H ; o DB 54H ; p DB 54H ; q DB 53H ; r DB 53H ; s DB 53H ; t DB 54H ; u DB 54H ; v DB 66H ; w DB 54H ; x DB 54H ; y DB 54H ; z DB 54H ; { DB 56H ; | DB 54H ; } DB 56H ; ~ DB 55H ; phantom rubout (not sign, double underline) ;********************************************************** ; ; END OF PRINTER PATCH AREA ; ;********************************************************** PAGE ;********************************************************** ; ; FCB for input file ; ;********************************************************** DB 0 ; 0FFH if created, 0 if not INF:: DB 0 ; non-zero if there is something to read INFCB:: DB 0 ; drive code DB ' ' ; filename DB ' ' ; default type FDS 21 ; balance of FCB INSCT:: DW 00 ; 16-bit sector count DB 0 END ; of USER.MAC