/** * 스캔 코드를 내부적으로 사용하는 키 데이터로 바꾼 후 키 큐에 삽입 */ BOOL kConvertScanCodeAndPutQueue( BYTE bScanCode ) { KEYDATA stData; BOOL bResult = FALSE; BOOL bPreviousInterrupt; // 스캔 코드를 키 데이터에 삽입 stData.bScanCode = bScanCode; // 스캔 코드를 ASCII 코드와 키 상태로 변환하여 키 데이터에 삽입 if( kConvertScanCodeToASCIICode( bScanCode, &( stData.bASCIICode ), &( stData.bFlags ) ) == TRUE ) { // 임계 영역 시작 bPreviousInterrupt = kLockForSystemData(); // 키 큐에 삽입 bResult = kPutQueue( &gs_stKeyQueue, &stData ); // 임계 영역 끝 kUnlockForSystemData( bPreviousInterrupt ); } return bResult; }
/** * 스캔 코드를 내부적으로 사용하는 키 데이터로 바꾼 후 키 큐에 삽입 */ BOOL kConvertScanCodeAndPutQueue( BYTE bScanCode ) { KEYDATA stData; BOOL bResult = FALSE; BOOL bPreviousInterrupt; // 스캔 코드를 키 데이터에 삽입 stData.bScanCode = bScanCode; // 스캔 코드를 ASCII 코드와 키 상태로 변환하여 키 데이터에 삽입 if( kConvertScanCodeToASCIICode( bScanCode, &( stData.bASCIICode ), &( stData.bFlags ) ) == TRUE ) { // 인터럽트 불가 bPreviousInterrupt = kSetInterruptFlag( FALSE ); // 키 큐에 삽입 bResult = kPutQueue( &gs_stKeyQueue, &stData ); // 이전 인터럽트 플래그 복원 kSetInterruptFlag( bPreviousInterrupt ); } return bResult; }
BOOL kConvertScanCodeAndPutQueue( BYTE bScanCode ) { KEYDATA stData; BOOL bResult; BOOL bPreviousFlag; stData.bScanCode = bScanCode; if( kConvertScanCodeToASCIICode( bScanCode, &( stData.bASCIICode ), &( stData.bFlags ) ) ) { bPreviousFlag = kLockForSystemData(); bResult = kPutQueue( &gs_stKeyQueue, &stData ); kUnlockForSystemData( bPreviousFlag ); } return bResult; }