dan@i10s7.ira.uka.de (Dan Mosedale) (05/17/91)
#! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 2 (of 9)." # Contents: pf-bootstrap-v1.1a/README # pf-bootstrap-v1.1a/pf-cmds/xterm2.com.uue # pf-bootstrap-v1.1a/tipx-p1/Makefile # pf-bootstrap-v1.1a/tipx-p1/acu.c # pf-bootstrap-v1.1a/tipx-p1/libacu/biz31.c # pf-bootstrap-v1.1a/tipx-p1/libacu/v3451.c # pf-bootstrap-v1.1a/tipx-p1/remote.c # pf-bootstrap-v1.1a/tipx-p1/tipout.c # pf-bootstrap-v1.1a/tipx-p1/vars.c # pf-bootstrap-v1.1a/xmodem-3.9/misc.c # pf-bootstrap-v1.1a/xmodem-3.9/xmodem.h # Wrapped by dan@nostromo on Fri May 17 02:31:41 1991 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'pf-bootstrap-v1.1a/README' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'pf-bootstrap-v1.1a/README'\" else echo shar: Extracting \"'pf-bootstrap-v1.1a/README'\" \(4697 characters\) sed "s/^X//" >'pf-bootstrap-v1.1a/README' <<'END_OF_FILE' Xpf-bootstrap v1.1a X------------------ XThis is a short package that I have put together so that one can do Xeffective file-transfers between a Sun and an Atari Portfolio palmtop Xcomputer using the serial interface. To create this I have combined Xparts of the following packages: X X xmodem 3.9 -- from comp.sources.unix, I think X tipx -- patches to extend 4.3BSD tip for 8 bit xfers, X from comp.sys.misc X tip -- from uunet.uu.net:/communications/tip.tar.Z X slip -- Rayan Zachariassen's SunOS 4.0 SLIP package; X I actually just took a single include from this. X pfboot -- the MSDOS Portfolio bootstrapping package X xterm2 -- the newest version I know of X XThis can probably be considered an alpha version, as I have only tried Xit out with the following configuration: Sun SPARCstation SLC, SunOS X4.1. It will probably run on most Suns with SunOS 4.0 and up, and Xshouldn't be too tough to get working with other BSD based systems. X XThere are two phases to communication with the Portfolio: X X 1) Bootstrapping the PF to get a terminal program on it. If X you have a RAM card drive, or a parallel interface you can X just copy xterm2.com over and forget about the various X other stuff that is otherwise done at this step. X X 2) Day to day file transfers using xmodem. X X--- XAttach the Portfolio and Sun using a null modem cable (RECV and XMIT lines Xcrossed). X--- X1) Bootstrapping XTERM2.COM onto the Portfolio. X X1a) The first thing to do is to compile tipx. This is necessary X because the SunOS tip (for ~> file transfers) doesn't support 8 X bit file transfers, and IBM binaries, of course, can have any bit X characters in it. Tipx supports the 8 bit characters, and as such X is useful for the bootstrapping process. X X A typical c-shell set of commands for the install... X X % cd tipx-p1 X % vi Makefile # edit the makefile X % make X % cp tip ~/bin/tipx # put the tipx binary in your path X % rehash # let the shell know about it X X Go read the (short) section about Transparent Pass-Through in the X README.TIPX file. X X1b) Next step: get a terminal going on the Portfolio. First, in the X Portfolio RS232 setup menu, set the baud rate to 110: we will be X working with the builtin DOS serial driver, which is almost X guaranteed to mess up if you push it at all. Other settings: 8 bits, X no parity, 1 stop bit. (Hint- 110 baud is off the bottom of the menu; X you have to use the cursor keys to scroll down to it). X Be sure to select Initialize before leaving the program. X X On the sun: X X % cd pf-cmds X % setenv REMOTE `PWD`/../remote # use this instead of /etc/remote X % tipx pf-boot # set for 110 baud X X Then go into tipx's Transparent Pass Through mode, and send a X couple of files: X X ~R X ~~~>hexbin.com X X At this point, move over to the PF and type: X X copy aux: hexbin.com X X After this finishes, you might compare the lengths of the two X hexbin.com files to be sure that they are the same. Then move on X and send xterm2.hex: X X (SUN): ~~~>xterm2.hex X (PF): copy aux: xterm2.hex X X After this happens, you will want to decode xterm2: X X (PF): binhex xterm2.hex X ren result.out xterm2.com X X After testing out xterm2 to make sure that it works, you can X delete binhex.com and xterm2.hex. X X1c) Time to set up an xmodem client on the sun. I tried using the X xmodem clients that were originally included with tipx, however X the send client crashed whenever I tried to use it, so I tossed X them out and went with xmodem3.9 which was posted on X comp.sources.misc a while back. X X % cd xmodem-3.9 X % vi Makefile # Make any appropriate changes X % make X % cp xmodem ~/bin ; rehash # put it where it will be found X X1d) Change the Portfolio's baud rate to 9600 baud and Initialize the X RS232 port. X X2) You can now communicate between the PF and the Sun! To send a file X from the Sun to the PF: X X (PF): xterm X (SUN): tip pf # use /bin/tip, not tipx, and call @ 9600 baud X (PF): <F2> file.nam X (SUN): ~C xmodem sbp file.nam X XLet me know how things work out! X X-Dan Mosedale Xdmose@bright.math.uoregon.edu X XNotes: X X-If you problems, you may find it useful to copy chksum.com to the pf X as the first thing you do. Things should chksum as follows: X X chksum.com: 309A X hexbin.com: 4080 X xterm2.hex: EBCB X xterm2.com: 9A0D X X-The only thing I've taken from the Sun slip implementation is an include X files, as tipx requires it to compile. In order for the compile to work, X however, I had to modify the file a bit, so this version of tipx will X almost certainly not work over slip. X XHISTORY: X Xv1.0 - initial release Xv1.1 - a bit of info added to the README file. END_OF_FILE if test 4697 -ne `wc -c <'pf-bootstrap-v1.1a/README'`; then echo shar: \"'pf-bootstrap-v1.1a/README'\" unpacked with wrong size! fi # end of 'pf-bootstrap-v1.1a/README' fi if test -f 'pf-bootstrap-v1.1a/pf-cmds/xterm2.com.uue' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'pf-bootstrap-v1.1a/pf-cmds/xterm2.com.uue'\" else echo shar: Extracting \"'pf-bootstrap-v1.1a/pf-cmds/xterm2.com.uue'\" \(4083 characters\) sed "s/^X//" >'pf-bootstrap-v1.1a/pf-cmds/xterm2.com.uue' <<'END_OF_FILE' Xbegin 644 xterm2.com XMM$J[8 ZY! #3Z\TA<PRT";I< <TAN !,S2&\40ZT";IX <TA^E,&N PUS2&) XM'KL#C :] P=;NO\"N PES2'[Z'$!Z*(!Z,0"H",+"L!T!>C* <T@Z+P Z#X! XMZ_A&86EL960@5&\@06QL;V-A=&4@365M;W)Y#0HD6%1E<FT@,BXP(" H8RD@ XM,3DY,"!*:6T@4W1R875S#0H@(" @($8Q/5%U:70@1C(]4F5C96EV92!&,SU3 XM96YD($8P/45C:&\-"E-(2494*R!&,3U(96QP($8R/4-A<'1U<F4@1C,]5&5X XM="!396YD#0I#5%),*R @1C @=&\@1CD]4V5N9" B,"Y85$TB('1O("(Y+EA4 XM32(-"B3HJ0&T <T6=/>T ,T6"L!T$( ^EP( = A0BM"T LTA6,. _#MT1H#\ XM/'0H@/P]="B _$1T2(#\5'0M@/Q5=!Z _%9T'H#\7GRW@/QG?[+HI03KK>@O XM NNHZ",#ZZ/H5 3KGNBW!.N9Z T%ZY3HF@"+'AT+"]MT!+0^S2'-(/86EP+I XM?/\ 4E=0BSZY [H% /7[*@@=/M8N@ ]?N7UK#4%925S/ 'H[8BSX !!^) XM/KD#Z"L Z!8&Z+@ N P Z&8 N@0 ]>P ^[H" "+U^Q?6EY8P[H! "X#%KD# XML 'NP[H! "X#%KD#L #NPU!25[H "X#%KD#["Z+/D4*+H@%+O\&10I?6EC/ XM4%-2Z-'_'HX>O0.+%KL#N PES2$?L$CH! !:6UC#4%-14E"Q _[!@/D+=!VX XM 1R*^<UA@?I_@'7L6(K8BOFZ?X"X !S-8>L=D+$#_L& ^0MT#K@!'(KYS6&# XM^@!U[>O96+I_@.Y:65M8PU"Q!=+H= B*R+4&T^GK [D7!(L6N0.#P@.P@.Z+ XM%KD#BL'N0HK%[E@D'XL6N0.#P@/NPP %!345*!/D4*10EU!5I96UC# XMH$4))'^B10F+'AT+"]MT(;1 ND4)N0$ S2%S%;0^BQX="\TAM FZ20O-(<<& XM'0L .@S!(K0M +-(>NW4%-14E>[@ "T (H' ]A#Q@< NX / !T64/H80" XM/RUU4$.*!Z(C"T/H4@"_RPJ*!X@%0T<*P'7VH",+/&AT+SQ(="N[RPJ*!PK XM="6@(PL\<G0//%)T"SQS=! \4W0,ZQ"0NB0 Z'0#ZSB0Z2T!Z28#Q@8C"P"0 XM7UI96UC#@#\ = B /R!W T/K\\-04U%25[0)NB0+S2'HX@,] !U ^G2 +D XM (O3M#S-(7,#Z<0 HQL+Q@8?"P&0Q@8B"P"0NA( Z!<#<@8\&'0=Z_*P%>BY XM_?X&(@N /B(+"G8#Z8P NFP!Z/8"<M<\!'4#ZWF0/ %T$SP8=>FZ-P#HWP)R XMX3P8=>SK9Y"[1PJZM@#HS0)RKH@'0X'[R@IR[[M)"KF .B0 CH&R0IUEJ!' XM"C@&'PMUC?;0.@9("G6%L ;H3/W^!A\+Q@8B"P"0LBZT!LTAM$"+'AL+NDD* XMN8 S2%R#3V '4(Z7G_L ;H'_VT/HL>&PO-(;0)NDD+S2'H00)?6EE;6,-0 XM4U%25[0)NC@+S2'HZ0(] !U ^D/ ;D (O3N ]S2%S ^D :,;"\8&'PL! XMD,8&(@L D+F$ +]'"K _/.JM#^+'AL+N8 NDH*S2%S ^FO #T '4#Z:< XMH!\+HD@*]M"B20K&!D<* 9"[2@JY@ #HN@&BR@JZ(@+K99#^!A\+Q@8B"P"0 XMLBZT!LTAN80 OT<*L #\\ZJT/XL>&PNY@ "Z2@K-(7)9/0 =%2@'PNB2 KV XMT*))"L8&1PH!D+M*"KF .AG :+*"OX&(@N /B(+"G=(NT<*N80 Z$$!NFP! XMZ',!<N0\!G23/!5TW#P8=>^Z-P#H7P%RYSP8=>/K'9#^!B(+@#XB"PIW$; $ XMZ/7[NFP!Z$ !<N@\!G7DM#Z+'AL+S2&T";I)"\TAZ L!7UI96UC#4%-14HL> XM'0L+VW04M#[-(;0)NDD+S2''!AT+ #K'I"T";HD"\TAZ)@!/0 = ZY "+ XMT[0\S2%R Z,="UI96UC#4%-14H#L+8#\.G4#@.P*B"9+#+I+#+D +@ /<TA XM<EFC&POK(Y!04U%2M FZ. O-(>A, 3T '0YN0 B].X #W-(7(MHQL+M#^+ XM'AL+N8 ND<*S2%R$CT '0-B\B[1PKH0P#H3OSKWK0^BQX;"\TAM FZ20O- XM(>A' %I96UC#4%*T";I(#,TAM FZ> '-(;0)NK(+S2%:6,.T";IG"\TA7UI9 XM6UC#4%-1B@=#Z-[ZXOA96UC#45.P ('0^+[6UG#4+0!S19T%#T .W4/M #- XM%K 8Z+?ZZ+3ZZ+'Z6,-34K0!S19T$CT .W0'M #-%NL'D+ 8^.LRD(O:M #- XM&HD6( N!/D4*10EU&[0!S19T!3T .W3=M #-&BL6( L[TW[A^>L%D.@$ /A: XM6\-25[@ ($^10I%"70+OT4)B@6Z 0#H P!?6L-14E97N44) \H[#D4*=@B+ XM%D4*@>I%"?K\BPY%"H'I10DKRKY%"0/ROT4)\Z0I%D4*^U]>6EG#4KO+"K0! XMS19T^K0 S18*P'3R/ AT#SP-=":(!T.*T+0"S2'KWX'[RPITV4NR"+0"S2&R XM(+0"S2&R"+0"S2'KQ+(-M +-(;(*M +-(<8' (O#N\L**\-:PU-14K0]N0 XMNE +S2%R2XO8N !"N0 NM8"S2%R/#W6 G4WM#^ZRPJY! #-(7(K/00 =2:T XM/LTAH,L*L072X(H>S JQ ]+C"L.*'LX*L0+2XPK#"@;-"NL'D+0^S2&P@UI9 XM6\, XM XM XM XM XM 10D XM XM XM XM XM T*1FEL92!T;R!R96-E XM:79E/R D#0I&:6QE('1O('-E;F0_("1$;VYE#0HD0SI<4UE35$5-7%!%4DU$ XM051!+D1!5 !#;VUM86YD(&QI;F4Z#0H@+7(@/&9I;&5N86UE/B @6$UO9&5M XM(%)E8V5I=F4-"B M<R \9FEL96YA;64^("!836]D96T@4V5N9"1#;W!Y<FEG XM:'0@,3DY,"!B>2!*:6T@4W1R875S#0I0;W)T:6]N<R!C;W!Y<FEG:'0@8GD@ XM1$E0("8@071A<FD@0V]R<"X-"E!R;V=R86T@:6X@<'5B;&EC(&1O;6%I;BX@ XM($YO="!F;W(@<V%L90T*57-E("(M:"(@;VX@=&AE(&-O;6UA;F0@;&EN92!F XM;W(@:&5L<"X-"B0Q+GAT;0 X2 X Xend END_OF_FILE if test 4083 -ne `wc -c <'pf-bootstrap-v1.1a/pf-cmds/xterm2.com.uue'`; then echo shar: \"'pf-bootstrap-v1.1a/pf-cmds/xterm2.com.uue'\" unpacked with wrong size! fi # end of 'pf-bootstrap-v1.1a/pf-cmds/xterm2.com.uue' fi if test -f 'pf-bootstrap-v1.1a/tipx-p1/Makefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'pf-bootstrap-v1.1a/tipx-p1/Makefile'\" else echo shar: Extracting \"'pf-bootstrap-v1.1a/tipx-p1/Makefile'\" \(3617 characters\) sed "s/^X//" >'pf-bootstrap-v1.1a/tipx-p1/Makefile' <<'END_OF_FILE' X# X# Copyright (c) 1988 The Regents of the University of California. X# All rights reserved. X# X# Redistribution and use in source and binary forms are permitted X# provided that the above copyright notice and this paragraph are X# duplicated in all such forms and that any documentation, X# advertising materials, and other materials related to such X# distribution and use acknowledge that the software was developed X# by the University of California, Berkeley. The name of the X# University may not be used to endorse or promote products derived X# from this software without specific prior written permission. X# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR X# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED X# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. X# X# This makefile is for tip2, an enhanced tip based on the Berkeley X# 4.3 tip available from uunet's ftp communications directory. X# X# @(#)Makefile 5.6 (Berkeley) 9/28/88 X# X# make file for intermachine communications package X# X# Files are: X# /etc/remote remote host description file X# /etc/phones phone number file, owned by ${OWNER} and X# mode 6?? X# ${ADM}/aculog ACU accounting file, owned by ${OWNER} and X# mode 6?? {if ACULOG defined} X# Presently supports: X# BIZCOMP X# DEC DF02-AC, DF03-AC X# DEC DN-11/Able Quadracall X# HAYES and Hayes emulators X# USR COURIER (2400 baud) X# VENTEL 212+ X# VADIC 831 RS232 adaptor X# VADIC 3451 X# Hayes Smartmodem 2400 X# Telebit Trailblazer X# (drivers are located in libacu.a) X# X# Configuration defines: X# DF02, DF03, DN11 ACU's supported X# BIZ1031, BIZ1022, VENTEL, V831, V3451, HAYES, COURIER X# SM2400, TELEBIT X# ACULOG turn on tip logging of ACU use X# PRISTINE no phone #'s put in ACU log file X# CONNECT worthless command X# DEFBR default baud rate to make connection at X# DEFFS default frame size for FTP buffering of X# writes on local side X# BUFSIZ buffer sizing from stdio, must be fed X# explicitly to remcap.c if not 1024 X# STREAMS system has streams tty interface (SunOS 4.0) X# CC=gcc -traditional XADM= usr/adm XCONFIG= -DSM2400 -DTELEBIT XCFLAGS= -O -DDEFBR=9600 -DDEFFS=BUFSIZ -DCONNECT -DTIPX -DSTREAMS XLIBC= /lib/libc.a XSRCS= acu.c acutab.c cmds.c cmdtab.c cu.c hunt.c log.c login.c partab.c \ X remcap.c remote.c tip.c tipout.c uucplock.c value.c vars.c \ X page.c slip.c XOBJS= acu.o acutab.o cmds.o cmdtab.o cu.o hunt.o log.o login.o partab.o \ X remcap.o remote.o tip.o tipout.o uucplock.o value.o vars.o \ X page.o slip.o XMAN= tip.1 X Xall: libacu/libacu.a tipx X Xtipx: ${OBJS} ${LIBC} X ${CC} -o $@ ${OBJS} libacu/libacu.a X X# acutab is configuration dependent, and so depends on the makefile Xacutab.o: Makefile Xacutab.o: acutab.c X ${CC} -c ${CFLAGS} ${CONFIG} acutab.c X X# remote.o depends on the makefile because of DEFBR and DEFFS X# log.o depends on the makefile because of ACULOG Xlog.o remote.o: Makefile X Xlibacu/libacu.a: FRC X cd libacu; make ${MFLAGS} X Xclean: X rm -f ${OBJS} core tip X cd libacu; make ${MFLAGS} clean X Xcleandir: clean X rm -f ${MAN} tags .depend X cd libacu; make ${MFLAGS} cleandir X Xdepend: X mkdep ${CFLAGS} ${SRCS} X cd libacu; make ${MFLAGS} depend X Xinstall: ${MAN} X cd libacu; make ${MFLAGS} install X install -s -o root -g daemon -m 6711 tip ${DESTDIR}/usr/bin/tip X rm -f ${DESTDIR}/usr/bin/cu X ln ${DESTDIR}/usr/bin/tip ${DESTDIR}/usr/bin/cu X install -c -o bin -g bin -m 444 tip.1 ${DESTDIR}/usr/man/man1 X rm -f ${DESTDIR}/usr/man/man1/cu.1 X ln ${DESTDIR}/usr/man/tip1/tip.1 ${DESTDIR}/usr/man/cat1/cu.1 X Xlint: ${SRCS} X lint ${CFLAGS} ${SRCS} X Xtags: ${SRCS} X ctags ${SRCS} X cd libacu; make ${MFLAGS} tags X XFRC: END_OF_FILE if test 3617 -ne `wc -c <'pf-bootstrap-v1.1a/tipx-p1/Makefile'`; then echo shar: \"'pf-bootstrap-v1.1a/tipx-p1/Makefile'\" unpacked with wrong size! fi # end of 'pf-bootstrap-v1.1a/tipx-p1/Makefile' fi if test -f 'pf-bootstrap-v1.1a/tipx-p1/acu.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'pf-bootstrap-v1.1a/tipx-p1/acu.c'\" else echo shar: Extracting \"'pf-bootstrap-v1.1a/tipx-p1/acu.c'\" \(4455 characters\) sed "s/^X//" >'pf-bootstrap-v1.1a/tipx-p1/acu.c' <<'END_OF_FILE' X/* X * Copyright (c) 1983 The Regents of the University of California. X * All rights reserved. X * X * Redistribution and use in source and binary forms are permitted X * provided that the above copyright notice and this paragraph are X * duplicated in all such forms and that any documentation, X * advertising materials, and other materials related to such X * distribution and use acknowledge that the software was developed X * by the University of California, Berkeley. The name of the X * University may not be used to endorse or promote products derived X * from this software without specific prior written permission. X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR X * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. X */ X X#ifndef lint Xstatic char sccsid[] = "@(#)acu.c 5.6 (Berkeley) 9/2/88"; X#endif /* not lint */ X X#include "tip.h" X Xstatic acu_t *acu = NOACU; Xstatic int conflag; Xstatic sigfunc_t acuabort(); Xstatic acu_t *acutype(); Xstatic jmp_buf jmpbuf; X/* X * Establish connection for tip X * X * If DU is true, we should dial an ACU whose type is AT. X * The phone numbers are in PN, and the call unit is in CU. X * X * If the PN is an '@', then we consult the PHONES file for X * the phone numbers. This file is /etc/phones, unless overriden X * by an exported shell variable. X * X * The data base files must be in the format: X * host-name[ \t]*phone-number X * with the possibility of multiple phone numbers X * for a single host acting as a rotary (in the order X * found in the file). X */ Xchar * Xlconnect() X{ X register char *cp = PN; X char *phnum, string[256]; X FILE *fd; X int tried = 0; X X if (!DU) { /* regular connect message */ X if (CM != NOSTR) X pwrite(FD, CM, size(CM)); X logent(value(HOST), "", DV, "call completed"); X return (NOSTR); X } X /* X * @ =>'s use data base in PHONES environment variable X * otherwise, use /etc/phones X */ X signal(SIGINT, acuabort); X signal(SIGQUIT, acuabort); X if (setjmp(jmpbuf)) { X signal(SIGINT, SIG_IGN); X signal(SIGQUIT, SIG_IGN); X printf("\ncall aborted\n"); X logent(value(HOST), "", "", "call aborted"); X if (slip) X abort_slip(); X if (acu != NOACU) { X boolean(value(VERBOSE)) = FALSE; X if (conflag) X disconnect(NOSTR); X else X (*acu->acu_abort)(); X } X return ("interrupt"); X } X if ((acu = acutype(AT)) == NOACU) X return ("unknown ACU type"); X if (*cp != '@') { X while (*cp) { X for (phnum = cp; *cp && *cp != ','; cp++) X ; X if (*cp) X *cp++ = '\0'; X X if (conflag = (*acu->acu_dialer)(phnum, CU)) { X logent(value(HOST), phnum, acu->acu_name, X "call completed"); X return (NOSTR); X } else X logent(value(HOST), phnum, acu->acu_name, X "call failed"); X tried++; X } X } else { X if ((fd = fopen(PH, "r")) == NOFILE) { X printf("%s: ", PH); X return ("can't open phone number file"); X } X while (fgets(string, sizeof(string), fd) != NOSTR) { X for (cp = string; !any(*cp, " \t\n"); cp++) X ; X if (*cp == '\n') { X fclose(fd); X return ("unrecognizable host name"); X } X *cp++ = '\0'; X if (strcmp(string, value(HOST))) X continue; X while (any(*cp, " \t")) X cp++; X if (*cp == '\n') { X fclose(fd); X return ("missing phone number"); X } X for (phnum = cp; *cp && *cp != ',' && *cp != '\n'; cp++) X ; X if (*cp) X *cp++ = '\0'; X X if (conflag = (*acu->acu_dialer)(phnum, CU)) { X fclose(fd); X logent(value(HOST), phnum, acu->acu_name, X "call completed"); X return (NOSTR); X } else X logent(value(HOST), phnum, acu->acu_name, X "call failed"); X tried++; X } X fclose(fd); X } X if (!tried) X logent(value(HOST), "", acu->acu_name, "missing phone number"); X else X (*acu->acu_abort)(); X return (tried ? "call failed" : "missing phone number"); X} X Xdisconnect(reason) X char *reason; X{ X if (!conflag) { X logent(value(HOST), "", DV, "call terminated"); X return; X } X if (reason == NOSTR) { X logent(value(HOST), "", acu->acu_name, "call terminated"); X if (boolean(value(VERBOSE))) X printf("\r\ndisconnecting..."); X } else X logent(value(HOST), "", acu->acu_name, reason); X (*acu->acu_disconnect)(); X} X Xstatic sigfunc_t Xacuabort(s) X{ X signal(s, SIG_IGN); X longjmp(jmpbuf, 1); X} X Xstatic acu_t * Xacutype(s) X register char *s; X{ X register acu_t *p; X extern acu_t acutable[]; X X for (p = acutable; p->acu_name != '\0'; p++) X if (!strcmp(s, p->acu_name)) X return (p); X return (NOACU); X} END_OF_FILE if test 4455 -ne `wc -c <'pf-bootstrap-v1.1a/tipx-p1/acu.c'`; then echo shar: \"'pf-bootstrap-v1.1a/tipx-p1/acu.c'\" unpacked with wrong size! fi # end of 'pf-bootstrap-v1.1a/tipx-p1/acu.c' fi if test -f 'pf-bootstrap-v1.1a/tipx-p1/libacu/biz31.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'pf-bootstrap-v1.1a/tipx-p1/libacu/biz31.c'\" else echo shar: Extracting \"'pf-bootstrap-v1.1a/tipx-p1/libacu/biz31.c'\" \(4460 characters\) sed "s/^X//" >'pf-bootstrap-v1.1a/tipx-p1/libacu/biz31.c' <<'END_OF_FILE' X/* X * Copyright (c) 1983 The Regents of the University of California. X * All rights reserved. X * X * Redistribution and use in source and binary forms are permitted X * provided that the above copyright notice and this paragraph are X * duplicated in all such forms and that any documentation, X * advertising materials, and other materials related to such X * distribution and use acknowledge that the software was developed X * by the University of California, Berkeley. The name of the X * University may not be used to endorse or promote products derived X * from this software without specific prior written permission. X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR X * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. X */ X X#ifndef lint Xstatic char sccsid[] = "@(#)biz31.c 5.2 (Berkeley) 9/13/88"; X#endif /* not lint */ X X#include "tip.h" X X#define MAXRETRY 3 /* sync up retry count */ X#define DISCONNECT_CMD "\21\25\11\24" /* disconnection string */ X Xstatic int sigALRM(); Xstatic int timeout = 0; Xstatic jmp_buf timeoutbuf; X X/* X * Dial up on a BIZCOMP Model 1031 with either X * tone dialing (mod = "f") X * pulse dialing (mod = "w") X */ Xstatic int Xbiz_dialer(num, mod) X char *num, *mod; X{ X register int connected = 0; X X if (!bizsync(FD)) { X logent(value(HOST), "", "biz", "out of sync"); X printf("bizcomp out of sync\n"); X delock(uucplock); X exit(0); X } X if (boolean(value(VERBOSE))) X printf("\nstarting call..."); X echo("#\rk$\r$\n"); /* disable auto-answer */ X echo("$>$.$ #\r"); /* tone/pulse dialing */ X echo(mod); X echo("$\r$\n"); X echo("$>$.$ #\re$ "); /* disconnection sequence */ X echo(DISCONNECT_CMD); X echo("\r$\n$\r$\n"); X echo("$>$.$ #\rr$ "); /* repeat dial */ X echo(num); X echo("\r$\n"); X if (boolean(value(VERBOSE))) X printf("ringing..."); X /* X * The reply from the BIZCOMP should be: X * `^G NO CONNECTION\r\n^G\r\n' failure X * ` CONNECTION\r\n^G' success X */ X connected = detect(" "); X#ifdef ACULOG X if (timeout) { X char line[80]; X X sprintf(line, "%d second dial timeout", X number(value(DIALTIMEOUT))); X logent(value(HOST), num, "biz", line); X } X#endif X if (!connected) X flush(" NO CONNECTION\r\n\07\r\n"); X else X flush("CONNECTION\r\n\07"); X if (timeout) X biz31_disconnect(); /* insurance */ X return (connected); X} X Xbiz31w_dialer(num, acu) X char *num, *acu; X{ X X return (biz_dialer(num, "w")); X} X Xbiz31f_dialer(num, acu) X char *num, *acu; X{ X X return (biz_dialer(num, "f")); X} X Xbiz31_disconnect() X{ X X write(FD, DISCONNECT_CMD, 4); X sleep(2); X ioctl(FD, TIOCFLUSH); X} X Xbiz31_abort() X{ X X write(FD, "\33", 1); X} X Xstatic int Xecho(s) X register char *s; X{ X char c; X X while (c = *s++) switch (c) { X X case '$': X read(FD, &c, 1); X s++; X break; X X case '#': X c = *s++; X write(FD, &c, 1); X break; X X default: X write(FD, &c, 1); X read(FD, &c, 1); X } X} X Xstatic int XsigALRM() X{ X X timeout = 1; X longjmp(timeoutbuf, 1); X} X Xstatic int Xdetect(s) X register char *s; X{ X char c; X sigfunc_t (*f)(); X X f = signal(SIGALRM, sigALRM); X timeout = 0; X while (*s) { X if (setjmp(timeoutbuf)) { X printf("\07timeout waiting for reply\n"); X biz31_abort(); X break; X } X alarm(number(value(DIALTIMEOUT))); X read(FD, &c, 1); X alarm(0); X if (c != *s++) X break; X } X signal(SIGALRM, f); X return (timeout == 0); X} X Xstatic int Xflush(s) X register char *s; X{ X char c; X sigfunc_t (*f)(); X X f = signal(SIGALRM, sigALRM); X while (*s++) { X if (setjmp(timeoutbuf)) X break; X alarm(10); X read(FD, &c, 1); X alarm(0); X } X signal(SIGALRM, f); X timeout = 0; /* guard against disconnection */ X} X X/* X * This convoluted piece of code attempts to get X * the bizcomp in sync. If you don't have the capacity or nread X * call there are gory ways to simulate this. X */ Xstatic int Xbizsync(fd) X{ X#ifdef FIOCAPACITY X struct capacity b; X# define chars(b) ((b).cp_nbytes) X# define IOCTL FIOCAPACITY X#endif X#ifdef FIONREAD X long b; X# define chars(b) (b) X# define IOCTL FIONREAD X#endif X register int already = 0; X char buf[10]; X Xretry: X if (ioctl(fd, IOCTL, (caddr_t)&b) >= 0 && chars(b) > 0) X ioctl(fd, TIOCFLUSH); X write(fd, "\rp>\r", 4); X sleep(1); X if (ioctl(fd, IOCTL, (caddr_t)&b) >= 0) { X if (chars(b) != 10) { X nono: X if (already > MAXRETRY) X return (0); X write(fd, DISCONNECT_CMD, 4); X sleep(2); X already++; X goto retry; X } else { X read(fd, buf, 10); X if (strncmp(buf, "p >\r\n\r\n>", 8)) X goto nono; X } X } X return (1); X} END_OF_FILE if test 4460 -ne `wc -c <'pf-bootstrap-v1.1a/tipx-p1/libacu/biz31.c'`; then echo shar: \"'pf-bootstrap-v1.1a/tipx-p1/libacu/biz31.c'\" unpacked with wrong size! fi # end of 'pf-bootstrap-v1.1a/tipx-p1/libacu/biz31.c' fi if test -f 'pf-bootstrap-v1.1a/tipx-p1/libacu/v3451.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'pf-bootstrap-v1.1a/tipx-p1/libacu/v3451.c'\" else echo shar: Extracting \"'pf-bootstrap-v1.1a/tipx-p1/libacu/v3451.c'\" \(3947 characters\) sed "s/^X//" >'pf-bootstrap-v1.1a/tipx-p1/libacu/v3451.c' <<'END_OF_FILE' X/* X * Copyright (c) 1983 The Regents of the University of California. X * All rights reserved. X * X * Redistribution and use in source and binary forms are permitted X * provided that the above copyright notice and this paragraph are X * duplicated in all such forms and that any documentation, X * advertising materials, and other materials related to such X * distribution and use acknowledge that the software was developed X * by the University of California, Berkeley. The name of the X * University may not be used to endorse or promote products derived X * from this software without specific prior written permission. X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR X * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. X */ X X#ifndef lint Xstatic char sccsid[] = "@(#)v3451.c 5.2 (Berkeley) 9/13/88"; X#endif /* not lint */ X X/* X * Routines for calling up on a Vadic 3451 Modem X */ X#include "tip.h" X Xstatic jmp_buf Sjbuf; X Xv3451_dialer(num, acu) X register char *num; X char *acu; X{ X int ok; X sigfunc_t (*func)(); X int slow = number(value(BAUDRATE)) < 1200, rw = 2; X char phone[50]; X#ifdef ACULOG X char line[80]; X#endif X X /* X * Get in synch X */ X vawrite("I\r", 1 + slow); X vawrite("I\r", 1 + slow); X vawrite("I\r", 1 + slow); X vawrite("\005\r", 2 + slow); X if (!expect("READY")) { X printf("can't synchronize with vadic 3451\n"); X#ifdef ACULOG X logent(value(HOST), num, "vadic", "can't synch up"); X#endif X return (0); X } X ioctl(FD, TIOCHPCL, 0); X sleep(1); X vawrite("D\r", 2 + slow); X if (!expect("NUMBER?")) { X printf("Vadic will not accept dial command\n"); X#ifdef ACULOG X logent(value(HOST), num, "vadic", "will not accept dial"); X#endif X return (0); X } X strcpy(phone, num); X strcat(phone, "\r"); X vawrite(phone, 1 + slow); X if (!expect(phone)) { X printf("Vadic will not accept phone number\n"); X#ifdef ACULOG X logent(value(HOST), num, "vadic", "will not accept number"); X#endif X return (0); X } X func = signal(SIGINT,SIG_IGN); X /* X * You cannot interrupt the Vadic when its dialing; X * even dropping DTR does not work (definitely a X * brain damaged design). X */ X vawrite("\r", 1 + slow); X vawrite("\r", 1 + slow); X if (!expect("DIALING:")) { X printf("Vadic failed to dial\n"); X#ifdef ACULOG X logent(value(HOST), num, "vadic", "failed to dial"); X#endif X return (0); X } X if (boolean(value(VERBOSE))) X printf("\ndialing..."); X ok = expect("ON LINE"); X signal(SIGINT, func); X if (!ok) { X printf("call failed\n"); X#ifdef ACULOG X logent(value(HOST), num, "vadic", "call failed"); X#endif X return (0); X } X ioctl(FD, TIOCFLUSH, &rw); X return (1); X} X Xv3451_disconnect() X{ X X close(FD); X} X Xv3451_abort() X{ X X close(FD); X} X Xstatic Xvawrite(cp, delay) X register char *cp; X int delay; X{ X X for (; *cp; sleep(delay), cp++) X write(FD, cp, 1); X} X Xstatic Xexpect(cp) X register char *cp; X{ X char buf[300]; X register char *rp = buf; X int alarmtr(), timeout = 30, online = 0; X X if (strcmp(cp, "\"\"") == 0) X return (1); X *rp = 0; X /* X * If we are waiting for the Vadic to complete X * dialing and get a connection, allow more time X * Unfortunately, the Vadic times out 24 seconds after X * the last digit is dialed X */ X online = strcmp(cp, "ON LINE") == 0; X if (online) X timeout = number(value(DIALTIMEOUT)); X signal(SIGALRM, alarmtr); X if (setjmp(Sjbuf)) X return (0); X alarm(timeout); X while (notin(cp, buf) && rp < buf + sizeof (buf) - 1) { X if (online && notin("FAILED CALL", buf) == 0) X return (0); X if (read(FD, rp, 1) < 0) { X alarm(0); X return (0); X } X if (*rp &= 0177) X rp++; X *rp = '\0'; X } X alarm(0); X return (1); X} X Xstatic Xalarmtr() X{ X X longjmp(Sjbuf, 1); X} X Xstatic Xnotin(sh, lg) X char *sh, *lg; X{ X X for (; *lg; lg++) X if (prefix(sh, lg)) X return (0); X return (1); X} X Xstatic Xprefix(s1, s2) X register char *s1, *s2; X{ X register char c; X X while ((c = *s1++) == *s2++) X if (c == '\0') X return (1); X return (c == '\0'); X} END_OF_FILE if test 3947 -ne `wc -c <'pf-bootstrap-v1.1a/tipx-p1/libacu/v3451.c'`; then echo shar: \"'pf-bootstrap-v1.1a/tipx-p1/libacu/v3451.c'\" unpacked with wrong size! fi # end of 'pf-bootstrap-v1.1a/tipx-p1/libacu/v3451.c' fi if test -f 'pf-bootstrap-v1.1a/tipx-p1/remote.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'pf-bootstrap-v1.1a/tipx-p1/remote.c'\" else echo shar: Extracting \"'pf-bootstrap-v1.1a/tipx-p1/remote.c'\" \(4312 characters\) sed "s/^X//" >'pf-bootstrap-v1.1a/tipx-p1/remote.c' <<'END_OF_FILE' X/* X * Copyright (c) 1983 The Regents of the University of California. X * All rights reserved. X * X * Redistribution and use in source and binary forms are permitted X * provided that the above copyright notice and this paragraph are X * duplicated in all such forms and that any documentation, X * advertising materials, and other materials related to such X * distribution and use acknowledge that the software was developed X * by the University of California, Berkeley. The name of the X * University may not be used to endorse or promote products derived X * from this software without specific prior written permission. X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR X * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. X */ X X#ifndef lint Xstatic char sccsid[] = "@(#)remote.c 5.4 (Berkeley) 9/2/88"; X#endif /* not lint */ X X# include "tip.h" X X/* X * Attributes to be gleened from remote host description X * data base. X */ Xstatic char **caps[] = { X &AT, &DV, &CM, &CU, &EL, &IE, &OE, &PN, &PR, X &DI, &ES, &EX, &FO, &RC, &RE, &PA, &SA, &DA, X &SM, &ST, &LS X}; X Xstatic char *capstrings[] = { X "at", "dv", "cm", "cu", "el", "ie", "oe", "pn", "pr", X "di", "es", "ex", "fo", "rc", "re", "pa", "sa", "da", X "sm", "st", "ls", 0 X}; X Xchar *rgetstr(); X Xstatic Xgetremcap(host) X register char *host; X{ X int stat; X char tbuf[BUFSIZ]; X static char buf[BUFSIZ/2]; X char *bp = buf; X register char **p, ***q; X X if ((stat = rgetent(tbuf, host)) <= 0) { X if (DV || X host[0] == '/' && access(DV = host, R_OK | W_OK) == 0) { X CU = DV; X HO = host; X HW = 1; X DU = 0; X if (!BR) X BR = DEFBR; X FS = DEFFS; X return; X } X fprintf(stderr, stat == 0 ? X "tip: unknown host %s\n" : X "tip: can't open host description file\n", host); X exit(3); X } X X for (p = capstrings, q = caps; *p != NULL; p++, q++) X if (**q == NULL) X **q = rgetstr(*p, &bp); X if (!BR && (BR = rgetnum("br")) < 0) X BR = DEFBR; X if ((FS = rgetnum("fs")) < 0) X FS = DEFFS; X if (DU < 0) X DU = 0; X else X DU = rgetflag("du"); X if (DV == NOSTR) { X fprintf(stderr, "%s: missing device spec\n", host); X exit(3); X } X if (DU && CU == NOSTR) X CU = DV; X if (DU && PN == NOSTR) { X fprintf(stderr, "%s: missing phone number\n", host); X exit(3); X } X X HD = rgetflag("hd"); X X /* X * This effectively eliminates the "hw" attribute X * from the description file X */ X if (!HW) X HW = (CU == NOSTR) || (DU && equal(DV, CU)); X HO = host; X /* X * see if uppercase mode should be turned on initially X */ X if (rgetflag("ra")) X boolean(value(RAISE)) = 1; X if (rgetflag("ec")) X boolean(value(ECHOCHECK)) = 1; X if (rgetflag("be")) X boolean(value(BEAUTIFY)) = 1; X if (rgetflag("nb")) X boolean(value(BEAUTIFY)) = 0; X if (rgetflag("sc")) X boolean(value(SCRIPT)) = 1; X if (rgetflag("tb")) X boolean(value(TABEXPAND)) = 1; X if (rgetflag("vb")) X boolean(value(VERBOSE)) = 1; X if (rgetflag("nv")) X boolean(value(VERBOSE)) = 0; X if (rgetflag("ta")) X boolean(value(TAND)) = 1; X if (rgetflag("nt")) X boolean(value(TAND)) = 0; X if (rgetflag("rw")) X boolean(value(RAWFTP)) = 1; X if (rgetflag("hd")) X boolean(value(HALFDUPLEX)) = 1; X if (rgetflag("rt")) X boolean(value(SETROUTE)) = 1; X if (rgetflag("li")) X boolean(value(LINESYNC)) = 1; X if (rgetflag("dt")) X boolean(value(DTRHUP)) =1; X if (RE == NOSTR) X RE = (char *)"tip.record"; X if (EX == NOSTR) X EX = (char *)"\t\n\b\f"; X if (ES != NOSTR) X vstring("es", ES); X if (FO != NOSTR) X vstring("fo", FO); X if (PR != NOSTR) X vstring("pr", PR); X if (RC != NOSTR) X vstring("rc", RC); X if ((DL = rgetnum("dl")) < 0) X DL = 0; X if ((CL = rgetnum("cl")) < 0) X CL = 0; X if ((ET = rgetnum("et")) < 0) X ET = 10; X} X Xchar * Xgetremote(host) X char *host; X{ X register char *cp; X static char *next; X static int lookedup = 0; X X if (!lookedup) { X if (host == NOSTR && (host = getenv("HOST")) == NOSTR) { X fprintf(stderr, "tip: no host specified\n"); X exit(3); X } X getremcap(host); X next = DV; X lookedup++; X } X /* X * We return a new device each time we're called (to allow X * a rotary action to be simulated) X */ X if (next == NOSTR) X return (NOSTR); X if ((cp = index(next, ',')) == NULL) { X DV = next; X next = NOSTR; X } else { X *cp++ = '\0'; X DV = next; X next = cp; X } X return (DV); X} END_OF_FILE if test 4312 -ne `wc -c <'pf-bootstrap-v1.1a/tipx-p1/remote.c'`; then echo shar: \"'pf-bootstrap-v1.1a/tipx-p1/remote.c'\" unpacked with wrong size! fi # end of 'pf-bootstrap-v1.1a/tipx-p1/remote.c' fi if test -f 'pf-bootstrap-v1.1a/tipx-p1/tipout.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'pf-bootstrap-v1.1a/tipx-p1/tipout.c'\" else echo shar: Extracting \"'pf-bootstrap-v1.1a/tipx-p1/tipout.c'\" \(3945 characters\) sed "s/^X//" >'pf-bootstrap-v1.1a/tipx-p1/tipout.c' <<'END_OF_FILE' X/* X * Copyright (c) 1983 The Regents of the University of California. X * All rights reserved. X * X * Redistribution and use in source and binary forms are permitted X * provided that the above copyright notice and this paragraph are X * duplicated in all such forms and that any documentation, X * advertising materials, and other materials related to such X * distribution and use acknowledge that the software was developed X * by the University of California, Berkeley. The name of the X * University may not be used to endorse or promote products derived X * from this software without specific prior written permission. X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR X * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. X */ X/*+:EDITS:*/ X/*:05-08-1990-15:29-wht@n4hgf-rawthru */ X/*:05-08-1990-15:28-wht@n4hgf-mv tipout.c tipout-orig.c */ X X#ifndef lint Xstatic char sccsid[] = "@(#)tipout.c 5.2 (Berkeley) 9/2/88"; X#endif /* not lint */ X X#include "tip.h" X/* X * tip X * X * lower fork of tip -- handles passive side X * reading from the remote host X */ X Xstatic jmp_buf sigbuf; X X/* X * TIPOUT wait state routine -- X * sent by TIPIN when it wants to posses the remote host X */ Xsigfunc_t XintIOT() X{ X X write(repdes[1],&ccc,1); X read(fildes[0], &ccc,1); X longjmp(sigbuf, 1); X} X X/* X * Scripting command interpreter -- X * accepts script file name over the pipe and acts accordingly X */ Xsigfunc_t XintEMT() X{ X char c, line[256]; X register char *pline = line; X char reply; X X read(fildes[0], &c, 1); X while (c != '\n') { X *pline++ = c; X read(fildes[0], &c, 1); X } X *pline = '\0'; X if (boolean(value(SCRIPT)) && fscript != NULL) X fclose(fscript); X if (pline == line) { X boolean(value(SCRIPT)) = FALSE; X reply = 'y'; X } else { X if ((fscript = fopen(line, "a")) == NULL) X reply = 'n'; X else { X reply = 'y'; X boolean(value(SCRIPT)) = TRUE; X } X } X write(repdes[1], &reply, 1); X longjmp(sigbuf, 1); X} X Xsigfunc_t XintTERM() X{ X X if (boolean(value(SCRIPT)) && fscript != NULL) X fclose(fscript); X finish(); X} X Xsigfunc_t XintSYS() X{ X X boolean(value(BEAUTIFY)) = !boolean(value(BEAUTIFY)); X longjmp(sigbuf, 1); X} X X#ifdef TIPX Xextern int rawthru; Xsigfunc_t Xint_tipout_rawthru_on() X{ X rawthru = 1; X} Xsigfunc_t Xint_tipout_rawthru_off() X{ X rawthru = 0; X} X#endif /* TIPX */ X X/* X * ****TIPOUT TIPOUT**** X */ Xtipout() X{ X char buf[BUFSIZ]; X register char *cp; X register int cnt; X extern int errno; X int omask; X X signal(SIGINT, SIG_IGN); X signal(SIGQUIT, SIG_IGN); X signal(SIGEMT, intEMT); /* attention from TIPIN */ X signal(SIGTERM, intTERM); /* time to go signal */ X signal(SIGIOT, intIOT); /* scripting going on signal */ X signal(SIGHUP, intTERM); /* for dial-ups */ X signal(SIGSYS, intSYS); /* beautify toggle */ X#ifdef TIPX X signal(SIGUSR1, int_tipout_rawthru_on); X signal(SIGUSR2, int_tipout_rawthru_off); X#endif /* TIPX */ X (void) setjmp(sigbuf); X for (omask = 0;; sigsetmask(omask)) { X cnt = read(FD, buf, BUFSIZ); X if (cnt <= 0) { X /* lost carrier */ X if (cnt < 0 && errno == EIO) { X sigblock(sigmask(SIGTERM)); X intTERM(); X /*NOTREACHED*/ X } X continue; X } X#ifdef TIPX X#define ALLSIGS sigmask(SIGEMT)|sigmask(SIGTERM)|sigmask(SIGIOT)|sigmask(SIGSYS)|sigmask(SIGUSR1)|sigmask(SIGUSR2) X#else /* TIPX */ X#define ALLSIGS sigmask(SIGEMT)|sigmask(SIGTERM)|sigmask(SIGIOT)|sigmask(SIGSYS) X#endif /* TIPX */ X omask = sigblock(ALLSIGS); X#ifdef TIPX X if(!rawthru) X#endif X for (cp = buf; cp < buf + cnt; cp++) X *cp &= 0177; X write(1, buf, cnt); X if (boolean(value(SCRIPT)) && fscript != NULL) { X if (!boolean(value(BEAUTIFY))) { X fwrite(buf, 1, cnt, fscript); X continue; X } X#ifdef TIPX X if(rawthru) X for (cp = buf; cp < buf + cnt; cp++) X *cp &= 0177; X#endif /* TIPX */ X for (cp = buf; cp < buf + cnt; cp++) X if ((*cp >= ' ' && *cp <= '~') || X any(*cp, value(EXCEPTIONS))) X putc(*cp, fscript); X } X } X} END_OF_FILE if test 3945 -ne `wc -c <'pf-bootstrap-v1.1a/tipx-p1/tipout.c'`; then echo shar: \"'pf-bootstrap-v1.1a/tipx-p1/tipout.c'\" unpacked with wrong size! fi # end of 'pf-bootstrap-v1.1a/tipx-p1/tipout.c' fi if test -f 'pf-bootstrap-v1.1a/tipx-p1/vars.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'pf-bootstrap-v1.1a/tipx-p1/vars.c'\" else echo shar: Extracting \"'pf-bootstrap-v1.1a/tipx-p1/vars.c'\" \(4130 characters\) sed "s/^X//" >'pf-bootstrap-v1.1a/tipx-p1/vars.c' <<'END_OF_FILE' X/* X * Copyright (c) 1983 The Regents of the University of California. X * All rights reserved. X * X * Redistribution and use in source and binary forms are permitted X * provided that the above copyright notice and this paragraph are X * duplicated in all such forms and that any documentation, X * advertising materials, and other materials related to such X * distribution and use acknowledge that the software was developed X * by the University of California, Berkeley. The name of the X * University may not be used to endorse or promote products derived X * from this software without specific prior written permission. X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR X * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED X * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. X */ X X#ifndef lint Xstatic char sccsid[] = "@(#)vars.c 5.3 (Berkeley) 9/2/88"; X#endif /* not lint */ X X#include "tip.h" X X/* X * Definition of variables X */ Xvalue_t vtable[] = { X { "beautify", BOOL, (READ|WRITE)<<PUBLIC, X "be", (char *)TRUE }, X { "baudrate", NUMBER|IREMOTE|INIT, (READ<<PUBLIC)|(WRITE<<ROOT), X "ba", (char *)&BR }, X { "dialtimeout",NUMBER, (READ<<PUBLIC)|(WRITE<<ROOT), X "dial", (char *)60 }, X { "eofread", STRING|IREMOTE|INIT, (READ|WRITE)<<PUBLIC, X "eofr", (char *)&IE }, X { "eofwrite", STRING|IREMOTE|INIT, (READ|WRITE)<<PUBLIC, X "eofw", (char *)&OE }, X { "eol", STRING|IREMOTE|INIT, (READ|WRITE)<<PUBLIC, X NOSTR, (char *)&EL }, X { "escape", CHAR, (READ|WRITE)<<PUBLIC, X "es", (char *)'~' }, X { "exceptions", STRING|INIT|IREMOTE, (READ|WRITE)<<PUBLIC, X "ex", (char *)&EX }, X { "force", CHAR, (READ|WRITE)<<PUBLIC, X "fo", (char *)CTRL('p') }, X { "framesize", NUMBER|IREMOTE|INIT, (READ|WRITE)<<PUBLIC, X "fr", (char *)&FS }, X { "host", STRING|IREMOTE|INIT, READ<<PUBLIC, X "ho", (char *)&HO }, X { "log", STRING|INIT, (READ|WRITE)<<ROOT, X NOSTR, "/usr/adm/aculog" }, X { "phones", STRING|INIT|IREMOTE, READ<<PUBLIC, X NOSTR, (char *)&PH }, X { "prompt", CHAR, (READ|WRITE)<<PUBLIC, X "pr", (char *)'\n' }, X { "raise", BOOL, (READ|WRITE)<<PUBLIC, X "ra", (char *)FALSE }, X { "raisechar", CHAR, (READ|WRITE)<<PUBLIC, X "rc", (char *)CTRL('a') }, X { "record", STRING|INIT|IREMOTE, (READ|WRITE)<<PUBLIC, X "rec", (char *)&RE }, X { "remote", STRING|INIT|IREMOTE, READ<<PUBLIC, X NOSTR, (char *)&RM }, X { "script", BOOL, (READ|WRITE)<<PUBLIC, X "sc", (char *)FALSE }, X { "tabexpand", BOOL, (READ|WRITE)<<PUBLIC, X "tab", (char *)FALSE }, X { "verbose", BOOL, (READ|WRITE)<<PUBLIC, X "verb", (char *)FALSE }, X { "SHELL", STRING|ENVIRON|INIT, (READ|WRITE)<<PUBLIC, X NULL, "/bin/sh" }, X { "HOME", STRING|ENVIRON, (READ|WRITE)<<PUBLIC, X NOSTR, NOSTR }, X { "echocheck", BOOL, (READ|WRITE)<<PUBLIC, X "ec", (char *)FALSE }, X { "disconnect", STRING|IREMOTE|INIT, (READ|WRITE)<<PUBLIC, X "di", (char *)&DI }, X { "tandem", BOOL, (READ|WRITE)<<PUBLIC, X "ta", (char *)TRUE }, X { "linedelay", NUMBER|IREMOTE|INIT, (READ|WRITE)<<PUBLIC, X "ldelay", (char *)&DL }, X { "chardelay", NUMBER|IREMOTE|INIT, (READ|WRITE)<<PUBLIC, X "cdelay", (char *)&CL }, X { "etimeout", NUMBER|IREMOTE|INIT, (READ|WRITE)<<PUBLIC, X "et", (char *)&ET }, X { "rawftp", BOOL, (READ|WRITE)<<PUBLIC, X "raw", (char *)FALSE }, X { "halfduplex", BOOL, (READ|WRITE)<<PUBLIC, X "hdx", (char *)FALSE }, X { "localecho", BOOL, (READ|WRITE)<<PUBLIC, X "le", (char *)FALSE }, X { "parity", STRING|INIT|IREMOTE, (READ|WRITE)<<PUBLIC, X "par", (char *)&PA }, X { "slipaddr", STRING|IREMOTE, READ<<PUBLIC, X "sa", (char *)&SA }, X { "destaddr", STRING|IREMOTE, READ<<PUBLIC, X "da", (char *)&DA }, X { "slipmask", STRING|IREMOTE, READ<<PUBLIC, X "sm", (char *)&SM }, X { "sliptype", STRING|IREMOTE, READ<<PUBLIC, X "st", (char *)&ST }, X { "loginscript",STRING|IREMOTE, (READ|WRITE)<<PUBLIC, X "ls", (char *)&LS }, X { "setroute", BOOL, READ<<PUBLIC, X "rt", (char *)FALSE }, X { "linesync", BOOL, (READ|WRITE)<<PUBLIC, X "li", (char *)FALSE }, X { "dtrhup", BOOL, READ<<PUBLIC, X "dt", (char *)FALSE }, X { NOSTR, NULL, NULL, NOSTR, NOSTR } X}; END_OF_FILE if test 4130 -ne `wc -c <'pf-bootstrap-v1.1a/tipx-p1/vars.c'`; then echo shar: \"'pf-bootstrap-v1.1a/tipx-p1/vars.c'\" unpacked with wrong size! fi # end of 'pf-bootstrap-v1.1a/tipx-p1/vars.c' fi if test -f 'pf-bootstrap-v1.1a/xmodem-3.9/misc.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'pf-bootstrap-v1.1a/xmodem-3.9/misc.c'\" else echo shar: Extracting \"'pf-bootstrap-v1.1a/xmodem-3.9/misc.c'\" \(4396 characters\) sed "s/^X//" >'pf-bootstrap-v1.1a/xmodem-3.9/misc.c' <<'END_OF_FILE' X#include "xmodem.h" X X/* Print Help Message */ Xhelp() X { X fprintf(stderr, "Usage: \txmodem "); X fprintf(stderr, "-[rb!rt!ra!sb!st!sa][options] filename\n"); X fprintf(stderr, "Major Commands --"); X fprintf(stderr, "\n\trb <-- Receive Binary"); X fprintf(stderr, "\n\trt <-- Receive Text"); X fprintf(stderr, "\n\tra <-- Receive Apple macintosh text"); X fprintf(stderr, "\n\tsb <-- Send Binary"); X fprintf(stderr, "\n\tst <-- Send Text"); X fprintf(stderr, "\n\tsa <-- Send Apple macintosh text"); X fprintf(stderr, "\nOptions --"); X fprintf(stderr, "\n\ty <-- Use YMODEM Batch Mode on transmit"); X fprintf(stderr, "\n\tg <-- Select YMODEM-G Mode on receive"); X fprintf(stderr, "\n\tm <-- Use MODEM7 Batch Mode on transmit"); X fprintf(stderr, "\n\tk <-- Use 1K packets on transmit"); X fprintf(stderr, "\n\tc <-- Select CRC mode on receive"); X fprintf(stderr, "\n\tt <-- Indicate a TOO BUSY Unix system"); X fprintf(stderr, "\n\td <-- Delete xmodem.log file before starting"); X fprintf(stderr, "\n\tl <-- (ell) Turn OFF Log File Entries"); X fprintf(stderr, "\n\tx <-- Include copious debugging information in log file"); X fprintf(stderr, "\n\tp <-- Use with SunOS tip ~C command"); X fprintf(stderr, "\n\tw <-- Wait before initial handshake"); X fprintf(stderr, "\n\te <-- Supress EOT confirmation"); X fprintf(stderr, "\n\tn <-- Allow mid-transfer CAN-CAN aborts"); X fprintf(stderr, "\n"); X } X X/* get type of transmission requested (text or binary) */ Xgettype(ichar) Xchar ichar; X { X if (ichar == 't' || ichar == 'T') X return('t'); X else if (ichar == 'b' || ichar == 'B') X return('b'); X else if (ichar == 'a' || ichar == 'A') X return('a'); X else X error("Invalid Send/Receive Parameter - not t or b", FALSE); X return('\0'); X } X X/* return a string containing transmission type */ Xchar * Xprtype(ichar) Xchar ichar; X { X if (ichar == 't' || ichar == 'T') X return("text"); X else if (ichar == 'b' || ichar == 'B') X return("binary"); X else if (ichar == 'a' || ichar == 'A') X return("apple"); X else X return(""); X } X X/* print error message and exit; if mode == TRUE, restore normal tty modes */ Xerror(msg, mode) Xchar *msg; Xint mode; X { X if (mode) X restoremodes(TRUE); /* put back normal tty modes */ X fprintf(stderr, "\r\n%s\n", msg); X if ((LOGFLAG || DEBUG) && (LOGFP != NULL)) X { X fprintf(LOGFP, "XMODEM Fatal Error: %s\n", msg); X fclose(LOGFP); X } X exit(-1); X } X X X/* Construct a proper (i.e. pretty) sector count for messages */ X Xchar X*sectdisp(recvsectcnt, bufsize, plus1) Xlong recvsectcnt; Xint bufsize, plus1; X { X static char string[20]; X if (plus1) X recvsectcnt += (bufsize == 128) ? 1 : 8; X if (bufsize == 128 || recvsectcnt == 0) X sprintf (string, "%d", recvsectcnt); X else X sprintf (string, "%d-%d", recvsectcnt-7, recvsectcnt); X return(string); X } X X/* type out debugging info */ Xxmdebug(str) Xchar *str; X { X if (DEBUG && (LOGFP != NULL)) X fprintf(LOGFP,"DEBUG: '%s'\n",str); X } X X/* print elapsed time and rate of transfer in logfile */ X Xint quant[] = { 60, 60, 24}; Xchar sep[3][10] = { "second", "minute", "hour" }; X Xprtime (numsect, seconds, fileid) Xlong numsect; Xtime_t seconds; XFILE *fileid; X X{ X register int i; X register int Seconds; X int nums[3]; X int rate; X X if (numsect == 0) X return(0); X X Seconds = (int)seconds; X Seconds = (Seconds > 0) ? Seconds : 0; X X rate = (Seconds != 0) ? 128 * numsect/Seconds : 0; X X for (i=0; i<3; i++) { X nums[i] = (Seconds % quant[i]); X Seconds /= quant[i]; X } X X fprintf (fileid, "%ld Sectors Transfered in ", numsect); X X if (rate == 0) X fprintf (fileid, "0 seconds"); X else X while (--i >= 0) X if (nums[i]) X fprintf (fileid, "%d %s%c ", nums[i], &sep[i][0], X nums[i] == 1 ? ' ' : 's'); X fprintf (fileid, "\n"); X X if (rate != 0) X fprintf (fileid, "Transfer Rate = %d Characters per Second\n", rate); X X return(0); X} X X/* Print elapsed time estimate */ X Xprojtime (numsect, fd) Xlong numsect; XFILE *fd; X { X register int i; X register int seconds; X int nums[3]; X X if (numsect == 0) X return (0); X X/* constant below should really be 1280; reduced to 90% to account for time lost in overhead */ X X seconds = 1422 * numsect / ttyspeed + 1; X X for (i=0; i<3; i++) { X nums[i] = (seconds % quant[i]); X seconds /= quant[i]; X } X X fprintf (fd, "Estimated transmission time "); X X while (--i >= 0) X if (nums[i]) X fprintf (fd, "%d %s%c ", nums[i], &sep[i][0], X nums[i] == 1 ? ' ' : 's'); X fprintf (fd, "\n"); X return (0); X } END_OF_FILE if test 4396 -ne `wc -c <'pf-bootstrap-v1.1a/xmodem-3.9/misc.c'`; then echo shar: \"'pf-bootstrap-v1.1a/xmodem-3.9/misc.c'\" unpacked with wrong size! fi # end of 'pf-bootstrap-v1.1a/xmodem-3.9/misc.c' fi if test -f 'pf-bootstrap-v1.1a/xmodem-3.9/xmodem.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'pf-bootstrap-v1.1a/xmodem-3.9/xmodem.h'\" else echo shar: Extracting \"'pf-bootstrap-v1.1a/xmodem-3.9/xmodem.h'\" \(3839 characters\) sed "s/^X//" >'pf-bootstrap-v1.1a/xmodem-3.9/xmodem.h' <<'END_OF_FILE' X#include <ctype.h> X#include <stdio.h> X#include <sys/types.h> X#include <sys/stat.h> X#include <sys/time.h> X#include <sgtty.h> X#include <signal.h> X X/* define macros to print messages in log file */ X#define logit(string) if(LOGFLAG)fprintf(LOGFP,string) X#define logitarg(string,argument) if(LOGFLAG)fprintf(LOGFP,string,argument) X#define tlogit(string) if(TIPFLAG)fprintf(stderr,string) X#define tlogitarg(string,argument) if(TIPFLAG)fprintf(stderr,string,argument) X X#define VERSION "3.9 (November 1990)" X#define FALSE 0 X#define TRUE 1 X X X/* ASCII Constants */ X#define SOH 001 X#define STX 002 X#define ETX 003 X#define EOT 004 X#define ENQ 005 X#define ACK 006 X#define LF 012 /* Unix LF/NL */ X#define CR 015 X#define NAK 025 X#define SYN 026 X#define CAN 030 X#define ESC 033 X X/* XMODEM Constants */ X#define TIMEOUT -1 X#define ERRORMAX 10 /* maximum errors tolerated while transferring a packet */ X#define WAITFIRST 1 /* seconds between startup characters in read */ X#define STERRORMAX 60 /* maximum "errors" tolerated in read startup */ X#define CRCSWMAX 30 /* maximum time to try CRC mode before switching */ X#define NAKMAX 120 /* maximum times to wait for initial NAK when sending */ X#define RETRYMAX 5 /* maximum retries to be made certain handshaking routines */ X#define KSWMAX 5 /* maximum errors before switching to 128 byte packets */ X#define EOTMAX 10 /* maximum times sender will send an EOT to end transfer */ X#define SLEEPNUM 100 /* target number of characters to collect during sleepy time */ X#define BBUFSIZ 1024 /* buffer size */ X#define NAMSIZ 11 /* length of a CP/M file name string */ X#define CTRLZ 032 /* CP/M EOF for text (usually!) */ X#define CRCCHR 'C' /* CRC request character */ X#define KCHR 'K' /* 1K block request character */ X#define GCHR 'G' /* Ymodem-G request character */ X#define BAD_NAME 'u' /* Bad filename indicator */ X#define TIPDELAY 15 /* seconds to delay handshake startup when -w */ X X#define CREATMODE 0644 /* mode for created files */ X X/* GLOBAL VARIABLES */ X Xint ttyspeed; /* tty speed (bits per second) */ Xunsigned char buff[BBUFSIZ]; /* buffer for data */ Xint nbchr; /* number of chars read so far for buffered read */ Xlong filelength; /* length specified in YMODEM header */ Xlong fileread; /* characters actually read so far in file */ Xchar filename[256]; /* place to construct filenames */ Xint yfilesleft; /* # of files left for YMODEM header */ Xlong ytotleft; /* # of bytes left for YMODEM header */ X XFILE *LOGFP; /* descriptor for LOG file */ X X/* option flags and state variables */ Xchar XMITTYPE; /* text or binary? */ Xint DEBUG; /* keep debugging info in log? */ Xint RECVFLAG; /* receive? */ Xint SENDFLAG; /* send? */ Xint BATCH; /* batch? (Now used as a state variable) */ Xint CRCMODE; /* CRC or checksums? */ Xint DELFLAG; /* don't delete old log file? */ Xint LOGFLAG; /* keep log? */ Xint LONGPACK; /* do not use long packets on transmit? */ Xint MDM7BAT; /* MODEM7 batch protocol */ Xint YMDMBAT; /* YMODEM batch protocol */ Xint TOOBUSY; /* turn off sleeping in packet read routine */ Xint TIPFLAG; /* for tip ~C command */ Xint DELAYFLAG; /* for startup delay */ Xint NOEOT; /* suppress EOT verification */ Xint CANCAN; /* allow CAN-CAN aborts anytime */ Xint YMODEMG; /* YMODEM-G variant of YMODEM */ X Xint CHECKLENGTH; /* Are we truncating a file to a YMODEM length? */ X X X/* CRC-16 constants. From Usenet contribution by Mark G. Mendel, X Network Systems Corp. (ihnp4!umn-cs!hyper!mark) X*/ X X /* the CRC polynomial. */ X#define P 0x1021 X X /* number of bits in CRC */ X#define W 16 X X /* the number of bits per char */ X#define B 8 END_OF_FILE if test 3839 -ne `wc -c <'pf-bootstrap-v1.1a/xmodem-3.9/xmodem.h'`; then echo shar: \"'pf-bootstrap-v1.1a/xmodem-3.9/xmodem.h'\" unpacked with wrong size! fi # end of 'pf-bootstrap-v1.1a/xmodem-3.9/xmodem.h' fi echo shar: End of archive 2 \(of 9\). cp /dev/null ark2isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 9 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0