home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / Assembly / CURSOR.ASM < prev    next >
Assembly Source File  |  1986-10-07  |  5KB  |  174 lines

  1. CR        EQU    13        ;Carriage return
  2. LF        EQU    10        ;Line feed
  3.  
  4. CGROUP    GROUP    CODE_SEG, DATA_SEG
  5.     ASSUME    CS:CGROUP, DS:CGROUP
  6.  
  7.  
  8. ;-----------------------------------------------------------------------;
  9. ; This file contains procedures that work with the cursor:        ;
  10. ;                                    ;
  11. ; GOTO_XY            Move the cursor to a new position    ;
  12. ; SEND_CRLF            Move cursor to start of the next line    ;
  13. ; CURSOR_RIGHT            Move the cursor right one column    ;
  14. ; READ_CURSOR_POSITION        Get the current cursor position        ;
  15. ; CLEAR_TO_END_OF_LINE        Clear all the line after the cursor    ;
  16. ; CLEAR_SCREEN            Clear the entire screen            ;
  17. ;-----------------------------------------------------------------------;
  18.  
  19.  
  20. DATA_SEG    SEGMENT PUBLIC
  21. DATA_SEG    ENDS
  22.  
  23.  
  24. CODE_SEG    SEGMENT PUBLIC
  25.  
  26.     PUBLIC    GOTO_XY
  27. ;-----------------------------------------------------------------------;
  28. ;  This procedure moves the cursor                    ;
  29. ;                                    ;
  30. ;    DH    Row (Y)                            ;
  31. ;    DL    Column (X)                        ;
  32. ;-----------------------------------------------------------------------;
  33. GOTO_XY        PROC    NEAR
  34.     PUSH    AX
  35.     PUSH    BX
  36.     MOV    BH,0            ;Display page 0
  37.     MOV    AH,2            ;Call for SET CURSOR POSITION
  38.     INT    10h            ;Let the ROM BIOS do the work
  39.     POP    BX
  40.     POP    AX
  41.     RET
  42. GOTO_XY        ENDP
  43.  
  44.  
  45.     PUBLIC    SEND_CRLF
  46. ;-----------------------------------------------------------------------;
  47. ; This procedure just sends a carriage return, line feed pair to the    ;
  48. ; display, using the DOS routines so that scrolling will be handled    ;
  49. ; correctly.                                ;
  50. ;-----------------------------------------------------------------------;
  51. SEND_CRLF    PROC    NEAR
  52.     PUSH    AX
  53.     PUSH    DX
  54.     MOV    AH,2            ;Ask for character output function
  55.     MOV    DL,CR            ;Send a carriage-return character
  56.     INT    21h
  57.     MOV    DL,LF            ;Send a line-feed character
  58.     INT    21h
  59.     POP    DX
  60.     POP    AX
  61.     RET
  62. SEND_CRLF    ENDP
  63.  
  64.  
  65.     PUBLIC    CURSOR_RIGHT
  66. ;-----------------------------------------------------------------------;
  67. ; This procedure moves the cursor one position to the right, or to the    ;
  68. ; next line if it was at the end of a line.                ;
  69. ;                                    ;
  70. ; Uses:        SEND_CRLF                        ;
  71. ;-----------------------------------------------------------------------;
  72. CURSOR_RIGHT    PROC    NEAR
  73.     PUSH    AX
  74.     PUSH    BX
  75.     PUSH    CX
  76.     PUSH    DX
  77.     MOV    AH,3        ;Read the current cursor position
  78.     MOV    BH,0        ;On page zero
  79.     INT    10h        ;Read cursor position
  80.     MOV    AH,2        ;Set new cursor position
  81.     INC    DL        ;Set column to next position
  82.     CMP    DL,79        ;Did we pass column 79?
  83.     JBE    MOVE_CURSOR    ;No, then move the cursor
  84.     CALL    SEND_CRLF    ;Yes, go to next line
  85.     JMP    DONE_CURSOR_RIGHT
  86. MOVE_CURSOR:
  87.     INT    10h        ;Move the cursor
  88. DONE_CURSOR_RIGHT:
  89.     POP    DX
  90.     POP    CX
  91.     POP    BX
  92.     POP    AX
  93.     RET
  94. CURSOR_RIGHT    ENDP
  95.  
  96.  
  97.     PUBLIC    READ_CURSOR_POSITION
  98. ;-----------------------------------------------------------------------;
  99. ; This procedure doesn't follow the conventions for returning        ;
  100. ; information in the AX register so that it can be used easily with    ;
  101. ; GOTO_XY.                                ;
  102. ;                                    ;
  103. ; Returns:    DH,DL    Row, column of cursor                ;
  104. ;-----------------------------------------------------------------------;
  105. READ_CURSOR_POSITION    PROC    NEAR
  106.     PUSH    AX
  107.     PUSH    BX
  108.     PUSH    CX
  109.     MOV    AH,3            ;Ask for current cursor position
  110.     MOV    BH,0            ;On page 0
  111.     INT    10h            ;Return information in DX
  112.     POP    CX
  113.     POP    BX
  114.     POP    AX
  115.     RET
  116. READ_CURSOR_POSITION    ENDP
  117.  
  118.  
  119.     PUBLIC    CLEAR_TO_END_OF_LINE
  120. ;-----------------------------------------------------------------------;
  121. ; This procedure clears the line from the current cursor position to    ;
  122. ; the end of that line.                            ;
  123. ;-----------------------------------------------------------------------;
  124. CLEAR_TO_END_OF_LINE    PROC    NEAR
  125.     PUSH    AX
  126.     PUSH    BX
  127.     PUSH    CX
  128.     PUSH    DX
  129.     MOV    AH,3            ;Read current cursor position
  130.     XOR    BH,BH            ;  on page zero
  131.     INT    10h            ;Now have (X,Y) in DL, DH
  132.     MOV    AH,6            ;Set up to clear to end of line
  133.     XOR    AL,AL            ;Clear window
  134.     MOV    CH,DH            ;All on same line
  135.     MOV    CL,DL            ;Start at the cursor position
  136.     MOV    DL,79            ;And stop at the end of the line
  137.     MOV    BH,7            ;Use normal attribute
  138.     INT    10h
  139.     POP    DX
  140.     POP    CX
  141.     POP    BX
  142.     POP    AX
  143.     RET
  144. CLEAR_TO_END_OF_LINE    ENDP
  145.  
  146.  
  147.     PUBLIC    CLEAR_SCREEN
  148. ;-----------------------------------------------------------------------;
  149. ;  This procedure clears the entire screen.                ;
  150. ;-----------------------------------------------------------------------;
  151. CLEAR_SCREEN    PROC    NEAR
  152.     PUSH    AX
  153.     PUSH    BX
  154.     PUSH    CX
  155.     PUSH    DX
  156.     XOR    AL,AL            ;Blank entire window
  157.     XOR    CX,CX            ;Set upper left to (0,0)
  158.     MOV    DH,24            ;Set lower right to (24,79)
  159.     MOV    DL,79
  160.     MOV    BH,7            ;Use normal attribute for blanks
  161.     MOV    AH,6            ;Call for scroll function
  162.     INT    10h            ;Let the ROM BIOS do the work
  163.     POP    DX
  164.     POP    CX
  165.     POP    BX
  166.     POP    AX
  167.     RET
  168. CLEAR_SCREEN    ENDP
  169.  
  170.  
  171. CODE_SEG    ENDS
  172.  
  173.     END
  174.