home *** CD-ROM | disk | FTP | other *** search
- From: pjc@pcbox.UUCP (Paul J. Condie)
- Newsgroups: alt.sources
- Subject: menu(1) part 4 of 11
- Message-ID: <426@pcbox.UUCP>
- Date: 6 Apr 90 17:38:48 GMT
-
-
- #!/bin/sh
- # this is part 4 of a multipart archive
- # do not concatenate these parts, unpack them in order with /bin/sh
- # file ParseTitle.c continued
- #
- CurArch=4
- 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 ParseTitle.c"
- sed 's/^X//' << 'SHAR_EOF' >> ParseTitle.c
- X#ifdef ALARM
- X if (MAILCALL)
- X checkmail ();
- X#endif
- X return (0);
- X}
- SHAR_EOF
- echo "File ParseTitle.c is complete"
- chmod 0444 ParseTitle.c || echo "restore of ParseTitle.c fails"
- echo "x - extracting ParseBox.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > ParseBox.c &&
- Xstatic char Sccsid[] = "@(#)ParseBox.c 1.7 DeltaDate 1/22/90 ExtrDate 1/22/90";
- X
- X/* FUNCTION: ParseBox()
- X** Parses keyword ".BOX".
- X** ARGS: keyword the keyword "BOX"
- 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
- XParseBox (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 boxtype[30];
- X char *sptr;
- X
- X /* Default Values */
- X menu->boxtype = StandoutLine;
- X menu->boxtype = menu->boxtype | (DumbLine << 9);
- X
- X fgets (line, BUFSIZE, menufile);
- X sptr = line;
- X SKIPJUNK(sptr);
- X
- X /* get border type for active menu */
- X sscanf (sptr, "%s", boxtype);
- X sptr += strlen(boxtype);
- X if (strcmp (boxtype, "DumbLine") == 0)
- X menu->boxtype = DumbLine;
- X else if (strcmp (boxtype, "StandoutLine") == 0)
- X menu->boxtype = StandoutLine;
- X else if (strcmp (boxtype, "SingleLine") == 0 ||
- X strcmp (boxtype, "DrawLine") == 0)
- X menu->boxtype = SingleLine;
- X else if (strcmp (boxtype, "MosaicLine") == 0)
- X menu->boxtype = MosaicLine;
- X else if (strcmp (boxtype, "DiamondLine") == 0)
- X menu->boxtype = DiamondLine;
- X else if (strcmp (boxtype, "DotLine") == 0)
- X menu->boxtype = DotLine;
- X else if (strcmp (boxtype, "PlusLine") == 0)
- X menu->boxtype = PlusLine;
- X
- X /* get border type for inactive menu - dim (high 8 bits) */
- X sscanf (sptr, "%s", boxtype);
- X sptr += strlen(boxtype);
- X if (strcmp (boxtype, "DumbLine") == 0)
- X menu->boxtype = menu->boxtype | (DumbLine << 9);
- X else if (strcmp (boxtype, "StandoutLine") == 0)
- X menu->boxtype = menu->boxtype | (DumbLine << 9);
- X else if (strcmp (boxtype, "SingleLine") == 0 ||
- X strcmp (boxtype, "DrawLine") == 0)
- X menu->boxtype = menu->boxtype | (SingleLine << 9);
- X else if (strcmp (boxtype, "MosaicLine") == 0)
- X menu->boxtype = menu->boxtype | (MosaicLine << 9);
- X else if (strcmp (boxtype, "DiamondLine") == 0)
- X menu->boxtype = menu->boxtype | (DiamondLine << 9);
- X else if (strcmp (boxtype, "DotLine") == 0)
- X menu->boxtype = menu->boxtype | (DotLine << 9);
- X else if (strcmp (boxtype, "PlusLine") == 0)
- X menu->boxtype = menu->boxtype | (PlusLine << 9);
- X
- X drawbox (stdscr, 1,1, LINES-1,COLS, menu->boxtype & 0777, StandoutLine,
- X FALSE, FALSE);
- X return (0);
- X}
- SHAR_EOF
- chmod 0444 ParseBox.c || echo "restore of ParseBox.c fails"
- echo "x - extracting ParseWindo.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > ParseWindo.c &&
- Xstatic char Sccsid[] = "@(#)ParseWindo.c 1.4 DeltaDate 11/13/88 ExtrDate 1/22/90";
- X
- X/* FUNCTION: ParseWindow()
- X** Parses keyword ".WINDOW".
- X** ARGS: keyword the keyword "WINDOW"
- 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
- XParseWindow (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 int i, j, row, col;
- X char line[BUFSIZE];
- X
- X
- X EndWindow (menu);
- X
- X fscanf (menufile, "%d", &menu->wfrow);
- X if (menu->wfrow < 0) menu->wfrow = 0;
- X if (menu->wfrow < menu->titlecount) menu->wfrow = menu->titlecount;
- X if (menu->wfrow > LINES-1) menu->wfrow = LINES-1;
- X fscanf (menufile, "%d", &menu->wlrow);
- X if (menu->wlrow < 0) menu->wlrow = 0;
- X if (menu->wlrow > LINES-1) menu->wlrow = LINES-1;
- X fscanf (menufile, "%d", &menu->wfcol);
- X if (menu->wfcol < 0) menu->wfcol = 0;
- X if (menu->wfcol > COLS-1) menu->wfcol = COLS-1;
- X fscanf (menufile, "%d", &menu->wlcol);
- X if (menu->wlcol < 0) menu->wlcol = 0;
- X if (menu->wlcol > COLS-1) menu->wlcol = COLS-1;
- X
- X/*
- X** Now lets read in the window heading.
- X*/
- X fgets (line, BUFSIZE+1, menufile);
- X line[strlen(line)-1] = '\0';
- X
- X/*
- X** Determine where to display heading.
- X*/
- X for (i = 0, j = 0; line[i] != '\0'; i++)
- X if (line[i] == '\\') j++;
- X row = menu->wfrow - 1;
- X col = (menu->wlcol - menu->wfcol)/2-(strlen(line)-1-j*2)/2 + menu->wfcol;
- X col -= (((strlen(line)-1-j*2) % 2) == 0) ? 0 : 1;
- X if (strlen(line) > 0) displaytext (row, col, line+1);
- X
- X longest = 0;
- X swin = ewin;
- X return (0);
- X}
- SHAR_EOF
- chmod 0444 ParseWindo.c || echo "restore of ParseWindo.c fails"
- echo "x - extracting ParseLine.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > ParseLine.c &&
- Xstatic char Sccsid[] = "@(#)ParseLine.c 1.6 DeltaDate 1/22/90 ExtrDate 1/22/90";
- X
- X/* FUNCTION: ParseLine()
- X** Parses keyword "LINE".
- X** ARGS: keyword the keyword "LINE"
- 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
- X
- XParseLine (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 int col;
- X char *fgets(), line[BUFSIZE+1];
- X char linetype[30];
- X char *sptr;
- X
- X
- X /* default values */
- X menu->linetype = StandoutLine;
- X menu->linetype = menu->linetype | (DumbLine << 9);
- X
- X fgets (line, BUFSIZE, menufile);
- X sptr = line;
- X SKIPJUNK(sptr);
- X
- X /* get border type for active menu */
- X sscanf (sptr, "%s", linetype);
- X sptr += strlen(linetype);
- X if (strcmp (linetype, "DumbLine") == 0)
- X menu->linetype = DumbLine;
- X else if (strcmp (linetype, "StandoutLine") == 0)
- X menu->linetype = StandoutLine;
- X else if (strcmp (linetype, "SingleLine") == 0 ||
- X strcmp (linetype, "DrawLine") == 0)
- X menu->linetype = SingleLine;
- X else if (strcmp (linetype, "MosaicLine") == 0)
- X menu->linetype = MosaicLine;
- X else if (strcmp (linetype, "DiamondLine") == 0)
- X menu->linetype = DiamondLine;
- X else if (strcmp (linetype, "DotLine") == 0)
- X menu->linetype = DotLine;
- X else if (strcmp (linetype, "PlusLine") == 0)
- X menu->linetype = PlusLine;
- X
- X /* get border type for inactive menu - dim (high 8 bits) */
- X sscanf (sptr, "%s", linetype);
- X sptr += strlen(linetype);
- X if (strcmp (linetype, "DumbLine") == 0)
- X menu->linetype = menu->linetype | (DumbLine << 9);
- X else if (strcmp (linetype, "StandoutLine") == 0)
- X menu->linetype = menu->linetype | (DumbLine << 9);
- X else if (strcmp (linetype, "SingleLine") == 0 ||
- X strcmp (linetype, "DrawLine") == 0)
- X menu->linetype = menu->linetype | (SingleLine << 9);
- X else if (strcmp (linetype, "MosaicLine") == 0)
- X menu->linetype = menu->linetype | (MosaicLine << 9);
- X else if (strcmp (linetype, "DiamondLine") == 0)
- X menu->linetype = menu->linetype | (DiamondLine << 9);
- X else if (strcmp (linetype, "DotLine") == 0)
- X menu->linetype = menu->linetype | (DotLine << 9);
- X else if (strcmp (linetype, "PlusLine") == 0)
- X menu->linetype = menu->linetype | (PlusLine << 9);
- X
- X drawline (stdscr, menu->titlecount, menu->linetype&0777, StandoutLine,
- X menu->boxtype);
- X
- X menu->titlecount++;
- X return (0);
- X}
- SHAR_EOF
- chmod 0444 ParseLine.c || echo "restore of ParseLine.c fails"
- echo "x - extracting ParseComnt.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > ParseComnt.c &&
- Xstatic char Sccsid[] = "@(#)ParseComnt.c 1.5 DeltaDate 11/13/88 ExtrDate 1/22/90";
- X
- X/* FUNCTION: ParseComnt()
- X** Parses keyword "###".
- X## A comment line.
- 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
- X
- XParseComnt (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
- X
- X fgets (line, BUFSIZE, menufile);
- X return (0);
- X}
- SHAR_EOF
- chmod 0444 ParseComnt.c || echo "restore of ParseComnt.c fails"
- echo "x - extracting ParseUnix.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > ParseUnix.c &&
- Xstatic char Sccsid[] = "@(#)ParseUnix.c 1.5 DeltaDate 1/22/90 ExtrDate 1/22/90";
- X
- X/* FUNCTION: ParseUnix()
- X** Parses keyword ".unix".
- 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
- Xextern int debug;
- X
- X
- X
- XParseUnix (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, MAXLEN, 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 ".UNIX command is too long. Max = %d",MAXLEN);
- X shutdown ();
- X }
- X command[strlen(command)-1] = '\n'; /* replace \ with \n */
- X fgets (command+strlen(command), MAXLEN, menufile);
- X command[strlen(command)-1] = '\0'; /* get rid of \n */
- X }
- X
- X comptr = command;
- X SKIPJUNK(comptr);
- 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, *opnumber);
- X if (rc == KEY_CANCEL)
- X return (0);
- X }
- X
- X reset_shell_mode ();
- X rc = system (comptr);
- X reset_prog_mode ();
- 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__, keyword, 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 12/88 */
- SHAR_EOF
- chmod 0444 ParseUnix.c || echo "restore of ParseUnix.c fails"
- echo "x - extracting ParseGname.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > ParseGname.c &&
- Xstatic char Sccsid[] = "@(#)ParseGname.c 1.5 DeltaDate 11/13/88 ExtrDate 1/22/90";
- X
- X/* FUNCTION: ParseGname()
- X** Parses keyword ".GNAME".
- X** ARGS: keyword the keyword "GNAME"
- 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
- X
- XParseGname (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 name[BUFSIZE+1];
- X char file[BUFSIZE+1];
- X int i;
- X int NameFound;
- X
- X
- X if (*gindex >= MAXGNAME)
- X {
- X BEEP;
- X mvprintw (20, 0,
- X "Exceeded maximum (%d) number of goto menu names",
- X MAXGNAME-1);
- X shutdown ();
- X }
- X fscanf (menufile, "%s %s", name, file);
- X if (strlen(name) >= 15 || strlen(file) >= 15)
- X {
- X BEEP;
- X mvprintw (20, 0,
- X "The goto menu name and the goto menu file is limited to 14 characters");
- X shutdown ();
- X }
- X
- X /* Check if we already have this menu name */
- X NameFound = FALSE;
- X for (i = 0; i < *gindex; i++)
- X {
- X if (strcmp (name, gnames[i]) == 0)
- X {
- X NameFound = TRUE;
- X strcpy (gfiles[i], file); /* new menu file */
- X }
- X }
- X if (!NameFound)
- X {
- X /* a new name */
- X strcpy (gnames[*gindex], name);
- X strcpy (gfiles[*gindex], file);
- X (*gindex)++;
- X strcpy (gnames[*gindex], ""); /* null last one */
- X }
- X fgets (name, BUFSIZE, menufile); /* junk rest of line */
- X return (0);
- X}
- SHAR_EOF
- chmod 0444 ParseGname.c || echo "restore of ParseGname.c fails"
- echo "x - extracting ParseAuthr.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > ParseAuthr.c &&
- Xstatic char Sccsid[] = "@(#)ParseAuthr.c 1.5 DeltaDate 1/22/90 ExtrDate 1/22/90";
- X
- X/* FUNCTION: ParseAuthr()
- X** Parses keyword "AUTHORIZE".
- X** This function determines whether you are authorized
- X** to run this menu or not.
- X** ARGS: keyword the keyword "AUTHORIZE"
- 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 you are authorized
- X** NOWAYJOSE nowayjose
- X*/
- X
- X#include <curses.h>
- X#include <pwd.h>
- X#include "menu.h"
- X
- X
- X
- XParseAuthr (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 *strchr();
- X char line[MAXLEN+100], *lptr, word[15];
- X char user[15];
- X int OKflag;
- X struct passwd *getpwuid();
- X struct passwd *pw; /* password entry */
- X
- X
- X pw = getpwuid (getuid()); /* get real uid */
- X strcpy (user, pw->pw_name);
- X
- X /*
- X ** Read in option command
- X ** strcat continuation lines
- X */
- X fgets (line, BUFSIZE, menufile);
- X line[strlen(line)-1] = '\0'; /* get rid of \n */
- X while (line[strlen(line)-1] == '\\')
- X {
- X if (strlen(line) >= MAXLEN)
- X {
- X BEEP;
- X mvprintw (ErrRow-2, 0,
- X "Option command is too long. Max = %d",MAXLEN);
- X shutdown ();
- X }
- X line[strlen(line)-1] = '\0'; /* junk \ */
- X fgets (line+strlen(line), BUFSIZE, menufile);
- X line[strlen(line)-1] = '\0'; /* get rid of \n */
- X }
- X
- X lptr = line;
- X OKflag = FALSE;
- X while (lptr && (sscanf (lptr, "%s", word) == 1))
- X {
- 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
- chmod 0444 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[] = "@(#)ParseText.c 1.6 DeltaDate 1/22/90 ExtrDate 1/22/90";
- 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 (row, col, fline);
- X return (0);
- X}
- X/* Paul J. Condie 4/88 */
- SHAR_EOF
- chmod 0444 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[] = "@(#)ParseSpace.c 1.4 DeltaDate 1/22/90 ExtrDate 1/22/90";
- 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 strcpy (menu->option[menu->optioncount]->command, "");
- X
- X fgets (line, BUFSIZE, menufile); /* junk rest of line */
- X menu->optioncount++;
- X ewin++;
- X return (0);
- X}
- SHAR_EOF
- chmod 0444 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[] = "@(#)ParInclude.c 1.2 DeltaDate 1/22/90 ExtrDate 1/22/90";
- 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 unixfile[100];
- X char filename[30];
- X int rc;
- X int KEYFOUND;
- X int idx;
- X char newkey[MAXKEYLENGTH];
- X
- X fgets (line, BUFSIZE, menufile);
- X sscanf (line, "%s", filename);
- X
- X /*
- X ** Open and Parse the new menu file
- X */
- X strcpy (unixfile, findfile (filename, ".", getenv("MENUDIR"), ""));
- 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 0444 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[2*BUFSIZE];
- X char *aptr;
- X
- X
- X fgets (line, BUFSIZE, menufile);
- X line[strlen(line)-1] = '\0';
- X strcpy (assignment, keyword);
- X strcat (assignment, line);
- X aptr = assignment;
- X if (debug)
- X {
- X fprintf (stderr, "\n[ParAssign] command=:%s:", aptr);
- X fflush (stderr);
- X }
- X setvariable (&aptr);
- X return (0);
- X}
- SHAR_EOF
- chmod 0644 ParAssign.c || echo "restore of ParAssign.c fails"
- echo "x - extracting ShowOption.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > ShowOption.c &&
- Xstatic char Sccsid[] = "@(#)ShowOption.c 1.3 DeltaDate 10/16/88 ExtrDate 1/22/90";
- 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 (menu->option[index]->row, 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 0444 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 "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 char command[BUFSIZ];
- X int rc; /* return code */
- X char *comptr;
- X int screenflag = FALSE;
- X
- X
- X
- 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 return (0);
- 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 NULL,
- X#else
- X "`tput smul`",
- X#endif
- X menu->option[opnumber]->description,
- X#if BSD || SUN
- X NULL,
- 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 rc = system (command);
- X if (debug)
- X {
- X fprintf (stderr,
- X "\n[RunSystem] <%s> return code = %d, errno = %d",
- X rc, errno);
- X }
- X
- X/* Pending survey on whether majority of users want this or not
- X if ( rc )
- X {
- X printf( "\n\nPress RETURN when ready ==> " ) ;
- X fflush( stdout ) ;
- X beep() ;
- X getchar() ;
- X }
- X*/
- X reset_prog_mode ();
- X clearok (stdscr, TRUE);
- X
- 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[] = "@(#)RunExit.c 1.5 DeltaDate 1/22/90 ExtrDate 1/22/90";
- 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 "menu.h"
- 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 char command[BUFSIZ];
- X int rc; /* return code */
- X
- X refresh ();
- X if (strcmp (menu->option[opnumber]->command, "") != 0)
- X {
- X sprintf (command, "%s", menu->option[opnumber]->command);
- X reset_shell_mode ();
- X rc = system (command);
- X reset_prog_mode ();
- X }
- X return (QUIT);
- X}
- SHAR_EOF
- chmod 0444 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[] = "@(#)RunPopMenu.c 1.8 DeltaDate 1/22/90 ExtrDate 1/22/90";
- 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 /*
- 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++;
- SHAR_EOF
- echo "End of part 4"
- echo "File RunPopMenu.c is continued in part 5"
- echo "5" > s2_seq_.tmp
- exit 0
-