Digital Archaeology: Floppy Disk #10 – FORMS.DOC


A summary for those that haven’t been keeping up with this series:

I found a number of 5.25″ disks at a thrift store a number of years ago. I finally got around to acquiring a 5.25″ disk drive and extracting the contents a while back. Since then I have been posting the contents here.

Based on the contents, at least some of these disks were apparently once owned by someone named Connie who used to run the “Close Encounters” Special Interest Group (SIG) on Delphi in the mid 1980s.

A specific definition of this SIG was found in a document on one of the disks: “This SIG, known as ‘Close Encounters’, is a forum for the discussion of relationships that develop via computer services like the Source, CompuServe, and Delphi. Our primary emphasis is on the sexual aspects of those relationships.”

This service was text based and was accessed via whatever terminal program you used on your computer to dial in to Delphi’s servers. Many of these disks have forum messages, e-mails and chat session logs. All of this is pre-internet stuff and I don’t know if there are any archives in existence today of what was on Delphi in the 1980s. In any case, much of this stuff would have been private at the time and probably wouldn’t be in such archives even if they existed.

This post includes the contents of FORMS.DOC which is dated December 31st, 2107 which obviously can’t be right. The date and time was probably not set correctly when this document was created/downloaded. The date of this document on Delphi was 25-SEP-1985. This document describes the forms system on Delphi which allowed you (or at least admins) to create text documents that allowed user input/response. This looks like a another terminal capture and it also includes several examples of forms on Delphi.

See the previous post here.

===
FORMS.DOC
===


 
read forms

Name: FORMS DOCUMENTATION - VERSION 1.
Type: DOCUMENT
Date: 25-SEP-1985 17:33 by CHIP
Size: 33205

This is the latest version of the FORMS Documentation.  It includes all
enhancements in the forms program up to September 24, 1985.

Keywords: SPECIFIC AREAS, FORMS, TEXTRIEVE

ACTION> dis









FORMS SPECIFICATIONS


VERSION 1.0




I.  The GVC Forms system is designed to be a powerful and
friendly method of gathering and distributing highly
specific information from users.  Users are presented with
explanatory text and questions that are completely under the
control of the forms designer.  At any time during the
process of filling out a form, a user can press CTRLZ to
enter REVIEW mode.  At the REVIEW> prompt, a user can scan
his previous answers, change any of them, leave the form, or
return to where he was when he typed CTRLZ.

II.  Some uses of the forms program are:

i.  Catalogs and Online Ordering

ii.  Surveys

iii.  Request Forms

iv.  User Feedback

v.  Convention, Seminar or Warrenty Registration

vi.  Database Data Entry

vii.  Password-Protected Text


III.  The forms program is integrated with GVC's proprietary
Textrieve system.  Forms are placed in Textrieve in the same
manner that text is enterred, using the POST command (i.e.
POST <return> or POST filename <return>).  The Textrieve
area must be configured by GVC personnel to accept forms.
However, any text enterred into a forms-configured area that
does not have .FORM at the start of the first line will be
treated as regular text.

IV.  After a form is designed and loaded into the system, the
designer should immediately run the form.  If there are any
errors detected by the system, they will be displayed during
the operation of the form, and the form will abort before
allowing users to enter information.  The forms designer 
Page 2


should look at the error notices, find where the mistakes
were made and fix them, continuing this process until the
form is operating properly.

V.  Completed forms are processed via electronic mail.  They are
sent immediately to the username(s) specified by the forms
designer.  If the forms designer so designates, the user can
have a copy of the complete form sent to his own mailbox.

VI.  A form can contain a maximum of 255 questions and comments.
A question can have a maximum of 255 characters (with no
carriage returns).  A text response can have a maximum of
255 characters (with no carriage returns).

VII.  The following dot commands (dot commands have a period "."
in the first column followed by a command word) can be used
in a form.  Commands in parentheses are the acceptable
abbreviations for the command.  As with GVC's text
formatting commands, users will not SEE these commands.

Character capitalization (upper vs lower) does not matter to
the commands.  However, case does affect how the text is
presented to the users.

