ecu - SCO XENIX V/{2,3}86 Extended CU part 09/47
Warren Tucker
wht at tridom.uucp
Mon Oct 9 07:49:11 AEST 1989
---- Cut Here and unpack ----
#!/bin/sh
# this is part 9 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file ecushm.c continued
#
CurArch=9
if test ! -r s2_seq_.tmp
then echo "Please unpack part 1 first!"
exit 1; fi
( read Scheck
if test "$Scheck" != $CurArch
then echo "Please unpack part $Scheck next!"
exit 1;
else exit 0; fi
) < s2_seq_.tmp || exit 1
echo "x - Continuing file ecushm.c"
sed 's/^X//' << 'SHAR_EOF' >> ecushm.c
X perror(shm_name);
X umask(old_umask);
X exit(11);
X }
X close(fd);
X
X if((shm_key = ftok(shm_name,1)) < 0)
X {
X fputs("ftok of ",se);
X perror(shm_name);
X umask(old_umask);
X unlink(shm_name);
X exit(11);
X }
X unlink(shm_name);
X
X if((shm_shmid = shmget(shm_key,sizeof(ECU_SDS),IPC_CREAT | 0600)) < 0)
X {
X perror("shmget");
X umask(old_umask);
X exit(11);
X }
X
X if(((char FAR *)shm = shmat(shm_shmid,(char FAR *)0,0)) == (char FAR *)-1)
X {
X perror("shmat");
X umask(old_umask);
X exit(11);
X }
X
X umask(old_umask);
X
X shm->xcmd = 0; /* signal from xmtr to rcvr SIGUSR2 */
X shm->xi1 = 0; /* parameters */
X shm->xi2 = 0;
X shm->xs1[0] = 0;
X shm->rcmd = 0; /* signal from rcvr to xmtr SIGUSR2 */
X shm->ri1 = 0; /* parameters */
X shm->ri2 = 0;
X shm->rs1[0] = 0;
X shm->rcvd_chars = 0L;
X shm->rcvd_chars_this_connect = 0L;
X
X if(shmctl(shm_shmid,IPC_RMID,(struct shmid_ds *)0))
X perror("shmctl IPC_RMID");
X
X return(0);
X} /* end of shm_init */
X
X/*+-------------------------------------------------------------------------
X shm_done() -- finished with shm -- clean up
X--------------------------------------------------------------------------*/
Xshm_done()
X{
X} /* end of shm_done */
X
X/*+-------------------------------------------------------------------------
X shmx_rc_report(prcvr_chars,prcvr_chars_this_connect)
X xmtr calls to get rcvr stats
X--------------------------------------------------------------------------*/
Xshmx_rc_report(prcvd_chars,prcvd_chars_this_connect)
Xlong *prcvd_chars;
Xlong *prcvd_chars_this_connect;
X{
X *prcvd_chars = shm->rcvd_chars;
X *prcvd_chars_this_connect = shm->rcvd_chars_this_connect;
X} /* end of shmx_rc_report */
X
X/*+-------------------------------------------------------------------------
X shmx_connect() -- xmtr calls when modem connects
X--------------------------------------------------------------------------*/
Xvoid
Xshmx_connect()
X{
X shm->rcvd_chars_this_connect = 0L;
X} /* end of shmx_connect */
X
X/*+-------------------------------------------------------------------------
X shmr_rcvd_chars(count) -- rcvr/xmtr calls when char(s) rcvd
X--------------------------------------------------------------------------*/
Xvoid
Xshmr_rcvd_chars(count)
Xint count;
X{
X shm->rcvd_chars += count;
X shm->rcvd_chars_this_connect += count;
X} /* end of shmr_rcvd_chars */
X
X/*+-------------------------------------------------------------------------
X shmx_make_rcvr_sleep(seconds)
X--------------------------------------------------------------------------*/
Xvoid
Xshmx_make_rcvr_sleep(seconds)
Xint seconds;
X{
X shm->xcmd = SHMX_MAKE_RCVR_SLEEP;
X shm->xi1 = seconds;
X kill_rcvr_process(SIGUSR2);
X
X} /* end of shmx_make_rcvr_sleep */
X
X/*+-------------------------------------------------------------------------
X shmx_set_rcvr_ansi(mode)
X--------------------------------------------------------------------------*/
Xvoid
Xshmx_set_rcvr_ansi(mode)
Xint mode;
X{
X shm->xcmd = SHMX_SET_RCVR_ANSI;
X shm->xi1 = mode;
X kill_rcvr_process(SIGUSR2);
X
X} /* end of shmx_set_rcvr_ansi */
X
X/*+-------------------------------------------------------------------------
X shmx_set_rcvr_log(logfilename,append_flag,raw_flag)
X
Xnull logfilename stops logging
Xappend_flag says whether to open for write or append
Xraw_flag says whether or not to filter non-printable chars or not
X(NL not filtered)
X--------------------------------------------------------------------------*/
Xvoid
Xshmx_set_rcvr_log(logfilename,append_flag,raw_flag,flush_each)
Xchar *logfilename;
X{
X shm->xcmd = SHMX_SET_RCVR_LOG;
X shm->xi1 = append_flag;
X shm->xi2 = raw_flag;
X shm->xi3 = flush_each;
X strcpy(shm->xs1,logfilename);
X kill_rcvr_process(SIGUSR2);
X} /* end of shmx_set_rcvr_log */
X
X/*+-------------------------------------------------------------------------
X shmx_set_rcvr_nl_control()
X--------------------------------------------------------------------------*/
Xvoid
Xshmx_set_rcvr_nl_control()
X{
X shm->xcmd = SHMX_SET_RCVR_NL_CTRL;
X shm->xi1 = Ladd_nl_incoming;
X shm->xi2 = Ladd_nl_outgoing;
X kill_rcvr_process(SIGUSR2);
X
X} /* end of shmx_set_rcvr_nl_control */
X
X/*+-------------------------------------------------------------------------
X shmx_set_rcvr_bn(bn_value)
X--------------------------------------------------------------------------*/
Xvoid
Xshmx_set_rcvr_bn(bn_value)
Xint bn_value;
X{
X shm->xcmd = SHMX_SET_RCVR_BN;
X shm->xi1 = bn_value;
X kill_rcvr_process(SIGUSR2);
X
X} /* end of shmx_set_rcvr_bn */
X
X/*+-------------------------------------------------------------------------
X shmr_set_xmtr_bn_1()
X--------------------------------------------------------------------------*/
Xvoid
Xshmr_set_xmtr_bn_1()
X{
X shm->rcmd = SHMR_SET_XMTR_BN1;
X kill(xmtr_pid,SIGUSR2);
X
X} /* end of shmr_set_xmtr_bn_1 */
X
X/*+-------------------------------------------------------------------------
X shmx_process_xmtr_SIGUSR2()
X--------------------------------------------------------------------------*/
Xvoid
Xshmx_process_xmtr_SIGUSR2()
X{
Xregister rcmd;
Xregister ri1,ri2;
X
X rcmd = shm->rcmd;
X shm->rcmd = 0;
X ri1 = shm->ri1;
X ri2 = shm->ri2;
X
X switch(rcmd)
X {
X case SHMR_SET_XMTR_BN1:
X want_bell_notify = 1;
X break;
X }
X
X} /* end of shmx_process_xmtr_SIGUSR2 */
X
X/*+-------------------------------------------------------------------------
X shmr_process_rcvr_SIGUSR2()
X--------------------------------------------------------------------------*/
Xvoid
Xshmr_process_rcvr_SIGUSR2()
X{
Xregister xcmd;
Xregister xi1,xi2,xi3;
Xchar xs1[SHM_STRLEN];
X
X xcmd = shm->xcmd;
X shm->xcmd = 0;
X xi1 = shm->xi1;
X xi2 = shm->xi2;
X xi3 = shm->xi3;
X strcpy(xs1,shm->xs1);
X
X switch(xcmd)
X {
X case SHMX_MAKE_RCVR_SLEEP:
X sleep(xi1);
X break;
X
X case SHMX_SET_RCVR_BN:
X want_bell_notify = xi1;
X break;
X
X case SHMX_SET_RCVR_NL_CTRL:
X Ladd_nl_incoming = xi1;
X Ladd_nl_outgoing = xi2;
X break;
X
X case SHMX_SET_RCVR_LOG:
X if(rcvr_log) /* if already logging */
X {
X if(!rcvr_log_raw)
X putc('\n',rcvr_log_fp);
X fclose(rcvr_log_fp);
X rcvr_log = 0;
X }
X if(strlen(xs1) == 0) /* if all we wanted was to stop log ... */
X break; /* ... then quit */
X rcvr_log = 1;
X rcvr_log_append = xi1;
X rcvr_log_raw = xi2;
X rcvr_log_flusheach = xi3;
X strcpy(rcvr_log_file,xs1);
X rcvr_log_open();
X break;
X
X case SHMX_SET_RCVR_ANSI:
X ansi_filter_control(xi1);
X break;
X }
X
X} /* end of shmr_process_rcvr_SIGUSR2 */
X
X/* end of ecushm.c */
X/* vi: set tabstop=4 shiftwidth=4: */
SHAR_EOF
echo "File ecushm.c is complete"
chmod 0644 ecushm.c || echo "restore of ecushm.c fails"
echo "x - extracting ecusighdl.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ecusighdl.c &&
X/* CHK=0xFBB9 */
X/*+-----------------------------------------------------------------------
X ecusighdl.c - xmtr/rcvr individual process signal handlers
X Copyright 1986,1989 Warren H. Tucker, III. All Rights Reserved
X
X Defined functions:
X child_signals()
X hangup(sig)
X kill_rcvr_process(sig)
X rcvr_SIGHUP_handler()
X rcvr_SIGINT_handler()
X rcvr_SIGTERM_handler()
X rcvr_SIGUSR1_handler()
X rcvr_SIGUSR2_handler()
X rcvr_common_signal_handler()
X rcvr_signals()
X start_rcvr_process(notify_flag)
X xmtr_SIGHUP_handler(sig)
X xmtr_SIGINT_handler()
X xmtr_SIGTERM_handler(sig)
X xmtr_SIGUSR2_handler()
X xmtr_bsd4_SIGCHLD_handler()
X xmtr_signals()
X xmtr_xenix_SIGCLD_handler()
X
X------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:07-03-1989-22:57-wht------------- ecu 2.00 ---------------- */
X/*:06-24-1989-16:53-wht-flush edits --- ecu 1.95 */
X
X#include "ecu.h"
X#include "ecufork.h"
X
Xextern int errno;
Xextern int rcvr_pid;
Xextern int xmtr_pid;
Xextern int windows_active;
Xextern int current_ttymode;
X
Xint interrupt = 0; /* interrupt indicator */
Xint proc_interrupt = 0; /* procedure interrupt indicator */
Xint last_child_wait_status = 0;
Xint last_child_wait_pid = 0;
X
Xvoid rcvr();
Xvoid hangup();
X
Xvoid rcvr_common_signal_handler();
Xvoid rcvr_SIGTERM_handler();
Xvoid rcvr_SIGINT_handler();
Xvoid rcvr_SIGUSR1_handler();
Xvoid rcvr_SIGUSR2_handler();
Xvoid rcvr_SIGHUP_handler();
Xvoid xmtr_SIGINT_handler();
Xvoid xmtr_SIGHUP_handler();
Xvoid xmtr_SIGTERM_handler();
Xvoid xmtr_xenix_SIGCLD_handler();
X
X/*+-----------------------------------------------------------------------
X start_rcvr_process(notify_flag)
X------------------------------------------------------------------------*/
Xstart_rcvr_process(notify_flag)
Xint notify_flag;
X{
Xchar s40[40];
Xextern ulong current_colors;
Xulong colors_at_entry = current_colors;
X
X fflush(so);
X fflush(se);
X
X if(rcvr_pid > 0) /* if process already active,just ... */
X return(rcvr_pid); /* ... return the process id */
X
X rcvr_pid = smart_fork();
X if(rcvr_pid == 0) /* if we are the (spawned) rcvr process */
X {
X if(notify_flag)
X {
X setcolor(0x07000800L); /* gray */
X fputs("[interactive mode]",se);
X setcolor(colors_at_entry);
X fputs("\r\n",se);
X }
X
X rcvr(); /* run until killed */
X /*NOTREACHED*/
X }
X else if(rcvr_pid > 0) /* we are the father (xmtr) process */
X {
X#if defined(FORK_DEBUG)
X sprintf(s40,"DEBUG rcvr pid %d",rcvr_pid);
X ecu_log_event(s40); /* rcvr */
X#endif
X return(rcvr_pid);
X }
X else
X {
X rcvr_pid = -1; /* no receiver active */
X ff(se,"\r\n\ncould not fork for receive\r\n");
X hangup(HANGUP_NO_FORK_FOR_RCVR);
X /*NOTREACHED*/
X }
X} /* end of start_rcvr_process */
X
X/*+-----------------------------------------------------------------------
X kill_rcvr_process(sig) -- kill rcvr process with signal 'sig'
X------------------------------------------------------------------------*/
Xvoid
Xkill_rcvr_process(sig)
Xint sig;
X{
X
X if(rcvr_pid > 0) /* if we have forked a rcvr process */
X {
X kill(rcvr_pid,sig);
X if(sig != SIGUSR2) /* rcvr does not die on this signal */
X rcvr_pid = -1;
X }
X
X} /* end of kill_rcvr_process */
X
X/*+-----------------------------------------------------------------------
X hangup(sig) -- terminate program (with comm line cleanup)
X
X close comm line
X return any ungetty'd line
X return user's console to normal status
X unlink shm name
X terminate program
X see ecuhangup.h
X------------------------------------------------------------------------*/
Xvoid
Xhangup(sig)
Xint sig;
X{
Xint isig;
Xint save_errno = errno;
Xextern char initial_procedure[];
X
X if(xmtr_pid == getpid()) /* if we are xmtr */
X {
X for(isig = 1; isig < NSIG; isig++)
X signal(isig,SIG_IGN);
X kill_rcvr_process(SIGUSR1);
X if(Lmodem_off_hook)
X hayes_ATH();
X if(Liofd != -1)
X lclose(); /* close line */
X
X /* make SURE we release any line acquired from getty */
X ungetty_return_line();
X
X if(windows_active)
X windows_end_signal();
X ttymode(0); /* normal tty status */
X shm_done();
X if(sig > NSIG)
X {
X char s64[64];
X setcolor(0x04070400L); /* fgnd: red on blk, bgnd: red on wht */
X if(sig == HANGUP_INIT_PROC_ERROR)
X pprintf("initial procedure '%s' failed\n",initial_procedure);
X else if((sig > HANGUP_INIT_PROC_ERROR) &&
X (sig <= HANGUP_INIT_PROC_ERROR + 32))
X {
X pprintf("procedure command: exit %d\n",
X sig - HANGUP_INIT_PROC_ERROR);
X }
X else
X {
X sprintf(s64,"## XMTR process error %d, errno = %d",sig,
X save_errno);
X pputs(s64);
X pputs("\n");
X ecu_log_event(s64);
X errno = save_errno;
X if(errno)
X pperror("errno may not apply, but");
X }
X }
X setcolor(0x04070A00L); /* fgnd: lt_grn on blk, bgnd: red on wht */
X }
X else /* we are rcvr */
X {
X if(sig > NSIG)
X {
X char s64[64];
X sprintf(s64,"## RCVR process error %d, errno = %d",sig,save_errno);
X setcolor(0x04070400); /* fgnd: red on blk, bgnd: red on wht */
X pputs(s64);
X pputs("\n");
X ecu_log_event(s64);
X errno = save_errno;
X if(errno)
X pperror("errno may not apply, but");
X }
X setcolor(0x04070A00L); /* fgnd: lt_grn on blk, bgnd: red on wht */
X kill(xmtr_pid,SIGHUP);
X }
X exit(sig);
X /*NOTREACHED*/
X
X} /* end of hangup */
X
Xvoid
Xrcvr_common_signal_handler()
X{
Xextern int rcvr_log;
Xextern int rcvr_log_raw;
Xextern FILE *rcvr_log_fp;
X
X if(rcvr_log)
X {
X if(!rcvr_log_raw)
X fputs("\n",rcvr_log_fp);
X fclose(rcvr_log_fp);
X }
X
X exit(0);
X}
Xvoid
Xrcvr_SIGTERM_handler()
X{
X rcvr_common_signal_handler();
X}
Xvoid
Xrcvr_SIGINT_handler()
X{
X signal(SIGINT,rcvr_SIGINT_handler);
X}
Xvoid
Xrcvr_SIGUSR1_handler()
X{
X rcvr_common_signal_handler();
X}
Xvoid
Xrcvr_SIGUSR2_handler()
X{
X signal(SIGUSR2,rcvr_SIGUSR2_handler);
X shmr_process_rcvr_SIGUSR2();
X}
Xvoid
Xrcvr_SIGHUP_handler()
X{
X rcvr_common_signal_handler();
X}
X/*+-------------------------------------------------------------------------
X xmtr_SIGINT_handler()
X--------------------------------------------------------------------------*/
Xvoid
Xxmtr_SIGINT_handler()
X{
X signal(SIGINT,xmtr_SIGINT_handler);
X interrupt = 1;
X proc_interrupt = 1;
X} /* end of xmtr_SIGINT_handler */
X
Xvoid
Xxmtr_SIGHUP_handler(sig)
Xint sig;
X{
X hangup(sig);
X}
Xvoid
Xxmtr_SIGTERM_handler(sig)
Xint sig;
X{
X hangup(sig);
X}
X
Xvoid
Xxmtr_SIGUSR2_handler()
X{
X signal(SIGUSR2,xmtr_SIGUSR2_handler);
X shmx_process_xmtr_SIGUSR2();
X}
X
X/*+-------------------------------------------------------------------------
X xmtr_xenix_SIGCLD_handler()
X--------------------------------------------------------------------------*/
Xvoid
Xxmtr_xenix_SIGCLD_handler()
X{
Xchar s40[40];
X
XWAIT:
X errno = 0;
X if((last_child_wait_pid = wait(&last_child_wait_status)) < 0)
X {
X if(errno == EINTR)
X goto WAIT;
X }
X
X#if defined(FORK_DEBUG)
X sprintf(s40,"DEBUG fork SIGCLD pid %d term %x",
X last_child_wait_pid,last_child_wait_status);
X ecu_log_event(s40); /* xmtr_xenix_SIGCLD_handler() */
X#endif
X signal(SIGCLD,xmtr_xenix_SIGCLD_handler);
X
X} /* end of xmtr_xenix_SIGCLD_handler */
X
X/*+-------------------------------------------------------------------------
X child_signals() - signal() calls for children processes
X--------------------------------------------------------------------------*/
Xvoid
Xchild_signals()
X{
X signal(SIGHUP,SIG_DFL);
X signal(SIGINT,SIG_DFL);
X signal(SIGTERM,SIG_DFL);
X signal(SIGQUIT,SIG_DFL);
X signal(SIGUSR1,SIG_DFL);
X signal(SIGUSR2,SIG_DFL);
X signal(SIGCLD,SIG_DFL);
X} /* end of child_signals */
X
X/*+-------------------------------------------------------------------------
X xmtr_signals()
X--------------------------------------------------------------------------*/
Xvoid
Xxmtr_signals()
X{
X signal(SIGHUP,xmtr_SIGHUP_handler);
X signal(SIGQUIT,SIG_DFL);
X signal(SIGINT,xmtr_SIGINT_handler);
X signal(SIGTERM,xmtr_SIGTERM_handler);
X signal(SIGCLD,xmtr_xenix_SIGCLD_handler);
X signal(SIGUSR2,xmtr_SIGUSR2_handler);
X} /* end of xmtr_signals */
X
X/*+-------------------------------------------------------------------------
X rcvr_signals()
X--------------------------------------------------------------------------*/
Xvoid
Xrcvr_signals()
X{
X signal(SIGHUP,rcvr_SIGHUP_handler);
X signal(SIGQUIT,SIG_DFL);
X signal(SIGTERM,rcvr_SIGTERM_handler);
X signal(SIGINT,rcvr_SIGINT_handler);
X signal(SIGUSR1,rcvr_SIGUSR1_handler);
X signal(SIGUSR2,rcvr_SIGUSR2_handler);
X} /* end of rcvr_signals */
X
X/* vi: set tabstop=4 shiftwidth=4: */
SHAR_EOF
chmod 0644 ecusighdl.c || echo "restore of ecusighdl.c fails"
echo "x - extracting ecutcap.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ecutcap.c &&
X/* CHK=0x2720 */
X/*+-------------------------------------------------------------------------
X ecutcap.c -- termcap stuff
X Copyright 1986,1989 Warren H. Tucker, III. All Rights Reserved
X
X Defined functions:
X clear_screen()
X curbotleft()
X curmove(y,x)
X del_line()
X draw_box(y,x,height,width,title,title_x)
X draw_box_primitive(y,x,height,width)
X eeol()
X horiz_rule(count)
X ins_line()
X putc_stderr(character)
X read_termcap()
X stand_end()
X stand_out()
X tcap_clear_area_char(count,clrch)
X tcap_gets(buf,bufsize,delim,wait_for_key)
X vbell()
X vertical_rule(y,x,count)
X
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:07-03-1989-22:57-wht------------- ecu 2.00 ---------------- */
X/*:06-24-1989-16:53-wht-flush edits --- ecu 1.95 */
X
X#include "ecu.h"
X#include "ecukey.h"
X#include "pc_scr.h"
X
Xchar *tcap_eeol = "";
Xchar *tcap_standout = "";
Xchar *tcap_standend = "";
Xchar *tcap_vbell = "";
Xchar *tcap_move = "";
Xchar *tcap_clear = "";
Xchar *tcap_delline = "";
Xchar *tcap_insline = "";
Xchar *tcap_curleft = "";
Xchar tcap_strbuf[150];
Xint tcap_standout_width;
Xint tcap_LINES;
Xint tcap_COLS;
X
Xchar *tgetstr();
Xchar *tgoto();
Xchar *getenv();
X
Xvoid curmove();
Xvoid stand_out();
Xvoid stand_end();
X
X/*+-------------------------------------------------------------------------
X read_termcap() - get termcap variables
X--------------------------------------------------------------------------*/
Xvoid
Xread_termcap()
X{
Xchar termbuf[1024];
Xchar *strbuf = tcap_strbuf;
X
X if(tgetent(termbuf,getenv("TERM")) > 0)
X {
X tcap_standout = tgetstr("so",&strbuf);
X tcap_standend = tgetstr("se",&strbuf);
X tcap_vbell = tgetstr("vb",&strbuf);
X tcap_eeol = tgetstr("ce",&strbuf);
X tcap_move = tgetstr("cm",&strbuf);
X tcap_clear = tgetstr("cl",&strbuf);
X tcap_delline = tgetstr("dl",&strbuf);
X tcap_insline = tgetstr("al",&strbuf);
X tcap_curleft = tgetstr("kl",&strbuf);
X if((tcap_standout_width = tgetnum("sg")) < 0)
X tcap_standout_width = 0;
X tcap_LINES = tgetnum("li");
X tcap_COLS = tgetnum("co");
X }
X
X} /* end of read_termcap */
X
X/*+-------------------------------------------------------------------------
X horiz_rule(count) - horizontal rule starting at current position
X--------------------------------------------------------------------------*/
Xvoid
Xhoriz_rule(count)
Xregister count;
X{
X while(count--)
X fputc(sHR,se);
X} /* end of horiz_rule */
X
X/*+-------------------------------------------------------------------------
X vertical_rule(y,x,count) - vertical rule starting at y,x
X--------------------------------------------------------------------------*/
Xvoid
Xvertical_rule(y,x,count)
Xint y;
Xregister x;
Xregister count;
X{
X
X while(count--)
X {
X curmove(y++,x);
X fputc(sVR,se);
X }
X
X} /* end of vertical_rule */
X
X/*+-------------------------------------------------------------------------
X draw_box_primitive(y,x,height,width) - ruled box
X--------------------------------------------------------------------------*/
Xvoid
Xdraw_box_primitive(y,x,height,width)
Xregister y;
Xint x;
Xint height;
Xint width;
X{
Xregister i;
X
X curmove(y,x);
X fputc(sTL,se);
X if((i = width - 2) > 0)
X horiz_rule(i);
X fputc(sTR,se);
X if((i = height - 2) > 0)
X {
X vertical_rule(y + 1,x + width - 1,i);
X vertical_rule(y + 1,x,i);
X }
X curmove(y + height - 1,x);
X fputc(sBL,se);
X if((i = width - 2) > 0)
X horiz_rule(i);
X fputc(sBR,se);
X
X} /* end of draw_box_primitive */
X
X/*+-------------------------------------------------------------------------
X draw_box(y,x,height,width,title,title_x)
X--------------------------------------------------------------------------*/
Xvoid
Xdraw_box(y,x,height,width,title,title_x)
Xchar *title;
X{
Xregister stand = (title_x < 0);
X
X if(stand)
X title_x = -title_x;
X
X draw_box_primitive(y,x,height,width);
X curmove(y,x + title_x);
X fputc('[',se);
X if(stand)
X stand_out();
X fprintf(so," %s ",title);
X if(stand)
X stand_end();
X fputc(']',se);
X
X} /* end of draw_box */
X
X/*+-------------------------------------------------------------------------
X putc_stderr(character)
X--------------------------------------------------------------------------*/
Xvoid
Xputc_stderr(character)
Xint character;
X{
X fputc(character,se);
X} /* end of putc_stderr */
X
X/*+-------------------------------------------------------------------------
X curmove(y,x)
X--------------------------------------------------------------------------*/
Xvoid
Xcurmove(y,x)
Xuint y;
Xuint x;
X{
X if(y >= tcap_LINES)
X y = tcap_LINES - 1;
X if(x >= tcap_COLS)
X x = tcap_COLS - 1;
X tputs(tgoto(tcap_move,x,y),1,putc_stderr);
X} /* end of curmove */
X
X/*+-------------------------------------------------------------------------
X curbotleft()
X--------------------------------------------------------------------------*/
Xvoid
Xcurbotleft()
X{
X curmove(tcap_LINES - 1,0);
X} /* end of curbotleft */
X
X/*+-------------------------------------------------------------------------
X ins_line()
X--------------------------------------------------------------------------*/
Xvoid
Xins_line()
X{
X if(*tcap_insline)
X tputs(tcap_insline,1,putc_stderr);
X} /* end of ins_line */
X
X/*+-------------------------------------------------------------------------
X del_line()
X--------------------------------------------------------------------------*/
Xvoid
Xdel_line()
X{
X if(*tcap_delline)
X tputs(tcap_delline,1,putc_stderr);
X} /* end of del_line */
X
X/*+-------------------------------------------------------------------------
X vbell() - output visual bell
X--------------------------------------------------------------------------*/
Xvoid
Xvbell()
X{
X if(*tcap_vbell)
X tputs(tcap_vbell,1,putc_stderr);
X} /* end of vbell */
X
X/*+-------------------------------------------------------------------------
X clear_screen()
X--------------------------------------------------------------------------*/
Xvoid
Xclear_screen()
X{
X if(*tcap_clear)
X tputs(tcap_clear,1,putc_stderr);
X} /* end of clear_screen */
X
X/*+-------------------------------------------------------------------------
X eeol() - erase to end line
X--------------------------------------------------------------------------*/
Xvoid
Xeeol()
X{
X if(*tcap_eeol)
X tputs(tcap_eeol,1,putc_stderr);
X} /* end of eeol */
X
X/*+-------------------------------------------------------------------------
X stand_out()
X--------------------------------------------------------------------------*/
Xvoid
Xstand_out()
X{
X if(*tcap_standout) /* && (tcap_standout_width == 0)) */
X tputs(tcap_standout,1,putc_stderr);
X} /* end of stand_out */
X
X/*+-------------------------------------------------------------------------
X stand_end()
X--------------------------------------------------------------------------*/
Xvoid
Xstand_end()
X{
X if(*tcap_standend) /* && (tcap_standout_width == 0)) */
X tputs(tcap_standend,1,putc_stderr);
X} /* end of stand_end */
X
X/*+-------------------------------------------------------------------------
X tcap_clear_area_char(count,clrch)
X--------------------------------------------------------------------------*/
Xvoid
Xtcap_clear_area_char(count,clrch)
Xregister count;
Xregister clrch;
X{
Xregister itmp = count;
X while(itmp--)
X fputc(clrch,se);
X itmp = count;
X while(itmp--)
X fputs(tcap_curleft,se);
X
X} /* end of tcap_clear_area_char */
X
X/*+-------------------------------------------------------------------------
X numchars = tcap_gets(buf,bufsize,&delim,wait_for_key)
X
XThis procedure reads a string and returns the number
Xof characters read. -1 is returned if an abort is signaled by the
Xkeyboard user.
X--------------------------------------------------------------------------*/
Xint
Xtcap_gets(buf,bufsize,delim,wait_for_key)
Xchar *buf;
Xregister bufsize; /* includes room for null..field is 1 less */
Xregister uchar *delim;
Xint wait_for_key;
X{
Xregister count;
Xregister itmp;
Xregister char *cptr = buf;
X
X if(!wait_for_key)
X tcap_clear_area_char(bufsize-1,'_');
X
X count = 0; /* no characters in string */
X *cptr = 0; /* start with null string */
X
X while(1)
X {
X *delim = ttygetc(1);
X if((*delim < 0x20) || (*delim >= 0x7F))
X {
X switch(*delim)
X {
X case CR:
X *delim = NL;
X case NL:
X return(count);
X
X case BS:
X if(count)
X {
X count--;
X *--cptr = 0;
X fputc(0x08,se);
X fputc('_',se);
X fputs(tcap_curleft,se);
X }
X continue;
X
X case ESC:
X case CTL_U:
X itmp = count;
X while(itmp--)
X {
X *--cptr = 0;
X fputc(0x08,se);
X }
X itmp = count;
X while(itmp--)
X fputc('_',se);
X itmp = count;
X while(itmp--)
X fputs(tcap_curleft,se);
X cptr = buf;
X count = 0;
X if(*delim == ESC)
X return(-1);
X continue;
X
X default:
X return(-1);
X } /* end of switch(*delim) */
X /*NOTREACHED*/
X } /* end of if read delimiter */
X
X if(count == bufsize-1)
X continue;
X if(wait_for_key)
X {
X tcap_clear_area_char(bufsize-1,'_');
X wait_for_key = 0;
X }
X fputc(*delim,se);
X *cptr++ = *delim;
X *cptr = 0;
X count++;
X } /* end of while can get character */
X
X} /* end of tcap_gets */
X
X
X/* end of ecutcap.c */
X/* vi: set tabstop=4 shiftwidth=4: */
SHAR_EOF
chmod 0644 ecutcap.c || echo "restore of ecutcap.c fails"
echo "x - extracting ecutime.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ecutime.c &&
X/* CHK=0xA2BB */
X/*+-------------------------------------------------------------------------
X ecutime.c -- ecu time-related functions
X Copyright 1986,1989 Warren H. Tucker, III. All Rights Reserved
X
X Defined functions:
X epoch_secs_to_str(epoch_secs,type,buf)
X get_elapsed_time(elapsed_seconds)
X get_tod(type,buf)
X
X--------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:07-03-1989-22:57-wht------------- ecu 2.00 ---------------- */
X/*:06-24-1989-16:53-wht-flush edits --- ecu 1.95 */
X
X#include <sys/types.h>
X#include <time.h>
X#include <sys/timeb.h>
X
X/*+-------------------------------------------------------------------------
X get_month() - month 1-12
X--------------------------------------------------------------------------*/
Xint
Xget_month()
X{
Xlong time();
Xlong epoch_secs = time((long *)0);
Xstruct tm *lt = localtime(&epoch_secs);
X return(lt->tm_mon + 1);
X} /* end of get_month */
X
X/*+-------------------------------------------------------------------------
X get_day() - day 0-6
X--------------------------------------------------------------------------*/
Xint
Xget_day()
X{
Xlong time();
Xlong epoch_secs = time((long *)0);
Xstruct tm *lt = localtime(&epoch_secs);
X return(lt->tm_wday);
X} /* end of get_day */
X
X/*+-----------------------------------------------------------------------
X char *epoch_secs_to_str(epoch_secs,type,buf)
X
X time of day types:
X 0 hh:mm
X 1 hh:mm:ss
X 2 mm-dd-yyyy hh:mm
X 3 mm-dd-yyyy hh:mm:ss
X 4 mm-dd-yyyy hh:mm:ss (UTC hh:mm)
X 5 mm-dd-yyyy
X
X returns 'buf' address
X
X------------------------------------------------------------------------*/
Xchar *
Xepoch_secs_to_str(epoch_secs,type,buf)
Xlong epoch_secs;
Xint type;
Xchar *buf;
X{
Xstruct tm *lt; /* local time */
Xstruct tm *gmtime();
Xstruct tm *localtime();
X
X lt = localtime(&epoch_secs);
X switch(type)
X {
X default:
X case 0:
X sprintf(buf,"%02d:%02d",lt->tm_hour,lt->tm_min);
X break;
X
X case 1:
X sprintf(buf,"%02d:%02d:%02d",lt->tm_hour,lt->tm_min,lt->tm_sec);
X break;
X
X case 2:
X sprintf(buf,"%02d-%02d-%04d %02d:%02d",
X lt->tm_mon + 1,lt->tm_mday,lt->tm_year + 1900,
X lt->tm_hour,lt->tm_min);
X break;
X
X case 3:
X sprintf(buf,"%02d-%02d-%04d %02d:%02d:%02d",
X lt->tm_mon + 1,lt->tm_mday,lt->tm_year + 1900,
X lt->tm_hour,lt->tm_min,lt->tm_sec);
X break;
X
X case 4:
X sprintf(buf,"%02d-%02d-%04d %02d:%02d:%02d",
X lt->tm_mon + 1,lt->tm_mday,lt->tm_year + 1900,
X lt->tm_hour,lt->tm_min,lt->tm_sec);
X lt = gmtime(&epoch_secs);
X sprintf(&buf[strlen(buf) ]," (UTC %02d:%02d)",
X lt->tm_hour,lt->tm_min);
X break;
X
X case 5:
X sprintf(buf,"%02d-%02d-%04d",
X lt->tm_mon + 1,lt->tm_mday,lt->tm_year + 1900);
X break;
X
X }
X
X return(buf);
X} /* end of epoch_secs_to_str */
X
X/*+-----------------------------------------------------------------------
X char *get_tod(type,buf)
Xreturns 'buf' address
X------------------------------------------------------------------------*/
Xchar *
Xget_tod(type,buf)
Xint type;
Xchar *buf;
X{
Xlong time();
X return(epoch_secs_to_str(time((long *)0),type,buf));
X} /* end of get_tod */
X
X/*+-----------------------------------------------------------------------
X char *get_elapsed_time(elapsed_seconds)
X "hh:mm:ss" returned
X static string address is returned
X------------------------------------------------------------------------*/
Xchar *
Xget_elapsed_time(elapsed_seconds)
Xlong elapsed_seconds;
X{
Xstatic char elapsed_time_str[40];
Xlong hh,mm,ss;
X
X hh = elapsed_seconds / 3600;
X elapsed_seconds -= hh * 3600;
X mm = elapsed_seconds / 60L;
X elapsed_seconds -= mm * 60L;
X ss = elapsed_seconds;
X
X sprintf(elapsed_time_str,"%02ld:%02ld:%02ld",hh,mm,ss);
X return(elapsed_time_str);
X} /* end of get_elapsed_time */
X
X/* end of ecutime.c */
X/* vi: set tabstop=4 shiftwidth=4: */
SHAR_EOF
chmod 0644 ecutime.c || echo "restore of ecutime.c fails"
echo "x - extracting ecutty.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > ecutty.c &&
X/* CHK=0x6EC3 */
X/*+-------------------------------------------------------------------------
X ecutty.c
X Copyright 1986,1989 Warren H. Tucker, III. All Rights Reserved
X
SHAR_EOF
echo "End of part 9"
echo "File ecutty.c is continued in part 10"
echo "10" > s2_seq_.tmp
exit 0
--
-------------------------------------------------------------------
Warren Tucker, Tridom Corporation ...!gatech!emory!tridom!wht
Ker-au'-lo-phon. An 8-foot partial flue-stop, having metal pipes
surmounted by adjustable rings, and with a hole bored near the top
of each pipe, producing a soft and "reedy" tone.
More information about the Alt.sources
mailing list