----------------------------------- 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 SID VERS 1.4 NEXT PC END 8600 0100 BCFF #S739B 739B FA CA 739C 25 . #S7992 7992 FA CA 7993 25 . #G0 A>SAVE 133 WSOVLY1.OVR 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 ;