home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / PROGRAMS / WSTAR / WS30.DOC < prev    next >
Text File  |  2000-06-30  |  7KB  |  268 lines

  1.              -----------------------------------
  2. DATE:     April 13,1982
  3.  
  4. PRODUCT:  WordStar
  5. CATEGORY: CORRECTION
  6. Revision: All
  7. PROBELM:  ETX/ACK & XON/XOFF protocols through CP/M LIST DEVICE
  8. REF:      USER4, LISINP:, XON/XOFF, ETX/ACK, LST:, PRINTER
  9.  
  10. Description: 
  11.  
  12. This bug only affects printers which are sent output characters through
  13. the standard CP/M list (LST:) device and the users wishes to implement 
  14. the XON/OFF or ETX/ACK protocols. 
  15.  
  16. The list device driver in USER 4 includes a patchable item called LISINP:
  17. which is necessary to provide a routine to retreive the ACK character from 
  18. the printer.
  19.  
  20. Unfortunately this routine is never called by WordStar.  The fix is as
  21. follows:
  22.  
  23.     A>SID WSOVLY1.OVR<CR>
  24.       SID VERS 1.4
  25.       NEXT   PC   END
  26.       8600  0100  BCFF
  27.           #S739B<CR>
  28.       739B  FA CA<CR>
  29.       739C  25 .<CR>
  30.       #S7992<CR>
  31.       7992  FA CA<CR>
  32.       7993  25 .<CR>
  33.           #G0<CR>
  34.     A>SAVE 133 WSOVLY1.OVR<CR>
  35.  
  36.                     EAS
  37.  
  38.              -----------------------------------
  39. ;DATE:     April 13,1982
  40. ;
  41. ;PRODUCT:  WordStar
  42. ;CATEGORY: MODIFICATION
  43. ;Revision: 3.0 only
  44. ;Subject:  SYSTEM FILE DISPLAY SUPPRESSION IN WS DIRECTORY
  45. ;
  46. ;  THIS PATCH WILL SUPPRESS DISPLAY OF ANY FILES ASSIGNED TO BE SYSTEM FILES
  47. ;  UNDER CP/M 2.XX (HAVEN'T TESTED MP/M) WITH THE COMMAND:
  48. ;    
  49. ;        STAT FN.FT $SYS
  50. ;
  51. ;        PATCH IS FOR WORDSTAR 3.00    EAS  02/03/82
  52. ;
  53. ;    THE PATCH REPRESENTS 31 BYTES OF CODE IN THE USER PATCH AREA (USER1, 
  54. ;    MORPAT:) ORGANIZED TO EXIST AT THE HIGHEST LOCATION AVAILABLE SO THAT
  55. ;    CURRENTLY EXISTING PATCHES WHICH DO NOT EXTEND PAST LOCATION 33CH WILL
  56. ;    NOT BE AFFECTED BY THE INSTALLATION OF THIS SYSTEM FILE SUPPRESSION.
  57. ;
  58. ;                             Enjoy,
  59. ;                                       Evan
  60. ;
  61. DELENTX    EQU    2C28H    
  62. DELENTY    EQU    2C2BH    
  63. DTAB    EQU    2C69H    
  64. DENTPT    EQU    36D1H    
  65. DOSNX    EQU    2C8AH    
  66. NDTST    EQU    2BF6H    
  67.             
  68.     ORG    33DH
  69. ;
  70. MORPAT: PUSH    D    
  71.     INX    D    
  72.     LDAX    D    
  73.     ANI    80H    
  74.     POP    D    
  75.             
  76.     JNZ    NODISP    
  77.     LXI    H,DTAB  
  78.             
  79.     JMP    DELENTY 
  80. ;
  81. NODISP:    POP    H    
  82.     POP     B    
  83.     XCHG        
  84.     LHLD    DENTPT    
  85.     XCHG        
  86.     PUSH    H    
  87.     CALL    DOSNX    
  88.     POP    H    
  89.     POP    D    
  90.     JMP    NDTST    
  91. ;
  92.     ORG    DELENTX    
  93. ;
  94.     JMP    MORPAT    
  95.     END
  96.  
  97. ;DATE:     April 13,1982
  98. ;
  99. ;PRODUCT:  WordStar
  100. ;CATEGORY: MODIFICATION
  101. ;Revision: 3.0 only
  102. ;Subject:  Formmated output from printer driver
  103. ;
  104. *************************************************
  105. *    PRINT TO DISK WITH WORDSTAR 3.0        *
  106. *************************************************
  107. ;
  108. ; THIS PROGRAM TAKES WHAT WORDSTAR SENDS TO THE LIST DEVICE
  109. ; TO A FILE CALLED FILEOUT.  THIS MEANS YOU CAN PRINT FILES
  110. ; DIRECTLY TO THE DISK AND THEN PRINT THEM LATER USING PIP
  111. ; OR AN EQUIVALENT.  ALSO GOOD FOR SEEING EXACTLY WHAT WORDSTAR
  112. ; DOES FOR ANY SPECIFIC PRINTER INSTALLATION.  INSTALL
  113. ; WORDSTAR FOR THE PRINTER OF YOUR CHOICE, NO PROTOCOL,
  114. ; AND CP/M "LST:" DEVICE DRIVER.  THIS PROGRAM USES
  115. ; PBGMEM, SO BE SURE TO SAVE ENOUGH PAGES TO HOLD THE
  116. ; PATCHES.
  117. ;
  118. *************************
  119. *    EQUATES        *
  120. *************************
  121. ;
  122. DEFBUF    EQU    0080H        ; DEFAULT BUFFER USED FOR FILE I/O
  123. BDOS    EQU    5        ; LOCATION OF BDOS JUMP VECTOR
  124. CLOSEF    EQU    16        ; CLOSE FILE FUNCTION
  125. DELETEF    EQU    19        ; DELETE FILE FUNCTION
  126. MAKEF    EQU    22        ; MAKE FILE FUNCTION
  127. WRITEF    EQU    21        ; WRITE SEQUENTIAL
  128. SETDMA    EQU    26        ; SET DMA ADDRESS
  129. INISUB    EQU    02A4H        ; ADDRESS OF INITIALIZATION SUBR IN WS 3.0
  130. UNISUB    EQU    02A7H        ;    "    "  DEINITIALIZATION SUBR IN 3.0
  131. PRINIT    EQU    070DH        ;    "      "  PRINTER INITIALIZATION SUBR
  132. PRFINI    EQU    0710H        ;    "    "  "       DEINITIALIZATION SUBR
  133. MORPAT    EQU    02E0H        ;    "    "  EXTRA PATCHING AREA IN ROOT
  134. LISEND    EQU    071DH        ;    "    "  LST: PRINTER DRIVER IN WS
  135. PBGMEM    EQU    035CH        ;    "    "  POINTER TO FREE MEMORY
  136. MEM    EQU    7900H        ; WHERE THE ABOVE POINTER POINTS TO INITIALLY
  137. ;
  138.     ORG    INISUB
  139.     JMP    INITA        ; CHANGE BDOS VECTOR TO GO TO OUR ROUTINE
  140.                 ; WHICH CHECKS FOR WS CHANGING DMA ADDRESS
  141.                 ; SO WE CAN RESET IT AFTER WE WRITE OUR FILE
  142.                 ; TO THE DISK.
  143. ;
  144.     ORG    UNISUB
  145.     JMP    DEINITA        ; CHANGE BDOS VECTOR BACK TO WHAT IT WAS
  146.                 ; ORIGINALLY.
  147. ;
  148.     ORG    PRINIT
  149.     JMP    INITB        ; DELETE THE FILE IF IT EXISTS, AND CREATE
  150.                 ; A NEW ONE.
  151. ;
  152.     ORG    PRFINI
  153.     JMP    DEINITB        ; WRITE LAST SECTOR TO, AND CLOSE FILEOUT
  154. ;
  155.     ORG    LISEND
  156.     JMP    PFILE        ; PRINT FILE TO DISK
  157. ;
  158.     ORG MORPAT
  159. INITA:    LHLD    BDOS+1        ; GET BDOS VECTOR
  160.     SHLD    CBDOS+1        ; STORE IT FOR USE AFTER CHECKING FOR
  161.                 ; CHANGE DMA ADDRESS
  162.     LXI    H,TRANS        ; POINT TO TRANSLATE ROUTINE
  163.     SHLD    BDOS+1        ; MAKE 6 & 7 POINT THERE SO
  164.                 ; THAT WE CAN DO TRANSLATION
  165.     RET            ; AND RETURN
  166. ;
  167. INITB:    MVI    C,DELETEF    ; DELETE "FILEOUT"
  168.     LXI    D,FILE        ; IF IT EXISTS
  169.     CALL    BDOS        ; NOTE, NO ERROR CHECKING
  170.     MVI    C,MAKEF        ; CREATE THE FILE ON CURRENTLY LOGGED DRIVE
  171.     LXI    D,FILE
  172.     CALL    BDOS
  173.     INR    A        ; IF NO DIRECTORY SPACE
  174.     JZ    EXIT        ; RETURN TO OPERATING SYSTEM
  175.     RET            ; ELSE DONE
  176. ;
  177. DEINITA:LHLD    CBDOS+1        ; POINT TO ORIGINAL JMP ADDRESS
  178.     SHLD    BDOS+1        ; STORE IT BACK
  179.     RET
  180. ;
  181. DEINITB:LXI    D,DEFBUF    ; POINT TO BUFFER
  182.     MVI    C,SETDMA    ; CHANGE DMA
  183.     CALL    CBDOS
  184.     LXI    D,FILE        ; POINT TO FCB
  185.     MVI    C,WRITEF    ; WRITE IT OUT
  186.     CALL    CBDOS
  187.     ORA    A        ; ERROR IF NON-ZERO
  188.     JNZ    EXIT        ; RETURN TO OPERATING SYSTEM
  189.     LXI    H,DEFBUF-1    ; POINT TO 80H
  190.     SHLD    COUNT        ; STORE NEW COUNT
  191.     LHLD    NEWDMA        ; GET WS'S DMA ADDRESS
  192.     XCHG            ; PUT IN DE
  193.     MVI    C,SETDMA    ; TO SET DMA AND
  194.     CALL    CBDOS        ; CHANGE IT BACK
  195.     MVI    C,CLOSEF    ; CLOSE THE FILE
  196.     LXI    D,FILE
  197.     CALL    CBDOS
  198.     INR    A        ; CHANGED DISKS ON US?
  199.     JZ    EXIT        ; IF SO, REBOOT
  200.     RET            ; ELSE DONE
  201. ;
  202. TRANS:    PUSH    PSW        ; SAVE ACCUMULATOR
  203.     MOV    A,C        ; GET BDOS FUNCTION NUMBER
  204.     CPI    SETDMA        ; IF SETTING DMA, WE WANT TO KNOW WHERE TO
  205.     JZ    STODMA        ;
  206.     POP    PSW        ; ELSE RESTORE ACC
  207. CBDOS:    JMP    0000H        ; AND JMP TO THE BDOS (ADDRESS PUT IN AT INITA)
  208. ;
  209. STODMA:    XCHG            ; GET NEW DMA IN HL
  210.     SHLD    NEWDMA        ; STORE IT FOR FUTURE USE
  211.     XCHG            ; RESTORE DE & HL TO ORIGINAL VALUES
  212.     POP    PSW        ; RESTORE ACCUMULATOR
  213.     JMP    CBDOS        ; AND JUMP TO BDOS
  214. ;
  215. NEWDMA:    DW    0000H        ; THIS IS WHERE WS'S DMA IS (PUT IN FROM
  216.                 ; STODMA ROUTINE ABOVE
  217. ;
  218.     ORG    PBGMEM
  219.     DW    LEN + MEM    ; STORE NEW POINTER TO END OF MEMORY AT PBGMEM
  220. ;
  221.     ORG    MEM        ; START WHERE PBGMEM ORIGINALLY POINTED TO
  222.                 ; BECAUSE THERE'S NOT ENOUGH SPACE TO DO
  223.                 ; ALL THIS IN MORPAT
  224. ;
  225. ; ACTUAL ROUTINE TO PRINT FILE TO DISK
  226. ;
  227. PFILE:    LHLD    COUNT        ; GET COUNT
  228.     INX    H        ; INCREMENT IT
  229.     MOV    B,A        ; SAVE CHARACTER BEING PRINTED
  230.     MOV    A,H        ; GET HI ORDER COUNT
  231.     CPI    1        ; GONE TO 100H?
  232.     JZ    WRITIT        ; YES, TIME TO WRITE A SECTOR
  233.     SHLD    COUNT        ; NO, STORE NEW COUNT
  234.     MOV    M,B        ; STORE CHARACTER
  235.     RET            ; AND RETURN
  236. WRITIT:    PUSH    B        ; SAVE LAST CHARACTER
  237.     LXI    D,DEFBUF    ; POINT TO BUFFER
  238.     MVI    C,SETDMA    ; CHANGE DMA
  239.     CALL    CBDOS
  240.     LXI    D,FILE        ; POINT TO FCB
  241.     MVI    C,WRITEF    ; WRITE IT OUT
  242.     CALL    CBDOS
  243.     ORA    A        ; ERROR IF NON-ZERO
  244.     JNZ    EXIT        ; RETURN TO OPERATING SYSTEM
  245.     LXI    H,DEFBUF-1    ; POINT TO 80H
  246.     SHLD    COUNT        ; STORE NEW COUNT
  247.     LHLD    NEWDMA        ; GET WS'S DMA ADDRESS
  248.     XCHG            ; PUT IN DE
  249.     MVI    C,SETDMA    ; TO SET DMA AND
  250.     CALL    CBDOS        ; CHANGE IT BACK
  251.     POP    B        ; GET LAST CHARACTER
  252.     MOV    A,B        ; INTO A
  253.     JMP    PFILE        ; AND START AGAIN
  254. ;
  255. EXIT:    CALL    DEINITA        ; RESTORE BDOS VECTOR
  256.     JMP    0000        ; AND REBOOT
  257. ;
  258. COUNT:    DW    80H-1        ; INITIALIZE TO BEGINNING - 1
  259. FILE:    DB    0
  260.     DB    'FILEOUT ','   '; FCB FOR OUTPUT FILE
  261.     DB    0,0,0,0,0,0,0,0
  262.     DB    0,0,0,0,0,0,0,0
  263.     DB    0,0,0,0,0,0,0,0
  264.     DW    -1        ; TO MARK END
  265. LEN    EQU    $-PFILE
  266. END
  267. ;
  268.