home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
magazine
/
nan_news
/
toolkit
/
kspeed.asm
< prev
next >
Wrap
Assembly Source File
|
1991-08-15
|
7KB
|
142 lines
; File......: KSPEED.ASM
; Author....: James R. Zack
; CIS ID....: 75410,1567
; Date......: $Date: 15 Aug 1991 23:06:54 $
; Revision..: $Revision: 1.2 $
; Log File..: $Logfile: E:/nanfor/src/kspeed.asv $
;
; This is an original work by James R. Zack and is placed in the
; public domain.
;
; Modification history:
; ---------------------
;
; $Log: E:/nanfor/src/kspeed.asv $
;
; Rev 1.2 15 Aug 1991 23:06:54 GLENN
; Forest Belt proofread/edited/cleaned up doc
;
; Rev 1.1 14 Jun 1991 19:54:40 GLENN
; Minor edit to file header
;
; Rev 1.0 01 Apr 1991 01:03:28 GLENN
; Nanforum Toolkit
;
;
; $DOC$
; $FUNCNAME$
; FT_SETRATE()
; $CATEGORY$
; Keyboard/Mouse
; $ONELINER$
; Set the keyboard delay and repeat rate on PC/AT & PS/2
; $SYNTAX$
; FT_SETRATE( [ <nDelayTime> ] [, <nRepeatRate> ] ) -> NIL
; $ARGUMENTS$
; <nDelayTime> is the keyboard delay time.
;
; <nRepeatRate> is the keyboard repeat rate.
;
; ┌───────────────────────┐ ┌────────────────────────┐
; │ nDelayTime DELAY │ │ RepeatRate SPEED │
; ├───────────────────────┤ ├────────────────────────┤
; │ 0 250ms │ │ 0 30.0cps │
; │ 1 (default) 500ms │ │ 1 26.7cps │
; │ 2 750ms │ │ 2 24.0cps │
; │ 3 1000ms │ │ 3 21.8cps │
; └───────────────────────┘ │ 4 20.0cps │
; │ 5 18.5cps │
; │ 6 17.1cps │
; │ 7 16.0cps │
; │ 8 15.0cps │
; │ 9 13.3cps │
; │ 10 12.0cps │
; │ 11 10.9cps │
; │ 12 (default) 10.0cps │
; │ 13 9.2cps │
; │ 14 8.6cps │
; │ 15 8.0cps │
; │ 16 7.5cps │
; │ 17 6.7cps │
; │ 18 6.0cps │
; │ 19 5.5cps │
; │ 20 5.0cps │
; │ 21 4.6cps │
; │ 22 4.3cps │
; │ 23 4.0cps │
; │ 24 3.7cps │
; │ 25 3.3cps │
; │ 26 3.0cps │
; │ 27 2.7cps │
; │ 28 2.5cps │
; │ 29 2.3cps │
; │ 30 2.1cps │
; │ 31 2.0cps │
; └────────────────────────┘
; $RETURNS$
; NIL
; $DESCRIPTION$
; This routine is used to adjust the IBM PC/AT and PS/2 "typematic"
; repeat and delay feature. This is used to allow the users of your
; application to adjust these speeds to the most comfortable level.
;
; This source code is written for Microsoft Assembler v5.1.
; $EXAMPLES$
; FT_SETRATE(0,0) // Set keyboard to fastest possible settings
; FT_SETRATE() // Set keyboard to AT defaults (10.9cps,500ms delay)
; FT_SETRATE(11,1) // Set keyboard to PS/2 defaults (10cps,500ms delay)
; $END$
PUBLIC FT_SETRATE ; MAKE ROUTINE VISIBLE
EXTRN __PARNI:FAR ; DECLARE EXTERNALS
EXTRN __RET:FAR
EXTRN __PARINFO:FAR
_NANFOR SEGMENT 'CODE'
ASSUME CS:_NANFOR ; POINT CS TO MY CODE
FT_SETRATE PROC FAR
PUSH BP ; SAVE BASE POINTER
MOV BP,SP ; POINT TO TOP OF STACK
PUSH DS ; SAVE REGISTERS
PUSH ES
PUSH SI
PUSH DI
MOV AX,0 ; LOOK AT NUMBER OF PARAMS PASSED
PUSH AX ; SET UP FOR __PARINFO
CALL __PARINFO ; GET NUMBER OF PARAMS PASSED
ADD SP,2 ; ADJUST STACK
CMP AX,2 ; WERE BOTH PARMS PASSED?
JL DEFAULTS ; NO, USE DEFAULTS
JMP GETPARMS ; OTHERWISE, LETS GET SOME PARAMS.
DEFAULTS: MOV BX,010CH ; SET UP DEFAULTS (for AT)
jmp goodparm ; and make the int call.
getparms: mov ax,01h ; First param is repeat rate
push ax ; Set up for __PARNI
call __PARNI ; Get first param
add sp,2 ; Adjust stack
mov bl,al ; Put repeat rate into BL
cmp bl,20h ; Is BL > 20h? (max value)
jg defaults ; Yes, then use defaults
mov ax,02h ; Second parm is typeamatic delay
push ax ; Set up for __PARNI
call __PARNI ; Get second param
add sp,2 ; Adjust stack
mov bh,al ; Put delay into BH
cmp bh,04h ; Is BH > 04h (max value)
jg defaults ; Yes, then use defaults
goodparm: mov ax,0305h ; BIOS Function 03 Subfunction 05
int 16h ; Set Typematic Rate and Delay
exit: pop di ; Retore registers
pop si
pop es
pop ds
pop bp
call __RET ; Clean up for Clipper
ret ; Pass control back to Clipper
FT_SETRATE ENDP
_NanFor ENDS
END