Psprint = {version = "1.0"} g_zsf = 0 g_prevkey = 0 g_keyfound = 0 g_shift_state = 0 g_prev_btnstate = 0 g_prev_btn = 0 g_active_group = 0 g_keyrep_rate = 2 g_keyrep_first = 16 g_keyrep_first_hold = 16 g_keyrep_zsf = 0 g_keyrep_counter = 0 g_prev_Key = {keyid = 0,keychar = 0,keycode = 0,modifiers = 0, keyname = 0, keygroup = g_active_group} g_keychars_0 = {8," ","b","y","g","[",[[']],[[,]],"f","o","u","x","v",[[`]],"j","l","d","m","z","]",[[\]],"q","p","s","t","c",";","w","k","r","e","a",".","-","/","h","n","i",13,27,20,93} g_keychars_shift_0 = {8," ","B","Y","G","{",[["]],[[<]],"F","O","U","X","V",[[~]],"J","L","D","M","Z","}",[[|]],"Q","P","S","T","C",":","W","K","R","E","A",">","_",[[?]],"H","N","I",13,27,20,93} g_keycodes_0 = {8,32,66,89,71,219,222,188,70,79,85,88,86,192,74,76,68,77,90,221,220,81,80,83,84,67,186,87,75,82,69,65,190,189,191,72,78,73,13,27,20,93} g_keynames_0 = {"Backspace","Space","b","y","g","SBracketL","SQuoteR","Comma","f","o","u","x","v","SQuoteL","j","l","d","m","z","]","Backslash","q","p","s","t","c","Semicolon","w","k","r","e","a","Point","Minus","ForwardSlash","h","n","i","Enter","Escape","Tab","Menu"} g_keychars_1 = {8," ","","","","[",";",[[,]],"","","","/","",[[`]],"","","","","","]",[[\]],"*","0","1","2","9",";","+","-","3","4","5",".","-","/","8","6","7",13,27,20,93} g_keychars_shift_1 = {8," ","","","","{",":",[["]],"","","",[[?]],"",[[~]],"","","","","","}",[[|]],"*",")","!","@","(",":","+","-","#","$","%",".","-","/","*","^","&",13,27,20,93} g_keycodes_1 = {8,32,112,113,119,219,186,188,114,115,116,111,113,192,120,117,118,121,122,221,220,106,48,49,50,57,186,107,109,51,52,53,190,189,191,56,54,55,13,27,20,93} g_keynames_1 = {"Backspace","Space","F1","F2","F8","SBracketL","SemiColon","Comma","F3","F4","F5","ForwardSlash","F12","SQuoteL","F9","F6","F7","F10","F11","SBracketR","Backslash","Asterisk","0","1","2","9","Semicolon","+","-","3","4","5","Point","Minus","ForwardSlash","8","6","7","Enter","Escape","Tab","Menu"} g_keychars_2 = {8,"","","","","[",";",[[,]],"","","","/","",[[`]],"","","","","","]",[[\]],"","-",27,"","",";","","-","","","",".","-","/","","",7,13,27,20,93} g_keychars_shift_2 = {8,"","","","","{",[["]],[[<]],"","","","","",[[~]],"","","","","","}",[[|]],"","","","","",":","","","","","",">","_",[[?]],"","","",13,27,8,93} g_keycodes_2 = {40,13,37,36,45,219,222,188,35,38,33,19,16,192,46,34,39,107,106,221,220,145,109,27,91,93,186,144,75,17,16,18,190,189,191,9,92,20,13,27,20,93} g_keynames_2 = {"Down","Enter","Left","Home","Insert","SBracketL","SQuoteR","Comma","End","Up","PgUp","Break","PrtScr","SQuoteL","Delete","PgDwn","Right","Num+","Num*","]","Backslash","ScrlLck","Num-","Esc","Lpsp","Menu","Semicolon","NumLock","k","Ctrl","Shift","Alt","Point","Minus","ForwardSlash","CapsLock","Rpsp","Tab","Enter","Escape","Backspace","Menu"} function Psprint:getKeyID(bpress1,bpress2) myresult = 0 skipbpress2 = 0 keyid = 0 keyids = {0,0,0,0,0,0,0} if bpress1 & Controls.ltriggerMask > 0 then myresult = 41 skipbpress2 = 1 elseif bpress1 & Controls.rtriggerMask > 0 then myresult = 42 skipbpress2 = 1 elseif bpress1 & Controls.startMask > 0 then myresult = 39 skipbpress2 = 1 elseif bpress1 & Controls.selectMask > 0 then myresult = 40 skipbpress2 = 1 elseif bpress1 & Controls.downMask > 0 then myresult = 1 skipbpress2 = 1 elseif bpress1 & Controls.crossMask > 0 then myresult = 2 skipbpress2 = 1 elseif bpress1 & Controls.upMask > 0 then keyids = {9,10,11,12,13,14,62} elseif bpress1 & Controls.rightMask > 0 then keyids = {15,16,17,18,19,20,61} elseif bpress1 & Controls.leftMask > 0 then keyids = {3,4,5,6,7,8,63} elseif bpress1 & Controls.circleMask > 0 then keyids = {33,34,35,36,37,38,58} elseif bpress1 & Controls.triangleMask > 0 then keyids = {27,28,29,30,31,32,59} elseif bpress1 & Controls.squareMask > 0 then keyids = {21,22,23,24,25,26,60} end if skipbpress2 == 0 then if bpress2 & Controls.downMask > 0 then keyid = 7 elseif bpress2 & Controls.crossMask > 0 then keyid = 7 elseif bpress2 & Controls.leftMask > 0 then keyid = 1 elseif bpress2 & Controls.upMask > 0 then keyid = 2 elseif bpress2 & Controls.rightMask > 0 then keyid = 3 elseif bpress2 & Controls.squareMask > 0 then keyid = 4 elseif bpress2 & Controls.triangleMask > 0 then keyid = 5 elseif bpress2 & Controls.circleMask > 0 then keyid = 6 end if keyids[keyid] ~= nil then myresult = keyids[keyid] else myresult = 0 end end return myresult end function Psprint:groupSelect(l_bpress1,l_bpress2) l_keyid = self:getKeyID(l_bpress1,l_bpress2) l_selected = 0 if l_keyid == 63 then if g_active_group == 1 then g_active_group = 0 else g_active_group = 1 l_selected = 1 end elseif l_keyid == 62 then if g_active_group == 2 then g_active_group = 0 else g_active_group = 2 l_selected = 2 end elseif l_keyid == 61 then if g_active_group == 3 then g_active_group = 0 else g_active_group = 3 l_selected = 3 end elseif l_keyid == 60 then if g_active_group == 4 then g_active_group = 0 else g_active_group = 4 l_selected = 4 end elseif l_keyid == 59 then if g_active_group == 5 then g_active_group = 0 else g_active_group = 5 l_selected = 5 end elseif l_keyid == 58 then if g_active_group == 6 then g_active_group = 0 else g_active_group = 6 l_selected = 6 end end return l_selected end function Psprint:getControlKeys(l_bpress1,l_bpress2,l_shift_state) mainbut = 0 shiftbut = 0 shift = 0 control = 0 alt = 0 special = 0 mainbut = l_bpress1 & l_bpress2 if (mainbut ~= l_bpress2) and (l_bpress2 ~= 0) then shiftbut = l_bpress2 # l_bpress1 if shiftbut & Controls.downMask > 0 then special = 8 elseif shiftbut & Controls.crossMask > 0 then special = 8 elseif shiftbut & Controls.upMask > 0 then shift = 2 elseif shiftbut & Controls.triangleMask > 0 then shift = 2 elseif shiftbut & Controls.squareMask > 0 then control = 1 elseif shiftbut & Controls.leftMask > 0 then control = 1 elseif shiftbut & Controls.circleMask > 0 then alt = 4 elseif shiftbut & Controls.rightMask > 0 then alt = 4 end end return (shift + control + alt + special + l_shift_state) end function Psprint:readKeyEx(l_buttons) l_keyid = 0 l_keychar = 0 l_keycode = 0 l_keyname = 0 keyfound = 0 cur_btnstate = l_buttons if cur_btnstate==0 then g_keyrep_zsf = 1 g_keyrep_first_hold = g_keyrep_first g_keyrep_counter = 0 end if cur_btnstate ~= g_prev_btnstate then if cur_btnstate > 0 then if g_prev_btnstate > 0 then g_shift_state = self:getControlKeys(g_prev_btnstate,cur_btnstate,g_shift_state) if g_shift_state > 0 then if self:groupSelect(g_prev_btnstate,(cur_btnstate # g_prev_btnstate) & cur_btnstate) > 0 then g_shift_state = 0 g_prev_btn = 0 end else l_keyid = self:getKeyID(cur_btnstate,0) if l_keyid > 0 then keyfound = 1 end end else if g_prev_btn > 0 then l_keyid = self:getKeyID(g_prev_btn,cur_btnstate) keyfound = 1 else l_keyid = self:getKeyID(cur_btnstate,0) if l_keyid > 0 then keyfound = 1 else g_prev_btn = cur_btnstate keyfound = 0 end end end else g_keyrep_first_hold = g_keyrep_first keyfound = 0 end else if g_keyrep_zsf==0 then g_keyrep_counter = g_keyrep_counter + 1; if g_keyrep_counter > (g_keyrep_first_hold+g_keyrep_rate) then g_keyrep_first_hold = 0 g_keyrep_counter = 0 l_keyid = g_prev_Key.keyid g_active_group = g_prev_Key.keygroup g_shift_state = g_prev_Key.modifiers keyfound = 1 end end end g_prev_btnstate = cur_btnstate t_newkey = {keyid = l_keyid,keychar = l_keychar,keycode = l_keycode,modifiers = g_shift_state, keygroup = g_active_group} if keyfound > 0 then if g_active_group == 0 then if l_keyid < (table.getn(g_keychars_0)+1) then if g_shift_state == 2 then l_keychar = g_keychars_shift_0[l_keyid] else l_keychar = g_keychars_0[l_keyid] end l_keyname = g_keynames_0[l_keyid] l_keycode = g_keycodes_0[l_keyid] end elseif g_active_group == 1 then if l_keyid < (table.getn(g_keychars_1)+1) then if g_shift_state == 2 then l_keychar = g_keychars_shift_1[l_keyid] else l_keychar = g_keychars_1[l_keyid] end l_keyname = g_keynames_1[l_keyid] l_keycode = g_keycodes_1[l_keyid] end elseif g_active_group == 2 then if l_keyid < (table.getn(g_keychars_2)+1) then if g_shift_state == 2 then l_keychar = g_keychars_shift_2[l_keyid] else l_keychar = g_keychars_2[l_keyid] end l_keyname = g_keynames_2[l_keyid] l_keycode = g_keycodes_2[l_keyid] end else end t_newkey = {keyid = l_keyid,keychar = l_keychar,keycode = l_keycode,modifiers = g_shift_state, keyname = l_keyname, keygroup = g_active_group} g_prev_Key = t_newkey g_prevkey_set = 1 g_keyrep_zsf = 0 g_prev_btn = 0 g_shift_state = 0 else g_prevkey_set = 0 end return t_newkey end