Changeset 51 in xtideuniversalbios


Ignore:
Timestamp:
Oct 11, 2010, 8:27:43 AM (14 years ago)
Author:
aitotat
google:author:
aitotat
Message:

Changes to Assembly Library:
File handle is now properly returned when opening file.
Added function for getting file size by using file handle.

Location:
trunk/Assembly_Library
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Assembly_Library/Inc/File.inc

    r50 r51  
    22; Project name  :   Assembly Library
    33; Created date  :   8.10.2010
    4 ; Last update   :   8.10.2010
     4; Last update   :   10.10.2010
    55; Author        :   Tomi Tilli
    66; Description   :   File library defines.
     
    1717; Origin of file seek
    1818struc SEEK_FROM
    19     .startOfFile            resb    1
    20     .currentFilePosition    resb    1
    21     .endOfFile              resb    1
     19    .startOfFile            resb    1   ; 00h
     20    .currentFilePosition    resb    1   ; 01h
     21    .endOfFile              resb    1   ; 02h
    2222endstruc
    2323
  • trunk/Assembly_Library/Src/File/FileIO.asm

    r50 r51  
    22; Project name  :   Assembly Library
    33; Created date  :   1.9.2010
    4 ; Last update   :   8.10.2010
     4; Last update   :   10.10.2010
    55; Author        :   Tomi Tilli
    66; Description   :   Functions for file access.
     
    2828    int     DOS_INTERRUPT_21h
    2929    xchg    si, dx
     30    mov     bx, ax      ; Copy file handle to BX
    3031    ret
    3132
     
    6869ALIGN JUMP_ALIGN
    6970FileIO_ReadCXbytesToDSSIusingHandleFromBX:
    70     xchg    dx, si              ; DS:DX now points to source buffer
     71    xchg    dx, si              ; DS:DX now points to destination buffer
    7172    mov     ah, READ_FROM_FILE_OR_DEVICE
    7273    int     DOS_INTERRUPT_21h
     
    102103
    103104;--------------------------------------------------------------------
     105; FileIO_GetFileSizeToDXAXusingHandleFromBXandResetFilePosition:
     106;   Parameters:
     107;       BX:     File handle
     108;   Returns:
     109;       DX:AX:  Signed file size (if CF cleared)
     110;       AX:     DOS error code (if CF set)
     111;       CF:     Clear if successfull
     112;               Set if error
     113;   Corrupts registers:
     114;       Nothing
     115;--------------------------------------------------------------------
     116ALIGN JUMP_ALIGN
     117FileIO_GetFileSizeToDXAXusingHandleFromBXandResetFilePosition:
     118    push    cx
     119
     120    ; Get file size to DX:AX
     121    xor     cx, cx
     122    xor     dx, dx
     123    mov     al, SEEK_FROM.endOfFile
     124    call    FileIO_SeekFromOriginInALtoOffsetInDXAXusingHandleFromBX
     125    jc      SHORT .ReturnFileError
     126    push    dx
     127    push    ax
     128
     129    ; Reset file position
     130    xor     dx, dx
     131    mov     al, SEEK_FROM.startOfFile
     132    call    FileIO_SeekFromOriginInALtoOffsetInDXAXusingHandleFromBX
     133    pop     ax
     134    pop     dx
     135
     136.ReturnFileError:
     137    pop     cx
     138    ret
     139
     140
     141;--------------------------------------------------------------------
    104142; FileIO_SeekFromOriginInALtoOffsetInDXAXusingHandleFromBX:
    105143;   Parameters:
    106144;       AL:     SEEK_FROM.(origin)
    107145;       BX:     File handle
    108 ;       DX:AX:  Seek offset (signed)
     146;       CX:DX:  Signed offset to seek starting from AL
    109147;   Returns:
    110 ;       AX:     DOS error code if CF set
     148;       DX:AX:  New file position in bytes from start of file (if CF cleared)
     149;       AX:     DOS error code (if CF set)
    111150;       CF:     Clear if successfull
    112151;               Set if error
     
    116155ALIGN JUMP_ALIGN
    117156FileIO_SeekFromOriginInALtoOffsetInDXAXusingHandleFromBX:
    118     push    dx
    119     push    cx
    120 
    121     mov     cx, dx              ; DOS wants high word in CX
    122     xchg    dx, ax              ; DOS wants low word in DX
    123157    mov     ah, SET_CURRENT_FILE_POSITION
    124158    int     DOS_INTERRUPT_21h
    125 
    126     pop     cx
    127     pop     dx
    128159    ret
  • trunk/Assembly_Library/Src/Menu/Dialog/DialogFile.asm

    r50 r51  
    22; Project name  :   Assembly Library
    33; Created date  :   6.9.2010
    4 ; Last update   :   9.10.2010
     4; Last update   :   10.10.2010
    55; Author        :   Tomi Tilli
    66; Description   :   Displays file dialog.
     
    523523ALIGN JUMP_ALIGN
    524524.ChangeToUpdir:
     525    push    cs
     526    pop     ds
    525527    mov     si, g_szUpdir
    526528    jmp     SHORT .ChangeDirectoryToDSSI
  • trunk/Assembly_Library/Src/Menu/Dialog/LineSplitter.asm

    r46 r51  
    148148ALIGN JUMP_ALIGN
    149149.RemoveEmptyLinesAtTheEndIfAnyExists:
    150     mov     al, [si-2]          ; Load character before NULL
    151     cmp     al, SOH
    152     je      SHORT .RemoveEmptyLineAtTheEndOfString
    153     cmp     al, LF
     150    cmp     BYTE [si-2], SOH    ; Character before NULL
    154151    je      SHORT .RemoveEmptyLineAtTheEndOfString
    155152    ret
     
    203200    mov     si, di              ; SI points to start of first line
    204201    mov     al, STX             ; Last control character to scan for
    205     inc     cx                  ; Increment CX to get length for first line
     202    inc     cx                  ; Increment CX to line count
    206203    cld
    207204ALIGN JUMP_ALIGN
    208205.LineScanLoop:
    209206    scasb                       ; cmp al, [es:di]. Increment DI
    210     jb      SHORT .LineScanLoop ; Non control character
    211 
    212     ; Our end of line characters or NULL character
     207    jb      SHORT .LineScanLoop ; Ignore all above STX
     208
     209    ; NULL, SOH or STX
    213210    dec     cx                  ; Decrement lines to scan through
    214211    jz      SHORT .WantedLineFound
     
    223220.EndOfString:
    224221    lahf                        ; Load FLAGS low to AH
    225     lea     cx, [di-1]          ; We don't want control character to be printed
    226     sub     cx, si              ; String length to CX
     222    lea     cx, [di-1]          ; CX = offset to NULL, SOH or STX
     223    sub     cx, si              ; CX = string length
    227224    sahf                        ; Store AH to FLAGS low
    228225    ret
  • trunk/Assembly_Library/Src/Menu/MenuCharOut.asm

    r48 r51  
    22; Project name  :   Assembly Library
    33; Created date  :   15.7.2010
    4 ; Last update   :   8.10.2010
     4; Last update   :   10.10.2010
    55; Author        :   Tomi Tilli
    66; Description   :   Character out function for printing withing menu window.
     
    8080ALIGN JUMP_ALIGN
    8181MovePartialWordToNewTextLineAndPrintCharacterFromAX:
    82     cmp     al, ' '
    83     je      SHORT .MoveCursorInDItoBeginningOfNextLine
     82    cmp     al, ' '     ; Space or any control character
     83    jb      SHORT .MoveCursorInDItoBeginningOfNextLine
    8484    push    si
    8585    push    cx
Note: See TracChangeset for help on using the changeset viewer.