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

  1. CGROUP    GROUP    CODE_SEG, DATA_SEG
  2.     ASSUME    CS:CGROUP, DS:CGROUP
  3.  
  4.  
  5. ;-----------------------------------------------------------------------;
  6. ; This file contains routines that are used for editing the SECTOR:    ;
  7. ;                                    ;
  8. ; WRITE_TO_MEMORY        Write a byte into SECTOR        ;
  9. ; EDIT_BYTE            Change byte in memory and on screen    ;
  10. ;-----------------------------------------------------------------------;
  11.  
  12.  
  13. CODE_SEG    SEGMENT PUBLIC
  14.  
  15. DATA_SEG    SEGMENT PUBLIC
  16.     EXTRN    SECTOR:BYTE
  17.     EXTRN    SECTOR_OFFSET:WORD
  18.     EXTRN    PHANTOM_CURSOR_X:BYTE
  19.     EXTRN    PHANTOM_CURSOR_Y:BYTE
  20. DATA_SEG    ENDS
  21. ;-----------------------------------------------------------------------;
  22. ; This procedure writes one byte to SECTOR, at the memory location    ;
  23. ; pointed to by the phantom cursor.                    ;
  24. ;                                    ;
  25. ;    DL    Byte to write to SECTOR                    ;
  26. ;                                    ;
  27. ; The offset is calculated by                        ;
  28. ;   OFFSET = SECTOR_OFFSET + (16 * PHANTOM_CURSOR_Y) + PHANTOM_CURSOR_X    ;
  29. ;                                    ;
  30. ; Reads:    SECTOR_OFFSET, PHANTOM_CURSOR_X, PHANTOM_CURSOR_Y    ;
  31. ; Writes:    SECTOR                            ;
  32. ;-----------------------------------------------------------------------;
  33. WRITE_TO_MEMORY        PROC    NEAR
  34.     PUSH    AX
  35.     PUSH    BX
  36.     PUSH    CX
  37.     MOV    BX,SECTOR_OFFSET
  38.     MOV    AL,PHANTOM_CURSOR_Y
  39.     XOR    AH,AH
  40.     MOV    CL,4            ;Multiply PHANTOM_CURSOR_Y by 16
  41.     SHL    AX,CL
  42.     ADD    BX,AX            ;BX = SECTOR_OFFSET + (16 * Y)
  43.     MOV    AL,PHANTOM_CURSOR_X
  44.     XOR    AH,AH
  45.     ADD    BX,AX            ;That's the address!
  46.     MOV    SECTOR[BX],DL        ;Now store the byte
  47.     POP    CX
  48.     POP    BX
  49.     POP    AX
  50.     RET
  51. WRITE_TO_MEMORY        ENDP
  52.  
  53.  
  54.     PUBLIC    EDIT_BYTE
  55.     EXTRN    SAVE_REAL_CURSOR:NEAR, RESTORE_REAL_CURSOR:NEAR
  56.     EXTRN    MOV_TO_HEX_POSITION:NEAR, MOV_TO_ASCII_POSITION:NEAR
  57.     EXTRN    WRITE_PHANTOM:NEAR, WRITE_EDITOR_PROMPT:NEAR
  58.     EXTRN    CURSOR_RIGHT:NEAR, WRITE_HEX:NEAR, WRITE_CHAR:NEAR
  59. ;-----------------------------------------------------------------------;
  60. ; This procedure changes a byte in memory and on the screen.        ;
  61. ;                                    ;
  62. ;    DL    byte to write into SECTOR, and change on screen.    ;
  63. ;                                    ;
  64. ; Uses:    SAVE_REAL_CURSOR, RESTORE_REAL_CURSOR, MOV_TO_HEX_POSITION    ;
  65. ;    MOV_TO_ASCII_POSITION, WRITE_PHANTOM, WRITE_EDITOR_PROMPT    ;
  66. ;    CURSOR_RIGHT, WRITE_HEX, WRITE_CHAR, WRITE_TO_MEMORY        ;
  67. ;-----------------------------------------------------------------------;
  68. EDIT_BYTE    PROC    NEAR
  69.     PUSH    DX
  70.     CALL    SAVE_REAL_CURSOR
  71.     CALL    MOV_TO_HEX_POSITION    ;Move to the hex number in the
  72.     CALL    CURSOR_RIGHT        ;hex window
  73.     CALL    WRITE_HEX        ;Write the new number
  74.     CALL    MOV_TO_ASCII_POSITION    ;Move to the char. in the ASCII window
  75.     CALL    WRITE_CHAR        ;Write the new character
  76.     CALL    RESTORE_REAL_CURSOR    ;Move cursor back where it belongs
  77.     CALL    WRITE_PHANTOM        ;Rewrite the phantom cursor
  78.     CALL    WRITE_TO_MEMORY        ;Save this new byte in SECTOR
  79.     CALL    WRITE_EDITOR_PROMPT    ;Display the Edit prompt
  80.     POP    DX
  81.     RET
  82. EDIT_BYTE    ENDP
  83.  
  84. CODE_SEG    ENDS
  85.  
  86.     END
  87.