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 / TERM / SPLTVIO.LBR / SPLTVIO.LQB / SPLTVIO.LIB
Text File  |  2000-06-30  |  4KB  |  176 lines

  1. ; THIS ROUTINE IS A VIO DRIVER WHICH WILL ALLOW THE
  2. ; THE VIO SCREEN TO BE BROKEN UP INTO "SUB-SCREENS".
  3. ; A SUB-SCREEN CAN BE FROM 2 TO 24 LINES AND THERE 
  4. ; CAN BE ANY NUMBER OF SUB-SCREENS UP TO A TOTAL OF
  5. ; OF 24 LINES. THIS ROUTINE OPERATES ON "PARAMETER
  6. ; PACKETS". THEY ARE CODED WITH THE INFORMATION RE-
  7. ; QUIRED BY THE ROUTINE TO OPERATE ON THE SUB-SCREENS.
  8. ; THE PACKET (10 BYTES) IS CODED AS FOLLOWS:
  9. ;
  10. ;    DW    (BEGINNING ADDR. OF MEM. FOR THIS SUB-SCREEN)
  11. ;    DW    (END ADDR. + 1 OF MEM. FOR THIS SUB-SCREEN)
  12. ;    DW    (NUMBER OF CHARS. IN THIS SUB-SCREEN)
  13. ;    DB    (NUMBER OF LINES IN THIS SUB-SCREEN)
  14. ;    DB    (L. S. BYTE ADDR. OF LAST LINE OF THIS S.C)
  15. ;    DS    2    ;CURSOR POINTER STORAGE
  16. ;
  17. VIO:    PUSH    PSW
  18.     PUSH    H
  19.     PUSH    D
  20.     PUSH    B
  21.     SHLD    PKTPTR    ;SAVE POINTER TO PACKET
  22. VIODVR:    ANI    7FH    ;GET RID OF HIGH BIT
  23.     CPI    7FH    ;RUBOUT?
  24.     JZ    DONE1    ;YES
  25. ; LOAD THE CURSOR POINTER
  26. ; H&L POINTS TO THE PARAMETER PACKET
  27.     LXI    D,8    ;INDEX BY 8
  28.     DAD    D
  29.     SHLD    STR1    ;SAVE THE ADDR.
  30.     MOV    E,M    ;GET CURSOR POINTER
  31.     INX    H
  32.     MOV    D,M
  33.     XCHG        ;POINTER TO H&L
  34.     CPI    0DH    ;CARRIAGE RETURN?
  35.     JZ    CRET    ;YES
  36.     CPI    5FH    ;BACKSPACE?
  37.     JZ    BKSP    ;YES
  38.     CPI    20H    ;CONTROL CHAR.?
  39.     JC    DONE1    ;YES
  40. VIO1:    MOV    M,A    ;PUT CHAR. ON SCREEN
  41.     INX    H
  42.     PUSH    H
  43.     LHLD    STR1    ;GET PACKET POINTER
  44.     DCX    H    ;MAKE INDEX 7
  45.     MOV    A,M    ;GET BEGINNING OF LINE CONSTANT
  46.     ADI    80    ;MAKE END OF LINE
  47.     POP    H
  48.     CMP    L    ;END OF LINE?
  49.     JZ    SCROLL
  50.     JMP    DONE
  51. CRET:    MVI    M,' '    ;DELETE CARRIAGE RETURN
  52. SCROLL:    LXI    H,0
  53.     DAD    SP
  54.     SHLD    SPSAV    ;SAVE S. P.
  55. ; GET NUMBER OF LINES
  56.     LHLD    PKTPTR    ;GET PACKET POINTER
  57.     LXI    D,6    ;INDEX BY 6
  58.     DAD    D
  59.     MOV    A,M    ;NUMBER OF LINES TO A
  60.     STA    VCNTR    ;SAVE IT
  61. ; SET UP MEM. POINTERS FOR THE SCROLL
  62.     LHLD    PKTPTR    ;GET PACKET POINTER
  63.     MOV    E,M        ;LOAD MEM. POINTER
  64.     INX    H
  65.     MOV    D,M
  66.     XCHG        ;MEM. POINTER TO H&L
  67.     SHLD    STR2    ;SAVE IT
  68.     LXI    D,80    ;BUMP BY 80
  69.     DAD    D
  70.     SPHL        ;LOAD INTO SP
  71.     LHLD    STR2    ;RESTORE H
  72. SCRL1:    MVI    A,40    ;SET UP FOR 40 MINOR LOOPS
  73. SCRL2:    POP    B    ;SOURCE 2 BYTES TO B&C
  74.     MOV    M,C    ;STORE FIRST BYTE
  75.     INX    H
  76.     MOV    M,B    ;STORE SECOND BYTE
  77.     INX    H
  78.     DCR    A    ;DONE 40 TIMES?
  79.     JNZ    SCRL2    ;NO
  80.     LDA    VCNTR
  81.     DCR    A    ;DONE MAJOR LOOP VCNTR TIMES?
  82.     STA    VCNTR
  83.     JNZ    SCRL1    ;NO
  84.     LHLD    SPSAV
  85.     SPHL        ;RESTORE S. P.
  86.     CALL    LNER1
  87.     JMP    DONE
  88. LNER1:    LHLD    PKTPTR    ;GET PACKET POINTER
  89.     LXI    D,2    ;INDEX BY 2
  90.     DAD    D
  91.     MOV    E,M    ;MEM. END POINTER TO D&E
  92.     INX    H
  93.     MOV    D,M
  94.     XCHG        ;PUT INTO H&L
  95.     MVI    B,80    ;80 CHARS PER LINE
  96. LNER:    DCX    H
  97.     MVI    M,' '
  98.     DCR    B
  99.     JNZ    LNER
  100.     RET
  101. BKSP:    PUSH    H    ;SAVE H
  102.     LHLD    PKTPTR    ;GET PACKET POINTER
  103.     LXI    D,7    ;INDEX BY 7
  104.     DAD    D
  105.     MOV    A,M    ;GET BEG. OF LINE POINTER
  106.     POP    H    ;RESTORE H&L
  107.     CMP    L    ; ARE WE AT BEGINNING OF LINE?
  108.     JZ    DONE1    ;YES
  109.     MVI    M,' '    ;KILL CURSOR
  110.     DCX    H    ;BACKSPACE
  111.     JMP    DONE
  112. DONE:    MVI    M,7FH    ;DISPLAY CURSOR
  113.     PUSH    H    ;SAVE CURSOR POINTER
  114.     LHLD    STR1    ;GET PACKET POINTER
  115.     POP    D    ;CUR. POINTER TO D
  116.     MOV    M,E    ;SAVE CURPTR IN PACKET
  117.     INX    H
  118.     MOV    M,D
  119. DONE1:    POP    B    ;RESTORE REGS
  120.     POP    D
  121.     POP    H
  122.     POP    PSW
  123.     RET
  124. ; THIS ROUTINE WILL ERASE A SUB-SCREEN AND INITIALLY SET UP THE 
  125. ; CURSOR POINTER. UPON ENTRY H&L CONTAIN THE ADDRESS OF THE 
  126. ; PACKET FOR A PARTICULAR SUB-SCREEN.
  127. ERASE:    PUSH    PSW
  128.     PUSH    H
  129.     PUSH    D
  130.     PUSH    B
  131.     SHLD    PKTPTR    ;SAVE PACKET POINTER
  132. ; H&L HAVE PACKET POINTER
  133.     MOV    E,M    ;GET BEGINNING ADDR.
  134.     INX    H
  135.     MOV    D,M
  136.     PUSH    D    ;BEGINNING MEM. ADDR.
  137.     LHLD    PKTPTR    ;GET PACKET POINTER
  138.     LXI    D,4    ;INDEX BY 4
  139.     DAD    D
  140.     MOV    C,M    ;# OF CHARS. TO ERASE INTO B&C
  141.     INX    H
  142.     MOV    B,M
  143.     POP    H    ;RESTORE BEGINNING ADDR.
  144. ERASE1:    MVI    M,' '
  145.     DCX    B
  146.     INX    H
  147.     MOV    A,B
  148.     ORA    C
  149.     JNZ    ERASE1
  150. ; GET LAST LINE ADDRESS
  151. ERASE2:    LHLD    PKTPTR    ;GET PACKET POINTER
  152.     LXI    D,2    ;INDEX BY 2
  153.     DAD    D
  154.     MOV    E,M    ;GET ADDR. OF END
  155.     INX    H
  156.     MOV    D,M
  157.     XCHG
  158.     LXI    D,-80
  159.     DAD    D    ;MAKE ADDR. OF LAST LINE
  160.     MVI    M,7FH    ;DISPLAY CURSOR
  161.     PUSH    H
  162.     LHLD    PKTPTR    ;GET PACKET POINTER
  163.     LXI    D,8    ;INDEX BY 8 MORE TO GET CUR. POINT.
  164.     DAD    D
  165.     POP    D    ;GET VALUE BACK
  166.     MOV    M,E    ;PUT VALUE IN PACKET
  167.     INX    H
  168.     MOV    M,D
  169.     JMP    DONE1    ;RETURN TO CALLER
  170. PKTPTR:    DS    2    ;STORAGE FOR PACKET POINTER
  171. STR1:    DS    2    ;TEMP. STORAGE
  172. STR2:    DS    2    ;TEMP. STORAGE
  173. SPSAV:    DS    2    ;STORE S. P. HERE
  174. VCNTR:    DS    1    ;TEMP. STORAGE
  175. VIOMEM:    EQU    0E800H
  176.