void serverlist_frame() { int i; for (i = 0; i < server_count; i++) { msg_t *msg = sock_recv(&serverlist[i].sock); if (msg) { serverlist[i].ping_end = millis(); skip_data(msg, strlen("info\n")); read_server(serverlist + i, read_string(msg)); if (partial_match(filter, serverlist[i].name) || partial_match(filter, serverlist[i].map) || partial_match(filter, serverlist[i].mod) || partial_match(filter, serverlist[i].gametype)) ui_output(output_client, "^5%i ^7(%i) %s %s ^5[^7%s^5] [^7%s:%s^5]\n", i, serverlist[i].ping_end - serverlist[i].ping_start, serverlist[i].players, serverlist[i].name, serverlist[i].map, serverlist[i].mod, serverlist[i].gametype); serverlist[i].received = qtrue; } if (serverlist[i].ping_retries > 0 && !serverlist[i].received && millis() >= serverlist[i].ping_start + PING_TIMEOUT) ping_server(serverlist + i); } master_t *master; for (master = masters; master->address; master++) { msg_t *msg = sock_recv(&master->sock); if (!msg) continue; char address_string[32]; qbyte address[4]; unsigned short port; skip_data(msg, strlen("getserversResponse")); while (msg->readcount + 7 <= msg->cursize) { char prefix = read_char(msg); port = 0; if (prefix == '\\') { read_data(msg, address, 4); port = ShortSwap(read_short(msg)); sprintf(address_string, "%u.%u.%u.%u", address[0], address[1], address[2], address[3]); } if (port != 0) { server_t *server = find_server(address_string, port); if (server != NULL) continue; server = serverlist + server_count++; sock_init(&server->sock); strcpy(server->address, address_string); server->port = port; server->received = qfalse; server->ping_retries = MAX_PING_RETRIES + 1; ping_server(server); } } } }
inline int G3CheckAndSwap (void *modelP) { short h = WORDVAL (modelP); if ((h >= 0) && (h <= OP_GLOW)) return 1; ShortSwap (&h); if ((h < 0) || (h > OP_GLOW)) return 0; G3SwapPolyModelData (modelP); return 1; }
/* * CL_ParseGetServersResponseMessage * Handle a reply from getservers message to master server */ static void CL_ParseGetServersResponseMessage( msg_t *msg, qboolean extended ) { const char *header; char adrString[64]; qbyte addr[16]; unsigned short port; netadr_t adr; MSG_BeginReading( msg ); MSG_ReadLong( msg ); // skip the -1 //jump over the command name header = ( extended ? "getserversExtResponse" : "getserversResponse" ); if( !MSG_SkipData( msg, strlen( header ) ) ) { Com_Printf( "Invalid master packet ( missing %s )\n", header ); return; } while( msg->readcount + 7 <= msg->cursize ) { char prefix = MSG_ReadChar( msg ); switch( prefix ) { case '\\': MSG_ReadData( msg, addr, 4 ); port = ShortSwap( MSG_ReadShort( msg ) ); // both endians need this swapped. Q_snprintfz( adrString, sizeof( adrString ), "%u.%u.%u.%u:%u", addr[0], addr[1], addr[2], addr[3], port ); break; case '/': if( extended ) { MSG_ReadData( msg, addr, 16 ); port = ShortSwap( MSG_ReadShort( msg ) ); // both endians need this swapped. Q_snprintfz( adrString, sizeof( adrString ), "[%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x]:%hu", addr[ 0], addr[ 1], addr[ 2], addr[ 3], addr[ 4], addr[ 5], addr[ 6], addr[ 7], addr[ 8], addr[ 9], addr[10], addr[11], addr[12], addr[13], addr[14], addr[15], port ); } else { Com_Printf( "Invalid master packet ( IPv6 prefix in a non-extended response )\n" ); return; } break; default: Com_Printf( "Invalid master packet ( missing separator )\n" ); return; } if( port == 0 ) // last server seen return; Com_DPrintf( "%s\n", adrString ); if( !NET_StringToAddress( adrString, &adr ) ) { Com_Printf( "Bad address: %s\n", adrString ); continue; } CL_AddServerToList( &masterList, adrString, 0 ); } }
void G3SwapPolyModelData (ubyte *data) { int i; short n; uvl *uvl_val; ubyte *p = data; for (;;) { ShortSwap (WORDPTR (p)); switch (WORDVAL (p)) { case OP_EOF: return; case OP_DEFPOINTS: ShortSwap (WORDPTR (p + 2)); n = WORDVAL (p+2); for (i = 0; i < n; i++) VmsVectorSwap (VECPTR ((p + 4) + (i * sizeof (vmsVector)))); p += n*sizeof (struct vmsVector) + 4; break; case OP_DEFP_START: ShortSwap (WORDPTR (p + 2)); ShortSwap (WORDPTR (p + 4)); n = WORDVAL (p+2); for (i = 0; i < n; i++) VmsVectorSwap (VECPTR ((p + 8) + (i * sizeof (vmsVector)))); p += n*sizeof (struct vmsVector) + 8; break; case OP_FLATPOLY: ShortSwap (WORDPTR (p+2)); n = WORDVAL (p+2); VmsVectorSwap (VECPTR (p + 4)); VmsVectorSwap (VECPTR (p + 16)); ShortSwap (WORDPTR (p+28)); for (i=0; i < n; i++) ShortSwap (WORDPTR (p + 30 + (i * 2))); p += 30 + ((n&~1)+1)*2; break; case OP_TMAPPOLY: ShortSwap (WORDPTR (p+2)); n = WORDVAL (p+2); VmsVectorSwap (VECPTR (p + 4)); VmsVectorSwap (VECPTR (p + 16)); for (i = 0; i < n; i++) { uvl_val = (uvl *) ((p+30+ ((n&~1)+1)*2) + (i * sizeof (uvl))); FixSwap (&uvl_val->u); FixSwap (&uvl_val->v); } ShortSwap (WORDPTR (p+28)); for (i=0;i<n;i++) ShortSwap (WORDPTR (p + 30 + (i * 2))); p += 30 + ((n&~1)+1)*2 + n*12; break; case OP_SORTNORM: VmsVectorSwap (VECPTR (p + 4)); VmsVectorSwap (VECPTR (p + 16)); ShortSwap (WORDPTR (p + 28)); ShortSwap (WORDPTR (p + 30)); G3SwapPolyModelData (p + WORDVAL (p+28)); G3SwapPolyModelData (p + WORDVAL (p+30)); p += 32; break; case OP_RODBM: VmsVectorSwap (VECPTR (p + 20)); VmsVectorSwap (VECPTR (p + 4)); ShortSwap (WORDPTR (p+2)); FixSwap (FIXPTR (p + 16)); FixSwap (FIXPTR (p + 32)); p+=36; break; case OP_SUBCALL: ShortSwap (WORDPTR (p+2)); VmsVectorSwap (VECPTR (p+4)); ShortSwap (WORDPTR (p+16)); G3SwapPolyModelData (p + WORDVAL (p+16)); p += 20; break; case OP_GLOW: ShortSwap (WORDPTR (p + 2)); p += 4; break; default: Error ("invalid polygon model\n"); //Int3 (); } } }
inline short Sys_LittleShort(short l) { return ShortSwap(l); }
void engine_draw_frame(void) { float h2=(float)height/2.25f; if(display==NULL) return; if(fTime>(1.0f/20.0f)) { float iTimeFull; PullData(); iTimeFull=(MSDat.iTimeX*65536)+ShortSwap(MSDat.iTime); RPM=iTimeFull>0?(60000000*2.0f)/(iTimeFull*4):0; //0 to 8000 CLT=cltTable[MSDat.cltADC]; //-115 to 430 TPS=tpsTable[MSDat.tpsADC]; //-11 to 128 BAT=(float)MSDat.batADC/255.0f*30.0f; //7 to 21 MAP=(float)MSDat.mapADC; //0 to 255 MAT=matTable[MSDat.matADC]; //-85 to 430 AFR=10+(MSDat.egoADC*0.039216); //10 to 19.4 ADV=(MSDat.advance*0.352)-10; //50 to -10 fTime=0.0f; } glClear(GL_COLOR_BUFFER_BIT); glUseProgram(Objects[GLSL_GAUGE_SHADER]); glUniform1i(Objects[GLSL_GAUGE_TEX], 0); glUniform1f(Objects[GLSL_GAUGE_WIDTH], (float)width); glUniform1f(Objects[GLSL_GAUGE_HEIGHT], (float)height); glActiveTexture(GL_TEXTURE0); glUniform1f(Objects[GLSL_GAUGE_AMOUNT], RPM/8000.0f); glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_RPM]); drawquad(0.0f, h2, h2); glUniform1f(Objects[GLSL_GAUGE_AMOUNT], (CLT+40)/(250+40)); glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_CLT]); drawquad(h2, h2, h2); glUniform1f(Objects[GLSL_GAUGE_AMOUNT], TPS/100); glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_TPS]); drawquad(h2+h2, h2, h2); glUniform1f(Objects[GLSL_GAUGE_AMOUNT], (BAT-7)/(21-7)); glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_BAT]); drawquad(h2+h2+h2, h2, h2); glUniform1f(Objects[GLSL_GAUGE_AMOUNT], MAP/255.0f); glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_MAP]); drawquad(0.0f, 0.0f, h2); glUniform1f(Objects[GLSL_GAUGE_AMOUNT], (MAT+40)/(220+40)); glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_MAT]); drawquad(h2, 0.0f, h2); glUniform1f(Objects[GLSL_GAUGE_AMOUNT], (AFR-10)/(19-10)); glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_AFR]); drawquad(h2+h2, 0.0f, h2); glUniform1f(Objects[GLSL_GAUGE_AMOUNT], (ADV+10)/(50+10)); glBindTexture(GL_TEXTURE_2D, Objects[TEXTURE_IGN]); drawquad(h2+h2+h2, 0.0f, h2); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); Font_Print(0+100, h2+75, "%0.2f", RPM); Font_Print(h2+100, h2+75, "%0.2f", CLT); Font_Print(h2+h2+100, h2+75, "%0.2f", TPS); Font_Print(h2+h2+h2+100, h2+75, "%0.2f", BAT); Font_Print(0+100, 0+75, "%0.2f", MAP); Font_Print(h2+100, 0+75, "%0.2f", MAT); Font_Print(h2+h2+100, 0+75, "%0.2f", AFR); Font_Print(h2+h2+h2+100, 0+75, "%0.2f", ADV); Font_Print(0, 0, "FPS %0.3f\n%s", FPS, MSVer); glDisable(GL_BLEND); eglSwapBuffers(display, surface); }