i.  .FORM

This command must be at the top of the form.  If it is
not there, the form will not be processed, and the user
will be presented with the commands rather than with the
form itself.

On the line following the .FORM should be placed the
Form Name.  The Form Name will be the "Subj:" when the
form is sent via electronic mail.  Form Name can not be
on more than one line.  It has a maximum length of 255
characters.  For example:

.FORM
Widget Order Form   <= Form Name

When a form is created or altered, it should be tested.
To properly test a form, place a "/" i front of the Form
Name.  Then run the form.  The "/" will put the program
into Test Mode and tell the program to run a more
complete diagnistic on the form.  When you are satisfied
that the form is working properly, remove the "/".  The
forms program will operate in Test Mode, but it will be
somewhat slower for the user.

ii.  .QUESTION (.QU)

This command is followed by a question name (15
characters max, with no ">", "<" or "/") and by the
actual text of the question (255 characters max).  For
example: 
Page 3


.QUESTION
Last name                       <= Question Name
What is your last name?         <= Question

If the question is omitted, the question name is used to
prompt the user (followed by a colon).  For example:

.QUESTION
Last name

In this example, the user would be prompted:

LAST NAME :

If you wish to restrict the size of the response to
something less than 255 characters, you may put the
character limit in <>'s after the .QUESTION (with no
spaces in between).  The limit must be between 1 and 255
inclusive.  For example:

.QU<25>
LAST NAME
What is your last name?

The above example will ask the user to reenter his
response if the initial response is longer than 25
characters.  It will inform him of the 25 character
limit.

iii.  .YESNO (.YN)

This command is followed by a question name and question
that is to be answered with a yes or a no (y or n).  If
the question is omitted, the question name (followed by
a colon) is used as the prompt.  For Example:

.YESNO
Same address
Do you want it shipped to your billing address? (y/n)

iv.  .MCHOICE (.MC) and .CHOICE (.CH)

This command is followed by a question name and a
question requiring the user to select between several
choices (20 choices maximum, 255 characters max per
choice).  As with the text of a question, the case of
the letters in the choices determines the case that is
displayed to the user.  The choices are placed after the
dot command .CHOICE (.CH).  For example:

.MCHOICE
Education
How much education have you had?
.CHOICE
None 
Page 4


.CHOICE
Grammar school
.CHOICE
High scholl
.CHOICE
College
.CHOICE
Graduate School

A special case of the .MCHOICE command occurs when the
last choice is OTHER.

.MCHOICE
Sex
What is your sex?
.CHOICE
Male
.CHOICE
Female
.CHOICE
Other

In the above example, if the user selects OTHER, he will
then be prompted:

Please explain :

His explanation will be used as the response (rather
than the word OTHER).

v.  .COMMENT (.CO) and .END COMMENT (.ECO)

This command is follow by text that is to be displayed
at any part of the form during the filling-out process.
The command .END COMMENT (.ECO) will signify end of the
text.  Text placed in here will be treated the same as
other outputed text (i.e.  text-formatting dot commands
will be recognized).  There is no limit to the amount of
text that can be put within a comment.  For example:

.COMMENT
.center ELEPHANT ORDER FORM
.blank
.indent 4
This form allows you to place your order for African 
and American elephants.  Elephants will be shipped 
freight-collect  (Collars, leashes and riding baskets 
not included in price).
.END COMMENT

vi.  .INTEGER (.INT)

This command forces the user to respond with an integer.
For example: 
Page 5


.INTEGER
STORIES TALL
How many floors are there in your office building?

If the user responds with something other than an
integer, he is asked to enter a whole number or integer.

vii.  .DOLLAR (.DOL)

DOLLAR is similar to .INTEGER except that it requires
the user to respond with an answer that is in dollars.
It will accept any number with between 0 and 10 decimal
places and convert it to 2 decimal places.  If the user
types in a non-numeric character, he is asked to reenter
his answer in dollars.

viii.  .DATE

DATE requires the user to enter a date in the form
mm/dd/yy, m/d/yy, mm-dd-yy, mm/dd/y, etc.  It will also
accept responses such as Next Tuesday and Yesterday.  It
produces an 11 character string in the form dd/mmm/yyyy.
For example:

