Michael C. Taylor
129 Country Club Rd.
Pine Hill, NJ 08021
Your diskette should contain the following files:
EXTOL.EXE - EXTOL PROGRAM
EXRPT.EXE - EXTOL REPORT GENERATOR
EXTOL.DOC - EXTOL DOCUMENTATION
GENDER.EXT - SAMPLE USE OF DRILL COMMAND
ALICE.EXT - SAMPLE QUIZ ON ALICE IN WONDERLAND
BEATLES.EXT - BEATLES TRIVIA QUIZ
EXTOL is a programming language designed for Computer-Aided
Instruction (CAI) which is particularly well-suited for
non-mathematical domains. EXTOL was originally developed at Essex
University in England, and the PC version is a full implementation of
EXTOL along with several enhancements.
PC-EXTOL is distributed as shareware. You are encouraged to
copy and distribute copies of the program. You are prohibited from
altering the program code and documentation in any way.
PC-EXTOL is the result of many months of programming, debugging
and documenting. If you find the programs useful, please register
your copy by sending a contribution ($25 is suggested) to:
Michael C. Taylor
129 Country Club Rd
Pine Hill, NJ 08021
In exchange for registering your copy, you will be sent the
next version of PC-EXTOL free of charge and will be notified of
any future enhancements by mail (These will also be provided to
you free of charge if you send me a diskette by mail).
PC-EXTOL is a very useful language for CAI. I would
greatly appreciate any comments, suggestions or questions you
may have about the system. I can be reached on the following
The Pinelands BBS - (609) 354-9259
Computer Connection (609) 784-9404
Compu-Data (609) 232-1245
or on Compuserve (user id 72467,2723).
NOTE - Version 2.0 of EXTOL has added if-then-else logic to the programming
language thereby making EXTOL code much more succinct and more easily read.
I. Types of statements in EXTOL
EXTOL statements can be grouped into four main catagories. Each
line could be a text line (to be printed on the screen when the quiz is
run), a comment (which is ignored when the program is run), a command
line, or a label (which is used as a 'landmark' to allow the program to
interrupt the flow of control of the program).
1.1 Text Statements
Text statements in EXTOL are any lines that begin with any
character other than '.', '%', and ':'. Text lines are simply printed
on the terminal at run time. If the text line contains a variable to be
printed (see Variable command), then the value of the variable is
copied into the text line before the line is displayed.
This is a text line.
This line contains a variable - The correct answer is .
Often a text line is used immediately before an "accept" command
to ask a question and allow the student to respond. If you want the
students response to be on the same line as the text printed, put a "+"
as the last character of the text line.
Please enter the answer+
This code would accept the student's answer on the same line as the
request (The "+" will not show up on the screen when the program is
Comments in EXTOL are any lines that begin with a '%'. These lines
are ignored by the program and are included by the programmer only to
make a comment about the program.
%This is a comment.
Commands in EXTOL are any lines beginning with a '.'. These lines
perform various functions which will be explained in Chapter 2.
Valid commands in EXTOL are:
ALL COMMANDS MUST BE ENTERED IN LOWER CASE !!
Any EXTOL line beginning with a ':' is considered a label. If
during the program, you wanted to repeat certain lines, the goto
command would need a 'landmark' to go to.
Enter your name
The goto command would go to the label named 'again'.
II. Commands in EXTOL
note: all commands in EXTOL must be entered in lower case letters!
2.0 Score counters
With EXTOL, up to 10 counters can be kept during the execution of
the program. These counters can be used to keep track of how many
correct answers the student entered, or how many times the student took
to get the correct answer or many other things. The counters are
numbered 0 to 9 and are used with the following commands:
2.1 The accept command
Format : .accept
The accept command allows the person taking the quiz a chance to
enter a response.
Type in your name.
The above lines would prompt the user to enter his or her name and
would then wait until the student keyed in his name and pressed the
2.2 The feed command
Format : .feed(n)
The feed command is used to make the output of the program neater.
The command prints n blank lines on the terminal.
2.3 The clear command
Format : .clear
The clear command simply clears the screen.
2.4 The stop command
Format : .stop
The stop command ends program execution.
2.5 The match command
Format : .match(x,y).val1.val2.etc.
Where : x is the score counter (0-9) to be incremented,
y is the amount to increment score counter x,
and val1,etc. are the values to compare the student's answer
against. NOTE - THE LAST MATCH VALUE MUST BE FOLLOWED BY "."
This command compares the student's response against the list of
possible values. If the response matches one of these values (either
exactly or by keyword see 2.6 - 2.7), the score counter x is increased
Did Dante write "Inferno" ?
In the above program, the student is asked a question. If he responds by
typing YES, YEAH or TRUE, the score counter 2 will be increased by 1. If he
types in anything else, the score counter will be unchanged.
Note that in the above example the answers that the student's response
is to be compared against are all in upper case. If the .caseon command
is used, all answers keyed in by the student are converted into upper
case before they are compared against the values in the .match command.
If the .caseon option is used, all values in the match command must be
entered in upper case (see .caseon command).
2.6 The exact statement
Format : .exact
The exact statement affects the match statement. The exact
statement makes subsequent match statements compare the student's
response letter for letter with the possible answers.
2.7 The keyword statement
Format : .keyword
The keyword statement also affects the match statement. This
statement makes the match statement check to see if any of the possible
correct answers are contained WITHIN the student's response.
Who wrote Huckleberry Finn?+
In this example, keyword matching is in effect. Therefore if the
student were to type:
Huckleberry Finn was written by Samuel Clemens.
The answer would still be correct because the keyword 'CLEMENS' is
contained in his answer.
2.7.1 The caseon command
The caseon command causes any answers keyed in by the student to be
converted to all upper case before being compared with the proper
answers. When using the caseon function, be sure that all answers that
you compare the student's response against, are keyed in upper case in
your program code. For example:
Who did Tom fall in love with?
2.7.2 The caseoff command
The caseoff command cancels the effects of the caseon command.
2.8 The goto command
Format 1 : .goto.val1
Where : val1 is the name of a label in the program.
This is an unconditional goto to a specific label.
For example :
Type in your name.
The above example would ask for a name. When the name was entered, the
.goto.name command would goto the label called name and ask for another
name. The above example would repeat indefinitely.
Format 2 : .goto(x).val1.val2.etc.
Where : x is the number (0-9) of a score counter,
val1,val2 etc. are names of labels in the program.
This format can goto more than one destination based on the value
of the score counter.
Did Tom Sawyer ever go home?
I'm sorry but he did.
The above example asks asks a question and matches the student's
response exactly against the correct answers (YES,YEAH or TRUE). If a
match is found, score counter number 1 is increased by 1. Then the goto
command looks at that value. If the student was wrong, the value of
counter 1 should be 0 and therefore the program will goto incorrect. If
the student was right, then the value of counter 1 should be 1 and the
program will jump to the correct portion of the program. (NOTE - see
.if command for an easier method of doing this!)
2.8.1 .if, .else, .enddo commands
Format 1 : .if match(n) do
Where : n is the score counter to be looked at.
If the score counter n contains any value greater than zero, the
commands found between the .if and .enddo will be executed. Otherwise,
these commands will be skipped.
Format 2 : .if match(n,m) do
Where : n is the score counter to be looked at.
m is the value to compare the score counter against
If the score counter n contains any value greater than OR EQUAL to
value m, the commands found between the .if and .enddo will be executed.
Otherwise, these commands will be skipped.
Format 3 : .if match(n,m) do .if match(n) do
...(extol commands) ...
.else OR .else
...(extol commands) ...
The above variation adds an .else condition to the if phrase. Formats
1 or 2 may have elses within the .if and .enddo . If the .if test is true,
the commands between the .if and .else commands will be executed,
otherwise, the commands between the .else and .enddo will be executed.
If commands may also be nested up to 10 levels. (There can be up to
9 .if levels within one .if level).
Type the name of Bilbo's sword
.if match(0) do
No, it was called "Sting".
2.9 The reset statement
Format : .reset(x)
Where : x is the number (0-9) of a score counter.
Often when testing answers for right or wrong, after the test is
performed it is necessary to reset the counter value to zero. The reset
command does just that.
2.10 The increment command
Format : .increment(x,y)
Where : x is the number of a score counter,
y is the amount to increment x by.
The increment command increases the value of a score counter
unconditionally by y.
2.11 The print command
Format : .print(x)
Where : x is the number of a score counter.
This command prints the value of any score counter onto the
screen. If you put a "+" after the print statement, the cursor will
not be positioned on the next line, and any text will be put on
the same line.
2.12 The response command
Format : .response filename
Where : filename is the name of a response file.
A record can be kept of who used the program, when they used it
and the values of all the score counters. This command tells what file
is to be used to keep track of this. (See Appendix II : Using the
Report Generator). A report can be printed out on the use of the
2.13 The mark command
Format : .mark
This command writes the values of all the score counters to the
file specified in the .response statement. THIS COMMAND CAN BE USED
ONLY IF A RESPONSE FILE HAS BEEN SPECIFIED.
2.14 The .< command
Format : .=yyyy
Where : xxxx is the name of any variable,
yyyy is the value to be assigned to xxxx.
Variables are very useful in an EXTOL program especially if drills
are to be used (see 2.15-2.18). Any text statements or the .match
command can use variables. The same variable can be reset to a new
value later in the program.
I'm sorry but the answer was .
Very good! The answer was .
In the above example the variable 'answer' is assigned a value of
'yes'. The match command compares the student's answer to what 'answer'
contains which is 'yes'. Then if the student was incorrect the program
I'm sorry but the answer was yes.
If he was correct, the program prints :
Very good! The answer was yes.
2.15 The define command
Format : .define drillname
Where : drillname is the name of the drill.
Drills are used for portions of an EXTOL program that are to be
repeated. The variables in the drill can be assigned new values for
every time the drill is performed. The define command tells the program
that all following lines are part of a drill until an .end command is
encountered. These lines will not be executed unless a .perform command
is encountered. (See Appendix I - Use of Drills)
2.16 The perform command
Format : .perform drillname
Where : drillname is the name of a defined drill.
This command will tell the program to execute a predefined drill
(see 2.15 The define command). When an .exit or an .end command is
encountered in the drill, the program will resume with the line
following the .perform command.
2.17 The exit command
Format : .exit
This command when encountered during a drill tells the program to
quit execution of the drill and resume with the statement following the
2.18 The end command
Format : .end
This command is the last command of a drill section. When
encountered during a drill, it will quit execution of the drill and
resume with the statement following the .perform.
2.19 The copy command
Format : .copy filename
Where : filename is the name of a file to copy.
This command copies the contents of filename into the
2.20 The textfile command
Format : .textfile=filename
Where : filename is the name of the file containing the desired text.
This command is very useful if you want the student to be able to read
any ascii file while executing an EXTOL program. When EXTOL encounters
this command, the file will be displayed for the student. The text will be
displayed in pages automatically and the student will have the following
Pressing "N" for the next page of text
Pressing "F" for the first page of text
Pressing "X" to end the text
Another advantage of using this command is that the text lines don't
actually get loaded into memory until they are read thus saving memory.
Perhaps the most useful aspect of this command is that you can encorporate
any ascii files you may already have written into your EXTOL programs
without having to copy them over.
Appendix I - Use of Drills
Drills are one of the most powerful features of the Extol language.
Drills allow you to code logic one time and execute the drill several
times within the same program. To use the drill facility, you must
be familiar with the EXTOL commands - .define, .exit, .end, and the
use of variables. An example follows:
%Sample of Drill use in Extol
%This program quizzes students on the gender of
%french nouns. The student keys in M if the noun
%is masculing and F if the noun is feminine.
%The drill will determine whether or not the student
%is correct and keep a count of correct answers
%The drill code follows:
Please enter the gender of the noun, +
Sorry, but the gender of is .
Very good! The gender of is .
%This is the end of the drill code
%Program code follows:
Welcome to the french noun quiz. You will be given
a noun and will be asked to type in the gender of
the noun. Please type in "M" if the noun is masculine
and "F" if the noun is feminine. Good Luck!
Your final score was+
out of a possible 2.
The statements between the .define and the .end statement are what
make up the drill called "noundrill". When the program encounters
a .perform command, these lines will be executed. Otherwise the
program skips over this section.
The program statements begin with the .caseon command and continue
for the rest of the program. Notice that the program first sets
the values for and for before calling the drill
with the .perform command. The drill portion of the code accepts
the student's answer, compares it against the correct answer and
prints a message telling the student whether he was right or wrong.
This is just a very brief sample of the use of the drill command.
This command is ideal for language drills or any repetitive teaching
Appendix II - Using the Student Report Generator
If in an EXTOL program you specified a response file and
wrote a student's scores to it (see .response and .mark commands),
A report may be printed listing all students who ran the program,
when they started and finished and what the score counters contained
when the .mark command was executed. To produce the report enter
the following command from DOS.
The program will prompt you for the name of the response file
to print. After you enter the name, the report will print out.