home *** CD-ROM | disk | FTP | other *** search
- From: allbery@ncoast.UUCP (Brandon S. Allbery)
- Newsgroups: comp.sources.misc
- Subject: v02i035: UNIFY(r) Screens with Curses, Part 3 of 4
- Message-ID: <7162@ncoast.UUCP>
- Date: 31 Jan 88 04:14:08 GMT
- Approved: allbery@ncoast.UUCP
-
- Comp.sources.misc: Volume 2, Issue 35
- Submitted-By: The Moderator <allbery@ncoast.UUCP>
- Archive-Name: usc/Part3
-
- I've received so many requests for my Unify(r) screen routines that I am
- posting them. The USC library is in four parts; unshar them and type "make".
- The curses used is System V; BSDers will want to tweak the usual stuff, such
- as beep() and cbreak().
-
- I also have a simple screen program using this; if demand warrants, I will
- post it -- but in terms of features, you're probably better off with ENTER.
-
- #--------------------------------CUT HERE-------------------------------------
- #! /bin/sh
- #
- # This is a shell archive. Save this into a file, edit it
- # and delete all lines above this comment. Then give this
- # file to sh by executing the command "sh file". The files
- # will be extracted into the current directory owned by
- # you with default permissions.
- #
- # The files contained herein are:
- #
- # -r--r--r-- 1 allbery users 761 Jan 30 18:01 ptct_wrt.c
- # -r--r--r-- 1 allbery users 710 Jan 30 18:01 ptime.c
- # -r--r--r-- 1 allbery users 800 Jan 30 18:01 ptube.c
- # -r--r--r-- 1 allbery users 6626 Jan 30 18:01 ringmenu.c
- # -rw-rw-rw- 1 allbery users 152 Jan 30 18:01 ringmenu.h
- # -r--r--r-- 1 allbery users 769 Jan 30 18:01 setcook.c
- # -r--r--r-- 1 allbery users 703 Jan 30 18:01 setraw.c
- # -r--r--r-- 1 allbery users 583 Jan 30 18:01 setxrc.c
- # -r--r--r-- 1 allbery users 761 Jan 30 18:01 sfldesc.c
- # -r--r--r-- 1 allbery users 2483 Jan 30 18:01 shellout.c
- # -rw-r--r-- 1 allbery users 302 Jan 30 18:01 tester.c
- # -r--r--r-- 1 allbery users 2314 Jan 30 18:01 uamt.c
- # -r--r--r-- 1 allbery users 5459 Jan 30 18:01 udate.c
- # -r--r--r-- 1 allbery users 789 Jan 30 18:01 uerror.c
- # -r--r--r-- 1 allbery users 2267 Jan 30 18:01 uflt.c
- # -r--r--r-- 1 allbery users 2325 Jan 30 18:01 uhamt.c
- # -r--r--r-- 1 allbery users 1929 Jan 30 18:01 ulong.c
- # -r--r--r-- 1 allbery users 1849 Jan 30 18:01 upbuf.c
- # -r--r--r-- 1 allbery users 2266 Jan 30 18:01 updata.c
- # -r--r--r-- 1 allbery users 1252 Jan 30 18:01 upfield.c
- # -r--r--r-- 1 allbery users 2779 Jan 30 18:01 upscrf.c
- # -r--r--r-- 1 allbery users 2172 Jan 30 18:01 uptube.c
- # -rw-r--r-- 1 allbery users 4578 Jan 30 18:01 usc.h
- # -r--r--r-- 1 allbery users 2034 Jan 30 18:01 ushort.c
- # -r--r--r-- 1 allbery users 1339 Jan 30 18:01 ustr.c
- #
- echo 'x - ptct_wrt.c'
- if test -f ptct_wrt.c; then echo 'shar: not overwriting ptct_wrt.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > ptct_wrt.c
- X/*
- X * $Header: ptct_wrt.c,v 1.2 87/04/29 11:31:19 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: ptct_wrt.c,v $
- X * Revision 1.2 87/04/29 11:31:19 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * ENTRY POINT: ptct_wrt() -- Specify whether output is to be in protected
- X * mode or not
- X *
- X * DIFFERENCE FROM UNIFY: All we do is check fd == 1, since curses handles the
- X * screen itself.
- X */
- X
- Xvoid ptct_wrt(fd, flg) {
- X if (fd != 1)
- X xerror(-1, "ptct_wrt", "Multi-terminal operation on fd %d not supported", fd);
- X}
- ________This_Is_The_END________
- if test `wc -l < ptct_wrt.c` -ne 31; then
- echo 'shar: ptct_wrt.c was damaged during transit (should have been 31 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - ptime.c'
- if test -f ptime.c; then echo 'shar: not overwriting ptime.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > ptime.c
- X/*
- X * $Header: ptime.c,v 1.2 87/04/29 12:57:34 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: ptime.c,v $
- X * Revision 1.2 87/04/29 12:57:34 brandon
- X * DUMB!!! Forgot to deref the buffer
- X *
- X * Revision 1.1 87/04/29 12:49:31 brandon
- X * Initial revision
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * Display a value of type HR.
- X */
- X
- Xvoid ptime(buf)
- Xshort *buf; {
- X (void) setraw();
- X (void) attron(A_UNDERLINE);
- X (void) printw("%02d:%02d", *buf / 100, *buf % 100);
- X (void) attroff(A_UNDERLINE);
- X}
- ________This_Is_The_END________
- if test `wc -l < ptime.c` -ne 33; then
- echo 'shar: ptime.c was damaged during transit (should have been 33 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - ptube.c'
- if test -f ptube.c; then echo 'shar: not overwriting ptube.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > ptube.c
- X/*
- X * $Header: ptube.c,v 1.1 87/04/29 13:37:02 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: ptube.c,v $
- X * Revision 1.1 87/04/29 13:37:02 brandon
- X * Initial revision
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * ENTRY POINT: ptube() -- Display data from a buffer in the format of a
- X * database field
- X *
- X * DIFFERENCE FROM UNIFY: FLT ends up being printed with %g. See pflt()
- X * for the gory details.
- X */
- X
- Xvoid ptube(x, y, fld, buf)
- Xchar *buf; {
- X FLDESC fd;
- X
- X if (!fldesc(fld, &fd))
- X xerror(-1, "ptube", "Invalid database field %d", fld);
- X outscrf(x, y, fd.f_typ, fd.f_len, buf);
- X}
- ________This_Is_The_END________
- if test `wc -l < ptube.c` -ne 35; then
- echo 'shar: ptube.c was damaged during transit (should have been 35 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - ringmenu.c'
- if test -f ringmenu.c; then echo 'shar: not overwriting ringmenu.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > ringmenu.c
- X/*
- X * $Header: ringmenu.c,v 1.9 87/06/11 15:50:36 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: ringmenu.c,v $
- X * Revision 1.9 87/06/11 15:50:36 brandon
- X * Fixed page backup bug, used XRC_NOFLSH in showmenu(), misc. other fixes.
- X *
- X * Revision 1.8 87/06/02 18:47:53 brandon
- X * Had forgotten to force input to uppercase.
- X *
- X * Revision 1.7 87/06/02 18:41:05 brandon
- X * Now uses XRC_FWDGO, so pressing RETURN has a more intuitive result.
- X *
- X * Revision 1.6 87/06/02 18:23:10 brandon
- X * Fixed another page-number bug.
- X *
- X * Revision 1.5 87/06/02 17:35:22 brandon
- X * Fixed bug with `page' numbering, and added a setraw() in case it's called
- X * before any other USC functions.
- X *
- X * Revision 1.4 87/06/02 16:14:38 brandon
- X * Fully linted.
- X *
- X * Revision 1.3 87/06/02 16:02:33 brandon
- X * Partially linted.
- X *
- X * Revision 1.2 87/06/02 15:47:15 brandon
- X * Partially linted.
- X *
- X * Revision 1.1 87/06/02 15:37:27 brandon
- X * Initial revision
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * Ring menu manager. You haven't seen a real ring menu yet; this one uses
- X * the full capability of the key primitives (including using "view" to show
- X * all the entries on the menu, one per line in a temp window), it scrolls if
- X * the menu is wider than the screen, etc. Rather than using `!' shellout,
- X * the ^P convention is used (subshell for Sys5, suspend for BSD) as a part
- X * of the input function (the same one used by inl()). (Late-breaking news:
- X * the latest version of I4GL now supports wrapound ring menus. But the help
- X * feature is still unique to USC.)
- X *
- X * space, CR next (wraps)
- X * tab exit without selecting
- X * esc execute
- X * ^F next `page'
- X * ^B last `page'
- X * ^X exit program
- X * ^P shellout/suspend
- X * ^H previous (wraps)
- X * ^V display all menu entries in a window
- X */
- X
- Xstatic int paws(w)
- XWINDOW *w; {
- X (void) wmove(w, LINES - 1, 0);
- X (void) wattron(w, A_STANDOUT);
- X (void) waddstr(w, " Press ENTER for the next page, or TAB to return: ");
- X (void) wattroff(w, A_STANDOUT);
- X (void) wclrtoeol(w);
- X (void) wrefresh(w);
- X switch (incs(XRC_NOFLSH)) {
- X case -2:
- X return 0;
- X case -3:
- X return 1;
- X }
- X /*NOTREACHED*/
- X}
- X
- Xstatic void showmenu(title, items)
- Xchar *title;
- Xstruct cmd *items; {
- X int nitem, line;
- X WINDOW *w;
- X
- X (void) refresh(); /* otherwise incs() zaps the top two lines */
- X if ((w = newwin(LINES, COLS, 0, 0)) == (WINDOW *) 0)
- X xerror("showmenu", -1, "no space for menu window for `%s'", (title == (char *) 0? "(null)": title));
- X (void) mvwaddstr(w, 0, 0, "Commands on th");
- X if (title == (char *) 0 || title[0] == '\0')
- X (void) waddstr(w, "is");
- X else
- X (void) wprintw(w, "e %s", title);
- X (void) waddstr(w, " menu:\n");
- X (void) waddstr(w, "SPACE or ENTER moves forward, BACKSPACE moves backward, ESC selects, TAB exits;\n");
- X (void) waddstr(w, " CONTROL-F moves forward one page, CONTROL-B moves backward one page.\n");
- X line = 4;
- X for (nitem = 0; items[nitem].c_key != EOM; nitem++) {
- X if (line == LINES - 1)
- X if (!paws(w))
- X break;
- X else {
- X (void) wmove(w, 4, 0);
- X (void) wclrtobot(w);
- X line = 4;
- X }
- X (void) wmove(w, line, 0);
- X if (items[nitem].c_title != INVISIBLE)
- X (void) waddstr(w, items[nitem].c_title);
- X else
- X (void) waddch(w, items[nitem].c_key);
- X (void) wprintw(w, "\t%s", items[nitem].c_desc);
- X line++;
- X }
- X (void) paws(w);
- X (void) delwin(w);
- X (void) touchwin(stdscr);
- X}
- X
- Xint ringmenu(title, menu/* , initial */)
- Xchar *title;
- Xstruct cmd *menu; {
- X int *mpage;
- X int nitem, npage, len, page, item, ch, x, y;
- X
- X setraw();
- X npage = 1;
- X if (title != (char *) 0 && *title != '\0')
- X len = strlen(title) + 2;
- X else
- X len = 0;
- X for (nitem = 0; menu[nitem].c_key != EOM; nitem++)
- X if (menu[nitem].c_title != INVISIBLE)
- X if ((len += strlen(menu[nitem].c_title) + 2) >= COLS - 1) {
- X npage++;
- X if (title != (char *) 0 && *title != '\0')
- X len = strlen(title) + 2;
- X else
- X len = 0;
- X }
- X if ((mpage = (int *) malloc((unsigned) (npage + 1) * sizeof *mpage)) == (int *) 0)
- X xerror("ringmenu", 0, "No memory for menu `%s' page layout", (title == (char *) 0? "(null)": title));
- X npage = 0;
- X if (title != (char *) 0 && *title != '\0')
- X len = strlen(title) + 2;
- X else
- X len = 0;
- X mpage[0] = 0;
- X for (nitem = 0; menu[nitem].c_key != EOM; nitem++)
- X if (menu[nitem].c_title != INVISIBLE)
- X if ((len += strlen(menu[nitem].c_title) + 2) >= COLS - 1) {
- X mpage[++npage] = nitem;
- X if (title != (char *) 0 && *title != '\0')
- X len = strlen(title) + 2;
- X else
- X len = 0;
- X }
- X mpage[++npage] = -1;
- X item = 0;
- X page = 0;
- X for (;;) {
- X (void) move(0, 0);
- X if (title != (char *) 0 && title[0] != '\0')
- X (void) printw("%s: ", title);
- X for (len = mpage[page]; menu[len].c_key != EOM && (page == npage - 1 || len < mpage[page + 1]); len++) {
- X if (menu[len].c_title == INVISIBLE)
- X continue;
- X if (len == item)
- X (void) attron(A_STANDOUT);
- X (void) printw(" %s ", menu[len].c_title);
- X if (len == item) {
- X (void) attroff(A_STANDOUT);
- X if (menu[len].c_desc != (char *) 0) {
- X getyx(stdscr, y, x);
- X (void) mvaddstr(1, 0, menu[len].c_desc);
- X (void) clrtoeol();
- X (void) move(y, x);
- X }
- X }
- X }
- X (void) clrtoeol();
- X if (title != (char *) 0 && *title != '\0')
- X (void) move(0, strlen(title) + 1);
- X else
- X (void) move(0, COLS - 1);
- X (void) refresh();
- X ch = incs(XRC_CFB|XRC_LOOK|XRC_GO|XRC_CHAR|XRC_BKSP|XRC_FWDGO);
- X if (islower(ch))
- X ch = toupper(ch);
- X (void) move(0, 0);
- X (void) clrtoeol();
- X (void) move(1, 0);
- X (void) clrtoeol();
- X switch (ch) {
- X case BKSP:
- X if (--item < mpage[page])
- X if (page-- == 0) {
- X page = npage - 1;
- X for (item = mpage[page]; menu[item].c_key != EOM; item++)
- X ;
- X item--;
- X }
- X break;
- X case BACK:
- X free((char *) mpage);
- X return BACK;
- X case FWD:
- X if (menu[++item].c_key == EOM) {
- X page = 0;
- X item = 0;
- X }
- X else if (mpage[page + 1] != -1 && item == mpage[page + 1])
- X page++;
- X break;
- X case LOOK:
- X showmenu(title, menu);
- X break;
- X case GO:
- X free((char *) mpage);
- X return menu[item].c_key;
- X case CFWD:
- X if (mpage[++page] == -1)
- X page = 0;
- X item = mpage[page];
- X break;
- X case CBACK:
- X if (page-- == 0)
- X page = npage - 1;
- X item = mpage[page];
- X break;
- X default:
- X for (len = 0; menu[len].c_key != EOM; len++)
- X if ((islower(menu[len].c_key)? toupper(menu[len].c_key): menu[len].c_key) == ch) {
- X free((char *) mpage);
- X return menu[len].c_key;
- X }
- X (void) beep();
- X }
- X }
- X}
- ________This_Is_The_END________
- if test `wc -l < ringmenu.c` -ne 243; then
- echo 'shar: ringmenu.c was damaged during transit (should have been 243 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - ringmenu.h'
- if test -f ringmenu.h; then echo 'shar: not overwriting ringmenu.h'; else
- sed 's/^X//' << '________This_Is_The_END________' > ringmenu.h
- Xstruct ringmenu {
- X char c_key;
- X char *c_title;
- X char *c_desc;
- X};
- X
- X#define EOM '\0' /* end of ring menu */
- X#define INVIS "" /* invisible menu entry */
- ________This_Is_The_END________
- if test `wc -l < ringmenu.h` -ne 8; then
- echo 'shar: ringmenu.h was damaged during transit (should have been 8 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - setcook.c'
- if test -f setcook.c; then echo 'shar: not overwriting setcook.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > setcook.c
- X/*
- X * $Header: setcook.c,v 1.2 87/04/29 11:31:20 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: setcook.c,v $
- X * Revision 1.2 87/04/29 11:31:20 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * Leave curses mode. Again, an assumption is made -- most UNIFY programs
- X * under pre-3.2 UNIFY DO NOT FOLLOW THE ASSUMPTION!!! so don't recompile
- X * UNIFY stuff unless you don't mind the program not cleaing up after itself.
- X */
- X
- Xvoid setcook() {
- X if (stdscr != (WINDOW *) 0) {
- X (void) endwin();
- X stdscr = (WINDOW *) 0;
- X }
- X}
- ________This_Is_The_END________
- if test `wc -l < setcook.c` -ne 31; then
- echo 'shar: setcook.c was damaged during transit (should have been 31 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - setraw.c'
- if test -f setraw.c; then echo 'shar: not overwriting setraw.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > setraw.c
- X/*
- X * $Header: setraw.c,v 1.2 87/04/29 11:31:22 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: setraw.c,v $
- X * Revision 1.2 87/04/29 11:31:22 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * Set up curses, if necessary. Called by all USC I/O routines. This routine
- X * is based on an assumption of how setraw() is used.
- X */
- X
- Xvoid setraw() {
- X if (stdscr == (WINDOW *) 0) {
- X (void) initscr();
- X (void) noecho();
- X (void) cbreak();
- X (void) nonl();
- X }
- X}
- ________This_Is_The_END________
- if test `wc -l < setraw.c` -ne 32; then
- echo 'shar: setraw.c was damaged during transit (should have been 32 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - setxrc.c'
- if test -f setxrc.c; then echo 'shar: not overwriting setxrc.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > setxrc.c
- X/*
- X * $Header: setxrc.c,v 1.2 87/04/29 11:31:23 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: setxrc.c,v $
- X * Revision 1.2 87/04/29 11:31:23 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * Set the extended-return-code flag to the specified value.
- X */
- X
- Xint setxrc(f) {
- X int of;
- X
- X of = __ext_rcodes;
- X __ext_rcodes = f;
- X return of;
- X}
- ________This_Is_The_END________
- if test `wc -l < setxrc.c` -ne 30; then
- echo 'shar: setxrc.c was damaged during transit (should have been 30 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - sfldesc.c'
- if test -f sfldesc.c; then echo 'shar: not overwriting sfldesc.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > sfldesc.c
- X/*
- X * $Header: sfldesc.c,v 1.2 87/04/29 11:31:25 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: sfldesc.c,v $
- X * Revision 1.2 87/04/29 11:31:25 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * ENTRY POINT: sfldesc() -- Return screen field description
- X *
- X * DIFFERENCE FROM UNIFY: None. However, see xsfldesc().
- X */
- X
- Xsfldesc(sfld, buf)
- XSFLDESC *buf; {
- X if (sfld < 0 || sfld >= __nsf)
- X return 0;
- X buf->sf_fld = __scf[sfld].q_fld;
- X buf->sf_col = __scf[sfld].q_fx;
- X buf->sf_lin = __scf[sfld].q_fy;
- X return 1;
- X}
- ________This_Is_The_END________
- if test `wc -l < sfldesc.c` -ne 34; then
- echo 'shar: sfldesc.c was damaged during transit (should have been 34 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - shellout.c'
- if test -f shellout.c; then echo 'shar: not overwriting shellout.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > shellout.c
- X/*
- X * $Header: shellout.c,v 1.4 87/06/17 17:40:53 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: shellout.c,v $
- X * Revision 1.4 87/06/17 17:40:53 brandon
- X * I'm beginning to think that it is impossible to get to the bottom of the
- X * screen....
- X *
- X * Revision 1.3 87/06/11 16:37:20 brandon
- X * Still didn't move to BOS. Now using term{cap, info} low-level code.
- X *
- X * Revision 1.2 87/06/09 11:28:14 brandon
- X * Forgot to move to BOS before starting the shell (suspending). This is done
- X * with mvcur(), since otherwise temporary windows (^V) would fail.
- X *
- X * Revision 1.1 87/06/01 16:32:06 brandon
- X * Initial revision
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X#include <signal.h>
- X
- X/*
- X * Internal routine used by inl() and inc() to suspend the program. Under
- X * System V, this does a subshell instead.
- X */
- X
- Xstatic void _putc(ch)
- Xchar ch; {
- X (void) write(1, &ch, 1);
- X}
- X
- X#ifndef TERMCAP
- X#include <term.h>
- X#define CM cursor_address
- X#endif
- X
- Xstatic void bos() {
- X/* this does a move without changing curses... multiple windows would fail. */
- X (void) tputs(tgoto(CM, 1, LINES - 1), 0, _putc);
- X}
- X
- X#ifdef SIGTSTP
- X
- Xvoid _inlsusp() {
- X (void) nocbreak();
- X (void) nonl();
- X (void) echo(); /* this is a macro in the BSD curses, hurrah! */
- X bos();
- X (void) kill(getpid(), SIGSTOP);
- X (void) cbreak();
- X (void) nl();
- X (void) noecho();
- X (void) move(y, x);
- X (void) clearok(curscr);
- X (void) wrefresh(curscr);
- X}
- X
- X#else
- X
- Xvoid _inlsusp() {
- X char *sh;
- X int (*oint)(), (*oquit)();
- X int pid, status;
- X
- X if ((sh = getenv("SHELL")) == (char *) 0)
- X sh = "/bin/sh";
- X oint = signal(SIGINT, SIG_IGN);
- X oquit = signal(SIGQUIT, SIG_IGN);
- X bos();
- X (void) nocbreak();
- X (void) nl();
- X (void) system("stty echo"); /* ECCH! echo() conflicts with Unify!!! */
- X /* presumably, I don't need vfork() because of the above */
- X switch (pid = fork()) {
- X case -1:
- X status = -1;
- X break;
- X case 0:
- X (void) signal(SIGINT, SIG_DFL);
- X (void) signal(SIGQUIT, SIG_DFL);
- X (void) execlp(sh, sh, "-i", (char *) 0);
- X _exit(-1);
- X default:
- X while (wait(&status) != pid)
- X ;
- X break;
- X }
- X (void) noecho();
- X (void) nonl();
- X (void) cbreak();
- X (void) signal(SIGINT, oint);
- X (void) signal(SIGQUIT, oquit);
- X (void) clearok(curscr);
- X (void) wrefresh(curscr);
- X if (status == -1)
- X prtmsg(1, 23, "Shell returned -1");
- X}
- X
- X#endif
- ________This_Is_The_END________
- if test `wc -l < shellout.c` -ne 109; then
- echo 'shar: shellout.c was damaged during transit (should have been 109 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - tester.c'
- if test -f tester.c; then echo 'shar: not overwriting tester.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > tester.c
- X#include <curses.h>
- X#include <signal.h>
- X
- Xbye() {
- X setcook();
- X abort();
- X abort();
- X}
- X
- Xmain() {
- X signal(SIGQUIT, bye);
- X putenv("DBPATH=/proj/e_u");
- X setxrc(4);
- X addrec(4, "TEST#001");
- X gdata(0, 5, 11);
- X delete(4);
- X setcook();
- X exit(0);
- X}
- X
- Xerror(s,ier){setcook();printf("%s(%d)\n",s,ier);abort();abort();}
- ________This_Is_The_END________
- if test `wc -l < tester.c` -ne 21; then
- echo 'shar: tester.c was damaged during transit (should have been 21 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - uamt.c'
- if test -f uamt.c; then echo 'shar: not overwriting uamt.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > uamt.c
- X/*
- X * $Header: uamt.c,v 1.5 87/06/09 11:52:25 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: uamt.c,v $
- X * Revision 1.5 87/06/09 11:52:25 brandon
- X * Right-justified buffer display; repositioned cursor after conversion errors.
- X *
- X * Revision 1.4 87/06/01 08:37:14 brandon
- X * Added ^V (view) capability for related records.
- X *
- X * Revision 1.3 87/05/27 14:42:07 brandon
- X * Made sure buffer was padded with spaces.
- X *
- X * Revision 1.2 87/05/26 15:43:58 brandon
- X * Forgot to cast sprintf().
- X *
- X * Revision 1.1 87/05/26 13:32:55 brandon
- X * Initial revision
- X *
- X * Revision 1.3 87/05/12 12:04:06 brandon
- X * Changed to pass FWD, BACK, GO without checking the data buffer
- X *
- X * Revision 1.2 87/04/29 11:30:31 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * Input a small amount, into a (long).
- X */
- X
- Xint uamt(len, buf)
- Xlong *buf; {
- X char ibuf[11];
- X int rc, cnt, sign, dec, y, x;
- X
- X setraw();
- X if (len > 10)
- X len = 10;
- X (void) sprintf(ibuf, "%*.2f", len + 3, (double) *buf / 100.0);
- X getyx(stdscr, y, x);
- X for (;;) {
- X (void) move(y, x);
- X if ((rc = inl(ibuf, len, 0)) == BACK || rc == FWD || rc == GO || rc == LOOK)
- X return rc;
- X for (cnt = 0; cnt < len && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt == len) {
- X prtmsg(1, 23, "Invalid amount");
- X continue;
- X }
- X *buf = 0L;
- X sign = 0;
- X dec = 0;
- X if (ibuf[cnt] == '-') {
- X sign = 1;
- X if (++cnt == len) {
- X prtmsg(1, 23, "Invalid amount");
- X continue;
- X }
- X }
- X for (; cnt < len && isdigit(ibuf[cnt]); cnt++) {
- X *buf *= 10;
- X *buf += ibuf[cnt] - '0';
- X }
- X if (ibuf[cnt] == '.') {
- X if (cnt > len - 2) {
- X prtmsg(1, 23, "Invalid amount");
- X continue;
- X }
- X if (!isdigit(ibuf[++cnt])) {
- X prtmsg(1, 23, "Invalid amount");
- X continue;
- X }
- X dec = (ibuf[cnt] - '0') * 10;
- X if (!isdigit(ibuf[++cnt])) {
- X prtmsg(1, 23, "Invalid amount");
- X continue;
- X }
- X dec += ibuf[cnt] - '0';
- X }
- X for (; cnt < len && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt == len)
- X break;
- X prtmsg(1, 23, "Invalid amount");
- X }
- X *buf = *buf * 100 + dec;
- X if (sign)
- X *buf = - *buf;
- X return rc;
- X}
- ________This_Is_The_END________
- if test `wc -l < uamt.c` -ne 102; then
- echo 'shar: uamt.c was damaged during transit (should have been 102 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - udate.c'
- if test -f udate.c; then echo 'shar: not overwriting udate.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > udate.c
- X/*
- X * $Header: udate.c,v 1.11 87/06/02 12:51:52 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: udate.c,v $
- X * Revision 1.11 87/06/02 12:51:52 brandon
- X * Linted.
- X *
- X * Revision 1.10 87/06/01 16:29:20 brandon
- X * Moved today() and thisyear() to datefns.c with new names.
- X *
- X * Revision 1.9 87/06/01 09:39:27 brandon
- X * Missing move() before pdate() calls.
- X *
- X * Revision 1.8 87/06/01 09:25:26 brandon
- X * AARGH! ! ! Output func is pdate(), not odate()!
- X *
- X * Revision 1.7 87/06/01 09:23:01 brandon
- X * Forced redisplay of entered date, so `/' (today) shows up properly.
- X *
- X * Revision 1.6 87/06/01 08:37:30 brandon
- X * Added ^V (view) capability for related records.
- X *
- X * Revision 1.5 87/05/27 15:51:59 brandon
- X * Wasn't handling canonical form of NULLDATE.
- X *
- X * Revision 1.4 87/05/27 14:42:24 brandon
- X * Made sure buffer was padded with spaces.
- X *
- X * Revision 1.3 87/05/26 15:44:12 brandon
- X * Forgot to cast sprintf().
- X *
- X * Revision 1.2 87/05/26 14:08:02 brandon
- X * udate() conflicted with UN*X call; changed to upddate().
- X *
- X * Revision 1.1 87/05/26 13:33:23 brandon
- X * Initial revision
- X *
- X * (Log: idate.c,v)
- X * Revision 1.8 87/05/12 15:39:26 brandon
- X * added call to _sdbrt() to insure correct date types
- X *
- X * Revision 1.7 87/05/12 13:24:21 brandon
- X * Dumb bugs in parsing /.
- X *
- X * Revision 1.6 87/05/11 16:38:35 brandon
- X * more checking and another bugfix; it was typechecking on no-data returns
- X *
- X * Revision 1.5 87/05/11 16:30:07 brandon
- X * more checking added (also friendlier error messages)
- X *
- X * Revision 1.4 87/05/11 16:22:40 brandon
- X * removed debugging and fixed bug!
- X *
- X * Revision 1.3 87/05/11 16:13:54 brandon
- X * bugchk
- X *
- X * Revision 1.2 87/04/29 11:30:33 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X#include <ctype.h>
- X
- X/*
- X * Input a date. This is effectively a (short), but outside may have one of
- X * the following values:
- X *
- X * n/n[/n] **.**.** * /
- X *
- X * At any time, . or - may be used in place of /. * is short for **.**.**;
- X * / is short for today's date. (Note: I used . in place of / in the null
- X * dates, the reason I leave as an exercise for the reader.)
- X *
- X * This routine is ugly, but it does it all.
- X */
- X
- Xint upddate(buf)
- Xshort *buf; {
- X int odate[3], date[3];
- X int cnt, rc, DS1, DS2, DS3, x, y;
- X char ibuf[9];
- X
- X setraw();
- X _sdbrt();
- X switch (_ldbrt & MASK_DATES) {
- X case YMD:
- X DS1 = YEAR;
- X DS2 = MONTH;
- X DS3 = DAY;
- X break;
- X case DMY:
- X DS1 = DAY;
- X DS2 = MONTH;
- X DS3 = YEAR;
- X break;
- X case MDY:
- X DS1 = MONTH;
- X DS2 = DAY;
- X DS3 = YEAR;
- X break;
- X default:
- X xerror(-1, "udate", "Unrecognized internal date code %d", _ldbrt & MASK_DATES);
- X }
- X if (*buf == NULLDATE)
- X (void) strcpy(ibuf, "**/**/**");
- X else {
- X kdate(*buf, date);
- X (void) sprintf(ibuf, "%02d/%02d/%02d", date[DS1], date[DS2], date[DS3]);
- X }
- X getyx(stdscr, y, x);
- X for (;;) {
- X (void) move(y, x);
- X if ((rc = inl(ibuf, 8, 0)) == BACK || rc == FWD || rc == GO || rc == LOOK)
- X return rc;
- X for (cnt = 0; cnt < 8; cnt++)
- X if (ibuf[cnt] == '.' || ibuf[cnt] == '-')
- X ibuf[cnt] = '/';
- X for (cnt = 0; cnt < 8 && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt == 8) {
- X prtmsg(1, 23, "Invalid empty date");
- X continue;
- X }
- X if (ibuf[cnt] == '/') {
- X for (cnt++; cnt < 8 && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt < 8) {
- X prtmsg(1, 23, "Invalid date format");
- X continue;
- X }
- X *buf = _dt_today();
- X (void) move(y, x);
- X pdate(buf);
- X return rc;
- X }
- X if (ibuf[cnt] == '*') {
- X if (strncmp(ibuf, "**/**/**", 8) == 0) {
- X *buf = NULLDATE;
- X (void) move(y, x);
- X pdate(buf);
- X return rc;
- X }
- X for (cnt++; cnt < 8 && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt < 8) {
- X prtmsg(1, 23, "Invalid null date format");
- X continue;
- X }
- X *buf = NULLDATE;
- X (void) move(y, x);
- X pdate(buf);
- X return rc;
- X }
- X if (!isdigit(ibuf[cnt])) {
- X prtmsg(1, 23, "Invalid date -- bad digit");
- X continue;
- X }
- X date[MONTH] = 0;
- X date[DAY] = 0;
- X date[YEAR] = 0;
- X while (cnt < 8 && isdigit(ibuf[cnt])) {
- X date[DS1] *= 10;
- X date[DS1] += ibuf[cnt++] - '0';
- X }
- X if (cnt == 8 || ibuf[cnt++] != '/') {
- X prtmsg(1, 23, "Invalid date -- invalid 1pt");
- X continue;
- X }
- X while (cnt < 8 && isdigit(ibuf[cnt])) {
- X date[DS2] *= 10;
- X date[DS2] += ibuf[cnt++] - '0';
- X }
- X if (cnt < 8 && ibuf[cnt] == ' ') {
- X for (; cnt < 8 && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt < 8) {
- X prtmsg(1, 23, "Invalid date -- trailing garbage");
- X continue;
- X }
- X if (_ldbrt & YMD) {
- X date[DAY] = date[MONTH];
- X date[MONTH] = date[YEAR];
- X }
- X date[YEAR] = _dt_year();
- X }
- X else if (cnt == 8)
- X date[YEAR] = _dt_year();
- X else if (ibuf[cnt++] != '/') {
- X prtmsg(1, 23, "Invalid date -- invalid 2pt");
- X continue;
- X }
- X else {
- X while (cnt < 8 && isdigit(ibuf[cnt])) {
- X date[DS3] *= 10;
- X date[DS3] += ibuf[cnt++] - '0';
- X }
- X if (cnt < 8) {
- X for (; cnt < 8 && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt < 8) {
- X prtmsg(1, 23, "Invalid date -- trailing garbage in 3pt");
- X continue;
- X }
- X }
- X }
- X *buf = kday(date);
- X kdate(*buf, odate);
- X if (ivcmp((char *) date, (char *) odate, sizeof date))
- X break;
- X prtmsg(1, 23, "Invalid date -- insane elements");
- X }
- X (void) move(y, x);
- X pdate(buf);
- X return rc;
- X}
- ________This_Is_The_END________
- if test `wc -l < udate.c` -ne 224; then
- echo 'shar: udate.c was damaged during transit (should have been 224 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - uerror.c'
- if test -f uerror.c; then echo 'shar: not overwriting uerror.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > uerror.c
- X/*
- X * $Header: uerror.c,v 1.1 87/04/29 14:57:46 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: uerror.c,v $
- X * Revision 1.1 87/04/29 14:57:46 brandon
- X * Initial revision
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * ENTRY POINT: uerror() -- Print a user error message and exit
- X *
- X * DIFFERENCE FROM UNIFY: *Always* uses the error log, even in pre-3.2
- X * versions. Also, my idea of what an error should log seems to differ from
- X * that of Unify Corp.
- X */
- X
- Xvoid uerror(s, ier)
- Xchar *s; {
- X (void) strcpy(errcall, "uerror");
- X xerror(ier, "User error -- see Notes", "%s", s);
- X}
- ________This_Is_The_END________
- if test `wc -l < uerror.c` -ne 32; then
- echo 'shar: uerror.c was damaged during transit (should have been 32 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - uflt.c'
- if test -f uflt.c; then echo 'shar: not overwriting uflt.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > uflt.c
- X/*
- X * $Header: uflt.c,v 1.5 87/06/09 11:53:03 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: uflt.c,v $
- X * Revision 1.5 87/06/09 11:53:03 brandon
- X * Right-justified buffer display; repositioned cursor after conversion errors.
- X *
- X * Revision 1.4 87/06/01 08:37:36 brandon
- X * Added ^V (view) capability for related records.
- X *
- X * Revision 1.3 87/05/27 14:42:30 brandon
- X * Made sure buffer was padded with spaces.
- X *
- X * Revision 1.2 87/05/26 15:44:16 brandon
- X * Forgot to cast sprintf().
- X *
- X * Revision 1.1 87/05/26 13:33:48 brandon
- X * Initial revision
- X *
- X * Revision 1.3 87/05/12 12:04:13 brandon
- X * Changed to pass FWD, BACK, GO without checking the data buffer
- X *
- X * Revision 1.2 87/04/29 11:30:35 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * Input a float. This time, they're dumb; take what we're given, no matter
- X * how any decimals -- UNITRIEVE can figure it out for itself, since it won't
- X * let me! (This is UNIFY's own behavior, in fact.)
- X */
- X
- Xint uflt(len, buf)
- Xregister double *buf; {
- X char ibuf[18];
- X int rc, cnt, sign, y, x;
- X double dec;
- X
- X setraw();
- X if (len > 17)
- X len = 17;
- X (void) sprintf(ibuf, "%*g", len, *buf);
- X getyx(stdscr, y, x);
- X for (;;) {
- X (void) move(y, x);
- X if ((rc = inl(ibuf, len, 0)) == BACK || rc == FWD || rc == GO || rc == LOOK)
- X return rc;
- X for (cnt = 0; cnt < len && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt == len) {
- X prtmsg(1, 23, "Invalid float");
- X continue;
- X }
- X *buf = 0.0;
- X sign = 0;
- X dec = 0;
- X if (ibuf[cnt] == '-') {
- X sign = 1;
- X if (++cnt == len) {
- X prtmsg(1, 23, "Invalid float");
- X continue;
- X }
- X }
- X for (; cnt < len && isdigit(ibuf[cnt]); cnt++) {
- X *buf *= 10.0;
- X *buf += ibuf[cnt] - '0';
- X }
- X if (ibuf[cnt] == '.') {
- X dec = 10.0;
- X for (cnt++; cnt < len && isdigit(ibuf[cnt]); cnt++) {
- X *buf += (ibuf[cnt] - '0') / dec;
- X dec *= 10.0;
- X }
- X }
- X for (; cnt < len && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt == len)
- X break;
- X prtmsg(1, 23, "Invalid float");
- X }
- X if (sign)
- X *buf = - *buf;
- X return rc;
- X}
- ________This_Is_The_END________
- if test `wc -l < uflt.c` -ne 95; then
- echo 'shar: uflt.c was damaged during transit (should have been 95 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - uhamt.c'
- if test -f uhamt.c; then echo 'shar: not overwriting uhamt.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > uhamt.c
- X/*
- X * $Header: uhamt.c,v 1.5 87/06/09 11:53:05 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: uhamt.c,v $
- X * Revision 1.5 87/06/09 11:53:05 brandon
- X * Right-justified buffer display; repositioned cursor after conversion errors.
- X *
- X * Revision 1.4 87/06/01 08:37:39 brandon
- X * Added ^V (view) capability for related records.
- X *
- X * Revision 1.3 87/05/27 14:42:45 brandon
- X * Made sure buffer was padded with spaces.
- X *
- X * Revision 1.2 87/05/26 15:44:18 brandon
- X * Forgot to cast sprintf().
- X *
- X * Revision 1.1 87/05/26 13:33:59 brandon
- X * Initial revision
- X *
- X * Revision 1.3 87/05/12 12:04:08 brandon
- X * Changed to pass FWD, BACK, GO without checking the data buffer
- X *
- X * Revision 1.2 87/04/29 11:30:37 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * Input a huge amount, into a (double).
- X */
- X
- Xint uhamt(len, buf)
- Xregister double *buf; {
- X char ibuf[15];
- X int rc, cnt, sign, dec, y, x;
- X
- X setraw();
- X if (len > 14)
- X len = 14;
- X (void) sprintf(ibuf, "%*.2f", len + 3, *buf / 100.0);
- X getyx(stdscr, y, x);
- X for (;;) {
- X (void) move(y, x);
- X if ((rc = inl(ibuf, len, 0)) == BACK || rc == FWD || rc == GO || rc == LOOK)
- X return rc;
- X for (cnt = 0; cnt < len && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt == len) {
- X prtmsg(1, 23, "Invalid amount");
- X continue;
- X }
- X *buf = 0.0;
- X sign = 0;
- X dec = 0;
- X if (ibuf[cnt] == '-') {
- X sign = 1;
- X if (++cnt == len) {
- X prtmsg(1, 23, "Invalid amount");
- X continue;
- X }
- X }
- X for (; cnt < len && isdigit(ibuf[cnt]); cnt++) {
- X *buf *= 10.0;
- X *buf += ibuf[cnt] - '0';
- X }
- X if (ibuf[cnt] == '.') {
- X if (cnt > len - 2) {
- X prtmsg(1, 23, "Invalid amount");
- X continue;
- X }
- X if (!isdigit(ibuf[++cnt])) {
- X prtmsg(1, 23, "Invalid amount");
- X continue;
- X }
- X dec = (ibuf[cnt] - '0') * 10;
- X if (!isdigit(ibuf[++cnt])) {
- X prtmsg(1, 23, "Invalid amount");
- X continue;
- X }
- X dec += ibuf[cnt] - '0';
- X }
- X for (; cnt < len && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt == len)
- X break;
- X prtmsg(1, 23, "Invalid amount");
- X }
- X *buf = *buf * 100.0 + dec;
- X if (sign)
- X *buf = - *buf;
- X return rc;
- X}
- ________This_Is_The_END________
- if test `wc -l < uhamt.c` -ne 102; then
- echo 'shar: uhamt.c was damaged during transit (should have been 102 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - ulong.c'
- if test -f ulong.c; then echo 'shar: not overwriting ulong.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > ulong.c
- X/*
- X * $Header: ulong.c,v 1.5 87/06/09 11:53:15 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: ulong.c,v $
- X * Revision 1.5 87/06/09 11:53:15 brandon
- X * Right-justified buffer display; repositioned cursor after conversion errors.
- X *
- X * Revision 1.4 87/06/01 08:37:43 brandon
- X * Added ^V (view) capability for related records.
- X *
- X * Revision 1.3 87/05/27 14:42:56 brandon
- X * Made sure buffer was padded with spaces.
- X *
- X * Revision 1.2 87/05/26 15:44:20 brandon
- X * Forgot to cast sprintf().
- X *
- X * Revision 1.1 87/05/26 13:34:07 brandon
- X * Initial revision
- X *
- X * Revision 1.3 87/05/12 12:04:03 brandon
- X * Changed to pass FWD, BACK, GO without checking the data buffer
- X *
- X * Revision 1.2 87/04/29 11:30:39 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * Input an item of type (long).
- X */
- X
- Xint ulong(len, buf)
- Xlong *buf; {
- X char ibuf[10];
- X int rc, cnt, sign, y, x;
- X
- X setraw();
- X if (len > 9)
- X len = 9; /* (long)'s are max len = 9 */
- X (void) sprintf(ibuf, "%*ld", len, *buf);
- X getyx(stdscr, y, x);
- X for (;;) {
- X (void) move(y, x);
- X if ((rc = inl(ibuf, len, 0)) == BACK || rc == FWD || rc == GO || rc == LOOK)
- X return rc;
- X for (cnt = 0; cnt < len && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt == len) {
- X prtmsg(1, 23, "Invalid number");
- X continue;
- X }
- X *buf = 0L;
- X sign = 0;
- X if (ibuf[cnt] == '-') {
- X sign = 1;
- X if (++cnt == len) {
- X prtmsg(1, 23, "Invalid number");
- X continue;
- X }
- X }
- X for (; cnt < len && isdigit(ibuf[cnt]); cnt++) {
- X *buf *= 10;
- X *buf += ibuf[cnt] - '0';
- X }
- X for (; cnt < len && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt == len)
- X break;
- X prtmsg(1, 23, "Invalid number");
- X }
- X if (sign)
- X *buf = - *buf;
- X return rc;
- X}
- ________This_Is_The_END________
- if test `wc -l < ulong.c` -ne 84; then
- echo 'shar: ulong.c was damaged during transit (should have been 84 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - upbuf.c'
- if test -f upbuf.c; then echo 'shar: not overwriting upbuf.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > upbuf.c
- X/*
- X * $Header: upbuf.c,v 1.1 87/05/26 13:49:35 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: upbuf.c,v $
- X * Revision 1.1 87/05/26 13:49:35 brandon
- X * Initial revision
- X *
- X * Revision 1.5 87/04/29 14:19:12 brandon
- X * FLT display length is sfield length / 10
- X *
- X * Revision 1.4 87/04/29 13:17:22 brandon
- X * The code to convert internal to display lengths was in gtube(); it belonged
- X * in here, so here it is.
- X *
- X * Revision 1.3 87/04/29 11:40:50 brandon
- X * Added ability to OR an upshift flag with a screen field type to get auto
- X * upshifting on certain screen fields. See also gdata.c.
- X *
- X * Revision 1.2 87/04/29 11:30:40 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * ENTRY POINT: upbuf() -- Update from a screen field to a buffer
- X *
- X * DIFFERENCE FROM UNIFY: See upscrf().
- X */
- X
- Xupbuf(sfld, buf)
- Xchar *buf; {
- X int rc, oucf, len;
- X
- X setraw();
- X if (sfld < 0 || sfld > __nsf)
- X xerror(-1, "upbuf", "Invalid screen field %d", sfld);
- X oucf = _sh_up;
- X _sh_up = __scf[sfld].q_type & _UCF;
- X /* This code was in gtube(), because I screwed up! */
- X len = __scf[sfld].q_len;
- X switch (__scf[sfld].q_type) {
- X case INT:
- X case LONG:
- X case STRNG:
- X break;
- X case AMT:
- X case HAMT:
- X len += 3;
- X break;
- X case DATE:
- X len = 8;
- X break;
- X case HR:
- X len = 5;
- X break;
- X case FLT:
- X len /= 10;
- X break;
- X case COMB:
- X xerror(-2, "upbuf", "COMB field %d illegal", sfld);
- X }
- X if (__scf[sfld].q_fld != 0)
- X rc = uptube(__scf[sfld].q_fx, __scf[sfld].q_fy, __scf[sfld].q_fld, buf);
- X else
- X rc = upscrf(__scf[sfld].q_fx, __scf[sfld].q_fy, __scf[sfld].q_type & ~_UCF, len, buf);
- X _sh_up = oucf;
- X return rc;
- X}
- ________This_Is_The_END________
- if test `wc -l < upbuf.c` -ne 78; then
- echo 'shar: upbuf.c was damaged during transit (should have been 78 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - updata.c'
- if test -f updata.c; then echo 'shar: not overwriting updata.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > updata.c
- X/*
- X * $Header: updata.c,v 1.3 87/05/27 16:02:26 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: updata.c,v $
- X * Revision 1.3 87/05/27 16:02:26 brandon
- X * Had a break; on failed exp. rel. that should have been a continue;.
- X *
- X * Revision 1.2 87/05/26 14:29:07 brandon
- X * Well, utime() was the culprit (be nice if I could read!)-:
- X *
- X * Revision 1.1 87/05/26 13:49:49 brandon
- X * Initial revision
- X *
- X * Revision 1.2 87/04/29 11:30:26 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * ENTRY POINT: updata() -- get a value at a specified location and store it
- X * in the database.
- X *
- X * DIFFERENCE FROM UNIFY: Update function are not provided in UNIFY(r).
- X */
- X
- Xupdata(fx, fy, field) {
- X char buf[256];
- X int rc, ch;
- X
- X setraw();
- X if (gfield(field, buf) != 0)
- X xerror(-1, "updata", "Read access for field %d denied", field);
- X for (;;) {
- X rc = uptube(fx, fy, field, buf);
- X if (rc == BACK || rc == FWD || rc == GO) {
- X if (rc == FWD)
- X rc = FWD_OK;
- X break;
- X }
- X
- Xrepass:
- X switch (ch = pfield(field, buf)) {
- X case -4:
- X (void) mvprintw(23, 1, "Enter modify password for field: ");
- X (void) refresh();
- X (void) nocbreak();
- X (void) nl();
- X if (accsfld(field, getpass(""), 'w') == 0)
- X goto repass;
- X (void) noecho();
- X (void) cbreak();
- X (void) nonl();
- X prtmsg(1, 23, "Wrong password");
- X rc = -3;
- X break;
- X case -5:
- X (void) mvprintw(23, 1, "Record is locked -- Retry or Abort? ");
- X (void) refresh();
- X ch = tolower(getchar() & 0x7f);
- X (void) move(23, 1);
- X (void) clrtoeol();
- X switch (ch) {
- X case 'a':
- X rc = -3;
- X break;
- X default:
- X goto repass;
- X }
- X break;
- X case 0:
- X break;
- X case -1:
- X prtmsg(1, 23, "Record is referenced, you may not change the key");
- X continue;
- X case -2:
- X prtmsg(1, 23, "This field has a unique index, and the value you entered exists");
- X continue;
- X case -3:
- X prtmsg(1, 23, "There is no related record with this key");
- X continue;
- X default:
- X xerror(-2, "updata", "Unknown error %d from pfield", ch);
- X }
- X break;
- X }
- X return rc;
- X}
- ________This_Is_The_END________
- if test `wc -l < updata.c` -ne 97; then
- echo 'shar: updata.c was damaged during transit (should have been 97 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - upfield.c'
- if test -f upfield.c; then echo 'shar: not overwriting upfield.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > upfield.c
- X/*
- X * $Header: upfield.c,v 1.1 87/05/26 13:50:09 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: upfield.c,v $
- X * Revision 1.1 87/05/26 13:50:09 brandon
- X * Initial revision
- X *
- X * Revision 1.3 87/04/29 11:44:40 brandon
- X * Added _UCF upshifting. See also inbuf.c, xsfldesc.c. (The comment in
- X * inbuf.c is WRONG!)
- X * Also caused error on screen field w/o database field.
- X *
- X * Revision 1.2 87/04/29 11:30:44 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * ENTRY POINT: upfield() -- Updata a database field using a screen field.
- X *
- X * DIFFERENCE FROM UNIFY: UNIFY(r) does not provide update functions.
- X */
- X
- Xupfield(sfld) {
- X int rc, ousf;
- X
- X if (sfld < 0 || sfld >= __nsf)
- X xerror(-1, "upfield", "Invalid screen field %d", sfld);
- X if (__scf[sfld].q_fld == 0)
- X xerror(-2, "upfield", "Screen field %d has no associated database field", sfld);
- X ousf = _sh_up;
- X _sh_up = __scf[sfld].q_type & _UCF;
- X rc = updata(__scf[sfld].q_fx, __scf[sfld].q_fy, __scf[sfld].q_fld);
- X _sh_up = ousf;
- X return rc;
- X}
- ________This_Is_The_END________
- if test `wc -l < upfield.c` -ne 46; then
- echo 'shar: upfield.c was damaged during transit (should have been 46 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - upscrf.c'
- if test -f upscrf.c; then echo 'shar: not overwriting upscrf.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > upscrf.c
- X/*
- X * $Header: upscrf.c,v 1.4 87/06/01 10:56:07 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: upscrf.c,v $
- X * Revision 1.4 87/06/01 10:56:07 brandon
- X * _sh_up only forced up; left as is if type doesn't have _UCF.
- X *
- X * Revision 1.3 87/05/26 14:29:33 brandon
- X * Well, utime() was the culprit (be nice if I could read!)-:
- X *
- X * Revision 1.2 87/05/26 14:08:27 brandon
- X * udate() conflicted with UN*X call; changed to upddate().
- X *
- X * Revision 1.1 87/05/26 13:50:24 brandon
- X * Initial revision
- X *
- X * Revision 1.5 87/05/22 15:39:06 brandon
- X * whoops! It doesn't help to leave off the "break"'s in a switch().
- X *
- X * Revision 1.4 87/05/12 17:19:19 brandon
- X * Forgot to get rid of _UCF temporarily during type check
- X *
- X * Revision 1.3 87/05/12 17:00:28 brandon
- X * Enabled _UCF flag for type.
- X *
- X * Revision 1.2 87/04/29 11:30:46 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * ENTRY POINT: upscrf() -- Take a type and (character) length, and call the
- X * correct input routine for the type for UPDATE.
- X *
- X * DIFFERENCE FROM UNIFY: In addition to the standard return codes, there are
- X * a number of new ones. If you want to use them, call setxrc() with a non-
- X * zero argument. The new codes are:
- X *
- X * -5 ESC or ^E
- X * -6 ESC or ^E, returns buffer
- X * -7 ^U or TAB, returns buffer
- X *
- X * Also, the following line-editing characters are supported:
- X *
- X * ^H delete last charater
- X * ^F move forward (wraps to beginning)
- X * ^B move backward (wraps to end)
- X * ^A move to start of field
- X * ^N move to end of field
- X * ^O insert a space
- X * ^D delete a character
- X * ^K clear to end of field
- X * ^X exit program
- X * ^R, ^L redraw screen
- X * ^P shell out
- X *
- X * I would have used ^Z for end-of-field, but I see no reason to get the
- X * people with job control or sxt's upset at me...
- X */
- X
- Xint upscrf(x, y, type, len, buf)
- Xchar *buf; {
- X int rc, oucf;
- X
- X setraw();
- X mv_cur(1, x, y);
- X oucf = _sh_up;
- X if (type & _UCF)
- X _sh_up = type & _UCF;
- X type &= ~_UCF;
- X switch (type) {
- X case INT:
- X rc = ushort(len, (short *) buf);
- X break;
- X case LONG:
- X rc = ulong(len, (long *) buf);
- X break;
- X case AMT:
- X rc = uamt(len, (long *) buf);
- X break;
- X case HAMT:
- X rc = uhamt(len, (double *) buf);
- X break;
- X case STRNG:
- X rc = ustr(len, buf);
- X break;
- X case DATE:
- X rc = upddate((short *) buf);
- X break;
- X case HR:
- X rc = updtime((short *) buf);
- X break;
- X case FLT:
- X rc = uflt(len, (double *) buf);
- X break;
- X default:
- X xerror(-1, "upscrf", "Unknown type %d", type);
- X /*NOTREACHED*/
- X }
- X _sh_up = oucf;
- X return rc;
- X}
- ________This_Is_The_END________
- if test `wc -l < upscrf.c` -ne 112; then
- echo 'shar: upscrf.c was damaged during transit (should have been 112 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - uptube.c'
- if test -f uptube.c; then echo 'shar: not overwriting uptube.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > uptube.c
- X/*
- X * $Header: uptube.c,v 1.3 87/06/09 12:22:37 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: uptube.c,v $
- X * Revision 1.3 87/06/09 12:22:37 brandon
- X * Moved FYI message to line 23; cleared it after input.
- X *
- X * Revision 1.2 87/06/01 08:31:13 brandon
- X * Added ^V (view) capability for related records.
- X *
- X * Revision 1.1 87/05/26 13:50:36 brandon
- X * Initial revision
- X *
- X * Revision 1.4 87/04/29 16:09:49 brandon
- X * Added a cast to (void) of mvaddstr()
- X *
- X * Revision 1.3 87/04/29 13:10:36 brandon
- X * fldesc() returns display length, so mucking around with it isn't needed.
- X * However, probably input() or inbuf() will need help...
- X *
- X * Revision 1.2 87/04/29 11:30:28 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * ENTRY POINT: uptube() -- Update a buffer using a database field template.
- X *
- X * DIFFERENCE FROM UNIFY: UNIFY(r) does not support update functions.
- X */
- X
- Xuptube(fx, fy, field, buf)
- Xchar *buf; {
- X FLDESC fd;
- X int rc;
- X#ifdef UNIFY32
- X char *cmsg, *emsg;
- X#endif
- X
- X setraw();
- X if (!fldesc(field, &fd))
- X xerror(-1, "uptube", "Invalid field %d", field);
- X if (fd.f_typ == COMB)
- X xerror(-2, "uptube", "COMB field %d illegal", field);
- X#ifdef UNIFY32
- X cmsg = getdoms(field, FYISTR);
- X if ((emsg = getdoms(field, ERRSTR)) == (char *) 0)
- X emsg = "The value you entered is not legal for this field";
- X for (;;) {
- X if (cmsg != (char *) 0)
- X (void) mvaddstr(23, 1, cmsg);
- X#endif
- X rc = upscrf(fx, fy, fd.f_typ, fd.f_len, buf);
- X#ifdef UNIFY32
- X (void) move(23, 1);
- X (void) clrtoeol();
- X#endif
- X if (rc == BACK || rc == FWD || rc == GO)
- X return rc;
- X if (rc == LOOK) {
- X if (fd.f_rpfld == 0) {
- X prtmsg(1, 23, "There is no related record to view");
- X continue;
- X }
- X if ((rc = zoom(fx, fy, field, &fd, buf)) == BACK || rc == FWD)
- X return rc;
- X outscrf(fx, fy, fd.f_typ, fd.f_len, buf);
- X }
- X#ifdef UNIFY32
- X if (domchk(field, buf))
- X break;
- X prtmsg(1, 23, emsg);
- X }
- X#endif
- X return rc;
- X}
- ________This_Is_The_END________
- if test `wc -l < uptube.c` -ne 86; then
- echo 'shar: uptube.c was damaged during transit (should have been 86 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - usc.h'
- if test -f usc.h; then echo 'shar: not overwriting usc.h'; else
- sed 's/^X//' << '________This_Is_The_END________' > usc.h
- X/*
- X * $Header: usc.h,v 1.1 87/05/28 14:04:04 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: usc.h,v $
- X * Revision 1.1 87/05/28 14:04:04 brandon
- X * Initial revision
- X *
- X */
- X
- X#ifdef lint
- X# define NOMACROS
- X#endif
- X#include <curses.h>
- X#include <dbtypes.h>
- X#include <fdesc.h>
- X#include <ctype.h>
- X#ifdef UNIFY32
- X#include <domains.h>
- X#endif
- X
- X#ifdef TERMCAP
- X
- X/* Old curses. We have to emulate some of the new features. */
- X
- X#define beep() write(1, "\7", 1)
- X#define flash() beep()
- X#define cbreak() crmode()
- X#define nocbreak() nocrmode()
- X
- X#endif
- X#if defined(lint) || defined(TERMCAP)
- X
- X#define A_STANDOUT 0x80
- X#define A_REVERSE 0x80
- X#define A_UNDERLINE 0x00
- X#define A_ALTCHARSET 0x00
- X#define A_BLINK 0x00
- X#define A_DIM 0x00
- X#define A_BOLD 0x00
- X#define A_INVIS 0x00
- X#define A_PROTECT 0x00
- X#define A_ATTRIBUTES A_STANDOUT
- X#define A_CHARTEXT 0x7f
- X
- X#endif
- X
- Xstruct q {
- X char q_name[8];
- X char q_dbfld[44];
- X short q_fld;
- X short q_type;
- X short q_len;
- X short q_fx;
- X short q_fy;
- X char q_prmp[40];
- X short q_px;
- X short q_py;
- X};
- X
- Xextern struct q *__scf;
- Xextern int __nsf;
- X
- X/*
- X * If a screen field's type has _UCF OR'ed in with it, it will be upshifted
- X * during calls to input() and inbuf().
- X */
- X
- Xextern int _sh_up; /* set this flag nonzero for upshifting */
- X#define _UCF 0x80 /* the flag value for upshifted sfields */
- X
- X/*
- X * Date and brackets, since the U.S. (as usual) is different from the rest
- X * of the world...
- X */
- X
- X/* brackets */
- X
- X#define MASK_BRACKETS 0x80
- X#define INTERNATIONAL 0x00
- X#define UNITED_STATES 0x80
- X
- X/* dates */
- X
- X#define MASK_DATES 0x03
- X#define YMD 0x00
- X#define DMY 0x01
- X#define MDY 0x02
- X
- Xextern int _ldbrt;
- X
- X/* used internally for date array addressing */
- X
- X#define MONTH 0
- X#define DAY 1
- X#define YEAR 2 /* ...guess what country Unify Corp. is in! */
- X
- X#if defined(lint) && !defined(TERMCAP)
- X
- X/*
- X * Curses defines <struct screen> under USG, but doesn't declare it. This
- X * makes lint upset.
- X */
- X
- Xstruct screen {
- X char dummy;
- X};
- X
- X#endif
- X
- X/* return codes for input routines */
- X
- X#define FWD_OK 0 /* RETURN with data */
- X#define BKSP -1 /* inc() backspace */
- X#define BACK -2 /* TAB */
- X#define FWD -3 /* RETURN */
- X#define LOOK -4 /* ^V `view mode' (aka ACCELL `zoom') */
- X#define GO -5 /* ESC */
- X#define GO_OK -6 /* ESC with data */
- X#define BACK_OK -7 /* TAB with data */
- X#define CFWD -8 /* inc() forward */
- X#define CBACK -9 /* inc() backward */
- X
- X#define XRC_GO 1 /* allow GO, GO_OK return codes */
- X#define XRC_XOK 2 /* allow GO_OK, BACK_OK return codes */
- X#define XRC_LOOK 4 /* allow LOOK return code (no LOOK_OK) */
- X#define XRC_CFB 8 /* for incs(): include CFWD, CBACK */
- X#define XRC_BKSP 16 /* for incs(): include BKSP */
- X#define XRC_CHAR 32 /* for incs(): return non-ctl chars */
- X#define XRC_FWDGO 64 /* for incs(): RETURN == GO instead of FWD */
- X#define XRC_NOFLSH 128 /* for incs(): suppress refresh() call */
- X
- Xextern int __ext_rcodes;
- X
- X/* the eternal happiness of strict(-ish) type checking... */
- X
- Xextern char *getpass();
- Xextern char *malloc();
- Xextern long time();
- Xextern char *ctime();
- Xextern void exit();
- Xextern void _exit();
- Xextern void free();
- Xextern char *getenv();
- Xextern char *strcpy();
- Xextern char *strcat();
- Xextern char *strchr();
- Xextern WINDOW *newwin();
- Xextern int sprintf();
- X
- Xextern short kday();
- Xextern void kdate();
- Xextern void cfill();
- X#ifdef UNIFY32
- Xextern char *getdoms();
- Xextern void dspdt();
- X#endif
- X
- Xextern void setraw();
- Xextern void prtmsg();
- Xextern char *dbfile();
- Xextern FILE *_dbfopen();
- Xextern void erasprmp();
- Xextern void outscrf();
- Xextern void output();
- Xextern void pamt();
- Xextern void pdate();
- Xextern void pflt();
- Xextern void phamt();
- Xextern void plong();
- Xextern void pshort();
- Xextern void pstr();
- Xextern void ptime();
- Xextern void mv_cur();
- Xextern void _inlsusp();
- Xextern int inc();
- Xextern int inl();
- Xextern short _dt_today();
- Xextern int _dt_year();
- X#ifdef UNIFY32
- Xextern void _sdbrt();
- X#endif
- X
- X#if defined(lint) && !defined(TERMCAP)
- Xextern WINDOW *initscr(); /* I had always understood this was (int)?? */
- X#endif
- X
- X#ifdef lint
- X#define getyx(win, y, x) ((y) = 0, (x) = 0)
- X#endif
- X
- X/* Operational modes in logacl */
- X
- X#define INQUIRE 010
- X#define ADD 004
- X#define MODIFY 002
- X#define DELETE 001
- X
- X/* Used by the error functions */
- X
- Xextern char errcall[];
- X
- X/* Ring menu definitions */
- X
- Xstruct cmd {
- X char c_key;
- X char *c_title;
- X char *c_desc;
- X};
- X
- X#define EOM '\0' /* end of menu */
- X#define INVISIBLE "" /* invisible entry */
- ________This_Is_The_END________
- if test `wc -l < usc.h` -ne 217; then
- echo 'shar: usc.h was damaged during transit (should have been 217 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - ushort.c'
- if test -f ushort.c; then echo 'shar: not overwriting ushort.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > ushort.c
- X/*
- X * $Header: ushort.c,v 1.6 87/06/09 12:19:08 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: ushort.c,v $
- X * Revision 1.6 87/06/09 12:19:08 brandon
- X * Fixed the format for the buffer value generation.
- X *
- X * Revision 1.5 87/06/09 11:53:17 brandon
- X * Right-justified buffer display; repositioned cursor after conversion errors.
- X *
- X * Revision 1.4 87/06/01 08:37:46 brandon
- X * Added ^V (view) capability for related records.
- X *
- X * Revision 1.3 87/05/27 14:43:23 brandon
- X * Made sure buffer was padded with spaces.
- X *
- X * Revision 1.2 87/05/26 15:44:23 brandon
- X * Forgot to cast sprintf().
- X *
- X * Revision 1.1 87/05/26 13:34:19 brandon
- X * Initial revision
- X *
- X * Revision 1.3 87/05/12 12:03:40 brandon
- X * Changed to pass FWD, BACK, GO without checking the data buffer
- X *
- X * Revision 1.2 87/04/29 11:30:48 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * Input an item of type (short).
- X */
- X
- Xint ushort(len, buf)
- Xshort *buf; {
- X char ibuf[5];
- X int rc, cnt, sign, y, x;
- X
- X setraw();
- X if (len > 4)
- X len = 4; /* (short)'s are max len = 4 */
- X (void) sprintf(ibuf, "%*d", len, *buf);
- X getyx(stdscr, y, x);
- X for (;;) {
- X (void) move(y, x);
- X if ((rc = inl(ibuf, len, 0)) == BACK || rc == FWD || rc == GO || rc == LOOK)
- X return rc;
- X for (cnt = 0; cnt < len && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt == len) {
- X prtmsg(1, 23, "Invalid number");
- X continue;
- X }
- X *buf = 0;
- X sign = 0;
- X if (ibuf[cnt] == '-') {
- X sign = 1;
- X if (++cnt == len) {
- X prtmsg(1, 23, "Invalid number");
- X continue;
- X }
- X }
- X for (; cnt < len && isdigit(ibuf[cnt]); cnt++) {
- X *buf *= 10;
- X *buf += ibuf[cnt] - '0';
- X }
- X for (; cnt < len && ibuf[cnt] == ' '; cnt++)
- X ;
- X if (cnt == len)
- X break;
- X prtmsg(1, 23, "Invalid number");
- X }
- X if (sign)
- X *buf = - *buf;
- X return rc;
- X}
- ________This_Is_The_END________
- if test `wc -l < ushort.c` -ne 87; then
- echo 'shar: ushort.c was damaged during transit (should have been 87 bytes)'
- fi
- fi ; : end of overwriting check
- echo 'x - ustr.c'
- if test -f ustr.c; then echo 'shar: not overwriting ustr.c'; else
- sed 's/^X//' << '________This_Is_The_END________' > ustr.c
- X/*
- X * $Header: ustr.c,v 1.4 87/06/09 11:38:17 brandon Exp $
- X *
- X * ``USC'' -- UNIFY(r) Screens using Curses
- X * UNIFY(r) is a registered trademark of Unify Corporation.
- X *
- X * THIS PROGRAM IS NOT BASED ON COPYRIGHTED CODE OF UNIFY CORPORATION, AND
- X * IS HEREBY PLACED IN THE PUBLIC DOMAIN.
- X *
- X * $Log: ustr.c,v $
- X * Revision 1.4 87/06/09 11:38:17 brandon
- X * Changed inl() call to use clrf == 2.
- X *
- X * Revision 1.3 87/06/01 11:36:44 brandon
- X * Was filling nulls[] instead of buf[]... dumb dumb da dumb :-)
- X *
- X * Revision 1.2 87/06/01 11:23:53 brandon
- X * UNIFY defaults STRNG fields to nulls (!) -- rather antisocial of it. We
- X * convert to spaces on update of an all-nulls STRNG field.
- X *
- X * Revision 1.1 87/05/26 13:34:28 brandon
- X * Initial revision
- X *
- X * Revision 1.2 87/04/29 11:30:50 brandon
- X * Added RCS header information
- X *
- X */
- X
- X/*LINTLIBRARY*/
- X
- X#include "usc.h"
- X
- X/*
- X * Get a string. Very easy, since no checking is needed. Except... UNIFY
- X * defaults string fields to nulls (!) so we should check for all nulls and
- X * convert to all spaces. (Rather rude, in my opinion.)
- X */
- X
- Xstatic char nulls[256];
- Xstatic int _init = 0;
- X
- Xint ustr(len, buf)
- Xchar *buf; {
- X setraw();
- X if (!_init) {
- X cfill(0, nulls, sizeof nulls);
- X _init = 1;
- X }
- X if (ivcmp(buf, nulls, len))
- X cfill(' ', buf, len);
- X return inl(buf, len, 2);
- X}
- ________This_Is_The_END________
- if test `wc -l < ustr.c` -ne 52; then
- echo 'shar: ustr.c was damaged during transit (should have been 52 bytes)'
- fi
- fi ; : end of overwriting check
- exit 0
-