menu(1) part 5 of 14

Paul J. Condie pjc at pcbox.UUCP
Thu Dec 27 07:07:38 AEST 1990


#!/bin/sh
# this is part 5 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file ParseAuthr.c continued
#
CurArch=5
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 ParseAuthr.c"
sed 's/^X//' << 'SHAR_EOF' >> ParseAuthr.c
X      		if (strcmp (user, word) == 0)
X      		{
X			OKflag = TRUE;
X			break;
X      		}
X      		lptr = strchr (++lptr, ' ');
X   	}
X
X   	if (!OKflag)
X      		return (NOWAYJOSE);
X   	return (0);
X}
SHAR_EOF
echo "File ParseAuthr.c is complete"
chmod 0644 ParseAuthr.c || echo "restore of ParseAuthr.c fails"
echo "x - extracting ParseText.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ParseText.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
X#endif
X
X/*  FUNCTION:	ParseText()
X**		Parses keyword "TEXT".
X**  ARGS:	keyword		the keyword "TEXT"
X**		menufile	the unix menu file
X**		menu		menu structure
X**		gnames		holder of goto menu names
X**		gfiles		holder of goto menu names (menu file)
X**		gindex		# of gnames
X**  RETURNS:	0
X*/
X
X#include	<curses.h>
X#include	<ctype.h>
X#include	"menu.h"
X
X
XParseText (keyword, menufile, menu, KeyWord, ParseKey, gnames, gfiles, 
X	gindex, opnumber)
X
X	char		keyword[];
X	FILE		*menufile;
X	struct MenuInfo	*menu;
X	char		KeyWord[][MAXKEYLENGTH];
X	int		(*ParseKey[])();
X	char		gnames[][15], gfiles[][15];
X	int		*gindex;
X	int		*opnumber;
X{
X	char		*fgets(), line[BUFSIZE+1];
X	char		*getval();
X	int		row;
X	int		col;
X	char		fline[BUFSIZE+1];		/* formated line */
X	int		j;
X	int		i;
X	char		*ws;
X
X   	fgets (line, BUFSIZE, menufile);		/* read row, col */
X	ws = line;
X	SKIPJUNK (ws);
X	sscanf (ws, "%s", fline);			/* get row */
X	row = strcmp (fline, "-0") == 0 ? LINES : atoi(fline);
X	ws += strlen(fline);
X	SKIPJUNK (ws);
X	sscanf (ws, "%s", fline);			/* get col */
X	col = strcmp (fline, "-0") == 0 ? COLS : atoi(fline);
X	
X   	fgets (line, BUFSIZE, menufile);		/* read text */
X   	line[strlen(line)-1] = '\0';
X   	for (j = 0, i = 0; i < strlen (line); j++, i++)
X      		if (line[i] == '$')
X      		{
X			char	*sptr, *b4ptr;
X
X		     	sptr = b4ptr = line+i;
X		     	strcpy (fline+j, getval (&sptr, '$'));
X		     	i += (int)(sptr - b4ptr);
X		     	j += strlen (fline+j) - 1;
X		     	i--;
X      		}
X      		else
X      		{
X			fline[j] = line[i];
X      		}
X	fline[j] = '\0';
X
X	/*
X	**   If the row or column is negative
X	**     then  we use relative addressing
X	**     	     the row or col is subtracted from # of rows on screen.
X	*/
X	if (row < 0)
X		row = abs(row) > LINES ? LINES-1 : LINES+row-1;
X	else
X		row = row > LINES-1 ? LINES-1 : row;
X	if (col < 0)
X		col = abs(col) > COLS ? COLS-1 : COLS+col-1;
X	else
X		col = col > COLS-1 ? COLS-1 : col;
X   	displaytext (stdscr, row, col, fline);
X	return (0);
X}
X/* Paul J. Condie  4/88 */
SHAR_EOF
chmod 0644 ParseText.c || echo "restore of ParseText.c fails"
echo "x - extracting ParseCur.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ParseCur.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "@(#)ParseCur.c	1.5   DeltaDate 1/22/90   ExtrDate 1/22/90";
X#endif
X
X
X/*  FUNCTION:	ParseCursor()
X**		Parses keyword "CURSOR".
X**  ARGS:	keyword		the keyword "CURSOR"
X**		menufile	the unix menu file
X**		menu		menu structure
X**		gnames		holder of goto menu names
X**		gfiles		holder of goto menu names (menu file)
X**		gindex		# of gnames
X*/
X
X#include	<curses.h>
X#include	<ctype.h>
X#include	"menu.h"
X
X
XParseCursor (keyword, menufile, menu, KeyWord, ParseKey, gnames, gfiles, 
X	gindex, opnumber)
X
X	char		keyword[];
X	FILE		*menufile;
X	struct MenuInfo	*menu;
X	char		KeyWord[][MAXKEYLENGTH];
X	int		(*ParseKey[])();
X	char		gnames[][15], gfiles[][15];
X	int		*gindex;
X	int		*opnumber;
X{
X	char	*fgets(), line[BUFSIZE+1];
X	char	*ws;
X	char	tmpstr[20];
X
X   	fgets (line, BUFSIZE, menufile);
X	ws = line;
X	SKIPJUNK (ws);
X	sscanf (ws, "%s", tmpstr);			/* get row */
X	menu->row_cursor = strcmp (tmpstr, "-0") == 0 ? LINES : atoi(tmpstr);
X	ws += strlen(tmpstr);
X	SKIPJUNK (ws);
X	sscanf (ws, "%s", tmpstr);			/* get col */
X	menu->col_cursor = strcmp (tmpstr, "-0") == 0 ? COLS : atoi(tmpstr);
X
X	/*
X	**   If the row or column is negative
X	**     then  we use relative addressing
X	**     	     the row or col is subtracted from # of rows on screen.
X	*/
X	if (menu->row_cursor < 0)
X		menu->row_cursor = abs(menu->row_cursor) > LINES ? 
X			LINES-1 : LINES+menu->row_cursor-1;
X	else
X		menu->row_cursor = menu->row_cursor > LINES-1 ? 
X			LINES-1 : menu->row_cursor;
X	if (menu->col_cursor < 0)
X		menu->col_cursor = abs(menu->col_cursor) > COLS ? 
X			COLS-1 : COLS+menu->col_cursor-1;
X	else
X		menu->col_cursor = menu->col_cursor > COLS-1 ? 
X			COLS-1 : menu->col_cursor;
X	return (0);
X}
X/* Paul J. Condie  4/88 */
SHAR_EOF
chmod 0444 ParseCur.c || echo "restore of ParseCur.c fails"
echo "x - extracting ParseSpace.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ParseSpace.c &&
Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
X
X/*  FUNCTION:	ParseSpace()
X**  ARGS:	keyword		the keyword found
X**		menufile	the unix menu file
X**		menu		menu structure
X**		gnames		holder of goto menu names
X**		gfiles		holder of goto menu names (menu file)
X**		gindex		# of gnames
X**  RETURNS:	0
X*/
X
X#include	<curses.h>
X#include	"menu.h"
X
Xextern	int	swin, ewin, longest;
X
X
XParseSpace (keyword, menufile, menu, KeyWord, ParseKey, gnames, gfiles, gindex, opnumber)
X
X	char		keyword[];
X	FILE		*menufile;
X	struct MenuInfo	*menu;
X	char		KeyWord[][MAXKEYLENGTH];
X	int		(*ParseKey[])();
X	char		gnames[][15], gfiles[][15];
X	int		*gindex;
X	int		*opnumber;
X{
X	struct OptionInfo	*malloc();
X	char	*fgets(), line[BUFSIZE];
X
X
X   if (menu->optioncount >= MAXOPTION)
X   {
X      BEEP;
X      mvprintw (ErrRow, 0, "Exceeded maximum allowable options.");
X      shutdown ();
X   }
X   menu->option[menu->optioncount] = malloc (sizeof (struct OptionInfo));
X   if (menu->option[menu->optioncount] == NULL)
X   {
X      BEEP;
X      mvprintw (ErrRow, 0, "Unable to allocate memory for option.");
X      shutdown ();
X   }
X
X   strcpy (menu->option[menu->optioncount]->keyword, keyword);
X   menu->option[menu->optioncount]->opnumber = 0;		/* no number */
X   strcpy (menu->option[menu->optioncount]->description, "");
X   menu->option[menu->optioncount]->command = (char *) malloc (5);
X   strcpy (menu->option[menu->optioncount]->command, "");
X
X   fgets (line, sizeof(line)-1, menufile);		/* junk rest of line */
X   menu->optioncount++;
X   ewin++;
X   return (0);
X}
SHAR_EOF
chmod 0644 ParseSpace.c || echo "restore of ParseSpace.c fails"
echo "x - extracting ParInclude.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ParInclude.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
X#endif
X
X/*  FUNCTION:	ParInclude()
X**		Parses keyword ".INCLUDE".
X**  ARGS:	keyword		the keyword "INCLUDE"
X**		menufile	the unix menu file
X**		menu		menu structure
X**		gnames		holder of goto menu names
X**		gfiles		holder of goto menu names (menu file)
X**		gindex		# of gnames
X*/
X
X#include	<curses.h>
X#include	"menu.h"
X
X
XParInclude (keyword, menufile, menu, KeyWord, ParseKey, gnames, gfiles, 
X	gindex, opnumber)
X
X	char		keyword[];
X	FILE		*menufile;
X	struct MenuInfo	*menu;
X	char		KeyWord[][MAXKEYLENGTH];
X	int		(*ParseKey[])();
X	char		gnames[][15], gfiles[][15];
X	int		*gindex;
X	int		*opnumber;
X{
X	FILE		*fopen(), *newfile;
X	char		*fgets(), line[BUFSIZE+1];
X	char		*findfile();
X	char		*getenv();
X	char		*getval();
X	char		unixfile[100];
X	char		filename[100];
X	int		rc;
X	int		KEYFOUND;
X	int		idx;
X	char		newkey[MAXKEYLENGTH];
X	char		*sptr;
X
X	fgets (line, BUFSIZE, menufile);
X	sscanf (line, "%s", filename);
X
X	/*
X	**  Open and Parse the new menu file
X	*/
X	sptr = filename;
X	strcpy (unixfile, getval (&sptr, 1));
X	strcpy (filename, unixfile);
X	if (filename[0] != '/')
X		strcpy (unixfile, findfile (filename, ".", getenv("MENUDIR"), 
X		""));
X      	if ((newfile = fopen (unixfile, "r")) == NULL)
X      	{
X        	BEEP;
X            	mvprintw (ErrRow-2, 0, "Unable to locate .INCLUDE (%s) file.", 
X				filename);
X            	shutdown ();
X      	}
X
X
X   	/* loop through each keyword */
X   	rc = fscanf (newfile, "%s", newkey);
X   	while (rc != EOF)
X   	{
X		/*
X		**  Check if we found a defined keyword
X		*/
X      		KEYFOUND = FALSE;
X      		for (idx = 1; idx <= MAXKEYS; idx++)
X      		{
X			/*
X         		if (strcmp (newkey, KeyWord[idx]) == 0)
X			*/
X         		if (strmatch (newkey, KeyWord[idx]))
X         		{
X            			KEYFOUND = TRUE;
X	    			if (ParseKey[idx] != NULL)
X	    			{
X               				rc = (*ParseKey[idx]) (newkey, 
X						newfile, menu, KeyWord,
X						ParseKey, gnames, gfiles, 
X						gindex, opnumber);
X	       				if (rc != 0)   return (rc);
X  				}
X            			break;
X         		}
X      		}
X      		if (!KEYFOUND)
X      		{
X         		BEEP;
X         		mvprintw (ErrRow-2, 0, "ERROR: (%s) Key not found.", 
X					newkey);
X         		shutdown ();
X      		}
X      		rc = fscanf (newfile, "%s", newkey);
X	} /* end while */
X
X	/*
X      	rc = parsedriver (newfile, KeyWord, ParseKey, menu, gnames, gfiles, 
X			&gindex);
X	*/
X      	fclose (newfile);
X
X   	return (0);
X}
SHAR_EOF
chmod 0644 ParInclude.c || echo "restore of ParInclude.c fails"
echo "x - extracting ParAssign.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ParAssign.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
X#endif
X
X/*  FUNCTION:	ParAssign()
X**		Parses keyword "*=*"
X**		A variable=value assignment.
X**  ARGS:	keyword		the keyword "*=*"
X**		menufile	the unix menu file
X**		menu		menu structure
X**		gnames		holder of goto menu names
X**		gfiles		holder of goto menu names (menu file)
X**		gindex		# of gnames
X*/
X
X#include	<curses.h>
X#include	"menu.h"
X
Xextern int	debug;
X
X
XParAssign (keyword, menufile, menu, KeyWord, ParseKey, gnames, gfiles, 
X	gindex, opnumber)
X
X	char		keyword[];
X	FILE		*menufile;
X	struct MenuInfo	*menu;
X	char		KeyWord[][MAXKEYLENGTH];
X	int		(*ParseKey[])();
X	char		gnames[][15], gfiles[][15];
X	int		*gindex;
X	int		*opnumber;
X{
X	char	*fgets();
X	char	line[BUFSIZE+1];
X	char	*assignment;
X	char	*aptr;
X	char	*sptr;
X
X
X   	fgets (line, BUFSIZE, menufile);
X	line[strlen(line)-1] = '\0';			/* junk \n */
X	/* if comment (#,###) junk rest of line */
X	for (aptr = line; *aptr; aptr++)
X		if (*aptr == '#'  ||  strncmp (aptr, "###", 3) == 0)
X		{
X			*aptr = '\0';			/* junk comment */
X			for (sptr = aptr-1, aptr = line; 
X			     sptr >= aptr && (*sptr == ' ' || *sptr == '\t'); 
X			     sptr--)
X				*sptr = '\0';	/* junk trailing white space */
X			break;
X		}
X	assignment = (char *)malloc (strlen(keyword) + strlen(line) + 20);
X	strcpy (assignment, keyword);
X	strcat (assignment, line);	/* the rest of the quoted value */
X	aptr = assignment;
X	if (debug)
X	{
X		fprintf (stderr, "\n[ParAssign]  command=:%s:", aptr);
X		fflush (stderr);
X	}
X	setvariable (&aptr);
X	free (assignment);
X	return (0);
X}
SHAR_EOF
chmod 0644 ParAssign.c || echo "restore of ParAssign.c fails"
echo "x - extracting ParAftMenu.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ParAftMenu.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
X#endif
X
X/*  FUNCTION:	ParAftMenu()
X**		Parses keyword ".AFTER_MENU".
X**  ARGS:	keyword		the keyword "unix"
X**		menufile	the unix menu file
X**		menu		menu structure
X**		gnames		holder of goto menu names
X**		gfiles		holder of goto menu names (menu file)
X**		gindex		# of gnames
X**  RETURNS:	none
X*/
X
X#include	<curses.h>
X#include	<ctype.h>
X#include	"menu.h"
X
X
Xextern	int	debug;
X
X
X
XParAftMenu (keyword, menufile, menu, KeyWord, ParseKey, gnames, gfiles, 
X		gindex, opnumber)
X
X	char		keyword[];
X	FILE		*menufile;
X	struct MenuInfo	*menu;
X	char		KeyWord[][MAXKEYLENGTH];
X	int		(*ParseKey[])();
X	char		gnames[][15], gfiles[][15];
X	int		*gindex;
X	int		*opnumber;
X{
X	char		command[MAXLEN+1];
X	int		rc;
X	char		*comptr;
X	char		tmpstr[80];
X	int		redrawflag = FALSE;
X
X
X
X	/*
X	**	Read in option command
X	**	strcat continuation lines
X	*/
X   	fgets (command, sizeof(command)-1, menufile);
X   	command[strlen(command)-1] = '\0';		/* get rid of \n */
X   	while (command[strlen(command)-1] == '\\')
X   	{
X      		if (strlen(command) > MAXLEN)
X      		{
X         		BEEP;
X         		mvprintw (ErrRow-2, 0, 
X			      ".AFTER_MENU command is too long.  Max = %d",
X			      MAXLEN);
X         		shutdown ();
X      		}
X      		command[strlen(command)-1] = '\n';	/* replace \ with \n */
X      		fgets (command+strlen(command), sizeof(command)-1, menufile);
X      		command[strlen(command)-1] = '\0';	/* get rid of \n */
X   	}
X
X	comptr = command;
X	SKIPJUNK(comptr);
X
X	/* save command for later */
X	menu->after_menu = (char *)malloc (strlen(comptr)+5);
X	strcpy (menu->after_menu, comptr);
X	return (0);
X}
X/* Paul J. Condie  4-90 */
SHAR_EOF
chmod 0644 ParAftMenu.c || echo "restore of ParAftMenu.c fails"
echo "x - extracting ShowOption.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ShowOption.c &&
Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
X
X/*  FUNCTION:	ShowOption()
X**		Displays a option to the screen.
X**  ARGS:	menu		menu structure
X**		index		option # to display
X**  RETURNS:	none
X*/
X
X#include	<curses.h>
X#include	"menu.h"
X
Xextern int	debug;
X
X
XShowOption (menu, index)
X
X	struct MenuInfo	*menu;
X	int		index;
X{
X
X
X	/*
X	**	Now display option.
X	*/
X   	mvprintw (menu->option[index]->row, menu->option[index]->col, "%2d.  ",
X		menu->option[index]->opnumber);
X   
X   	displaytext (stdscr, menu->option[index]->row, 
X		     menu->option[index]->col+5,
X		menu->option[index]->description);
X
X	if (debug)
X	{
X		fprintf (stderr, "\n[ShowOption] <%s> row=%d col=%d", 
X			menu->option[index]->keyword,
X			menu->option[index]->row, 
X			menu->option[index]->col);
X	}
X}
SHAR_EOF
chmod 0644 ShowOption.c || echo "restore of ShowOption.c fails"
echo "x - extracting RunSystem.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > RunSystem.c &&
Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
X
X/*  FUNCTION:	RunSystem()
X**		Runs keyword ".SYSTEM".
X**  ARGS:	option		option info sturcture
X**  RETURNS:	none
X*/
X
X#include	<curses.h>
X#include	<ctype.h>
X#include	<signal.h>
X#include	"menu.h"
X
Xextern	int	errno;
Xextern	int	debug;
X
XRunSystem (menu, opnumber, KeyWord, ParseKey, ShowKey, RunKey, 
X		gnames, gfiles, gindex)
X	struct MenuInfo		*menu;
X	int			opnumber;
X	int			(*ParseKey[MAXKEYS])(),
X				(*ShowKey[MAXKEYS])(),
X				(*RunKey[MAXKEYS])();
X	char			KeyWord[MAXKEYS][MAXKEYLENGTH];
X	char			gnames[MAXGNAME][15];
X	char			gfiles[MAXGNAME][15];
X	int			gindex;
X{
X	int			shutdown();
X	char			*command = (char *)NULL;
X	int			rc;		/* return code */
X	char			*comptr;
X	int			screenflag = FALSE;
X
X
X
X	/*
X	** we need to allocate enough space to hold the command
X	** the description and the tput clear stuff
X	*/
X	command = (char *)malloc (strlen (menu->option[opnumber]->command) +
X			strlen (menu->option[opnumber]->description) + 100);
X	comptr = menu->option[opnumber]->command;
X	SKIPJUNK(comptr);
X
X	if (substr (comptr, "GETINPUT") != NULL)
X	{
X		sscanf (comptr, "%s", command);
X		/*
X		**  Loop through each variable=value until GETINPUT is found
X		*/
X		do
X		{
X			if (strcmp (command, "GETINPUT") == 0)
X			{
X				screenflag = TRUE;
X				/* get screen name */
X				comptr += strlen(command);
X				SKIPJUNK(comptr);
X   				sscanf (comptr, "%s", command);/* screen name */
X				comptr += strlen(command);
X				SKIPJUNK(comptr);     /* sitting at system(3) */
X				rc = runscreen (command, menu, opnumber);
X				if (rc == KEY_CANCEL)
X				{
X					free (command);
X					return (0);
X				}
X				break;
X			}
X			else
X			{
X				rc = setvariable (&comptr);
X				if (rc != 0) break;
X			}
X
X			SKIPJUNK(comptr);
X   			rc = sscanf (comptr, "%s", command);/* next var=value */
X		} while (rc != EOF);
X	} /* end if GETINPUT */
X
X
X	/* run system command */
X	refresh();			/* force curses to flush attributes */
X	sprintf (command, "%s;echo \"One moment, loading %s%s%s ....\"; %s",
X#if BSD || SUN
X			"clear",
X#else
X			"tput clear",
X#endif
X#if BSD || SUN
X			"",
X#else
X			"`tput smul`",
X#endif
X			menu->option[opnumber]->description,
X#if BSD || SUN
X			"",
X#else
X			"`tput rmul`",
X#endif
X			comptr);
X   	reset_shell_mode ();
X	if (debug)
X	{
X		fprintf (stderr, "\n[RunSystem] <%s> command=:%s:", 
X			menu->option[opnumber]->keyword, command);
X	}
X	signal (SIGINT, shutdown);
X	signal (SIGQUIT, shutdown);
X   	rc = system (command);
X	signal (SIGINT, SIG_IGN);
X	signal (SIGQUIT, SIG_IGN);
X	if (debug)
X	{
X		fprintf (stderr, 
X			"\n[RunSystem] <%s> return code = %d, errno = %d", 
X			rc, errno);
X	}
X
X   	reset_prog_mode ();
X	clearok (stdscr, TRUE);
X
X
X	free (command);
X
X	if (rc == 0  &&  screenflag)
X		return (REPARSE);
X   	return (rc);
X}
SHAR_EOF
chmod 0644 RunSystem.c || echo "restore of RunSystem.c fails"
echo "x - extracting RunExit.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > RunExit.c &&
Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
X
X/*  FUNCTION:	RunExit()
X**		Runs keyword ".EXIT".
X**		Exit menu program.
X**  ARGS:	option		option info sturcture
X**  RETURNS:	none
X*/
X
X#include	<curses.h>
X#include	<signal.h>
X#include	"menu.h"
X
Xextern int	trapsigs;
X
XRunExit (menu, opnumber, KeyWord, ParseKey, ShowKey, RunKey, 
X		gnames, gfiles, gindex)
X	struct MenuInfo		*menu;
X	int			opnumber;
X	int			(*ParseKey[MAXKEYS])(),
X				(*ShowKey[MAXKEYS])(),
X				(*RunKey[MAXKEYS])();
X	char			KeyWord[MAXKEYS][MAXKEYLENGTH];
X	char			gnames[MAXGNAME][15];
X	char			gfiles[MAXGNAME][15];
X	int			gindex;
X{
X	int			shutdown();
X	int			rc;		/* return code */
X
X	refresh ();
X	if (strcmp (menu->option[opnumber]->command, "") != 0)
X	{
X   		reset_shell_mode ();
X		signal (SIGINT, shutdown);
X		signal (SIGQUIT, shutdown);
X   		rc = system (menu->option[opnumber]->command);
X		if (trapsigs)
X		{
X			signal (SIGINT, SIG_IGN);
X			signal (SIGQUIT, SIG_IGN);
X		}
X   		reset_prog_mode ();
X	}
X	return (QUIT);
X}
SHAR_EOF
chmod 0644 RunExit.c || echo "restore of RunExit.c fails"
echo "x - extracting RunSetenv.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > RunSetenv.c &&
Xstatic char Sccsid[] = "@(#)RunSetenv.c	1.7   DeltaDate 1/22/90   ExtrDate 1/22/90";
X
X/*  FUNCTION:	RunSetenv()
X**		Runs keyword ".SETENV".
X**  ARGS:	option		option info sturcture
X**  RETURNS:	none
X*/
X
X#include	<curses.h>
X#include	<string.h>
X#include	<ctype.h>
X#include	"menu.h"
X
X
XRunSetenv (menu, opnumber, KeyWord, ParseKey, ShowKey, RunKey, 
X		gnames, gfiles, gindex)
X	struct MenuInfo		*menu;
X	int			opnumber;
X	int			(*ParseKey[MAXKEYS])(),
X				(*ShowKey[MAXKEYS])(),
X				(*RunKey[MAXKEYS])();
X	char			KeyWord[MAXKEYS][MAXKEYLENGTH];
X	char			gnames[MAXGNAME][15];
X	char			gfiles[MAXGNAME][15];
X	int			gindex;
X{
X	char			*strchr();
X	int			rc;
X	char			command[BUFSIZ];
X	char			*comptr;
X	int			BELLFLAG=FALSE;
X
X
X	/*
X	**  The first argument [ BELL ]
X	*/
X	comptr = menu->option[opnumber]->command;
X	SKIPJUNK(comptr);
X   	sscanf (comptr, "%s", command);		/* do we have a BELL */
X	if (strcmp (command, "BELL") == 0)
X	{
X		BELLFLAG = TRUE;
X		comptr += strlen(command);
X	}
X
X	do
X	{
X		rc = setvariable (&comptr);
X		if (rc != 0) break;
X   		rc = sscanf (comptr, "%s", command);	/* get next var=value */
X		if (rc == EOF)   break;
X		/* if the command has an = sign in it, it is another one */
X		if (!strmatch(command, "*=*"))
X			break;
X	} while (rc != EOF);
X
X	SKIPJUNK(comptr);
X	mvprintw (ErrRow, 0, "%s", comptr);		/* dispaly message */
X	if (BELLFLAG)
X		BEEP;
X
X	return (REPARSE);
X}
X/* Paul J. Condie  10/88 */
SHAR_EOF
chmod 0444 RunSetenv.c || echo "restore of RunSetenv.c fails"
echo "x - extracting RunMenu.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > RunMenu.c &&
Xstatic char Sccsid[] = "@(#)RunMenu.c	1.7   DeltaDate 1/22/90   ExtrDate 1/22/90";
X
X/*  FUNCTION:	RunMenu()
X**		Runs keyword ".MENU".
X**  ARGS:	option		option info sturcture
X**  RETURNS:	none
X*/
X
X#include	<curses.h>
X#include	<ctype.h>
X#include	"menu.h"
X
XRunMenu (menu, opnumber, KeyWord, ParseKey, ShowKey, RunKey, 
X		gnames, gfiles, gindex)
X	struct MenuInfo		*menu;
X	int			opnumber;
X	int			(*ParseKey[MAXKEYS])(),
X				(*ShowKey[MAXKEYS])(),
X				(*RunKey[MAXKEYS])();
X	char			KeyWord[MAXKEYS][MAXKEYLENGTH];
X	char			gnames[MAXGNAME][15];
X	char			gfiles[MAXGNAME][15];
X	int			gindex;
X{
X	char			command[BUFSIZ];
X	int			rc;		/* return code */
X	char			*comptr;
X
X	/*
X	**  The first argument is the menu script filename
X	*/
X	comptr = menu->option[opnumber]->command;
X	SKIPJUNK (comptr);
X   	sscanf (comptr, "%s", command);			/* filename */
X	comptr += strlen(command);
X	SKIPJUNK (comptr);
X   	sscanf (comptr, "%s", command);		/* next argument */
X
X	/*
X	**  Loop through each variable=value || GETINPUT
X	*/
X	do
X	{
X		if (strcmp (command, "GETINPUT") == 0)
X		{
X			/* get screen name */
X			comptr += strlen(command);
X			SKIPJUNK(comptr);
X   			sscanf (comptr, "%s", command);	/* screen name */
X			comptr += strlen(command);
X			SKIPJUNK(comptr);	/* sitting at next argument */
X			rc = runscreen (command, menu, opnumber);
X			if (rc == KEY_CANCEL)
X				return (0);
X		}
X		else
X		{
X			rc = setvariable (&comptr);
X			if (rc != 0) break;
X		}
X
X   		rc = sscanf (comptr, "%s", command);/* next var=value */
X	} while (rc != EOF);
X
X	return (SUBMENU);
X}
X/* Paul J. Condie  5/88 */
SHAR_EOF
chmod 0444 RunMenu.c || echo "restore of RunMenu.c fails"
echo "x - extracting RunPopMenu.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > RunPopMenu.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
X#endif
X
X/*  FUNCTION:	RunPopMenu()
X**		Runs keyword ".POPMENU".
X**		RunPopMenu will use recursion if there is another .POPMENU
X**		within .POPMENU.
X**  ARGS:	option		option info sturcture
X**  RETURNS:	none
X*/
X
X#include	<curses.h>
X#include	<string.h>
X#include	<ctype.h>
X#include	"menu.h"
X
X#define	INITMENU	0
X#define	CREATEMENU	-2
X#define	UNHILIGHTBOX	-1
X
X
XRunPopMenu (menu, opnumber, KeyWord, ParseKey, ShowKey, RunKey, 
X		gnames, gfiles, gindex)
X	struct MenuInfo		*menu;
X	int			opnumber;
X	int			(*ParseKey[MAXKEYS])(),
X				(*ShowKey[MAXKEYS])(),
X				(*RunKey[MAXKEYS])();
X	char			KeyWord[MAXKEYS][MAXKEYLENGTH];
X	char			gnames[MAXGNAME][15];
X	char			gfiles[MAXGNAME][15];
X	int			gindex;
X{
X	FILE			*fopen(), *menufile;
X	char			*strchr();
X	char			*findfile();
X	char			*getenv();
X	char			command[BUFSIZ];
X	int			rc;			/* return code */
X	char			*comptr;
X	int			row, col;		/* top left corner */
X	char			*filename;
X	int			i;
X	static int		popmid = 9;		/* popup menu id */
X	int			titleline[200];		/* title 1 on stdscr */
X	char			poptitle[200];		/* title for popmenu */
X	int			DIMFLAG = TRUE;
X	struct MenuInfo		pmenu;
X	char			PopMenu[100][80];	/* the pop menu */
X	int			AUTOFIG = FALSE;	/* figure row/col */
X
X
X	comptr = menu->option[opnumber]->command;
X	SKIPJUNK(comptr);
X   	sscanf (comptr, "%s", command);		/* do we have NoDim */
X	if (strcmp (command, "NoDim") == 0)
X	{
X		DIMFLAG = FALSE;
X		comptr += strlen(command);
X	}
X
X	SKIPJUNK(comptr);
X   	sscanf (comptr, "%s", command);		/* menufile name */
X	comptr += strlen(command);
X	SKIPJUNK(comptr);
X
X	/* do we have a row/column parameter 
X	** we'll use titleline for working storage
X	*/
X   	sscanf (comptr, "%s", titleline);	/* get next argument */
X	if (*comptr != '\0' && strchr (titleline, '=') == (char *)NULL)
X	{
X		/* we have a row/column parameter */
X		/* get row and column */
X		sscanf (comptr, "%d", &row);
X		comptr = strchr (comptr, ' ');		/* past row */
X		SKIPJUNK(comptr);			/* at begining of col */
X		sscanf (comptr, "%d", &col);
X		comptr = strchr (comptr, ' ');		/* past column */
X	}
X	else
X		AUTOFIG = TRUE;
X
X
X	/*
X	**  Loop through each variable=value
X	*/
X	do
X	{
X		rc = setvariable (&comptr);
X		if (rc != 0) break;
X	} while (rc != EOF);
X
X	/*
X	**  Open and Parse the popmenu
X	*/
X	filename = findfile (command, ".", getenv("MENUDIR"), "");
X      	if ((menufile = fopen (filename, "r")) == NULL)
X      	{
X        	BEEP;
X            	mvprintw (ErrRow-2, 0, "Unable to locate (%s) file.", command);
X            	shutdown ();
X      	}
X
X	/*
X	**  The ParseTitle will put the .POPMENU title on line 0 of stdscr
X	**  so we need to save original title
X	**  then read and compare title 1 to see what the title for popmenu
X	**  should be.
X	**  Then write the original title back out. (whew)
X	*/
X	/* save title line 0 with attributes */
X	for (i = 0; i <= COLS; i++)
X		titleline[i] = mvwinch (stdscr, 0, i);
X
X	initmenu (&pmenu);
X
X      	rc = parsedriver (menufile, KeyWord, ParseKey, &pmenu, gnames, gfiles, 
X			&gindex);
X      	fclose (menufile);
X
X	if (AUTOFIG)
X	{
X		int	longest;
X
X		/*
X		** try to put menu as close to the option as possible
X		**  menu->option[opnumber]->row holds the
X		**  location on stdscr of the option that selected this.
X		*/
X		row = menu->option[opnumber]->row - 1;
X		col = menu->option[opnumber]->col + 
X		      	      strlen (menu->option[opnumber]->description);
X		if (popmid == 9)
X			col += 4;
X
X		/* make sure it fits on the screen */
X		if ((row + pmenu.optioncount + 2) > LINES)
X			row = LINES - pmenu.optioncount - 2;
X
X		for (i = 0, longest = 0; i < pmenu.optioncount; i++)
X			if (strlen (pmenu.option[i]->description) > longest)
X				longest = strlen (pmenu.option[i]->description);
X		if ((col + longest + 4) > COLS)
X			col = COLS - longest - 4;
X
X		if (row < 0)
X			row = 0;
X
X		/*
X		**  Recalculate the options row and col for recursion
X		*/
X		for (i = 0; i < pmenu.optioncount; i++)
X		{
X			pmenu.option[i]->row = row + 1 + i;
X			pmenu.option[i]->col = col;
X		}
X	}
X
X	/* find popmenu title in line 0 */
X	for (i = 0; i <= COLS; i++)
X	{
X		poptitle[i] = ' ';
X		if (mvwinch (stdscr, 0,i) != titleline[i])
X		{
X			poptitle[i] = mvwinch(stdscr, 0,i);
X		}
X		else
X			poptitle[i] = ' ';
X		/* write original title back out */
X		mvwaddch (stdscr, 0,i, titleline[i]);
X	}
X	poptitle[i] = '\0';
X	/* junk trailing spaces */
X	for (i = strlen(poptitle)-1; i >= 0; i--)
X		if (poptitle[i] == ' ')
X			poptitle[i] = '\0';
X		else
X			break;
X
X	if (rc != 0) return (rc);			/* from parsemenu */
X
X
X
X	/* if .BOX||.LINE && DIM then unhilight */
X	if (DIMFLAG)
X	{
X		/* Dim the .BOX */
X		if (menu->boxtype)
X			drawbox (stdscr, 1,1, LINES-1,COLS, 
X				(menu->boxtype&0777000)>>9, DumbLine,
X				FALSE, FALSE);
X
X		/* Dim the .LINE */
X		if (menu->linetype)
X			drawline (stdscr, menu->titlecount-1, 
X				(menu->linetype&0777000)>>9, DumbLine, 
X				menu->boxtype);
X
X		wnoutrefresh (stdscr);
X	}
X
X	/* popmid = 10+ */
X	popmid++;
X	for (i = 0; i < pmenu.optioncount; i++)
X		strcpy (PopMenu[i], pmenu.option[i]->description);
X	strcpy (PopMenu[i], "");
X	popmenu (INITMENU, popmid, row, col, poptitle, HELPFILE,
X			LINES-2, sizeof(PopMenu[0]), PopMenu);
X
X	rc = popmenu (popmid, (char *)NULL);
X
X	/* run option selected */
X	if (rc > 0)
X	{
X		for (i = 1; i <= MAXKEYS && strcmp (KeyWord[i], "") != 0; i++)
X			if (strcmp (pmenu.option[rc-1]->keyword, 
X				    KeyWord[i]) == 0)
X			{
X				if (RunKey[i] != NULL)
X				{
X					/*
X					**  Dim box is option is a .POPMENU or
X					**  a .GETINPUT or a .SYSTEM GETINPUT
X					*/
X					comptr = pmenu.option[rc-1]->command;
X					SKIPJUNK(comptr);
X   					sscanf (comptr, "%s", command);
X					if (strcmp (pmenu.option[rc-1]->keyword, ".POPMENU") == 0  ||
X					    strcmp (pmenu.option[rc-1]->keyword, ".GETINPUT") == 0 ||
X					    (strcmp (pmenu.option[rc-1]->keyword, ".SYSTEM") == 0 && 
X					     strcmp (command, "GETINPUT") == 0))
X						popmenu (UNHILIGHTBOX, popmid);
X
X		         		rc = (*RunKey[i]) (&pmenu, rc-1,
X						KeyWord, ParseKey, ShowKey, 
X						RunKey, gnames, gfiles, gindex);
X				}
X				break;
X			}
X	}
X	else
X		rc = 0;			/* popmenu was cancelled, continue */
X
X	popmid--;
X
X	/* run after_menu if there is one */
X	if (pmenu.after_menu != (char *)NULL)
X		RunAftMenu (&pmenu);
X
X	clean_menu (&pmenu);
X
X	if (DIMFLAG)
X	{
X		/* hilight .BOX */
X		if (menu->boxtype)
X			drawbox (stdscr, 1,1, LINES-1,COLS, 
X				menu->boxtype & 0777, StandoutLine,
X				FALSE, FALSE);
X
X		/* hilight .LINE */
X		if (menu->linetype)
X			drawline (stdscr, menu->titlecount-1,
X				menu->linetype & 0777, StandoutLine,
X				menu->boxtype);
X	}
X
X	touchwin (stdscr);
X
X    	if (rc != 0)  
X		return (rc);
X	else
X		return (REPARSE);
X}
X/* Paul J. Condie  10/88 */
SHAR_EOF
chmod 0644 RunPopMenu.c || echo "restore of RunPopMenu.c fails"
echo "x - extracting RunGetI.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > RunGetI.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
X#endif
X
X/*  FUNCTION:	RunGetInpt()
X**		Runs keyword ".GETINPUT".
X**  ARGS:	option		option info sturcture
X**  RETURNS:	none
X*/
X
X#include	<curses.h>
X#include	<term.h>
X#include	<ctype.h>
X#include	"menu.h"
X
X
X
XRunGetInput (menu, opnumber, KeyWord, ParseKey, ShowKey, RunKey, 
X		gnames, gfiles, gindex)
X	struct MenuInfo		*menu;
X	int			opnumber;
X	int			(*ParseKey[MAXKEYS])(),
X				(*ShowKey[MAXKEYS])(),
X				(*RunKey[MAXKEYS])();
X	char			KeyWord[MAXKEYS][MAXKEYLENGTH];
X	char			gnames[MAXGNAME][15];
X	char			gfiles[MAXGNAME][15];
X	int			gindex;
X{
X	char			screen_name[50];
X	int			rc;		/* return code */
X	char			*comptr;
X
X	/*
X	**  The first argument is the screen name
X	*/
X	comptr = menu->option[opnumber]->command;
X	SKIPJUNK(comptr);
X   	sscanf (menu->option[opnumber]->command, "%s", screen_name);
X	comptr += strlen (screen_name);
X	SKIPJUNK(comptr);
X
X	/*
X	**  Loop through each variable=value
X	*/
X	do
X	{
X		rc = setvariable (&comptr);
X		if (rc != 0) break;
X	} while (rc != EOF);
X
X	rc = runscreen (screen_name, menu, opnumber);
X	if (rc == KEY_CANCEL)
X		return (0);
X	else
X		return (REPARSE);
X}
SHAR_EOF
chmod 0644 RunGetI.c || echo "restore of RunGetI.c fails"
echo "x - extracting RunAftMenu.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > RunAftMenu.c &&
X/*  FUNCTION:	RunAftMenu()
X**		Runs keyword ".AFTER_MENU".
X**  ARGS:
X**		menu		menu structure
X**  RETURNS:	none
X*/
X
X#include	<curses.h>
X#include	<ctype.h>
X#include	<signal.h>
X#include	"menu.h"
X
X
Xextern	int	debug;
Xextern	int	trapsigs;
X
X
X
XRunAftMenu (menu)
X	struct MenuInfo	*menu;
X{
X	int		shutdown();
X	int		rc;
X	char		*comptr;
X	char		tmpstr[80];
X	int		redrawflag = FALSE;
X
X
X
X	comptr = menu->after_menu;
X	SKIPJUNK(comptr);
X
X
X   	sscanf (comptr, "%s", tmpstr);		/* do we have a REDRAW */
X	if (strcmp (tmpstr, "REDRAW") == 0)
X	{
X		redrawflag = TRUE;
X		comptr += strlen(tmpstr);
X		SKIPJUNK(comptr);
X   		sscanf (comptr, "%s", tmpstr);	/* do we have a GETINPUT */
X	}
X
X	if (strcmp (tmpstr, "GETINPUT") == 0)
X	{
X		/* get screen name */
X		comptr += strlen(tmpstr);
X		SKIPJUNK(comptr);
X   		sscanf (comptr, "%s", tmpstr);		/* screen name */
X		comptr += strlen(tmpstr);
X		SKIPJUNK(comptr);		/* sitting at system(3) */
X		rc = runscreen (tmpstr, menu, 1);
X		if (rc == KEY_CANCEL)
X			return (0);
X	}
X
X	reset_shell_mode ();
X	signal (SIGINT, shutdown);
X	signal (SIGQUIT, shutdown);
X   	rc = system (comptr);
X	if (trapsigs)
X	{
X		signal (SIGINT, SIG_IGN);
X		signal (SIGQUIT, SIG_IGN);
X	}
X	reset_prog_mode ();
X	keypad (stdscr, TRUE);
X
X	/*
X	**  Going from a shell return code (char) to a c return code (int)
X	**  the shell return code gets put in the high byte.  So we will
X	**  shift the int right 8 bytes.
X	*/
X	rc = rc >> 8;					/* to get shell rc */
X	if (debug)
X	{
X		fprintf (stderr, "\n[%s] <%s> rc=%d  command=%s", 
X			__FILE__, ".AFTER_MENU", rc, comptr);
X		fflush (stderr);
X	}
X
X	/*
X	**  Shell can't handle negative return codes so we will convert 
X	**  the return code to negative so menu can use it.
X	**	-1 = QUIT
X	**	-2 = MAINMENU
X	**	-3 = PREVMENU
X	**	-4 = NOWAYJOSE
X	**	100+offset = GNAME
X	*/
X	if (rc < GNAMEOFFSET)
X		rc -= rc * 2;				/* make negative */
X
X	if (redrawflag)
X		clearok (stdscr, TRUE);
X
X	return (rc);
X}
X/* Paul J. Condie  4-90 */
SHAR_EOF
chmod 0644 RunAftMenu.c || echo "restore of RunAftMenu.c fails"
echo "x - extracting GetOption.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > GetOption.c &&
Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
X#include	<curses.h>
X#include	<ctype.h>
X#include	"menu.h"
X#include	"terminal.h"
X
Xextern int	HotKeys;
X	int	ch;			/* input character */
X
X
XGetOption (row, col, s)
X
X	int	row;			/* row to get user input */
X	int	col;			/* col to get user input */
X	char	*s;			/* memory string to store input */
X{
X	char	*findfile();
X	char	*getenv();
X	char	*ws;			/* working string */
X	int	cc;			/* column count */
X	int	i;			/* work variable */
X	char	hlpfile[100];
X
X
X	ws = s;				/* set to memory string */
X	cc = col;
X
X	for (i = col; i <= col+3; i++)	/* blank out prompt field */
X	   mvaddch (row, i, ' ');
X					/* display default text */
X	while (*ws)
X	{
X		move (row, cc++);
X		addch (*ws);
X		ws++;
X	}
X					/* loop until done */
X	for (;;)
X	{
X		move (row, cc);
X		refresh ();
X		ch = mygetch ();
X		move (ErrRow, 0);  clrtoeol ();
X
X      		if (ch == KeyDown)   	ch = KEY_DOWN;
X      		if (ch == KeyUp)	ch = KEY_UP;
X      		if (ch == KeyTab)	ch = KEY_TAB;
X      		if (ch == KeyBTab)	ch = KEY_BTAB;
X      		if (ch == KeyReturn)	ch = KEY_RETURN;
X		if (ch == KeyBackspace)	ch = KEY_BACKSPACE;
X		if (ch == KeyRedraw)	ch = KEY_REFRESH;
X		if (ch == KeyHelp)	ch = KEY_HELP;
X		if (ch == KeyMainMenu)	ch = KEY_MAINMENU;
X		if (ch == KeyPrevMenu)	ch = KEY_PREVMENU;
X		if (ch == KeyExitMenu)	ch = KEY_EXITMENU;
X		if (ch == KeyGname)	ch = KEY_GNAME;
X		if (ch == KeyPopGname)	ch = KEY_POPGNAME;
X
X		if (ch >= 'a' && ch <= 'z')
X			ch = toupper (ch);
X
X		switch (ch)
X		{
X		   case KEY_DOWN:
X		   case KEY_UP:
X		   case KEY_TAB:
X		   case KEY_BTAB:
X			*s = '\0';	/* reset select to null */
X		   case KEY_RETURN:
X		   case KEY_LINEFEED:
X		   case '0':
X		   case '1':
X		   case '2':
X		   case '3':
X		   case '4':
X		   case '5':
X		   case '6':
X		   case '7':
X		   case '8':
X		   case '9':
X			return (ch);
X
X		   case '!':
X			if (getenv ("SHELL") != (char *)NULL)
X				return (ch);
X			break;
X
X		   case KEY_HELP:
X		   case KEY_EXITMENU:
X		   case KEY_MAINMENU:
X		   case KEY_PREVMENU:
X		   case KEY_GNAME:
X			if (HotKeys)
X			{
X				return (ch);
X			}
X			else
X			{
X				if (ch == KEY_HELP)
X					*ws = KeyHelp;
X				else if (ch == KEY_EXITMENU)
X					*ws = KeyExitMenu;
X				else if (ch == KEY_MAINMENU)
X					*ws = KeyMainMenu;
X				else if (ch == KEY_PREVMENU)
X					*ws = KeyPrevMenu;
X				else if (ch == KEY_GNAME)
X					*ws = KeyGname;
X				move (row, cc);
X				addch (*ws);
X				ws++;
X				*ws = '\0';
X				cc++;		/*move over one column*/
X			}
X			break;
X			
X		   case KEY_BACKSPACE:
X			if (cc == col) 
X				continue;
X			else
X			{
X				move (row, --cc);	/* back up one column */
X				addch (' ');
X				ws--;
X				*ws = '\0';
X			}
X			break;
X
X		   case KEY_REFRESH:
X			/* redraw screen */
X			clearok (stdscr, TRUE);
X			refresh ();
X			break;
X
X		   case KEY_POPGNAME:
X			return (KeyPopGname);
X
X		   case ' ':
X		   case 'A':
X		   case 'B':
X		   case 'C':
X		   case 'D':
X		   case 'E':
X		   case 'F':
X		   case 'G':
X		   case 'H':
X		   case 'I':
X		   case 'J':
X		   case 'K':
X		   case 'L':
X		   case 'M':
X		   case 'N':
X		   case 'O':
X		   case 'P':
X		   case 'Q':
X		   case 'R':
X		   case 'S':
X		   case 'T':
X		   case 'U':
X		   case 'V':
X		   case 'W':
X		   case 'X':
X		   case 'Y':
X		   case 'Z':
X			return (ch);
X
X		   default:
X			if (isprint (ch))
X			{
X				*ws = ch;
X				move (row, cc);
X				addch (*ws);
X				ws++;
X				*ws = '\0';
X				cc++;		/*move over one column*/
X			}
X			break;
X		} /* end switch */
X	} /* end for */
X}
SHAR_EOF
chmod 0644 GetOption.c || echo "restore of GetOption.c fails"
echo "x - extracting EndWindow.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > EndWindow.c &&
Xstatic char Sccsid[] = "@(#)EndWindow.c	1.1   DeltaDate 9/6/87   ExtrDate 1/22/90";
X/*  FUNCTION:	EndWindow()
X**		When a "WINDOW" keyword is found this function
X**		recalculates the row and column to begin 
X**		displaying the next subwindow.
X**  ARGS:	menu	current menu structure
X*/
X
X#include	"menu.h"
X
Xextern	int	swin, ewin, longest;
X
X
XEndWindow (menu)
X
X	struct MenuInfo	*menu;
X{
X	int		i;
X
X
X   if (swin == ewin)  return;
X
X   longest += 5;
X
X/*
X**	Calculate what row and column to display option on.
X*/
X
X   for (i = swin; i < ewin; i++)
X   {
X      menu->option[i]->row = ((menu->wlrow - menu->wfrow) / 2 + menu->wfrow) -
X			      ((ewin - swin) / 2) + i - swin;
X      menu->option[i]->col = (menu->wlcol - menu->wfcol) / 2 - 
X			      longest / 2 + menu->wfcol;
X   }
X}
SHAR_EOF
chmod 0444 EndWindow.c || echo "restore of EndWindow.c fails"
echo "x - extracting displaytxt.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > displaytxt.c &&
Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
X
X/*  FUNCTION:	displaytext()
X**		Displays a string to the screen with atributes.
X**  ARGS:	
X**		win	curses window to display to
X**		row	screen row
X**		col	screen col
X**		s	the string
X**  RETURNS:	none
X*/
X
X#include	<curses.h>
X
Xdisplaytext (win, row, col, s)
X	WINDOW	*win;
X	int	row, col;
X	char	s[];
X{
X	int	i;
X
X	wmove (win, row, col);
X
X/*
X**	Now display looking for terminal attributes.
X*/
X      for (i = 0; s[i] != '\0'; i++)
X      {
X         if (s[i] == '\\')
X	 {
X#ifdef BSD
X	    if (s[i+1] != 'N') s[i+1] = 'S';   /* Berk only supports standout */
X#endif
X            switch (s[++i])
X            {
X	       case 'S':
X#ifdef BSD
X			wstandout (win);
X#else
X	   		wattrset (win, win->_attrs|A_STANDOUT);
X#endif
X			break;
X	       case 'B':
X#ifdef SYS5
X			wattrset (win, win->_attrs|A_BOLD);
X#endif
X			break;
X	       case 'U':
X#ifdef SYS5
X			wattrset (win, win->_attrs|A_UNDERLINE);
X#endif
X			break;
X	       case 'D':
X#ifdef SYS5
X			wattrset (win, win->_attrs|A_DIM);
X#endif
X			break;
X	       case 'R':
X#ifdef SYS5
X			wattrset (win, win->_attrs|A_REVERSE);
X#endif
X			break;
X	       case 'L':
X#ifdef SYS5
X			wattrset (win, win->_attrs|A_BLINK);
X#endif
X			break;
X	       case 'N': 
X#ifdef BSD
X			wstandend (win);
X#else
X			wattrset (win, A_NORMAL);
X#endif
X			break;
X	    }
X	 }
X         else
X            waddch (win, s[i]);
X      }
X}
SHAR_EOF
chmod 0644 displaytxt.c || echo "restore of displaytxt.c fails"
echo "x - extracting SetTerm.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > SetTerm.c &&
X#ifndef LINT
Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
X#endif
X
X#include	<curses.h>
X#include	"menu.h"
X
X				/* default values for dumb terminals */
X				/* a -1 indicates nokey */
X/* Mover Keys */
Xint	KeyReturn	= '\r';	/* \r - menu & GetInput */
Xint	KeyDown		= 10;	/* \n - menu & GetInput */
Xint	KeyUp		= 11;	/* ^k - menu & GetInput */
Xint	KeyTab		= '\t';	/* \t - menu & GetInput */
Xint	KeyBTab		= -1;	/*    - menu & GetInput */
X
X/* Edit Keys */
Xint	KeyBeg		= 2;	/* ^b - GetInput */
Xint	KeyEnd		= 5;	/* ^e - GetInput */
Xint	KeyRight	= 12;	/* ^l - GetInput */
Xint	KeyLeft		= 8;	/* \b - GetInput */
Xint	KeyBackspace	= '\b';	/* \b - GetInput */
Xint	KeyEOL		= 4;	/* ^d - GetInput clear to end of field */
Xint	KeyDL		= 3;	/* ^c - GetInput clear field and home cursor */
Xint	KeyDC		= 24;	/* ^x - GetInput delete character */
Xint	KeyIC		= 20;	/* ^t - GetInput typeover/insert mode */
X
X/* Other Keys */
Xint	KeyHelp		= '?';	/* ?  - menu & GetInput */
Xint	KeyTOC		= 20;	/* ^t - ShowHelp */
Xint	KeyRedraw	= 18;	/* ^r - menu & GetInput */
Xint	KeyCancel	= 27;	/* ESC - menu & GetInput pop-up menus */
SHAR_EOF
echo "End of part 5"
echo "File SetTerm.c is continued in part 6"
echo "6" > s2_seq_.tmp
exit 0



More information about the Alt.sources mailing list