home *** CD-ROM | disk | FTP | other *** search
- From: guido@cwi.nl (Guido van Rossum)
- Newsgroups: alt.sources
- Subject: STDWIN 0.9.5, Part 13/19
- Message-ID: <3077@charon.cwi.nl>
- Date: 4 Mar 91 11:58:15 GMT
-
- Archive-name: stdwin/part13
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 13 (of 19)."
- # Contents: Appls/bed/bed.c Appls/dpv/dpvcontrol.c
- # Conf/proto.os.amoeba Ports/alfa/event.c Ports/alfa/syswin.c
- # Ports/mac/macwin.h Ports/mac/stdwin.c Ports/x11/cursor.c
- # Ports/x11/event.c
- # Wrapped by guido@voorn.cwi.nl on Mon Mar 4 12:37:30 1991
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'Appls/bed/bed.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Appls/bed/bed.c'\"
- else
- echo shar: Extracting \"'Appls/bed/bed.c'\" \(5379 characters\)
- sed "s/^X//" >'Appls/bed/bed.c' <<'END_OF_FILE'
- X#include <stdio.h>
- X#include <ctype.h>
- X#include "bed.h"
- X#include "menu.h"
- X
- X#define MINSQRSIZE 5
- X#define MAXSQRSIZE 15
- X
- XMENU *pfmenu ;
- XMENU *pmmenu ;
- XMENU *popmenu ;
- X
- Xint sqrsize ;
- X
- Xint map_width = DEF_COLS ;
- Xint map_height = DEF_ROWS ;
- X
- Xchar *raster = NULL ;
- Xint raster_lenght ;
- Xint stride ;
- X
- Xint lastbyte ;
- Xchar bits[] = { 0xFF, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F } ;
- X
- Xchar *title = NULL ;
- Xchar *fname = NULL ;
- X
- XWINDOW *win ;
- X
- Xbool changed = FALSE ;
- X
- Xbool text_only = FALSE ;
- X
- Xextern bool drawline ;
- X
- Xextern bool drawcircle ;
- X
- Xextern bool selrect ;
- Xextern int sr_left ;
- Xextern int sr_top ;
- Xextern int sr_right ;
- Xextern int sr_bottom ;
- X
- Xextern void invertbit () ;
- X
- Xvoid
- Xdrawproc (win, left, top, right, bottom)
- X WINDOW *win ;
- X int left ;
- X int top ;
- X int right ;
- X int bottom ;
- X{
- X int row ;
- X register int col ;
- X register int l ;
- X register int r ;
- X int t ;
- X int b ;
- X int rend ;
- X int fcol, fbyte, fbit, flr ;
- X
- X if (left < 0) left = 0 ;
- X if (right > map_width * sqrsize) right = map_width * sqrsize ;
- X if (top < 0) top = 0 ;
- X if (bottom > map_height * sqrsize ) bottom = map_height * sqrsize ;
- X
- X rend = (right+sqrsize-1) / sqrsize ;
- X
- X fcol = left / sqrsize ;
- X flr = fcol * sqrsize ;
- X fbyte = fcol / 8 ;
- X fbit = fcol % 8 ;
- X
- X for (row = top / sqrsize, t = row * sqrsize, b = t + sqrsize ;
- X t < bottom ;
- X ++row, t += sqrsize, b = t + sqrsize) {
- X
- X register char *byte ;
- X register int pbit ;
- X
- X col = fcol ;
- X l = r = flr ;
- X byte = raster + (row * stride) + fbyte ;
- X pbit = fbit ;
- X
- X while (col++ < rend) {
- X if (*byte & (1 << pbit)) {
- X r += sqrsize ;
- X }
- X else {
- X if (l < r) {
- X wpaint(l, t, r, b);
- X l = r ;
- X }
- X l += sqrsize ;
- X r = l ;
- X }
- X
- X if (++pbit >= 8) {
- X pbit = 0 ;
- X ++byte ;
- X }
- X }
- X
- X if (l < r) wpaint (l, t, r, b) ;
- X }
- X
- X if (drawline) plotline (invertbit, TRUE) ;
- X else if (drawcircle) plotline (invertbit, TRUE) ;
- X else if (selrect)
- X wxorrect (sr_left * sqrsize, sr_top * sqrsize,
- X sr_right * sqrsize, sr_bottom * sqrsize) ;
- X}
- X
- Xvoid
- Xnewraster ()
- X{
- X int i ;
- X
- X if (raster != NULL) {
- X free (raster) ;
- X raster = NULL ;
- X }
- X
- X lastbyte = map_width % 8 ;
- X stride = (map_width + 7) / 8 ;
- X raster_lenght = stride * map_height ;
- X
- X raster = (char *) malloc (raster_lenght) ;
- X if (raster == NULL) {
- X wdone () ;
- X fprintf (stderr, "cannot get enough memory\n") ;
- X exit (1) ;
- X }
- X
- X for (i = 0 ; i < raster_lenght ; ++i)
- X raster[i] = 0 ;
- X}
- X
- Xvoid
- Xsetsqrsize ()
- X{
- X if (wlineheight () == 1)
- X text_only = sqrsize = 1 ;
- X else {
- X sqrsize = 1 ;
- X /* int width ;
- X int height ;
- X int swidth ;
- X int sheight ;
- X
- X wgetscrsize (&width, &height) ;
- X
- X swidth = (2 * width) / (3 * map_width) ;
- X sheight = (2 * height) / (3 * map_height) ;
- X sqrsize = swidth < sheight ? swidth : sheight ;
- X if (sqrsize < MINSQRSIZE)
- X sqrsize = MINSQRSIZE ;
- X else if (sqrsize > MAXSQRSIZE)
- X sqrsize = MAXSQRSIZE ;
- X */
- X }
- X}
- X
- Xvoid
- Xsetup()
- X{
- X int i ;
- X
- X setsqrsize () ;
- X
- X wsetdefwinsize (map_width * sqrsize, map_height * sqrsize) ;
- X
- X win = wopen (title == NULL ? "Untitled" : title, drawproc) ;
- X if (win == NULL) {
- X wmessage ("Can't open window") ;
- X return ;
- X }
- X
- X wsetdocsize (win, map_width * sqrsize, map_height * sqrsize) ;
- X
- X pfmenu = wmenucreate(FILE_MENU, "File");
- X wmenuadditem (pfmenu, "Open", 'O') ;
- X wmenuadditem (pfmenu, "New", 'N') ;
- X wmenuadditem (pfmenu, "", -1) ;
- X wmenuadditem (pfmenu, "Save", 'S') ;
- X wmenuadditem (pfmenu, "Save As ...", -1) ;
- X wmenuadditem (pfmenu, "", -1) ;
- X wmenuadditem (pfmenu, "Quit", 'Q') ;
- X
- X pmmenu = wmenucreate (MODE_MENU, "Mode") ;
- X wmenuadditem (pmmenu, "Pencil", -1) ;
- X wmenuadditem (pmmenu, "Line", -1) ;
- X wmenuadditem (pmmenu, "Circle", -1) ;
- X wmenuadditem (pmmenu, "Select", -1) ;
- X
- X popmenu = wmenucreate(OP_MENU, "Operations") ;
- X wmenuadditem (popmenu, "Clear bits", -1) ;
- X wmenuadditem (popmenu, "Set bits", -1) ;
- X wmenuadditem (popmenu, "Invert bits", -1) ;
- X wmenuadditem (popmenu, "", -1) ;
- X wmenuadditem (popmenu, "Transpose major", -1) ;
- X wmenuadditem (popmenu, "Transpose minor", -1) ;
- X wmenuadditem (popmenu, "Rotate left", -1) ;
- X wmenuadditem (popmenu, "Rotate right", -1) ;
- X wmenuadditem (popmenu, "Flip horizontal", -1) ;
- X wmenuadditem (popmenu, "Flip vertical", -1) ;
- X wmenuadditem (popmenu, "Zoom in", '+') ;
- X wmenuadditem (popmenu, "Zoom out", '-') ;
- X
- X wmenucheck (pmmenu, PENCIL_ITEM, TRUE) ;
- X
- X for (i = TRANS_MAJ_ITEM ; i <= FLIP_VERT_ITEM ; i++)
- X wmenuenable (popmenu, i, FALSE) ;
- X}
- X
- Xvoid
- Xmainloop ()
- X{
- X for (;;) {
- X EVENT e ;
- X
- X wgetevent (&e) ;
- X switch (e.type) {
- X case WE_MOUSE_DOWN :
- X case WE_MOUSE_MOVE :
- X case WE_MOUSE_UP :
- X do_mouse (&e) ;
- X break;
- X case WE_COMMAND :
- X switch (e.u.command) {
- X case WC_CLOSE :
- X if (do_quit ())
- X return ;
- X break ;
- X case WC_CANCEL :
- X return ;
- X }
- X break ;
- X case WE_CLOSE :
- X if (do_quit ())
- X return ;
- X break ;
- X case WE_MENU :
- X switch (e.u.m.id) {
- X case FILE_MENU :
- X if (do_file_menu (&e))
- X return ;
- X break ;
- X case MODE_MENU :
- X do_mode_menu (&e) ;
- X break ;
- X case OP_MENU :
- X do_op_menu (&e) ;
- X break ;
- X }
- X break ;
- X }
- X }
- X}
- X
- Xmain (argc, argv)
- X int argc ;
- X char *argv[] ;
- X{
- X extern char *strip () ;
- X
- X winitargs (&argc, &argv) ;
- X
- X if (argc > 1) {
- X fname = strdup (argv[1]) ;
- X title = strip (fname) ;
- X if (!readbitmap ()) {
- X free (fname) ;
- X fname = title = NULL ;
- X newraster () ;
- X }
- X }
- X else
- X newraster () ;
- X
- X setup () ;
- X
- X mainloop () ;
- X
- X wdone () ;
- X
- X exit (0) ;
- X}
- END_OF_FILE
- if test 5379 -ne `wc -c <'Appls/bed/bed.c'`; then
- echo shar: \"'Appls/bed/bed.c'\" unpacked with wrong size!
- fi
- # end of 'Appls/bed/bed.c'
- fi
- if test -f 'Appls/dpv/dpvcontrol.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Appls/dpv/dpvcontrol.c'\"
- else
- echo shar: Extracting \"'Appls/dpv/dpvcontrol.c'\" \(5402 characters\)
- sed "s/^X//" >'Appls/dpv/dpvcontrol.c' <<'END_OF_FILE'
- X/* dpv -- ditroff previewer. User interface, controlling the rest. */
- X
- X#include "dpv.h"
- X#include "dpvmachine.h"
- X#include "dpvoutput.h"
- X
- X#ifdef unix
- X#define DO_PRINTMENU
- X#endif
- X
- Xchar *devname;
- X
- Xpreview(file, firstpage)
- X char *file;
- X int firstpage;
- X{
- X initialize(file, firstpage);
- X addmenus();
- X eventloop(file);
- X cleanup();
- X wdone();
- X}
- X
- XMENU *mainmmenu;
- X
- X/* Menu IDs */
- X#define MAINMENU 1
- X#define PRINTMENU 2
- X
- X/* Control menu items */
- X#define FIRSTPAGE 0
- X#define PREVPAGE 1
- X#define NEXTPAGE 2
- X#define LASTPAGE 3
- X/* --- */
- X#define GOTOPAGE 5
- X/* --- */
- X#define QUIT 7
- X
- X#ifdef DO_PRINTMENU
- X
- XMENU *printmenu;
- X
- X#define MAXNPRINT 50 /* Max # items in print menu */
- X
- Xstruct _printitem {
- X char *text; /* Menu item text */
- X char *device; /* Required device, or NULL if N/A */
- X char *command; /* Shell command to execute */
- X} printitems[MAXNPRINT]= {
- X /* XXX This is extremely site-dependent */
- X {"Typeset on Harris", "har", "lpr -Phar -n %s"},
- X {"Harris emulation on Agfa", "har", "toagfa %s"},
- X {"Print on ${PRINTER-psc}", "psc", "lpr -P${PRINTER-psc} -n %s"},
- X {"Print on Oce", "psc", "lpr -Poce -n %s"},
- X {"Print on PostScript", "psc", "lpr -Ppsc -n %s"},
- X {"Print on Agfa", "psc", "lpr -Pagfa -n %s"},
- X};
- X
- Xint nprint;
- X
- Xint
- Xcountprintmenu()
- X{
- X while (nprint < MAXNPRINT && printitems[nprint].text != NULL)
- X nprint++;
- X}
- X
- Xint
- Xaddprinter(name)
- X char *name;
- X{
- X char buf[100];
- X countprintmenu();
- X if (nprint >= MAXNPRINT) {
- X error(WARNING, "too many printer definitions, rest igonred");
- X return;
- X }
- X sprintf(buf, "Print on %s", name);
- X printitems[nprint].text = strdup(buf);
- X printitems[nprint].device = NULL; /* Unspecified */
- X sprintf(buf, "lpr -P%s -n %%s", name);
- X printitems[nprint].command = strdup(buf);
- X nprint++;
- X}
- X
- X#endif
- X
- Xaddmenus()
- X{
- X MENU *mp;
- X int i;
- X
- X mainmmenu= mp= wmenucreate(MAINMENU, "Command");
- X
- X wmenuadditem(mp, "First page", 'F');
- X wmenuadditem(mp, "Previous page", 'P');
- X wmenuadditem(mp, "Next page", 'N');
- X wmenuadditem(mp, "Last page", 'L');
- X wmenuadditem(mp, "", -1);
- X wmenuadditem(mp, "Go to page...", 'G');
- X wmenuadditem(mp, "", -1);
- X wmenuadditem(mp, "Quit", 'Q');
- X
- X#ifdef DO_PRINTMENU
- X countprintmenu();
- X printmenu= mp= wmenucreate(PRINTMENU, "Print");
- X for (i= 0; i < nprint; ++i) {
- X wmenuadditem(mp, printitems[i].text, -1);
- X if (!canprint(i))
- X wmenuenable(mp, i, FALSE);
- X }
- X#endif
- X}
- X
- Xeventloop(filename)
- X char *filename;
- X{
- X int num= -1;
- X for (;;) {
- X EVENT e;
- X int lastnum= num;
- X wgetevent(&e);
- X num= -1;
- X switch(e.type) {
- X
- X case WE_MENU:
- X switch (e.u.m.id) {
- X case MAINMENU:
- X if (e.u.m.item == QUIT)
- X return;
- X do_mainmenu(e.u.m.item);
- X break;
- X case PRINTMENU:
- X do_printmenu(filename, e.u.m.item);
- X break;
- X }
- X break;
- X
- X case WE_CHAR:
- X /* The mnemonics used here may remind you of
- X the main menu's shortcuts, the 'vi' editor,
- X the 'more' pages, or the 'rn' news reader... */
- X switch (e.u.character) {
- X case 'q':
- X case 'Q':
- X return;
- X case ' ':
- X case '+':
- X case 'n':
- X case 'N':
- X forwpage(lastnum);
- X break;
- X case '-':
- X if (lastnum > 0)
- X backpage(lastnum);
- X else
- X gotopage(prevpage);
- X break;
- X case 'b':
- X case 'B':
- X case 'p':
- X case 'P':
- X backpage(lastnum);
- X break;
- X case '^':
- X case 'f':
- X case 'F':
- X gotopage(1);
- X break;
- X case '$':
- X gotopage(32000);
- X break;
- X case 'g':
- X case 'G':
- X case 'l':
- X case 'L':
- X if (lastnum > 0)
- X gotopage(lastnum);
- X else
- X gotopage(32000);
- X break;
- X case '.':
- X if (lastnum > 0)
- X gotopage(lastnum);
- X else
- X changeall(); /* Force a redraw */
- X break;
- X default:
- X if (isdigit(e.u.character)) {
- X num= e.u.character - '0';
- X if (lastnum > 0)
- X num += 10*lastnum;
- X }
- X else {
- X wfleep();
- X lastnum= 0;
- X }
- X }
- X break;
- X
- X case WE_CLOSE:
- X return;
- X
- X case WE_COMMAND:
- X switch (e.u.command) {
- X case WC_RETURN:
- X if (lastnum > 0)
- X gotopage(lastnum);
- X else
- X forwpage(1);
- X break;
- X case WC_DOWN:
- X forwpage(lastnum);
- X break;
- X case WC_UP:
- X case WC_BACKSPACE:
- X backpage(lastnum);
- X break;
- X case WC_CLOSE:
- X /*
- X case WC_CANCEL:
- X */
- X return;
- X default:
- X wfleep();
- X }
- X break;
- X
- X }
- X }
- X}
- X
- Xdo_mainmenu(item)
- X int item;
- X{
- X switch (item) {
- X case FIRSTPAGE:
- X gotopage(1);
- X break;
- X case PREVPAGE:
- X backpage(1);
- X break;
- X case NEXTPAGE:
- X forwpage(1);
- X break;
- X case LASTPAGE:
- X gotopage(32000);
- X break;
- X case GOTOPAGE:
- X {
- X static char buf[10];
- X int num;
- X char extra;
- X if (!waskstr("Go to page:", buf, sizeof buf)
- X || buf[0] == '\0')
- X return;
- X if (sscanf(buf, " %d %c", &num, &extra) != 1 ||
- X num <= 0) {
- X wmessage("Invalid page number");
- X return;
- X }
- X gotopage(num);
- X }
- X break;
- X }
- X}
- X
- Xdo_printmenu(filename, item)
- X char *filename;
- X int item;
- X{
- X#ifdef DO_PRINTMENU
- X char buf[256];
- X int sts;
- X
- X if (item < 0 || item >= nprint)
- X return;
- X
- X if (!canprint(item)) {
- X sprintf(buf, "Can't convert %s output to %s",
- X devname == NULL ? "unspecified" : devname,
- X printitems[item].device);
- X wmessage(buf);
- X return;
- X }
- X
- X sprintf(buf, printitems[item].command, filename);
- X sts= system(buf);
- X if (sts != 0) {
- X sprintf(buf, "Print command failed, exit status 0x%x", sts);
- X wmessage(buf);
- X }
- X#endif
- X}
- X
- X#ifdef DO_PRINTMENU
- Xstatic bool
- Xcanprint(item)
- X int item;
- X{
- X return printitems[item].device == NULL ||
- X devname != NULL &&
- X strcmp(printitems[item].device, devname) == 0;
- X}
- X#endif
- END_OF_FILE
- if test 5402 -ne `wc -c <'Appls/dpv/dpvcontrol.c'`; then
- echo shar: \"'Appls/dpv/dpvcontrol.c'\" unpacked with wrong size!
- fi
- # end of 'Appls/dpv/dpvcontrol.c'
- fi
- if test -f 'Conf/proto.os.amoeba' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Conf/proto.os.amoeba'\"
- else
- echo shar: Extracting \"'Conf/proto.os.amoeba'\" \(1230 characters\)
- sed "s/^X//" >'Conf/proto.os.amoeba' <<'END_OF_FILE'
- X
- X#
- X# Definitions for operating system Amoeba
- X#
- X
- X# Define the name of this O.S. here.
- X#
- XOS= amoeba
- X
- X# Choose ONE of the following definitions of RANLIB.
- X# BSD-based systems will need ranlib to be called after a library is
- X# changed.
- X# SYSV-based systems don't have ranlib; the value 'true' makes Make happy.
- X#
- XRANLIB= ranlib # for BSD
- X#RANLIB= true # for SYSV
- X
- X# Define the name of the script used to update the dependencies in
- X# the Makefile.
- X# Choices are:
- X# slowmkdep -- always works (as far as I know)
- X# fastmkdep -- uses cc -M, which isn't always available
- X# makedepend -- Todd Brunhoff's superfast tool (comes with X11)
- X# (This needs -Dunix because of configure.h)
- X# You may also place this definition in the proto.arch.* file if no
- X# method works for every architecture supported by this OS.
- X#
- X#MKDEP= $(CONF)/slowmkdep
- X#MKDEP= $(CONF)/fastmkdep
- X#MKDEP= makedepend -Dunix
- X
- X# Define the system libraries to link with programs that use termcap and X11
- X# (In some cases these are architecture-dependent)
- X#
- X#LIBTERMCAP= -ltermcap
- X#LIBX11= -lX11
- X
- X# Other OS-specific choices (-I flags, -D flags, compiler options)
- X#
- XOSINCLS= -I/usr/amoeba/src/h -I/usr/amoeba/src/h/posix
- XOSDEFS= -DAMOEBA -DSYSV
- XOSOPTS=
- END_OF_FILE
- if test 1230 -ne `wc -c <'Conf/proto.os.amoeba'`; then
- echo shar: \"'Conf/proto.os.amoeba'\" unpacked with wrong size!
- fi
- # end of 'Conf/proto.os.amoeba'
- fi
- if test -f 'Ports/alfa/event.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Ports/alfa/event.c'\"
- else
- echo shar: Extracting \"'Ports/alfa/event.c'\" \(6191 characters\)
- sed "s/^X//" >'Ports/alfa/event.c' <<'END_OF_FILE'
- X/* STDWIN -- EVENTS. */
- X
- X#include "alfa.h"
- X
- X/* There are three levels of event processing.
- X The lowest ('raw') level only inputs single characters.
- X The middle ('sys') level translates sequences of keys to menu shortcuts
- X and 'commands'.
- X The highest ('appl') level executes certain commands and can call the
- X interactive menu selection code. It also sets the window parameter.
- X For each level there are variants to wait or poll.
- X Additional routines to get from one level to another:
- X wmapchar: inspect key map and possibly convert char event
- X wsyscommand: execute/transform system menu
- X
- X/* Raw event -- read one character. If blocking is FALSE,
- X don't read if trmavail() returns -1, meaning it can't tell whether
- X there is input or not. In that case only synchronous input works. */
- X
- X
- Xstatic bool
- Xwrawevent(ep, blocking)
- X EVENT *ep;
- X bool blocking;
- X{
- X if (!blocking && trmavail() <= 0)
- X return FALSE;
- X ep->u.character= trminput();
- X if (ep->u.character < 0) {
- X ep->type= WE_NULL;
- X return FALSE;
- X }
- X else {
- X ep->type= WE_CHAR;
- X return TRUE;
- X }
- X}
- X
- Xstatic void wmapchar(); /* Forward */
- X
- X/* System event -- read a character and translate using the key map. */
- X
- Xbool
- Xwsysevent(ep, blocking)
- X EVENT *ep;
- X bool blocking;
- X{
- X struct keymap mapentry;
- X
- X if (!wrawevent(ep, blocking))
- X return FALSE;
- X /* Using a temporary to avoid a tahoe C compiler bug */
- X mapentry= _wprimap[ep->u.character & 0xff];
- X wmapchar(ep, mapentry);
- X return ep->type != WE_NULL;
- X}
- X
- X/* Key map translation from raw event.
- X This may read more characters if the start of a multi-key sequence is
- X found. */
- X
- Xstatic void
- Xwmapchar(ep, mapentry)
- X EVENT *ep;
- X struct keymap mapentry;
- X{
- X switch (mapentry.type) {
- X
- X case SHORTCUT:
- X ep->type= WE_MENU;
- X ep->u.m.id= mapentry.id;
- X ep->u.m.item= mapentry.item;
- X break;
- X
- X case SECONDARY:
- X if (wrawevent(ep, TRUE)) {
- X struct keymap *map;
- X struct keymap *altmap= NULL;
- X for (map= _wsecmap[mapentry.id];
- X map->type != SENTINEL;
- X ++map) {
- X if (map->key == ep->u.character) {
- X wmapchar(ep, *map);
- X return;
- X }
- X else if (islower(ep->u.character) &&
- X map->key == toupper(ep->u.character))
- X altmap= map;
- X }
- X if (altmap != NULL) {
- X wmapchar(ep, *altmap);
- X return;
- X }
- X }
- X trmbell();
- X ep->type= WE_NULL;
- X break;
- X
- X }
- X}
- X
- Xvoid
- Xwgoto(ep, type)
- X EVENT *ep;
- X int type;
- X{
- X int h, v;
- X
- X trmsense(&v, &h);
- X if (v >= 0) {
- X WINDOW *win;
- X for (win= &winlist[1]; win < &winlist[MAXWINDOWS]; ++win) {
- X if (win->open && v >= win->top && v < win->bottom) {
- X if (win == front) {
- X ep->type= type;
- X ep->u.where.h= h;
- X ep->u.where.v= v + win->offset;
- X ep->u.where.clicks= 1;
- X ep->u.where.button= 1;
- X ep->u.where.mask=
- X (type == WE_MOUSE_UP ? 0 : 1);
- X return;
- X }
- X wsetactive(win);
- X break;
- X }
- X }
- X }
- X ep->type= WE_NULL;
- X}
- X
- Xvoid
- Xwmouseup(ep)
- X EVENT *ep;
- X{
- X int h, v;
- X
- X trmsense(&v, &h);
- X if (v < 0)
- X ep->type= WE_NULL;
- X else {
- X ep->type= WE_MOUSE_UP;
- X ep->u.where.h= h;
- X ep->u.where.v= v + front->offset;
- X ep->u.where.clicks= 1;
- X ep->u.where.button= 1;
- X ep->u.where.mask= 0;
- X }
- X}
- X
- Xstatic void wdoupdates(); /* Forward */
- X
- X/* Application event. */
- X
- Xstatic EVENT ebuf;
- X
- Xvoid
- Xwungetevent(ep)
- X EVENT *ep;
- X{
- X ebuf= *ep;
- X}
- X
- Xbool
- Xwpollevent(ep)
- X EVENT *ep;
- X{
- X return wevent(ep, FALSE);
- X}
- X
- Xvoid
- Xwgetevent(ep)
- X EVENT *ep;
- X{
- X (void) wevent(ep, TRUE);
- X}
- X
- Xstatic bool
- Xwevent(ep, blocking)
- X EVENT *ep;
- X bool blocking;
- X{
- X static int lasttype= WE_NULL;
- X
- X if (ebuf.type != WE_NULL) {
- X *ep= ebuf;
- X ebuf.type= WE_NULL;
- X return TRUE;
- X }
- X
- X ep->type= WE_NULL;
- X ep->window= NULL;
- X if (lasttype == WE_MOUSE_DOWN)
- X wmouseup(ep);
- X while (ep->type == WE_NULL) {
- X if (front != wasfront) {
- X if (wasfront != NULL) {
- X ep->type= WE_DEACTIVATE;
- X ep->window= wasfront;
- X wasfront= NULL;
- X }
- X else {
- X menubarchanged();
- X ep->type= WE_ACTIVATE;
- X wasfront= front;
- X }
- X }
- X else {
- X if (trmavail() <= 0)
- X wdoupdates(ep);
- X if (ep->type == WE_NULL) {
- X /* Remove this call if no select() exists */
- X if (_w_checktimer(ep, blocking))
- X break;
- X if (!wsysevent(ep, blocking)) {
- X ep->type= WE_NULL;
- X break;
- X }
- X if (ep->type == WE_MENU && ep->u.m.id == 0)
- X wsyscommand(ep);
- X }
- X }
- X }
- X if (ep->window == NULL && front != syswin)
- X ep->window= front;
- X lasttype= ep->type;
- X return ep->type != WE_NULL;
- X}
- X
- Xvoid
- Xwsyscommand(ep)
- X EVENT *ep;
- X{
- X ep->type= WE_NULL;
- X
- X switch (ep->u.m.item) {
- X
- X default:
- X if (ep->u.m.item <= LAST_CMD) {
- X ep->type= WE_COMMAND;
- X ep->u.command= ep->u.m.item - FIRST_CMD;
- X }
- X break;
- X
- X case NEXT_WIN:
- X _wselnext();
- X break;
- X
- X case PREV_WIN:
- X _wselprev();
- X break;
- X
- X case SUSPEND_PROC:
- X _wsuspend();
- X break;
- X
- X case REDRAW_SCREEN:
- X _wredraw();
- X break;
- X
- X case MOUSE_DOWN:
- X case MOUSE_UP:
- X wgoto(ep, ep->u.m.item - MOUSE_DOWN + WE_MOUSE_DOWN);
- X break;
- X
- X case LITERAL_NEXT:
- X _wlitnext(ep);
- X break;
- X
- X case MENU_CALL:
- X menuselect(ep);
- X break;
- X
- X }
- X}
- X
- X/* Flush output and place cursor. */
- X
- Xvoid
- Xwflush()
- X{
- X int y= front->curv - front->offset;
- X int x= front->curh;
- X
- X if (front->curv < 0 || y < front->top || y >= front->bottom) {
- X y= front->top;
- X if (y > 0)
- X --y;
- X x= 0;
- X }
- X else if (x < 0)
- X x= 0;
- X else if (x >= columns)
- X x= columns-1;
- X trmsync(y, x);
- X}
- X
- X/* Process pending window updates.
- X If a window has no draw procedure, a WE_DRAW event is generated instead. */
- X
- Xstatic void
- Xwdoupdates(ep)
- X EVENT *ep;
- X{
- X WINDOW *win;
- X int left, top, right, bottom;
- X
- X for (win= winlist; win < &winlist[MAXWINDOWS]; ++win) {
- X if (win->open) {
- X if (win->top > 0 && !uptodate[win->top - 1])
- X wdrawtitle(win);
- X if (wgetchange(win, &left, &top, &right, &bottom)) {
- X if (win->drawproc == NULL) {
- X ep->type= WE_DRAW;
- X ep->window= win;
- X ep->u.area.left= left;
- X ep->u.area.top= top;
- X ep->u.area.right= right;
- X ep->u.area.bottom= bottom;
- X return;
- X }
- X else {
- X wbegindrawing(win);
- X (*win->drawproc)(win,
- X left, top, right, bottom);
- X wenddrawing(win);
- X }
- X }
- X if(win->resized) {
- X win->resized = FALSE;
- X ep->type = WE_SIZE;
- X ep->window = win;
- X return;
- X }
- X }
- X }
- X wflush();
- X}
- X
- Xvoid
- X_wlitnext(ep)
- X EVENT *ep;
- X{
- X (void) wrawevent(ep, TRUE);
- X}
- END_OF_FILE
- if test 6191 -ne `wc -c <'Ports/alfa/event.c'`; then
- echo shar: \"'Ports/alfa/event.c'\" unpacked with wrong size!
- fi
- # end of 'Ports/alfa/event.c'
- fi
- if test -f 'Ports/alfa/syswin.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Ports/alfa/syswin.c'\"
- else
- echo shar: Extracting \"'Ports/alfa/syswin.c'\" \(6713 characters\)
- sed "s/^X//" >'Ports/alfa/syswin.c' <<'END_OF_FILE'
- X/* STDWIN -- SYSTEM WINDOW. */
- X
- X#include "alfa.h"
- X
- XWINDOW *syswin; /* Window id 0, the system window */
- X /* Global because wgetevent needs to know about
- X it, so it can suppress events belonging to
- X this window. */
- X
- Xstatic void
- Xhelpmessage()
- X{
- X char buf[256];
- X char shortcut[256];
- X
- X getbindings(shortcut, 0, MENU_CALL);
- X sprintf(buf, "[Use %s to get a menu of commands]", shortcut);
- X wmessage(buf);
- X}
- X
- Xvoid
- Xinitsyswin()
- X{
- X syswin= wopen("System", wsysdraw);
- X helpmessage();
- X}
- X
- Xchar *sysmsg; /* Message to be drawn at (0, 0) */
- XTEXTEDIT *syste; /* Textedit record to be drawn, too */
- X
- X#ifdef EM
- Xstatic char **Butt=NULL;
- X#endif
- X
- X/*ARGSUSED*/
- Xvoid
- Xwsysdraw(win, left, top, right, bottom)
- X WINDOW *win;
- X int left, top;
- X int right, bottom;
- X{
- X if (sysmsg != NULL) {
- X (void) wdrawtext(0, 0, sysmsg, -1);
- X if (syste != NULL)
- X tedraw(syste);
- X#ifdef EM
- X if(Butt)
- X drawbuttons();
- X#endif
- X }
- X else
- X drawmenubar();
- X}
- X
- Xvoid
- Xmenubarchanged()
- X{
- X uptodate[0]= FALSE;
- X}
- X
- X/* Print a message in the system window.
- X If the message is non-null, the screen is updated immediately. */
- X
- Xvoid
- Xwmessage(str)
- X char *str;
- X{
- X if (sysmsg != NULL)
- X free(sysmsg);
- X sysmsg= strdup(str);
- X if (syste != NULL) {
- X tefree(syste);
- X syste= NULL;
- X }
- X wchange(syswin, 0, 0, 9999, 9999);
- X wnocaret(syswin);
- X if (str != NULL) {
- X wupdate(syswin);
- X wflush();
- X }
- X}
- X
- X/* Ask for an input string. */
- X
- Xbool
- Xwaskstr(prompt, buf, len)
- X char *prompt;
- X char *buf;
- X int len;
- X{
- X WINDOW *savewin= front;
- X WINDOW *win= syswin;
- X bool ok= FALSE;
- X bool stop= FALSE;
- X int teleft;
- X
- X wsetactive(win);
- X wmessage((char *) NULL);
- X sysmsg= prompt;
- X teleft= wtextwidth(prompt, -1) + wtextwidth(" ", 1);
- X if (teleft > columns * 3/4)
- X teleft= columns * 3/4;
- X syste= tealloc(syswin, teleft, 0, columns-teleft);
- X tereplace(syste, buf);
- X tesetfocus(syste, 0, 9999);
- X do {
- X EVENT e;
- X
- X if (!wsysevent(&e, FALSE)) {
- X wupdate(syswin);
- X wflush();
- X wsysevent(&e, TRUE);
- X }
- X e.window= syswin; /* Not filled in by wsys*event();
- X needed by teevent(). */
- X
- X switch (e.type) {
- X
- X case WE_MENU:
- X if (e.u.m.id != 0) {
- X wfleep();
- X break;
- X }
- X switch (e.u.m.item) {
- X
- X case SUSPEND_PROC:
- X _wsuspend();
- X break;
- X
- X case REDRAW_SCREEN:
- X _wredraw();
- X break;
- X
- X default:
- X if (e.u.m.item >= FIRST_CMD &&
- X e.u.m.item <= LAST_CMD)
- X wsyscommand(&e);
- X break;
- X }
- X if (e.type != WE_COMMAND)
- X break;
- X
- X /* Fall through from previous case! */
- X case WE_COMMAND:
- X switch (e.u.command) {
- X
- X case WC_RETURN:
- X case WC_CANCEL:
- X ok= e.u.command == WC_RETURN;
- X stop= TRUE;
- X break;
- X
- X default:
- X if (!teevent(syste, &e))
- X wfleep();
- X break;
- X
- X }
- X break;
- X
- X case WE_CHAR:
- X case WE_MOUSE_DOWN:
- X case WE_MOUSE_MOVE:
- X case WE_MOUSE_UP:
- X if (!teevent(syste, &e))
- X wfleep();
- X break;
- X
- X }
- X } while (!stop);
- X if (ok) {
- X strncpy(buf, tegettext(syste), len);
- X buf[len-1]= EOS;
- X }
- X sysmsg= NULL;
- X wmessage((char *) NULL);
- X wsetactive(savewin);
- X return ok;
- X}
- X
- X#ifdef EM
- X/* EuroMath hacks -- I still hop I can get rid of this again... */
- X#define META(c) ((c)|128)
- X#define UNMETA(c) ((c)&~128)
- X#define min(a,b) (a)<(b)?(a):(b)
- Xchar *hack;
- Xint Curr;
- X
- Xwdialog(prompt, buf, len, butt, def)
- Xchar *prompt, *buf, **butt;
- Xint len, def;
- X{
- X WINDOW *savewin= front;
- X WINDOW *win= syswin;
- X bool ok= FALSE;
- X bool stop= FALSE;
- X int teleft;
- X int y=1, i;
- X extern char* esc;
- X extern char *expandCommand();
- X
- X if(butt==NULL)
- X return waskstr(prompt, buf, len);
- X
- X Butt=butt;
- X Curr=0;
- X/* highlight the default button */
- X for(i=0;butt[def-1][i];i++) butt[def-1][i]=META(butt[def-1][i]);
- X wsetactive(win);
- X wmessage((char *) NULL);
- X sysmsg= prompt;
- X teleft= wtextwidth(prompt, -1) + wtextwidth(" ", 1);
- X if (teleft > columns * 3/4)
- X teleft= columns * 3/4;
- X syste= tealloc(syswin, teleft, 0, columns-teleft);
- X tereplace(syste, strdup(buf));
- X tesetfocus(syste, 0, 9999);
- X/* calculate the number of buttons */
- X while(butt[y-1]) {
- X ++y;
- X }
- X --y;
- Xrestart:
- X do {
- X EVENT e;
- X
- X if (!wsysevent(&e, FALSE)) {
- X wupdate(syswin);
- X wflush();
- X wsysevent(&e, TRUE);
- X }
- X e.window= syswin; /* Not filled in by wsys*event();
- X needed by teevent(). */
- X
- X switch (e.type) {
- X case WE_MENU:
- X if (e.u.m.id != 0) {
- X wfleep();
- X break;
- X }
- X switch (e.u.m.item) {
- X
- X case SUSPEND_PROC:
- X _wsuspend();
- X break;
- X
- X case REDRAW_SCREEN:
- X _wredraw();
- X break;
- X
- X default:
- X if (e.u.m.item >= FIRST_CMD &&
- X e.u.m.item <= LAST_CMD)
- X wsyscommand(&e);
- X break;
- X }
- X if (e.type != WE_COMMAND)
- X break;
- X
- X /* Fall through from previous case! */
- X case WE_COMMAND:
- X switch (e.u.command) {
- X/* the arrow-keys (up & down) are used to escape from the texedit
- X buffer and select a button from the buttonlist */
- X case WC_UP:
- X --Curr;
- X if(Curr<0)
- X Curr=0;
- X break;
- X case WC_DOWN:
- X ++Curr;
- X if(Curr>y)
- X Curr=0;
- X break;
- X case WC_RETURN:
- X case WC_CANCEL:
- X ok= e.u.command == WC_RETURN;
- X stop= TRUE;
- X break;
- X
- X default:
- X if (Curr > 0)
- X wfleep();
- X else if (!teevent(syste, &e))
- X wfleep();
- X break;
- X
- X }
- X break;
- X
- X case WE_CHAR:
- X if(hack && e.u.character == *esc) {
- X/* this is used by cmdbox(): pressing the `escape' character causes
- Xthe typed in buffer to be expanded */
- X char *buf2;
- X tesetfocus(syste,0,9999);
- X strzcpy(buf,tegettext(syste),min(len,tegetlen(syste)+1));
- X buf2=expandCommand(hack, buf);
- X tereplace(syste, buf2);
- X tesetfocus(syste,0,9999);
- X break;
- X }
- X case WE_MOUSE_DOWN:
- X case WE_MOUSE_MOVE:
- X case WE_MOUSE_UP:
- X if(Curr > 0)
- X wfleep();
- X else if (!teevent(syste, &e))
- X wfleep();
- X break;
- X
- X }
- X } while (!stop);
- X if(hack && Curr == 3) {
- X/* button 3 is "EXPAND". Used by cmdbox() */
- X char *buf2;
- X tesetfocus(syste,0,9999);
- X strzcpy(buf,tegettext(syste),min(len,tegetlen(syste)+1));
- X buf2=expandCommand(hack, tegettext(syste));
- X tereplace(syste, buf2);
- X tesetfocus(syste,0,9999);
- X ok=stop=FALSE; Curr=0;
- X goto restart;
- X }
- X if (ok) {
- X strzcpy(buf, tegettext(syste), min(len, tegetlen(syste)+1));
- X }
- X sysmsg= NULL;
- X wmessage((char *) NULL);
- X wsetactive(savewin);
- X if(Curr==0) Curr=def;
- X Butt=NULL;
- X for(i=0;butt[def-1][i];i++) butt[def-1][i]=UNMETA(butt[def-1][i]);
- X _wredraw();
- X return Curr;
- X}
- X
- X/* this is inserted in the syswin drawproc whenever there are buttons
- Xactive */
- X
- Xdrawbuttons()
- X{
- Xint y=1;
- Xchar buf[256];
- X
- X while(Butt[y-1]) {
- X if(y==Curr) sprintf(buf, "%c %s", META('o'), Butt[y-1]);
- X else sprintf(buf, "o %s", Butt[y-1]);
- X trmputdata(y, y, 0, buf);
- X ++y;
- X }
- X trmputdata(y,y,0,"");
- X}
- X
- X/* additional EuroMath WM routine, called after returning from an
- XEditor-session (OpenTTY) */
- X
- XRedrawAll()
- X{
- X_wredraw();
- X}
- X
- X#endif
- END_OF_FILE
- if test 6713 -ne `wc -c <'Ports/alfa/syswin.c'`; then
- echo shar: \"'Ports/alfa/syswin.c'\" unpacked with wrong size!
- fi
- # end of 'Ports/alfa/syswin.c'
- fi
- if test -f 'Ports/mac/macwin.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Ports/mac/macwin.h'\"
- else
- echo shar: Extracting \"'Ports/mac/macwin.h'\" \(6389 characters\)
- sed "s/^X//" >'Ports/mac/macwin.h' <<'END_OF_FILE'
- X/* Source for the precompiled header file "macwin.h" in THINK C.
- X This file includes other header files and defines symbols and types.
- X It is included in the project for convenience; it generates no code.
- X
- X **********************************************************************
- X * When you edit this file, you must generate a new "macwin.h": *
- X * Choose "Precompile..." from the Source menu and save as "macwin.h" *
- X * (overwriting the old "macwin.h"). *
- X **********************************************************************
- X
- X For Think C version 3.0, define THINK_C_3_0 in "stdwconf.h".
- X
- X For MPW, move macwin.c to macwin.h and remove the <MacHeaders>
- X include below.
- X*/
- X
- X
- X#include <MacHeaders> /*** REMOVE THIS FOR MPW ***/
- X
- X#include "stdwconf.h" /* Will set MPW or THINK_C */
- X
- X
- X#ifdef MPW
- X
- X/* Without NO_STDIO, some THINK specific code gets compiled */
- X#define NO_STDIO
- X
- X/* MPW names for Mac include files */
- X#include <Types.h>
- X#include <Quickdraw.h>
- X#include <Windows.h>
- X#include <Controls.h>
- X
- X/* Quickdraw globals aren't really global in MPW */
- X#define QD(var) qd.var
- X
- X/* MPW allows 'static' in forward declarations */
- X#define STATIC static
- X
- X/* MPW passes all Points by value */
- X#define PASSPOINT &
- X
- X/* MPW glue converts most string on the fly.
- X (XXX I believe you can turn this off now?) */
- X#define CLEVERGLUE
- X
- X#endif
- X
- X
- X#ifdef THINK_C
- X
- X/* You may also define NO_STDIO under THINK C, to avoid pulling in stdio */
- X/* ...and for 4.0, it doesn't work anymore (sigh) */
- X#ifndef THINK_C_3_0
- X#define NO_STDIO
- X#endif
- X
- X/* THINK's <WindowMgr.h> omits two essential constants of the Mac+ ROM */
- X#define zoomDocProc 8
- X#define zoomNoGrow 12
- X
- X/* Pascal-to-C and back string conversion routines have different names */
- X#include <pascal.h>
- X#define p2cstr PtoCstr
- X#define c2pstr CtoPstr /* XXX actually, used nowhere */
- X
- X/* Quickdraw globals are real globals in THINK C */
- X#define QD(var) (var)
- X
- X/* THINK C can't declare forward functions as static */
- X#define STATIC /**/
- X
- X/* THINK C passes Points by value to some toolbox routines */
- X#define PASSPOINT /**/
- X
- X#endif
- X
- X
- X/* Private include files: */
- X
- X#include "tools.h"
- X#include "stdwin.h"
- X#include "menu.h"
- X
- X
- X#ifdef CLEVERGLUE
- X/* MPW converts C to Pascal strings in the glue */
- X#define PSTRING(str) (str)
- X#else
- X/* THINK C needs a real function to do this (see "pstring.c").
- X This is different from CtoPstr since it does not do it inline */
- Xextern char *PSTRING _ARGS((char *));
- X#endif
- X
- X
- X/* Window struct. */
- X
- Xstruct _window {
- X short tag; /* Window tag, usable as document id */
- X void (*drawproc)(); /* Draw procedure */
- X WindowPtr w; /* Mac Window */
- X int hcaret, vcaret; /* Caret position, document coordinates */
- X bool caret_on; /* Set if caret currently visible */
- X TEXTATTR attr; /* Text attributes */
- X ControlHandle hbar, vbar; /* Scroll bars */
- X int docwidth, docheight; /* Document size */
- X int orgh, orgv; /* Window origin, document coordinates */
- X struct menubar mbar; /* List of attached local menus */
- X unsigned long timer; /* Tick count for timer event */
- X CURSOR *cursor; /* Cursor if not default */
- X};
- X
- Xextern TEXTATTR wattr; /* Current text attributes */
- X
- X#define TX_INVERSE 0x80 /* Or-ed into style bits */
- X
- X/* Peculiarities of the Macintosh: */
- X
- X#define TICKSPERSECOND 60 /* Clock ticks at 60 Hz (everywhere) */
- X
- X#define MENUBARHEIGHT 20 /* Height of menu bar */
- X#define TITLEBARHEIGHT 18 /* Height of window title bar */
- X#define BAR 15 /* Scroll bar width, minus one pixel */
- X
- X/* ASCII codes generated by special keys: */
- X#define ENTER_KEY 0x03
- X
- X#define LEFT_ARROW 0x1c
- X#define RIGHT_ARROW 0x1d
- X#define UP_ARROW 0x1e
- X#define DOWN_ARROW 0x1f
- X
- X
- X/* Miscellaneous definitions. */
- X
- X#define CLICK_DIST 5 /* Max mouse move within a click */
- X
- X/* Parameters for top left corner choice algorithm: */
- X#define LEFT 20 /* Initial left */
- X#define TOP 40 /* Initial top */
- X#define HINCR 20 /* Increment for left */
- X#define VINCR 16 /* Increment for top */
- X
- X/* Minimal window size (determined by room for scroll bars only): */
- X#define MIN_WIDTH (2*BAR)
- X#define MIN_HEIGHT (2*BAR)
- X
- X/* Text drawn in the very left or right margin doesn't look nice.
- X Therefore, we have a little margin on each side.
- X Its width is determined here: */
- X#define LSLOP 4 /* Pixels in left margin */
- X#define RSLOP 4 /* Pixels in right margin */
- X
- X/* Global data: */
- Xextern GrafPtr screen; /* Window Manager's GrafPort */
- Xextern WINDOW *active; /* Active window, if any */
- Xextern bool _wmenuhilite; /* Set if menu item highlighted */
- Xextern bool _wm_down; /* Set if mouse down (in appl. area) */
- X
- X/* Function prototypes: */
- X
- Xvoid dprintf _ARGS((char *fmt, ...));
- X
- Xvoid wsetstyle _ARGS((Style face));
- X
- XWINDOW *whichwin _ARGS((WindowPtr w));
- X
- Xvoid makerect _ARGS((WINDOW *win, Rect *pr,
- X int left, int top, int right, int bottom));
- Xvoid getwinrect _ARGS((WINDOW *win, Rect *pr));
- X
- Xvoid set_arrow _ARGS((void));
- Xvoid set_applcursor _ARGS((void));
- Xvoid set_watch _ARGS((void));
- Xvoid set_ibeam _ARGS((void));
- Xvoid set_hand _ARGS((void));
- X
- Xvoid makescrollbars _ARGS((WINDOW *win));
- Xvoid movescrollbars _ARGS((WINDOW *win));
- Xvoid hidescrollbars _ARGS((WINDOW *win));
- Xvoid showscrollbars _ARGS((WINDOW *win));
- X
- Xvoid scrollby _ARGS((WINDOW *win, Rect *pr, int dh, int dv));
- Xvoid do_scroll _ARGS((Point *pwhere,
- X WINDOW *win, ControlHandle bar, int pcode));
- Xvoid dragscroll _ARGS((WINDOW *win, int h, int v, int constrained));
- X
- Xvoid initwattr _ARGS((void));
- X
- Xvoid inval_border _ARGS((WindowPtr w));
- Xvoid valid_border _ARGS((WindowPtr w));
- X
- Xvoid rmlocalmenus _ARGS((WINDOW *win));
- Xvoid addlocalmenus _ARGS((WINDOW *win));
- Xvoid initmbar _ARGS((struct menubar *mp));
- Xvoid killmbar _ARGS((struct menubar *mp));
- Xvoid setup_menus _ARGS((void));
- X
- Xvoid do_about _ARGS((void));
- Xvoid getargcargv _ARGS((int *pargc, char ***pargv));
- Xvoid fullpath _ARGS((char *buf, int wdrefnum, char *file));
- Xchar *getdirname _ARGS((int wdrefnum));
- X
- X
- Xvoid rmcaret _ARGS((WINDOW *win));
- Xvoid showcaret _ARGS((WINDOW *win));
- Xvoid blinkcaret _ARGS((WINDOW *win));
- Xvoid _wresetmouse _ARGS((void));
- X
- Xvoid _wfreeclip _ARGS((void));
- Xbool checktimer _ARGS((EVENT *ep));
- Xvoid autoscroll _ARGS((WINDOW *active, int h, int v));
- Xvoid _wdo_menu _ARGS((EVENT *ep, long menu_item));
- X
- X/* SetRect is much faster this way... */
- X#define SetRect(pr, l, t, r, b) ((pr)->left = (l), (pr)->top = (t), \
- X (pr)->right = (r), (pr)->bottom = (b))
- END_OF_FILE
- if test 6389 -ne `wc -c <'Ports/mac/macwin.h'`; then
- echo shar: \"'Ports/mac/macwin.h'\" unpacked with wrong size!
- fi
- # end of 'Ports/mac/macwin.h'
- fi
- if test -f 'Ports/mac/stdwin.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Ports/mac/stdwin.c'\"
- else
- echo shar: Extracting \"'Ports/mac/stdwin.c'\" \(6341 characters\)
- sed "s/^X//" >'Ports/mac/stdwin.c' <<'END_OF_FILE'
- X/* MAC STDWIN -- BASIC ROUTINES. */
- X
- X#include "macwin.h"
- X#ifdef MPW
- X#include <Fonts.h>
- X#include <Menus.h>
- X#include <TextEdit.h>
- X#include <Dialogs.h>
- X#include <OSUtils.h>
- X#include <SegLoad.h>
- X#endif
- X
- X
- X/* GLOBAL DATA. */
- X
- X /* XXX choose less obvious names */
- XGrafPtr screen; /* The Mac Window Manager's GrafPort */
- XTEXTATTR wattr; /* Current or default text attributes */
- X
- Xstatic int def_left= LEFT;
- Xstatic int def_top= TOP;
- Xstatic int def_width, def_height;
- X
- X
- X/* INITIALIZATION AND TERMINATION. */
- X
- X/* Initialization */
- X
- Xint std_open_hook();
- XSTATIC pascal resume _ARGS((void));
- X
- X/* Initialize, using and updating argc/argv: */
- Xvoid
- Xwinitargs(pargc, pargv)
- X int *pargc;
- X char ***pargv;
- X{
- X wargs(pargc, pargv);
- X winit();
- X}
- X
- X/* Initialize without touching argc/argv */
- Xvoid
- Xwinit()
- X{
- X#ifndef NO_STDIO
- X /* Tell the THINK C stdio library we have initialized already */
- X Stdio_MacInit(TRUE);
- X#endif
- X
- X#ifdef THINK_C
- X#ifndef THINK_C_3_0
- X /*
- X THINK C 4.0 may have done these initializations for us when
- X the application has already used the console in any way.
- X Doing them again is not a good idea.
- X The THINK library avoids initializing the world if it appears
- X that it has already been initialized, but in that case it
- X will only allow output (all input requests return EOF).
- X Thus, the application has two options:
- X - call winit() or winitargs() first, then use the console
- X only for (debugging) output; or
- X - print at least one character to stdout first, then
- X stdwin menu bar may not function properly.
- X From inspection of the THINK library source it appears that
- X when the console is initialized, stdin->std is cleared,
- X so the test below suffices to skip initializations.
- X */
- X if (stdin->std)
- X#endif
- X#endif
- X {
- X MaxApplZone();
- X InitGraf(&QD(thePort));
- X InitFonts();
- X InitWindows();
- X TEInit();
- X InitDialogs(resume);
- X InitMenus();
- X InitCursor();
- X setup_menus();
- X }
- X GetWMgrPort(&screen);
- X initwattr();
- X#ifdef MPW
- X set_open_hook(std_open_hook);
- X#endif
- X wsetdefwinsize(0, 0);
- X set_watch();
- X}
- X
- Xvoid
- Xwdone()
- X{
- X}
- X
- Xvoid
- Xwgetscrsize(pwidth, pheight)
- X int *pwidth, *pheight;
- X{
- X Rect r;
- X r= screen->portRect;
- X *pwidth= r.right - r.left;
- X *pheight= r.bottom - r.top;
- X}
- X
- Xvoid
- Xwgetscrmm(pmmwidth, pmmheight)
- X int *pmmwidth, *pmmheight;
- X{
- X Rect r;
- X r= screen->portRect;
- X /* XXX Three pixels/mm is an approximation of the truth at most */
- X *pmmwidth= (r.right - r.left) / 3;
- X *pmmheight= (r.bottom - r.top) / 3;
- X}
- X
- X/* Routine called by "Resume" button in bomb box (passed to InitDialogs).
- X I have yet to see a program crash where an attempted exit to the
- X Finder caused any harm, so I think it's safe.
- X Anyway, it's tremendously useful during debugging. */
- X
- Xstatic pascal
- Xresume()
- X{
- X ExitToShell();
- X}
- X
- X/* WINDOWS. */
- X
- X/* Find the WINDOW pointer corresponding to a WindowPtr. */
- X
- XWINDOW *
- Xwhichwin(w)
- X WindowPtr w;
- X{
- X if (((WindowPeek)w)->windowKind < userKind)
- X return NULL; /* Not an application-created window */
- X else {
- X WINDOW *win;
- X
- X win= (WINDOW *) GetWRefCon(w);
- X if (win != NULL && win->w == w)
- X return win;
- X else
- X return NULL;
- X }
- X}
- X
- XWINDOW *
- Xwopen(title, drawproc)
- X char *title;
- X void (*drawproc)();
- X{
- X WINDOW *win= ALLOC(WINDOW);
- X Rect r;
- X
- X if (win == NULL) {
- X dprintf("wopen: ALLOC failed"); /* XXX */
- X return NULL;
- X }
- X
- X /* Find a nice position for the window. */
- X if (def_left + def_width + BAR + LSLOP + RSLOP
- X > screen->portRect.right) {
- X def_left= LEFT;
- X CLIPMAX(def_left, screen->portRect.right -
- X (def_width + BAR + LSLOP + RSLOP));
- X CLIPMIN(def_left, 0);
- X }
- X if (def_top + def_height + BAR > screen->portRect.bottom) {
- X def_top= TOP;
- X CLIPMAX(def_top, screen->portRect.bottom -
- X (def_height + BAR));
- X CLIPMIN(def_top, MENUBARHEIGHT + TITLEBARHEIGHT);
- X }
- X
- X SetRect(&r, def_left, def_top,
- X def_left+def_width + BAR + LSLOP + RSLOP,
- X def_top+def_height + BAR);
- X def_left += HINCR;
- X def_top += VINCR;
- X
- X win->w= NewWindow((Ptr)NULL, &r, PSTRING(title), TRUE, zoomDocProc,
- X (WindowPtr)(-1), TRUE, 0L);
- X SetWRefCon(win->w, (long)win);
- X
- X win->tag= 0;
- X win->drawproc= drawproc;
- X win->hcaret= win->vcaret= -1;
- X win->caret_on= FALSE;
- X win->attr= wattr;
- X win->hbar= win->vbar= NULL;
- X win->docwidth= 0;
- X win->docheight= 0;
- X win->orgh= -LSLOP;
- X win->orgv= 0;
- X win->timer= 0;
- X win->cursor = NULL;
- X
- X initmbar(&win->mbar);
- X makescrollbars(win);
- X
- X return win;
- X}
- X
- Xvoid
- Xwclose(win)
- X WINDOW *win;
- X{
- X if (win == active) {
- X rmlocalmenus(win);
- X active= NULL;
- X }
- X killmbar(&win->mbar);
- X DisposeWindow(win->w);
- X FREE(win);
- X}
- X
- Xvoid
- Xwgetwinsize(win, pwidth, pheight)
- X WINDOW *win;
- X int *pwidth, *pheight;
- X{
- X Rect r;
- X
- X getwinrect(win, &r);
- X *pwidth= r.right - r.left - LSLOP - RSLOP;
- X *pheight= r.bottom - r.top;
- X}
- X
- Xvoid
- Xwsettitle(win, title)
- X WINDOW *win;
- X char *title;
- X{
- X SetWTitle(win->w, PSTRING(title));
- X}
- X
- Xchar *
- Xwgettitle(win)
- X WINDOW *win;
- X{
- X static char title[256];
- X GetWTitle(win->w, title);
- X#ifndef CLEVERGLUE
- X PtoCstr(title);
- X#endif
- X return title;
- X}
- X
- Xvoid
- Xwfleep()
- X{
- X SysBeep(5);
- X}
- X
- Xvoid
- Xwsetmaxwinsize(width, height)
- X int width, height;
- X{
- X /* Not supported yet (should be stored in the window struct
- X and used by do_grow). */
- X /* XXX This procedure should disappear completely, it was
- X only invented for the Whitechapel which allocates bitmap
- X memory to the window when it is first created! */
- X /* XXX Well, maybe it has some use. In fact both min and max
- X window size are sometimes useful... */
- X}
- X
- Xvoid
- Xwsetdefwinpos(h, v)
- X int h, v;
- X{
- X /* XXX Sanity checks? Change interaction with wopen()? */
- X if (h > 0)
- X def_left = h;
- X if (v > 0)
- X def_top = v;
- X}
- X
- Xvoid
- Xwgetdefwinpos(ph, pv)
- X int *ph, *pv;
- X{
- X *ph = def_left;
- X *pv = def_top;
- X}
- X
- Xvoid
- Xwsetdefwinsize(width, height)
- X int width, height;
- X{
- X /* XXX Shouldn't this be done by wopen() instead? */
- X if (width <= 0) {
- X width= screen->portRect.right * 2/3;
- X CLIPMAX(width, 512);
- X }
- X CLIPMAX(width, screen->portRect.right - BAR - LSLOP - RSLOP);
- X CLIPMIN(width, MIN_WIDTH);
- X
- X if (height <= 0) {
- X height= screen->portRect.bottom * 2/3;
- X CLIPMAX(height, 342);
- X }
- X CLIPMAX(height, screen->portRect.bottom
- X - MENUBARHEIGHT - TITLEBARHEIGHT - BAR);
- X CLIPMIN(height, MIN_HEIGHT);
- X
- X def_width= width;
- X def_height= height;
- X}
- X
- Xvoid
- Xwgetdefwinsize(pwidth, pheight)
- X int *pwidth, *pheight;
- X{
- X *pwidth = def_width;
- X *pheight = def_height;
- X}
- X
- Xvoid
- Xwsetactive(win)
- X WINDOW *win;
- X{
- X SelectWindow(win->w);
- X}
- END_OF_FILE
- if test 6341 -ne `wc -c <'Ports/mac/stdwin.c'`; then
- echo shar: \"'Ports/mac/stdwin.c'\" unpacked with wrong size!
- fi
- # end of 'Ports/mac/stdwin.c'
- fi
- if test -f 'Ports/x11/cursor.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Ports/x11/cursor.c'\"
- else
- echo shar: Extracting \"'Ports/x11/cursor.c'\" \(5190 characters\)
- sed "s/^X//" >'Ports/x11/cursor.c' <<'END_OF_FILE'
- X/* This was copied from the standard X11R4 client twm and then changed */
- X
- X/*
- X * Copyright 1989 Massachusetts Institute of Technology
- X *
- X * Permission to use, copy, modify, and distribute this software and its
- X * documentation for any purpose and without fee is hereby granted, provided
- X * that the above copyright notice appear in all copies and that both that
- X * copyright notice and this permission notice appear in supporting
- X * documentation, and that the name of M.I.T. not be used in advertising
- X * or publicity pertaining to distribution of the software without specific,
- X * written prior permission. M.I.T. makes no representations about the
- X * suitability of this software for any purpose. It is provided "as is"
- X * without express or implied warranty.
- X *
- X * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T.
- X * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- X * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- X * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- X * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- X */
- X
- X/***********************************************************************
- X *
- X * $XConsortium: cursor.c,v 1.10 89/12/14 14:52:23 jim Exp $
- X *
- X * cursor creation code
- X *
- X * 05-Apr-89 Thomas E. LaStrange File created
- X *
- X ***********************************************************************/
- X
- X#include "x11.h"
- X
- Xstatic struct _CursorName {
- X char *name;
- X unsigned int shape;
- X Cursor cursor;
- X} cursor_names[] = {
- X
- X{"X_cursor", XC_X_cursor, None},
- X{"arrow", XC_arrow, None},
- X{"based_arrow_down", XC_based_arrow_down, None},
- X{"based_arrow_up", XC_based_arrow_up, None},
- X{"boat", XC_boat, None},
- X{"bogosity", XC_bogosity, None},
- X{"bottom_left_corner", XC_bottom_left_corner, None},
- X{"bottom_right_corner", XC_bottom_right_corner, None},
- X{"bottom_side", XC_bottom_side, None},
- X{"bottom_tee", XC_bottom_tee, None},
- X{"box_spiral", XC_box_spiral, None},
- X{"center_ptr", XC_center_ptr, None},
- X{"circle", XC_circle, None},
- X{"clock", XC_clock, None},
- X{"coffee_mug", XC_coffee_mug, None},
- X{"cross", XC_cross, None},
- X{"cross_reverse", XC_cross_reverse, None},
- X{"crosshair", XC_crosshair, None},
- X{"diamond_cross", XC_diamond_cross, None},
- X{"dot", XC_dot, None},
- X{"dotbox", XC_dotbox, None},
- X{"double_arrow", XC_double_arrow, None},
- X{"draft_large", XC_draft_large, None},
- X{"draft_small", XC_draft_small, None},
- X{"draped_box", XC_draped_box, None},
- X{"exchange", XC_exchange, None},
- X{"fleur", XC_fleur, None},
- X{"gobbler", XC_gobbler, None},
- X{"gumby", XC_gumby, None},
- X{"hand1", XC_hand1, None},
- X{"hand2", XC_hand2, None},
- X{"heart", XC_heart, None},
- X{"ibeam", XC_xterm, None}, /* Mac stdwin compat */
- X{"icon", XC_icon, None},
- X{"iron_cross", XC_iron_cross, None},
- X{"left_ptr", XC_left_ptr, None},
- X{"left_side", XC_left_side, None},
- X{"left_tee", XC_left_tee, None},
- X{"leftbutton", XC_leftbutton, None},
- X{"ll_angle", XC_ll_angle, None},
- X{"lr_angle", XC_lr_angle, None},
- X{"man", XC_man, None},
- X{"middlebutton", XC_middlebutton, None},
- X{"mouse", XC_mouse, None},
- X{"pencil", XC_pencil, None},
- X{"pirate", XC_pirate, None},
- X{"plus", XC_plus, None},
- X{"question_arrow", XC_question_arrow, None},
- X{"right_ptr", XC_right_ptr, None},
- X{"right_side", XC_right_side, None},
- X{"right_tee", XC_right_tee, None},
- X{"rightbutton", XC_rightbutton, None},
- X{"rtl_logo", XC_rtl_logo, None},
- X{"sailboat", XC_sailboat, None},
- X{"sb_down_arrow", XC_sb_down_arrow, None},
- X{"sb_h_double_arrow", XC_sb_h_double_arrow, None},
- X{"sb_left_arrow", XC_sb_left_arrow, None},
- X{"sb_right_arrow", XC_sb_right_arrow, None},
- X{"sb_up_arrow", XC_sb_up_arrow, None},
- X{"sb_v_double_arrow", XC_sb_v_double_arrow, None},
- X{"shuttle", XC_shuttle, None},
- X{"sizing", XC_sizing, None},
- X{"spider", XC_spider, None},
- X{"spraycan", XC_spraycan, None},
- X{"star", XC_star, None},
- X{"target", XC_target, None},
- X{"tcross", XC_tcross, None},
- X{"top_left_arrow", XC_top_left_arrow, None},
- X{"top_left_corner", XC_top_left_corner, None},
- X{"top_right_corner", XC_top_right_corner, None},
- X{"top_side", XC_top_side, None},
- X{"top_tee", XC_top_tee, None},
- X{"trek", XC_trek, None},
- X{"ul_angle", XC_ul_angle, None},
- X{"umbrella", XC_umbrella, None},
- X{"ur_angle", XC_ur_angle, None},
- X{"watch", XC_watch, None},
- X{"xterm", XC_xterm, None},
- X};
- X
- Xstatic
- XNewFontCursor (dpy, cp, str)
- X Display *dpy;
- X Cursor *cp;
- X char *str;
- X{
- X int i;
- X
- X for (i = 0; i < sizeof(cursor_names)/sizeof(struct _CursorName); i++)
- X {
- X if (strcmp(str, cursor_names[i].name) == 0)
- X {
- X if (cursor_names[i].cursor == None)
- X cursor_names[i].cursor = XCreateFontCursor(dpy,
- X cursor_names[i].shape);
- X *cp = cursor_names[i].cursor;
- X return;
- X }
- X }
- X _wwarning("NewFontCursor: unable to find font cursor \"%s\"", str);
- X *cp = None;
- X}
- X
- XCURSOR *
- Xwfetchcursor(name)
- X char *name;
- X{
- X Cursor c;
- X NewFontCursor(_wd, &c, name);
- X if (c == None)
- X return NULL;
- X else
- X return (CURSOR *)c;
- X}
- END_OF_FILE
- if test 5190 -ne `wc -c <'Ports/x11/cursor.c'`; then
- echo shar: \"'Ports/x11/cursor.c'\" unpacked with wrong size!
- fi
- # end of 'Ports/x11/cursor.c'
- fi
- if test -f 'Ports/x11/event.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Ports/x11/event.c'\"
- else
- echo shar: Extracting \"'Ports/x11/event.c'\" \(5450 characters\)
- sed "s/^X//" >'Ports/x11/event.c' <<'END_OF_FILE'
- X/* X11 STDWIN -- High levent handling */
- X
- X/* THIS CODE IS A MESS. SHOULD BE RESTRUCTURED! */
- X
- X#include "x11.h"
- X#include "llevent.h"
- X#include <X11/keysym.h>
- X
- Xstatic WINDOW *active;
- Xstatic WINDOW *prev_active;
- X
- X/* Ensure none of the window pointers refer to the given window --
- X it's being closed so the pointer becomes invalid. */
- X
- X_w_deactivate(win)
- X WINDOW *win;
- X{
- X if (win == active)
- X active= NULL;
- X if (win == _w_new_active)
- X _w_new_active= NULL;
- X if (win == prev_active)
- X prev_active= NULL;
- X if (win == _w_bs.win) {
- X _w_bs.win= NULL;
- X _w_bs.down= FALSE;
- X }
- X}
- X
- XWINDOW *
- X_w_get_last_active()
- X{
- X if (_w_new_active != NULL)
- X return _w_new_active;
- X if (active != NULL)
- X return active;
- X if (prev_active != NULL)
- X return prev_active;
- X /* No window was ever active. Pick one at random. */
- X return _w_somewin();
- X}
- X
- XWINDOW *
- Xwgetactive()
- X{
- X return active;
- X}
- X
- X/* wungetevent may be called from a signal handler.
- X If this is the case, we must send an event to ourselves
- X so it is picked up (eventually).
- X There is really still a race condition:
- X if wungetevent copies an event into the evsave buffer
- X when wgetevent is halfway of copying one out, we lose.
- X This can only be fixed with multiple buffers and I dont
- X want to think about that now. */
- X
- Xstatic bool in_getevent;
- XEVENT _w_evsave; /* Accessible by _w_ll_event */
- X
- Xvoid
- Xwungetevent(ep)
- X EVENT *ep;
- X{
- X if (ep->type != WE_NULL) {
- X _w_evsave= *ep;
- X#ifdef PIPEHACK
- X if (in_getevent) {
- X if (_wpipe[1] < 0)
- X _wwarning("wungetevent: can't interrupt wgetevent");
- X else if (write(_wpipe[1], "x", 1) != 1)
- X _wwarning("wungetevent: pipe write failed");
- X else
- X _wdebug(1, "wungetevent: wrote to pipe");
- X }
- X#endif
- X }
- X}
- X
- Xstatic void
- X_wwaitevent(ep, mayblock)
- X EVENT *ep;
- X bool mayblock;
- X{
- X XEvent e;
- X
- X in_getevent= TRUE;
- X
- X if (_w_evsave.type != WE_NULL) {
- X *ep= _w_evsave;
- X _w_evsave.type= WE_NULL;
- X in_getevent= FALSE;
- X return;
- X }
- X
- X /* Break out of this loop when we've got an event for the appl.,
- X or, if mayblock is false, when we would block (in XNextEvent) */
- X for (;;) {
- X if (_w_close_this != NULL) {
- X /* WM_DELETE_WINDOW detected */
- X ep->type = WE_COMMAND;
- X ep->window = _w_close_this;
- X ep->u.command = WC_CLOSE;
- X _w_close_this = NULL;
- X break;
- X }
- X if (_w_lostselection(ep))
- X return;
- X if (_w_keysym != 0) {
- X if (_w_new_active != active) {
- X if (active != NULL) {
- X ep->type= WE_DEACTIVATE;
- X ep->window= prev_active= active;
- X active= NULL;
- X }
- X else {
- X ep->type= WE_ACTIVATE;
- X ep->window= active= _w_new_active;
- X }
- X }
- X else {
- X ep->type= WE_CHAR;
- X ep->window= active;
- X ep->u.character= _w_keysym;
- X change_key_event(ep);
- X _w_keysym= 0;
- X }
- X if (ep->type != WE_NULL)
- X break;
- X }
- X if (_w_bs_changed || _w_moved) {
- X ep->type= WE_NULL;
- X switch (_w_bs.isub) {
- X case MBAR:
- X _whitmbar(&_w_bs, ep);
- X break;
- X case MWIN:
- X _whitmwin(&_w_bs, ep); /* XXX test */
- X break;
- X case HBAR:
- X _whithbar(&_w_bs, ep);
- X break;
- X case VBAR:
- X _whitvbar(&_w_bs, ep);
- X break;
- X case WA:
- X ep->type= _w_moved ?
- X WE_MOUSE_MOVE :
- X _w_bs.down ?
- X WE_MOUSE_DOWN :
- X WE_MOUSE_UP;
- X ep->window= _w_bs.win;
- X ep->u.where.h= _w_bs.x;
- X ep->u.where.v= _w_bs.y;
- X ep->u.where.button= _w_bs.button;
- X ep->u.where.clicks= _w_bs.clicks;
- X ep->u.where.mask= _w_bs.mask;
- X break;
- X }
- X _w_bs_changed= _w_moved= FALSE;
- X if (ep->type != WE_NULL)
- X break;
- X }
- X if (_w_checktimer(ep, FALSE))
- X break;
- X if (XPending(_wd) == 0)
- X XSync(_wd, FALSE);
- X if (XPending(_wd) == 0) {
- X if (_w_new_active != active) {
- X /* Why is this code duplicated here? */
- X if (active != NULL) {
- X ep->type= WE_DEACTIVATE;
- X ep->window= prev_active= active;
- X active= NULL;
- X }
- X else {
- X ep->type= WE_ACTIVATE;
- X ep->window= active= _w_new_active;
- X }
- X break;
- X }
- X if (_w_resized && _w_doresizes(ep))
- X break;
- X if (_w_dirty && _w_doupdates(ep))
- X break;
- X if (XPending(_wd) == 0 && _w_checktimer(ep, mayblock)
- X || !mayblock)
- X break;
- X }
- X#ifdef PIPEHACK
- X if (_w_evsave.type != NULL) {
- X /* Lots of race conditions here! */
- X char dummy[256];
- X int n;
- X _wdebug(1, "wgetevent: got evt from handler");
- X *ep= _w_evsave;
- X _w_evsave.type= WE_NULL;
- X if ((n= read(_wpipe[0], dummy, sizeof dummy)) <= 0)
- X _wdebug(1, "wgetevent: read from pipe failed");
- X else if (n != 1)
- X _wdebug(0, "wgetevent: got %d bytes from pipe!", n);
- X break;
- X }
- X#endif
- X XNextEvent(_wd, &e);
- X _w_ll_event(&e);
- X }
- X
- X in_getevent= FALSE;
- X}
- X
- Xbool
- Xwpollevent(ep)
- X EVENT *ep;
- X{
- X ep->type = WE_NULL;
- X _wwaitevent(ep, FALSE);
- X return ep->type != WE_NULL;
- X}
- X
- Xvoid
- Xwgetevent(ep)
- X EVENT *ep;
- X{
- X _wwaitevent(ep, TRUE);
- X}
- X
- Xstatic
- Xchange_key_event(ep)
- X EVENT *ep;
- X{
- X if (_w_state & Mod1Mask) {
- X ep->type= WE_NULL;
- X _w_menukey(ep->u.character, ep);
- X return;
- X }
- X switch (ep->u.character) {
- X case XK_Left:
- X ep->u.command= WC_LEFT;
- X break;
- X case XK_Right:
- X ep->u.command= WC_RIGHT;
- X break;
- X case XK_Up:
- X ep->u.command= WC_UP;
- X break;
- X case XK_Down:
- X ep->u.command= WC_DOWN;
- X break;
- X case '\n':
- X case '\r':
- X ep->u.command= WC_RETURN;
- X break;
- X case '\3':
- X ep->u.command= WC_CANCEL;
- X break;
- X case '\b':
- X case '\177': /* DEL */
- X ep->u.command= WC_BACKSPACE;
- X break;
- X case '\t':
- X ep->u.command= WC_TAB;
- X break;
- X default:
- X if (ep->u.character < 0 || ep->u.character > 0177)
- X ep->type= WE_NULL;
- X return;
- X }
- X ep->type= WE_COMMAND;
- X}
- END_OF_FILE
- if test 5450 -ne `wc -c <'Ports/x11/event.c'`; then
- echo shar: \"'Ports/x11/event.c'\" unpacked with wrong size!
- fi
- # end of 'Ports/x11/event.c'
- fi
- echo shar: End of archive 13 \(of 19\).
- cp /dev/null ark13isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 19 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-