home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / CLIPPER / LANKEY / LANKEY.PRG < prev   
Text File  |  1992-12-15  |  2KB  |  51 lines

  1. FUNCTION P_INKEY(pTime,pIfNoHotKeys)
  2.   //
  3.   // SYNTAX : P_INKEY([nTime],[lIfNoHotKeysAllowed]) => nKeyHit
  4.   //
  5.   // - THIS IS THE SAME AS CLIPPER'S INKEY() BUT IT IS ALSO A WAIT STATE
  6.   // - ALSO AUTOMATICALLY PROVIDES TIME SLICING BETWEEN CLIPPER AND C SO
  7.   //   THAT A NON-DEDICATED NOVELL SERVER CAN GET TIME TO PRINT FROM THE
  8.   //   SPOOLER
  9.   //
  10.   // AUTHOR: Shawn B. Lipscomb, Intelligent Decisions, Inc.
  11.   //
  12.   LOCAL mKeyBlock,mKey,mEvaled,mCounter,mKeybdTailPtr,;
  13.         mRow:=ROW(),;
  14.         mCol:=COL()
  15.   WHILE TRUE
  16.     IF (pTime == NIL)
  17.       mKey:=INKEY()
  18.     ELSE
  19.       // THIS SECTION OF CODE HANDLES HALF SECOND TIME SLICING TO A C
  20.       // FUNCTION SO THAT, ON A NON-DEDICATED NOVELL SERVER, A PRINT SPOOLING
  21.       // JOB WILL GET SOME TIME AS OFTEN AS POSSIBLE, WHILE STILL PRESERVING
  22.       // A HALF SECOND FOR CLIPPER TO DO GARBAGE COLLECTION.  TO FURTHER
  23.       // COMPLICATE MATTERS, DOS 3.3 HAS A BUG THAT MAKES IT HARD TO
  24.       // REALIZE THAT AN ENHANCED KEYBOARD KEY HAS BEEN HIT FROM C.  SO WE
  25.       // SAVE THE POINTER TO THE KEYBOARD BUFFER'S TAIL AND SEND IT TO
  26.       // C_INKEY SO THAT C CAN SEE IF IT MOVES.  EVEN WITH DOS 3.3'S BUG, THE
  27.       // KEYBOARD POINTER TAIL STILL MOVES.
  28.       mCounter:=0
  29.       mKeybdTailPtr:=C_PEEK(1052)
  30.       WHILE ((pTime = 0) .OR. (mCounter++ < pTime))
  31.         IF EMPTY(mKey:=INKEY(0.5))
  32.           C_INKEY(mKeybdTailPtr)
  33.         ELSE
  34.           EXIT
  35.         ENDIF
  36.       ENDDO
  37.     ENDIF
  38.  
  39.     // DELETE THE FOLLOWING IF...THEN...ELSE IF YOU DON'T WANT P_INKEY() TO
  40.     // BE A WAIT STATE.
  41.     IF (pIfNoHotKeys == NIL) .AND. ((mKeyBlock:=SETKEY(mKey)) # NIL)
  42.       mEvaled:=EVAL(mKeyBlock)
  43.       // RESTORE CURSOR POSITION BECAUSE THE SETKEY BLOCK MAY HAVE MOVED IT
  44.       DEVPOS(mRow,mCol)
  45.       LOOP
  46.     ELSE
  47.       EXIT
  48.     ENDIF
  49.   ENDDO
  50.   RETURN mKey
  51.