menu(1) part 6 of 14
Paul J. Condie
pjc at pcbox.UUCP
Thu Dec 27 07:08:44 AEST 1990
#!/bin/sh
# this is part 6 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file SetTerm.c continued
#
CurArch=6
if test ! -r s2_seq_.tmp
then echo "Please unpack part 1 first!"
exit 1; fi
( read Scheck
if test "$Scheck" != $CurArch
then echo "Please unpack part $Scheck next!"
exit 1;
else exit 0; fi
) < s2_seq_.tmp || exit 1
echo "x - Continuing file SetTerm.c"
sed 's/^X//' << 'SHAR_EOF' >> SetTerm.c
Xint KeySave = 6; /* ^f - GetInput save screen to a file */
Xint KeyPrint = 16; /* ^p - GetInput prints screen to lp */
Xint KeyAccept = 1; /* ^a - GetInput accepts input */
X
X
X/* Menu Specific */
Xint HotKeys = 0; /* for hot keyboard */
Xint KeyMainMenu = 'm'; /* goto main menu */
Xint KeyPrevMenu = 'p'; /* goto previous menu */
Xint KeyExitMenu = 'e'; /* exit menu */
Xint KeyGname = 'g'; /* goto a specific menu (dumb) */
Xint KeyPopGname = 7; /* ^g - goto a specific menu (popmenu) */
X
X
X
XSetTerm ()
X{
X FILE *fopen(), *menuinit;
X char *getenv();
X char *findfile();
X char *strchr();
X char *ws;
X char filename[100], line[BUFSIZE];
X char *s1;
X
X
X char *terminal;
X
X /*
X ** Parse the .menuinit file
X ** First look in current directory then $HOME then in $MENUDIR
X */
X strcpy (filename, findfile (MENUINIT, ".",
X (char *)getenv("HOME"), (char *)getenv("MENUDIR"), ""));
X if ((menuinit = fopen (filename, "r")) == NULL)
X {
X /* no file found - use the defaults */
X return (0);
X }
X
X /* set terminal keys */
X while (fgets (line, BUFSIZE, menuinit) != (char *)NULL)
X {
X if (strncmp ("HOTKEYS", line, 7) == 0)
X HotKeys = 1;
X
X /*
X ** The following keywords require a = sign
X */
X
X if ((s1 = strchr (line, '=')) == (char *)NULL)
X continue;
X
X s1++; /* get past the = */
X
X /* Mover Keys */
X if (strncmp ("KEY_RETURN", line, 10) == 0)
X sscanf (s1, "%d", &KeyReturn);
X else if (strncmp ("KEY_DOWN", line, 8) == 0)
X sscanf (s1, "%d", &KeyDown);
X else if (strncmp ("KEY_UP", line, 6) == 0)
X sscanf (s1, "%d", &KeyUp);
X else if (strncmp ("KEY_TAB", line, 7) == 0)
X sscanf (s1, "%d", &KeyTab);
X else if (strncmp ("KEY_BTAB", line, 8) == 0)
X sscanf (s1, "%d", &KeyBTab);
X
X /* Edit Keys */
X else if (strncmp ("KEY_BEG", line, 7) == 0)
X sscanf (s1, "%d", &KeyBeg);
X else if (strncmp ("KEY_END", line, 7) == 0)
X sscanf (s1, "%d", &KeyEnd);
X else if (strncmp ("KEY_RIGHT", line, 9) == 0)
X sscanf (s1, "%d", &KeyRight);
X else if (strncmp ("KEY_LEFT", line, 8) == 0)
X sscanf (s1, "%d", &KeyLeft);
X else if (strncmp ("KEY_BACKSPACE", line, 13) == 0)
X sscanf (s1, "%d", &KeyBackspace);
X else if (strncmp ("KEY_EOL", line, 13) == 0)
X sscanf (s1, "%d", &KeyEOL);
X else if (strncmp ("KEY_DL", line, 14) == 0)
X sscanf (s1, "%d", &KeyDL);
X else if (strncmp ("KEY_DC", line, 6) == 0)
X sscanf (s1, "%d", &KeyDC);
X else if (strncmp ("KEY_IC", line, 6) == 0)
X sscanf (s1, "%d", &KeyIC);
X
X /* Other Keys */
X else if (strncmp ("KEY_HELP", line, 8) == 0)
X sscanf (s1, "%d", &KeyHelp);
X else if (strncmp ("KEY_REFRESH", line, 10) == 0)
X sscanf (s1, "%d", &KeyRedraw);
X else if (strncmp ("KEY_ACCEPT", line, 10) == 0)
X sscanf (s1, "%d", &KeyAccept);
X else if (strncmp ("KEY_CANCEL", line, 10) == 0)
X sscanf (s1, "%d", &KeyCancel);
X else if (strncmp ("KEY_SAVE", line, 8) == 0)
X sscanf (s1, "%d", &KeySave);
X else if (strncmp ("KEY_PRINT", line, 9) == 0)
X sscanf (s1, "%d", &KeyPrint);
X else if (strncmp ("KEY_EXITMENU", line, 12) == 0)
X sscanf (s1, "%d", &KeyExitMenu);
X else if (strncmp ("KEY_MAINMENU", line, 12) == 0)
X sscanf (s1, "%d", &KeyMainMenu);
X else if (strncmp ("KEY_PREVMENU", line, 12) == 0)
X sscanf (s1, "%d", &KeyPrevMenu);
X else if (strncmp ("KEY_GNAME", line, 9) == 0)
X sscanf (s1, "%d", &KeyGname);
X else if (strncmp ("KEY_POPGNAME", line, 12) == 0)
X sscanf (s1, "%d", &KeyPopGname);
X else if (strncmp ("KEY_TOC", line, 7) == 0)
X sscanf (s1, "%d", &KeyTOC);
X }
X fclose (menuinit);
X return (0);
X}
X/* Paul J. Condie 11/88 */
SHAR_EOF
echo "File SetTerm.c is complete"
chmod 0644 SetTerm.c || echo "restore of SetTerm.c fails"
echo "x - extracting systime.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > systime.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "@(#)systime.c 1.2 DeltaDate 5/6/88 ExtrDate 1/22/90";
X#endif
X
X#include <stdio.h>
X#include <time.h>
X
Xsystime (timeStr, mask)
X
X char *timeStr, *mask;
X{
X long tloc ;
X struct tm *ltime, *localtime() ;
X char tmpstr[4] ;
X int tmpval;
X
X tloc = time((long *) 0) ;
X ltime = localtime(&tloc) ;
X
X ltime->tm_mon++;
X
X if (mask == NULL)
X {
X sprintf (timeStr, "%2d:%02d:%02d", ltime->tm_hour, ltime->tm_min,
X ltime->tm_sec) ;
X }
X else
X while (*mask != '\0')
X {
X switch (*mask)
X {
X case 'H':
X if (ltime->tm_hour > 12)
X {
X tmpval = ltime->tm_hour - 12;
X sprintf (tmpstr, "%2d", tmpval);
X }
X else
X sprintf (tmpstr, "%2d", ltime->tm_hour);
X break;
X case 'M':
X sprintf (tmpstr, "%02d", ltime->tm_min);
X break;
X case 'S':
X sprintf (tmpstr, "%02d", ltime->tm_sec);
X break;
X case 'I':
X sprintf (tmpstr, "%2d", ltime->tm_hour);
X break;
X case 'Z':
X if (ltime->tm_hour >= 12)
X strcpy (tmpstr, "PM");
X else
X strcpy (tmpstr, "AM");
X break;
X case 'z':
X if (ltime->tm_hour >= 12)
X strcpy (tmpstr, "pm");
X else
X strcpy (tmpstr, "am");
X break;
X default:
X *timeStr = *mask;
X timeStr++;
X mask++;
X continue;
X } /* end switch */
X *timeStr = tmpstr[0];
X timeStr++;
X *timeStr = tmpstr[1];
X timeStr++;
X mask += 2;
X } /* end while */
X
X *timeStr = '\0';
X return (0);
X}
SHAR_EOF
chmod 0444 systime.c || echo "restore of systime.c fails"
echo "x - extracting sysdate.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > sysdate.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "@(#)sysdate.c 1.1 DeltaDate 9/6/87 ExtrDate 1/22/90";
X#endif
X
X#include <time.h>
X
Xsysdate (dateStr, mask)
X
X char *dateStr, *mask;
X{
X long tloc ;
X struct tm *ltime, *localtime() ;
X
Xstatic char *shortmon[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
X "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
X
Xstatic char *longmon[]=
X {"January","February","March","April","May","June",
X "July","August","September","October","November","December"};
X
Xstatic char *shortday[]= {"sun","mon","tue","wed","thr","fri","sat"};
X
Xstatic char *longday[]= {"Sunday","Monday","Tuesday","Wednessday",
X "Thursday", "Friday", "Saturday"};
X
X
X tloc = time ((long *) 0) ;
X ltime = localtime (&tloc) ;
X
X while (*mask != '\0')
X {
X
X/*
X** Process month
X*/
X if (strncmp (mask, "mmmmm", 5) == 0)
X {
X sprintf (dateStr, "%s", longmon[ltime->tm_mon]);
X mask += 5;
X dateStr += strlen (longmon[ltime->tm_mon]);
X continue;
X }
X else
X if (strncmp (mask, "mmm", 3) == 0)
X {
X sprintf (dateStr, "%s", shortmon [ltime->tm_mon]);
X mask += 3;
X dateStr += 3;
X continue;
X }
X else
X if (strncmp (mask, "mm", 2) == 0)
X {
X sprintf (dateStr, "%.2d", ltime->tm_mon + 1);
X mask += 2;
X dateStr += 2;
X continue;
X }
X
X/*
X** Process day
X*/
X if (strncmp (mask, "ddddd", 5) == 0)
X {
X sprintf (dateStr, "%s", longday [ ltime->tm_wday ]);
X mask += 5;
X dateStr += strlen (longday[ltime->tm_wday]);
X continue;
X }
X else
X if (strncmp (mask, "ddd", 3) == 0)
X {
X sprintf (dateStr, "%s", shortday [ltime->tm_wday]);
X mask += 3;
X dateStr += 3;
X continue;
X }
X else
X if (strncmp (mask, "dd", 2) == 0)
X {
X sprintf (dateStr, "%.2d", ltime->tm_mday);
X mask += 2;
X dateStr += 2;
X continue;
X }
X if (strncmp (mask, "jjj", 3) == 0)
X {
X sprintf (dateStr, "%3d", ltime->tm_yday + 1);
X mask += 3;
X dateStr += 3;
X continue;
X }
X
X/*
X** Process year
X*/
X if (strncmp (mask, "yyyy", 4) == 0)
X {
X sprintf (dateStr, "19%.2d", ltime->tm_year);
X mask += 4;
X dateStr += 4;
X continue;
X }
X else
X if (strncmp (mask, "yy", 2) == 0)
X {
X sprintf (dateStr, "%.2d", ltime->tm_year);
X mask += 2;
X dateStr += 2;
X continue;
X }
X
X/*
X** Process mask
X*/
X *dateStr = *mask;
X dateStr++;
X mask++;
X }
X
X *dateStr = '\0';
X return (0);
X}
SHAR_EOF
chmod 0444 sysdate.c || echo "restore of sysdate.c fails"
echo "x - extracting checkmail.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > checkmail.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "@(#)checkmail.c 1.3 DeltaDate 1/22/90 ExtrDate 1/22/90";
X#endif
X
X#include <curses.h>
X#include <signal.h>
X
X#ifndef BELL
X#define BELL printf ("%c", 7);
X#endif
X
Xextern int mailrow;
Xextern int mailcol;
X
Xcheckmail ()
X{
X int rc;
X static int mailcheck = 30; /* default */
X
X#ifdef ALARM
X alarm (0); /* turn off alarm */
X#endif
X if ((rc = anymail()) != FALSE)
X {
X /* we got mail */
X attrset (A_REVERSE);
X if (rc == 1 || rc == 3)
X mvprintw (mailrow,mailcol, "MAIL");
X else
X mvprintw (mailrow,mailcol, "EMAIL");
X attrset (A_NORMAL);
X#ifdef ALARM
X BELL;
X#endif
X }
X else
X mvprintw (mailrow,mailcol, " ");
X
X#ifdef ALARM
X signal (SIGALRM, checkmail);
X if ((char *)getenv("MAILCHECK") != (char *)0)
X sscanf ((char *)getenv("MAILCHECK"), "%d", &mailcheck);
X if (mailcheck < 10)
X mailcheck = 10;
X alarm (mailcheck); /* set alarm again */
X#endif
X}
X/* Paul J. Condie 4/88 */
SHAR_EOF
chmod 0444 checkmail.c || echo "restore of checkmail.c fails"
echo "x - extracting anymail.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > anymail.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "@(#)anymail.c 1.3 DeltaDate 1/22/90 ExtrDate 1/22/90";
X#endif
X
X/* FUNCTION: anymail()
X** If the first word in the mail file is Forward it returns
X** no mail.
X** RETURNS: FALSE - no unix or email.
X** 1 - unix mail.
X** 2 - email
X** 3 - both unix and email
X*/
X#include <stdio.h>
X#include <sys/types.h>
X#include <sys/stat.h>
X
Xanymail ()
X{
X FILE *fopen(), *fp;
X char *getenv();
X struct stat Statbuf;
X int rc = 0; /* return code */
X char *mailfile;
X static int FIRST_TIME = 1;
X static int FORWARDFLAG = 0;
X char tmpstr[80];
X
X
X if ((mailfile = getenv("MAIL")) != (char *)0)
X if (stat (mailfile, &Statbuf) == 0)
X {
X /* there is a mail file */
X if (Statbuf.st_size > 0)
X {
X /* there is something in the mail file */
X if (FIRST_TIME)
X {
X /* check to see if mail is being Forwarded */
X FIRST_TIME = 0;
X if ((fp=fopen (mailfile, "r")) != (FILE *)NULL)
X {
X fscanf (fp, "%s", tmpstr);
X if (strcmp (tmpstr, "Forward") == 0)
X FORWARDFLAG = 1;
X fclose (fp);
X }
X }
X if (!FORWARDFLAG)
X rc = 1;
X }
X }
X if ((mailfile = getenv("EMAIL")) != (char *)0)
X if (stat (mailfile, &Statbuf) == 0)
X {
X if (Statbuf.st_size > 0)
X rc = rc == 1 ? 3 : 2;
X }
X return (rc);
X}
SHAR_EOF
chmod 0444 anymail.c || echo "restore of anymail.c fails"
echo "x - extracting setenv.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > setenv.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "@(#)setenv.c 1.2 DeltaDate 1/22/90 ExtrDate 1/22/90";
X#endif
X
X/* PROGRAM NAME: @(#)setenv.c 1.2
X* REVISION DATE:
X* REVISION LEVEL:
X* CONTACT PERSON: Library Staff
X* AUTHOR: Stephen J. Muir
X* ABSTRACT: setenv/delenv - add, change or delete environment variables
X* KEYWORDS: environment, shell, getenv
X* DESCRIPTION: Setenv allows a program to set environment variables.
X* delenv allows a program to delete environment variables.
X* PROJECTS:
X* SOFTWARE CATEGORY: application development tools
X* COPYRIGHT: Notice
X This is the confidential, unpublished property of Pacific Bell.
X Receipt or possession of it does not convey any rights to divulge,
X reproduce, use, or allow others to use it without the specific written
X authorization of Pacific Bell and use must conform strictly to
X the license agreement between user and Pacific Bell.
X
X COPYRIGHT (c) 1986 Pacific Bell. All Rights Reserved.
X
X* OPERATING ENVIRONMENT: all standard AT&T UNIX machines.
X* SOFTWARE DEPENDENCIES: none.
X* HARDWARE DEPENDENCIES:
X* LIMITATIONS:
X* DOCUMENTATION: setenv.3 manual page
X* COMPILE COMMAND: cc setenv.c
X* SIZE:
X* SUPPORT LEVEL:
X* MODULE LIST:
X*/
X# include <string.h>
X
X/* This is the number of extra array elements to allocate each time it becomes
X * necessary.
X */
X# define INC 10
X
Xextern char **environ, *malloc ();
Xextern int free ();
X
Xstatic char **original, **current, **limit;
X
X/* This routine should be called only once (when either "setenv" or "delenv" is
X * called for the first time). It would only be called again if it fails due
X * to lack of memory. It makes a copy of the original environment because the
X * original environment array and its elements were not obtained from "malloc"
X * and the "free" routine cannot, therefore, be called with any of its
X * elements.
X *
X * return values:
X * 0: success
X * -1: out of memory - nothing has changed
X */
Xstatic /* this is a private routine */
Xinitialise ()
X { register char **old, **new_ptr, *tmp, **new_env;
X
X /* count number of existing strings */
X for (old = environ; *old; ++old)
X ;
X
X /* make space for extra strings */
X if ((new_ptr =
X new_env =
X (char **)malloc (sizeof (char **) * ((old - environ) + INC + 1))
X )
X == 0
X )
X return (-1);
X
X /* "limit" points to the last element of the array -- it is used to
X * decide when to recreate it
X */
X limit = new_env + (old - environ) + INC;
X
X /* copy across old strings */
X for (old = environ; *old; ++old)
X { if ((tmp = malloc (strlen (*old) + 1)) == 0)
X { /* out of memory -- undo everything */
X while (new_ptr != new_env)
X free (*--new_ptr);
X free ((char *)new_ptr);
X return (-1);
X }
X strcpy (tmp, *old);
X *new_ptr++ = tmp;
X }
X /* "current" points to the null pointer at the end of the array */
X *(current = new_ptr) = 0;
X
X /* this is really just a flag to say it's initialised */
X original = environ;
X /* overwrite old environment with new */
X environ = new_env;
X return (0);
X }
X
X/* This is a special routine to compare a string "name" of the form "NAME" with
X * a string "name_value" of the form "NAME=VALUE". It returns zero if the
X * comparison is successful
X */
Xstatic /* this is a private routine */
Xdiffer (name, name_value)
X char *name, *name_value;
X { while (*name && *name_value)
X if (*name++ != *name_value++)
X return (1);
X return (*name_value != '=');
X }
X
X/* This routine deletes an environment variable, e.g. delenv ("SHELL");
X *
X * return values:
X * 0: success
X * 1: environment variable not found
X * -1: out of memory - nothing has changed
X */
Xdelenv (name)
X char *name;
X { register char **ptr;
X
X /* initialise if necessary */
X if (original == 0 && initialise ())
X return (-1);
X
X /* attempt to find it */
X for (ptr = environ; *ptr && differ (name, *ptr); ++ptr)
X ;
X if (*ptr == 0)
X return (1); /* not found */
X
X /* delete it */
X free (*ptr);
X *ptr = *--current;
X *current = 0;
X return (0);
X }
X
X/* This routine sets a new environment variable, replacing an existing one
X * where appropriate, e.g. setenv ("SHELL", "/bin/csh");
X *
X * return values:
X * 0: success
X * -1: out of memory - nothing has changed
X */
Xsetenv (name, value)
X char *name, *value;
X { register char **old, **new_ptr, *cp, *tmp, **new_env;
X
X /* initialise if necessary */
X if (original == 0 && initialise ())
X return (-1);
X
X /* allocate space for the new string */
X if ((cp = tmp = malloc (strlen (name) + strlen (value) + 2)) == 0)
X return (-1);
X
X /* find an existing one if we can - we do this now as we will lose
X * the original "name" pointer in the while loop following
X */
X for (old = environ; *old && differ (name, *old); ++old)
X ;
X
X /* make the new entry */
X while (*name)
X *cp++ = *name++;
X *cp++ = '=';
X while (*value)
X *cp++ = *value++;
X *cp = '\0';
X
X /* case 1: overwrite previous value */
X if (*old)
X { free (*old);
X *old = tmp;
X }
X
X /* case 2: no previous value and no space left - allocate more */
X else if (current == limit)
X { if ((new_ptr =
X new_env =
X (char **)malloc (sizeof (char **) *
X ((old - environ) + INC + 1)
X )
X ) == 0
X )
X { free (tmp);
X return (-1);
X }
X limit = new_env + (old - environ) + INC;
X for (old = environ; *old; )
X *new_ptr++ = *old++;
X *new_ptr++ = tmp;
X *(current = new_ptr) = 0;
X free ((char *)environ);
X environ = new_env;
X }
X
X /* case 3: no previous value and there is enough space */
X else
X { *current++ = tmp;
X *current = 0;
X }
X return (0);
X }
SHAR_EOF
chmod 0444 setenv.c || echo "restore of setenv.c fails"
echo "x - extracting strmatch.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > strmatch.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "@(#)strmatch.c 1.1 DeltaDate 10/20/88 ExtrDate 1/22/90";
X#endif
X
X#ifndef TRUE
X#define TRUE 1
X#endif
X#ifndef FALSE
X#define FALSE 0
X#endif
X#ifndef BOOL
X#define BOOL int
X#endif
X
X#define M_ALL '*'
X#define M_ONE '?'
X#define M_SET '['
X#define M_RNG '-'
X#define M_END ']'
X
X
XBOOL strmatch (name, pat)
X
X char *name, *pat;
X{
X char c, k;
X BOOL ok;
X
X
X while ((c = *pat++) != '\0')
X {
X switch (c)
X {
X case M_ONE:
X if (*name++ == '\0') return (FALSE);
X break;
X
X case M_ALL:
X if (*pat == '\0') return (TRUE);
X for (; *name != '\0'; ++name)
X if (strmatch (name, pat)) return (TRUE);
X return (FALSE);
X
X case M_SET:
X ok = FALSE;
X k = *name++;
X while ((c = *pat++) != M_END)
X if (*pat == M_RNG)
X {
X if (c <= k && k <= pat[1])
X ok = TRUE;
X pat += 2;
X }
X else
X if (c == k) ok = TRUE;
X if (!ok) return (FALSE);
X break;
X
X default:
X if (*name++ != c) return (FALSE);
X break;
X }
X }
X return (*name == '\0');
X}
SHAR_EOF
chmod 0444 strmatch.c || echo "restore of strmatch.c fails"
echo "x - extracting setvar.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > setvar.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "%W% DeltaDate %G% ExtrDate %H%";
X#endif
X
X#include <curses.h>
X#include <ctype.h>
X#include <string.h>
X#include "menu.h"
X
X
X
Xsetvariable (cptr)
X char **cptr; /* command pointer var=value */
X{
X char *getenv();
X char *getval();
X char variable[100];
X char value[100];
X int rc; /* return code */
X int i, j;
X
X if (*cptr == (char *)NULL) return (EOF);
X
X /* skip junk characters */
X for (;**cptr != '\0' && (!isalpha(**cptr)) && (!isdigit(**cptr));
X (*cptr)++)
X if (**cptr == '!')
X break;
X ;
X if (**cptr == '\0') return (EOF); /* end of line */
X
X /* get the enviroment variable */
X for (i = 0; **cptr != '=' && **cptr != '\0'; i++, (*cptr)++)
X variable[i] = **cptr;
X variable[i] = '\0';
X if (strcmp (variable, "") == 0 || **cptr != '=')
X {
X BEEP;
X mvprintw (ErrRow-2, 0,
X "Error occured while setting enviroment variable %s",
X variable);
X shutdown ();
X }
X (*cptr)++; /* get past the = */
X
X strcpy (value, getval (cptr, '0'));
X
X /* set the enviroment variable */
X if (variable[0] == '!')
X {
X /*
X ** if !
X ** then only set if not already set
X */
X /* junk ! - shift left one */
X for (i = 0; variable[i] != '\0'; i++)
X variable[i] = variable[i+1];
X rc = 0;
X if (getenv(variable) == (char *)NULL)
X rc = setenv (variable, value);
X }
X else
X rc = setenv (variable, value);
X if (rc != 0)
X {
X BEEP;
X mvprintw (ErrRow-2, 0,
X "Error occured while setting enviroment variable %s",
X variable);
X shutdown ();
X }
X return (0);
X}
X/* Paul J. Condie 10/88 */
SHAR_EOF
chmod 0644 setvar.c || echo "restore of setvar.c fails"
echo "x - extracting drawline.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > drawline.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "@(#)drawline.c 1.2 DeltaDate 1/22/90 ExtrDate 1/22/90";
X#endif
X
X#include <curses.h>
X#include <term.h>
X
X#define DumbLine 1 /* A_NORMAL */
X#define StandoutLine 2 /* A_STANDOUT */
X#define SingleLine 3 /* A_ALTCHARSET */
X#define MosaicLine 4 /* A_ALTCHARSET */
X#define DiamondLine 5 /* A_ALTCHARSET */
X#define DotLine 6 /* A_ALTCHARSET */
X#define PlusLine 7 /* A_ALTCHARSET */
X
X#define CANDRAWGRAPHICS (enter_alt_charset_mode != NULL && \
X strcmp(enter_alt_charset_mode, "") != 0)
X
X
Xdrawline (win, row, trythis, trythat, box)
X WINDOW *win;
X int row;
X int trythis;
X int trythat;
X int box;
X{
X int col;
X int hchar; /* horizonal char */
X int lchar; /* left char */
X int rchar; /* right char */
X int attribute;
X int boxtype;
X
X
X boxtype = trythis;
X attribute = (boxtype == DumbLine || boxtype == StandoutLine) ? A_NORMAL : A_ALTCHARSET;
X if (attribute == A_ALTCHARSET)
X /* can this terminal do graphics ? */
X boxtype = CANDRAWGRAPHICS ? trythis : trythat;
X
X switch (boxtype)
X {
X case DumbLine:
X /* draw a dumb line */
X hchar = '-';
X lchar = '+';
X rchar = '+';
X break;
X
X case StandoutLine:
X /* draw a standout line */
X attribute = A_STANDOUT;
X hchar = ' ';
X lchar = ' ';
X rchar = ' ';
X break;
X
X case SingleLine:
X /* attempt to draw a graphic single line */
X hchar = 'q';
X lchar = 't';
X rchar = 'u';
X break;
X
X case MosaicLine:
X hchar = 'a';
X lchar = 'a';
X rchar = 'a';
X break;
X
X case DiamondLine:
X hchar = '`';
X lchar = '`';
X rchar = '`';
X break;
X
X case DotLine:
X hchar = '~';
X lchar = '~';
X rchar = '~';
X break;
X
X case PlusLine:
X hchar = 'n';
X lchar = 'n';
X rchar = 'n';
X break;
X break;
X
X default:
X return (-1);
X }
X
X#ifdef BSD
X standout ();
X#else
X wattrset (win, attribute);
X#endif
X for (col = 0; col <= COLS-1; col++)
X mvwaddch (win, row, col, hchar);
X
X if (box)
X {
X mvwaddch (win, row, 0, lchar);
X mvwaddch (win, row, COLS-1, rchar);
X }
X
X#ifdef BSD
X standend ();
X#else
X wattrset (win, A_NORMAL);
X#endif
X return (0);
X}
X/* Paul J. Condie 10/88 */
SHAR_EOF
chmod 0444 drawline.c || echo "restore of drawline.c fails"
echo "x - extracting initmenu.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > initmenu.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "%W% DeltaDate %G% ExtrDate %H%";
X#endif
X
X#include <curses.h>
X#include "menu.h"
X
Xinitmenu (menu)
X struct MenuInfo *menu;
X{
X /* set default menu settings */
X menu->row_cursor = LINES - 2;
X menu->col_cursor = COLS - 4;
X menu->boxtype = 0;
X menu->linetype = 0;
X menu->srn[0] = (struct ScreenInfo *)NULL;
X menu->after_menu = (char *)NULL;
X}
SHAR_EOF
chmod 0644 initmenu.c || echo "restore of initmenu.c fails"
echo "x - extracting keyboard.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > keyboard.c &&
X#include <curses.h>
X#include <term.h>
X#include "menu.h"
X
Xkeyboard ()
X{
X char *getenv();
X int ch;
X int wrow = 0; /* from row */
X int wcol = 10; /* from col */
X int sstart; /* scrool start row */
X int send; /* scrool end row */
X int prow; /* print row */
X int dflag=0;
X WINDOW *bwin;
X
X
X sstart = wrow + 10;
X send = wrow + 20;
X prow = sstart;
X
X mvprintw (1,0, "Keyboard");
X mvprintw (2,4, "Fun");
X
X drawbox (stdscr, wrow+1,wcol, wrow+23,wcol+40, StandoutLine,
X StandoutLine, FALSE, FALSE);
X mvprintw (2,wcol+40, "StandoutLine");
X drawbox (stdscr, wrow+2,wcol+1, wrow+22,wcol+39, DumbLine, DumbLine,
X FALSE, FALSE);
X mvprintw (3,wcol+39, "DumbLine");
X
X /* to get around bug in curses of not turning attributes off */
X /*
X for (ch = 0; ch <= LINES; ch++)
X {
X mvprintw (ch,70, "hi");
X refresh ();
X mvprintw (ch,70, " ");
X }
X */
X
X /* terminal type */
X mvprintw (wrow+3, wcol+4, "Terminal = %s", getenv("TERM"));
X
X /* DrawLine ? */
X if (enter_alt_charset_mode == NULL ||
X strcmp (enter_alt_charset_mode, "") == 0)
X mvprintw (wrow+4, wcol+4, "Alternate Characters = No");
X else
X {
X dflag++;
X mvprintw (wrow+4, wcol+4, "Alternate Characters = Yes");
X
X mvprintw (5,wcol+44, "Check termcap/terminfo");
X mvprintw (6,wcol+44, "setting if the alternate");
X mvprintw (7,wcol+44, "character lines below");
X mvprintw (8,wcol+44, "don't look right.");
X
X bwin = newwin (13, 27, 10, wcol+43);
X drawbox (bwin, 1,1, 13,27, SingleLine, SingleLine, FALSE,FALSE);
X drawbox (bwin, 2,2, 12,26, MosaicLine, MosaicLine, FALSE,FALSE);
X drawbox (bwin, 3,3, 11,25, DiamondLine, DiamondLine, FALSE,FALSE);
X drawbox (bwin, 4,4, 10,24, DotLine, DotLine, FALSE,FALSE);
X drawbox (bwin, 5,5, 9,23, PlusLine, PlusLine, FALSE,FALSE);
X
X mvwprintw (bwin, 0,7, " SingleLine ");
X mvwprintw (bwin, 1,7, " MosaicLine ");
X mvwprintw (bwin, 2,7, " DiamondLine ");
X mvwprintw (bwin, 3,7, " DotLine ");
X mvwprintw (bwin, 4,7, " PlusLine ");
X }
X
X /* Show all attributes */
X mvprintw (11,0, "Curses");
X mvprintw (12,0, "Attributes");
X
X attrset (A_NORMAL);
X mvprintw (14,0, "NORMAL");
X attrset (A_STANDOUT);
X mvprintw (15,0, "STANDOUT");
X attrset (A_REVERSE);
X mvprintw (16,0, "REVERSE");
X attrset (A_UNDERLINE);
X mvprintw (17,0, "UNDERLINE");
X attrset (A_BLINK);
X mvprintw (18,0, "BLINK");
X attrset (A_DIM);
X mvprintw (19,0, "DIM");
X attrset (A_BOLD);
X mvprintw (20,0, "BOLD");
X
X attrset (A_NORMAL);
X
X /* key codes */
X mvprintw (wrow+6,wcol+8, "Press a Key");
X mvprintw (wrow+7,wcol+8, "Press zero to exit.");
X
X /* set up scroll */
X scrollok (stdscr, TRUE);
X wsetscrreg (stdscr, sstart, send);
X
X mvprintw (sstart-2, wcol+4, " (.menuinit)");
X attrset (A_BOLD);
X mvprintw (sstart-1, wcol+4, "char dec hex octal");
X attrset (A_NORMAL);
X do
X {
X refresh ();
X if (dflag)
X {
X touchwin (bwin);
X wrefresh (bwin);
X }
X move (wrow+6, wcol+8+strlen("Press a Key")+1);
X refresh ();
X ch = getch ();
X
X /*
X nodelay (stdscr, TRUE);
X while ((ch = getch()) != -1)
X print ch
X nodelay (stdscr, FALSE);
X */
X
X if (prow > send-2)
X {
X scroll (stdscr);
X attrset (A_STANDOUT);
X mvprintw (prow+1,wcol-1, " ");
X mvprintw (prow+1,wcol+39, " ");
X attrset (A_NORMAL);
X
X mvprintw (prow+1,wcol, "|");
X mvprintw (prow+1,wcol+38, "|");
X }
X else
X prow++;
X if (ch == '\t')
X mvprintw (prow,wcol+4, "\t\\t\t%d\t%x\t%o", ch,ch,ch);
X else if (ch == '\n')
X mvprintw (prow,wcol+4, "\t\\n\t%d\t%x\t%o",
X ch,ch,ch);
X else if (ch == '\r')
X mvprintw (prow,wcol+4, "\t\\r\t%d\t%x\t%o",
X ch,ch,ch);
X else if (ch == '\b')
X mvprintw (prow,wcol+4, "\t\\b\t%d\t%x\t%o",
X ch,ch,ch);
X else
X mvprintw (prow,wcol+4, "\t%c\t%d\t%x\t%o", ch,ch,ch,ch);
X
X } while (ch != '0');
X if (dflag)
X {
X touchwin (bwin);
X wrefresh (bwin);
X }
X}
X/* Paul J. Condie */
SHAR_EOF
chmod 0644 keyboard.c || echo "restore of keyboard.c fails"
echo "x - extracting runscreen.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > runscreen.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "%W% DeltaDate %G% ExtrDate %H%";
X#endif
X
X/* FUNCTION: runscreen()
X*/
X
X#include <curses.h>
X#include "GetInput.h"
X#include "menu.h"
X#include "terminal.h"
X
X#define SRN menu->srn[sidx]
X#define FLD menu->srn[sidx]->field[fidx]
X
Xextern int debug;
X
X
Xrunscreen (screen_name, menu, opnumber)
X char screen_name[];
X struct MenuInfo *menu;
X int opnumber;
X{
X FILE *popen(), *pp;
X char *getenv();
X char *getval();
X char *findfile();
X char *format();
X char *malloc();
X WINDOW *swin;
X union FldUnion Fld;
X int rc; /* return code */
X int exitkey;
X int sidx;
X int fidx = 0;
X char fielddata[MAXFIELDS+1][100];
X int fieldcount;
X char *promptptr = (char *)NULL;
X char fmtdefault[100];/* formated default value */
X char *wsptr; /* working storage pointer */
X int helpflag;
X char helpfile[80];
X char tmptitle[100];
X char Title[100]; /* tmp for AUTO */
X int Rows; /* tmp for AUTO */
X int Cols; /* tmp for AUTO */
X int toprow;
X int leftcol;
X int i; /* tmp loop var */
X char value[200];
X char input[100]; /* what user inputted */
X char *tmprange[MAXFIELDS+1];
X int NoInput;
X
X
X
Xherewegoagain:
X
X helpflag = TRUE;
X
X /* Find the screen definition */
X for (sidx = 0; menu->srn[sidx] != (struct ScreenInfo *)NULL &&
X sidx <= MAXSCREENS; sidx++)
X {
X if (strcmp (screen_name, menu->srn[sidx]->name) == 0)
X break;
X }
X if (sidx > MAXSCREENS || menu->srn[sidx] == (struct ScreenInfo *)NULL)
X {
X BEEP;
X mvprintw (ErrRow-2,0, "Could not find your screen definition.");
X shutdown ();
X }
X
X /* loop through each field */
X /* save current field data - if KEY_CANCEL reset to this */
X for (fidx = 0; SRN->field[fidx] != (struct FieldInfo *)NULL &&
X fidx <= MAXFIELDS; fidx++)
X {
X if (getenv(FLD->name) != (char *)NULL)
X strcpy (fielddata[fidx], getenv (FLD->name));
X else
X strcpy (fielddata[fidx], "");
X
X
X /* range values */
X if (strcmp (FLD->range, "") == 0)
X tmprange[fidx] = (char *)NULL;
X else if (FLD->range[0] != '`' &&
X FLD->range[strlen(FLD->range)-1] != '`')
X {
X /* not a command */
X tmprange[fidx] = (char *)malloc (strlen (FLD->range)+4);
X strcpy (tmprange[fidx], FLD->range);
X }
X else if (FLD->range[0] == '`' &&
X FLD->range[strlen(FLD->range)-1] == '`' &&
X tmprange[fidx] == (char *)NULL)
X {
X /* we have a command to run - get new range values */
X /* junk the grave accents and ! if there is one */
X tmprange[fidx] = (char *) malloc (MAXLEN+4);
X strcpy (tmprange[fidx], FLD->range+1);
X if (tmprange[fidx][0] == '!')
X strcpy (tmprange[fidx], FLD->range+2);
X tmprange[fidx][strlen(tmprange[fidx])-1] = '\0';
X
X if (promptptr == (char *)NULL ||
X strcmp (promptptr, "DONT_CLEAR") != 0)
X {
X move (ErrRow,0); clrtoeol();
X mvprintw (ErrRow,1, "Working ...");
X refresh ();
X }
X if (debug)
X {
X fprintf (stderr,
X "\n[runscreen] <%s> popen=:%s:",
X SRN->name, tmprange[fidx]);
X fflush (stderr);
X }
X if ((pp = popen (tmprange[fidx], "r")) == (FILE *)NULL)
X {
X BEEP;
X mvprintw (ErrRow-2,0,
X "Could not open pipe = %s", tmprange[fidx]);
X shutdown ();
X }
X fgets (tmprange[fidx], MAXLEN-1, pp);
X tmprange[fidx][strlen(tmprange[fidx])-1] = '\0'; /* junk \n */
X pclose (pp);
X }
X }
X
X
X /* set tmp variables used for AUTO */
X strcpy (Title, SRN->title);
X Rows = SRN->rows;
X Cols = SRN->cols;
X
X /* if title is set to AUTO then use the description text */
X if (atoi(Title) == AUTO)
X {
X strcpy (Title, menu->option[opnumber]->description);
X /* junk ending period if there is one */
X if (Title[strlen(Title)-1] == '.')
X Title[strlen(Title)-1] = '\0';
X }
X
X /* for SET and MENU type determine field_length */
X for (fidx = 0; SRN->field[fidx] != (struct FieldInfo *)NULL &&
X fidx <= MAXFIELDS; fidx++)
X {
X /* for SET and MENU types get field_length */
X if (FLD->type == SET || FLD->type == MENU)
X FLD->length = GetSetLen (tmprange[fidx]);
X }
X
X /* calculate window_rows & window_cols if AUTO */
X if (Rows == AUTO)
X {
X /* field with largest row + 4 */
X Rows = 0;
X for (fidx = 0; SRN->field[fidx] != (struct FieldInfo *)NULL &&
X fidx <= MAXFIELDS; fidx++)
X {
X if (FLD->row > Rows)
X Rows = FLD->row;
X }
X
X /* make sure window is big enough to hold text stuff */
X for (i = 0; SRN->textinfo[i] != (struct TextInfo *)NULL; i++)
X if (SRN->textinfo[i]->row + 1 > Rows)
X Rows = SRN->textinfo[i]->row + 1;
X Rows += 3;
X }
X if (Cols == AUTO)
X {
X /* field with largest col + length + 4 or title */
X /* make sure screen is big enough to hold the title */
X wsptr = Title;
X strcpy (tmptitle, getval (&wsptr, '1'));
X Cols = strlen (tmptitle);
X for (fidx = 0; SRN->field[fidx] != (struct FieldInfo *)NULL &&
X fidx <= MAXFIELDS; fidx++)
X {
X if (strlen(FLD->mask) > 0)
X {
X if ((FLD->col + strlen(FLD->mask) + 1) > Cols)
X Cols = FLD->col + strlen(FLD->mask) + 1;
X }
X else
X if ((FLD->col + FLD->length + 1) > Cols)
X Cols = FLD->col + FLD->length + 1;
X }
X
X /* make sure window is big enough to hold text stuff */
X for (i = 0; SRN->textinfo[i] != (struct TextInfo *)NULL; i++)
X if (SRN->textinfo[i]->col +
X strlen(SRN->textinfo[i]->text) + 1 > Cols)
X Cols = SRN->textinfo[i]->col +
X strlen(SRN->textinfo[i]->text) + 1;
X Cols += 2;
X }
X
X /* use environment variable if there is one */
X wsptr = SRN->toprowvar;
X if (strcmp (SRN->toprowvar, "") != 0)
X toprow = atoi (getval (&wsptr, '1'));
X else
X toprow = SRN->toprow;
X wsptr = SRN->leftcolvar;
X if (strcmp (SRN->leftcolvar, "") != 0)
X leftcol = atoi (getval (&wsptr, '1'));
X else
X leftcol = SRN->leftcol;
X
X if (toprow == AUTO)
X {
X /*
X ** Figure out where to put the screen
X ** try to put screen as close to the option as possible
X */
X toprow = menu->option[opnumber]->row - 2;
X /*
X for (rc = 0, leftcol = 0; rc < menu->optioncount ; rc++)
X if (strlen (menu->option[rc]->description) > leftcol)
X leftcol = strlen (menu->option[rc]->description);
X leftcol = menu->option[opnumber]->col +
X ((leftcol + 4) / 2);
X */
X leftcol = menu->option[opnumber]->col +
X strlen(menu->option[opnumber]->description) + 4;
X
X /* make sure it fits on the screen */
X if ((toprow + Rows) > LINES-1)
X toprow = LINES - Rows - 1;
X toprow = toprow < 0 ? 0 : toprow;
X
X if ((leftcol + Cols + 2) > COLS)
X leftcol = COLS - Cols - 1;
X leftcol = leftcol < 0 ? 0 : leftcol;
X }
X
X
X /* create the window */
X swin = newwin (Rows, Cols, toprow, leftcol);
X keypad (swin, TRUE);
X
X /*
X ** check if recalculation of rows & cols is necessary
X ** see newwin() for info on why
X */
X if (Rows == 0 && Cols == 0 &&
X toprow == 0 && leftcol == 0)
X {
X /* a full-screen was created */
X Rows = LINES-1;
X Cols = COLS;
X }
X else if (Rows == 0 || Cols == 0)
X {
X Rows = LINES - toprow;
X Cols = COLS - leftcol;
X if (Rows == LINES)
X Rows--;
X }
X
X
X if (strcmp (SRN->helpfile, "") == 0)
X helpflag = FALSE;
X else
X strcpy (helpfile, findfile (SRN->helpfile, ".",
X getenv("HELPDIR"), getenv("MENUDIR"), ""));
X drawbox (swin, 1,1, Rows,Cols, SRN->boxtype & 0777,
X StandoutLine, FALSE, helpflag);
X
X /* display title */
X wsptr = Title;
X strcpy (tmptitle, getval (&wsptr, '1'));
X wattrset (swin, A_STANDOUT);
X mvwprintw (swin, 0, ((Cols)/2)-(strlen(tmptitle)/2), "%s", tmptitle);
X wattrset (swin, A_NORMAL);
X
X /* display text stuff */
X for (i = 0; SRN->textinfo[i] != (struct TextInfo *)NULL; i++)
X displaytext (swin, SRN->textinfo[i]->row, SRN->textinfo[i]->col,
X SRN->textinfo[i]->text);
X
X /*
X ** Run fielddefaults if there is one and load results into $field_name
X */
X if (SRN->fielddefaults != (char *)NULL)
X {
X if (debug)
X {
X fprintf (stderr, "\n[runscreen] <%s> popen=:%s:",
X SRN->name, SRN->fielddefaults);
X fflush (stderr);
X }
X if (promptptr == (char *)NULL ||
X strcmp (promptptr, "DONT_CLEAR") != 0)
X {
X move (ErrRow,0); clrtoeol();
X mvprintw (ErrRow,1, "Working ...");
X refresh ();
X }
X if ((pp = popen (SRN->fielddefaults, "r")) == (FILE *)NULL)
X {
X BEEP;
X mvprintw (ErrRow-2,0, "Could not open pipe = %s",
X SRN->fielddefaults);
X shutdown ();
X }
X
X /* read and set each $field_name until no more input */
X rc = 99;
X for (fidx = 0; SRN->field[fidx] != (struct FieldInfo *)NULL &&
X fidx <= MAXFIELDS; fidx++)
X {
X strcpy (value, "");
X if (rc == EOF)
X {
X if (debug)
X {
X fprintf (stderr,
X "\n[runscreen] <%s> read nothing from popen",
X SRN->name);
X fprintf (stderr,
X "\n[runscreen] <%s> field %s =:%s:",
X SRN->name, FLD->name, value);
X fflush (stderr);
X }
X continue;
X }
X
X /* get a word from the pipe */
X rc = fscanf (pp, "%s", fmtdefault);
X if (rc == EOF) continue;
X if (debug)
X {
X fprintf (stderr,
X "\n[runscreen] <%s> read from popen=:%s:",
X SRN->name, fmtdefault);
X fflush (stderr);
X }
X
X
X /* check for a quoted value */
X if (fmtdefault[0] == '"')
X {
X /*
X ** found a quoted value
X ** read until another quote or end of line
X */
X strcpy (value, fmtdefault+1); /* junk 1st " */
X wsptr = value + strlen(value);
X if (*(wsptr-1) == '"')
X {
X /* quote is on first word */
X *(wsptr-1) = '\0';
X }
X else
X {
X while ((rc = fgetc (pp)) != EOF)
X {
X if ((*wsptr = (char)rc) == '"')
X {
X *wsptr = '\0';
X break;
X }
X wsptr++;
X } /* end while */
X }
X }
X else
X strcpy (value, fmtdefault);
X if (debug)
X {
X fprintf (stderr,
X "\n[runscreen] <%s> field %s =:%s:",
X SRN->name, FLD->name, value);
X fflush (stderr);
X }
X
X /* set $field_name with new value */
X adjustfield (value, FLD->adjust, FLD->length);
X rc = setenv (FLD->name, value);
X } /* end for each field */
X pclose(pp);
X }
X
X
X
X /*
X ** display field stuff
X ** Loop through each field
X ** print the label
X ** put in the field terminators
X ** get, format and print default value in getenv () or fielddefault
X */
X for (fidx = 0; SRN->field[fidx] != (struct FieldInfo *)NULL &&
X fidx <= MAXFIELDS;
X fidx++)
X {
X /* print label */
X if (strlen(FLD->label) > 0)
X mvwprintw (swin, FLD->row,
X FLD->col - strlen(FLD->label) - 2,
X "%s", FLD->label);
X
X /* print field terminators */
X if (strlen(FLD->terminator) > 0)
X {
X /* left */
X mvwprintw (swin, FLD->row, FLD->col - 1,
X "%c", FLD->terminator[0]);
X /* right */
X if (strlen(FLD->mask) > 0)
X mvwprintw (swin, FLD->row,
X FLD->col + strlen(FLD->mask),
X "%c", FLD->terminator[1]);
X else
X mvwprintw (swin, FLD->row,
X FLD->col + FLD->length,
X "%c", FLD->terminator[1]);
X }
X
X /* get default value from getenv() */
X if (getenv(FLD->name) != (char *)NULL)
X strcpy (value, getenv (FLD->name));
X else
X strcpy (value, "");
X
X /* format default value to the mask */
X strcpy (fmtdefault, format (value, FLD->mask, FLD->type));
X /* print default data */
X if (strlen(fmtdefault) > 0)
X mvwprintw (swin, FLD->row, FLD->col, "%s", fmtdefault);
X }
X fieldcount = fidx-1; /* save field count */
X
X
X /*
X ** GetInput() from fields untill KEY_CANCEL || KEY_ACCEPT ||
X ** exit_last_field || exit_on_cancel
X */
X if (promptptr == (char *)NULL ||
X strcmp (promptptr, "DONT_CLEAR") != 0)
X {
X move (ErrRow,0); clrtoeol();
X }
X fidx = 0; /* start with first field */
X
X do
X {
X NoInput = FLD->noinput;
X /* run before_inpput command */
X if (FLD->before_field != (char *)NULL)
X {
X char buf[BUFSIZ+1];
X
X if (promptptr == (char *)NULL ||
X strcmp (promptptr, "DONT_CLEAR") != 0)
X {
X move (ErrRow,0); clrtoeol();
X mvprintw (ErrRow,1, "Working ...");
X refresh ();
SHAR_EOF
echo "End of part 6"
echo "File runscreen.c is continued in part 7"
echo "7" > s2_seq_.tmp
exit 0
More information about the Alt.sources
mailing list