|
|
1.1 ! root 1: #include "master.h" ! 2: ! 3: int com_argc; ! 4: char **com_argv; ! 5: ! 6: /* ! 7: ================ ! 8: COM_CheckParm ! 9: ! 10: Returns the position (1 to argc-1) in the program's argument list ! 11: where the given parameter apears, or 0 if not present ! 12: ================ ! 13: */ ! 14: int COM_CheckParm (char *parm) ! 15: { ! 16: int i; ! 17: ! 18: for (i=1 ; i<com_argc ; i++) ! 19: { ! 20: if (!com_argv[i]) ! 21: continue; // NEXTSTEP sometimes clears appkit vars. ! 22: if (!strcmp (parm,com_argv[i])) ! 23: return i; ! 24: } ! 25: ! 26: return 0; ! 27: } ! 28: ! 29: char *AdrToString (netadr_t a) ! 30: { ! 31: static char s[64]; ! 32: ! 33: sprintf (s, "%i.%i.%i.%i:%i", ! 34: a.sin_addr.S_un.S_un_b.s_b1, ! 35: a.sin_addr.S_un.S_un_b.s_b2, ! 36: a.sin_addr.S_un.S_un_b.s_b3, ! 37: a.sin_addr.S_un.S_un_b.s_b4, ! 38: ntohs(a.sin_port)); ! 39: ! 40: return s; ! 41: } ! 42: ! 43: netadr_t StringToAdr (char *s) ! 44: { ! 45: netadr_t a; ! 46: int b1, b2, b3, b4, p; ! 47: ! 48: b1 = b2 = b3 = b4 = p = 0; ! 49: sscanf (s, "%i.%i.%i.%i:%i", &b1, &b2, &b3, &b4, &p); ! 50: ! 51: a.sin_addr.S_un.S_un_b.s_b1 = b1; ! 52: a.sin_addr.S_un.S_un_b.s_b2 = b2; ! 53: a.sin_addr.S_un.S_un_b.s_b3 = b3; ! 54: a.sin_addr.S_un.S_un_b.s_b4 = b4; ! 55: a.sin_port = ntohs(p); ! 56: ! 57: return a; ! 58: } ! 59: ! 60: qboolean CompareAdr (netadr_t a, netadr_t b) ! 61: { ! 62: if (a.sin_addr.s_addr == b.sin_addr.s_addr ! 63: && a.sin_port == b.sin_port) ! 64: return true; ! 65: return false; ! 66: } ! 67: ! 68: ! 69: void mprintf (char *msg, ...) ! 70: { ! 71: va_list argptr; ! 72: ! 73: va_start (argptr, msg); ! 74: vprintf (msg, argptr); ! 75: vfprintf (logfile, msg, argptr); ! 76: va_end (argptr); ! 77: ! 78: } ! 79: ! 80: int msg_readcount; ! 81: char *MSG_ReadString (void) ! 82: { ! 83: char *start; ! 84: ! 85: start = packet_data + msg_readcount; ! 86: ! 87: for ( ; msg_readcount < packet_length ; msg_readcount++) ! 88: if (packet_data[msg_readcount] == '\n' ! 89: || packet_data[msg_readcount] == 0) ! 90: break; ! 91: ! 92: packet_data[msg_readcount] = 0; ! 93: msg_readcount++; ! 94: ! 95: return start; ! 96: } ! 97: ! 98: /* ! 99: ===================================================================== ! 100: ! 101: COMMAND LINES ! 102: ! 103: ===================================================================== ! 104: */ ! 105: ! 106: #define MAX_ARGS 32 ! 107: #define MAX_ARG_LENGTH 1024 ! 108: int cmd_argc; ! 109: char cmd_argv[MAX_ARGS][MAX_ARG_LENGTH]; ! 110: ! 111: char com_token[1024]; ! 112: /* ! 113: ============== ! 114: COM_Parse ! 115: ! 116: Parse a token out of a string ! 117: ============== ! 118: */ ! 119: char *COM_Parse (char *data) ! 120: { ! 121: int c; ! 122: int len; ! 123: ! 124: len = 0; ! 125: com_token[0] = 0; ! 126: ! 127: if (!data) ! 128: return NULL; ! 129: ! 130: // skip whitespace ! 131: skipwhite: ! 132: while ( (c = *data) <= ' ') ! 133: { ! 134: if (c == 0) ! 135: return NULL; // end of file; ! 136: data++; ! 137: } ! 138: ! 139: // skip // comments ! 140: if (c=='/' && data[1] == '/') ! 141: { ! 142: while (*data && *data != '\n') ! 143: data++; ! 144: goto skipwhite; ! 145: } ! 146: ! 147: ! 148: // handle quoted strings specially ! 149: if (c == '\"') ! 150: { ! 151: data++; ! 152: while (1) ! 153: { ! 154: c = *data++; ! 155: if (c=='\"' || !c) ! 156: { ! 157: com_token[len] = 0; ! 158: return data; ! 159: } ! 160: com_token[len] = c; ! 161: len++; ! 162: } ! 163: } ! 164: ! 165: // parse a regular word ! 166: do ! 167: { ! 168: com_token[len] = c; ! 169: data++; ! 170: len++; ! 171: c = *data; ! 172: } while (c>32); ! 173: ! 174: com_token[len] = 0; ! 175: return data; ! 176: } ! 177: ! 178: /* ! 179: ============ ! 180: Cmd_Argc ! 181: ============ ! 182: */ ! 183: int Cmd_Argc (void) ! 184: { ! 185: return cmd_argc; ! 186: } ! 187: ! 188: /* ! 189: ============ ! 190: Cmd_Argv ! 191: ============ ! 192: */ ! 193: char *Cmd_Argv (int arg) ! 194: { ! 195: if ( (unsigned)arg >= cmd_argc ) ! 196: return ""; ! 197: return cmd_argv[arg]; ! 198: } ! 199: ! 200: /* ! 201: ============ ! 202: Cmd_TokenizeString ! 203: ! 204: Parses the given string into command line tokens. ! 205: ============ ! 206: */ ! 207: void Cmd_TokenizeString (char *text) ! 208: { ! 209: cmd_argc = 0; ! 210: ! 211: while (1) ! 212: { ! 213: // skip whitespace up to a /n ! 214: while (*text && *text <= ' ') ! 215: { ! 216: text++; ! 217: } ! 218: ! 219: if (!*text) ! 220: return; ! 221: ! 222: text = COM_Parse (text); ! 223: if (!text) ! 224: return; ! 225: ! 226: if (cmd_argc < MAX_ARGS) ! 227: { ! 228: strcpy (cmd_argv[cmd_argc], com_token); ! 229: cmd_argc++; ! 230: } ! 231: } ! 232: ! 233: } ! 234: ! 235: ! 236: /* ! 237: ===================================================================== ! 238: ! 239: INFO STRINGS ! 240: ! 241: ===================================================================== ! 242: */ ! 243: ! 244: /* ! 245: =============== ! 246: Info_ValueForKey ! 247: ! 248: Searches the string (userinfo or masterinfo) for the given ! 249: key and returns the associated value, or an empty string. ! 250: =============== ! 251: */ ! 252: char *Info_ValueForKey (char *s, char *key) ! 253: { ! 254: char pkey[512]; ! 255: static char value[512]; ! 256: char *o; ! 257: ! 258: if (*s == '\\') ! 259: s++; ! 260: while (1) ! 261: { ! 262: o = pkey; ! 263: while (*s != '\\') ! 264: { ! 265: if (!*s) ! 266: return ""; ! 267: *o++ = *s++; ! 268: } ! 269: *o = 0; ! 270: s++; ! 271: ! 272: o = value; ! 273: while (*s != '\\' && *s) ! 274: { ! 275: if (!*s) ! 276: return ""; ! 277: *o++ = *s++; ! 278: } ! 279: *o = 0; ! 280: ! 281: if (!strcmp (key, pkey) ) ! 282: return value; ! 283: ! 284: if (!*s) ! 285: return ""; ! 286: s++; ! 287: } ! 288: } ! 289: ! 290: void Info_RemoveKey (char *s, char *key) ! 291: { ! 292: char *start; ! 293: char pkey[512]; ! 294: char value[512]; ! 295: char *o; ! 296: ! 297: if (strstr (key, "\\")) ! 298: { ! 299: printf ("Can't use a key with a \\\n"); ! 300: return; ! 301: } ! 302: ! 303: while (1) ! 304: { ! 305: start = s; ! 306: if (*s == '\\') ! 307: s++; ! 308: o = pkey; ! 309: while (*s != '\\') ! 310: { ! 311: if (!*s) ! 312: return; ! 313: *o++ = *s++; ! 314: } ! 315: *o = 0; ! 316: s++; ! 317: ! 318: o = value; ! 319: while (*s != '\\' && *s) ! 320: { ! 321: if (!*s) ! 322: return; ! 323: *o++ = *s++; ! 324: } ! 325: *o = 0; ! 326: ! 327: if (!strcmp (key, pkey) ) ! 328: { ! 329: strcpy (start, s); // remove this part ! 330: return; ! 331: } ! 332: ! 333: if (!*s) ! 334: return; ! 335: } ! 336: ! 337: } ! 338: ! 339: void Info_RemovePrefixedKeys (char *start, char prefix) ! 340: { ! 341: char *s; ! 342: char pkey[512]; ! 343: char value[512]; ! 344: char *o; ! 345: ! 346: s = start; ! 347: ! 348: while (1) ! 349: { ! 350: if (*s == '\\') ! 351: s++; ! 352: o = pkey; ! 353: while (*s != '\\') ! 354: { ! 355: if (!*s) ! 356: return; ! 357: *o++ = *s++; ! 358: } ! 359: *o = 0; ! 360: s++; ! 361: ! 362: o = value; ! 363: while (*s != '\\' && *s) ! 364: { ! 365: if (!*s) ! 366: return; ! 367: *o++ = *s++; ! 368: } ! 369: *o = 0; ! 370: ! 371: if (pkey[0] == prefix) ! 372: { ! 373: Info_RemoveKey (start, pkey); ! 374: s = start; ! 375: } ! 376: ! 377: if (!*s) ! 378: return; ! 379: } ! 380: ! 381: } ! 382: ! 383: void Info_SetValueForKey (char *s, char *key, char *value) ! 384: { ! 385: char new[512]; ! 386: ! 387: if (strstr (key, "\\") || strstr (value, "\\") ) ! 388: { ! 389: printf ("Can't use keys or values with a \\\n"); ! 390: return; ! 391: } ! 392: if (strstr (key, "\"") || strstr (value, "\"") ) ! 393: { ! 394: printf ("Can't use keys or values with a \\\n"); ! 395: return; ! 396: } ! 397: ! 398: Info_RemoveKey (s, key); ! 399: if (!value || !strlen(value)) ! 400: return; ! 401: ! 402: sprintf (new, "\\%s\\%s", key, value); ! 403: ! 404: if (strlen(new) + strlen(s) > MAX_INFO_STRING) ! 405: { ! 406: printf ("Info string length exceeded\n"); ! 407: return; ! 408: } ! 409: strcat (s, new); ! 410: } ! 411: ! 412: void Info_Print (char *s) ! 413: { ! 414: char key[512]; ! 415: char value[512]; ! 416: char *o; ! 417: int l; ! 418: ! 419: if (*s == '\\') ! 420: s++; ! 421: while (*s) ! 422: { ! 423: o = key; ! 424: while (*s && *s != '\\') ! 425: *o++ = *s++; ! 426: ! 427: l = o - key; ! 428: if (l < 20) ! 429: { ! 430: memset (o, ' ', 20-l); ! 431: key[20] = 0; ! 432: } ! 433: else ! 434: *o = 0; ! 435: printf ("%s", key); ! 436: ! 437: if (!*s) ! 438: { ! 439: printf ("MISSING VALUE\n"); ! 440: return; ! 441: } ! 442: ! 443: o = value; ! 444: s++; ! 445: while (*s && *s != '\\') ! 446: *o++ = *s++; ! 447: *o = 0; ! 448: ! 449: if (*s) ! 450: s++; ! 451: printf ("%s\n", value); ! 452: } ! 453: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.