예제 #1
0
파일: getpass.c 프로젝트: morrisxd/PMC
/* Turn on keyboard echo.  Does not check error returns. */
static void
EchoOn( void )
{
  KBDINFO KbdInfo;
  
  KbdGetStatus (&KbdInfo, 0);
  KbdInfo.fsMask = (KbdInfo.fsMask & ~KEYBOARD_ECHO_OFF) | KEYBOARD_ECHO_ON;
  KbdSetStatus (&KbdInfo, 0);
}
예제 #2
0
/*
 * ShiftDown - test if shift key is down
 */
bool ShiftDown( void )
{
    KBDINFO     ki;

    ki.cb = sizeof( KBDINFO );
    KbdGetStatus( &ki, 0 );
    if( ki.fsState & KEY_SHIFT ) {
        return( TRUE );
    }
    return( FALSE );

} /* ShiftDown */
예제 #3
0
void TEventQueue::suspend()
{
#ifdef __OS2__
  {
    KBDINFO ki;
    ki.cb = sizeof(ki);
    assert(!KbdGetStatus(&ki,0));
    ki.fsMask |= KEYBOARD_ASCII_MODE;
    ki.fsMask &= ~KEYBOARD_BINARY_MODE;
    assert(!KbdSetStatus(&ki,0));
  }
#endif
    mouse.suspend();
}
예제 #4
0
KBDINFO setkbmode(void)
{
    USHORT rc;
    KBDINFO kb_state;

    kb_state.cb = sizeof(kb_state);
    KbdGetStatus(&kb_state, 0);
    kb_state.fsMask &= ~KEYBOARD_ASCII_MODE;
    kb_state.fsMask |= KEYBOARD_BINARY_MODE;
    rc = KbdSetStatus(&kb_state, 0);

    /*  if(rc) printf("KbdSetStatus rc = %04x\n", rc);  */

    return kb_state;
}
예제 #5
0
/*
 * EMX initialization
 */
static void Term_init_emx(term *t)
{
	struct _KBDINFO kbdinfo;	/* see structure description ?somewhere? */

	v_init();
	v_getctype(&curs_start, &curs_end);
	/* hide cursor (?) XXX XXX XXX */
	v_clear();

	/* the documentation I (SWD) have implies, in passing, that setting */
	/* "binary mode" on the keyboard device will prevent the O/S from */
	/* acting on keys such as ^S (pause) and ^P (printer echo). */

	/* note also that "KbdSetStatus is ignored for a Vio-windowed application." */
	/* so there may well be problems with running this in a window.  Damnit. */

	/* this is kind of a nasty structure, as you can't just flip a bit */
	/* to change binary/ASCII mode, or echo on/off mode... nor can you */
	/* clear the whole thing -- certain bits need to be preserved. */

	KbdGetStatus(&kbdinfo, (HKBD)0);
	kbdinfo.fsMask &= ~ (KEYBOARD_ECHO_ON|	/* clear lowest four bits */
		KEYBOARD_ECHO_OFF|KEYBOARD_BINARY_MODE|KEYBOARD_ASCII_MODE);
	kbdinfo.fsMask |= (KEYBOARD_BINARY_MODE);	/* set bit two */
	KbdSetStatus(&kbdinfo, (HKBD)0);

#if 1 /* turn off for debug */
	signal(SIGHUP, SIG_IGN);
	signal(SIGINT, SIG_IGN);
	signal(SIGQUIT, SIG_IGN);
	/*  signal(SIGILL,SIG_IGN);  */
	/*  signal(SIGTRAP,SIG_IGN); */
	/*  signal(SIGABRT,SIG_IGN); */
	/*  signal(SIGEMT,SIG_IGN);  */
	/*  signal(SIGFPE,SIG_IGN);  */
	/*  signal(SIGBUS,SIG_IGN);  */
	/*  signal(SIGSEGV,SIG_IGN); */
	/*  signal(SIGSYS,SIG_IGN);  */
	signal(SIGPIPE, SIG_IGN);
	signal(SIGALRM, SIG_IGN);
	/*  signal(SIGTERM,SIG_IGN); */
	signal(SIGUSR1, SIG_IGN);
	signal(SIGUSR2, SIG_IGN);
	signal(SIGCHLD, SIG_IGN);
	signal(SIGBREAK, SIG_IGN);
#endif

}
예제 #6
0
/*
 * TurnOffCapsLock - switch off caps lock
 */
