Metropoli BBS
VIEWER: editor.asm MODE: TEXT (ASCII)
.MODEL	SMALL

;-----------------------------------------------------------------------;
; This file contains procedures that are used for editing the SECTOR:	;
;									;
; WRITE_TO_MEMORY		Write a byte into SECTOR		;
; EDIT_BYTE			Change byte in memory and on screen	;
;-----------------------------------------------------------------------;

.CODE

.DATA
	EXTRN	SECTOR:BYTE
	EXTRN	SECTOR_OFFSET:WORD
	EXTRN	PHANTOM_CURSOR_X:BYTE
	EXTRN	PHANTOM_CURSOR_Y:BYTE
.CODE
;-----------------------------------------------------------------------;
; This procedure writes one byte to SECTOR, at the memory location	;
; pointed to by the phantom cursor.					;
;									;
; On entry:	DL	Byte to write to SECTOR				;
;									;
; The offset is calculated by						;
;   OFFSET = SECTOR_OFFSET + (16 * PHANTOM_CURSOR_Y) + PHANTOM_CURSOR_X	;
;									;
; Reads:	PHANTOM_CURSOR_X, PHANTOM_CURSOR_Y, SECTOR_OFFSET	;
; Writes:	SECTOR							;
;-----------------------------------------------------------------------;
WRITE_TO_MEMORY	PROC
	PUSH	AX
	PUSH	BX
	PUSH	CX
	MOV	BX,SECTOR_OFFSET
	MOV	AL,PHANTOM_CURSOR_Y
	XOR	AH,AH
	MOV	CL,4			;Multiply PHANTOM_CURSOR_Y by 16
	SHL	AX,CL
	ADD	BX,AX			;BX = SECTOR_OFFSET + (16 * Y)
	MOV	AL,PHANTOM_CURSOR_X
	XOR	AH,AH
	ADD	BX,AX			;That's the address!
	MOV	SECTOR[BX],DL		;Now, store the byte
	POP	CX
	POP	BX
	POP	AX
	RET
WRITE_TO_MEMORY		ENDP

	PUBLIC	EDIT_BYTE
	EXTRN	SAVE_REAL_CURSOR:PROC, RESTORE_REAL_CURSOR:PROC
	EXTRN	MOV_TO_HEX_POSITION:PROC, MOV_TO_ASCII_POSITION:PROC
	EXTRN	WRITE_PHANTOM:PROC, WRITE_EDITOR_PROMPT:PROC
	EXTRN	CURSOR_RIGHT:PROC, WRITE_HEX:PROC, WRITE_CHAR:PROC
;-----------------------------------------------------------------------;
; This procedure changes a byte in memory and on the screen.		;
;									;
;	DL	Byte to write into SECTOR, and change on screen		;
;									;
; Uses:		SAVE_REAL_CURSOR, RESTORE_REAL_CURSOR			;
;		MOV_TO_HEX_POSITION, MOV_TO_ASCII_POSITION		;
;		WRITE_PHANTOM, WRITE_PROMPT_LINE, CURSOR_RIGHT		;
;		WRITE_HEX, WRITE_CHAR, WRITE_TO_MEMORY			;
; Reads:	EDITOR_PROMPT						;
;-----------------------------------------------------------------------;
EDIT_BYTE	PROC
	PUSH	DX
	CALL	SAVE_REAL_CURSOR
	CALL	MOV_TO_HEX_POSITION	;Move to the hex number in the
	CALL	CURSOR_RIGHT		; hex window
	CALL	WRITE_HEX		;Write the new number
	CALL	MOV_TO_ASCII_POSITION	;Move to the char. in the ASCII window
	CALL	WRITE_CHAR		;Write the new character
	CALL	RESTORE_REAL_CURSOR	;Move cursor back where it belongs
	CALL	WRITE_PHANTOM		;Rewrite the phantom cursor
	CALL	WRITE_TO_MEMORY		;Save this new byte in SECTOR
	CALL	WRITE_EDITOR_PROMPT	;Display the Edit prompt
	POP	DX
	RET
EDIT_BYTE	ENDP


	END

[ RETURN TO DIRECTORY ]