.DATE
departure
When would you like to leave?

In the above example, if the user responds with 4-5-88,
the system will convert it to 04-JAN-1988.  If the user
enters less than complete information, the system
assumes the nearest date in the future that contains the
information passed.  To have the system assume a date in
the past, use the <past> qualifier.  For example:

.DATE<past>
birth date
When were you born?


ix.  .PASSWORD (.PW)

PASSWORD is used to test a users knowledge of a certain
word or phrase.  .PASSWORD must be followed by a //YES
or //NO (see below).  If the password is entered
correctly, the system is set at YES for the condition
statement.

When the user types in the password, it is not displayed
on his terminal.  At a later point in the form, if a
user does a scan, he will not be shown the password (as
he would be shown any other response made on the form).

The actual password is the Question Name.  It is
restricted to 15 characters maximum.  A Question MUST 
Page 6


following the Question Name.  Remember, the Question
Name is not public information in this instance.  For
example:

.PW //NO //QUIT
AAARDVARK
What's the secret animal code name?

In the above example, if the user does not type in
AARDVARK, he is taken out of the form (see //YES, //NO
and //QUIT described later in this text).

x.  .TEXT (.TX)

The .TEXT command allows the user to enter more than one
line of text in response to a question (up to a maximum
of 20 lines).  He concludes his text input with a CTRLZ
to enter, or a CTRLC to reenter.  He is given a prompt
similar to the mail prompt which explains these commands
to him.

After the text has been enterred, the user can go back
and replace a single line or the whole response.

xi.  .DISPOSE (.DS)

This command is used to specify what is to be done with
the completed form.  It must be used and should appear
only once.  Username(s) are placed on the line following
this command to specify mail addresses where the form is
to be mailed.  //KEEP can be used to signify that the
user can have a copy of the form sent to his mailbox.
Two examples:

.DISPOSE
WES JOHNWG

.DISPOSE
MARCJ //KEEP

In the first example, the form will be electronically
mailed to usernames WES and JOHNWG.

In the second example, the form will be electronically
mailed to username MARCJ.  The user will be asked
whether he wishes to have the form sent to his mailbox.
If he responds affirmatively, then the program will mail
him a copy of the completed form.

If the form is to be placed in a file the //FILE= option
is included.  For example:

.DISPOSE
//FILE=GARBAGE.DAT 
Page 7


In the above example, the form would be copied to file
GARBAGE.DAT.

xii.  .OUTPUT (.OP) and .END OUTPUT (.EOP)

If a specific format for the form that is actually sent
is required, then the .OUTPUT command must be used.  If
.OUTPUT is ommitted, then the output will be in
structured with each question name followed by the
user's response in the order that the questions were
asked.

All text that is placed on lines following the .OUTPUT
command is treated as text that is meant to be included
in the output form, with the following exceptions:

i.  //question name//

Anywhere this appears, the system substitutes the
actual response to the question.  For example:

My favorite color is //favorite color//.

The above would put the response to question about
favorite color into the sentence.  If the user said
RED, then in the outputed form, the sentence would
read:

My favorite color is RED.

The question name only has to be long enough to make
it unique.  If FAVORITE COLOR is the only question
name beginning with an F, then //F// would also work
(although it might be confusing to the manager who
is debugging or editting the form).

A special case of the //question name// is used if
the users username is to be inserted into the form.
Then the format is:

//*USERNAME//

A second special case of the //question name// is
used if the current date is to be inserted into the
form.  The date will be inserted as dd-mmm-yyyy (11
characters).  The format is:

//*DATE//

A third special case of the //question name// is
used if the current time is to be inserted into the
form.  The time will be inserted as hh-mm (5
characters) where hours are on a 24 scale and the
time is system time (Eastern time).  The format is: 
Page 8


//*TIME//

If a fixed amount of characters is to be set aside
for the response, such as in a list, then the format
is //question name<width,jusification>//, where
WIDTH is the number of characters allocated for the
form and JUSTIFICATION is how the response should be
positioned within the allocated space (L for left
justified, R for right justified and C for center
justified).  A few examples:

//price<10,R>//

//title<80,C>//

//last name<30,L>//

In the first example, the response to the question
about price is right justified within the 10
characters allotted to the response.  In the second
example, the response to the question about title is
centered on the form.  In the third example, the
response to the question about last name is left
justified within the allotted 30 characters.  If the
length of the response exceeds the allotted width,
then all spaces within the allotted area are filled
with asterisks ("*"s).

ii.  .PRINTIF and .END PRINTIF

The .PRINTIF command is used to decide whether a
group of lines should be included in the output.  If
the condition following the .PRINTIF command is
satisfied, then all text following it will be
included in the output.  If the condition is not
satisfied, then all text following the .PRINTIF
command but preceding an .END PRINTIF command will
not be included (in either case, the .PRINTIF and
.END PRINTIF themselves will not be included in the
output).

The .PRINTIF command has two formats.

1.  .PRINTIF<question name>

In this format, if the question was responded to
with anything other than a blank, then the
subsequent lines will be included in the output.

2.  .PRINTIF<question name response>

In this format, if the response to the question
is the same as the response in the statement,
then the condition is true and the subsequent
lines are included in the response.  The 
Page 9


RESPONSE can be abbreviated to as few characters
as are likely to make it unique.

A few examples of .PRINTIF

.PRINTIF<ship address>

.PRINTIF<continue y>

In the first example, if the question about SHIP
ADDRESS was answered with a non-blank response, then
subsequent lines would be included.  In the second
example, if the question about CONTINUEing was
responed to with a YES, the the subsequent lines
would be included.



VIII.  The following additional // statements can be used in a
form.  // statements are meant for the experienced forms
designer.  Friendly and complete forms can be created
without using these statements.

i.  //GOTO statement

A //GOTO statement tells the program to move to
someplace other than the next question when it is done
with the current question or comment.  If the GOTO moves
back to a question that has already been answered, then
all responses after that question are erased so that
they can be reentered.

//GOTO is followed by the question name of the question
that the program should move to.  The entire question
name is not needed, only enough of it to make the
selection unique.  If the question name in the //GOTO
statement does not exist, the GOTO is ignored.

//GOTO can follow .QUESTION, .YESNO, .MC, .TEXT,
.INTEGER, .DOLLAR and .COMMENT.  It can not be placed
anywhere else.  If no GOTO statement is used, the system
selects the next question or comment in the file.  An
example of //GOTO:

.qu //goto address
NAME
What is your name

ii.  //Condition Statements

//Condition statements combine an IF statement with a
//GOTO.  If the condition in the //Condition is
satisfied, then the program will move on the the
question indicated after thw //Condition.  //Condition
statements are only used with .YESNO, .PASSWORD and 
Page 10


.MCHOICE.  Condition statements are followed by the
Question Name of the question that is to be asked if the
condition is satisfied.  No //goto is needed (or can be
used) with a condition statement.

