Scantool part 2(5) (shar)

Was a Sunny day gunnar at falcon.ericsson.se
Tue Jun 18 22:44:54 AEST 1991


#!/bin/sh
# this is scan.02 (part 2 of a multipart archive)
# do not concatenate these parts, unpack them in order with /bin/sh
# file graphics.c continued
#
if test ! -r _shar_seq_.tmp; then
	echo 'Please unpack part 1 first!'
	exit 1
fi
(read Scheck
 if test "$Scheck" != 2; then
	echo Please unpack part "$Scheck" next!
	exit 1
 else
	exit 0
 fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
	echo 'x - still skipping graphics.c'
else
echo 'x - continuing file graphics.c'
sed 's/^X//' << 'SHAR_EOF' >> 'graphics.c' &&
X        }
X      else if (curx > butx+400 && curx < butx+400+BUTTON_WIDTH &&
X               cury > buty+10  && cury < buty+10+BUTTON_HEIGHT)
X        {
X          state = CANCEL ;
X          make_button(butx+400, buty+10, "Cancel", B_INVERT) ;
X          finished = 1 ;
X        }
X    }
X  else if (type == KEYBOARD)
X    {
X      c = cur_ch ;
X      if (c == BACKSPACE || c == DEL)
X        picname[strlen(picname)-1] = '\0' ;
X      else if (c == RETURN || c == LINEFEED)
X        {
X          state = OK ;
X          finished = 1 ;
X        }
X      else if (c >= 32) STRNCAT(picname, &c, 1) ;
X      draw_area(butx+71, buty+11, 193, 23, GCLR) ;
X      nochars = (strlen(picname) <= 20) ? strlen(picname) : 20 ;
X      STRNCPY(dummy, &picname[strlen(picname) - nochars], nochars) ;
X      dummy[nochars] = '\0' ;
X      draw_text(butx+80, buty+27, STEN_OFF, BFONT, dummy) ;
X      draw_line(butx + 80 + get_strwidth(BFONT, dummy), buty + 15,
X                butx + 80 + get_strwidth(BFONT, dummy), buty + 30, GSET) ;
X    }
X
X  if (finished)
X    {
X      if (state == CANCEL) STRCPY(picname, old_picname) ;
X      drawstate = DO_NOTHING ;
X      do_repaint() ;              /* Redraw original screen. */
X    }
}
X
X
make_menus()
{
X  create_menu(BRIGHTNESS_M, "BRIGHTNESS", br_strs) ;
X  create_menu(CONTRAST_M,   "CONTRAST",   con_strs) ;
X  create_menu(GRAIN_M,      "GRAIN",      gr_strs) ;
X  create_menu(HELP_M,       "HELP",       help_strs) ;
X  create_menu(RESOLUTION_M, "RESOLUTION", res_strs) ;
X  create_menu(SET_M,        "SET",        set_strs) ;
}
X
X
process_event()
{
X  enum menu_type column ;
X  int row, value ;
X
X       if (type == IGNORE)              return ;
X  else if (type == REPAINT)             do_repaint() ;
X  else if (drawstate == DO_MESSAGE   ||
X           drawstate == DO_HELP      ||
X           drawstate == DO_SETTINGS)    wait_for_ok() ;
X  else if (drawstate == DO_PICNAME)     get_picname() ;
X  else
X    {
X      column = (enum menu_type) ((curx - 10) / MBAR_WIDTH) ;
X      row = cury / MBAR_HEIGHT ;
X      if (type == RIGHT_DOWN && row == 0)
X        {
X          value = display_menu(column) ;
X          if (value) process_menu(column, value) ;
X        }
X      else if (type == LEFT_DOWN)
X        {
X               if (curx > SCAN_WIDTH-150                    &&
X                   curx < SCAN_WIDTH-90                     &&
X                   cury > 4*SWITCH_HEIGHT+20                &&
X                   cury < 4*SWITCH_HEIGHT+20+BUTTON_HEIGHT) make_scan() ;
X          else if (curx > SCAN_WIDTH-150                    &&
X                   curx < SCAN_WIDTH-90                     &&
X                   cury > 4*SWITCH_HEIGHT+60                &&
X                   cury < 4*SWITCH_HEIGHT+60+BUTTON_HEIGHT) stop_scan() ;
X          else if (curx > SCAN_WIDTH-150                    &&
X                   curx < SCAN_WIDTH-90                     &&
X                   cury > 4*SWITCH_HEIGHT+100               &&
X                   cury < 4*SWITCH_HEIGHT+100+BUTTON_HEIGHT) show() ;
X          else test_switch(curx, cury) ;   /* Test for a box switch press. */
X        }
X    }
}
X
X
select_frame()    /* Construct a new scanning window. */
{
X  int oldx = 0 ;
X  int oldy = 0 ;
X  int x1, y1, x2, y2 ;
X  int drawold = 0 ;
X  int found = 0 ;
X
X  set_cursor(FRAME_CUR) ;
X
/* Remove current scan settings, if any. */
X  draw_area(SCAN_FRAME_X+2, SCAN_FRAME_Y+2, 34*LINEGAP-4, 44*LINEGAP-4, GCLR) ;
X  draw_area(SCAN_FRAME_X-9, SCAN_FRAME_Y, 9, 46*LINEGAP-1, GCLR) ;
X  draw_area(SCAN_FRAME_X, SCAN_FRAME_Y-9, 34*LINEGAP-1, 9, GCLR) ;
X
X  do
X    {
X      get_event() ;
X      handle_event() ;
X      if (curx > SCAN_FRAME_X && curx < SCAN_FRAME_X+34*LINEGAP &&
X          cury > SCAN_FRAME_Y && cury < SCAN_FRAME_Y+44*LINEGAP)
X        {
X          curx = (curx / (FRAMEGAP) * (FRAMEGAP)) + 1 ;
X          cury = (cury / (FRAMEGAP) * (FRAMEGAP)) + 2 ;
X          if (type == LEFT_DOWN) found = 1 ;
X          if (type != MOUSE_MOVE) continue ;
X          if (drawold)
X            {
X              draw_line(oldx, SCAN_FRAME_Y-1, oldx, SCAN_FRAME_Y-9, GXOR) ;
X              draw_line(SCAN_FRAME_X-1, oldy, SCAN_FRAME_X-9, oldy, GXOR) ;
X            }
X          draw_line(curx, SCAN_FRAME_Y-1, curx, SCAN_FRAME_Y-9, GXOR) ;
X          draw_line(SCAN_FRAME_X-1, cury, SCAN_FRAME_X-9, cury, GXOR) ;
X          oldx = curx ;
X          oldy = cury ;
X          drawold++ ;
X        }
X    }    
X  while (!found) ;
X  x1 = curx ;
X  y1 = cury ;
X
X  found = 0 ;
X  drawold = 0 ;
X  do
X    {
X      get_event() ;
X      handle_event() ;
X      if (curx > SCAN_FRAME_X && curx < SCAN_FRAME_X+34*LINEGAP &&
X          cury > SCAN_FRAME_Y && cury < SCAN_FRAME_Y+44*LINEGAP)
X        {
X          curx = (curx / (FRAMEGAP) * (FRAMEGAP)) + 1 ;
X          cury = (cury / (FRAMEGAP) * (FRAMEGAP)) + 2 ;
X          if (type == LEFT_UP) found = 1 ;
X          if (type != MOUSE_DRAG) continue ;
X          if (drawold)
X            {
X              draw_line(oldx, SCAN_FRAME_Y-1, oldx, SCAN_FRAME_Y-9, GXOR) ;
X              draw_line(SCAN_FRAME_X-1, oldy, SCAN_FRAME_X-9, oldy, GXOR) ;
X              draw_rect(x1, y1, oldx, oldy, GXOR) ;
X            }
X          draw_line(curx, SCAN_FRAME_Y-1, curx, SCAN_FRAME_Y-9, GXOR) ;
X          draw_line(SCAN_FRAME_X-1, cury, SCAN_FRAME_X-9, cury, GXOR) ;
X          draw_rect(x1, y1, curx, cury, GXOR) ;
X          oldx = curx ;
X          oldy = cury ;
X          drawold++ ;
X        }
X    }
X  while (!found) ;
X
X  x2 = curx ;
X  y2 = cury ;
X  if (x1 > x2)
X    {
X      oldx = x2 ;
X      x2 = x1 ;
X      x1 = oldx ;
X    }
X  if (y1 > y2)
X    {
X      oldy = y2 ;
X      y2 = y1 ;
X      y1 = oldy ;
X    }
X  framevals[X1] = (x1 - SCAN_FRAME_X) / (FRAMEGAP) ;
X  framevals[Y1] = (y1 - SCAN_FRAME_Y) / (FRAMEGAP) ;
X  framevals[X2] = (x2 - SCAN_FRAME_X) / (FRAMEGAP) ;
X  framevals[Y2] = (y2 - SCAN_FRAME_Y) / (FRAMEGAP) ;
X  set_cursor(MAIN_CUR) ;
}
X
X
set_switch(x, y, position)
int x, y, position ;
{
X  if (position == ON) draw_image(x, y-2, 16, 16, S_INVERT) ;
X  else                draw_image(x, y-2, 16, 16, S_NORMAL) ;
}
X
X
stop_scan()       /* Stop the current scan (if there is one). */
{
X  if (!scanning) return ;
X  make_button(SCAN_WIDTH-150, 4*SWITCH_HEIGHT+60, "Cancel", B_INVERT) ;
X  KILL(pid, SIGHUP) ;
}
SHAR_EOF
echo 'File graphics.c is complete' &&
chmod 0644 graphics.c ||
echo 'restore of graphics.c failed'
Wc_c="`wc -c < 'graphics.c'`"
test 12024 -eq "$Wc_c" ||
	echo 'graphics.c: original size 12024, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= help.cursor ==============
