1 /*****************************************************************************/
2 /** Copyright 1988 by Evans & Sutherland Computer Corporation, **/
3 /** Salt Lake City, Utah **/
4 /** Portions Copyright 1989 by the Massachusetts Institute of Technology **/
5 /** Cambridge, Massachusetts **/
7 /** All Rights Reserved **/
9 /** Permission to use, copy, modify, and distribute this software and **/
10 /** its documentation for any purpose and without fee is hereby **/
11 /** granted, provided that the above copyright notice appear in all **/
12 /** copies and that both that copyright notice and this permis- **/
13 /** sion notice appear in supporting documentation, and that the **/
14 /** names of Evans & Sutherland and M.I.T. not be used in advertising **/
15 /** in publicity pertaining to distribution of the software without **/
16 /** specific, written prior permission. **/
18 /** EVANS & SUTHERLAND AND M.I.T. DISCLAIM ALL WARRANTIES WITH REGARD **/
19 /** TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- **/
20 /** ABILITY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND OR **/
21 /** M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAM- **/
22 /** AGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/
23 /** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/
24 /** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/
25 /** OR PERFORMANCE OF THIS SOFTWARE. **/
26 /*****************************************************************************/
29 /***********************************************************************
31 * $XConsortium: parse.c,v 1.52 91/07/12 09:59:37 dave Exp $
33 * parse the .twmrc file
35 * 17-Nov-87 Thomas E. LaStrange File created
36 * 10-Oct-90 David M. Sternlicht Storing saved colors on root
37 ***********************************************************************/
43 #include <X11/Xmu/CharSet.h>
51 #include <X11/Xatom.h>
53 /* Submitted by Jason Gloudon */
58 #include <X11/Xmu/SysUtil.h>
61 extern void twmrc_error_prefix();
68 static char buff[BUF_LEN+1];
69 static char overflowbuff[20]; /* really only need one */
70 static int overflowlen;
71 static char **stringListSource, *currentString;
72 void put_pixel_on_root();
74 int RaiseDelay = 0; /* msec, for AutoRaise *//*RAISEDELAY*/
78 int ConstrainedMoveTime = 400; /* milliseconds, event times */
80 static int twmFileInput(), twmStringListInput();
82 int (*twmInputFunc)();
84 extern char *defTwmrc[]; /* default bindings */
86 /* Submitted by Jason Gloudon */
88 #define Resolution(pixels, mm) ((((pixels) * 100000 / (mm)) + 50) / 100)
89 #define M4_MAXDIGITS 21 /* greater than the number of digits in a long int */
90 extern Bool PrintErrorMessages;
91 char *make_m4_cmdline();
95 #ifndef NO_SOUND_SUPPORT
96 extern void SetSoundHost();
97 extern void SetSoundVolume();
100 /***********************************************************************
103 * ParseTwmrc - parse the .twmrc file
106 * filename - the filename to parse. A NULL indicates $HOME/.twmrc
108 ***********************************************************************
111 static int doparse (ifunc, srctypename, srcname)
119 /* djhjr - 9/18/03 */
120 #ifdef NEED_YYLINENO_V
124 twmInputFunc = ifunc;
130 fprintf (stderr, "%s: errors found in twm %s",
131 ProgramName, srctypename);
132 if (srcname) fprintf (stderr, " \"%s\"", srcname);
133 fprintf (stderr, "\n");
135 return (ParseError ? 0 : 1);
138 /* Changes for m4 pre-processing submitted by Jason Gloudon */
139 /* added support for user-defined parameters - djhjr - 2/20/99 */
140 #ifndef NO_M4_SUPPORT
141 int ParseTwmrc (filename, display_name, m4_preprocess, m4_option)
145 char *m4_option; /* djhjr - 2/20/99 */
147 int ParseTwmrc (filename)
153 char tmpfilename[257];
154 #ifndef NO_M4_SUPPORT
160 * If filename given, try it, else try ~/.vtwmrc.#, else try ~/.vtwmrc,
161 * else try system.vtwmrc, else try ~/.twmrc.#, else ~/.twmrc, else
162 * system.twmrc; finally using built-in defaults.
164 * This choice allows user, then system, versions of .vtwmrc, followed
165 * by user, then system, versions of .twmrc.
166 * Thus, sites that have both twm and vtwm can allow users without
167 * private .vtwmrc or .twmrc files to fall back to system-wide
168 * defaults (very important when there are many users), yet the
169 * presence of a private .twmrc file for twm will not prevent
170 * features of a system-wide .vtwmrc file from exploiting the mew
171 * features of vtwm. Submitted by Nelson H. F. Beebe
173 for (twmrc = NULL, i = 0; !twmrc && i <= 6; i++) {
175 case 0: /* -f filename */
179 case 1: /* ~/.vtwmrc.screennum */
182 (void) sprintf (tmpfilename, "%s/.vtwmrc.%d",
188 case 2: /* ~/.vtwmrc */
190 tmpfilename[HomeLen + 8] = '\0';
194 case 3: /* system.vtwmrc */
198 case 4: /* ~/.twmrc.screennum */
201 (void) sprintf (tmpfilename, "%s/.twmrc.%d",
207 case 5: /* ~/.twmrc */
209 tmpfilename[HomeLen + 7] = '\0';
213 case 6: /* system.twmrc */
218 #ifndef NO_M4_SUPPORT
220 if (m4_preprocess && (access(cp, R_OK) == 0) ) {
221 if ((m4_cmdline = make_m4_cmdline(display_name, cp, m4_option)) != NULL) {
222 twmrc = popen(m4_cmdline, "r");
227 twmrc = fopen (cp, "r");
231 twmrc = fopen (cp, "r");
235 if (cp) twmrc = fopen (cp, "r");
242 if (filename && cp != filename) {
244 "%s: unable to open twmrc file %s, using %s instead\n",
245 ProgramName, filename, cp);
247 status = doparse (twmFileInput, "file", cp);
249 #ifndef NO_M4_SUPPORT
251 m4_status = pclose (twmrc);
252 if(!WIFEXITED(m4_status) ||
253 (WIFEXITED(m4_status) && WEXITSTATUS(m4_status)) ){
255 "%s: m4 returned %d\n",
256 ProgramName, WEXITSTATUS(m4_status));
271 "%s: unable to open twmrc file %s, using built-in defaults instead\n",
272 ProgramName, filename);
274 return ParseStringList (defTwmrc);
278 int ParseStringList (sl)
281 stringListSource = sl;
283 return doparse (twmStringListInput, "string list", (char *)NULL);
287 /***********************************************************************
290 * twmFileInput - redefinition of the lex input routine for file input
293 * the next input character
295 ***********************************************************************
298 static int twmFileInput()
300 if (overflowlen) return (int) overflowbuff[--overflowlen];
304 if (fgets(buff, BUF_LEN, twmrc) == NULL)
307 /* djhjr - 9/18/03 */
308 #ifdef NEED_YYLINENO_V
315 return ((int)buff[ptr++]);
318 static int twmStringListInput()
320 if (overflowlen) return (int) overflowbuff[--overflowlen];
323 * return the character currently pointed to
326 unsigned int c = (unsigned int) *currentString++;
328 if (c) return c; /* if non-nul char */
329 currentString = *++stringListSource; /* advance to next bol */
330 return '\n'; /* but say that we hit last eol */
336 /***********************************************************************
339 * twmUnput - redefinition of the lex unput routine
342 * c - the character to push back onto the input stream
344 ***********************************************************************
350 if (overflowlen < sizeof overflowbuff) {
351 overflowbuff[overflowlen++] = (char) c;
353 twmrc_error_prefix ();
354 fprintf (stderr, "unable to unput character (%d)\n",
360 /***********************************************************************
363 * TwmOutput - redefinition of the lex output routine
366 * c - the character to print
368 ***********************************************************************
378 /**********************************************************************
380 * Parsing table and routines
382 ***********************************************************************/
384 typedef struct _TwmKeyword {
390 #define kw0_NoDefaults 1
391 #define kw0_AutoRelativeResize 2
392 #define kw0_ForceIcons 3
393 #define kw0_NoIconManagers 4
394 #define kw0_OpaqueMove 5
395 #define kw0_InterpolateMenuColors 6
396 #define kw0_NoVersion 7
397 #define kw0_SortIconManager 8
398 #define kw0_NoGrabServer 9
399 #define kw0_NoMenuShadows 10
400 #define kw0_NoRaiseOnMove 11
401 #define kw0_NoRaiseOnResize 12
402 #define kw0_NoRaiseOnDeiconify 13
403 #define kw0_DontMoveOff 14
404 #define kw0_NoBackingStore 15
405 #define kw0_NoSaveUnders 16
406 #define kw0_RestartPreviousState 17
407 #define kw0_ClientBorderWidth 18
408 #define kw0_NoTitleFocus 19
409 #define kw0_RandomPlacement 20
410 #define kw0_DecorateTransients 21
411 #define kw0_ShowIconManager 22
412 #define kw0_NoCaseSensitive 23
413 #define kw0_NoRaiseOnWarp 24
414 #define kw0_WarpUnmapped 25
415 #define kw0_DeIconifyToScreen 26
416 #define kw0_WarpWindows 27
417 #define kw0_SnapRealScreen 28
418 #define kw0_NotVirtualGeometries 29
419 #define kw0_OldFashionedTwmWindowsMenu 30 /* RFB */
422 #define kw0_UseRealScreenBorder 31 * RFB *
425 #define kw0_StayUpMenus 32
426 #define kw0_NaturalAutopanBehavior 33 /* DSE */
427 #define kw0_EnhancedExecResources 34 /* DSE */
428 #define kw0_RightHandSidePulldownMenus 35 /* DSE */
429 #define kw0_LessRandomZoomZoom 36 /* DSE */
430 #define kw0_PrettyZoom 37 /* DSE */
432 #define kw0_NoDefaultTitleButtons 38 /* DSE */
433 #define kw0_NoDefaultMouseOrKeyboardBindings 39 /* DSE */
435 #define kw0_StickyAbove 40 /* DSE */
436 #define kw0_DontInterpolateTitles 41 /* DSE */
437 #define kw0_FixTransientVirtualGeometries 42 /* DSE */
439 #define kw0_WarpToTransients 43 /* PF */
440 #define kw0_NoIconifyIconManagers 44 /* PF */
441 #define kw0_StayUpOptionalMenus 45 /* PF */
443 #define kw0_WarpSnug 46 /* DSE */
445 #define kw0_PointerPlacement 47 /* cg */
446 /* obsoleted by the *BevelWidth resources - djhjr - 8/11/98
448 #define kw0_Use3DMenus 47
449 #define kw0_Use3DTitles 48
450 #define kw0_Use3DIconManagers 49
451 #define kw0_Use3DBorders 50
454 /* obsoleted by the ":xpm:*" built-in pixmaps - djhjr - 10/26/02
456 #define kw0_SunkFocusWindowTitle 51
459 /* djhjr - 6/25/96 */
460 #define kw0_ShallowReliefWindowButton 52
462 /* djhjr - 9/21/96 */
463 #define kw0_ButtonColorIsFrame 53
466 #define kw0_FixManagedVirtualGeometries 54
468 /* djhjr - 1/19/98 */
469 #define kw0_BeNiceToColormap 55
471 /* djhjr - 4/17/98 */
472 #define kw0_VirtualReceivesMotionEvents 56
473 #define kw0_VirtualSendsMotionEvents 57
475 /* obsoleted by the *BevelWidth resources - djhjr - 8/11/98
477 #define kw0_Use3DIcons 58
480 /* djhjr - 5/27/98 */
481 #define kw0_NoIconManagerFocus 59
483 /* djhjr - 12/14/98 */
484 #define kw0_StaticIconPositions 60
486 /* for rader - djhjr - 2/9/99 */
487 #define kw0_NoPrettyTitles 61
489 /* djhjr - 6/22/99 */
490 #define kw0_DontDeiconifyTransients 62
492 /* submitted by Ugen Antsilevitch - 5/28/00 */
493 #define kw0_WarpVisible 63
495 /* djhjr - 10/2/01 */
496 #define kw0_StrictIconManager 64
498 /* djhjr - 10/11/01 */
499 #define kw0_ZoomZoom 65
501 /* djhjr - 10/20/02 */
502 #define kw0_NoBorderDecorations 66
504 /* djhjr - 11/3/03 */
505 #define kw0_RaiseOnStart 67
508 #define kws_UsePPosition 1
510 #define kws_IconFont 2
511 #define kws_ResizeFont 3
512 #define kws_MenuFont 4
513 #define kws_TitleFont 5
514 #define kws_IconManagerFont 6
515 #define kws_UnknownIcon 7
516 #define kws_IconDirectory 8
517 #define kws_MaxWindowSize 9
518 #define kws_VirtualFont 10
519 #define kws_DoorFont 11
520 #define kws_MenuTitleFont 12 /* DSE */
522 /* djhjr - 5/10/96 */
523 #define kws_InfoFont 13
525 /* djhjr - 5/15/96 */
526 #define kws_ResizeRegion 14
528 /* djhjr - 6/22/01 */
529 #ifndef NO_SOUND_SUPPORT
530 #define kws_SoundHost 15
533 #define kwn_ConstrainedMoveTime 1
534 #define kwn_MoveDelta 2
535 #define kwn_XorValue 3
536 #define kwn_FramePadding 4
537 #define kwn_TitlePadding 5
538 #define kwn_ButtonIndent 6
539 #define kwn_BorderWidth 7
540 #define kwn_IconBorderWidth 8
541 #define kwn_TitleButtonBorderWidth 9
542 #define kwn_PanDistanceX 10
543 #define kwn_PanDistanceY 11
544 #define kwn_AutoPan 12
545 #define kwn_RaiseDelay 13 /* RAISEDELAY */
546 #define kwn_AutoPanBorderWidth 14 /* DSE */
547 #define kwn_AutoPanExtraWarp 15 /* DSE */
548 #define kwn_RealScreenBorderWidth 16 /* DSE */
549 #define kwn_AutoPanWarpWithRespectToRealScreen 17 /* DSE */
553 #define kwn_ThreeDBorderWidth 18
556 /* djhjr - 4/18/96 */
557 #define kwn_ClearBevelContrast 19
558 #define kwn_DarkBevelContrast 20
561 #define kwn_BorderBevelWidth 21
562 #define kwn_IconManagerBevelWidth 22
563 #define kwn_InfoBevelWidth 23
564 #define kwn_MenuBevelWidth 24
565 #define kwn_TitleBevelWidth 25
567 /* djhjr - 8/11/98 */
568 #define kwn_IconBevelWidth 26
569 #define kwn_ButtonBevelWidth 27
572 #define kwn_DoorBevelWidth 28
573 #define kwn_VirtualDesktopBevelWidth 29
576 #define kwn_PanResistance 30
578 /* djhjr - 5/22/00 */
579 #define kwn_MenuScrollBorderWidth 31
580 #define kwn_MenuScrollJump 32
582 /* djhjr - 6/22/01 */
583 #ifndef NO_SOUND_SUPPORT
584 #define kwn_SoundVolume 33
586 #define kwn_PauseOnExit 34
587 #define kwn_PauseOnQuit 35
589 #define kwcl_BorderColor 1
590 #define kwcl_IconManagerHighlight 2
591 #define kwcl_BorderTileForeground 3
592 #define kwcl_BorderTileBackground 4
593 #define kwcl_TitleForeground 5
594 #define kwcl_TitleBackground 6
595 #define kwcl_IconForeground 7
596 #define kwcl_IconBackground 8
597 #define kwcl_IconBorderColor 9
598 #define kwcl_IconManagerForeground 10
599 #define kwcl_IconManagerBackground 11
600 #define kwcl_VirtualDesktopBackground 12
601 #define kwcl_VirtualDesktopForeground 13
602 #define kwcl_VirtualDesktopBorder 14
603 #define kwcl_DoorForeground 15
604 #define kwcl_DoorBackground 16
606 #define kwc_DefaultForeground 1
607 #define kwc_DefaultBackground 2
608 #define kwc_MenuForeground 3
609 #define kwc_MenuBackground 4
610 #define kwc_MenuTitleForeground 5
611 #define kwc_MenuTitleBackground 6
612 #define kwc_MenuShadowColor 7
613 #define kwc_VirtualForeground 8 /*RFB VCOLOR*/
614 #define kwc_VirtualBackground 9 /*RFB VCOLOR*/
615 #define kwc_RealScreenBackground 10 /* RFB 4/92 */
616 #define kwc_RealScreenForeground 11 /* RFB 4/92 */
618 /* djhjr - 10/20/01 */
619 #define kwm_Name LTYPE_NAME
620 #define kwm_ResName LTYPE_RES_NAME
621 #define kwm_ResClass LTYPE_RES_CLASS
624 * The following is sorted alphabetically according to name (which must be
625 * in lowercase and only contain the letters a-z). It is fed to a binary
626 * search to parse keywords.
628 static TwmKeyword keytable[] = {
631 /* djhjr - 4/26/99 */
632 { "appletregion", APPLET_REGION, 0 },
634 { "autopan", NKEYWORD, kwn_AutoPan },
635 { "autopanborderwidth", NKEYWORD, kwn_AutoPanBorderWidth }, /* DSE */
636 { "autopanextrawarp", NKEYWORD, kwn_AutoPanExtraWarp }, /* DSE */
637 { "autopanwarpwithrespecttorealscreen", NKEYWORD,
638 kwn_AutoPanWarpWithRespectToRealScreen }, /* DSE */
639 { "autoraise", AUTO_RAISE, 0 },
640 { "autoraisedelay", NKEYWORD, kwn_RaiseDelay },/*RAISEDELAY*/
641 { "autorelativeresize", KEYWORD, kw0_AutoRelativeResize },
643 /* djhjr - 1/19/98 */
644 { "benicetocolormap", KEYWORD, kw0_BeNiceToColormap },
647 { "borderbevelwidth", NKEYWORD, kwn_BorderBevelWidth },
649 { "bordercolor", CLKEYWORD, kwcl_BorderColor },
650 { "bordertilebackground", CLKEYWORD, kwcl_BorderTileBackground },
651 { "bordertileforeground", CLKEYWORD, kwcl_BorderTileForeground },
652 { "borderwidth", NKEYWORD, kwn_BorderWidth },
653 { "button", BUTTON, 0 },
655 /* djhjr - 8/11/98 */
656 { "buttonbevelwidth", NKEYWORD, kwn_ButtonBevelWidth },
658 /* djhjr - 9/21/96 */
659 { "buttoncolorisframe", KEYWORD, kw0_ButtonColorIsFrame },
661 { "buttonindent", SNKEYWORD, kwn_ButtonIndent },
663 { "center", JKEYWORD, J_CENTER },
665 /* djhjr - 4/19/96 */
666 { "clearbevelcontrast", NKEYWORD, kwn_ClearBevelContrast },
668 { "clientborderwidth", KEYWORD, kw0_ClientBorderWidth },
669 { "color", COLOR, 0 },
670 { "constrainedmovetime", NKEYWORD, kwn_ConstrainedMoveTime },
671 { "control", CONTROL, 0 },
672 { "cursors", CURSORS, 0 },
673 { "d", VIRTUAL_WIN, 0 },
675 /* djhjr - 4/19/96 */
676 { "darkbevelcontrast", NKEYWORD, kwn_DarkBevelContrast },
678 { "decoratetransients", KEYWORD, kw0_DecorateTransients },
679 { "defaultbackground", CKEYWORD, kwc_DefaultBackground },
680 { "defaultforeground", CKEYWORD, kwc_DefaultForeground },
681 { "defaultfunction", DEFAULT_FUNCTION, 0 },
682 { "deiconifytoscreen", KEYWORD, kw0_DeIconifyToScreen },
683 { "desktop", VIRTUAL_WIN, 0 },
684 { "desktopdisplaybackground",
685 CLKEYWORD, kwcl_VirtualDesktopBackground },
686 { "desktopdisplayborder",
687 CLKEYWORD, kwcl_VirtualDesktopBorder },
688 { "desktopdisplayforeground",
689 CLKEYWORD, kwcl_VirtualDesktopForeground },
690 { "destroy", KILL, 0 },
692 /* djhjr - 6/22/99 */
693 { "dontdeiconifytransients", KEYWORD, kw0_DontDeiconifyTransients },
695 { "donticonifybyunmapping", DONT_ICONIFY_BY_UNMAPPING, 0 },
696 { "dontinterpolatetitles", KEYWORD, kw0_DontInterpolateTitles },
697 { "dontmoveoff", KEYWORD, kw0_DontMoveOff },
698 { "dontshowindisplay", NO_SHOW_IN_DISPLAY, 0 },
700 /* Submitted by Erik Agsjo <erik.agsjo@aktiedirekt.com> */
701 { "dontshowintwmwindows", NO_SHOW_IN_TWMWINDOWS, 0 },
702 /* djhjr - 6/25/98 */
703 { "dontshowinvtwmwindows", NO_SHOW_IN_TWMWINDOWS, 0 },
705 { "dontsqueezetitle", DONT_SQUEEZE_TITLE, 0 },
707 { "doorbackground", CLKEYWORD, kwcl_DoorBackground },
710 { "doorbevelwidth", NKEYWORD, kwn_DoorBevelWidth },
712 { "doorfont", SKEYWORD, kws_DoorFont },
713 { "doorforeground", CLKEYWORD, kwcl_DoorForeground },
714 { "doors", DOORS, 0 },
715 { "east", DKEYWORD, D_EAST },
716 { "enhancedexecresources", KEYWORD, kw0_EnhancedExecResources }, /* DSE */
718 { "f.autopan", FKEYWORD, F_AUTOPAN },/*RFB F_AUTOPAN*/
719 { "f.autoraise", FKEYWORD, F_AUTORAISE },
720 { "f.backiconmgr", FKEYWORD, F_BACKICONMGR },
721 { "f.beep", FKEYWORD, F_BEEP },
723 /* Submitted by Seth Robertson - 9/9/02 */
724 { "f.bindbuttons", FKEYWORD, F_BINDBUTTONS },
725 { "f.bindkeys", FKEYWORD, F_BINDKEYS },
727 { "f.bottomzoom", FKEYWORD, F_BOTTOMZOOM },
728 { "f.circledown", FKEYWORD, F_CIRCLEDOWN },
729 { "f.circleup", FKEYWORD, F_CIRCLEUP },
730 { "f.colormap", FSKEYWORD, F_COLORMAP },
731 { "f.cut", FSKEYWORD, F_CUT },
732 { "f.cutfile", FKEYWORD, F_CUTFILE },
733 { "f.deiconify", FKEYWORD, F_DEICONIFY },
734 { "f.delete", FKEYWORD, F_DELETE },
735 { "f.deletedoor", FKEYWORD, F_DELETEDOOR },
736 { "f.deltastop", FKEYWORD, F_DELTASTOP },
737 { "f.destroy", FKEYWORD, F_DESTROY },
738 { "f.downiconmgr", FKEYWORD, F_DOWNICONMGR },
739 { "f.enterdoor", FKEYWORD, F_ENTERDOOR },
740 { "f.exec", FSKEYWORD, F_EXEC },
741 { "f.file", FSKEYWORD, F_FILE },
742 { "f.focus", FKEYWORD, F_FOCUS },
743 { "f.forcemove", FKEYWORD, F_FORCEMOVE },
744 { "f.forwiconmgr", FKEYWORD, F_FORWICONMGR },
745 { "f.fullzoom", FKEYWORD, F_FULLZOOM },
746 { "f.function", FSKEYWORD, F_FUNCTION },
747 { "f.hbzoom", FKEYWORD, F_BOTTOMZOOM },
748 { "f.hidedesktopdisplay", FKEYWORD, F_HIDEDESKTOP },
749 { "f.hideiconmgr", FKEYWORD, F_HIDELIST },
750 { "f.horizoom", FKEYWORD, F_HORIZOOM },
751 { "f.htzoom", FKEYWORD, F_TOPZOOM },
752 { "f.hzoom", FKEYWORD, F_HORIZOOM },
753 { "f.iconify", FKEYWORD, F_ICONIFY },
754 { "f.identify", FKEYWORD, F_IDENTIFY },
755 { "f.lefticonmgr", FKEYWORD, F_LEFTICONMGR },
756 { "f.leftzoom", FKEYWORD, F_LEFTZOOM },
757 { "f.lower", FKEYWORD, F_LOWER },
758 { "f.menu", FSKEYWORD, F_MENU },
759 { "f.move", FKEYWORD, F_MOVE },
760 { "f.movescreen", FKEYWORD, F_MOVESCREEN },
761 { "f.nail", FKEYWORD, F_NAIL },
762 { "f.nailedabove", FKEYWORD, F_STICKYABOVE }, /* DSE */
764 /* djhjr - 4/20/98 */
765 { "f.namedoor", FKEYWORD, F_NAMEDOOR },
767 { "f.newdoor", FKEYWORD, F_NEWDOOR },
768 { "f.nexticonmgr", FKEYWORD, F_NEXTICONMGR },
769 { "f.nop", FKEYWORD, F_NOP },
770 { "f.pandown", FSKEYWORD, F_PANDOWN },
771 { "f.panleft", FSKEYWORD, F_PANLEFT },
772 { "f.panright", FSKEYWORD, F_PANRIGHT },
773 { "f.panup", FSKEYWORD, F_PANUP },
775 /* djhjr - 11/15/02 */
776 { "f.playsound", FSKEYWORD, F_PLAYSOUND },
778 { "f.previconmgr", FKEYWORD, F_PREVICONMGR },
779 { "f.quit", FKEYWORD, F_QUIT },
780 { "f.raise", FKEYWORD, F_RAISE },
781 { "f.raiselower", FKEYWORD, F_RAISELOWER },
782 { "f.refresh", FKEYWORD, F_REFRESH },
783 { "f.resetdesktop", FKEYWORD, F_RESETDESKTOP },
784 { "f.resize", FKEYWORD, F_RESIZE },
785 { "f.restart", FKEYWORD, F_RESTART },
786 { "f.righticonmgr", FKEYWORD, F_RIGHTICONMGR },
787 { "f.rightzoom", FKEYWORD, F_RIGHTZOOM },
788 { "f.ring", FKEYWORD, F_RING },
789 { "f.saveyourself", FKEYWORD, F_SAVEYOURSELF },
791 /* djhjr - 4/30/96 */
792 { "f.separator", FKEYWORD, F_SEPARATOR },
794 { "f.setrealscreen", FSKEYWORD, F_SETREALSCREEN },
795 { "f.showdesktopdisplay", FKEYWORD, F_SHOWDESKTOP },
796 { "f.showiconmgr", FKEYWORD, F_SHOWLIST },
797 { "f.snap", FKEYWORD, F_SNAP },
798 { "f.snaprealscreen", FKEYWORD, F_SNAPREALSCREEN },
799 { "f.snugdesktop", FKEYWORD, F_SNUGDESKTOP },
800 { "f.snugwindow", FKEYWORD, F_SNUGWINDOW },
801 { "f.sorticonmgr", FKEYWORD, F_SORTICONMGR },
803 /* djhjr - 6/22/01 */
804 #ifndef NO_SOUND_SUPPORT
805 { "f.sounds", FKEYWORD, F_SOUNDS },
808 { "f.source", FSKEYWORD, F_BEEP }, /* XXX - don't work */
809 { "f.squeezecenter", FKEYWORD, F_SQUEEZECENTER },/*RFB SQUEEZE*/
810 { "f.squeezeleft", FKEYWORD, F_SQUEEZELEFT },/*RFB SQUEEZE*/
811 { "f.squeezeright", FKEYWORD, F_SQUEEZERIGHT },/*RFB SQUEEZE*/
813 /* djhjr - 7/15/98 */
814 { "f.startwm", FSKEYWORD, F_STARTWM },
816 /* djhjr - 12/14/98 */
817 { "f.staticiconpositions", FKEYWORD, F_STATICICONPOSITIONS },
819 { "f.stick", FKEYWORD, F_NAIL },
820 { "f.stickyabove", FKEYWORD, F_STICKYABOVE }, /* DSE */
822 /* djhjr - 10/2/01 */
823 { "f.stricticonmgr", FKEYWORD, F_STRICTICONMGR },
825 { "f.title", FKEYWORD, F_TITLE },
826 { "f.topzoom", FKEYWORD, F_TOPZOOM },
827 { "f.twmrc", FKEYWORD, F_RESTART },
829 /* Submitted by Seth Robertson - 9/9/02 */
830 { "f.unbindbuttons", FKEYWORD, F_UNBINDBUTTONS },
831 { "f.unbindkeys", FKEYWORD, F_UNBINDKEYS },
833 { "f.unfocus", FKEYWORD, F_UNFOCUS },
834 { "f.upiconmgr", FKEYWORD, F_UPICONMGR },
835 { "f.version", FKEYWORD, F_VERSION },
836 { "f.virtualgeometries", FKEYWORD, F_VIRTUALGEOMETRIES },
837 { "f.vlzoom", FKEYWORD, F_LEFTZOOM },
838 { "f.vrzoom", FKEYWORD, F_RIGHTZOOM },
839 { "f.warp", FKEYWORD, F_WARP }, /* PF */
840 { "f.warpclassnext", FSKEYWORD, F_WARPCLASSNEXT }, /* PF */
841 { "f.warpclassprev", FSKEYWORD, F_WARPCLASSPREV }, /* PF */
842 { "f.warpring", FSKEYWORD, F_WARPRING },
844 /* djhjr - 5/30/00 */
845 { "f.warpsnug", FKEYWORD, F_WARPSNUG },
847 { "f.warpto", FSKEYWORD, F_WARPTO },
848 { "f.warptoiconmgr", FSKEYWORD, F_WARPTOICONMGR },
849 { "f.warptonewest", FKEYWORD, F_WARPTONEWEST }, /* PF */
850 { "f.warptoscreen", FSKEYWORD, F_WARPTOSCREEN },
852 /* submitted by Ugen Antsilevitch - 5/28/00 */
853 { "f.warpvisible", FKEYWORD, F_WARPVISIBLE },
855 { "f.winrefresh", FKEYWORD, F_WINREFRESH },
856 { "f.zoom", FKEYWORD, F_ZOOM },
857 { "f.zoomzoom", FKEYWORD, F_ZOOMZOOM },
860 { "fixmanagedvirtualgeometries", KEYWORD, kw0_FixManagedVirtualGeometries },
862 { "fixtransientvirtualgeometries", KEYWORD,
863 kw0_FixTransientVirtualGeometries }, /* DSE */
864 { "forceicons", KEYWORD, kw0_ForceIcons },
865 { "frame", FRAME, 0 },
866 { "framepadding", NKEYWORD, kwn_FramePadding },
867 { "function", FUNCTION, 0 },
870 { "iconbackground", CLKEYWORD, kwcl_IconBackground },
872 /* djhjr - 8/11/98 */
873 { "iconbevelwidth", NKEYWORD, kwn_IconBevelWidth },
875 { "iconbordercolor", CLKEYWORD, kwcl_IconBorderColor },
876 { "iconborderwidth", NKEYWORD, kwn_IconBorderWidth },
877 { "icondirectory", SKEYWORD, kws_IconDirectory },
878 { "iconfont", SKEYWORD, kws_IconFont },
879 { "iconforeground", CLKEYWORD, kwcl_IconForeground },
880 { "iconifybyunmapping", ICONIFY_BY_UNMAPPING, 0 },
881 { "iconmanagerbackground", CLKEYWORD, kwcl_IconManagerBackground },
884 { "iconmanagerbevelwidth", NKEYWORD, kwn_IconManagerBevelWidth },
886 { "iconmanagerdontshow", ICONMGR_NOSHOW, 0 },
887 { "iconmanagerfont", SKEYWORD, kws_IconManagerFont },
888 { "iconmanagerforeground", CLKEYWORD, kwcl_IconManagerForeground },
889 { "iconmanagergeometry", ICONMGR_GEOMETRY, 0 },
890 { "iconmanagerhighlight", CLKEYWORD, kwcl_IconManagerHighlight },
892 /* djhjr - 10/30/02 */
893 { "iconmanagerpixmap", ICONMGRICONMAP, 0 },
895 { "iconmanagers", ICONMGRS, 0 },
896 { "iconmanagershow", ICONMGR_SHOW, 0 },
897 { "iconmgr", ICONMGR, 0 },
898 { "iconregion", ICON_REGION, 0 },
899 { "icons", ICONS, 0 },
901 /* djhjr - 9/10/03 */
902 { "ignoremodifiers", IGNORE_MODS, 0 },
905 { "infobevelwidth", NKEYWORD, kwn_InfoBevelWidth },
907 /* djhjr - 5/10/96 */
908 { "infofont", SKEYWORD, kws_InfoFont },
910 { "interpolatemenucolors", KEYWORD, kw0_InterpolateMenuColors },
912 { "left", JKEYWORD, J_LEFT },
913 { "lefttitlebutton", LEFT_TITLEBUTTON, 0 },
914 { "lessrandomzoomzoom", KEYWORD, kw0_LessRandomZoomZoom }, /* DSE */
917 { "maketitle", MAKE_TITLE, 0 },
918 { "maxwindowsize", SKEYWORD, kws_MaxWindowSize },
920 { "menubackground", CKEYWORD, kwc_MenuBackground },
923 { "menubevelwidth", NKEYWORD, kwn_MenuBevelWidth },
925 { "menufont", SKEYWORD, kws_MenuFont },
926 { "menuforeground", CKEYWORD, kwc_MenuForeground },
928 /* djhjr - 10/30/02 */
929 { "menuiconpixmap", MENUICONMAP, 0 },
931 /* djhjr - 5/22/00 */
932 { "menuscrollborderwidth", NKEYWORD, kwn_MenuScrollBorderWidth },
933 { "menuscrolljump", NKEYWORD, kwn_MenuScrollJump },
935 { "menushadowcolor", CKEYWORD, kwc_MenuShadowColor },
936 { "menutitlebackground", CKEYWORD, kwc_MenuTitleBackground },
937 { "menutitlefont", SKEYWORD, kws_MenuTitleFont }, /* DSE */
938 { "menutitleforeground", CKEYWORD, kwc_MenuTitleForeground },
940 { "mod", META, 0 }, /* fake it */
941 { "monochrome", MONOCHROME, 0 },
943 { "movedelta", NKEYWORD, kwn_MoveDelta },
944 { "nailedabove", KEYWORD, kw0_StickyAbove }, /* DSE */
945 { "naileddown", NAILEDDOWN, 0},
947 /* djhjr - 10/20/01 */
948 { "name", MKEYWORD, kwm_Name },
950 { "naturalautopanbehavior", KEYWORD,
951 kw0_NaturalAutopanBehavior }, /* DSE */
952 { "nobackingstore", KEYWORD, kw0_NoBackingStore },
954 /* submitted by Tim Wiess - 8/23/02 */
955 { "noborder", NO_BORDER, 0 },
957 /* djhjr - 10/20/02 */
958 { "noborderdecorations", KEYWORD, kw0_NoBorderDecorations },
960 { "nocasesensitive", KEYWORD, kw0_NoCaseSensitive },
961 { "nodefaultmouseorkeyboardbindings", KEYWORD,
962 kw0_NoDefaultMouseOrKeyboardBindings }, /* DSE */
963 { "nodefaults", KEYWORD, kw0_NoDefaults },
964 { "nodefaulttitlebuttons", KEYWORD, kw0_NoDefaultTitleButtons }, /* DSE */
965 { "nograbserver", KEYWORD, kw0_NoGrabServer },
966 { "nohighlight", NO_HILITE, 0 },
967 { "noiconifyiconmanagers", KEYWORD, kw0_NoIconifyIconManagers }, /* PF */
969 /* djhjr - 5/27/98 */
970 { "noiconmanagerfocus", KEYWORD, kw0_NoIconManagerFocus },
972 /* djhjr - 1/27/98 */
973 { "noiconmanagerhighlight", NO_ICONMGR_HILITE, 0 },
975 { "noiconmanagers", KEYWORD, kw0_NoIconManagers },
976 { "nomenushadows", KEYWORD, kw0_NoMenuShadows },
979 { "noopaquemove", NO_OPAQUE_MOVE, 0 },
980 { "noopaqueresize", NO_OPAQUE_RESIZE, 0 },
982 /* for rader - djhjr - 2/9/99 */
983 { "noprettytitles", KEYWORD, kw0_NoPrettyTitles },
985 { "noraiseondeiconify", KEYWORD, kw0_NoRaiseOnDeiconify },
986 { "noraiseonmove", KEYWORD, kw0_NoRaiseOnMove },
987 { "noraiseonresize", KEYWORD, kw0_NoRaiseOnResize },
988 { "noraiseonwarp", KEYWORD, kw0_NoRaiseOnWarp },
989 { "north", DKEYWORD, D_NORTH },
990 { "nosaveunders", KEYWORD, kw0_NoSaveUnders },
991 { "nostackmode", NO_STACKMODE, 0 },
992 { "notitle", NO_TITLE, 0 },
993 { "notitlefocus", KEYWORD, kw0_NoTitleFocus },
994 { "notitlehighlight", NO_TITLE_HILITE, 0 },
995 { "notvirtualgeometries", KEYWORD, kw0_NotVirtualGeometries },
996 { "noversion", KEYWORD, kw0_NoVersion },
998 /* submitted by Jonathan Paisley - 10/27/02 */
999 { "nowindowring", NO_WINDOW_RING, 0 },
1001 { "oldfashionedtwmwindowsmenu", KEYWORD,
1002 kw0_OldFashionedTwmWindowsMenu },/*RFB*/
1004 /* djhjr - 6/25/98 */
1005 { "oldfashionedvtwmwindowsmenu", KEYWORD,
1006 kw0_OldFashionedTwmWindowsMenu },/*RFB*/
1009 { "opaquemove", KEYWORD, kw0_OpaqueMove },
1011 { "opaquemove", OPAQUE_MOVE, 0 },
1013 /* djhjr - 4/7/98 */
1014 { "opaqueresize", OPAQUE_RESIZE, 0 },
1016 { "pandistancex", NKEYWORD, kwn_PanDistanceX },
1017 { "pandistancey", NKEYWORD, kwn_PanDistanceY },
1019 /* djhjr - 4/7/98 */
1020 { "panresistance", NKEYWORD, kwn_PanResistance },
1022 /* djhjr - 6/22/01 */
1023 { "pauseonexit", NKEYWORD, kwn_PauseOnExit },
1024 { "pauseonquit", NKEYWORD, kwn_PauseOnQuit },
1026 { "pixmaps", PIXMAPS, 0 },
1027 { "pointerplacement", KEYWORD, kw0_PointerPlacement },
1028 { "prettyzoom", KEYWORD, kw0_PrettyZoom }, /* DSE */
1030 { "raisedelay", NKEYWORD, kwn_RaiseDelay },/*RAISEDELAY*/
1032 /* djhjr - 11/3/03 */
1033 { "raiseonstart", KEYWORD, kw0_RaiseOnStart },
1035 { "randomplacement", KEYWORD, kw0_RandomPlacement },
1036 { "realscreenbackground", CKEYWORD, kwc_RealScreenBackground },/*RFB 4/92*/
1037 { "realscreenborderwidth", NKEYWORD, kwn_RealScreenBorderWidth }, /* DSE */
1038 { "realscreenforeground", CKEYWORD, kwc_RealScreenForeground },/*RFB 4/92*/
1039 { "realscreenpixmap", REALSCREENMAP, 0 },/*RFB PIXMAP*/
1041 /* djhjr - 10/20/01 */
1042 { "resclass", MKEYWORD, kwm_ResClass },
1044 { "resize", RESIZE, 0 },
1045 { "resizefont", SKEYWORD, kws_ResizeFont },
1047 /* djhjr - 5/15/96 */
1048 { "resizeregion", SKEYWORD, kws_ResizeRegion },
1050 /* djhjr - 10/20/01 */
1051 { "resname", MKEYWORD, kwm_ResName },
1053 { "restartpreviousstate", KEYWORD, kw0_RestartPreviousState },
1054 { "rhspulldownmenus", KEYWORD, kw0_RightHandSidePulldownMenus }, /* DSE */
1055 { "right", JKEYWORD, J_RIGHT },
1056 { "righthandsidepulldownmenus", KEYWORD, kw0_RightHandSidePulldownMenus }, /* DSE */
1057 { "righttitlebutton", RIGHT_TITLEBUTTON, 0 },
1058 { "root", ROOT, 0 },
1060 { "savecolor", SAVECOLOR, 0},
1061 { "select", SELECT, 0 },
1063 /* djhjr - 6/25/96 */
1064 { "shallowreliefwindowbutton", KEYWORD, kw0_ShallowReliefWindowButton },
1066 { "shift", SHIFT, 0 },
1067 { "showiconmanager", KEYWORD, kw0_ShowIconManager },
1068 { "snaprealscreen", KEYWORD, kw0_SnapRealScreen },
1069 { "sorticonmanager", KEYWORD, kw0_SortIconManager },
1071 /* djhjr - 6/22/01 */
1072 #ifndef NO_SOUND_SUPPORT
1073 { "soundhost", SKEYWORD, kws_SoundHost },
1074 { "sounds", SOUNDS, 0 },
1075 { "soundvolume", NKEYWORD, kwn_SoundVolume },
1078 { "south", DKEYWORD, D_SOUTH },
1079 { "squeezetitle", SQUEEZE_TITLE, 0 },
1080 { "starticonified", START_ICONIFIED, 0 },
1082 /* djhjr - 12/14/98 */
1083 { "staticiconpositions", KEYWORD, kw0_StaticIconPositions },
1085 { "stayupmenus", KEYWORD, kw0_StayUpMenus },
1086 { "stayupoptionalmenus", KEYWORD, kw0_StayUpOptionalMenus }, /* PF */
1087 { "sticky", NAILEDDOWN, 0 },/*RFB*/
1088 { "stickyabove", KEYWORD, kw0_StickyAbove }, /* DSE */
1090 /* djhjr - 10/2/01 */
1091 { "stricticonmanager", KEYWORD, kw0_StrictIconManager },
1093 /* obsoleted by the ":xpm:*" built-in pixmaps - djhjr - 10/26/02
1095 { "sunkfocuswindowtitle", KEYWORD, kw0_SunkFocusWindowTitle },
1102 { "threedborderwidth", NKEYWORD, kwn_ThreeDBorderWidth },
1105 { "title", TITLE, 0 },
1106 { "titlebackground", CLKEYWORD, kwcl_TitleBackground },
1108 /* djhjr - 5/2/98 */
1109 { "titlebevelwidth", NKEYWORD, kwn_TitleBevelWidth },
1111 { "titlebuttonborderwidth", NKEYWORD, kwn_TitleButtonBorderWidth },
1112 { "titlefont", SKEYWORD, kws_TitleFont },
1113 { "titleforeground", CLKEYWORD, kwcl_TitleForeground },
1114 { "titlehighlight", TITLE_HILITE, 0 },
1115 { "titlepadding", NKEYWORD, kwn_TitlePadding },
1116 { "unknownicon", SKEYWORD, kws_UnknownIcon },
1118 { "usepposition", SKEYWORD, kws_UsePPosition },
1120 { "usepposition", USE_PPOSITION, 0 },
1122 /* djhjr - 2/15/99 - this is dumb - if RealScreenBorderWidth is defined, use it!
1123 { "userealscreenborder", KEYWORD, kw0_UseRealScreenBorder }, *RFB*
1126 /* obsoleted by the *BevelWidth resources - djhjr - 8/11/98
1128 { "usethreedborders", KEYWORD, kw0_Use3DBorders },
1129 { "usethreediconmanagers", KEYWORD, kw0_Use3DIconManagers },
1132 { "usethreedicons", KEYWORD, kw0_Use3DIcons },
1134 { "usethreedmenus", KEYWORD, kw0_Use3DMenus },
1135 { "usethreedtitles", KEYWORD, kw0_Use3DTitles },
1138 { "v", VIRTUAL, 0 },
1139 { "virtual", VIRTUAL, 0 },
1140 { "virtualbackground", CKEYWORD, kwc_VirtualBackground },/*RFB VCOLOR*/
1141 { "virtualbackgroundpixmap", VIRTUALMAP, 0 },/*RFB PIXMAP*/
1142 { "virtualdesktop", VIRTUALDESKTOP, 0 },
1144 /* djhjr - 2/7/99 */
1145 { "virtualdesktopbevelwidth", NKEYWORD, kwn_VirtualDesktopBevelWidth },
1147 { "virtualdesktopfont", SKEYWORD, kws_VirtualFont },
1148 { "virtualforeground", CKEYWORD, kwc_VirtualForeground },/*RFB VCOLOR*/
1150 /* djhjr - 4/17/98 */
1151 { "virtualreceivesmotionevents", KEYWORD,
1152 kw0_VirtualReceivesMotionEvents },
1153 { "virtualsendsmotionevents", KEYWORD,
1154 kw0_VirtualSendsMotionEvents },
1157 { "wait", WAIT, 0 },
1159 /* djhjr - 10/16/02 */
1160 { "warpcentered", WARP_CENTERED, 0 },
1162 { "warpcursor", WARP_CURSOR, 0 },
1163 { "warpsnug", KEYWORD, kw0_WarpSnug }, /* DSE */
1164 { "warptotransients", KEYWORD, kw0_WarpToTransients }, /* PF */
1165 { "warpunmapped", KEYWORD, kw0_WarpUnmapped },
1167 /* submitted by Ugen Antsilevitch - 5/28/00 */
1168 { "warpvisible", KEYWORD, kw0_WarpVisible },
1170 { "warpwindows", KEYWORD, kw0_WarpWindows },
1171 { "west", DKEYWORD, D_WEST },
1172 { "window", WINDOW, 0 },
1173 { "windowfunction", WINDOW_FUNCTION, 0 },
1174 { "windowring", WINDOW_RING, 0 },
1175 { "xorvalue", NKEYWORD, kwn_XorValue },
1176 { "zoom", ZOOM, 0 },
1178 /* djhjr - 10/11/01 */
1179 { "zoomzoom", KEYWORD, kw0_ZoomZoom },
1182 static int numkeywords = (sizeof(keytable)/sizeof(keytable[0]));
1184 int parse_keyword (s, nump)
1188 register int lower = 0, upper = numkeywords - 1;
1190 XmuCopyISOLatin1Lowered (s, s);
1191 while (lower <= upper) {
1192 int middle = (lower + upper) / 2;
1193 TwmKeyword *p = &keytable[middle];
1194 int res = strcmp (p->name, s);
1198 } else if (res == 0) {
1211 * action routines called by grammar
1214 int do_single_keyword (keyword)
1218 case kw0_NoDefaults:
1219 Scr->NoDefaultMouseOrKeyboardBindings = TRUE;
1220 Scr->NoDefaultTitleButtons = TRUE;
1223 case kw0_NoDefaultMouseOrKeyboardBindings: /* DSE */
1224 Scr->NoDefaultMouseOrKeyboardBindings = TRUE;
1227 case kw0_NoDefaultTitleButtons: /* DSE */
1228 Scr->NoDefaultTitleButtons = TRUE;
1231 case kw0_StayUpMenus:
1232 if (Scr->FirstTime) Scr->StayUpMenus = TRUE;
1235 case kw0_StayUpOptionalMenus: /* PF */
1236 if (Scr->FirstTime) Scr->StayUpOptionalMenus = Scr->StayUpMenus = TRUE;
1239 /* djhjr - 2/15/99 - this is dumb - if RealScreenBorderWidth is defined, use it!
1240 case kw0_UseRealScreenBorder: *RFB*
1241 Scr->UseRealScreenBorder = TRUE;
1245 case kw0_OldFashionedTwmWindowsMenu:/*RFB*/
1246 Scr->OldFashionedTwmWindowsMenu = TRUE;
1249 case kw0_AutoRelativeResize:
1250 Scr->AutoRelativeResize = TRUE;
1253 case kw0_ForceIcons:
1254 if (Scr->FirstTime) Scr->ForceIcon = TRUE;
1257 case kw0_NoIconManagers:
1258 Scr->NoIconManagers = TRUE;
1261 case kw0_NoIconifyIconManagers: /* PF */
1262 Scr->NoIconifyIconManagers = TRUE;
1266 case kw0_OpaqueMove:
1267 Scr->OpaqueMove = TRUE;
1271 case kw0_InterpolateMenuColors:
1272 if (Scr->FirstTime) Scr->InterpolateMenuColors = TRUE;
1279 case kw0_SortIconManager:
1280 if (Scr->FirstTime) Scr->SortIconMgr = TRUE;
1283 case kw0_NoGrabServer:
1284 Scr->NoGrabServer = TRUE;
1287 case kw0_NoMenuShadows:
1288 if (Scr->FirstTime) Scr->Shadow = FALSE;
1291 case kw0_NoRaiseOnMove:
1292 if (Scr->FirstTime) Scr->NoRaiseMove = TRUE;
1295 case kw0_NoRaiseOnResize:
1296 if (Scr->FirstTime) Scr->NoRaiseResize = TRUE;
1299 case kw0_NoRaiseOnDeiconify:
1300 if (Scr->FirstTime) Scr->NoRaiseDeicon = TRUE;
1303 case kw0_DontMoveOff:
1304 Scr->DontMoveOff = TRUE;
1307 case kw0_NoBackingStore:
1308 Scr->BackingStore = FALSE;
1311 case kw0_NoSaveUnders:
1312 Scr->SaveUnder = FALSE;
1315 case kw0_RestartPreviousState:
1316 RestartPreviousState = True;
1319 case kw0_ClientBorderWidth:
1320 if (Scr->FirstTime) Scr->ClientBorderWidth = TRUE;
1323 case kw0_NoTitleFocus:
1324 Scr->TitleFocus = FALSE;
1327 case kw0_RandomPlacement:
1328 Scr->RandomPlacement = TRUE;
1331 case kw0_PointerPlacement:
1332 Scr->PointerPlacement = TRUE;
1335 case kw0_DecorateTransients:
1336 Scr->DecorateTransients = TRUE;
1339 case kw0_WarpToTransients: /* PF */
1340 Scr->WarpToTransients = TRUE;
1343 case kw0_ShowIconManager:
1344 Scr->ShowIconManager = TRUE;
1347 case kw0_NoCaseSensitive:
1348 Scr->CaseSensitive = FALSE;
1351 case kw0_NoRaiseOnWarp:
1352 Scr->NoRaiseWarp = TRUE;
1355 case kw0_WarpUnmapped:
1356 Scr->WarpUnmapped = TRUE;
1359 case kw0_DeIconifyToScreen:
1360 Scr->DeIconifyToScreen = TRUE;
1363 case kw0_WarpWindows:
1364 Scr->WarpWindows = TRUE;
1367 case kw0_SnapRealScreen:
1368 Scr->snapRealScreen = TRUE;
1371 case kw0_NotVirtualGeometries:
1372 Scr->GeometriesAreVirtual = FALSE;
1375 case kw0_NaturalAutopanBehavior: /* DSE */
1376 Scr->AutoPanWarpWithRespectToRealScreen = 100;
1378 case kw0_EnhancedExecResources: /* DSE */
1379 Scr->EnhancedExecResources = TRUE;
1381 case kw0_RightHandSidePulldownMenus: /* DSE */
1382 Scr->RightHandSidePulldownMenus = TRUE;
1384 case kw0_LessRandomZoomZoom: /* DSE */
1385 Scr->LessRandomZoomZoom = TRUE;
1387 case kw0_PrettyZoom: /* DSE */
1388 Scr->PrettyZoom = TRUE;
1390 case kw0_StickyAbove: /* DSE */
1391 Scr->StickyAbove = TRUE;
1393 case kw0_DontInterpolateTitles: /* DSE */
1394 Scr->DontInterpolateTitles = TRUE;
1397 /* djhjr - 1/6/98 */
1398 case kw0_FixManagedVirtualGeometries:
1399 Scr->FixManagedVirtualGeometries = TRUE;
1402 case kw0_FixTransientVirtualGeometries: /* DSE */
1403 Scr->FixTransientVirtualGeometries = TRUE;
1405 case kw0_WarpSnug: /* DSE */
1406 Scr->WarpSnug = TRUE;
1409 /* djhjr - 6/25/96 */
1410 case kw0_ShallowReliefWindowButton:
1411 Scr->ShallowReliefWindowButton = 1;
1414 /* obsoleted by the *BevelWidth resources - djhjr - 8/11/98
1416 case kw0_Use3DBorders:
1417 Scr->use3Dborders = TRUE;
1419 case kw0_Use3DIconManagers:
1420 Scr->use3Diconmanagers = TRUE;
1422 case kw0_Use3DMenus:
1423 Scr->use3Dmenus = TRUE;
1425 case kw0_Use3DTitles:
1426 Scr->use3Dtitles = TRUE;
1430 case kw0_Use3DIcons:
1431 Scr->use3Dicons = TRUE;
1435 /* obsoleted by the ":xpm:*" built-in pixmaps - djhjr - 10/26/02
1437 case kw0_SunkFocusWindowTitle:
1438 Scr->SunkFocusWindowTitle = TRUE;
1442 /* djhjr - 9/21/96 */
1443 case kw0_ButtonColorIsFrame:
1444 Scr->ButtonColorIsFrame = TRUE;
1447 /* djhjr - 1/19/98 */
1448 case kw0_BeNiceToColormap:
1449 Scr->BeNiceToColormap = TRUE;
1452 /* djhjr - 4/17/98 */
1453 case kw0_VirtualReceivesMotionEvents:
1454 Scr->VirtualReceivesMotionEvents = TRUE;
1456 case kw0_VirtualSendsMotionEvents:
1457 Scr->VirtualSendsMotionEvents = TRUE;
1460 /* djhjr - 5/27/98 */
1461 case kw0_NoIconManagerFocus:
1462 Scr->IconManagerFocus = FALSE;
1465 /* djhjr - 12/14/98 */
1466 case kw0_StaticIconPositions:
1467 Scr->StaticIconPositions = TRUE;
1470 /* for rader - djhjr - 2/9/99 */
1471 case kw0_NoPrettyTitles:
1472 Scr->NoPrettyTitles = TRUE;
1475 /* djhjr - 6/22/99 */
1476 case kw0_DontDeiconifyTransients:
1477 Scr->DontDeiconifyTransients = TRUE;
1480 /* submitted by Ugen Antsilevitch - 5/28/00 */
1481 case kw0_WarpVisible:
1482 Scr->WarpVisible = TRUE;
1485 /* djhjr - 10/2/01 */
1486 case kw0_StrictIconManager:
1487 Scr->StrictIconManager = TRUE;
1490 /* djhjr - 10/11/01 */
1491 case kw0_ZoomZoom: /* DSE */
1492 Scr->ZoomZoom = TRUE;
1495 /* djhjr - 10/20/02 */
1496 case kw0_NoBorderDecorations: /* DSE */
1497 Scr->NoBorderDecorations = TRUE;
1500 /* djhjr - 11/3/03 */
1501 case kw0_RaiseOnStart:
1502 Scr->RaiseOnStart = TRUE;
1510 int do_string_keyword (keyword, s)
1514 /* idea from Seth Robertson - djhjr - 9/17/03 */
1515 if (s == NULL || s[0] == '\0')
1519 /* now in gram.y - djhjr - 9/24/02
1520 case kws_UsePPosition:
1522 int ppos = ParseUsePPosition (s);
1524 twmrc_error_prefix();
1526 "ignoring invalid UsePPosition argument \"%s\"\n", s);
1528 Scr->UsePPosition = ppos;
1535 if (!Scr->HaveFonts) Scr->IconFont.name = s;
1538 case kws_ResizeFont:
1539 if (!Scr->HaveFonts) Scr->SizeFont.name = s;
1543 if (!Scr->HaveFonts) Scr->MenuFont.name = s;
1547 if (!Scr->HaveFonts) Scr->TitleBarFont.name = s;
1550 case kws_IconManagerFont:
1551 if (!Scr->HaveFonts) Scr->IconManagerFont.name = s;
1554 case kws_MenuTitleFont: /* DSE */
1555 if (!Scr->HaveFonts) Scr->MenuTitleFont.name = s;
1558 /* djhjr - 5/10/96 */
1560 if (!Scr->HaveFonts) Scr->InfoFont.name = s;
1563 case kws_UnknownIcon:
1564 if (Scr->FirstTime) GetUnknownIcon (s);
1567 case kws_IconDirectory:
1568 if (Scr->FirstTime) Scr->IconDirectory = ExpandFilename (s);
1571 case kws_MaxWindowSize:
1572 JunkMask = XParseGeometry (s, &JunkX, &JunkY, &JunkWidth, &JunkHeight);
1573 if ((JunkMask & (WidthValue | HeightValue)) !=
1574 (WidthValue | HeightValue)) {
1575 twmrc_error_prefix();
1576 fprintf (stderr, "bad MaxWindowSize \"%s\"\n", s);
1579 if (JunkWidth <= 0 || JunkHeight <= 0) {
1580 twmrc_error_prefix();
1581 fprintf (stderr, "MaxWindowSize \"%s\" must be positive\n", s);
1584 Scr->MaxWindowWidth = JunkWidth;
1585 Scr->MaxWindowHeight = JunkHeight;
1588 case kws_VirtualFont:
1589 Scr->NamesInVirtualDesktop = True;
1590 if (!Scr->HaveFonts) Scr->VirtualFont.name = s;
1594 if (!Scr->HaveFonts) Scr->DoorFont.name = s;
1597 /* djhjr - 6/22/01 */
1598 #ifndef NO_SOUND_SUPPORT
1600 if (Scr->FirstTime) SetSoundHost(s);
1604 /* djhjr - 5/15/96 */
1605 case kws_ResizeRegion:
1606 XmuCopyISOLatin1Lowered (s, s);
1607 if (strcmp (s, "northwest") == 0)
1609 Scr->ResizeX = R_NORTHWEST;
1612 else if (strcmp (s, "northeast") == 0)
1614 Scr->ResizeX = R_NORTHEAST;
1617 if (strcmp (s, "southwest") == 0)
1619 Scr->ResizeX = R_SOUTHWEST;
1622 else if (strcmp (s, "southeast") == 0)
1624 Scr->ResizeX = R_SOUTHEAST;
1627 else if (strcmp (s, "centered") == 0)
1629 Scr->ResizeX = R_CENTERED;
1634 twmrc_error_prefix();
1635 fprintf (stderr, "Invalid ResizeRegion \"%s\"\n", s);
1644 int do_number_keyword (keyword, num)
1649 case kwn_ConstrainedMoveTime:
1650 ConstrainedMoveTime = num;
1653 case kwn_AutoPanBorderWidth: /* DSE */
1654 Scr->AutoPanBorderWidth = (num<1)?1:num;
1657 case kwn_AutoPanExtraWarp: /* DSE */
1658 Scr->AutoPanExtraWarp = (num<0)?0:num;
1661 case kwn_RealScreenBorderWidth: /* DSE */
1662 Scr->RealScreenBorderWidth = (num < 0) ? 0 : num;
1666 Scr->MoveDelta = num;
1670 if (Scr->FirstTime) Scr->XORvalue = num;
1673 case kwn_FramePadding:
1674 if (Scr->FirstTime) Scr->FramePadding = num;
1677 case kwn_TitlePadding:
1678 if (Scr->FirstTime) Scr->TitlePadding = num;
1681 case kwn_ButtonIndent:
1682 if (Scr->FirstTime) Scr->ButtonIndent = num;
1685 case kwn_BorderWidth:
1686 if (Scr->FirstTime) Scr->BorderWidth = num;
1689 case kwn_IconBorderWidth:
1690 if (Scr->FirstTime) Scr->IconBorderWidth = num;
1693 case kwn_TitleButtonBorderWidth:
1694 if (Scr->FirstTime) Scr->TBInfo.border = num;
1697 case kwn_PanDistanceX:
1700 Scr->VirtualDesktopPanDistanceX = (num * Scr->MyDisplayWidth) / 100;
1701 /* added this - djhjr - 1/4/98 */
1702 if (Scr->VirtualDesktopPanDistanceX <= 0) Scr->VirtualDesktopPanDistanceX = 1;
1706 case kwn_PanDistanceY:
1709 Scr->VirtualDesktopPanDistanceY = (num * Scr->MyDisplayHeight) / 100;
1710 /* added this - djhjr - 1/4/98 */
1711 if (Scr->VirtualDesktopPanDistanceY <= 0) Scr->VirtualDesktopPanDistanceY = 1;
1715 /* djhjr - 9/8/98 */
1716 case kwn_PanResistance:
1717 if (Scr->FirstTime) Scr->VirtualDesktopPanResistance = num;
1718 if (Scr->VirtualDesktopPanResistance < 0)
1719 Scr->VirtualDesktopPanResistance = 0;
1722 case kwn_RaiseDelay: RaiseDelay = num; return 1;/*RAISEDELAY*/
1727 Scr->AutoPanX = (num * Scr->MyDisplayWidth) / 100;
1728 Scr->AutoPanY = (num * Scr->MyDisplayHeight) / 100;
1729 if (Scr->AutoPanX <= 0) Scr->AutoPanX = 1;
1730 if (Scr->AutoPanY <= 0) Scr->AutoPanY = 1;
1734 case kwn_AutoPanWarpWithRespectToRealScreen: /* DSE */
1735 Scr->AutoPanWarpWithRespectToRealScreen = (num<0)?0:(num>100)?100:num;
1740 case kwn_ThreeDBorderWidth:
1741 if (Scr->FirstTime) Scr->ThreeDBorderWidth = num;
1745 /* djhjr - 4/19/96 */
1746 case kwn_ClearBevelContrast:
1747 if (Scr->FirstTime) Scr->ClearBevelContrast = num;
1748 if (Scr->ClearBevelContrast < 0) Scr->ClearBevelContrast = 0;
1749 if (Scr->ClearBevelContrast > 100) Scr->ClearBevelContrast = 100;
1751 case kwn_DarkBevelContrast:
1752 if (Scr->FirstTime) Scr->DarkBevelContrast = num;
1753 if (Scr->DarkBevelContrast < 0) Scr->DarkBevelContrast = 0;
1754 if (Scr->DarkBevelContrast > 100) Scr->DarkBevelContrast = 100;
1757 /* djhjr - 5/2/98 */
1758 case kwn_BorderBevelWidth:
1759 if (Scr->FirstTime) Scr->BorderBevelWidth = num;
1760 if (Scr->BorderBevelWidth < 0) Scr->BorderBevelWidth = 0;
1761 if (Scr->BorderBevelWidth > 9) Scr->BorderBevelWidth = 9;
1763 case kwn_IconManagerBevelWidth:
1764 if (Scr->FirstTime) Scr->IconMgrBevelWidth = num;
1765 if (Scr->IconMgrBevelWidth < 0) Scr->IconMgrBevelWidth = 0;
1766 if (Scr->IconMgrBevelWidth > 9) Scr->IconMgrBevelWidth = 9;
1768 case kwn_InfoBevelWidth:
1769 if (Scr->FirstTime) Scr->InfoBevelWidth = num;
1770 if (Scr->InfoBevelWidth < 0) Scr->InfoBevelWidth = 0;
1771 if (Scr->InfoBevelWidth > 9) Scr->InfoBevelWidth = 9;
1773 case kwn_MenuBevelWidth:
1774 if (Scr->FirstTime) Scr->MenuBevelWidth = num;
1775 if (Scr->MenuBevelWidth < 0) Scr->MenuBevelWidth = 0;
1776 if (Scr->MenuBevelWidth > 9) Scr->MenuBevelWidth = 9;
1778 case kwn_TitleBevelWidth:
1779 if (Scr->FirstTime) Scr->TitleBevelWidth = num;
1780 if (Scr->TitleBevelWidth < 0) Scr->TitleBevelWidth = 0;
1781 if (Scr->TitleBevelWidth > 9) Scr->TitleBevelWidth = 9;
1784 /* djhjr - 8/11/98 */
1785 case kwn_ButtonBevelWidth:
1786 if (Scr->FirstTime) Scr->ButtonBevelWidth = num;
1787 if (Scr->ButtonBevelWidth < 0) Scr->ButtonBevelWidth = 0;
1788 if (Scr->ButtonBevelWidth > 9) Scr->ButtonBevelWidth = 9;
1790 case kwn_IconBevelWidth:
1791 if (Scr->FirstTime) Scr->IconBevelWidth = num;
1792 if (Scr->IconBevelWidth < 0) Scr->IconBevelWidth = 0;
1793 if (Scr->IconBevelWidth > 9) Scr->IconBevelWidth = 9;
1796 /* djhjr - 2/7/99 */
1797 case kwn_DoorBevelWidth:
1798 if (Scr->FirstTime) Scr->DoorBevelWidth = num;
1799 if (Scr->DoorBevelWidth < 0) Scr->DoorBevelWidth = 0;
1800 if (Scr->DoorBevelWidth > 9) Scr->DoorBevelWidth = 9;
1802 case kwn_VirtualDesktopBevelWidth:
1803 if (Scr->FirstTime) Scr->VirtualDesktopBevelWidth = num;
1804 if (Scr->VirtualDesktopBevelWidth < 0) Scr->VirtualDesktopBevelWidth = 0;
1805 if (Scr->VirtualDesktopBevelWidth > 9) Scr->VirtualDesktopBevelWidth = 9;
1808 /* djhjr - 5/22/00 */
1809 case kwn_MenuScrollBorderWidth:
1810 if (Scr->FirstTime) Scr->MenuScrollBorderWidth = num;
1812 case kwn_MenuScrollJump:
1813 if (Scr->FirstTime) Scr->MenuScrollJump = num;
1816 /* djhjr - 8/16/01 */
1817 #ifndef NO_SOUND_SUPPORT
1818 case kwn_SoundVolume:
1819 if (Scr->FirstTime) SetSoundVolume(num);
1823 /* djhjr - 6/22/01 */
1824 case kwn_PauseOnExit:
1825 if (Scr->FirstTime) Scr->PauseOnExit = num;
1827 case kwn_PauseOnQuit:
1828 if (Scr->FirstTime) Scr->PauseOnQuit = num;
1835 name_list **do_colorlist_keyword (keyword, colormode, s)
1841 case kwcl_BorderColor:
1842 GetColor (colormode, &Scr->BorderColor, s);
1843 return &Scr->BorderColorL;
1845 case kwcl_IconManagerHighlight:
1846 GetColor (colormode, &Scr->IconManagerHighlight, s);
1847 return &Scr->IconManagerHighlightL;
1849 case kwcl_BorderTileForeground:
1850 GetColor (colormode, &Scr->BorderTileC.fore, s);
1851 return &Scr->BorderTileForegroundL;
1853 case kwcl_BorderTileBackground:
1854 GetColor (colormode, &Scr->BorderTileC.back, s);
1855 return &Scr->BorderTileBackgroundL;
1857 case kwcl_TitleForeground:
1858 GetColor (colormode, &Scr->TitleC.fore, s);
1859 return &Scr->TitleForegroundL;
1861 case kwcl_TitleBackground:
1862 GetColor (colormode, &Scr->TitleC.back, s);
1863 return &Scr->TitleBackgroundL;
1865 case kwcl_IconForeground:
1866 GetColor (colormode, &Scr->IconC.fore, s);
1867 return &Scr->IconForegroundL;
1869 case kwcl_IconBackground:
1870 GetColor (colormode, &Scr->IconC.back, s);
1871 return &Scr->IconBackgroundL;
1873 case kwcl_IconBorderColor:
1874 GetColor (colormode, &Scr->IconBorderColor, s);
1875 return &Scr->IconBorderColorL;
1877 case kwcl_IconManagerForeground:
1878 GetColor (colormode, &Scr->IconManagerC.fore, s);
1879 return &Scr->IconManagerFL;
1881 case kwcl_IconManagerBackground:
1882 GetColor (colormode, &Scr->IconManagerC.back, s);
1883 return &Scr->IconManagerBL;
1885 case kwcl_VirtualDesktopForeground:
1886 GetColor (colormode, &Scr->VirtualDesktopDisplayC.fore, s);
1887 return &Scr->VirtualDesktopColorFL;
1889 case kwcl_VirtualDesktopBackground:
1890 GetColor (colormode, &Scr->VirtualDesktopDisplayC.back, s);
1891 return &Scr->VirtualDesktopColorBL;
1893 case kwcl_VirtualDesktopBorder:
1894 GetColor (colormode, &Scr->VirtualDesktopDisplayBorder, s);
1895 return &Scr->VirtualDesktopColorBoL;
1897 case kwcl_DoorForeground:
1898 GetColor (colormode, &Scr->DoorC.fore, s);
1899 return &Scr->DoorForegroundL;
1901 case kwcl_DoorBackground:
1902 GetColor (colormode, &Scr->DoorC.back, s);
1903 return &Scr->DoorBackgroundL;
1909 int do_color_keyword (keyword, colormode, s)
1915 case kwc_DefaultForeground:
1916 GetColor (colormode, &Scr->DefaultC.fore, s);
1919 case kwc_DefaultBackground:
1920 GetColor (colormode, &Scr->DefaultC.back, s);
1923 case kwc_MenuForeground:
1924 GetColor (colormode, &Scr->MenuC.fore, s);
1927 case kwc_MenuBackground:
1928 GetColor (colormode, &Scr->MenuC.back, s);
1931 case kwc_MenuTitleForeground:
1932 GetColor (colormode, &Scr->MenuTitleC.fore, s);
1935 case kwc_MenuTitleBackground:
1936 GetColor (colormode, &Scr->MenuTitleC.back, s);
1939 case kwc_MenuShadowColor:
1940 GetColor (colormode, &Scr->MenuShadowColor, s);
1943 case kwc_VirtualBackground:/*RFB VCOLOR*/
1944 GetColor (colormode, &Scr->VirtualC.back, s);/*RFB VCOLOR*/
1945 return 1;/*RFB VCOLOR*/
1947 case kwc_VirtualForeground:/*RFB VCOLOR*/
1948 GetColor (colormode, &Scr->VirtualC.fore, s);/*RFB VCOLOR*/
1949 return 1;/*RFB VCOLOR*/
1951 case kwc_RealScreenForeground:
1952 GetColor( colormode, &Scr->RealScreenC.fore, s);/*RFB 4/92 */
1955 case kwc_RealScreenBackground:
1956 GetColor( colormode, &Scr->RealScreenC.back, s);/*RFB 4/92 */
1965 * put_pixel_on_root() Save a pixel value in twm root window color property.
1967 void put_pixel_on_root(pixel)
1970 int i, addPixel = 1;
1971 Atom pixelAtom, retAtom;
1973 unsigned long nPixels, retAfter;
1976 pixelAtom = XInternAtom(dpy, "_MIT_PRIORITY_COLORS", True);
1978 /* added tests for success - djhjr - 1/10/98 */
1979 if (XGetWindowProperty(dpy, Scr->Root, pixelAtom, 0, 8192,
1980 False, XA_CARDINAL, &retAtom,
1981 &retFormat, &nPixels, &retAfter,
1982 (unsigned char **)&retProp) != Success || retAtom == None)
1985 for (i=0; i< nPixels; i++)
1986 if (pixel == retProp[i]) addPixel = 0;
1989 XChangeProperty (dpy, Scr->Root, _XA_MIT_PRIORITY_COLORS,
1990 XA_CARDINAL, 32, PropModeAppend,
1991 (unsigned char *)&pixel, 1);
1995 * do_string_savecolor() save a color from a string in the twmrc file.
1997 void do_string_savecolor(colormode, s)
2001 Pixel p = ULONG_MAX;
2002 GetColor(colormode, &p, s);
2004 put_pixel_on_root(p);
2008 * do_var_savecolor() save a color from a var in the twmrc file.
2010 typedef struct _cnode {int i; struct _cnode *next;} Cnode, *Cptr;
2013 void do_var_savecolor(key)
2018 chead = (Cptr)malloc(sizeof(Cnode));
2019 chead->i = key; chead->next = NULL;
2023 while (cptrav->next != NULL) { cptrav = cptrav->next; }
2024 cpnew = (Cptr)malloc(sizeof(Cnode));
2025 cpnew->i = key; cpnew->next = NULL; cptrav->next = cpnew;
2030 * assign_var_savecolor() traverse the var save color list placeing the pixels
2031 * in the root window property.
2033 void assign_var_savecolor()
2036 while (cp != NULL) {
2038 case kwcl_BorderColor:
2039 put_pixel_on_root(Scr->BorderColor);
2041 case kwcl_IconManagerHighlight:
2042 put_pixel_on_root(Scr->IconManagerHighlight);
2044 case kwcl_BorderTileForeground:
2045 put_pixel_on_root(Scr->BorderTileC.fore);
2047 case kwcl_BorderTileBackground:
2048 put_pixel_on_root(Scr->BorderTileC.back);
2050 case kwcl_TitleForeground:
2051 put_pixel_on_root(Scr->TitleC.fore);
2053 case kwcl_TitleBackground:
2054 put_pixel_on_root(Scr->TitleC.back);
2056 case kwcl_IconForeground:
2057 put_pixel_on_root(Scr->IconC.fore);
2059 case kwcl_IconBackground:
2060 put_pixel_on_root(Scr->IconC.back);
2062 case kwcl_IconBorderColor:
2063 put_pixel_on_root(Scr->IconBorderColor);
2065 case kwcl_IconManagerForeground:
2066 put_pixel_on_root(Scr->IconManagerC.fore);
2068 case kwcl_IconManagerBackground:
2069 put_pixel_on_root(Scr->IconManagerC.back);
2080 /* added 'type' argument - djhjr - 10/20/01 */
2081 void do_squeeze_entry (list, name, type, justify, num, denom)
2082 name_list **list; /* squeeze or dont-squeeze list */
2083 char *name; /* window name */
2084 short type; /* match type */
2085 int justify; /* left, center, right */
2086 int num; /* signed pixel count or fraction num */
2087 int denom; /* signed 0 or indicates fraction denom */
2089 int absnum = (num < 0 ? -num : num);
2090 int absdenom = (denom < 0 ? -denom : denom);
2093 twmrc_error_prefix();
2094 fprintf (stderr, "SqueezeTitle numerator %d made positive\n", num);
2097 twmrc_error_prefix();
2098 fprintf (stderr, "SqueezeTitle denominator %d made positive\n", denom);
2100 if (absnum > absdenom && denom != 0) {
2101 twmrc_error_prefix();
2102 fprintf (stderr, "SqueezeTitle fraction %d/%d outside window\n",
2107 twmrc_error_prefix();
2108 fprintf (stderr, "useless SqueezeTitle fraction %d/%d, assuming 0/0\n",
2116 sinfo = (SqueezeInfo *) malloc (sizeof(SqueezeInfo));
2119 twmrc_error_prefix();
2120 fprintf (stderr, "unable to allocate %d bytes for squeeze info\n",
2121 sizeof(SqueezeInfo));
2124 sinfo->justify = justify;
2125 sinfo->num = absnum;
2126 sinfo->denom = absdenom;
2127 /* added 'type' argument - djhjr - 10/20/01 */
2128 AddToList (list, name, type, (char *)sinfo);
2132 /* Submitted by Jason Gloudon */
2133 /* added support for user-defined parameters - djhjr - 2/20/99 */
2134 /* added support for sound - djhjr - 6/22/01 */
2135 /* added support for regex - djhjr - 10/20/01 */
2136 /* added support for i18n - djhjr - 9/14/03 */
2137 #ifndef NO_M4_SUPPORT
2138 char *make_m4_cmdline(display_name, cp, m4_option)
2141 char *m4_option; /* djhjr - 2/20/99 */
2143 char *m4_lines[6] = {
2144 "m4 -DHOME='%s' -DWIDTH='%d' -DHEIGHT='%d' -DSOUND='%s' ",
2145 "-DPLANES='%d' -DBITS_PER_RGB='%d' -DCLASS='%s' -DXPM='%s' ",
2146 "-DI18N='%s' -DCOLOR='%s' -DX_RESOLUTION='%d' -DY_RESOLUTION='%d' ",
2147 "-DREGEX='%s' -DUSER='%s' -DSERVERHOST='%s' -DCLIENTHOST='%s' ",
2148 "-DHOSTNAME='%s' -DTWM_TYPE='vtwm' -DVERSION='%d' ",
2149 "-DREVISION='%d' -DVENDOR='%s' -DRELEASE='%d'"
2151 char *client, *server, *hostname;
2152 char *m4_cmdline, *colon, *vc, *env_username;
2153 char *is_sound, *is_xpm, *is_regex, *is_color, *is_i18n;
2154 int i, client_len, opt_len = 0, cmd_len = 0, server_is_client = 0;
2155 struct hostent *hostname_ent;
2157 /* djhjr - 2/20/99 */
2160 opt_len = strlen(m4_option);
2162 /* this isn't likely ever needed, but you just never know... */
2163 if (m4_option[0] == '\'' || m4_option[0] == '"')
2165 if (m4_option[opt_len - 1] != '\'' && m4_option[opt_len - 1] != '"')
2167 fprintf(stderr,"%s: badly formed user-defined m4 parameter\n", ProgramName);
2178 /* the sourcing of various hostnames is stolen from tvtwm */
2179 /* pad for NULL terminator - submitted by Jonathan Paisley - 11/11/02 */
2180 for(client = NULL, client_len = 256; client_len < 1024; client_len *= 2){
2181 if((client = malloc(client_len + 1)) == NULL){
2182 fprintf(stderr,"%s: cannot allocate %d bytes for m4\n", ProgramName, client_len + 1);
2186 client[client_len] = '\0';
2187 XmuGetHostname(client, client_len);
2189 if(client[client_len] == '\0')
2197 fprintf(stderr, "%s: cannot get hostname for m4\n", ProgramName);
2201 if((server = XDisplayName(display_name)) == NULL){
2202 fprintf(stderr, "%s: cannot get display name for m4\n", ProgramName);
2206 /* we copy so we can modify it safely */
2207 server = strdup(server);
2209 if((colon = index(server, ':')) != NULL){
2213 /* connected to :0 or unix:0 ? */
2214 if((server[0] == '\0') || (!strcmp(server, "unix"))){
2221 server_is_client = 1;
2224 hostname_ent = gethostbyname(client);
2225 hostname = hostname_ent != NULL ? hostname_ent->h_name : client;
2227 #ifdef NO_XPM_SUPPORT
2232 #ifdef NO_SOUND_SUPPORT
2237 #ifdef NO_REGEX_SUPPORT
2242 #ifdef NO_I18N_SUPPORT
2248 /* assume colour visual */
2250 switch(Scr->d_visual->class)
2252 case(StaticGray): vc = "StaticGray"; is_color = "No"; break;
2253 case(GrayScale): vc = "GrayScale"; is_color = "No"; break;
2254 case(StaticColor): vc = "StaticColor"; break;
2255 case(PseudoColor): vc = "PseudoColor"; break;
2256 case(TrueColor): vc = "TrueColor"; break;
2257 case(DirectColor): vc = "DirectColor"; break;
2258 default: vc = "NonStandard"; break;
2261 if((env_username = getenv("LOGNAME")) == NULL){
2266 * Start with slightly more than the minimal command line, add space for
2267 * nine numeric fields, ensure we have room for each of the strings, and
2268 * add some breathing room
2270 * Then add space for any user-defined parameters - djhjr - 2/20/99
2272 for (i = 0; i < 6; i++) cmd_len += strlen(m4_lines[i]);
2273 cmd_len += M4_MAXDIGITS * 9 + HomeLen + strlen(vc) + strlen(is_xpm) +
2274 strlen(is_color) + strlen(env_username) + strlen(server) +
2275 strlen(client) + strlen(hostname) + strlen(ServerVendor(dpy)) +
2276 strlen(is_sound) + strlen(is_regex) + strlen(is_i18n) + strlen(cp) + 16;
2277 if (opt_len) cmd_len += opt_len;
2279 if((m4_cmdline = malloc(cmd_len)) == NULL){
2280 fprintf(stderr,"%s: cannot allocate %d bytes for m4\n", ProgramName, cmd_len);
2285 * Non-SysV systems - specifically, BSD-derived systems - return a
2286 * pointer to the string, not its length.
2288 sprintf(m4_cmdline, m4_lines[0], Home, Scr->MyDisplayWidth,
2289 Scr->MyDisplayHeight, is_sound);
2290 cmd_len = strlen(m4_cmdline);
2291 sprintf(m4_cmdline + cmd_len, m4_lines[1], Scr->d_depth,
2292 Scr->d_visual->bits_per_rgb, vc, is_xpm);
2293 cmd_len = strlen(m4_cmdline);
2294 sprintf(m4_cmdline + cmd_len, m4_lines[2], is_i18n, is_color,
2295 Resolution(Scr->MyDisplayWidth, DisplayWidthMM(dpy, Scr->screen)),
2296 Resolution(Scr->MyDisplayHeight, DisplayHeightMM(dpy, Scr->screen)));
2297 cmd_len = strlen(m4_cmdline);
2298 sprintf(m4_cmdline + cmd_len, m4_lines[3], is_regex, env_username,
2300 cmd_len = strlen(m4_cmdline);
2301 sprintf(m4_cmdline + cmd_len, m4_lines[4], hostname, ProtocolVersion(dpy));
2302 cmd_len = strlen(m4_cmdline);
2303 sprintf(m4_cmdline + cmd_len, m4_lines[5], ProtocolRevision(dpy),
2304 ServerVendor(dpy), VendorRelease(dpy));
2306 /* djhjr - 2/20/99 */
2307 cmd_len = strlen(m4_cmdline);
2310 sprintf(m4_cmdline + cmd_len, " %*.*s", opt_len, opt_len, m4_option);
2311 cmd_len = strlen(m4_cmdline);
2313 sprintf(m4_cmdline + cmd_len, " < %s", cp);
2315 if (PrintErrorMessages)
2316 fprintf(stderr, "\n%s: %s\n", ProgramName, m4_cmdline);
2318 if (colon) *colon = ':';
2319 if (!server_is_client) free(server);
2322 return (m4_cmdline);
2324 #endif /* NO_M4_SUPPORT */