Only one //Condition or //GOTO can be used after a given
.YESNO, .PASSWORD or .MCHOICE.

There are two possible condition statements which can
follow .YESNO or .PASSWORD:

1.  //YES

This is true if the question is responded to with a
YES.  For example:

.yn //yes last name
give name
Would you like to leave your name? (y/n)

In the above example, if the user responds with a Y,
the system moves to the LAST NAME question.  If he
responds with N, it goes to the next question or
comment in the file.

2.  //NO

This is true if the question is responded to with a
NO (or the password was entered correctly).

Multiple choice Condition Statements use the format:
//{choice number}, where choice number is the choice
that must be selected to satisfy the condition.  For
example:

.mchoice //2 type of dog
animal type
What kind of pet do you have?
.choice
Cat
.choice
Dog
.choice
Fish
.choice
Wombat
.choice
Other

In the above example, if the user selects DOG, the
program will go to the TYPE OF DOG question.  Dog is the
second choice and the //condition is //2.  If he selects
something other than Dog, the program will move to the
next question or comment in the file. 
Page 11


iii.  //QUIT

//quit is a special word that can be placed after a
//GOTO or //Condition.  It tells the system that instead
of going to another question, leave the program straight
away.  No confirming prompt will be given to the user.
//QUIT is designed to be used primarily when the form
contains extensive text at the top (using .COMMENT).
When the user has read all of this explanatory text (but
has not yet invested any time and effort into entering
information), he is asked if he wants to fill out the
form.  If he resonds with an N, the system reverts back
to Textrieve.  For example:

