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 / BEEHIVE / ZSUS / ZSUS001.LBR / TCJWSPAT.LBR / TCJEXTRA.WZ / TCJEXTRA.WS
Text File  |  2000-06-30  |  10KB  |  366 lines

  1. .mt2
  2. .mb2
  3. ; Program:    WordStar Shell Modification Patches
  4. ; Author:    Jay Sage
  5. ; Date:        August 7, 1988
  6.  
  7. ; Patches to make the WordStar Release 4 'R' command operate as a ZCPR2-type
  8. ; shell.  Several routines in WS.COM and WS.OVR must be changed.
  9. ;
  10. ; 1. WordStar must be prevented from pushing its name onto the Z-System shell
  11. ;    stack.  However, a flag that is used by the 'R' command to determine how
  12. ;    to operate must be set as if WS4 had set itself up as a shell.
  13. ;
  14. ; 2. The popping of the shell stack when WS4 terminates must be disabled.
  15. ;
  16. ; 3. The user input to the prompt from the 'R' command must be handled
  17. ;    differently.  A command to reinvoke WS4 must be appended to the user's
  18. ;    input, and then any commands pending in the multiple command line buffer
  19. ;    must be added as well.  The result is then placed into the command line
  20. ;    buffer.  If overflow occurs, the user command is ignored, and an error
  21. ;    message is displayed until a key is pressed.  The chaining command is of
  22. ;    the form ";DUU:WSNAME ,".  The comma at the end of the command tail is
  23. ;    used as a signal that WS4 was invoked as a ZCPR2 shell.
  24. ;
  25. ; 4. An optional patch can be included to defeat the use of the path for
  26. ;    searching for the overlay files.  An internal path can be specified.
  27.  
  28. ;------------------------------------------------------------
  29.  
  30.       0000        no    equ    0
  31.       FFFF        yes    equ    not no
  32.  
  33. ;*****************************************************************
  34. ;*    MUST change the following equate if not using the MORPAT *
  35. ;*    area of WS4.COM                         *
  36. ;*****************************************************************
  37.       0000        morarea    equ    no           
  38.  
  39.       0000        mload    equ    no        
  40.  
  41.       FFFF        intpath    equ    yes        
  42.  
  43.       0894        ram1st    equ    0894h        
  44.  
  45.       0896        extra    equ    0896h        
  46.  
  47.       0000                 if     morarea
  48.                      else
  49.       0896             morpat    equ    extra        
  50.                 endif
  51.  
  52.       0906        namebuf    equ    morpat+128-16    
  53.                             
  54.       0AA4        envoff    equ    0aa4h        
  55.       2200        zflag    equ    2200h        
  56.       1F38        rcmdbuf    equ    1f38h        
  57.       1F39        rcmd    equ    rcmdbuf+1    
  58.       0386        clrscr    equ    0386h        
  59.       17C7        scrnfn    equ    17c7h        
  60.       0280        conout    equ    0280h        
  61.  
  62.       0007        bell    equ    07        
  63.  
  64. è      FFFF                  if    not mload
  65. ;----------------------------------------------------------------------
  66. ;
  67. ;            PATCHES TO WS.OVR
  68. ;
  69. ;----------------------------------------------------------------------
  70.              
  71. ; Modifications to the code that pushes WordStar onto the shell stack.
  72.              
  73. ; This patch prevents the WordStar shell entry from being set up, but it
  74. ; sets the flag in 2200h that makes WordStar think that it has set it up.
  75. ; In this way, the 'R' command will work as it would with shells engaged.
  76. ; The space is used to determine the command line needed to reinvoke
  77. ; WordStar.  The ZCPR33 facility for returning the directory in which the
  78. ; program was located is used to provide an explicit DU: prefix.  The
  79. ; resulting command line is kept at the end of the user patch area.
  80.              
  81.       2380             offset    defl    2380h        
  82.              
  83.       3CBF                 org    3cbfh        
  84.              
  85.   3CBF    1E 24                 ld    e,24h        
  86.   3CC1    CD A40A                 call    envoff        
  87.              
  88.   3CC4    E5                 push    hl
  89.   3CC5    11 0D00                 ld    de,0dh        
  90.   3CC8    19                 add    hl,de
  91.   3CC9    46                 ld    b,(hl)        
  92.   3CCA    23                 inc    hl
  93.   3CCB    7E                 ld    a,(hl)        
  94.   3CCC    C6 40                 add    a,'A'-1        
  95.   3CCE    21 0609                 ld    hl,namebuf    
  96.   3CD1    36 3B                 ld    (hl),';'    
  97.   3CD3    23                 inc    hl
  98.   3CD4    77                 ld    (hl),a        
  99.   3CD5    23                 inc    hl
  100.   3CD6    78                 ld    a,b        
  101.   3CD7    0E 2F                 ld    c,'0'-1        
  102.   3CD9                 tens:
  103.   3CD9    0C                 inc    c
  104.   3CDA    D6 0A                 sub    10
  105.   3CDC    30 FB                 jr    nc,tens
  106.   3CDE    C6 3A                 add    10+'0'        
  107.   3CE0    71                 ld    (hl),c        
  108.   3CE1    23                 inc    hl
  109.   3CE2    77                 ld    (hl),a        
  110.   3CE3    23                 inc    hl
  111.              
  112.   3CE4    36 3A                 ld    (hl),':'    
  113.   3CE6    23                 inc    hl
  114.              
  115.   3CE7    D1                 pop    de        
  116.   3CE8    06 08                 ld    b,8        
  117.   3CEA                 copyname:
  118.   3CEA    13                 inc    de        
  119.   3CEB    1A                 ld    a,(de)
  120.   3CEC    FE 20                 cp    ' '
  121.   3CEE    28 05                 jr    z,copydone    
  122.   3CF0    77                 ld    (hl),a
  123.   3CF1    23                 inc    hl
  124.   3CF2    05                 dec    b
  125.   3CF3    20 F5                 jr    nz,copyname    è  3CF5                 copydone:
  126.   3CF5    36 20                 ld    (hl),' '    
  127.   3CF7    23                 inc    hl
  128.   3CF8    36 2C                 ld    (hl),','
  129.   3CFA    23                 inc    hl
  130.   3CFB    36 00                 ld    (hl),0        
  131.              
  132.   3CFD    3E FF                 ld    a,0ffh        
  133.   3CFF    32 0022                 ld    (zflag),a
  134.        ^
  135.        |------ After you enter this byte in ZPATCH press ^W, then
  136.     move to the next record and resume entering at the "0"
  137.  
  138.   3D02    C3 AA60                 jp    60aah
  139.              
  140.   3D05                 end1pat:
  141.       3D2A             endaddr    defl    60aah - offset
  142.       0025             free    defl    endaddr - end1pat
  143.       0000                  if    $ gt endaddr
  144.                       endif
  145.              
  146. ;------------------------------------------------------------
  147.              
  148. ; This patch takes the user's response to the 'R' command, adds the command
  149. ; to reinvoke WordStar, and appends any pending commands in the command line
  150. ; buffer.  The result is written out to the command line buffer.  This
  151. ; implements a ZCPR2-style shell for the 'R' command.
  152.              
  153. ; If the resulting command line is too long for the MCL, an error message is
  154. ; displayed until a key is pressed, and then WS resumes as if no command line
  155. ; had been entered.
  156.  
  157. ; The first part of this patch replaces code in WS.OVR.  There is not enough
  158. ; space there for all the code, so it continues in the user patch area.
  159.              
  160.       E200             offset    defl    -1e00h    
  161.              
  162.                  endif;    not mload
  163.  
  164.       A000        scratch    equ    0a000h    
  165.  
  166.       FFFF                  if    not mload
  167.              
  168.       67B2                 org    67b2h        
  169.              
  170.   67B2    21 381F                 ld    hl,rcmdbuf    
  171.   67B5    4E                 ld    c,(hl)        
  172.   67B6    06 00                 ld    b,0
  173.   67B8    23                 inc    hl        
  174.   67B9    11 00A0                 ld    de,scratch    
  175.   67BC    ED B0                 ldir            
  176.              
  177.   67BE    21 0609                 ld    hl,namebuf    
  178.   67C1    CD D113                 call    cpy2nul        
  179.   67C4    C3 9608                 jp    morpat        
  180.              
  181.   67C7                 end2pat:
  182.       0004             free    defl    67cbh - end2pat
  183.       0000                  if    $ gt 67cbh
  184.                       endif
  185.              
  186.                  endif; not mload
  187.  
  188. ;----------------------------------------------------------------------
  189. ;
  190. ;            PATCHES TO WS.COMè;
  191. ;----------------------------------------------------------------------
  192.  
  193.  
  194. ; This is the continuation of the patch in WS.OVR that inserts the user's
  195. ; command line, together with the WS reinvocation command, into the multiple
  196. ; command buffer.
  197.  
  198.       FFFF                  if     (morpat=extra)     
  199.       0894                 org    ram1st        
  200.   0894    1609                 dw    namebuf+16    
  201.                  endif
  202.  
  203.       0896            org    morpat
  204.  
  205.   0896    D5            push    de        
  206.   0897    1E 18            ld    e,18h        
  207.   0899    CD A40A            call    envoff
  208.   089C    5E            ld    e,(hl)        
  209.   089D    23            inc    hl
  210.   089E    56            ld    d,(hl)
  211.   089F    EB            ex    de,hl        
  212.   08A0    D1            pop    de        
  213.   08A1    CD D113            call    cpy2nul        
  214.  
  215.   08A4    21 8603            ld    hl,clrscr    
  216.   08A7    CD C717            call    scrnfn
  217.  
  218.   08AA    1E 18            ld    e,18h        
  219.   08AC    CD A40A            call    envoff        
  220.  
  221.   08AF    11 00A0            ld    de,scratch
  222.   08B2    47            ld    b,a    
  223.   08B3            lenloop:
  224.   08B3    1A            ld    a,(de)
  225.   08B4    B7            or    a
  226.   08B5    28 11            jr    z,oklength
  227.   08B7    13            inc    de
  228.   08B8    10 F9            djnz    lenloop
  229.  
  230.   08BA    11 DA08            ld    de,errmsg    
  231.   08BD    0E 09            ld    c,9
  232.   08BF    CD 0500            call    0005h
  233.   08C2    CD 491A            call    sak        
  234.   08C5    C3 4E7F            jp    7f4eh        
  235.  
  236.   08C8            oklength:
  237.   08C8    11 0400            ld    de,4        
  238.   08CB    EB            ex    de,hl        
  239.   08CC    19            add    hl,de
  240.   08CD    EB            ex    de,hl        
  241.   08CE    73            ld    (hl),e        
  242.   08CF    23            inc    hl
  243.   08D0    72            ld    (hl),d
  244.   08D1    21 00A0            ld    hl,scratch    
  245.   08D4    CD D113            call    cpy2nul        
  246.  
  247.   08D7    C3 F613            jp    13f6h        
  248.  
  249.   08DA            errmsg:
  250.   08DA    07 4D 43 4C        db    bell,'MCL Ovfl - press any key...$'
  251.  
  252.   08F7            end3pat:
  253.       000F        free    defl    namebuf - end3pat
  254.       0000                  if    $ gt namebuf
  255.                  endif
  256.  
  257.  
  258. ;------------------------------------------------------------
  259.  
  260. ; This optional patch causes WS4 to use an internal path to locate
  261. ; its overlay files.
  262.  
  263.       FFFF                  if    intpath
  264.  
  265.       0F5F                 org    0f5fh        
  266.              
  267.   0F5F    CD D913                 call    setpath        
  268.   0F62    00                 nop            
  269.   0F63    00                 nop
  270.              
  271.                  endif    ;intpath
  272.  
  273. ;------------------------------------------------------------
  274.  
  275.  
  276. ; Modification to the termination routine that pops the shell stack.
  277.  
  278. ; This patch eliminates the popping of the shell stack on exit from
  279. ; WordStar.  The space from the end of this patch to 13f6h is available
  280. ; for other uses (40 bytes).
  281.  
  282.       13CE            org    13ceh
  283.  
  284.   13CE    C3 F613            jp    13f6h    
  285.  
  286.  
  287. ; This routine copies the string pointed to by HL to the address pointed to by
  288. ; DE until a null byte is encountered.  The null byte is copied as well.
  289.  
  290.   13D1            cpy2nul:
  291.   13D1    7E            ld    a,(hl)        
  292.   13D2    12            ld    (de),a        
  293.   13D3    B7            or    a        
  294.   13D4    C8            ret    z        
  295.   13D5    23            inc    hl        
  296.   13D6    13            inc    de
  297.   13D7    18 F8            jr    cpy2nul
  298.  
  299.       FFFF                  if    intpath
  300.              
  301.   13D9                 setpath:
  302.   13D9    21 E013                 ld    hl,path0    
  303.   13DC    7E                 ld    a,(hl)
  304.   13DD    23                 inc    hl        
  305.   13DE    B7                 or    a        
  306.   13DF    C9                 ret
  307.              
  308.   13E0    02             path0:    db    2        
  309.   13E1    02                 db    2        
  310.   13E2    04                 db    4        
  311.   13E3    00                 db    0        
  312.   13E4    00                 db    0        
  313.   13E5    00                 db    0        
  314.              
  315.                  endif    ;intpath
  316.  
  317.   13E6            end4pat:
  318.       0010        free    defl    13f6h - end4pat
  319.       0000                  if    $ gt 13f6h
  320.                  endif
  321.  
  322. ;------------------------------------------------------------
  323.  
  324. ; Modification to initialization code where WS4 determines if it was
  325. ; invoked as a shell.  We have defined a convention where a comma on
  326. ; the end of the command line signals WS4 to display its shell-wait
  327. ; message and wait for the user to press a key.
  328.  
  329.       1A2F            org    1a2fh
  330.  
  331.   1A2F    21 8000            ld    hl,80h        
  332.   1A32    6E            ld    l,(hl)        
  333.   1A33    CB FD            set    7,l        
  334.   1A35    7E            ld    a,(hl)        
  335.   1A36    FE 2C            cp    ','        
  336.   1A38    20 25            jr    nz,1a5fh    
  337.  
  338.   1A3A    36 20            ld    (hl),' '    
  339.  
  340.   1A3C    11 101B            ld    de,1b10h    
  341.   1A3F    0E 09            ld    c,9        
  342.   1A41    CD 0500            call    0005        
  343.   1A44    CD 491A            call    sak        
  344.  
  345.   1A47    18 16            jr    1a5fh        
  346.  
  347.   1A49            sak:
  348.   1A49    1E FF            ld    e,0ffh        
  349.   1A4B    0E 06            ld    c,6
  350.   1A4D    CD 0500            call    0005
  351.   1A50    B7            or    a
  352.   1A51    28 F6            jr    z,sak        
  353.  
  354.   1A53    1E 0D            ld    e,0dh        
  355.   1A55    0E 06            ld    c,6
  356.   1A57    C3 0500            jp    0005
  357.  
  358.   1A5A            end5pat:
  359.       0005        free    defl    1a5fh - end5pat
  360.       0000         1         if    $ gt 1a5fh
  361.                  endif
  362.  
  363.  
  364.                 end
  365.  
  366.