ecu - SCO XENIX V/{2,3}86 Extended CU part 28/47
Warren Tucker
wht at tridom.uucp
Wed Oct 11 05:40:50 AEST 1989
---- Cut Here and unpack ----
#!/bin/sh
# this is part 28 of a multipart archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file z/zmodem.c continued
#
CurArch=28
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 z/zmodem.c"
sed 's/^X//' << 'SHAR_EOF' >> z/zmodem.c
X xsendline(ZDLE);
X c ^= 0100;
Xsendit:
X xsendline(lastsent = c);
X break;
X default:
X if(Zctlesc && ! (c & 0140))
X {
X xsendline(ZDLE);
X c ^= 0100;
X }
X xsendline(lastsent = c);
X }
X }
X}
X
X/* Decode two lower case hex digits into an 8 bit byte value */
Xzgethex()
X{
X register int c;
X
X c = zgeth1();
X return(c);
X}
Xzgeth1()
X{
X register int c,n;
X
X if((c = noxrd7()) < 0)
X return(c);
X n = c - '0';
X if(n > 9)
X n -= ('a' - ':');
X if(n & ~0xF)
X return(ERROR);
X if((c = noxrd7()) < 0)
X return(c);
X c -= '0';
X if(c > 9)
X c -= ('a' - ':');
X if(c & ~0xF)
X return(ERROR);
X c += (n<<4);
X return(c);
X}
X
X/*
X * Read a byte,checking for ZMODEM escape encoding
X * including CAN*5 which represents a quick abort
X */
Xzdlread()
X{
X register int c;
X
Xagain:
X /* Quick check for non control characters */
X if((c = readline(Rxtimeout)) & 0140)
X return(c);
X switch(c)
X {
X case ZDLE:
X break;
X case 023:
X case 0223:
X case 021:
X case 0221:
X goto again;
X default:
X if(Zctlesc && !(c & 0140))
X {
X goto again;
X }
X return(c);
X }
Xagain2:
X if((c = readline(Rxtimeout)) < 0)
X return(c);
X if(c == CAN && (c = readline(Rxtimeout)) < 0)
X return(c);
X if(c == CAN && (c = readline(Rxtimeout)) < 0)
X return(c);
X if(c == CAN && (c = readline(Rxtimeout)) < 0)
X return(c);
X switch(c)
X {
X case CAN:
X return(GOTCAN);
X case ZCRCE:
X case ZCRCG:
X case ZCRCQ:
X case ZCRCW:
X return(c | GOTOR);
X case ZRUB0:
X return(0177);
X case ZRUB1:
X return(0377);
X case 023:
X case 0223:
X case 021:
X case 0221:
X goto again2;
X default:
X if(Zctlesc && ! (c & 0140))
X {
X goto again2;
X }
X if((c & 0140) == 0100)
X return(c ^ 0100);
X break;
X }
X sprintf(s128,"Bad escape sequence %x",c);
X report_str(s128,1);
X return(ERROR);
X}
X
X/*
X * Read a character from the modem line with timeout.
X * Eat parity,XON and XOFF characters.
X */
Xnoxrd7()
X{
X register int c;
X
X for(;;)
X {
X if((c = readline(Rxtimeout)) < 0)
X return(c);
X switch(c &= 0177)
X {
X case XON:
X case XOFF:
X continue;
X default:
X if(Zctlesc && !(c & 0140))
X continue;
X case '\r':
X case '\n':
X case ZDLE:
X return(c);
X }
X }
X}
X
X/* Store long integer pos in Txhdr */
Xstohdr(pos)
Xlong pos;
X{
X Txhdr[ZP0] = pos;
X Txhdr[ZP1] = pos>>8;
X Txhdr[ZP2] = pos>>16;
X Txhdr[ZP3] = pos>>24;
X}
X
X/* Recover a long integer from a header */
Xlong
Xrclhdr(hdr)
Xregister char *hdr;
X{
X register long l;
X
X l = (hdr[ZP3] & 0377);
X l = (l << 8) | (hdr[ZP2] & 0377);
X l = (l << 8) | (hdr[ZP1] & 0377);
X l = (l << 8) | (hdr[ZP0] & 0377);
X return(l);
X}
X
X/* end of zmodem.c */
X/* vi: set tabstop=4 shiftwidth=4: */
SHAR_EOF
echo "File z/zmodem.c is complete"
chmod 0644 z/zmodem.c || echo "restore of z/zmodem.c fails"
echo "x - extracting z/zcurses.c (Text)"
sed 's/^X//' << 'SHAR_EOF' > z/zcurses.c &&
X/* CHK=0xCE76 */
X/*+-------------------------------------------------------------------------
X zcurses.c -- ecu file transfer program curses interface
X
X 000000000011111111112222222222333333333344444444445555555550
X 012345678901234567890123456789012345678901234567890123456789
X00.-[ prog+rev ]-- <dir> ------------------------------------.
X01| ZMODEM_6____ _40_____________________________________ |
X02| File ### of ###: _38__________________________________ |
X03| File position: _8______ length: _8______ -rwxrwxrwx |
X04| _55____________________________________________________ | transaction
X05| _55____________________________________________________ | last rx/tx hdr
X06| Comm I/O: rx _8______ tx _8______ bytes |
X07| Baud rate: _5___ BINARY blklen: _____ comm mode: CBREAK |
X08| Time started: session: HH:MM:SS this file: HH:MM:SS |
X09| elpased: HH:MM:SS time: HH:MM:SS |
X10| Error counts: this file: _4__ total: _6____ |
X11| _55____________________________________________________ | err str
X12| _55____________________________________________________ | comment str
X13| _55____________________________________________________ | remote info
X14`----------------------------------------------------------'
X
X Defined functions:
X clear_area(win,row,col,len)
X clear_area_char(win,row,col,len,fillchar)
X get_elapsed_time(elapsed_seconds)
X get_tod(type,tod)
X mode_map(mode,mode_str)
X report_comm_baud_rate(baud_rate)
X report_error_count()
X report_file_byte_io(count)
X report_file_close()
X report_file_open_length(length)
X report_file_open_mode(file_mode)
X report_file_open_tod()
X report_file_rcv_started(filename,length,last_mod_time,file_mode)
X report_file_send_open(filename,filestat)
X report_init(title)
X report_last_rxhdr(rptstr,error_flag)
X report_last_txhdr(rptstr,error_flag)
X report_mode(mode)
X report_protocol_crc_type(str)
X report_protocol_type(str)
X report_rx_ind(status)
X report_rx_tx_count()
X report_rxblklen(blklen)
X report_rxpos(rxpos)
X report_str(rptstr,error_flag)
X report_top_line(topstr)
X report_transaction(str)
X report_tx_ind(status)
X report_txblklen(blklen)
X report_txpos(txpos)
X report_uninit(sig)
X report_xfer_mode(str)
X
X------------------------------------------------------------------------*/
X/*+:EDITS:*/
X/*:07-03-1989-22:58-wht------------- ecu 2.00 ---------------- */
X/*:06-24-1989-16:51-wht-flush edits --- ecu 1.95 */
X
X#include <curses.h>
X#include <sys/types.h>
X#include <sys/stat.h>
X#include <ctype.h>
X#include <signal.h>
X#include <time.h>
X#include <sys/timeb.h>
X
X#include "../pc_scr.h"
X#include "zlint.h"
X
Xlong time();
Xextern char *tzname[];
Xstruct tm *localtime();
X
X
X#define WIN_LINES 15
X#define WIN_COLS 60
X#define WIN_TOPY 2
X#define WIN_LEFTX 8
X
Xextern char curr_dir[];
Xextern char s128[];
Xextern char *bottom_label;
Xextern int Filcnt;
Xextern int ecusz_flag; /* ecusz == 1, ecurz == 0 */
Xextern int npats;
Xextern long rxpos;
Xextern int log_packets;
X
XWINDOW *win;
Xint (*original_sigint_handler)();
Xint (*original_sigquit_handler)();
Xint (*original_sigterm_handler)();
Xint curses_installed = 0; /* curses not yet active */
Xint this_file_errors;
Xint total_errors;
Xlong current_seconds;
Xlong start_seconds;
Xlong elapsed_seconds;
Xunsigned long total_data_chars_xfered = 0L;
Xchar s256[256];
X
Xchar *win_template[] =
X{
X/*00000000001111111111222222222233333333334444444444555555555 */
X/*01234567890123456789012345678901234567890123456789012345678 */
X/*.----------------------------------------------------------. */
X " ", /* 1 */
X " File ### of ###: _____________________________________ ", /* 2 */
X " File position: ________ length: ________ ", /* 3 */
X " ", /* 4 */
X " tx: ______________________ rx: ______________________ ", /* 5 */
X " Comm I/O: rx ________ tx ________ bytes ", /* 6 */
X " Baud rate: _____ ______ blklen: _____ comm mode: ______ ", /* 7 */
X " Time started: session: --:--:-- this file: --:--:-- ", /* 8 */
X " elapsed: --:--:-- current: --:--:-- ", /* 9 */
X " Error counts: this file: ____ total: ______ ", /* 10 */
X " ", /* 11 */
X " ", /* 12 */
X " ", /* 13 */
X/*`----------------------------------------------------------' */
X(char *)0
X};
X
X/*+-----------------------------------------------------------------------
X char *get_elapsed_time(elapsed_seconds)
X hh:mm:ss returned
X static string address is returned
X------------------------------------------------------------------------*/
Xchar *get_elapsed_time(elapsed_seconds)
Xlong elapsed_seconds;
X{
X static char elapsed_time_str[10];
X long 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/*+-----------------------------------------------------------------------
X char *get_tod(type,tod)
X
X time of day types:
X 0 hh:mm
X 1 hh:mm:ss
X 2 mm-dd-yyyy hh:mm
X
X static string address is returned
X if tod != (char *)0, time is returned there too
X------------------------------------------------------------------------*/
Xchar *
Xget_tod(type,tod)
Xint type;
Xchar *tod;
X{
X long cur_time = 0;
X struct tm *lt; /* local time */
X static char tod_str[32];
X#if defined(M_XENIX)
X struct timeb tp;
X#endif
X
X cur_time = time((long *)0);
X lt = localtime(&cur_time);
X#if XENIX && MESSED_UP_DST
X ftime(&tp); /* localtime() does not know about DST */
X if(tp.dstflag) /* so we adjust with ftime, which does know */
X {
X cur_time += 3600L; /* problem in BSD too, but no ftime there */
X lt = localtime(&cur_time);
X cur_time -= 3600L;
X }
X#endif
X
X switch(type)
X {
X case 0:
X sprintf(tod_str,"%02d:%02d",lt->tm_hour,lt->tm_min);
X break;
X
X default:
X case 1:
X sprintf(tod_str,"%02d:%02d:%02d",lt->tm_hour,lt->tm_min,lt->tm_sec);
X break;
X
X case 2:
X sprintf(tod_str,"%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
X if(tod != (char *)0)
X strcpy(tod,tod_str);
X
X return(tod_str);
X} /* end of get_tod */
X
X/*+-----------------------------------------------------------------------
X mode_map(mode,mode_str) build drwxrwxrwx string
X------------------------------------------------------------------------*/
Xchar *
Xmode_map(mode,mode_str)
Xunsigned short mode;
Xchar *mode_str;
X{
Xregister unsigned ftype = mode & S_IFMT;
Xregister char *rtn;
Xstatic char result[12];
X
X rtn = (mode_str == (char *)0) ? result : mode_str;
X
X /* drwxrwxrwx */
X /* 0123456789 */
X strcpy(rtn,"----------",mode);
X
X switch(ftype)
X {
X case S_IFIFO: *rtn = 'p'; break; /* FIFO (named pipe) */
X case S_IFDIR: *rtn = 'd'; break; /* directory */
X case S_IFCHR: *rtn = 'c'; break; /* character special */
X case S_IFBLK: *rtn = 'b'; break; /* block special */
X case S_IFREG: *rtn = '-'; break; /* regular */
X
X#if defined(pyr) | defined(BSD4)
X case S_IFLNK: *rtn = 'l'; break; /* symbolic link */
X case S_IFSOCK: *rtn = 's'; break; /* socket */
X#endif
X
X#if defined (M_XENIX) | defined(SYS5)
X case S_IFNAM: /* name space entry */
X if(mode & S_INSEM) /* semaphore */
X {
X *rtn = 's';
X break;
X }
X if(mode & S_INSHD) /* shared memory */
X {
X *rtn = 'm';
X break;
X }
X#endif
X
X default: *rtn = '?'; break; /* ??? */
X }
X
X if(mode & 000400) *(rtn + 1) = 'r';
X if(mode & 000200) *(rtn + 2) = 'w';
X if(mode & 000100) *(rtn + 3) = 'x';
X if(mode & 004000) *(rtn + 3) = 's';
X if(mode & 000040) *(rtn + 4) = 'r';
X if(mode & 000020) *(rtn + 5) = 'w';
X if(mode & 000010) *(rtn + 6) = 'x';
X if(mode & 002000) *(rtn + 6) = 's';
X if(mode & 000004) *(rtn + 7) = 'r';
X if(mode & 000002) *(rtn + 8) = 'w';
X if(mode & 000001) *(rtn + 9) = 'x';
X if(mode & 001000) *(rtn + 9) = 't';
X
X return(rtn);
X
X} /* end of mode_map */
X
X/*+-------------------------------------------------------------------------
X clear_area(win,row,col,len)
X--------------------------------------------------------------------------*/
Xclear_area(win,row,col,len)
XWINDOW *win;
Xint row;
Xint col;
Xint len;
X{
X wmove(win,row,col);
X while(len-- > 0)
X waddch(win,' ');
X wmove(win,row,col);
X
X} /* end of clear_area */
X
X/*+-------------------------------------------------------------------------
X clear_area_char(win,row,col,len,fillchar)
X--------------------------------------------------------------------------*/
Xclear_area_char(win,row,col,len,fillchar)
XWINDOW *win;
Xint row;
Xint col;
Xint len;
Xchar fillchar;
X{
X wmove(win,row,col);
X while(len-- > 0)
X waddch(win,fillchar);
X wmove(win,row,col);
X
X} /* end of clear_area_char */
X
X/*+-------------------------------------------------------------------------
X report_top_line(topstr)
X top line: row 1 col 17 length 40
X--------------------------------------------------------------------------*/
Xvoid
Xreport_top_line(topstr)
Xchar *topstr;
X{
Xchar s42[42];
X clear_area(win,1,17,42);
X if(strlen(topstr) < 40)
X waddstr(win,topstr);
X else
X {
X strncpy(s42,topstr,40);
X s42[40] = 0;
X waddstr(win,s42);
X }
X} /* end of report_top_line */
X
X/*+-------------------------------------------------------------------------
X report_xfer_mode(modestr) BINARY/ASCII
X protocol xfer type: row 7 col 20 length 6
X--------------------------------------------------------------------------*/
Xreport_xfer_mode(str)
Xchar *str;
X{
Xchar s10[10];
X
X if(strlen(str) > 6)
X {
X strncpy(s10,str,6);
X s10[7] = 0;
X str = s10;
X }
X clear_area(win,7,20,6);
X waddstr(win,str);
X wrefresh(win);
X
X} /* end of report_xfer_mode */
X
X/*+-------------------------------------------------------------------------
X report_protocol_type(str)
X
X protocol type: row 1 col 3 length 6 string
X--------------------------------------------------------------------------*/
Xreport_protocol_type(str)
Xregister char *str;
X{
Xchar s10[10];
X
X if(strlen(str) > 6)
X {
X strncpy(s10,str,6);
X s10[7] = 0;
X str = s10;
X }
X clear_area(win,1,3,6);
X waddstr(win,str);
X wrefresh(win);
X
X} /* end of report_protocol_type */
X
X/*+-------------------------------------------------------------------------
X report_protocol_crc_type(str)
X
X protocol crc type: row 1 col 9 length 6
X--------------------------------------------------------------------------*/
Xreport_protocol_crc_type(str)
Xregister char *str;
X{
Xchar s8[8];
X
X if(strlen(str) > 6)
X {
X strncpy(s8,str,6);
X s8[7] = 0;
X str = s8;
X }
X clear_area(win,1,9,6);
X waddstr(win,str);
X wrefresh(win);
X
X} /* end of report_protocol_crc_type */
X
X/*+-------------------------------------------------------------------------
X report_uninit(sig)
X--------------------------------------------------------------------------*/
Xvoid
Xreport_uninit(sig)
Xint sig; /* if -1, called by normal code, else kill() value */
X{
X float total = (float)total_data_chars_xfered;
X
X if(curses_installed)
X {
X if((total_data_chars_xfered != 0L) && (elapsed_seconds != 0L))
X {
X sprintf(s128,"Data xfer rate ~= %6.0f chars/sec",
X total / (float)elapsed_seconds);
X if(log_packets)
X {
X write(log_packets,"info: ",6);
X write(log_packets,s128,strlen(s128));
X write(log_packets,"\n",1);
X }
X report_top_line(s128);
X }
X report_file_byte_io(0L);
X report_rx_tx_count();
X wmove(win,WIN_LINES - 1,WIN_COLS - 1);
X wrefresh(win);
X endwin();
X fprintf(stderr,"\r\n\r\n\r\n");
X fflush(stderr);
X curses_installed = 0;
X }
X
X} /* end of report_uninit */
X
X/*+-------------------------------------------------------------------------
X report_init(title)
X--------------------------------------------------------------------------*/
Xvoid
Xreport_init(title)
Xchar *title;
X{
X register int itmp;
X register char *cptr;
X char buf[80];
X
X if(curses_installed)
X return;
X
X initscr();
X crmode();
X noecho();
X nonl();
X clear();
X curses_installed = 1;
X win = newwin(WIN_LINES,WIN_COLS,WIN_TOPY,WIN_LEFTX);
X box(win,sVR,sHR);
X wmove(win,0,0); waddch(win,sTL);
X wmove(win,win->_maxy - 1,0); waddch(win,sBL);
X wmove(win,win->_maxy - 1,win->_maxx - 1); waddch(win,sBR);
X wmove(win,0,win->_maxx - 1); waddch(win,sTR);
X wmove(win,0,2);
X waddch(win,'[');
X waddch(win,' ');
X waddstr(win,title);
X waddch(win,' ');
X waddch(win,']');
X waddch(win,sHR);
X waddch(win,sHR);
X waddch(win,' ');
X itmp = WIN_COLS - 2 - 7 - strlen(title);
X curr_dir[itmp] = 0;
X waddstr(win,curr_dir);
X waddch(win,' ');
X if(bottom_label)
X {
X strncpy(buf,bottom_label,WIN_COLS - 6);
X buf[WIN_COLS - 6] = 0;
X wmove(win,WIN_LINES - 1,2);
X waddch(win,' ');
X waddstr(win,buf);
X waddch(win,' ');
X }
X
X itmp = 0;
X while(1)
X {
X if(win_template[itmp] == (char *)0)
X break;
X wmove(win,itmp + 1,1);
X waddstr(win,win_template[itmp++]);
X }
X if(ecusz_flag)
X {
X clear_area(win,2,15,3);
X sprintf(s128,"%3d",npats);
X waddstr(win,s128);
X#if defined(FORK_DEBUG)
X sprintf(s128,"DEBUG ecusz pid %d",getpid());
X#endif
X }
X else /* ecurz */
X {
X clear_area(win,2,11,8); /* clear "of ###" */
X waddstr(win,":");
X#if defined(FORK_DEBUG)
X sprintf(s128,"DEBUG ecurz pid %d",getpid());
X#endif
X }
X
X#if defined(FORK_DEBUG)
X ecu_log_event(s128);
X#endif
X
X clear_area(win,1,11,47);
X report_error_count();
X clear_area(win,8,26,8); /* starting time */
X waddstr(win,get_tod(1,(char *)0));
X start_seconds = time((long *)0);
X current_seconds = start_seconds;
X
X wrefresh(win);
X
X} /* end of report_init */
X
X/*+-------------------------------------------------------------------------
X report_rx_ind(status)
X--------------------------------------------------------------------------*/
Xvoid
Xreport_rx_ind(status)
Xint status;
X{
X#if defined(M_XENIX)
X wmove(win,1,54);
X waddch(win,(status) ? 'R' : ' ');
X wmove(win,1,54);
X wrefresh(win);
X#endif
X} /* end of report_rx_ind */
X
X/*+-------------------------------------------------------------------------
X report_tx_ind(status)
X--------------------------------------------------------------------------*/
Xvoid
Xreport_tx_ind(status)
Xint status;
X{
X#if defined(M_XENIX)
X wmove(win,1,56);
X waddch(win,(status) ? 'T' : ' ');
X wmove(win,1,56);
X wrefresh(win);
X#endif
X} /* end of report_tx_ind */
X
X/*+-------------------------------------------------------------------------
X report_rx_tx_count()
X
X rx char count: row 6 col 16 length 8 unsigned long
X tx char count: row 6 col 29 length 8 unsigned long
X now time of day: row 1 col 50 length 8 hh:mm:ss
X This procedure may be counted upon to perform wrefresh(win)
X
Xelapsed time row 9 col 26 length 8
Xcurrent tod row 9 col 47 length 8
X--------------------------------------------------------------------------*/
Xreport_rx_tx_count()
X{
X extern unsigned long rx_char_count;
X extern unsigned long tx_char_count;
X
X register char *cptr;
X
X sprintf(s128,"%8ld",rx_char_count);
X wmove(win,6,16);
X waddstr(win,s128);
X sprintf(s128,"%8ld",tx_char_count);
X wmove(win,6,29);
X waddstr(win,s128);
X
X /* now time of day */
X clear_area(win,9,47,8);
X cptr = get_tod(1,(char *)0);
X waddstr(win,cptr);
X current_seconds = time((long *)0);
X elapsed_seconds = current_seconds - start_seconds;
X cptr = get_elapsed_time(elapsed_seconds);
X clear_area(win,9,26,8);
X waddstr(win,cptr);
X wrefresh(win); /* calling procs expect this to occur always */
X
X} /* end of report_rx_tx_count */
X
X/*+-------------------------------------------------------------------------
X report_mode(mode)
X
X comm mode row 7 col 52 length 6
X 3: save old tty stat, set raw mode with flow control
X 2: set XON/XOFF for sb/sz with ZMODEM or YMODEM-g
X 1: save old tty stat, set raw mode
X 0: restore original tty mode
X--------------------------------------------------------------------------*/
Xvoid
Xreport_mode(mode)
Xint mode;
X{
Xchar *cptr;
Xchar tmp[8];
X
X clear_area(win,7,52,6);
X switch(mode)
X {
X case 0:
X cptr = "NORMAL";
X break;
X case 1:
X cptr = "RAW";
X break;
X case 2:
X cptr = "RAW-g";
X break;
X case 3:
X cptr = "RAW-f";
X break;
X default:
X sprintf(tmp,"%5u",mode);
X cptr = tmp;
X }
X waddstr(win,cptr);
X wrefresh(win);
X if(log_packets)
X {
X write(log_packets,"mode: ",6);
X write(log_packets,cptr,strlen(cptr));
X write(log_packets,"\n",1);
X }
X
X} /* end of report_mode */
X
X/*+-------------------------------------------------------------------------
X report_rxblklen(blklen)
Xrow 7 col 35 5 chars
X--------------------------------------------------------------------------*/
Xvoid
Xreport_rxblklen(blklen)
Xint blklen;
X{
X char tmp[10];
X
X sprintf(tmp,"%5u",blklen);
X clear_area(win,7,35,5);
X waddstr(win,tmp);
X wrefresh(win);
X} /* end of report_rxblklen */
X
X/*+-------------------------------------------------------------------------
X report_txblklen(blklen)
Xrow 7 col 35 5 chars
X--------------------------------------------------------------------------*/
Xvoid
Xreport_txblklen(blklen)
Xint blklen;
X{
X report_rxblklen(blklen);
X} /* end of report_txblklen */
X
X/*+-------------------------------------------------------------------------
X report_rxpos(rxpos) row 3 col 19 len 8
X--------------------------------------------------------------------------*/
Xvoid
Xreport_rxpos(rxpos)
Xlong rxpos;
X{
Xchar tmp[16];
X#if defined(M_XENIX)
Xchar refr;
X if(rdchk(0))
X {
X read(0,&refr,1);
X if(refr == 0x0C || refr == 0x012) /* ^L or ^R */
X {
X write(2,"\033[2J",4);
X nap((long)60);
X touchwin(stdscr);
X wrefresh(stdscr);
X touchwin(win);
X wrefresh(win);
X }
X }
X#endif
X
X if((rxpos > 99999999L) || (rxpos < 0L))
X return;
X
X sprintf(tmp,"%8lu",rxpos);
X wmove(win,3,19);
X waddstr(win,tmp);
X wrefresh(win);
X report_rx_tx_count(); /* which will do a refresh */
X} /* end of report_rxpos */
X
X/*+-------------------------------------------------------------------------
X report_txpos(txpos)
X--------------------------------------------------------------------------*/
Xvoid
Xreport_txpos(txpos)
Xlong txpos;
X{
X report_rxpos(txpos);
X} /* end of report_txpos */
X
X/*+-------------------------------------------------------------------------
X report_error_count()
X DOES NOT PERFORM A REFRESH CYCLE
X
X this file: row 10 col 30 len 4
X total: row 10 col 43 len 6
X--------------------------------------------------------------------------*/
Xreport_error_count()
X{
X char tmp[16];
X
X clear_area(win,10,30,4);
X sprintf(tmp,"%4d",this_file_errors);
X waddstr(win,tmp);
X
X clear_area(win,10,43,6);
X sprintf(tmp,"%6d",total_errors);
X waddstr(win,tmp);
X wrefresh(win);
X
X} /* end of report_error_count */
X
X/*+-------------------------------------------------------------------------
X report_last_txhdr(rptstr,error_flag)
X 5,7,22
X--------------------------------------------------------------------------*/
Xvoid
Xreport_last_txhdr(rptstr,error_flag)
Xregister char *rptstr;
Xint error_flag;
X{
Xchar s24[24];
X
X if(log_packets)
X {
X write(log_packets,"tx: ",6);
X write(log_packets,rptstr,strlen(rptstr));
X write(log_packets,"\n",1);
X }
X
X if(strlen(rptstr) > 22)
X {
X strncpy(s24,rptstr,22);
X s24[23] = 0;
X rptstr = s24;
X }
X clear_area(win,5,7,22);
X waddstr(win,rptstr);
X
X if(error_flag)
X {
X ++this_file_errors;
X ++total_errors;
X report_error_count();
X }
X
X} /* end of report_last_txhdr */
X
X/*+-------------------------------------------------------------------------
X report_last_rxhdr(rptstr,error_flag)
X 5,35,22
X--------------------------------------------------------------------------*/
Xvoid
Xreport_last_rxhdr(rptstr,error_flag)
Xregister char *rptstr;
Xint error_flag;
X{
Xchar s24[24];
Xextern int log_packets;
X
X if(log_packets)
X {
X write(log_packets,"rx: ",6);
X write(log_packets,rptstr,strlen(rptstr));
X write(log_packets,"\n",1);
X }
X
X if(strlen(rptstr) > 22)
X {
X strncpy(s24,rptstr,22);
X s24[23] = 0;
X rptstr = s24;
X }
X clear_area(win,5,35,22);
X waddstr(win,rptstr);
X
X if(error_flag)
X {
X ++this_file_errors;
X ++total_errors;
X report_error_count();
X }
X
X} /* end of report_last_rxhdr */
X
X/*+-------------------------------------------------------------------------
X report_str(rptstr,error_flag) row 11/12 col 3 len 55
X
X error_flag == 0 for status/progress message
X == 1 for bump error count, unless rptstr is null
X in which case, merely clear error string area
X == 2 write string on bottom line (not an error)
X == 3 write string on transaction line (not an error)
X == -1 use error line but do not bump error count
X--------------------------------------------------------------------------*/
Xvoid
Xreport_str(rptstr,error_flag)
Xregister char *rptstr;
Xint error_flag;
X{
Xchar s60[60];
Xextern int log_packets;
X
X if(strlen(rptstr) > 55)
X {
X strncpy(s60,rptstr,55);
X s60[56] = 0;
X rptstr = s60;
X }
X
X switch(error_flag)
X {
X case 0:
X clear_area(win,12,3,55);
X break;
X case 1:
X ++this_file_errors;
X ++total_errors;
X report_error_count();
X case -1:
X clear_area(win,11,3,55);
X break;
X case 2:
X clear_area(win,13,3,55);
X break;
X case 3:
X clear_area(win,4,3,55);
X break;
X }
X
X waddstr(win,rptstr);
X wrefresh(win);
X
X if(log_packets)
X {
X write(log_packets,"info: ",6);
X write(log_packets,rptstr,strlen(rptstr));
X write(log_packets,"\n",1);
X }
X
X} /* end of report_str */
X
X/*+-------------------------------------------------------------------------
X report_transaction()
X--------------------------------------------------------------------------*/
Xvoid
Xreport_transaction(str)
Xchar *str;
X{
X report_str(str,3);
X} /* end of report_transaction */
X
X/*+-------------------------------------------------------------------------
X report_file_open_tod() -- time of start of this file
X
X this file open time: row 8 col 47 length 8
X--------------------------------------------------------------------------*/
Xvoid
Xreport_file_open_tod()
X{
X clear_area(win,8,47,8);
X waddstr(win,get_tod(1,(char *)0));
X wrefresh(win);
X} /* end of report_file_open_tod */
X
X/*+-------------------------------------------------------------------------
X report_file_open_mode(file_mode)
X mode map: row 4 col 46 len 10
X--------------------------------------------------------------------------*/
Xreport_file_open_mode(file_mode)
Xunsigned short file_mode;
X{
X clear_area(win,3,46,10);
X waddstr(win,mode_map(file_mode,(char *)0));
X wrefresh(win);
X} /* end of report_file_open_mode */
X
X/*+-------------------------------------------------------------------------
X report_file_open_length(long_length)
X length: row 3 col 36 len 8
X--------------------------------------------------------------------------*/
Xreport_file_open_length(length)
Xlong length;
X{
X clear_area(win,3,36,8);
X if(length <= 0)
X waddstr(win,"unknown");
X else
X {
X sprintf(s128,"%8lu",length);
X waddstr(win,s128);
X }
X wrefresh(win);
X} /* end of report_file_open_length */
X
X/*+-------------------------------------------------------------------------
X report_file_send_open(filename,filestat)
X
X filename: row 2 col 20 len 38
X number: row 2 col 8 len 3
X length: row 3 col 36 len 8
X mode: row 3 col 46 len 10
X time of start of this file: row 4 col 47 length 8 hh:mm:ss
X--------------------------------------------------------------------------*/
Xvoid
Xreport_file_send_open(filename,filestat)
Xchar *filename;
Xstruct stat *filestat;
X{
Xchar s50[50];
Xregister char *cptr = filename;
X
X if(log_packets)
X {
X write(log_packets,"file: ",6);
X write(log_packets,filename,strlen(filename));
X write(log_packets,"\n",1);
X }
X
X /* number */
X clear_area(win,2,8,3);
X sprintf(s50,"%3d",Filcnt);
X waddstr(win,s50);
X
X /* filename */
X if(strlen(filename) > 38)
X {
X strncpy(s50,filename,38);
X s50[39] = 0;
X cptr = s50;
X }
X clear_area(win,2,20,38);
X waddstr(win,cptr);
X
X /* length */
X report_file_open_length(filestat->st_size);
X
X /* mode */
X report_file_open_mode(filestat->st_mode);
X
X /* time of start of this file */
X report_file_open_tod();
X
X this_file_errors = 0;
X report_error_count();
X} /* end of report_file_send_open */
X
X/*+-------------------------------------------------------------------------
X report_file_rcv_started(filename,length,last_mod_time,file_mode)
X
X filename: row 2 col 7 len 50
X length: row 3 col 36 len 8 if not xmodem
X mode: row 3 col 46 len 10
X time of start of this file: row 4 col 47 length 8 hh:mm:ss
X--------------------------------------------------------------------------*/
Xreport_file_rcv_started(filename,length,last_mod_time,file_mode)
Xchar *filename;
Xlong length; /* if < 0, "UNKNOWN" */
Xlong last_mod_time; /* not currently displayed */
Xunsigned short file_mode; /* UNIX file modifier or zero */
X{
Xregister char *cptr;
SHAR_EOF
echo "End of part 28"
echo "File z/zcurses.c is continued in part 29"
echo "29" > 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