git @ Cat's Eye Technologies BefOS / master src / kernel / pageprop.s
master

Tree @master (Download .tar.gz)

pageprop.s @masterraw · history · blame

;--- 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 -----------------------------------------------------;