TYPE KEY_FUNCTIONS EXISTS AS BOOLEAN FUNCTIONS$ AS STRING KEY AS INTEGER LOCK AS BOOLEAN ENDTYPE FUNCTION SET_KEY_FUNCTION_SIZE(SIZE) SYS_KEY_FUNCTION_SIZE = SIZE GLOBAL DIM KEY_FUNCTIONS(SYS_KEY_FUNCTION_SIZE) AS KEY_FUNCTIONS ENDFUNCTION FUNCTION MAKE_KEY_FUNCTION(FUNCTIONS$,KEY) FOR FIND = 1 TO SYS_KEY_FUNCTION_SIZE IF KEY_FUNCTIONS(FIND).EXISTS = 0 TEMP_FIND = FIND FIND = SYS_KEY_FUNCTION_SIZE ENDIF NEXT FIND IF TEMP_FIND <> 0 KEY_FUNCTIONS(TEMP_FIND).EXISTS = 1 KEY_FUNCTIONS(TEMP_FIND).FUNCTIONS$ = FUNCTIONS$ KEY_FUNCTIONS(TEMP_FIND).KEY = KEY ENDIF ENDFUNCTION FUNCTION DELETE_KEY_FUNCTION(FUNCTIONS$) FOR FIND = 1 TO SYS_KEY_FUNCTION_SIZE IF KEY_FUNCTIONS(FIND).FUNCTIONS$ = FUNCTIONS$ KEY_FUNCTIONS(FIND).EXISTS = 1 KEY_FUNCTIONS(TEMP_FIND).FUNCTIONS$ = "" KEY_FUNCTIONS(TEMP_FIND).KEY = 0 FIND = SYS_KEY_FUNCTION_SIZE ENDIF NEXT FIND ENDFUNCTION FUNCTION KEY_FUNCTION_CHECK(FUNCTIONS$ as string) FOR T = 1 to ARRAY COUNT(KEY_FUNCTIONS()) IF KEY_FUNCTIONS(T).FUNCTIONS$ = FUNCTIONS$ IF KEYSTATE(KEY_FUNCTIONS(T).KEY) = 1 TEMP = 1 ENDIF T = ARRAY COUNT(KEY_FUNCTIONS()) ENDIF NEXT T IF TEMP = 1 TEMP_RESULT = 1 ELSE TEMP_RESULT = 0 ENDIF ENDFUNCTION TEMP_RESULT FUNCTION KEY_FUNCTION_LOCK_CHECK(FUNCTIONS$ as string) FOR T = 1 to ARRAY COUNT(KEY_FUNCTIONS()) IF KEY_FUNCTIONS(T).FUNCTIONS$ = FUNCTIONS$ IF KEYSTATE(KEY_FUNCTIONS(T).KEY) = 1 AND KEY_FUNCTIONS(T).LOCK = 0 TEMP_RESULT = 1 KEY_FUNCTIONS(T).LOCK = 1 T = ARRAY COUNT(KEY_FUNCTIONS()) ELSE IF KEYSTATE(KEY_FUNCTIONS(T).KEY) = 0 KEY_FUNCTIONS(T).LOCK = 0 ENDIF TEMP_RESULT = 0 ENDIF ELSE TEMP_RESULT = 0 ENDIF NEXT T ENDFUNCTION TEMP_RESULT FUNCTION KEY_AUTO_LOCK_CHECK() FOR T = 1 to ARRAY COUNT(KEY_FUNCTIONS()) IF KEY_FUNCTIONS(T).FUNCTIONS$ <> "" IF KEYSTATE(KEY_FUNCTIONS(T).KEY) = 0 AND KEY_FUNCTIONS(T).LOCK = 1 KEY_FUNCTIONS(T).LOCK = 0 ENDIF ENDIF NEXT T ENDFUNCTION