|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T p
Length: 33154 (0x8182) Types: TextFile Names: »patch1«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/X/Dragon/patch1«
Submitted-by: Gary Barnes <uunet!igor!amber!geb> Posting-number: Volume 4, Issue 6 Archive-name: Dragon/patch1 (Part2) *** ../dragon/Imakefile Tue May 23 00:05:20 1989 --- Imakefile Mon May 22 23:55:26 1989 *************** *** 1,7 **** ! SRCS = main.c board.c button.c icon.c tile.c tile_bits.c ! OBJS = main.o board.o button.o icon.o tile.o tile_bits.o PROGRAMS = dragon ! DEFINES = INCLUDES = SYS_LIBRARIES = -lXaw -lXmu -lXt -lX11 --- 1,8 ---- ! SRCS = main.c board.c button.c draw.c icon.c tile.c tile_bits.c ! OBJS = main.o board.o button.o draw.o icon.o tile.o tile_bits.o PROGRAMS = dragon ! LINTOPTS = -uxz ! DEFINES = -DWANTDEBUG INCLUDES = SYS_LIBRARIES = -lXaw -lXmu -lXt -lX11 *************** *** 13,19 **** --- 14,27 ---- $(USRLIBDIR)/libXt.a \ $(USRLIBDIR)/libX11.a + lint: + $(LINT) $(LINTFLAGS) $(SRCS) + MakeBug: cp Makefile MakeBug.bak make -f MakeBug.bak Makefile rm MakeBug.bak + + tar: + tar cf - . > ../dragon.tar + compress -v ../dragon.tar *** ../dragon/Makefile Tue May 23 00:05:21 1989 --- Makefile Mon May 22 23:55:28 1989 *************** *** 1,4 **** ! TOP = /usr/src/X11R3 UTILSRC = $(TOP)/util IMAKESRC = $(UTILSRC)/imake IMAKE = $(IMAKESRC)/imake --- 1,4 ---- ! TOP = /src/x UTILSRC = $(TOP)/util IMAKESRC = $(UTILSRC)/imake IMAKE = $(IMAKESRC)/imake *** ../dragon/README Tue May 23 00:03:36 1989 --- README Mon May 22 23:55:30 1989 *************** *** 1,9 **** ! 04/19/89 Dragon is a game. It implements a version of the ancient game of Mah-Jongg. ! Dragon is known to work on a Sun 3/60 running SunOS 3.5 with X11R3 from MIT. ! It compiles with the Sun compiler and with gcc version 1.31. As of this writing, the Athena Dialog widget has a bug that can cause Dragon to get a segmentation/memory error. There is code in X11R3/lib/Xaw/Dialog.c --- 1,24 ---- ! 05/18/89 Dragon is a game. It implements a version of the ancient game of Mah-Jongg. ! Dragon is known to work on a Sun 3/60 running SunOS 3.5 with X11R3 from ! MIT. It compiles with the Sun compiler and with gcc version 1.31. ! ! I have been told that the current version (this one right here) runs ! correctly on monochrome, gray-scale, and color DEC equipment. Presumably ! it will run correctly on most servers at this point. ! ! Dragon is a "monochrome" application; it uses two colors; the default ! "foreground" color and the default "background" color as defined and ! determined by the X Toolkit. ! ! If you do a "make all" initially then the Makefile will be rebuilt using ! the MIT imake program. If you do not have the MIT imake program (or don't ! want to use it) then rename the Makefile.Canned file to be Makefile and ! hand-edit it for use at your site. ! ! 04/19/89 As of this writing, the Athena Dialog widget has a bug that can cause Dragon to get a segmentation/memory error. There is code in X11R3/lib/Xaw/Dialog.c *** ../dragon/button.c Tue May 23 00:04:00 1989 --- button.c Mon May 22 23:55:36 1989 *************** *** 4,9 **** --- 4,12 ---- * Author: Gary E. Barnes March 1989 * * button.c - Deals with the command buttons on the board + ****************************************************************************** + * 4/24/89 GEB - When "Other" pressed, if "Samples" is on then turn it off + * - before changing button menus. ******************************************************************************/ #include "main.h" *************** *** 57,62 **** --- 60,66 ---- { "New Game", New_Game, FALSE }, { "Restart", Restart_Game, FALSE }, { "Save", Save_Game, FALSE }, + #define OTHER_BUTTON 3 { "Other", Other, TRUE }, { "Hint", Hints, FALSE }, *************** *** 68,73 **** --- 72,78 ---- Button_Rec Buttons2[NBUTTONS] = { { "Redraw", Redraw_All, FALSE }, { "Sides", Sides, FALSE }, + #define SAMPLES_BUTTON 2 { "Samples", Show_Samples, TRUE }, { "Other", Other, TRUE }, *************** *** 107,114 **** { #undef SETARG #define SETARG(name,value) \ ! if (argi >= XtNumber(args)) {fprintf(stderr,"BS args overrun!\n");} \ ! XtSetArg( args[argi], name, value ); ++argi; Arg args[10]; int argi; --- 112,119 ---- { #undef SETARG #define SETARG(name,value) \ ! DEBUG_ERROR(argi >= XtNumber(args),"BS args overrun!\n" ); \ ! XtSetArg( args[argi], name, (XtArgVal)value ); ++argi; Arg args[10]; int argi; *************** *** 218,226 **** if (All_Buttons == &Buttons1[0]) { All_Buttons = &Buttons2[0]; } else { All_Buttons = &Buttons1[0]; } ! All_Buttons[3].hilite = !All_Buttons[3].hilite; XClearArea( XtDisplay(Board), XtWindow(w), 0, 0, 0, (unsigned)(2*Tile_Height-Side_Y-Shadow_Y-1), FALSE ); Button_Expose( w, event, params, num_params ); --- 223,236 ---- if (All_Buttons == &Buttons1[0]) { All_Buttons = &Buttons2[0]; } else { + /*--Turn off Samples mode if we are changing menus. */ + if (Buttons2[SAMPLES_BUTTON].hilite) { + (*(Buttons2[SAMPLES_BUTTON].action))(w, event, params, num_params); + Buttons2[SAMPLES_BUTTON].hilite = FALSE; + } All_Buttons = &Buttons1[0]; } ! All_Buttons[OTHER_BUTTON].hilite = !All_Buttons[OTHER_BUTTON].hilite; XClearArea( XtDisplay(Board), XtWindow(w), 0, 0, 0, (unsigned)(2*Tile_Height-Side_Y-Shadow_Y-1), FALSE ); Button_Expose( w, event, params, num_params ); *************** *** 259,266 **** FILE *file; DEBUG_CALL(Restore_Game); ! strcpy( &name[0], getenv( "HOME" ) ); ! strcat( &name[0], "/.dragon-save" ); file = fopen( &name[0], "r" ); if (file == (FILE*)NULL) { Complain( "Cannot open the $HOME/.dragon-save file." ); --- 269,276 ---- FILE *file; DEBUG_CALL(Restore_Game); ! (void)strcpy( &name[0], getenv( "HOME" ) ); ! (void)strcat( &name[0], "/.dragon-save" ); file = fopen( &name[0], "r" ); if (file == (FILE*)NULL) { Complain( "Cannot open the $HOME/.dragon-save file." ); *************** *** 289,296 **** FILE *file; DEBUG_CALL(Save_Game); ! strcpy( &name[0], getenv( "HOME" ) ); ! strcat( &name[0], "/.dragon-save" ); file = fopen( &name[0], "w" ); if (file == (FILE*)NULL) { Complain( "Cannot open the $HOME/.dragon-save file." ); --- 299,306 ---- FILE *file; DEBUG_CALL(Save_Game); ! (void)strcpy( &name[0], getenv( "HOME" ) ); ! (void)strcat( &name[0], "/.dragon-save" ); file = fopen( &name[0], "w" ); if (file == (FILE*)NULL) { Complain( "Cannot open the $HOME/.dragon-save file." ); *************** *** 401,408 **** if (but[i].text == NULL) { goto Next_Button; } l = strlen(but[i].text); if (l > 8) { ! fprintf( stderr, "Button name too long: %s\n", ! but[i].text ); l = 8; } but[i].x = x; --- 411,418 ---- if (but[i].text == NULL) { goto Next_Button; } l = strlen(but[i].text); if (l > 8) { ! (void)fprintf( stderr, "Button name too long: %s\n", ! but[i].text ); l = 8; } but[i].x = x; *************** *** 463,469 **** * Called to draw the vector text in some button. ******************************************************************************/ { ! static char pntserr[] = "DT pnts overflow!\n"; XPoint pnts[50]; int pnti; int h1; --- 473,481 ---- * Called to draw the vector text in some button. ******************************************************************************/ { ! #ifdef WANTDEBUG ! static char *pntserr = "DT pnts overflow!\n"; ! #endif XPoint pnts[50]; int pnti; int h1; *************** *** 471,477 **** #undef PNT #define PNT(X,Y) \ ! if (pnti >= XtNumber(pnts)){fprintf(stderr,pntserr);} \ pnts[pnti].x = X; pnts[pnti].y = Y; ++pnti ; --- 483,489 ---- #undef PNT #define PNT(X,Y) \ ! DEBUG_ERROR( pnti >= XtNumber(pnts), pntserr ); \ pnts[pnti].x = X; pnts[pnti].y = Y; ++pnti ; *************** *** 500,512 **** PNT( 0, h26 ); PNT( w6, h6 ); PNT( w6, h6 ); ! PNT( 2*w6, 0 ); PNT( w6, -h6 ); PNT( w6, -h6 ); PNT( 0, -h26 ); PNT( -w6, -h6 ); PNT( -w6, -h6 ); ! PNT( -2*w6, 0 ); PNT( -w6, h6 ); PNT( -w6, h6 ); break; --- 512,524 ---- PNT( 0, h26 ); PNT( w6, h6 ); PNT( w6, h6 ); ! PNT( w1-4*w6, 0 ); PNT( w6, -h6 ); PNT( w6, -h6 ); PNT( 0, -h26 ); PNT( -w6, -h6 ); PNT( -w6, -h6 ); ! PNT( -(w1-4*w6),0 ); PNT( -w6, h6 ); PNT( -w6, h6 ); break; *** ../dragon/dragon.man Tue May 23 00:03:54 1989 --- dragon.man Mon May 22 23:55:37 1989 *************** *** 8,16 **** --- 8,18 ---- [-icongeometry geometry] [-/+iconic] [-iconname name] + [-geometry geometry] [-/+reverse] [-/+shadows] [-sides type] + [-/+sticky] .SH DESCRIPTION \fIDragon\fP plays a version of the game of Mah-Jongg. *************** *** 73,78 **** --- 75,85 ---- 250 milliseconds. Clicks further apart than this will be treated as separate single clicks instead of one double click. .TP 8 + .B \-geometry geometry + Use this option to specify the geometry to be used for the + \fIdragon\fP window. There are five sizes that \fIdragon\fP prefers, + 450x340, 650x500, 870x660, 1080x820, and 1290x980. + .TP 8 .B \-icongeometry geometry Use this option to specify the geometry to be used for the \fIdragon\fP icon. There are two sizes that \fIdragon\fP prefers, *************** *** 97,102 **** --- 104,116 ---- .B \-sides type This option can be used to specify the way that tile sides are drawn. There are four possiblities. "gray" (the default), "black", and "line". + .TP 8 + .B \-sticky + By default, the first selection is "sticky" (+sticky) which means that + attempts to select a second tile that is free but which doesn't match + the first are rejected. If the first selection is not sticky + (-sticky), an attempt to select a free tile that doesn't match the first + will deselect the first tile and leave only the second selected. .SH MOUSE BUTTONS Click button 1 on any tile to select it. Click on any menu button to activate it. *************** *** 176,181 **** --- 190,201 ---- Specifies the maximum time to allow between the two clicks that form a double-click. The default is 250. .TP 8 + .B "geometry (\fPclass\fB Geometry)" + Use this option to specify the geometry to be used for the + \fIdragon\fP window. There are five sizes that \fIdragon\fP prefers, + 450x340, 650x500, 870x660, 1080x820, and 1290x980. The default is + "450x340". + .TP 8 .B "iconGeometry (\fPclass\fB IconGeometry)" Specifies the geometry of the \fIdragon\fB icon. Preferred sizes are 32x32 and 64x64. The default is "64x64". *************** *** 190,195 **** --- 210,219 ---- .B "reverseVideo (\fPclass\fB ReverseVideo)" Specifies TRUE for reverse-video effects and FALSE for normal-video. The default is FALSE. + .TP 8 + .B "stickyTile \(fPclass\fB StickyTile)| + Specify TRUE for first tile selected to be sticky (default), FALSE for + selection follows click. .TP 8 .B "tileShadows (\fPclass\fB TileShadows)" Specifies TRUE if tiles are to have 3-D shadows and FALSE if not. The *** ../dragon/icon.c Tue May 23 00:04:01 1989 --- icon.c Mon May 22 23:55:41 1989 *************** *** 13,19 **** extern char * malloc(); extern free(); - extern Pixmap XCreateTile(); GC Icon_GC = (GC)0; /* GC used for Icon window. */ --- 13,18 ---- *************** *** 58,70 **** * preexisting Icon images. */ if (Icon_GC == (GC)0) { ! if (Dragon_Resources.Reverse_Video) { ! gcv.background = BlackPixelOfScreen(XtScreen(w)); ! gcv.foreground = WhitePixelOfScreen(XtScreen(w)); ! } else { ! gcv.foreground = BlackPixelOfScreen(XtScreen(w)); ! gcv.background = WhitePixelOfScreen(XtScreen(w)); ! } Icon_GC = XtGetGC( w, GCForeground|GCBackground, &gcv ); } ximage.height = size; --- 57,64 ---- * preexisting Icon images. */ if (Icon_GC == (GC)0) { ! gcv.foreground = Dragon_Resources.Foreground; ! gcv.background = Dragon_Resources.Background; Icon_GC = XtGetGC( w, GCForeground|GCBackground, &gcv ); } ximage.height = size; *************** *** 115,122 **** int scr; #define SETARG(name,value) \ ! if (*argi >= argn) {fprintf(stderr,"IS args overrun!\n");} \ ! XtSetArg( args[*argi], name, value ); ++*argi; /*--If we've been asked to set up the Icon geometry then do that. */ --- 109,116 ---- int scr; #define SETARG(name,value) \ ! DEBUG_ERROR( *argi >= argn, "IS args overrun!\n" ); \ ! XtSetArg( args[*argi], name, (XtArgVal)value ); ++*argi; /*--If we've been asked to set up the Icon geometry then do that. */ *************** *** 172,183 **** ic[i].min_height <= size && size-ic[i].min_height & ic[i].height_inc == 0) { Icon_Pixmap = /* Size is perfect */ ! XCreateTile( XtDisplay(Dragon), ! RootWindowOfScreen(XtScreen(Dragon)), ! (size == 64 ! ? &dragon_icon64_bits[0] ! : &dragon_icon32_bits[0]), ! size, size ); } } if (Icon_Pixmap != (Pixmap)NULL || /* Stop on success */ --- 166,181 ---- ic[i].min_height <= size && size-ic[i].min_height & ic[i].height_inc == 0) { Icon_Pixmap = /* Size is perfect */ ! XCreatePixmapFromBitmapData ! ( XtDisplay(Dragon), ! RootWindowOfScreen(XtScreen(Dragon)), ! (size == 64 ! ? &dragon_icon64_bits[0] ! : &dragon_icon32_bits[0]), ! (unsigned int)size, (unsigned int)size, ! Dragon_Resources.Foreground, ! Dragon_Resources.Background, ! DefaultDepthOfScreen(XtScreen(Dragon)) ); } } if (Icon_Pixmap != (Pixmap)NULL || /* Stop on success */ *************** *** 193,199 **** char *data; char *orig; char *ptr; ! int w, wb, h, hb; int inc; /*--Figure out which of our pixmaps we will copy into this odd pixmap. */ --- 191,197 ---- char *data; char *orig; char *ptr; ! unsigned int w, wb, h, hb; int inc; /*--Figure out which of our pixmaps we will copy into this odd pixmap. */ *************** *** 235,243 **** /*--Create the pixmap and free up the data area. */ Icon_Pixmap = ! XCreateTile( XtDisplay(Dragon), ! RootWindowOfScreen(XtScreen(Dragon)), ! data, w, h ); free( data ); } XFree( ic ); --- 233,243 ---- /*--Create the pixmap and free up the data area. */ Icon_Pixmap = ! XCreatePixmapFromBitmapData ! ( XtDisplay(Dragon), RootWindowOfScreen(XtScreen(Dragon)), ! data, w, h, ! Dragon_Resources.Foreground, Dragon_Resources.Background, ! DefaultDepthOfScreen(XtScreen(Dragon)) ); free( data ); } XFree( ic ); *************** *** 262,270 **** Widget Icon_Core; #define LCLARG(name,value) \ ! if (SomeArgsi >= XtNumber(SomeArgs)) \ ! {fprintf(stderr,"IS SomeArgs overrun!\n");} \ ! XtSetArg( SomeArgs[SomeArgsi], name, value ); ++SomeArgsi; ; /*--Create a shell to contain the Icon window. */ --- 262,270 ---- Widget Icon_Core; #define LCLARG(name,value) \ ! DEBUG_ERROR( SomeArgsi >= XtNumber(SomeArgs), \ ! "IS SomeArgs overrun!\n" ); \ ! XtSetArg( SomeArgs[SomeArgsi], name, (XtArgVal)value ); ++SomeArgsi; ; /*--Create a shell to contain the Icon window. */ *** ../dragon/main.c Tue May 23 00:04:03 1989 --- main.c Mon May 22 23:55:43 1989 *************** *** 38,57 **** XtRString, (caddr_t)default} #define INT(name,class,field,default) \ {name, class, XtRInt, sizeof(int), offset(field), XtRInt, (caddr_t)default} #define STRING(name,class,field,default) \ {name, class, XtRString, sizeof(String), offset(field), XtRString, \ (caddr_t)default} static XtResource dragon_resources[] = { CURSOR ( "cursor", XtCCursor, Cursor, "hand2" ), BOOLEAN( "debug", "Debug", Debug, &def_FALSE ), INT ( "doubleClick", "DoubleClick", Double_Click_Time, &def_DCTime ), ! STRING ( XtNgeometry, XtCGeometry, Geometry, "444x339" ), STRING ( "iconGeometry", "IconGeometry", Icon_Geometry, "64x64" ), BOOLEAN( "iconic", "Iconic", Iconic, &def_FALSE ), STRING ( XtNiconName, XtCIconName, Icon_Name, NULL ), BOOLEAN( XtNreverseVideo, XtCReverseVideo, Reverse_Video, &def_FALSE ), ! BOOLEAN( "tileShadows", "TileShadows", Tile_Shadows, &def_TRUE ), STRING ( "tileSides", "TileSides", Tile_Sides, "gray" ), }; --- 38,65 ---- XtRString, (caddr_t)default} #define INT(name,class,field,default) \ {name, class, XtRInt, sizeof(int), offset(field), XtRInt, (caddr_t)default} + #define PIXEL(name,class,field,default) \ + {name, class, XtRPixel, sizeof(Pixel), \ + offset(field), XtRString, (caddr_t)default} #define STRING(name,class,field,default) \ {name, class, XtRString, sizeof(String), offset(field), XtRString, \ (caddr_t)default} static XtResource dragon_resources[] = { + PIXEL ( XtNbackground, XtCBackground, Background, + XtExtdefaultbackground ), CURSOR ( "cursor", XtCCursor, Cursor, "hand2" ), BOOLEAN( "debug", "Debug", Debug, &def_FALSE ), INT ( "doubleClick", "DoubleClick", Double_Click_Time, &def_DCTime ), ! PIXEL ( XtNforeground, XtCForeground, Foreground, ! XtExtdefaultforeground ), ! STRING ( XtNgeometry, XtCGeometry, Geometry, "450x340" ), STRING ( "iconGeometry", "IconGeometry", Icon_Geometry, "64x64" ), BOOLEAN( "iconic", "Iconic", Iconic, &def_FALSE ), STRING ( XtNiconName, XtCIconName, Icon_Name, NULL ), BOOLEAN( XtNreverseVideo, XtCReverseVideo, Reverse_Video, &def_FALSE ), ! BOOLEAN( "stickyTile", "StickyTile", Sticky_Tile, &def_TRUE ), ! BOOLEAN( "tileShadows", "TileShadows", Tile_Shadows, &def_TRUE ), STRING ( "tileSides", "TileSides", Tile_Sides, "gray" ), }; *************** *** 80,85 **** --- 88,95 ---- {"-shadows", ".tileShadows", XrmoptionNoArg, (caddr_t)"off" }, {"+shadows", ".tileShadows", XrmoptionNoArg, (caddr_t)"on" }, {"-sides", ".tileSides", XrmoptionSepArg, (caddr_t)"line"}, + {"-sticky", ".stickyTile", XrmoptionNoArg, (caddr_t)"off" }, + {"+sticky", ".stickyTile", XrmoptionNoArg, (caddr_t)"on" }, }; typedef struct { *************** *** 100,105 **** --- 110,116 ---- {"-/+reverse", "turn on/off reverse video"}, {"-/+shadows", "turn on/off tile shadows"}, {"-sides line/black/gray","set the style for tile sides"}, + {"-/+sticky", "first tile selected sticky"}, { NULL, NULL } }; *************** *** 157,195 **** } /* Command_Line_Help */ \f - Pixmap XCreateTile( display, d, data, width, height ) - Display *display; - Drawable d; - char *data; - unsigned int width, height; - /****************************************************************************** - * Converted form of XCreatePixmapFromBitmapData. Use our GC and don't bother - * the Server for another one. - ******************************************************************************/ - { - XImage ximage; - Pixmap pix; - - pix = XCreatePixmap( display, d, width, height, 1 ); - if (pix == (Pixmap)0) return (Pixmap)0; - - ximage.height = height; - ximage.width = width; - ximage.depth = 1; - ximage.xoffset = 0; - ximage.format = XYBitmap; - ximage.data = data; - ximage.byte_order = LSBFirst; - ximage.bitmap_unit = 8; - ximage.bitmap_bit_order = LSBFirst; - ximage.bitmap_pad = 8; - ximage.bytes_per_line = (width+7)/8; - - XPutImage( display, pix, Normal_GC, &ximage, 0, 0, 0, 0, width, height ); - return pix; - } /* XCreateTile */ - - \f static void GC_Setup() /****************************************************************************** * Set up the GC's that we will be using for drawing. --- 168,173 ---- *************** *** 198,208 **** XGCValues gcv; Pixel pix; ! /*--Xor_GC - fg = black, bg = white, func = xor */ gcv.function = GXxor; ! gcv.foreground = BlackPixelOfScreen(XtScreen(Dragon)); ! gcv.background = WhitePixelOfScreen(XtScreen(Dragon)); Xor_GC = XtGetGC( Dragon, GCFunction|GCForeground|GCBackground, &gcv ); --- 176,187 ---- XGCValues gcv; Pixel pix; ! /*--Xor_GC - fg = black, bg = white, func = xor; flops colors between the ! * foreground and the background when applied. */ gcv.function = GXxor; ! gcv.foreground = Dragon_Resources.Foreground ^ Dragon_Resources.Background; ! gcv.background = (Pixel)0; /* pixel value with all bits "off" */ Xor_GC = XtGetGC( Dragon, GCFunction|GCForeground|GCBackground, &gcv ); *************** *** 210,227 **** /*--Normal_GC - fg = black, bg = white, func = copy */ gcv.function = GXcopy; ! if (Dragon_Resources.Reverse_Video) { ! gcv.background = BlackPixelOfScreen(XtScreen(Dragon)); ! gcv.foreground = WhitePixelOfScreen(XtScreen(Dragon)); ! } Normal_GC = XtGetGC( Dragon, GCFunction|GCForeground|GCBackground, &gcv ); /*--Gray_GC - fg = black, bg = white, func = copy, tile = Gray */ ! gcv.tile = XCreateTile( XtDisplay(Board), XtWindow(Board), ! gray_bits, gray_width, gray_height ); ! if (gcv.tile == None) { ! fprintf( stderr, "Can't allocate gray pixmap.\n" ); exit(1); } gcv.fill_style = FillTiled; --- 189,208 ---- /*--Normal_GC - fg = black, bg = white, func = copy */ gcv.function = GXcopy; ! gcv.foreground = Dragon_Resources.Foreground; ! gcv.background = Dragon_Resources.Background; Normal_GC = XtGetGC( Dragon, GCFunction|GCForeground|GCBackground, &gcv ); /*--Gray_GC - fg = black, bg = white, func = copy, tile = Gray */ ! gcv.tile = ! XCreatePixmapFromBitmapData ! ( XtDisplay(Board), XtWindow(Board), ! gray_bits, gray_width, gray_height, ! Dragon_Resources.Foreground, Dragon_Resources.Background, ! DefaultDepthOfScreen(XtScreen(Board)) ); ! if (gcv.tile == (Pixmap)0L) { ! (void)fprintf( stderr, "Can't allocate gray pixmap.\n" ); exit(1); } gcv.fill_style = FillTiled; *************** *** 229,259 **** GCFunction|GCForeground|GCBackground|GCTile|GCFillStyle, &gcv ); ! /*--Over_GC - fg = black, bg = white, func = or */ ! if (Dragon_Resources.Reverse_Video) { ! gcv.function = GXand; ! } else { ! gcv.function = GXor; ! } ! gcv.tile = ! XCreateTile( XtDisplay(Board), XtWindow(Board), ! shadow_bits, shadow_width, shadow_height ); ! if (gcv.tile == None) { ! fprintf( stderr, "Can't allocate shadow pixmap.\n" ); exit(1); } ! gcv.fill_style = FillTiled; Over_GC = XtGetGC( Dragon, ! GCFunction|GCForeground|GCBackground|GCTile|GCFillStyle, &gcv ); /*--Reverse_GC - fg = white, bg = black, func = copy */ gcv.function = GXcopy; ! pix = gcv.background; ! gcv.background = gcv.foreground; ! gcv.foreground = pix; Reverse_GC = XtGetGC( Dragon, GCFunction|GCForeground|GCBackground, &gcv ); } /* GC_Setup */ --- 210,237 ---- GCFunction|GCForeground|GCBackground|GCTile|GCFillStyle, &gcv ); ! /*--Over_GC - fg = black xor white, bg = 0, func = copy */ ! gcv.function = GXcopy; ! gcv.stipple = /* stipple operations are always depth 1 */ ! XCreateBitmapFromData ! ( XtDisplay(Board), XtWindow(Board), ! shadow_bits, shadow_width, shadow_height ); ! if (gcv.stipple == (Pixmap)0L) { ! (void)fprintf( stderr, "Can't allocate shadow pixmap.\n" ); exit(1); } ! gcv.fill_style = FillStippled; Over_GC = XtGetGC( Dragon, ! GCFunction|GCForeground|GCBackground| ! GCStipple|GCFillStyle, &gcv ); /*--Reverse_GC - fg = white, bg = black, func = copy */ gcv.function = GXcopy; ! gcv.background = Dragon_Resources.Foreground; ! gcv.foreground = Dragon_Resources.Background; Reverse_GC = XtGetGC( Dragon, GCFunction|GCForeground|GCBackground, &gcv ); } /* GC_Setup */ *************** *** 271,278 **** #undef SETARG #define SETARG(name,value) \ ! if (argi >= XtNumber(args)) {fprintf(stderr,"main, args overrun!\n");} \ ! XtSetArg( args[argi], name, value ); ++argi; /*--Start up the toolkit. This creates a shell widget. Unfortunately the * only way the toolkit allows you to specify default application resources --- 249,256 ---- #undef SETARG #define SETARG(name,value) \ ! DEBUG_ERROR(argi >= XtNumber(args), "main, args overrun!\n" ); \ ! XtSetArg( args[argi], name, (XtArgVal)value ); ++argi; /*--Start up the toolkit. This creates a shell widget. Unfortunately the * only way the toolkit allows you to specify default application resources *************** *** 323,335 **** SETARG( XtNmaxAspectX, 1333 ); SETARG( XtNmaxAspectY, 1000 ); SETARG( XtNgeometry, Dragon_Resources.Geometry ); ! if (Dragon_Resources.Reverse_Video) { ! SETARG( XtNbackground, BlackPixelOfScreen(XtScreen(Dragon)) ); ! SETARG( XtNforeground, WhitePixelOfScreen(XtScreen(Dragon)) ); ! } else { ! SETARG( XtNforeground, BlackPixelOfScreen(XtScreen(Dragon)) ); ! SETARG( XtNbackground, WhitePixelOfScreen(XtScreen(Dragon)) ); ! } SETARG( XtNallowShellResize, TRUE ); SETARG( XtNinput, TRUE ); --- 301,308 ---- SETARG( XtNmaxAspectX, 1333 ); SETARG( XtNmaxAspectY, 1000 ); SETARG( XtNgeometry, Dragon_Resources.Geometry ); ! SETARG( XtNforeground, Dragon_Resources.Foreground ); ! SETARG( XtNbackground, Dragon_Resources.Background ); SETARG( XtNallowShellResize, TRUE ); SETARG( XtNinput, TRUE ); *************** *** 352,358 **** } else if (strcmp( Dragon_Resources.Tile_Sides, "gray" ) == 0) { Tile_Control |= BLACKSIDE | GRAYSIDE; } else if (strcmp( Dragon_Resources.Tile_Sides, "line" ) != 0) { ! fprintf(stderr,"-side option not given line, gray, or black value.\n"); } /*--Create the board that we will be using; realize it too. */ --- 325,332 ---- } else if (strcmp( Dragon_Resources.Tile_Sides, "gray" ) == 0) { Tile_Control |= BLACKSIDE | GRAYSIDE; } else if (strcmp( Dragon_Resources.Tile_Sides, "line" ) != 0) { ! (void)fprintf( stderr, ! "-side option not given line, gray, or black value.\n"); } /*--Create the board that we will be using; realize it too. */ *************** *** 368,378 **** /*--Now make it all appear in front of the user. */ { Pixmap pix; ! pix = XCreateTile( XtDisplay(Board), XtWindow(Board), ! background_bits, background_width, ! background_height); ! if (pix == None) { ! fprintf( stderr, "Can't allocate background pixmap.\n" ); exit(1); } XSetWindowBackgroundPixmap( XtDisplay(Board), XtWindow(Board), pix ); --- 342,356 ---- /*--Now make it all appear in front of the user. */ { Pixmap pix; ! pix = ! XCreatePixmapFromBitmapData ! ( XtDisplay(Board), XtWindow(Board), ! background_bits, background_width, background_height, ! Dragon_Resources.Foreground, Dragon_Resources.Background, ! DefaultDepthOfScreen(XtScreen(Board)) ); ! ! if (pix == (Pixmap)0L) { ! (void)fprintf( stderr, "Can't allocate background pixmap.\n" ); exit(1); } XSetWindowBackgroundPixmap( XtDisplay(Board), XtWindow(Board), pix ); *************** *** 384,399 **** XtMainLoop(); } /* main */ - - #if 0 - */* print out the name of a widget; NOTE: no \n printed so printout is not - * * flushed until our caller does one. */ - * - *void spit(w) - * Widget w; - *{ - * if (w == NULL) return; - * spit( w->core.parent ); - * fprintf( stderr, ".%s", w->core.name ); - *} - #endif /* 0 */ --- 362,364 ---- *** ../dragon/main.h Tue May 23 00:04:05 1989 --- main.h Mon May 22 23:55:44 1989 *************** *** 15,22 **** --- 15,24 ---- #include <X11/Simple.h> #include <X11/StringDefs.h> + #ifndef TRUE #define TRUE 1 #define FALSE 0 + #endif #ifdef _MAIN_C_ #define VAR(A) A *************** *** 32,37 **** --- 34,41 ---- ******************************************************************************/ typedef struct _Dragon_Resources_Rec{ + Pixel Foreground; /* Default foreground color */ + Pixel Background; /* Default background color */ Cursor Cursor; /* Name of cursor to use */ Boolean Debug; /* Debug printouts */ int Double_Click_Time; /* Time (ms) between clicks */ *************** *** 40,61 **** Boolean Iconic; /* Do we start as an icon? */ String Icon_Name; /* Name for the icon */ Boolean Reverse_Video; /* Do all in reverse? */ Boolean Tile_Shadows; /* Want shadows? */ String Tile_Sides; /* What side type? */ } Dragon_Resources_Rec, *Dragon_Resources_Ptr; #define DEBUG_CALL(Name) \ if (Dragon_Resources.Debug) { \ ! fprintf( stderr, "Name call\n" ); fflush(stderr); \ } #define DEBUG_RETURN(Name) \ if (Dragon_Resources.Debug) { \ ! fprintf( stderr, "Name return\n" ); fflush(stderr); \ } #define DEBUG_OTHER(Name,Other) \ if (Dragon_Resources.Debug) { \ ! fprintf( stderr, "Name Other\n" ); fflush(stderr); \ } /****************************************************************************** * Bitmap/Image Initialization Structure --- 44,75 ---- Boolean Iconic; /* Do we start as an icon? */ String Icon_Name; /* Name for the icon */ Boolean Reverse_Video; /* Do all in reverse? */ + Boolean Sticky_Tile; /* Is first tile sticky? */ Boolean Tile_Shadows; /* Want shadows? */ String Tile_Sides; /* What side type? */ } Dragon_Resources_Rec, *Dragon_Resources_Ptr; + #ifdef WANTDEBUG #define DEBUG_CALL(Name) \ if (Dragon_Resources.Debug) { \ ! (void)fprintf( stderr, "Name call\n" ); (void)fflush(stderr); \ } #define DEBUG_RETURN(Name) \ if (Dragon_Resources.Debug) { \ ! (void)fprintf( stderr, "Name return\n" ); (void)fflush(stderr); \ } #define DEBUG_OTHER(Name,Other) \ if (Dragon_Resources.Debug) { \ ! (void)fprintf( stderr, "Name Other\n" ); (void)fflush(stderr); \ } + #define DEBUG_ERROR(Test,Msg) \ + if (Test) { (void)fprintf(stderr,Msg); (void)fflush(stderr); } + #else + #define DEBUG_CALL(Name) + #define DEBUG_RETURN(Name) + #define DEBUG_OTHER(Name,Other) + #define DEBUG_ERROR(Test,Msg) + #endif /* WANTDEBUG */ /****************************************************************************** * Bitmap/Image Initialization Structure *************** *** 96,98 **** --- 110,116 ---- VAR( GC Over_GC ); /* fg=blk, bg=wht, fcn=or */ VAR( GC Reverse_GC ); /* fg=wht, bg=blk, fcn=copy */ VAR( GC Xor_GC ); /* fg=blk, bg=wht, fcn=xor */ + + #undef VAR + #undef VARI + *** ../dragon/tile.c Tue May 23 00:03:57 1989 --- tile.c Mon May 22 23:55:46 1989 *************** *** 122,129 **** /*--Make sure that our caller is rational. */ if (size < 1 || size > 5) { ! fprintf( stderr, "Bad size given to Configure_Tiles in tile.c [%d].\n", ! size ); size = 1; } --- 122,130 ---- /*--Make sure that our caller is rational. */ if (size < 1 || size > 5) { ! (void)fprintf( stderr, ! "Bad size given to Configure_Tiles in tile.c [%d].\n", ! size ); size = 1; } *************** *** 201,207 **** * Called to draw the number in the upper right corner of a numbered tile. ******************************************************************************/ { ! XPutImage( XtDisplay(Board), XtWindow(Board), Over_GC, image, 0, 0, x + Number_X, y + Number_Y, (unsigned int)image->width, (unsigned int)image->height ); } /* Draw_Number */ --- 202,208 ---- * Called to draw the number in the upper right corner of a numbered tile. ******************************************************************************/ { ! XPutImage( XtDisplay(Board), XtWindow(Board), Xor_GC, image, 0, 0, x + Number_X, y + Number_Y, (unsigned int)image->width, (unsigned int)image->height ); } /* Draw_Number */ No differences encountered