tkacik@kyzyl.mi.org (Tom Tkacik) (06/08/91)
Submitted-by: tkacik@kyzyl.mi.org (Tom Tkacik) Posting-number: Volume 1, Issue 27 Archive-name: mahjongg/patch2 Patch-To: mahjongg: Volume 1, Issue 15-16,21 Because several of you noticed that iswind() does not always seem to work properly, I have here a set of patches for mahjongg to take care of that problem. This uses the new prewinit() routine I posted a few days ago. Unless you allow logins other than through the console, you should not notice a difference. -- Tom Tkacik | tkacik@kyzyl.mi.org | To rent this space, call 1-800-555-QUIP. tkacik@hobbes.cs.gmr.com | =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= *** Makefile~ Tue Mar 12 07:32:41 1991 --- Makefile Wed Jun 5 17:57:52 1991 *************** *** 14,21 **** # program source and object files HDR = mahjongg.h ! SRC = mahjongg.c window.c tiles.c event.c bamboo.c character.c dot.c other.c ! OBJ = mahjongg.o window.o tiles.o event.o bamboo.o character.o dot.o other.o # Uncomment the next two lines if you want to use GCC CC = gcc --- 14,23 ---- # program source and object files HDR = mahjongg.h ! SRC = mahjongg.c window.c tiles.c event.c prewinit.c\ ! bamboo.c character.c dot.c other.c ! OBJ = mahjongg.o window.o tiles.o event.o prewinit.o\ ! bamboo.o character.o dot.o other.o # Uncomment the next two lines if you want to use GCC CC = gcc *** window.c~ Mon Mar 11 18:27:26 1991 --- window.c Wed Jun 5 18:02:52 1991 *************** *** 6,12 **** */ #include <stdio.h> - #include <fcntl.h> #include <termio.h> #include <sys/signal.h> #include <tam.h> --- 6,11 ---- *************** *** 34,39 **** --- 33,39 ---- struct umdata mouse = { MSDOWN, SIDEBORDER, TOPBORDER, 0, 0, &stick }; int reborder(), leave(); + void prewinit(); /* window routines */ *************** *** 43,66 **** initwindow() { ! /* start with a clean window */ ! /* this needs to be done because winit() uses the */ ! /* current window first, so we open a new one */ ! (void)close(0); ! (void)close(1); ! (void)close(2); ! wn = open("/dev/window", O_RDWR ); ! (void)dup(wn); ! (void)dup(wn); /* initialize the tam routines */ winit(); - - /* can only be run on the unixpc screen */ - if(iswind()==0) { - (void)fprintf(stderr, "must use bitmapped screen\n"); - wexit(1); - } /* open the mahjongg window */ if((wn = wcreate(WINDOW_Y, WINDOW_X, ROWS, COLS, NBORDER)) == -1) { --- 43,53 ---- initwindow() { ! /* pre-check if things are ok --- no need to call iswind() */ ! prewinit(); /* initialize the tam routines */ winit(); /* open the mahjongg window */ if((wn = wcreate(WINDOW_Y, WINDOW_X, ROWS, COLS, NBORDER)) == -1) { *** prewinit.c~ Wed Jun 5 17:56:42 1991 --- prewinit.c Wed Jun 5 17:56:28 1991 *************** *** 0 **** --- 1,43 ---- + /* + * This routine should be executed before running the tam routine winit() + * It will check if the program is being run from the console, and will + * get a fresh window for the program to use. + * + * Iswind() is not needed. This routine does the job. + * + * This routine is in the public domain. + * Not only are you allowed to use this code, I wish you would. + * + * Thomas Tkacik tkacik@kyzyl.mi.org + */ + + #include <fcntl.h> + #include <stdio.h> + #include <sys/window.h> + + void prewinit() + { + + struct uwdata win_data; + int wn; + + /* will fail if not a window */ + if(ioctl(1, WIOCGETD, &win_data) == -1) { + (void)fprintf(stderr, "must use the bitmapped display\n"); + exit(1); + } + + /* everything is fine, running from the console */ + + /* detach from stdin, stout and stderr, and get a fresh window */ + (void)close(0); + if((wn = open("/dev/window", O_RDWR )) == -1) { + (void)fprintf(stderr, "cannot open window\n"); + exit(1); + } + (void)close(1); + (void)close(2); + (void)dup(wn); + (void)dup(wn); + } + -- Tom Tkacik | tkacik@kyzyl.mi.org | To rent this space, call 1-800-555-QUIP. tkacik@hobbes.cs.gmr.com | -- David H. Brierley Home: dave@galaxia.newport.ri.us; Work: dhb@quahog.ssd.ray.com Send comp.sources.3b1 submissions to comp-sources-3b1@galaxia.newport.ri.us %% Can I be excused, my brain is full. **