Код:
LRESULT CALLBACK ConfigClass::KeyboardHook( int nCode, WPARAM wp, LPARAM lp )
{
KBDLLHOOKSTRUCT *pkh = (KBDLLHOOKSTRUCT *) lp;
dword wParam = pkh->vkCode;
dword lParam = 1;
dword lParamHi = pkh->scanCode;
signed char cFlags = pkh->flags;
if( cFlags & 1 )
{
lParamHi |= BIT_8;
}
if( cFlags < 0 )
{
lParamHi |= BIT_14;
lParamHi |= BIT_15;
}
if( nCode==HC_ACTION )
{
if( wParam == VK_NUMLOCK )
{
if( pSharedData2->gbNumLockDisabled )
{
if( cFlags < 0 )
{
pSharedData2->bVK_NUMLOCK_pressed = false;
lParamHi <<= 16;
lParam |= lParamHi;
if( pSharedData2->ghWndFocus ) { PostMessage( pSharedData2->ghWndFocus, WM_KEYUP, wParam, lParam ); }
}
else
{
if( pSharedData2->bVK_NUMLOCK_pressed ) { lParamHi |= BIT_14; }
pSharedData2->bVK_NUMLOCK_pressed = true;
lParamHi <<= 16;
lParam |= lParamHi;
if( pSharedData2->ghWndFocus ) { PostMessage( pSharedData2->ghWndFocus, WM_KEYDOWN, wParam, lParam ); }
}
if( pSharedData2->ghWndFocus ) { return 1; }
}
else
{
if( cFlags < 0 ){ pSharedData2->bVK_NUMLOCK_pressed = false; }
else
{
if( !pSharedData2->bVK_NUMLOCK_pressed )
{
pSharedData2->bVK_NUMLOCK_pressed = true;
pSharedData2->bNumLockState = !pSharedData2->bNumLockState;
pSharedData2->bNewNumLock = pSharedData2->bNumLockState;
}
}
}
}
else
if( wParam == VK_CAPITAL )
Код:
.Title HD
;
; HD.MAC - HD device driver.
;
; Revision history:
; 19-Mar-2003 : Created
; 02-Feb-2011 : HDCSR changed from 177660 to 177720
.Macro ......
.EndM
.Enabl LC
; Default SYSGEN options.
TIM$IT = 0
MMG$T = 0
ERL$G = 0
HDCSR = 177720 ; Command and state reg addr for HD device.
HDSIZ = 1600. ; Default HD device size in 512 byte blocks.
;
; HD command codes (for HD command reg: 177720 )
;
SetUni = 1 ; Set HD unit number
SetBlk = 2 ; Set HD block number
SetBuf = 3 ; Set memory buffer address
SetWCn = 4 ; Set operation word count
CmdRea = 5 ; Execute READ on HD
CmdWri = 6 ; Execute WRITE on HD
GetSiz = 7 ; Get HD size in blocks.
;
; Fixed locations.
;
.ASECT
. = 60
HD.GEN:
;;;;;;;
.MCall .DrDef
.DrDef HD, 362, FILST$!SPFUN$!VARSZ$, HDSIZ, HDCSR, 0
.DrPtr
.DrSpF <373>
.SbTtl Installation check
;
; Initial check (prints HD message).
;
.ASect
. = 116
HDMES:
.ASCIZ <CR><LF>/HD (177720) disk driver v1.0c 2012/<CR><LF>
. = 200
Nop
Tst @#64
BNE 1$
Mov PC, R0
Add #HDMES-., R0
Br 2$
3$:
MovB (R0)+, @#TPB
TstB @#TPS
BPl .-4.
2$: TstB (R0)
BNe 3$
1$:
ClC
Return
.............
;
; SET HD subroutines.
;
.DrSet ERLG, 1, O.GEN, NUM
.DrSet MMGT, 2, O.GEN, NUM
.DrSet TIMIT, 4, O.GEN, NUM
.Dsabl LSB
.Enabl LSB
;
; Use 'SET HD ERLG=1' or 'SET HD ERLG=0' to change ERL$G bit on the fly.
; Use 'SET HD MMGT=1' or 'SET HD MMGT=0' to change MMG$T bit on the fly.
; Use 'SET HD TIMIT=1' or 'SET HD TIMIT=0' to change TIM$IT bit on the fly.
;
O.GEN:
Tst R0 ; Arg = 0 ?
BEq 30$
BiS R3, HD.GEN ; Set SYSGEN bit.
Br 31$
30$:
BiC R3, HD.GEN ; Clear SYSGEN bit.
31$:
ClC
Return
.IIF GT .-1000 .ERROR
;
; I/O request entry point.
;
.DrBeg HD
Mov HDCQE, R4 ; R4 -> Queue element
Mov (R4)+, R2 ; R2 = Block number
MovB (R4)+, R1 ; R1 = SpFun code
BNe SPFUN ; Is it SpFun call?
MovB (R4)+, R1 ; R1 = Unit number
BiC #^c7, R1 ; Force it to be 1..7
Mov R1, @#HD$CSR+2 ;
Mov #SetUni,@#HD$CSR ; Select unit for operations.
Tst @#HD$CSR ; Valid unit number?
BMi HDERR ; No - Error!
Mov R2, @#HD$CSR+2 ;
Mov #SetBlk,@#HD$CSR ; Set block number.
Tst @#HD$CSR ; Valid?
BPl 3$ ; Yes - OK
Mov HDCQE, R4 ;
BiS #EOF$, @-(R4) ; Else - return EOF
Br DONE ;
3$:
Mov (R4)+, @#HD$CSR+2 ;
Mov #SetBuf, @#HD$CSR ; Set buf addr
Mov (R4), R1 ; R1 = word count
BEq DONE ; R1 = 0 - Nothing to do
BPl HDREAD ; > 0 - Read
; < 0 - Write
Neg R1 ; Get true word count
Mov R1, @#HD$CSR+2 ; ...
Mov #SetWCn,@#HD$CSR ; and set it.
Tst @#HD$CSR ; Valid?
BPl 4$ ; Yes - OK
Mov HDCQE, R4 ;
BiS #EOF$, @-(R4) ; Else - set EOF bit
4$:
Mov #CmdWri,@#HD$CSR ; Make Write to HD
Br CHECK ; OK?
HDREAD:
Mov R1, @#HD$CSR+2 ;
Mov #SetWCn,@#HD$CSR ; Set word count
Tst @#HD$CSR ; Valid?
BPl 5$ ; Yes - OK
Mov HDCQE, R4 ;
BiS #EOF$, @-(R4) ; Else - set EOF bit
5$:
Mov #CmdRea,@#HD$CSR ; Make Read from HD
CHECK:
Tst @#HD$CSR ; Error?
BPl DONE ; No - OK
; Else - abort
HDINT:
HDERR:
Mov HDCQE, R4 ;
BiS #HDERR$, @-(R4) ; Set ERROR bit in CSW.
DONE:
.DRFIN HD
;
; .SpFun 373 - Get HD unit size.
;
SPFUN:
CmpB R1, #373 ; GET SIZE?
BNe HDERR
MovB (R4)+, R1 ; Q$UNIT
BiC #^c7, R1 ;
Mov R1, @#HD$CSR+2
Mov #SetUni, @#HD$CSR ; Select unit for operations.
Mov #GetSiz, @#HD$CSR ; Get unit size
Mov @#HD$CSR+2, R1
BEq HDERR
Mov R1, @(R4)+ ; Report unit size
Br DONE
.IIF GT .-HDSTRT-1000 .ERROR
.Dsabl LSB
.Enabl LSB
;
; Primary bootstrap.
;
.DrBot HD, START, READ
. = HDBOOT + 40
START:
Jmp BOOT
;
; Boottime media read. R0 = Block; R1 = Word Count; R2 = Buf Addr
;
. = HDBOOT + 210
READ:
Mov #HD$CSR+2, R4 ; R4 -> HD data reg
Mov R4, R5 ; R5 -> HD data reg
Mov @#B$DEVU, (R4) ; Unit Num
Mov #SetUni, -(R4) ; R4 -> HD command reg
Mov R0, (R5) ; R0 - Block number
Mov #SetBlk, (R4) ; Set it
Mov R1, (R5) ; R1 - Word count
Mov #SetWCn, (R4) ; Set it
Mov R2, (R5) ; R2 - Buf addr
Mov #SetBuf, (R4) ; Set it
Mov #CmdRea, (R4) ; READ from HD device
RtS PC ;
;
; Primary boot
;
. = HDBOOT + 500
HDMESC:
.ASCIZ <CR><LF>"HD Boot-I-Cold boot.."<CR><LF>
.Even
BOOT: ; Cold boot
Mov #10000, SP ; Boottime SP value
Mov R0, -(SP) ; Get cold boot unit num
......
Mov PC, R0
Add #HDMESC-., R0
Br 2$
3$:
MovB (R0)+, @#TPB
1$: TstB @#TPS
BPl 1$
2$: TstB (R0)
BNe 3$
......
Mov #2, R0 ; Block number of BSTRAP
Mov #2000, R1 ; Word count of BSTRAP
Mov #1000, R2 ; Loading addr for BSTRAP
Mov (SP), @#B$DEVU ; Unit number
Call READ ; READ Secondary Bootstrap
; Set data in Secondary Bootstrap
Mov #^RHD , @#B$DEVN ; Device name in RADIX50
Mov (SP)+, @#B$DEVU ; Boot device unit number
Mov #READ-HDBOOT,@#B$READ ; Hook for BSTRAP
Jmp @#B$BOOT ; Jmp to Secondary Bootstrap
.DrEnd HD
.End