home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / nor_asm / dskpatch.asm < prev    next >
Assembly Source File  |  1989-08-13  |  4KB  |  132 lines

  1. DOSSEG
  2. .MODEL    SMALL
  3.  
  4. ;-----------------------------------------------------------------------;
  5. ; This file contains the main program, along with most of the variables    ;
  6. ; for Dskpatch.                                ;
  7. ;-----------------------------------------------------------------------;
  8.  
  9.  
  10. .STACK
  11.  
  12. .DATA
  13.  
  14.     PUBLIC    SECTOR_OFFSET
  15. ;-----------------------------------------------;
  16. ; SECTOR_OFFSET is the offset of the half-    ;
  17. ; sector display into the full sector.  It must    ;
  18. ; be a multiple of 16, and not greater than 256    ;
  19. ;-----------------------------------------------;
  20. SECTOR_OFFSET    DW    0
  21.  
  22.     PUBLIC    CURRENT_SECTOR_NO, DISK_DRIVE_NO
  23. CURRENT_SECTOR_NO    DW    0        ;Initially sector 0
  24. DISK_DRIVE_NO        DB    0        ;Initially Drive A:
  25.  
  26.  
  27.     PUBLIC    FILE_FLAG, FILE_HANDLE, FILE_NAME
  28.     PUBLIC    FILE_NAME_STRING
  29.     PUBLIC    STRING_LENGTH, LENGTH_READ
  30. ;-----------------------------------------------;
  31. ; FILE_FLAG is 0 for absolute sector reads and    ;
  32. ; writes.  When it's 1, reads and writes are    ;
  33. ; for sectors within a file.  Then         ;
  34. ; SECTOR_OFFSET is the relative sector within    ;
  35. ; the file.                    ;
  36. ;-----------------------------------------------;
  37. FILE_FLAG    DB    0            ;Initially absolute sectors
  38. FILE_HANDLE    DW    0            ;Handle of the opened file
  39.  
  40. FILE_NAME_STRING    LABEL    BYTE
  41. STRING_LENGTH    DB    80            ;Read up to 80 characters
  42. LENGTH_READ    DB    ?            ;Number of characters read
  43. FILE_NAME    DB    80 DUP (' ')        ;Name of file being looked at
  44.  
  45.  
  46.     PUBLIC    LINES_BEFORE_SECTOR, HEADER_LINE_NO
  47.     PUBLIC    HEADER_PART_1, HEADER_PART_2, FILE_HEADER
  48. ;-----------------------------------------------;
  49. ; LINES_BEFORE_SECTOR is the number of lines    ;
  50. ; at the top of the screen before the half-    ;
  51. ; sector display.                ;
  52. ;-----------------------------------------------;
  53. LINES_BEFORE_SECTOR    DB    2
  54. HEADER_LINE_NO        DB    0
  55.  
  56. HEADER_PART_1        DB    'Disk ',0
  57. HEADER_PART_2        DB    '         Sector ',0
  58. FILE_HEADER        DB    '      From start of: ',0
  59.  
  60.     PUBLIC    PROMPT_LINE_NO, EDITOR_PROMPT, DISK_PROMPT
  61.     PUBLIC    SECTOR_PROMPT, FILE_NAME_PROMPT, OFFSET_PROMPT
  62. PROMPT_LINE_NO        DB    21
  63. EDITOR_PROMPT        DB    'Press function key, or enter'
  64.             DB    ' character or hex byte: ',0
  65. DISK_PROMPT        DB    'Enter letter for disk drive: ',0
  66. SECTOR_PROMPT        DB    'Enter sector dumber (decimal) to read: ',0
  67. FILE_NAME_PROMPT    DB    'Enter file name: ',0
  68. OFFSET_PROMPT        DB    'Enter offset from start of file: ',0
  69.  
  70.  
  71.     PUBLIC    FUNCTION_KEY_LINE_NO, FUNCTION_KEY_LINE
  72. FUNCTION_KEY_LINE_NO    DB    24
  73. FUNCTION_KEY_LINE    DB    '1', 7 DUP(' ')
  74.             DB    '2', 24, 'Save', 2 DUP(' ')
  75.             DB    '3Prev.', 2 DUP(' ')
  76.             DB    '4Next', 3 DUP(' ')
  77.             DB    '5Drive', 2 DUP(' ')
  78.             DB    '6Sector', ' '
  79.             DB    '7File', 3 DUP(' ')
  80.             DB    '8Offset', ' '
  81.             DB    '9', 7 DUP(' ')
  82.             DB    '0Exit', 2 DUP(' ')
  83.             DB    0
  84.  
  85.     PUBLIC    ERROR_MESSAGE_LINE_NO
  86. ERROR_MESSAGE_LINE_NO    DB    23
  87.  
  88.  
  89. .DATA?
  90.  
  91.     PUBLIC    SECTOR
  92. ;-----------------------------------------------;
  93. ; The entire sector (up to 8192 bytes) is    ;
  94. ; stored in this part of memory.        ;
  95. ;-----------------------------------------------;
  96. SECTOR    DB    8192 DUP (?)
  97.  
  98. .CODE
  99.  
  100.     EXTRN    CLEAR_SCREEN:PROC, INIT_SEC_DISP:PROC
  101.     EXTRN    WRITE_PROMPT_LINE:PROC, DISPATCHER:PROC
  102.     EXTRN    WRITE_FUNCTION_KEYS:PROC
  103.     EXTRN    GOTO_XY:PROC, CLEAR_TO_END_OF_LINE:PROC
  104.     EXTRN    INIT_WRITE_CHAR:PROC, INIT_DISK:PROC
  105.     EXTRN    WRITE_EDITOR_PROMPT:PROC
  106. DISK_PATCH    PROC
  107.     MOV    AX,DGROUP        ;Put data segment into AX
  108.     MOV    DS,AX            ;Set DS to point to data
  109.     MOV    ES,AX            ;Also set ES to our data segment
  110.  
  111.     CALL    INIT_WRITE_CHAR        ;Initialize the fast write char
  112.     CALL    CLEAR_SCREEN        ;Clear the entire screen
  113.     CALL    INIT_DISK        ;Set up the disk information
  114.     CALL    WRITE_FUNCTION_KEYS    ;Display the function-key line
  115.     CALL    INIT_SEC_DISP        ;Display the first part of this sector
  116.     CALL    WRITE_EDITOR_PROMPT    ;Display the Edit prompt
  117.  
  118.     CALL    DISPATCHER
  119.  
  120.     XOR    DL,DL            ;Place cursor at bottom of screen
  121.     MOV    DH,24
  122.     CALL    GOTO_XY
  123.     CALL    CLEAR_TO_END_OF_LINE    ;Clear the inverse video key line
  124.     MOV    DH,23
  125.     CALL    GOTO_XY            ;And leave cursor on line 23
  126.     MOV    AH,4Ch            ;Return to DOS
  127.     INT    21h
  128. DISK_PATCH    ENDP
  129.  
  130.  
  131.     END    DISK_PATCH
  132.