home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / dpl.zip / EDITS.D < prev    next >
Text File  |  1988-07-11  |  13KB  |  606 lines

  1. ; Doug's Programming Language  -- DPL, Version 2.22
  2. ; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
  3. ;------------------------------------------------
  4. ; EDITS -- EDIT A STRING OF CHARACTERS THE SAME WAY THE
  5. ;       DOS COMMAND LINE EDITS IT'S COMMAND LINE.
  6. ;
  7. ; Entry conditions:
  8. ;    AX points to the target string
  9. ; Exit conditions:
  10. ;    AL holds the last character typed
  11. ;    No other registers modified
  12. ;    Target string modified
  13. ;
  14. SUBPGM    EDITS
  15. ;
  16. F1KEY        EQU    3B00H        ; F1 KEY - SAVE THIS CHARACTER
  17. F2KEY        EQU    3C00H        ; F2 KEY - DELETE TO END OF LINE
  18. F3KEY        EQU    3D00H        ; F3 KEY - SAVE ENTIRE LINE
  19. F4KEY        EQU    3E00H        ; F4 KEY - DELETE ENTIRE LINE
  20. F5KEY        EQU    3F00H        ; F5 KEY - DELETE TO END OF LINE
  21. F7KEY        EQU    4100H        ; F7 KEY - DELETE ENTIRE LINE
  22. INSERT        EQU    5200H        ; INSERT KEY
  23. DELETE        EQU    5300H        ; DELETE KEY
  24. HOME        EQU    4700H        ; HOME KEY
  25. ENDKEY        EQU    4F00H        ; END KEY
  26. LEFTKEY        EQU    4B00H        ; LEFT ARROW KEY
  27. RIGHTKEY    EQU    4D00H        ; RIGHT ARROW KEY
  28. ;
  29. ;-----------------------==============================-------------------------
  30. ;-----------------------====< START OF EXECUTION >====-------------------------
  31. ;-----------------------==============================-------------------------
  32. ;
  33. BEGIN    EDITS
  34.     EXTRN    _STREND:NEAR
  35.     PUSH    ES        ; SAVE EVERYTHING...
  36. ;
  37.     PUSH    DS        ; SEGMENT ARE SET TO BE THE SAME
  38.     POP    ES
  39. ;
  40.     PUSH    BP
  41.     PUSH    SI
  42.     PUSH    DX
  43.     PUSH    CX
  44.     PUSH    BX        ; + 2 SAVE THE STRING LENGTH
  45.     PUSH    AX        ; + 0 SAVE THE ORIGINAL POINTER
  46. ;
  47.     MOV    BP,SP        ; BP - X WILL HOLD WORKING LOCALS
  48. ;
  49.     MOV    SI,AX        ; SI = START OF BUFFER
  50.     ADD    BX,AX        ; AX = END OF BUFFER POINTER
  51.     PUSH    BX        ; BP - 2 END OF LINE
  52.     MOV    BYTE PTR [BX],0    ; SET A DEFAULT TERMINATOR
  53.     CALL    _STREND        ; MOVE OUT TO THE END
  54.         CMP    SI,BX        ; IS SI = BX (END OF LINE?)
  55.     JZ    EDS_PRE_000    ; YES, DON'T NULL IT OUT
  56.     CALL    NULL_TO_END    ; FLUSH THE REST OF THE STRING
  57. ;
  58. EDS_PRE_000:
  59.     MOV    SI,[BP+0]    ; RESTORE THE START OF THE STRING
  60. ;
  61. ; GET THE CURSOR X/Y & SHAPE
  62. ;
  63.     MOV    BH,[VIDPAGE]
  64.     MOV    AH,03        ; GET THE CURSOR X/Y & SHAPE
  65.     INT    10H
  66.     PUSH    DX        ; BP - 4 = ORIGINAL ROW/COLUMN
  67.     PUSH    CX        ; BP - 6 = ORIGINAL CURSOR SHAPE
  68. ;
  69.     CALL    CURSOR_SHAPE    ; PERFORM A CURSOR SHAPE MODIFICATION
  70. ;
  71. EDS_00A:
  72. ;
  73. ; PRINT THE STRING TO THE SCREEN
  74. ;
  75.     CALL    DO_HOME
  76. ;
  77. ; FETCH A KEY & PROCESS IT
  78. ;
  79. EDS_00:
  80.     CALL    CHECK_END        ; SEE IF WE'RE AT THE STRING'S END
  81. ;
  82.     INKEY    ,WAIT
  83. ;
  84. ; CHECK FOR F1/F3/HOME/END
  85. ;
  86.     CMP    AX,F1KEY        ; F1 TYPED?
  87.     JZ    EDS_15            ; YES, CONTINUE ON...
  88.     CMP    AX,RIGHTKEY        ; RIGHT ARROW KEY TYPED?
  89.     JZ    EDS_15            ; YES, CONTINUE ON...
  90. ;
  91. ; F2 OR F5 KEY CHECK
  92. ;
  93.     CMP    AX,F2KEY        ; F2 TYPED?
  94.     JZ    EDS_35            ; YES, CONTINUE ON...
  95.     CMP    AX,F5KEY        ; END TYPED?
  96.     JZ    EDS_35            ; YES, CONTINUE ON...
  97. ;
  98. ; F3 OR END KEY CHECK
  99. ;
  100.     CMP    AX,F3KEY        ; F3 TYPED?
  101.     JZ    EDS_20            ; YES, CONTINUE ON...
  102.     CMP    AX,ENDKEY        ; END TYPED?
  103.     JZ    EDS_20            ; YES, CONTINUE ON...
  104. ;
  105. ; F4 KEY CHECK
  106. ;
  107.     CMP    AX,F4KEY        ; F4 TYPED?
  108.     JZ    EDS_40            ; YES, CONTINUE ON...
  109. ;
  110. ; HOME KEY CHECK
  111. ;
  112.     CMP    AX,HOME            ; HOME TYPED?
  113.     JZ    EDS_00A            ; YES, GO PRINT ENTIRE STRING
  114. ;
  115. ; DELETE KEY CHECK
  116. ;
  117.     CMP    AX,DELETE        ; DELETE KEY TYPED?
  118.     JZ    EDS_30            ; YES, MOVE THE STRING LEFT
  119. ;
  120. ; INSERT KEY CHECK
  121. ;
  122.     CMP    AX,INSERT        ; INSERT KEY TYPED?
  123.     JZ    EDS_25            ; YES, GO FORM THE CURSOR
  124. ;
  125. ; CHECK FOR LEFT ARROW KEY
  126. ;
  127.     CMP    AX,LEFTKEY        ; LEFT ARROW KEY?
  128.     JZ    EDS_10            ; YES, GO ATTEMPT A BACKSPACE
  129. ;
  130. ; SPECIAL KEY CHECK, AH=XX,AL=00
  131. ;
  132.     CMP    AL,0            ; GOOD CHARACTER?
  133.     JZ    EDS_00            ; NO, CONTINUE WAITING
  134. ;
  135. ; CHECK FOR BACKSPACE
  136. ;
  137.     CMP    AL,08            ; BACKSPACE?
  138.     JZ    EDS_10            ; YES, GO ATTEMPT A BACKSPACE
  139. ;
  140. ; CHECK FOR EXIT DUE TO 'ESC' OR 'ENTER'
  141. ;
  142.     CMP    AL,0DH            ; CARRIAGE RETURN?
  143.     JZ    EDS_100            ; YES, EXIT HOME
  144.     CMP    AL,1BH            ; ESCAPE KEY TYPED?
  145.     JZ    EDS_100            ; YES, EXIT HOME...
  146. ;
  147. ; STORE THE CHARACTER IN THE STRING & DISPLAY THE CHARACTER
  148. ;
  149.     CALL    CHK_INS            ; CHECK INSERT STATE
  150.     MOV    [SI],AL            ; STORE IN THE TARGET STRING
  151.     INC    SI
  152.     CALL    PRTCHAR            ; GO PRINT IT
  153.     JMP    EDS_00            ; CONTINUE THE INPUT...
  154. ;
  155. ; BACKSPACE PROCESSING...
  156. ;
  157. EDS_10:
  158.     CMP    SI,[BP+0]        ; ARE WE AT THE START?
  159.     JZ    EDS_00            ; YES, TOSS THE BACKSPACE
  160.     DEC    SI            ; BACKSTEP THE TARGET POINTER
  161.     MOV    AL,08H            ; FORCE TO A BACKSPACE
  162.     CALL    PRTCHAR            ; GO 'PRINT' THE BACKSPACE
  163.     JMP    EDS_00            ; NO, GO BACK TO INPUTTING...
  164. ;
  165. ; F1 KEY PROCESSING
  166. ;
  167. EDS_15:
  168.     CALL    ORIGCHR            ; PERFORM AN F1 REPEAT
  169.     JMP    EDS_00            ; GO BACK FOR MORE
  170. ;
  171. ; F3 KEY PROCESSING
  172. ;
  173. EDS_20:
  174.     CALL    ORIGSTR            ; PERFORM AN F3 REPEAT
  175.     JMP    EDS_00            ; GO BACK FOR MORE...
  176. ;
  177. ; INSERT KEY PROCESSING
  178. ;
  179. EDS_25:
  180.     CALL    CURSOR_SHAPE        ; MODIFY THE CURSOR
  181.     JMP    EDS_00
  182. ;
  183. ; DELETE KEY PROCESSING
  184. ;
  185. EDS_30:
  186.     CALL    SHIFT_LEFT        ; MOVE STRING LEFT
  187.     CALL    PRINT_REST        ; PRINT THE STRING FROM THE CURSOR TO RIGHT
  188.     JMP    EDS_00            ; GO FOR MORE
  189. ;
  190. ; DELETE TO END OF LINE - F5,F2 PROCESSING
  191. ;
  192. EDS_35:
  193.     CALL    NULL_TO_END        ; FLUSH IT
  194.     CALL    CLEAR_REST        ; CLEAR THE SCREEN TO THE END OF LINE
  195.     JMP    EDS_00            ; GO FOR MORE
  196. ;
  197. ; DELETE THE ENTIRE LINE - F4 PROCESSING
  198. ;
  199. EDS_40:
  200.     MOV    SI,[BP+0]        ; GRAB THE START OF THE STRING
  201.     CALL    NULL_TO_END        ; FLUSH IT
  202.     MOV    DX,[BP-4]        ; GET THE ORIGINAL CURSOR POSITION
  203.     CALL    MOVE_CURSOR        ; & MOVE TO START OF SCREEN
  204.     CALL    CLEAR_REST        ; CLEAR THE SCREEN TO THE END OF LINE
  205.     JMP    EDS_00            ; GO FOR MORE
  206. ;
  207. ; CARRIAGE RETURN & ESCAPE KEY PROCESSING
  208. ;
  209. EDS_100:
  210.     PUSH    AX            ; SAVE THE RETURN CHARACTER
  211.     MOV    CX,[BP-6]        ; RESTORE THE ORIGINAL CURSOR SHAPE
  212.     MOV    AH,01
  213.     INT    10H
  214.     POP    AX
  215. ;
  216.     MOV    SP,BP            ; FLUSH THE STACK
  217.     POP    BX            ; RESTORE THE CRITICALS
  218.     POP    BX
  219.     POP    CX
  220.     POP    DX
  221.     POP    SI
  222.     POP    BP
  223.     POP    ES
  224.     RETURN
  225. ;
  226. ;
  227. ;=====================
  228. ;   ROUTINE SECTION
  229. ;    LEVEL 1
  230. ;=====================
  231. ;
  232. ;
  233. ; C H E C K _ E N D  --  MAKE SURE DS:SI IS WITHIN THE BUFFER
  234. ;
  235. ; Entry conditions:
  236. ;    DS:SI point to the string
  237. ; Exit conditions:
  238. ;    DS:SI possibly modified
  239. ;    AL possibly modified
  240. CHECK_END    PROC    NEAR
  241.     CMP    SI,[BP-2]        ; ARE WE TOO FAR RIGHT?
  242.     JNZ    CKND_05            ; NO, CONTINUE ON...
  243.     DEC    SI            ; YES, MOVE BACK
  244.     MOV    AL,08
  245.     CALL    PRTCHAR
  246. ;
  247. CKND_05:
  248.     RETURN
  249.  
  250. CHECK_END    ENDP
  251. ;
  252. ;
  253. ; C H K _ I N S  --  CHECK THE INSERT STATE & MOVE THE STRING, IF SET.
  254. ;
  255. ; Entry conditions:
  256. ;    None
  257. ; Exit conditions:
  258. ;    No registers modified
  259. CHK_INS    PROC    NEAR
  260.     PUSH    AX
  261.     PUSH    BX
  262.     PUSH    CX
  263. ;
  264.     MOV    AH,02
  265.     INT    16H        ; GET THE SHIFT STATE
  266.     SHL    AL,1        ; MOVE THE BIT TO THE CARRY
  267.     JNC    CHINS_10    ; EXIT IF INSERT STATE NOT SET
  268.     CALL    SHIFT_RIGHT    ; MOVE THE STRING RIGHT
  269.     CALL    PRINT_REST    ; PRINT IT TO THE SCREEN
  270. ;
  271. CHINS_10:
  272.     POP    CX
  273.     POP    BX
  274.     POP    AX
  275.     RETURN
  276.  
  277. CHK_INS    ENDP
  278. ;
  279. ;
  280. ; C L E A R _ R E S T  --  CLEAR THE REST OF THE SCREEN TO END OF FIELD
  281. ;
  282. ; Entry conditions:
  283. ;    SI points to the start of the clear
  284. ; Exit conditions:
  285. ;    AX modified
  286. ;    No other registers modified
  287. ;
  288. CLEAR_REST    PROC    NEAR
  289.     PUSH    SI
  290.     PUSH    DX
  291.     PUSH    CX
  292. ;
  293.     MOV    AH,03        ; FETCH THE CURRENT CURSOR POSITION
  294.     INT    10H
  295.     PUSH    DX        ; SAVE THE CURSOR POSITION
  296. ;
  297.     SUB    AL,AL
  298. ;
  299. CLRST_05:
  300.     CMP    SI,[BP-2]    ; ARE WE AT THE END?
  301.     JZ    CLRST_10    ; YES, DONE, SO EXIT
  302.     CALL    PRTCHAR        ; PRINT THE NULL
  303.     INC    SI        ; MOVE TO NEXT LOCATION
  304.     JMP    SHORT CLRST_05
  305. ;
  306. CLRST_10:
  307.     POP    DX        ; RESTORE THE CURSOR POSITION
  308.     MOV    AH,02
  309.     INT    10H
  310. ;
  311.     POP    CX
  312.     POP    DX
  313.     POP    SI
  314.     RETURN
  315.  
  316. CLEAR_REST    ENDP
  317. ;
  318. ;
  319. ; C U R S O R _ S H A P E  --  SET THE CURSOR SHAPE DEPENDING UPON
  320. ;                   THE INSERT STATE
  321. ;
  322. ; Entry conditions:
  323. ;    None
  324. ; Exit conditions:
  325. ;    No registers modified
  326. CURSOR_SHAPE    PROC    NEAR
  327.     PUSH    AX
  328.     PUSH    BX
  329.     PUSH    CX
  330. ;
  331.     MOV    AH,02
  332.     INT    16H        ; GET THE SHIFT STATE
  333.     SHL    AL,1        ; MOVE THE BIT TO THE CARRY
  334.     MOV    BL,0
  335.     ADC    BL,0
  336.     MOV    AL,[CRTFLAG]    ; GET THE MONO/CGA FLAG
  337.     ROL    BL,1        ; MOVE IN THE MONO/CGA FLAG
  338.     SHR    AL,1
  339.     ADC    BL,0
  340. ;
  341. ; BL HOLDS THE CURSOR SHAPE INDEX
  342. ;
  343.     SUB    BH,BH
  344.     SHL    BX,1
  345.     MOV    CX,CS:CURS[BX]    ; GET THE SHAPE
  346.     MOV    AH,01
  347.     INT    10H        ; & GO SET IT
  348. ;
  349.     POP    CX
  350.     POP    BX
  351.     POP    AX
  352.     RETURN
  353.  
  354. CURSOR_SHAPE    ENDP
  355. ;
  356. CURS    LABEL    WORD
  357.     DW    0C0DH ;    BL = 0
  358.     DW    0607H ;    BL = 1
  359.     DW    000DH ;    BL = 2
  360.     DW    0007H ;    BL = 3
  361. ;
  362. ;
  363. ; D O _ H O M E  --  PRINT THE ENTIRE STRING & RESET POINTERS TO START
  364. ;
  365. ; Entry conditions:
  366. ;    DS:SI point to the start of the string
  367. ; Exit conditions:
  368. ;    AX modified
  369. ;    Cursor & string pointers, variables moved to start of string
  370. ;
  371. DO_HOME    PROC    NEAR
  372.     CALL    ORIGSTR        ; PRINT STRING & LEAVE CURSOR AT TAIL
  373.     MOV    DX,[BP-4]    ; GET THE ORIGINAL CURSOR POSITION
  374.     CALL    MOVE_CURSOR
  375.     MOV    SI,[BP+0]    ; MOVE SI TO START OF STRING
  376.     RETURN
  377.  
  378. DO_HOME    ENDP
  379. ;
  380. ;
  381. ; P R I N T _ R E S T  --  PRINT THE REST OF THE STRING TO THE SCREEN
  382. ;
  383. ; Entry conditions:
  384. ;    DS:SI point to the string
  385. ; Exit conditions:
  386. ;    No registers modidied
  387. ;
  388. PRINT_REST    PROC    NEAR
  389.     PUSH    SI            ; SAVE THE STRING POSITION
  390.     MOV    AH,03
  391.     INT    10H
  392.     PUSH    DX            ; SAVE THE CURSOR POSITION
  393. ;
  394.     CALL    ORIGSTR            ; PRINT THE STRING
  395. ;
  396.     MOV    AL,20H            ; WIPE OUT THE TRAILING CHARACTER
  397.     CALL    PRTCHAR
  398. ;
  399.     POP    DX            ; FETCH THE ORIGINAL CURSOR LOCATION
  400.     CALL    MOVE_CURSOR        ; SET THE CURSOR TO THE SAME LOCATION
  401.     POP    SI            ; RESTORE THE STRING POINTER
  402.     RETURN
  403.  
  404. PRINT_REST    ENDP
  405. ;
  406. ;
  407. ; S H I F T _ L E F T  --  MOVE THE CONTENTS OF THE STRING LEFT ONE POSITION
  408. ;
  409. ; Entry conditions:
  410. ;    DS:SI points to the start of the string
  411. ; Exit conditions:
  412. ;    No registers modified
  413. ;
  414. SHIFT_LEFT    PROC    NEAR
  415.     PUSH    CX
  416.     PUSH    SI
  417.     PUSH    DI
  418. ;
  419.     MOV    DI,SI
  420.     INC    SI
  421. ;
  422. SHLF_05:
  423.     LODSB            ; FETCH THE CHARACTER
  424.     STOSB            ; & STUFF IN PREVIOUS LOCATION
  425.     OR    AL,AL        ; DID WE MOVE THE TERMINATOR?
  426.     JNZ    SHLF_05        ; NO, GO FIND IT...
  427. ;
  428.     POP    DI
  429.     POP    SI
  430.     POP    CX
  431.     RETURN
  432.  
  433. SHIFT_LEFT    ENDP
  434. ;
  435. ;
  436. ;=====================
  437. ;   ROUTINE SECTION
  438. ;    LEVEL 2
  439. ;=====================
  440. ;
  441. ;
  442. ; N U L L _ T O _ E N D  --  NULL OUT THE REST OF THE STRING
  443. ;
  444. ; Entry conditions:
  445. ;    BP-2 holds the end of string pointer
  446. ;    SI points to the start of the clear
  447. ; Exit conditions:
  448. ;    AX modified
  449. ;    No other registers modified
  450. ;
  451. NULL_TO_END    PROC    NEAR
  452.     PUSH    SI
  453.     SUB    AL,AL    
  454. ;
  455. NLTOEN_05:
  456.     CMP    SI,[BP-2]    ; ARE WE AT THE END?
  457.     JZ    NLTOEN_10    ; YES, EXIT NOW
  458.     MOV    [SI],AL        ; SET THE TERMINATOR
  459.     INC    SI
  460.     JMP    SHORT NLTOEN_05    ; GO FOR MORE...
  461. ;
  462. NLTOEN_10:
  463.     POP    SI
  464.     RETURN
  465.  
  466. NULL_TO_END    ENDP
  467. ;
  468. ;
  469. ; O R I G S T R  --  SAVE EVERY BYTE IN THE STRING - F3 HAS BEEN TYPED
  470. ;
  471. ; Entry conditions:
  472. ;    DS:SI point to the string
  473. ; Exit conditions:
  474. ;    DS:SI advanced to the end of the string
  475. ;
  476. ORIGSTR    PROC    NEAR
  477.     CALL    ORIGCHR            ; NO, MOVE ONE CHARACTER
  478.     JNZ    ORIGSTR            ; NOT DONE YET, CONTINUE TILL ALL MOVED
  479.     RETURN
  480.  
  481. ORIGSTR    ENDP
  482. ;
  483. ;
  484. ; S H I F T _ R I G H T - MOVE THE CONTENTS OF THE STRING RIGHT
  485. ;              ONE POSITION IF THE INSERT STATE IS POSITIVE
  486. ;
  487. ; Entry conditions:
  488. ;    DS:SI points to the start of the string
  489. ; Exit conditions:
  490. ;    No registers modified
  491. ;
  492. SHIFT_RIGHT    PROC    NEAR
  493.     PUSH    AX
  494.     PUSH    SI
  495.     PUSH    DI
  496. ;
  497.     MOV    DI,SI        ; DI POINTS TO STRING TOO
  498.     MOV    AH,20H        ; PRIME THE 1ST STORAGE
  499. ;
  500. SHRT_05:
  501.     LODSB            ; FETCH THE 1ST CHARACTER
  502.     XCHG    AH,AL        ; AL = 1ST CHARACTER, AH = JUST READ CHAR
  503.     STOSB            ; SAVE THE 1ST CHARACTER
  504.     OR    AH,AH        ; IS AH THE TERMINATOR?
  505.     JNZ    SHRT_05        ; NO, CONTINUE THE SHUFFLE
  506. ;
  507.     CMP    SI,[BP-2]    ; IS SI PAST THE LAST VALID CHARACTER?
  508.     JLE    SHRT_10        ; NO, CONTINUE ON...
  509.     DEC    DI        ; YES, SO MOVE BACK TO TERMINATE IT
  510. ;
  511. SHRT_10:
  512.     MOV    AL,AH        ; SET THE NEW TERMINATOR
  513.     STOSB
  514. ;
  515.     POP    DI
  516.     POP    SI
  517.     POP    AX
  518.     RETURN
  519.  
  520. SHIFT_RIGHT    ENDP
  521. ;
  522. ;
  523. ;=====================
  524. ;   ROUTINE SECTION
  525. ;    LEVEL 3
  526. ;=====================
  527. ;
  528. ;
  529. ; O R I G C H R  --  MOVE THE STRING POINTER & DISPLAY
  530. ;             THE CHARACTER FROM THE STRING.
  531. ;
  532. ; Entry conditions:
  533. ;    DS:SI point to the string
  534. ; Exit conditions:
  535. ;    DS:SI advanced one position
  536. ;    Z = terminator encountered, NZ = character printed & saved
  537. ;
  538. ORIGCHR    PROC    NEAR
  539.     CMP    BYTE PTR [SI],0        ; TERMINATOR?
  540.     JZ    ORCH_05            ; YES, EXIT
  541.     LODSB                ; FETCH THE CHARACTER
  542.     CALL    PRTCHAR            ; PRINT THE CHARACTER
  543.     OR    AL,AL            ; SET THE RETURN FLAGS
  544. ;
  545. ORCH_05:
  546.     RETURN
  547.  
  548. ORIGCHR    ENDP
  549. ;
  550. ;
  551. ;=====================
  552. ;   ROUTINE SECTION
  553. ;    LEVEL 4
  554. ;=====================
  555. ;
  556. ;
  557. ; P R T C H A R  --  PRINT THE CHARACTER IN AL AND ADVANCE THE CURSOR
  558. ;
  559. ; Entry conditions:
  560. ;    AL holds the character
  561. ; Exit conditions:
  562. ;    CX,AX,BX,DX modified
  563. ;
  564. PRTCHAR    PROC    NEAR
  565.     MOV    BH,[VIDPAGE]
  566.     MOV    AH,0EH
  567.     INT    10H
  568.     RETURN
  569.  
  570. PRTCHAR    ENDP
  571. ;
  572. ;
  573. ;=====================
  574. ;   ROUTINE SECTION
  575. ;    LEVEL 5
  576. ;=====================
  577. ;
  578. ;
  579. ; M O V E _ C U R S O R  --  MOVE THE CURSOR TO THE ROW/COLUMN POSITION
  580. ;
  581. ; Entry conditions:
  582. ;    DH = row
  583. ;    DL = column
  584. ; Exit conditions:
  585. ;    No registers modified
  586. ;
  587. MOVE_CURSOR    PROC    NEAR
  588.     PUSH    AX
  589.     PUSH    BX
  590. ;
  591.     MOV    BH,[VIDPAGE]        ; GET THE VIDEO PAGE #
  592.     MOV    AH,02            ; SET THE CURSOR POSITION
  593.     INT    10H
  594. ;
  595.     POP    BX
  596.     POP    AX
  597.     RETURN
  598.  
  599. MOVE_CURSOR    ENDP
  600. ;
  601. ENDPGM    EDITS
  602. ;
  603.