home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
programs
/
wstar
/
ws30.dqc
/
WS30.DOC
Wrap
Text File
|
1985-02-09
|
7KB
|
268 lines
-----------------------------------
DATE: April 13,1982
PRODUCT: WordStar
CATEGORY: CORRECTION
Revision: All
PROBELM: ETX/ACK & XON/XOFF protocols through CP/M LIST DEVICE
REF: USER4, LISINP:, XON/XOFF, ETX/ACK, LST:, PRINTER
Description:
This bug only affects printers which are sent output characters through
the standard CP/M list (LST:) device and the users wishes to implement
the XON/OFF or ETX/ACK protocols.
The list device driver in USER 4 includes a patchable item called LISINP:
which is necessary to provide a routine to retreive the ACK character from
the printer.
Unfortunately this routine is never called by WordStar. The fix is as
follows:
A>SID WSOVLY1.OVR<CR>
SID VERS 1.4
NEXT PC END
8600 0100 BCFF
#S739B<CR>
739B FA CA<CR>
739C 25 .<CR>
#S7992<CR>
7992 FA CA<CR>
7993 25 .<CR>
#G0<CR>
A>SAVE 133 WSOVLY1.OVR<CR>
EAS
-----------------------------------
;DATE: April 13,1982
;
;PRODUCT: WordStar
;CATEGORY: MODIFICATION
;Revision: 3.0 only
;Subject: SYSTEM FILE DISPLAY SUPPRESSION IN WS DIRECTORY
;
; THIS PATCH WILL SUPPRESS DISPLAY OF ANY FILES ASSIGNED TO BE SYSTEM FILES
; UNDER CP/M 2.XX (HAVEN'T TESTED MP/M) WITH THE COMMAND:
;
; STAT FN.FT $SYS
;
; PATCH IS FOR WORDSTAR 3.00 EAS 02/03/82
;
; THE PATCH REPRESENTS 31 BYTES OF CODE IN THE USER PATCH AREA (USER1,
; MORPAT:) ORGANIZED TO EXIST AT THE HIGHEST LOCATION AVAILABLE SO THAT
; CURRENTLY EXISTING PATCHES WHICH DO NOT EXTEND PAST LOCATION 33CH WILL
; NOT BE AFFECTED BY THE INSTALLATION OF THIS SYSTEM FILE SUPPRESSION.
;
; Enjoy,
; Evan
;
DELENTX EQU 2C28H
DELENTY EQU 2C2BH
DTAB EQU 2C69H
DENTPT EQU 36D1H
DOSNX EQU 2C8AH
NDTST EQU 2BF6H
ORG 33DH
;
MORPAT: PUSH D
INX D
LDAX D
ANI 80H
POP D
JNZ NODISP
LXI H,DTAB
JMP DELENTY
;
NODISP: POP H
POP B
XCHG
LHLD DENTPT
XCHG
PUSH H
CALL DOSNX
POP H
POP D
JMP NDTST
;
ORG DELENTX
;
JMP MORPAT
END
;DATE: April 13,1982
;
;PRODUCT: WordStar
;CATEGORY: MODIFICATION
;Revision: 3.0 only
;Subject: Formmated output from printer driver
;
*************************************************
* PRINT TO DISK WITH WORDSTAR 3.0 *
*************************************************
;
; THIS PROGRAM TAKES WHAT WORDSTAR SENDS TO THE LIST DEVICE
; TO A FILE CALLED FILEOUT. THIS MEANS YOU CAN PRINT FILES
; DIRECTLY TO THE DISK AND THEN PRINT THEM LATER USING PIP
; OR AN EQUIVALENT. ALSO GOOD FOR SEEING EXACTLY WHAT WORDSTAR
; DOES FOR ANY SPECIFIC PRINTER INSTALLATION. INSTALL
; WORDSTAR FOR THE PRINTER OF YOUR CHOICE, NO PROTOCOL,
; AND CP/M "LST:" DEVICE DRIVER. THIS PROGRAM USES
; PBGMEM, SO BE SURE TO SAVE ENOUGH PAGES TO HOLD THE
; PATCHES.
;
*************************
* EQUATES *
*************************
;
DEFBUF EQU 0080H ; DEFAULT BUFFER USED FOR FILE I/O
BDOS EQU 5 ; LOCATION OF BDOS JUMP VECTOR
CLOSEF EQU 16 ; CLOSE FILE FUNCTION
DELETEF EQU 19 ; DELETE FILE FUNCTION
MAKEF EQU 22 ; MAKE FILE FUNCTION
WRITEF EQU 21 ; WRITE SEQUENTIAL
SETDMA EQU 26 ; SET DMA ADDRESS
INISUB EQU 02A4H ; ADDRESS OF INITIALIZATION SUBR IN WS 3.0
UNISUB EQU 02A7H ; " " DEINITIALIZATION SUBR IN 3.0
PRINIT EQU 070DH ; " " PRINTER INITIALIZATION SUBR
PRFINI EQU 0710H ; " " " DEINITIALIZATION SUBR
MORPAT EQU 02E0H ; " " EXTRA PATCHING AREA IN ROOT
LISEND EQU 071DH ; " " LST: PRINTER DRIVER IN WS
PBGMEM EQU 035CH ; " " POINTER TO FREE MEMORY
MEM EQU 7900H ; WHERE THE ABOVE POINTER POINTS TO INITIALLY
;
ORG INISUB
JMP INITA ; CHANGE BDOS VECTOR TO GO TO OUR ROUTINE
; WHICH CHECKS FOR WS CHANGING DMA ADDRESS
; SO WE CAN RESET IT AFTER WE WRITE OUR FILE
; TO THE DISK.
;
ORG UNISUB
JMP DEINITA ; CHANGE BDOS VECTOR BACK TO WHAT IT WAS
; ORIGINALLY.
;
ORG PRINIT
JMP INITB ; DELETE THE FILE IF IT EXISTS, AND CREATE
; A NEW ONE.
;
ORG PRFINI
JMP DEINITB ; WRITE LAST SECTOR TO, AND CLOSE FILEOUT
;
ORG LISEND
JMP PFILE ; PRINT FILE TO DISK
;
ORG MORPAT
INITA: LHLD BDOS+1 ; GET BDOS VECTOR
SHLD CBDOS+1 ; STORE IT FOR USE AFTER CHECKING FOR
; CHANGE DMA ADDRESS
LXI H,TRANS ; POINT TO TRANSLATE ROUTINE
SHLD BDOS+1 ; MAKE 6 & 7 POINT THERE SO
; THAT WE CAN DO TRANSLATION
RET ; AND RETURN
;
INITB: MVI C,DELETEF ; DELETE "FILEOUT"
LXI D,FILE ; IF IT EXISTS
CALL BDOS ; NOTE, NO ERROR CHECKING
MVI C,MAKEF ; CREATE THE FILE ON CURRENTLY LOGGED DRIVE
LXI D,FILE
CALL BDOS
INR A ; IF NO DIRECTORY SPACE
JZ EXIT ; RETURN TO OPERATING SYSTEM
RET ; ELSE DONE
;
DEINITA:LHLD CBDOS+1 ; POINT TO ORIGINAL JMP ADDRESS
SHLD BDOS+1 ; STORE IT BACK
RET
;
DEINITB:LXI D,DEFBUF ; POINT TO BUFFER
MVI C,SETDMA ; CHANGE DMA
CALL CBDOS
LXI D,FILE ; POINT TO FCB
MVI C,WRITEF ; WRITE IT OUT
CALL CBDOS
ORA A ; ERROR IF NON-ZERO
JNZ EXIT ; RETURN TO OPERATING SYSTEM
LXI H,DEFBUF-1 ; POINT TO 80H
SHLD COUNT ; STORE NEW COUNT
LHLD NEWDMA ; GET WS'S DMA ADDRESS
XCHG ; PUT IN DE
MVI C,SETDMA ; TO SET DMA AND
CALL CBDOS ; CHANGE IT BACK
MVI C,CLOSEF ; CLOSE THE FILE
LXI D,FILE
CALL CBDOS
INR A ; CHANGED DISKS ON US?
JZ EXIT ; IF SO, REBOOT
RET ; ELSE DONE
;
TRANS: PUSH PSW ; SAVE ACCUMULATOR
MOV A,C ; GET BDOS FUNCTION NUMBER
CPI SETDMA ; IF SETTING DMA, WE WANT TO KNOW WHERE TO
JZ STODMA ;
POP PSW ; ELSE RESTORE ACC
CBDOS: JMP 0000H ; AND JMP TO THE BDOS (ADDRESS PUT IN AT INITA)
;
STODMA: XCHG ; GET NEW DMA IN HL
SHLD NEWDMA ; STORE IT FOR FUTURE USE
XCHG ; RESTORE DE & HL TO ORIGINAL VALUES
POP PSW ; RESTORE ACCUMULATOR
JMP CBDOS ; AND JUMP TO BDOS
;
NEWDMA: DW 0000H ; THIS IS WHERE WS'S DMA IS (PUT IN FROM
; STODMA ROUTINE ABOVE
;
ORG PBGMEM
DW LEN + MEM ; STORE NEW POINTER TO END OF MEMORY AT PBGMEM
;
ORG MEM ; START WHERE PBGMEM ORIGINALLY POINTED TO
; BECAUSE THERE'S NOT ENOUGH SPACE TO DO
; ALL THIS IN MORPAT
;
; ACTUAL ROUTINE TO PRINT FILE TO DISK
;
PFILE: LHLD COUNT ; GET COUNT
INX H ; INCREMENT IT
MOV B,A ; SAVE CHARACTER BEING PRINTED
MOV A,H ; GET HI ORDER COUNT
CPI 1 ; GONE TO 100H?
JZ WRITIT ; YES, TIME TO WRITE A SECTOR
SHLD COUNT ; NO, STORE NEW COUNT
MOV M,B ; STORE CHARACTER
RET ; AND RETURN
WRITIT: PUSH B ; SAVE LAST CHARACTER
LXI D,DEFBUF ; POINT TO BUFFER
MVI C,SETDMA ; CHANGE DMA
CALL CBDOS
LXI D,FILE ; POINT TO FCB
MVI C,WRITEF ; WRITE IT OUT
CALL CBDOS
ORA A ; ERROR IF NON-ZERO
JNZ EXIT ; RETURN TO OPERATING SYSTEM
LXI H,DEFBUF-1 ; POINT TO 80H
SHLD COUNT ; STORE NEW COUNT
LHLD NEWDMA ; GET WS'S DMA ADDRESS
XCHG ; PUT IN DE
MVI C,SETDMA ; TO SET DMA AND
CALL CBDOS ; CHANGE IT BACK
POP B ; GET LAST CHARACTER
MOV A,B ; INTO A
JMP PFILE ; AND START AGAIN
;
EXIT: CALL DEINITA ; RESTORE BDOS VECTOR
JMP 0000 ; AND REBOOT
;
COUNT: DW 80H-1 ; INITIALIZE TO BEGINNING - 1
FILE: DB 0
DB 'FILEOUT ',' '; FCB FOR OUTPUT FILE
DB 0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0
DW -1 ; TO MARK END
LEN EQU $-PFILE
END
;