if test -f 'help.cursor' -a X"$1" != X"-c"; then
	echo 'x - skipping help.cursor (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting help.cursor (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'help.cursor' &&
/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16
X */
X	0xFFFF,0x8001,0xBFFD,0xA005,0xA385,0xA445,0xA445,0xA085,
X	0xA105,0xA105,0xA005,0xA105,0xA005,0xBFFD,0x8001,0xFFFF
SHAR_EOF
chmod 0644 help.cursor ||
echo 'restore of help.cursor failed'
Wc_c="`wc -c < 'help.cursor'`"
test 193 -eq "$Wc_c" ||
	echo 'help.cursor: original size 193, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= images.h ==============
if test -f 'images.h' -a X"$1" != X"-c"; then
	echo 'x - skipping images.h (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting images.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'images.h' &&
X
/*  @(#)images.h 1.2 90/04/02
X *
X *  Various images used by the different versions of scantool.
X *
X *  Copyright (c) Rich Burridge - Sun Microsystems.
X *                                All rights reserved.
X *
X *  Permission is given to distribute these sources, as long as the
X *  introductory messages are not removed, and no monies are exchanged.
X *
X *  No responsibility is taken for any errors or inaccuracies inherent
X *  either to the comments or the code of this program, but if reported
X *  to me, then an attempt will be made to fix them.
X */
X
unsigned short grey_image[16] =
X                 {
X                   0xAAAA, 0x5555, 0xAAAA, 0x5555,
X                   0xAAAA, 0x5555, 0xAAAA, 0x5555,
X                   0xAAAA, 0x5555, 0xAAAA, 0x5555,
X                   0xAAAA, 0x5555, 0xAAAA, 0x5555
X                 } ;
X
unsigned short icon_image[] = {
#include "scantool.icon"
} ;
X
unsigned short button_invert_image[] = {
#include "button.invert.icon"
} ;
X
unsigned short button_normal_image[] = {
#include "button.normal.icon"
} ;
X
unsigned short switch_invert_image[] = {
#include "switch.invert.cursor"
} ;
X
unsigned short switch_normal_image[] = {
#include "switch.normal.cursor"
} ;
X
unsigned short exclaim_image[] = {
#include "exclaim.icon"
} ;
X
unsigned short main_cursor_array[16] = {
#include "main.cursor"
} ;
X
unsigned short hour_cursor_array[16] = {
#include <images/hglass.cursor>
} ;
X 
unsigned short help_cursor_array[16] = {
#include "help.cursor"
} ;
X 
unsigned short frame_cursor_array[16] = {
#include "frame.cursor"
} ;
SHAR_EOF
chmod 0644 images.h ||
echo 'restore of images.h failed'
Wc_c="`wc -c < 'images.h'`"
test 1552 -eq "$Wc_c" ||
	echo 'images.h: original size 1552, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= main.cursor ==============
