1032 lines
28 KiB
NASM
1032 lines
28 KiB
NASM
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
;<3B> Message Module <20>
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
.386
|
|||
|
Jumps
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
;<3B> Externals <20>
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Extrn M_FunctionDivider:Far
|
|||
|
Extrn M_Object1List:Far
|
|||
|
Extrn S_GetDestination:Far
|
|||
|
Extrn O1_LongMessageList:Far
|
|||
|
Extrn O1_ConfirmClearMessage:Far
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
;<3B> Globals <20>
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Global Msg_ResetMessage:Far
|
|||
|
Global Msg_DrawMessage:Far
|
|||
|
Global Msg_PreMessage:Far
|
|||
|
Global Msg_PostMessage:Far
|
|||
|
Global Msg_GetMessageLength:Far
|
|||
|
Global Msg_GetMessageOffset:Far
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Segment Message BYTE Public 'Code' USE16
|
|||
|
Assume CS:Message, DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
;<3B> Variables <20>
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
MESSAGELENGTH Equ 8000
|
|||
|
|
|||
|
TopLine DW 0
|
|||
|
CurrentPosition DW 0
|
|||
|
MessageData DB MESSAGELENGTH Dup (0)
|
|||
|
DW 0 ; Security
|
|||
|
MessageDataTerminator DB 0
|
|||
|
Edit DB 0 ; if Edit=1, show '' for enter.
|
|||
|
HorizontalPosition DW 0
|
|||
|
CurrentLine DW 0
|
|||
|
CharacterColour DB 12
|
|||
|
|
|||
|
NoEditKeys Label
|
|||
|
DB 0
|
|||
|
DW 1C8h ; Up arrow
|
|||
|
DW Msg_ViewMsgUp
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D0h ; Down arrow
|
|||
|
DW Msg_ViewMsgDown
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1C9h
|
|||
|
DW Msg_ViewMsgPgUp
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D1h
|
|||
|
DW Msg_ViewMsgPgDn
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 11Ch
|
|||
|
DW Msg_ViewMsgEdit
|
|||
|
|
|||
|
DB 1
|
|||
|
DW 'T'-'@' ; Ctrl 'T'
|
|||
|
DW Msg_ToggleCharacterSet
|
|||
|
|
|||
|
DB 0FFh ; End of List
|
|||
|
|
|||
|
EditMsgKeys Label
|
|||
|
DB 0
|
|||
|
DW 1C7h
|
|||
|
DW Msg_EditMsgHome
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CFh
|
|||
|
DW Msg_EditMsgEnd
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CBh
|
|||
|
DW Msg_EditMsgLeft
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1CDh
|
|||
|
DW Msg_EditMsgRight
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1C8h ; Up arrow
|
|||
|
DW Msg_EditMsgUp
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D0h ; Down arrow
|
|||
|
DW Msg_EditMsgDown
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1C9h ; PgUp
|
|||
|
DW Msg_EditMsgPgUp
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D1h ; PgDn
|
|||
|
DW Msg_EditMsgPgDn
|
|||
|
|
|||
|
; DB 2
|
|||
|
; DW 1C8h ; Up arrow
|
|||
|
; DW Msg_ViewMsgUp
|
|||
|
;
|
|||
|
; DB 2
|
|||
|
; DW 1D0h ; Down arrow
|
|||
|
; DW Msg_ViewMsgDown
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D2h ; Insert
|
|||
|
DW Msg_EditMsgInsert
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 10Fh
|
|||
|
DW Msg_Tab
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 1D3h ; Delete
|
|||
|
DW Msg_EditMsgDelete
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 101h ; Escape
|
|||
|
DW Msg_EditMsgView
|
|||
|
|
|||
|
DB 0
|
|||
|
DW 10Eh ; Backspace
|
|||
|
DW Msg_EditMsgBackSpace
|
|||
|
|
|||
|
DB 1
|
|||
|
DW 19h
|
|||
|
DW Msg_EditMsgDeleteLine
|
|||
|
|
|||
|
DB 1
|
|||
|
DW 2E00h ; Alt 'C'
|
|||
|
DW Msg_ClearMessage
|
|||
|
|
|||
|
DB 1
|
|||
|
DW 'T'-'@' ; Ctrl 'T'
|
|||
|
DW Msg_ToggleCharacterSet
|
|||
|
|
|||
|
DB 0FFh
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
;<3B> Functions <20>
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_ResetMessage Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop ES
|
|||
|
Mov DI, Offset MessageData
|
|||
|
Xor AX, AX
|
|||
|
Mov CX, 4000
|
|||
|
Rep StosW
|
|||
|
|
|||
|
Mov CS:Edit, 0
|
|||
|
Mov CS:TopLine, 0
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_ResetMessage
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_DrawMessage Far
|
|||
|
|
|||
|
Call S_GetDestination
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Cmp Edit, 0
|
|||
|
JE Msg_DrawMessage7
|
|||
|
|
|||
|
Mov SI, Offset MessageData
|
|||
|
Mov CX, CurrentPosition
|
|||
|
Xor DX, DX ; DX = line count.
|
|||
|
Xor BX, BX ; BX = cursor position.
|
|||
|
JCXZ Msg_DrawMessage4
|
|||
|
|
|||
|
Msg_DrawMessage1:
|
|||
|
LodsB
|
|||
|
Test AL, AL
|
|||
|
JZ Msg_DrawMessage4
|
|||
|
|
|||
|
Inc BX
|
|||
|
|
|||
|
Cmp AL, 13 ; Enter?
|
|||
|
JNE Msg_DrawMessage2
|
|||
|
|
|||
|
Inc DX ; Increase current line.
|
|||
|
Xor BX, BX
|
|||
|
|
|||
|
Msg_DrawMessage2:
|
|||
|
Loop Msg_DrawMessage1
|
|||
|
|
|||
|
Msg_DrawMessage4:
|
|||
|
Mov CurrentLine, DX
|
|||
|
Mov HorizontalPosition, BX
|
|||
|
|
|||
|
Mov AX, TopLine ; Boundary checking...
|
|||
|
Cmp AX, DX
|
|||
|
JBE Msg_DrawMessage5
|
|||
|
|
|||
|
Mov AX, DX ; Need new top line.
|
|||
|
|
|||
|
Msg_DrawMessage5:
|
|||
|
LEA CX, [EAX+34]
|
|||
|
Cmp CX, DX
|
|||
|
JAE Msg_DrawMessage6
|
|||
|
|
|||
|
Mov AX, DX
|
|||
|
Sub AX, 34
|
|||
|
JNC Msg_DrawMessage6
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
|
|||
|
Msg_DrawMessage6:
|
|||
|
Mov TopLine, AX
|
|||
|
; Now to get the stuff onto
|
|||
|
; the screen...
|
|||
|
Msg_DrawMessage7:
|
|||
|
Mov CX, TopLine
|
|||
|
Mov SI, Offset MessageData
|
|||
|
JCXZ Msg_DrawMessage9
|
|||
|
|
|||
|
Msg_DrawMessage8:
|
|||
|
LodsB
|
|||
|
And AL, AL
|
|||
|
JZ Msg_DrawMessageEnd
|
|||
|
|
|||
|
Cmp AL, 13
|
|||
|
JNE Msg_DrawMessage8
|
|||
|
Loop Msg_DrawMessage8
|
|||
|
|
|||
|
Msg_DrawMessage9:
|
|||
|
Mov DI, (2+13*80)*2
|
|||
|
Mov BL, CharacterColour
|
|||
|
Mov CX, 35
|
|||
|
Mov DX, 20+100h
|
|||
|
Mov AH, BL
|
|||
|
|
|||
|
Push DI
|
|||
|
|
|||
|
Cmp Edit, 1
|
|||
|
JE Msg_DrawMessage10
|
|||
|
|
|||
|
Mov DX, 300h
|
|||
|
|
|||
|
Msg_DrawMessage10:
|
|||
|
LodsB
|
|||
|
And AL, AL
|
|||
|
JZ Msg_DrawMessage12
|
|||
|
|
|||
|
Cmp AL, 13
|
|||
|
JE Msg_DrawMessage11
|
|||
|
|
|||
|
Cmp AL, ' '
|
|||
|
JE Msg_DrawMessage14
|
|||
|
|
|||
|
StosW
|
|||
|
Jmp Msg_DrawMessage10
|
|||
|
|
|||
|
Msg_DrawMessage14:
|
|||
|
Mov AH, 3
|
|||
|
StosW
|
|||
|
Mov AH, BL
|
|||
|
Jmp Msg_DrawMessage10
|
|||
|
|
|||
|
Msg_DrawMessage11:
|
|||
|
Mov AX, DX
|
|||
|
StosW
|
|||
|
|
|||
|
Mov AH, BL
|
|||
|
|
|||
|
Pop DI
|
|||
|
Add DI, 160
|
|||
|
Push DI
|
|||
|
|
|||
|
Loop Msg_DrawMessage10
|
|||
|
Jmp Msg_DrawMessage13
|
|||
|
|
|||
|
Msg_DrawMessage12:
|
|||
|
Mov AX, DX
|
|||
|
Inc AH
|
|||
|
StosW
|
|||
|
|
|||
|
Msg_DrawMessage13:
|
|||
|
Pop DI
|
|||
|
|
|||
|
Msg_DrawMessageEnd:
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_DrawMessage
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_PreMessage Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Cmp Edit, 0
|
|||
|
JE Msg_PreMessage1
|
|||
|
|
|||
|
Call S_GetDestination
|
|||
|
|
|||
|
Mov AX, CurrentLine
|
|||
|
Sub AX, TopLine
|
|||
|
Mov BX, 80
|
|||
|
Mul BX
|
|||
|
Add AX, HorizontalPosition
|
|||
|
LEA DI, [EAX*2+(2+13*80)*2+1]
|
|||
|
|
|||
|
And Byte Ptr [ES:DI], 8
|
|||
|
Or Byte Ptr [ES:DI], 30h
|
|||
|
|
|||
|
Msg_PreMessage1:
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_PreMessage
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_PostMessage Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
|
|||
|
Cmp Edit, 0
|
|||
|
JNE Msg_PostMessage2
|
|||
|
|
|||
|
Mov SI, Offset NoEditKeys
|
|||
|
Call M_FunctionDivider
|
|||
|
JC Msg_PostMessage1
|
|||
|
|
|||
|
Jmp [SI]
|
|||
|
|
|||
|
Msg_PostMessage1:
|
|||
|
Xor AX, AX
|
|||
|
Ret
|
|||
|
|
|||
|
Msg_PostMessage2:
|
|||
|
Mov SI, Offset EditMsgKeys
|
|||
|
Call M_FunctionDivider
|
|||
|
JC Msg_PostMessage3
|
|||
|
|
|||
|
Jmp [SI]
|
|||
|
|
|||
|
Msg_PostMessage3:
|
|||
|
Cmp CX, 11Ch ; Enter
|
|||
|
JE Msg_PostMessage6
|
|||
|
Test CL, CL
|
|||
|
JZ Msg_PostMessage1
|
|||
|
|
|||
|
Cmp DL, 32
|
|||
|
JB Msg_PostMessage1
|
|||
|
Jmp Msg_PostMessage4
|
|||
|
|
|||
|
Msg_PostMessage6:
|
|||
|
Mov DL, 13
|
|||
|
|
|||
|
Msg_PostMessage4:
|
|||
|
Push DX
|
|||
|
|
|||
|
Mov DX, 1
|
|||
|
Mov SI, CurrentPosition
|
|||
|
Call InsertData
|
|||
|
|
|||
|
Pop DX
|
|||
|
|
|||
|
JC Msg_PostMessage5
|
|||
|
|
|||
|
Mov [SI+MessageData], DL
|
|||
|
Call CheckWordWrap
|
|||
|
Jmp Msg_EditMsgRight
|
|||
|
|
|||
|
Msg_PostMessage5:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_PostMessage
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_Tab Far
|
|||
|
|
|||
|
Mov CX, 8
|
|||
|
|
|||
|
Msg_Tab1:
|
|||
|
Push CX
|
|||
|
Mov DX, 32
|
|||
|
Call Far Ptr Msg_PostMessage4
|
|||
|
Pop CX
|
|||
|
Loop Msg_Tab1
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
|
|||
|
EndP Msg_Tab
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_ViewMsgUp Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Mov AX, TopLine
|
|||
|
Sub AX, 1
|
|||
|
AdC AX, 0
|
|||
|
Mov TopLine, AX
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_ViewMsgUp
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_ViewMsgDown Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Mov AX, TopLine
|
|||
|
Inc AX
|
|||
|
Cmp AX, 7970
|
|||
|
JB Msg_ViewMsgDown1
|
|||
|
|
|||
|
Mov AX, 7970
|
|||
|
|
|||
|
Msg_ViewMsgDown1:
|
|||
|
Mov TopLine, AX
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_ViewMsgDown
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_ViewMsgPgUp Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Mov AX, TopLine
|
|||
|
Sub AX, 35
|
|||
|
JNC Msg_ViewMsgPgUp1
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
|
|||
|
Msg_ViewMsgPgUp1:
|
|||
|
Mov TopLine, AX
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_ViewMsgPgUp
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_ViewMsgPgDn Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Mov AX, TopLine
|
|||
|
Add AX, 35
|
|||
|
Cmp AX, 7970
|
|||
|
JB Msg_ViewMsgPgDn1
|
|||
|
|
|||
|
Mov AX, 7970
|
|||
|
|
|||
|
Msg_ViewMsgPgDn1:
|
|||
|
Mov TopLine, AX
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_ViewMsgPgDn
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_ViewMsgEdit Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Mov TopLine, 0
|
|||
|
Mov CurrentLine, 0
|
|||
|
Mov CurrentPosition, 0
|
|||
|
Mov Edit, 1
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_ViewMsgEdit
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_EditMsgView Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Mov Edit, 0
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_EditMsgView
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_EditMsgLeft Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Sub CurrentPosition, 1
|
|||
|
AdC CurrentPosition, 0
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_EditMsgLeft
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_EditMsgRight Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Mov SI, CurrentPosition
|
|||
|
Cmp SI, MESSAGELENGTH-2
|
|||
|
JAE Msg_EditMsgRight1
|
|||
|
|
|||
|
Cmp Word Ptr [SI+MessageData], 0
|
|||
|
JE Msg_EditMsgRight1
|
|||
|
|
|||
|
Inc CurrentPosition
|
|||
|
|
|||
|
Msg_EditMsgRight1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_EditMsgRight
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_EditMsgUp Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Mov SI, CurrentPosition ; Need to search back
|
|||
|
; twice...
|
|||
|
Call FindStart
|
|||
|
And SI, SI
|
|||
|
JZ Msg_EditMsgUpEnd
|
|||
|
Dec SI
|
|||
|
Call FindStart
|
|||
|
|
|||
|
Add SI, Offset MessageData
|
|||
|
|
|||
|
Mov CX, HorizontalPosition
|
|||
|
JCXZ Msg_EditMsgUp3
|
|||
|
|
|||
|
Msg_EditMsgUp2:
|
|||
|
LodsB
|
|||
|
Cmp AL, 13
|
|||
|
LoopNE Msg_EditMsgUp2
|
|||
|
JNE Msg_EditMsgUp3
|
|||
|
|
|||
|
Dec SI
|
|||
|
|
|||
|
Msg_EditMsgUp3:
|
|||
|
Sub SI, Offset MessageData
|
|||
|
Mov CurrentPosition, SI
|
|||
|
|
|||
|
Msg_EditMsgUpEnd:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_EditMsgUp
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_EditMsgPgUp Far
|
|||
|
|
|||
|
Mov CX, 35
|
|||
|
|
|||
|
Msg_EditMsgPgUp1:
|
|||
|
Push CX
|
|||
|
Call Msg_EditMsgUp
|
|||
|
Pop CX
|
|||
|
Loop Msg_EditMsgPgUp1
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_EditMsgPgUp
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_EditMsgDown Far
|
|||
|
Assume DS:Message
|
|||
|
; Search for enter
|
|||
|
Mov SI, CurrentPosition
|
|||
|
|
|||
|
Msg_EditMsgDown1:
|
|||
|
Mov AL, [SI+MessageData]
|
|||
|
Inc SI
|
|||
|
And AL, AL
|
|||
|
JZ Msg_EditMsgDownEnd
|
|||
|
|
|||
|
Cmp AL, 13
|
|||
|
JNE Msg_EditMsgDown1
|
|||
|
|
|||
|
Mov CX, HorizontalPosition
|
|||
|
JCXZ Msg_EditMsgDown3
|
|||
|
|
|||
|
Msg_EditMsgDown2:
|
|||
|
Mov AL, [SI+MessageData]
|
|||
|
And AL, AL
|
|||
|
JZ Msg_EditMsgDown3
|
|||
|
|
|||
|
Cmp AL, 13
|
|||
|
JE Msg_EditMsgDown3
|
|||
|
|
|||
|
Inc SI
|
|||
|
Loop Msg_EditMsgDown2
|
|||
|
|
|||
|
Msg_EditMsgDown3:
|
|||
|
Cmp SI, MESSAGELENGTH-2
|
|||
|
JAE Msg_EditMsgDownEnd
|
|||
|
|
|||
|
Mov CurrentPosition, SI
|
|||
|
|
|||
|
Msg_EditMsgDownEnd:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_EditMsgDown
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_EditMsgPgDn Far
|
|||
|
|
|||
|
Mov CX, 35
|
|||
|
|
|||
|
Msg_EditMsgPgDn1:
|
|||
|
Push CX
|
|||
|
Call Msg_EditMsgDown
|
|||
|
Pop CX
|
|||
|
Loop Msg_EditMsgPgDn1
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_EditMsgPgDn
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_EditMsgDelete Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Mov SI, CurrentPosition
|
|||
|
Mov DX, 1
|
|||
|
Call DeleteData
|
|||
|
Call CheckWordWrap
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_EditMsgDelete
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_EditMsgInsert Far
|
|||
|
|
|||
|
Mov SI, CurrentPosition
|
|||
|
Mov DX, 1
|
|||
|
Call InsertData
|
|||
|
JC Msg_EditMsgInsert1
|
|||
|
|
|||
|
Mov Byte Ptr [SI+MessageData], 32
|
|||
|
Call CheckWordWrap
|
|||
|
|
|||
|
Msg_EditMsgInsert1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_EditMsgInsert
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_EditMsgBackspace Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Mov SI, CurrentPosition
|
|||
|
And SI, SI
|
|||
|
JZ Msg_EditMsgBackspace1
|
|||
|
|
|||
|
Call Msg_EditMsgLeft
|
|||
|
Call Msg_EditMsgDelete
|
|||
|
|
|||
|
Msg_EditMsgBackspace1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_EditMsgBackspace
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_EditMsgDeleteLine Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Mov SI, CurrentPosition ; Search back for
|
|||
|
; start of line..
|
|||
|
Call FindStart
|
|||
|
|
|||
|
; Find length to delete.
|
|||
|
Xor BX, BX ; DI = length
|
|||
|
|
|||
|
Msg_EditMsgDeleteLine3:
|
|||
|
Mov AL, [SI+BX+MessageData]
|
|||
|
Inc BX
|
|||
|
|
|||
|
And AL, AL
|
|||
|
JZ Msg_EditMsgDeleteLine4
|
|||
|
Cmp AL, 13
|
|||
|
JNE Msg_EditMsgDeleteLine3
|
|||
|
|
|||
|
Msg_EditMsgDeleteLine4:
|
|||
|
Mov DX, BX
|
|||
|
Call DeleteData
|
|||
|
|
|||
|
Mov CurrentPosition, SI
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_EditMsgDeleteLine
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_ClearMessage Far
|
|||
|
|
|||
|
Mov DI, Offset O1_ConfirmClearMessage
|
|||
|
Mov CX, 4
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
And DX, DX
|
|||
|
JZ Msg_ClearMessage1
|
|||
|
|
|||
|
Call Msg_ResetMessage
|
|||
|
|
|||
|
Msg_ClearMessage1:
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_ClearMessage
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_EditMsgHome Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Mov SI, CurrentPosition
|
|||
|
Call FindStart
|
|||
|
Mov CurrentPosition, SI
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_EditMsgHome
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_EditMsgEnd Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Mov SI, CurrentPosition
|
|||
|
|
|||
|
Msg_EditMsgEndLoop:
|
|||
|
Mov AL, [SI+MessageData]
|
|||
|
|
|||
|
Inc SI
|
|||
|
|
|||
|
And AL, AL
|
|||
|
JZ Msg_EditMsgEnd1
|
|||
|
|
|||
|
Cmp AL, 13
|
|||
|
JNE Msg_EditMsgEndLoop
|
|||
|
|
|||
|
Msg_EditMsgEnd1:
|
|||
|
Dec SI
|
|||
|
Mov CurrentPosition, SI
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_EditMsgEnd
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc FindStart
|
|||
|
|
|||
|
FindStart1:
|
|||
|
Sub SI, 1
|
|||
|
JC FindStart2
|
|||
|
|
|||
|
Cmp Byte Ptr [SI+MessageData], 13
|
|||
|
JNE FindStart1
|
|||
|
|
|||
|
FindStart2:
|
|||
|
Inc SI
|
|||
|
Ret
|
|||
|
|
|||
|
EndP FindStart
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc InsertData ; SI = pos, DX = length.
|
|||
|
|
|||
|
Push CX
|
|||
|
Push DX
|
|||
|
Push SI
|
|||
|
|
|||
|
Mov CX, MESSAGELENGTH-1
|
|||
|
Sub CX, SI
|
|||
|
Sub CX, DX
|
|||
|
|
|||
|
Mov SI, Offset MessageData+MESSAGELENGTH-2
|
|||
|
Mov DI, SI
|
|||
|
Sub SI, DX
|
|||
|
|
|||
|
Cmp Byte Ptr [SI], 0
|
|||
|
JNE InsertDataError
|
|||
|
|
|||
|
Push DS
|
|||
|
Pop ES
|
|||
|
|
|||
|
StD
|
|||
|
Rep MovsB
|
|||
|
ClD
|
|||
|
|
|||
|
ClC
|
|||
|
Jmp InsertDataEnd
|
|||
|
|
|||
|
InsertDataError:
|
|||
|
Push DS
|
|||
|
|
|||
|
Mov DI, Offset O1_LongMessageList
|
|||
|
Mov CX, 2
|
|||
|
Call M_Object1List
|
|||
|
|
|||
|
Pop DS
|
|||
|
|
|||
|
StC
|
|||
|
|
|||
|
InsertDataEnd:
|
|||
|
Pop SI
|
|||
|
Pop DX
|
|||
|
Pop CX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP InsertData
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc DeleteData ; SI = pos, DX = length
|
|||
|
; Assume DS:Message
|
|||
|
|
|||
|
Push CX
|
|||
|
Push DX
|
|||
|
Push SI
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop ES
|
|||
|
|
|||
|
Mov CX, MESSAGELENGTH
|
|||
|
Sub CX, SI
|
|||
|
Sub CX, DX
|
|||
|
JS DeleteData1
|
|||
|
|
|||
|
Add SI, Offset MessageData
|
|||
|
Mov DI, SI
|
|||
|
Add SI, DX
|
|||
|
|
|||
|
Rep MovsB
|
|||
|
|
|||
|
Xor AX, AX
|
|||
|
Mov CX, DX
|
|||
|
Rep StosB
|
|||
|
|
|||
|
DeleteData1:
|
|||
|
Pop SI
|
|||
|
Pop DX
|
|||
|
Pop CX
|
|||
|
Ret
|
|||
|
|
|||
|
EndP DeleteData
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc CheckWordWrap ; Check current line only.
|
|||
|
|
|||
|
Mov SI, CurrentPosition
|
|||
|
Call FindStart
|
|||
|
|
|||
|
; OK, so SI = pos of last line.
|
|||
|
; Now count length of new line.
|
|||
|
Xor BX, BX ; BX = count.
|
|||
|
|
|||
|
CheckWordWrap3:
|
|||
|
Mov AL, [SI+BX+MessageData]
|
|||
|
|
|||
|
Inc BX
|
|||
|
|
|||
|
And AL, AL
|
|||
|
JZ CheckWordWrap4
|
|||
|
Cmp AL, 13
|
|||
|
JNE CheckWordWrap3
|
|||
|
|
|||
|
CheckWordWrap4: ; OK.. now if BX > 66...
|
|||
|
Cmp BX, 75
|
|||
|
JA CheckWordWrap5
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
CheckWordWrap5: ; Search back for a space and REPLACE
|
|||
|
; it with an enter...
|
|||
|
Mov BX, 75
|
|||
|
|
|||
|
CheckWordWrap6:
|
|||
|
Dec BX
|
|||
|
JZ CheckWordWrap7
|
|||
|
|
|||
|
Cmp Byte Ptr [SI+BX+MessageData], 32
|
|||
|
JNE CheckWordWrap6
|
|||
|
|
|||
|
Mov Byte Ptr [SI+BX+MessageData], 13
|
|||
|
|
|||
|
Ret
|
|||
|
|
|||
|
CheckWordWrap7: ; Insert an enter
|
|||
|
Mov DX, 1
|
|||
|
Add SI, 75
|
|||
|
Call InsertData
|
|||
|
Mov Byte Ptr [SI+MessageData], 13
|
|||
|
|
|||
|
CheckWordWrap8:
|
|||
|
Ret
|
|||
|
|
|||
|
EndP CheckWordWrap
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_GetMessageLength Far ; Returns AX
|
|||
|
|
|||
|
Push DS
|
|||
|
Push SI
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
|
|||
|
Mov SI, Offset MessageData
|
|||
|
|
|||
|
Msg_GetMessageLength1:
|
|||
|
LodsB
|
|||
|
And AL, AL
|
|||
|
JNZ Msg_GetMessageLength1
|
|||
|
|
|||
|
Sub SI, Offset MessageData
|
|||
|
Mov AX, SI
|
|||
|
|
|||
|
Pop SI
|
|||
|
Pop DS
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_GetMessageLength
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_GetMessageOffset Far
|
|||
|
|
|||
|
Push CS
|
|||
|
Pop DS
|
|||
|
|
|||
|
Mov DX, Offset MessageData
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_GetMessageOffset
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
Proc Msg_ToggleCharacterSet Far
|
|||
|
Assume DS:Message
|
|||
|
|
|||
|
Xor CharacterColour, 6 xor 12
|
|||
|
|
|||
|
Mov AX, 1
|
|||
|
Ret
|
|||
|
|
|||
|
EndP Msg_ToggleCharacterSet
|
|||
|
Assume DS:Nothing
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
EndS
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
End
|