home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-07-15 | 54.1 KB | 2,019 lines |
- Newsgroups: comp.sources.misc
- subject: v14i004: u386mon 2.0 part 04/04
- From: wht@n4hgf.UUCP (Warren Tucker)
- Sender: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
-
- Posting-number: Volume 14, Issue 4
- Submitted-by: wht@n4hgf.UUCP (Warren Tucker)
- Archive-name: u386mon-2.0/part04
-
- #!/bin/sh
- # This is part 04 of u386mon.2.0
- if touch 2>&1 | fgrep 'amc' > /dev/null
- then TOUCH=touch
- else TOUCH=true
- fi
- # ============= lint_args.h ==============
- echo "x - extracting lint_args.h (Text)"
- sed 's/^X//' << 'SHAR_EOF' > lint_args.h &&
- X/* CHK=0x3CB6 */
- X/*+-----------------------------------------------------------------------
- X lint_args.h
- X------------------------------------------------------------------------*/
- X/*+:EDITS:*/
- X/*:07-11-1990-04:12-afterlint-creation */
- X
- X#ifndef BUILDING_LINT_ARGS
- X#ifdef LINT_ARGS
- X
- X/* bootinfo.c */
- Xextern char *bmemf_text(unsigned long flags);
- Xextern void display_bootinfo(struct _win_st *win,int y,int x);
- X/* det_proc.c */
- Xextern char *get_cpu_time_str(long ticks);
- Xextern char *pgrp_to_ttyname(int pgrp);
- Xextern char *uid_to_name(unsigned short uid);
- Xextern int det_proc_init(void );
- Xextern int get_user(struct proc *tproc,struct user *tuser);
- Xextern int getpwent_and_enter(unsigned short uid);
- Xextern int ppproc_pid_compare(struct proc * *ppp1,struct proc * *ppp2);
- Xextern int uid_name_enter(unsigned short uid,char *name);
- Xextern struct utmp *find_utmp_for_pgrp(int pgrp);
- Xextern void display_proc_stat(struct _win_st *win,int iproc,int initial);
- Xextern void display_proc_stats(struct _win_st *win,int initial);
- Xextern void init_uid_name_hash(void );
- Xextern void read_and_sort_procs(int initial);
- Xextern void read_utmp(void );
- X/* det_sio.c */
- Xextern char *B_to_baud_rate(int code);
- Xextern char *cflag_to_baud_d_p_s(int cflag);
- Xextern int display_sio_summary(struct _win_st *win,int initial);
- Xextern int tty_slot_compare(struct tty *sio1,struct tty *sio2);
- Xextern void display_siofull_init(struct _win_st *win,int tly,int tlx,int show_flag);
- Xextern void display_siofull_update(struct _win_st *win,int tly,int tlx,struct tty *tsio);
- Xextern void display_siosum_update(struct _win_st *win,int y,struct tty *tsio);
- Xextern void grok_sio_tty(void );
- X/* detail.c */
- Xextern void detail_init(void );
- Xextern void detail_panel_cmd(unsigned long cmd);
- Xextern void detail_panel_update(void );
- Xextern void detpanel_destroy(void );
- Xextern void detpanel_extra_init(void );
- Xextern void detpanel_extra_update(void );
- Xextern void detpanel_ps_init(int full43);
- Xextern void detpanel_ps_update(void );
- Xextern void detpanel_sio_init(void );
- Xextern void detpanel_sio_update(void );
- X/* disputil.c */
- Xextern struct PANEL *mkpanel(int rows,int cols,int tly,int tlx);
- Xextern void clear_area(struct _win_st *win,int y,int x,int len);
- Xextern void clear_area_char(struct _win_st *win,int y,int x,int len,unsigned char fillchar);
- Xextern void disp_info_int(struct _win_st *win,char *label,char *fmt,int value);
- Xextern void disp_info_long(struct _win_st *win,char *label,char *fmt,long value);
- Xextern void disp_msg(unsigned long cp,char *msg);
- Xextern void disp_static_int(struct _win_st *win,char *label,char *fmt,int value);
- Xextern void disp_static_long(struct _win_st *win,char *label,char *fmt,long value);
- Xextern void pflush(void );
- Xextern void wperror(struct _win_st *win,char *desc);
- X/* libkmem.c */
- Xextern void kinit(int write_needed);
- Xextern void kread(char *caddr,long kaddr,int len);
- X/* libmem.c */
- Xextern void minit(int write_needed);
- Xextern void mread(char *caddr,long maddr,int len);
- X/* libnlsym.c */
- Xextern void nlsym_error(char *text);
- Xextern void nlsym_read(void );
- X/* libswap.c */
- Xextern void sinit(void );
- Xextern void sread(char *caddr,long maddr,int len);
- X/* nlsym.c */
- Xextern int main(int argc,char * *argv,char * *envp);
- Xextern void nlsym_write_error(int code);
- X/* proc.c */
- Xextern char *pstat_text(char pstat);
- Xextern void display_proc(struct _win_st *win,int y,int x);
- Xextern void grok_proc(void );
- X/* tune.c */
- Xextern void display_tune(struct _win_st *win,int y,int x);
- X/* u386mon.c */
- Xextern char *get_elapsed_time(long elapsed_seconds);
- Xextern int get_cpu_avg(long *cpu_ticks,int period);
- Xextern int get_wait_avg(long *wait_ticks,int period);
- Xextern int main(int argc,char * *argv,char * *envp);
- Xextern long update_cpuscale(struct _win_st *win,int y,int x,int width,long *per_state);
- Xextern long update_waitscale(struct _win_st *win,int y,int x,int width,long *per_state,long total_ticks);
- Xextern void calc_cpu_avg(long *per_state);
- Xextern void calc_wait_avg(long *per_state);
- Xextern void caught_signal(int sig);
- Xextern void draw_cpuscale_literals(struct _win_st *win,int y,int x);
- Xextern void draw_per_sec_literals(struct _win_st *win,int y,int x);
- Xextern void draw_waitscale_literals(struct _win_st *win,int y,int x);
- Xextern void extra_info_stuff(void );
- Xextern void extra_static_stuff(void );
- Xextern void leave(int exit_code);
- Xextern void leave_text(char *text,int exit_code);
- Xextern void leaving(void );
- Xextern void read_sysinfo_and_minfo(void );
- X/* var.c */
- Xextern void display_var(struct _win_st *win,int y,int x);
- X
- X#else /* compiler doesn't know about prototyping */
- X
- X/* bootinfo.c */
- Xextern char *bmemf_text();
- Xextern void display_bootinfo();
- X/* det_proc.c */
- Xextern char *get_cpu_time_str();
- Xextern char *pgrp_to_ttyname();
- Xextern char *uid_to_name();
- Xextern int det_proc_init();
- Xextern int get_user();
- Xextern int getpwent_and_enter();
- Xextern int ppproc_pid_compare();
- Xextern int uid_name_enter();
- Xextern struct utmp *find_utmp_for_pgrp();
- Xextern void display_proc_stat();
- Xextern void display_proc_stats();
- Xextern void init_uid_name_hash();
- Xextern void read_and_sort_procs();
- Xextern void read_utmp();
- X/* det_sio.c */
- Xextern char *B_to_baud_rate();
- Xextern char *cflag_to_baud_d_p_s();
- Xextern int display_sio_summary();
- Xextern int tty_slot_compare();
- Xextern void display_siofull_init();
- Xextern void display_siofull_update();
- Xextern void display_siosum_update();
- Xextern void grok_sio_tty();
- X/* detail.c */
- Xextern void detail_init();
- Xextern void detail_panel_cmd();
- Xextern void detail_panel_update();
- Xextern void detpanel_destroy();
- Xextern void detpanel_extra_init();
- Xextern void detpanel_extra_update();
- Xextern void detpanel_ps_init();
- Xextern void detpanel_ps_update();
- Xextern void detpanel_sio_init();
- Xextern void detpanel_sio_update();
- X/* disputil.c */
- Xextern struct PANEL *mkpanel();
- Xextern void clear_area();
- Xextern void clear_area_char();
- Xextern void disp_info_int();
- Xextern void disp_info_long();
- Xextern void disp_msg();
- Xextern void disp_static_int();
- Xextern void disp_static_long();
- Xextern void pflush();
- Xextern void wperror();
- X/* libkmem.c */
- Xextern void kinit();
- Xextern void kread();
- X/* libmem.c */
- Xextern void minit();
- Xextern void mread();
- X/* libnlsym.c */
- Xextern void nlsym_error();
- Xextern void nlsym_read();
- X/* libswap.c */
- Xextern void sinit();
- Xextern void sread();
- X/* nlsym.c */
- Xextern int main();
- Xextern void nlsym_write_error();
- X/* proc.c */
- Xextern char *pstat_text();
- Xextern void display_proc();
- Xextern void grok_proc();
- X/* tune.c */
- Xextern void display_tune();
- X/* u386mon.c */
- Xextern char *get_elapsed_time();
- Xextern int get_cpu_avg();
- Xextern int get_wait_avg();
- Xextern int main();
- Xextern long update_cpuscale();
- Xextern long update_waitscale();
- Xextern void calc_cpu_avg();
- Xextern void calc_wait_avg();
- Xextern void caught_signal();
- Xextern void draw_cpuscale_literals();
- Xextern void draw_per_sec_literals();
- Xextern void draw_waitscale_literals();
- Xextern void extra_info_stuff();
- Xextern void extra_static_stuff();
- Xextern void leave();
- Xextern void leave_text();
- Xextern void leaving();
- Xextern void read_sysinfo_and_minfo();
- X/* var.c */
- Xextern void display_var();
- X
- X#endif /* LINT_ARGS */
- X#endif /* BUILDING_LINT_ARGS */
- X
- X/* end of lint_args.h */
- SHAR_EOF
- $TOUCH -am 0715025190 lint_args.h &&
- chmod 0644 lint_args.h ||
- echo "restore of lint_args.h failed"
- set `wc -c lint_args.h`;Wc_c=$1
- if test "$Wc_c" != "7313"; then
- echo original size 7313, current size $Wc_c
- fi
- # ============= nlsym.h ==============
- echo "x - extracting nlsym.h (Text)"
- sed 's/^X//' << 'SHAR_EOF' > nlsym.h &&
- X/* CHK=0x23B9 */
- X/*+-------------------------------------------------------------------------
- X nlsym.h -- utility nlist - fast access to kernel /dev/kmem offsets
- X ...!emory!n4hgf!wht
- X
- XThe nlsym file contains three records:
- X1. struct stat unixstat - stat buffer from /unix at file creation time
- X2. struct nlist nlsym - the structure of nlist'd information
- X3. long unique - a unique identifier to help ensure correct nlsym length
- X
- X--------------------------------------------------------------------------*/
- X/*+:EDITS:*/
- X/*:06-27-1990-01:57-wht@n4hgf-1.10-incorporate suggestions from alpha testers */
- X/*:06-27-1990-01:55-wht@n4hgf-use 64 bits of unique check */
- X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
- X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
- X/*:06-21-1990-14:26-r@n4hgf-version x0.12 seems bug free */
- X/*:10-27-1988-11:07-wht-creation */
- X
- X#define UNIX_KERNEL "/unix"
- X#define UNIX_NLSYM "/unix.nlsym"
- X#define NLSYM_UNIQUE1 0x1BADD00DL
- X#define NLSYM_UNIQUE2 0xDEADB1FFL
- X
- X#define Nindex_AVAILRMEM 0
- X#define Nindex_AVAILSMEM 1
- X#define Nindex_BDEVCNT 2
- X#define Nindex_BDEVSW 3
- X#define Nindex_BOOTINFO 4
- X#define Nindex_CDEVCNT 5
- X#define Nindex_CDEVSW 6
- X#define Nindex_CFREE 7
- X#define Nindex_CFREECNT 8
- X#define Nindex_CFREELIST 9
- X#define Nindex_CONSSW 10
- X#define Nindex_CURPROC 11
- X#define Nindex_DINFO 12
- X#define Nindex_DSTFLAG 13
- X#define Nindex_DUMPDEV 14
- X#define Nindex_EMAP 15
- X#define Nindex_FFREELIST 16
- X#define Nindex_FILE 17
- X#define Nindex_FMODCNT 18
- X#define Nindex_FMODSW 19
- X#define Nindex_FREEMEM 20
- X#define Nindex_FSINFO 21
- X#define Nindex_FSTYPSW 22
- X#define Nindex_HZ 23
- X#define Nindex_IDLESERVER 24
- X#define Nindex_IFREELIST 25
- X#define Nindex_INODE 26
- X#define Nindex_KPTBL 27
- X#define Nindex_LBOLT 28
- X#define Nindex_LINECNT 29
- X#define Nindex_LINESW 30
- X#define Nindex_MAXCLICK 31
- X#define Nindex_MAXMEM 32
- X#define Nindex_MINFO 33
- X#define Nindex_MOUNT 34
- X#define Nindex_MSGLISTCNT 35
- X#define Nindex_NFSTYP 36
- X#define Nindex_NPTALLOCED 37
- X#define Nindex_NPTFREE 38
- X#define Nindex_NSERVERS 39
- X#define Nindex_NSWAP 40
- X#define Nindex_NSYSENT 41
- X#define Nindex_OLDPROC 42
- X#define Nindex_OLD_CURPROC 43
- X#define Nindex_PANICSTR 44
- X#define Nindex_PHYSMEM 45
- X#define Nindex_PIPEDEV 46
- X#define Nindex_PROC 47
- X#define Nindex_RCINFO 48
- X#define Nindex_ROOTDEV 49
- X#define Nindex_RUNQ 50
- X#define Nindex_SHLBINFO 51
- X#define Nindex_SWAPDEV 52
- X#define Nindex_SWPLO 53
- X#define Nindex_SYSERR 54
- X#define Nindex_SYSINFO 55
- X#define Nindex_SYSSEGS 56
- X#define Nindex_SYSWAIT 57
- X#define Nindex_TIME 58
- X#define Nindex_TIMEZONE 59
- X#define Nindex_TTHIWAT 60
- X#define Nindex_TTLOWAT 61
- X#define Nindex_TUNE 62
- X#define Nindex_U 63
- X#define Nindex_USERTABLE 64
- X#define Nindex_V 65
- X#define Nindex_WIN_UBLK 66
- X#ifdef M_UNIX
- X#define Nindex_SIO_TTY 67
- X#endif
- X
- X#define bootinfoaddr (nlsym[Nindex_BOOTINFO].n_value)
- X#define freememaddr (nlsym[Nindex_FREEMEM].n_value)
- X#define lboltaddr (nlsym[Nindex_LBOLT].n_value)
- X#define maxmemaddr (nlsym[Nindex_MAXMEM].n_value)
- X#define minfoaddr (nlsym[Nindex_MINFO].n_value)
- X#define nswapaddr (nlsym[Nindex_NSWAP].n_value)
- X#define physmemaddr (nlsym[Nindex_PHYSMEM].n_value)
- X#define procaddr (nlsym[Nindex_PROC].n_value)
- X#define sysinfoaddr (nlsym[Nindex_SYSINFO].n_value)
- X#define tuneaddr (nlsym[Nindex_TUNE].n_value)
- X#define vaddr (nlsym[Nindex_V].n_value)
- X#ifdef M_UNIX
- X#define sio_ttyaddr (nlsym[Nindex_SIO_TTY].n_value)
- X#endif
- X
- X#ifdef DEFINE_NLSYM
- Xstruct nlist nlsym[] =
- X{
- X { "availrmem" },
- X { "availsmem" },
- X { "bdevcnt" },
- X { "bdevsw" },
- X { "bootinfo" },
- X { "cdevcnt" },
- X { "cdevsw" },
- X { "cfree" },
- X { "cfreecnt" },
- X { "cfreelist" },
- X { "conssw" },
- X { "curproc" },
- X { "dinfo" },
- X { "Dstflag" },
- X { "dumpdev" },
- X { "emap" },
- X { "ffreelist" },
- X { "file" },
- X { "fmodcnt" },
- X { "fmodsw" },
- X { "freemem" },
- X { "fsinfo" },
- X { "fstypsw" },
- X { "Hz" },
- X { "idleserver" },
- X { "ifreelist" },
- X { "inode" },
- X { "kptbl" },
- X { "lbolt" },
- X { "linecnt" },
- X { "linesw" },
- X { "maxclick" },
- X { "maxmem" },
- X { "minfo" },
- X { "mount" },
- X { "msglistcnt" },
- X { "nfstyp" },
- X { "nptalloced" },
- X { "nptfree" },
- X { "nservers" },
- X { "nswap" },
- X { "nsysent" },
- X { "oldproc" },
- X { "old_curproc" },
- X { "panicstr" },
- X { "physmem" },
- X { "pipedev" },
- X { "proc" },
- X { "rcinfo" },
- X { "rootdev" },
- X { "runq" },
- X { "shlbinfo" },
- X { "swapdev" },
- X { "swplo" },
- X { "syserr" },
- X { "sysinfo" },
- X { "syssegs" },
- X { "syswait" },
- X { "time" },
- X { "Timezone" },
- X { "tthiwat" },
- X { "ttlowat" },
- X { "tune" },
- X { "u" },
- X { "usertable" },
- X { "v" },
- X { "win_ublk" },
- X#ifdef M_UNIX
- X { "sio_tty" },
- X#endif
- X { (char *)0 }
- X};
- X#else
- Xextern struct nlist nlsym[];
- X#endif
- X
- X/* vi: set tabstop=4 shiftwidth=4: */
- SHAR_EOF
- $TOUCH -am 0715025190 nlsym.h &&
- chmod 0644 nlsym.h ||
- echo "restore of nlsym.h failed"
- set `wc -c nlsym.h`;Wc_c=$1
- if test "$Wc_c" != "5472"; then
- echo original size 5472, current size $Wc_c
- fi
- # ============= u386mon.h ==============
- echo "x - extracting u386mon.h (Text)"
- sed 's/^X//' << 'SHAR_EOF' > u386mon.h &&
- X/* CHK=0x259A */
- X/*+-------------------------------------------------------------------------
- X u386mon.h - UNIX 386 system monitor definitions
- X wht@n4hgf.Mt-Park.GA.US
- X--------------------------------------------------------------------------*/
- X/*+:EDITS:*/
- X/*:07-10-1990-19:06-root@n4hgf-redesign attributes/color pairs */
- X/*:07-10-1990-18:33-root@n4hgf-move pio wait to medium alert */
- X/*:07-03-1990-03:21-root@n4hgf-add cpBANWARN and renumber */
- X/*:06-27-1990-01:57-wht@n4hgf-1.10-incorporate suggestions from alpha testers */
- X/*:06-25-1990-04:14-wht@n4hgf-1.02-better error handling */
- X/*:06-24-1990-20:53-wht@n4hgf-v1.01-add ISC support thanks to peter@radig.de */
- X/*:06-21-1990-14:27-r@n4hgf-version x0.12 seems bug free */
- X/*:06-20-1990-03:03-root@n4hgf-trick use_cp into making bright fgnd colors */
- X/*:06-19-1990-21:35-wht-get ready for release */
- X
- X#ifndef M_SYSV /* for ISC */
- X#define u_char unsigned char
- X#define u_long unsigned long
- X#endif
- X
- Xchar *getenv();
- Xchar *strchr();
- Xchar *strrchr();
- X#ifdef __STDC__
- Xvoid *malloc();
- X#else
- Xchar *malloc();
- X#endif
- X
- X#define pW(pan) panel_window(pan)
- X#define W WINDOW
- X#define P PANEL
- X
- X/* color numbers for EGA/VGA */
- X#ifdef COLOR_16_TERMINFO /* wht 16-color fgnd/bgnd terminfo */
- X#define cHIBIT 8
- X#define cBLK 0
- X#define cBLU 1
- X#define cGRN 2
- X#define cCYN 3
- X#define cRED 4
- X#define cMAG 5
- X#define cBRN 6
- X#define cWHT 7
- X#define cGRY (cBLK | cHIBIT)
- X#define cLTB (cBLU | cHIBIT)
- X#define cLTG (cGRN | cHIBIT)
- X#define cLTC (cCYN | cHIBIT)
- X#define cLTR (cRED | cHIBIT)
- X#define cLTM (cMAG | cHIBIT)
- X#define cYEL (cBRN | cHIBIT)
- X#define cHIW (cWHT | cHIBIT)
- X#else
- X#define cBLK COLOR_BLACK
- X#define cBLU COLOR_BLUE
- X#define cGRN COLOR_GREEN
- X#define cCYN COLOR_CYAN
- X#define cRED COLOR_RED
- X#define cMAG COLOR_MAGENTA
- X#define cBRN COLOR_YELLOW
- X#define cWHT COLOR_WHITE
- X#define cGRY COLOR_BLACK
- X#define cLTB COLOR_BLUE
- X#define cLTG COLOR_GREEN
- X#define cLTC COLOR_CYAN
- X#define cLTR COLOR_RED
- X#define cLTM COLOR_MAGENTA
- X#define cYEL COLOR_YELLOW
- X#define cHIW COLOR_WHITE
- X#endif
- X
- X#define sTL 0xDA
- X#define sTR 0xBF
- X#define sBL 0xC0
- X#define sBR 0xD9
- X#define sLT 0xC3 /* left hand T */
- X#define sRT 0xB4 /* right hand T */
- X#define sVR 0xB3 /* vertical rule */
- X#define sHR 0xC4 /* horizontal rule */
- X
- X/* color pairs */
- X#ifdef COLOR_16_TERMINFO /* wht 16-color fgnd/bgnd terminfo */
- X#define use_cp(win,cp) wattrset(win,COLOR_PAIR(cp))
- X#else
- X#define use_cp(win,cp) wattrset(win,\
- X (color_avail) ? color_attr[cp] : mono_attr[cp])
- X#endif
- X
- X/* if color par numbers are changed, disputil.c
- X * color_attr and mono_attr tables
- X * must also be changed
- X */
- X#define cpINFO 1 /* information field */
- X#define cpREVERSE 2 /* "reverse video" */
- X#define cpBANWARN 3 /* banner warning */
- X#define cpLOW 4 /* low/user/io */
- X#define cpMED 5 /* medium/kernel/pio */
- X#define cpHIGH 6 /* high/brk/swp */
- X#define cpBANNER 7 /* banner */
- X#define cpLIT 8 /* field literals */
- Xextern int color_avail;
- Xextern long color_attr[];
- Xextern long mono_attr[];
- X
- X#define MSG_TLY (LINES - 2)
- X#define CMD_TLY (LINES - 1)
- X#define LVMSG_Y MSG_TLY
- X#define LVMSG_X 0
- X
- X#define CPUSCALE_TLY 1
- X#define CPUSCALE_SX 13
- X#define CPUSCALE_WIDTH 50
- X
- X#define WAITSCALE_TLY 5
- X#define WAITSCALE_SX 13
- X#define WAITSCALE_WIDTH 50
- X
- X/* Sysinfo/Minfo per second area */
- X#define PER_SEC_TLY 9
- X#define PER_SEC1_TLX 0
- X#define PER_SEC2_TLX 18
- X#define PER_SEC3_TLX 35
- X#define PER_SEC4_TLX 51
- X#define PER_SEC5_TLX 66
- X
- X/* extra info area */
- X#define EXTRA_TLY 26
- X#define EXTRA1_TLX 0
- X#define EXTRA2_TLX 18
- X#define EXTRA3_TLX 43
- X#define EXTRA4_TLX 62
- X
- X#include "lint_args.h"
- X
- X/* vi: set tabstop=4 shiftwidth=4: */
- X/* end of u386mon.h */
- SHAR_EOF
- $TOUCH -am 0715025190 u386mon.h &&
- chmod 0644 u386mon.h ||
- echo "restore of u386mon.h failed"
- set `wc -c u386mon.h`;Wc_c=$1
- if test "$Wc_c" != "3631"; then
- echo original size 3631, current size $Wc_c
- fi
- # ============= renice/Makefile ==============
- if test ! -d 'renice'; then
- echo "x - creating directory renice"
- mkdir 'renice'
- fi
- echo "x - extracting renice/Makefile (Text)"
- sed 's/^X//' << 'SHAR_EOF' > renice/Makefile &&
- X# CHK=0xD897
- X#+-------------------------------------------------------------------
- X# Makefile for renice for SCO UNIX V/386
- X# ...!emory!n4hgf!wht
- X#--------------------------------------------------------------------
- X#+:EDITS:*/
- X#:06-25-1990-04:14-wht@n4hgf-1.03-better error handling
- X#:06-21-1990-14:27-r@n4hgf-version x0.12 seems bug free
- X#:06-19-1990-21:37-wht@n4hgf-get ready for 0.08 release
- X
- X#------------> CFLAGS
- XCFLAGS = -c -Octl -DLINT_ARGS
- X#CFLAGS = -c -O
- X
- X#------------> BINDIR
- XBINDIR = /usr/local/bin
- X
- X#LDFLAGS = -s
- X
- X
- X#handle Sys V make "feature" of using SHELL
- XSHELL = /bin/sh
- X
- X#FCRC = fcrc -u $*.c ;
- X.c.o:; $(FCRC) $(CC) $(CFLAGS) $*.c
- X
- XSRC = \
- X renice.c
- X
- XRENICE_OBJ =\
- X renice.o\
- X ../libnlsym.o\
- X libkmem-w.o
- X
- Xall: renice
- X
- X#must run as root
- Xinstall: all
- X mv renice $(BINDIR)
- X chmod 4711 $(BINDIR)/renice
- X chown root $(BINDIR)/renice
- X @echo ' ';echo 'csh users rehash before executing'
- X
- Xrenice: $(RENICE_OBJ)
- X $(CC) $(LDFLAGS) -o $@ $(RENICE_OBJ) $(LIB)
- X
- Xlibkmem-w.o: ../libkmem.c
- X cc $(CFLAGS) -I .. -DKWRITE_NEEDED ../libkmem.c; mv libkmem.o libkmem-w.o
- X
- X../libnlsym.o: ../libnlsym.c
- X cd ..;make libnlsym.o
- X
- Xclean:
- X rm -f renice.o libkmem-w.o core
- X
- Xclobber: clean
- X rm -f renice
- X
- SHAR_EOF
- $TOUCH -am 0715025190 renice/Makefile &&
- chmod 0644 renice/Makefile ||
- echo "restore of renice/Makefile failed"
- set `wc -c renice/Makefile`;Wc_c=$1
- if test "$Wc_c" != "1200"; then
- echo original size 1200, current size $Wc_c
- fi
- # ============= renice/renice.c ==============
- echo "x - extracting renice/renice.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > renice/renice.c &&
- X/* CHK=0xE998 */
- X/*+-------------------------------------------------------------------------
- X renice.c - UNIX 386 renice
- X
- X * This program was written by me, Mike "Ford" Ditto, and
- X * I hereby release it into the public domain in the interest
- X * of promoting the development of free, quality software
- X * for the hackers and users of the world.
- X *
- X * Feel free to use, copy, modify, improve, and redistribute
- X * this program, but keep in mind the spirit of this
- X * contribution; always provide source, and always allow
- X * free redistribution (shareware is fine with me). If
- X * you use a significant part of this code in a program of
- X * yours, I would appreciate being given the appropriate
- X * amount of credit.
- X * -=] Ford [=-
- X *
- X--------------------------------------------------------------------------*/
- X/*+:EDITS:*/
- X/*:06-26-1990-15:09-wht@n4hgf-adapt Ford's work to UNIX 386 */
- X
- X#include <stdio.h>
- X#include <errno.h>
- X#include <sys/types.h>
- X#undef NGROUPS_MAX
- X#undef NULL
- X#include <sys/param.h>
- X#include <sys/immu.h>
- X#include <sys/region.h>
- X#include <sys/proc.h>
- X#include <sys/var.h>
- X#include <nlist.h>
- X#include "../nlsym.h"
- X#include "../libkmem.h"
- X#include "../libnlsym.h"
- X
- Xstruct var v;
- Xstruct proc tproc;
- Xint myuid;
- Xchar *progname;
- Xchar s128[128];
- Xdaddr_t myreadcnt;
- X
- X/*+-------------------------------------------------------------------------
- X leave_text(text,exit_code)
- XIf exit_code == 255, do perror
- X--------------------------------------------------------------------------*/
- Xvoid
- Xleave_text(text,exit_code)
- Xchar *text;
- Xint exit_code;
- X{
- X if(exit_code == 255)
- X perror(text);
- X else
- X {
- X fputs(text,stderr);
- X fputs("\n",stderr);
- X }
- X exit(exit_code);
- X} /* end of leave_text */
- X
- X/*+-------------------------------------------------------------------------
- X renice(pid,value,relative) - change nice of process `pid'
- Xbased on 'value' and 'relative'
- X--------------------------------------------------------------------------*/
- Xrenice(pid,value,relative)
- Xint pid;
- Xint value;
- Xint relative;
- X{
- X register i;
- X int tmpnice;
- X
- X for(i = 0; i < v.v_proc; i++)
- X {
- X kread((caddr_t)&tproc,(daddr_t)((struct proc *)procaddr + i),
- X sizeof(struct proc));
- X if(tproc.p_pid == pid)
- X {
- X#ifdef DEBUG
- X fprintf(stderr,"Found it! proc[%d], p_uid is %d\n",
- X i,tproc.p_uid);
- X
- X fprintf(stderr,"Old p_nice was %d\n",tproc.p_nice);
- X#endif /* DEBUG */
- X
- X tmpnice = tproc.p_nice;
- X
- X if(relative)
- X tmpnice += value;
- X else
- X tmpnice = value;
- X
- X if(tmpnice >= 40)
- X tmpnice = 40;
- X if(tmpnice < 0)
- X tmpnice = 0;
- X
- X#ifdef DEBUG
- X fprintf(stderr,"New p_nice is %d\n",tmpnice);
- X#endif /* DEBUG */
- X
- X if(
- X#ifdef WHT
- X (myuid && (myuid != 201))
- X#else
- X myuid
- X#endif
- X && ((myuid != tproc.p_uid) || (tmpnice < tproc.p_nice)))
- X {
- X errno = EACCES;
- X sprintf(s128,"%s: can't renice process %d",progname,pid);
- X perror(s128);
- X return 1;
- X }
- X
- X tproc.p_nice = tmpnice;
- X
- X kwrite((daddr_t)&((struct proc *)procaddr)[i]
- X + ( ((caddr_t)&tproc.p_nice) - (caddr_t)&tproc ),
- X (caddr_t)&tproc.p_nice,sizeof(tproc.p_nice));
- X return(0);
- X }
- X }
- X fprintf(stderr,"%s: process %d not found.\n",progname,pid);
- X
- X return(1);
- X} /* end of renice */
- X
- X/*+-------------------------------------------------------------------------
- X usage()
- X--------------------------------------------------------------------------*/
- Xvoid
- Xusage()
- X{
- X fprintf(stderr,"usage: %s [{+-}inc] [=prio] pid ...\n",progname);
- X exit(-1);
- X} /* end of usage */
- X
- X/*+-------------------------------------------------------------------------
- X main(argc,argv)
- X--------------------------------------------------------------------------*/
- Xmain(argc,argv)
- Xint argc;
- Xchar **argv;
- X{
- X int status=0;
- X int pid;
- X int relative = 1;
- X int value = 0;
- X
- X progname = *argv;
- X if(argc < 2)
- X usage();
- X
- X myuid = getuid();
- X nlsym_read();
- X kinit(1);
- X kread((caddr_t)&v,vaddr,sizeof(v));
- X
- X while(++argv,--argc)
- X {
- X switch(**argv)
- X {
- X case '-':
- X if(sscanf(*argv+1,"%d",&value) != 1)
- X usage();
- X relative = 1;
- X break;
- X case '+':
- X if(sscanf(*argv+1,"%d",&value) != 1)
- X usage();
- X value = -value;
- X relative = 1;
- X break;
- X case '=':
- X if(sscanf(*argv+1,"%d",&value) != 1)
- X usage();
- X relative = 0;
- X break;
- X default:
- X if(sscanf(*argv,"%d",&pid) != 1)
- X usage();
- X status += renice(pid,value,relative);
- X }
- X }
- X
- X exit(status);
- X} /* end of main */
- X
- X/* vi: set tabstop=4 shiftwidth=4: */
- X/* end of renice.c */
- SHAR_EOF
- $TOUCH -am 0715025190 renice/renice.c &&
- chmod 0644 renice/renice.c ||
- echo "restore of renice/renice.c failed"
- set `wc -c renice/renice.c`;Wc_c=$1
- if test "$Wc_c" != "4399"; then
- echo original size 4399, current size $Wc_c
- fi
- # ============= uutool/README ==============
- if test ! -d 'uutool'; then
- echo "x - creating directory uutool"
- mkdir 'uutool'
- fi
- echo "x - extracting uutool/README (Text)"
- sed 's/^X//' << 'SHAR_EOF' > uutool/README &&
- XUUTOOL
- X------
- X
- XUutool is a single program called with different names to
- Xaccomplish specific functions. These names are:
- X
- X uupoke - "poke" a uucp connection into life
- X similar to "uucico -r1 [-x#] -[S|s]system name
- X
- X uulstat - display summary uucp connection status
- X
- X uukill - terminate a uucico session (promptly, but
- X with finesse); kill uucico and any active
- X dialer programs
- X
- XThis is included with u386mon primarily as an example of alternate
- Xuses of libkmem (see killpc.c), but I have found them very useful.
- X
- Xusage information
- X-----------------
- Xusage: uupoke [-a] [-v] [-x#] systemname ...
- X uulstat systemname ...
- X uukill systemname ...
- X
- Xuupoke [-a] [-v] [-x#] systemname ...
- X----------------------------------
- X
- XCall each system in the 'systemname' list in turn. The -a switch ("always")
- Xcauses -S to be used in the uucico invocation; if -a is omited,
- Xuupoke will make it's own analysis of work to be done and execute
- Xuucico for a system only if outgoing work is found.
- X
- XThe -v switch causes uupoke to display status similar to uulstat
- Xas it does its work.
- X
- XThe -x# switch sets the uucico debugging level. The default is -x1.
- XSetting -x0 may still result in -x1 output occurring due to
- Xuucico switch interpretation.
- X
- Xuulstat systemsnames
- X--------------------
- X
- XSummary status for each system in the 'systemname' list is displayed.
- X
- Xexample of inactive connection:
- Xsystem: gatech: uucico not active
- Xlast status: successful (0 failed calls)
- Xqueues: input: 0 output: 0 data files: 0
- Xlast call: Sat Jul 14 19:10:55 1990
- Xnext call: none scheduled
- X
- Xexample of active connection:
- Xsystem: gatech: uucico pid 9274 active on tty2b
- Xlast status: CALL IN PROGRESS (0 failed calls)
- Xqueues: input: 0 output: 0 data files: 0
- Xlast call: Sun Jul 15 02:29:30 1990
- Xnext call: now
- X
- Xuukill systemnames
- X------------------
- X
- XOnly executable by root, this invocation promptly terminates
- Xan active incoming or outgoing uucico session for each system
- Xnamed in 'systemnames'.
- SHAR_EOF
- $TOUCH -am 0715025990 uutool/README &&
- chmod 0644 uutool/README ||
- echo "restore of uutool/README failed"
- set `wc -c uutool/README`;Wc_c=$1
- if test "$Wc_c" != "2027"; then
- echo original size 2027, current size $Wc_c
- fi
- # ============= uutool/Makefile ==============
- echo "x - extracting uutool/Makefile (Text)"
- sed 's/^X//' << 'SHAR_EOF' > uutool/Makefile &&
- X# CHK=0x9F4A
- X#+-------------------------------------------------------------------
- X# Makefile for uutool for SCO UNIX V/386
- X# ...!emory!n4hgf!wht
- X#--------------------------------------------------------------------
- X#+:EDITS:*/
- X#:06-25-1990-04:14-wht@n4hgf-1.03-better error handling
- X#:06-21-1990-14:27-r@n4hgf-version x0.12 seems bug free
- X#:06-19-1990-21:37-wht@n4hgf-get ready for 0.08 release
- X
- X#------------> CFLAGS
- XCFLAGS = -c -Octl -DLINT_ARGS
- X#CFLAGS = -c -O
- X
- X#------------> BINDIR
- XBINDIR = /usr/lib/uucp
- X
- X#LDFLAGS = -s
- X
- XLIB = -lx
- X
- X#handle Sys V make "feature" of using SHELL
- XSHELL = /bin/sh
- X
- X#FCRC = fcrc -u $*.c ;
- X.c.o:; $(FCRC) $(CC) $(CFLAGS) $*.c
- X
- XSRC = \
- X uutool.c
- X
- XUUTOOL_OBJ =\
- X uutool.o\
- X killpc.o\
- X wstext.o\
- X ../libnlsym.o\
- X ../libkmem.o
- X
- Xall: uutool
- X
- X#must run as root
- Xinstall: all
- X rm -f $(BINDIR)/uulstat $(BINDIR)/uupoke $(BINDIR)/uukill $(BINDIR)/uulstat
- X cp uutool $(BINDIR)/uulstat
- X chown uucp $(BINDIR)/uulstat
- X chmod 711 $(BINDIR)/uulstat
- X ln $(BINDIR)/uulstat $(BINDIR)/uupoke
- X ln $(BINDIR)/uulstat $(BINDIR)/uukill
- X @echo ' ';echo 'csh users rehash before executing'
- X
- Xuutool: $(UUTOOL_OBJ)
- X $(CC) $(LDFLAGS) -o $@ $(UUTOOL_OBJ) $(LIB)
- X
- X../libnlsym.o: ../libnlsym.c
- X cd ..;make libnlsym.o
- X
- X../libkmem.o: ../libkmem.c
- X cd ..;make libkmem.o
- X
- Xclean:
- X rm -f uutool.o libkmem-w.o core
- X
- Xclobber: clean
- X rm -f uutool
- X
- SHAR_EOF
- $TOUCH -am 0715024290 uutool/Makefile &&
- chmod 0644 uutool/Makefile ||
- echo "restore of uutool/Makefile failed"
- set `wc -c uutool/Makefile`;Wc_c=$1
- if test "$Wc_c" != "1344"; then
- echo original size 1344, current size $Wc_c
- fi
- # ============= uutool/killpc.c ==============
- echo "x - extracting uutool/killpc.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > uutool/killpc.c &&
- X/* CHK=0xFAEC */
- X#define USE_KMEM
- X/*+-------------------------------------------------------------------------
- X killpc.c
- X
- X Defined functions:
- X kill_parent_and_children(ppid,sig_to_parent,sig_to_children)
- X leave_text(text,exit_code)
- X
- X--------------------------------------------------------------------------*/
- X/*+:EDITS:*/
- X/*:07-15-1990-01:49-wht-creation */
- X
- X#include <stdio.h>
- X#ifdef USE_KMEM
- X#include <sys/types.h>
- X#undef NGROUPS_MAX
- X#undef NULL
- X#include <sys/param.h>
- X#include <sys/immu.h>
- X#include <sys/region.h>
- X#include <sys/proc.h>
- X#include <sys/var.h>
- X#include <nlist.h>
- X
- X#include "../nlsym.h"
- X#include "../libkmem.h"
- X#include "../libnlsym.h"
- X
- Xdaddr_t myreadcnt = 0L;
- X#endif /* USE_KMEM */
- X
- Xextern int verbose;
- X
- X/*+-------------------------------------------------------------------------
- X leave_text(text,exit_code)
- XIf exit_code == 255, do perror
- X--------------------------------------------------------------------------*/
- X#ifdef USE_KMEM
- Xvoid
- Xleave_text(text,exit_code)
- Xchar *text;
- Xint exit_code;
- X{
- X if(exit_code == 255)
- X perror(text);
- X else
- X {
- X fputs(text,stderr);
- X fputs("\n",stderr);
- X }
- X exit(exit_code);
- X} /* end of leave_text */
- X#endif /* USE_KMEM */
- X
- X/*+-------------------------------------------------------------------------
- X kill_parent_and_children(ppid,sig_to_parent,sig_to_children)
- X--------------------------------------------------------------------------*/
- Xvoid
- Xkill_parent_and_children(ppid,sig_to_parent,sig_to_children)
- Xint ppid;
- Xint sig_to_parent;
- Xint sig_to_children;
- X{
- X#ifdef USE_KMEM
- Xregister struct proc *tproc;
- Xint iproc;
- Xstatic struct proc *procs = (struct proc *)0;
- Xstatic struct var v;
- Xstatic char *memfail = "cannot alloc memory for proc table";
- X
- X nlsym_read();
- X kinit(0);
- X if(!procs)
- X {
- X kread((caddr_t)&v,vaddr,sizeof(v));
- X if(!(procs = (struct proc *)malloc(sizeof(struct proc) * v.v_proc)))
- X leave_text(memfail,1);
- X }
- X
- X kread((caddr_t)procs,procaddr,sizeof(struct proc) * v.v_proc);
- X
- X for(iproc = 0; iproc < v.v_proc; iproc++)
- X {
- X tproc = &procs[iproc];
- X if( tproc->p_stat &&
- X (tproc->p_ppid == ppid) &&
- X (tproc->p_pid != ppid))
- X { /* eliminate from consideration */
- X kill(tproc->p_pid,sig_to_children);
- X }
- X }
- X kill(ppid,sig_to_parent);
- X
- X#else /* do not use kmem */
- Xint col;
- Xint ps_ppid_col;
- Xint ps_pid_col;
- Xchar psbuf[256];
- Xchar psbuf2[256];
- X#define MAX_PS_FIELDS 32
- Xchar *fields[MAX_PS_FIELDS];
- Xint nfields;
- XFILE *popen();
- XFILE *fpps = popen("ps -ef","r");
- X
- X if(!fpps)
- X {
- X printf("cannot read process status\n");
- X return;
- X }
- X fgets(psbuf,sizeof(psbuf),fpps);
- X if(verbose)
- X {
- X printf("killing\n");
- X fputs(psbuf,stdout);
- X }
- X build_field_array(psbuf,fields,MAX_PS_FIELDS,&nfields);
- X for(col = 0; col < nfields; col++)
- X {
- X if(!strcmp("PPID",fields[col]))
- X ps_ppid_col = col;
- X else if(!strcmp("PID",fields[col]))
- X ps_pid_col = col;
- X }
- X while(fgets(psbuf,sizeof(psbuf),fpps))
- X {
- X if(verbose)
- X strcpy(psbuf2,psbuf);
- X build_field_array(psbuf,fields,MAX_PS_FIELDS,&nfields);
- X if(atoi(fields[ps_ppid_col]) == ppid)
- X {
- X if(verbose)
- X fputs(psbuf2,stdout);
- X kill(atoi(fields[ps_pid_col]),sig_to_children);
- X }
- X else if((atoi(fields[ps_pid_col]) == ppid) && verbose)
- X fputs(psbuf2,stdout);
- X }
- X pclose(fpps);
- X kill(ppid,sig_to_parent);
- X nap(2000L);
- X#endif /* USE_KMEM */
- X} /* end of kill_parent_and_children */
- X
- X/* vi: set tabstop=4 shiftwidth=4: */
- X/* end of killpc.c */
- SHAR_EOF
- $TOUCH -am 0715023690 uutool/killpc.c &&
- chmod 0644 uutool/killpc.c ||
- echo "restore of uutool/killpc.c failed"
- set `wc -c uutool/killpc.c`;Wc_c=$1
- if test "$Wc_c" != "3354"; then
- echo original size 3354, current size $Wc_c
- fi
- # ============= uutool/uutool.c ==============
- echo "x - extracting uutool/uutool.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > uutool/uutool.c &&
- X/* CHK=0xCD46 */
- Xchar *revision = "1.10";
- X/*+-------------------------------------------------------------------------
- X uutool.c - HDB UUCP tool - uupoke/uukill/uulstat
- X wht@n4hgf.Mt-Park.GA.US
- X
- X Defined functions:
- X basename(fullname)
- X build_field_array(cmd,field,field_max_quan,nfield_rtn)
- X cmd_uukill(uls)
- X cmd_uulstat(uls)
- X cmd_uupoke(uls,uucico_x_flag,poll_always)
- X dir_close(dirp)
- X dir_open(dirname)
- X dir_read(dirp)
- X get_uucp_lstat(system_name,uls)
- X lockpid_to_tty(lockpid)
- X main(argc,argv)
- X parse_field(parsestr,termchars)
- X read_status_file(system_name,buf,bufsize)
- X spooldirname(fname)
- X statdirname(fname)
- X
- X--------------------------------------------------------------------------*/
- X/*+:EDITS:*/
- X/*:04-10-1990-21:20-wht@n4hgf-uupoke proceeds even if there is no status file */
- X/*:04-03-1990-19:44-wht@n4hgf-version 1.00 working */
- X
- X#include <stdio.h>
- X#include <signal.h>
- X#include <errno.h>
- X#include <sys/types.h>
- X#include <sys/stat.h>
- X
- Xchar *ctime();
- Xextern int errno;
- Xextern char *sys_errlist[];
- X
- Xchar *wait_status_text();
- X
- X#define DDIR FILE
- Xstruct dent
- X{
- X unsigned short d_inode;
- X char d_name[14];
- X};
- X
- Xchar *STATUSDIR = "/usr/spool/uucp/.Status";
- Xchar *LOCKDIR = "/usr/spool/uucp/LCK..";
- Xchar *WORKDIR = "/usr/spool/uucp/";
- Xchar *SPOOLDIR = "/usr/spool/uucp";
- X
- X#define SS_OK 0 /* successful */
- X#define SS_NO_DEVICE 1 /* no device */
- X#define SS_TIME_WRONG 2 /* wrong time to call */
- X#define SS_TALKING 3 /* TALKING */
- X#define SS_CONVERSATION 4 /* conversation failed */
- X#define SS_SEQBAD 5 /* bad sequence check */
- X#define SS_LOGIN_FAILED 6 /* login failed */
- X#define SS_DIAL_FAILED 7 /* dial failed */
- X#define SS_BAD_LOG_MCH 8 /* bad login/machine */
- X#define SS_LOCKED_DEVICE 9 /* DEVICE LOCKED */
- X#define SS_ASSERT_ERROR 10 /* assert error */
- X#define SS_BADSYSTEM 11 /* system not in Systems */
- X#define SS_CANT_ACCESS_DEVICE 12 /* can't access device */
- X#define SS_DEVICE_FAILED 13 /* device failed */
- X#define SS_WRONG_MCH 14 /* wrong machine name */
- X#define SS_CALLBACK 15 /* callback required */
- X#define SS_RLOCKED 16 /* remote has lock for me */
- X#define SS_RUNKNOWN 17 /* remote does not know me */
- X#define SS_RLOGIN 18 /* remote reject after login */
- X#define SS_UNKNOWN_RESPONSE 19 /* remote reject, unknown msg */
- X#define SS_STARTUP 20 /* startup failed */
- X#define SS_CHAT_FAILED 21 /* caller script failed */
- X#if defined(M_XENIX) || defined(M_UNIX)
- X#define SS_CALL_IN_PROGRESS 22 /* CALL IN PROGRESS */
- X#define SS_CALL_FAILED 23 /* call failed (busy?) */
- X#else
- X#define SS_CALL_IN_PROGRESS 22 /* CALL IN PROGRESS */
- X#endif
- X
- X#define UUCMD_NONE 0
- X#define UUCMD_LSTAT 1
- X#define UUCMD_POLL 2
- X#define UUCMD_KILL 3
- X
- Xtypedef struct uucp_lstat
- X{
- X char system[16];
- X int uucico_active;
- X long secs_last_try;
- X long secs_next_try;
- X int retry_count;
- X int status;
- X int input_queue_count;
- X int output_queue_count;
- X int dfil_count;
- X int locking_pid;
- X char locked_tty[32];
- X char work_dir[64];
- X char stattxt[40];
- X char linebuf[512];
- X} UUCP_LSTAT;
- X
- Xchar *errortext[] =
- X{
- X /* 00000000001111111111222222 */
- X /* 01234567890123456789012346 */
- X /* 0 */ "successful",
- X /* 1 */ "no device",
- X /* 2 */ "wrong time to call",
- X /* 3 */ "TALKING",
- X /* 4 */ "conversation failed",
- X /* 5 */ "bad sequence check",
- X /* 6 */ "login failed",
- X /* 7 */ "dial failed",
- X /* 8 */ "bad login/machine",
- X /* 9 */ "DEVICE LOCKED",
- X /* 10*/ "assert error",
- X /* 11*/ "system not in Systems",
- X /* 12*/ "can't access device",
- X /* 13*/ "device failed",
- X /* 14*/ "wrong machine name",
- X /* 15*/ "callback required",
- X /* 16*/ "remote has lock for me",
- X /* 17*/ "remote does not know me",
- X /* 18*/ "remote reject after login",
- X /* 19*/ "remote reject, unknown msg",
- X /* 20*/ "startup failed",
- X /* 21*/ "caller script failed",
- X#if defined(M_XENIX) || defined(M_UNIX)
- X /* 22*/ "CALL IN PROGRESS",
- X /* 23*/ "call failed (busy?)",
- X#else
- X /* 22*/ "CALL IN PROGRESS",
- X#endif
- X};
- X
- X#if defined(M_XENIX) || defined(M_UNIX)
- X#define SS_MSG_MAX 23
- X#else
- X#define SS_MSG_MAX 22
- X#endif
- X
- Xint verbose = 0;
- X
- X/*+-----------------------------------------------------------------------
- X parse_field(parsestr,termchars)
- X
- XGet next field from string parsestr ((char *)0 on 2nd, 3rd, etc.
- Xcalls), where fields are nonempty strings separated by runs of chars
- Xfrom termchars. Writes nulls into parsestr to end fields.
- Xtermchars need not remain constant from call to call.
- X
- XTreats multiple occurrences of a termchar as one delimiter (does not
- Xallow null fields).
- X------------------------------------------------------------------------*/
- Xchar *parse_field_static = (char *)0;
- Xchar *parse_field(parsestr,termchars)
- Xchar *parsestr;
- Xchar *termchars;
- X{
- Xregister int first = 1;
- Xregister char *termptr;
- Xregister char *parseptr;
- Xchar *field;
- X
- X if(parsestr == (char *)0 && parse_field_static == (char *)0)
- X return((char *)0);
- X
- X if(parsestr)
- X parseptr = parsestr;
- X else
- X parseptr = parse_field_static;
- X
- X while(*parseptr)
- X {
- X if(!strchr(termchars,*parseptr))
- X break;
- X parseptr++;
- X }
- X
- X if(!*parseptr)
- X {
- X parse_field_static = (char *)0;
- X return((char *)0);
- X }
- X
- X field = parseptr;
- X if(*field == '\'')
- X {
- X field++;
- X parseptr++;
- X while(*parseptr)
- X {
- X if(*parseptr == '\'')
- X {
- X parse_field_static = parseptr + 1;
- X *parseptr = 0;
- X return(field);
- X }
- X parseptr++;
- X }
- X parse_field_static = (char *)0;
- X return(field);
- X }
- X while(*parseptr)
- X {
- X if(strchr(termchars,*parseptr))
- X {
- X *parseptr = 0;
- X parse_field_static = parseptr + 1;
- X while(*parse_field_static)
- X {
- X if(!strchr(termchars,*parse_field_static))
- X break;
- X parse_field_static++;
- X }
- X return(field);
- X }
- X parseptr++;
- X }
- X parse_field_static = (char *)0;
- X return(field);
- X} /* end of parse_field */
- X
- X/*+-------------------------------------------------------------------------
- X build_field_array(cmd,field,field_max_quan,&nfield)
- X--------------------------------------------------------------------------*/
- Xvoid
- Xbuild_field_array(cmd,field,field_max_quan,nfield_rtn)
- Xchar *cmd;
- Xchar **field;
- Xint field_max_quan;
- Xint *nfield_rtn;
- X{
- Xregister itmp;
- Xregister nfield;
- X
- X for(itmp = 0; itmp < field_max_quan; itmp++)
- X field[itmp] = (char *)0;
- X field[0] = parse_field(cmd," \t\r\n");
- X
- X for(nfield = 1; nfield < field_max_quan; ++nfield)
- X {
- X if((field[nfield] = parse_field((char *)0," \t\r\n")) == (char *)0)
- X break;
- X }
- X
- X *nfield_rtn = nfield;
- X
- X} /* end of build_field_array */
- X
- X/*+-------------------------------------------------------------------------
- X dir_open(dirname)
- X--------------------------------------------------------------------------*/
- XDDIR *
- Xdir_open(dirname)
- Xchar *dirname;
- X{
- X DDIR *fp = fopen(dirname,"r");
- X return(fp);
- X} /* end of dir_open */
- X
- X/*+-------------------------------------------------------------------------
- X dir_read(dirname)
- X--------------------------------------------------------------------------*/
- Xstruct dent *
- Xdir_read(dirp)
- XDDIR *dirp;
- X{
- Xstatic struct dent_w_null {
- X struct dent dent;
- X int null;
- X} static_dent;
- X
- X
- X do {
- X if(fread((char *)&static_dent.dent,sizeof(struct dent),1,dirp) != 1)
- X return((struct dent *)0);
- X } while(!static_dent.dent.d_inode);
- X
- X static_dent.null = 0;
- X return(&static_dent.dent);
- X} /* end of dir_open */
- X
- X/*+-------------------------------------------------------------------------
- X dir_close(dirp)
- X--------------------------------------------------------------------------*/
- Xvoid
- Xdir_close(dirp)
- XDDIR *dirp;
- X{
- X if(dirp)
- X fclose(dirp);
- X} /* end of dir_close */
- X
- X/*+-------------------------------------------------------------------------
- X basename(fullname) - strip directory name from filename
- X
- Xreturns address of static string
- X--------------------------------------------------------------------------*/
- Xchar *
- Xbasename(fullname)
- Xchar *fullname;
- X{
- Xregister char *start;
- Xstatic char outstr[256];
- Xchar *strrchr();
- X
- X start = strrchr(fullname,'/'); /* find last slash */
- X if(!start)
- X return(fullname);
- X start++;
- X strcpy(outstr,start);
- X return(outstr);
- X} /* end of basename */
- X
- X/*+-------------------------------------------------------------------------
- X statdirname(fname) - return base name prepended with status dir
- X
- Xreturns address of static string
- X--------------------------------------------------------------------------*/
- Xchar *
- Xstatdirname(fname)
- Xchar *fname;
- X{
- Xstatic char fullname[128];
- Xstatic int fullname_cat_point = 0;
- X
- X if(!fullname_cat_point)
- X {
- X strcpy(fullname,STATUSDIR);
- X strcat(fullname,"/");
- X fullname_cat_point = strlen(fullname);
- X }
- X
- X strcpy(fullname + fullname_cat_point,fname);
- X return(fullname);
- X
- X} /* end of statdirname */
- X
- X/*+-------------------------------------------------------------------------
- X spooldirname(fname) - return base name prepended with spool dir
- X
- Xreturns address of static string
- X--------------------------------------------------------------------------*/
- Xchar *
- Xspooldirname(fname)
- Xchar *fname;
- X{
- Xstatic char fullname[128];
- Xstatic int fullname_cat_point = 0;
- X
- X if(!fullname_cat_point)
- X {
- X strcpy(fullname,SPOOLDIR);
- X strcat(fullname,"/");
- X fullname_cat_point = strlen(fullname);
- X }
- X
- X strcpy(fullname + fullname_cat_point,fname);
- X return(fullname);
- X
- X} /* end of statdirname */
- X
- X/*+-------------------------------------------------------------------------
- X lockpid_to_tty(lockpid) - given pid, find first ttyname it has locked
- X--------------------------------------------------------------------------*/
- Xchar *
- Xlockpid_to_tty(lockpid)
- Xint lockpid;
- X{
- XDDIR *uspool_dp;
- Xstruct dent *dp;
- XFILE *fp;
- Xint testpid;
- Xstatic char rtnname[32];
- X
- X if(uspool_dp = dir_open(SPOOLDIR))
- X {
- X while(dp = dir_read(uspool_dp))
- X {
- X if(strncmp(dp->d_name,"LCK..tty",8))
- X continue;
- X if(fp = fopen(spooldirname(dp->d_name),"r"))
- X {
- X fscanf(fp,"%d",&testpid);
- X fclose(fp);
- X if(testpid == lockpid)
- X {
- X strcpy(rtnname,dp->d_name + 5);
- X dir_close(uspool_dp);
- X return(rtnname);
- X }
- X }
- X }
- X dir_close(uspool_dp);
- X }
- X return((char *)0);
- X} /* end of lockpid_to_tty */
- X
- X/*+-------------------------------------------------------------------------
- X read_status_file(system_name,buf,bufsize)
- X--------------------------------------------------------------------------*/
- Xint
- Xread_status_file(system_name,buf,bufsize)
- Xchar *system_name;
- Xchar *buf;
- Xint bufsize;
- X{
- XFILE *fp;
- X
- X if(!(fp = fopen(statdirname(system_name),"r")))
- X return(-1);
- X buf[0] = 0;
- X fgets(buf,bufsize,fp);
- X fclose(fp);
- X if(!buf[0])
- X return(-1);
- X buf[strlen(buf) - 1] = 0;
- X return(0);
- X
- X} /* end of read_status_file */
- X
- X/*+-------------------------------------------------------------------------
- X get_uucp_lstat(system_name,uls)
- X--------------------------------------------------------------------------*/
- Xget_uucp_lstat(system_name,uls)
- Xchar *system_name;
- XUUCP_LSTAT *uls;
- X{
- Xint itmp;
- Xchar s32[32];
- Xstruct dent *dp;
- XDDIR *work_dp;
- XFILE *fp;
- Xchar lock_name[64];
- Xchar *ttyname;
- X
- X memset((char *)uls,0,sizeof(UUCP_LSTAT));
- X strcpy(uls->system,system_name);
- X if(read_status_file(system_name,uls->linebuf,sizeof(uls->linebuf)))
- X return(-1);
- X
- X sscanf(uls->linebuf,"%d %d %ld %ld",
- X &uls->status,&uls->retry_count,
- X &uls->secs_last_try,&uls->secs_next_try);
- X uls->secs_next_try += uls->secs_last_try;
- X
- X strcpy(uls->work_dir,WORKDIR);
- X strcat(uls->work_dir,system_name);
- X
- X uls->input_queue_count = 0;
- X uls->output_queue_count = 0;
- X uls->dfil_count = 0;
- X if(work_dp = dir_open(uls->work_dir))
- X {
- X /* count files */
- X while(dp = dir_read(work_dp))
- X {
- X if(!strncmp(dp->d_name,"X.",2))
- X uls->input_queue_count++;
- X if(!strncmp(dp->d_name,"D.",2))
- X uls->dfil_count++;
- X if(!strncmp(dp->d_name,"C.",2))
- X uls->output_queue_count++;
- X }
- X dir_close(work_dp);
- X }
- X
- X /* "kludges for screwy status stuff with HDB" thanks to Ed Carp */
- X strcpy(lock_name,LOCKDIR);
- X strcat(lock_name,system_name);
- X if(!access(lock_name,0) && (uls->status != SS_TALKING))
- X uls->status = SS_CALL_IN_PROGRESS;
- X if(uls->status == SS_BADSYSTEM)
- X uls->status = SS_DEVICE_FAILED;
- X
- X uls->locking_pid = 0;
- X uls->locked_tty[0] = 0;
- X uls->uucico_active = 0;
- X if((uls->status == SS_TALKING) || (uls->status == SS_LOCKED_DEVICE ) ||
- X (uls->status == SS_CALL_IN_PROGRESS))
- X {
- X if(fp = fopen(lock_name,"r"))
- X {
- X fscanf(fp,"%d",&uls->locking_pid);
- X fclose(fp);
- X errno = 0;
- X uls->uucico_active = !kill(uls->locking_pid) || (errno != ESRCH);
- X if(!uls->uucico_active)
- X uls->locking_pid = 0;
- X }
- X if(uls->locking_pid)
- X strcpy(uls->locked_tty,lockpid_to_tty(uls->locking_pid));
- X }
- X
- X if(uls->status > SS_MSG_MAX)
- X sprintf(uls->stattxt,"status %u",uls->status);
- X else
- X strcpy(uls->stattxt,errortext[uls->status]);
- X return(0);
- X} /* end of get_uucp_lstat */
- X
- X/*+-------------------------------------------------------------------------
- X cmd_uulstat(uls)
- X--------------------------------------------------------------------------*/
- Xvoid
- Xcmd_uulstat(uls)
- XUUCP_LSTAT *uls;
- X{
- X printf("system: %s: ",uls->system);
- X if(uls->uucico_active)
- X {
- X printf("uucico pid %d active",uls->locking_pid);
- X if(uls->locked_tty[0])
- X printf(" on %s\n",uls->locked_tty);
- X else
- X printf(" on /dev/tty??\n");
- X }
- X else
- X printf("uucico not active\n");
- X printf("last status: %s",uls->stattxt);
- X printf(" (%d failed calls)\n",uls->retry_count);
- X printf("queues: input: %d output: %d data files: %d\n",
- X uls->input_queue_count,uls->output_queue_count,uls->dfil_count);
- X printf("last call: %s",ctime(&uls->secs_last_try));
- X printf("next call: %s",
- X (uls->uucico_active)
- X ? "now\n"
- X : ((uls->output_queue_count)
- X ? ctime(&uls->secs_next_try)
- X : "none scheduled\n")
- X );
- X printf("\n");
- X} /* end of cmd_uulstat */
- X
- X/*+-------------------------------------------------------------------------
- X cmd_uupoke(uls,uucico_x_flag,poll_always)
- X--------------------------------------------------------------------------*/
- Xvoid
- Xcmd_uupoke(uls,uucico_x_flag,poll_always)
- XUUCP_LSTAT *uls;
- Xint uucico_x_flag;
- Xint poll_always;
- X{
- Xint itmp;
- Xint wait_status;
- Xint uucico_pid;
- Xchar uucico_x_arg[16];
- Xchar system_arg[16];
- X
- X if(uls->uucico_active)
- X {
- X printf("no poll made to %s (uucico already active)\n",uls->system);
- X return;
- X }
- X
- X if(!poll_always && !uls->output_queue_count)
- X {
- X printf("no poll made to %s (no work to be done and no -a)\n",
- X uls->system);
- X return;
- X }
- X
- X sprintf(uucico_x_arg,"-x%d",uucico_x_flag);
- X strcpy(system_arg,(poll_always) ? "-S" : "-s");
- X strcat(system_arg,uls->system);
- X
- X if((uucico_pid = fork()) < 0)
- X printf("cannot fork: %s\n",sys_errlist[errno]);
- X else if(uucico_pid)
- X {
- X printf("uucico pid %d\n",uucico_pid);
- X while(((itmp = wait(&wait_status)) != uucico_pid) && (itmp != -1))
- X ;
- X nap(250L);
- X printf("%s\n",wait_status_text(wait_status));
- X }
- X else
- X {
- X nap(250L);
- X close(2);
- X dup(1);
- X printf("UUCICO.POKE %s -r1 %s\n",uucico_x_arg,system_arg);
- X execl("/usr/lib/uucp/uucico","UUCICO.POKE","-r1",system_arg,
- X (uucico_x_flag) ? uucico_x_arg : "-x1",
- X (char *)0);
- X exit(255);
- X }
- X
- X} /* end of cmd_uupoke */
- X
- X/*+-------------------------------------------------------------------------
- X cmd_uukill(uls)
- X--------------------------------------------------------------------------*/
- Xvoid
- Xcmd_uukill(uls)
- XUUCP_LSTAT *uls;
- X{
- X if(getuid())
- X {
- X printf("no kill done (only root may do this!)\n");
- X return;
- X }
- X if(!uls->uucico_active)
- X {
- X printf("no kill done (uucico not active)\n");
- X return;
- X }
- X if(!uls->locking_pid)
- X {
- X printf("no kill done (cannot determine uucico pid)\n");
- X return;
- X }
- X kill_parent_and_children(uls->locking_pid,SIGHUP,SIGKILL);
- X
- X} /* end of cmd_uukill */
- X
- X/*+-------------------------------------------------------------------------
- X main(argc,argv)
- X--------------------------------------------------------------------------*/
- Xmain(argc,argv)
- Xint argc;
- Xchar **argv;
- X{
- Xint itmp;
- Xint errflg = 0;
- Xint poll_always = 0;
- Xint cmd;
- Xchar *cptr;
- Xint uucico_x_flag = 0;
- XUUCP_LSTAT ulsbuf;
- XUUCP_LSTAT *uls = &ulsbuf;
- Xextern char *optarg;
- Xextern int optind;
- X
- X setbuf(stdout,NULL);
- X setbuf(stderr,NULL);
- X
- X while((itmp = getopt(argc,argv,"vx:a")) != -1)
- X {
- X switch(itmp)
- X {
- X case 'v':
- X verbose = 1;
- X break;
- X case 'x':
- X uucico_x_flag = atoi(optarg);
- X break;
- X case 'a':
- X poll_always = 1;
- X break;
- X case '?':
- X errflg++;
- X }
- X }
- X
- X cmd = UUCMD_NONE;
- X cptr = basename(argv[0]);
- X if(!strcmp(cptr,"uulstat"))
- X cmd = UUCMD_LSTAT;
- X else if(!strcmp(cptr,"uupoke"))
- X cmd = UUCMD_POLL;
- X else if(!strcmp(cptr,"uukill"))
- X cmd = UUCMD_KILL;
- X
- X if(errflg || (cmd == UUCMD_NONE) || (optind == argc))
- X {
- X printf("usage: uupoke [-a] [-v] [-x#] system ...\n");
- X printf(" uulstat system ...\n");
- X printf(" uukill system ...\n");
- X exit(1);
- X }
- X
- X while(optind < argc)
- X {
- X if(get_uucp_lstat(cptr = argv[optind++],uls))
- X {
- X printf("could not get status on '%s'\n\n",cptr);
- X switch(cmd)
- X {
- X case UUCMD_POLL:
- X cmd_uupoke(uls,uucico_x_flag,1);
- X if(verbose)
- X {
- X fputs("after poll: ",stdout);
- X if(get_uucp_lstat(cptr,uls))
- X printf("could not get status on '%s'\n\n",cptr);
- X else
- X cmd_uulstat(uls);
- X }
- X break;
- X }
- X }
- X else
- X {
- X switch(cmd)
- X {
- X case UUCMD_LSTAT:
- X cmd_uulstat(uls);
- X break;
- X case UUCMD_POLL:
- X if(verbose)
- X {
- X fputs("before poll: ",stdout);
- X cmd_uulstat(uls);
- X }
- X cmd_uupoke(uls,uucico_x_flag,poll_always);
- X if(verbose)
- X {
- X fputs("after poll: ",stdout);
- X if(get_uucp_lstat(cptr,uls))
- X printf("could not get status on '%s'\n\n",cptr);
- X else
- X cmd_uulstat(uls);
- X }
- X break;
- X case UUCMD_KILL:
- X if(verbose)
- X {
- X fputs("before kill: ",stdout);
- X cmd_uulstat(uls);
- X }
- X cmd_uukill(uls);
- X break;
- X }
- X }
- X }
- X exit(0);
- X
- X} /* end of main */
- X
- X/* vi: set tabstop=4 shiftwidth=4: */
- X/* end of uutool.c */
- SHAR_EOF
- $TOUCH -am 0715030090 uutool/uutool.c &&
- chmod 0644 uutool/uutool.c ||
- echo "restore of uutool/uutool.c failed"
- set `wc -c uutool/uutool.c`;Wc_c=$1
- if test "$Wc_c" != "17805"; then
- echo original size 17805, current size $Wc_c
- fi
- # ============= uutool/wstext.c ==============
- echo "x - extracting uutool/wstext.c (Text)"
- sed 's/^X//' << 'SHAR_EOF' > uutool/wstext.c &&
- X/* CHK=0xBB16 */
- X/*+-------------------------------------------------------------------------
- X wstext.c - wait status and signal to text strings
- X wht@n4hgf.Mt-Park.GA.US
- X--------------------------------------------------------------------------*/
- X/*+:EDITS:*/
- X/*:07-15-1990-02:38-wht-break out of uutool.c */
- X
- X#include <signal.h>
- X
- X/*+-------------------------------------------------------------------------
- X signal_name_text(sig)
- X--------------------------------------------------------------------------*/
- Xchar *
- Xsignal_name_text(sig)
- Xint sig;
- X{
- Xregister char *cptr;
- Xstatic char sigunknown[20];
- X
- X sig &= 0x7F;
- X switch(sig)
- X {
- X case SIGHUP: cptr = "SIGHUP"; break;
- X case SIGINT: cptr = "SIGINT"; break;
- X case SIGQUIT: cptr = "SIGQUIT"; break;
- X case SIGILL: cptr = "SIGILL"; break;
- X case SIGTRAP: cptr = "SIGTRAP"; break;
- X case SIGIOT: cptr = "SIGIOT"; break;
- X case SIGEMT: cptr = "SIGEMT"; break;
- X case SIGFPE: cptr = "SIGFPE"; break;
- X case SIGKILL: cptr = "SIGKILL"; break;
- X case SIGBUS: cptr = "SIGBUS"; break;
- X case SIGSEGV: cptr = "SIGSEGV"; break;
- X case SIGSYS: cptr = "SIGSYS"; break;
- X case SIGPIPE: cptr = "SIGPIPE"; break;
- X case SIGALRM: cptr = "SIGALRM"; break;
- X case SIGTERM: cptr = "SIGTERM"; break;
- X case SIGUSR1: cptr = "SIGUSR1"; break;
- X case SIGUSR2: cptr = "SIGUSR2"; break;
- X case SIGCLD: cptr = "SIGCLD"; break;
- X case SIGPWR: cptr = "SIGPWR"; break;
- X#if defined(M_UNIX)
- X case SIGSTOP: cptr = "SIGSTOP"; break;
- X case SIGTSTP: cptr = "SIGTSTP"; break;
- X case SIGCONT: cptr = "SIGCONT"; break;
- X case SIGTTIN: cptr = "SIGTTIN"; break;
- X case SIGTTOU: cptr = "SIGTTOU"; break;
- X#endif
- X default:
- X sprintf(sigunknown,"SIGNAL %u",sig);
- X return(sigunknown);
- X }
- X return(cptr);
- X
- X} /* end of signal_name_text */
- X
- X/*+-------------------------------------------------------------------------
- X wait_status_text(wait_status)
- X--------------------------------------------------------------------------*/
- Xchar *
- Xwait_status_text(wait_status)
- Xregister unsigned int wait_status;
- X{
- Xstatic char text[80];
- X
- X if(wait_status & 0xFF) /* exit never called by child */
- X {
- X sprintf(text,"[killed by %s",signal_name_text(wait_status & 0x7F));
- X if(wait_status & 0x80)
- X strcat(text,", core dumped");
- X strcat(text,"]");
- X }
- X else
- X {
- X wait_status >>= 8;
- X if(wait_status == 0)
- X strcpy(text,"[successful]");
- X else
- X sprintf(text,"[exit status %d]\n",wait_status);
- X }
- X
- X return(text);
- X
- X} /* end of wait_status_text */
- X
- X/* vi: set tabstop=4 shiftwidth=4: */
- X/* end of wstext.c */
- SHAR_EOF
- $TOUCH -am 0715024390 uutool/wstext.c &&
- chmod 0644 uutool/wstext.c ||
- echo "restore of uutool/wstext.c failed"
- set `wc -c uutool/wstext.c`;Wc_c=$1
- if test "$Wc_c" != "2504"; then
- echo original size 2504, current size $Wc_c
- fi
- exit 0
-
- --------------------------------------------------------------------
- Warren Tucker, TuckerWare emory!n4hgf!wht or wht@n4hgf.Mt-Park.GA.US
- Sforzando (It., sfohr-tsahn'-doh). A direction to perform the tone
- or chord with special stress, or marked and sudden emphasis.
-
-