v02i034: UNIFY(r) Screens with Curses, Part 2 of 4
Brandon S. Allbery
allbery at ncoast.UUCP
Sun Jan 31 14:11:32 AEST 1988
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 2117 Jan 30 18:01 inbuf.c
# -r--r--r-- 1 allbery users 1919 Jan 30 18:01 inc.c
# -r--r--r-- 1 allbery users 2521 Jan 30 18:01 incs.c
# -r--r--r-- 1 allbery users 5846 Jan 30 18:01 inl.c
# -r--r--r-- 1 allbery users 1155 Jan 30 18:01 input.c
# -r--r--r-- 1 allbery users 2604 Jan 30 18:01 inscrf.c
# -r--r--r-- 1 allbery users 1735 Jan 30 18:01 ishort.c
# -r--r--r-- 1 allbery users 667 Jan 30 18:01 istr.c
# -r--r--r-- 1 allbery users 2009 Jan 30 18:01 itime.c
# -r--r--r-- 1 allbery users 800 Jan 30 18:01 keybrd.c
# -r--r--r-- 1 allbery users 4049 Jan 30 18:01 loadscr.c
# -r--r--r-- 1 allbery users 953 Jan 30 18:01 mv_cur.c
# -r--r--r-- 1 allbery users 1160 Jan 30 18:01 outbuf.c
# -r--r--r-- 1 allbery users 1371 Jan 30 18:01 output.c
# -r--r--r-- 1 allbery users 1516 Jan 30 18:01 outscrf.c
# -r--r--r-- 1 allbery users 2679 Jan 30 18:01 pageout.c
# -r--r--r-- 1 allbery users 659 Jan 30 18:01 pamt.c
# -r--r--r-- 1 allbery users 894 Jan 30 18:01 pdata.c
# -r--r--r-- 1 allbery users 1018 Jan 30 18:01 pdate.c
# -r--r--r-- 1 allbery users 1382 Jan 30 18:01 pflt.c
# -r--r--r-- 1 allbery users 608 Jan 30 18:01 pflush.c
# -r--r--r-- 1 allbery users 619 Jan 30 18:01 phamt.c
# -r--r--r-- 1 allbery users 610 Jan 30 18:01 plong.c
# -r--r--r-- 1 allbery users 2557 Jan 30 18:01 priamd.c
# -r--r--r-- 1 allbery users 668 Jan 30 18:01 prmp.c
# -r--r--r-- 1 allbery users 807 Jan 30 18:01 prmpf.c
# -r--r--r-- 1 allbery users 667 Jan 30 18:01 prmprv.c
# -r--r--r-- 1 allbery users 976 Jan 30 18:01 prtmsg.c
# -r--r--r-- 1 allbery users 612 Jan 30 18:01 pshort.c
# -r--r--r-- 1 allbery users 1018 Jan 30 18:01 pstr.c
# -r--r--r-- 1 allbery users 735 Jan 30 18:01 ptct_crt.c
#
echo 'x - inbuf.c'
if test -f inbuf.c; then echo 'shar: not overwriting inbuf.c'; else
sed 's/^X//' << '________This_Is_The_END________' > inbuf.c
X/*
X * $Header: inbuf.c,v 1.5 87/04/29 14:19:12 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: inbuf.c,v $
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: inbuf() -- Input from a screen field to a buffer
X *
X * DIFFERENCE FROM UNIFY: See inscrf(). The stuff about NULLDATEs on -3
X * returns from gtube() is done, iff -DCOMPATIBILITY is given. (There's no
X * real need for it, and this implementation doesn't *have* that side effect
X * unless extra code is added to force the issue.)
X */
X
Xinbuf(sfld, buf)
Xchar *buf; {
X int rc, oucf, len;
X
X setraw();
X if (sfld < 0 || sfld > __nsf)
X xerror(-1, "inbuf", "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, "inbuf", "COMB field %d illegal", sfld);
X }
X if (__scf[sfld].q_fld != 0)
X rc = gtube(__scf[sfld].q_fx, __scf[sfld].q_fy, __scf[sfld].q_fld, buf);
X else
X rc = inscrf(__scf[sfld].q_fx, __scf[sfld].q_fy, __scf[sfld].q_type & ~_UCF, len, buf);
X#ifdef COMPATIBILITY
X if (rc == FWD && __scf[sfld].q_type == DATE)
X (short *) buf = NULLDATE;
X#endif
X _sh_up = oucf;
X return rc;
X}
________This_Is_The_END________
if test `wc -l < inbuf.c` -ne 82; then
echo 'shar: inbuf.c was damaged during transit (should have been 82 bytes)'
fi
fi ; : end of overwriting check
echo 'x - inc.c'
if test -f inc.c; then echo 'shar: not overwriting inc.c'; else
sed 's/^X//' << '________This_Is_The_END________' > inc.c
X/*
X * $Header: inc.c,v 1.1 87/06/02 11:01:55 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: inc.c,v $
X * Revision 1.1 87/06/02 11:01:55 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * Input primitive. Get a single input character. If _sh_up is nonzero, shift
X * to uppercase. Underline is used (when available) in place of foreground/
X * background stuff that curses doesn't grok anyway.
X *
X * The `clrf' flag specifies whether the buffer is cleared or not prior to
X * input. This is of doubtful utility, but....
X */
X
Xint inc(buf, clrf)
Xchar *buf;
Xint clrf; {
X setraw();
X (void) attron(A_UNDERLINE);
X if (clrf)
X *buf = ' ';
X for (;;) {
X (void) printw("%c\b", *buf);
X (void) refresh();
X *buf = getchar() & 0x7f;
X switch (*buf) {
X case '\033':
X case '\005':
X (void) attroff(A_UNDERLINE);
X return GO;
X case '\t':
X case '\025':
X (void) attroff(A_UNDERLINE);
X return BACK;
X case '\n':
X case '\r':
X case ' ':
X (void) attroff(A_UNDERLINE);
X return (!clrf || *buf == ' '? FWD: FWD_OK);
X case '\b':
X (void) attroff(A_UNDERLINE);
X return BKSP;
X case '\006':
X (void) attroff(A_UNDERLINE);
X return CFWD;
X case '\002':
X (void) attroff(A_UNDERLINE);
X return CBACK;
X case '\026':
X (void) attroff(A_UNDERLINE);
X return LOOK;
X case '\030':
X (void) move(LINES - 1, 0);
X (void) clrtoeol();
X (void) refresh();
X (void) endwin();
X exit(0);
X case '\020':
X _inlsusp();
X break;
X case '\f':
X case '\022':
X (void) clearok(curscr);
X (void) wrefresh(curscr);
X break;
X default:
X if (*buf < ' ' || *buf == '\177') {
X (void) beep();
X break;
X }
X if (_sh_up && islower(*buf))
X *buf = toupper(*buf);
X return FWD_OK;
X }
X }
X}
________This_Is_The_END________
if test `wc -l < inc.c` -ne 90; then
echo 'shar: inc.c was damaged during transit (should have been 90 bytes)'
fi
fi ; : end of overwriting check
echo 'x - incs.c'
if test -f incs.c; then echo 'shar: not overwriting incs.c'; else
sed 's/^X//' << '________This_Is_The_END________' > incs.c
X/*
X * $Header: incs.c,v 1.5 87/06/03 11:39:50 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: incs.c,v $
X * Revision 1.5 87/06/03 11:39:50 brandon
X * Added XRC_NOFLSH so incs() can be used by functions which build temporary
X * windows; otherwise, the main window might be refresh()ed over the temp
X * window, destroying it.
X *
X * Revision 1.4 87/06/02 18:40:09 brandon
X * Added XRC_FWDGO: RETURN normally is interpreted as FWD, if XRC_FWDGO then
X * RETURN is interpreted as GO.
X *
X * Revision 1.3 87/06/02 14:22:37 brandon
X * Added XRC_CHAR to return normal characters; this contradicts the original
X * reason for incs(), but makes it more useful. This effectively renders
X * inc() unused; it is retained as a character-input-with-echo primitive.
X *
X * Revision 1.2 87/06/02 12:16:24 brandon
X * Forgot to change shellout() to _inlsusp().
X *
X * Revision 1.1 87/06/01 16:48:39 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * Input primitive. Get a single input character, accepting status returns
X * only. This is used when only the control characters are wanted, not any
X * real input. The argument is an XRC flag, valid only for the duration of
X * the function.
X */
X
Xint incs(xrc)
Xint xrc; {
X int ch;
X
X setraw();
X if ((xrc & XRC_NOFLSH) == 0)
X (void) refresh();
X for (;;) {
X ch = getchar() & 0x7f;
X switch (ch) {
X case '\033':
X case '\005':
X if (xrc & XRC_GO)
X return GO;
X (void) beep();
X break;
X case '\t':
X case '\025':
X return BACK;
X case '\n':
X case '\r':
X if (xrc & XRC_FWDGO)
X return GO;
X /*FALLTHROUGH*/
X case ' ':
X return FWD;
X case '\b':
X if (xrc & XRC_BKSP)
X return BKSP;
X (void) beep();
X break;
X case '\006':
X if (xrc & XRC_CFB)
X return CFWD;
X (void) beep();
X break;
X case '\002':
X if (xrc & XRC_CFB)
X return CBACK;
X (void) beep();
X break;
X case '\026':
X if (xrc & XRC_LOOK)
X return LOOK;
X (void) beep();
X break;
X case '\030':
X (void) move(LINES - 1, 0);
X (void) clrtoeol();
X (void) refresh();
X (void) endwin();
X exit(0);
X case '\020':
X _inlsusp();
X break;
X case '\f':
X case '\022':
X (void) clearok(curscr);
X (void) wrefresh(curscr);
X break;
X default:
X if ((xrc & XRC_CHAR) && ch > '!' && ch < '\177')
X return ch;
X (void) beep();
X break;
X }
X }
X}
________This_Is_The_END________
if test `wc -l < incs.c` -ne 111; then
echo 'shar: incs.c was damaged during transit (should have been 111 bytes)'
fi
fi ; : end of overwriting check
echo 'x - inl.c'
if test -f inl.c; then echo 'shar: not overwriting inl.c'; else
sed 's/^X//' << '________This_Is_The_END________' > inl.c
X/*
X * $Header: inl.c,v 1.15 87/06/09 11:37:10 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: inl.c,v $
X * Revision 1.15 87/06/09 11:37:10 brandon
X * New interpretation of clrf flag: val 0 = clear if first char typed is text,
X * val 1 == clear on entry, val 2 = clear never.
X *
X * Revision 1.14 87/06/01 16:29:24 brandon
X * Moved shellout() to shellout.c with a new name, so as not to duplicate code
X * in inc.c.
X *
X * Revision 1.13 87/06/01 15:57:34 brandon
X * Cleaned up ^X; added underline-disable to ^V.
X *
X * Revision 1.12 87/06/01 08:30:14 brandon
X * Added ^V (view) capability for related records.
X *
X * Revision 1.11 87/05/28 14:03:17 brandon
X * Added ^V (view aka LOOK) for automatic explicit relationship chaining.
X *
X * Revision 1.10 87/05/28 13:36:13 brandon
X * Logic of new-vs.-update and ^M input was wrong.
X *
X * Revision 1.9 87/05/26 14:28:44 brandon
X * Added (void) casts for tty mode changes.
X *
X * Revision 1.8 87/05/26 13:31:55 brandon
X * Added flag so that all updates return action code (*_OK).
X *
X * Revision 1.7 87/05/26 11:18:59 brandon
X * Added clrf flag for update functions.
X *
X * Revision 1.6 87/05/12 14:27:04 brandon
X * fixed final (!) insert bug
X *
X * Revision 1.5 87/05/12 11:53:23 brandon
X * Now keeps original screen contents until the first modifying character is
X * typed, so the screen result of an initial BACK makes sense.
X * Changed code to determine whether a key is an action or an entry action
X * based on whether the buffer is empty or not AND the current cursor position;
X * this is now roughly compatible with ENTER.
X *
X * Revision 1.4 87/05/12 11:38:24 brandon
X * Fixed job-control terminal settings.
X * Fixed "open" bug.
X *
X * Revision 1.3 87/05/12 11:27:31 brandon
X * The "insert" and "delete" keys were swapped (!)
X * The shellout wasn't restoring line mode. (It still doesn't, for job control
X * shells.)
X *
X * Revision 1.2 87/04/29 11:30:42 brandon
X * Added RCS header information
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X#include <signal.h>
X
X/* setxrc() changes this, if nonzero then extended returns are enabled */
Xint __ext_rcodes = 0;
X
X/*
X * Move to a specified location. Wrap to the next line if necessary.
X */
X
Xstatic void moveto(y, x) {
X while (x >= COLS) {
X x -= COLS;
X if (++y == LINES)
X y--;
X }
X (void) move(y, x);
X}
X
X/*
X * Check to see if the input buffer is all spaces. If so and the cursor is
X * at position zero, the action is a no-check (FWD, BACK, or GO) and the
X * returned buffer will not be processed.
X */
X
Xstatic int allspace(b, l)
Xregister char *b;
Xregister int l; {
X while (l-- > 0)
X if (*b++ != ' ')
X return 0;
X return 1;
X}
X
X/*
X * Input primitive. Get a line of input. If _sh_up is nonzero, shift to
X * uppercase. Underline is used (when available) in place of foreground/
X * background stuff that curses doesn't grok anyway.
X *
X * Note that this is FAR smarter than the UNIFY version, including line editing
X * commands (insert/delete character, cursor motion, etc.). This falls into
X * the category of ``why curses is better''.
X *
X * The `clrf' flag specifies whether the buffer is cleared or not prior to
X * input. This is used by the USC-specific u* functions (update buffer).
X * If it is a value of 2, the buffer is never cleared except by ^K; otherwise
X * if it is 0, it is cleared if the first character typed is a text character.
X * If it is 1, the buffer is always cleared on entry.
X */
X
Xint inl(buf, len, clrf)
Xchar *buf;
Xint len, clrf; {
X int y, x, cnt, ch, tmp, firsttime;
X
X setraw();
X (void) attron(A_UNDERLINE);
X if (clrf == 1)
X cfill(' ', buf, len);
X getyx(stdscr, y, x);
X cnt = 0;
X firsttime = 1;
X for (;;) {
X (void) move(y, x);
X if (!firsttime || clrf != 1) {
X (void) printw("%.*s", len, buf);
X moveto(y, x + cnt);
X }
X (void) refresh();
X ch = getchar() & 0x7f;
X switch (ch) {
X case '\033':
X case '\005':
X if (!(__ext_rcodes & XRC_GO)) {
X (void) beep();
X break;
X }
X (void) attroff(A_UNDERLINE);
X return ((__ext_rcodes & XRC_XOK) && (clrf != 1 || !allspace(buf, len) || cnt != 0)? GO_OK: GO);
X case '\t':
X case '\025':
X (void) attroff(A_UNDERLINE);
X return ((__ext_rcodes & XRC_XOK) && (clrf != 1 || !allspace(buf, len) || cnt != 0)? BACK_OK: BACK);
X case '\n':
X case '\r':
X (void) attroff(A_UNDERLINE);
X return (clrf == 1 && (allspace(buf, len) && cnt == 0)? FWD: FWD_OK);
X case '\b':
X if (cnt == 0)
X (void) beep();
X else {
X for (tmp = --cnt; tmp < len - 1; tmp++)
X buf[tmp] = buf[tmp + 1];
X buf[len - 1] = ' ';
X }
X break;
X case '\006':
X if (++cnt > len)
X cnt = 0;
X break;
X case '\002':
X if (--cnt < 0)
X cnt = len;
X break;
X case '\001':
X cnt = 0;
X break;
X case '\016':
X cnt = len;
X break;
X case '\017':
X for (tmp = len - 1; tmp > cnt; tmp--)
X buf[tmp] = buf[tmp - 1];
X buf[cnt] = ' ';
X break;
X case '\004':
X for (tmp = cnt; tmp < len - 1; tmp++)
X buf[tmp] = buf[tmp + 1];
X buf[len - 1] = ' ';
X break;
X case '\026':
X if (__ext_rcodes & XRC_LOOK) {
X (void) attroff(A_UNDERLINE);
X return LOOK;
X }
X (void) beep();
X break;
X case '\030':
X (void) move(LINES - 1, 0);
X (void) clrtoeol();
X (void) refresh();
X (void) endwin();
X exit(0);
X case '\013':
X cfill(' ', buf + cnt, len - cnt);
X break;
X case '\020':
X _inlsusp();
X break;
X case '\f':
X case '\022':
X (void) clearok(curscr);
X (void) wrefresh(curscr);
X break;
X default:
X if (cnt == len || ch < ' ' || ch == '\177') {
X (void) beep();
X break;
X }
X if (firsttime && clrf == 0)
X cfill(' ', buf, len);
X buf[cnt++] = (_sh_up? toupper(ch): ch);
X }
X firsttime = 0;
X }
X}
________This_Is_The_END________
if test `wc -l < inl.c` -ne 221; then
echo 'shar: inl.c was damaged during transit (should have been 221 bytes)'
fi
fi ; : end of overwriting check
echo 'x - input.c'
if test -f input.c; then echo 'shar: not overwriting input.c'; else
sed 's/^X//' << '________This_Is_The_END________' > input.c
X/*
X * $Header: input.c,v 1.3 87/04/29 11:44:40 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: input.c,v $
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: input() -- Get data from a screen field and store it in
X * the database.
X *
X * DIFFERENCE FROM UNIFY: See gdata().
X */
X
Xinput(sfld) {
X int rc, ousf;
X
X if (sfld < 0 || sfld >= __nsf)
X xerror(-1, "input", "Invalid screen field %d", sfld);
X if (__scf[sfld].q_fld == 0)
X xerror(-2, "input", "Screen field %d has no associated database field", sfld);
X ousf = _sh_up;
X _sh_up = __scf[sfld].q_type & _UCF;
X rc = gdata(__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 < input.c` -ne 44; then
echo 'shar: input.c was damaged during transit (should have been 44 bytes)'
fi
fi ; : end of overwriting check
echo 'x - inscrf.c'
if test -f inscrf.c; then echo 'shar: not overwriting inscrf.c'; else
sed 's/^X//' << '________This_Is_The_END________' > inscrf.c
X/*
X * $Header: inscrf.c,v 1.7 87/06/01 10:55: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: inscrf.c,v $
X * Revision 1.7 87/06/01 10:55:37 brandon
X * _sh_up only forced up; left as is if type doesn't have _UCF.
X *
X * Revision 1.6 87/06/01 08:30:20 brandon
X * Added ^V (view) capability for related records.
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: inscrf() -- Take a type and (character) length, and call the
X * correct input routine for the type.
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 * ^V view related records
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 inscrf(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 = ishort(len, (short *) buf);
X break;
X case LONG:
X rc = ilong(len, (long *) buf);
X break;
X case AMT:
X rc = iamt(len, (long *) buf);
X break;
X case HAMT:
X rc = ihamt(len, (double *) buf);
X break;
X case STRNG:
X rc = istr(len, buf);
X break;
X case DATE:
X rc = idate((short *) buf);
X break;
X case HR:
X rc = itime((short *) buf);
X break;
X case FLT:
X rc = iflt(len, (double *) buf);
X break;
X default:
X xerror(-1, "inscrf", "Unknown type %d", type);
X /*NOTREACHED*/
X }
X _sh_up = oucf;
X return rc;
X}
________This_Is_The_END________
if test `wc -l < inscrf.c` -ne 107; then
echo 'shar: inscrf.c was damaged during transit (should have been 107 bytes)'
fi
fi ; : end of overwriting check
echo 'x - ishort.c'
if test -f ishort.c; then echo 'shar: not overwriting ishort.c'; else
sed 's/^X//' << '________This_Is_The_END________' > ishort.c
X/*
X * $Header: ishort.c,v 1.6 87/06/09 11:45: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: ishort.c,v $
X * Revision 1.6 87/06/09 11:45:35 brandon
X * Added code to relocate cursor after conversion error message.
X *
X * Revision 1.5 87/06/01 08:30:29 brandon
X * Added ^V (view) capability for related records.
X *
X * Revision 1.4 87/05/26 13:32:29 brandon
X * Changed for new inl() (forces no-update mode).
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 ishort(len, buf)
Xshort *buf; {
X char ibuf[4];
X int rc, cnt, sign, y, x;
X
X setraw();
X if (len > 4)
X len = 4; /* (short)'s are max len = 4 */
X getyx(stdscr, y, x);
X for (;;) {
X (void) move(y, x);
X if ((rc = inl(ibuf, len, 1)) == 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 < ishort.c` -ne 77; then
echo 'shar: ishort.c was damaged during transit (should have been 77 bytes)'
fi
fi ; : end of overwriting check
echo 'x - istr.c'
if test -f istr.c; then echo 'shar: not overwriting istr.c'; else
sed 's/^X//' << '________This_Is_The_END________' > istr.c
X/*
X * $Header: istr.c,v 1.3 87/05/26 13:32:49 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: istr.c,v $
X * Revision 1.3 87/05/26 13:32:49 brandon
X * Changed for new inl() (forces no-update mode).
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.
X */
X
Xint istr(len, buf)
Xchar *buf; {
X setraw();
X return inl(buf, len, 1);
X}
________This_Is_The_END________
if test `wc -l < istr.c` -ne 31; then
echo 'shar: istr.c was damaged during transit (should have been 31 bytes)'
fi
fi ; : end of overwriting check
echo 'x - itime.c'
if test -f itime.c; then echo 'shar: not overwriting itime.c'; else
sed 's/^X//' << '________This_Is_The_END________' > itime.c
X/*
X * $Header: itime.c,v 1.7 87/06/09 11:45: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: itime.c,v $
X * Revision 1.7 87/06/09 11:45:37 brandon
X * Added code to relocate cursor after conversion error message.
X *
X * Revision 1.6 87/06/01 08:30:44 brandon
X * Added ^V (view) capability for related records.
X *
X * Revision 1.5 87/05/26 13:32:53 brandon
X * Changed for new inl() (forces no-update mode).
X *
X * Revision 1.4 87/05/12 13:26:31 brandon
X * Dumb bug in : parsing.
X *
X * Revision 1.3 87/05/12 12:04:10 brandon
X * Changed to pass FWD, BACK, GO without checking the data buffer
X *
X * Revision 1.2 87/04/29 11:30:53 brandon
X * Added RCS header information
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * Get a time. H:M only.
X */
X
Xint itime(buf)
Xshort *buf; {
X int cnt, rc, hr, min, y, x;
X char ibuf[5];
X
X setraw();
X getyx(stdscr, y, x);
X for (;;) {
X (void) move(y, x);
X if ((rc = inl(ibuf, 5, 1)) == BACK || rc == FWD || rc == GO || rc == LOOK)
X return rc;
X for (cnt = 0; cnt < 5 && ibuf[cnt] == ' '; cnt++)
X ;
X if (cnt == 5) {
X prtmsg(1, 23, "Invalid time");
X continue;
X }
X if (!isdigit(cnt)) {
X prtmsg(1, 23, "Invalid time");
X continue;
X }
X hr = 0;
X min = 0;
X while (cnt < 5 && isdigit(ibuf[cnt])) {
X hr *= 10;
X hr += ibuf[cnt++] - '0';
X }
X if (cnt > 2 || ibuf[cnt++] != ':') {
X prtmsg(1, 23, "Invalid time");
X continue;
X }
X if (!isdigit(ibuf[cnt])) {
X prtmsg(1, 23, "Invalid time");
X continue;
X }
X min = 10 * (ibuf[cnt++] - '0');
X if (!isdigit(ibuf[cnt])) {
X prtmsg(1, 23, "Invalid time");
X continue;
X }
X min += ibuf[cnt++] - '0';
X while (cnt < 5)
X if (ibuf[cnt++] != ' ') {
X prtmsg(1, 23, "Invalid time");
X continue;
X }
X if (hr < 23 && min < 59)
X break;
X prtmsg(1, 23, "Invalid time");
X }
X return rc;
X}
________This_Is_The_END________
if test `wc -l < itime.c` -ne 90; then
echo 'shar: itime.c was damaged during transit (should have been 90 bytes)'
fi
fi ; : end of overwriting check
echo 'x - keybrd.c'
if test -f keybrd.c; then echo 'shar: not overwriting keybrd.c'; else
sed 's/^X//' << '________This_Is_The_END________' > keybrd.c
X/*
X * $Header: keybrd.c,v 1.2 87/04/29 11:30:55 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: keybrd.c,v $
X * Revision 1.2 87/04/29 11:30:55 brandon
X * Added RCS header information
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * ENTRY POINT: keybrd() -- lock or unlock the terminal keyboard
X *
X * DIFFERENCE FROM UNIFY: I don't know if UNIFY uses this (it doesn't mention
X * termcap support for it), but here it's a no-op except for checking fd = 1
X * as usual.
X */
X
Xvoid keybrd(fd, flg) {
X if (fd != 1)
X xerror(-1, "eras_ln", "Multi-terminal operation on fd %d not supported", fd);
X}
________This_Is_The_END________
if test `wc -l < keybrd.c` -ne 31; then
echo 'shar: keybrd.c was damaged during transit (should have been 31 bytes)'
fi
fi ; : end of overwriting check
echo 'x - loadscr.c'
if test -f loadscr.c; then echo 'shar: not overwriting loadscr.c'; else
sed 's/^X//' << '________This_Is_The_END________' > loadscr.c
X/*
X * $Header: loadscr.c,v 1.8 87/06/11 15:21: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: loadscr.c,v $
X * Revision 1.8 87/06/11 15:21:36 brandon
X * Wasn't checking the display length against the actual length of fields.
X *
X * Revision 1.7 87/05/12 11:22:52 brandon
X * Forgot to move to the screen field position before underlining!
X *
X * Revision 1.6 87/05/11 17:01:36 brandon
X * dumb bug (sf_type???)
X *
X * Revision 1.5 87/05/11 16:54:57 brandon
X * added code to underline screen fields initially
X *
X * Revision 1.4 87/05/11 15:30:09 brandon
X * chekcs removed, loadscr() works
X *
X * Revision 1.3 87/05/11 15:26:34 brandon
X * added a hook to find a bug in sfield handling
X *
X * Revision 1.2 87/04/29 11:30:57 brandon
X * Added RCS header information
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
Xstruct q *__scf = (struct q *) 0;
Xint __nsf = 0;
Xint _sh_up = 0;
X
X/*
X * Display a string, handling ~-escapes and null-terminating.
X */
X
Xstatic void mvspit(y, x, s, l)
Xchar *s; {
X int c;
X
X#ifdef UNIFY32
X _sdbrt(); /* get bracket & date information */
X#endif
X for (c = l - 1; s[c] == ' '; c--)
X if (c == 0)
X return;
X s[++c] = '\0';
X (void) move(y, x);
X for (c = 0; s[c] != '\0'; c++)
X if (s[c] != '~') {
X#ifdef UNIFY32
X if (_ldbrt & UNITED_STATES)
X (void) addch(s[c]);
X else
X switch (s[c]) {
X case '[':
X (void) addch('(');
X break;
X case '(':
X (void) addch('[');
X break;
X case ')':
X (void) addch(']');
X break;
X case ']':
X (void) addch(')');
X break;
X default:
X (void) addch(s[c]);
X }
X#else
X (void) addch(s[c]);
X#endif
X } else
X switch (s[++c]) {
X case 'r':
X (void) attron(A_REVERSE);
X break;
X case 's':
X (void) attroff(A_REVERSE);
X break;
X case 'u':
X (void) attron(A_UNDERLINE);
X break;
X case 'v':
X (void) attroff(A_UNDERLINE);
X break;
X case 'w':
X (void) attron(A_REVERSE|A_UNDERLINE);
X break;
X case 'x':
X (void) attroff(A_REVERSE|A_UNDERLINE);
X break;
X case '\0':
X c--;
X break;
X default:
X break;
X }
X}
X
X/*
X * ENTRY POINT: loadscr() -- Load and display a screen .q file.
X *
X * DIFFERENCE FROM UNIFY: None.
X */
X
Xvoid loadscr(s)
Xchar *s; {
X FLDESC fd;
X FILE *fp;
X char *sf;
X int cnt;
X
X setraw();
X if (__scf != (struct q *) 0)
X free((char *) __scf);
X __nsf = 0;
X if ((sf = dbfile(s, "q")) == (char *) 0)
X xerror(-1, "loadscr", "Cannot find screen %s", s);
X if ((fp = fopen(sf, "r")) == (FILE *) 0)
X xerror(-2, "loadscr", "Cannot open screen %s", s);
X (void) fseek(fp, 0L, 2);
X if (ftell(fp) == 0L)
X return; /* empty??? */
X if ((__scf = (struct q *) malloc((unsigned int) (__nsf = (int) ftell(fp)))) == (struct q *) 0)
X xerror(-3, "loadscr", "Out of memory");
X rewind(fp);
X __nsf /= sizeof *__scf;
X if (fread((char *) __scf, (int) sizeof *__scf, __nsf, fp) != __nsf)
X xerror(-4, "loadscr", "Read error on screen %s", s);
X for (cnt = 0; cnt < __nsf; cnt++) {
X if (__scf[cnt].q_fld == 0)
X continue;
X if (!fldesc(__scf[cnt].q_fld, &fd))
X xerror(-5, "loadscr", "Invalid database field %.*s", sizeof __scf[cnt].q_dbfld, __scf[cnt].q_dbfld);
X if (fd.f_typ != __scf[cnt].q_type)
X xerror(-6, "loadscr", "Database field %.*s type has changed -- recompile screen", sizeof __scf[cnt].q_dbfld, __scf[cnt].q_dbfld);
X if (fd.f_len != xsize(__scf[cnt].q_type, __scf[cnt].q_len))
X xerror(-7, "loadscr", "Database field %.*s length has changed -- recompile screen", sizeof __scf[cnt].q_dbfld, __scf[cnt].q_dbfld);
X }
X (void) erase();
X for (cnt = 0; cnt < __nsf; cnt++) {
X mvspit(__scf[cnt].q_py, __scf[cnt].q_px, __scf[cnt].q_prmp, sizeof __scf[cnt].q_prmp);
X if (__scf[cnt].q_type != 0) {
X (void) move(__scf[cnt].q_fy, __scf[cnt].q_fx);
X (void) attron(A_UNDERLINE);
X (void) printw("%*s", xsize(__scf[cnt].q_type, __scf[cnt].q_len), "");
X (void) attroff(A_UNDERLINE);
X }
X }
X}
________This_Is_The_END________
if test `wc -l < loadscr.c` -ne 161; then
echo 'shar: loadscr.c was damaged during transit (should have been 161 bytes)'
fi
fi ; : end of overwriting check
echo 'x - mv_cur.c'
if test -f mv_cur.c; then echo 'shar: not overwriting mv_cur.c'; else
sed 's/^X//' << '________This_Is_The_END________' > mv_cur.c
X/*
X * $Header: mv_cur.c,v 1.2 87/04/29 11:31:01 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: mv_cur.c,v $
X * Revision 1.2 87/04/29 11:31:01 brandon
X * Added RCS header information
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * ENTRY POINT: mv_cur() -- move cursor on a given fd
X *
X * DIFFERENCE FROM UNIFY: If fd isn't 1, you get a run-time error; use the
X * old library if you want funny terminal stuff, or else hook into terminfo-
X * based curses and call newterm(). I daresay nobody uses the fd hook anyway.
X */
X
Xvoid mv_cur(fd, x, y) {
X if (fd != 1)
X xerror(-1, "eras_ln", "Multi-terminal operation on fd %d not supported", fd);
X if (move(y, x) == ERR)
X xerror(-1, "mv_cur", "(%d, %d) cursor position is off the screen", x, y);
X}
________This_Is_The_END________
if test `wc -l < mv_cur.c` -ne 33; then
echo 'shar: mv_cur.c was damaged during transit (should have been 33 bytes)'
fi
fi ; : end of overwriting check
echo 'x - outbuf.c'
if test -f outbuf.c; then echo 'shar: not overwriting outbuf.c'; else
sed 's/^X//' << '________This_Is_The_END________' > outbuf.c
X/*
X * $Header: outbuf.c,v 1.1 87/04/29 14:17:40 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: outbuf.c,v $
X * Revision 1.1 87/04/29 14:17:40 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * ENTRY POINT: outbuf() -- Display data from a buffer to a screen field.
X *
X * DIFFERENCE FROM UNIFY: None, since screen fields retain decimal info.
X */
X
Xvoid outbuf(sfld, buf)
Xchar *buf; {
X int len;
X
X if (sfld < 0 || sfld >= __nsf)
X xerror(-1, "outbuf", "Unknown screen field %d", sfld);
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 (void) move(__scf[sfld].q_fy, __scf[sfld].q_fx);
X pflt(__scf[sfld].q_len / 10, (double *) buf, __scf[sfld].q_len % 10);
X return;
X }
X outscrf(__scf[sfld].q_fx, __scf[sfld].q_fy, __scf[sfld].q_type & ~_UCF, len, buf);
X}
________This_Is_The_END________
if test `wc -l < outbuf.c` -ne 54; then
echo 'shar: outbuf.c was damaged during transit (should have been 54 bytes)'
fi
fi ; : end of overwriting check
echo 'x - output.c'
if test -f output.c; then echo 'shar: not overwriting output.c'; else
sed 's/^X//' << '________This_Is_The_END________' > output.c
X/*
X * $Header: output.c,v 1.1 87/04/29 14:23:38 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: output.c,v $
X * Revision 1.1 87/04/29 14:23:38 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * ENTRY POINT: output() -- Output data from the database to a screen field
X *
X * DIFFERENCE FROM UNIFY: See outbuf() and pflt().
X */
X
Xvoid output(sfld) {
X int len;
X char buf[256];
X
X if (sfld < 0 || sfld >= __nsf)
X xerror(-1, "output", "Unknown screen field %d", sfld);
X if (__scf[sfld].q_fld == 0)
X xerror(-2, "output", "Screen field %d has no associated database field", sfld);
X if (gfield(__scf[sfld].q_fld, buf) != 0)
X xerror(-3, "output", "Read access for field %d denied", __scf[sfld].q_fld);
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 (void) move(__scf[sfld].q_fy, __scf[sfld].q_fx);
X pflt(__scf[sfld].q_len / 10, (double *) buf, __scf[sfld].q_len % 10);
X return;
X }
X outscrf(__scf[sfld].q_fx, __scf[sfld].q_fy, __scf[sfld].q_type & ~_UCF, len, buf);
X}
________This_Is_The_END________
if test `wc -l < output.c` -ne 58; then
echo 'shar: output.c was damaged during transit (should have been 58 bytes)'
fi
fi ; : end of overwriting check
echo 'x - outscrf.c'
if test -f outscrf.c; then echo 'shar: not overwriting outscrf.c'; else
sed 's/^X//' << '________This_Is_The_END________' > outscrf.c
X/*
X * $Header: outscrf.c,v 1.4 87/05/22 18:01: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: outscrf.c,v $
X * Revision 1.4 87/05/22 18:01:22 brandon
X * another dumb bug (`(vid)'?)
X *
X * Revision 1.3 87/05/22 17:58:48 brandon
X * Forgot to move() to the right place before doing output! :-(
X *
X * Revision 1.2 87/04/29 14:43:24 brandon
X * Added cast to (double *) for pflt() call
X *
X * Revision 1.1 87/04/29 13:18:44 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * ENTRY POINT: outscrf() -- Display a value on the screen
X *
X * DIFFERENCE FROM UNIFY: Screen fields with type FLT are handled specially.
X * See pflt.c for the reason; quick summary is that Unify Corp. blew it.
X */
X
Xvoid outscrf(x, y, type, len, buf)
Xchar *buf; {
X (void) setraw();
X (void) move(y, x);
X switch (type) {
X case INT:
X pshort(len, (short *) buf);
X break;
X case LONG:
X plong(len, (long *) buf);
X break;
X case AMT:
X pamt(len, (long *) buf);
X break;
X case HAMT:
X phamt(len, (double *) buf);
X break;
X case STRNG:
X pstr(len, buf);
X break;
X case DATE:
X pdate((short *) buf);
X break;
X case HR:
X ptime((short *) buf);
X break;
X case FLT:
X pflt(len, (double *) buf, -1); /* use %g, we don't know the #dec */
X break;
X default:
X xerror(-1, "outscrf", "Unknown type %d", type);
X }
X}
________This_Is_The_END________
if test `wc -l < outscrf.c` -ne 68; then
echo 'shar: outscrf.c was damaged during transit (should have been 68 bytes)'
fi
fi ; : end of overwriting check
echo 'x - pageout.c'
if test -f pageout.c; then echo 'shar: not overwriting pageout.c'; else
sed 's/^X//' << '________This_Is_The_END________' > pageout.c
X/*
X * $Header: pageout.c,v 1.1 87/04/29 17:04:47 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: pageout.c,v $
X * Revision 1.1 87/04/29 17:04:47 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * A simple pager, along the lines of that built in to SSQL and the menu
X * manager.
X */
X
Xvoid pageout(fp, title)
XFILE *fp;
Xchar *title; {
X int ch, col, line;
X
X (void) move(2, 0);
X (void) attron(A_REVERSE);
X (void) addstr(title);
X (void) attroff(A_REVERSE);
X (void) addch('\n');
X line = 3;
X col = 0;
X while ((ch = getc(fp)) != EOF) {
X (void) move(line, col);
X switch (ch) {
X case '\n':
X (void) attroff(A_UNDERLINE);
X (void) addch('\n');
X if (++line == LINES - 1) {
X (void) attron(A_REVERSE);
X (void) addstr(" More? Press any key to continue or Q to quit. ");
X (void) attroff(A_REVERSE);
X (void) refresh();
X switch (getchar() & 0x7f) {
X case 'q':
X case 'Q':
X line = -1;
X break;
X default:
X line = 3;
X break;
X }
X (void) addch('\r');
X (void) clrtoeol();
X }
X break;
X case '\b':
X (void) addch('\b');
X (void) attron(A_UNDERLINE);
X if (col > 0)
X col--;
X continue;
X case '\t':
X do {
X (void) addch(' ');
X (void) attroff(A_UNDERLINE);
X if (++col == COLS) {
X col = 0;
X ++line;
X break;
X }
X } while (col % 8 != 0);
X if (line == LINES - 1) {
X (void) attron(A_REVERSE);
X (void) addstr(" More? Press any key to continue or Q to quit. ");
X (void) attroff(A_REVERSE);
X (void) refresh();
X switch (getchar() & 0x7f) {
X case 'q':
X case 'Q':
X line = -1;
X break;
X default:
X line = 3;
X break;
X }
X (void) addch('\r');
X (void) clrtoeol();
X }
X break;
X case '\r':
X col = 0;
X (void) addch('\r');
X (void) attroff(A_UNDERLINE);
X break;
X default:
X if (ch < ' ' || ch > '~')
X ch = ' ';
X (void) addch(ch);
X (void) attroff(A_UNDERLINE);
X if (++col < COLS)
X break;
X col = 0;
X if (++line == LINES - 1) {
X (void) attron(A_REVERSE);
X (void) addstr(" More? Press any key to continue or Q to quit. ");
X (void) attroff(A_REVERSE);
X (void) refresh();
X switch (getchar() & 0x7f) {
X case 'q':
X case 'Q':
X line = -1;
X break;
X default:
X line = 3;
X break;
X }
X (void) addch('\r');
X (void) clrtoeol();
X }
X break;
X }
X if (line == -1)
X break;
X }
X if (line == -1 || (line == 3 && col == 0))
X return;
X prtmsg(1, 23, "Completed. Press RETURN to continue");
X}
________This_Is_The_END________
if test `wc -l < pageout.c` -ne 133; then
echo 'shar: pageout.c was damaged during transit (should have been 133 bytes)'
fi
fi ; : end of overwriting check
echo 'x - pamt.c'
if test -f pamt.c; then echo 'shar: not overwriting pamt.c'; else
sed 's/^X//' << '________This_Is_The_END________' > pamt.c
X/*
X * $Header: pamt.c,v 1.1 87/04/29 12:18:40 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: pamt.c,v $
X * Revision 1.1 87/04/29 12:18:40 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * Display a value of type AMT.
X */
X
Xvoid pamt(len, buf)
Xlong *buf; {
X (void) setraw();
X if (len < 4)
X return;
X (void) attron(A_UNDERLINE);
X (void) printw("%*ld.%02d", len - 3, *buf / 100L, *buf % 100L);
X (void) attroff(A_UNDERLINE);
X}
________This_Is_The_END________
if test `wc -l < pamt.c` -ne 32; then
echo 'shar: pamt.c was damaged during transit (should have been 32 bytes)'
fi
fi ; : end of overwriting check
echo 'x - pdata.c'
if test -f pdata.c; then echo 'shar: not overwriting pdata.c'; else
sed 's/^X//' << '________This_Is_The_END________' > pdata.c
X/*
X * $Header: pdata.c,v 1.1 87/04/29 13:51:45 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: pdata.c,v $
X * Revision 1.1 87/04/29 13:51:45 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * ENTRY POINT: pdata() -- Display data from database fields
X *
X * DIFFERENCE FROM UNIFY: FLT is FUBAR; see pflt.c.
X */
X
Xvoid pdata(x, y, fld) {
X char fbuf[256];
X FLDESC fd;
X
X if (!fldesc(fld, &fd))
X xerror(-1, "pdata", "Unknown database field %d", fld);
X if (fd.f_typ == COMB)
X xerror(-2, "pdata", "COMB field %d illegal", fld);
X if (gfield(fld, fbuf) != 0)
X xerror(-3, "pdata", "Read access for field %d denied", fld);
X outscrf(x, y, fd.f_typ, fd.f_len, fbuf);
X}
________This_Is_The_END________
if test `wc -l < pdata.c` -ne 37; then
echo 'shar: pdata.c was damaged during transit (should have been 37 bytes)'
fi
fi ; : end of overwriting check
echo 'x - pdate.c'
if test -f pdate.c; then echo 'shar: not overwriting pdate.c'; else
sed 's/^X//' << '________This_Is_The_END________' > pdate.c
X/*
X * $Header: pdate.c,v 1.1 87/04/29 12:18:30 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: pdate.c,v $
X * Revision 1.1 87/04/29 12:18:30 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * Display a value of type DATE. Under UNIFY 3.2, this is easier...
X */
X
X#ifdef UNIFY32
X
Xvoid pdate(buf)
Xshort *buf; {
X char dbuf[8];
X
X (void) setraw();
X (void) attron(A_UNDERLINE);
X (void) dspdt(*buf, dbuf); /* handles DATETP automatically */
X (void) printw("%.8s", dbuf);
X (void) attroff(A_UNDERLINE);
X}
X
X#else
X
Xvoid pdate(buf)
Xshort *buf; {
X int date[3];
X
X (void) setraw();
X (void) attron(A_UNDERLINE);
X if (*buf == NULLDATE)
X (void) addstr("**/**/**");
X else {
X kdate(*buf, date);
X (void) printw("%02d/%02d/%02d", date[MONTH], date[DAY], date[YEAR]);
X }
X (void) attroff(A_UNDERLINE);
X}
________This_Is_The_END________
if test `wc -l < pdate.c` -ne 52; then
echo 'shar: pdate.c was damaged during transit (should have been 52 bytes)'
fi
fi ; : end of overwriting check
echo 'x - pflt.c'
if test -f pflt.c; then echo 'shar: not overwriting pflt.c'; else
sed 's/^X//' << '________This_Is_The_END________' > pflt.c
X/*
X * $Header: pflt.c,v 1.2 87/04/29 14:41:32 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: pflt.c,v $
X * Revision 1.2 87/04/29 14:41:32 brandon
X * Forgot to declare pflt() as (void)!
X *
X * Revision 1.1 87/04/29 12:36:23 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * Display a value of type FLT. Note that there is a problem here -- screen
X * fields come with # of decimals, database fields and outscrf() specs do not.
X * This problem persists and I don't know what, really, to do about it in the
X * case of database fields. Screen fields get their specified decimals,
X * however, and outscrf() uses %g to avoid the issue entirely. So dbfields
X * use outscrf() and you have to accept the loss.
X *
X * This is a botch. UNIFY Corporation, PLEASE FIX THIS!!! I don't like the
X * loss of this data and I don't like violating license agreements to dig it
X * out of the guts of UNITRIEVE!
X */
X
Xvoid pflt(len, buf, ndec)
Xdouble *buf; {
X (void) setraw();
X (void) attron(A_UNDERLINE);
X if (ndec == -1) /* unknown decimals */
X (void) printw("%*g", len, *buf);
X else
X (void) printw("%*.*f", len, ndec, *buf);
X (void) attroff(A_UNDERLINE);
X}
________This_Is_The_END________
if test `wc -l < pflt.c` -ne 45; then
echo 'shar: pflt.c was damaged during transit (should have been 45 bytes)'
fi
fi ; : end of overwriting check
echo 'x - pflush.c'
if test -f pflush.c; then echo 'shar: not overwriting pflush.c'; else
sed 's/^X//' << '________This_Is_The_END________' > pflush.c
X/*
X * $Header: pflush.c,v 1.1 87/06/01 15:32: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: pflush.c,v $
X * Revision 1.1 87/06/01 15:32:07 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * The pflush() function does a refresh() without having to include the
X * curses header file in a user program not otherwise using curses.
X */
X
Xvoid pflush() {
X (void) refresh();
X}
________This_Is_The_END________
if test `wc -l < pflush.c` -ne 27; then
echo 'shar: pflush.c was damaged during transit (should have been 27 bytes)'
fi
fi ; : end of overwriting check
echo 'x - phamt.c'
if test -f phamt.c; then echo 'shar: not overwriting phamt.c'; else
sed 's/^X//' << '________This_Is_The_END________' > phamt.c
X/*
X * $Header: phamt.c,v 1.1 87/04/29 12:35:58 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: phamt.c,v $
X * Revision 1.1 87/04/29 12:35:58 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * Print a value of type HAMT.
X */
X
Xvoid phamt(len, buf)
Xdouble *buf; {
X (void) setraw();
X (void) attron(A_UNDERLINE);
X (void) printw("%*.2f", len, *buf / 100.0);
X (void) attroff(A_UNDERLINE);
X}
________This_Is_The_END________
if test `wc -l < phamt.c` -ne 30; then
echo 'shar: phamt.c was damaged during transit (should have been 30 bytes)'
fi
fi ; : end of overwriting check
echo 'x - plong.c'
if test -f plong.c; then echo 'shar: not overwriting plong.c'; else
sed 's/^X//' << '________This_Is_The_END________' > plong.c
X/*
X * $Header: plong.c,v 1.1 87/04/29 12:47:21 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: plong.c,v $
X * Revision 1.1 87/04/29 12:47:21 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * Display a value of type LONG.
X */
X
Xvoid plong(len, buf)
Xlong *buf; {
X (void) setraw();
X (void) attron(A_UNDERLINE);
X (void) printw("%*ld", len, *buf);
X (void) attroff(A_UNDERLINE);
X}
________This_Is_The_END________
if test `wc -l < plong.c` -ne 30; then
echo 'shar: plong.c was damaged during transit (should have been 30 bytes)'
fi
fi ; : end of overwriting check
echo 'x - priamd.c'
if test -f priamd.c; then echo 'shar: not overwriting priamd.c'; else
sed 's/^X//' << '________This_Is_The_END________' > priamd.c
X/*
X * $Header: priamd.c,v 1.4 87/04/29 16:02:38 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: priamd.c,v $
X * Revision 1.4 87/04/29 16:02:38 brandon
X * Added a (void) cast to mvaddstr().
X *
X * Revision 1.3 87/04/29 15:56:10 brandon
X * Added $UUACL handler
X *
X * Revision 1.2 87/04/29 11:31:08 brandon
X * Added RCS header information
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X#include <ctype.h>
X
Xextern int logacl; /* access level, set from sysrecev */
X
X/*
X * ENTRY POINT: priamd() -- prompt for operational mode
X *
X * DIFFERENCE FROM UNIFY: We no longer wait for a newline. Also, the blocky
X * bleechy "[I]NQUIRE" type stuff is now "Inquire" which looks much nicer.
X */
X
Xpriamd(line) {
X char cmdline[80], cmd[6];
X char ch;
X static int uuacl = -1;
X
X (void) mvaddstr(line, 1, " ");
X if (uuacl == -1) {
X char *ep;
X
X if (logacl < 0 || logacl > 15)
X logacl = INQUIRE;
X if ((ep = getenv("UUACL")) == (char *) 0)
X uuacl = logacl;
X else if ((uuacl = atoi(ep)) <= 0 || uuacl > 15)
X uuacl = logacl;
X logacl = uuacl;
X }
X if (logacl == 0)
X return BACK;
X cmdline[0] = '\0';
X cmd[0] = '\0';
X if (logacl & INQUIRE) {
X (void) strcat(cmdline, "Inquire");
X (void) strcat(cmd, "I");
X }
X if (logacl & ADD) {
X if (cmdline[0] != '\0')
X (void) strcat(cmdline, ", ");
X (void) strcat(cmdline, "Add");
X (void) strcat(cmd, "A");
X }
X if (logacl & MODIFY) {
X if (cmdline[0] != '\0')
X (void) strcat(cmdline, ", ");
X (void) strcat(cmdline, "Modify");
X (void) strcat(cmd, "M");
X }
X if (logacl & DELETE) {
X if (cmdline[0] != '\0')
X (void) strcat(cmdline, ", ");
X (void) strcat(cmdline, "Delete");
X (void) strcat(cmd, "D");
X }
X (void) strcat(cmdline, "? ");
X (void) mvaddstr(22, 1, cmdline);
X for (;; (void) beep()) {
X ch = toupper(getchar() & 0x7f);
X if (ch == '\0')
X continue;
X if (ch == '\t' || ch == '\025') {
X (void) addch('\r');
X (void) clrtoeol();
X return BACK;
X }
X if (strchr(cmd, ch) != (char *) 0)
X break;
X }
X (void) addch('\r');
X (void) clrtoeol();
X switch (ch) {
X case 'I':
X (void) mvaddstr(line, 1, "Inquire mode");
X return 0;
X case 'A':
X (void) mvaddstr(line, 1, "Add mode");
X return 1;
X case 'M':
X (void) mvaddstr(line, 1, "Modify mode");
X return 2;
X case 'D':
X (void) mvaddstr(line, 1, "Delete mode");
X return 3;
X }
X xerror(-1, "priamd", "Illegal internal state %c", ch);
X /*NOTREACHED*/
X}
________This_Is_The_END________
if test `wc -l < priamd.c` -ne 111; then
echo 'shar: priamd.c was damaged during transit (should have been 111 bytes)'
fi
fi ; : end of overwriting check
echo 'x - prmp.c'
if test -f prmp.c; then echo 'shar: not overwriting prmp.c'; else
sed 's/^X//' << '________This_Is_The_END________' > prmp.c
X/*
X * $Header: prmp.c,v 1.2 87/04/29 11:31:10 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: prmp.c,v $
X * Revision 1.2 87/04/29 11:31:10 brandon
X * Added RCS header information
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * ENTRY POINT: prmp() -- Display a string
X *
X * DIFFERENCE FROM UNIFY: Rather than dim/normal, uses regular output vs.
X * data fields underlined (if supported).
X */
X
Xvoid prmp(x, y, str)
Xchar *str; {
X (void) mvaddstr(y, x, str);
X}
________This_Is_The_END________
if test `wc -l < prmp.c` -ne 30; then
echo 'shar: prmp.c was damaged during transit (should have been 30 bytes)'
fi
fi ; : end of overwriting check
echo 'x - prmpf.c'
if test -f prmpf.c; then echo 'shar: not overwriting prmpf.c'; else
sed 's/^X//' << '________This_Is_The_END________' > prmpf.c
X/*
X * $Header: prmpf.c,v 1.2 87/04/29 11:31:12 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: prmpf.c,v $
X * Revision 1.2 87/04/29 11:31:12 brandon
X * Added RCS header information
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * ENTRY POINT: prmpf() -- Display a string in the foreground
X *
X * DIFFERENCE FROM UNIFY: Rather than dim/normal, uses regular output vs.
X * data fields underlined (if supported). Note that cleancrt() won't undo
X * these, unfortunately.
X */
X
Xvoid prmpf(x, y, str)
Xchar *str; {
X (void) attron(A_UNDERLINE);
X (void) mvaddstr(y, x, str);
X (void) attroff(A_UNDERLINE);
X}
________This_Is_The_END________
if test `wc -l < prmpf.c` -ne 33; then
echo 'shar: prmpf.c was damaged during transit (should have been 33 bytes)'
fi
fi ; : end of overwriting check
echo 'x - prmprv.c'
if test -f prmprv.c; then echo 'shar: not overwriting prmprv.c'; else
sed 's/^X//' << '________This_Is_The_END________' > prmprv.c
X/*
X * $Header: prmprv.c,v 1.2 87/04/29 11:31:14 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: prmprv.c,v $
X * Revision 1.2 87/04/29 11:31:14 brandon
X * Added RCS header information
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * ENTRY POINT: prmprv() -- Display a string in reverse video
X *
X * DIFFERENCE FROM UNIFY: None (!)
X */
X
Xvoid prmprv(x, y, str)
Xchar *str; {
X (void) attron(A_REVERSE);
X (void) mvaddstr(y, x, str);
X (void) attroff(A_REVERSE);
X}
________This_Is_The_END________
if test `wc -l < prmprv.c` -ne 31; then
echo 'shar: prmprv.c was damaged during transit (should have been 31 bytes)'
fi
fi ; : end of overwriting check
echo 'x - prtmsg.c'
if test -f prtmsg.c; then echo 'shar: not overwriting prtmsg.c'; else
sed 's/^X//' << '________This_Is_The_END________' > prtmsg.c
X/*
X * $Header: prtmsg.c,v 1.2 87/04/29 11:31:16 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: prtmsg.c,v $
X * Revision 1.2 87/04/29 11:31:16 brandon
X * Added RCS header information
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * ENTRY POINT: prtmsg() -- Spit out a message in reverse video and wait for
X * a keypress.
X *
X * DIFFERENCE FROM UNIFY: Typeahead is discarded. This prevents the problems
X * we have with people typing faster than they are thinking. :-)
X */
X
Xvoid prtmsg(x, y, str)
Xchar *str; {
X setraw();
X (void) flushinp();
X (void) attrset(A_REVERSE);
X (void) mvprintw(y, x, " %s -> -> ", str);
X (void) attrset(0);
X (void) refresh();
X (void) getchar();
X (void) move(y, x);
X (void) clrtoeol();
X (void) refresh(); /* so it disappears immediately */
X}
________This_Is_The_END________
if test `wc -l < prtmsg.c` -ne 40; then
echo 'shar: prtmsg.c was damaged during transit (should have been 40 bytes)'
fi
fi ; : end of overwriting check
echo 'x - pshort.c'
if test -f pshort.c; then echo 'shar: not overwriting pshort.c'; else
sed 's/^X//' << '________This_Is_The_END________' > pshort.c
X/*
X * $Header: pshort.c,v 1.1 87/04/29 12:47:33 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: pshort.c,v $
X * Revision 1.1 87/04/29 12:47:33 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * Display a value of type INT.
X */
X
Xvoid pshort(len, buf)
Xshort *buf; {
X (void) setraw();
X (void) attron(A_UNDERLINE);
X (void) printw("%*d", len, *buf);
X (void) attroff(A_UNDERLINE);
X}
________This_Is_The_END________
if test `wc -l < pshort.c` -ne 30; then
echo 'shar: pshort.c was damaged during transit (should have been 30 bytes)'
fi
fi ; : end of overwriting check
echo 'x - pstr.c'
if test -f pstr.c; then echo 'shar: not overwriting pstr.c'; else
sed 's/^X//' << '________This_Is_The_END________' > pstr.c
X/*
X * $Header: pstr.c,v 1.3 87/06/03 14:05:11 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: pstr.c,v $
X * Revision 1.3 87/06/03 14:05:11 brandon
X * TRY qmove(), DUMMY! :-)
X *
X * Revision 1.2 87/06/03 13:51:32 brandon
X * Added workaround for UNITRIEVE nulls misfeature.
X *
X * Revision 1.1 87/04/29 12:47:40 brandon
X * Initial revision
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * Display a value of type STRNG. This would be simple if not for the penchant
X * of UNITRIEVE to initialize STRNG fields to nulls....
X */
X
Xvoid pstr(len, buf)
Xchar *buf; {
X char nulls[256];
X
X cfill(0, nulls, len);
X if (ivcmp(buf, nulls, len))
X cfill(' ', nulls, len);
X else
X qmove(buf, nulls, len);
X (void) setraw();
X (void) attron(A_UNDERLINE);
X (void) printw("%.*s", len, nulls);
X (void) attroff(A_UNDERLINE);
X}
________This_Is_The_END________
if test `wc -l < pstr.c` -ne 44; then
echo 'shar: pstr.c was damaged during transit (should have been 44 bytes)'
fi
fi ; : end of overwriting check
echo 'x - ptct_crt.c'
if test -f ptct_crt.c; then echo 'shar: not overwriting ptct_crt.c'; else
sed 's/^X//' << '________This_Is_The_END________' > ptct_crt.c
X/*
X * $Header: ptct_crt.c,v 1.2 87/04/29 11:31: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: ptct_crt.c,v $
X * Revision 1.2 87/04/29 11:31:17 brandon
X * Added RCS header information
X *
X */
X
X/*LINTLIBRARY*/
X
X#include "usc.h"
X
X/*
X * ENTRY POINT: ptct_crt() -- turn on terminal write protection
X *
X * DIFFERENCE FROM UNIFY: All we do is check fd == 1, since curses handles the
X * screen itself.
X */
X
Xvoid ptct_crt(fd, flg) {
X if (fd != 1)
X xerror(-1, "ptct_crt", "Multi-terminal operation on fd %d not supported", fd);
X}
________This_Is_The_END________
if test `wc -l < ptct_crt.c` -ne 30; then
echo 'shar: ptct_crt.c was damaged during transit (should have been 30 bytes)'
fi
fi ; : end of overwriting check
exit 0
More information about the Comp.sources.misc
mailing list