.co
The Caveman convention is being held this year on 
December 19th at the Bedrock Convention Center in 
Flint, Michigan.  It will run through the 21st.  
The registraction fee is $45 per attendee.  This
can be paid by MasterCard, Visa or check.  Lodging
is available in abundance. 
.eco
.yn //no //quit
register
Would you like to register for the convention? (y/n)

iv.  //COMPLETE

//Complete is similar to //Quit.  It follows //Goto and
//Condition statements.  However, instead of aborting
the program, //Complete tells the system that the user
has finished filling it out and is ready to send it.
The system calls its own //Complete when it reaches the
last question or comment in the form.  An example of
//Complete:

.yn //no //complete
more to tell
Would you like to tell us more? (y/n)



Page 12



SAMPLE 1
(Simple example, no //s)




.FORM
WOMBAT Order Form
.comment
This is a form to order Wombats.  If you do not wish to 
order any of our special Wombats, please press CTRL_C to
quit.
.eco
.qu
name
What is your name?
.qu(25)
street address
What is your street address?
.qu(25)
city
What city do you live in?
.qu(2)
state
What state do you live in?
.integer
zip code
What is your zip code?
.qu
phone number
What is your phone number?
.comment
Now that you have given us your background
information, please select the Wombat of your
dreams.
.end comment
.mc
color
What color Wombat do you want?
.ch
Blue
.ch
Red
.ch
Green
.ch
Brown
.yn
other colors ok
Will you accept another color? (y/n)
.mc
size
What size Wombat do you prefer?
.ch 
Page 13


Small
.ch
Medium
.ch
Large
.ch
Obese
.yn
other sizes ok
Will you accept another size? (y/n)
.co
Thank you for ordering from Western Wombat Distributors.
Your Wombat will arrive by Pony Express in the next few
weeks.
.eco
.dispose
wombatman 
Page 14



SAMPLE 2
(Complicated Example)
(Contains //GOTO, //Conditions, //QUIT, //COMPLETE)




.form
Carpentry Estimate Application
.co
My name is Martha, and I'm an online carpenter.
I can fix broken roofs, put up beautiful aluminum
siding, renovate kitchens, and build additions to
your home.
.b
I give FREE estimates.
.eco
.yn //no //quit
want estimate?
Would you like me to come over and make an estimate?
.mc //2 build what
type of work
What do you need done?
.ch
Fix Something
.ch
Build Something
.text
fix what
What do you need fixed?
.qu
when broke
When did it break?
.date<past> //goto estimate
fix when
When do you need it fixed?
.mc //1 addition
build what
What do you need built?
.ch
Addition to the house
.ch
New Kitchen
.ch
Remodeled Bathroom
.ch
Something Else
.co //goto estimate
We can do that easily.
.eco
.integer
addition size
Approximately how many square feet is the addition?
.integer 
Page 15


floors
How many floors will it have?
.mc //3 another
estimate time
When can I come over to give you a free estimate.
.ch
Monday
.ch
Tuesday
.ch
Wednesday
.ch
Thursday
.ch
Friday
.comment //goto //complete
That will be fine.  I will see you then.
.eco
.yn //yes estimate
Another day OK
Wednesday's a bad day for me. Could we try another day?
.comment
That's too bad.  I will try an make it over on Wednesday.
.eco
.dispose
thecarpenter //keep
.output
This is an appointment to visit //*USERNAME// and give an
.printif<fix what>
estimate to fix //fix what//.
.printif<build what>
estimate to build //build what//.
.end printif
I will come over on //estimate t//.
.end output



ACTION> 

FORMS