home *** CD-ROM | disk | FTP | other *** search
- From: guido@cwi.nl (Guido van Rossum)
- Newsgroups: alt.sources
- Subject: STDWIN 0.9.5, Part 16/19
- Message-ID: <3080@charon.cwi.nl>
- Date: 4 Mar 91 11:58:28 GMT
-
- Archive-name: stdwin/part16
-
- #! /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 16 (of 19)."
- # Contents: Appls/bed/file.c Appls/bed/fmenu.c Appls/dpv/dpvdoc.h
- # Appls/dpv/dpvmachine.c Appls/dpv/dpvmachine.h Appls/test/bike.c
- # Appls/test/bits.c Appls/test/charset.c Appls/test/dklok.c
- # H/lists.h H/patchlevel.h H/winreq.h Packs/vt/vtresize.c
- # Packs/vt/vtvtrm.c Ports/mac/caret.c Ports/vtrm/DIST/pag.c
- # Ports/x11/scroll.c
- # Wrapped by guido@voorn.cwi.nl on Mon Mar 4 12:37:34 1991
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'Appls/bed/file.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Appls/bed/file.c'\"
- else
- echo shar: Extracting \"'Appls/bed/file.c'\" \(2953 characters\)
- sed "s/^X//" >'Appls/bed/file.c' <<'END_OF_FILE'
- X#include <stdio.h>
- X#include "bed.h"
- X
- Xextern char *rindex () ;
- X
- Xextern int sqrsize ;
- X
- Xextern int map_width ;
- Xextern int map_height ;
- X
- Xextern char *raster ;
- Xextern int raster_lenght ;
- Xextern int stride ;
- X
- Xextern char *fname ;
- Xextern char *title ;
- X
- Xextern WINDOW *win ;
- X
- Xextern bool changed ;
- X
- Xchar
- X*strip (fname)
- X char *fname ;
- X{
- X char *p ;
- X
- X if ((p = rindex (fname, '/')) == NULL && /* UNIX */
- X (p = rindex (fname, '\\')) == NULL && /* GEMDOS & MSDOS */
- X (p = rindex (fname, ':')) == NULL)
- X return (fname) ;
- X return (p + 1) ;
- X}
- X
- Xbool
- Xinput(fp)
- X FILE *fp;
- X{
- X int value ;
- X char ibuf[81] ;
- X char *id ;
- X char *p ;
- X char *type ;
- X int i ;
- X
- X for (;;) {
- X if (fgets (ibuf, 81, fp) == NULL)
- X /*
- X ** EOF
- X */
- X break ;
- X
- X if (strlen (ibuf) == 80) {
- X /*
- X ** Line too long, not a bitmap file
- X */
- X fclose (fp) ;
- X return (FALSE) ;
- X }
- X
- X if (strncmp (ibuf, "#define ", 8) == 0) {
- X id = ibuf + 8 ;
- X if ((type = rindex (id, '_')) == NULL)
- X type = id ;
- X else
- X type++ ;
- X
- X if (!strncmp (type, "width", 5)) {
- X map_width = atoi (type + 5) ;
- X }
- X
- X if (!strncmp (type, "height", 6)) {
- X map_height = atoi (type + 6) ;
- X }
- X
- X continue ;
- X }
- X
- X if (strncmp (ibuf, "static unsigned char ", 21) == 0)
- X id = ibuf + 21 ;
- X else if (strncmp (ibuf, "static char ", 12) == 0)
- X id = ibuf + 12 ;
- X else
- X continue ;
- X
- X if ((type = rindex (id, '_')) == NULL)
- X type = id ;
- X else
- X type++ ;
- X
- X if (strncmp (type, "bits[]", 6) != 0)
- X continue ;
- X
- X newraster () ;
- X
- X for (i = 0, p = raster ; i < raster_lenght ; ++i, ++p) {
- X if (fscanf (fp, " 0x%2x%*[,}]%*[ \n]", &value) != 1) {
- X free (raster) ;
- X raster = NULL ;
- X fclose (fp) ;
- X return (FALSE) ;
- X }
- X *p = value ;
- X }
- X }
- X
- X fclose (fp) ;
- X return (TRUE) ;
- X}
- X
- Xbool
- Xreadbitmap ()
- X{
- X FILE *fp ;
- X char namebuf[256] ;
- X
- X if (fname == NULL) {
- X namebuf[0] = 0 ;
- X
- X if (!waskfile ("Read file", namebuf, sizeof (namebuf), FALSE))
- X return (FALSE) ;
- X
- X fname = strdup (namebuf) ;
- X title = strip (fname) ;
- X
- X wsettitle (win, title) ;
- X }
- X
- X fp = fopen (fname, "r") ;
- X if (fp == NULL) {
- X perror(fname);
- X return (FALSE) ;
- X }
- X
- X return (input(fp)) ;
- X}
- X
- Xvoid
- Xoutput(fp)
- X FILE *fp ;
- X{
- X int i ;
- X
- X fprintf (fp, "#define %s_width\t%d\n", title, map_width) ;
- X fprintf (fp, "#define %s_height\t%d\n", title, map_height) ;
- X fprintf (fp, "static char %s_bits[] {\n 0x%02x", title,
- X raster[0] & 0xFF) ;
- X
- X for (i = 1 ; i < raster_lenght ; ++i) {
- X fprintf (fp, i % 12 ? ", " : ",\n ") ;
- X fprintf (fp, "0x%02x", raster[i] & 0xFF) ;
- X }
- X fprintf (fp, "};\n") ;
- X}
- X
- Xbool
- Xwritebitmap()
- X{
- X FILE *fp;
- X char namebuf[256];
- X
- X namebuf[0] = '\0' ;
- X if (fname == NULL) {
- X if (!waskfile ("Save as", namebuf, sizeof (namebuf), TRUE))
- X return (FALSE) ;
- X fname = strdup (namebuf) ;
- X title = strip (namebuf) ;
- X wsettitle (win, title) ;
- X }
- X
- X fp = fopen (fname, "w") ;
- X if (fp == NULL) {
- X wperror (fname) ;
- X return (FALSE) ;
- X }
- X
- X output (fp) ;
- X fclose (fp) ;
- X return (TRUE) ;
- X}
- X
- END_OF_FILE
- if test 2953 -ne `wc -c <'Appls/bed/file.c'`; then
- echo shar: \"'Appls/bed/file.c'\" unpacked with wrong size!
- fi
- # end of 'Appls/bed/file.c'
- fi
- if test -f 'Appls/bed/fmenu.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Appls/bed/fmenu.c'\"
- else
- echo shar: Extracting \"'Appls/bed/fmenu.c'\" \(2781 characters\)
- sed "s/^X//" >'Appls/bed/fmenu.c' <<'END_OF_FILE'
- X#include <stdio.h>
- X#include "bed.h"
- X#include "menu.h"
- X
- Xextern char *strip () ;
- X
- Xextern int sqrsize ;
- X
- Xextern int map_width ;
- Xextern int map_height ;
- X
- Xextern char *fname ;
- Xextern char *title ;
- X
- Xextern WINDOW *win ;
- X
- Xextern char *raster ;
- X
- Xextern bool changed ;
- X
- Xvoid
- Xdo_open_file ()
- X{
- X if (changed) {
- X switch (waskync ("Save changes ?", 1)) {
- X case 1:
- X if (!writebitmap ())
- X return ;
- X break ;
- X case -1 :
- X return ;
- X }
- X
- X changed = FALSE ;
- X }
- X if (fname != NULL) {
- X free (fname) ;
- X fname = title = NULL ;
- X }
- X
- X if (!readbitmap ()) {
- X if (fname != NULL) {
- X free (fname) ;
- X fname = title = NULL ;
- X wsettitle (win, "Untitled") ;
- X }
- X
- X newraster () ;
- X }
- X}
- X
- Xvoid
- Xdo_new_map ()
- X{
- X char str[20] ;
- X
- X if (changed) {
- X switch (waskync ("Save changes ?", 1)) {
- X case 1 :
- X if (!writebitmap ())
- X return ;
- X break ;
- X case -1 :
- X return ;
- X }
- X
- X changed = FALSE ;
- X }
- X
- X if (fname != NULL) {
- X free (fname) ;
- X fname = title = NULL ;
- X wsettitle (win, "Untitled") ;
- X }
- X
- X *str = 0 ;
- X
- X if (waskstr ("Enter width of new raster", str, 20)) {
- X while ((map_width = atoi (str)) <= 0) {
- X *str = 0 ;
- X if (!waskstr ("Please enter a number greater 0",
- X str, 20)) {
- X map_width = -1 ;
- X break ;
- X }
- X }
- X
- X if (waskstr ("Enter height of new raster", str, 20)) {
- X while ((map_height = atoi (str)) <= 0) {
- X *str = 0 ;
- X if (!waskstr ("Please enter a number greater 0",
- X str, 20))
- X break ;
- X }
- X }
- X else
- X map_width = -1 ;
- X }
- X
- X if (map_width == -1) {
- X map_width = DEF_COLS ;
- X map_height = DEF_ROWS ;
- X }
- X
- X newraster () ;
- X}
- X
- Xbool
- Xdo_quit ()
- X{
- X if (changed) {
- X switch (waskync ("Save changes ?", 1)) {
- X case 1 :
- X if (!writebitmap ())
- X return (FALSE) ;
- X break ;
- X case -1 :
- X return (FALSE) ;
- X }
- X
- X changed = FALSE ;
- X }
- X wclose (win) ;
- X free (raster) ;
- X raster = NULL ;
- X return (TRUE) ;
- X}
- X
- Xbool
- Xdo_file_menu (ep)
- X EVENT *ep ;
- X{
- X switch (ep->u.m.item) {
- X case OPEN_ITEM:
- X do_open_file () ;
- X setsqrsize () ;
- X wchange (win, 0, 0, map_width * sqrsize,
- X map_height * sqrsize) ;
- X wsetdocsize (win, map_width * sqrsize, map_height * sqrsize) ;
- X break ;
- X case NEW_ITEM:
- X do_new_map () ;
- X setsqrsize () ;
- X wchange (win, 0, 0, map_width * sqrsize,
- X map_height * sqrsize) ;
- X wsetdocsize (win, map_width * sqrsize, map_height * sqrsize) ;
- X break ;
- X case SAVE_ITEM:
- X if (changed) {
- X if (writebitmap ())
- X changed = FALSE ;
- X }
- X break ;
- X case SAVE_AS_ITEM: {
- X char namebuf[256] ;
- X
- X strcpy (namebuf, fname) ;
- X if (waskstr ("Save as ?", namebuf, 256, FALSE)) {
- X char *savedname = fname ;
- X
- X fname = strdup (namebuf) ;
- X title = strip (fname) ;
- X (void) writebitmap () ;
- X free (fname) ;
- X fname = savedname ;
- X title = strip (fname) ;
- X }
- X break ;
- X }
- X case QUIT_ITEM:
- X return (do_quit ()) ;
- X }
- X
- X return (FALSE) ;
- X}
- END_OF_FILE
- if test 2781 -ne `wc -c <'Appls/bed/fmenu.c'`; then
- echo shar: \"'Appls/bed/fmenu.c'\" unpacked with wrong size!
- fi
- # end of 'Appls/bed/fmenu.c'
- fi
- if test -f 'Appls/dpv/dpvdoc.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Appls/dpv/dpvdoc.h'\"
- else
- echo shar: Extracting \"'Appls/dpv/dpvdoc.h'\" \(2487 characters\)
- sed "s/^X//" >'Appls/dpv/dpvdoc.h' <<'END_OF_FILE'
- X/* dpv -- ditroff previewer. Description of input language. */
- X
- X/* This isn't really a source file but disguised as one it is
- X more likely to be distributed with the rest of the source */
- X
- X/******************************************************************************
- X
- X output language from ditroff:
- X all numbers are character strings
- X
- X (These comments should suffice to write my own ditroff output
- X filter, but I'm lazy... Note that the parser expects its input to
- X be error-free -- it contains unchecked fscanf calls all over.
- X Also it is not clear whether relative motions may have negative
- X numbers as parameters. For filters descending from BWK's prototype
- X this works for 'v' but not for 'h', as 'v' uses fscan but 'h'
- X reads characters until it finds a non-digit... GvR)
- X
- X{ push environment (font, size, position)
- X} pop environment
- X#..\n comment
- Xsn size in points
- Xfn font as number from 1 to n
- Xcx ascii character x
- XCxyz funny char \(xyz. terminated by white space
- XHn go to absolute horizontal position n
- XVn go to absolute vertical position n (down is positive)
- Xhn go n units horizontally (relative)
- Xvn ditto vertically
- Xnnc move right nn, then print c (exactly 2 digits!)
- X (this wart is an optimization that shrinks output file size
- X about 35% and run-time about 15% while preserving ascii-ness)
- Xpn new page begins (number n) -- set v to 0
- XP spread ends -- output it. (Put in by vsort).
- Xnb a end of line (information only -- no action needed)
- X b = space before line, a = after
- Xw paddable word space -- no action needed
- X
- XDt ..\n draw operation 't':
- X Dl x y line from here by x,y (drawing char .)
- X (affects position by x, y -- GvR)
- X Dc d circle of diameter d with left side here
- X De x y ellipse of axes x,y with left side here
- X Da x y x1 y1 arc; see drawarc in dpvoutput.c for description
- X D~ x y x y ... B-spline curve by x,y then x,y ...
- X
- Xx ..\n device control functions:
- X x i init
- X x T s name of device is s
- X x r n h v resolution is n/inch h = min horizontal motion, v = min vert
- X x p pause (can restart)
- X x s stop -- done for ever
- X x t generate trailer
- X x f n s font position n contains font s
- X (there appears to be some disagreement whether this also
- X selects s as the current font -- GvR)
- X x H n set character height to n
- X x S n set slant to N
- X
- X Subcommands like "i" are often spelled out like "init".
- X
- X******************************************************************************/
- END_OF_FILE
- if test 2487 -ne `wc -c <'Appls/dpv/dpvdoc.h'`; then
- echo shar: \"'Appls/dpv/dpvdoc.h'\" unpacked with wrong size!
- fi
- # end of 'Appls/dpv/dpvdoc.h'
- fi
- if test -f 'Appls/dpv/dpvmachine.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Appls/dpv/dpvmachine.c'\"
- else
- echo shar: Extracting \"'Appls/dpv/dpvmachine.c'\" \(2989 characters\)
- sed "s/^X//" >'Appls/dpv/dpvmachine.c' <<'END_OF_FILE'
- X/* dpv -- ditroff previewer. Ditroff virtual machine. */
- X
- X#include "dpv.h"
- X#include "dpvmachine.h"
- X#include "dpvoutput.h"
- X
- X/* Basic state */
- X
- Xint size; /* current point size */
- Xint font; /* current font */
- Xint hpos; /* horizontal position we are to be at next; left=0 */
- Xint vpos; /* current vertical position (down positive) */
- X
- X/* Environment */
- X
- X
- Xstruct state state[MAXSTATE];
- Xstruct state *statep = state;
- X
- X/* Mounted font table */
- X
- Xfontinfo fonts;
- Xint nfonts = 0; /* start with no fonts mounted */
- X
- X/* Page info */
- X
- Xint ipage; /* internal page number */
- X
- X/* Global info */
- X
- Xint res = 432; /* resolution for which input was prepared */
- X /* default is old troff resolution */
- X
- X/* Load font info for font s on position n; optional file name s1 */
- X
- Xloadfont(n, s, s1)
- X int n;
- X char *s, *s1;
- X{
- X if (n < 0 || n > NFONTS)
- X error(FATAL, "can't load font %d", n);
- X fonts.name[n]= strdup(s);
- X}
- X
- X/* Initialize device */
- X
- Xt_init()
- X{
- X /* Start somewhere */
- X hpos = vpos = 0;
- X size= 10;
- X font= 1;
- X usefont();
- X}
- X
- X/* Begin a new block */
- X
- Xt_push()
- X{
- X if (statep >= state+MAXSTATE)
- X error(FATAL, "{ nested too deep");
- X statep->ssize = size;
- X statep->sfont = font;
- X statep->shpos = hpos;
- X statep->svpos = vpos;
- X ++statep;
- X}
- X
- X/* Pop to previous state */
- X
- Xt_pop()
- X{
- X if (--statep < state)
- X error(FATAL, "extra }");
- X size = statep->ssize;
- X font = statep->sfont;
- X hpos = statep->shpos;
- X vpos = statep->svpos;
- X usefont();
- X}
- X
- X/* Called at the start of a new page.
- X Returns < 0 if it is time to stop. */
- X
- Xint
- Xt_page(n)
- X int n;
- X{
- X if (nextpage(n) < 0)
- X return -1;
- X vpos = hpos = 0;
- X usefont();
- X return 0;
- X}
- X
- X/* Do whatever for the end of a line */
- X
- Xt_newline()
- X{
- X hpos = 0; /* because we're now back at the left margin */
- X}
- X
- X/* Convert integer to internal size number */
- X
- Xt_size(n)
- X int n;
- X{
- X return n;
- X}
- X
- X/* Set character height to n */
- X
- X/*ARGSUSED*/
- Xt_charht(n)
- X int n;
- X{
- X static bool warned;
- X if (!warned) {
- X error(WARNING, "Setting character height not implemented");
- X warned= TRUE;
- X }
- X}
- X
- X/* Set slant to n */
- X
- X/*ARGSUSED*/
- Xt_slant(n)
- X int n;
- X{
- X static bool warned;
- X if (!warned) {
- X error(WARNING, "Setting slant not implemented");
- X warned= TRUE;
- X }
- X}
- X
- X/* Convert string to font number */
- X
- Xt_font(s)
- X char *s;
- X{
- X return atoi(s);
- X}
- X
- X/* Print string s as text */
- X
- Xt_text(s)
- X char *s;
- X{
- X int c;
- X char str[100];
- X
- X /* XXX This function doesn't work any more since lastw is not set */
- X
- X while (c = *s++) {
- X if (c == '\\') {
- X switch (c = *s++) {
- X case '\\':
- X case 'e':
- X put1('\\');
- X break;
- X case '(':
- X str[0] = *s++;
- X str[1] = *s++;
- X str[2] = EOS;
- X put1s(str);
- X break;
- X }
- X } else {
- X put1(c);
- X }
- X /*hmot(lastw);*/
- X }
- X}
- X
- X/* Reset; argument is 'p' for pause, 's' for start */
- X
- Xt_reset(c)
- X int c;
- X{
- X if (c == 's')
- X lastpage();
- X}
- X
- X/* Absolute vertical motion to position n */
- X
- Xvgoto(n)
- X int n;
- X{
- X vpos = n;
- X recheck();
- X}
- X
- X/* Set point size to n */
- X
- Xsetsize(n)
- Xint n;
- X{
- X size = n;
- X usefont();
- X}
- X
- X/* Set font to n */
- X
- Xsetfont(n)
- Xint n;
- X{
- X font = n;
- X usefont();
- X}
- END_OF_FILE
- if test 2989 -ne `wc -c <'Appls/dpv/dpvmachine.c'`; then
- echo shar: \"'Appls/dpv/dpvmachine.c'\" unpacked with wrong size!
- fi
- # end of 'Appls/dpv/dpvmachine.c'
- fi
- if test -f 'Appls/dpv/dpvmachine.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Appls/dpv/dpvmachine.h'\"
- else
- echo shar: Extracting \"'Appls/dpv/dpvmachine.h'\" \(2383 characters\)
- sed "s/^X//" >'Appls/dpv/dpvmachine.h' <<'END_OF_FILE'
- X/* dpv -- ditroff previewer. Definitions for ditroff virtual machine. */
- X
- X/* The ditroff machine has the following state information:
- X
- X Basic state:
- X - hpos, vpos print head position on current page
- X - size current point size
- X - font current font number (range 0..NFONTS-1)
- X
- X Environment:
- X - a stack containing up to MAXSTATE copies of the basic state
- X
- X Mounted font table:
- X - a mapping from font number to (ditroff) font names
- X (i.e., which font is mounted on which logical position)
- X
- X Page info:
- X - current page number
- X
- X Global info (not used much):
- X - typesetter name
- X - resolution assumed when preparing
- X - page dimensions
- X - etc.?
- X
- X To restart the machine at a given page, we need to save and restore
- X the basic state, environment and mounted font table.
- X It could be argued that at page boundaries the environment stack
- X should be empty, and that the mounted font table should be initialized
- X once and for ever.
- X The latter isn't the case in practice; ".fp" requests can be and are
- X used anywhere in ditroff source files.
- X Because the environment pushes the (page-relative) position, it is
- X unlikely that restoring an environment on a different page makes any
- X sense, so we could assume this (and check that the input conforms).
- X*/
- X
- X/* Array dimensions */
- X
- X#define NFONTS 65 /* total number of fonts usable */
- X#define MAXSTATE 6 /* number of environments rememberable */
- X
- X/* Basic state */
- X
- Xextern int hpos; /* horizontal position we are to be at next; left=0 */
- Xextern int vpos; /* current vertical position (down positive) */
- Xextern int size; /* current point size */
- Xextern int font; /* current font */
- X
- X#define hmot(n) hpos += n
- X#define hgoto(n) hpos = n
- X#define vmot(n) vgoto(vpos + (n))
- Xextern vgoto();
- X
- X/* Environment */
- X
- Xstruct state {
- X int ssize;
- X int sfont;
- X int shpos;
- X int svpos;
- X};
- X
- Xextern struct state state[MAXSTATE];
- Xextern struct state *statep;
- X
- Xextern t_push();
- Xextern t_pop();
- X
- X/* Mounted font table */
- X
- Xtypedef struct _fontinfo {
- X char *name[NFONTS];
- X} fontinfo;
- X
- Xextern fontinfo fonts; /* current mounted font table */
- Xextern int nfonts; /* number of used entries (0..nfonts-1) */
- X
- X/* Page info */
- X
- Xextern int ipage; /* internal page number */
- X
- X/* Global typesetter info */
- X
- Xextern int res; /* resolution for which input was prepared */
- X /* default is old troff resolution */
- END_OF_FILE
- if test 2383 -ne `wc -c <'Appls/dpv/dpvmachine.h'`; then
- echo shar: \"'Appls/dpv/dpvmachine.h'\" unpacked with wrong size!
- fi
- # end of 'Appls/dpv/dpvmachine.h'
- fi
- if test -f 'Appls/test/bike.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Appls/test/bike.c'\"
- else
- echo shar: Extracting \"'Appls/test/bike.c'\" \(2785 characters\)
- sed "s/^X//" >'Appls/test/bike.c' <<'END_OF_FILE'
- X#include "stdwin.h"
- X#include "tilist.h"
- X
- X#define NFRONT 3
- X#define NBACK 6
- X
- X#define VSTEP 50
- X#define HSCALE 470
- X
- X#define TIPWIDTH 40
- X
- Xint front[NFRONT] = {28, 38, 48};
- Xint back[NBACK] = {28, 24, 20, 17, 15, 13};
- X
- Xdouble verzet[NFRONT][NBACK];
- Xdouble lowest, highest;
- X
- XWINDOW *win;
- X
- XTILIST *til;
- X
- XTEXTITEM *fronttips[NFRONT];
- XTEXTITEM *backtips[NBACK];
- X
- Xcalculate()
- X{
- X int f, b;
- X double v;
- X
- X lowest = 1e10;
- X highest = 0.0;
- X for (f = 0; f < NFRONT; ++f) {
- X for (b = 0; b < NBACK; ++b) {
- X v = (double)front[f] / (double)back[b];
- X verzet[f][b] = v;
- X if (v < lowest)
- X lowest = v;
- X if (v > highest)
- X highest = v;
- X }
- X }
- X}
- X
- Xsetuptil()
- X{
- X int f, b;
- X int h, v;
- X
- X til = tilcreate(win);
- X
- X h = 0;
- X v = 2;
- X for (b = 0; b < NBACK; ++b) {
- X backtips[b] = tiladd(til, h, v, h+TIPWIDTH-2, 0, 1);
- X h += TIPWIDTH;
- X }
- X
- X h = 0;
- X v = 0;
- X for (f = 0; f < NFRONT; ++f) {
- X v += VSTEP;
- X fronttips[f] = tiladd(til, h, v, h+TIPWIDTH-2, 0, 1);
- X }
- X
- X settilvalues();
- X}
- X
- Xsettilvalues()
- X{
- X int f, b;
- X char buf[100];
- X
- X for (f = 0; f < NFRONT; ++f) {
- X sprintf(buf, "%d", front[f]);
- X tilsettext(fronttips[f], buf);
- X }
- X for (b = 0; b < NBACK; ++b) {
- X sprintf(buf, "%d", back[b]);
- X tilsettext(backtips[b], buf);
- X }
- X}
- X
- Xgettilvalues()
- X{
- X int f, b;
- X char *text;
- X
- X for (f = 0; f < NFRONT; ++f) {
- X text = tilgettext(fronttips[f]);
- X sscanf(text, "%d", &front[f]);
- X }
- X for (b = 0; b < NBACK; ++b) {
- X text = tilgettext(backtips[b]);
- X sscanf(text, "%d", &back[b]);
- X }
- X settilvalues();
- X calculate();
- X wchange(win, 0, 0, 30000, 30000);
- X}
- X
- Xvoid
- Xdrawproc(win, left, top, right, bottom)
- X WINDOW *win;
- X int left, top, right, bottom;
- X{
- X int f, b;
- X int h, v;
- X int lasth;
- X
- X tildraw(til, left, top, right, bottom);
- X
- X v = VSTEP;
- X for (f = 0; f < NFRONT; ++f) {
- X for (b = 0; b < NBACK; ++b) {
- X h = (verzet[f][b] - lowest) *
- X (HSCALE - 2*TIPWIDTH) / (highest - lowest);
- X h += 2*TIPWIDTH;
- X wcprintf(50, h, v-2-wlineheight(), "%d", back[b]);
- X wdrawbox(h-2, v-2, h+2, v+2);
- X wcprintf(50, h, v+2, "%.2f", verzet[f][b]);
- X if (b > 0) {
- X wpaint(lasth+2, v-1, h-2, v+1);
- X }
- X lasth = h;
- X }
- X v += VSTEP;
- X }
- X}
- X
- Xmain(argc, argv)
- X int argc;
- X char **argv;
- X{
- X winitargs(&argc, &argv);
- X calculate();
- X wsetdefwinsize(HSCALE + 4*wcharwidth('0'), (NFRONT+1) * VSTEP);
- X win = wopen("Bike", drawproc);
- X wsetdocsize(win, HSCALE + 4*wcharwidth('0'), (NFRONT+1) * VSTEP);
- X setuptil();
- X for (;;) {
- X EVENT e;
- X wgetevent(&e);
- X if (tilevent(til, &e))
- X continue;
- X switch (e.type) {
- X case WE_COMMAND:
- X switch (e.u.command) {
- X case WC_CLOSE:
- X quit();
- X /*NOTREACHED*/
- X case WC_CANCEL:
- X settilvalues();
- X break;
- X case WC_RETURN:
- X gettilvalues();
- X break;
- X }
- X break;
- X case WE_CLOSE:
- X quit();
- X /*NOTREACHED*/
- X }
- X }
- X}
- X
- Xquit()
- X{
- X wclose(win);
- X wdone();
- X exit(0);
- X /*NOTREACHED*/
- X}
- END_OF_FILE
- if test 2785 -ne `wc -c <'Appls/test/bike.c'`; then
- echo shar: \"'Appls/test/bike.c'\" unpacked with wrong size!
- fi
- # end of 'Appls/test/bike.c'
- fi
- if test -f 'Appls/test/bits.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Appls/test/bits.c'\"
- else
- echo shar: Extracting \"'Appls/test/bits.c'\" \(2694 characters\)
- sed "s/^X//" >'Appls/test/bits.c' <<'END_OF_FILE'
- X/* Here's a very simple bitmap editor.
- X A window shows a magnified 64x64 bitmap
- X which you can edit by clicking the mouse.
- X Clicking on a bit that's off turns it on,
- X clicking on one that's on turns it off.
- X Drag the mouse to set or clear more bits.
- X Additional facilities like saving to a file
- X are left as exercises for the reader. */
- X
- X#include "stdwin.h"
- X
- X/* Bitmap dimensions */
- X
- X#define WIDTH 64
- X#define HEIGHT 64
- X
- X/* The bitmap */
- X
- Xchar bit[WIDTH][HEIGHT];
- X
- X/* Magnification factors.
- X (Should really be calculated from screen dimensions). */
- X
- Xint xscale= 5;
- Xint yscale= 5;
- X
- X/* The window */
- X
- XWINDOW *win;
- X
- X/* Main program */
- X
- Xmain(argc, argv)
- X int argc;
- X char **argv;
- X{
- X winitargs(&argc, &argv);
- X setup();
- X mainloop();
- X wdone();
- X exit(0);
- X}
- X
- X/* Create the window */
- X
- Xsetup()
- X{
- X extern void drawproc(); /* Forward */
- X
- X wsetdefwinsize(WIDTH*xscale, HEIGHT*yscale);
- X win= wopen("Bitmap Editor Demo", drawproc);
- X wsetdocsize(win, WIDTH*xscale, HEIGHT*yscale);
- X}
- X
- X/* Main event loop */
- X
- Xmainloop()
- X{
- X int value= 0;
- X
- X for (;;) {
- X EVENT e;
- X
- X wgetevent(&e);
- X
- X switch (e.type) {
- X
- X case WE_MOUSE_DOWN:
- X value= !getbit(e.u.where.h/xscale, e.u.where.v/yscale);
- X /* Fall through to next cases */
- X case WE_MOUSE_MOVE:
- X case WE_MOUSE_UP:
- X setbit(e.u.where.h/xscale, e.u.where.v/yscale, value);
- X break;
- X
- X case WE_COMMAND:
- X switch (e.u.command) {
- X case WC_CLOSE:
- X case WC_CANCEL:
- X return;
- X }
- X
- X case WE_CLOSE:
- X return;
- X
- X }
- X }
- X}
- X
- X/* Draw procedure */
- X
- Xvoid
- Xdrawproc(win, left, top, right, bottom)
- X WINDOW *win;
- X{
- X#ifdef UNOPTIMIZED
- X int h, v;
- X
- X for (v= top/yscale; v*yscale < bottom; ++v) {
- X for (h= left/xscale; h*xscale < right; ++h) {
- X if (getbit(h, v))
- X wpaint(h*xscale, v*yscale,
- X (h+1)*xscale, (v+1)*yscale);
- X }
- X }
- X#else
- X int h, v;
- X int start;
- X
- X for (v= top/yscale; v*yscale < bottom; ++v) {
- X start = -1;
- X for (h= left/xscale; h*xscale < right; ++h) {
- X if (getbit(h, v)) {
- X if (start == -1)
- X start = h;
- X } else {
- X if (start != -1) {
- X wpaint(start*xscale, v*yscale,
- X h*xscale, (v+1)*yscale);
- X start = -1;
- X }
- X }
- X }
- X if (start != -1)
- X wpaint(start*xscale, v*yscale, h*xscale, (v+1)*yscale);
- X }
- X#endif
- X}
- X
- X/* Macro to test for bit coordinates in range */
- X
- X#define INRANGE(h, v) ((v) >= 0 && (v) < HEIGHT && (h) >= 0 && (h) < WIDTH)
- X
- X/* Return a bit's value; return 0 if outside range */
- X
- Xint
- Xgetbit(h, v)
- X{
- X if (INRANGE(h, v))
- X return bit[h][v];
- X else
- X return 0;
- X}
- X
- X/* Change a bit's value (if in range) and arrange for it to be drawn. */
- X
- Xsetbit(h, v, value)
- X{
- X if (INRANGE(h, v) && bit[h][v] != value) {
- X bit[h][v]= value;
- X wchange(win, h*xscale, v*yscale, (h+1)*xscale, (v+1)*yscale);
- X }
- X}
- END_OF_FILE
- if test 2694 -ne `wc -c <'Appls/test/bits.c'`; then
- echo shar: \"'Appls/test/bits.c'\" unpacked with wrong size!
- fi
- # end of 'Appls/test/bits.c'
- fi
- if test -f 'Appls/test/charset.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Appls/test/charset.c'\"
- else
- echo shar: Extracting \"'Appls/test/charset.c'\" \(2954 characters\)
- sed "s/^X//" >'Appls/test/charset.c' <<'END_OF_FILE'
- X/* Display character set.
- X usage: charset [-font font] [minchar [maxchar]] */
- X
- X#include "tools.h"
- X#include "stdwin.h"
- X
- Xint minchar= 0; /* First char to draw */
- Xint maxchar= 255;
- X
- Xmain(argc, argv)
- X int argc;
- X char **argv;
- X{
- X int *which= &minchar;
- X int i;
- X
- X winitargs(&argc, &argv);
- X
- X for (i= 1; i < argc; ++i) {
- X if (isnumeric(argv[i])) {
- X *which= atoi(argv[i]);
- X which= &maxchar;
- X }
- X else
- X break;
- X }
- X if (i < argc) {
- X wdone();
- X fprintf(stderr, "usage: %s [minchar [maxchar]]\n", argv[0]);
- X exit(2);
- X }
- X
- X if (maxchar < minchar) {
- X wdone();
- X fprintf(stderr, "%s: maxchar < minchar\n", argv[0]);
- X exit(2);
- X }
- X
- X setup();
- X mainloop();
- X wdone();
- X exit(0);
- X}
- X
- Xbool
- Xisnumeric(str)
- X char *str;
- X{
- X while (*str != EOS) {
- X if (!isdigit(*str))
- X return FALSE;
- X ++str;
- X }
- X return TRUE;
- X}
- X
- XWINDOW *win;
- Xint ncols, nrows;
- Xint colwidth, rowheight;
- X
- Xvoid drawproc(win, l, t, r, b)
- X WINDOW *win;
- X{
- X int lineheight= wlineheight();
- X int i= (t/rowheight) * ncols;
- X for (; i <= maxchar-minchar; ++i) {
- X int c= minchar+i;
- X int col= i%ncols;
- X int row= i/ncols;
- X int h= col*colwidth;
- X int v= row*rowheight;
- X int charwidth= wcharwidth(c);
- X if (v >= b)
- X break;
- X wdrawchar(h + (colwidth - charwidth) / 2,
- X v + (rowheight - lineheight) / 2,
- X c);
- X }
- X}
- X
- Xsetup()
- X{
- X int scrwidth, scrheight;
- X int maxwidth= 1;
- X int i;
- X
- X wgetscrsize(&scrwidth, &scrheight);
- X while (minchar <= maxchar && wcharwidth(minchar) == 0)
- X ++minchar;
- X while (maxchar >= minchar && wcharwidth(maxchar) == 0)
- X --maxchar;
- X if (minchar > maxchar) {
- X wdone();
- X fprintf(stderr, "no chars in given range\n");
- X exit(1);
- X }
- X for (i= minchar; i <= maxchar; i++) {
- X int w= wcharwidth(i);
- X if (w > maxwidth)
- X maxwidth= w;
- X }
- X colwidth= maxwidth * 2;
- X rowheight= wlineheight() * 3 / 2;
- X ncols= 16;
- X if ((ncols+2) * colwidth > scrwidth) {
- X ncols= scrwidth/colwidth - 2;
- X if (ncols < 1)
- X ncols= 1;
- X }
- X nrows= (maxchar - minchar + ncols) / ncols;
- X if (nrows < 1)
- X nrows= 1;
- X wsetdefwinsize(ncols*colwidth, nrows*rowheight);
- X wsetmaxwinsize(ncols*colwidth, nrows*rowheight);
- X win= wopen("Character Set", drawproc);
- X if (win == NULL) {
- X wdone();
- X fprintf(stderr, "can't open window\n");
- X exit(1);
- X }
- X (void) wmenucreate(1, "Press q to quit");
- X}
- X
- Xmainloop()
- X{
- X for (;;) {
- X EVENT e;
- X wgetevent(&e);
- X switch (e.type) {
- X case WE_CHAR:
- X switch (e.u.character) {
- X case 'q':
- X case 'Q':
- X return;
- X }
- X break;
- X case WE_COMMAND:
- X switch (e.u.command) {
- X case WC_CANCEL:
- X case WC_CLOSE:
- X wclose(win);
- X return;
- X }
- X break;
- X case WE_CLOSE:
- X wclose(win);
- X return;
- X case WE_MOUSE_DOWN:
- X charinfo(e.u.where.h, e.u.where.v);
- X break;
- X }
- X }
- X}
- X
- Xcharinfo(h, v)
- X int h, v;
- X{
- X int row= v/rowheight;
- X int col= h/colwidth;
- X int i= minchar + row*ncols + col;
- X if (i >= minchar && i <= maxchar) {
- X char buf[256];
- X sprintf(buf, "Char '%c' (%d. 0x%x), width %d",
- X i>=' ' && i<0x7f ? i : '?', i, i, wcharwidth(i));
- X wmessage(buf);
- X }
- X else
- X wfleep();
- X}
- END_OF_FILE
- if test 2954 -ne `wc -c <'Appls/test/charset.c'`; then
- echo shar: \"'Appls/test/charset.c'\" unpacked with wrong size!
- fi
- # end of 'Appls/test/charset.c'
- fi
- if test -f 'Appls/test/dklok.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Appls/test/dklok.c'\"
- else
- echo shar: Extracting \"'Appls/test/dklok.c'\" \(2557 characters\)
- sed "s/^X//" >'Appls/test/dklok.c' <<'END_OF_FILE'
- X/* Digital clock */
- X
- X#ifdef ns32000
- X#define void int
- X#endif
- X
- X#include <ctype.h>
- X#include <stdio.h>
- X#include <time.h>
- X
- X#include "stdwin.h"
- X
- X#include "sevenseg.h"
- X
- Xextern long time();
- X
- Xint text_only; /* Non-zero on text-only device */
- X
- XWINDOW *win; /* Our window */
- X
- X#define NIMAGE 5 /* Number of chars in image */
- Xchar image[NIMAGE+1]; /* Text to draw, plus trailing \0 */
- X
- Xint aleft, atop, aright, abottom; /* Rect in which to draw */
- X
- Xgetinfo()
- X{
- X wgetwinsize(win, &aright, &abottom);
- X wsetdocsize(win, aright, abottom);
- X newtime();
- X}
- X
- Xnewtime()
- X{
- X unsigned long now;
- X struct tm *tp;
- X
- X wchange(win, aleft, atop, aright, abottom);
- X time(&now);
- X tp= localtime(&now);
- X wsettimer(win, 10 * (60 - now%60));
- X sprintf(image, "%02d:%02d", tp->tm_hour, tp->tm_min);
- X
- X}
- X
- Xvoid
- Xdrawdigit(digit, left, top, right, bottom, dh, dv)
- X int digit;
- X int left, top, right, bottom;
- X int dh, dv; /* Segment thickness */
- X{
- X int bits= sevenseg[digit];
- X int mid= (top + bottom) / 2;
- X void (*func)();
- X
- X if (text_only)
- X func= winvert;
- X else
- X func= wpaint;
- X
- X if (bits & (1<<6))
- X func(left, top, right, top+dv);
- X if (bits & (1<<5))
- X func(left, top, left+dh, mid);
- X if (bits & (1<<4))
- X func(right-dh, top, right, mid);
- X if (bits & (1<<3))
- X func(left, mid-dv/2, right, mid+dv-dv/2);
- X if (bits & (1<<2))
- X func(left, mid, left+dh, bottom);
- X if (bits & (1<<1))
- X func(right-dh, mid, right, bottom);
- X if (bits & (1<<0))
- X func(left, bottom-dv, right, bottom);
- X}
- X
- Xvoid
- Xdrawproc(win, left, top, right, bottom)
- X WINDOW *win;
- X int left, top, right, bottom;
- X{
- X int width= aright - aleft;
- X int height= abottom - atop;
- X int dh= width / (NIMAGE*6 + 1);
- X int dv= height / 9;
- X int spacing;
- X int i;
- X
- X if (dh < 1)
- X dh= 1;
- X if (dv < 1)
- X dv= 1;
- X
- X spacing= dh*6;
- X
- X for (i= 0; i < NIMAGE && image[i] != '\0'; ++i) {
- X if (isdigit(image[i])) {
- X drawdigit(image[i] - '0',
- X aleft + dh + i*spacing, atop + dv,
- X aleft + dh + (i+1)*spacing - dh, abottom - dv,
- X dh, dv);
- X }
- X }
- X}
- X
- Xmain(argc, argv)
- X int argc;
- X char **argv;
- X{
- X winitargs(&argc, &argv);
- X setup();
- X mainloop();
- X wdone();
- X exit(0);
- X}
- X
- Xsetup()
- X{
- X if (wlineheight() == 1) {
- X text_only= 1;
- X wmessage("Text-only version");
- X }
- X win= wopen("DIGITAL CLOCK", drawproc);
- X getinfo();
- X}
- X
- Xmainloop()
- X{
- X for (;;) {
- X EVENT e;
- X wgetevent(&e);
- X switch (e.type) {
- X case WE_COMMAND:
- X switch (e.u.command) {
- X case WC_CLOSE:
- X case WC_CANCEL:
- X wclose(win);
- X return 0;
- X }
- X break;
- X case WE_CLOSE:
- X wclose(win);
- X return 0;
- X case WE_SIZE:
- X getinfo();
- X break;
- X case WE_TIMER:
- X newtime();
- X break;
- X }
- X }
- X}
- END_OF_FILE
- if test 2557 -ne `wc -c <'Appls/test/dklok.c'`; then
- echo shar: \"'Appls/test/dklok.c'\" unpacked with wrong size!
- fi
- # end of 'Appls/test/dklok.c'
- fi
- if test -f 'H/lists.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'H/lists.h'\"
- else
- echo shar: Extracting \"'H/lists.h'\" \(3065 characters\)
- sed "s/^X//" >'H/lists.h' <<'END_OF_FILE'
- X/* Package to manipulate dynamic arrays represented like
- X argc/argv (but not necessarily containing character pointers).
- X Operations provided are macros that expand to groups of statements;
- X their arguments should be side-effect-free. The arguments argc and
- X argv should be single identifiers, since they are assigned to.
- X (L_DECLARE expands to a series of declarations.)
- X
- X This code was written because I found myself writing code very
- X similar to it times and times over, or, worse, using fixed-length
- X arrays out of laziness. It's slow for large arrays (although this
- X could be improved easily by rounding up the sizes passed to
- X malloc/realloc), but this shouldn't be a problem for the applications
- X I am currently using it for. It sure helped me write some array
- X processing code faster.
- X
- X Operations:
- X
- X L_DECLARE(argc, argv, type) declare a list with element type 'type'
- X L_INIT(argc, argv) initialize a list
- X L_DEALLOC(argc, argv) deallocate a list
- X L_SETSIZE(argc, argv, type, size) set list to size 'size'
- X L_EXTEND(argc, argv, type, count) append 'count' unitinialized elements
- X L_APPEND(argc, argv, type, elem) append a given element
- X L_REMOVE(argc, argv, type, index) remove element number 'index'
- X L_INSERT(argc, argv, type, index, elem) insert 'elem' at 'index'
- X L_SORT(argc, argv, type, compare) sort the list ('compare' is a function)
- X
- X (There should also be operations to insert in the middle and to
- X remove elements.)
- X
- X NB: the 'type' argument could be discarded (except for L_DECLARE)
- X if we could live with warnings about assignments from malloc/realloc
- X to other pointer types.
- X
- X*/
- X
- X/* This file only works when included by "stdwtools.h" !!! */
- X
- X/* You could define GOOD_REALLOC if your realloc() calls malloc() when
- X passed a NULL pointer */
- X
- X#ifdef GOOD_REALLOC
- X#define _REALLOC(p, size) realloc(p, size)
- X#else
- X#define _REALLOC(p, size) ((p) ? realloc(p, size) : malloc(size))
- X#endif
- X
- X#define L_DECLARE(argc, argv, type) int argc = 0; type *argv = 0
- X
- X#define L_INIT(argc, argv) argc = 0; argv = 0
- X
- X#define L_DEALLOC(argc, argv) argc = 0; FREE(argv)
- X
- X#define L_SETSIZE(argc, argv, type, size) \
- X argv = (type *) _REALLOC((UNIVPTR) argv, \
- X (unsigned) (size) * sizeof(type)); \
- X argc = (argv == 0) ? 0 : size
- X
- X#define L_EXTEND(argc, argv, type, count) \
- X L_SETSIZE(argc, argv, type, argc+count)
- X
- X#define L_APPEND(argc, argv, type, elem) \
- X argv = (type *) _REALLOC((UNIVPTR) argv, \
- X (unsigned) (argc+1) * sizeof(type)); \
- X if (argv == 0) \
- X argc = 0; \
- X else \
- X argv[argc++] = elem
- X
- X#define L_REMOVE(argc, argv, type, index) \
- X { \
- X int k_; \
- X for (k_ = index+1; k_ < argc; ++k_) \
- X argv[k_-1] = argv[k_]; \
- X L_SETSIZE(argc, argv, type, argc-1); \
- X }
- X
- X#define L_INSERT(argc, argv, type, index, item) \
- X { \
- X int k_; \
- X L_SETSIZE(argc, argv, type, argc+1); \
- X for (k_ = argc-1; k_ > index; --k_) \
- X argv[k_] = argv[k_-1]; \
- X argv[index] = item; \
- X }
- X
- X#define L_SORT(argc, argv, type, compare) \
- X qsort((UNIVPTR)argv, argc, sizeof(type), compare)
- END_OF_FILE
- if test 3065 -ne `wc -c <'H/lists.h'`; then
- echo shar: \"'H/lists.h'\" unpacked with wrong size!
- fi
- # end of 'H/lists.h'
- fi
- if test -f 'H/patchlevel.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'H/patchlevel.h'\"
- else
- echo shar: Extracting \"'H/patchlevel.h'\" \(21 characters\)
- sed "s/^X//" >'H/patchlevel.h' <<'END_OF_FILE'
- X#define PATCHLEVEL 5
- END_OF_FILE
- if test 21 -ne `wc -c <'H/patchlevel.h'`; then
- echo shar: \"'H/patchlevel.h'\" unpacked with wrong size!
- fi
- # end of 'H/patchlevel.h'
- fi
- if test -f 'H/winreq.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'H/winreq.h'\"
- else
- echo shar: Extracting \"'H/winreq.h'\" \(3052 characters\)
- sed "s/^X//" >'H/winreq.h' <<'END_OF_FILE'
- X/* STDWIN Server -- Window (Manager) Requests. */
- X
- X/* Command codes in transaction header. */
- X
- X#define WIN_FIRST 1100
- X
- X#define WIN_HELLO (WIN_FIRST+1) /* Say hello to server */
- X#define WIN_DROPDEAD (WIN_FIRST+2) /* Die, if idle */
- X#define WIN_OPEN (WIN_FIRST+3) /* Open new window */
- X#define WIN_CLOSE (WIN_FIRST+4) /* Close window */
- X#define WIN_DRAW (WIN_FIRST+5) /* Drawing commands; see subcodes */
- X#define WIN_GETEVENT (WIN_FIRST+6) /* Get event */
- X#define WIN_FLEEP (WIN_FIRST+7) /* Flash or beep */
- X#define WIN_ACTIVATE (WIN_FIRST+8) /* Make window active */
- X#define WIN_SETDOCSIZE (WIN_FIRST+9) /* Set document size */
- X#define WIN_SETTITLE (WIN_FIRST+10) /* Set window title */
- X#define WIN_SHOW (WIN_FIRST+11) /* Show part of document */
- X#define WIN_SETORIGIN (WIN_FIRST+12) /* Set window origin in document */
- X#define WIN_CHANGE (WIN_FIRST+13) /* Change part of document */
- X#define WIN_SCROLL (WIN_FIRST+14) /* Scroll part of document */
- X#define WIN_MESSAGE (WIN_FIRST+15) /* Output message */
- X#define WIN_ASKSTR (WIN_FIRST+16) /* Ask string */
- X#define WIN_ASKYNC (WIN_FIRST+17) /* Ask yes/no/cancel question */
- X#define WIN_SETCARET (WIN_FIRST+18) /* Set caret position */
- X#define WIN_STATUS (WIN_FIRST+19) /* Get window status */
- X#define WIN_GETFONTTAB (WIN_FIRST+20) /* Get font width table */
- X#define WIN_SETTIMER (WIN_FIRST+21) /* Set window timer */
- X#define WIN_SETCLIP (WIN_FIRST+22) /* Set clipboard string */
- X#define WIN_GETCLIP (WIN_FIRST+23) /* Get clipboard string */
- X#define WIN_POLLEVENT (WIN_FIRST+24) /* Poll for event */
- X
- X#define MENU_FIRST (WIN_FIRST+50)
- X
- X#define MENU_CREATE (MENU_FIRST+1)
- X#define MENU_DELETE (MENU_FIRST+2)
- X#define MENU_ADDITEM (MENU_FIRST+3)
- X#define MENU_SETITEM (MENU_FIRST+4)
- X#define MENU_ATTACH (MENU_FIRST+5)
- X#define MENU_DETACH (MENU_FIRST+6)
- X#define MENU_ENABLE (MENU_FIRST+7)
- X#define MENU_CHECK (MENU_FIRST+8)
- X
- X
- X/* Subcodes in data buffer for WIN_DRAW. */
- X
- X#define DRW_LINE 1
- X#define DRW_BOX 2
- X#define DRW_CIRCLE 3
- X#define DRW_ERASE 4
- X#define DRW_PAINT 5
- X#define DRW_SHADE 6
- X#define DRW_INVERT 7
- X#define DRW_TEXT 8
- X#define DRW_FONT 9
- X#define DRW_STYLE 10
- X#define DRW_ELARC 11
- X#define DRW_XORLINE 12
- X
- X/* Error codes for h_status. */
- X
- X#define WER_OK 0 /* ok */
- X#define WER_FAIL -101 /* don't know why it failed */
- X#define WER_COMBAD -102 /* bad command */
- X#define WER_CAPBAD -103 /* bad capability */
- X#define WER_NOSPACE -104 /* no space left */
- X#define WER_ABORT -105 /* call aborted */
- X#define WER_NODATA -106 /* No or insufficient data provided */
- X
- X/* Event packing parameters.
- X (This is a kludge! Should be variable-length and have a length byte
- X in the data!) */
- X
- X#define EVSHORTS 7
- X#define EVPACKSIZE (EVSHORTS * sizeof(short))
- X
- X/* Server's buffer size. */
- X
- X#define SVRBUFSIZE 4096
- X /* I suppose this should really be negotiated between server and
- X client, e.g., WIN_HELLO should return the server's buffer
- X size. */
- X
- X/* Font width table length. */
- X
- X#define FONTTABLEN 256 /* Number of chars in a font */
- X
- X/* Pseudo-event sent when SIGAMOEBA received */
- X
- X#define WE_ALERT 22
- END_OF_FILE
- if test 3052 -ne `wc -c <'H/winreq.h'`; then
- echo shar: \"'H/winreq.h'\" unpacked with wrong size!
- fi
- # end of 'H/winreq.h'
- fi
- if test -f 'Packs/vt/vtresize.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Packs/vt/vtresize.c'\"
- else
- echo shar: Extracting \"'Packs/vt/vtresize.c'\" \(3023 characters\)
- sed "s/^X//" >'Packs/vt/vtresize.c' <<'END_OF_FILE'
- X/* Resize function */
- X
- X#include "vtimpl.h"
- X
- X/* Resize the screen.
- X When growing, blanks are added to the right and/or at the top (!);
- X when shrinking, characters are lost at those edges.
- X It is really a disaster if we run out of memory halfway
- X (much more so than in vtopen);
- X in this case the caller should immediately call vtclose,
- X and expect some memory leaks... */
- X
- Xbool
- Xvtresize(vt, rows, cols, save)
- X VT *vt;
- X int rows, cols;
- X int save;
- X{
- X int rowdiff;
- X int i;
- X
- X rows += save;
- X rowdiff = rows - vt->rows;
- X if (cols != vt->cols) {
- X if (cols < vt->cols) {
- X /* Clear the corresponding screen area */
- X vtchange(vt, 0, cols, vt->rows, vt->cols);
- X vt->cols = cols;
- X }
- X i = vt->rows;
- X if (rows < i)
- X i = rows;
- X while (--i >= 0) {
- X if (!RESIZE(vt->data[i], char, cols))
- X return FALSE;
- X if (!RESIZE(vt->flags[i], unsigned char, cols))
- X return FALSE;
- X if (vt->llen[i] > cols)
- X vt->llen[i] = cols;
- X }
- X if (cols > vt->cols) {
- X /* Clear the corresponding screen area */
- X vtchange(vt, 0, vt->cols, rows, cols);
- X vt->cols = cols;
- X }
- X }
- X
- X if (rowdiff != 0) {
- X if (rowdiff < 0) {
- X /* Get the last line into its new position */
- X vtscrollup(vt, 0, vt->rows, -rowdiff);
- X /* Free the excess lines */
- X for (i = rows; i < vt->rows; ++i) {
- X FREE(vt->data[i]);
- X FREE(vt->flags[i]);
- X }
- X /* Clear the corresponding screen area */
- X vtchange(vt, rows, 0, vt->rows, cols);
- X vt->rows = rows;
- X }
- X
- X if (!RESIZE(vt->data, char *, rows))
- X return FALSE;
- X if (!RESIZE(vt->flags, unsigned char *, rows))
- X return FALSE;
- X if (!RESIZE(vt->llen, short, rows))
- X return FALSE;
- X
- X if (rowdiff > 0) {
- X /* Add new lines */
- X for (i = vt->rows; i < rows; ++i) {
- X if ((vt->data[i] = NALLOC(char, cols)) == NULL)
- X return FALSE;
- X if ((vt->flags[i] = NALLOC(unsigned char, cols)) == NULL)
- X return FALSE;
- X vt->llen[i] = 0;
- X }
- X /* Clear the corresponding screen area */
- X vtchange(vt, vt->rows, 0, rows, cols);
- X vt->rows = rows;
- X /* Get the last line into its new position */
- X vtscrolldown(vt, 0, rows, rowdiff);
- X }
- X }
- X
- X if (rowdiff != 0 || save != vt->topterm) {
- X vt->topterm = save;
- X vtsetscroll(vt, 0, 0); /* Reset scrolling region */
- X }
- X
- X wsetdocsize(vt->win,
- X vt->cols * vt->cwidth, vt->rows * vt->cheight);
- X
- X i = vt->cur_row + rowdiff;
- X CLIPMIN(i, save);
- X vtsetcursor(vt, i, vt->cur_col);
- X
- X return TRUE;
- X}
- X
- X/* Adapt the screen size to the new window dimensions.
- X The 'save' parameter is computed so as to keep the total amount
- X of rows the same (if possible).
- X Return value as for vtresize (i.e., FALSE is a disaster). */
- X
- Xbool
- Xvtautosize(vt)
- X VT *vt;
- X{
- X int width, height;
- X int newrows, newcols, newsave;
- X wgetwinsize(vt->win, &width, &height);
- X newrows = height / vt->cheight;
- X newcols = width / vt->cwidth;
- X newsave = vt->rows - newrows;
- X D( printf("vtautosize: size now %dx%d (char = %dx%d) => %dx%d\n",
- X width,height, vt->cwidth,vt->cheight, newrows,newcols) );
- X CLIPMIN(newsave, 0);
- X return vtresize(vt, newrows, newcols, newsave);
- X}
- END_OF_FILE
- if test 3023 -ne `wc -c <'Packs/vt/vtresize.c'`; then
- echo shar: \"'Packs/vt/vtresize.c'\" unpacked with wrong size!
- fi
- # end of 'Packs/vt/vtresize.c'
- fi
- if test -f 'Packs/vt/vtvtrm.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Packs/vt/vtvtrm.c'\"
- else
- echo shar: Extracting \"'Packs/vt/vtvtrm.c'\" \(2629 characters\)
- sed "s/^X//" >'Packs/vt/vtvtrm.c' <<'END_OF_FILE'
- X/* VTRM implementation using VT as lower layer.
- X Unfortunately, this isn't too useful on the input part:
- X you'll really want to use wgetevent directly to get access
- X to mouse clicks, menu events etc.
- X Another problem is that there is no portable way to direct normal
- X output (e.g., from printf and putchar) to the VTRM window.
- X One other thing: you'll have to call wdone() when you really exit. */
- X
- X/* XXX This has never been tested... */
- X
- X#include "vtimpl.h"
- X#include "vtrm.h"
- X
- Xstatic VT *vt;
- Xstatic bool active;
- X
- Xint
- Xtrmstart(rows_return, cols_return, flags_return)
- X int *rows_return, *cols_return, *flags_return;
- X{
- X if (active)
- X return TE_TWICE; /* Already started */
- X if (vt == NULL) {
- X winit();
- X wsetdefwinsize(24*wcharwidth('0'), 80*wlineheight());
- X vt= vtopen("VTRM", 24, 80, 0);
- X if (vt == NULL)
- X return TE_NOMEM; /* Failure */
- X }
- X *rows_return= 24;
- X *cols_return= 80;
- X *flags_return=
- X HAS_STANDOUT | CAN_SCROLL | CAN_SENSE;
- X return TE_OK;
- X}
- X
- Xtrmend()
- X{
- X active= FALSE;
- X}
- X
- Xtrmputdata(row, col, data)
- X int row, col;
- X char *data;
- X{
- X char *start= data;
- X int mask= 0;
- X vtsetcursor(vt, row, col);
- X do {
- X if ((*data & 0x80) != mask) {
- X if (data > start) {
- X if (mask) {
- X char *p;
- X for (p= start; p < data; ++p)
- X *p &= 0x7f;
- X vt->gflags= VT_INVERSE;
- X }
- X vtputstring(vt, start, data-start);
- X if (mask) {
- X char *p;
- X for (p= start; p < data; ++p)
- X *p |= 0x80;
- X vt->gflags= 0;
- X }
- X start= data;
- X }
- X mask= *data & 0x80;
- X }
- X } while (*data++ != EOS);
- X /* XXX This is likely to omit the final data? */
- X vteolclear(vt, vt->cur_row, vt->cur_col);
- X}
- X
- Xtrmscrollup(r1, r2, n)
- X int r1, r2;
- X int n;
- X{
- X if (n > 0)
- X vtscrollup(vt, r1, r2+1, n);
- X else if (n < 0)
- X vtscrolldown(vt, r1, r2+1, -n);
- X}
- X
- Xtrmsync(row, col)
- X int row, col;
- X{
- X vtsetcursor(vt, row, col);
- X}
- X
- Xstatic lasth, lastv;
- X
- Xint
- Xtrminput()
- X{
- X EVENT e;
- X for (;;) {
- X switch (e.type) {
- X case WE_COMMAND:
- X switch (e.type) {
- X case WC_CANCEL:
- X return '\003';
- X case WC_RETURN:
- X return '\r';
- X case WC_TAB:
- X return '\t';
- X case WC_BACKSPACE:
- X return '\b';
- X case WC_LEFT:
- X return '\034';
- X case WC_RIGHT:
- X return '\035';
- X case WC_UP:
- X return '\036';
- X case WC_DOWN:
- X return '\037';
- X }
- X break;
- X case WE_CHAR:
- X return e.u.character;
- X break;
- X case WE_MOUSE_DOWN:
- X case WE_MOUSE_MOVE:
- X case WE_MOUSE_UP:
- X lasth= e.u.where.h;
- X lastv= e.u.where.v;
- X if (e.type == WE_MOUSE_UP)
- X return '\007';
- X break;
- X }
- X }
- X}
- X
- Xint
- Xtrmsense(row_return, col_return)
- X int *row_return, *col_return;
- X{
- X *row_return= lastv / vtcheight(vt);
- X *col_return= lasth / vtcwidth(vt);
- X}
- END_OF_FILE
- if test 2629 -ne `wc -c <'Packs/vt/vtvtrm.c'`; then
- echo shar: \"'Packs/vt/vtvtrm.c'\" unpacked with wrong size!
- fi
- # end of 'Packs/vt/vtvtrm.c'
- fi
- if test -f 'Ports/mac/caret.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Ports/mac/caret.c'\"
- else
- echo shar: Extracting \"'Ports/mac/caret.c'\" \(2827 characters\)
- sed "s/^X//" >'Ports/mac/caret.c' <<'END_OF_FILE'
- X/* MAC STDWIN -- TEXT CARET HANDLING. */
- X
- X/* The 'caret' is a blinking vertical bar indicating the text insertion point.
- X Each window has its own caret position (hcaret, vcaret) telling where the
- X insertion point is; if either is negative no caret is shown.
- X Only the caret of the active window is actually visible.
- X The blinking is done by repeatedly calling (in the event loop when idling)
- X blinkcaret(), which flips the caret's state if it's been stable long enough.
- X The file-static variable lastflip records when the caret has last changed
- X state.
- X A struct member caret_on indicates per window whether the caret is
- X currently drawn or not. (A file-static variable would really suffice.)
- X
- X NB: all routines except w{set,no}caret assume win->w is the current GrafPort.
- X*/
- X
- X#include "macwin.h"
- X
- X#ifdef MPW
- X#include <Events.h>
- X#endif
- X
- X/* Function prototypes */
- XSTATIC void invertcaret _ARGS((WINDOW *win));
- XSTATIC void flipcaret _ARGS((WINDOW *win));
- X
- Xstatic long lastflip = 0; /* Time when the caret last blinked */
- X
- X/* Invert the caret's pixels. */
- X
- Xstatic void
- Xinvertcaret(win)
- X WINDOW *win;
- X{
- X Rect r;
- X FontInfo finfo;
- X
- X if (win->hcaret < 0 || win->vcaret < 0)
- X return;
- X GetFontInfo(&finfo);
- X makerect(win, &r,
- X win->hcaret-1,
- X win->vcaret,
- X win->hcaret,
- X win->vcaret + finfo.leading + finfo.ascent + finfo.descent);
- X InvertRect(&r);
- X}
- X
- X/* Flip the caret state, if the window has a caret.
- X Also set lastflip, so blinkcaret() below knows when to flip it again. */
- X
- Xstatic void
- Xflipcaret(win)
- X WINDOW *win;
- X{
- X if (win->hcaret < 0 || win->vcaret < 0)
- X return;
- X invertcaret(win);
- X win->caret_on = !win->caret_on;
- X lastflip= TickCount();
- X}
- X
- X/* Make sure the caret is invisible.
- X This is necessary before operations like handling mouse clicks,
- X bringing up dialog boxes, or when the window goes inactive. */
- X
- Xvoid
- Xrmcaret(win)
- X WINDOW *win;
- X{
- X if (win->caret_on)
- X flipcaret(win);
- X}
- X
- X/* Blink the caret, if there is one.
- X This should be called sufficiently often from the main event loop.
- X We only blink if enough ticks have passed since the last flip,
- X whether caused by us or by an explicit call to rmcaret(). */
- X
- Xvoid
- Xblinkcaret(win)
- X WINDOW *win;
- X{
- X if (win->hcaret < 0 || win->vcaret < 0)
- X return;
- X if (TickCount() >= lastflip + GetCaretTime())
- X flipcaret(win);
- X}
- X
- X/* User-callable routine to specify the caret position.
- X The caret is not drawn now, but when the next blink is due. */
- X
- Xvoid
- Xwsetcaret(win, h, v)
- X WINDOW *win;
- X int h, v;
- X{
- X SetPort(win->w);
- X rmcaret(win);
- X win->hcaret = h;
- X win->vcaret = v;
- X}
- X
- X/* User-callable routine to specify that the window has no caret.
- X This is indicated by setting (hcaret, vcaret) to (-1, -1). */
- X
- Xvoid
- Xwnocaret(win)
- X WINDOW *win;
- X{
- X SetPort(win->w);
- X rmcaret(win); /* See remark in wsetcaret() */
- X win->hcaret = win->vcaret= -1;
- X}
- END_OF_FILE
- if test 2827 -ne `wc -c <'Ports/mac/caret.c'`; then
- echo shar: \"'Ports/mac/caret.c'\" unpacked with wrong size!
- fi
- # end of 'Ports/mac/caret.c'
- fi
- if test -f 'Ports/vtrm/DIST/pag.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Ports/vtrm/DIST/pag.c'\"
- else
- echo shar: Extracting \"'Ports/vtrm/DIST/pag.c'\" \(2582 characters\)
- sed "s/^X//" >'Ports/vtrm/DIST/pag.c' <<'END_OF_FILE'
- X/* VTRM example -- a trivial pager.
- X There are zillions of things this pager doesn't do, or would
- X crash on, but it is a nice demonstration of the use of VTRM. */
- X
- X#include <stdio.h>
- X
- Xchar *index();
- X
- X#define CTRL(c) ((c)&0x1F)
- X
- X#include "trm.h"
- X
- Xint lines, columns, flags;
- XFILE *fp;
- X
- X/* Main program -- scan arguments, open file, set-up VTRM, main loop. */
- X
- Xmain(argc, argv)
- X int argc;
- X char **argv;
- X{
- X int n, c;
- X
- X if (argc != 2) {
- X fprintf(stderr, "usage: %s file\n", argv[0]);
- X exit(2);
- X }
- X
- X if ((fp= fopen(argv[1], "r")) == NULL) {
- X perror(argv[1]);
- X exit(1);
- X }
- X
- X if ((n= trmstart(&lines, &columns, &flags)) != 0) {
- X fprintf(stderr, "trmstart error %d\n", n);
- X exit(3);
- X }
- X
- X page();
- X
- X for (;;) {
- X prompt();
- X c= trminput();
- X
- X switch (c) {
- X
- X case ' ': /* Display one more page */
- X page();
- X break;
- X
- X case '\n': /* Display one more line */
- X case '\r':
- X line();
- X break;
- X
- X case 'q': /* Quit */
- X case CTRL('C'): /* or Interrupt */
- X trmputdata(lines-1, lines-1, 0, "");
- X trmsync(lines-1, 0);
- X trmend();
- X exit(2);
- X
- X case CTRL('Z'): /* Suspend */
- X trmputdata(lines-1, lines-1, 0, "");
- X trmsync(lines-1, 0);
- X trmend();
- X trmsuspend();
- X if (trmstart(&lines, &columns, &flags))
- X exit(3);
- X page();
- X break;
- X
- X default: /* Error */
- X trmbell();
- X break;
- X
- X }
- X }
- X}
- X
- Xint left; /* Lines left on current page */
- X
- X/* Output one page, using line() as a subroutine.
- X BUG: if the last line takes up more space than available, it is
- X displayed in its entirety, scrolling up more than a page in total. */
- X
- Xpage()
- X{
- X left= lines-1;
- X do {
- X line();
- X } while (left > 0);
- X}
- X
- X/* Output one line. The line is displayed at the bottom,
- X assuming the botom line of the screen is free.
- X Update count of lines left on display. Exit if EOF hit. */
- X
- Xline()
- X{
- X char linebuf[BUFSIZ];
- X char *p;
- X int n;
- X
- X if (fgets(linebuf, sizeof linebuf, fp) == NULL) {
- X trmend();
- X exit(0);
- X }
- X if (p= index(linebuf, '\n'))
- X *p= '\0';
- X n= need(linebuf);
- X trmscrollup(0, lines-1, n);
- X trmputdata(lines-n-1, lines-2, 0, linebuf);
- X left -= n;
- X}
- X
- X/* Compute the number of screen lines required.
- X Assumes only printing characters. */
- X
- Xneed(buf)
- X char *buf;
- X{
- X int len= strlen(buf);
- X
- X if (len == 0)
- X return 1;
- X else
- X return (len+columns-1) / columns;
- X}
- X
- X/* Issue a prompt on the bottom line.
- X Assumes this line is already free. */
- X
- Xprompt()
- X{
- X static int beenhere= 0;
- X static char pr[]= "--More--";
- X
- X if (!beenhere++) {
- X char *p;
- X
- X for (p= pr; *p; ++p)
- X *p |= 0x80;
- X }
- X trmputdata(lines-1, lines-1, 0, pr);
- X trmsync(lines-1, strlen(pr));
- X}
- END_OF_FILE
- if test 2582 -ne `wc -c <'Ports/vtrm/DIST/pag.c'`; then
- echo shar: \"'Ports/vtrm/DIST/pag.c'\" unpacked with wrong size!
- fi
- # end of 'Ports/vtrm/DIST/pag.c'
- fi
- if test -f 'Ports/x11/scroll.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Ports/x11/scroll.c'\"
- else
- echo shar: Extracting \"'Ports/x11/scroll.c'\" \(2894 characters\)
- sed "s/^X//" >'Ports/x11/scroll.c' <<'END_OF_FILE'
- X/* X11 STDWIN -- Scroll bars */
- X
- X#include "x11.h"
- X
- X#define IMARGIN 2 /* See window.c */
- X
- X/* Macro to compute the thumb position and size.
- X Don't call when docwidth (docheight) is zero. */
- X
- X/* dir is x or y; dim is width or height; bar is hbar or vbar */
- X#define BARCOMPUTE(dir, dim, bar) { \
- X range= win->bar.dim; \
- X start= range * (-win->wa.dir) / win->doc.dim; \
- X size= range * win->wi.dim / win->doc.dim; \
- X _wdebug(4, "BARCOMPUTE: start=%d, size=%d", start, size); \
- X }
- X
- X/* Functions to draw the scroll bars.
- X Currently, the thumb is a rectangle separated by the scroll bar's
- X borders by a one-pixel wide space */
- X
- X_wdrawhbar(win)
- X WINDOW *win;
- X{
- X _wdebug(3, "draw hbar");
- X XClearWindow(_wd, win->hbar.wid);
- X if (win->doc.width > win->wi.width) {
- X int start, size, range;
- X BARCOMPUTE(x, width, hbar);
- X XSetTile(_wd, win->gc, _w_gray());
- X XSetFillStyle(_wd, win->gc, FillTiled);
- X XFillRectangle(_wd, win->hbar.wid, win->gc,
- X start + 1, 1, size - 1, win->hbar.height - 2);
- X XSetFillStyle(_wd, win->gc, FillSolid);
- X }
- X}
- X
- X_wdrawvbar(win)
- X WINDOW *win;
- X{
- X _wdebug(3, "draw vbar");
- X XClearWindow(_wd, win->vbar.wid);
- X if (win->doc.height > win->wi.height) {
- X int start, size, range;
- X BARCOMPUTE(y, height, vbar);
- X XSetTile(_wd, win->gc, _w_gray());
- X XSetFillStyle(_wd, win->gc, FillTiled);
- X XFillRectangle(_wd, win->vbar.wid, win->gc,
- X 1, start + 1, win->vbar.width - 2, size - 1);
- X XSetFillStyle(_wd, win->gc, FillSolid);
- X }
- X}
- X
- X/* Functions to interpret scroll bar hits.
- X Matching the Toolkit scroll bars, we should implement:
- X - button 1: scroll forward, amount determined by position
- X - button 2: position scroll bar begin at pointer
- X - buttom 3: scroll back, amount determined by position
- X*/
- X
- X/* dir is x or y; dim is width or height; bar is hbar or vbar;
- X drawcall is _wdraw{h,v}bar; imargin is IMARGIN or 0. */
- X#define HITCODE(dir, dim, bar, drawcall, imargin) { \
- X WINDOW *win= bsp->win; \
- X int start, size, range, nstart; \
- X if (win->doc.dim <= win->wi.dim - imargin) \
- X return; \
- X BARCOMPUTE(dir, dim, bar); \
- X switch (bsp->button) { \
- X case 1: \
- X if (bsp->down) return; \
- X nstart= start + \
- X (bsp->dir * win->wi.dim + win->doc.dim/2) \
- X / win->doc.dim; \
- X break; \
- X default: \
- X nstart= bsp->dir; \
- X break; \
- X case 3: \
- X if (bsp->down) return; \
- X nstart= start - \
- X (bsp->dir * win->wi.dim + win->doc.dim/2) \
- X / win->doc.dim; \
- X break; \
- X } \
- X CLIPMAX(nstart, range-size); \
- X CLIPMIN(nstart, 0); \
- X if (nstart != start) { \
- X win->wa.dir= \
- X -(nstart * win->doc.dim / win->bar.dim); \
- X _wmove(&win->wa); \
- X drawcall(win); \
- X } \
- X }
- X
- X_whithbar(bsp, ep)
- X struct button_state *bsp;
- X EVENT *ep;
- X{
- X _wdebug(3, "hit hbar");
- X HITCODE(x, width, hbar, _wdrawhbar, IMARGIN);
- X}
- X
- X_whitvbar(bsp, ep)
- X struct button_state *bsp;
- X EVENT *ep;
- X{
- X _wdebug(3, "hit vbar");
- X HITCODE(y, height, vbar, _wdrawvbar, 0);
- X}
- END_OF_FILE
- if test 2894 -ne `wc -c <'Ports/x11/scroll.c'`; then
- echo shar: \"'Ports/x11/scroll.c'\" unpacked with wrong size!
- fi
- # end of 'Ports/x11/scroll.c'
- fi
- echo shar: End of archive 16 \(of 19\).
- cp /dev/null ark16isdone
- 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
-