if test -f 'main.cursor' -a X"$1" != X"-c"; then
	echo 'x - skipping main.cursor (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting main.cursor (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'main.cursor' &&
/* Format_version=1, Width=16, Height=16, Depth=1, Valid_bits_per_item=16
X */
X	0x8000,0xC000,0xE000,0xF000,0xF800,0xFC00,0xFE00,0xF000,
X	0xD800,0x9800,0x0C00,0x0C00,0x0600,0x0600,0x0300,0x0300
SHAR_EOF
chmod 0644 main.cursor ||
echo 'restore of main.cursor failed'
Wc_c="`wc -c < 'main.cursor'`"
test 193 -eq "$Wc_c" ||
	echo 'main.cursor: original size 193, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= make.sunview ==============
if test -f 'make.sunview' -a X"$1" != X"-c"; then
	echo 'x - skipping make.sunview (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting make.sunview (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'make.sunview' &&
#!/bin/sh
# This script does a make of the SunView tool.
#
make -f makefile.sunview sunview
echo " "
echo "Sunview tool now in file 'sv_scantool'"
echo " "
SHAR_EOF
chmod 0555 make.sunview ||
echo 'restore of make.sunview failed'
Wc_c="`wc -c < 'make.sunview'`"
test 156 -eq "$Wc_c" ||
	echo 'make.sunview: original size 156, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= makefile.sunview ==============
if test -f 'makefile.sunview' -a X"$1" != X"-c"; then
	echo 'x - skipping makefile.sunview (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting makefile.sunview (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'makefile.sunview' &&
#
#  Makefile for the Microtek MS-300A to Sun rasterfile converter.
#
#  @(#)Makefile 1.5 90/04/12
#
#  Copyright (c) Rich Burridge - Sun Microsystems Australia.
#
#  No responsibility is taken for any errors inherent either in the comments
#  or the code of this program, but if reported to me then an attempt will
#  be made to fix them.
#
#=========================================================================
#
#  There are various small changes needed when compiling faces on
#  different systems. These have been isolated here, and should
#  be uncommented if needed.
#-------------------------------------------------------------------------
#  Scantool uses a helpfile to supply online help for various functions.
#  By default this file is called "scantool.help". You can also
#  override it's location and name at runtime with the -h option.
#  It can also be specified here by uncommenting the following
#  macro definition and setting appropriately.
#
HELPNAME	= -DHELPNAME=\"$(LIBDIR)/scantool.help\"
#-------------------------------------------------------------------------
#  If you not running under a BSD4.3 derived system, the parameters
#  to the select call are different, and this definition should be
#  uncommented. You need to uncomment this for SunOS v3.x.
#
SELTYPE        = -DNO_4.3SELECT
#-------------------------------------------------------------------------
#  Some versions of Unix use a pointer to a function returning an
#  integer as the return type of signal(). Newer systems use pointer to
#  function returning void. You need to uncomment this for SunOS v3.x.
#
SIGRET		= -DSIGRET=int
#
#=========================================================================
#
#  Default locations where scantool files will be installed.
#  You might wish to alter these values.
#
BINDIR		= /usr/local/bin
LIBDIR      = /usr/local/lib/scantool
MANDIR		= /usr/local/man/manl
MANSECT		= l
#
#  Compilation flags and standard macro definitions.
#
CFLAGS          = -O  $(HELPNAME) $(SELTYPE) $(SIGRET) $(XVIEWINCDIR)
#
#=========================================================================
X
BINARIES	= sv_scantool scan
X
CC		= cc
X
STDSTSRCS	= scantool.c graphics.c misc.c
STDSTOBJS	= scantool.o graphics.o misc.o
X
STDSSRCS	= scan.c scan_compress.c
STDSOBJS	= scan.o scan_compress.o
X
GSRCS		= sunview.c 
HDRS		= images.h patchlevel.h scan.h scan_extern.h \
X		  scantool.h scantool_extern.h
OTHERS		= Makefile CHANGES README black.codes white.codes \
X		  Imakefile scantool.help scan.1 scantool.1
IMAGES		= exclaim.icon scantool.icon \
X		  button.normal.icon button.invert.icon \
X		  switch.normal.cursor switch.invert.cursor \
X		  frame.cursor help.cursor main.cursor
X
SFILES1		= $(STDSTSRCS) $(STDSSRCS)
SFILES2		= $(GSRCS) $(HDRS)
SFILES3		= $(OTHERS) $(IMAGES)
X
SVIEWLIBS	= -lsuntool -lsunwindow -lpixrect
X
help:
X		@echo
X		@echo "You need to specify one of the following options:"
X		@echo
X		@echo "  make sunview    - to make the SunView version."
X		@echo
X		@echo "This should be followed by:"
X		@echo
X		@echo "  make install"
X		@echo "  make clean"
X		@echo
X
all:            $(BINARIES)
X
sunview:        sv_scantool scan
X        
sv_scantool:	$(STDSTOBJS) sunview.o
X		$(CC) -o sv_scantool $(CFLAGS) $(STDSTOBJS) \
X				sunview.o $(SVIEWLIBS)
#		-cp sv_scantool scantool
X
scan:		$(STDSOBJS)
X		$(CC) -o scan $(CFLAGS) $(STDSOBJS)
X 
install:
X		install -s -m 751 scantool $(BINDIR)
X		install -s -m 751 scan $(BINDIR)
X		install -c -m 644 black.codes $(LIBDIR)
X		install -c -m 644 white.codes $(LIBDIR)
X		install -c -m 644 scantool.help $(LIBDIR)
X		install -c -m 644 scantool.1 $(MANDIR)/scantool.$(MANSECT)
X		install -c -m 644 scan.1 $(MANDIR)/scan.$(MANSECT)
X
clean:;		rm -rf *.o archive.* *~ scantool $(BINARIES) core
X
shar:;		shar.script $(SFILES1) > Part1
X		shar.script $(SFILES2) > Part2
X		shar.script $(SFILES3) > Part3
X
lint:;		lint $(STDSTSRCS) sunview.c $(SVIEWLIBS)
X		lint $(STDSSRCS)
X		lint $(STDSTSRCS) xview.c   $(XVIEWLIBS)
X
create:         SCCS
X		-sccs create $(STDSTSRCS) $(STDSSRCS) $(GSRCS) \
X				$(HDRS) $(OTHERS) $(IMAGES)
X
SCCS:
X		mkdir SCCS
X		chmod 755 SCCS
X
graphics.o:      graphics.c scantool_extern.h scantool.h
misc.o:          misc.c patchlevel.h scantool_extern.h scantool.h
scan.o:          scan.c patchlevel.h scan.h
scan_compress.o: scan_compress.c scan_extern.h scan.h
scantool.o:      scantool.c scantool.h
sunview.o:       sunview.c scantool_extern.h images.h scantool.h \
X		 exclaim.icon scantool.icon \
X		 button.normal.icon button.invert.icon \
X		 switch.normal.cursor switch.invert.cursor \
X		 frame.cursor help.cursor main.cursor
SHAR_EOF
chmod 0644 makefile.sunview ||
echo 'restore of makefile.sunview failed'
Wc_c="`wc -c < 'makefile.sunview'`"
test 4598 -eq "$Wc_c" ||
	echo 'makefile.sunview: original size 4598, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= misc.c ==============
