View Source Document

pageprop.s

;--- BEGIN ---------------------------------------------------;

;--- CONSTANTS -----------------------------------------------;

;--- DATA ----------------------------------------------------;

SEGMENT .data

;--- BSS -----------------------------------------------------;

SEGMENT .bss

;--- CODE ----------------------------------------------------;

SEGMENT .text

        ;;--------------------------------------------;
        ;; Displays the properties of the current page
        ;; on the status bar, if there is room.
        ;; ax: * -> GARBAGE
        ;; si: * -> GARBAGE
        ;; di: * -> GARBAGE
        ;; cx: * -> GARBAGE
DisplayProperties:mov   al, 1
        call    AssertStatusBar

        mov di, 24          ; position on screen
        mov cx, 58          ; length of bar
        mov ax, 2020h       ; attr + char
        call    DrawBar

;       mov di, 0
;.Green:        mov ax, di          ; TODO: abstract into routine
;       shl ax, 1
;       mov si, ax          ; si = di * 2
;       mov ax, 2020h
;       mov [es:si + 24], ax
;       inc di
;       cmp di, 58
;       jne .Green

        mov di, 0
        cmp [cheader], word 0bef0h  ; validate header ID.
        je  .Draw
        jmp MoveCursor
                        ; TODO: abstract into routine.
.Draw:      mov ax, di          ; show file description.
        shl ax, 1
        mov si, ax          ; si = di * 2
        mov ah, 71h
        mov al, [cheader + 32 + di]
        mov [es:si + 100], ax
        inc di
        cmp di, 16
        jne .Draw

        mov ah, 71h
        mov bx, [cheader+2]
        mov di, 32
        call    DisplayShort

        mov ah, 74h
        mov bx, [cheader+4]
        call    DisplayShort

        mov ah, 7ah
        mov bx, [cheader+6]
        call    DisplayShort

        mov ah, 7bh
        mov bx, [cheader+8]
        call    DisplayShort

        mov ah, 70h
        mov bx, [cheader+10]
        call    DisplayShort

        jmp MoveCursor



        ;;--------------------------------------------;
        ;; Edits the properties of the current page
        ;; in the status bar, if there is room.
        ;; ax: * -> GARBAGE
        ;; si: * -> GARBAGE
        ;; di: * -> GARBAGE
EditPageProps:  call    EditModeOnly
        mov al, 1
        call    AssertStatusBar

        cmp [cheader], word 0bef0h  ; first off validate header ID.
        jnz .Abort
        mov di, 0
        jmp .Edit
.Abort:     jmp BadLight
.Edit:      mov ah, 71h
        mov di, 100
        mov cx, 16
        call    EditString
                        ; TODO: abstract into routine.
        mov di, 0
.Save:      mov ax, di          ; read file description.
        shl ax, 1
        mov si, ax          ; si = di * 2
        mov ax, [es:si + 100]
        mov [cheader + 32 + di], al
        inc di
        cmp di, 16
        jne .Save

        mov ah, 71h
        mov bx, [cheader+2]
        push    bx
        mov di, 32
        call    EditShort
        mov [cheader+2], bx

        mov ah, 74h
        mov bx, [cheader+4]
        pop bx
        call    EditShort
        mov [cheader+4], bx

        mov ah, 7ah
        mov bx, [cheader+6]
        call    EditShort
        mov [cheader+6], bx

        mov ah, 7bh
        mov bx, [cheader+8]
        call    EditShort
        mov [cheader+8], bx

        mov ah, 70h
        mov bx, [cheader+10]
        call    EditShort
        mov [cheader+10], bx

        jmp MoveCursor


        ;;--------------------------------------------;
        ;; Initializes the properties of the page.
        ;; Sets the signature to bef0h and zeroes out
        ;; the page number links.
        ;; ax: * -> GARBAGE
        ;; si: * -> GARBAGE
        ;; di: * -> GARBAGE
InitPageProps:  call    EditModeOnly
        mov [cheader], word 0bef0h
        xor ax, ax
        mov [cheader+2], ax
        mov [cheader+4], ax
        mov [cheader+6], ax
        mov [cheader+8], ax
        mov [cheader+10], ax
        jmp DisplayProperties



        ;;--------------------------------------------;
        ;; Invalidates the properties of the page.
        ;; Sets the signature to 0000h.
        ;; ax: * -> GARBAGE
        ;; si: * -> GARBAGE
        ;; di: * -> GARBAGE
DelPageProps:   call    EditModeOnly
        mov [cheader], word 0000h   ; invalidate the header ID.
        jmp DisplayProperties

;--- END -----------------------------------------------------;