void TurnOffCapsLock( void )
{
    KBDINFO     ki;

    ki.cb = sizeof( KBDINFO );
    KbdGetStatus( &ki, 0 );
    if( ki.fsState & KEY_CAPS_LOCK ) {
        hadCapsLock = TRUE;
        ki.fsMask |= 0x10;
        ki.fsState &= ~KEY_CAPS_LOCK;
        KbdSetStatus( &ki, 0 );  /* OS/2 2.0 F***S UP IF YOU DO THIS */
    } else {
        hadCapsLock = FALSE;
    }

} /* TurnOffCapsLock */
예제 #7
0
int SLang_init_tty(int abort_char, int dum2, int dum3)
{
  VIOCURSORINFO cursorInfo, OldcursorInfo;

  (void) dum2; (void) dum3;
   if (abort_char == -1) abort_char = 3;   /* ^C */
   SLang_Abort_Char = abort_char;
   SLKeyBoard_Quit = 0;

  /*  set ^C off */
  signal (SIGINT, SIG_IGN);
  signal (SIGBREAK, SIG_IGN);

  /* set up the keyboard */

  initialKbdInfo.cb = sizeof(initialKbdInfo);
  KbdGetStatus(&initialKbdInfo, 0);
  set_kbd();

  /* open a semaphore */
  CreateSem();

  /* start a separate thread to read the keyboard */
#if defined(__BORLANDC__)
  SLos2_threadID = _beginthread (thread_code, 8096, NULL);
#else
  SLos2_threadID = _beginthread (thread_code, NULL,  8096, NULL);
#endif

   if ((int)SLos2_threadID == -1)
     {
	SLang_exit_error ("init_tty: Error starting keyboard thread.");
     }

  VioGetCurType (&OldcursorInfo, 0);
  cursorInfo.yStart = 1;
  cursorInfo.cEnd = 15;
  cursorInfo.cx = 1;
  cursorInfo.attr = 1;
  if (VioSetCurType (&cursorInfo, 0))
    VioSetCurType (&OldcursorInfo, 0);   /* reset to previous value */

  return 0;
}
예제 #8
0
int ConInit(int XSize, int YSize) {
  USHORT MevMask = 127;

  if (Initialized) return 0;

  EventBuf.What = evNone;
  MousePresent  = (MouOpen(NULL, &MouseHandle) == 0) ? 1 : 0;

  if (MousePresent) MouSetEventMask(&MevMask, MouseHandle);

  memset(&SaveKbdState, 0, sizeof(SaveKbdState));
  SaveKbdState.cb = sizeof(SaveKbdState);
  APIRET16 s = KbdGetStatus(&SaveKbdState, 0);
  assert(s == 0);
  ConContinue();

  Initialized = 1;

  return 0;
}
예제 #9
0
void TEventQueue::resume()
{
#ifdef __OS2__
  {
    KBDINFO ki;
    ki.cb = sizeof(ki);
    assert(!KbdGetStatus(&ki,0));
    ki.fsMask &= ~KEYBOARD_ASCII_MODE;
    ki.fsMask |= KEYBOARD_BINARY_MODE;
    assert(!KbdSetStatus(&ki,0));
  }
#endif
    if( mouse.present() == False )
        mouse.resume();
    if( mouse.present() == False )
        return;
    mouse.getEvent( curMouse );
    lastMouse = curMouse;
    mouse.registerHandler( 0xFFFF, (void (*)(void))mouseInt );
    mouseEvents = True;
    mouse.show();
    TMouse::setRange( TScreen::screenWidth-1, TScreen::screenHeight-1 );
}
예제 #10
0
static int hb_gt_os2_getKbdState( void )
{
   int iKbdState = 0;

   memset( s_kbd, 0, sizeof( KBDINFO ) );
   if( KbdGetStatus( s_kbd, 0 ) == NO_ERROR )
   {
      if( s_kbd->fsState & KBDSTF_SHIFT         ) iKbdState |= HB_GTI_KBD_SHIFT;
      if( s_kbd->fsState & KBDSTF_CONTROL       ) iKbdState |= HB_GTI_KBD_CTRL;
      if( s_kbd->fsState & KBDSTF_ALT           ) iKbdState |= HB_GTI_KBD_ALT;
      if( s_kbd->fsState & KBDSTF_SCROLLLOCK_ON ) iKbdState |= HB_GTI_KBD_SCROLOCK;
      if( s_kbd->fsState & KBDSTF_NUMLOCK_ON    ) iKbdState |= HB_GTI_KBD_NUMLOCK;
      if( s_kbd->fsState & KBDSTF_CAPSLOCK_ON   ) iKbdState |= HB_GTI_KBD_CAPSLOCK;
      if( s_kbd->fsState & KBDSTF_INSERT_ON     ) iKbdState |= HB_GTI_KBD_INSERT;
      if( s_kbd->fsState & KBDSTF_LEFTSHIFT     ) iKbdState |= HB_GTI_KBD_LSHIFT;
      if( s_kbd->fsState & KBDSTF_RIGHTSHIFT    ) iKbdState |= HB_GTI_KBD_RSHIFT;
      if( s_kbd->fsState & KBDSTF_LEFTCONTROL   ) iKbdState |= HB_GTI_KBD_LCTRL;
      if( s_kbd->fsState & KBDSTF_RIGHTCONTROL  ) iKbdState |= HB_GTI_KBD_RCTRL;
      if( s_kbd->fsState & KBDSTF_LEFTALT       ) iKbdState |= HB_GTI_KBD_LALT;
      if( s_kbd->fsState & KBDSTF_RIGHTALT      ) iKbdState |= HB_GTI_KBD_RALT;
   }

   return iKbdState;
}
예제 #11
0
int ReadMouseEvent(TEvent *Event, ULONG EventMask) {
  static unsigned short PrevState   = 0;
  static unsigned short PrevButtons = 0;
  static TEvent  LastMouseEvent     = { evNone };
  static ULONG   LastEventTime      = 0;
  static ULONG   LastClick          = 0;
  static ULONG   LastClickTime      = 0;
  static ULONG   LastClickCount     = 0;
  MOUEVENTINFO   mi;
  unsigned short Buttons, State, Btn;
  USHORT fWait = MOU_NOWAIT;
  MOUQUEINFO mq;
  ULONG CurTime;

  DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, &CurTime, 4);

  Event->What = evNone;
  MouGetNumQueEl(&mq, MouseHandle);

  if (mq.cEvents == 0) {
    if ((LastMouseEvent.What == evMouseAuto) && (EventMask & evMouseAuto)) {
      if (TM_DIFF(CurTime, LastEventTime) >= MouseAutoRepeat) {
        *Event = LastMouseEvent;
        DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, &LastEventTime, 4);
        return 1;
      }
    }

    if (((LastMouseEvent.What == evMouseDown) ||
         (LastMouseEvent.What == evMouseMove))
        &&
        (LastMouseEvent.Mouse.Buttons)
        && (EventMask & evMouseAuto)) {
      if (TM_DIFF(CurTime, LastEventTime) >= MouseAutoDelay) {
        LastMouseEvent.What = evMouseAuto;
        *Event              = LastMouseEvent;
        DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, &LastEventTime, 4);
        return 1;
      }
    }
    return 0;
  }

  if (MouReadEventQue(&mi, &fWait, MouseHandle) != 0) return 0;

  Event->Mouse.X = mi.col;
  Event->Mouse.Y = mi.row;
  State          = mi.fs;
  Btn            = Buttons = ((State & (2 | 4)) ? 1 : 0) |
                             ((State & (8 | 16)) ? 2 : 0) |
                             ((State & (32 | 64)) ? 4 : 0);

  if (Buttons != PrevButtons) {
    Buttons ^= PrevButtons;

    if (PrevButtons & Buttons) Event->What = evMouseUp;
    else Event->What = evMouseDown;
  } else {
    Event->What = evMouseMove;

    if ((Event->Mouse.X == LastMouseEvent.Mouse.X) &&
        (Event->Mouse.Y == LastMouseEvent.Mouse.Y)) return 0;
  }
  Event->Mouse.Buttons = Buttons;
  Event->Mouse.Count   = 1;
  PrevState            = State;
  PrevButtons          = Btn;

  if (Event->What == evMouseDown) {
    if (LastClickCount) {
      if (LastClick == Event->Mouse.Buttons) {
        if (TM_DIFF(CurTime, LastClickTime) <= MouseMultiClick) {
          Event->Mouse.Count = ++LastClickCount;
        } else {
          LastClickCount = 0;
        }
      } else {
        LastClick      = 0;
        LastClickCount = 0;
        LastClickTime  = 0;
      }
    }

    LastClick = Event->Mouse.Buttons;

    if (LastClickCount == 0) LastClickCount = 1;
        DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, &LastClickTime, 4);
  }

  /*    if (Event->What == evMouseMove) {
          LastClick = 0;
          LastClickCount = 0;
          LastClickTime = 0;
      }*/
  {
    KBDINFO  ki;
    USHORT   Flags;
    TKeyCode KeyFlags = 0;

    ki.cb = sizeof(ki);
    KbdGetStatus(&ki, 0);
    Flags = ki.fsState;

    if ((Flags & (LEFTSHIFT | RIGHTSHIFT)) != 0) KeyFlags |= kfShift;

    if ((Flags & (LEFTCONTROL | RIGHTCONTROL)) != 0) KeyFlags |= kfCtrl;

    if ((Flags & (LEFTALT | RIGHTALT)) != 0) KeyFlags |= kfAlt;

    Event->Mouse.KeyMask = KeyFlags;
  }

  LastMouseEvent = *Event;
  DosQuerySysInfo(QSV_MS_COUNT, QSV_MS_COUNT, &LastEventTime, 4);
  return 1;
}
예제 #12
0
파일: wrap.c 프로젝트: ErisBlastar/osfree
USHORT __pascal KBDGETSTATUS(KBDINFO * pkbdinfo, const HKBD hdbd)
{
  return KbdGetStatus(pkbdinfo, hdbd);
}
예제 #13
0
unsigned char getShiftState() {
   // returns a value that can be used as a substitute for the shift state at [0040:0017]
   TThreads::tiled->keyboardShiftInfo.cb = 10;
   KbdGetStatus(&TThreads::tiled->keyboardShiftInfo, 0);
   return TThreads::tiled->keyboardShiftInfo.fsState & 0xFF;
}