void charsort(std *ls,int n,int d){ std outls[n]; int ar[62],i,j,asc; for(i=0;i<62;i++) ar[i]=0; for(i=0;i<n;i++){ asc=getascii(ls[i].roll[d-1]); ar[asc]++; } for(i=1;i<62;i++){ ar[i]+=ar[i-1]; } int b; for(i=n-1;i>=0;i--){ asc=getascii(ls[i].roll[d-1]); b=ar[asc]-1; outls[b]=ls[i]; ar[asc]--; } for(i=0;i<n;i++){ ls[i]=outls[i]; } }
int talk_2_acqproc(char *hostname, char *username, int cmd, char *msg_for_acqproc, char *msg_for_vnmr, int mfv_len ) { char *tptr; int connsid, ival; #ifdef NESSIE ival = talk2Acq(hostname, username, cmd, msg_for_acqproc, msg_for_vnmr, mfv_len); if (ival < 0) { return( -1 ); } else connsid = ival; #else /* When you poke the Acqproc here, you expect to receive a reply. If the poke works, the return value is the socket from which to receive this reply. */ ival = poke_acqproc(hostname, username, cmd, msg_for_acqproc ); if (ival < 0) { return( -1 ); } else connsid = ival; #endif ival = prepare_reply_socket( connsid ); if (ival != 0) { return( -1 ); } ival = getascii( connsid, msg_for_vnmr, mfv_len-1 ); /* room for NUL */ /* Eliminate the ^D character from the Acqproc response. */ if ( (tptr = strchr( msg_for_vnmr, '\004' )) != NULL ) *tptr = '\0'; close( connsid ); return( 0 ); }
/* there's a problem remaining with the semantics of the '#' key on U.S. keyboards */ static int scancode2amiga (int keycode, int scancode) { static int firstscan=0; if (!firstscan) { keyboardlayoutid=GetKeyboardLayout(0); keyboardlangid=LOWORD(keyboardlayoutid); firstscan=1; } #if DEBUG_KBD write_log ( "keycode = 0x%x, scancode = 0x%x\n", keycode, scancode ); #endif if(keyboardlangid==MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN)) { if (keystate[AK_CTRL] && keystate[AK_RALT]) { switch (keycode & 0xff) { case 0xdb: return AK_BACKSLASH; case 0x51: //@ record_key ((AK_CTRL << 1)+1); return 0x10; case 0xbb: //~ record_key ((AK_CTRL << 1)+1); return 0x1b; } } } #define USE_OLD_SHIFT_CODE switch (keycode & 0xff) { #ifndef USE_OLD_SHIFT_CODE case VK_SHIFT: { SHORT lsh, rsh; lsh = GetKeyState( VK_LSHIFT ); rsh = GetKeyState( VK_RSHIFT ); if( !keystate[AK_RSH] && (rsh & 0x8000)) return AK_RSH; if( keystate[AK_RSH] && !(rsh & 0x8000)) return AK_RSH; if( !keystate[AK_LSH] && (lsh & 0x8000)) return AK_LSH; if( keystate[AK_LSH] && !(lsh & 0x8000)) return AK_LSH; } #endif case VK_INSERT: case VK_LWIN: return AK_LAMI; case VK_HOME: case VK_RWIN: return AK_RAMI; case VK_MENU: return scancode & KF_EXTENDED ? AK_RALT:AK_LALT; case VK_APPS: /* Map Windows "Menu" key to Right-Alt of Amiga, for Stefan Stuntz */ return AK_RALT; case VK_SCROLL: return AK_inhibit; case VK_F11: #if 0 if( currprefs.win32_ctrl_F11_is_quit ) { if (GetAsyncKeyState (VK_CONTROL)&0x8000) uae_quit(); } #endif return AK_BACKSLASH; case VK_F12: if (GetAsyncKeyState (VK_CONTROL)&0x8000) return -6; if( shiftpressed() ) return -5; else return -2; break; case VK_PAUSE: return -3; case VK_DECIMAL: return AK_NPDEL; case VK_DIVIDE: return AK_NPDIV; case VK_MULTIPLY: return AK_NPMUL; case VK_SUBTRACT: return AK_NPSUB; case VK_ADD: return AK_NPADD; case VK_NUMPAD0: return AK_NP0; case VK_NUMPAD1: return AK_NP1; case VK_NUMPAD2: return AK_NP2; case VK_NUMPAD3: return AK_NP3; case VK_NUMPAD4: return AK_NP4; case VK_NUMPAD5: return AK_NP5; case VK_NUMPAD6: return AK_NP6; case VK_NUMPAD7: return AK_NP7; case VK_NUMPAD8: return AK_NP8; case VK_NUMPAD9: return AK_NP9; case VK_UP: return AK_UP; case VK_DOWN: return AK_DN; case VK_LEFT: return AK_LF; case VK_RIGHT: return AK_RT; case VK_CONTROL: return scancode & KF_EXTENDED ? AK_RCTRL : AK_CTRL; case VK_RETURN: return scancode & KF_EXTENDED ? AK_ENT : AK_RET; case VK_CAPITAL: return -4; case VK_F1: if (helppressed ()) return -10 - shiftpressed (); return AK_F1; case VK_F2: if (helppressed ()) return -12 - shiftpressed (); return AK_F2; case VK_F3: if (helppressed ()) return -14 - shiftpressed (); return AK_F3; case VK_F4: if (helppressed ()) return -16 - shiftpressed (); return AK_F4; case VK_F5: return AK_F5; case VK_F6: return AK_F6; case VK_F7: return AK_F7; case VK_F8: return AK_F8; case VK_F9: return AK_F9; case VK_F10: return AK_F10; case VK_NEXT: return AK_HELP; } switch (scancode) { case 0x01: return 0x45; case 0x29: return 0x00; case 0x02: return 0x01; case 0x03: return 0x02; case 0x04: return 0x03; case 0x05: return 0x04; case 0x06: return 0x05; case 0x07: return 0x06; case 0x08: return 0x07; case 0x09: return 0x08; case 0x0a: return 0x09; case 0x0b: return 0x0a; case 0x0c: return 0x0b; case 0x0d: return 0x0c; case 0x57: /* This is F11 */ return AK_BACKSLASH; case 0x0e: return 0x41; case 0x0f: return 0x42; case 0x10: return 0x10; case 0x11: return 0x11; case 0x12: return 0x12; case 0x13: return 0x13; case 0x14: return 0x14; case 0x15: return 0x15; case 0x16: return 0x16; case 0x17: return 0x17; case 0x18: return 0x18; case 0x19: return 0x19; case 0x1a: return 0x1a; case 0x1b: return 0x1b; /* special handling for caps lock: return 0x63*/ case 0x3a: return 0x62; case 0x1e: return 0x20; case 0x1f: return 0x21; case 0x20: return 0x22; case 0x21: return 0x23; case 0x22: return 0x24; case 0x23: return 0x25; case 0x24: return 0x26; case 0x25: return 0x27; case 0x26: return 0x28; case 0x27: return AK_SEMICOLON; case 0x28: return AK_QUOTE; case 0x2b: /* This scancode is \ on US keyboards, but # on German ones - figure out which! */ if( getascii( keycode & 0xFF, scancode ) == '#' ) return AK_NUMBERSIGN; else return AK_BACKSLASH; break; #ifdef USE_OLD_SHIFT_CODE case 0x2a: return AK_LSH; case 0x36: return AK_RSH; #endif case 0x56: return AK_LTGT; case 0x2c: return 0x31; case 0x2d: return 0x32; case 0x2e: return 0x33; case 0x2f: return 0x34; case 0x30: return 0x35; case 0x31: return 0x36; case 0x32: return 0x37; case 0x33: return 0x38; case 0x34: return 0x39; case 0x35: return 0x3a; case 0x38: return 0x64; case 0x39: return 0x40; case 0x153: return 0x46; case 0x51: return 0x5f; case 0x52: return AK_LAMI; case 0x47: return AK_RAMI; case 0x4b: return 0x4f; case 0x50: return 0x4d; case 0x4d: return 0x4e; case 0x48: return 0x4c; case 0x4e: return 0x5e; case 0x4a: return 0x4a; case 0x37: return 0x5d; } return -1; }
int get_ia_stat(char *hostname, char *username ) { #ifdef NESSIE int connsid, iter, ival, initOpsCompl, newOpsCompl, updated; TIMESTAMP timeStamp, timeStamp2; char expprocReply[ 122 ]; gettimeofday( &timeStamp, NULL); initOpsCompl = getStatOpsCompl(); ival = talk2Acq( hostname, username, READACQHW, "", &expprocReply[ 0 ], sizeof( expprocReply ) ); if (ival < 0) return( -1 ); else connsid = ival; ival = prepare_reply_socket( connsid ); if (ival != 0) { close( connsid ); return( -1 ); } ival = getascii( connsid, &expprocReply[ 0 ], sizeof( expprocReply ) - 1 ); close( connsid ); updated = 0; for (iter = 0; iter < 50; iter++) { /* increased from 10 to 50, July 1997 */ usleep2( 20000 ); /* 20 ms, 0.02 s */ getStatTimeStamp( &timeStamp2 ); newOpsCompl = getStatOpsCompl(); if (cmpTimeStamp( &timeStamp2, &timeStamp ) > 0 && newOpsCompl != initOpsCompl) { updated = 1; break; } } if (updated == 0) return( -1 ); else return( 0 ); #else int connsid, ival; #if defined(WINBRIDGE) && defined(DEBUG) fprintf(stdout, "DEBUG jgw: socket.c get_ia_stat calling poke_acqproc\n"); fprintf(stdout, "DEBUG jgw: socket.c get_ia_stat hostname = %s\n", hostname); fprintf(stdout, "DEBUG jgw: socket.c get_ia_stat username = %s\n", username); fprintf(stdout, "DEBUG jgw: socket.c get_ia_stat cmd = %d\n", READACQHW); #endif ival = poke_acqproc(hostname, username, READACQHW, "1,24,"); if (ival < 0) { return( -1 ); } else connsid = ival; ival = prepare_reply_socket( connsid ); if (ival != 0) { return( -1 ); } memset( &shlk_block, 0, sizeof( struct ia_stat ) ); ival = getbinary( connsid, &shlk_block, sizeof( struct ia_stat ) ); close( connsid ); if (ival > 0) return( 0 ); else return( -1 ); #endif }