BSD 4_3 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Sat, 1 Feb 1986 06:21:13 +0000 (22:21 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Sat, 1 Feb 1986 06:21:13 +0000 (22:21 -0800)
Work on file usr/contrib/X/libsun/initial.c
Work on file usr/contrib/X/libsun/maps.c

Synthesized-from: CSRG/cd1/4.3

usr/contrib/X/libsun/initial.c [new file with mode: 0644]
usr/contrib/X/libsun/maps.c [new file with mode: 0644]

diff --git a/usr/contrib/X/libsun/initial.c b/usr/contrib/X/libsun/initial.c
new file mode 100644 (file)
index 0000000..3b33bb5
--- /dev/null
@@ -0,0 +1,378 @@
+#ifndef lint
+static char *rcsid = "$Header: initial.c,v 10.4 86/02/01 16:21:01 tony Rel $";
+#endif lint
+#ifdef sun
+/*
+ * The Sun X drivers are a product of Sun Microsystems, Inc. and are provided
+ * for unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify these drivers without charge, but are not authorized
+ * to license or distribute them to anyone else except as part of a product or
+ * program developed by the user.
+ * 
+ * THE SUN X DRIVERS ARE PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND
+ * INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE
+ * PRACTICE.
+ *
+ * The Sun X Drivers are provided with no support and without any obligation
+ * on the part of Sun Microsystems, Inc. to assist in their use, correction,
+ * modification or enhancement.
+ * 
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THE SUN X
+ * DRIVERS OR ANY PART THEREOF.
+ * 
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ * 
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ */
+
+#ifndef        lint
+static char sccsid[] = "%Z%%M% %I% %E% Copyright 1986 Sun Micro";
+#endif
+
+/*-
+ * Copyright 1985, Massachusetts Institute of Technology
+ * Copyright (c) 1986 by Sun Microsystems,  Inc.
+ */
+
+/* initial.c   Routines to open & close display
+ *
+ *     OpenDisplay             Open it
+ *     InitDisplay             Download it
+ *     DisplayDead             Check if dead
+ *     Allocate_space          Allocate some temporary storage
+ *
+ */
+
+/*
+ *     ToDo:
+ *             Look in environment/defaults for programs to start
+ */
+
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/time.h>
+#include <sys/ioctl.h>
+#include <sys/signal.h>
+#include <sun/fbio.h>
+#include "Xsun.h"
+#include <pixrect/pixrect_hs.h>
+#include <sunwindow/rect.h>
+#include <sunwindow/rectlist.h>
+#include <sunwindow/pixwin.h>
+#include <sunwindow/win_screen.h>
+#include <sunwindow/win_struct.h>
+#include <sunwindow/win_input.h>
+
+extern int InputReader();
+
+struct pixwin *Display;
+struct pixrect *PixRect;
+u_char InvPix[256];
+
+short Sun_From_X_Op[] = {
+       PIX_CLR,                        /* GXclear */
+       PIX_SRC&PIX_DST,                /* GXand */
+       PIX_SRC&PIX_NOT(PIX_DST),       /* GXandReverse */
+       PIX_SRC,                        /* GXcopy */
+       PIX_NOT(PIX_SRC)&PIX_DST,       /* GXandInverted */
+       PIX_DST,                        /* GXnoop */
+       PIX_SRC^PIX_DST,                /* GXxor */
+       PIX_SRC|PIX_DST,                /* GXor */
+       PIX_NOT(PIX_SRC)&PIX_NOT(PIX_DST), /* GXnor */
+       PIX_NOT(PIX_SRC)^PIX_DST,       /* GXequiv */
+       PIX_NOT(PIX_DST),               /* GXinvert */
+       PIX_SRC|PIX_NOT(PIX_DST),       /* GXorReverse */
+       PIX_NOT(PIX_SRC),               /* GXcopyInverted */
+       PIX_NOT(PIX_SRC)|PIX_DST,               /* GXorInverted */
+       PIX_NOT(PIX_SRC)|PIX_NOT(PIX_DST), /* GXnand */
+       PIX_SET,                        /* GXset */
+};
+
+int vsdev = -1;
+extern int errno;
+DEVICE *CurrentDevice;
+
+#define PARENT "WINDOW_GFX"
+/* Open the display */
+static char *parent;
+
+/*ARGSUSED*/
+OpenDisplay (devname)
+       char *devname;
+{
+    struct screen sc;
+    extern char *getenv();
+
+    signal (SIGWINCH, SIG_IGN);
+    parent = getenv(PARENT);
+    bzero((caddr_t) & sc, sizeof sc);
+    if (*devname != '/')
+       devname = "/dev/fb";
+    strncpy(sc.scr_fbname, devname, SCR_NAMESIZE);
+    if (parent) {
+       /* Running under "overview" */
+       int         pfd;
+
+       if ((pfd = open(parent, 2, 0)) < 0) {
+           fprintf(stderr, "Can't open parent %s\n", parent);
+           return (-1);
+       }
+       vsdev = win_getnewwindow();
+       win_setlink(vsdev, WL_PARENT, win_fdtonumber(pfd));
+       win_insert(vsdev);
+       close(pfd);
+    }
+    else {
+       /* Running alone */
+       vsdev = win_screennew(&sc);
+    }
+    return (vsdev);
+}
+
+/* Do sun specific initialization */
+#ifdef notdef
+static int pid;
+#define        XTERM   "xterm"
+static char *args[] = {
+    XTERM,
+    "=80x24+30+30",
+    "-C",
+    "-n",
+    "console",
+    0,
+};
+
+#include <sys/wait.h>
+
+static SigChildHandler()
+{
+    register int dead;
+    union wait status;
+
+    while ((dead = wait3(&status, WNOHANG, NULL)) > 0) {
+       if (dead == pid) {
+           exit(0);
+       }
+    }
+}
+
+static StartShell()
+{
+    signal(SIGCHLD, SigChildHandler);
+    if ((pid = fork()) == 0) {
+       {
+           register int i = getdtablesize();
+
+           while (--i >= 0) {
+               close(i);
+           }
+       }
+       open("/dev/null", 2, 0);
+       dup(0);
+       dup(0);
+       {
+           /* Copy the environment for Setenv */
+           extern char **environ;
+           register int i = 0;
+           char      **envnew;
+
+           while (environ[i] != NULL)
+               i++;
+
+           envnew = (char **) malloc(sizeof(char *) * (i + 1));
+           for (; i >= 0; i--)
+               envnew[i] = environ[i];
+           environ = envnew;
+       }
+       {
+#define        HOSTNAMESIZE    128
+           char        DisplayName[HOSTNAMESIZE];
+
+           gethostname(DisplayName, HOSTNAMESIZE);
+           strcat(DisplayName, ":0");
+           Setenv("DISPLAY=", DisplayName);
+#undef HOSTNAMESIZE
+       }
+       execvp(XTERM, args);
+       _exit(1);
+    }
+}
+#endif
+
+InitDisplay (info)
+       register DEVICE *info;
+{
+    register int i;
+    static vsCursor vsc;
+    static vsBox vsm;
+    static vsEventQueue vsq = {
+                              NULL,
+                              0,
+                              0,
+                              0,
+    };
+    struct screen sc;
+
+    win_screenget(vsdev, &sc);
+    info->height = sc.scr_rect.r_height;
+    info->width = sc.scr_rect.r_width;
+    if (parent) {
+       /* running under "overview" */
+       win_setrect(vsdev, &sc.scr_rect);
+    }
+    {
+       struct fbtype fbt;
+       int         fd = open(sc.scr_fbname, O_RDWR, 0);
+
+       if (fd < 0 || ioctl(fd, FBIOGTYPE, &fbt) < 0) {
+           if (fd < 0)
+               fprintf(stderr, "Can't open fb %s\n", sc.scr_fbname);
+           else
+               fprintf(stderr, "Can't FBIOGTYPE on %s\n", sc.scr_fbname);
+           return (-1);
+       }
+       close(fd);
+       info->id = fbt.fb_type + SUN_BASE;
+       info->planes = fbt.fb_depth;
+       info->entries = fbt.fb_cmsize;
+    }
+    Display = pw_open(vsdev);
+    PixRect = Display->pw_pixrect;
+    pw_reversevideo(Display,0,1);
+    {
+       struct inputmask im;
+
+       input_imnull(&im);
+       im.im_flags = IM_ASCII | IM_META | IM_NEGEVENT;
+       win_setinputcodebit(&im, LOC_MOVE);
+       win_setinputcodebit(&im, MS_LEFT);
+       win_setinputcodebit(&im, MS_MIDDLE);
+       win_setinputcodebit(&im, MS_RIGHT);
+       win_setinputmask(vsdev, &im, NULL, WIN_NULLLINK);
+    }
+    if (fcntl(vsdev, F_SETFL, O_NDELAY) < 0)
+       return (-1);
+    {
+       /* Following struct cannot be included from win_cursor.h */
+       struct cursor {
+               short   cur_xhot, cur_yhot;     /* offset of mouse position from shape*/
+               int     cur_function;           /* relationship of shape to screen */
+               struct  pixrect *cur_shape;     /* memory image to use */
+               int     flags;                  /* various options */
+       
+               short   horiz_hair_thickness;   /* horizontal crosshair height */
+               int     horiz_hair_op;          /*            drawing op       */
+               int     horiz_hair_color;       /*            color            */ 
+               short   horiz_hair_length;      /*            width           */ 
+               short   horiz_hair_gap;         /*            gap             */ 
+       
+               short   vert_hair_thickness;    /* vertical crosshair width  */
+               int     vert_hair_op;           /*          drawing op       */
+               int     vert_hair_color;        /*          color            */ 
+               short   vert_hair_length;       /*          height           */ 
+               short   vert_hair_gap;          /*          gap              */ 
+       } cs;
+       static struct pixrect pr;
+
+       cs.cur_xhot = cs.cur_yhot = cs.cur_function = 0;
+       cs.flags = 0;
+       cs.cur_shape = &pr;
+       pr.pr_size.x = pr.pr_size.y = 0;
+       win_setcursor(vsdev, &cs);
+       win_setmouseposition(vsdev, info->width >> 1, info->height >> 1);
+    }
+    info->mouse = &vsc;
+    info->mbox = &vsm;
+    info->queue = &vsq;
+    Define_input_handler(InputReader);
+    SetUpInvPix();
+    CurrentDevice = info;
+#ifdef notdef
+    StartShell();
+#endif
+    return (0);
+}
+
+/* Check if display is dead */
+
+DisplayDead ()
+{
+       return(0);
+}
+
+/* the presumption here is that only one Allocate_space call is made/request */
+
+#define ABUFSIZE 3072
+static char ABuffer[3072];     /* random size buffer for allocate space */
+caddr_t AllocateSpace (size)
+       register int size;
+{
+       if (size < ABUFSIZE) return(ABuffer);
+       errno = ENOMEM;
+       return (NULL);
+}
+
+/* XXX - should be static data */
+SetUpInvPix()
+{
+    register int i;
+
+    for (i = 255; i >= 0; i--) {
+       register int j = 1, k = 128, l = 8;
+
+       while (l--) {
+           if ((i & j) != 0)
+               InvPix[i] |= k;
+           j <<= 1;
+           k >>= 1;
+       }
+    }
+}
+
+#ifdef notdef
+Setenv (var, value)
+/*
+   sets the value of var to be arg in the Unix 4.2 BSD environment env.
+   Var should end with '='.
+   (bindings are of the form "var=value")
+   This procedure assumes the memory for the first level of environ
+   was allocated using malloc.
+ */
+register char *var, *value;
+{
+    extern char **environ;
+    register int index = 0;
+
+    while (environ[index] != NULL) {
+       if (strncmp(environ[index], var, strlen(var)) == 0) {
+           /* found it */
+           environ[index] = (char *) malloc(strlen(var) + strlen(value));
+           strcpy(environ[index], var);
+           strcat(environ[index], value);
+           return;
+       }
+       index++;
+    }
+
+    if ((environ = (char **) realloc(environ, sizeof(char *) *
+                                    (index + 2))) == NULL) {
+       fprintf(stderr, "Setenv: malloc out of memory\n");
+       exit(1);
+    }
+
+    environ[index] = (char *) malloc(strlen(var) + strlen(value));
+    strcpy(environ[index], var);
+    strcat(environ[index], value);
+    environ[++index] = NULL;
+}
+#endif
+#endif sun
diff --git a/usr/contrib/X/libsun/maps.c b/usr/contrib/X/libsun/maps.c
new file mode 100644 (file)
index 0000000..f4e8039
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef lint
+static char *rcsid_maps_c = "$Header: maps.c,v 10.2 86/02/01 16:21:11 tony Rel $";
+#endif lint
+/* Copyright 1985, Massachusetts Institute of Technology */
+
+/* foreground/background map */
+
+char FBMap[] = {0x0, 0x0, 0x0, 0x0, 0x5, 0x5, 0x5, 0x5,
+               0xa, 0xa, 0xa, 0xa, 0xf, 0xf, 0xf, 0xf,
+
+               0x0, 0x4, 0x8, 0xc, 0x1, 0x5, 0x9, 0xd,
+               0x2, 0x6, 0xa, 0xe, 0x3, 0x7, 0xb, 0xf,
+
+               0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
+               0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf,
+
+               0x0, 0x5, 0xa, 0xf, 0x0, 0x5, 0xa, 0xf,
+               0x0, 0x5, 0xa, 0xf, 0x0, 0x5, 0xa, 0xf};
+
+/* single source map */
+
+char SSMap[] = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7,
+               0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf,
+
+               0x0, 0x4, 0x8, 0xc, 0x1, 0x5, 0x9, 0xd,
+               0x2, 0x6, 0xa, 0xe, 0x3, 0x7, 0xb, 0xf};