545 lines
20 KiB
Plaintext
545 lines
20 KiB
Plaintext
This is the PUP.DOC file from T. Jennings' *new* PUPPY program;
|
|
it has to be compiled with a C compiler; thought I'd let you all
|
|
know about it in case anyone wants to investigate the Fidonetwork's
|
|
new PUPPY!
|
|
|
|
T. Jennings
|
|
Fido Software
|
|
164 Shipley
|
|
San Francisco CA 94107
|
|
|
|
document updated: 10 Dec 87
|
|
|
|
|
|
Puppy
|
|
|
|
Pup is a very modest project: it is a very small scale
|
|
bulletin board, targeted mainly for the current low-end type
|
|
machines; Z80, 64K, maybe 500K disk storage, primitive DOS.
|
|
It of course works fine on MSDOS; there is a pclone version
|
|
available. (Ask)
|
|
|
|
By Jan/Feb of 88, Pup will have a full featured FidoNet
|
|
compatible network interface. The design is complete, and
|
|
some code is done.
|
|
|
|
|
|
While the pclone version is where new things get tested, it
|
|
is NOT the point of Pup. There are already more than enough
|
|
pclone BBSs to choose from; Pup however would fit very
|
|
comfortably into the smallest possible pclone these days.
|
|
|
|
BBSs have escalated in complexity way out of proportion to
|
|
their usefulness; most BBSs are used by highly skilled
|
|
people with lots of resource$ to talk to people like
|
|
themselves. This is fine, but most of the world isn't in the
|
|
position to sit $1,000 (or more!) in a corner of the room
|
|
for one special purpose only.
|
|
|
|
Also, the trend is towards larger, more complex systems,
|
|
wide area networking, extremely high throughput data
|
|
transfers and other things that just push the likes of Fido,
|
|
Opus, TBBS an order of magnitude or two out of the range of
|
|
many (if not most) people who might benefit from them.
|
|
|
|
Seems we've forgotten that the original intent of BBSs was
|
|
to communicate with other people. It is not obvious to me
|
|
that talking to more people is better. The best BBSs I've
|
|
ever used, of any type, were all very small systems; RCP/Ms,
|
|
Apple][/GBBS, etc. Most used awful software, but were still
|
|
the best (meaning most useful or most amusing) systems I've
|
|
run across. There's a hint there, I think.
|
|
|
|
|
|
I would love to see Pup ported to CP/M (especially: that
|
|
awful Heath/Zenith H-89) and Apple ][ PRODOS or something.
|
|
.pa
|
|
.he Copyrights, trademarks, money, that sort of thing.
|
|
|
|
S H A R E W A R E
|
|
|
|
Puppy is shareware; if you like it or find it or parts of it
|
|
useful, then mail me what you think it's worth. $40 is
|
|
suggested. Less will not be considered an insult. In return,
|
|
I will mail you a diskette with the latest & greatest on it.
|
|
|
|
|
|
-*-*- -*-*- -*-*- -*-*- -*-*- -*-*- -*-*- -*-*- -*-*-
|
|
|
|
PUPPY PRE-RELEASE NOTE: The message base design really
|
|
annoys some people. Instead of the usual linear numbered
|
|
messages, I opted for a stack-like design (see the next page
|
|
or so for details.)
|
|
|
|
I may do another message base that is in the more usual
|
|
linear fashion; it will be fully compatible with the message
|
|
base data files that this Pup generates; only the program
|
|
will change. It's not all that big code-wise, but the Pile
|
|
really bugs some people. I do eventually take hints, so ...
|
|
|
|
-*-*- -*-*- -*-*- -*-*- -*-*- -*-*- -*-*- -*-*- -*-*-
|
|
|
|
Check out the pclone version, show it to people, see what
|
|
your reaction is. It should be portable as-is to small
|
|
machines.
|
|
|
|
OK, down to brass tacks. (What on earth does that mean?) I,
|
|
Tom Jennings, do business as Fido Software, at the address
|
|
below. My commercial products are copyrighted works, and my
|
|
sole source of income. Copyrighted works produced by me will
|
|
be marked as such:
|
|
|
|
Copyright Tom Jennings 1987, etc
|
|
|
|
This is very straightforward. These are commercial products;
|
|
you want, you pay. Or the guy in the big car over there will
|
|
make you pay double later, OK?
|
|
|
|
|
|
Now for years I have been writing programs and distributing
|
|
them, in binary and some in source form, but I've never made
|
|
it very clear what their status was. Partly this is because
|
|
the previous environment (less cutthroat) was more friendly
|
|
and less demanding, and partly because I just wasn't that
|
|
organized. This is to change starting now. (now?)
|
|
|
|
|
|
The following notice will be firmly affixed to all programs
|
|
produced by me that are not commercial copyrighted works.
|
|
Please don't utter the phrase "public domain" because that
|
|
means something awful:
|
|
|
|
(k) All Rights Reversed
|
|
|
|
(all hail Eris) This means: what you do with it is up to
|
|
you. I ask though, that if you distribute it, you provide
|
|
sources as part of the package, at no extra cost or penalty
|
|
or obligation to the person receiving it; and that you also
|
|
do not remove the (k) All Rights Reversed notice. I also ask
|
|
that you don't change the version number, if there is one;
|
|
you will only needlessly confuse people when I come out with
|
|
a new version. Hint: Add your own IDs after it, like "1-AB"
|
|
where "AB" is your version number.
|
|
|
|
|
|
"Fido" is a trademark of Tom Jennings. It you utter it send
|
|
me a dollar. "FidoNet" is a also registered trademark of Tom
|
|
Jennings. If you even think it send me two dollars. If you
|
|
use both, send me ten dollars and your first born child. All
|
|
rights reserved, and all wrongs righted. So there.
|
|
|
|
|
|
|
|
Fido Software
|
|
164 Shipley
|
|
San Francisco CA 94107
|
|
(415)-764-1629, FidoSW, using Fido v12 1:125/111
|
|
(415)-882-9835, ch@os, using Puppy v1
|
|
soon will be known as 1:125/164
|
|
|
|
If you have anything to contribute, please do.
|
|
.pa
|
|
Historical Curiosities: An Editorial
|
|
|
|
A little history is in order here. I, like hundreds of
|
|
others, have been hanging out on BBSs and writing free
|
|
programs since Ward & Randy's CBBS. Nothing new or unique or
|
|
interesting here.
|
|
|
|
Fido, started in 1984, is by far the most popular and well
|
|
known program I have ever produced. To say it exceeded
|
|
anything I ever planned for it is an understatement.
|
|
Requests for diskettes got so heavy that I started charging
|
|
for diskettes; as demand for functions and reliability
|
|
increased, by many hundreds of people, it slowly turned into
|
|
a part-time business.
|
|
|
|
Now it eventually became obvious that this wasn't a typical
|
|
free BBS program, and that others wanted to write FidoNet-
|
|
compatible programs; Thom Henderson had sucessfully gotten
|
|
SeaDog running. An effort went into documenting the protocol
|
|
(Randy Bush did a wonderful job with the FSC001 doc a year
|
|
later) and making structures public, etc. Interface
|
|
information was released with each version, and work was
|
|
started towards the real technical specification,
|
|
culminating in FSC001.
|
|
|
|
Eventually, Fido/FidoNet became a full time job. I now
|
|
derive all of my income from it. (I license Fido/FidoNet to
|
|
mostly small to medium companies and non-military
|
|
governmental agencies.) Because of this, Fido is no longer
|
|
free, starting with version 12. (You can now use previous
|
|
versions for free; v11 manuals once again available for $35)
|
|
|
|
My roots and heart is still in the hobbiest end of things,
|
|
and Fido Software is hardly a traditional software company.
|
|
I am working on new software for hobbiests, both "free" and
|
|
"shareware". I now fund this development from licensing
|
|
Fido, and hopefully other sources in the future. I'm hardly
|
|
getting rich from this, and that's not the point.
|
|
|
|
My goal today is somewhat subversive I suppose; I want to
|
|
see more non-technical people use computers for
|
|
communicating in ways not traditionally though of, and on
|
|
small cheap machines; not by throwing money at high-end
|
|
Pclones or traditional services. (You're supposed to do
|
|
wierd things with computers, that's what they're for!)
|
|
|
|
Traditional media in the U. S. is getting more and more
|
|
restricted to lowest-common-denominator, safe, bland,
|
|
*profitable* mindless pap. (Did you know: only 26
|
|
corporations own 1/2 or more of all media in the US:
|
|
magazines, books, TV, radio, newspapers, etc? Source:
|
|
"Fairness & Accuracy in Reporting", June 87) Individuals and
|
|
small groups running BBSs and writing zines is one way to
|
|
promote free (as in open) communications.
|
|
|
|
Some have asserted that I'm a greedy programmer trying to
|
|
milk money from peoples hobby with Fido (how dare I charge
|
|
money) and that I don't care about much else.
|
|
|
|
I will merely say: I've been writing free software since
|
|
1979, and have had phenomenal, unexpected success with
|
|
Fido/FidoNet, which I have basically given to the world,
|
|
gratis. My attitudes haven't changed much, except to get a
|
|
bit more radical. Time will tell, as it always does.
|
|
|
|
OK, I'll shut up now.
|
|
.pa
|
|
Pup's FidoNet interface
|
|
|
|
Suffice to say at this point, it will be both high
|
|
performance, and will fit very nicely on a 64K Z80 with a
|
|
couple of decent sized floppies.
|
|
|
|
Keep in mind it's not meant to act as a gateway to all of
|
|
Western Europe. You would probably have a hard time even
|
|
making it a Net Host.
|
|
|
|
What it will do though is run up to 16 echo conferences at a
|
|
higher software-performance level available on any machine
|
|
today, period. No space- and time-consuming packeting and
|
|
unpacketing, no external conferencing packages.
|
|
|
|
Use of the nodelist will be optional; for echo conferences,
|
|
only the system information for the next-in-line system
|
|
(Pup, Fido, Opus, etc) is needed.
|
|
|
|
|
|
The method is: on-the-fly packeting and unpacketing. The Pup
|
|
FidoNet code uses XMODEM to send the packet, as per FSC001
|
|
specifications. However, instead of generating a packet file
|
|
ahead of time, then XMODEMing it out, when XMODEM goes to
|
|
"read" a block from the packet file, it uses a state machine
|
|
to generate the data as it goes. Because the message base is
|
|
one contiguous file, with a memory resident index,
|
|
performance is not a problem. This part is already coded.
|
|
|
|
The receiver does a similar thing. As XMODEM receives
|
|
blocks, it would normally write them to a packet file for
|
|
later unpacking into messages. In Pup, the blocks are not
|
|
written to a file, but decomposed byte by byte into the
|
|
message base directly. Again, because of the message base
|
|
design performance isn't an issue.
|
|
|
|
.pa
|
|
Pup the Bulletin Board
|
|
|
|
Pup has all the usual amenities, but it doesn't appear that
|
|
way when you first look at it. There's only ten commands or
|
|
so total.
|
|
|
|
The message base consists of two files, one that contains
|
|
the message body text, and the other is an index with the
|
|
usual TO:, FROM:, etc information, as well as the TOPIC
|
|
information. (More on Topics later.)
|
|
|
|
Pup's message base is created once when SET-PUP is run, and
|
|
never changes in size. (You can set the size of each message
|
|
and the number of messages.) (And later there will be a way
|
|
to change the size, but not right away.) The advantages: it
|
|
never grows to fill your disk; performance is extremely good
|
|
(if you format the disk first, you will be guarenteed that
|
|
all sectors in the file are contiguous); there is no need
|
|
for message base maintenance.
|
|
|
|
(NOTE: See the PRE-RELEASE NOTE mentioned earlier about
|
|
message base paradigm.)
|
|
|
|
Messages are arranged to match my desk: a Pile. I work by
|
|
writing things on these tiny 3 x 5 pads of paper; one note,
|
|
phone number, bug, etc per sheet. I stack 'em up, move them
|
|
around, etc. The one on the top is the newest.
|
|
|
|
Pups messages are in a Pile. When you enter a message, it
|
|
goes on the Top; ones entered before are still there, under
|
|
the top. Eventually, they reach the bottom, then they fall
|
|
off. If you set Pup to have 100 messages, then when you
|
|
enter the 101st message, the first one ever entered falls
|
|
off the bottom.
|
|
|
|
Yeah, its a ring buffer.
|
|
|
|
When you read messages you start, by default, at the Top of
|
|
the Pile. From there you can read messages, one after
|
|
another, until you hit the Bottom. You can of course hop
|
|
around as you wish.
|
|
|
|
Now a huge monolithic messag base isn't much fun to poke
|
|
around in. This is where Topics come in.
|
|
|
|
Pup can have up to 16 topics; you must have at least one.
|
|
Topics are the usual grouping, areas, subjects, that sort of
|
|
thing. In Pup though, instead of rigid barricades that
|
|
messages must be forced within, in Pup you can hop Topics at
|
|
will.
|
|
|
|
When reading messages, you can choose which which topics you
|
|
wish to see, including "all". If you choose one topic, then
|
|
those are the only messages you will see. If you choose
|
|
"all", then you see all messages in all topics; this is nice
|
|
for browsing a board for the first time or two. If you're
|
|
only interested in two or three topics, you can select only
|
|
those and you will see no others.
|
|
|
|
When entering messages, you choose which topic the message
|
|
resides in; one message can also reside in any number of
|
|
topics. Obviously to be use with caution, but great for
|
|
notices and such.
|
|
|
|
|
|
One of the reasons I chose this was because of a common
|
|
problem when using Fido-type message areas; neophyte users
|
|
tend to not change areas, and never become aware of the
|
|
different catagories that may exist. Even sophisticated
|
|
users say "A 5" and therefore won't see if the list of
|
|
message areas has changed.
|
|
|
|
By default, in Pup you see all messages in all topics,
|
|
starting at the newest. If this annoys you, you can use
|
|
choose which topics to see and not see, including "ALL".
|
|
This is the exact opposite of the Fido (and RBBS, Opus, etc)
|
|
philosophy.
|
|
.pa
|
|
Puppy and human callers
|
|
|
|
One of the first things to go in the trash when designing
|
|
Pup was anything relating to "callers". As I see it, caller
|
|
records have the following main purposes:
|
|
|
|
terminal settings (lines, columns, etc)
|
|
where they left off last time
|
|
access controls
|
|
let users see their name in lights
|
|
|
|
I consider all the other junk like help levels, last-
|
|
accessed message area or file areas and times called to be
|
|
design deficiencies (help levels?) or froo-froo (last
|
|
message area).
|
|
|
|
If you need access controls you don't want Puppy. Access
|
|
controls always escalate into huge monstrosities. The
|
|
purpose of Pup is so that people can communicate, in an easy
|
|
to use and effecient manner. It's not an operating system,
|
|
like some BBS installations are approaching.
|
|
|
|
Its a little wierd at first ... but you get used to it. One
|
|
objection that pops to mind is: how do I know that that
|
|
person is who he says he is? Well, you don't. Actually ...
|
|
if you are conversing with someone (not what you call what
|
|
happens when there are 500+ people using a system!) it's
|
|
pretty obvious. Also, it's not much of a challenge and not
|
|
worth the bother of entering stupid messages. Remember also,
|
|
this isn't targeted at the mainstream BBS crowd.
|
|
|
|
How do you run a system then, with upwards of 500 different
|
|
people per month? Get a Fido or other large scale (large
|
|
resource) type program, which fits those sort of
|
|
installations perfectly.
|
|
.pa
|
|
OK, enough: what's on the disk
|
|
|
|
The end result of all the crap in the Pup package is two
|
|
programs and a few support files:
|
|
|
|
PUP.EXE the Pup program
|
|
SET-PUP.EXE the Pup installer
|
|
PUP.SET Pup configuration text file
|
|
FIDO2PUP.EXE Fido to Pup message converter
|
|
|
|
WELCOME.PUP the initial welcome message
|
|
FILES.PUP list of download files
|
|
MAIN.HLP various help files ...
|
|
MESSAGE.HLP ...
|
|
EDIT.HLP ...
|
|
|
|
PUPPY.SYS main system file
|
|
MESSAGE.DAT the message base itself
|
|
MESSAGE.IDX the message bsae index
|
|
|
|
SET-PUP reads the text file PUP.SET and compiles it into the
|
|
PUPPY.SYS file that contains the installation type goodies
|
|
(modem type, node number, limits and controls) and creates
|
|
an empty message base, if one doesn't already exist.
|
|
|
|
PUP is the BBS program, and reads all the other junk.
|
|
|
|
FIDO2PUP puts any Fido .MSG messages into the Pup message
|
|
base, and leaves the highest numbered one as the Top
|
|
message. Gives you something to start with.
|
|
|
|
.pa
|
|
The complete list of files is:
|
|
|
|
Include files:
|
|
ASCII.H
|
|
PUPMEM.H
|
|
PUPPY.H
|
|
DRIVER.H
|
|
LATTICE.ASH
|
|
|
|
Various tools for compilation:
|
|
C.BAT
|
|
PUP MAKE file
|
|
PUP.LNK PLINK command file
|
|
IBM.LIB pclone serial driver library
|
|
DRIVER.DOC Pup/Fido driver specification
|
|
|
|
PUPMAIN.C Pup main() and main loop
|
|
PUP.C Pup commands
|
|
MSGBASE.C the message base system
|
|
FILES.C Pup file commands
|
|
QUOTE.C signon quotations
|
|
SCHED.C the scheduler
|
|
EDIT.C message editor
|
|
XMODEM.C XMODEM/TELINK protocol handler
|
|
MODEMIO.C (not so) low level I/O
|
|
MDMFUNC.C modem drivers
|
|
SUPPORT.C misc. support routines
|
|
PRINTF.C a real printf()
|
|
MS-C.C DOS dependent C routines
|
|
MS-ASM.ASM DOS dependent ASM routines
|
|
ABORT.ASM
|
|
|
|
FIDO2PUP.C Fido msg converter
|
|
SET-PUP.C config program
|
|
|
|
PUP.SET sample config file
|
|
FILES.PUP sample files list
|
|
WELCOME.PUP sample welcome file
|
|
QUOTES.PUP sample quotations
|
|
MAIN.HLP sample help files
|
|
MESSAGE.HLP
|
|
EDIT.HLP
|
|
.pa
|
|
.he Implementation Notes
|
|
|
|
GENERAL
|
|
|
|
Data structures and other definitions of global importance
|
|
to Pup are in PUPPY.H, which is included by all .C files in
|
|
Pup. When you change this file, recompile all modules; the
|
|
make file provided will do this with RMAKE.EXE from Phoenix
|
|
Software.
|
|
|
|
Global static data is defined in PUPMAIN.C, and references
|
|
to it via #extern's are in PUPMEM.H. All sources except
|
|
PUPMAIN.H include PUPMEM.H. It's the easiest way I've found
|
|
to manage external data; the one time it's a pain is if you
|
|
add or delete a global variable (in PUPMAIN.C); you have to
|
|
recompile everything. Oh well.
|
|
|
|
|
|
SERIAL INTERFACE
|
|
|
|
The serial I/O driver provided, IBM.LIB, is for pclones
|
|
only; you will need to write equivelant routines for
|
|
whatever your machine is, even on CP/M. Most are pretty
|
|
simple, and even polled is OK; Pup will even allow typeahead
|
|
on polled machines, due to the lookeahead done in MODEMIO.C.
|
|
|
|
Note that the drivers as defined in DRIVER.DOC are rather
|
|
complex; you don't need anything but the low level serial
|
|
parts. (Poke through MODEMIO) Why not prune DRIVER.DOC and
|
|
pass out a proper version?
|
|
|
|
Pup uses a three or four wire modem installation. It needs:
|
|
|
|
Tx Data obviously
|
|
Rx Data obviously
|
|
Ground obviously
|
|
CD Carrier Detect (pin 6 or 8)
|
|
DTR Data Terminal Ready (pin 20)
|
|
|
|
DTR is optional; see below.
|
|
|
|
Pup has a parameter "cd-bit" in PUP.SET; this is the bit
|
|
mask pup uses to check for CD on the serial port. Pup ANDs
|
|
the contents of the status register with the cd-bit, and if
|
|
the result is not zero, then the modem is assumed to be
|
|
online.
|
|
|
|
CALLER INTERFACE I/O
|
|
|
|
Basically, the I/O system is the same as Fido and has all of
|
|
it's features: full typeahead, output pause (^S, ^Q),
|
|
background abort-detect (^C, ^K), typeahead flush (^F),
|
|
"command-ahead" (ie. "D N FILENAME.EXT X" executes a whole
|
|
download command skipping all the prompts), formatted I/O,
|
|
complete carrier loss detection with no programmatic
|
|
overhead, dead-user timer, full time limit enforcement.
|
|
|
|
In theory, you should never have to mess with anything in
|
|
MODEMIO. And be careful if you do, it's filled with
|
|
recursive and effecient stuff, and I think it's pretty well
|
|
documented. It does a lot just as it stands; it is four
|
|
years accumulated work and experience.
|
|
|
|
|
|
MODEM SUPPORT
|
|
|
|
As implemented, Pup will support just about any Hayes type
|
|
modem. The modem must have a CD (Carrier Detect) line. DTR
|
|
is reccomended, but not required.
|
|
|
|
The initialization specified in PUP.SET should set the modem
|
|
to numeric result codes and autoanswer OFF. Pup answers the
|
|
phone by waiting for a RING result code, then issuing an ATA
|
|
command, and waiting for the CONNECT 1200 (or 2400, etc)
|
|
message, and then assumes it's online and connected. No
|
|
hocus pocus or complicated autobaud.
|
|
|
|
|
|
LITTLE ENDIAN vs. BIG ENDIAN
|
|
|
|
This is the endless "Intel" vs. "Motorola" argument. I
|
|
really don't care either way; neither does Pup. The only
|
|
part that cares about byte order is the FidoNet interface,
|
|
and there you have no choice.
|
|
|
|
The only time this might matter is if you were to generate a
|
|
message base on a Z80 and physically copy it to a 6502
|
|
machine; you'd have to convert byte order. For locally-
|
|
generated data, it's not an issue.
|
|
|
|
|
|
FUNCTION PORTABILITY
|
|
|
|
I tried to keep things down to two kinds of portability
|
|
problems: C language data typing and O/S functionality.
|
|
|
|
On C data types, most things don't care; general purpose
|
|
counters etc are just "int"s, etc. For ones that matter,
|
|
almost all want to be either 8 or 16 bit data. For these, I
|
|
defined two types: BYTE and WORD. In the Lattice 2.12/MSDOS
|
|
version, BYTE is defined as char, and WORD as int. Change
|
|
accordingly to fit your system. These are defined in
|
|
PUPPY.H.
|
|
|
|
|
|
Any/all of you can reach Tom Jennings by dialing his
|
|
BBS number: 415-764-1629
|
|
|
|
Please *do not* send email to me; I haven't compiled the program
|
|
and don't yet know how it works.
|