/* This function exclusively used in keyboard redefinition */ void findkey(int kn) { int k=0,i,j; bool f=FALSE; do { for (i=130;i<256 && !f;i++) if (_kernel_osbyte(129,i,255)&0xff==0xff) f=TRUE; gretrace(); if (kbhit()) k=getkey(); } while (k==0 && !f); j=i-1; if (k==0) k=-2; if (k>='a' && k<='z') k-='a'-'A'; for (i=0;i<5;i++) keycodes[kn][i]=-2; if (kn>9) i=0; else { i=2; keycodes[kn][0]=j; keycodes[kn][1]=0; } keycodes[kn][i++]=k; if (k>='A' && k<='Z') { keycodes[kn][i++]=k-('A'-'a'); /* lower case */ keycodes[kn][i++]=k-'@'; /* ctrl code */ } krdf[kn]=TRUE; }
void RISCOS_ExitTask() { _kernel_swi_regs regs; if (stored_mode == -1) { _kernel_osbyte(106,1,0); } RISCOS_RestoreWimpMode(); regs.r[0] = task_handle; regs.r[1] = (unsigned int)0x4b534154; _kernel_swi(Wimp_CloseDown, ®s, ®s); task_handle = 0; }
void RISCOS_ExitTask() { _kernel_swi_regs regs; if (stored_mode == -1) { /* Ensure cursor is put back to standard pointer shape if we have been running in a window */ _kernel_osbyte(106,1,0); } /* Ensure we end up back in the wimp */ RISCOS_RestoreWimpMode(); /* Neatly exit the task */ regs.r[0] = task_handle; regs.r[1] = (unsigned int)0x4b534154; _kernel_swi(Wimp_CloseDown, ®s, ®s); task_handle = 0; }