Path: utzoo!utgpu!cs.utexas.edu!wuarchive!usc!ucsd!pacbell.com!pacbell!pcbox!pjc From: pjc@pcbox.UUCP (Paul J. Condie) Newsgroups: alt.sources Subject: menu(1) part 14 of 14 Keywords: menu Message-ID: <448@pcbox.UUCP> Date: 26 Dec 90 20:17:44 GMT Organization: Yet Another Box - Casto Valley, Ca. Lines: 312 #!/bin/sh # this is part 14 of a multipart archive # do not concatenate these parts, unpack them in order with /bin/sh # file utilities.d/msgbox.d/msgbox.c continued # CurArch=14 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 utilities.d/msgbox.d/msgbox.c" sed 's/^X//' << 'SHAR_EOF' >> utilities.d/msgbox.d/msgbox.c X#define ARG_COUNT_ERR 1 /* improper argc value in main */ X#define MSG_LEN_ERR 2 /* argv[2] message is out of range (1 - 78 chars) */ X#define STANDOUT 2 /* drawbox() needs this for border attribute. */ X X Xmain(argc, argv) Xint argc; Xchar *argv[]; X{ X char msg[78]; /* a message gotten from argv[2] or error msg */ X X int BoxColumns, /* total columns in box, calculated */ X BoxStartCol, /* starting left most column of box, calculated */ X BoxTop, /* starting top most row of box, from argv[1] */ X ErrStatus; /* values: NO_ERR, ARG_COUNT_ERR, MSG_LEN_ERR */ X X WINDOW *MsgWind; /* The mesage box itself */ X X /* derive the box's top row value from argv[1] via atoi() */ X BoxTop = atoi(argv[2]); X X /* if error in argv[2], use 0 as BoxTop value */ X if (BoxTop > MAX_ROW || BoxTop < 1) { X BoxTop=0; X } X X /* check for proper arg count and proper msg length; If in error, form msg X * as an error message; if no error, use argv[2] as msg. X */ X if (argc < 2 || argc > 3) { X ErrStatus=ARG_COUNT_ERR; X } else { X /* check the string length of the message */ X if (strlen(argv[1]) && strlen(argv[1]) < 79 ) { X ErrStatus=NO_ERR; X } else { X ErrStatus=MSG_LEN_ERR; X } X } X X X /* if no errors were found, use argv[2] as msg, else use a USEAGE message */ X if (ErrStatus == NO_ERR) { X strcpy(msg, argv[1]); X } else { X sprintf(msg, X " USAGE: %s \"Quote mark delimited message (1-78 chars)\" [TopRow] ", X argv[0]); X } X X BoxColumns=strlen(msg) + 2; /* size box on msg */ X BoxStartCol=(80 - BoxColumns)/2; /* center window horizontally */ X X X initscr(); X X X /* Create a new window to display a message to the user */ X MsgWind=newwin(BOX_ROWS, BoxColumns, BoxTop, BoxStartCol); X drawbox(MsgWind, 1, 1, BOX_ROWS, BoxColumns, STANDOUT, STANDOUT, 0, 0); X mvwaddstr(MsgWind, 2, 1, msg); X wrefresh(MsgWind); X X endwin(); X X /* give humans time to view usage error message */ X if (ErrStatus != NO_ERR) X sleep(5); X X exit(ErrStatus); X X} /* end main */ SHAR_EOF echo "File utilities.d/msgbox.d/msgbox.c is complete" chmod 0644 utilities.d/msgbox.d/msgbox.c || echo "restore of utilities.d/msgbox.d/msgbox.c fails" echo "x - extracting utilities.d/MenuMsg.d/MenuMsg.1 (Text)" sed 's/^X//' << 'SHAR_EOF' > utilities.d/MenuMsg.d/MenuMsg.1 && X. \ %W% DeltaDate %G% ExtrDate %H% X.po 6 X.TH MENUMSG 1 "" "Menu Utility" X X.SH \s9NAME\s0 XMenuMsg -\ writes a message to a menu screen X X.SH SYNOPSIS X.B MenuMsg [ DONT_CLEAR ] row col message X X.SH DESCRIPTION X.B MenuMsg Xis designed to be a utility program to be used in conjunction with the menu(1) Xprogram. This can be used to display a message to a menu screen without Xmessing up the screen. The [ DONT_CLEAR ] option causes MenuMsg not to Xclear the line before displaying the message. X X X.SH EXAMPLE XTo print a message to the message row: X.nf X X MenuMsg `tput lines` 0 "This is a message." X.fi X X.SH AUTHOR XPaul J. Condie 7/90 X.br X{att,bellcore,sun,ames,pyramid}!pacbell!pcbox!pjc X X.SH SEE ALSO Xmenu(1). SHAR_EOF chmod 0644 utilities.d/MenuMsg.d/MenuMsg.1 || echo "restore of utilities.d/MenuMsg.d/MenuMsg.1 fails" echo "x - extracting utilities.d/MenuMsg.d/MenuMsg.c (Text)" sed 's/^X//' << 'SHAR_EOF' > utilities.d/MenuMsg.d/MenuMsg.c && X/* X** MenuMsg(1) X** Display text to a menu(1) screen without trashing the screen. X** ARGS X** row and col to dispaly text to X*/ X X#include X#include X Xmain (argc, argv) X int argc; X char *argv[]; X{ X FILE *fopen(), *fp; X char *tparm(); X char *getenv(); X char *tparm(); X int _outch(); X char *term; X int status; X char *str; X int row; X int col; X X if ((fp = fopen ("/dev/tty", "w")) == (FILE *)NULL)/* reopen terminal */ X exit (1); X if ((term = getenv ("TERM")) == (char *)NULL) X exit (1); X setupterm (term, 1, &status); /* set-up terminal */ X if (status != 1) X exit (1); X if (cursor_address == NULL) /* we need cursor movement */ X exit (1); X if (strcmp (argv[1], "DONT_CLEAR") == 0) X { X sscanf (argv[2], "%d", &row); X sscanf (argv[3], "%d", &col); X fprintf (fp, "%s%s", tparm (cursor_address, row, col), argv[4]); X } X else X { X sscanf (argv[1], "%d", &row); X sscanf (argv[2], "%d", &col); X fprintf (fp, "%s", tparm (cursor_address, row, col)); X fprintf (fp, "%s", tparm (clr_eol)); X fprintf (fp, "%s%s", tparm (cursor_address, row, col), argv[3]); X } X /* X tputs (tparm (cursor_address, row, col), 1, _outch); X fprintf (fp, "%s", argv[3]); X */ X fclose (fp); X} X/* Paul J. Condie 7-90 */ SHAR_EOF chmod 0644 utilities.d/MenuMsg.d/MenuMsg.c || echo "restore of utilities.d/MenuMsg.d/MenuMsg.c fails" echo "x - extracting utilities.d/MenuMsg.d/MenuPrompt.1 (Text)" sed 's/^X//' << 'SHAR_EOF' > utilities.d/MenuMsg.d/MenuPrompt.1 && X. \ %W% DeltaDate %G% ExtrDate %H% X.po 6 X.TH MENUPROMPT 1 "" "Menu Utility" X X.SH \s9NAME\s0 XMenuPrompt -\ writes a prompt message to a menu screen then prompts for a reply X X.SH SYNOPSIS X.B MenuPrompt [ DONT_CLEAR ] row col message X X.SH DESCRIPTION X.B MenuPrompt Xis designed to be a utility program to be used in conjunction with the menu(1) Xprogram. This can be used to prompt for a reply from the user within a Xmenu screen. X X X.SH EXAMPLE XTo prompt the user: X.nf X X reply=`MenuPrompt \\`tput lines\\` 0 "Do you want to continue (y/n) ? "` X.fi X X.SH AUTHOR XPaul J. Condie 7/90 X.br X{att,bellcore,sun,ames,pyramid}!pacbell!pcbox!pjc X X.SH SEE ALSO Xmenu(1). SHAR_EOF chmod 0644 utilities.d/MenuMsg.d/MenuPrompt.1 || echo "restore of utilities.d/MenuMsg.d/MenuPrompt.1 fails" echo "x - extracting utilities.d/MenuMsg.d/MenuPrompt.c (Text)" sed 's/^X//' << 'SHAR_EOF' > utilities.d/MenuMsg.d/MenuPrompt.c && X/* X** MenuPrompt(1) X** ARGS X** row and col to dispaly text to X*/ X X#include X#include X Xmain (argc, argv) X int argc; X char *argv[]; X{ X FILE *fopen(), *fpout, *fpin; X char *tparm(); X char *getenv(); X char *tparm(); X int _outch(); X char *term; X int status; X char *strp; X int row; X int col; X char buf[BUFSIZ]; X int ch; X X if ((fpout = fopen ("/dev/tty", "w")) == (FILE *)NULL) X exit (1); X if ((fpin = fopen ("/dev/tty", "r")) == (FILE *)NULL) X exit (1); X if ((term = getenv ("TERM")) == (char *)NULL) X exit (1); X setupterm (term, 1, &status); /* set-up terminal */ X if (status != 1) X exit (1); X if (cursor_address == NULL) /* we need cursor movement */ X exit (1); X if (strcmp (argv[1], "DONT_CLEAR") == 0) X { X sscanf (argv[2], "%d", &row); X sscanf (argv[3], "%d", &col); X fprintf (fpout, "%s%s", tparm (cursor_address, row, col), X argv[4]); X } X else X { X sscanf (argv[1], "%d", &row); X sscanf (argv[2], "%d", &col); X fprintf (fpout, "%s", tparm (cursor_address, row, col)); X fprintf (fpout, "%s", tparm (clr_eol)); X fprintf (fpout, "%s%s", tparm (cursor_address, row, col), X argv[3]); X } X X strp = buf; X while (1) X { X ch = fgetc (fpin); X if ((char)ch == '\n' || (char)ch == '\r') X break; X *strp = (char)ch; X fprintf (fpout, "%c", *strp); fflush (stdout); X strp++; X } X *strp = '\0'; X printf ("%s", buf); X X fclose (fpin); X fclose (fpout); X} X/* Paul J. Condie 7-90 */ SHAR_EOF chmod 0644 utilities.d/MenuMsg.d/MenuPrompt.c || echo "restore of utilities.d/MenuMsg.d/MenuPrompt.c fails" echo "x - extracting utilities.d/MenuMsg.d/makefile (Text)" sed 's/^X//' << 'SHAR_EOF' > utilities.d/MenuMsg.d/makefile && Xall: MenuMsg MenuPrompt X XMenuMsg: MenuMsg.o X $(CC) -O MenuMsg.c -lcurses -o MenuMsg X XMenuPrompt: MenuPrompt.o X $(CC) -O MenuPrompt.c -lcurses -o MenuPrompt SHAR_EOF chmod 0644 utilities.d/MenuMsg.d/makefile || echo "restore of utilities.d/MenuMsg.d/makefile fails" rm -f s2_seq_.tmp echo "You have unpacked the last part" exit 0