Mercurial > ~darius > hgwebdir.cgi > paradise_client
diff macrowin.c @ 3:5a977ccbc7a9 default tip
Empty changelog
author | darius |
---|---|
date | Sat, 06 Dec 1997 05:41:29 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/macrowin.c Sat Dec 06 05:41:29 1997 +0000 @@ -0,0 +1,335 @@ +/* $Id: macrowin.c,v 1.1.1.1 1997/12/06 05:41:29 darius Exp $ */ + +/* + * macrowin.c from helpwin.c + * copyright 1993 Nick Trown + * 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. + * Yeah.....what Eric said... + */ +/* Modified for Paradise, 4/94 -JR */ + +/*#include "config.h"*/ +#include <stdio.h> +#include <math.h> +#include <signal.h> +#include <sys/types.h> + +#include <time.h> +/*#include INC_SYS_TIME*/ +/*#include INC_STRINGS*/ + +#include "Wlib.h" +#include "defs.h" +#include "struct.h" +#include "data.h" + + +/* + Fills in macro window with the macros defined in the .xtrekrc. + */ + +#define NUMLINES 80 + +#define MAXMACRO 65 +/* maximum length in characters of key explanation */ + +#define MACROLEN 255 +/* length of construction string since we don't know how long a macro can be */ + + +int lineno = 0; +char maclines[10][MAXMACRO]; +int maclevel = 0; +int macrocnt = 0; /* a global from COW-lite, only needed here + for Paradise. */ + +int +formatline(line) + char *line; +{ + register int end; + char *temp; + int num = 0; + + if (!line) + return 0; + if (strlen(line) <= MAXMACRO) { + strncpy(maclines[num], line, sizeof(maclines[0])); + lineno++; + return 1; + } + temp = line; + while (1) { + end = MAXMACRO - 1; + if (end > strlen(temp)) { + lineno++; + strncpy(maclines[num++], temp, sizeof(maclines[0])); + return (num); + } else + for (; temp[end] != '%'; end--); + + lineno++; + strncpy(maclines[num++], temp, end); + + temp = temp + end; + } +} + + +void +filldist(fill) + int fill; +{ + register int i; + register int row; + register int c; + int num; + char key[3]; + + lineno = 0; + for (i = 1, row = 5; distmacro[i].macro != '\0'; i++) { + if (fill) { + if (distmacro[i].c < 128) + sprintf(key, " %c", distmacro[i].c); + else + sprintf(key, "^%c", distmacro[i].c - 128); + sprintf(maclines[0], "%-8s %s", + key, + distmacro[i].name); + W_WriteText(macroWin, 2, row++, W_Yellow, maclines[0], + strlen(maclines[0]), W_RegularFont); + } + lineno++; + num = formatline(distmacro[i].macro); + if (fill) { + for (c = 0; c < num; c++) { + W_WriteText(macroWin, 8, row++, textColor, maclines[c], + strlen(maclines[c]), W_RegularFont); + } + } + if (lineno > NUMLINES) + continue; + } +} + + + +void +fillmacro() +{ + register int row, i; + char macromessage[MACROLEN]; + struct macro *m; + + W_ClearWindow(macroWin); + sprintf(macromessage, "Packages active: %s%s", + (F_UseNewMacro ? ", NEWMACRO" : ""), + (F_gen_distress ? ", RCD" : "")); + /* (UseSmartMacro ? ", SMARTMACRO" : "")); */ + + W_WriteText(macroWin, 2, 1, textColor, + macromessage, strlen(macromessage), W_RegularFont); + + sprintf(macromessage, "Currently showing: %s", + (maclevel ? "Macros" : "RCDS")); + + W_WriteText(macroWin, 2, 2, textColor, + macromessage, strlen(macromessage), W_RegularFont); + + + if (maclevel == 0) { + W_WriteText(macroWin, 2, 4, W_Yellow, + "Key Distress Name", 21, W_RegularFont); + filldist(1); + return; + } + /* 4 column macro window. This may be changed depending on font size */ + for (row = 4, i = 0; i < 256; i++) { + for (m = macrotable[i]; m; m = m->next, row++) { + if (m->flags & MACRCD) + break; + if (i <= 128) + sprintf(macromessage, "%c ", i); + else + sprintf(macromessage, "^%c", i - 128); +#ifdef NEWMOUSE + if (macro[i].type == NEWMMOUSE) { + switch (macro[i].who) { + case MACRO_PLAYER: + strcat(macromessage, " PL MS "); + break; + case MACRO_TEAM: + strcat(macromessage, " TM MS "); + break; + default: + strcat(macromessage, " SELF "); + break; + } + } else { +#endif + switch (m->to) { + case 'T': + strcat(macromessage, " TEAM "); + break; + case 'A': + strcat(macromessage, " ALL "); + break; + case 'F': + strcat(macromessage, " FED "); + break; + case 'R': + strcat(macromessage, " ROM "); + break; + case 'K': + strcat(macromessage, " KLI "); + break; + case 'O': + strcat(macromessage, " ORI "); + break; +#ifdef MOO + case 'M': + strcat(macromessage, " MOO "); + break; +#endif +#ifdef TOOLS + case '!': + strcat(macromessage, " SHELL "); + break; +#endif +#ifdef NEWMACRO + case '\0': + strcat(macromessage, " SPEC "); + break; +#endif + case -1: + switch (m->specialto) { + case 'I': + case 'C': + strcat(macromessage, " SELF "); + break; + case 'U': + case 'P': + strcat(macromessage, " PL MS "); + break; + case 'T': + case 'Z': + strcat(macromessage, " TM MS "); + break; + case 'G': + strcat(macromessage, " NR FR "); + break; + case 'H': + strcat(macromessage, " NR EN "); + break; + } + break; + case -2: + strcat(macromessage, " QUERY "); + break; + default: + strcat(macromessage, " ---- "); + break; + } + +#ifdef NEWMOUSE + } +#endif + strcat(macromessage, m->string); + macromessage[MAXMACRO] = '\0'; + W_WriteText(macroWin, 2, row, textColor, + macromessage, strlen(macromessage), W_RegularFont); + } + } +} + +void +switchmacros() +{ + int num, i; + struct macro *m; + + if (!macroWin) + return; /* paranoia? */ + + maclevel = abs(maclevel - 1); + + if (maclevel == 0) { + lineno = 0; + filldist(0); + num = lineno + 5; + } else { + for (i = 0, macrocnt = 0; i < 256; i++) { + for (m = macrotable[i]; m; m = m->next) { + if (m->flags & MACRCD) + break; + macrocnt++; +#if 0 + len = strlen(m->string); + while (len > 0) { + totmacros++; + len -= 70; + } +#endif + } + } + num = macrocnt + 5; + } + W_ResizeText(macroWin, 80, num); +#if 0 + W_SetWindowExposeHandler(macroWin, fillmacro); + W_SetWindowButtonHandler(macroWin, switchmacros); +#endif + W_MapWindow(macroWin); +} + + + +void showMacroWin() +{ + int num, i; + struct macro *m; + + if (!macroWin) { + if (maclevel == 0) { + lineno = 0; + filldist(0); + num = lineno + 5; + } else { + for (i = 0, macrocnt = 0; i < 256; i++) { + for (m = macrotable[i]; m; m = m->next) { + if (m->flags & MACRCD) + break; + macrocnt++; +#if 0 + len = strlen(m->string); + while (len > 0) { + totmacros++; + len -= 70; + } +#endif + } + } + num = macrocnt + 5; + } + + macroWin = W_MakeTextWindow("macrow", WINSIDE + BORDER, BORDER, + 80, num, NULL, (char*)0, BORDER); + + W_ResizeText(macroWin, 80, num); +#if 0 + W_DefineTrekCursor(macroWin); + W_SetWindowExposeHandler(macroWin, fillmacro); + W_SetWindowButtonHandler(macroWin, switchmacros); +#endif + W_MapWindow(macroWin); + } else if (W_IsMapped(macroWin)) { + W_DestroyWindow(macroWin); + macroWin = 0; + } else + W_MapWindow(macroWin); +}