if test -f 'misc.c' -a X"$1" != X"-c"; then
	echo 'x - skipping misc.c (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting misc.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'misc.c' &&
X 
/*  @(#)misc.c 1.4 90/04/04
X *
X *  Miscellaneous routines used by the scantool program.
X *
X *  Copyright (c) Rich Burridge.
X *                Sun Microsystems, Australia - All rights reserved.
X *
X *  Permission is given to distribute these sources, as long as the
X *  copyright messages are not removed, and no monies are exchanged.
X *
X *  No responsibility is taken for any errors or inaccuracies inherent
X *  either to the comments or the code of this program, but if
X *  reported to me, then an attempt will be made to fix them.
X */
X
#include <stdio.h>
#include <ctype.h>
#include <strings.h>
#include "scantool.h"
#include "patchlevel.h"
#include "scantool_extern.h"
X
X
draw_settings()     /* Display text for current scanner settings. */
{
X  int texty = 20 ;
X  int x, y ;
X
X  x = (SCAN_WIDTH - 430) / 2 ;
X  y = (SCAN_HEIGHT - 100) / 2 ;
X  draw_frame(x, y, 430, 100) ;
X
X  SPRINTF(output, "Brightness:  %s", br_strs[brightness-1]) ;
X  draw_text(x+10, y+texty, STEN_OFF, NFONT, output) ;
X 
X  SPRINTF(output, "Contrast:    %s", con_strs[contrast-1]) ;
X  draw_text(x+10, y+texty+15, STEN_OFF, NFONT, output) ;
X 
X  SPRINTF(output, "Grain:       %s", gr_strs[grain]) ;
X  draw_text(x+10, y+texty+30, STEN_OFF, NFONT, output) ;
X 
X  SPRINTF(output, "Resolution:  %s", res_strs[resolution]) ;
X  draw_text(x+10, y+texty+45, STEN_OFF, NFONT, output) ;
X 
X  SPRINTF(output, "Filename:    %s", picname) ;
X  draw_text(x+10, y+texty+60, STEN_OFF, NFONT, output) ;
}
X
X
get_help()                 /* Read the help file and display. */
{
X  char help_str[MAXLINE], *p ;
X  int x, y ;
X  int length = 0 ;         /* Length of longest help line. */
X  int nolines = 0 ;        /* Number of lines in help file. */
X  char line[MAXLINE] ;     /* Current line read from help file. */
X  int texty = 20 ;         /* Initial y coordinate for help message. */
X
X  if (nohelp) make_display("No help file found.") ;
X  else
X    {
X      SPRINTF(help_str, "%%%s%%\n", helpname) ;
X      rewind(hfd) ;
X      while (p = fgets(line, MAXLINE, hfd))
X        if (*p == '%' && EQUAL(p, help_str)) break ;
X 
X      for (;;)             /* Check for the length of the longest line. */
X        {
X          FGETS(line, MAXLINE, hfd) ;
X          if (EQUAL(line, "%%\n")) break ;
X          if (strlen(line) > length) length = strlen(line) ;
X          nolines++ ;
X        }
X 
X      rewind(hfd) ;
X      while (p = fgets(line, MAXLINE, hfd))
X        if (*p == '%' && EQUAL(p, help_str)) break ;
X 
X      set_cursor(HELP_CUR) ;
X      x = (SCAN_WIDTH - length*font_width - 20) / 2 ;
X      y = (SCAN_HEIGHT - nolines*15+texty) / 2 ;
X      draw_frame(x, y, length*font_width+20, nolines*15+texty) ;
X
X      for (;;)
X        {
X          FGETS(line, MAXLINE, hfd) ;
X          if (EQUAL(line, "%%\n")) break ;
X          line[strlen(line)-1] = '\0' ;
X          draw_text(x+10, y+texty, STEN_OFF, NFONT, line) ;
X          texty += 15 ;
X        }
X    }
}
X
X
get_options(argc, argv)        /* Extract command line options. */
int argc ;
char *argv[] ;
{
X  INC ;
X  while (argc > 0)
X    {
X      if (argv[0][0] == '-')
X        switch (argv[0][1])
X          {
X            case 'h' : INC ;                         /* Help filename. */
X                       getparam(helpname, argv, "-h needs help filename") ;
X                       break ;
X            case 'v' : FPRINTF(stderr, "%s version 1.4.%1d\n",
X                                        progname, PATCHLEVEL) ;
X                       break ;
X            case '?' : usage() ;
X          }
X      INC ;
X    }
}
X
X
getparam(s, argv, errmes)
char *s, *argv[], *errmes ;
{
X  if (*argv != NULL && argv[0][0] != '-') STRCPY(s, *argv) ;
X  else
X    { 
X      FPRINTF(stderr,"%s: %s as next argument.\n", progname, errmes) ;
X      exit(1) ;
X    }
}
X
X
make_button(x, y, text, state)      /* Draw a text button. */
int x, y ;
char *text ;
enum image_type state ;
{
X  enum sten_type stencil ;
X
X  draw_image(x, y, BUTTON_WIDTH, BUTTON_HEIGHT, state) ;
X  width = get_strwidth(BFONT, text) ;
X  if (state == B_NORMAL) stencil = STEN_ON ;
X  else                   stencil = STEN_INV ;
X  draw_text(x + ((64 - width) / 2),
X            y + FONT_HEIGHT + ((BUTTON_HEIGHT - FONT_HEIGHT) / 2) - 5,
X            stencil, BFONT, text) ;
}
X
X 
make_display(output)       /* Output message to the display window. */
char *output ;
{
X  STRCPY(last_message, output) ;  /* Save in case of a redraw. */
X  make_message() ;                /* Output message as popup to the canvas. */
}
X
X
make_help(value)
{
X  if (value)
X    {
X      STRCPY(helpname, help_strs[value-1]) ;
X      if (isupper(helpname[0])) helpname[0] = tolower(helpname[0]) ;
X      get_help() ;             /* Read the help file and display. */
X      drawstate = DO_HELP ;
X      butx = buty = 0 ;
X    }
}
X
X
make_message()      /* Output message to the display window. */
{
X  int x, y ;
X
X  width = strlen(last_message) * font_width + 20 ;
X  if (width < 300) width = 300 ;
X  x = (SCAN_WIDTH - width) / 2 ;
X  y = (SCAN_HEIGHT - 90) / 2 ;
X  draw_frame(x, y, width, 90) ;
X  draw_image(x + 30, y + 15, 64, 64, EXCLAIM_IMAGE) ;
X  butx = x + width - 90 ;
X  buty = y + 15 ;
X  make_button(x + width - 90, y + 15, "OK", B_NORMAL) ;
X  draw_text(x + 10, y + 65, STEN_OFF, NFONT, last_message) ;
X  drawstate = DO_MESSAGE ;
}
X
X
make_scan()    /* Start scanning process, and wait for it to terminate. */
{
X  char arg_contrast[MAXLINE] ;      /* Contrast value. */
X  char arg_brightness[MAXLINE] ;    /* Brightness value. */
X  char arg_datatrans[MAXLINE] ;     /* Data transfer (or blank). */
X  char arg_framevals[4][MAXLINE] ;  /* Scanning frame values. */
X  char arg_grain[MAXLINE] ;         /* Grain value. */
X  char arg_mode[MAXLINE] ;          /* Mode (or blank). */
X  char arg_picname[MAXLINE] ;       /* Picture name. */
X  char arg_resolution[MAXLINE] ;    /* Resolution value. */
X  char arg_speed[MAXLINE] ;         /* Speed of connection (or blank). */
X  char arg_ttyport[MAXLINE] ;       /* Tty port (or blank). */
X
X  SPRINTF(arg_brightness,    "%1d", brightness) ;
X  SPRINTF(arg_contrast,      "%1d", contrast) ;
X  SPRINTF(arg_datatrans,     "%1d", switches[DATA_TRANSFER]) ;
X  SPRINTF(arg_framevals[X1], "%1d", framevals[X1]) ;
X  SPRINTF(arg_framevals[Y1], "%1d", framevals[Y1]) ;
X  SPRINTF(arg_framevals[X2], "%1d", framevals[X2]) ;
X  SPRINTF(arg_framevals[Y2], "%1d", framevals[Y2]) ;
X  SPRINTF(arg_grain,         "%1d", grain) ;
X  SPRINTF(arg_mode,          "%1d", switches[MODE]) ;
X  SPRINTF(arg_picname,       "%s",  picname) ;
X  SPRINTF(arg_resolution,    "%1d", resolution) ;
X  SPRINTF(arg_speed,         "%1d", switches[BAUD_RATE]) ;
X  SPRINTF(arg_ttyport,       "%1d", switches[SERIAL_PORT]) ;
X
X  if (scanning)
X    {
X      make_display("There is a scan already in progress") ;
X      return ;
X    }
X  scanning = 1 ;
X  make_button(SCAN_WIDTH-150, 4*SWITCH_HEIGHT+20, "Scan", B_INVERT) ;
X  if ((pid = vfork()) == 0)
X    {
X      EXECL("scan"," ","-c", arg_contrast, "-b", arg_brightness,
X                    "-d", arg_datatrans,  "-f", arg_framevals[X1],
X                    arg_framevals[Y1], arg_framevals[X2], arg_framevals[Y2],
X                    "-g", arg_grain,      "-m", arg_mode,
X                    "-p", arg_picname,    "-r", arg_resolution,
X                    "-s", arg_speed,      "-t", arg_ttyport,
X                    (char *) 0) ;
X      FPRINTF(stderr, "%s: Couldn't fork the scan process.\n", progname) ;
X      exit(1) ;                 /* Should never get here. */
X    }
X  wait_on_child(pid) ;
}
X
X
make_set(value)
int value ;
{
X  switch (value)
X    {
X      case SET_PICTURE     : STRCPY(old_picname, picname) ;
X                             draw_picarea() ;
X                             break ;
X      case SET_DEFAULTS    : set_defaults() ;
X                             break ;
X      case SET_CLEAR_FRAME : framevals[X1] = 0 ;
X                             framevals[Y1] = 0 ;
X                             framevals[X2] = 68 ;
X                             framevals[Y2] = 88 ;
X                             draw_area(SCAN_FRAME_X+2, SCAN_FRAME_Y+2,
X                                       34*LINEGAP-4, 44*LINEGAP-4, GCLR) ;
X                             draw_area(SCAN_FRAME_X-9, SCAN_FRAME_Y,
X                                       9, 46*LINEGAP-1, GCLR) ;
X                             draw_area(SCAN_FRAME_X, SCAN_FRAME_Y-9,
X                                       34*LINEGAP-1, 9, GCLR) ;
X                             break ;
X      case SET_NEW_FRAME   : select_frame() ;
X                             break ;
X      case SET_CURRENT     : show_settings() ;
X    } 
}
X 
X 
make_switch(x, y, title, boxa, boxb)
int x, y ;
char *title, *boxa, *boxb ;
{
X  draw_text(x, y, STEN_OFF, BFONT, title) ;
X  set_switch(x, y+10, OFF) ;
X  draw_text(x+30, y+20, STEN_OFF, BFONT, boxa) ;
X  set_switch(x, y+30, OFF) ;
X  draw_text(x+30, y+40, STEN_OFF, BFONT, boxb) ;
}
X
X
process_menu(mtype, value)        /* Process a menu choice. */
enum menu_type mtype ;
int value ;
{
X  switch (mtype)
X    {
X      case BRIGHTNESS_M : brightness = value ;
X                          break ;
X      case CONTRAST_M   : contrast = value ;
X                          break ;
X      case GRAIN_M      : grain = value-1 ;
X                          break ;
X      case HELP_M       : make_help(value) ;
X                          break ;
X      case RESOLUTION_M : resolution = value-1 ;
X                          break ;
X      case SET_M        : make_set(value) ;
X    }
}
X
X
set_defaults()       /* Return scanner setting to default. */
{
X  brightness = 7 ;   /* Brightness value (no adjustment). */
X  contrast = 7 ;     /* Contrast value (no adjustment). */
X  grain = 2 ;        /* Grain value (grain size: 8x8  levels: 33). */
X  resolution = 0 ;   /* Resolution value (300 dpi). */
}
X
X
show_settings()      /* Display current scanner settings in a popup window. */
{
X  draw_settings() ;           /* Display setting values. */
X  drawstate = DO_SETTINGS ;
X  butx = buty = 0 ;
}
X
X
test_switch(x, y)       /* Test for a switch box being pressed. */
int x, y ;
{
X  int i, j ;
X
X  if (x > SCAN_WIDTH-150 && x < SCAN_WIDTH-130)
X    for (i = 0; i < 2; i++)
X      for (j = 0; j < 4; j++)
X        if ((y > j*SWITCH_HEIGHT+50+i*20) && (y < j*SWITCH_HEIGHT+70+i*20))
X          if (i)
X            {   
X              set_switch(SCAN_WIDTH-150, j*SWITCH_HEIGHT+50, OFF) ;
X              set_switch(SCAN_WIDTH-150, j*SWITCH_HEIGHT+70, ON) ;
X              switches[j] = i ;
X            }
X          else
X            { 
X              set_switch(SCAN_WIDTH-150, j*SWITCH_HEIGHT+50, ON) ;
X              set_switch(SCAN_WIDTH-150, j*SWITCH_HEIGHT+70, OFF) ;
X              switches[j] = i ;
X            }
}
X
X
usage()
{
X  FPRINTF(stderr, "Usage: %s: [-h helpname] [-v] [-?]\n", progname) ;
X  exit(1) ;
}
X
X
wait_for_ok()    /* Wait for user to acknowledge. */
{
X  int doexit = 0 ;
X
X  switch (type)
X    {
X      case LEFT_DOWN : if (butx && buty)
X                         {
X                           if (curx > butx && curx < butx+BUTTON_WIDTH &&
X                               cury > buty && cury < buty+BUTTON_HEIGHT)
X                             {
X                               make_button(butx, buty, "OK", B_INVERT) ;
X                               doexit = 1 ;
X                             }
X                         }
X                       else doexit = 1 ;
X                       break ;
X      case KEYBOARD  : if (cur_ch == LINEFEED || cur_ch == RETURN)
X                         doexit = 1 ;
X    }
X 
X  if (doexit)
X    {
X      set_cursor(MAIN_CUR) ;
X      drawstate = DO_NOTHING ;
X      do_repaint() ;
X    }        
}
SHAR_EOF
chmod 0644 misc.c ||
echo 'restore of misc.c failed'
Wc_c="`wc -c < 'misc.c'`"
test 11483 -eq "$Wc_c" ||
	echo 'misc.c: original size 11483, current size' "$Wc_c"
