Mercurial > ~darius > hgwebdir.cgi > paradise_client
comparison defwin.c @ 3:5a977ccbc7a9 default tip
Empty changelog
author | darius |
---|---|
date | Sat, 06 Dec 1997 05:41:29 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:fba0b6e6cdc7 | 3:5a977ccbc7a9 |
---|---|
1 /* $Id: defwin.c,v 1.1.1.1 1997/12/06 05:41:29 darius Exp $ */ | |
2 | |
3 #ifdef XTREKRC_HELP | |
4 /* | |
5 * taken from helpwin.c | |
6 * (copyright 1991 ERic mehlhaff Free to use, hack, etc. Just keep | |
7 * these credits here. Use of this code may be dangerous to your health | |
8 * and/or system. Its use is at your own risk. I assume no responsibility for | |
9 * damages, real, potential, or imagined, resulting from the use of it.) | |
10 * | |
11 */ | |
12 | |
13 #include <stdio.h> | |
14 #include "math.h" | |
15 #include <signal.h> | |
16 #include <sys/types.h> | |
17 #ifdef hpux | |
18 #include <time.h> | |
19 #else /* hpux */ | |
20 #include <sys/time.h> | |
21 #endif /* hpux */ | |
22 #include "Wlib.h" | |
23 #include "defs.h" | |
24 #include "struct.h" | |
25 #include "proto.h" | |
26 #include "data.h" | |
27 #ifndef SVR4 | |
28 #include <strings.h> | |
29 #else | |
30 #include <string.h> | |
31 #endif | |
32 | |
33 void def_write | |
34 P((char *file)); | |
35 | |
36 /* this is the number of help messages there are */ | |
37 | |
38 #define INT_DEF 0 | |
39 #define BOOL_DEF 1 | |
40 #define STR_DEF 2 | |
41 #define SINT_DEF 3 | |
42 | |
43 #define NAME_WIDTH 18 | |
44 #define VAL_WIDTH 8 | |
45 #define INDENT 3 | |
46 #define MAX_VLINES 58 | |
47 | |
48 extern int updateSpeed; | |
49 #ifdef RECORD | |
50 extern char *recordFileName; | |
51 #endif | |
52 | |
53 #define DEFMESSAGES (sizeof(def_messages)/ sizeof(struct def)) | |
54 | |
55 char *name = NULL, *cloak_chars = NULL, *bmap = NULL, *keymap = NULL, *plist = NULL, *log_file = NULL, *saveFileName = NULL; | |
56 int galacticFrequent; | |
57 | |
58 /* sure its a mess, but it gets the job done */ | |
59 | |
60 static | |
61 struct def { | |
62 char *name; | |
63 int type; | |
64 char *desc; | |
65 void *variable; | |
66 | |
67 struct { | |
68 int i_value; /* if int or bool */ | |
69 char *s_value; /* if str */ | |
70 char *desc; | |
71 } values[10]; | |
72 | |
73 struct { /* the area of the window this def takes up */ | |
74 int x, y, rt, bot; | |
75 } loc; | |
76 } def_messages[] = { | |
77 | |
78 #ifdef AUTHORIZE | |
79 { | |
80 "useRSA", BOOL_DEF, "Use RSA checking", | |
81 &RSA_Client, | |
82 { | |
83 { | |
84 0, NULL, "" | |
85 }, | |
86 { | |
87 0, NULL, NULL | |
88 }, | |
89 }, | |
90 }, | |
91 #endif | |
92 { | |
93 "showStats", BOOL_DEF, "Show stats window", | |
94 &showStats, | |
95 { | |
96 { | |
97 0, NULL, "" | |
98 }, | |
99 { | |
100 0, NULL, NULL | |
101 }, | |
102 }, | |
103 }, | |
104 { | |
105 "showShields", BOOL_DEF, "Show shields around ship", | |
106 &showShields, | |
107 { | |
108 { | |
109 0, NULL, "" | |
110 }, | |
111 { | |
112 0, NULL, NULL | |
113 }, | |
114 }, | |
115 }, | |
116 { | |
117 "keepPeace", BOOL_DEF, "Stay peaceful when reborn", | |
118 &keeppeace, | |
119 { | |
120 { | |
121 0, NULL, "" | |
122 }, | |
123 { | |
124 0, NULL, NULL | |
125 }, | |
126 }, | |
127 }, | |
128 { | |
129 "reportKills", BOOL_DEF, "Report kill messages", | |
130 &reportKills, | |
131 { | |
132 { | |
133 0, NULL, "" | |
134 }, | |
135 { | |
136 0, NULL, NULL | |
137 }, | |
138 }, | |
139 }, | |
140 #if 0 | |
141 { | |
142 "altBitmaps", BOOL_DEF, "Use alternate ship bitmaps", | |
143 &blk_altbits, | |
144 { | |
145 { | |
146 0, NULL, "" | |
147 }, | |
148 { | |
149 0, NULL, NULL | |
150 }, | |
151 }, | |
152 }, | |
153 #endif | |
154 { | |
155 "showStars", BOOL_DEF, "Show star background on tactical", | |
156 &blk_showStars, | |
157 { | |
158 { | |
159 0, NULL, "" | |
160 }, | |
161 { | |
162 0, NULL, NULL | |
163 }, | |
164 }, | |
165 }, | |
166 { | |
167 "showMySpeed", BOOL_DEF, "Show speed next to ship", | |
168 &showMySpeed, | |
169 { | |
170 { | |
171 0, NULL, "" | |
172 }, | |
173 { | |
174 0, NULL, NULL | |
175 }, | |
176 }, | |
177 }, | |
178 { | |
179 "showTractorPressor", BOOL_DEF, "Show my tract/press", | |
180 &showTractorPressor, | |
181 { | |
182 { | |
183 0, NULL, "" | |
184 }, | |
185 { | |
186 0, NULL, NULL | |
187 }, | |
188 }, | |
189 }, | |
190 { | |
191 "showLock", INT_DEF, "Lock display for planets/players", | |
192 &showLock, | |
193 { | |
194 { | |
195 0, NULL, "don't show lock" | |
196 }, | |
197 { | |
198 1, NULL, "show lock on galactic only" | |
199 }, | |
200 { | |
201 2, NULL, "show lock on tactical only" | |
202 }, | |
203 { | |
204 3, NULL, "show lock on both" | |
205 }, | |
206 { | |
207 0, NULL, NULL | |
208 }, | |
209 } | |
210 }, | |
211 { | |
212 "showGrid", BOOL_DEF, "Show grid on galactic", | |
213 &drawgrid, | |
214 { | |
215 { | |
216 0, NULL, "" | |
217 }, | |
218 { | |
219 0, NULL, NULL | |
220 }, | |
221 }, | |
222 }, | |
223 { | |
224 "Dashboard", INT_DEF, "Type of dashboard to use", | |
225 &Dashboard, | |
226 { | |
227 { | |
228 0, NULL, "text based dashboard" | |
229 }, | |
230 { | |
231 1, NULL, "new dashboard" | |
232 }, | |
233 { | |
234 2, NULL, "color dashboard" | |
235 }, | |
236 { | |
237 3, NULL, "Rainbow Dashboard" | |
238 }, | |
239 { | |
240 0, NULL, NULL | |
241 }, | |
242 } | |
243 }, | |
244 { | |
245 "cloakChars", STR_DEF, "Cloak chars for map", | |
246 &(cloak_chars), | |
247 { | |
248 { | |
249 0, NULL, NULL | |
250 }, | |
251 }, | |
252 }, | |
253 { | |
254 "logging", BOOL_DEF, "Use message logging", | |
255 &logmess, | |
256 { | |
257 { | |
258 0, NULL, "" | |
259 }, | |
260 { | |
261 0, NULL, NULL | |
262 }, | |
263 }, | |
264 }, | |
265 { | |
266 "logFile", STR_DEF, "File to use for message logging", | |
267 &(log_file), | |
268 { | |
269 { | |
270 0, NULL, NULL | |
271 }, | |
272 }, | |
273 }, | |
274 #ifdef VARY_HULL | |
275 { | |
276 "warnHull", BOOL_DEF, "Warn hull state based on damage", | |
277 &vary_hull, | |
278 { | |
279 { | |
280 0, NULL, "" | |
281 }, | |
282 { | |
283 0, NULL, NULL | |
284 }, | |
285 }, | |
286 }, | |
287 #endif | |
288 { | |
289 "warpStreaks", BOOL_DEF, "Streak stars when entering warp", | |
290 &warpStreaks, | |
291 { | |
292 { | |
293 0, NULL, "" | |
294 }, | |
295 { | |
296 0, NULL, NULL | |
297 }, | |
298 }, | |
299 }, | |
300 { | |
301 "useMsgw", BOOL_DEF, "Use message window", | |
302 &use_msgw, | |
303 { | |
304 { | |
305 0, NULL, "" | |
306 }, | |
307 { | |
308 0, NULL, NULL | |
309 }, | |
310 }, | |
311 }, | |
312 { | |
313 "showShieldDam", BOOL_DEF, "Vary shields based on damage", | |
314 &show_shield_dam, | |
315 { | |
316 { | |
317 0, NULL, "" | |
318 }, | |
319 { | |
320 0, NULL, NULL | |
321 }, | |
322 }, | |
323 }, | |
324 { | |
325 "updatesPerSec", SINT_DEF, "No. of updates from server per sec", | |
326 &updateSpeed, | |
327 { | |
328 { | |
329 0, NULL, NULL | |
330 }, | |
331 }, | |
332 }, | |
333 { | |
334 "redrawDelay", SINT_DEF, "Minimum time between redraws (x/10 sec)", | |
335 &redrawDelay, | |
336 { | |
337 { | |
338 0, NULL, NULL | |
339 }, | |
340 }, | |
341 }, | |
342 { | |
343 "extraAlertBorder", BOOL_DEF, "Show alert on local border", | |
344 &extraBorder, | |
345 { | |
346 { | |
347 0, NULL, "" | |
348 }, | |
349 { | |
350 0, NULL, NULL | |
351 }, | |
352 }, | |
353 }, | |
354 { | |
355 "galacticFrequent", BOOL_DEF, "Update galactic map frequently", | |
356 &galacticFrequent, | |
357 { | |
358 { | |
359 0, NULL, "" | |
360 }, | |
361 { | |
362 0, NULL, NULL | |
363 }, | |
364 }, | |
365 }, | |
366 #ifdef CONTINUOUS_MOUSE | |
367 { | |
368 "continuousMouse", BOOL_DEF, "Continuous mouse input", | |
369 &continuousMouse, | |
370 { | |
371 { | |
372 0, NULL, "" | |
373 }, | |
374 { | |
375 0, NULL, NULL | |
376 }, | |
377 }, | |
378 }, | |
379 #endif | |
380 { | |
381 "tryUdp", BOOL_DEF, "Try UDP automatically", | |
382 &tryUdp, | |
383 { | |
384 { | |
385 0, NULL, "" | |
386 }, | |
387 { | |
388 0, NULL, NULL | |
389 }, | |
390 }, | |
391 }, | |
392 { | |
393 "udpClientReceive", INT_DEF, "UDP receive mode", | |
394 &udpClientRecv, | |
395 { | |
396 { | |
397 0, NULL, "TCP only" | |
398 }, | |
399 { | |
400 1, NULL, "simple UDP" | |
401 }, | |
402 { | |
403 2, NULL, "fat UDP" | |
404 }, | |
405 { | |
406 3, NULL, "double UDP (obsolete)" | |
407 }, | |
408 { | |
409 0, NULL, NULL | |
410 }, | |
411 }, | |
412 }, | |
413 { | |
414 "udpClientSend", INT_DEF, "UDP send mode", | |
415 &udpClientSend, | |
416 { | |
417 { | |
418 0, NULL, "TCP only" | |
419 }, | |
420 { | |
421 1, NULL, "simple UDP" | |
422 }, | |
423 { | |
424 2, NULL, "enforced UDP (state only)" | |
425 }, | |
426 { | |
427 3, NULL, "enforced UDP (state & weapon)" | |
428 }, | |
429 { | |
430 0, NULL, NULL | |
431 }, | |
432 }, | |
433 }, | |
434 { | |
435 "udpSequenceCheck", BOOL_DEF, "UDP sequence checking", | |
436 &udpSequenceChk, | |
437 { | |
438 { | |
439 0, NULL, "" | |
440 }, | |
441 { | |
442 0, NULL, NULL | |
443 }, | |
444 }, | |
445 }, | |
446 { | |
447 "sortPlayers", BOOL_DEF, "Sort playerlist by teams", | |
448 &sortPlayers, | |
449 { | |
450 { | |
451 0, NULL, "" | |
452 }, | |
453 { | |
454 0, NULL, NULL | |
455 }, | |
456 }, | |
457 }, | |
458 { | |
459 "robsort", BOOL_DEF, "Put enemies on left in sorted playerlist", | |
460 &robsort, | |
461 { | |
462 { | |
463 0, NULL, "" | |
464 }, | |
465 { | |
466 0, NULL, NULL | |
467 }, | |
468 }, | |
469 }, | |
470 { | |
471 "hideNoKills", BOOL_DEF, "Replace 0.00 kills with spaces", | |
472 &hideNoKills, | |
473 { | |
474 { | |
475 0, NULL, "" | |
476 }, | |
477 { | |
478 0, NULL, NULL | |
479 }, | |
480 }, | |
481 }, | |
482 { | |
483 "showDead", BOOL_DEF, "Show dead in playerlist", | |
484 &showDead, | |
485 { | |
486 { | |
487 0, NULL, "" | |
488 }, | |
489 { | |
490 0, NULL, NULL | |
491 }, | |
492 }, | |
493 }, | |
494 { | |
495 "showPreLogins", BOOL_DEF, "Show pre-logins in playerlist", | |
496 &showPreLogins, | |
497 { | |
498 { | |
499 0, NULL, "" | |
500 }, | |
501 { | |
502 0, NULL, NULL | |
503 }, | |
504 }, | |
505 }, | |
506 { | |
507 "sortOutfitting", BOOL_DEF, "Sort outfitting ('--') to bottom", | |
508 &sortOutfitting, | |
509 { | |
510 { | |
511 0, NULL, "" | |
512 }, | |
513 { | |
514 0, NULL, NULL | |
515 }, | |
516 }, | |
517 }, | |
518 { | |
519 "timerType", INT_DEF, "Type of timer to use", | |
520 &timerType, | |
521 { | |
522 { | |
523 0, NULL, "no timer" | |
524 }, | |
525 { | |
526 1, NULL, "time of day" | |
527 }, | |
528 { | |
529 2, NULL, "time on server" | |
530 }, | |
531 { | |
532 3, NULL, "time in ship" | |
533 }, | |
534 { | |
535 4, NULL, "user set timer" | |
536 }, | |
537 { | |
538 0, NULL, NULL | |
539 }, | |
540 }, | |
541 }, | |
542 { | |
543 "showGalactic", INT_DEF, "Galactic planet bitmaps", | |
544 &showgalactic, | |
545 { | |
546 { | |
547 0, NULL, "show nothing on galactic map" | |
548 }, | |
549 { | |
550 1, NULL, "show facilities on galactic map" | |
551 }, | |
552 { | |
553 2, NULL, "show owner on galactic map" | |
554 }, | |
555 { | |
556 3, NULL, "show surface properties on galactic map" | |
557 }, | |
558 { | |
559 4, NULL, "show scout info age on galactic map" | |
560 }, | |
561 { | |
562 5, NULL, "show MOO facilities on galactic map" | |
563 }, | |
564 { | |
565 0, NULL, NULL | |
566 }, | |
567 }, | |
568 }, | |
569 { | |
570 "showLocal", INT_DEF, "Local planet bitmaps", | |
571 &showlocal, | |
572 { | |
573 { | |
574 0, NULL, "show nothing on local map" | |
575 }, | |
576 { | |
577 1, NULL, "show facilities on local map" | |
578 }, | |
579 { | |
580 2, NULL, "show owner on local map" | |
581 }, | |
582 { | |
583 3, NULL, "show surface properties on local map" | |
584 }, | |
585 { | |
586 4, NULL, "show MOO facilities" | |
587 }, | |
588 { | |
589 0, NULL, NULL | |
590 }, | |
591 }, | |
592 }, | |
593 { | |
594 "name", STR_DEF, "Default player name", | |
595 &(name), | |
596 { | |
597 { | |
598 0, NULL, NULL | |
599 }, | |
600 }, | |
601 }, | |
602 { | |
603 "keymap", STR_DEF, "Keyboard map", | |
604 &(keymap), | |
605 { | |
606 { | |
607 0, NULL, NULL | |
608 }, | |
609 }, | |
610 }, | |
611 { | |
612 "buttonmap", STR_DEF, "Mouse button map", | |
613 &(bmap), | |
614 { | |
615 { | |
616 0, NULL, NULL | |
617 }, | |
618 }, | |
619 }, | |
620 { | |
621 "nameMode", BOOL_DEF, "Show names on map/local", | |
622 &namemode, | |
623 { | |
624 { | |
625 0, NULL, "" | |
626 }, | |
627 { | |
628 0, NULL, NULL | |
629 }, | |
630 }, | |
631 }, | |
632 #ifdef SHORT_PACKETS | |
633 { | |
634 "tryShort", BOOL_DEF, "Try SHORT-PACKETS at startup", | |
635 &tryShort, | |
636 { | |
637 { | |
638 0, NULL, "" | |
639 }, | |
640 { | |
641 0, NULL, NULL | |
642 }, | |
643 }, | |
644 }, | |
645 #endif | |
646 #ifdef IGNORE_SIGNALS_SEGV_BUS | |
647 { | |
648 "ignoreSignals", BOOL_DEF, "Ignore SIGSEGV and SIGBUS", | |
649 &ignore_signals, | |
650 { | |
651 { | |
652 0, NULL, "" | |
653 }, | |
654 { | |
655 0, NULL, NULL | |
656 }, | |
657 }, | |
658 }, | |
659 #endif | |
660 #ifdef SHIFTED_MOUSE | |
661 { | |
662 "shiftedMouse", BOOL_DEF, "More mouse buttons with shift", | |
663 &extended_mouse, | |
664 { | |
665 { | |
666 0, NULL, "" | |
667 }, | |
668 { | |
669 0, NULL, NULL | |
670 }, | |
671 }, | |
672 }, | |
673 #endif | |
674 #ifdef BEEPLITE | |
675 { | |
676 "UseLite", BOOL_DEF, "Use message highliting", | |
677 &UseLite, | |
678 { | |
679 { | |
680 0, NULL, "" | |
681 }, | |
682 { | |
683 0, NULL, NULL | |
684 }, | |
685 }, | |
686 }, | |
687 { | |
688 "DefLite", BOOL_DEF, "Use default lites", | |
689 &DefLite, | |
690 { | |
691 { | |
692 0, NULL, "" | |
693 }, | |
694 { | |
695 0, NULL, NULL | |
696 }, | |
697 }, | |
698 }, | |
699 #endif | |
700 { | |
701 "saveFileName", STR_DEF, "Name to save defaults as(click here)", | |
702 &(saveFileName), | |
703 { | |
704 { | |
705 0, NULL, NULL | |
706 }, | |
707 }, | |
708 }, | |
709 }; | |
710 | |
711 char * | |
712 itos(v) | |
713 int v; | |
714 { | |
715 static char value[10]; | |
716 sprintf(value, "%d", v); | |
717 return value; | |
718 } | |
719 | |
720 char * | |
721 btoa(v) | |
722 int v; | |
723 { | |
724 if (v) | |
725 return "on"; | |
726 else | |
727 return "off"; | |
728 } | |
729 | |
730 static void | |
731 def_redraw(d) | |
732 struct def *d; | |
733 { | |
734 int xo = d->loc.x, yo = d->loc.y; | |
735 int x, y, j; | |
736 char *val; | |
737 W_Color col; | |
738 | |
739 x = xo; | |
740 y = yo; | |
741 | |
742 W_ClearArea(defWin, d->loc.x, d->loc.y, d->loc.rt - d->loc.x, d->loc.bot - d->loc.y); | |
743 | |
744 W_WriteText(defWin, x, y, W_Yellow, d->name, strlen(d->name), | |
745 W_RegularFont); | |
746 x += NAME_WIDTH; | |
747 | |
748 W_WriteText(defWin, x, y, textColor, d->desc, strlen(d->desc), | |
749 W_RegularFont); | |
750 y++; | |
751 x = xo + INDENT; | |
752 | |
753 if (d->type != STR_DEF) { | |
754 if (!d->values[0].desc && d->variable) { | |
755 if (d->type == SINT_DEF) | |
756 val = itos(*(int *)d->variable); | |
757 else | |
758 val = itos(d->values[0].i_value); | |
759 | |
760 W_WriteText(defWin, x, y, W_Green, val, strlen(val), | |
761 W_RegularFont); | |
762 y++; | |
763 } | |
764 for (j = 0; d->values[j].desc; j++) { | |
765 switch (d->type) { | |
766 case INT_DEF: | |
767 val = itos(d->values[j].i_value); | |
768 if (d->values[j].i_value == *(int *)d->variable) { | |
769 col = W_Green; | |
770 | |
771 W_WriteText(defWin, x, y, col, val, strlen(val), | |
772 W_RegularFont); | |
773 if (W_Mono()) { | |
774 W_WriteText(defWin, x + 1, y, col, "*", 1, | |
775 W_RegularFont); | |
776 } | |
777 } else { | |
778 col = textColor; | |
779 | |
780 W_WriteText(defWin, x, y, col, val, strlen(val), | |
781 W_RegularFont); | |
782 } | |
783 x = xo + NAME_WIDTH; | |
784 W_WriteText(defWin, x, y, col, d->values[j].desc, | |
785 strlen(d->values[j].desc), W_RegularFont); | |
786 y++; | |
787 x = xo + INDENT; | |
788 break; | |
789 | |
790 case BOOL_DEF: | |
791 val = btoa(*(int *)d->variable); | |
792 W_WriteText(defWin, x, y, W_Green, val, strlen(val), | |
793 W_RegularFont); | |
794 y++; | |
795 x = xo + INDENT; | |
796 break; | |
797 default: | |
798 fprintf(stderr, "Unknown type.\n"); | |
799 break; | |
800 } | |
801 } | |
802 } else if (d->variable && *(int *)d->variable) { | |
803 W_WriteText(defWin, x, y, W_Green, (char *)*(int *)d->variable, | |
804 strlen((char *)(*(int *)d->variable)), | |
805 W_RegularFont); | |
806 } | |
807 } | |
808 | |
809 | |
810 void | |
811 showdef() | |
812 { | |
813 register i, j, x = 0, y = 0, xo = 0, yo = 0, max_desc = 0, height = 1, width = 1; | |
814 register struct def *d; | |
815 char *val; | |
816 W_Color col; | |
817 | |
818 name = getdefault("name"); | |
819 keymap = getdefault("keymap"); | |
820 /* plist = getdefault ("playerlist");*/ | |
821 cloak_chars = cloakchars; | |
822 bmap = getdefault("buttonmap"); | |
823 log_file = getdefault("logfile"); | |
824 galacticFrequent = (mapmode == 2) ? 0 : 1; | |
825 if (!saveFileName) { | |
826 saveFileName = stringDefault("saveFileName", "~/.paradisesaverc"); | |
827 saveFileName = expandFilename(saveFileName); | |
828 } | |
829 if (!defWin) | |
830 defWin = W_MakeTextWindow("xtrekrc_help", 1, 100, 174, 60, NULL, NULL, BORDER); | |
831 | |
832 for (i = 0, d = def_messages; i < DEFMESSAGES; i++, d++) { | |
833 x = xo; | |
834 y = yo; | |
835 | |
836 d->loc.x = x; | |
837 d->loc.y = y; | |
838 | |
839 W_WriteText(defWin, x, y, W_Yellow, d->name, strlen(d->name), | |
840 W_RegularFont); | |
841 x += NAME_WIDTH; | |
842 | |
843 W_WriteText(defWin, x, y, textColor, d->desc, strlen(d->desc), | |
844 W_RegularFont); | |
845 if ((int)strlen(d->desc) > max_desc) { | |
846 max_desc = strlen(d->desc); | |
847 width = MAX(width, x + max_desc); | |
848 } | |
849 y++; | |
850 x = xo + INDENT; | |
851 | |
852 if (d->type != STR_DEF) { | |
853 if (!d->values[0].desc && d->variable) { | |
854 if (d->type == SINT_DEF) | |
855 val = itos(*(int *)d->variable); | |
856 else | |
857 val = itos(d->values[0].i_value); | |
858 | |
859 W_WriteText(defWin, x, y, W_Green, val, strlen(val), | |
860 W_RegularFont); | |
861 y++; | |
862 } | |
863 for (j = 0; d->values[j].desc; j++) { | |
864 switch (d->type) { | |
865 case INT_DEF: | |
866 val = itos(d->values[j].i_value); | |
867 if (d->values[j].i_value == *(int *)d->variable) { | |
868 col = W_Green; | |
869 | |
870 W_WriteText(defWin, x, y, col, val, strlen(val), | |
871 W_RegularFont); | |
872 if (W_Mono()) { | |
873 W_WriteText(defWin, x + 1, y, col, "*", 1, | |
874 W_RegularFont); | |
875 } | |
876 } else { | |
877 col = textColor; | |
878 | |
879 W_WriteText(defWin, x, y, col, val, strlen(val), | |
880 W_RegularFont); | |
881 } | |
882 x = xo + NAME_WIDTH; | |
883 W_WriteText(defWin, x, y, col, d->values[j].desc, | |
884 strlen(d->values[j].desc), W_RegularFont); | |
885 y++; | |
886 x = xo + INDENT; | |
887 break; | |
888 | |
889 case BOOL_DEF: | |
890 val = btoa(*(int *)d->variable); | |
891 W_WriteText(defWin, x, y, W_Green, val, strlen(val), | |
892 W_RegularFont); | |
893 y++; | |
894 x = xo + INDENT; | |
895 break; | |
896 default: | |
897 fprintf(stderr, "Unknown type.\n"); | |
898 break; | |
899 } | |
900 } | |
901 } else if (d->variable && *(int *)d->variable) { | |
902 W_WriteText(defWin, x, y, W_Green, (char *)*(int *)d->variable, | |
903 strlen((char *)(*(int *)d->variable)), | |
904 W_RegularFont); | |
905 y++; | |
906 } | |
907 d->loc.rt = xo + max_desc; | |
908 d->loc.bot = y + 1; | |
909 | |
910 height = MAX(height, y); | |
911 if (y > MAX_VLINES) { | |
912 yo = 0; | |
913 xo += NAME_WIDTH + max_desc + 2; | |
914 max_desc = 0; | |
915 } else { | |
916 yo = y + 1; | |
917 } | |
918 } | |
919 | |
920 if (!W_IsMapped(defWin)) { | |
921 W_ResizeText(defWin, width, height); | |
922 W_MapWindow(defWin); | |
923 } | |
924 } | |
925 | |
926 void | |
927 def_action(ev) | |
928 W_Event *ev; | |
929 { | |
930 int i, j, x, y, line; | |
931 register struct def *d; | |
932 char buf[100]; | |
933 | |
934 x = ev->x; | |
935 y = ev->y; | |
936 W_TranslatePoints(ev->Window, &x, &y); | |
937 | |
938 for (i = 0, d = def_messages; i < DEFMESSAGES; i++, d++) { | |
939 if (y >= d->loc.y && y < d->loc.bot && | |
940 x >= d->loc.x && x < d->loc.rt) | |
941 break; /* found it! */ | |
942 } | |
943 | |
944 if (i >= DEFMESSAGES) | |
945 return; | |
946 | |
947 line = y - d->loc.y; | |
948 | |
949 switch (ev->type) { | |
950 case W_EV_BUTTON: | |
951 switch (d->type) { | |
952 case BOOL_DEF: | |
953 *(int *)d->variable = !(*(int *)d->variable); | |
954 def_redraw(d); | |
955 break; | |
956 case INT_DEF: | |
957 case SINT_DEF: | |
958 if (line == 0 || d->type == SINT_DEF) { | |
959 switch (ev->key) { | |
960 case W_LBUTTON: | |
961 (*(int *)d->variable)++; | |
962 if (!(*(int *)d->values[*(int *)d->variable].desc)) | |
963 *(int *)d->variable = 0; | |
964 break; | |
965 case W_RBUTTON: | |
966 (*(int *)d->variable)--; | |
967 if (*(int *)d->variable < 0) { | |
968 for (j = 0; d->values[j].desc; j++) | |
969 /* empty */ ; | |
970 *(int *)d->variable = j - 1; | |
971 } | |
972 break; | |
973 case W_MBUTTON: | |
974 *(int *)d->variable = 0; | |
975 break; | |
976 default: | |
977 break; | |
978 } | |
979 } else if (y < d->loc.bot) | |
980 *(int *)d->variable = line - 1; | |
981 def_redraw(d); | |
982 break; | |
983 case STR_DEF: | |
984 if (d->variable == &saveFileName) | |
985 def_write(saveFileName); | |
986 break; | |
987 default: | |
988 break; | |
989 } | |
990 } | |
991 } | |
992 | |
993 void | |
994 def_write(file) | |
995 char *file; | |
996 { | |
997 int i; | |
998 struct def *d; | |
999 FILE *f; | |
1000 | |
1001 f = fopen(file, "w"); | |
1002 | |
1003 | |
1004 for (i = 0, d = def_messages; i < DEFMESSAGES; i++, d++) { | |
1005 switch (d->type) { | |
1006 case INT_DEF: | |
1007 case SINT_DEF: | |
1008 fprintf(f, "%s: %d\n", d->name, *(int *)d->variable); | |
1009 break; | |
1010 case BOOL_DEF: | |
1011 fprintf(f, "%s: %s\n", d->name, (*(int *)d->variable ? "on" : "off")); | |
1012 break; | |
1013 case STR_DEF: | |
1014 fprintf(f, "%s: %s\n", d->name, (char *)*(int *)d->variable); | |
1015 break; | |
1016 } | |
1017 } | |
1018 | |
1019 fclose(f); | |
1020 } | |
1021 | |
1022 | |
1023 #endif |