home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / basic / library / qb_pds / asmmod / getkey.asm < prev    next >
Encoding:
Assembly Source File  |  1986-07-19  |  2.5 KB  |  46 lines

  1.         title GETCH.ASM: A ROUTINE TO GRAB A CHARACTER INTO AN INTEGER.
  2.         ;THIS ROUTINE IS USED INSTEAD OF THE QUICK BASIC INPUT$(1) OR INKEY$
  3.         ;ROUTINES, BECAUSE BOTH OF THE OTHERS FAIL ON MACHINES LIKE THE TANDY
  4.         ;1000 WHEN CERTAIN KEYS ARE PRESSED. (CTRL-9, FOR EXAMPLE).
  5.         ;THIS ROUTINE IS PASSED A DUMMY INTEGER VARIABLE.  THE ROUTINE WILL
  6.         ;USE NORMAL DOS CALLS TO CHECK TO SEE IF A CHARACTER IS PRESENT.  IT
  7.         ;WILL WAIT FOREVER IF ONE IS NOT, SO NO LOOPING IS NEEDED. HOWEVER, IF
  8.         ;ONE IS, THE ROUTINE WILL CHECK TO SEE IF IT IS A NORMAL CHARACTER OR
  9.         ;A FUNCTION KEY. IF IT IS A NORMAL CHARACTER, THIS ROUTINE WILL RETURN
  10.         ;THE VALUE OF THE CHARACTER IN THE INTEGER VARIABLE.  IF IT IS A
  11.         ;FUNCTION KEY, THE ROUTINE WILL RETURN AN INTEGER VALUE WITH THE HIGH
  12.         ;BYTE SET TO FF HEX AND THE LOW BYTE SET TO THE VALUE OF THE FUNCTION
  13.         ;KEY.  WRITTEN BY BRUCE W. TONKIN ON 1-1-86 USING IBM'S MACRO-
  14.         ;ASSEMBLER 1.0.  COPYRIGHT 1986, BRUCE W. TONKIN.
  15.         ;YOU MAY USE THIS ROUTINE WITH OR WITHOUT ATTRIBUTION.
  16.         ;
  17. DATA     SEGMENT WORD PUBLIC 'DATA'
  18. STORAGE  DW   16
  19. DATA     ENDS
  20. DGROUP   GROUP     DATA
  21. CODE     SEGMENT BYTE PUBLIC 'CODE'
  22.          ASSUME CS:CODE, DS:DGROUP
  23.          PUBLIC GETCH
  24. GETCH    PROC FAR
  25.          PUSH BP             ;SAVE BASE POINTER
  26.          MOV  BP,SP          ;SET UP TO ADDRESS OFF OF BP
  27.          MOV  BX,[BP]+6      ;GET THE ADDRESS OF THE INTEGER PARAMETER
  28.          PUSH BX             ;SAVE THAT ADDRESS FOR LATER USE.
  29. LOOP:    MOV  DL,0FFH        ;DL=255, MEANS READ A CHARACTER
  30.          MOV  AH,07H         ;DIRECT CONSOLE INPUT WITHOUT ECHO
  31.          INT  021H           ;PERFORM INTERRUPT
  32.          MOV  AH,0           ;CLEAR THE HIGH BYTE
  33.          CMP  AL,0           ;IS THIS A FUNCTION KEY?
  34.          JNZ  DONE           ;NO. NORMAL CHARACTER. CLEAN UP AND FINISH.
  35.          MOV  DL,0FFH        ;GO AGAIN TO GET FUNCTION KEY.
  36.          MOV  AH,07H         ;THERE'LL BE A CHARACTER RIGHT THERE FOR US.
  37.          INT  021H           ;PERFORM INTERRUPT. IT'S GOING TO RETURN
  38.          MOV  AH,0FFH        ;THE VALUE IN AL, SO WE'LL SET THE HIGH BYTE.
  39. DONE:    POP  BX             ;RESTORE THE POINTER TO THE INTEGER PARAMETER
  40.          MOV  [BX],AX        ;AND RETURN THE CHARACTER VALUE
  41.          POP  BP             ;RESTORE BASE POINTER
  42.          RET  2              ;RETURN AND REMOVE ONE PARAMETER FROM STACK
  43. GETCH    ENDP
  44. CODE     ENDS
  45.          END
  46.