Mercurial > ~darius > hgwebdir.cgi > paradise_client
view defwin.c @ 3:5a977ccbc7a9 default tip
Empty changelog
author | darius |
---|---|
date | Sat, 06 Dec 1997 05:41:29 +0000 |
parents | |
children |
line wrap: on
line source
/* $Id: defwin.c,v 1.1.1.1 1997/12/06 05:41:29 darius Exp $ */ #ifdef XTREKRC_HELP /* * taken from helpwin.c * (copyright 1991 ERic mehlhaff Free to use, hack, etc. Just keep * these credits here. Use of this code may be dangerous to your health * and/or system. Its use is at your own risk. I assume no responsibility for * damages, real, potential, or imagined, resulting from the use of it.) * */ #include <stdio.h> #include "math.h" #include <signal.h> #include <sys/types.h> #ifdef hpux #include <time.h> #else /* hpux */ #include <sys/time.h> #endif /* hpux */ #include "Wlib.h" #include "defs.h" #include "struct.h" #include "proto.h" #include "data.h" #ifndef SVR4 #include <strings.h> #else #include <string.h> #endif void def_write P((char *file)); /* this is the number of help messages there are */ #define INT_DEF 0 #define BOOL_DEF 1 #define STR_DEF 2 #define SINT_DEF 3 #define NAME_WIDTH 18 #define VAL_WIDTH 8 #define INDENT 3 #define MAX_VLINES 58 extern int updateSpeed; #ifdef RECORD extern char *recordFileName; #endif #define DEFMESSAGES (sizeof(def_messages)/ sizeof(struct def)) char *name = NULL, *cloak_chars = NULL, *bmap = NULL, *keymap = NULL, *plist = NULL, *log_file = NULL, *saveFileName = NULL; int galacticFrequent; /* sure its a mess, but it gets the job done */ static struct def { char *name; int type; char *desc; void *variable; struct { int i_value; /* if int or bool */ char *s_value; /* if str */ char *desc; } values[10]; struct { /* the area of the window this def takes up */ int x, y, rt, bot; } loc; } def_messages[] = { #ifdef AUTHORIZE { "useRSA", BOOL_DEF, "Use RSA checking", &RSA_Client, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, #endif { "showStats", BOOL_DEF, "Show stats window", &showStats, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "showShields", BOOL_DEF, "Show shields around ship", &showShields, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "keepPeace", BOOL_DEF, "Stay peaceful when reborn", &keeppeace, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "reportKills", BOOL_DEF, "Report kill messages", &reportKills, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, #if 0 { "altBitmaps", BOOL_DEF, "Use alternate ship bitmaps", &blk_altbits, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, #endif { "showStars", BOOL_DEF, "Show star background on tactical", &blk_showStars, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "showMySpeed", BOOL_DEF, "Show speed next to ship", &showMySpeed, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "showTractorPressor", BOOL_DEF, "Show my tract/press", &showTractorPressor, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "showLock", INT_DEF, "Lock display for planets/players", &showLock, { { 0, NULL, "don't show lock" }, { 1, NULL, "show lock on galactic only" }, { 2, NULL, "show lock on tactical only" }, { 3, NULL, "show lock on both" }, { 0, NULL, NULL }, } }, { "showGrid", BOOL_DEF, "Show grid on galactic", &drawgrid, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "Dashboard", INT_DEF, "Type of dashboard to use", &Dashboard, { { 0, NULL, "text based dashboard" }, { 1, NULL, "new dashboard" }, { 2, NULL, "color dashboard" }, { 3, NULL, "Rainbow Dashboard" }, { 0, NULL, NULL }, } }, { "cloakChars", STR_DEF, "Cloak chars for map", &(cloak_chars), { { 0, NULL, NULL }, }, }, { "logging", BOOL_DEF, "Use message logging", &logmess, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "logFile", STR_DEF, "File to use for message logging", &(log_file), { { 0, NULL, NULL }, }, }, #ifdef VARY_HULL { "warnHull", BOOL_DEF, "Warn hull state based on damage", &vary_hull, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, #endif { "warpStreaks", BOOL_DEF, "Streak stars when entering warp", &warpStreaks, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "useMsgw", BOOL_DEF, "Use message window", &use_msgw, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "showShieldDam", BOOL_DEF, "Vary shields based on damage", &show_shield_dam, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "updatesPerSec", SINT_DEF, "No. of updates from server per sec", &updateSpeed, { { 0, NULL, NULL }, }, }, { "redrawDelay", SINT_DEF, "Minimum time between redraws (x/10 sec)", &redrawDelay, { { 0, NULL, NULL }, }, }, { "extraAlertBorder", BOOL_DEF, "Show alert on local border", &extraBorder, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "galacticFrequent", BOOL_DEF, "Update galactic map frequently", &galacticFrequent, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, #ifdef CONTINUOUS_MOUSE { "continuousMouse", BOOL_DEF, "Continuous mouse input", &continuousMouse, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, #endif { "tryUdp", BOOL_DEF, "Try UDP automatically", &tryUdp, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "udpClientReceive", INT_DEF, "UDP receive mode", &udpClientRecv, { { 0, NULL, "TCP only" }, { 1, NULL, "simple UDP" }, { 2, NULL, "fat UDP" }, { 3, NULL, "double UDP (obsolete)" }, { 0, NULL, NULL }, }, }, { "udpClientSend", INT_DEF, "UDP send mode", &udpClientSend, { { 0, NULL, "TCP only" }, { 1, NULL, "simple UDP" }, { 2, NULL, "enforced UDP (state only)" }, { 3, NULL, "enforced UDP (state & weapon)" }, { 0, NULL, NULL }, }, }, { "udpSequenceCheck", BOOL_DEF, "UDP sequence checking", &udpSequenceChk, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "sortPlayers", BOOL_DEF, "Sort playerlist by teams", &sortPlayers, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "robsort", BOOL_DEF, "Put enemies on left in sorted playerlist", &robsort, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "hideNoKills", BOOL_DEF, "Replace 0.00 kills with spaces", &hideNoKills, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "showDead", BOOL_DEF, "Show dead in playerlist", &showDead, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "showPreLogins", BOOL_DEF, "Show pre-logins in playerlist", &showPreLogins, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "sortOutfitting", BOOL_DEF, "Sort outfitting ('--') to bottom", &sortOutfitting, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "timerType", INT_DEF, "Type of timer to use", &timerType, { { 0, NULL, "no timer" }, { 1, NULL, "time of day" }, { 2, NULL, "time on server" }, { 3, NULL, "time in ship" }, { 4, NULL, "user set timer" }, { 0, NULL, NULL }, }, }, { "showGalactic", INT_DEF, "Galactic planet bitmaps", &showgalactic, { { 0, NULL, "show nothing on galactic map" }, { 1, NULL, "show facilities on galactic map" }, { 2, NULL, "show owner on galactic map" }, { 3, NULL, "show surface properties on galactic map" }, { 4, NULL, "show scout info age on galactic map" }, { 5, NULL, "show MOO facilities on galactic map" }, { 0, NULL, NULL }, }, }, { "showLocal", INT_DEF, "Local planet bitmaps", &showlocal, { { 0, NULL, "show nothing on local map" }, { 1, NULL, "show facilities on local map" }, { 2, NULL, "show owner on local map" }, { 3, NULL, "show surface properties on local map" }, { 4, NULL, "show MOO facilities" }, { 0, NULL, NULL }, }, }, { "name", STR_DEF, "Default player name", &(name), { { 0, NULL, NULL }, }, }, { "keymap", STR_DEF, "Keyboard map", &(keymap), { { 0, NULL, NULL }, }, }, { "buttonmap", STR_DEF, "Mouse button map", &(bmap), { { 0, NULL, NULL }, }, }, { "nameMode", BOOL_DEF, "Show names on map/local", &namemode, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, #ifdef SHORT_PACKETS { "tryShort", BOOL_DEF, "Try SHORT-PACKETS at startup", &tryShort, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, #endif #ifdef IGNORE_SIGNALS_SEGV_BUS { "ignoreSignals", BOOL_DEF, "Ignore SIGSEGV and SIGBUS", &ignore_signals, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, #endif #ifdef SHIFTED_MOUSE { "shiftedMouse", BOOL_DEF, "More mouse buttons with shift", &extended_mouse, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, #endif #ifdef BEEPLITE { "UseLite", BOOL_DEF, "Use message highliting", &UseLite, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, { "DefLite", BOOL_DEF, "Use default lites", &DefLite, { { 0, NULL, "" }, { 0, NULL, NULL }, }, }, #endif { "saveFileName", STR_DEF, "Name to save defaults as(click here)", &(saveFileName), { { 0, NULL, NULL }, }, }, }; char * itos(v) int v; { static char value[10]; sprintf(value, "%d", v); return value; } char * btoa(v) int v; { if (v) return "on"; else return "off"; } static void def_redraw(d) struct def *d; { int xo = d->loc.x, yo = d->loc.y; int x, y, j; char *val; W_Color col; x = xo; y = yo; W_ClearArea(defWin, d->loc.x, d->loc.y, d->loc.rt - d->loc.x, d->loc.bot - d->loc.y); W_WriteText(defWin, x, y, W_Yellow, d->name, strlen(d->name), W_RegularFont); x += NAME_WIDTH; W_WriteText(defWin, x, y, textColor, d->desc, strlen(d->desc), W_RegularFont); y++; x = xo + INDENT; if (d->type != STR_DEF) { if (!d->values[0].desc && d->variable) { if (d->type == SINT_DEF) val = itos(*(int *)d->variable); else val = itos(d->values[0].i_value); W_WriteText(defWin, x, y, W_Green, val, strlen(val), W_RegularFont); y++; } for (j = 0; d->values[j].desc; j++) { switch (d->type) { case INT_DEF: val = itos(d->values[j].i_value); if (d->values[j].i_value == *(int *)d->variable) { col = W_Green; W_WriteText(defWin, x, y, col, val, strlen(val), W_RegularFont); if (W_Mono()) { W_WriteText(defWin, x + 1, y, col, "*", 1, W_RegularFont); } } else { col = textColor; W_WriteText(defWin, x, y, col, val, strlen(val), W_RegularFont); } x = xo + NAME_WIDTH; W_WriteText(defWin, x, y, col, d->values[j].desc, strlen(d->values[j].desc), W_RegularFont); y++; x = xo + INDENT; break; case BOOL_DEF: val = btoa(*(int *)d->variable); W_WriteText(defWin, x, y, W_Green, val, strlen(val), W_RegularFont); y++; x = xo + INDENT; break; default: fprintf(stderr, "Unknown type.\n"); break; } } } else if (d->variable && *(int *)d->variable) { W_WriteText(defWin, x, y, W_Green, (char *)*(int *)d->variable, strlen((char *)(*(int *)d->variable)), W_RegularFont); } } void showdef() { register i, j, x = 0, y = 0, xo = 0, yo = 0, max_desc = 0, height = 1, width = 1; register struct def *d; char *val; W_Color col; name = getdefault("name"); keymap = getdefault("keymap"); /* plist = getdefault ("playerlist");*/ cloak_chars = cloakchars; bmap = getdefault("buttonmap"); log_file = getdefault("logfile"); galacticFrequent = (mapmode == 2) ? 0 : 1; if (!saveFileName) { saveFileName = stringDefault("saveFileName", "~/.paradisesaverc"); saveFileName = expandFilename(saveFileName); } if (!defWin) defWin = W_MakeTextWindow("xtrekrc_help", 1, 100, 174, 60, NULL, NULL, BORDER); for (i = 0, d = def_messages; i < DEFMESSAGES; i++, d++) { x = xo; y = yo; d->loc.x = x; d->loc.y = y; W_WriteText(defWin, x, y, W_Yellow, d->name, strlen(d->name), W_RegularFont); x += NAME_WIDTH; W_WriteText(defWin, x, y, textColor, d->desc, strlen(d->desc), W_RegularFont); if ((int)strlen(d->desc) > max_desc) { max_desc = strlen(d->desc); width = MAX(width, x + max_desc); } y++; x = xo + INDENT; if (d->type != STR_DEF) { if (!d->values[0].desc && d->variable) { if (d->type == SINT_DEF) val = itos(*(int *)d->variable); else val = itos(d->values[0].i_value); W_WriteText(defWin, x, y, W_Green, val, strlen(val), W_RegularFont); y++; } for (j = 0; d->values[j].desc; j++) { switch (d->type) { case INT_DEF: val = itos(d->values[j].i_value); if (d->values[j].i_value == *(int *)d->variable) { col = W_Green; W_WriteText(defWin, x, y, col, val, strlen(val), W_RegularFont); if (W_Mono()) { W_WriteText(defWin, x + 1, y, col, "*", 1, W_RegularFont); } } else { col = textColor; W_WriteText(defWin, x, y, col, val, strlen(val), W_RegularFont); } x = xo + NAME_WIDTH; W_WriteText(defWin, x, y, col, d->values[j].desc, strlen(d->values[j].desc), W_RegularFont); y++; x = xo + INDENT; break; case BOOL_DEF: val = btoa(*(int *)d->variable); W_WriteText(defWin, x, y, W_Green, val, strlen(val), W_RegularFont); y++; x = xo + INDENT; break; default: fprintf(stderr, "Unknown type.\n"); break; } } } else if (d->variable && *(int *)d->variable) { W_WriteText(defWin, x, y, W_Green, (char *)*(int *)d->variable, strlen((char *)(*(int *)d->variable)), W_RegularFont); y++; } d->loc.rt = xo + max_desc; d->loc.bot = y + 1; height = MAX(height, y); if (y > MAX_VLINES) { yo = 0; xo += NAME_WIDTH + max_desc + 2; max_desc = 0; } else { yo = y + 1; } } if (!W_IsMapped(defWin)) { W_ResizeText(defWin, width, height); W_MapWindow(defWin); } } void def_action(ev) W_Event *ev; { int i, j, x, y, line; register struct def *d; char buf[100]; x = ev->x; y = ev->y; W_TranslatePoints(ev->Window, &x, &y); for (i = 0, d = def_messages; i < DEFMESSAGES; i++, d++) { if (y >= d->loc.y && y < d->loc.bot && x >= d->loc.x && x < d->loc.rt) break; /* found it! */ } if (i >= DEFMESSAGES) return; line = y - d->loc.y; switch (ev->type) { case W_EV_BUTTON: switch (d->type) { case BOOL_DEF: *(int *)d->variable = !(*(int *)d->variable); def_redraw(d); break; case INT_DEF: case SINT_DEF: if (line == 0 || d->type == SINT_DEF) { switch (ev->key) { case W_LBUTTON: (*(int *)d->variable)++; if (!(*(int *)d->values[*(int *)d->variable].desc)) *(int *)d->variable = 0; break; case W_RBUTTON: (*(int *)d->variable)--; if (*(int *)d->variable < 0) { for (j = 0; d->values[j].desc; j++) /* empty */ ; *(int *)d->variable = j - 1; } break; case W_MBUTTON: *(int *)d->variable = 0; break; default: break; } } else if (y < d->loc.bot) *(int *)d->variable = line - 1; def_redraw(d); break; case STR_DEF: if (d->variable == &saveFileName) def_write(saveFileName); break; default: break; } } } void def_write(file) char *file; { int i; struct def *d; FILE *f; f = fopen(file, "w"); for (i = 0, d = def_messages; i < DEFMESSAGES; i++, d++) { switch (d->type) { case INT_DEF: case SINT_DEF: fprintf(f, "%s: %d\n", d->name, *(int *)d->variable); break; case BOOL_DEF: fprintf(f, "%s: %s\n", d->name, (*(int *)d->variable ? "on" : "off")); break; case STR_DEF: fprintf(f, "%s: %s\n", d->name, (char *)*(int *)d->variable); break; } } fclose(f); } #endif