home *** CD-ROM | disk | FTP | other *** search
- ;
- ; int9.asm
- ;
- .286
- code segment byte public 'CODE'
- assume cs:code, ds:code
- ;
- include xcs.mac
- ;
- extrn ChcsPsp:word
- extrn ChcsEnv:word
- ;
- extrn OldInt08:dword
- extrn OldInt09:dword
- extrn OldInt10:dword
- extrn OldInt13:dword
- extrn OldInt16:dword
- extrn OldInt1c:dword
- ;
- extrn NewInt08:far
- extrn NewInt10:far
- extrn NewInt13:far
- extrn NewInt1c:far
- ;
- extrn inBeep:near
- extrn ConvertVMode:near
- extrn VModeToCmode:near
- extrn VModeToEmode:near
- extrn PromptOpr:near
- extrn DrawScrBuf:near
- extrn MakeButton:near
- extrn TradeButton:near
- extrn MakeBottomBar:near
- extrn OpenDisplay:near
- extrn SaveCurEnv:near
- ;
- extrn IntrBusy:byte
- extrn inOld16:byte
- ;
- extrn KeyinProc:dword
- extrn ISentries:dword
- ;
- extrn wHas:byte
- extrn uHas:byte
- extrn prHas:byte
- extrn prFontHas:byte
- ;
- extrn wProc:dword
- extrn uProc:dword
- extrn wLen:word
- extrn uLen:word
- ;
- extrn mode:byte
- extrn QuHao:byte
- ;
- extrn c:word
- extrn Int9Buf:byte
- extrn pushin:word
- extrn popout:word
- extrn int9in:byte
- ;
- extrn FHname:byte
- extrn ModeMSG:byte
- extrn KeyMSG:byte
- extrn SysMSG:byte
- extrn DispMSG:byte
- extrn DigMSG:byte
- extrn PadMSG:byte
- extrn dStr:byte
- extrn sym:byte
- extrn sch1:byte
- extrn sch2:byte
- extrn ScanCode:byte
- extrn PadCode:byte
- extrn KeyCode:byte
- extrn TradeMark:byte
- extrn Author:byte
- extrn AuName:byte
- extrn AuthorStr:byte
- extrn AuthorName:byte
- extrn Numb:byte
- extrn StrQu:byte
- extrn AttrStr:byte
- extrn Arrow:byte
- extrn TmpBuffer:word
- extrn TmpCount:word
- extrn inCommand:byte
- extrn inPrompt:byte
- extrn KeyEnd:byte
- extrn d1:byte
- extrn d2:byte
- extrn PmtNo:byte
- extrn mark:byte
- extrn oldkmode:byte
- extrn tmpmode:byte
- extrn kmodeBusy:byte
- extrn reCommand:byte
- extrn SymMark:byte
- extrn pntr:byte
- extrn cPntr:word
- ;
- extrn KeyNum:byte
- extrn KeyBuf:byte
- extrn SameNum:byte
- extrn SameBuf:byte
- extrn CurKey:word
- extrn LastKey:word
- extrn cc1:byte
- extrn cc2:byte
- extrn CtrlShift:byte
- extrn Int9Treated:byte
- ;
- extrn pmtx:byte
- extrn tmpattr:byte
- extrn pmtxmax:byte
- extrn bAttr:byte
- extrn nAttr:byte
- extrn kAttr:byte
- extrn sAttr:byte
- extrn eAttr:byte
- ;
- extrn MyMode:byte
- extrn TextMode:byte
- extrn CurTextMode:byte
- extrn DispMode:byte
- extrn VRamSEG:word
- ;
- extrn inColorText:byte
- extrn inGrCursor:byte
- extrn isTreatCC:byte
- extrn isTreatTab:byte
- extrn DisplayOpen:byte
- extrn ClockSwitch:byte
- extrn TimeOut:word
- extrn NopTime:word
- ;
- ; ----------------------------
- beep proc near
- mov cx, 0166h
- mov bx, 2
- call inBeep
- ret
- beep endp
- ; ----------------------------
- promptc proc near
- ;
- ; IN: dl = char
- ;
- push si
- or IntrBusy, I16Busy
- mov ax, 1403h
- mov bl, tmpattr
- and bl, 0fh
- or bl, bAttr
- call PromptOpr
- inc pmtx
- and IntrBusy, NOT I16Busy
- pop si
- ret
- promptc endp
- ; ----------------------------
- inPmtClear proc near
- push si
- or IntrBusy, I16Busy
- mov ax, 1400h
- mov bl, bAttr
- call PromptOpr
- mov pmtx, 0
- and IntrBusy, NOT I16Busy
- pop si
- ret
- inPmtClear endp
- ; ----------------------------
- PmtC proc near
- ;
- ; IN: dl = char
- ;
- cmp dl, 0dh
- jne PmtCCont0
- call inPmtClear
- ret
- ;
- PmtCCont0: cmp dl, '~'
- jne PmtCCont1
- mov mark, 1
- ret
- ;
- PmtCCont1: cmp byte ptr mark, 0
- je PmtCPutIt
- cmp dl, '1'
- jbe PmtCCont2
- cmp dl, '9'
- ja PmtCCont2
- sub dl, '0'
- jmp PmtCSetIt
- ;
- PmtCCont2: cmp dl, 'e'
- je PmtCSetEC
- cmp dl, 'k'
- je PmtCSetKC
- cmp dl, 'n'
- je PmtCSetNC
- cmp dl, 's'
- je PmtCSetSC
- ret
- ;
- PmtCSetEC: mov dl, eAttr
- jmp PmtCSetIt
- PmtCSetKC: mov dl, kAttr
- jmp PmtCSetIt
- PmtCSetNC: mov dl, nAttr
- jmp PmtCSetIt
- PmtCSetSC: mov dl, sAttr
- PmtCSetIt: mov tmpattr, dl
- mov mark, 0
- ret
- ;
- PmtCPutIt: mov al, pmtx
- cmp al, pmtxmax
- jae PmtCRet0
- call promptc
- PmtCRet0: ret
- PmtC endp
- ; ----------------------------
- PmtMove proc near
- ;
- ; IN: dl = x
- ;
- cmp dl, pmtxmax
- jae PmtMoveRetn
- push si
- or IntrBusy, I16Busy
- mov pmtx, dl
- mov ax, 1402h
- call PromptOpr
- and IntrBusy, NOT I16Busy
- pop si
- PmtMoveRetn: ret
- PmtMove endp
- ; ----------------------------
- PmtClear proc near
- ;
- ; IN: dl = x
- ;
- mov al, sAttr
- mov tmpattr, al
- push dx
- call PmtMove
- pop dx
- push dx
- PmtClearLoop: cmp dl, pmtxmax
- jae PmtClearEnd
- push dx
- mov dl, ' '
- call promptc
- pop dx
- inc dl
- jmp PmtClearLoop
- PmtClearEnd: pop dx
- call PmtMove
- ret
- PmtClear endp
- ; ----------------------------
- PmtCh proc near
- ;
- ; IN: dl = char
- ;
- mov al, kAttr
- mov tmpattr, al
- call promptc
- ret
- PmtCh endp
- ; ----------------------------
- PmtS proc near
- ;
- ; IN: [bp+4] = Str
- ;
- push bp
- mov bp, sp
- push si
- mov si, word ptr [bp+4]
- PmtSLoop: mov dl, [si]
- or dl, dl
- jz PmtSEnd
- call PmtC
- inc si
- jmp PmtSLoop
- ;
- PmtSEnd: pop si
- pop bp
- ret
- PmtS endp
- ; ----------------------------
- PmtFuHao proc near
- cmp QuHao, 10
- jae PmtFuHao10
- mov al, QuHao
- dec al
- mov bl, 9
- mul bl
- add ax, offset FHName
- push ax
- call PmtS
- pop cx
- ret
- ;
- PmtFuHao10: mov al, QuHao
- add al, 38
- mov byte ptr StrQu+5, al
- lea ax, StrQu
- push ax
- call PmtS
- pop cx
- ret
- PmtFuHao endp
- ; ----------------------------
- MakeInBox proc near
- mov dl, 8
- mov dh, 21
- call MakeButton
- mov dl, 21
- mov dh, 71
- call MakeButton
- ret
- MakeInBox endp
- ; ----------------------------
- message proc near
- mov inPrompt, 0
- call MakeBottomBar
- call inPmtClear
- cmp byte ptr mode.kmode, 9
- jne MsgKmode
- ;
- lea ax, TradeMark
- push ax
- call PmtS
- pop cx
- call TradeButton
- cmp DispMode, 6
- jb MsgCont2
- je MsgCmode
- ;
- cmp DispMode, 12h
- jne MsgCont1
- cmp CurTextMode, 0
- je MsgCont1
- mov al, 3
- jmp MsgPmtS
- ;
- MsgCmode: mov al, 2
- jmp MsgPmtS
- ;
- MsgCont1: mov al, 4
- jmp MsgPmtS
- ;
- MsgCont2: mov al, CurTextMode
- MsgPmtS: mov dl, 15
- mul dl
- add ax, offset ModeMSG
- push ax
- call PmtS
- pop cx
- ;
- mov dl, 19
- call PmtMove
- lea ax, Author
- push ax
- call PmtS
- pop cx
- ;
- mov dl, 18
- mov dh, 71
- call MakeButton
- jmp MessageRet0
- ;
- MsgKmode: mov al, nAttr
- mov tmpattr, al
- mov al, byte ptr mode.kmode
- cmp al, 8
- je MsgFuHao
- mov dl, ISstrucSize
- mul dl
- add ax, offset ISentries
- push ax
- call PmtS
- pop cx
- jmp MsgColon
- ;
- MsgFuHao: call PmtFuHao
- MsgColon: call MakeInBox
- ;
- MessageRet0: mov KeyNum, 0
- mov SameNum, 0
- mov d1, 0
- ret
- message endp
- ; ----------------------------
- MakeAuthorStr proc near
- pusha
- push es
- push cs
- pop es
- lea si, AuthorStr
- lea di, Author+1
- mov cl, 4
- cld
- MakeAuLoop0: lodsw
- or ax, ax
- jz MakeAuEnd
- ror ah, cl
- ror al, cl
- xchg ah, al
- stosw
- jmp MakeAuLoop0
- ;
- MakeAuEnd: pop es
- popa
- ret
- MakeAuthorStr endp
- ; ----------------------------
- CmdPrompt proc near
- mov inPrompt, 1
- mov al, PmtNo
- or al, al
- jz CmdPmtKmode
- cmp al, 2
- jb toPmtDigit
- je toPmtPad
- cmp al, 4
- jb toPmtSys
- je toPmtDisp
- mov inPrompt, 0
- ret
- ;
- toPmtDigit: jmp CmdPmtDigit
- toPmtPad: jmp CmdPmtPad
- toPmtSys: jmp CmdPmtSys
- toPmtDisp: jmp CmdPmtDisp
- ;
- CmdPmtKmode: cmp byte ptr mode.kmode, 9
- jne CmdNotAscii
- mov byte ptr KeyMSG+11, 'k'
- jmp toPmtKey
- ;
- CmdNotAscii: mov byte ptr KeyMSG+11, 'e'
- toPmtKey: lea ax, KeyMSG
- push ax
- call PmtS
- pop cx
- mov cx, 9
- xor dh, dh
- CmdKeyLoop: push cx
- push dx
- mov al, dh
- mov bl, ISstrucSize
- mul bl
- mov bx, ax
- cmp byte ptr ISentries[bx+11], 'Y'
- jne NotPmtKey
- cmp dh, byte ptr mode.kmode
- jne NotPmtCur
- mov byte ptr AttrStr+2, 'k'
- jmp CmdPmtCont0
- NotPmtCur: mov byte ptr AttrStr+2, 'e'
- CmdPmtCont0: mov al, dh
- add al, '1'
- mov byte ptr AttrStr+4, al
- lea ax, AttrStr
- push dx
- push ax
- call PmtS
- pop cx
- pop dx
- cmp dh, 8
- je CmdPmtFuhao
- mov al, dh
- mov bl, ISstrucSize
- mul bl
- add ax, offset ISentries
- push ax
- call PmtS
- pop cx
- jmp NotPmtKey
- ;
- CmdPmtFuhao: mov al, sAttr
- mov tmpattr, al
- call PmtFuHao
- NotPmtKey: pop dx
- pop cx
- inc dh
- loop CmdKeyLoop
- mov dl, 6
- mov dh, 71
- call MakeButton
- jmp CmdPmtRet0
- ;
- CmdPmtDigit: mov al, byte ptr mode.dmode
- shl al, 1
- shl al, 1
- shl al, 1
- add al, 16
- xor ah, ah
- push ax
- lea bx, DigMSG
- push bx
- add bx, ax
- mov byte ptr [bx], 'k'
- call PmtS
- pop bx
- pop ax
- add bx, ax
- mov byte ptr [bx], 'e'
- mov dl, 10
- mov dh, 71
- call MakeButton
- jmp CmdPmtRet0
- ;
- CmdPmtPad: mov al, byte ptr mode.pmode
- shl al, 1
- mov ah, al
- shl al, 1
- shl al, 1
- add al, ah
- add al, 16
- xor ah, ah
- push ax
- lea bx, PadMSG
- push bx
- add bx, ax
- mov byte ptr [bx], 'k'
- call PmtS
- pop bx
- pop ax
- add bx, ax
- mov byte ptr [bx], 'e'
- mov dl, 10
- mov dh, 71
- call MakeButton
- jmp CmdPmtRet0
- ;
- CmdPmtSys: lea bx, SysMSG
- cmp byte ptr mode.smode, 1 ; ▒Ω╡π:
- jne toEBiaoDian
- mov ax, 0d0d6h ; '╓╨'
- jmp toSetBiaoDian
- toEBiaoDian: mov ax, 0a2d3h ; '╬≈'
- toSetBiaoDian: mov [bx+18], ax
- cmp ClockSwitch, 1 ; ╩▒╓╙:
- jne toNoClock
- mov ax, 0aabfh ; '┐¬'
- jmp toSetClock
- toNoClock: mov ax, 0d8b9h ; '╣╪'
- toSetClock: mov [bx+36], ax
- cmp isTreatCC, 1 ; ╒√╫╓┤ª└φ:
- jne toNotTreatCC
- mov ax, 0aabfh ; '┐¬'
- jmp toSetTreatCC
- toNotTreatCC: mov ax, 0d8b9h ; '╣╪'
- toSetTreatCC: mov [bx+78], ax
- cmp isTreatTab, 1 ; ▒φ╕±╩╢▒≡:
- jne toNotTreatTab
- mov ax, 0aabfh ; '┐¬'
- jmp toSetTreatTab
- toNotTreatTab: mov ax, 0d8b9h ; '╣╪'
- toSetTreatTab: mov [bx+62], ax
- lea ax, SysMSG
- push ax
- call PmtS
- pop cx
- mov dl, 8
- mov dh, 71
- call MakeButton
- jmp CmdPmtRet0
- ;
- CmdPmtDisp: lea ax, DispMSG
- push ax
- call PmtS
- pop cx
- mov dl, 8
- mov dh, 71
- call MakeButton
- ;
- CmdPmtRet0: cmp pmtx, 64
- jae CmdPmtRetn
- lea ax, Arrow
- push ax
- call PmtS
- pop cx
- CmdPmtRetn: ret
- CmdPrompt endp
- ; ----------------------------
- SetKmode proc near
- ;
- ; IN: tmpmode = to be setted
- ;
- cmp kmodeBusy,0
- jz SetKmodeCont0
- mov al, 0
- ret
- SetKmodeCont0: mov kmodeBusy, 1
- mov al, byte ptr mode.kmode
- mov oldkmode, al
- mov al, tmpmode
- cmp al, 9
- jbe SetKmodeCont1
- jmp SetKmodeRetn
- ;
- SetKmodeCont1: cmp al, byte ptr mode.kmode
- jne SetKmodeContx
- jmp SetKmodeOk
- ;
- SetKmodeContx: mov dl, ISstrucSize
- mul dl
- mov bx, ax
- cmp byte ptr ISentries[bx+11], 'Y'
- je SetKmodeCont2
- jmp SetKmodeRetn
- ;
- SetKmodeCont2: cli
- mov al, tmpmode
- mov byte ptr mode.kmode, al
- mov dx, word ptr ISentries[bx+14]
- mov ax, word ptr ISentries[bx+12]
- mov word ptr KeyinProc+2, dx
- mov word ptr KeyinProc, ax
- sti
- mov ax, 0ffffh
- mov bh, tmpmode
- call dword ptr KeyinProc
- or ax, ax
- jz SetKmodeOk
- cli
- mov al, oldkmode
- mov byte ptr mode.kmode, al
- mov dl, ISstrucSize
- mul dl
- mov bx, ax
- mov ax, word ptr ISentries[bx+12]
- mov dx, word ptr ISentries[bx+14]
- mov word ptr KeyinProc+2, dx
- mov word ptr KeyinProc, ax
- sti
- ;
- SetKmodeRetn: mov byte ptr kmodeBusy, 0
- mov al, 0
- ret
- ;
- SetKmodeOk: cmp oldkmode, 8
- jne SetKmodeRet0
- cmp tmpmode, 8
- jne SetKmodeRet0
- inc QuHao
- cmp QuHao, 16
- jb SetKmodeRet0
- mov QuHao, 1
- ;
- SetKmodeRet0: mov kmodeBusy, 0
- mov al, 1
- ret
- SetKmode endp
- ; ----------------------------
- GetChar proc near
- cmp inCommand, 0
- je GetChSkip0
- cmp inPrompt, 0
- jne GetChSkip1
- mov PmtNo, 0
- call CmdPrompt
- jmp GetChSkip1
- ;
- GetChSkip0: cmp inPrompt, 1
- jne GetChSkip1
- call message
- GetChSkip1: cli
- mov bx, popout
- cmp bx, pushin
- jne GetChCont0
- xor ax, ax
- sti
- ret
- ;
- GetChCont0: lea dx, Int9Buf
- mov ax, [bx]
- mov cx, dx
- add dx, 62
- cmp bx, dx
- je ResetBuf
- inc bx
- inc bx
- jmp GetChSaveIt
- ;
- ResetBuf: mov bx, cx
- GetChSaveIt: mov popout, bx
- mov word ptr c, ax
- sti
- cmp inCommand, 0
- jne TreatCommand
- ret
- ;
- TreatCommand: cmp al, 0e0h
- jne ComCont0
- xor al, al
- ComCont0: or al, al
- jz ComCont1
- mov dh, ah
- xor ah, ah
- ComCont1: cmp ax, UP
- je PmtLast
- cmp ax, DOWN
- je PmtNext
- jmp ComCont2
- ;
- PmtLast: cmp PmtNo, 0
- je toPmtNo4
- dec PmtNo
- jmp PmtMSG
- toPmtNo4: mov PmtNo, 4
- jmp PmtMSG
- PmtNext: cmp PmtNo, 4
- je toPmtNo0
- inc PmtNo
- jmp PmtMSG
- toPmtNo0: mov PmtNo, 0
- PmtMSG: call CmdPrompt
- xor ax, ax
- mov c, ax
- ret
- ;
- ComCont2: mov reCommand, 0
- cmp ax, F1
- jb ComCont3
- cmp ax, F10
- ja ComCont3
- sub ax, F1
- mov tmpmode, ah
- cmp ah, 8
- jne SkipSetRe
- mov reCommand, 1
- SkipSetRe: call SetKmode
- jmp Setted
- ;
- toSetDmode: sub al, '0'
- mov byte ptr mode.dmode, al
- jmp Setted
- ;
- toSetPmode: sub al, '0'
- mov byte ptr mode.pmode, al
- jmp Setted
- ;
- ComCont3: cmp al, '0'
- jb toEnd
- cmp al, '8'
- ja toSetSw
- cmp dh, 0bh
- jbe toSetDmode
- cmp al, '5'
- jbe toSetPmode
- toEnd: jmp Setted
- ;
- toRevSmode: xor byte ptr mode.smode, 01h
- jmp Setted
- ;
- toCCmode: mov bh, 1
- call VModeToCmode
- jmp Setted
- ;
- toRevCursor: xor inGrCursor, 01h
- jmp Setted
- ;
- toRevClock: xor ClockSwitch, 01h
- jmp Setted
- ;
- toRevColor: xor inColorText, 01h
- call DrawScrBuf
- jmp Setted
- ;
- toConvVMode: call ConvertVMode
- cmp CurTextMode, 2
- jne toEnd
- jmp ExitComm
- ;
- toSetSw: or al, 20h
- cmp al, 'b'
- je toRevSmode
- cmp al, 'h'
- je toCCmode
- cmp al, 'g'
- je toRevCursor
- cmp al, 'k'
- je toRevClock
- cmp al, 'c'
- je toRevColor
- cmp al, 'm'
- je toConvVMode
- cmp al, 'o'
- je toSetnAttr
- cmp al, 'p'
- je toSetkAttr
- cmp al, 'r'
- je toCEmode
- cmp al, 's'
- je toRedraw
- cmp al, 't'
- je toSetTab
- cmp al, 'y'
- je toEmode
- cmp al, 'z'
- je toRevCCsw
- cmp al, '{'
- je toSeteAttr
- cmp al, '}'
- je toSetsAttr
- cmp al, '|'
- je toSetbAttr
- jmp Setted
- ;
- toSetnAttr: mov al, nAttr
- inc al
- and al, 0fh
- mov nAttr, al
- mov reCommand, 1
- jmp Setted
- ;
- toSetkAttr: mov al, kAttr
- inc al
- and al, 0fh
- mov kAttr, al
- mov reCommand, 1
- jmp Setted
- ;
- toCEmode: mov bh, 0
- call VModeToCmode
- jmp Setted
- ;
- toRedraw: cmp TextMode, 1
- jne Setted
- call DrawScrBuf
- jmp Setted
- ;
- toSetTab: xor isTreatTab, 01h
- jmp toRedraw
- ;
- toEmode: call VModeToEmode
- jmp ExitComm
- ;
- toRevCCsw: xor isTreatCC, 01h
- jmp toRedraw
- ;
- toSeteAttr: mov al, eAttr
- inc al
- and al, 0fh
- mov eAttr, al
- mov reCommand, 1
- jmp Setted
- ;
- toSetsAttr: mov al, sAttr
- inc al
- and al, 0fh
- mov sAttr, al
- mov reCommand, 1
- jmp Setted
- ;
- toSetbAttr: mov al, bAttr
- add al, 10h
- and al, 70h
- mov bAttr, al
- mov reCommand, 1
- jmp Setted
- ;
- Setted: call message
- ExitComm: cmp reCommand, 0
- jne SkipReinCmd
- mov inCommand, 0
- SkipReinCmd: xor ax, ax
- mov c, ax
- ret
- GetChar endp
- ; ----------------------------
- inPushBackKeys proc near
- ;
- ; IN: si = PushStr (include ScanCode)
- ; cx = num
- ; OUT: cx = Num of Keys Left
- ;
- push di
- push si
- cli
- xor ax, ax
- mov es, ax
- mov bh, 4
- mov bl, es:[41ch]
- iPushKeysLoop: mov di, bx
- cmp bl, 3ch
- jae iPushReset
- inc bl
- inc bl
- jmp iTestBuf
- ;
- iPushReset: mov bl, 1eh
- iTestBuf: cmp bl, es:[41ah]
- je iPushKeysRet0
- cld
- movsw
- mov es:[41ch], bl
- loop iPushKeysLoop
- iPushKeysRet0: pop si
- pop di
- ret
- inPushBackKeys endp
- ; ----------------------------
- PushBackStr proc near
- ;
- ; IN: [bp+4] = Str (no ScanCode)
- ; [bp+6] = num
- ;
- push bp
- mov bp, sp
- push es
- push di
- push si
- cli
- mov si, [bp+4]
- mov cx, [bp+6]
- mov ax, 64
- sub ax, TmpCount
- or cx, cx
- jz PushStrCont0
- cmp cx, ax
- jbe PushStrCont2
- PushStrCont0: mov cx, ax
- ;
- PushStrCont2: mov ch, cl
- xor cl, cl
- lea bx, TmpBuffer
- mov ax, TmpCount
- shl ax, 1
- add bx, ax
- PushStrLoop: mov al, [si]
- or al, al
- jz toPushStr
- xor ah, ah
- mov [bx], ax
- inc cl
- inc si
- add bx, +2
- dec ch
- jnz PushStrLoop
- toPushStr: xor ch, ch
- add cx, TmpCount
- ;
- PushEntry: xor ch, ch
- or cl, cl
- jz PushStrRetn
- push cx
- lea si, TmpBuffer
- mov di, si
- call inPushBackKeys
- mov TmpCount, cx
- pop ax
- or cx, cx
- jz PushStrRetn
- push cs
- pop es
- sub ax, cx
- shl ax, 1
- add si, ax
- cld
- rep movsw
- PushStrRetn: sti
- pop si
- pop di
- pop es
- pop bp
- ret
- PushBackStr endp
- ; ----------------------------
- PushBackKeys proc near
- ;
- ; IN: [bp+4] = Keys Str (Include Scan Codes)
- ; [bp+6] = Num
- ;
- push bp
- mov bp, sp
- push es
- push di
- push si
- cli
- mov si, [bp+4]
- mov cx, [bp+6]
- mov ax, 64
- sub ax, TmpCount
- or cx, cx
- jz PushKeysCont0
- cmp cx, ax
- jbe PushKeysCont2
- PushKeysCont0: mov cx, ax
- ;
- PushKeysCont2: mov ch, cl
- xor cl, cl
- lea bx, TmpBuffer
- mov ax, TmpCount
- shl ax, 1
- add bx, ax
- PushKeysLoop: mov ax, [si]
- or ax, ax
- jz toPushKeys
- mov [bx], ax
- inc cl
- add si, +2
- add bx, +2
- dec ch
- jnz PushKeysLoop
- toPushKeys: xor ch, ch
- add cx, TmpCount
- jmp PushEntry
- PushBackKeys endp
- ; ----------------------------
- PushBackLefts proc near
- cmp TmpCount, 0
- jne PushLeftsCont
- ret
- ;
- PushLeftsCont: push bp
- push es
- push di
- push si
- cli
- mov cx, TmpCount
- jmp PushEntry
- PushBackLefts endp
- ; ----------------------------
- TreatD1 proc near
- ;
- ; IN: [bp+4] = limit
- ;
- push bp
- mov bp, sp
- cmp byte ptr d1, 0
- jne D1Skip0
- cmp byte ptr c.key, '0'
- jne D1Skip1
- mov al, 10
- jmp D1Cont0
- ;
- D1Skip1: mov al, byte ptr c.key
- sub al, '0'
- D1Cont0: mov byte ptr d1, al
- xor ah, ah
- cmp ax, word ptr [bp+4]
- jbe D1Cont1
- mov al, 1
- jmp D1Ret0
- ;
- D1Cont1: mov dl, 9
- call PmtMove
- mov cx, 12
- D1Loop0: push cx
- mov dl, ' '
- call PmtCh
- pop cx
- loop D1Loop0
- mov dl, 9
- call PmtMove
- mov dl, byte ptr c.key
- call PmtCh
- mov al, 0
- jmp D1Retn
- ;
- D1Skip0: cmp byte ptr c.key, ' '
- jne D1Cont2
- mov al, 1
- jmp D1Ret0
- ;
- D1Cont2: mov bl, byte ptr c.key
- sub bl, '0'
- mov byte ptr d2, bl
- mov al, d1
- mov dl, 10
- mul dl
- add al, bl
- mov byte ptr d1, al
- mov al, 1
- D1Ret0: mov dl, 9
- call PmtMove
- mov dl, ' '
- call PmtCh
- D1Retn: pop bp
- ret
- TreatD1 endp
- ; ----------------------------
- TreatDigit proc near
- push bp
- mov bp, sp
- mov word ptr c, ax
- cmp d1, 0
- je TrDigCont0
- cmp byte ptr c.key, ' '
- jne TrDigCont0
- cmp byte ptr mode.dmode, 5
- jb TrDigCont0
- jmp TrDigCont1
- ;
- TrDigCont0: cmp byte ptr mode.dmode, 0
- je TrDigQuit
- cmp byte ptr c.scan, 0bh
- ja TrDigQuit
- cmp byte ptr c.key, '0'
- jb TrDigQuit
- cmp byte ptr c.key, '9'
- jbe TrDigCont1
- TrDigQuit: mov d1, 0
- mov ax, word ptr c
- xor cx, cx
- jmp TrDigRetn
-
- TrDigCont1: mov bl, byte ptr mode.dmode
- dec bl
- cmp bl, 7
- jbe TrDigCont2
- jmp TrDigRetn
- ;
- TrDigCont2: xor bh, bh
- shl bx, 1
- jmp word ptr cs:DEntry[bx]
- ;
- DEntry label word
- dw offset D1Entry
- dw offset D2Entry
- dw offset D3Entry
- dw offset D4Entry
- dw offset D5Entry
- dw offset D6Entry
- dw offset D7Entry
- dw offset D8Entry
- ;
- D1Entry: mov cc1, 0a3h
- mov al, byte ptr c.key
- add al, 128
- mov cc2, al
- jmp TrDigCont3
- ;
- D2Entry:
- D3Entry: mov al, byte ptr c.key
- sub al, '0'
- shl al, 1
- xor bh, bh
- mov bl, al
- cmp byte ptr mode.dmode, 2
- je D23Skip0
- add bl, 20
- D23Skip0: mov ax, word ptr dStr[bx]
- mov cc1, al
- mov cc2, ah
- jmp TrDigCont3
- D4Entry:
- D5Entry: mov cc1, 0a2h
- mov al, byte ptr c.key
- cmp al, '0'
- jne D45Skip0
- mov al, 10
- jmp D45Cont0
- D45Skip0: sub al, '0'
- D45Cont0: push ax
- cmp byte ptr mode.dmode, 4
- jne D45toD5
- mov al, 0d8h
- jmp D45Cont1
- D45toD5: mov al, 0e4h
- D45Cont1: pop dx
- add dl, al
- mov byte ptr cc2, dl
- jmp TrDigCont3
- D6Entry:
- D7Entry: mov ax, 2
- push ax
- call TreatD1
- pop cx
- or al, al
- jnz D67Cont0
- jmp TrDigAbort
- ;
- D67Cont0: cmp byte ptr d1, 20
- jbe D67Cont1
- mov al, byte ptr d1
- mov ah, 0
- mov bl, 10
- div bl
- mov byte ptr d1, al
- D67Cont1: mov byte ptr cc1, 0a2h
- mov al, byte ptr d1
- cmp byte ptr mode.dmode, 6
- jne D67toD7
- add al, 0c4h
- jmp D67Cont2
- ;
- D67toD7: add al, 0b0h
- D67Cont2: mov byte ptr cc2, al
- jmp TrDigCont3
- ;
- D8Entry: mov ax, 1
- push ax
- call TreatD1
- pop cx
- or al, al
- jnz D8Cont0
- jmp TrDigAbort
- ;
- D8Cont0: cmp byte ptr d1, 12
- jbe D8Skip0
- mov al, byte ptr d1
- mov ah, 0
- mov bl, 10
- div bl
- mov byte ptr d1, al
- D8Skip0: mov byte ptr cc1, 0a2h
- mov al, byte ptr d1
- add al, 0f0h
- mov byte ptr cc2, al
- ;
- TrDigCont3: mov byte ptr d1, 0
- call ResetSameBuf
- call AddSame
- mov cx, 0101h
- xor ax, ax
- jmp TrDigRetn
- ;
- TrDigAbort: xor cx, cx
- xor ax, ax
- TrDigRetn: pop bp
- ret
- TreatDigit endp
- ; ----------------------------
- TreatSym proc near
- push bp
- mov bp, sp
- mov word ptr c, ax
- cmp byte ptr mode.smode, 1
- je TrSymCont0
- xor cx, cx
- jmp TrSymRetn
- ;
- TrSymCont0: lea bx, sch1
- xor cx, cx
- SymLoop0: mov dl, [bx]
- or dl, dl
- jz TrSymCont1
- cmp al, dl
- je SymMatch0
- inc cl
- inc bx
- jmp SymLoop0
- SymMatch0: jmp TrSymRet0
- ;
- TrSymCont1: xor cx, cx
- lea bx, sch2
- SymLoop1: mov dl, [bx]
- or dl, dl
- jz Sym2No
- cmp al, dl
- je SymMatch1
- inc bx
- inc cl
- cmp cl, 6
- jb SymLoop1
- Sym2No: mov ax, word ptr c
- xor cx, cx
- jmp TrSymRetn
- SymMatch1: mov ch, cl
- mov dl, 01h
- shl dl, cl
- test SymMark, dl
- jz isQuote1
- not dl
- and SymMark, dl
- mov bl, ch
- shl bl, 1
- add bl, 27
- mov cl, bl
- jmp TrSymRet0
- ;
- isQuote1: mov ch, cl
- mov dl, 1
- shl dl, cl
- or SymMark, dl
- mov bl, cl
- shl bl, 1
- add bl, 26
- mov cl, bl
- ;
- TrSymRet0: push cx
- call ResetSameBuf
- pop cx
- mov bl, cl
- xor bh, bh
- shl bx, 1
- mov ax, word ptr sym[bx]
- mov cc1, al
- mov cc2, ah
- call AddSame
- xor ax, ax
- mov cx, 0101h
- TrSymRetn: pop bp
- ret
- TreatSym endp
- ; ----------------------------
- TreatPad proc near
- push bp
- mov bp, sp
- push si
- mov word ptr c, ax
- cmp byte ptr mode.kmode, 9
- je TrPadQuit
- cmp byte ptr mode.pmode, 0
- jne TrPadCont0
- TrPadQuit: xor cx, cx
- jmp TrPadRetn
- ;
- TrPadCont0: lea si, KeyCode
- lea bx, ScanCode
- xor cl, cl
- PadLoop0: mov al, [si]
- mov ah, [bx]
- cmp ax, word ptr c
- je toPadMatch0
- inc si
- inc bx
- inc cl
- cmp cl, 15
- jb PadLoop0
- mov ax, word ptr c
- xor cx, cx
- jmp TrPadRetn
- ;
- toPadMatch0: cmp byte ptr mode.pmode, 5
- jne TrPadCont1
- mov ax, word ptr c
- call TreatDigit
- jmp TrPadRetn
- ;
- TrPadCont1: push cx
- call ResetSameBuf
- mov al, byte ptr mode.pmode
- dec al
- xor ah, ah
- mov bl, 30
- mul bl
- mov si, ax
- add si, offset PadCode
- pop bx
- xor bh, bh
- shl bx, 1
- mov ax, word ptr [si+bx]
- mov cc1, al
- mov cc2, ah
- call AddSame
- xor ax, ax
- mov cx, 0101h
- ;
- TrPadRetn: pop si
- pop bp
- ret
- TreatPad endp
- ; ----------------------------
- Ascii proc near
- xor cx, cx
- inc ax
- jz AsciiCont0
- dec ax
- AsciiCont0: mov word ptr c, ax
- retf
- Ascii endp
- ; ----------------------------
- ResetSameBuf proc near
- mov SameNum, 0
- mov cx, 11
- lea bx, SameBuf
- xor al, al
- ReSameLoop: mov byte ptr [bx], al
- add al, 16
- inc bx
- loop ReSameLoop
- ret
- ResetSameBuf endp
- ; ----------------------------
- AddSame proc near
- xor bh, bh
- mov bl, SameNum
- mov bl, SameBuf[bx]
- add bl, 16
- mov al, cc1
- mov ah, cc2
- mov word ptr SameBuf[bx], ax
- mov byte ptr SameBuf[bx+2], 0
- inc SameNum
- ret
- AddSame endp
- ; ----------------------------
- DispSames proc near
- mov dl, 22
- call PmtMove
- xor cl, cl
- dSameLoop: cmp cl, SameNum
- jae dSameEnd
- cmp cl, 10
- jae dSameEnd
- push cx
- mov al, cl
- add al, '0'
- cmp byte ptr SameNum, 9
- jne dSameSkip0
- inc al
- dSameSkip0: mov byte ptr Numb+3, al
- mov ax, offset Numb
- push cx
- push ax
- call PmtS
- pop ax
- pop bx
- xor bh, bh
- mov bl, SameBuf[bx]
- add bl, 16
- lea dx, SameBuf
- add dx, bx
- push dx
- call PmtS
- pop dx
- pop cx
- inc cl
- jmp dSameLoop
- dSameEnd: ret
- DispSames endp
- ; ----------------------------
- ClrLine proc near
- or IntrBusy, I16Busy
- mov ch, KeyNum
- add ch, 9
- mov cl, 70
- sub cl, ch
- xor ch, ch
- ClrLoop0: mov ax, 1403h
- mov bl, bAttr
- mov dl, ' '
- int 10h
- loop ClrLoop0
- mov pmtx, 22
- call MakeInBox
- and IntrBusy, NOT I16Busy
- ret
- ClrLine endp
- ; ----------------------------
- prKeys proc near
- or IntrBusy, I16Busy
- push ax
- mov ax, 1402h
- mov dl, 9
- int 10h
- mov cl, KeyNum
- inc cl
- xor bx, bx
- prKeyLoop: push bx
- push cx
- mov ax, 1403h
- mov dl, KeyBuf[bx]
- mov bl, kAttr
- and bl, 0fh
- or bl, bAttr
- int 10h
- pop cx
- pop bx
- inc bx
- loop prKeyLoop
- call ClrLine
- pop ax
- and IntrBusy, NOT I16Busy
- ret
- prKeys endp
- ; ----------------------------
- TreatKeys proc near
- push bp
- mov bp, sp
- test IntrBusy, I10Busy OR KeyBusy
- jz TrKeysCont0
- TrKeysQuit: jmp TrKeysRetn
- ;
- TrKeysCont0: or IntrBusy, KeyBusy
- TrKeysLoop: call PushBackLefts
- call GetChar
- or ax, ax
- jnz TrKeysContc
- jmp TrKeysAbort
- ;
- TrKeysContc: push es
- xor dx, dx
- mov es, dx
- test byte ptr es:[417h], 40h
- pop es
- jnz TrKeysContk
- call TreatPad
- cmp cx, 0101h
- je TrKeysPushStr
- or ax, ax
- jz TrKeysCont1
- call dword ptr KeyinProc
- cmp cx, 0101h
- je TrKeysPushStr
- or ax, ax
- jz TrKeysCont1
- call TreatDigit
- cmp cx, 0101h
- je TrKeysPushStr
- or ax, ax
- jz TrKeysCont1
- call TreatSym
- cmp cx, 0101h
- je TrKeysPushStr
- or ax, ax
- jz TrKeysCont1
- ;
- TrKeysContk: cmp ax, 0ffffh
- je TrKeysContx
- jmp TrKeysPushIt
- ;
- TrKeysCont1: cmp ch, 1
- jne TrKeysCont2
- mov KeyEnd, 1
- cmp cl, 1
- ja TrKeysCont2
- jb TrKeysCont3
- xor ax, ax
- TrKeysPushStr: push ax
- xor ax, ax
- push ax
- mov ax, offset SameBuf+16
- push ax
- call PushBackStr
- pop cx
- pop cx
- pop ax
- or ax, ax
- jnz TrKeysNext
- jmp TrKeysContx
- ;
- TrKeysNext: mov KeyEnd, 0
- jmp TrKeysContc
- ;
- TrKeysPushIt: mov word ptr c, ax
- mov ax, 1
- push ax
- mov ax, offset c
- push ax
- call PushBackKeys
- pop cx
- pop cx
- jmp TrKeysContx
- ;
- TrKeysCont2: mov SameNum, cl
- jmp TrKeysLoop
- ;
- TrKeysCont3: call beep
- TrKeysContx: mov KeyEnd, 0
- jmp TrKeysLoop
- ;
- TrKeysAbort: and IntrBusy, NOT KeyBusy
- TrKeysRetn: pop bp
- ret
- TreatKeys endp
- ; ----------------------------
- NewInt09 proc far
- sti
- test cs:IntrBusy, I09Busy
- jz toNew09
- jmp dword ptr cs:OldInt09
- ;
- toNew09: pusha
- push es
- push ds
- mov ax, cs
- mov ds, ax
- ;
- I09toNew: or IntrBusy, I09Busy
- mov NopTime, 0
- cmp DisplayOpen, 0
- jne I09Skip0
- call OpenDisplay
- I09Skip0: xor ax, ax
- mov es, ax
- mov bl, es:[41ch]
- mov byte ptr int9in, bl
- mov al, es:[417h]
- and al, 07h
- mov CtrlShift, al
- pushf
- call dword ptr OldInt09
- cli
- mov bl, es:[41ch]
- cmp bl, es:[41ah]
- je I09TestCmd
- cmp bl, byte ptr int9in
- je I09TestCmd
- mov bh, 04h
- cmp bl, 1eh
- jbe I09RePntr
- dec bl
- dec bl
- jmp I09Cont0
- ;
- I09TestCmd: cmp CtrlShift, 5
- jb I09toRet0
- mov al, es:[417h]
- and al, 07h
- cmp al, 5
- jae I09toRet0
- xor inCommand, 01h
- I09toRet0: jmp I09Ret0
- ;
- I09RePntr: mov bl, 3ch
- ;
- I09Cont0: mov ax, es:[bx]
- cmp inCommand, 1
- je I09Cont2
- mov cx, ax
- cmp cl, 08h
- je I09SaveCur
- cmp cl, 0e0h
- jne I09SkipR
- xor cl, cl
- I09SkipR: cmp cx, UP
- jb I09Cont1
- cmp cx, DEL
- ja I09Cont1
- I09SaveCur: mov CurKey, cx
- call SaveCurEnv
- jmp I09Contx
- ;
- I09Cont1: mov CurKey, 0
- ;
- I09Contx: cmp MyMode, 1
- jne I09toRet0
- cmp byte ptr mode.kmode, 9
- je I09toRet0
- I09Cont2: mov es:[41ch], bl
- mov bx, pushin
- lea dx, Int9Buf
- mov cx, dx
- add dx, 62
- cmp bx, dx
- je I09ReBuf
- mov dx, bx
- inc dx
- inc dx
- jmp I09TestBuf
- ;
- I09ReBuf: mov dx, cx
- I09TestBuf: cmp dx, popout
- je I09BufOver
- mov [bx], ax
- mov pushin, dx
- jmp I09Ret0
- ;
- I09BufOver: call beep
- ;
- I09Ret0: and IntrBusy, NOT I09Busy
- I09Retn: sti
- cmp inOld16, 1
- jne I09SkipKeys
- call TreatKeys
- I09SkipKeys: pop ds
- pop es
- popa
- iret
- NewInt09 endp
- ; ----------------------------
- GetCurKmode proc near
- ;
- ; OUT: ah = 0
- ; al = kmode (0 - 9)
- ; bh = dmode
- ; bl = smode
- ; ch = pmode
- ;
- xor ah, ah
- mov al, byte ptr mode.kmode
- mov bh, byte ptr mode.dmode
- mov bl, byte ptr mode.smode
- mov ch, byte ptr mode.pmode
- mov [bp+16], ax
- mov [bp+14], bx
- mov [bp+12], cx
- ret
- GetCurKmode endp
- ; ----------------------------
- InstallKeyProc proc near
- ;
- ; IN: al = kmode(1 -- 7)
- ; es:bx = KeyProc Entry
- ; es:dx = EName Str
- ; di = psp
- ; OUT:
- ; Ok) ah = 0; es:bx = &SameBuf
- ; Fail) ah != 0;
- ;
- cmp al, 1
- jb InsKeyRetn
- cmp al, 7
- ja InsKeyRetn
- push ax
- push bx
- mov bl, ISstrucSize
- mul bl
- mov si, ax
- add si, offset ISentries
- cmp byte ptr [si+11], 0
- pop bx
- pop ax
- jne InsKeyRetn
- mov [si+14], es
- mov [si+12], bx
- xor bh, bh
- mov bl, 'Y'
- mov [si+11], bl
- mov [si+ 9], di
- mov [si+ 8], bh
- mov cx, 4
- mov bx, dx
- InsKeyLoop: mov ax, es:[bx]
- mov [si], ax
- add bx, 2
- add si, 2
- loop InsKeyLoop
- xor ax, ax
- InsKeyRet0: mov [bp+16], ax
- lea bx, SameBuf
- mov [bp+14], bx
- mov ax, ds
- mov [bp+ 8], ax ; es:bx = Addr of SameBuf[]
- ret
- ;
- InsKeyRetn: mov ax, 8080h
- mov [bp+16], ax
- ret
- InstallKeyProc endp
- ; ----------------------------
- SetCurKmode proc near
- ;
- ; IN: ah = 32h
- ; al = 0 ... Set Kmode
- ; al = 1 ... Set Dmode
- ; al = 2 ... Set Smode
- ; al = 3 ... Set Pmode
- ; bh = mode value
- ; OUT: Ok) ah = 0
- ; no) ah != 0
- ;
- cmp al, 0
- je goSetKmode
- cmp al, 1
- je goSetDmode
- cmp al, 2
- je goSetSmode
- cmp al, 3
- je goSetPmode
- jmp SetCurRetn
- ;
- goSetDmode: cmp bh, 8
- ja SetCurRetn
- mov byte ptr mode.dmode, bh
- jmp SetCurRet0
- ;
- goSetSmode: cmp bh, 1
- ja SetCurRetn
- mov byte ptr mode.smode, bh
- jmp SetCurRet0
- ;
- goSetPmode: cmp bh, 5
- ja SetCurRetn
- mov byte ptr mode.pmode, bh
- jmp SetCurRet0
- ;
- goSetKmode: mov byte ptr tmpmode, bh
- call SetKmode
- or al, al
- je SetCurRetn
- call message
- SetCurRet0: xor ax, ax
- SetCurExit: mov [bp+16], ax
- ret
- ;
- SetCurRetn: mov ax, 8080h
- jmp SetCurExit
- SetCurKmode endp
- ; ----------------------------
- GetEncode proc near
- ret
- GetEncode endp
- ; ----------------------------
- InstallWLib proc near
- ;
- ; IN: ah = 3ch
- ; al = 0 ... Standard WORDLib
- ; al = 1 ... User Def WORDLib
- ; cx = Lib Length
- ; es:bx = Lib Address
- ; OUT: ax = 0 ... Ok
- ; ax != 0 .. Fail
- ;
- cmp al, 1
- jb toInsStdWLib
- je toInsUsrWLib
- jmp InsWLibRetn
- ;
- toInsStdWLib: cmp wHas, 0
- jne InsWLibRetn
- mov wLen, cx
- mov word ptr wProc, bx
- mov word ptr wProc+2, es
- mov wHas, 1
- jmp InsWLibRet0
- toInsUsrWLib: cmp uHas, 0
- jne InsWLibRetn
- mov uLen, cx
- mov word ptr uProc, bx
- mov word ptr uProc+2, es
- mov uHas, 1
- InsWLibRet0: xor ax, ax
- InsWLibExit: mov [bp+16], ax
- ret
- InsWLibRetn: mov ax, 8080h
- jmp InsWLibExit
- InstallWLib endp
- ; ----------------------------
- GetWordCC1 proc near
- ;
- ; IN: ah = 39h
- ; al = 0 ... Get WLib First CC
- ; al = 1 ... Get WLib Next CC
- ; OUT: ah = 0 ... Ok
- ; dx = CC
- ; ah != 0 .. Fail
- ; dx = 0
- ;
- cmp cs:wHas, 1
- jne toCCRetn
- cmp al, 1
- ja toCCRetn
- ;
- call dword ptr cs:wProc
- iret
- ;
- toCCRetn: mov ax, 8080h
- iret
- GetWordCC1 endp
- ; ----------------------------
- GetWord proc near
- ;
- ; IN: ah = 3ah
- ; al = 0 ... Get First WORD of Specify CC
- ; dx = CC
- ; al = 1 ... Get Next
- ; al = 2 ... Get StdCWLib Addr
- ; al = 3 ... Get UsrCWLib Addr
- ;
- ; es:bx = buffer
- ; OUT: ah = 0 ... Ok
- ; es:bx = CCWord String
- ; cx = CC Num
- ; ah != 80h ... Fail
- ; es:bx = &StdCWlib (IN: al = 2)
- ; es:bx = &UsrCWlib (IN: al = 3)
- ; cx = CWLibLen (IN: al = 2/3)
- ;
- cmp al, 3
- je toUsrAddr
- ja toCWRetn
- ;
- cmp cs:wHas, 1
- jne toCWRetn
- call dword ptr cs:wProc
- iret
- ;
- toUsrAddr: cmp cs:uHas, 1
- jne toCWRetn
- call dword ptr cs:uProc
- iret
- ;
- toCWRetn: mov ax, 8080h
- iret
- GetWord endp
- ; ----------------------------
- unLoadKey proc near
- ;
- ; IN: ah = 34h
- ; al = kmode(1 -- 7)
- ; OUT: ah = 0 ... Ok
- ; ah != 0 ... Fail
- ;
- cmp al, 1
- jb UnInsKeyRetn
- cmp al, 7
- jbe UnInsKeyCont0
- UnInsKeyRetn: mov ax, 8080h
- jmp UnInsKeyExit
- ;
- UnInsKeyCont0: mov tmpmode, al
- mov bl, ISstrucSize
- mul bl
- lea si, ISentries
- add si, ax
- cmp byte ptr [si+11], 'Y'
- je UnInsKeyCont1
- jmp UnInsKeyRetn
- ;
- UnInsKeyCont1: mov byte ptr [si+11], 0
- mov ax, 0ffffh
- mov bl, 0ffh
- mov bh, tmpmode
- call dword ptr [si+12]
- ;
- UnInsKeyCont3: mov al, tmpmode
- cmp al, byte ptr mode.kmode
- jne UnInsKeyRet0
- mov tmpmode, 9
- call SetKmode
- call message
- UnInsKeyRet0: xor ax, ax
- UnInsKeyExit: ret
- unLoadKey endp
- ; ----------------------------
- UnInsKeyProc proc near
- call unLoadKey
- mov [bp+16], ax
- ret
- UnInsKeyProc endp
- ; ----------------------------
- FreeStWord proc near
- mov ax, 3e00h
- call dword ptr wProc
- mov wHas, 0
- ret
- FreeStWord endp
- ; ----------------------------
- FreeUsrWord proc near
- mov ax, 3e01h
- call dword ptr uProc
- mov uHas, 0
- ret
- FreeUsrWord endp
- ; ----------------------------
- UnInstallWLib proc near
- ;
- ; IN: ah = 3eh
- ; al = 0 ... uninstall StdWLib
- ; al = 1 ... uninstall UsrWLib
- ; OUT: ax = 0 ... Ok
- ; ax != 0 .. Fail
- ;
- cmp al, 1
- ja UnInsWRetn
- je UnInsUsrWLib
- cmp wHas, 1
- jne UnInsWRetn
- call dword ptr wProc
- mov wHas, 0
- jmp UnInsWRet0
- ;
- UnInsUsrWLIb: cmp uHas, 1
- jne UnInsWRetn
- call dword ptr uProc
- mov uHas, 0
- UnInsWRet0: xor ax, ax
- UnInsWExit: mov [bp+16], ax
- ret
- ;
- UnInsWRetn: mov ax, 8080h
- jmp UnInsWExit
- UnInstallWLib endp
- ; ----------------------------
- quit proc near
- ;
- ; IN: ah = 81h
- ;
- xor ax, ax
- mov es, ax
- mov bx, cs
- mov cx, es:[20h] ; Int 08h
- mov dx, es:[22h]
- cmp dx, seg NewInt08
- je QuitCont0
- toQuitRetn: mov ax, 8080h
- jmp QuitExit
- ;
- QuitCont0: cmp cx, offset NewInt08
- jne toQuitRetn
- mov cx, es:[24h]
- mov dx, es:[26h] ; Int 09h
- cmp cx, offset NewInt09
- jne toQuitRetn
- cmp dx, seg NewInt09
- jne toQuitRetn
- mov cx, es:[40h]
- mov dx, es:[42h]
- cmp cx, offset NewInt10
- jne toQuitRetn
- cmp dx, seg NewInt10
- jne toQuitRetn
- mov cx, es:[4ch]
- mov dx, es:[4eh]
- cmp cx, offset NewInt13
- jne toQuitRetn
- cmp dx, seg NewInt13
- jne toQuitRetn
- mov cx, es:[58h]
- mov dx, es:[5ah]
- cmp cx, offset NewInt16
- jne toQuitRetn
- cmp dx, seg NewInt16
- jne toQuitRetn
- mov cx, es:[70h]
- mov dx, es:[72h]
- cmp cx, offset NewInt1c
- jne toQuitRetn
- cmp dx, seg NewInt1c
- jne toQuitRetn
- push ds
- cli
- lds dx, cs:OldInt08
- mov ax, 2508h
- int 21h
- lds dx, cs:OldInt09
- mov ax, 2509h
- int 21h
- lds dx, cs:OldInt10
- mov ax, 2510h
- int 21h
- lds dx, cs:OldInt13
- mov ax, 2513h
- int 21h
- lds dx, cs:OldInt16
- mov ax, 2516h
- int 21h
- lds dx, cs:OldInt1c
- mov ax, 251ch
- int 21h
- sti
- pop ds
- cmp wHas, 0
- je QuitSkip0
- call FreeStWord
- QuitSkip0: cmp uHas, 0
- je QuitSkip1
- call FreeUsrWord
- QuitSkip1: mov cl, 1
- lea bx, ISentries
- QuitLoop0: cmp cl, 7
- ja QuitCont1
- add bx, 16
- inc cl
- cmp byte ptr [bx+11], 'Y'
- jne QuitLoop0
- push bx
- push cx
- mov ah, 34h
- mov al, cl
- dec al
- call unLoadKey
- pop cx
- pop bx
- jmp QuitLoop0
- ;
- QuitCont1: cmp prHas, 0
- je QuitCont2
- mov ah, 81h
- int 17h
- ;
- QuitCont2: mov es, ChcsEnv
- mov ah, 49h
- int 21h
- mov es, ChcsPsp
- mov ah, 49h
- int 21h
- mov ah, 81h
- int 16h
- call VModeToEmode
- xor ax, ax
- QuitExit: mov [bp+16], ax
- ret
- quit endp
- ; ----------------------------
- ClockControl proc near
- ;
- ; IN: ah = 29h
- ; al = 0 ... Clock On
- ; al = 1 ... Clock Off
- ; al = 2 ... Get Clock Status
- ;
- cmp al, 1
- jb toClockOn
- je toClockOff
- cmp al, 2
- ja ClockRet0
- mov al, ClockSwitch
- xor al, 01h
- xor ah, ah
- jmp ClockRet0
- ;
- toClockOn: mov ClockSwitch, 1
- xor ax, ax
- jmp ClockRet0
- ;
- toClockOff: mov ClockSwitch, 0
- xor ax, ax
- ClockRet0: mov [bp+16], ax
- ret
- ClockControl endp
- ; ----------------------------
- GetVersion proc near
- ;
- ; IN: ax = 3f00h
- ; OUT: ah = 0
- ; al = version
- ; es:bx = Message
- ;
- mov ax, 0100h
- mov dx, cs
- lea bx, ver
- mov [bp+16], ax
- mov [bp+14], bx
- mov [bp+ 8], dx
- ret
- ;
- ver db 0dh, 0ah, 9
- db 'CHCS │╔╚╗┬δ╓╨╬─╧╡═│ Ver 1.0░µ'
- db 0dh, 0ah, 9
- db 'Copyright (c) 1993,1994 │┬╜¡─■'
- db 0dh, 0ah, '$'
- GetVersion endp
- ; ----------------------------
- GetSysStatus proc near
- ;
- ; IN: ax = 3f01h
- ; OUT: ah.b0 = Lpr Driver
- ; ah.b1 = wch Driver
- ; al = DispMode
- ; bh = CurTextMode
- ; bl.b0 = inGrCursor
- ; bl.b1 = ClockSwitch
- ; bl.b2 = isTreatCC
- ; bl.b3 = inTreatTab
- ; si = VRamSEG
- ;
- mov al, DispMode
- mov bh, CurTextMode
- mov bl, inGrCursor
- mov ah, ClockSwitch
- mov cl, 1
- shl ah, cl
- or bl, ah
- mov ah, isTreatCC
- inc cl
- shl ah, cl
- or bl, ah
- mov ah, isTreatTab
- inc cl
- shl ah, cl
- or bl, ah
- mov ah, wHas
- inc cl
- shl ah, cl
- or bl, ah
- mov ah, uHas
- inc cl
- shl ah, cl
- or bl, ah
- mov ah, prFontHas
- inc cl
- shl ah, cl
- or bl, ah
- mov ah, prHas
- inc cl
- shl ah, cl
- or bl, ah
- xor ah, ah
- mov [bp+16], ax
- mov [bp+14], bx
- mov ax, VRamSEG
- mov [bp+ 4], ax
- ret
- GetSysStatus endp
- ; ----------------------------
- SysControl proc near
- ;
- ; IN: ax = 3F10h
- ; bh = 0 ... VMode Control
- ; bl = 0 ... Set VMode to CE mode
- ; bl = 1 ... Set VMode to C mode
- ; bl = 2 ... Set VMode to E mode
- ; bh = 1 ... Cursor Control
- ; bl = 0 ... Click Cursor
- ; bl = 1 ... Static Cursor
- ; bh = 2 ... Clock Control
- ; bl = 0 ... Clock Off
- ; bl = 1 ... Clock On
- ; bh = 3 ... TreatCC Control
- ; bl = 0 ... TreatCC Off
- ; bl = 1 ... TreatCC On
- ; bh = 4 ... TreatTab Control
- ; bl = 0 ... TreatTab Off
- ; bl = 1 ... TreatTab On
- ;
- mov ax, bx
- cmp bh, 0
- je SysCtrlVMode
- cmp bl, 1
- ja SysCtrlRetn
- cmp bh, 1
- je SysCtrlCursor
- cmp bh, 2
- je SysCtrlClock
- cmp bh, 3
- je SysCtrlTrCC
- cmp bh, 4
- je SysCtrlTab
- SysCtrlRetn: ret
- ;
- SysCtrlVMode: cmp al, 2
- ja SysCtrlRetn
- je SysToEmode
- mov bh, al
- call VModeToCmode
- ret
- ;
- SysToEmode: call VModeToEmode
- ret
- ;
- SysCtrlCursor: mov inGrCursor, al
- ret
- ;
- SysCtrlClock: mov ClockSwitch, al
- ret
- ;
- SysCtrlTrCC: mov isTreatCC, al
- ret
- ;
- SysCtrlTab: mov isTreatTab, al
- ret
- SysControl endp
- ; ----------------------------
- CcsSysControl proc near
- ;
- ; IN: ah = 3fh
- ; al = 00h ... Get CCS Version
- ; al = 01h ... Get CCS System Status
- ; al = 10h ... CCS System Control
- ;
- cmp al, 0
- jne toSysStatus
- call GetVersion
- ret
- ;
- toSysStatus: cmp al, 01h
- jne toSysCtrl
- call GetSysStatus
- ret
- ;
- toSysCtrl: cmp al, 10h
- jne CcsSysQuit
- call SysControl
- CcsSysQuit: ret
- CcsSysControl endp
- ; ----------------------------
- NewInt16 proc far
- sti
- cmp ah, 39h
- je toKeyCC
- cmp ah, 3ah
- je toCWord
- cmp ah, 81h
- je I16Cont0
- cmp ah, 20h
- jb toPushLefts
- cmp ah, 40h
- jb I16Cont0
- goOld16: jmp dword ptr cs:OldInt16
- ;
- toPushLefts: pusha
- push ds
- push cs
- pop ds
- call TreatKeys
- pop ds
- popa
- test ah, 0fh
- jnz goOld16
- mov cs:inOld16, 1
- pushf
- call dword ptr cs:OldInt16
- mov cs:inOld16, 0
- iret
- ;
- toKeyCC: jmp GetWordCC1
- ;
- toCWord: jmp GetWord
- ;
- trunOld16: pop cx
- toOld16: pop bp
- pop di
- pop si
- pop ds
- pop es
- pop dx
- pop cx
- pop bx
- pop ax
- jmp dword ptr cs:OldInt16
- ;
- I16Cont0: push ax
- push bx
- push cx
- push dx
- push es
- push ds
- push si
- push di
- push bp
- push cs
- pop ds
- mov bp, sp
- cmp ah, 81h
- je toQuitXCS
- cmp ah, 30h
- jae toNew16
- cmp ah, 24h
- je toRePmtLine
- cmp ah, 29h
- je toClockCtrl
- jmp toOld16
- ;
- toRePmtLine: call message
- jmp I16Retn
- ;
- toClockCtrl: call ClockControl
- jmp I16Retn
- ;
- toQuitXCS: call quit
- jmp I16Retn
- ;
- ;
- toNew16: push ax
- mov al, ah
- xor ah, ah
- sub al, 30h
- shl ax, 1
- mov si, ax
- pop ax
- call word ptr cs:I16Entry[si]
- I16Retn: pop bp
- pop di
- pop si
- pop ds
- pop es
- pop dx
- pop cx
- pop bx
- pop ax
- iret
- ;
- I16Entry label word
- dw offset GetCurKmode ; 30
- dw offset InstallKeyProc ; 31
- dw offset SetCurKmode ; 32
- dw offset GetEncode ; 33
- dw offset UnInsKeyProc ; 34
- dw offset trunOld16 ; 35
- dw offset trunOld16 ; 36
- dw offset trunOld16 ; 37
- dw offset trunOld16 ; 38
- dw offset GetWordCC1 ; 39
- dw offset GetWord ; 3A
- dw offset trunOld16 ; 3B
- dw offset InstallWLib ; 3C
- dw offset trunOld16 ; 3D
- dw offset UnInstallWLib ; 3E
- dw offset CcsSysControl ; 3F
- ;
- NewInt16 endp
- ; ----------------------------
- code ends
- ;
- public NewInt09
- public NewInt16
- public message
- public ResetSameBuf
- public AddSame
- public prKeys
- public PushBackKeys
- public PushBackStr
- public Ascii
- public beep
- public DispSames
- public ver
- public MakeAuthorStr
- ;
- end
-