rm -f _shar_wnt_.tmp
fi
# ============= notify.h ==============
if test -f 'notify.h' -a X"$1" != X"-c"; then
	echo 'x - skipping notify.h (File already exists)'
	rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting notify.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'notify.h' &&
X
/*	@(#)notify.h 20.18 90/06/19 SMI	*/
X
/*
X *	(c) Copyright 1989 Sun Microsystems, Inc. Sun design patents 
X *	pending in the U.S. and foreign countries. See LEGAL NOTICE 
X *	file for terms of the license.
X */
X
#ifndef	xview_notify_DEFINED
#define	xview_notify_DEFINED
X
/*
X ***********************************************************************
X *			Include Files
X ***********************************************************************
X */
X
#include <sys/types.h>
#include <xview/base.h>
X
/*
X ***********************************************************************
X *			Definitions and Macros
X ***********************************************************************
X */
X
/*
X * PUBLIC #defines 
X */
X
#define	NOTIFY_FUNC_NULL	((Notify_func)0)
X
/*      Macros to examine wait3/waitpid results provided for BSD rather
X *      than adding a lot of #ifdef'ed code in the .c's.  Note that AT&T-
X *      style macros expect the status value (not a pointer to it).
X *      Also provide a dummy rusage structure in the non-BSD case.
X */
#if  !(defined WTERMSIG) && !(defined SVR4)
#define WTERMSIG(status)        ((status).w_termsig)
#endif
#if  !(defined WSTOPSIG) && !(defined SVR4)
#define WSTOPSIG(status)        ((status).w_stopsig)
#endif
#if  !(defined WEXITSTATUS) && !(defined SVR4)
#define WEXITSTATUS(status)     ((status).w_retcode)
#endif
#if  !(defined WCOREDUMP) && !(defined SVR4)
#define WCOREDUMP(status)       ((status).w_coredump)
#endif
#ifdef SVR4
struct rusage {
X	int     notused;                /* to make it valid */
};
#endif SVR4
/*
X * PRIVATE #defines 
X */
X
#define NOTIFY_CLIENT_NULL	((Notify_client)0)
#define	NOTIFY_COPY_NULL	((Notify_copy)0)
#define	NOTIFY_RELEASE_NULL	((Notify_release)0)
#define	NOTIFY_ARG_NULL		((Notify_arg)0)
X
/*
X * Mask bit generating macros 	(for prioritizer):
X */
#define	SIG_BIT(sig)		(1 << ((sig)-1))
X
/*
X ***********************************************************************
X *		Typedefs, enumerations, and structures
X ***********************************************************************
X */
X
/*
X * Opaque client handle.
X */
typedef	Xv_opaque Notify_client;
X
#ifndef _NOTIFY_MIN_SYMBOLS	/* Hack to reduce symbols in libraries. */
X
/*
X * Opaque client event.
X */
typedef	Xv_opaque Notify_event;
X
/*
X * Opaque client event optional argument.
X */
typedef	Xv_opaque Notify_arg;
X
/*
X * A pointer to a function returning a Notify_arg (used for client
X * event additional argument copying).
X */
typedef	Notify_arg (*Notify_copy)();
X
/*
X * A pointer to a function returning void (used for client
X * event additional argument storage releasing).
X */
typedef	void (*Notify_release)();
X
/*
X * For Debugging utility:
X */
typedef	enum notify_dump_type {
X	NOTIFY_ALL=0,
X	NOTIFY_DETECT=1,
X	NOTIFY_DISPATCH=2,
} Notify_dump_type;
X
#endif ~_NOTIFY_MIN_SYMBOLS
X
/*
X * Client notification function return values for notifier to client calls.
X */
typedef enum notify_value {
X	NOTIFY_DONE		= 0,	/* Handled notification */
X	NOTIFY_IGNORED		= 1,	/* Did nothing about notification */
X	NOTIFY_UNEXPECTED	= 2,	/* Notification not expected */
} Notify_value;
X
/*
X * A pointer to a function returning a Notify_value.
X */
typedef	Notify_value (*Notify_func)();
X
/*
X * Error codes for client to notifier calls (returned when no other
X * return value or stored in notify_errno when other return value
X * indicates error condition).
X */
typedef enum notify_error {
X	NOTIFY_OK		= 0,	/* Success */
X	NOTIFY_UNKNOWN_CLIENT	= 1,	/* Client argument unknown to notifier */
X	NOTIFY_NO_CONDITION	= 2,	/* Client not registered for given 
X					 * condition 
X					 */
X	NOTIFY_BAD_ITIMER	= 3,	/* Itimer type unknown */
X	NOTIFY_BAD_SIGNAL	= 4,	/* Signal number out of range */
X	NOTIFY_NOT_STARTED	= 5,	/* Notify_stop called & notifier not 
X					 * started 
X					 */
X	NOTIFY_DESTROY_VETOED	= 6,	/* Some client didn't want to die when 
X					 * called notify_die(DESTROY_CHECKING)
X					 */
X	NOTIFY_INTERNAL_ERROR	= 7,	/* Something wrong in the notifier */
X	NOTIFY_SRCH		= 8,	/* No such process */
X	NOTIFY_BADF		= 9,	/* Bad file number */
X	NOTIFY_NOMEM		= 10,	/* Not enough core */
X	NOTIFY_INVAL		= 11,	/* Invalid argument */
X	NOTIFY_FUNC_LIMIT	= 12,	/* Too many interposition functions */
} Notify_error;
X
X
/*
X * Argument types
X */
typedef enum notify_signal_mode {
X	NOTIFY_SYNC		= 0,
X	NOTIFY_ASYNC		= 1,
} Notify_signal_mode;
X
typedef enum notify_event_type {
X	NOTIFY_SAFE		= 0,
X	NOTIFY_IMMEDIATE	= 1,
} Notify_event_type;
X
typedef enum destroy_status {
X	DESTROY_PROCESS_DEATH	= 0,
X	DESTROY_CHECKING	= 1,
X	DESTROY_CLEANUP		= 2,
X	DESTROY_SAVE_YOURSELF	= 3,
} Destroy_status;
X
/*
X ***********************************************************************
X *				Globals
X ***********************************************************************
X */
X
/*
X * PUBLIC variables 
X */
X
extern	struct itimerval NOTIFY_POLLING_ITIMER;	/* {{0,1},{0,1}} */
X
/*
X * PRIVATE variables 
X */
X
extern	Notify_error notify_errno;
X
#ifndef _NOTIFY_MIN_SYMBOLS
extern	struct itimerval NOTIFY_NO_ITIMER;	/* {{0,0},{0,0}} */
#endif	~_NOTIFY_MIN_SYMBOLS
X
/*
X * PUBLIC functions 
X */
X
#ifndef _NOTIFY_MIN_SYMBOLS
X
EXTERN_FUNCTION (Notify_value 	notify_default_wait3, (Notify_client nclient, int pid, union wait *status, struct rusage *rusage));
EXTERN_FUNCTION (Notify_error 	notify_dispatch, (void));
EXTERN_FUNCTION (Notify_error	notify_do_dispatch, (void));
EXTERN_FUNCTION (Notify_error 	notify_itimer_value, (Notify_client nclient, int which, struct itimerval *value));
EXTERN_FUNCTION (Notify_value 	notify_next_destroy_func, (Notify_client nclient, Destroy_status status));
EXTERN_FUNCTION (Notify_value 	notify_next_event_func, (Notify_client nclient, Notify_event event, Notify_arg arg, Notify_event_type when));
EXTERN_FUNCTION (Notify_error 	notify_no_dispatch, (void));
EXTERN_FUNCTION (Notify_func 	notify_set_destroy_func, (Notify_client nclient, Notify_func func));
EXTERN_FUNCTION (Notify_func 	notify_set_exception_func, (Notify_client nclient, Notify_func func, int fd));
EXTERN_FUNCTION (Notify_func 	notify_set_input_func, (Notify_client nclient, Notify_func func, int fd));
EXTERN_FUNCTION (Notify_func 	notify_set_itimer_func, (Notify_client nclient, Notify_func func, int which, struct itimerval *value, struct itimerval *ovalue));
EXTERN_FUNCTION (Notify_func 	notify_set_output_func, (Notify_client nclient,	 Notify_func func, int fd));
EXTERN_FUNCTION (Notify_func 	notify_set_signal_func, (Notify_client nclient,	Notify_func func, int sig, Notify_signal_mode mode));
EXTERN_FUNCTION (Notify_func 	notify_set_wait3_func, 	(Notify_client nclient, Notify_func func, int pid));
EXTERN_FUNCTION (Notify_error 	notify_start, (void));
EXTERN_FUNCTION (Notify_error 	notify_stop, (void));
EXTERN_FUNCTION (Notify_error 	notify_veto_destroy, (Notify_client nclient));
EXTERN_FUNCTION (void 		notify_perror, (char *str));
X
#endif	~_NOTIFY_MIN_SYMBOLS
X
/*
X * PRIVATE functions 
X */
X
EXTERN_FUNCTION (Notify_func 	notify_set_event_func, (Notify_client nclient, Notify_func func, Notify_event_type when));
EXTERN_FUNCTION (Notify_error 	notify_remove, (Notify_client nclient));
X
#ifndef _NOTIFY_MIN_SYMBOLS
X
EXTERN_FUNCTION (Notify_error 	notify_client, (Notify_client nclient));
EXTERN_FUNCTION (Notify_error 	notify_destroy, (Notify_client nclient, Destroy_status status));
EXTERN_FUNCTION (Notify_error 	notify_die, (Destroy_status status));
EXTERN_FUNCTION (Notify_error 	notify_event, (Notify_client nclient, Notify_event event, Notify_arg arg));
EXTERN_FUNCTION (Notify_error 	notify_exception, (Notify_client nclient, int fd));
EXTERN_FUNCTION (void 		notify_flush_pending, (Notify_client nclient));
EXTERN_FUNCTION (Notify_func 	notify_get_destroy_func, (Notify_client));
EXTERN_FUNCTION (Notify_func 	notify_get_event_func, (Notify_client nclient, Notify_event_type when));
EXTERN_FUNCTION (Notify_func 	notify_get_exception_func, (Notify_client nclient, int fd));
EXTERN_FUNCTION (Notify_func	notify_get_input_func, (Notify_client nclient, int fd));
EXTERN_FUNCTION (Notify_func	notify_get_itimer_func,	(Notify_client nclient, int which));
EXTERN_FUNCTION (Notify_func 	notify_get_output_func, (Notify_client nclient, int fd));
EXTERN_FUNCTION (Notify_func 	notify_get_prioritizer_func, (Notify_client nclient));
EXTERN_FUNCTION (Notify_func 	notify_get_scheduler_func, (void));
EXTERN_FUNCTION (int 		notify_get_signal_code, (void));
#ifndef SVR4
EXTERN_FUNCTION (struct sigcontext *notify_get_signal_context, (void));
#else SVR4
EXTERN_FUNCTION (struct ucontext_t *notify_get_signal_context, (void));
#endif SVR4
EXTERN_FUNCTION (Notify_func 	notify_get_signal_func, (Notify_client nclient, int signal, Notify_signal_mode mode));
EXTERN_FUNCTION (Notify_func 	notify_get_wait3_func, (Notify_client nclient, int pid));
EXTERN_FUNCTION (Notify_error	notify_input, (Notify_client nclient, int fd));
EXTERN_FUNCTION (Notify_error	notify_interpose_destroy_func, (Notify_client nclient, Notify_func func));
EXTERN_FUNCTION (Notify_error 	notify_interpose_event_func, (Notify_client nclient, Notify_func func, Notify_event_type when));
EXTERN_FUNCTION (Notify_error	notify_interpose_exception_func, (Notify_client nclient, Notify_func func, int fd));
EXTERN_FUNCTION (Notify_error	notify_interpose_input_func, (Notify_client nclient, Notify_func func, int fd));
EXTERN_FUNCTION (Notify_error	notify_interpose_itimer_func, (Notify_client nclient, Notify_func func, int which));
EXTERN_FUNCTION (Notify_error 	notify_interpose_output_func, (Notify_client nclient, Notify_func func, int fd));
EXTERN_FUNCTION (Notify_error 	notify_interpose_signal_func, (Notify_client nclient, Notify_func func, int signal, Notify_signal_mode mode));
EXTERN_FUNCTION (Notify_error	notify_interpose_wait3_func, (Notify_client nclient, Notify_func func, int pid));
EXTERN_FUNCTION (Notify_error 	notify_itimer, 	(Notify_client nclient, int which));
EXTERN_FUNCTION (Notify_value 	notify_next_exception_func, (Notify_client nclient, int fd));
EXTERN_FUNCTION (Notify_value 	notify_next_input_func, (Notify_client nclient, int fd));
EXTERN_FUNCTION (Notify_value 	notify_next_itimer_func, (Notify_client nclient, int which));
EXTERN_FUNCTION (Notify_value	notify_next_output_func, (Notify_client nclient, int fd));
EXTERN_FUNCTION (Notify_value 	notify_next_signal_func, (Notify_client nclient, int signal, Notify_signal_mode mode));
EXTERN_FUNCTION (Notify_value 	notify_next_wait3_func, (Notify_client nclient, int pid, union wait *status, struct rusage *rusage));
EXTERN_FUNCTION (Notify_value	notify_nop, (void));
EXTERN_FUNCTION (Notify_error 	notify_output, (Notify_client nclient, int fd));
EXTERN_FUNCTION (Notify_error	notify_post_destroy, (Notify_client nclient, Destroy_status status, Notify_event_type type));
EXTERN_FUNCTION (Notify_error 	notify_post_event, (Notify_client nclient, Notify_event event, 	Notify_event_type when_hint));
EXTERN_FUNCTION (Notify_error 	notify_post_event_and_arg, (Notify_client nclient, Notify_event event, Notify_event_type when_hint, Notify_copy copy_func, Notify_release release_func));
EXTERN_FUNCTION (Notify_error 	notify_remove_destroy_func, (Notify_client nclient, Notify_func func));
EXTERN_FUNCTION (Notify_error 	notify_remove_event_func, (Notify_client nclient, Notify_func func, Notify_event_type when));
SHAR_EOF
true || echo 'restore of notify.h failed'
fi
echo 'End of  part 2'
echo 'File notify.h is continued in part 3'
echo 3 > _shar_seq_.tmp
exit 0



More information about the Alt.sources mailing list