Trailing-Edge
-
PDP-10 Archives
-
decus_20tap2_198111
-
decus/20-0074/gnosis.two
There are 2 other files named gnosis.two in the archive. Click here to see a list.
GNOSIS - A CAI Author Language and Preprocessor GNOSIS - A CAI Author Language and Preprocessor
=============================================== ===============================================
(c) Copyright 1978 by Walter Maner (c) Copyright 1978 by Walter Maner
Department of Philosophy Department of Philosophy
Old Dominion University Old Dominion University
Norfolk, VA. 23508 Norfolk, VA. 23508
Based in part on an earlier manuscript Based in part on an earlier manuscript
by Jacob Palme, Swedish Research by Jacob Palme, Swedish Research
Institute of National Defense, Institute of National Defense,
Stockholm, Sweden Stockholm, Sweden
ABSTRACT ABSTRACT
GNOSIS provides a CAI authoring language which makes it GNOSIS provides a CAI authoring language which makes it
relatively easy for any teacher with a basic understanding relatively easy for any teacher with a basic understanding
of "programmed" textbooks to develop computerized tutorials of "programmed" textbooks to develop computerized tutorials
for his students. Although material already written in such for his students. Although material already written in such
a format can be transformed virtually as-is by GNOSIS into a a format can be transformed virtually as-is by GNOSIS into a
form suitable for computer delivery, the teacher would form suitable for computer delivery, the teacher would
normally be writing his own "script." This script, because normally be writing his own "script." This script, because
it simulates the dialogue one might overhear if that teacher it simulates the dialogue one might overhear if that teacher
were tutoring a student in private, can be made to "come to were tutoring a student in private, can be made to "come to
life" on a computer terminal by the addition of a few simple life" on a computer terminal by the addition of a few simple
GNOSIS command words. The computer driven tutorial is, in GNOSIS command words. The computer driven tutorial is, in
reality, a compiled version of the ALGOL program GNOSIS reality, a compiled version of the ALGOL program GNOSIS
writes in response to the script prepared by the teacher. writes in response to the script prepared by the teacher.
In fact, GNOSIS has been designed in such a way that the ANY In fact, GNOSIS has been designed in such a way that the ANY
of the facilities of ALGOL can be exploited anywhere in the of the facilities of ALGOL can be exploited anywhere in the
lesson. lesson.
The fact that GNOSIS has been designed to function as a The fact that GNOSIS has been designed to function as a
TEACHING rather than as a TESTING system is reflected in TEACHING rather than as a TESTING system is reflected in
program logic at all levels. In accord with this design program logic at all levels. In accord with this design
philosophy, GNOSIS tempers negative and positive feedback philosophy, GNOSIS tempers negative and positive feedback
according to psychological context, simulates a correct according to psychological context, simulates a correct
response (and the comment which would have accompanied it) response (and the comment which would have accompanied it)
when all else fails, encourages student control through when all else fails, encourages student control through
skipping and backstepping facilities, and generates teacher skipping and backstepping facilities, and generates teacher
reports which are geared to lesson improvement. reports which are geared to lesson improvement.
KEY WORDS AND PHRASES: GNOSIS, Computer Assisted KEY WORDS AND PHRASES: GNOSIS, Computer Assisted
Instruction, CAI, instruction, teaching, education, Instruction, CAI, instruction, teaching, education,
computer, learning, school, pedagogy, pedagogics, Digital computer, learning, school, pedagogy, pedagogics, Digital
Equipment Corporation, DEC, PDP, ALGOL, SIMULA. Equipment Corporation, DEC, PDP, ALGOL, SIMULA.
GNOSIS.DOC Page 2 GNOSIS.DOC Page 2
* *
TABLE OF CONTENTS TABLE OF CONTENTS
1.0 WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)? 1.0 WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)?
1.1 What Are The Supposed Advantages Of CAI? 1.1 What Are The Supposed Advantages Of CAI?
1.2 What Is CAI Supposed To Do For The Teacher? 1.2 What Is CAI Supposed To Do For The Teacher?
1.3 What Is CAI Supposed To Do For The Student? 1.3 What Is CAI Supposed To Do For The Student?
1.4 What Are The Supposed Disadvantages Of CAI? 1.4 What Are The Supposed Disadvantages Of CAI?
2.0 BASIC CHARACTERISTICS OF GNOSIS 2.0 BASIC CHARACTERISTICS OF GNOSIS
3.0 THE GNOSIS COMMAND LANGUAGE 3.0 THE GNOSIS COMMAND LANGUAGE
3.1 A Simple GNOSIS Lesson 3.1 A Simple GNOSIS Lesson
3.2 Advice For Beginners 3.2 Advice For Beginners
3.3 Alphabetical List Of GNOSIS Commands 3.3 Alphabetical List Of GNOSIS Commands
4.0 GNOSIS TWO-PAGE SUMMARY 4.0 GNOSIS TWO-PAGE SUMMARY
5.0 PRECEDENCE TABLE FOR GNOSIS COMMANDS 5.0 PRECEDENCE TABLE FOR GNOSIS COMMANDS
6.0 ERROR DIAGNOSIS AND RECOVERY 6.0 ERROR DIAGNOSIS AND RECOVERY
6.1 GNOSIS Translator Messages 6.1 GNOSIS Translator Messages
6.1.1 GNOSIS Error Messages - 6.1.1 GNOSIS Error Messages -
6.1.2 GNOSIS Warning Messages - 6.1.2 GNOSIS Warning Messages -
6.2 ALGRTS (ALGOL Run-time System) Messages 6.2 ALGRTS (ALGOL Run-time System) Messages
6.3 ALGOL Compiler Error Messages 6.3 ALGOL Compiler Error Messages
7.0 WRITING ALGOL SEGMENTS INTO YOUR LESSON 7.0 WRITING ALGOL SEGMENTS INTO YOUR LESSON
7.1 Standard Variables And Procedures 7.1 Standard Variables And Procedures
7.1.1 GNOSIS Variables - 7.1.1 GNOSIS Variables -
7.1.2 GNOSIS Procedures - 7.1.2 GNOSIS Procedures -
7.2 Creating Variables 7.2 Creating Variables
7.3 Creating Procedures 7.3 Creating Procedures
8.0 WRITING GNOSIS LESSONS 8.0 WRITING GNOSIS LESSONS
8.1 Question Types 8.1 Question Types
8.2 Lesson-generated Diagnostic Profiles 8.2 Lesson-generated Diagnostic Profiles
8.3 Some Advice 8.3 Some Advice
9.0 RUNNING GNOSIS 9.0 RUNNING GNOSIS
10.0 SETTING UP STUDENT ACCOUNTS 10.0 SETTING UP STUDENT ACCOUNTS
GNOSIS.DOC Page 3 GNOSIS.DOC Page 3
INDEX OF GNOSIS COMMANDS INDEX OF GNOSIS COMMANDS
A.0 SELECTED BIBLIOGRAPHY A.0 SELECTED BIBLIOGRAPHY
B.0 ILLEGAL LABEL NAMES B.0 ILLEGAL LABEL NAMES
C.0 USE OF IF-CLASS COMMANDS C.0 USE OF IF-CLASS COMMANDS
C.1 Example I C.1 Example I
C.2 Example II C.2 Example II
D.0 USEFUL MIC PROGRAMS D.0 USEFUL MIC PROGRAMS
D.1 GNOSIS.MIC D.1 GNOSIS.MIC
D.2 SORT.MIC D.2 SORT.MIC
E.0 MACRO ROUTINES E.0 MACRO ROUTINES
E.1 INTRUT Intercept Routine E.1 INTRUT Intercept Routine
E.2 R Routine E.2 R Routine
E.3 RUN Routine E.3 RUN Routine
F.0 SAMPLE GNOSIS PROGRAM F.0 SAMPLE GNOSIS PROGRAM
G.0 FORMATTING THE <LESSONNAME>.ALG FILE G.0 FORMATTING THE <LESSONNAME>.ALG FILE
H.0 CONTENTS OF GNOSIS DISTRIBUTION TAPE H.0 CONTENTS OF GNOSIS DISTRIBUTION TAPE
I.0 IMPLEMENTATION CHECKLIST I.0 IMPLEMENTATION CHECKLIST
I.1 Essential Steps I.1 Essential Steps
I.2 Other Desirable Steps I.2 Other Desirable Steps
I.3 Testing I.3 Testing
GNOSIS.DOC Page 4 GNOSIS.DOC Page 4
' '
* *
ACKNOWLEDGMENT ACKNOWLEDGMENT
The author wishes to express his appreciation to Jacob Palme The author wishes to express his appreciation to Jacob Palme
for much insightful advice and for his assistance with for much insightful advice and for his assistance with
Swedish texts; to the Old Dominion University Research Swedish texts; to the Old Dominion University Research
Foundation for a Summer Research Grant (1976) which funded Foundation for a Summer Research Grant (1976) which funded
preliminary work on GNOSIS; to the National Science preliminary work on GNOSIS; to the National Science
Foundation's program for Comprehensive Assistance to Foundation's program for Comprehensive Assistance to
Undergraduate Science Education (CAUSE) which funded, via Undergraduate Science Education (CAUSE) which funded, via
the ODU CAUSE office, crucial work on GNOSIS during the the ODU CAUSE office, crucial work on GNOSIS during the
summer of 1977; and to the ODU Computer Center for a summer of 1977; and to the ODU Computer Center for a
generous allowance of computer time throughout a three-year generous allowance of computer time throughout a three-year
period. period.
* *
GNOSIS.DOC Page 5 GNOSIS.DOC Page 5
WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)? WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)?
* *
1.0 WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)? 1.0 WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)?
The surprising answer to this question is that, with The surprising answer to this question is that, with
the possible exception of certain kinds of generative or the possible exception of certain kinds of generative or
simulation programming, there is nothing inherently new simulation programming, there is nothing inherently new
about CAI. The computer -- grand as it is -- simply about CAI. The computer -- grand as it is -- simply
provides a new vehicle for doing the various kinds of things provides a new vehicle for doing the various kinds of things
teachers have always done, though perhaps with less teachers have always done, though perhaps with less
convenience and efficiency. From the teacher's point of convenience and efficiency. From the teacher's point of
view, then, the invention of the computer should be viewed view, then, the invention of the computer should be viewed
on a par with the invention of the erasable chalkboard, the on a par with the invention of the erasable chalkboard, the
printing press, the pencil, the video tape machine, the printing press, the pencil, the video tape machine, the
overhead projector, and so on. Each provided nothing more overhead projector, and so on. Each provided nothing more
than a distinct instructional medium which could then be than a distinct instructional medium which could then be
exploited by the teacher and learner alike. No matter what exploited by the teacher and learner alike. No matter what
the computer does for us, it is still true that curriculum the computer does for us, it is still true that curriculum
materials must be organized, developed and evaluated by the materials must be organized, developed and evaluated by the
trained teaching professional. The computer is about as trained teaching professional. The computer is about as
much a threat to the competent teacher as the textbook. much a threat to the competent teacher as the textbook.
It is true that suitably programmed machines will It is true that suitably programmed machines will
increasingly do certain things faster or longer or more increasingly do certain things faster or longer or more
accurately or in more places than human beings. But note accurately or in more places than human beings. But note
that this amounts to a continuing REDEFINITION of what that this amounts to a continuing REDEFINITION of what
should henceforth be considered "the human use of human should henceforth be considered "the human use of human
beings"! If there is any teaching function which could beings"! If there is any teaching function which could
better be left to some automatic medium, then it clearly better be left to some automatic medium, then it clearly
SHOULD be left to this medium most of the time. Why? SHOULD be left to this medium most of the time. Why?
Because it would be DEGRADING for any human being to Because it would be DEGRADING for any human being to
continue to perform such a menialized task (e.g., grading continue to perform such a menialized task (e.g., grading
homework). The computer revolution promises, therefore, to homework). The computer revolution promises, therefore, to
give teachers increasingly more time to concentrate on their give teachers increasingly more time to concentrate on their
"higher" roles -- a vision of the future which should please "higher" roles -- a vision of the future which should please
all but the incompetent. all but the incompetent.
CAI is often confused with Computer Based Instruction CAI is often confused with Computer Based Instruction
(CBI) and Computer Managed Instruction (CMI). We say a (CBI) and Computer Managed Instruction (CMI). We say a
course is computer BASED when the computerized materials can course is computer BASED when the computerized materials can
stand alone as a complete and adequate resource. Very few stand alone as a complete and adequate resource. Very few
courses now claim to be computer based and, in this sense, courses now claim to be computer based and, in this sense,
GNOSIS.DOC Page 6 GNOSIS.DOC Page 6
WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)? WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)?
only a scarce few ever will be. Computer MANAGED only a scarce few ever will be. Computer MANAGED
instruction, in contrast to both CAI and CBI, has little to instruction, in contrast to both CAI and CBI, has little to
do with the delivery of instruction. CMI fulfills a role do with the delivery of instruction. CMI fulfills a role
which is largely (or even exclusively) administrative. That which is largely (or even exclusively) administrative. That
is, it assists the teacher with what has been called is, it assists the teacher with what has been called
"classroom management": student records, test construction, "classroom management": student records, test construction,
test grading, statistical chores, and so on. CAI provides test grading, statistical chores, and so on. CAI provides
exactly what the term "assisted" implies -- i.e., a helpful exactly what the term "assisted" implies -- i.e., a helpful
extension of the usual course methods and materials. The extension of the usual course methods and materials. The
role of CAI at the present time, and for the foreseeable role of CAI at the present time, and for the foreseeable
future, is primarily one of course enrichment.[1] future, is primarily one of course enrichment.[1]
1.1 What Are The Supposed Advantages Of CAI? 1.1 What Are The Supposed Advantages Of CAI?
Whatever claims are made for CAI, it is clear that Whatever claims are made for CAI, it is clear that
their proper evaluation is an empirical matter. If CAI IS their proper evaluation is an empirical matter. If CAI IS
better then it will have to prove itself better in the usual better then it will have to prove itself better in the usual
way, through educational research. What follows below, way, through educational research. What follows below,
then, is a discussion of some advantages commonly ALLEGED then, is a discussion of some advantages commonly ALLEGED
for this mode of instruction. They represent conjectures for this mode of instruction. They represent conjectures
this author finds plausible apriori and, as such, they could this author finds plausible apriori and, as such, they could
probably best serve us as research hypotheses. And who probably best serve us as research hypotheses. And who
knows? Perhaps your own research will be a factor in knows? Perhaps your own research will be a factor in
determining which of these guesses are more nearly in line determining which of these guesses are more nearly in line
with the facts. with the facts.
1.2 What Is CAI Supposed To Do For The Teacher? 1.2 What Is CAI Supposed To Do For The Teacher?
1. By making it unnecessary for the teacher himself 1. By making it unnecessary for the teacher himself
either to present or to evaluate the large amount either to present or to evaluate the large amount
of drill and practice students will need to have in of drill and practice students will need to have in
skill-oriented courses, CAI should in theory free skill-oriented courses, CAI should in theory free
the teacher for more creative and intellectual the teacher for more creative and intellectual
encounters with students. encounters with students.
2. Because a CAI program can routinely manage a 2. Because a CAI program can routinely manage a
student's path through curriculum material (based, student's path through curriculum material (based,
of course, on decision criteria the teacher of course, on decision criteria the teacher
supplies), the computer should in theory make it supplies), the computer should in theory make it
possible for the teacher to individualize possible for the teacher to individualize
instruction in circumstances where it was not instruction in circumstances where it was not
administratively feasible to do so before CAI. administratively feasible to do so before CAI.
--------------- ---------------
1. There is much progress being made in a number of 1. There is much progress being made in a number of
related areas, however. These include GCAI (Generative related areas, however. These include GCAI (Generative
CAI), SCAI (Simulation CAI), CAG (Computer-assisted CAI), SCAI (Simulation CAI), CAG (Computer-assisted
Guidance), CAT (Computer-administered Testing), CGT Guidance), CAT (Computer-administered Testing), CGT
(Computer-generated Tests), and even certain administrative (Computer-generated Tests), and even certain administrative
applications. applications.
GNOSIS.DOC Page 7 GNOSIS.DOC Page 7
WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)? WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)?
3. Because a CAI program can AUTOMATICALLY generate 3. Because a CAI program can AUTOMATICALLY generate
teacher reports on individual student progress teacher reports on individual student progress
through curriculum material, it can provide through curriculum material, it can provide
diagnostic or evaluative data which would be diagnostic or evaluative data which would be
decidely less convenient to develop using more decidely less convenient to develop using more
traditional approaches. traditional approaches.
4. Because teacher reports are developed immediately, 4. Because teacher reports are developed immediately,
CAI should afford the teacher the opportunity to CAI should afford the teacher the opportunity to
evaluate instructional content and strategies while evaluate instructional content and strategies while
there is still time to change them for the better. there is still time to change them for the better.
5. Because CAI programs can be edited at any time the 5. Because CAI programs can be edited at any time the
author feels so inclined, even while in active use author feels so inclined, even while in active use
by students, revision can be continuous and by students, revision can be continuous and
responsive. responsive.
6. Because changes can be effected in computer 6. Because changes can be effected in computer
programs without the need to retype and reformat programs without the need to retype and reformat
the program as a whole, the editing chore is the program as a whole, the editing chore is
comparatively painless from the standpoint of comparatively painless from the standpoint of
"manuscript management." "manuscript management."
7. For all the reasons given above, desirable changes 7. For all the reasons given above, desirable changes
are more likely to be made than they would be if, are more likely to be made than they would be if,
say, the instructional vehicle were a published say, the instructional vehicle were a published
textbook. textbook.
8. Because a CAI program always performs exactly as 8. Because a CAI program always performs exactly as
designed, it provides an unsurpassed opportunity designed, it provides an unsurpassed opportunity
for the teacher qua educator to do research under for the teacher qua educator to do research under
carefully controlled experimental conditions. carefully controlled experimental conditions.
1.3 What Is CAI Supposed To Do For The Student? 1.3 What Is CAI Supposed To Do For The Student?
1. Because a computerized lesson can be delivering 1. Because a computerized lesson can be delivering
instruction in any one of several places, instruction in any one of several places,
simultaneously, it should normally prove to be more simultaneously, it should normally prove to be more
accessible than the teacher. accessible than the teacher.
2. Because a computerized lesson can in principle be 2. Because a computerized lesson can in principle be
delivered at any time, the student should in theory delivered at any time, the student should in theory
be able to benefit from a more flexible scheduling be able to benefit from a more flexible scheduling
of his workload. of his workload.
3. Because CAI permits a student to make his mistakes 3. Because CAI permits a student to make his mistakes
discretely, it should in theory promote greater discretely, it should in theory promote greater
involvement by students who are normally reticent involvement by students who are normally reticent
or who find the typical classroom environment or who find the typical classroom environment
intimidating. intimidating.
GNOSIS.DOC Page 8 GNOSIS.DOC Page 8
WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)? WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)?
4. Because a well-designed computerized lesson 4. Because a well-designed computerized lesson
simulates sessions of private tutoring, the student simulates sessions of private tutoring, the student
should come to look upon the medium as a vehicle should come to look upon the medium as a vehicle
for personalizing instruction. for personalizing instruction.
5. Because the student can proceed at his own pace, 5. Because the student can proceed at his own pace,
slower learners should not ever have to be slower learners should not ever have to be
embarrassed by their more gifted peers; nor should embarrassed by their more gifted peers; nor should
these gifted themselves ever have to wallow in these gifted themselves ever have to wallow in
boredom while the teacher struggles with the less boredom while the teacher struggles with the less
advantaged. advantaged.
6. Because the machine never tires, it should be able 6. Because the machine never tires, it should be able
to provide whatever amounts of drill and practice to provide whatever amounts of drill and practice
are necessary for a student to become successful. are necessary for a student to become successful.
7. Because feedback is immediate and pertinent, there 7. Because feedback is immediate and pertinent, there
should be little opportunity for the learner to should be little opportunity for the learner to
become entrenched in bad habits. become entrenched in bad habits.
8. Because the student may exercise some control over 8. Because the student may exercise some control over
the delivery of the computerized lesson, he should the delivery of the computerized lesson, he should
in theory be able to contribute to the in theory be able to contribute to the
individualization of instruction in partnership individualization of instruction in partnership
with the teacher. with the teacher.
9. Because a computerized program IS so attentive and 9. Because a computerized program IS so attentive and
responsive, it should be more motivating for responsive, it should be more motivating for
students to learn in this way than in circumstances students to learn in this way than in circumstances
where the student is lost in a sea of faces. where the student is lost in a sea of faces.
10. Because the computer forces the learner into an 10. Because the computer forces the learner into an
active role, he should be able to learn more ... active role, he should be able to learn more ...
better ... faster, and he should be able to retain better ... faster, and he should be able to retain
it longer. it longer.
11. Because CAI furnishes the student with tangible 11. Because CAI furnishes the student with tangible
indications of his progress through the curriculum, indications of his progress through the curriculum,
he should in theory be more highly motivated than, he should in theory be more highly motivated than,
say, the student who is told of his progress (or say, the student who is told of his progress (or
lack of it) only at examination time. lack of it) only at examination time.
12. Because the program can be made to adjust to the 12. Because the program can be made to adjust to the
level of competence actually demonstrated by the level of competence actually demonstrated by the
student, he should be able to get precisely the student, he should be able to get precisely the
amount of instruction he needs on each occasion so amount of instruction he needs on each occasion so
that his time is used to maximum advantage. that his time is used to maximum advantage.
GNOSIS.DOC Page 9 GNOSIS.DOC Page 9
WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)? WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)?
1.4 What Are The Supposed Disadvantages Of CAI? 1.4 What Are The Supposed Disadvantages Of CAI?
1. Because computerized lessons are easy to revise, it 1. Because computerized lessons are easy to revise, it
is difficult to excuse oneself from this is difficult to excuse oneself from this
essentially endless chore. essentially endless chore.
2. Because the routine use of computerized lessons can 2. Because the routine use of computerized lessons can
generate an avalanche of valuable data about generate an avalanche of valuable data about
students, the onus is on the teacher as never students, the onus is on the teacher as never
before to make informed judgments about students. before to make informed judgments about students.
3. Because of the highly tutorial nature of CAI lesson 3. Because of the highly tutorial nature of CAI lesson
design, the author is forced as never before to design, the author is forced as never before to
enter the minds of his students, to anticipate enter the minds of his students, to anticipate
their responses, and to prepare individualized their responses, and to prepare individualized
diagnostic comments. Not every teacher -- not even diagnostic comments. Not every teacher -- not even
every GOOD teacher -- commands the necessary every GOOD teacher -- commands the necessary
insight. insight.
4. Because the preparation of computerized lesson 4. Because the preparation of computerized lesson
material demands a degree of organization not material demands a degree of organization not
normally required either for lecturing or textbook normally required either for lecturing or textbook
authoring, CAI can force the teacher to spend authoring, CAI can force the teacher to spend
considerable time restructuring his course. considerable time restructuring his course.
5. Because a well conceived, half-hour computerized 5. Because a well conceived, half-hour computerized
lesson will require, on the average, about twenty lesson will require, on the average, about twenty
hours of authoring time, many teachers will have to hours of authoring time, many teachers will have to
move slowly into CAI. move slowly into CAI.
6. For the same reason, teachers will be reluctant to 6. For the same reason, teachers will be reluctant to
change textbooks once they have written change textbooks once they have written
computerized lessons to accompany them. computerized lessons to accompany them.
7. Because a CAI program is, like a book, a direct 7. Because a CAI program is, like a book, a direct
indication of the author's mastery of the material indication of the author's mastery of the material
and of his techniques for presenting it, any and of his techniques for presenting it, any
deficiencies which may exist are likely to be deficiencies which may exist are likely to be
highly visible to students and colleagues. highly visible to students and colleagues.
8. Because computer resources are -- and will continue 8. Because computer resources are -- and will continue
to be -- limited relative to demand, both teacher to be -- limited relative to demand, both teacher
and student will find themselves competing for and student will find themselves competing for
their "piece of the machine." their "piece of the machine."
9. Because of the present anti-competitive nature of 9. Because of the present anti-competitive nature of
the computer industry (and for other reasons), a the computer industry (and for other reasons), a
CAI program will not be nearly as sharable or as CAI program will not be nearly as sharable or as
marketable as a textbook, video cassette, or film. marketable as a textbook, video cassette, or film.
10. Because the use of computer lessons presupposes 10. Because the use of computer lessons presupposes
some minimal typing ability, certain students may some minimal typing ability, certain students may
not avail themselves of the opportunity CAI not avail themselves of the opportunity CAI
provides unless special orientation is provided. provides unless special orientation is provided.
GNOSIS.DOC Page 10 GNOSIS.DOC Page 10
WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)? WHAT IS COMPUTER ASSISTED INSTRUCTION (CAI)?
11. Because approximately correct responses and 11. Because approximately correct responses and
misspelled responses are usually treated exactly misspelled responses are usually treated exactly
like wrong responses by the program, a student may like wrong responses by the program, a student may
become frustrated. become frustrated.
12. Because CAI permits flexible pacing by learners, 12. Because CAI permits flexible pacing by learners,
the teacher must be prepared to confer with the teacher must be prepared to confer with
students on ALL aspects of the course at any time. students on ALL aspects of the course at any time.
It is not enough just to be prepared for the unit It is not enough just to be prepared for the unit
at hand. at hand.
GNOSIS.DOC Page 11 GNOSIS.DOC Page 11
BASIC CHARACTERISTICS OF GNOSIS BASIC CHARACTERISTICS OF GNOSIS
* *
2.0 BASIC CHARACTERISTICS OF GNOSIS 2.0 BASIC CHARACTERISTICS OF GNOSIS
GNOSIS provides, through its ten basic commands,[2] a GNOSIS provides, through its ten basic commands,[2] a
simple CAI authoring language which makes it easy for any simple CAI authoring language which makes it easy for any
teacher with a basic understanding of "programmed" textbooks teacher with a basic understanding of "programmed" textbooks
to develop computerized tutorials for his students. to develop computerized tutorials for his students.
Although material already written in such a format can be Although material already written in such a format can be
transformed virtually as-is by GNOSIS into a form suitable transformed virtually as-is by GNOSIS into a form suitable
for computer delivery, the teacher would normally be writing for computer delivery, the teacher would normally be writing
his own "script." This script, because it simulates the his own "script." This script, because it simulates the
dialogue one might overhear if that teacher were tutoring a dialogue one might overhear if that teacher were tutoring a
student in private, can be made to "come to life" on a student in private, can be made to "come to life" on a
computer terminal by the addition of a few simple GNOSIS computer terminal by the addition of a few simple GNOSIS
command words. The computer driven tutorial is, in reality, command words. The computer driven tutorial is, in reality,
a compiled version of the ALGOL program GNOSIS writes in a compiled version of the ALGOL program GNOSIS writes in
response to the script prepared by the teacher. response to the script prepared by the teacher.
As in the ordinary tutoring environment, the student's As in the ordinary tutoring environment, the student's
path through the material can be guided in various and path through the material can be guided in various and
subtle ways, e.g., by routing students having difficulty to subtle ways, e.g., by routing students having difficulty to
supplementary material. The program qua tutor can also supplementary material. The program qua tutor can also
react in helpful ways to a variety of anticipated false react in helpful ways to a variety of anticipated false
responses to questions, e.g., by giving appropriate responses to questions, e.g., by giving appropriate
diagnostic commentary or hints, followed by a repetition of diagnostic commentary or hints, followed by a repetition of
the wrongly answered question. Although unanticipated the wrongly answered question. Although unanticipated
responses can be saved for inclusion in teacher reports responses can be saved for inclusion in teacher reports
(along with statistics on individual student performance), (along with statistics on individual student performance),
the data which are generated exist for the sake of improving the data which are generated exist for the sake of improving
the lesson pedagogically. This is in keeping with the the lesson pedagogically. This is in keeping with the
general design philosophy that GNOSIS should be a TEACHING general design philosophy that GNOSIS should be a TEACHING
system rather than a TESTING system. GNOSIS is a system rather than a TESTING system. GNOSIS is a
general-purpose test-and-branch system for Computer Assisted general-purpose test-and-branch system for Computer Assisted
Instruction. The teacher prepares a lesson or "script" Instruction. The teacher prepares a lesson or "script"
containing short texts and questions. This lesson is input containing short texts and questions. This lesson is input
--------------- ---------------
2. See below, section 3.2. Of course, GNOSIS also 2. See below, section 3.2. Of course, GNOSIS also
recognizes many advanced commands which will be valued by recognizes many advanced commands which will be valued by
the sophisticated CAI author. the sophisticated CAI author.
GNOSIS.DOC Page 12 GNOSIS.DOC Page 12
BASIC CHARACTERISTICS OF GNOSIS BASIC CHARACTERISTICS OF GNOSIS
to the computer and translated by the GNOSIS into the ALGOL to the computer and translated by the GNOSIS into the ALGOL
language. The ALGOL compiler will then translate the lesson language. The ALGOL compiler will then translate the lesson
into executable machine code and, after that, the lesson can into executable machine code and, after that, the lesson can
be run by the student. be run by the student.
Because GNOSIS lessons are ultimately compiled en bloc Because GNOSIS lessons are ultimately compiled en bloc
and because the compiler which does the final translation and because the compiler which does the final translation
generates highly efficient machine code, the CPU time generates highly efficient machine code, the CPU time
consumed by students using GNOSIS lessons will be dramaticly consumed by students using GNOSIS lessons will be dramaticly
less than for those using interpretative systems like less than for those using interpretative systems like
SCHOLAR-TEACH. SCHOLAR-TEACH.
Compared to SCHOLAR-TEACH, its principal competitor on Compared to SCHOLAR-TEACH, its principal competitor on
DEC hardware, GNOSIS has the following additional DEC hardware, GNOSIS has the following additional
facilities: facilities:
1. Use of highly mnemonic and natural English command 1. Use of highly mnemonic and natural English command
words (e.g., "QUESTION" to output a question, words (e.g., "QUESTION" to output a question,
"TEXT" to output a text block); this makes writing "TEXT" to output a text block); this makes writing
lessons in GNOSIS as simple as writing a script for lessons in GNOSIS as simple as writing a script for
a programmed textbook. a programmed textbook.
2. Availability of both upper and lower case 2. Availability of both upper and lower case
characters to improve readability and provide characters to improve readability and provide
emphasis. emphasis.
3. Automatic (defeasible) vertical segmenting of 3. Automatic (defeasible) vertical segmenting of
display so that the "scrolling effect" will not display so that the "scrolling effect" will not
disadvantage students working at a CRT. disadvantage students working at a CRT.
4. Automatic (defeasible) right justification of 4. Automatic (defeasible) right justification of
display with a "ragged right" at column 72. display with a "ragged right" at column 72.
5. Automatic (defeasible) generation of teacher 5. Automatic (defeasible) generation of teacher
reports which, instead of containing all manner of reports which, instead of containing all manner of
irrelevant information, store precisely the data irrelevant information, store precisely the data
necessary to make improvements in the lesson necessary to make improvements in the lesson
design. design.
6. Automatic (defeasible) simulation of a response the 6. Automatic (defeasible) simulation of a response the
program would have considered correct if the program would have considered correct if the
student fails on repeated attempts to supply an student fails on repeated attempts to supply an
acceptable response. acceptable response.
7. Automatic (defeasible) collection of student 7. Automatic (defeasible) collection of student
comments on the lesson, whether the comments are comments on the lesson, whether the comments are
brief or voluminous. brief or voluminous.
8. Automatic (defeasible) use of the student's first 8. Automatic (defeasible) use of the student's first
name in commenting and feedback routines. name in commenting and feedback routines.
9. Capability (defeasible) for student to back up or 9. Capability (defeasible) for student to back up or
skip ahead to an arbitrary point in the lesson. skip ahead to an arbitrary point in the lesson.
GNOSIS.DOC Page 13 GNOSIS.DOC Page 13
BASIC CHARACTERISTICS OF GNOSIS BASIC CHARACTERISTICS OF GNOSIS
10. Availability of a large number (13) of pre-defined 10. Availability of a large number (13) of pre-defined
branching conditions, far more than exist in any branching conditions, far more than exist in any
other CAI language. other CAI language.
11. Convenient access of the full facilities of ALGOL 11. Convenient access of the full facilities of ALGOL
whenever they are desired. whenever they are desired.
12. Convenient access to external FORTRAN procedures 12. Convenient access to external FORTRAN procedures
via ALGOL. via ALGOL.
13. Automatic (defeasible), context-sensitive 13. Automatic (defeasible), context-sensitive
dispensing of hints. dispensing of hints.
14. Efficient entry and storage of global help texts. 14. Efficient entry and storage of global help texts.
15. Six times faster lesson execution than with CAI 15. Six times faster lesson execution than with CAI
languages requiring an interpreter (e.g., languages requiring an interpreter (e.g.,
SCHOLAR-TEACH). SCHOLAR-TEACH).
16. Automatic (defeasible) use of the bell to prompt 16. Automatic (defeasible) use of the bell to prompt
student. student.
17. Absolute control of how branching is effected at 17. Absolute control of how branching is effected at
run-time (can be entirely teacher controlled, run-time (can be entirely teacher controlled,
entirely student controlled, or any mixture of the entirely student controlled, or any mixture of the
two). two).
18. Automatic (defeasible) transfer to another lesson. 18. Automatic (defeasible) transfer to another lesson.
19. Availability of multiple-choice question-and-answer 19. Availability of multiple-choice question-and-answer
strategies which require the student to pick two or strategies which require the student to pick two or
more of the presented alternatives but do not more of the presented alternatives but do not
necessarily penalize him for a partially wrong necessarily penalize him for a partially wrong
response. response.
20. Automatic generation of positive and negative 20. Automatic generation of positive and negative
feedback, suitably individualized according to feedback, suitably individualized according to
context. context.
As the GNOSIS author becomes more sophisticated in his As the GNOSIS author becomes more sophisticated in his
needs and aspirations, there will come a time when he will needs and aspirations, there will come a time when he will
"turn programmer" and begin to write brief ALGOL segments "turn programmer" and begin to write brief ALGOL segments
into his lesson script. GNOSIS supports this transition, into his lesson script. GNOSIS supports this transition,
but does not force it. Because of this, more study may be but does not force it. Because of this, more study may be
required in order to take full advantage of GNOSIS than required in order to take full advantage of GNOSIS than
would be required for, say, SCHOLAR-TEACH. But the would be required for, say, SCHOLAR-TEACH. But the
important thing is that these easy-to-acquire programming important thing is that these easy-to-acquire programming
skills will give the author better, more flexible, and more skills will give the author better, more flexible, and more
extensible facilities once he has mastered them. In fact, extensible facilities once he has mastered them. In fact,
through ALGOL, GNOSIS gives him access to all the facilities through ALGOL, GNOSIS gives him access to all the facilities
of a powerful, high-level programming language. No other of a powerful, high-level programming language. No other
CAI author language provides such an opportunity. CAI author language provides such an opportunity.
GNOSIS.DOC Page 14 GNOSIS.DOC Page 14
BASIC CHARACTERISTICS OF GNOSIS BASIC CHARACTERISTICS OF GNOSIS
The principal disadvantage of GNOSIS is that the The principal disadvantage of GNOSIS is that the
ready-to-run lesson (.SAV file) is large compared to the ready-to-run lesson (.SAV file) is large compared to the
script which generated it -- about five times larger on the script which generated it -- about five times larger on the
average. While regrettable, this situation is wholly average. While regrettable, this situation is wholly
consistent with a design philosophy which calls for consistent with a design philosophy which calls for
sacrificing storage efficiency whenever that would improve sacrificing storage efficiency whenever that would improve
runtime efficiency. It is part of the cost of avoiding runtime efficiency. It is part of the cost of avoiding
interpretive execution. interpretive execution.
GNOSIS.DOC Page 15 GNOSIS.DOC Page 15
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
* *
3.0 THE GNOSIS COMMAND LANGUAGE 3.0 THE GNOSIS COMMAND LANGUAGE
The GNOSIS language consists of approximately forty The GNOSIS language consists of approximately forty
simple commands which are used in conjunction with texts, simple commands which are used in conjunction with texts,
questions, canned answers, hints, and comments. All GNOSIS questions, canned answers, hints, and comments. All GNOSIS
commands begin with a reserved symbol, usually "%",[3] in commands begin with a reserved symbol, usually "%",[3] in
the first column (extreme left margin) of a line. Only the the first column (extreme left margin) of a line. Only the
first three letters of the command are significant, so one first three letters of the command are significant, so one
may freely abbreviate "%QUESTION" to "%QUE", etc. may freely abbreviate "%QUESTION" to "%QUE", etc.
3.1 A Simple GNOSIS Lesson 3.1 A Simple GNOSIS Lesson
Even if you have no experience in computer programming, Even if you have no experience in computer programming,
you will have little difficulty understanding the following you will have little difficulty understanding the following
simple GNOSIS lesson. In fact, such lessons have more in simple GNOSIS lesson. In fact, such lessons have more in
common with theater scripts than with any programming common with theater scripts than with any programming
language you have ever heard of. Roughly, in the lines language you have ever heard of. Roughly, in the lines
following %TEXT or %QUESTION, the teacher is speaking to the following %TEXT or %QUESTION, the teacher is speaking to the
student; in the word or phrase immediately following %RIGHT student; in the word or phrase immediately following %RIGHT
or %WRONG, the student is responding to the teacher; and, or %WRONG, the student is responding to the teacher; and,
in the lines following %RIGHT and %WRONG, the teacher is in the lines following %RIGHT and %WRONG, the teacher is
reacting to the student's response. reacting to the student's response.
--------------------- A SIMPLE LESSON --------------------- --------------------- A SIMPLE LESSON ---------------------
%TEACHER Dr. Walter Maner %TEACHER Dr. Walter Maner
%DISK %DISK
COMMENT: "%DISK" causes the lesson to COMMENT: "%DISK" causes the lesson to
generate reports for the teacher. See generate reports for the teacher. See
section 3.3 for a full description of this section 3.3 for a full description of this
command. command.
%NAME %NAME
--------------- ---------------
3. The "!" cannot be used since it is a comment 3. The "!" cannot be used since it is a comment
marker. (This implies that the first line cannot be a marker. (This implies that the first line cannot be a
comment.) However, any other symbol can be chosen. comment.) However, any other symbol can be chosen.
GNOSIS.DOC Page 16 GNOSIS.DOC Page 16
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
COMMENT: "%NAME" causes the lesson to ask COMMENT: "%NAME" causes the lesson to ask
the student to enter his name. See section the student to enter his name. See section
3.3. for a full description of this command. 3.3. for a full description of this command.
%TEXT %TEXT
This lesson contains some riddles. Put on your thinking cap This lesson contains some riddles. Put on your thinking cap
and try to answer them. and try to answer them.
%QUESTION %QUESTION
What was the President's name in 1951? What was the President's name in 1951?
%RIGHT Jimmy %RIGHT Jimmy
Of course, Jimmy Carter was not President in 1951, but the Of course, Jimmy Carter was not President in 1951, but the
name of our President (i.e., Jimmy Carter) was "Jimmy" back name of our President (i.e., Jimmy Carter) was "Jimmy" back
in 1951. (He didn't change his name.) in 1951. (He didn't change his name.)
%RIGHT Carter %RIGHT Carter
%SAME %SAME
COMMENT: The %SAME command is explained in COMMENT: The %SAME command is explained in
section 3.3. Basically, it enables a single section 3.3. Basically, it enables a single
teacher reaction to be paired with several teacher reaction to be paired with several
different student responses. Here, the different student responses. Here, the
dialogue appearing after "%RIGHT Jimmy" dialogue appearing after "%RIGHT Jimmy"
will be delivered to the student if his will be delivered to the student if his
response contains either "Jimmy", "Carter", response contains either "Jimmy", "Carter",
or "James". or "James".
%RIGHT James %RIGHT James
%SAME %SAME
%WRONG Harry %WRONG Harry
Harry Truman was the President in 1951, but I didn't ask you Harry Truman was the President in 1951, but I didn't ask you
who was President. I asked you what our President's NAME who was President. I asked you what our President's NAME
was in 1951. Do you see the difference? was in 1951. Do you see the difference?
%WRONG Truman %WRONG Truman
%SAME %SAME
%WRONG %WRONG
Hint: His initials are J.C. Hint: His initials are J.C.
%WRONG %WRONG
Another Hint: What is our President's name now? Has it Another Hint: What is our President's name now? Has it
changed since 1951? changed since 1951?
%QUESTION %QUESTION
How many three-cent postage stamps in a dozen? How many three-cent postage stamps in a dozen?
%RIGHT 12 %RIGHT 12
A dozen is still a dozen. It doesn't matter what makes A dozen is still a dozen. It doesn't matter what makes
up the dozen. up the dozen.
%RIGHT twelve %RIGHT twelve
%SAME %SAME
%WRONG 4 %WRONG 4
You divided 3 into 12. That gives 4, but you outsmarted You divided 3 into 12. That gives 4, but you outsmarted
yourself! Really, now, how could there be only 4 stamps yourself! Really, now, how could there be only 4 stamps
in a dozen? Where did you go to school? in a dozen? Where did you go to school?
%WRONG four %WRONG four
%SAME %SAME
%WRONG %WRONG
It takes twelve objects to make a dozen, doesn't it? It takes twelve objects to make a dozen, doesn't it?
Does it matter whether the objects are three-cent stamps, Does it matter whether the objects are three-cent stamps,
eggs, or what-have-you? eggs, or what-have-you?
GNOSIS.DOC Page 17 GNOSIS.DOC Page 17
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
%END %END
--------------------------- END ---------------------------- --------------------------- END ----------------------------
As you can see, the formula for writing a GNOSIS lesson As you can see, the formula for writing a GNOSIS lesson
is simple indeed: is simple indeed:
1. Display text to the student with %TEXT commands. 1. Display text to the student with %TEXT commands.
2. Ask questions with %QUESTION commands. 2. Ask questions with %QUESTION commands.
3. React to right answers with %RIGHT commands. 3. React to right answers with %RIGHT commands.
4. React to wrong answers with %WRONG commands. 4. React to wrong answers with %WRONG commands.
Most GNOSIS lessons will deviate very little from this Most GNOSIS lessons will deviate very little from this
paradigm. paradigm.
An actual terminal session (see below) would follow the An actual terminal session (see below) would follow the
lesson script (see above) faithfully but not blindly. At lesson script (see above) faithfully but not blindly. At
every point, GNOSIS would be making judgments about the every point, GNOSIS would be making judgments about the
student, the lesson environment, and other relevant factors student, the lesson environment, and other relevant factors
in order to generate intelligent comments and displays. in order to generate intelligent comments and displays.
Note especially how GNOSIS would manage the interaction Note especially how GNOSIS would manage the interaction
between the computer and the student, e.g., by providing between the computer and the student, e.g., by providing
feedback appropriate to the context. In certain situations, feedback appropriate to the context. In certain situations,
the student would be recycled through the question; in the student would be recycled through the question; in
others, GNOSIS would realize that the student is guessing others, GNOSIS would realize that the student is guessing
wildly, that the program is no longer providing useful wildly, that the program is no longer providing useful
diagnostic help, and would determine that the best approach diagnostic help, and would determine that the best approach
under the circumstances would be to simulate a correct under the circumstances would be to simulate a correct
answer. The student's first name would be used occasionally answer. The student's first name would be used occasionally
to personalize dialogue -- often enough but not too often. to personalize dialogue -- often enough but not too often.
Here, then, is an actual terminal session based on the Here, then, is an actual terminal session based on the
simple lesson script given above: simple lesson script given above:
------------------ ACTUAL TERMINAL SESSION ----------------- ------------------ ACTUAL TERMINAL SESSION -----------------
Hello! This is GNOSIS talking. Hello! This is GNOSIS talking.
I'd like to know your full name-- I'd like to know your full name--
just type it in after the arrow. just type it in after the arrow.
(Unless you enter a made-up name, GNOSIS will (Unless you enter a made-up name, GNOSIS will
generate personal data based on this session.) generate personal data based on this session.)
-->Walter Maner -->Walter Maner
Glad to meet you, WALTER! Glad to meet you, WALTER!
Welcome to the lesson 'RIDDLE'. Welcome to the lesson 'RIDDLE'.
This lesson was produced by the GNOSIS system for computer This lesson was produced by the GNOSIS system for computer
GNOSIS.DOC Page 18 GNOSIS.DOC Page 18
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
aided instruction (CAI) from the Research Institute of aided instruction (CAI) from the Research Institute of
National Defense, Stockholm, Sweden, and the Old Dominion National Defense, Stockholm, Sweden, and the Old Dominion
University Research Foundation. University Research Foundation.
The author of this lesson is... The author of this lesson is...
Dr. Walter Maner Dr. Walter Maner
IMPORTANT: You can interrupt the lesson at any time by IMPORTANT: You can interrupt the lesson at any time by
typing the single character "%" on your terminal and then typing the single character "%" on your terminal and then
pushing the RETURN button. pushing the RETURN button.
GNOSIS will then explain how you can type GNOSIS will then explain how you can type
(1) 'STOP' to end the lesson immediately; (1) 'STOP' to end the lesson immediately;
(2) 'SKIP' to move on to the next question; or (2) 'SKIP' to move on to the next question; or
(3) 'BACK' to return to the previous question. (3) 'BACK' to return to the previous question.
Push RETURN --> Push RETURN -->
This lesson contains some riddles. Put on your thinking This lesson contains some riddles. Put on your thinking
cap and try to answer them. cap and try to answer them.
Push RETURN --> Push RETURN -->
What was the President's name in 1951? What was the President's name in 1951?
-->Harry Truman -->Harry Truman
Wrong! Wrong!
Harry Truman was the President in 1951, but I didn't ask Harry Truman was the President in 1951, but I didn't ask
you who was President. I asked you what our President's you who was President. I asked you what our President's
NAME was in 1951. Do you see the difference? NAME was in 1951. Do you see the difference?
Please try again. Please try again.
What was the President's name in 1951? What was the President's name in 1951?
-->Lyndon Johnson -->Lyndon Johnson
No, you're wrong this time, WALTER. No, you're wrong this time, WALTER.
Another Hint: What is our President's name now? Has it Another Hint: What is our President's name now? Has it
changed since 1951? changed since 1951?
Please try again. Please try again.
What was the President's name in 1951? What was the President's name in 1951?
-->James Earl Carter -->James Earl Carter
Exactly right, WALTER! There is hope for you after all! Exactly right, WALTER! There is hope for you after all!
JAMES EARL CARTER JAMES EARL CARTER
^^^^^^ ^^^^^^
COMMENT: In certain ambiguous contexts, COMMENT: In certain ambiguous contexts,
GNOSIS will flag the word or words it GNOSIS will flag the word or words it
took to be significant in the student's took to be significant in the student's
response. response.
Of course, Jimmy Carter was not President in 1951, but the Of course, Jimmy Carter was not President in 1951, but the
name of our President (i.e., Jimmy Carter) was "Jimmy" back name of our President (i.e., Jimmy Carter) was "Jimmy" back
GNOSIS.DOC Page 19 GNOSIS.DOC Page 19
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
in 1951. (He didn't change his name.) in 1951. (He didn't change his name.)
Push RETURN --> Push RETURN -->
How many three-cent postage stamps in a dozen? How many three-cent postage stamps in a dozen?
-->four -->four
No, you're wrong this time. No, you're wrong this time.
You divided 3 into 12. That gives 4, but you outsmarted You divided 3 into 12. That gives 4, but you outsmarted
yourself! Really, now, how could there be only 4 stamps yourself! Really, now, how could there be only 4 stamps
in a dozen? Where did you go to school? in a dozen? Where did you go to school?
Please try again. Please try again.
How many three-cent postage stamps in a dozen? How many three-cent postage stamps in a dozen?
-->three -->three
Sorry. Sorry.
Just for the record, GNOSIS will simulate an acceptable Just for the record, GNOSIS will simulate an acceptable
answer: answer:
-->12 -->12
Very good. Very good.
A dozen is still a dozen. It doesn't matter what makes A dozen is still a dozen. It doesn't matter what makes
up the dozen. up the dozen.
Push RETURN --> Push RETURN -->
During the lesson "RIDDLE" you answered 2 questions, During the lesson "RIDDLE" you answered 2 questions,
and you gave the right answer 1 times. and you gave the right answer 1 times.
On 0 questions your answer was right on your very first On 0 questions your answer was right on your very first
try. try.
If you have any message for the teacher, then type it now, If you have any message for the teacher, then type it now,
one line at a time. Finish with an EXTRA push on the one line at a time. Finish with an EXTRA push on the
RETURN key. RETURN key.
-->This was a silly lesson. -->This was a silly lesson.
--> -->
Leaving the lesson "RIDDLE"... Leaving the lesson "RIDDLE"...
Have a nice day, WALTER! Have a nice day, WALTER!
--------------------------- END ---------------------------- --------------------------- END ----------------------------
3.2 Advice For Beginners 3.2 Advice For Beginners
Beginners should note that, while there is a fairly Beginners should note that, while there is a fairly
large number of GNOSIS commands, a very powerful lesson can large number of GNOSIS commands, a very powerful lesson can
be written using only TEN of these: %TEXT, %QUESTION, be written using only TEN of these: %TEXT, %QUESTION,
%RIGHT, %WRONG, %NOEXTRA, %EXTRA, %NOORDER, %ORDER, %GOTO, %RIGHT, %WRONG, %NOEXTRA, %EXTRA, %NOORDER, %ORDER, %GOTO,
and %END. Learn how to use these basic commands first and %END. Learn how to use these basic commands first
GNOSIS.DOC Page 20 GNOSIS.DOC Page 20
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
before you advance to more sophisticated devices. As a before you advance to more sophisticated devices. As a
novice, you should also take note of the fact that it is NOT novice, you should also take note of the fact that it is NOT
necessary to know how to program in ALGOL in order to write necessary to know how to program in ALGOL in order to write
GNOSIS programs. In fact, you can ignore everything said in GNOSIS programs. In fact, you can ignore everything said in
this manual about ALGOL "code" and ALGOL "segments" until this manual about ALGOL "code" and ALGOL "segments" until
you are ready to extend your abilities in this direction. you are ready to extend your abilities in this direction.
In the normal case, the ALGOL coding would be done by the In the normal case, the ALGOL coding would be done by the
Academic Support Service of your computer center anyway. Academic Support Service of your computer center anyway.
When you have mastered the ten basic commands, study When you have mastered the ten basic commands, study
the demonstration program "HOW.GNO" provided in an appendix. the demonstration program "HOW.GNO" provided in an appendix.
Try to imagine what "HOW" will do when it is run. Then "R Try to imagine what "HOW" will do when it is run. Then "R
HOW" and, as "HOW" runs, try to discover in the "HOW.GNO" HOW" and, as "HOW" runs, try to discover in the "HOW.GNO"
script the lines which are producing the effects you see. script the lines which are producing the effects you see.
Compare these effects with the documentation provided in Compare these effects with the documentation provided in
this manual. this manual.
Since GNOSIS commands cannot appear in an arbitrary Since GNOSIS commands cannot appear in an arbitrary
order, beginners are also encouraged to make faithful use of order, beginners are also encouraged to make faithful use of
the "Precedence Table for GNOSIS Commands" (section 5.0, the "Precedence Table for GNOSIS Commands" (section 5.0,
below). In addition, the discussion "Writing GNOSIS below). In addition, the discussion "Writing GNOSIS
Lessons" (section 8,, below) should be helpful. (In a later Lessons" (section 8,, below) should be helpful. (In a later
release, a series of GNOSIS lessons which themselves teach release, a series of GNOSIS lessons which themselves teach
GNOSIS will be available.) GNOSIS will be available.)
3.3 Alphabetical List Of GNOSIS Commands 3.3 Alphabetical List Of GNOSIS Commands
Note: The character "|" is used to separate items of a Note: The character "|" is used to separate items of a
set from which one, and only one, member can be chosen. The set from which one, and only one, member can be chosen. The
characters "[" and "]" are used to enclose an item which may characters "[" and "]" are used to enclose an item which may
be present or absent. The characters "<" and ">" are used be present or absent. The characters "<" and ">" are used
to enclose non-literal elements, i.e., elements which would to enclose non-literal elements, i.e., elements which would
have to be REPLACED by a literal before the code would be have to be REPLACED by a literal before the code would be
valid. Of course, "<empty>" is to be replaced by a null valid. Of course, "<empty>" is to be replaced by a null
literal, namely, nothing. Items not enclosed by these left literal, namely, nothing. Items not enclosed by these left
and right carats are literals, hence can be put in the and right carats are literals, hence can be put in the
GNOSIS script just as they appear. GNOSIS script just as they appear.
1. %ALGOL <one or more lines of ALGOL code>; 1. %ALGOL <one or more lines of ALGOL code>;
This command causes one or more lines of ALGOL This command causes one or more lines of ALGOL
code to be transferred unchanged to the ALGOL code to be transferred unchanged to the ALGOL
translation of the teacher's script. The segment translation of the teacher's script. The segment
must be legal in ALGOL and, in addition, must mesh must be legal in ALGOL and, in addition, must mesh
with the GNOSIS lesson at the point of insertion. with the GNOSIS lesson at the point of insertion.
2. %BELL <empty> 2. %BELL <empty>
Causes the bell to be rung at the student's Causes the bell to be rung at the student's
terminal whenever the computer is awaiting input terminal whenever the computer is awaiting input
from him. Useful in noisy environments and with from him. Useful in noisy environments and with
first-time computer users. first-time computer users.
GNOSIS.DOC Page 21 GNOSIS.DOC Page 21
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
3. %COPYRIGHT <line containing copyright notice> 3. %COPYRIGHT <line containing copyright notice>
If this command is used then, each time the If this command is used then, each time the
lesson is run, a copyright notice will be output as lesson is run, a copyright notice will be output as
part of the lesson header. This copyright applies part of the lesson header. This copyright applies
only to the lesson itself, of course -- not to the only to the lesson itself, of course -- not to the
GNOSIS software. GNOSIS software.
4. %DISK <empty> 4. %DISK <empty>
Causes teacher reports to be created at lesson Causes teacher reports to be created at lesson
runtime, then routed to preexisting disk files runtime, then routed to preexisting disk files
named <lessonname>.DTA and <lessonname>.SRT. The named <lessonname>.DTA and <lessonname>.SRT. The
<lessonname>.DTA file contains a page of data for <lessonname>.DTA file contains a page of data for
each run of the lesson. These data include the each run of the lesson. These data include the
student's name, a trace of his unexpected student's name, a trace of his unexpected
responses, lesson statistics, and any message he responses, lesson statistics, and any message he
may have left for the teacher. The may have left for the teacher. The
<lessonname>.SRT file contains only the "unexpected <lessonname>.SRT file contains only the "unexpected
response" traces, converted to a format suitable response" traces, converted to a format suitable
for sorting. for sorting.
Unless the %DISK (or %DISC or %DSK) command is Unless the %DISK (or %DISC or %DSK) command is
used, then teacher reports (if any) will be routed used, then teacher reports (if any) will be routed
to the lineprinter and no machine readable records to the lineprinter and no machine readable records
will remain. The reports queued to the lineprinter will remain. The reports queued to the lineprinter
are equivalent to those which would have been are equivalent to those which would have been
contained in the <lessonname>.DTA file except that contained in the <lessonname>.DTA file except that
each page is printed as a separate item. Without each page is printed as a separate item. Without
the %DISK command, no <lessonname>.SRT file is the %DISK command, no <lessonname>.SRT file is
generated. generated.
When using the %DISK command, care must be When using the %DISK command, care must be
taken to ensure that the blank files taken to ensure that the blank files
<lessonname>.DTA and <lessonname>.SRT have been <lessonname>.DTA and <lessonname>.SRT have been
created IN THE ACCOUNT WHERE THE LESSON WILL BE created IN THE ACCOUNT WHERE THE LESSON WILL BE
RUN. They must exist there before the lesson is RUN. They must exist there before the lesson is
used for the first time. Otherwise a mysterious used for the first time. Otherwise a mysterious
error message will be sent to the student by ALGDDT error message will be sent to the student by ALGDDT
as he tries to exit from the lesson. A protection as he tries to exit from the lesson. A protection
of <155> should be given to these report files. of <155> should be given to these report files.
This isn't adequate for all purposes, of course, This isn't adequate for all purposes, of course,
but it is a workable compromise for the teacher who but it is a workable compromise for the teacher who
wishes to inspect, print or copy-and-sort these wishes to inspect, print or copy-and-sort these
records from another account. records from another account.
The %DISK command executes implicit %TEACHER The %DISK command executes implicit %TEACHER
and %KEEP commands. Thus, an explicit %TEACHER and %KEEP commands. Thus, an explicit %TEACHER
command will be required only if it is necessary to command will be required only if it is necessary to
add the teacher's name and address. add the teacher's name and address.
Technical Note: Unless %NAME is used in Technical Note: Unless %NAME is used in
conjunction with %DISK, only one student at a time conjunction with %DISK, only one student at a time
may use a report-generating lesson. When the %NAME may use a report-generating lesson. When the %NAME
GNOSIS.DOC Page 22 GNOSIS.DOC Page 22
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
command is used, however, temporary .DTA and .SRT command is used, however, temporary .DTA and .SRT
files (based on his first name) are opened at files (based on his first name) are opened at
runtime. Writing to these files (until the very runtime. Writing to these files (until the very
end of the lesson) usually avoids any end of the lesson) usually avoids any
conflict-of-access problems connected with writing conflict-of-access problems connected with writing
the main <lessonname>.DTA and <lessonname>.SRT the main <lessonname>.DTA and <lessonname>.SRT
files. files.
5. %END <empty> 5. %END <empty>
This is -- MUST be -- the last command of a This is -- MUST be -- the last command of a
lesson. Any text after this command will be lesson. Any text after this command will be
ignored by GNOSIS. ignored by GNOSIS.
6. %EXTRA <empty> 6. %EXTRA <empty>
This command will influence the way in which This command will influence the way in which
student responses are compared to canned answer student responses are compared to canned answer
patterns. After a %EXTRA command, and until the patterns. After a %EXTRA command, and until the
next %NOEXTRA command, student responses will be next %NOEXTRA command, student responses will be
considered correct even if they contain extra considered correct even if they contain extra
characters not part of the %RIGHT answer pattern characters not part of the %RIGHT answer pattern
PROVIDED they do at least contain all the essential PROVIDED they do at least contain all the essential
characters. If the response DOES contain extra characters. If the response DOES contain extra
characters, then GNOSIS will flag the essential characters, then GNOSIS will flag the essential
characters with uparrows. characters with uparrows.
GNOSIS is initialized in %EXTRA mode and will GNOSIS is initialized in %EXTRA mode and will
remain in this mode until it encounters the first remain in this mode until it encounters the first
%NOEXTRA command line. Note that, in %EXTRA mode, %NOEXTRA command line. Note that, in %EXTRA mode,
the response "yes or no" will be considered a the response "yes or no" will be considered a
correct response to any "%RIGHT yes" or "%RIGHT no" correct response to any "%RIGHT yes" or "%RIGHT no"
command! GNOSIS will obligingly flag the "yes" command! GNOSIS will obligingly flag the "yes"
part as correct in one case, the "no" part in the part as correct in one case, the "no" part in the
other. other.
7. %FINISH <empty> 7. %FINISH <empty>
This command will enable the user to place one This command will enable the user to place one
or more lines of ALGOL code in the GNOSIS or more lines of ALGOL code in the GNOSIS
translated lesson immediately before its final translated lesson immediately before its final
"END". (Ordinarily this would be possible only "END". (Ordinarily this would be possible only
through editing the .ALG file produced by GNOSIS.) through editing the .ALG file produced by GNOSIS.)
"%ALGOL <one or more lines of ALGOL code>;" MUST "%ALGOL <one or more lines of ALGOL code>;" MUST
follow the %FINISH command. Note too that %FINISH follow the %FINISH command. Note too that %FINISH
does NOT terminate the lesson script; a %END is does NOT terminate the lesson script; a %END is
still necessary to close the lesson. still necessary to close the lesson.
8. %GOTO <label>; 8. %GOTO <label>;
Normally the student will proceed through the Normally the student will proceed through the
teacher's script in more or less linear fashion. teacher's script in more or less linear fashion.
This ordinary flow of control can be overridden, This ordinary flow of control can be overridden,
however, by use of the %GOTO command. This command however, by use of the %GOTO command. This command
GNOSIS.DOC Page 23 GNOSIS.DOC Page 23
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
will cause the lesson to branch (or jump) will cause the lesson to branch (or jump)
immediately and unconditionally to the line bearing immediately and unconditionally to the line bearing
the label. The %GOTO may appear anywhere in the the label. The %GOTO may appear anywhere in the
lesson. However, if it is used in association with lesson. However, if it is used in association with
the comments or hints following one of the answer the comments or hints following one of the answer
commands (%RIGHT, %WRONG, %LACK or %NEUTRAL), then commands (%RIGHT, %WRONG, %LACK or %NEUTRAL), then
the %GOTO command must FOLLOW these comments or the %GOTO command must FOLLOW these comments or
hints. The <label> which serves as the argument or hints. The <label> which serves as the argument or
"destination" for the %GOTO command can be one "destination" for the %GOTO command can be one
which you have explicitly written into the lesson which you have explicitly written into the lesson
or it can be one of the standard, predefined labels or it can be one of the standard, predefined labels
provided by the GNOSIS system. provided by the GNOSIS system.
The five standard labels in the GNOSIS system The five standard labels in the GNOSIS system
are: are:
1. "start" 1. "start"
Marks the beginning of the whole lesson. Marks the beginning of the whole lesson.
Thus "%GOTO start;" causes the entire lesson to Thus "%GOTO start;" causes the entire lesson to
be repeated. be repeated.
2. "endoflesson" 2. "endoflesson"
Marks the end of the lesson. Thus "%GOTO Marks the end of the lesson. Thus "%GOTO
endoflesson;" causes the lesson to be aborted. endoflesson;" causes the lesson to be aborted.
3. "repeat" 3. "repeat"
Marks the beginning of the last question Marks the beginning of the last question
cycle. Thus "%GOTO repeat;" will have the cycle. Thus "%GOTO repeat;" will have the
effect of repeating the previous question. effect of repeating the previous question.
4. "simulate" 4. "simulate"
Marks the place where GNOSIS begins Marks the place where GNOSIS begins
simulating a correct response. (For this simulating a correct response. (For this
purpose, GNOSIS uses the answer supplied as an purpose, GNOSIS uses the answer supplied as an
argument to the FIRST %RIGHT command.) If, for argument to the FIRST %RIGHT command.) If, for
example, you want GNOSIS to count several example, you want GNOSIS to count several
divergent responses as correct but go on to divergent responses as correct but go on to
simulate what you take to be the best response, simulate what you take to be the best response,
then you could type "%GOTO simulate;" after then you could type "%GOTO simulate;" after
your comment (if any) for a %RIGHT command your comment (if any) for a %RIGHT command
which took as its argument one of the less which took as its argument one of the less
desirable answers. desirable answers.
5. "next" 5. "next"
Marks the point of exit from the current Marks the point of exit from the current
question cycle. Thus "GOTO next;" will have question cycle. Thus "GOTO next;" will have
the effect of skipping past the current the effect of skipping past the current
question routine to whatever happens to be next question routine to whatever happens to be next
in the program. in the program.
GNOSIS.DOC Page 24 GNOSIS.DOC Page 24
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
If for some reason you do NOT want GNOSIS If for some reason you do NOT want GNOSIS
to simulate a correct response after a student to simulate a correct response after a student
has repeatedly failed to give one of his own, has repeatedly failed to give one of his own,
you can insert "GOTO next;" after the last you can insert "GOTO next;" after the last
"%WRONG <empty>" command. "%WRONG <empty>" command.
User defined labels can be inserted almost anywhere User defined labels can be inserted almost anywhere
by using a %ALGOL command but it is usually more by using a %ALGOL command but it is usually more
convenient to associate them with %TEXT and convenient to associate them with %TEXT and
%QUESTION commands. If you do not insert a %GOTO %QUESTION commands. If you do not insert a %GOTO
command after an answer command, then the default command after an answer command, then the default
action is "%GOTO repeat;" in %WRONG or %LACK action is "%GOTO repeat;" in %WRONG or %LACK
environments, "%GOTO next;" in %RIGHT or %NEUTRAL environments, "%GOTO next;" in %RIGHT or %NEUTRAL
environments. environments.
9. %HELP <unique one-word designation for help text> 9. %HELP <unique one-word designation for help text>
<one or more lines of help text> <one or more lines of help text>
The %HELP command causes GNOSIS to establish a The %HELP command causes GNOSIS to establish a
global help text, i.e., one which is potentially global help text, i.e., one which is potentially
accessible by the student from any part of the accessible by the student from any part of the
lesson. "%ALGOL <help text name>;", wherever it lesson. "%ALGOL <help text name>;", wherever it
may appear in the program, will subsequently cause may appear in the program, will subsequently cause
the help text to be displayed. the help text to be displayed.
10. %IF <switchname> 10. %IF <switchname>
Assuming <switchname> has been declared and Assuming <switchname> has been declared and
initialized by a %SWITCH command, the occurrence of initialized by a %SWITCH command, the occurrence of
%IF will cause the text between the %IF and the %IF will cause the text between the %IF and the
next %IFEND to be deposited in the translated next %IFEND to be deposited in the translated
lesson ONLY if <switchname> was initialized TRUE. lesson ONLY if <switchname> was initialized TRUE.
Otherwise these lines of text will be skipped.[4] Otherwise these lines of text will be skipped.[4]
11. %IFEND <switchname> 11. %IFEND <switchname>
This command turns off the %IF/%IFNOT This command turns off the %IF/%IFNOT
facility. In other words, the SCOPE of each %IF or facility. In other words, the SCOPE of each %IF or
%IFNOT extends to the next occurrence of a %IFEND %IFNOT extends to the next occurrence of a %IFEND
command. Thus, all text following %IFEND will be command. Thus, all text following %IFEND will be
included in the translated lesson as usual, included in the translated lesson as usual,
regardless of previous %IF's or %IFNOT's. regardless of previous %IF's or %IFNOT's.
Subsequent %IF's or %IFNOT's will, of course, Subsequent %IF's or %IFNOT's will, of course,
create another need for an %IFEND to define THEIR create another need for an %IFEND to define THEIR
scope -- unless that scope extends all the way to scope -- unless that scope extends all the way to
the end of the lesson. %IFEND must therefore the end of the lesson. %IFEND must therefore
follow some %IF or %IFNOT command.[5] follow some %IF or %IFNOT command.[5]
--------------- ---------------
4. Use of these commands if discussed further in an 4. Use of these commands if discussed further in an
appendix to this documentation. appendix to this documentation.
5. Use of these commands if discussed further in an 5. Use of these commands if discussed further in an
appendix to this documentation. appendix to this documentation.
GNOSIS.DOC Page 25 GNOSIS.DOC Page 25
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
12. %IFNOT <switchname> 12. %IFNOT <switchname>
Assuming <switchname> has been declared and Assuming <switchname> has been declared and
initialized by a %SWITCH command, the text between initialized by a %SWITCH command, the text between
%IFNOT and the next %IFEND command will be included %IFNOT and the next %IFEND command will be included
in the ALGOL translation of the lesson ONLY if in the ALGOL translation of the lesson ONLY if
<switchname> is FALSE. Used only in conjunction <switchname> is FALSE. Used only in conjunction
with a previous %SWITCH.[6] with a previous %SWITCH.[6]
13. %INITIALIZE <one or more line of ALGOL code>; 13. %INITIALIZE <one or more line of ALGOL code>;
This command is normally used to initialize This command is normally used to initialize
global variables which have been declared with the global variables which have been declared with the
%VARIABLES command, although it could just as well %VARIABLES command, although it could just as well
be used to reinitialize GNOSIS system parameters if be used to reinitialize GNOSIS system parameters if
that should ever be necessary. %INITIALIZE that should ever be necessary. %INITIALIZE
operates like %ALGOL (see above), except that the operates like %ALGOL (see above), except that the
code following %INITIALIZE is written into the code following %INITIALIZE is written into the
lesson at the point where data are initialized, lesson at the point where data are initialized,
just before the start of the main program. just before the start of the main program.
14. %JUSTIFY <empty> 14. %JUSTIFY <empty>
Causes all text, including the text in Causes all text, including the text in
%QUESTION blocks and %HELP blocks, to be %QUESTION blocks and %HELP blocks, to be
semi-justified to produce a ragged right at column semi-justified to produce a ragged right at column
=< 72. It also causes such text material to be =< 72. It also causes such text material to be
paged out in such a way that nothing will be lost paged out in such a way that nothing will be lost
scrolling off the top of a CRT. scrolling off the top of a CRT.
Although GNOSIS begins processing text Although GNOSIS begins processing text
material in the %NOJUSTIFY mode, an occurrence of material in the %NOJUSTIFY mode, an occurrence of
the %JUSTIFY command will change the mode of the %JUSTIFY command will change the mode of
processing until a subsequent %NOJUSTIFY command is processing until a subsequent %NOJUSTIFY command is
encountered. encountered.
In the %JUSTIFY mode, GNOSIS will treat In the %JUSTIFY mode, GNOSIS will treat
spaces, tabs, linefeeds and carriage returns as spaces, tabs, linefeeds and carriage returns as
mere separators. Only blank lines will be output mere separators. Only blank lines will be output
exactly as typed in. Moreover, when operating in exactly as typed in. Moreover, when operating in
the %JUSTIFY mode, GNOSIS will be sensitive to the the %JUSTIFY mode, GNOSIS will be sensitive to the
occurrence of certain characters. These include occurrence of certain characters. These include
the doublequote, the left and right bracket, and the doublequote, the left and right bracket, and
the semicolon. the semicolon.
--------------- ---------------
6. Use of these commands if discussed further in an 6. Use of these commands if discussed further in an
appendix to this documentation. appendix to this documentation.
NOTE NOTE
Failing to avoid these characters in blocks Failing to avoid these characters in blocks
of text processed in the %JUSTIFY mode is of text processed in the %JUSTIFY mode is
certain to cause peculiar and even fatal certain to cause peculiar and even fatal
effects. effects.
This sensitivity is caused by the way ALGOL string This sensitivity is caused by the way ALGOL string
scanner works. In later releases of GNOSIS, a scanner works. In later releases of GNOSIS, a
workaround should be provided. workaround should be provided.
The only ALGOL carriage-control command which The only ALGOL carriage-control command which
can be safely used inside the scope of %JUSTIFY is can be safely used inside the scope of %JUSTIFY is
the "[T]" command, for tabbing. This the "[T]" command, for tabbing. This
carriage-control command, if used at the very carriage-control command, if used at the very
beginning of the %JUSTIFY text or after a blank beginning of the %JUSTIFY text or after a blank
line in that text, will not cause any peculiar line in that text, will not cause any peculiar
effects. It may, however, cause the right margin effects. It may, however, cause the right margin
to be exceeded by a few characters. to be exceeded by a few characters.
15. %KEEP <empty> 15. %KEEP <empty>
This command is useful only in association This command is useful only in association
with a %TEACHER command, i.e., in report-generating with a %TEACHER command, i.e., in report-generating
lessons. Unless %KEEP is used in such a lesson (or lessons. Unless %KEEP is used in such a lesson (or
unless %DISK is used, which executes an implicit unless %DISK is used, which executes an implicit
%KEEP command), the student will be directed to %KEEP command), the student will be directed to
pick up the teacher report generated by the lesson pick up the teacher report generated by the lesson
(after it has been printed by the lineprinter), and (after it has been printed by the lineprinter), and
to bring this report to the teacher. This command to bring this report to the teacher. This command
is probably not needed any longer since reports can is probably not needed any longer since reports can
conveniently be kept on disk. conveniently be kept on disk.
16. %LACK <element(s) likely to be missing from answer> 16. %LACK <element(s) likely to be missing from answer>
<optional line(s) of comments> <optional line(s) of comments>
This command causes GNOSIS to search for This command causes GNOSIS to search for
something which (a) is essential to a correct something which (a) is essential to a correct
response but which (b) is likely to be missing. If response but which (b) is likely to be missing. If
the the item is not found in the student's the the item is not found in the student's
response, then he receives appropriate negative response, then he receives appropriate negative
feedback from GNOSIS and the text (if any) on the feedback from GNOSIS and the text (if any) on the
optional line(s) after the %LACK command is optional line(s) after the %LACK command is
displayed to him at that point. If more than one displayed to him at that point. If more than one
element is expected to be lacking from the element is expected to be lacking from the
student's response, then he receives feedback and student's response, then he receives feedback and
commentary (if any) as soon as ANY of the elements commentary (if any) as soon as ANY of the elements
cannot be detected in his response. cannot be detected in his response.
The chief advantage of the %LACK command does The chief advantage of the %LACK command does
not lie in its increased efficiency but rather in not lie in its increased efficiency but rather in
the opportunity it provides for writing highly the opportunity it provides for writing highly
specific diagnostic comments. Despite this specific diagnostic comments. Despite this
advantage, we recommend AGAINST using %LACK advantage, we recommend AGAINST using %LACK
commands while your computer lesson is under active commands while your computer lesson is under active
development -- especially in the early stages. development -- especially in the early stages.
This is because %LACKs will tend to capture any This is because %LACKs will tend to capture any
GNOSIS.DOC Page 27 GNOSIS.DOC Page 27
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
response which deviates, however slightly, from response which deviates, however slightly, from
your preconceived idea of a right answer. For this your preconceived idea of a right answer. For this
reason, any student response which is matched by a reason, any student response which is matched by a
%LACK command is routed to the teacher report on %LACK command is routed to the teacher report on
the theory that possibly, just possibly, that the theory that possibly, just possibly, that
response might be an alternative correct response response might be an alternative correct response
to the question posed. This routing constitutes an to the question posed. This routing constitutes an
important exception to the general rule; normally, important exception to the general rule; normally,
only unanticipated responses would be routed to the only unanticipated responses would be routed to the
teacher report. teacher report.
Technical Note: Regardless of context, %LACK Technical Note: Regardless of context, %LACK
works as if %NOORDER and %EXTRA were declared works as if %NOORDER and %EXTRA were declared
immediately above it. immediately above it.
17. %LANGUAGE Swedish | English 17. %LANGUAGE Swedish | English
This command tells the system which language This command tells the system which language
to use in communication with the student. The to use in communication with the student. The
command is not necessary if the language is to be command is not necessary if the language is to be
English. (The language used in communicating with English. (The language used in communicating with
the teacher at the time his script is being the teacher at the time his script is being
processed by GNOSIS is not affected by the processed by GNOSIS is not affected by the
%LANGUAGE command; it is always English.) %LANGUAGE command; it is always English.)
18. %LOCK <empty> 18. %LOCK <empty>
PERMANENTLY disables the backstepping and PERMANENTLY disables the backstepping and
skipping provisions of GNOSIS. The student is in skipping provisions of GNOSIS. The student is in
effect "locked" into the lesson path defined by the effect "locked" into the lesson path defined by the
teacher unless the teacher explicitly supplies teacher unless the teacher explicitly supplies
branching opportunities in the lesson itself. branching opportunities in the lesson itself.
(Note, however, that the student can still END the (Note, however, that the student can still END the
lesson by typing "stop".) There does not exist, as lesson by typing "stop".) There does not exist, as
yet, a corresponding %UNLOCK command. yet, a corresponding %UNLOCK command.
19. %NAME <empty> 19. %NAME <empty>
Causes the GNOSIS lesson to exchange greetings Causes the GNOSIS lesson to exchange greetings
with the student at the start of the lesson. The with the student at the start of the lesson. The
student's full name is requested (and routed to the student's full name is requested (and routed to the
<lessonname>.DTA file, if any) and his first name <lessonname>.DTA file, if any) and his first name
is saved for use in I/O routines. is saved for use in I/O routines.
20. %NEUTRAL <an answer not right or wrong> | <empty> 20. %NEUTRAL <an answer not right or wrong> | <empty>
<optional line(s) of comments> <optional line(s) of comments>
This command tells GNOSIS to search for a This command tells GNOSIS to search for a
response and, if it is found, to interpret it as response and, if it is found, to interpret it as
being neither correct nor incorrect. If the being neither correct nor incorrect. If the
neutral target text is found in the student's neutral target text is found in the student's
response, then any line(s) of comments or hints response, then any line(s) of comments or hints
provided by the teacher will be displayed to the provided by the teacher will be displayed to the
student at that point. The default for %NEUTRAL student at that point. The default for %NEUTRAL
GNOSIS.DOC Page 28 GNOSIS.DOC Page 28
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
commands is "%GOTO next;" so the teacher who wants commands is "%GOTO next;" so the teacher who wants
a question repeated after GNOSIS has found a a question repeated after GNOSIS has found a
neutral match will have to insert "%GOTO repeat;" neutral match will have to insert "%GOTO repeat;"
after that %NEUTRAL command (and comments, if any). after that %NEUTRAL command (and comments, if any).
Technical Note: The procedure "extratest" is Technical Note: The procedure "extratest" is
NOT called for %NEUTRAL commands with empty answer NOT called for %NEUTRAL commands with empty answer
patterns. Thus clever use of "%NEUTRAL <empty>" patterns. Thus clever use of "%NEUTRAL <empty>"
should enable the teacher to trap most misspelled should enable the teacher to trap most misspelled
responses with no prejudice to the student's score responses with no prejudice to the student's score
-- or ego. -- or ego.
21. %NEXTLESSON run("<lessonname>");|r("<lessonname>"); 21. %NEXTLESSON run("<lessonname>");|r("<lessonname>");
This command tells GNOSIS which lesson to run This command tells GNOSIS which lesson to run
after the student finishes the current lesson. after the student finishes the current lesson.
Transfer to this lesson is wholly automatic at the Transfer to this lesson is wholly automatic at the
point of exit, just as if the new lesson had been point of exit, just as if the new lesson had been
called up by GNOSIS directly, without intervention called up by GNOSIS directly, without intervention
of the monitor.[7] of the monitor.[7]
The next lesson can be any RUN-able or R-able The next lesson can be any RUN-able or R-able
program, i.e., any program with the extension .SAV, program, i.e., any program with the extension .SAV,
.EXE or .SHR). "run("<lesson name>");" is used .EXE or .SHR). "run("<lesson name>");" is used
when the lesson resides in the student's area,[8] when the lesson resides in the student's area,[8]
"r("<lesson name>");" when it resides in the SYS: "r("<lesson name>");" when it resides in the SYS:
area.[9] area.[9]
Technical Note: The literal which replaces Technical Note: The literal which replaces
"<lesson name>" must be a single filename, without "<lesson name>" must be a single filename, without
extension. extension.
22. %NOCONTROLC <empty> 22. %NOCONTROLC <empty>
[Partially Implemented] [Partially Implemented]
In this mode, if a student types a CTRL-C, he In this mode, if a student types a CTRL-C, he
will not be returned to the monitor level. will not be returned to the monitor level.
Instead, he will be logged off the system without Instead, he will be logged off the system without
further ado.[10] (Thus a single CTRL-C becomes further ado.[10] (Thus a single CTRL-C becomes
--------------- ---------------
7. R.MAC and RUN.MAC, the programs responsible for 7. R.MAC and RUN.MAC, the programs responsible for
this effect, are listed in an appendix. this effect, are listed in an appendix.
8. If a library has been established (e.g., with the 8. If a library has been established (e.g., with the
line "LOGIN/LIB:[<account number>]" in the student's line "LOGIN/LIB:[<account number>]" in the student's
SWITCH.INI file), then "run" will tap programs in the SWITCH.INI file), then "run" will tap programs in the
library as well as those in the account itself. library as well as those in the account itself.
9. A variant of these, "pub("<lesson name>");", is 9. A variant of these, "pub("<lesson name>");", is
also supported by GNOSIS for systems with a "PUB:" area. also supported by GNOSIS for systems with a "PUB:" area.
10. INTRUT.MAC, the program responsible for this 10. INTRUT.MAC, the program responsible for this
effect, is listed in an appendix. effect, is listed in an appendix.
GNOSIS.DOC Page 29 GNOSIS.DOC Page 29
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
functionally equivalent to BASIC's "BYE" command.) functionally equivalent to BASIC's "BYE" command.)
Note: If the student types SEVERAL CTRL-C's Note: If the student types SEVERAL CTRL-C's
in rapid succession, the effect will be to run and in rapid succession, the effect will be to run and
then abort LOGOUT, thus leaving the student logged then abort LOGOUT, thus leaving the student logged
in and at monitor level. It is hard to see how in and at monitor level. It is hard to see how
this bug could be fixed without making it this bug could be fixed without making it
impossible to abort LOGOUT. impossible to abort LOGOUT.
23. %NOEXTRA <empty> 23. %NOEXTRA <empty>
This command will influence the way in which This command will influence the way in which
student responses are compared to canned answer student responses are compared to canned answer
patterns. After a %NOEXTRA command -- and until patterns. After a %NOEXTRA command -- and until
the next %EXTRA command -- a student's response the next %EXTRA command -- a student's response
will be considered wrong if it contains ANY will be considered wrong if it contains ANY
characters not present in the canned answer characters not present in the canned answer
pattern. pattern.
24. %NOJUSTIFY <empty> 24. %NOJUSTIFY <empty>
Switches off the text justifying routines Switches off the text justifying routines
until the next occurrence of %JUSTIFY. This means until the next occurrence of %JUSTIFY. This means
that all text will be displayed exactly as typed that all text will be displayed exactly as typed
in, without change. GNOSIS begins processing in in, without change. GNOSIS begins processing in
the %NOJUSTIFY mode. the %NOJUSTIFY mode.
25. %NOORDER <empty> 25. %NOORDER <empty>
This command will influence the way in which This command will influence the way in which
student responses are compared to canned answer student responses are compared to canned answer
patterns. After the %NOORDER command -- and until patterns. After the %NOORDER command -- and until
the next %ORDER command -- a student's response the next %ORDER command -- a student's response
will be considered correct even if the elements of will be considered correct even if the elements of
the student's response do not appear in the same the student's response do not appear in the same
order as the elements of the canned answer pattern. order as the elements of the canned answer pattern.
(ALL the necessary elements must be present, (ALL the necessary elements must be present,
however, or the response is considered wrong.) however, or the response is considered wrong.)
GNOSIS is initialized to the %NOORDER mode and will GNOSIS is initialized to the %NOORDER mode and will
remain in that mode until the first %ORDER command remain in that mode until the first %ORDER command
(if any) is encountered. (if any) is encountered.
26. %ORDER <empty> 26. %ORDER <empty>
This command will influence the way in which This command will influence the way in which
student responses are compared to canned answer student responses are compared to canned answer
patterns. After a %ORDER command -- and until the patterns. After a %ORDER command -- and until the
next %NOORDER command -- a student's response will next %NOORDER command -- a student's response will
be considered correct only if the elements of the be considered correct only if the elements of the
student's response appear in PRECISELY the same student's response appear in PRECISELY the same
order as the elements of the canned answer pattern. order as the elements of the canned answer pattern.
GNOSIS.DOC Page 30 GNOSIS.DOC Page 30
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
27. %PROCEDURE <one or more lines of ALGOL code>; 27. %PROCEDURE <one or more lines of ALGOL code>;
This command is used to make a standard ALGOL This command is used to make a standard ALGOL
procedure declaration. Code following the procedure declaration. Code following the
%PROCEDURE command is processed like code following %PROCEDURE command is processed like code following
the %ALGOL command (see above), except that it is the %ALGOL command (see above), except that it is
written into the lesson at the point where written into the lesson at the point where
procedure declarations belong. procedure declarations belong.
Technical Note: The %PROCEDURE command itself Technical Note: The %PROCEDURE command itself
is not copied, since it might well have been is not copied, since it might well have been
abbreviated to %PRO; thus the terms "PROCEDURE", abbreviated to %PRO; thus the terms "PROCEDURE",
"EXTERNAL PROCEDURE", and so on should occur "EXTERNAL PROCEDURE", and so on should occur
immediately after %PROCEDURE even though this might immediately after %PROCEDURE even though this might
appear redundant. appear redundant.
28. %QEND <one line of ALGOL code>[;] | <empty> 28. %QEND <one line of ALGOL code>[;] | <empty>
This command causes GNOSIS to close a This command causes GNOSIS to close a
question-and-answer processing loop. This command question-and-answer processing loop. This command
is rarely used since %TEXT, %QUESTION and %END is rarely used since %TEXT, %QUESTION and %END
contain this command implicitly. However, %QEND is contain this command implicitly. However, %QEND is
sometimes useful before certain %ALGOL commands sometimes useful before certain %ALGOL commands
since those commands do NOT implicitly close the since those commands do NOT implicitly close the
question-and-answer loop. So, for example, if you question-and-answer loop. So, for example, if you
had an independent block of ALGOL code to insert had an independent block of ALGOL code to insert
between two %QUESTION commands, it would be between two %QUESTION commands, it would be
necessary to use %QEND after the first question and necessary to use %QEND after the first question and
answer patterns. answer patterns.
29. %QUESTION <one line of ALGOL code>[;] | <empty> 29. %QUESTION <one line of ALGOL code>[;] | <empty>
<question to be displayed -- one or more lines> <question to be displayed -- one or more lines>
The %QUESTION command, like the %TEXT command, The %QUESTION command, like the %TEXT command,
can take as its argument a single line of ALGOL can take as its argument a single line of ALGOL
code, usually a condition statement and/or a label. code, usually a condition statement and/or a label.
(Refer to description of the %TEXT command, below.) (Refer to description of the %TEXT command, below.)
In addition to causing the question to be In addition to causing the question to be
displayed, the %QUESTION command invokes a response displayed, the %QUESTION command invokes a response
input and evaluation routine which continues input and evaluation routine which continues
GNOSIS.DOC Page 31 GNOSIS.DOC Page 31
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
to cycle until, roughly, the student types in a to cycle until, roughly, the student types in a
correct response or is guessing so wildly that he correct response or is guessing so wildly that he
is receiving no further diagnostic help.[11] is receiving no further diagnostic help.[11]
30. %RIGHT <a possible right answer> 30. %RIGHT <a possible right answer>
<optional line(s) of comments> <optional line(s) of comments>
This command causes GNOSIS to search for an This command causes GNOSIS to search for an
answer pattern and, if it is found, to consider it answer pattern and, if it is found, to consider it
correct. If a match for the canned answer is found correct. If a match for the canned answer is found
in the student's response, then the following in the student's response, then the following
happens: happens:
1. The GNOSIS system gives the student one of 1. The GNOSIS system gives the student one of
several stock messages, all of which have the several stock messages, all of which have the
effect of providing positive feedback. effect of providing positive feedback.
2. If he had previously missed this question then, 2. If he had previously missed this question then,
depending on the circumstances, GNOSIS provides depending on the circumstances, GNOSIS provides
additional stock messages designed to encourage additional stock messages designed to encourage
him. him.
3. The text on the optional line(s) following the 3. The text on the optional line(s) following the
%RIGHT command (until the next GNOSIS command) %RIGHT command (until the next GNOSIS command)
is displayed to the student. is displayed to the student.
4. Various statistical variables (see %TEXT 4. Various statistical variables (see %TEXT
command) are updated. command) are updated.
5. GNOSIS moves on to the next item of business. 5. GNOSIS moves on to the next item of business.
31. %SAME <empty> 31. %SAME <empty>
This command is used to avoid duplicate This command is used to avoid duplicate
storage and typing of comments whenever the comment storage and typing of comments whenever the comment
provided for the previous %RIGHT, %WRONG, %LACK or provided for the previous %RIGHT, %WRONG, %LACK or
%NEUTRAL answer pattern can be reused. As it turns %NEUTRAL answer pattern can be reused. As it turns
out, this need to reuse comments is fairly common, out, this need to reuse comments is fairly common,
causing %SAME to be one of the most frequently causing %SAME to be one of the most frequently
--------------- ---------------
11. As long as a student is supplying responses 11. As long as a student is supplying responses
matched by the canned answers following the answer pattern matched by the canned answers following the answer pattern
commands (i.e., %RIGHT, %WRONG and %LACK [and %NEUTRAL if commands (i.e., %RIGHT, %WRONG and %LACK [and %NEUTRAL if
followed by "%GOTO repeat;"]), then he will be recycled followed by "%GOTO repeat;"]), then he will be recycled
through the question. If he does NOT supply a response through the question. If he does NOT supply a response
which matches any of these, then he will be recycled through which matches any of these, then he will be recycled through
the question once for each "%WRONG <empty>" pattern. That the question once for each "%WRONG <empty>" pattern. That
is, the number of "%WRONG <empty>" commands determines the is, the number of "%WRONG <empty>" commands determines the
number of times a student giving unanticipated (i.e., number of times a student giving unanticipated (i.e.,
unmatched) responses will be recycled through the question. unmatched) responses will be recycled through the question.
If there are 'n' "%WRONG <empty>" commands for the question, If there are 'n' "%WRONG <empty>" commands for the question,
then 'n + 1' unanticipated responses will force GNOSIS to then 'n + 1' unanticipated responses will force GNOSIS to
simulate a correct response. simulate a correct response.
GNOSIS.DOC Page 32 GNOSIS.DOC Page 32
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
encountered commands in GNOSIS lessons. Loosely encountered commands in GNOSIS lessons. Loosely
speaking, %SAME tells GNOSIS to "borrow" the speaking, %SAME tells GNOSIS to "borrow" the
comment immediately preceding the last answer comment immediately preceding the last answer
command. But the technical user should realize command. But the technical user should realize
that, strictly speaking, %SAME causes an that, strictly speaking, %SAME causes an
unconditional branch to the previous response unconditional branch to the previous response
evaluation loop; so not only will the comment be evaluation loop; so not only will the comment be
the same but any %GOTO or %ALGOL command following the same but any %GOTO or %ALGOL command following
that prior comment will also be obeyed. that prior comment will also be obeyed.
Obviously, the first answer command after a Obviously, the first answer command after a
%QUESTION command may not be followed by a %SAME %QUESTION command may not be followed by a %SAME
command since there would, in this case, be no command since there would, in this case, be no
previous comment to reuse. previous comment to reuse.
32. %SGNOSIS <empty> 32. %SGNOSIS <empty>
GNOSIS lessons normally output a header which GNOSIS lessons normally output a header which
tells the student that he is running a GNOSIS tells the student that he is running a GNOSIS
lesson, that it was authored by so-and-so, and that lesson, that it was authored by so-and-so, and that
he can do certain things to control his path he can do certain things to control his path
through the lesson. Also, and the end of the through the lesson. Also, and the end of the
question-and-answer section of the lesson, GNOSIS question-and-answer section of the lesson, GNOSIS
will normally output a corresponding trailer which will normally output a corresponding trailer which
tells the student how he scored. %SGNOSIS (for tells the student how he scored. %SGNOSIS (for
[S]top GNOSIS) will inhibit the display of this [S]top GNOSIS) will inhibit the display of this
header and trailer. The command is useful when you header and trailer. The command is useful when you
want to use GNOSIS to administer a questionnaire. want to use GNOSIS to administer a questionnaire.
33. %SWITCH <switchname> TRUE | <switchname> FALSE 33. %SWITCH <switchname> TRUE | <switchname> FALSE
This command declares and initializes a This command declares and initializes a
Boolean variable with the name <switchname>. Boolean variable with the name <switchname>.
%SWITCH enables the %IF %IFNOT, and %IFEND commands %SWITCH enables the %IF %IFNOT, and %IFEND commands
(see above).[12] (see above).[12]
34. %TEACHER <line with teacher's name, etc.> | <empty> 34. %TEACHER <line with teacher's name, etc.> | <empty>
If this command is included in a lesson, then If this command is included in a lesson, then
teacher reports (of some kind) will be produced for teacher reports (of some kind) will be produced for
the lesson, and students will be told who authored the lesson, and students will be told who authored
the lesson each time the lesson is run. If the the lesson each time the lesson is run. If the
%TEACHER command is used with an empty argument, %TEACHER command is used with an empty argument,
then an anonymous teacher report will be generated then an anonymous teacher report will be generated
and no information about lesson authorship will be and no information about lesson authorship will be
displayed to the student at runtime. displayed to the student at runtime.
--------------- ---------------
12. These commands are discussed further in an 12. These commands are discussed further in an
appendix to this documentation. appendix to this documentation.
GNOSIS.DOC Page 33 GNOSIS.DOC Page 33
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
The <lessonname>.DTA teacher report contains The <lessonname>.DTA teacher report contains
the following information: the following information:
1. The student's full name, if operating in %NAME 1. The student's full name, if operating in %NAME
mode. mode.
2. Unexpected responses to questions in the 2. Unexpected responses to questions in the
lesson. lesson.
This trace will include any unforeseen student This trace will include any unforeseen student
response or, roughly speaking, all those response or, roughly speaking, all those
responses students entered without getting any responses students entered without getting any
specific diagnostic feedback. Recurrent specific diagnostic feedback. Recurrent
unanticipated responses usually signal a need unanticipated responses usually signal a need
to rewrite the lesson with that response as an to rewrite the lesson with that response as an
argument for an answer command -- followed of argument for an answer command -- followed of
course by appropriate comments or hints. course by appropriate comments or hints.
3. Basic statistical data about the student's 3. Basic statistical data about the student's
performance. performance.
These data should not be taken too seriously, These data should not be taken too seriously,
especially when the lesson permits the student especially when the lesson permits the student
to exercise control over skipping and to exercise control over skipping and
backstepping. backstepping.
4. Student comments about the lesson. 4. Student comments about the lesson.
GNOSIS can store as lengthy a comment as the GNOSIS can store as lengthy a comment as the
student wants to type, even if his comment student wants to type, even if his comment
should run on for pages. should run on for pages.
The <lessonname>.SRT report, which is generated if The <lessonname>.SRT report, which is generated if
%DISK is used in conjunction with %TEACHER, %DISK is used in conjunction with %TEACHER,
contains the trace of unexpected responses in a contains the trace of unexpected responses in a
form ready to be input to the utility program SORT. form ready to be input to the utility program SORT.
The following command string usually does the job: The following command string usually does the job:
.R SORT .R SORT
*x.SRT=x.SRT/KEY:1:60:A/ALPHA/RECORD:132 *x.SRT=x.SRT/KEY:1:60:A/ALPHA/RECORD:132
where "x" = <lessonname>.[13] where "x" = <lessonname>.[13]
35. %TEXT <one line of ALGOL code>[;] | <empty> 35. %TEXT <one line of ALGOL code>[;] | <empty>
<text to be displayed -- one or more lines> <text to be displayed -- one or more lines>
--------------- ---------------
13. A MIC program which accomplishes this rather 13. A MIC program which accomplishes this rather
painlessly is listed in an appendix. painlessly is listed in an appendix.
GNOSIS.DOC Page 34 GNOSIS.DOC Page 34
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
The text on the lines following this command, The text on the lines following this command,
and until the next GNOSIS command, is displayed to and until the next GNOSIS command, is displayed to
the student. The %TEXT command can take any single the student. The %TEXT command can take any single
line of ALGOL code as an argument. Usually this line of ALGOL code as an argument. Usually this
code will contain conditions (as arguments for IF code will contain conditions (as arguments for IF
statements) and/or labels. The syntax of condition statements) and/or labels. The syntax of condition
and label can be and label can be
1. <condition with label> ::= [<condition>] 1. <condition with label> ::= [<condition>]
[<label>:] [<label>:]
Note that "<label>:" is, here, a label Note that "<label>:" is, here, a label
DECLARATION. That is, its occurrence here puts DECLARATION. That is, its occurrence here puts
an identifying mark in the lesson at this an identifying mark in the lesson at this
point. If it were an argument for a %GOTO point. If it were an argument for a %GOTO
statement, the terminal punctuation would be a statement, the terminal punctuation would be a
semicolon rather than a colon. The occurrence semicolon rather than a colon. The occurrence
of the colon signifies the declaration of a of the colon signifies the declaration of a
label. label.
2. <condition> ::= IF <condition elements> THEN 2. <condition> ::= IF <condition elements> THEN
[GOTO <label>;] [GOTO <label>;]
Note that <label> functions here as an Note that <label> functions here as an
argument for the GOTO. The label declaration, argument for the GOTO. The label declaration,
consisting of the same label followed by a consisting of the same label followed by a
colon, must have occurred elsewhere in the colon, must have occurred elsewhere in the
script. script.
3. <condition elements> ::= <condition element> [ 3. <condition elements> ::= <condition element> [
AND | OR <condition elements>] AND | OR <condition elements>]
4. <condition element> ::= <variable> <comparer> 4. <condition element> ::= <variable> <comparer>
<constant> <constant>
5. <comparer> ::= <= | >= | = | # 5. <comparer> ::= <= | >= | = | #
6. <label> ::= <a string of letters > | <a mixed 6. <label> ::= <a string of letters > | <a mixed
string of letters and digits which BEGINS with string of letters and digits which BEGINS with
a letter> | <one of the GNOSIS predefined a letter> | <one of the GNOSIS predefined
labels. labels.
7. <variable> ::= score | percent | qcount | 7. <variable> ::= score | percent | qcount |
lasterrors | lastrights | latepercent | lasterrors | lastrights | latepercent |
lastpercent | lastlatepercent | lastscore | lastpercent | lastlatepercent | lastscore |
lastlatescore | <user defined variable> lastlatescore | <user defined variable>
1. "score" = the running total of questions 1. "score" = the running total of questions
for which the student had a correct for which the student had a correct
response on his first try. Note: The response on his first try. Note: The
student's final "score" appears in the student's final "score" appears in the
<lessonname>.DTA file (if any). <lessonname>.DTA file (if any).
GNOSIS.DOC Page 35 GNOSIS.DOC Page 35
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
2. "latescore" = the running total of 2. "latescore" = the running total of
questions for which the student sooner or questions for which the student sooner or
later had a correct response. Note: The later had a correct response. Note: The
student's final "latescore" appears in the student's final "latescore" appears in the
<lessonname>.DTA (if any). <lessonname>.DTA (if any).
3. "percent" = the running percentage of 3. "percent" = the running percentage of
questions for which the student has given a questions for which the student has given a
correct response on his first try. Note: correct response on his first try. Note:
A Student's final "percent" score is routed A Student's final "percent" score is routed
to the <lessonname>.DTA file (if any). to the <lessonname>.DTA file (if any).
4. "qcount" = the running total of questions 4. "qcount" = the running total of questions
which has been put to the student. Note: which has been put to the student. Note:
The final "qcount" is routed to the The final "qcount" is routed to the
<lessonname>.DTA file (if any). <lessonname>.DTA file (if any).
5. "lasterrors" = the number of wrong 5. "lasterrors" = the number of wrong
responses which the student gave to the responses which the student gave to the
previous question. previous question.
6. "lastrights" = the number of right 6. "lastrights" = the number of right
responses which the student gave to the responses which the student gave to the
previous question. Obviously, the value of previous question. Obviously, the value of
"lastrights" will be either 0 or 1. "lastrights" will be either 0 or 1.
7. "latepercent" = the percentage of questions 7. "latepercent" = the percentage of questions
answered correctly by the student since the answered correctly by the student since the
start of the lesson whether the student was start of the lesson whether the student was
correct on the first try or not. A correct on the first try or not. A
student's final "latepercent" score is student's final "latepercent" score is
routed to the <lessonname>.DTA file (if routed to the <lessonname>.DTA file (if
any). any).
8. "lastpercent" = the percentage of questions 8. "lastpercent" = the percentage of questions
answered correctly on the very first try answered correctly on the very first try
since the previous "lastpercent" was since the previous "lastpercent" was
evaluated. evaluated.
9. "lastlatepercent" = the percentage of 9. "lastlatepercent" = the percentage of
questions answered correctly (whether on questions answered correctly (whether on
the first try to afterward) since the the first try to afterward) since the
previous "lastlatepercent" was evaluated. previous "lastlatepercent" was evaluated.
10. "lastscore" = the number of questions 10. "lastscore" = the number of questions
answered correctly on the very first try answered correctly on the very first try
since the previous "lastscore" was since the previous "lastscore" was
evaluated. evaluated.
11. "lastlatescore" = the number of questions 11. "lastlatescore" = the number of questions
answere correctly by the student (whether answere correctly by the student (whether
on the first try or not) since the previous on the first try or not) since the previous
"lastlatescore" was evaluated. "lastlatescore" was evaluated.
GNOSIS.DOC Page 36 GNOSIS.DOC Page 36
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
Attaching a label to a block of text allows Attaching a label to a block of text allows
the teacher to program a jump to that block from the teacher to program a jump to that block from
from other parts of a lesson, either conditionally from other parts of a lesson, either conditionally
or unconditionally. Usually, however, one of the or unconditionally. Usually, however, one of the
previous eleven variables is used so that the previous eleven variables is used so that the
branch is dependent on the evaluation of that branch is dependent on the evaluation of that
variable: variable:
%TEXT text1: %TEXT text1:
... ...
%TEXT IF score < 5 THEN GOTO text1; text2: %TEXT IF score < 5 THEN GOTO text1; text2:
Unless %LOCK is in effect, branching based on Unless %LOCK is in effect, branching based on
"---score" and "qcount" may not have the intended "---score" and "qcount" may not have the intended
result. The "---percent" variables will generally result. The "---percent" variables will generally
fare better under learner control, so it is wise to fare better under learner control, so it is wise to
use them in all environments except the %LOCK use them in all environments except the %LOCK
environment. environment.
Important: Not all words are permitted as Important: Not all words are permitted as
labels or variable names. Some are reserved for labels or variable names. Some are reserved for
other purposes by the GNOSIS system or by ALGOL other purposes by the GNOSIS system or by ALGOL
itself and others, while not reserved, will have itself and others, while not reserved, will have
peculiar effects when used in the GNOSIS script. peculiar effects when used in the GNOSIS script.
To avoid mysterious error messages, especially To avoid mysterious error messages, especially
while learning the GNOSIS system, you will probably while learning the GNOSIS system, you will probably
want to include at least one digit or period (".") want to include at least one digit or period (".")
in your labels. (The first character, however, in your labels. (The first character, however,
must be a letter.) Or, if you prefer, you can refer must be a letter.) Or, if you prefer, you can refer
to the appendix for a list of all words likely to to the appendix for a list of all words likely to
cause problems. cause problems.
36. %VARIABLES <one or more lines of ALGOL code>; 36. %VARIABLES <one or more lines of ALGOL code>;
This command is used to make standard ALGOL This command is used to make standard ALGOL
global variable declarations. %VARIABLES operates global variable declarations. %VARIABLES operates
like %ALGOL (see above), except that the code is like %ALGOL (see above), except that the code is
written into the lesson at the point that variable written into the lesson at the point that variable
declarations are laid out. declarations are laid out.
37. %WRONG <possible wrong answer> | <empty> 37. %WRONG <possible wrong answer> | <empty>
<optional line(s) of comments> <optional line(s) of comments>
This command causes GNOSIS to search for an This command causes GNOSIS to search for an
answer pattern and, if it is found, to consider it answer pattern and, if it is found, to consider it
wrong. If a match for the canned answer is found wrong. If a match for the canned answer is found
in the student's response, then the following in the student's response, then the following
happens: happens:
1. The GNOSIS system gives the student one of 1. The GNOSIS system gives the student one of
several stock messages, all of which have the several stock messages, all of which have the
effect of providing negative feedback. effect of providing negative feedback.
GNOSIS.DOC Page 37 GNOSIS.DOC Page 37
THE GNOSIS COMMAND LANGUAGE THE GNOSIS COMMAND LANGUAGE
2. The text on the optional line(s) following the 2. The text on the optional line(s) following the
%WRONG command (until the next GNOSIS command) %WRONG command (until the next GNOSIS command)
is displayed to the student. is displayed to the student.
3. If the student is still getting meaningful 3. If the student is still getting meaningful
help[14] from the program, he is recycled help[14] from the program, he is recycled
through the question once more; otherwise, through the question once more; otherwise,
GNOSIS simulates a correct response (plus GNOSIS simulates a correct response (plus
commentary for such a response) and moves on to commentary for such a response) and moves on to
the next item of business. the next item of business.
--------------- ---------------
14. As long as a student is supplying responses 14. As long as a student is supplying responses
matched by the canned answers following the answer pattern matched by the canned answers following the answer pattern
commands (i.e., %RIGHT, %WRONG and %LACK [and %NEUTRAL if commands (i.e., %RIGHT, %WRONG and %LACK [and %NEUTRAL if
followed by "%GOTO repeat;"]), then he will be recycled followed by "%GOTO repeat;"]), then he will be recycled
through the question. If he does NOT supply a response through the question. If he does NOT supply a response
which matches any of these, then he will be recycled through which matches any of these, then he will be recycled through
the question once for each "%WRONG <empty>" pattern. That the question once for each "%WRONG <empty>" pattern. That
is, the number of "%WRONG <empty>" commands determines the is, the number of "%WRONG <empty>" commands determines the
number of times a student giving unanticipated (i.e., number of times a student giving unanticipated (i.e.,
unmatched) responses will be recycled through the question. unmatched) responses will be recycled through the question.
If there are 'n' "%WRONG <empty>" commands for the question, If there are 'n' "%WRONG <empty>" commands for the question,
then 'n + 1' unanticipated responses will force GNOSIS to then 'n + 1' unanticipated responses will force GNOSIS to
simulate a correct response. simulate a correct response.
GNOSIS.DOC Page 38 GNOSIS.DOC Page 38
GNOSIS TWO-PAGE SUMMARY GNOSIS TWO-PAGE SUMMARY
4.0 GNOSIS TWO-PAGE SUMMARY 4.0 GNOSIS TWO-PAGE SUMMARY
NOTE NOTE
Some command lines MUST be terminated by a Some command lines MUST be terminated by a
semicolon. Where a semicolon may or may semicolon. Where a semicolon may or may
not be required, a "[;]" appears in the not be required, a "[;]" appears in the
command schema. The "|" separates command schema. The "|" separates
alternatives, one of which must be chosen. alternatives, one of which must be chosen.
1. %ALGOL <one or more lines of ALGOL code>; 1. %ALGOL <one or more lines of ALGOL code>;
2. %BELL <empty> 2. %BELL <empty>
3. %COPYRIGHT <one-line copyright notice> 3. %COPYRIGHT <one-line copyright notice>
4. %DISK <empty> 4. %DISK <empty>
5. %END <empty> 5. %END <empty>
6. %EXTRA <empty> 6. %EXTRA <empty>
7. %FINISH <empty> 7. %FINISH <empty>
8. %HELP <unique one-word designation for help text> 8. %HELP <unique one-word designation for help text>
<one or more lines of help text> <one or more lines of help text>
9. %IF <switchname> 9. %IF <switchname>
10. %IFEND <switchname> 10. %IFEND <switchname>
11. %IFNOT <switchname> 11. %IFNOT <switchname>
12. %INITIALIZE <one or more line of ALGOL code>; 12. %INITIALIZE <one or more line of ALGOL code>;
13. %JUSTIFY <empty> 13. %JUSTIFY <empty>
14. %KEEP <empty> 14. %KEEP <empty>
15. %LACK <element(s) likely to be missing from answer> 15. %LACK <element(s) likely to be missing from answer>
<optional line(s) of comments> <optional line(s) of comments>
16. %LANGUAGE Swedish | English 16. %LANGUAGE Swedish | English
17. %LOCK <empty> 17. %LOCK <empty>
18. %NAME <empty> 18. %NAME <empty>
GNOSIS.DOC Page 39 GNOSIS.DOC Page 39
GNOSIS TWO-PAGE SUMMARY GNOSIS TWO-PAGE SUMMARY
19. %NEUTRAL <an answer not right or wrong> | <empty> 19. %NEUTRAL <an answer not right or wrong> | <empty>
<optional line(s) of comments> <optional line(s) of comments>
20. %NEXTLESSON run("<lessonname>");|r("<lessonname>"); 20. %NEXTLESSON run("<lessonname>");|r("<lessonname>");
21. %NOCONTROLC <empty> 21. %NOCONTROLC <empty>
[Partially Implemented] [Partially Implemented]
22. %NOEXTRA <empty> 22. %NOEXTRA <empty>
23. %NOJUSTIFY <empty> 23. %NOJUSTIFY <empty>
24. %NOORDER <empty> 24. %NOORDER <empty>
25. %ORDER <empty> 25. %ORDER <empty>
26. %PROCEDURE <one or more lines of ALGOL code>; 26. %PROCEDURE <one or more lines of ALGOL code>;
27. %QEND <one line of ALGOL code>[;] | <empty> 27. %QEND <one line of ALGOL code>[;] | <empty>
28. %QUESTION <one line of ALGOL code>[;] | <empty> 28. %QUESTION <one line of ALGOL code>[;] | <empty>
<question to be displayed -- one or more lines> <question to be displayed -- one or more lines>
29. %RIGHT <a possible right answer> 29. %RIGHT <a possible right answer>
<optional line(s) of comments> <optional line(s) of comments>
30. %SAME <empty> 30. %SAME <empty>
31. %SGNOSIS <empty> 31. %SGNOSIS <empty>
32. %SWITCH <switchname> TRUE | <switchname> FALSE 32. %SWITCH <switchname> TRUE | <switchname> FALSE
33. %TEACHER <line with teacher's name, etc.> | <empty> 33. %TEACHER <line with teacher's name, etc.> | <empty>
34. %TEXT <one line of ALGOL code>[;] | <empty> 34. %TEXT <one line of ALGOL code>[;] | <empty>
<text to be displayed -- one or more lines> <text to be displayed -- one or more lines>
35. %VARIABLES <one or more lines of ALGOL code>; 35. %VARIABLES <one or more lines of ALGOL code>;
36. %WRONG <possible wrong answer> | <empty> 36. %WRONG <possible wrong answer> | <empty>
<optional line(s) of comments> <optional line(s) of comments>
GNOSIS.DOC Page 40 GNOSIS.DOC Page 40
PRECEDENCE TABLE FOR GNOSIS COMMANDS PRECEDENCE TABLE FOR GNOSIS COMMANDS
5.0 PRECEDENCE TABLE FOR GNOSIS COMMANDS 5.0 PRECEDENCE TABLE FOR GNOSIS COMMANDS
============================================================ ============================================================
PRECEDENCE COMMAND COMMENT PRECEDENCE COMMAND COMMENT
============================================================ ============================================================
0 %ALGOL Use of these commands is 0 %ALGOL Use of these commands is
0 %EXTRA unrestricted. They may go 0 %EXTRA unrestricted. They may go
0 %GOTO anywhere in the lesson. 0 %GOTO anywhere in the lesson.
0 %IF 0 %IF
0 %IFEND However, the %SWITCH 0 %IFEND However, the %SWITCH
0 %IFNOT command must precede 0 %IFNOT command must precede
0 %JUSTIFY %IFs, %IFENDs and %IFNOTs. 0 %JUSTIFY %IFs, %IFENDs and %IFNOTs.
0 %NOEXTRA 0 %NOEXTRA
0 %NOJUSTIFY 0 %NOJUSTIFY
0 %NOORDER 0 %NOORDER
0 %ORDER 0 %ORDER
------------------------------------------------------------ ------------------------------------------------------------
1 %BELL These commands (if used) 1 %BELL These commands (if used)
1 %COPYRIGHT must precede all those > 1. 1 %COPYRIGHT must precede all those > 1.
1 %DISK (also %DSK or %DISC) 1 %DISK (also %DSK or %DISC)
1 %KEEP 1 %KEEP
1 %LANGUAGE 1 %LANGUAGE
1 %LOCK 1 %LOCK
1 %NAME 1 %NAME
1 %NEXTLESSON 1 %NEXTLESSON
1 %NOCONTROLC 1 %NOCONTROLC
1 %SGNOSIS 1 %SGNOSIS
1 %SWITCH 1 %SWITCH
1 %TEACHER 1 %TEACHER
------------------------------------------------------------ ------------------------------------------------------------
2 %VARIABLES This command (if used) 2 %VARIABLES This command (if used)
must precede all those > 2. must precede all those > 2.
------------------------------------------------------------ ------------------------------------------------------------
3 %HELP These commands (if used) 3 %HELP These commands (if used)
3 %PROCEDURE must precede all those > 3. 3 %PROCEDURE must precede all those > 3.
------------------------------------------------------------ ------------------------------------------------------------
4 %INITIALIZE This command (if used) 4 %INITIALIZE This command (if used)
must precede all those > 4. must precede all those > 4.
------------------------------------------------------------ ------------------------------------------------------------
5 %LACK These commands (if used) 5 %LACK These commands (if used)
5 %NEUTRAL must precede all those > 5. 5 %NEUTRAL must precede all those > 5.
5 %QEND 5 %QEND
5 %QUESTION After %QUESTION, %RIGHTs 5 %QUESTION After %QUESTION, %RIGHTs
5 %RIGHT precede %WRONGs (or %LACKs). 5 %RIGHT precede %WRONGs (or %LACKs).
5 %SAME %NEUTRALs can go anywhere. 5 %SAME %NEUTRALs can go anywhere.
5 %TEXT <empty> patterns should 5 %TEXT <empty> patterns should
5 %WRONG appear last. 5 %WRONG appear last.
------------------------------------------------------------ ------------------------------------------------------------
6 %FINISH This command (if used) must 6 %FINISH This command (if used) must
precede only the %END. precede only the %END.
------------------------------------------------------------ ------------------------------------------------------------
7 %END This command must be last. 7 %END This command must be last.
============================================================ ============================================================
GNOSIS.DOC Page 41 GNOSIS.DOC Page 41
PRECEDENCE TABLE FOR GNOSIS COMMANDS PRECEDENCE TABLE FOR GNOSIS COMMANDS
While GNOSIS does some rudimentary checking for errors While GNOSIS does some rudimentary checking for errors
in precedence, it will accept some contextually awkward in precedence, it will accept some contextually awkward
orderings of the answer pattern commands. For example, orderings of the answer pattern commands. For example,
GNOSIS will accept %NEUTRAL at any point after %QUESTION GNOSIS will accept %NEUTRAL at any point after %QUESTION
even though, in the context of the lesson, that occurrence even though, in the context of the lesson, that occurrence
of %NEUTRAL may have unintended effects. of %NEUTRAL may have unintended effects.
GNOSIS.DOC Page 42 GNOSIS.DOC Page 42
ERROR DIAGNOSIS AND RECOVERY ERROR DIAGNOSIS AND RECOVERY
* *
6.0 ERROR DIAGNOSIS AND RECOVERY 6.0 ERROR DIAGNOSIS AND RECOVERY
6.1 GNOSIS Translator Messages 6.1 GNOSIS Translator Messages
A complete list of all the messages associated with A complete list of all the messages associated with
GNOSIS error diagnostics follows below. Obviously, those GNOSIS error diagnostics follows below. Obviously, those
called "errors" are more serious than the "warnings." called "errors" are more serious than the "warnings."
Regardless of the severity of the error, however, GNOSIS Regardless of the severity of the error, however, GNOSIS
will try to recover and produce a program legal in ALGOL. will try to recover and produce a program legal in ALGOL.
(Note: The program, even if legal, may behave very (Note: The program, even if legal, may behave very
strangely.) Thus, translation will continue despite user strangely.) Thus, translation will continue despite user
error. error.
When a troublesome line is encountered by GNOSIS, When a troublesome line is encountered by GNOSIS,
several things happen in succession: (a) the offending line several things happen in succession: (a) the offending line
is displayed, (b) the appropriate error or warning message is displayed, (b) the appropriate error or warning message
is displayed, (c) a four-digit number is displayed with this is displayed, (c) a four-digit number is displayed with this
message, corresponding to the line number in the GNOSIS message, corresponding to the line number in the GNOSIS
source program (GNOSIS.ALG) which called the error source program (GNOSIS.ALG) which called the error
procedure, (d) the next three lines of the lesson script are procedure, (d) the next three lines of the lesson script are
displayed for the sake of context, and (e) GNOSIS attempts displayed for the sake of context, and (e) GNOSIS attempts
to recover from the error and continues translating. If the to recover from the error and continues translating. If the
lesson script contained no line numbers, then approximate lesson script contained no line numbers, then approximate
line numbers are generated and displayed with the lesson line numbers are generated and displayed with the lesson
lines. Otherwise, the line numbers in the lesson script lines. Otherwise, the line numbers in the lesson script
will be displayed. will be displayed.
In the context of the occurrence of the mistake, all of In the context of the occurrence of the mistake, all of
these messages should prove to be self-explanatory. these messages should prove to be self-explanatory.
6.1.1 GNOSIS Error Messages - 6.1.1 GNOSIS Error Messages -
1. No switchname in %IF-class command. Line will be 1. No switchname in %IF-class command. Line will be
ignored. ignored.
2. Unknown switchname in %IF-class command. Line will 2. Unknown switchname in %IF-class command. Line will
be ignored. be ignored.
GNOSIS.DOC Page 43 GNOSIS.DOC Page 43
ERROR DIAGNOSIS AND RECOVERY ERROR DIAGNOSIS AND RECOVERY
3. Unrecognized command line found. As a result, this 3. Unrecognized command line found. As a result, this
line up to next command line will be ignored. line up to next command line will be ignored.
4. A command line is required at this point. As a 4. A command line is required at this point. As a
result this line up to next command line will be result this line up to next command line will be
ignored. ignored.
5. Command is out of place here. As a result, this 5. Command is out of place here. As a result, this
line up to next command line will be ignored. line up to next command line will be ignored.
6. No previous comment available. Command will be 6. No previous comment available. Command will be
ignored. ignored.
7. No switchname in %SWITCH command. Line will be 7. No switchname in %SWITCH command. Line will be
ignored. ignored.
8. More than 9 switches not allowed. THIS switch will 8. More than 9 switches not allowed. THIS switch will
replace the old number nine. replace the old number nine.
9. Switch value neither "TRUE" nor "FALSE". The 9. Switch value neither "TRUE" nor "FALSE". The
effect of this error is undefined. effect of this error is undefined.
10. Expected answers must precede first empty answer 10. Expected answers must precede first empty answer
pattern. Command will be ignored. pattern. Command will be ignored.
6.1.2 GNOSIS Warning Messages - 6.1.2 GNOSIS Warning Messages -
1. Long input line will be truncated to 132 1. Long input line will be truncated to 132
characters. characters.
2. Character after line-number is not TAB. 2. Character after line-number is not TAB.
3. Command character not first in line. 3. Command character not first in line.
4. %IFEND on non-active switch -- will have no effect. 4. %IFEND on non-active switch -- will have no effect.
5. Semicolon omitted at end of "%GOTO" command. 5. Semicolon omitted at end of "%GOTO" command.
GNOSIS will supply one for you. GNOSIS will supply one for you.
6. You are not using "%" as a command indicator. 6. You are not using "%" as a command indicator.
7. Unknown language. GNOSIS will default to English. 7. Unknown language. GNOSIS will default to English.
8. This switch is doubly defined. 8. This switch is doubly defined.
9. Ignore this message if you have created 9. Ignore this message if you have created
<lessonname>.DTA<155> and <lessonname>.SRT<155> <lessonname>.DTA<155> and <lessonname>.SRT<155>
files to receive teacher reports. files to receive teacher reports.
GNOSIS.DOC Page 44 GNOSIS.DOC Page 44
ERROR DIAGNOSIS AND RECOVERY ERROR DIAGNOSIS AND RECOVERY
10. Ignore this message if you meant to omit teacher's 10. Ignore this message if you meant to omit teacher's
name and address. name and address.
6.2 ALGRTS (ALGOL Run-time System) Messages 6.2 ALGRTS (ALGOL Run-time System) Messages
After these errors, GNOSIS will enter a debugging mode. After these errors, GNOSIS will enter a debugging mode.
Unless the user is familiar with the operation of ALGDDT, he Unless the user is familiar with the operation of ALGDDT, he
should CTRL-C out of the program at this point and rerun should CTRL-C out of the program at this point and rerun
GNOSIS. GNOSIS.
1. ?Run-time error at address <number> 1. ?Run-time error at address <number>
File DSK:<filename> not available or rename failure File DSK:<filename> not available or rename failure
The file GNOSIS tried to open and translate The file GNOSIS tried to open and translate
does not exist. does not exist.
2. ?Run-time error at address <number> 2. ?Run-time error at address <number>
Attempt to read or write over end-of-file on Attempt to read or write over end-of-file on
DSK:<lessonname> DSK:<lessonname>
A %END command was not used to end the lesson A %END command was not used to end the lesson
GNOSIS was translating. GNOSIS was translating.
6.3 ALGOL Compiler Error Messages 6.3 ALGOL Compiler Error Messages
Certain errors may occur when the TRANSLATED lesson Certain errors may occur when the TRANSLATED lesson
(i.e., <lessonname>.ALG) is submitted to the ALGOL compiler. (i.e., <lessonname>.ALG) is submitted to the ALGOL compiler.
These errors are varied and mysterious -- at least, to those These errors are varied and mysterious -- at least, to those
unfamiliar with the ALGOL programming language. When you unfamiliar with the ALGOL programming language. When you
try to identify the source of these errors in your lesson try to identify the source of these errors in your lesson
script, you should concentrate on those portions which are script, you should concentrate on those portions which are
ALGOL-like. These include the code following %ALGOL, ALGOL-like. These include the code following %ALGOL,
%PROCEDURE, %VARIABLES and %INITIALIZE commands. The short %PROCEDURE, %VARIABLES and %INITIALIZE commands. The short
ALGOL sequences after %QUESTION, %TEXT and %QEND are also ALGOL sequences after %QUESTION, %TEXT and %QEND are also
suspect. suspect.
It is impossible to generalize about these error It is impossible to generalize about these error
messages. However, the following checklist should prove messages. However, the following checklist should prove
helpful: helpful:
1. [ ]Did you use a semicolon at the end of the code 1. [ ]Did you use a semicolon at the end of the code
following %ALGOL, %INITIALIZE, %NEXTLESSON, following %ALGOL, %INITIALIZE, %NEXTLESSON,
%PROCEDURE, and %VARIABLES commands? %PROCEDURE, and %VARIABLES commands?
A semicolon is ALWAYS required as A semicolon is ALWAYS required as
end-punctuation in these cases. In addition, a end-punctuation in these cases. In addition, a
semicolon MAY be required after %QUESTION, %TEXT semicolon MAY be required after %QUESTION, %TEXT
and %QEND commands if short ALGOL segments follow and %QEND commands if short ALGOL segments follow
GNOSIS.DOC Page 45 GNOSIS.DOC Page 45
ERROR DIAGNOSIS AND RECOVERY ERROR DIAGNOSIS AND RECOVERY
them. Not all ALGOL segments require the semicolon them. Not all ALGOL segments require the semicolon
as end-punctuation, however (e.g., "%TEXT IF as end-punctuation, however (e.g., "%TEXT IF
lasterrors > 3 THEN"). lasterrors > 3 THEN").
2. [ ]Did you avoid the left and right square bracket, 2. [ ]Did you avoid the left and right square bracket,
the doublequote and the semicolon in lesson the doublequote and the semicolon in lesson
segments within the scope of %JUSTIFY? segments within the scope of %JUSTIFY?
The only ALGOL carriage-control command that The only ALGOL carriage-control command that
can safely be used inside the scope of %JUSTIFY is can safely be used inside the scope of %JUSTIFY is
"[T]", for tabbing. "[T]", for tabbing.
3. [ ]Does a colon follow your labels? 3. [ ]Does a colon follow your labels?
Except when you are using a label as an Except when you are using a label as an
argument for a %GOTO command, the label should be argument for a %GOTO command, the label should be
followed immediately by a colon. followed immediately by a colon.
4. [ ]Does a "%GOTO <label>;" attempt a jump to a 4. [ ]Does a "%GOTO <label>;" attempt a jump to a
non-existent label? non-existent label?
Perhaps you deleted a label without deleting Perhaps you deleted a label without deleting
all the %GOTO commands which had that label as an all the %GOTO commands which had that label as an
argument. argument.
5. [ ]Did you try to use a reserved word or standard 5. [ ]Did you try to use a reserved word or standard
identifier as a label? identifier as a label?
A list of illegal labels (i.e., reserved words A list of illegal labels (i.e., reserved words
and standard identifiers) is given in an appendix. and standard identifiers) is given in an appendix.
You can always avoid errors of this kind by using a You can always avoid errors of this kind by using a
number of period in your labels. (The first number of period in your labels. (The first
character of a label, however, must be a letter.) character of a label, however, must be a letter.)
GNOSIS.DOC Page 46 GNOSIS.DOC Page 46
WRITING ALGOL SEGMENTS INTO YOUR LESSON WRITING ALGOL SEGMENTS INTO YOUR LESSON
* *
7.0 WRITING ALGOL SEGMENTS INTO YOUR LESSON 7.0 WRITING ALGOL SEGMENTS INTO YOUR LESSON
One of the great advantages of GNOSIS compared to all One of the great advantages of GNOSIS compared to all
other CAI author languages is that, in GNOSIS, the lesson other CAI author languages is that, in GNOSIS, the lesson
designer can use the facilities of ALGOL whenever he designer can use the facilities of ALGOL whenever he
pleases. In the usual case, he will be tapping these pleases. In the usual case, he will be tapping these
facilities through the %ALGOL, %VARIABLES, %PROCEDURE, facilities through the %ALGOL, %VARIABLES, %PROCEDURE,
%INITIALIZE and %FINISH commands. Generally speaking, %INITIALIZE and %FINISH commands. Generally speaking,
anything which an ALGOL programmer could do in a standard anything which an ALGOL programmer could do in a standard
ALGOL program he can also do in the GNOSIS lesson script. ALGOL program he can also do in the GNOSIS lesson script.
This includes calling up external FORTRAN routines[15] to This includes calling up external FORTRAN routines[15] to
generate graphics, external MACRO routines to improve generate graphics, external MACRO routines to improve
efficiency, and so on. efficiency, and so on.
In addition, the programmer may want to write segments In addition, the programmer may want to write segments
of ALGOL code which extend GNOSIS in certain ways. To make of ALGOL code which extend GNOSIS in certain ways. To make
it easier to interface this code with the lesson, some of it easier to interface this code with the lesson, some of
the variables and all of the procedures used in GNOSIS the variables and all of the procedures used in GNOSIS
lessons are described below. In addition to the items lessons are described below. In addition to the items
discussed, the user who wants to take advantage of standard discussed, the user who wants to take advantage of standard
features should recall that standard labels exist within the features should recall that standard labels exist within the
lesson. See the discussion of these in connection with the lesson. See the discussion of these in connection with the
explanation of the %GOTO command, above. explanation of the %GOTO command, above.
7.1 Standard Variables And Procedures 7.1 Standard Variables And Procedures
--------------- ---------------
15. See "Creating Procedures," below, section 7.3 for 15. See "Creating Procedures," below, section 7.3 for
further information about calling external FORTRAN routines. further information about calling external FORTRAN routines.
GNOSIS.DOC Page 47 GNOSIS.DOC Page 47
WRITING ALGOL SEGMENTS INTO YOUR LESSON WRITING ALGOL SEGMENTS INTO YOUR LESSON
7.1.1 GNOSIS Variables - 7.1.1 GNOSIS Variables -
1. Name: "answercopy" 1. Name: "answercopy"
Type: STRING Type: STRING
This variable contains the last student This variable contains the last student
response input by GNOSIS. Thus "%ALGOL response input by GNOSIS. Thus "%ALGOL
Write(answercopy);Newline;" causes that response to Write(answercopy);Newline;" causes that response to
be echoed on the terminal exactly as the student be echoed on the terminal exactly as the student
typed it. typed it.
2. Name: "firstname" 2. Name: "firstname"
Type: STRING Type: STRING
This variable contains (%NAME mode only) the This variable contains (%NAME mode only) the
first name of the student. Thus first name of the student. Thus
%ALGOL IF percent > 90 THEN %ALGOL IF percent > 90 THEN
personalize("Nice goin'!"); personalize("Nice goin'!");
Newline; Newline;
will, under the proper circumstances, cause "Nice will, under the proper circumstances, cause "Nice
goin', HARRY!" to be typed out on the terminal goin', HARRY!" to be typed out on the terminal
(assuming the student's first name was Harry). (assuming the student's first name was Harry).
This effect occurs because the procedure This effect occurs because the procedure
"personalize" uses the value of "firstname" now and "personalize" uses the value of "firstname" now and
then at the tail end of string constants it writes then at the tail end of string constants it writes
to the student. to the student.
3. Name: "right[0]" ... "right[9]" 3. Name: "right[0]" ... "right[9]"
"wrong[0]" ... "wrong[9]" "wrong[0]" ... "wrong[9]"
Type: STRING ARRAYs Type: STRING ARRAYs
If you want some offbeat language to be used If you want some offbeat language to be used
when the student gets a question right, you could when the student gets a question right, you could
use following lines: use following lines:
... ...
%INITIALIZE %INITIALIZE
right[0]:= "Right on!"; right[0]:= "Right on!";
right[1]:= "Terrific!"; right[1]:= "Terrific!";
right[2]:= "Congratulations!"; right[2]:= "Congratulations!";
... ...
Similar redefinitions of the stock comments for Similar redefinitions of the stock comments for
wrong responses could also be entered, e.g., wrong responses could also be entered, e.g.,
... ...
%INITIALIZE %INITIALIZE
wrong[0]:= "Shame on you!"; wrong[0]:= "Shame on you!";
wrong[1]:= "You blew it."; wrong[1]:= "You blew it.";
GNOSIS.DOC Page 48 GNOSIS.DOC Page 48
WRITING ALGOL SEGMENTS INTO YOUR LESSON WRITING ALGOL SEGMENTS INTO YOUR LESSON
wrong[2]:= "Not even close."; wrong[2]:= "Not even close.";
... ...
4. Names: "lasterrors" 4. Names: "lasterrors"
"lastrights" "lastrights"
"score" "score"
"latescore" "latescore"
"qcount" "qcount"
"lastqcount" "lastqcount"
"lastqkount" "lastqkount"
"lastscorecount", "lastscorecount",
"lastlatescorecount" "lastlatescorecount"
"lastscorekount" "lastscorekount"
"lastlatescorekount" "lastlatescorekount"
Type: INTEGER Type: INTEGER
See the discussion of these variables in See the discussion of these variables in
connection with the explanation of the %TEXT connection with the explanation of the %TEXT
command above. command above.
7.1.2 GNOSIS Procedures - 7.1.2 GNOSIS Procedures -
1. Name: "getline" 1. Name: "getline"
Typeless Typeless
"Getline" reads in a line of text input by the "Getline" reads in a line of text input by the
student, dumping it in the STRING "answer". Column student, dumping it in the STRING "answer". Column
one of the line is checked to see if the student one of the line is checked to see if the student
typed "%", indicating that he wanted to interrupt typed "%", indicating that he wanted to interrupt
the flow of the lesson. the flow of the lesson.
2. Name: "here" 2. Name: "here"
Type: BOOLEAN Type: BOOLEAN
Parameter Type: STRING, passed by value Parameter Type: STRING, passed by value
"Here" determines whether the argument string "Here" determines whether the argument string
can be found beginning at "pos" in the student can be found beginning at "pos" in the student
response. Blanks, but nothing else, may precede response. Blanks, but nothing else, may precede
the matching word. "Here" is mostly used for the matching word. "Here" is mostly used for
responses matched in the %NOEXTRA mode. responses matched in the %NOEXTRA mode.
3. Name: "anywhere" 3. Name: "anywhere"
Type: BOOLEAN Type: BOOLEAN
Parameter Type: STRING, passed by value Parameter Type: STRING, passed by value
GNOSIS.DOC Page 49 GNOSIS.DOC Page 49
WRITING ALGOL SEGMENTS INTO YOUR LESSON WRITING ALGOL SEGMENTS INTO YOUR LESSON
"Anywhere" determines whether the argument "Anywhere" determines whether the argument
string can be found anywhere in the student string can be found anywhere in the student
response after "pos". Blanks and unmatched strings response after "pos". Blanks and unmatched strings
will be bypassed. "Anywhere" is used in the %EXTRA will be bypassed. "Anywhere" is used in the %EXTRA
mode and in the %NOEXTRA %NOORDER mode. "Anywhere" mode and in the %NOEXTRA %NOORDER mode. "Anywhere"
will substitute blanks for all characters in the will substitute blanks for all characters in the
matched strings. This allows the program (e.g., in matched strings. This allows the program (e.g., in
the %NOEXTRA mode) to determine whether there are the %NOEXTRA mode) to determine whether there are
any non-blank characters in the student response. any non-blank characters in the student response.
In the %NOEXTRA mode, his response will be wrong if In the %NOEXTRA mode, his response will be wrong if
any non-blank characters remain. any non-blank characters remain.
4. Name: "random" 4. Name: "random"
Type: INTEGER Type: INTEGER
"Random" is a number generator which gives a "Random" is a number generator which gives a
random number between 0 and 9. The generator will random number between 0 and 9. The generator will
not repeat itself until after 862 generations.[16] not repeat itself until after 862 generations.[16]
5. Name: "personalize" 5. Name: "personalize"
Typeless Typeless
Parameter Type: STRING, passed by value Parameter Type: STRING, passed by value
"Personalize" uses the student's firstname in "Personalize" uses the student's firstname in
conversational I/O to give a personal touch to the conversational I/O to give a personal touch to the
lessons. To avoid monotony and to further lessons. To avoid monotony and to further
efficiency, the probability that the message will efficiency, the probability that the message will
be personalized is only .2. be personalized is only .2.
6. Name: "rightmessage" 6. Name: "rightmessage"
Typeless Typeless
Parameterless Parameterless
"Rightmessage" is called when a student has "Rightmessage" is called when a student has
made a correct response. He is told about this, made a correct response. He is told about this,
and the score is updated. The message to the and the score is updated. The message to the
student is different depending on whether he student is different depending on whether he
succeeds on the fist try or only after previous succeeds on the fist try or only after previous
fruitless attempts. Random numbers are used to fruitless attempts. Random numbers are used to
choose between ten different messages to give some choose between ten different messages to give some
--------------- ---------------
16. An external FORTRAN call would have given us this, 16. An external FORTRAN call would have given us this,
but we did not wish to make GNOSIS dependent upon the but we did not wish to make GNOSIS dependent upon the
PRESENT conventions for external calls in ALGOL. Indeed, PRESENT conventions for external calls in ALGOL. Indeed,
these seem to be changing with each new release. Of course, these seem to be changing with each new release. Of course,
if the lesson author uses "%NOCONTROLC" or "%NEXTLESSON" if the lesson author uses "%NOCONTROLC" or "%NEXTLESSON"
then GNOSIS does make an external call. However, it is the then GNOSIS does make an external call. However, it is the
FORTRAN interface for these calls which seems to be evolving FORTRAN interface for these calls which seems to be evolving
most rapidly, not the MACRO interface. most rapidly, not the MACRO interface.
GNOSIS.DOC Page 50 GNOSIS.DOC Page 50
WRITING ALGOL SEGMENTS INTO YOUR LESSON WRITING ALGOL SEGMENTS INTO YOUR LESSON
variation to the conversation. variation to the conversation.
7. Name: "wrongmessage" 7. Name: "wrongmessage"
Typeless Typeless
Parameterless Parameterless
"Wrongmessage" is called when a student has "Wrongmessage" is called when a student has
made an erroneous response. He is told about this, made an erroneous response. He is told about this,
and the lesson statistics are updated. Random and the lesson statistics are updated. Random
numbers are used to choose between ten different numbers are used to choose between ten different
messages in order provide some variation in the messages in order provide some variation in the
conversation. conversation.
8. Name: "pause" 8. Name: "pause"
Typeless Typeless
Parameterless Parameterless
Lesson text is given to the student in small Lesson text is given to the student in small
portions. One reason for this is that it is easier portions. One reason for this is that it is easier
to read a little at a time. Another reason is that to read a little at a time. Another reason is that
display terminals have a limited screen size. The display terminals have a limited screen size. The
"pause" PROCEDURE produces a pause in the display "pause" PROCEDURE produces a pause in the display
of text to the student, and she can continue of text to the student, and she can continue
whenever she has finished examining the displayed whenever she has finished examining the displayed
material. To go on, she simply pushes the "RETURN" material. To go on, she simply pushes the "RETURN"
key. Normally, this PROCEDURE is called between key. Normally, this PROCEDURE is called between
each %TEXT or %QUESTION, but GNOSIS will introduce each %TEXT or %QUESTION, but GNOSIS will introduce
ADDITIONAL automatic pause points within large ADDITIONAL automatic pause points within large
blocks of text or question material. The teacher blocks of text or question material. The teacher
can inhibit pauses BETWEEN "%" commands by can inhibit pauses BETWEEN "%" commands by
"nopause:= TRUE", but the pauses which GNOSIS "nopause:= TRUE", but the pauses which GNOSIS
inserts in long text blocks cannot be inhibited. inserts in long text blocks cannot be inhibited.
9. Name: "page" 9. Name: "page"
Typeless Typeless
Parameterless Parameterless
"Page" can be called by the teacher when he "Page" can be called by the teacher when he
wants to blank the screen on a display terminal). wants to blank the screen on a display terminal).
The effect produced is, of course, terminal The effect produced is, of course, terminal
dependent. dependent.
10. Name: "extratest" 10. Name: "extratest"
Typeless Typeless
Parameterless Parameterless
"Extratest" will flag and display those parts "Extratest" will flag and display those parts
of the student response which WERE matched by the of the student response which WERE matched by the
teacher answer pattern IF the student response teacher answer pattern IF the student response
contained extra (i.e., superfluous) characters contained extra (i.e., superfluous) characters
GNOSIS.DOC Page 51 GNOSIS.DOC Page 51
WRITING ALGOL SEGMENTS INTO YOUR LESSON WRITING ALGOL SEGMENTS INTO YOUR LESSON
"Extratest" is called automatically for %RIGHT "Extratest" is called automatically for %RIGHT
responses in the %EXTRA mode. responses in the %EXTRA mode.
11. Name: "percent" 11. Name: "percent"
Type: REAL Type: REAL
Parameterless Parameterless
"Percent" returns the percentage of questions "Percent" returns the percentage of questions
answered correctly by the student on his very first answered correctly by the student on his very first
try since the start of the lesson. try since the start of the lesson.
12. Name: "latepercent" 12. Name: "latepercent"
Type: REAL Type: REAL
Parameterless Parameterless
"Latepercent" returns the percentage of "Latepercent" returns the percentage of
questions answered correctly by the student since questions answered correctly by the student since
the start of the lesson whether student was correct the start of the lesson whether student was correct
on the first try or afterward. on the first try or afterward.
13. Name: "lastscore" 13. Name: "lastscore"
Type: INTEGER Type: INTEGER
Parameterless Parameterless
"Lastscore" returns the number of questions "Lastscore" returns the number of questions
answered correctly on the very first try since this answered correctly on the very first try since this
PROCEDURE was last called. PROCEDURE was last called.
14. Name: "lastlatescore" 14. Name: "lastlatescore"
Type: INTEGER Type: INTEGER
Parameterless Parameterless
"Lastlatescore" returns the number of "Lastlatescore" returns the number of
questions answered correctly since this PROCEDURE questions answered correctly since this PROCEDURE
was last called whether student was correct on the was last called whether student was correct on the
very first try or afterward. very first try or afterward.
15. Name: "lastpercent" 15. Name: "lastpercent"
Type: REAL Type: REAL
Parameterless Parameterless
"Lastpercent" returns the percentage of "Lastpercent" returns the percentage of
questions answered correctly on the very first try questions answered correctly on the very first try
since this PROCEDURE was last called. since this PROCEDURE was last called.
16. Name: "lastlatepercent" 16. Name: "lastlatepercent"
Type: REAL Type: REAL
Parameterless Parameterless
GNOSIS.DOC Page 52 GNOSIS.DOC Page 52
WRITING ALGOL SEGMENTS INTO YOUR LESSON WRITING ALGOL SEGMENTS INTO YOUR LESSON
"Lastlatepercent" returns the percentage of "Lastlatepercent" returns the percentage of
questions answered correctly since this PROCEDURE questions answered correctly since this PROCEDURE
was last called whether student was correct on the was last called whether student was correct on the
first try or afterward. first try or afterward.
17. Name: "putaway" 17. Name: "putaway"
Typeless Typeless
Parameter Type: STRING, passed by value Parameter Type: STRING, passed by value
If the lesson contained a report-generating If the lesson contained a report-generating
command, then unexpected student responses are command, then unexpected student responses are
written into a pair of reports, <lessonname>.DTA written into a pair of reports, <lessonname>.DTA
and <lessonname>.SRT, which the teacher can use to and <lessonname>.SRT, which the teacher can use to
improve the lesson. "Putaway" writes the improve the lesson. "Putaway" writes the
unexpected responses in these files. unexpected responses in these files.
18. Name: "putmessage" 18. Name: "putmessage"
Typeless Typeless
Parameter Typeless Parameter Typeless
If no disk files are being generated for If no disk files are being generated for
teacher reports, "Putmessage" will tell the student teacher reports, "Putmessage" will tell the student
to send hardcopy reports to the teacher -- unless to send hardcopy reports to the teacher -- unless
no teacher's name and address was supplied with no teacher's name and address was supplied with
%TEACHER command) %TEACHER command)
19. Name: "tryagain" 19. Name: "tryagain"
Typeless Typeless
Parameterless Parameterless
Questions output to students who give no Questions output to students who give no
response, a wrong response, or an incomplete response, a wrong response, or an incomplete
response are usually repeated by GNOSIS. response are usually repeated by GNOSIS.
"Tryagain" will output to such students a "try "Tryagain" will output to such students a "try
again" message which varies according to again" message which varies according to
circumstances. In %NEUTRAL mode, the message will circumstances. In %NEUTRAL mode, the message will
always be "Please try again". Otherwise, the always be "Please try again". Otherwise, the
content of the message depends on the number of content of the message depends on the number of
times the student has failed to give a correct times the student has failed to give a correct
response. response.
20. Name: "giveanswer" 20. Name: "giveanswer"
Typeless Typeless
Parameterless Parameterless
"Giveanswer" displays a right answer to a "Giveanswer" displays a right answer to a
student who is skipping the question or who student who is skipping the question or who
repeatedly fails to give a right response. The repeatedly fails to give a right response. The
response given will always be the one following the response given will always be the one following the
FIRST %RIGHT command for the preceding %QUESTION. FIRST %RIGHT command for the preceding %QUESTION.
GNOSIS.DOC Page 53 GNOSIS.DOC Page 53
WRITING ALGOL SEGMENTS INTO YOUR LESSON WRITING ALGOL SEGMENTS INTO YOUR LESSON
7.2 Creating Variables 7.2 Creating Variables
A lesson designer will often need extra variables. In A lesson designer will often need extra variables. In
GNOSIS, these are extremely easy to declare, initialize and GNOSIS, these are extremely easy to declare, initialize and
use. For example, if it is important to know how well a use. For example, if it is important to know how well a
student is doing on each part of a lesson, then the author student is doing on each part of a lesson, then the author
can proceed as follows: can proceed as follows:
... ...
%VARIABLES INTEGER firstpartscore, secondpartscore; %VARIABLES INTEGER firstpartscore, secondpartscore;
... ...
%INITIALIZE firstpartscore:= secondpartscore:= 0; %INITIALIZE firstpartscore:= secondpartscore:= 0;
... ...
%QUESTION %QUESTION
!Last question in first part of lesson !Last question in first part of lesson
... ...
%QEND firstpartscore:= score; %QEND firstpartscore:= score;
%QUESTION IF firstpartscore > 9 THEN %QUESTION IF firstpartscore > 9 THEN
You are doing very well so far. Would you You are doing very well so far. Would you
like to skip the rest of the lesson? like to skip the rest of the lesson?
%NEUTRAL yes %NEUTRAL yes
%GOTO endoflesson; %GOTO endoflesson;
%NEUTRAL no %NEUTRAL no
!"GOTO next;" is the default. !"GOTO next;" is the default.
%NEUTRAL %NEUTRAL
Please answer 'yes' or 'no'. Please answer 'yes' or 'no'.
%GOTO repeat; %GOTO repeat;
... ...
%QUESTION %QUESTION
!Last question in second part of lesson !Last question in second part of lesson
... ...
%QEND secondpartscore:= score - firstpartscore; %QEND secondpartscore:= score - firstpartscore;
%ALGOL IF secondpartscore > firstpartscore THEN %ALGOL IF secondpartscore > firstpartscore THEN
BEGIN BEGIN
Write("You did better in the second part, "); Write("You did better in the second part, ");
IF firstname = "" THEN Write("SOCRATES") ELSE IF firstname = "" THEN Write("SOCRATES") ELSE
Write(firstname); Write(firstname);
Write("!"); Write("!");
Newline Newline
END; END;
More commonly, the lesson author will want to declare a More commonly, the lesson author will want to declare a
whole array of variables, e.g., whole array of variables, e.g.,
... ...
%VARIABLES INTEGER ARRAY partscores[1:10]; %VARIABLES INTEGER ARRAY partscores[1:10];
... ...
%INITIALIZE %INITIALIZE
BEGIN BEGIN
INTEGER i; INTEGER i;
FOR i:= 1 STEP 1 UNTIL 10 DO partscores[i]:= 0 FOR i:= 1 STEP 1 UNTIL 10 DO partscores[i]:= 0
END; END;
GNOSIS.DOC Page 54 GNOSIS.DOC Page 54
WRITING ALGOL SEGMENTS INTO YOUR LESSON WRITING ALGOL SEGMENTS INTO YOUR LESSON
7.3 Creating Procedures 7.3 Creating Procedures
ALGOL procedures are easy to insert in the lesson ALGOL procedures are easy to insert in the lesson
script and easy to call, e.g., script and easy to call, e.g.,
... ...
%PROCEDURE PROCEDURE echoinput; %PROCEDURE PROCEDURE echoinput;
BEGIN BEGIN
Write("Your last response, as 'seen' "); Write("Your last response, as 'seen' ");
Write("by the program was:"); Write("by the program was:");
Newline; Newline;
Write(answercopy); Write(answercopy);
Newline; Newline;
Write("That was not one of the choices."); Write("That was not one of the choices.");
Newline Newline
END; END;
... ...
%QUESTION %QUESTION
... ...
!Allowable responses to this question were !Allowable responses to this question were
!A, B, C or D. One of these was right and !A, B, C or D. One of these was right and
!the other three were wrong. The student !the other three were wrong. The student
!typed X, thus matching none of the above. !typed X, thus matching none of the above.
!His response shouldn't be counted wrong, !His response shouldn't be counted wrong,
!so we proceed to trap it as follows. !so we proceed to trap it as follows.
%NEUTRAL %NEUTRAL
%ALGOL echoinput; %ALGOL echoinput;
%GOTO repeat; %GOTO repeat;
!GNOSIS defaults to "GOTO next" after %NEUTRAL !GNOSIS defaults to "GOTO next" after %NEUTRAL
... ...
External procedures can be declared and used too, of External procedures can be declared and used too, of
course. course.
FORTRAN subroutines may easily be incorporated in the FORTRAN subroutines may easily be incorporated in the
GNOSIS lesson script, e.g., GNOSIS lesson script, e.g.,
... ...
%PROCEDURE EXTERNAL FORTRAN PROCEDURE foo(x, y); %PROCEDURE EXTERNAL FORTRAN PROCEDURE foo(x, y);
INTEGER x, y; INTEGER x, y;
... ...
Having been declared, "foo" can then can then be called by Having been declared, "foo" can then can then be called by
use of the ALGOL library procedure CALL (for typeless use of the ALGOL library procedure CALL (for typeless
routines). Type procedures can be invoked by ICALL (for routines). Type procedures can be invoked by ICALL (for
INTEGER routines), RCALL (for REAL routines), DCALL (for INTEGER routines), RCALL (for REAL routines), DCALL (for
LONG REAL or double-precision routines), and LCALL (for LONG REAL or double-precision routines), and LCALL (for
BOOLEAN or logical routines). The first parameter in these BOOLEAN or logical routines). The first parameter in these
procedure calls must be the name of the FORTRAN subroutine. procedure calls must be the name of the FORTRAN subroutine.
Subsequent parameters are taken as the arguments to the Subsequent parameters are taken as the arguments to the
procedure (e.g., "CALL (foo, x, y);" which would be procedure (e.g., "CALL (foo, x, y);" which would be
equivalent to "CALL foo(x, y)" in a FORTRAN program). equivalent to "CALL foo(x, y)" in a FORTRAN program).
GNOSIS.DOC Page 55 GNOSIS.DOC Page 55
WRITING ALGOL SEGMENTS INTO YOUR LESSON WRITING ALGOL SEGMENTS INTO YOUR LESSON
The FORTRAN interface routines were extensively The FORTRAN interface routines were extensively
rewritten for Version 10 of ALGOL. The major new feature is rewritten for Version 10 of ALGOL. The major new feature is
that arrays (of any dimension) can now be passed. In fact, that arrays (of any dimension) can now be passed. In fact,
all of the restrictions on parameters have been removed, all of the restrictions on parameters have been removed,
except that strings may not be passed. Note too that, in except that strings may not be passed. Note too that, in
Version 10, the name of the FORTRAN routine must be Version 10, the name of the FORTRAN routine must be
specified by type in the external declaration (unless, of specified by type in the external declaration (unless, of
course, it is typeless). course, it is typeless).
GNOSIS.DOC Page 56 GNOSIS.DOC Page 56
WRITING GNOSIS LESSONS WRITING GNOSIS LESSONS
* *
8.0 WRITING GNOSIS LESSONS 8.0 WRITING GNOSIS LESSONS
Some of those new to CAI can easily envision whole Some of those new to CAI can easily envision whole
curricula running on computers. This is STRICTLY visionary, curricula running on computers. This is STRICTLY visionary,
however, unless (1) the machine is totally dedicated to however, unless (1) the machine is totally dedicated to
computer-assisted instruction and (2) a team-management computer-assisted instruction and (2) a team-management
approach is taken to the authorship and testing of CAI approach is taken to the authorship and testing of CAI
software. Beyond this, there are at least two additional software. Beyond this, there are at least two additional
complications: (1) curriculum organization and content may complications: (1) curriculum organization and content may
change before the software is ready and (2) changes in change before the software is ready and (2) changes in
associated software and hardware may dictate a change in associated software and hardware may dictate a change in
approach. approach.
For these reasons, I suggest that you set for yourself For these reasons, I suggest that you set for yourself
the more attainable goal of, say, computerizing the exercise the more attainable goal of, say, computerizing the exercise
material in the textbook you currently use. Those of us who material in the textbook you currently use. Those of us who
teach skill-oriented courses would probably LIKE to be able teach skill-oriented courses would probably LIKE to be able
to assign, grade and return to students (with full to assign, grade and return to students (with full
diagnostic commentary, naturally) all of the exercises diagnostic commentary, naturally) all of the exercises
included in our textbooks. But time does not -- or, rather, included in our textbooks. But time does not -- or, rather,
DID not -- afford us this luxury. With GNOSIS this is no DID not -- afford us this luxury. With GNOSIS this is no
longer an impossible dream. In a moment, I will explain how longer an impossible dream. In a moment, I will explain how
I have achieved this objective with my GNOSIS courseware. I have achieved this objective with my GNOSIS courseware.
First, I want to review for you the different types of First, I want to review for you the different types of
presentations available to you through the %QUESTION presentations available to you through the %QUESTION
command. command.
8.1 Question Types 8.1 Question Types
1. A CONSTRUCTED RESPONSE item results from an 1. A CONSTRUCTED RESPONSE item results from an
open-ended use of the %QUESTION command, e.g., open-ended use of the %QUESTION command, e.g.,
... ...
%QUESTION %QUESTION
What is the principal effect of electrolysis What is the principal effect of electrolysis
on marine hardware? on marine hardware?
%RIGHT ... %RIGHT ...
GNOSIS.DOC Page 57 GNOSIS.DOC Page 57
WRITING GNOSIS LESSONS WRITING GNOSIS LESSONS
Note that such a question allows a FREE-FORM response, and Note that such a question allows a FREE-FORM response, and
many different responses probably should be considered many different responses probably should be considered
correct. correct.
The task of the lesson designer is to anticipate all of The task of the lesson designer is to anticipate all of
the frequently recurring right and wrong responses and, for the frequently recurring right and wrong responses and, for
each response, to provide feedback tailored to that each response, to provide feedback tailored to that
response. Otherwise the program will appear to be arbitrary response. Otherwise the program will appear to be arbitrary
and dumb. Even if your lesson is born acting like an idiot, and dumb. Even if your lesson is born acting like an idiot,
there is no reason why it should continue to do so if you there is no reason why it should continue to do so if you
make full and appropriate use of the information in the make full and appropriate use of the information in the
".SRT" file. So, I advise you to study that file carefully ".SRT" file. So, I advise you to study that file carefully
in the early stages, PARTICULARLY if you use constructed in the early stages, PARTICULARLY if you use constructed
response items. In addition, make sure such questions do response items. In addition, make sure such questions do
not permit myriads of correct responses. Ask for a short not permit myriads of correct responses. Ask for a short
response or, better still, word your question in such a way response or, better still, word your question in such a way
that a single word or short response will satisfy it. that a single word or short response will satisfy it.
2. A COMPLETION item results when %QUESTION presents 2. A COMPLETION item results when %QUESTION presents
to the student a fill-in-the-blank(s) problem, e.g., to the student a fill-in-the-blank(s) problem, e.g.,
... ...
%QUESTION %QUESTION
Electrolysis causes marine hardware to Electrolysis causes marine hardware to
become __________________. become __________________.
... ...
The lesson author may use only one blank, as above, or he The lesson author may use only one blank, as above, or he
may leave a whole series of blanks for the student to may leave a whole series of blanks for the student to
complete. Of course, if the order in which the responses complete. Of course, if the order in which the responses
are given is important, then %ORDER must be in effect before are given is important, then %ORDER must be in effect before
the %QUESTION command is used to deliver the item to the the %QUESTION command is used to deliver the item to the
student. As before, the ".SRT" file should be studied student. As before, the ".SRT" file should be studied
carefully. carefully.
3. A MATCHING item presents the student with the 3. A MATCHING item presents the student with the
problem of pairing items belonging in one list with items problem of pairing items belonging in one list with items
belong in another. It is the most natural way to teach belong in another. It is the most natural way to teach
closely related material since the format permits many closely related material since the format permits many
distinctions to be taught at once. distinctions to be taught at once.
Matching questions present the lesson author with a Matching questions present the lesson author with a
considerable burden, however. The total number of ways two considerable burden, however. The total number of ways two
lists can be paired will be statistically large, yet he must lists can be paired will be statistically large, yet he must
anticipate the most likely right and wrong parings, anticipate the most likely right and wrong parings,
providing commentary for each case. This task is made providing commentary for each case. This task is made
easier if the student is directed to attempt one match at a easier if the student is directed to attempt one match at a
time. The most efficient way to accomplish this in GNOSIS time. The most efficient way to accomplish this in GNOSIS
is to make the list itself a %HELP routine, e.g., is to make the list itself a %HELP routine, e.g.,
... ...
%NOJUSTIFY %NOJUSTIFY
%HELP list1 %HELP list1
(1) <item> (a) <item> (1) <item> (a) <item>
GNOSIS.DOC Page 58 GNOSIS.DOC Page 58
WRITING GNOSIS LESSONS WRITING GNOSIS LESSONS
(2) <item> (b) <item> (2) <item> (b) <item>
... ...
%JUSTIFY %JUSTIFY
... ...
%QUESTION %QUESTION
What matches item '(2)'? (Type 'help' to see What matches item '(2)'? (Type 'help' to see
the list again.) the list again.)
%NEUTRAL help %NEUTRAL help
%ALGOL list1; %ALGOL list1;
%GOTO repeat; %GOTO repeat;
%RIGHT ... %RIGHT ...
As before, you have the task of anticipating all likely As before, you have the task of anticipating all likely
mismatches and of writing diagnostic commentary to follow mismatches and of writing diagnostic commentary to follow
those %WRONG commands. Incidentally, the number of possible those %WRONG commands. Incidentally, the number of possible
choices (in the selection column) should be greater than the choices (in the selection column) should be greater than the
number of items to be matched. As always, the ".SRT" file number of items to be matched. As always, the ".SRT" file
is a gold mine of ideas. is a gold mine of ideas.
In the next release of GNOSIS, we expect to have a In the next release of GNOSIS, we expect to have a
%MATCH command ready. When used, %MATCH would format the %MATCH command ready. When used, %MATCH would format the
matching question, manage re-display of the list as matching question, manage re-display of the list as
necessary, and generate appropriate feedback based on the necessary, and generate appropriate feedback based on the
degree to which the student response was correct. degree to which the student response was correct.
4. A RANKING item results when the author presents the 4. A RANKING item results when the author presents the
learner with the problem of ordering a list according to learner with the problem of ordering a list according to
some criterion (e.g., better to worse, light to heavy, in some criterion (e.g., better to worse, light to heavy, in
time order, and so on). time order, and so on).
As with matching items, if you decide to let the As with matching items, if you decide to let the
student assign a rank to each item in the list separately, student assign a rank to each item in the list separately,
in response to a question about that specific item, then you in response to a question about that specific item, then you
will have to make use of the %HELP feature to avoid having will have to make use of the %HELP feature to avoid having
to retype the list for each new %QUESTION. Of course, you to retype the list for each new %QUESTION. Of course, you
could ask the student for the entire rank-sequence as a could ask the student for the entire rank-sequence as a
single response but, even with lists of five or six items, single response but, even with lists of five or six items,
that technique greatly complicates the problem of that technique greatly complicates the problem of
anticipating what that response will be. Longer comments anticipating what that response will be. Longer comments
are also required if you choose the simultaneous answer are also required if you choose the simultaneous answer
route. (In the next release of GNOSIS, we hope to have a route. (In the next release of GNOSIS, we hope to have a
%RANK command ready to simplify this part of the lesson %RANK command ready to simplify this part of the lesson
design.) design.)
5. MULTIPLE-CHOICE items are already familiar to you. 5. MULTIPLE-CHOICE items are already familiar to you.
Research shows three to five choices per item are best. Research shows three to five choices per item are best.
And, if you select the choices empirically, based on your And, if you select the choices empirically, based on your
knowledge of likely student misconceptions and confusions, knowledge of likely student misconceptions and confusions,
then the diagnostic comments you build into %WRONG patterns then the diagnostic comments you build into %WRONG patterns
will be supremely enlightening. Also, multiple-choice items will be supremely enlightening. Also, multiple-choice items
are the best items to present to unskilled typists since are the best items to present to unskilled typists since
responses other than the 3-5 standard choices can be trapped responses other than the 3-5 standard choices can be trapped
by putting by putting
GNOSIS.DOC Page 59 GNOSIS.DOC Page 59
WRITING GNOSIS LESSONS WRITING GNOSIS LESSONS
... ...
%NEUTRAL %NEUTRAL
The choices open to you are 'A', 'B', 'C' or 'D'. The choices open to you are 'A', 'B', 'C' or 'D'.
%GOTO repeat; %GOTO repeat;
... ...
after the comment for the last %WRONG command. Use of the after the comment for the last %WRONG command. Use of the
"%NEUTRAL <empty>" trap rules out subsequent use of "%WRONG "%NEUTRAL <empty>" trap rules out subsequent use of "%WRONG
<empty>", of course, since the first <empty> pattern matches <empty>", of course, since the first <empty> pattern matches
any response not matched above it. any response not matched above it.
Note too that if more than one alternative must be Note too that if more than one alternative must be
listed in order for the student's response to be considered listed in order for the student's response to be considered
correct (e.g., "A, B"), then it is easy to trap partially correct (e.g., "A, B"), then it is easy to trap partially
correct responses with sequences like correct responses with sequences like
... ...
%NOEXTRA %NOEXTRA
%RIGHT a b %RIGHT a b
<comment> <comment>
%RIGHT a , b %RIGHT a , b
%SAME %SAME
%EXTRA %EXTRA
%NEUTRAL a %NEUTRAL a
'A' is ONE of the correct responses! 'A' is ONE of the correct responses!
%GOTO repeat; %GOTO repeat;
%NEUTRAL b %NEUTRAL b
'B' is ONE of the correct responses! 'B' is ONE of the correct responses!
%GOTO repeat; %GOTO repeat;
... ...
THIS OBVIATES THE NEED for second-order choices like "none THIS OBVIATES THE NEED for second-order choices like "none
of the above," "two of the above," "all of the above," etc. of the above," "two of the above," "all of the above," etc.
If you continue to use such choices, you are not realizing If you continue to use such choices, you are not realizing
the power of computer-assisted instruction! the power of computer-assisted instruction!
Your multiple-choice items will discriminate better if Your multiple-choice items will discriminate better if
you are careful to construct the choices in parallel, using you are careful to construct the choices in parallel, using
the same grammatical structure in each, and so on. A useful the same grammatical structure in each, and so on. A useful
fudge is to ask for the single response which "best fudge is to ask for the single response which "best
satisfies" the demands of the question. satisfies" the demands of the question.
6. The TRUE/FALSE item is really a degenerate kind of 6. The TRUE/FALSE item is really a degenerate kind of
multiple-choice item. So much of what is said above also multiple-choice item. So much of what is said above also
applies here. I use such items sparingly, usually to break applies here. I use such items sparingly, usually to break
up what would otherwise be a sterile series of text blocks. up what would otherwise be a sterile series of text blocks.
True/false (or agree/disagree, yes/no, etc.) items do not True/false (or agree/disagree, yes/no, etc.) items do not
have great pedagogic value, but they provide variety and have great pedagogic value, but they provide variety and
they do demand an active response of some kind from the they do demand an active response of some kind from the
student. student.
GNOSIS.DOC Page 60 GNOSIS.DOC Page 60
WRITING GNOSIS LESSONS WRITING GNOSIS LESSONS
8.2 Lesson-generated Diagnostic Profiles 8.2 Lesson-generated Diagnostic Profiles
A computerized textbook exercise would use a variety of A computerized textbook exercise would use a variety of
the question types discussed above. In addition, it is easy the question types discussed above. In addition, it is easy
to extend the lesson in such a way that it provides a to extend the lesson in such a way that it provides a
complete diagnostic profile for each student. complete diagnostic profile for each student.
Let us suppose that the curriculum is broken down into Let us suppose that the curriculum is broken down into
units of study, and that there are behavioral objectives for units of study, and that there are behavioral objectives for
each unit. Let us also suppose that one chapter of the each unit. Let us also suppose that one chapter of the
associated textbook corresponds to one unit of study. Given associated textbook corresponds to one unit of study. Given
this common arrangement of curriculum, a powerful GNOSIS this common arrangement of curriculum, a powerful GNOSIS
program could be designed as sketched below. To make the program could be designed as sketched below. To make the
example as concrete as possible, let us suppose that this example as concrete as possible, let us suppose that this
program is for UNIT1, that UNIT1 has 5 behavioral objectives program is for UNIT1, that UNIT1 has 5 behavioral objectives
associated with it, and that it covers pages 33-55 of the associated with it, and that it covers pages 33-55 of the
textbook. textbook.
... ...
%VARIABLES INTEGER ARRAY pages[33:55], %VARIABLES INTEGER ARRAY pages[33:55],
objectives[1:5]; objectives[1:5];
... ...
%PROCEDURE PROCEDURE updatepages(n, m); %PROCEDURE PROCEDURE updatepages(n, m);
INTEGER n, m; INTEGER n, m;
BEGIN BEGIN
INTEGER i; INTEGER i;
IF lasterrors > 0 THEN IF lasterrors > 0 THEN
FOR i:= n STEP 1 UNTIL m DO FOR i:= n STEP 1 UNTIL m DO
PAGES[i]:= pages[i] + lasterrors PAGES[i]:= pages[i] + lasterrors
END; END;
%PROCEDURE PROCEDURE updateobj(n); %PROCEDURE PROCEDURE updateobj(n);
INTEGER n; INTEGER n;
BEGIN BEGIN
objectives[n]:= objectives[n] + lasterrors objectives[n]:= objectives[n] + lasterrors
END; END;
... ...
%PROCEDURE PROCEDURE profileobj(channel); %PROCEDURE PROCEDURE profileobj(channel);
INTEGER channel; INTEGER channel;
BEGIN BEGIN
INTEGER i, j; INTEGER i, j;
Selectoutput(channel); Selectoutput(channel);
Newline; Newline;
Newline; Newline;
FOR i:= 1 STEP 1 UNTIL 5 DO FOR i:= 1 STEP 1 UNTIL 5 DO
BEGIN BEGIN
Write("OBJECTIVE No. "); Write("OBJECTIVE No. ");
Print(i,3); Print(i,3);
Write(": "); Write(": ");
For j:= 1 STEP 1 UNTIL objectives[i] DO For j:= 1 STEP 1 UNTIL objectives[i] DO
Write("*"); Write("*");
Newline Newline
END; END;
Selectoutput(0) Selectoutput(0)
GNOSIS.DOC Page 61 GNOSIS.DOC Page 61
WRITING GNOSIS LESSONS WRITING GNOSIS LESSONS
END of PR*CEDURE profileobj; END of PR*CEDURE profileobj;
%PROCEDURE PROCEDURE profilepages(channel); %PROCEDURE PROCEDURE profilepages(channel);
INTEGER channel; INTEGER channel;
BEGIN BEGIN
INTEGER i, j; INTEGER i, j;
Selectoutput(channel); Selectoutput(channel);
Newline; Newline;
Newline; Newline;
FOR i:= 33 STEP 1 UNTIL 55 DO FOR i:= 33 STEP 1 UNTIL 55 DO
BEGIN BEGIN
Write("Page "); Write("Page ");
Print(i,3); Print(i,3);
Write(": "); Write(": ");
FOR j:= 1 STEP 1 UNTIL pages[i] DO FOR j:= 1 STEP 1 UNTIL pages[i] DO
Write("*"); Write("*");
Newline Newline
END; END;
Selectoutput(0) Selectoutput(0)
END of PR*CEDURE profilepages; END of PR*CEDURE profilepages;
%INITIALIZE %INITIALIZE
BEGIN BEGIN
INTEGER i; INTEGER i;
FOR i:= 1 STEP 1 UNTIL 5 DO FOR i:= 1 STEP 1 UNTIL 5 DO
objectives[i]:= 0; objectives[i]:= 0;
FOR i:= 33 STEP 1 UNTIL 55 DO FOR i:= 33 STEP 1 UNTIL 55 DO
pages[i]:= 0 pages[i]:= 0
END; END;
... ...
%QUESTION %QUESTION
!This question tests mastery of objective 3 and 4. !This question tests mastery of objective 3 and 4.
!Pages 33-36 and 40-41 in the text are relevant !Pages 33-36 and 40-41 in the text are relevant
!to good performance on this objective !to good performance on this objective
... ...
%QEND updatepages(33, 36); updateobj(3); %QEND updatepages(33, 36); updateobj(3);
%ALGOL updatepages(40, 41); updateobj(4); %ALGOL updatepages(40, 41); updateobj(4);
!Do a similar thing for each question. !Do a similar thing for each question.
... ...
%FINISH %FINISH
%ALGOL %ALGOL
Write("A diagnostic profile for you follows.); Write("A diagnostic profile for you follows.);
Write("The objectives followed by the most"); Write("The objectives followed by the most");
Write("asterisks are causing you the most"); Write("asterisks are causing you the most");
Write("difficulty:"); Write("difficulty:");
profileobj(0); profileobj(0);
!The TTY is open on channel 0 !The TTY is open on channel 0
profileobj(2); profileobj(2);
!<lessonname>.DTA is open on channel 2 !<lessonname>.DTA is open on channel 2
pause; pause;
Write("You could benefit most from a review"); Write("You could benefit most from a review");
Write("of the page numbers followed by the"); Write("of the page numbers followed by the");
Write("most asterisks:"); Write("most asterisks:");
profileobj(0); profileobj(0);
GNOSIS.DOC Page 62 GNOSIS.DOC Page 62
WRITING GNOSIS LESSONS WRITING GNOSIS LESSONS
profileobj(2); profileobj(2);
%END %END
... ...
The kind of diagnosis provided by the GNOSIS segment The kind of diagnosis provided by the GNOSIS segment
given above proves INVALUABLE to students. It, together given above proves INVALUABLE to students. It, together
with the routine diagnostic comments in the lesson itself, with the routine diagnostic comments in the lesson itself,
should gain for the student all the advantages he might have should gain for the student all the advantages he might have
had if you had spent several hours pouring over his had if you had spent several hours pouring over his
homework. And he didn't even have to wait! homework. And he didn't even have to wait!
8.3 Some Advice[17] 8.3 Some Advice[17]
1. Allow the high-achieving student to CHOOSE whether 1. Allow the high-achieving student to CHOOSE whether
to be branched ahead. If you make it automatic, you deprive to be branched ahead. If you make it automatic, you deprive
him of a unique kind of positive reinforcement. him of a unique kind of positive reinforcement.
2. Always make your commentary a complete one, even 2. Always make your commentary a complete one, even
for %RIGHT commands. We cannot assume that, just because for %RIGHT commands. We cannot assume that, just because
the student got the question right, that he now is in full the student got the question right, that he now is in full
command of the concept. command of the concept.
3. Let your personality, your sense of humor and 3. Let your personality, your sense of humor and
irony, your colloquialisms be reflected in the lesson. The irony, your colloquialisms be reflected in the lesson. The
machine won't stand between you and the student unless you machine won't stand between you and the student unless you
are dullard enough to let it. are dullard enough to let it.
4. The flow of instruction between %TEXT and %QUESTION 4. The flow of instruction between %TEXT and %QUESTION
blocks is important. After pauses, preserve continuity by blocks is important. After pauses, preserve continuity by
using phrases like "The last item should have you thinking using phrases like "The last item should have you thinking
about...." about...."
5. GNOSIS breaks up text material for display purposes 5. GNOSIS breaks up text material for display purposes
only. You should further break the monotony of long only. You should further break the monotony of long
sessions of text reading by asking questions -- even trivial sessions of text reading by asking questions -- even trivial
TRUE/FALSE questions. TRUE/FALSE questions.
6. Use the student's own response in preparing your 6. Use the student's own response in preparing your
commentary. You will know what it is most of the time; it commentary. You will know what it is most of the time; it
will be the argument given for the current answer pattern will be the argument given for the current answer pattern
command. Even in the worst case (%WRONG <empty>) you will command. Even in the worst case (%WRONG <empty>) you will
still know what responses were NOT made. still know what responses were NOT made.
--------------- ---------------
17. Some of the following is adapted from Jeanne L. 17. Some of the following is adapted from Jeanne L.
Burson, THE AUTHOR'S GUIDE TO CAI: DEVELOPMENT (Columbus, Burson, THE AUTHOR'S GUIDE TO CAI: DEVELOPMENT (Columbus,
Ohio: Ohio State University, Division of Computing Services Ohio: Ohio State University, Division of Computing Services
for Medical Education and Research, 1976), pp. 161-163. for Medical Education and Research, 1976), pp. 161-163.
GNOSIS.DOC Page 63 GNOSIS.DOC Page 63
WRITING GNOSIS LESSONS WRITING GNOSIS LESSONS
7. Relate your comments as closely as possible to the 7. Relate your comments as closely as possible to the
student's response. Avoid %SAME unless the identical student's response. Avoid %SAME unless the identical
comment really will do the job. comment really will do the job.
8. Aim to provide diagnostic commentary for EVERY 8. Aim to provide diagnostic commentary for EVERY
%WRONG, %RIGHT, %LACK and %NEUTRAL answer pattern command. %WRONG, %RIGHT, %LACK and %NEUTRAL answer pattern command.
9. Unless the question is a TRUE/FALSE item or you are 9. Unless the question is a TRUE/FALSE item or you are
using "%NEUTRAL <empty>" to trap responses that fall outside using "%NEUTRAL <empty>" to trap responses that fall outside
a predefined set (e.g., the choices associated with a a predefined set (e.g., the choices associated with a
multiple-choice item), you should always include one or more multiple-choice item), you should always include one or more
"%WRONG <empty>" commands. It's the only way the "%WRONG <empty>" commands. It's the only way the
unanticipated responses will ever find their way into the unanticipated responses will ever find their way into the
teacher reports. teacher reports.
10. Provide commentary even for "%WRONG <empty>" 10. Provide commentary even for "%WRONG <empty>"
commands. Supply hints if nothing else comes to mind. commands. Supply hints if nothing else comes to mind.
NEVER LEAVE THE STUDENT HANGING! NEVER LEAVE THE STUDENT HANGING!
11. Let the student know approximately how long the 11. Let the student know approximately how long the
program is and, occasionally, how much of the program is program is and, occasionally, how much of the program is
left. This could be a time estimate or, if that is too left. This could be a time estimate or, if that is too
difficult to gauge, an estimate of the number of questions difficult to gauge, an estimate of the number of questions
he is likely to encounter. If the lesson has obvious he is likely to encounter. If the lesson has obvious
breaks, say, "If you have to quit soon, this would be a good breaks, say, "If you have to quit soon, this would be a good
stopping point." stopping point."
12. Watch a dozen students run your lesson before you 12. Watch a dozen students run your lesson before you
unleash it on the remainder of the student body. Ask them unleash it on the remainder of the student body. Ask them
to tell you what makes them uncomfortable. to tell you what makes them uncomfortable.
13. Review the teacher report files frequently, 13. Review the teacher report files frequently,
especially in the early stages. After you have extensively especially in the early stages. After you have extensively
modified a lesson, delete and recreate the ".SRT" file so modified a lesson, delete and recreate the ".SRT" file so
that the new data will not be confused with the old. that the new data will not be confused with the old.
14. Remember that the program portrays YOUR 14. Remember that the program portrays YOUR
personality, not that of the hardware. If it is dull and personality, not that of the hardware. If it is dull and
uninteresting, redundant and confusing, it can only be uninteresting, redundant and confusing, it can only be
because YOU are all of these things. Perk up! Interact! because YOU are all of these things. Perk up! Interact!
GNOSIS.DOC Page 64 GNOSIS.DOC Page 64
RUNNING GNOSIS RUNNING GNOSIS
* *
9.0 RUNNING GNOSIS 9.0 RUNNING GNOSIS
Let's assume you have written a lesson called BIRD.GNO. Let's assume you have written a lesson called BIRD.GNO.
Assuming the GNOSIS.MIC and GNOLIB.REL files exist in "MIC:" Assuming the GNOSIS.MIC and GNOLIB.REL files exist in "MIC:"
and "SYS:" respectively, then all you need to do is type and "SYS:" respectively, then all you need to do is type
DO GNOSIS BIRD DO GNOSIS BIRD
after the period prompt provided by the monitor. If this after the period prompt provided by the monitor. If this
doesn't work, try doesn't work, try
DO SYS:GNOSIS BIRD DO SYS:GNOSIS BIRD
If that fails, then you will have to proceed as follows. If that fails, then you will have to proceed as follows.
First you will run GNOSIS to translate the lesson. First you will run GNOSIS to translate the lesson.
Then, if all is well, you will run ALGOL to compile it. Then, if all is well, you will run ALGOL to compile it.
Then, if all remains satisfactory, you will save the lesson. Then, if all remains satisfactory, you will save the lesson.
Don't forget to create BIRD.SRT and BIRD.DTA files in the Don't forget to create BIRD.SRT and BIRD.DTA files in the
student account when these are required by the program. student account when these are required by the program.
(GNOSIS will warn you about this.) In exhaustive detail, (GNOSIS will warn you about this.) In exhaustive detail,
then, the procedure is as follows: then, the procedure is as follows:
1. Type "R GNOSIS<CR><LF>" after the monitor period 1. Type "R GNOSIS<CR><LF>" after the monitor period
prompt. prompt.
GNOSIS will begin to execute, asking you for GNOSIS will begin to execute, asking you for
the name of the lesson to be translated. GNOSIS the name of the lesson to be translated. GNOSIS
will prompt you with a "-->". will prompt you with a "-->".
2. Type "BIRD<CR><LF>" after the "-->" prompt. 2. Type "BIRD<CR><LF>" after the "-->" prompt.
GNOSIS defaults to the ".GNO" extension and GNOSIS defaults to the ".GNO" extension and
begins translation. If the lesson has another begins translation. If the lesson has another
extension, then you should not allow GNOSIS to extension, then you should not allow GNOSIS to
default to ".GNO" but rather type in the complete default to ".GNO" but rather type in the complete
file description, including extension. If all is file description, including extension. If all is
well, you will continue with the next step. well, you will continue with the next step.
GNOSIS.DOC Page 65 GNOSIS.DOC Page 65
RUNNING GNOSIS RUNNING GNOSIS
3. Type "<CR><LF>" after GNOSIS reprompts with the 3. Type "<CR><LF>" after GNOSIS reprompts with the
"-->". "-->".
This causes GNOSIS to exit. This causes GNOSIS to exit.
4. Type "LOAD BIRD.ALG, SYS:GNOLIB.REL<CR><LF>" after 4. Type "LOAD BIRD.ALG, SYS:GNOLIB.REL<CR><LF>" after
the monitor period prompt. the monitor period prompt.
The ALGOL compiler will be called into action The ALGOL compiler will be called into action
and will prepare a machine readable version of your and will prepare a machine readable version of your
lesson and name it "BIRD.REL." (You can omit the lesson and name it "BIRD.REL." (You can omit the
"..., SYS:GNOLIB.REL ..." part of the load command "..., SYS:GNOLIB.REL ..." part of the load command
if you did not use the %NEXTLESSON or %NOCONTROLC if you did not use the %NEXTLESSON or %NOCONTROLC
commands in your lesson. Of course, if for some commands in your lesson. Of course, if for some
reason you are unable to access the GNOLIB.REL reason you are unable to access the GNOLIB.REL
file, you will have no choice but to avoid these file, you will have no choice but to avoid these
two commands.) two commands.)
If all seems to be in order, you will want to If all seems to be in order, you will want to
run your lesson to be sure it performs as desired. run your lesson to be sure it performs as desired.
5. After the monitor period prompt, type 5. After the monitor period prompt, type
"START<CR><LF>" or, when that doesn't work, "EXE "START<CR><LF>" or, when that doesn't work, "EXE
BIRD.REL<CR><LF>". BIRD.REL<CR><LF>".
If the lesson is bug free, you will want to If the lesson is bug free, you will want to
prepare a production (i.e., smaller, faster) prepare a production (i.e., smaller, faster)
version of it and save that version. It would be version of it and save that version. It would be
wise, however, to try BIRD on at least three or wise, however, to try BIRD on at least three or
four "real students" before you proceed past this four "real students" before you proceed past this
stage. stage.
Note: If the lesson requires ".DTA" and Note: If the lesson requires ".DTA" and
".SRT" files, it will not run to completion without ".SRT" files, it will not run to completion without
these files. Instead, at lesson exit, the ALGOL these files. Instead, at lesson exit, the ALGOL
run-time system will generate an error message. run-time system will generate an error message.
You can ignore this for now, using CTRL-C's to exit You can ignore this for now, using CTRL-C's to exit
from ALGDDT. But -- notice -- these files must from ALGDDT. But -- notice -- these files must
exist in the student account before the lesson is exist in the student account before the lesson is
run. run.
6. Type "R ALGOL<CR><LF>" after the monitor period 6. Type "R ALGOL<CR><LF>" after the monitor period
prompt. prompt.
ALGOL will respond with a "*" prompt when ALGOL will respond with a "*" prompt when
ready. ready.
7. After the "*" prompt, type 7. After the "*" prompt, type
"BIRD.REL=BIRD.ALG/NOSYMBOLS/PRODUCTION<CR><LF>". "BIRD.REL=BIRD.ALG/NOSYMBOLS/PRODUCTION<CR><LF>".
If there are no errors, ALGOL will type "No If there are no errors, ALGOL will type "No
errors" and reprompt with a "*". errors" and reprompt with a "*".
GNOSIS.DOC Page 66 GNOSIS.DOC Page 66
RUNNING GNOSIS RUNNING GNOSIS
8. Type a CTRL-Z after this "*". 8. Type a CTRL-Z after this "*".
This causes an exit from ALGOL. This causes an exit from ALGOL.
9. When the monitor period prompt returns, type "LOAD 9. When the monitor period prompt returns, type "LOAD
BIRD.REL, SYS:GNOLIB.REL<CR><LF>". BIRD.REL, SYS:GNOLIB.REL<CR><LF>".
This will load the production version of the This will load the production version of the
lesson. As before, the part after "BIRD.REL" is lesson. As before, the part after "BIRD.REL" is
necessary only if you used the %NEXTLESSON or necessary only if you used the %NEXTLESSON or
%NOCONTROLC command in BIRD.GNO. %NOCONTROLC command in BIRD.GNO.
10. Type "OSAVE<CR><LF>" after the period prompt. 10. Type "OSAVE<CR><LF>" after the period prompt.
The monitor will reply "BIRD saved". The monitor will reply "BIRD saved".
11. Congratulate yourself. 11. Congratulate yourself.
Forever after, it is only necessary to type "RUN BIRD" to Forever after, it is only necessary to type "RUN BIRD" to
run the lesson. run the lesson.
GNOSIS.DOC Page 67 GNOSIS.DOC Page 67
SETTING UP STUDENT ACCOUNTS SETTING UP STUDENT ACCOUNTS
* *
10.0 SETTING UP STUDENT ACCOUNTS 10.0 SETTING UP STUDENT ACCOUNTS
For security reasons, you will probably NOT want to For security reasons, you will probably NOT want to
keep the ".SAV" version of your lessons in a student account keep the ".SAV" version of your lessons in a student account
where, among other things, they could be accidentally where, among other things, they could be accidentally
deleted. Store them, therefore, in YOUR account and deleted. Store them, therefore, in YOUR account and
establish a separate account for students. Of course, you establish a separate account for students. Of course, you
will still have to deposit any required ".DTA" and ".SRT" will still have to deposit any required ".DTA" and ".SRT"
files in the STUDENT account with a protection of <155>. files in the STUDENT account with a protection of <155>.
(At present, there is no way to provide better security for (At present, there is no way to provide better security for
the teacher reports.) In addition, in the student account, the teacher reports.) In addition, in the student account,
create a "SWITCH.INI" file which (at least) has this line in create a "SWITCH.INI" file which (at least) has this line in
it: it:
LOGIN/LIB:[<YOUR project-programmer number>] LOGIN/LIB:[<YOUR project-programmer number>]
This will establish your account as the library for the This will establish your account as the library for the
student account. Students will thereafter be able to run student account. Students will thereafter be able to run
the lessons with the simple command string "RUN <lessonname the lessons with the simple command string "RUN <lessonname
without extension>". A typical SWITCH.INI file for a without extension>". A typical SWITCH.INI file for a
student account would look like this: student account would look like this:
LOGIN/FORM LOGIN/FORM
LOGIN/NOCRLF LOGIN/NOCRLF
LOGIN/LC LOGIN/LC
LOGIN/FILL:0 LOGIN/FILL:0
LOGIN/ECHO LOGIN/ECHO
LOGIN/WIDTH:132 LOGIN/WIDTH:132
LOGIN/PAGE LOGIN/PAGE
LOGIN/LIB:[<account number>] LOGIN/LIB:[<account number>]
LOGIN/RUN:LIB:MASTER LOGIN/RUN:LIB:MASTER
The first seven switches set TTY parameters, the eighth The first seven switches set TTY parameters, the eighth
establishes the teacher's account as the library, and the establishes the teacher's account as the library, and the
ninth runs a program out of the teacher's account, ninth runs a program out of the teacher's account,
"MASTER.SAV", which could (for example) "MASTER.SAV", which could (for example)
GNOSIS.DOC Page 68 GNOSIS.DOC Page 68
SETTING UP STUDENT ACCOUNTS SETTING UP STUDENT ACCOUNTS
1. deliver a message from you to the student; 1. deliver a message from you to the student;
2. tell him which lessons are available; and 2. tell him which lessons are available; and
3. run the lesson of his choice. 3. run the lesson of his choice.
The code for the MASTER program could be as follows: The code for the MASTER program could be as follows:
BEGIN BEGIN
INTEGER i, j; INTEGER i, j;
EXTERNAL PROCEDURE run; EXTERNAL PROCEDURE run;
COMMENT: Load with GNOLIB.REL; COMMENT: Load with GNOLIB.REL;
BOOLEAN PROCEDURE endoffile; BOOLEAN PROCEDURE endoffile;
endoffile:= (i = "/".[1] AND j = "*".[1]); endoffile:= (i = "/".[1] AND j = "*".[1]);
PROCEDURE readandwrite(channel, file); PROCEDURE readandwrite(channel, file);
INTEGER channel; INTEGER channel;
STRING file; STRING file;
BEGIN BEGIN
i:= j:= 0; i:= j:= 0;
Openfile(channel, file); Openfile(channel, file);
Selectinput(channel); Selectinput(channel);
WHILE NOT endoffile DO WHILE NOT endoffile DO
BEGIN BEGIN
Insymbol(i); Insymbol(i);
Nextsymbol(j); Nextsymbol(j);
Outsymbol(i) Outsymbol(i)
END; END;
Closefile(channel); Closefile(channel);
Selectinput(0) Selectinput(0)
END; END;
PROCEDURE Pause; PROCEDURE Pause;
BEGIN BEGIN
i:= 0; i:= 0;
Newline; Newline;
Newline; Newline;
Write("Now push RETURN --> "); Write("Now push RETURN --> ");
Breakoutput; Breakoutput;
WHILE i # 10 DO Insymbol(i) WHILE i # 10 DO Insymbol(i)
END; END;
Input(0, "TTY"); Input(0, "TTY");
Input(1, "DSK"); Input(1, "DSK");
readandwrite(1, "NOTICE"); readandwrite(1, "NOTICE");
COMMENT: The NOTICE file will contain the COMMENT: The NOTICE file will contain the
current message-of-the-day from the teacher current message-of-the-day from the teacher
to the student. The contents of the NOTICE to the student. The contents of the NOTICE
file can be changed frequently and MASTER file can be changed frequently and MASTER
will display the newest version. The NOTICE will display the newest version. The NOTICE
file must end with the character sequence file must end with the character sequence
GNOSIS.DOC Page 69 GNOSIS.DOC Page 69
SETTING UP STUDENT ACCOUNTS SETTING UP STUDENT ACCOUNTS
"/*"; "/*";
Pause; Pause;
run("CHOOSE") run("CHOOSE")
COMMENT: Control now passes to the CHOOSE COMMENT: Control now passes to the CHOOSE
program. In addition, at the end of each program. In addition, at the end of each
lesson run, control also passes back to the lesson run, control also passes back to the
CHOOSE program via a "%NEXTLESSON run("CHOOSE")" CHOOSE program via a "%NEXTLESSON run("CHOOSE")"
command; command;
END END
And the code for the helper program, CHOOSE, could be as And the code for the helper program, CHOOSE, could be as
follows: follows:
BEGIN BEGIN
INTEGER i, j, choice; INTEGER i, j, choice;
EXTERNAL PROCEDURE r, run; EXTERNAL PROCEDURE r, run;
COMMENT: Load with GNOLIB.REL; COMMENT: Load with GNOLIB.REL;
BOOLEAN PROCEDURE endoffile; BOOLEAN PROCEDURE endoffile;
endoffile:= (i = "/".[1] AND j = "*".[1]); endoffile:= (i = "/".[1] AND j = "*".[1]);
PROCEDURE readandwrite(channel, file); PROCEDURE readandwrite(channel, file);
INTEGER channel; INTEGER channel;
STRING file; STRING file;
BEGIN BEGIN
i:= j:= 0; i:= j:= 0;
Openfile(channel, file); Openfile(channel, file);
Selectinput(channel); Selectinput(channel);
WHILE NOT endoffile DO WHILE NOT endoffile DO
BEGIN BEGIN
Insymbol(i); Insymbol(i);
Nextsymbol(j); Nextsymbol(j);
Outsymbol(i) Outsymbol(i)
END; END;
Closefile(channel); Closefile(channel);
Selectinput(0) Selectinput(0)
END; END;
SWITCH choose:= one, two, three, four, five; SWITCH choose:= one, two, three, four, five;
Input(0, "TTY"); Input(0, "TTY");
Input(1, "DSK"); Input(1, "DSK");
readandwrite(1, "LIST"); readandwrite(1, "LIST");
COMMENT: CHOOSE now reads and writes a COMMENT: CHOOSE now reads and writes a
file containing a list of all available file containing a list of all available
lessons. An integer value is paired with lessons. An integer value is paired with
each lesson. This integer is the option each lesson. This integer is the option
number for that particular lesson. The number for that particular lesson. The
last option number is paired with the last option number is paired with the
program LOGOUT. The LIST file must end with program LOGOUT. The LIST file must end with
the character sequence "/*"; the character sequence "/*";
GNOSIS.DOC Page 70 GNOSIS.DOC Page 70
SETTING UP STUDENT ACCOUNTS SETTING UP STUDENT ACCOUNTS
repeat: repeat:
Write("Enter option NUMBER: "); Write("Enter option NUMBER: ");
Breakoutput; Breakoutput;
Read(choice); Read(choice);
GOTO choose[choice]; GOTO choose[choice];
Newline; Newline;
Write("?Option number out-of-range."); Write("?Option number out-of-range.");
Newline; Newline;
GOTO repeat; GOTO repeat;
one: run("LESON1"); one: run("LESON1");
two: run("LESON2"); two: run("LESON2");
three: run("LESON3"); three: run("LESON3");
four: run("LESON4"); four: run("LESON4");
five: r("LOGOUT"); five: r("LOGOUT");
END END
Do not forget -- in YOUR account -- to protect <155> Do not forget -- in YOUR account -- to protect <155>
the ".SAV" version of the lessons students will be running the ".SAV" version of the lessons students will be running
from theirs. You may also wish to write a similar from theirs. You may also wish to write a similar
"SWITCH.INI" file for your account which establishes the "SWITCH.INI" file for your account which establishes the
student account as the library for your own. This would student account as the library for your own. This would
allow you to inspect and print the ".SRT" and ".DTA" files allow you to inspect and print the ".SRT" and ".DTA" files
with simple monitor commands, almost as if they were in your with simple monitor commands, almost as if they were in your
own account.[18] own account.[18]
Periodically, as the lessons are run by students, you Periodically, as the lessons are run by students, you
should sort the ".SRT" files, using the DEC utility program should sort the ".SRT" files, using the DEC utility program
SORT.[19] Study the sorted file carefully and try to find SORT.[19] Study the sorted file carefully and try to find
ways to improve the lesson design. You will likely discover ways to improve the lesson design. You will likely discover
alternate right responses for questions you thought had no alternate right responses for questions you thought had no
other right responses. And you may find that a particular other right responses. And you may find that a particular
wrong response occurs so often that either (1) the lesson wrong response occurs so often that either (1) the lesson
should be redesigned so that it does not mislead the student should be redesigned so that it does not mislead the student
or (2) the lesson should be modified to include a diagnostic or (2) the lesson should be modified to include a diagnostic
comment for that recurrent wrong response. In fact, my comment for that recurrent wrong response. In fact, my
experience with GNOSIS lessons is that the real work in experience with GNOSIS lessons is that the real work in
lesson design begins only AFTER students begin to run the lesson design begins only AFTER students begin to run the
lessons. lessons.
--------------- ---------------
18. It is often necessary that your account and the 18. It is often necessary that your account and the
student account be located on the same DSK structure, but student account be located on the same DSK structure, but
this restriction is system-dependent. this restriction is system-dependent.
19. A MIC program which accomplishes this has been 19. A MIC program which accomplishes this has been
included in an appendix. included in an appendix.
GNOSIS.DOC Page 71 GNOSIS.DOC Page 71
SETTING UP STUDENT ACCOUNTS SETTING UP STUDENT ACCOUNTS
In addition, you should probably should print, delete, In addition, you should probably should print, delete,
and recreate the ".DTA" files from time to time, since they and recreate the ".DTA" files from time to time, since they
can become rather large. These, too, can be studied with can become rather large. These, too, can be studied with
profit -- especially, the student comments. I trust most of profit -- especially, the student comments. I trust most of
these will be favorable but, if not, GNOSIS makes it fairly these will be favorable but, if not, GNOSIS makes it fairly
easy to identify the parts of the lesson which were giving easy to identify the parts of the lesson which were giving
students serious trouble. students serious trouble.
INDEX OF GNOSIS COMMANDS INDEX OF GNOSIS COMMANDS
' '
INDEX OF GNOSIS COMMANDS INDEX OF GNOSIS COMMANDS
%algol . . . . . . . . . . . . 20, 22, 24-25, 30, 32, 36, %algol . . . . . . . . . . . . 20, 22, 24-25, 30, 32, 36,
38, 44, 46-47 38, 44, 46-47
%bell . . . . . . . . . . . . 20, 38 %bell . . . . . . . . . . . . 20, 38
%copyright . . . . . . . . . . 20, 38 %copyright . . . . . . . . . . 20, 38
%disk . . . . . . . . . . . . 21, 26, 33, 38 %disk . . . . . . . . . . . . 21, 26, 33, 38
%end . . . . . . . . . . . . . 19, 22, 30, 38, 44 %end . . . . . . . . . . . . . 19, 22, 30, 38, 44
%extra . . . . . . . . . . . . 19, 22, 27, 29, 38, 49, 51 %extra . . . . . . . . . . . . 19, 22, 27, 29, 38, 49, 51
%finish . . . . . . . . . . . 22, 38, 46 %finish . . . . . . . . . . . 22, 38, 46
%goto . . . . . . . . . . . . 19, 22-24, 28, 31-32, 34, 37, %goto . . . . . . . . . . . . 19, 22-24, 28, 31-32, 34, 37,
43, 45-46 43, 45-46
%help . . . . . . . . . . . . 24-25, 38, 57-58 %help . . . . . . . . . . . . 24-25, 38, 57-58
%if . . . . . . . . . . . . . 24, 32, 38, 42 %if . . . . . . . . . . . . . 24, 32, 38, 42
%ifend . . . . . . . . . . . . 24-25, 32, 38, 43 %ifend . . . . . . . . . . . . 24-25, 32, 38, 43
%ifnot . . . . . . . . . . . . 24-25, 32, 38 %ifnot . . . . . . . . . . . . 24-25, 32, 38
%initialize . . . . . . . . . 25, 38, 44, 46 %initialize . . . . . . . . . 25, 38, 44, 46
%justify . . . . . . . . . . . 25-26, 29, 38, 45 %justify . . . . . . . . . . . 25-26, 29, 38, 45
%keep . . . . . . . . . . . . 21, 26, 38 %keep . . . . . . . . . . . . 21, 26, 38
%lack . . . . . . . . . . . . 23-24, 26-27, 31, 37-38, 63 %lack . . . . . . . . . . . . 23-24, 26-27, 31, 37-38, 63
%language . . . . . . . . . . 27, 38 %language . . . . . . . . . . 27, 38
%lock . . . . . . . . . . . . 27, 36, 38 %lock . . . . . . . . . . . . 27, 36, 38
%name . . . . . . . . . . . . 21, 27, 33, 38, 47 %name . . . . . . . . . . . . 21, 27, 33, 38, 47
%neutral . . . . . . . . . . . 19, 24, 27-28, 31, 37, 39, %neutral . . . . . . . . . . . 19, 24, 27-28, 31, 37, 39,
41, 52, 59, 63 41, 52, 59, 63
%nextlesson . . . . . . . . . 28, 39, 44, 49, 65-66 %nextlesson . . . . . . . . . 28, 39, 44, 49, 65-66
%nocontrolc . . . . . . . . . 28, 39, 49, 65-66 %nocontrolc . . . . . . . . . 28, 39, 49, 65-66
%noextra . . . . . . . . . . . 19, 22, 29, 39, 48-49 %noextra . . . . . . . . . . . 19, 22, 29, 39, 48-49
%nojustify . . . . . . . . . . 25, 29, 39 %nojustify . . . . . . . . . . 25, 29, 39
%noorder . . . . . . . . . . . 19, 27, 29, 39, 49 %noorder . . . . . . . . . . . 19, 27, 29, 39, 49
INDEX OF GNOSIS COMMANDS INDEX OF GNOSIS COMMANDS
%order . . . . . . . . . . . . 19, 29, 39, 57 %order . . . . . . . . . . . . 19, 29, 39, 57
%procedure . . . . . . . . . . 30, 39, 44, 46 %procedure . . . . . . . . . . 30, 39, 44, 46
%qend . . . . . . . . . . . . 30, 39, 44 %qend . . . . . . . . . . . . 30, 39, 44
%question . . . . . . . . . . 15, 17, 19, 24-25, 30, 32, %question . . . . . . . . . . 15, 17, 19, 24-25, 30, 32,
39, 41, 44, 50, 52, 56-58, 62 39, 41, 44, 50, 52, 56-58, 62
%right . . . . . . . . . . . . 15, 17, 19 22-24, 31, 37, 39, %right . . . . . . . . . . . . 15, 17, 19 22-24, 31, 37, 39,
51-52, 62-63 51-52, 62-63
%same . . . . . . . . . . . . 31-32, 39, 63 %same . . . . . . . . . . . . 31-32, 39, 63
%sgnosis . . . . . . . . . . . 32, 39 %sgnosis . . . . . . . . . . . 32, 39
%switch . . . . . . . . . . . 24-25, 32, 39, 43 %switch . . . . . . . . . . . 24-25, 32, 39, 43
%teacher . . . . . . . . . . . 21, 26, 32-33, 39, 52 %teacher . . . . . . . . . . . 21, 26, 32-33, 39, 52
%text . . . . . . . . . . . . 15, 19, 17, 24, 30-31, 33-34, %text . . . . . . . . . . . . 15, 19, 17, 24, 30-31, 33-34,
36, 39, 44-45, 48, 50, 62 36, 39, 44-45, 48, 50, 62
%variables . . . . . . . . . . 25, 36, 39, 44, 46 %variables . . . . . . . . . . 25, 36, 39, 44, 46
%wrong . . . . . . . . . . . . 15, 17, 19, 23-24, 31, 36-37, %wrong . . . . . . . . . . . . 15, 17, 19, 23-24, 31, 36-37,
39, 58-59, 62-63 39, 58-59, 62-63
APPENDIX A APPENDIX A
SELECTED BIBLIOGRAPHY SELECTED BIBLIOGRAPHY
1. -----, DECSYSTEM10 ALGOL PROGRAMMER'S REFERENCE 1. -----, DECSYSTEM10 ALGOL PROGRAMMER'S REFERENCE
MANUAL (Maynard, Massachusetts: Digital Equipment MANUAL (Maynard, Massachusetts: Digital Equipment
Corporation, 1974). The basic ALGOL reference for Corporation, 1974). The basic ALGOL reference for
DEC users. Not a stand-alone guide. A new edition DEC users. Not a stand-alone guide. A new edition
is imminent. is imminent.
2. Bauer, F. L., ET AL., INTRODUCTION TO ALGOL 2. Bauer, F. L., ET AL., INTRODUCTION TO ALGOL
(Englewood Cliffs, New Jersey: Prentice-Hall, (Englewood Cliffs, New Jersey: Prentice-Hall,
1964). 1964).
3. Burson, Jeanne L., THE AUTHOR'S GUIDE TO CAI: 3. Burson, Jeanne L., THE AUTHOR'S GUIDE TO CAI:
DEVELOPMENT (Columbus, Ohio: Ohio State University DEVELOPMENT (Columbus, Ohio: Ohio State University
Division of Computing Services for Medical Division of Computing Services for Medical
Education and Research, 1977). Loose-leaf guide Education and Research, 1977). Loose-leaf guide
for lesson designers at OSU. for lesson designers at OSU.
4. Bush, Steve, PNOSIS: A LANGUAGE FOR SIMPLE CAI 4. Bush, Steve, PNOSIS: A LANGUAGE FOR SIMPLE CAI
(Dallas, Texas: University of Texas Medical (Dallas, Texas: University of Texas Medical
Computing Resources Center, 1978). Documentation Computing Resources Center, 1978). Documentation
on a preprocessor, using a subset of GNOSIS on a preprocessor, using a subset of GNOSIS
commands, which translates directly into PILOT commands, which translates directly into PILOT
rather than ALGOL. Originally called GNOSIS-II. rather than ALGOL. Originally called GNOSIS-II.
PNOSIS supports direct coding in PILOT much as PNOSIS supports direct coding in PILOT much as
GNOSIS supports direct coding in ALGOL. A version GNOSIS supports direct coding in ALGOL. A version
should be available from DECUS. should be available from DECUS.
5. Callender, Patricia, PROGRAMMED LEARNING: ITS 5. Callender, Patricia, PROGRAMMED LEARNING: ITS
DEVELOPMENT AND STRUCTURE (London: Longmans, Green DEVELOPMENT AND STRUCTURE (London: Longmans, Green
and Co., 1969). and Co., 1969).
6. Dijkstra, E. W., A PRIMER OF ALGOL 60 PROGRAMMING 6. Dijkstra, E. W., A PRIMER OF ALGOL 60 PROGRAMMING
TOGETHER WITH REPORT ON THE ALGORITHMIC LANGUAGE TOGETHER WITH REPORT ON THE ALGORITHMIC LANGUAGE
ALGOL 60 (New York: Academic Press, Inc., 1962). ALGOL 60 (New York: Academic Press, Inc., 1962).
Historically, the standard reference on ALGOL 60. Historically, the standard reference on ALGOL 60.
7. Lindsay, C. H. and Van der Meulen, S. G., 7. Lindsay, C. H. and Van der Meulen, S. G.,
INFORMAL INTRODUCTION TO ALGOL 68 (Amsterdam, The INFORMAL INTRODUCTION TO ALGOL 68 (Amsterdam, The
Netherlands: North Holland Publishing Co., 1977). Netherlands: North Holland Publishing Co., 1977).
Standard documentation for a later version of Standard documentation for a later version of
ALGOL. ALGOL.
SELECTED BIBLIOGRAPHY Page A-2 SELECTED BIBLIOGRAPHY Page A-2
8. Malcolme-Lawes, D. J., PROGRAMMING-ALGOL (Elmsfor, 8. Malcolme-Lawes, D. J., PROGRAMMING-ALGOL (Elmsfor,
New York: Pergamon Press, Inc., 1969). New York: Pergamon Press, Inc., 1969).
9. Markle, Susan Meyer, GOOD FRAMES AND BAD: A 9. Markle, Susan Meyer, GOOD FRAMES AND BAD: A
GRAMMAR OF FRAME WRITING (New York: John Wiley and GRAMMAR OF FRAME WRITING (New York: John Wiley and
Sons, 1969). Excellent introduction to the writing Sons, 1969). Excellent introduction to the writing
of programmed textbooks. Skinnerian bent. of programmed textbooks. Skinnerian bent.
10. Pagan, Frank G., A PRACTICAL GUIDE TO ALGOL 68 (New 10. Pagan, Frank G., A PRACTICAL GUIDE TO ALGOL 68 (New
York: John Wiley and Sons, 1976). York: John Wiley and Sons, 1976).
11. Palme, Jacob, GNOSIS -- A SYSTEM FOR COMPUTER AIDED 11. Palme, Jacob, GNOSIS -- A SYSTEM FOR COMPUTER AIDED
INSTRUCTION (Stockholm, Sweden: Swedish National INSTRUCTION (Stockholm, Sweden: Swedish National
Defense Research Institute, 1973 and 1975). Defense Research Institute, 1973 and 1975).
Manuals for previous versions of GNOSIS. Manuals for previous versions of GNOSIS.
12. Wichman, B., ALGOL 60 COMPILATION AND ASSESSMENT 12. Wichman, B., ALGOL 60 COMPILATION AND ASSESSMENT
(New York: Academic Press Inc., 1973). (New York: Academic Press Inc., 1973).
13. Wijngaarden, A. van, ET AL., REVISED REPORT ON THE 13. Wijngaarden, A. van, ET AL., REVISED REPORT ON THE
ALGORITHMIC LANGUAGE ALGOL 68 (New York: ALGORITHMIC LANGUAGE ALGOL 68 (New York:
Springer-Verlag, 1976). Springer-Verlag, 1976).
APPENDIX B APPENDIX B
ILLEGAL LABEL NAMES ILLEGAL LABEL NAMES
The following words are illegal as user-supplied labels The following words are illegal as user-supplied labels
within GNOSIS lessons. Those marked with a single asterisk within GNOSIS lessons. Those marked with a single asterisk
are reserved words in ALGOL, those with a double asterisk are reserved words in ALGOL, those with a double asterisk
are used by GNOSIS lessons, and the remainder are used by are used by GNOSIS lessons, and the remainder are used by
ALGOL. Of course, ANY of these words can be used for their ALGOL. Of course, ANY of these words can be used for their
INTENDED purpose within a lesson, but never as labels. INTENDED purpose within a lesson, but never as labels.
ABS AND* ANSWERCOPY** ABS AND* ANSWERCOPY**
ANSWERLENGTH** ANSWER** ANYWHERE** ANSWERLENGTH** ANSWER** ANYWHERE**
ARCCOS ARCSIN ARCTAN ARCCOS ARCSIN ARCTAN
ARRAY* BACKSPACE BACK** ARRAY* BACKSPACE BACK**
BEGIN* BLANK** BOOLEAN* BEGIN* BLANK** BOOLEAN*
BREAKOUTPUT CARRIAGERETURN** CHAR** BREAKOUTPUT CARRIAGERETURN** CHAR**
CHECKOFF* CHECKON* CLOSEFILE CHECKOFF* CHECKON* CLOSEFILE
COMMENT* CONCAT CONTROLG** COMMENT* CONCAT CONTROLG**
CONTROLSTART** COS COSH CONTROLSTART** COS COSH
DCALL DELETE DIV* DCALL DELETE DIV*
DO* ELSE* ENDFILE DO* ELSE* ENDFILE
ENDOFLESSON** ENDOFLINE** END* ENDOFLESSON** ENDOFLINE** END*
ENTIER EQV* EXTERNAL* ENTIER EQV* EXTERNAL*
EXTRATEST** FALSE* FIRSTNAME** EXTRATEST** FALSE* FIRSTNAME**
FIRSTTRY** FORWARD* FOR* FIRSTTRY** FORWARD* FOR*
GETLINE** GFIELD GIVEANSWER** GETLINE** GFIELD GIVEANSWER**
GLOBAL GOTO* GO* GLOBAL GOTO* GO*
HERE** ICALL IF* HERE** ICALL IF*
IHAVEBLANKED** IMAX IMIN IHAVEBLANKED** IMAX IMIN
IMP* INPUT INSYMBOL IMP* INPUT INSYMBOL
INTEGER* IOCHAN LABEL* INTEGER* IOCHAN LABEL*
LARCTAN LASTERRORS** LASTLATEPERCENT** LARCTAN LASTERRORS** LASTLATEPERCENT**
LASTLATESCORECOUNT** LASTLATESCOREKOUNT** LASTLATESCORE** LASTLATESCORECOUNT** LASTLATESCOREKOUNT** LASTLATESCORE**
LASTPERCENT** LASTQCOUNT** LASTQKOUNT** LASTPERCENT** LASTQCOUNT** LASTQKOUNT**
LASTRIGHTS** LASTSCORECOUNT** LASTSCOREKOUNT** LASTRIGHTS** LASTSCORECOUNT** LASTSCOREKOUNT**
LASTSCORE** LATEPERCENT** LATESCORE** LASTSCORE** LATEPERCENT** LATESCORE**
LCALL LCOS LESSONNAME** LCALL LCOS LESSONNAME**
LEXP LINEFEED** LINE* LEXP LINEFEED** LINE*
LINKR LISTOFF* LISTON* LINKR LISTOFF* LISTON*
LLN LMIN LN LLN LMIN LN
LONG* LSIN LSQRT LONG* LSIN LSQRT
MESSAGE** NEWLINE NEWSTRING MESSAGE** NEWLINE NEWSTRING
ILLEGAL LABEL NAMES Page B-2 ILLEGAL LABEL NAMES Page B-2
NEXTSYMBOL NEXT** NOPAUSE** NEXTSYMBOL NEXT** NOPAUSE**
NOT* OPENFILE OR* NOT* OPENFILE OR*
OUTSYMBOL OWN* PAGE** OUTSYMBOL OWN* PAGE**
PAUSE** PERCENT** PERSONALIZE** PAUSE** PERCENT** PERSONALIZE**
POS** PRINTOCTAL PROCEDURE* POS** PRINTOCTAL PROCEDURE*
PROMPT** PUTAWAY** PUTMESSAGE** PROMPT** PUTAWAY** PUTMESSAGE**
QCOUNT** RANDNO** RANDOM** QCOUNT** RANDNO** RANDOM**
RCALL READOCTAL REAL* RCALL READOCTAL REAL*
REM* REPEAT** RESTORE** REM* REPEAT** RESTORE**
REWIND RIGHTATLAST** RIGHTMESSAGE** REWIND RIGHTATLAST** RIGHTMESSAGE**
RIGHT** RMAX RMIN RIGHT** RMAX RMIN
SCORE** SELECTINPUT SELECTOUTPUT SCORE** SELECTINPUT SELECTOUTPUT
SFIELD SIN SINH SFIELD SIN SINH
SIMULATE** SKIPSYMBOL SKIP** SIMULATE** SKIPSYMBOL SKIP**
SQRT START** STEP* SQRT START** STEP*
STOP** STRING* SWITCH* STOP** STRING* SWITCH*
TAB TANH TEMPFILE TAB TANH TEMPFILE
THEN* TRACEOFF TRACEON THEN* TRACEOFF TRACEON
TRANSFILE TRUE* TRYAGAIN** TRANSFILE TRUE* TRYAGAIN**
UNTIL* UPARROW** VALUE* UNTIL* UPARROW** VALUE*
WHILE* WRONGMESSAGE** WRONG** WHILE* WRONGMESSAGE** WRONG**
APPENDIX C APPENDIX C
USE OF IF-CLASS COMMANDS USE OF IF-CLASS COMMANDS
C.1 EXAMPLE I C.1 EXAMPLE I
Let us suppose that you are bilingual Swedish/English Let us suppose that you are bilingual Swedish/English
and that you wish to write ONE lesson that will work in and that you wish to write ONE lesson that will work in
either Swedish or English depending on the situation. either Swedish or English depending on the situation.
Strictly speaking, this is impossible, but you can achieve Strictly speaking, this is impossible, but you can achieve
almost the same effect by coding your lesson as follows: almost the same effect by coding your lesson as follows:
... ...
%SWITCH english TRUE %SWITCH english TRUE
%IF english %IF english
!The BOOLEAN "english" is TRUE so !The BOOLEAN "english" is TRUE so
!the following English segment !the following English segment
!will become part of the translated !will become part of the translated
!lesson. !lesson.
... ...
%IFNOT english %IFNOT english
!This Swedish segment will not !This Swedish segment will not
!become part of the translated !become part of the translated
!lesson since "english" is TRUE !lesson since "english" is TRUE
... ...
%IFEND english %IFEND english
!Everything else will be part of !Everything else will be part of
!the translated lesson regardless !the translated lesson regardless
!of how the %SWITCH command !of how the %SWITCH command
!initializes "english" !initializes "english"
... ...
Now, just by changing a single line in the file, we can Now, just by changing a single line in the file, we can
cause a Swedish language version to be prepared by the cause a Swedish language version to be prepared by the
GNOSIS translator. We simply replace "%SWITCH english TRUE" GNOSIS translator. We simply replace "%SWITCH english TRUE"
by "%SWITCH english FALSE". No other editing has to be by "%SWITCH english FALSE". No other editing has to be
done! This is the value of the IF-facility. done! This is the value of the IF-facility.
USE OF IF-CLASS COMMANDS Page C-2 USE OF IF-CLASS COMMANDS Page C-2
EXAMPLE II EXAMPLE II
C.2 EXAMPLE II C.2 EXAMPLE II
Let us suppose that CHOOSE.SAV -- when it is finally Let us suppose that CHOOSE.SAV -- when it is finally
ready -- will be a program which reads and writes a list of ready -- will be a program which reads and writes a list of
available lessons, allows a student to pick one of them to available lessons, allows a student to pick one of them to
be run, and then runs that lesson for him. (At the end of be run, and then runs that lesson for him. (At the end of
the lesson, control would pass back to CHOOSE via a the lesson, control would pass back to CHOOSE via a
%NEXTLESSON command.) Now, despite the fact that CHOOSE.SAV %NEXTLESSON command.) Now, despite the fact that CHOOSE.SAV
is not yet available, we can nevertheless lay the groundwork is not yet available, we can nevertheless lay the groundwork
for it in the lesson script by coding that script as for it in the lesson script by coding that script as
follows: follows:
... ...
%SWITCH autotransfer FALSE %SWITCH autotransfer FALSE
%IF autotransfer %IF autotransfer
%NEXTLESSON run("CHOOSE"); %NEXTLESSON run("CHOOSE");
%IFEND autotransfer %IFEND autotransfer
... ...
%IF autotransfer %IF autotransfer
%FINISH %FINISH
%ALGOL %ALGOL
Newline; Newline;
Write("Transferring to CHOOSE program."); Write("Transferring to CHOOSE program.");
Newline; Newline;
%IFEND autotransfer %IFEND autotransfer
%END %END
The lesson segment above would NOT cause GNOSIS to generate The lesson segment above would NOT cause GNOSIS to generate
code to support the automatic transfer of the student to code to support the automatic transfer of the student to
another lesson. When CHOOSE finally is ready, the only another lesson. When CHOOSE finally is ready, the only
change that would then need to be made in the lesson would change that would then need to be made in the lesson would
be the replacement of "%SWITCH autotransfer FALSE" with be the replacement of "%SWITCH autotransfer FALSE" with
"%SWITCH autotransfer TRUE". GNOSIS would then generate "%SWITCH autotransfer TRUE". GNOSIS would then generate
code to support transfer. No other editorial changes would code to support transfer. No other editorial changes would
be required. be required.
APPENDIX D APPENDIX D
USEFUL MIC PROGRAMS USEFUL MIC PROGRAMS
D.1 GNOSIS.MIC D.1 GNOSIS.MIC
The following MIC[20] program (GNOSIS.MIC on the The following MIC[20] program (GNOSIS.MIC on the
distribution tape) makes preparing CAI lessons about as easy distribution tape) makes preparing CAI lessons about as easy
as watching a player piano play. Once this file is in your as watching a player piano play. Once this file is in your
account, all you need to do to prepare lessons is type "DO account, all you need to do to prepare lessons is type "DO
GNOSIS <lessonname without extension>". The MIC program GNOSIS <lessonname without extension>". The MIC program
assumes the extension is ".GNO" and takes control at that assumes the extension is ".GNO" and takes control at that
point, pausing only at essential decision points to see if point, pausing only at essential decision points to see if
you want to continue. you want to continue.
If you decide to try to make a MIC file like this If you decide to try to make a MIC file like this
yourself, then you must know TECO rather thoroughly, yourself, then you must know TECO rather thoroughly,
notably: notably:
1. that "3I$$" inserts a CTRL-C whereas "S<003>$$" 1. that "3I$$" inserts a CTRL-C whereas "S<003>$$"
searches for one; searches for one;
2. that "7I$$" inserts a CTRL-G (the bell) whereas 2. that "7I$$" inserts a CTRL-G (the bell) whereas
"S<007>$$" searches for one; "S<007>$$" searches for one;
3. that "19I$$" inserts a CTRL-S whereas "S<023>$$" 3. that "19I$$" inserts a CTRL-S whereas "S<023>$$"
searches for one. searches for one.
------------------------------------------------------------ ------------------------------------------------------------
![MIC] Enabling CTRL-S and CTRL-Q commands ![MIC] Enabling CTRL-S and CTRL-Q commands
.SET TTY PAGE .SET TTY PAGE
![MIC] Command Format: "DO GNOSIS <lessonname>". Since ![MIC] Command Format: "DO GNOSIS <lessonname>". Since
![MIC] the ".GNO" extension is ASSUMED for <lessonname>. ![MIC] the ".GNO" extension is ASSUMED for <lessonname>.
![MIC] you should NOT supply it in the command string. ![MIC] you should NOT supply it in the command string.
![MIC] Type a CTRL-Q to continue, CTRL-Cs to cancel^G ![MIC] Type a CTRL-Q to continue, CTRL-Cs to cancel^G
.^S .^S
![MIC] Submitting 'A.GNO to the GNOSIS translator ![MIC] Submitting 'A.GNO to the GNOSIS translator
--------------- ---------------
20. Standard MIC documentation is supplied with the 20. Standard MIC documentation is supplied with the
GNOSIS distribution tape. However, if your system supports GNOSIS distribution tape. However, if your system supports
MIC commands, then this documentation would likely be MIC commands, then this documentation would likely be
available from your systems programmers anyway. available from your systems programmers anyway.
USEFUL MIC PROGRAMS Page D-2 USEFUL MIC PROGRAMS Page D-2
GNOSIS.MIC GNOSIS.MIC
.R GNOSIS .R GNOSIS
*'A *'A
* *
![MIC] Type a CTRL-Q to continue, CTRL-Cs to cancel^G ![MIC] Type a CTRL-Q to continue, CTRL-Cs to cancel^G
.^S .^S
![MIC] Submitting the translated program, 'A.ALG to the ![MIC] Submitting the translated program, 'A.ALG to the
![MIC] ALGOL compiler with NOSYMBOLS, PRODUCTION switches ![MIC] ALGOL compiler with NOSYMBOLS, PRODUCTION switches
.R ALGOL .R ALGOL
*'A.REL='A.ALG/NOSYMBOLS/PRODUCTION *'A.REL='A.ALG/NOSYMBOLS/PRODUCTION
*^C *^C
![MIC] Type a CTRL-Q to continue, CTRL-Cs to cancel^G ![MIC] Type a CTRL-Q to continue, CTRL-Cs to cancel^G
.^S .^S
![MIC] Loading with GNOLIB.REL ![MIC] Loading with GNOLIB.REL
.LOAD 'A.REL,SYS:GNOLIB.REL .LOAD 'A.REL,SYS:GNOLIB.REL
![MIC] Type a CTRL-Q to continue, CTRL-Cs to cancel^G ![MIC] Type a CTRL-Q to continue, CTRL-Cs to cancel^G
.^S .^S
![MIC] Saving lesson as 'A.SAV ![MIC] Saving lesson as 'A.SAV
.OSAVE 'A .OSAVE 'A
![MIC] "RUN 'A" will now run the lesson. ![MIC] "RUN 'A" will now run the lesson.
![MIC] Deleting the garbage files 'A.REL, 'A.ALG ![MIC] Deleting the garbage files 'A.REL, 'A.ALG
.DEL 'A.REL, 'A.ALG .DEL 'A.REL, 'A.ALG
![MIC] Finished...exiting to monitor ![MIC] Finished...exiting to monitor
!. !.
D.2 SORT.MIC D.2 SORT.MIC
The following MIC program will use the utility program The following MIC program will use the utility program
SORT to alphabetize the <lessonname>.SRT files. This groups SORT to alphabetize the <lessonname>.SRT files. This groups
the unexpected responses to each question together and, in the unexpected responses to each question together and, in
addition, alphabetizes the unexpected responses within each addition, alphabetizes the unexpected responses within each
of those groupings. of those groupings.
To start this MIC program, type "DO SORT <filename with To start this MIC program, type "DO SORT <filename with
extension>". extension>".
------------------------------------------------------------ ------------------------------------------------------------
![MIC] Command Format: "DO SORT <filename>". ![MIC] Command Format: "DO SORT <filename>".
![MIC] Note: ".SRT" extension is NOT assumed. ![MIC] Note: ".SRT" extension is NOT assumed.
! !
![MIC] The DEC utility "SORT" will be run next. ![MIC] The DEC utility "SORT" will be run next.
![MIC] It will alphabetize the 'A file, keying ![MIC] It will alphabetize the 'A file, keying
![MIC] on the first 30 characters. Record ![MIC] on the first 30 characters. Record
![MIC] length must not exceed 300 characters. ![MIC] length must not exceed 300 characters.
! !
.R SORT .R SORT
*'A='A/KEY:1:30:A/ALPHA/RECORD:300 *'A='A/KEY:1:30:A/ALPHA/RECORD:300
*^Z *^Z
![MIC] The sorted file will be typed out. ![MIC] The sorted file will be typed out.
USEFUL MIC PROGRAMS Page D-3 USEFUL MIC PROGRAMS Page D-3
SORT.MIC SORT.MIC
![MIC] Type CTRL-C when you have seen enough. ![MIC] Type CTRL-C when you have seen enough.
! !
.TYPE 'A .TYPE 'A
APPENDIX E APPENDIX E
MACRO ROUTINES MACRO ROUTINES
E.1 INTRUT INTERCEPT ROUTINE E.1 INTRUT INTERCEPT ROUTINE
Immediately below is the MACRO code associated with the Immediately below is the MACRO code associated with the
external ALGOL procedure "stopkc". It becomes a part of the external ALGOL procedure "stopkc". It becomes a part of the
lesson when the %NOCONTROLC command is used. lesson when the %NOCONTROLC command is used.
------------------------------------------------------------ ------------------------------------------------------------
;AUTHOR: JACOB PALME ;AUTHOR: JACOB PALME
;EXTERNAL PROCEDURE TO BE CALLED FROM ALGOL VER 10 ;EXTERNAL PROCEDURE TO BE CALLED FROM ALGOL VER 10
;THE CALL IS STOPKC ;THE CALL IS STOPKC
;ACTION: RUNS LOGOUT UPON INTERCEPTING CTRL-Cs ;ACTION: RUNS LOGOUT UPON INTERCEPTING CTRL-Cs
TITLE INTRUT INTERCEPT ROUTINE TITLE INTRUT INTERCEPT ROUTINE
ENTRY STOPKC ENTRY STOPKC
LOC 134 LOC 134
;.JBINT ;.JBINT
EXP INTBLK EXP INTBLK
;POINTS TO INTERRUPT BLOCK ;POINTS TO INTERRUPT BLOCK
RELOC RELOC
;BACK TO ORDER ;BACK TO ORDER
INTBLK::XWD 4,INTRUT INTBLK::XWD 4,INTRUT
;GO TO INTRUT ON INTERCEPT ;GO TO INTRUT ON INTERCEPT
XWD 0,-1 XWD 0,-1
;TAKE ALL ;TAKE ALL
0 0
0 0
INTRUT::HRRZI RUNBLK INTRUT::HRRZI RUNBLK
;SET UP TO RUN ;SET UP TO RUN
; SETZM INTBLK+2 ; SETZM INTBLK+2
CLOSE 2,0 CLOSE 2,0
;CLOSE THE LPT ;CLOSE THE LPT
RUN RUN
;AND RUN LOGOUT ;AND RUN LOGOUT
HALT HALT
RUNBLK: SIXBIT/SYS/ RUNBLK: SIXBIT/SYS/
SIXBIT/LOGOUT/ SIXBIT/LOGOUT/
0 0
0 0
0 0
MACRO ROUTINES Page E-2 MACRO ROUTINES Page E-2
INTRUT INTERCEPT ROUTINE INTRUT INTERCEPT ROUTINE
0 0
HALT HALT
STOPKC: MOVEM ,SAV0 STOPKC: MOVEM ,SAV0
;SAVE 0 ;SAVE 0
MOVEI ,INTBLK MOVEI ,INTBLK
;GET ADR OF INTBLK ;GET ADR OF INTBLK
MOVEM ,134 MOVEM ,134
;STORE IN INTERRUPT ADDRESS ;STORE IN INTERRUPT ADDRESS
MOVE ,SAV0 MOVE ,SAV0
;RESTORE ;RESTORE
--------------- ---------------
JSP 16,.%ALGDR##+1 JSP 16,.%ALGDR##+1
Z [0] Z [0]
;???? ;????
1,,3 1,,3
SOJE 1 SOJE 1
JRST 2(15) JRST 2(15)
1,,0 1,,0
SAV0: Z SAV0: Z
;SAVE AREA FOR REG 0 ;SAVE AREA FOR REG 0
END END
E.2 R ROUTINE E.2 R ROUTINE
This is the MACRO code associated with the external This is the MACRO code associated with the external
ALGOL procedure "r". It becomes a part of the lesson when ALGOL procedure "r". It becomes a part of the lesson when
the %NEXTLESSON command is used. the %NEXTLESSON command is used.
------------------------------------------------------------ ------------------------------------------------------------
;AUTHOR: JACOB PALME ;AUTHOR: JACOB PALME
;EXTERNAL PROCEDURE TO BE CALLED FROM ALGOL VER 10 ;EXTERNAL PROCEDURE TO BE CALLED FROM ALGOL VER 10
;THE CALL IS R("NAME"); ;THE CALL IS R("NAME");
;ACTION: SAME AS IF .R NAME WAS GIVEN FROM TTY ;ACTION: SAME AS IF .R NAME WAS GIVEN FROM TTY
TITLE R ROUTINE TITLE R ROUTINE
ENTRY R ENTRY R
R: JRST R+4 R: JRST R+4
EXP 0 EXP 0
;TRACE BLOCK ;TRACE BLOCK
1,,1 1,,1
;1 LETTER NAME ;1 LETTER NAME
SIXBIT /R/ SIXBIT /R/
JSP 16,.%ALGDR##+1 JSP 16,.%ALGDR##+1
EXP R+1 EXP R+1
;ADDRESS OF TRACE BLOCK ;ADDRESS OF TRACE BLOCK
1,,6 1,,6
362000,,2 362000,,2
;NON-TYPE EXTERNAL PROCEDURE, 1 PARAM ;NON-TYPE EXTERNAL PROCEDURE, 1 PARAM
70540,,3 70540,,3
;STRING, FORMAL BY NAME ;STRING, FORMAL BY NAME
JSP 16,.%ALGDR##+12 JSP 16,.%ALGDR##+12
XCT 3(15) XCT 3(15)
MACRO ROUTINES Page E-3 MACRO ROUTINES Page E-3
R ROUTINE R ROUTINE
MOVE 3,0 MOVE 3,0
;GETSTRING ADDRESS ;GETSTRING ADDRESS
HRRZ 1,1 HRRZ 1,1
;GET LENGTH OF ARGUMENT STRING IN 1 ;GET LENGTH OF ARGUMENT STRING IN 1
CAIL 1,6 CAIL 1,6
;SKIP IF LESS THAN 6 ;SKIP IF LESS THAN 6
MOVEI 1,6 MOVEI 1,6
;SET LENGTH TO 6 IF GREATER ;SET LENGTH TO 6 IF GREATER
WIND: ILDB 2,FRPOIN WIND: ILDB 2,FRPOIN
;TAKE A CHAR FROM THE STRING ;TAKE A CHAR FROM THE STRING
;(REG 0 IS POINTER) ;(REG 0 IS POINTER)
SUBI 2,40 SUBI 2,40
;CONV TO SIXBIT ;CONV TO SIXBIT
IDPB 2,TOPOIN IDPB 2,TOPOIN
;STORE IN NAME ;STORE IN NAME
SOJG 1,WIND SOJG 1,WIND
;LOOP MAX 6 TURNS ;LOOP MAX 6 TURNS
HRRZI RUNBLK HRRZI RUNBLK
;SET UP FOR RUN ;SET UP FOR RUN
CLOSE 2,0 CLOSE 2,0
;CLOSE THE LPT ;CLOSE THE LPT
RUNP: RUN 0, RUNP: RUN 0,
;RUN THE SPECIFIED PROGRAM ;RUN THE SPECIFIED PROGRAM
OUTSTR [ASCIZ/?CANNOT FIND SPECIFIED PROGRAM/] OUTSTR [ASCIZ/?CANNOT FIND SPECIFIED PROGRAM/]
;LOGS OUT INSTEAD ;LOGS OUT INSTEAD
HRRZI RUNBLK HRRZI RUNBLK
;SET UP FOR RUN AGAIN ;SET UP FOR RUN AGAIN
MOVE 3,[SIXBIT/LOGOUT/] MOVE 3,[SIXBIT/LOGOUT/]
;BUT LOGOUT THIS TIME ;BUT LOGOUT THIS TIME
MOVEM 3,NAME MOVEM 3,NAME
;PUT INTO RUN BLOCK ;PUT INTO RUN BLOCK
JRST RUNP JRST RUNP
;GO LOGOUT ;GO LOGOUT
HALT HALT
RUNBLK: SIXBIT/SYS/ RUNBLK: SIXBIT/SYS/
;TAKE IT FROM SYS: ;TAKE IT FROM SYS:
NAME: Z NAME: Z
;TO BE ENTERED FROM CALL ARGUMENT ;TO BE ENTERED FROM CALL ARGUMENT
Z Z
;NOT INTERESTED IN EXT ;NOT INTERESTED IN EXT
Z Z
Z Z
Z Z
FRPOIN: POINT 7,(3) FRPOIN: POINT 7,(3)
;TAKE FROM WHAT REG 3 POINTS TO ;TAKE FROM WHAT REG 3 POINTS TO
TOPOIN: POINT 6,NAME TOPOIN: POINT 6,NAME
;AND PLACE IN NAME ;AND PLACE IN NAME
;THE PROGRAM IS NEVER USED AGAIN-SO WE CAN DESTROY POINTERS ;THE PROGRAM IS NEVER USED AGAIN-SO WE CAN DESTROY POINTERS
END END
MACRO ROUTINES Page E-4 MACRO ROUTINES Page E-4
RUN ROUTINE RUN ROUTINE
E.3 RUN ROUTINE E.3 RUN ROUTINE
This is the MACRO code associated with the external This is the MACRO code associated with the external
ALGOL procedure "run". It also becomes a part of the lesson ALGOL procedure "run". It also becomes a part of the lesson
when the %NEXTLESSON command is used. when the %NEXTLESSON command is used.
------------------------------------------------------------ ------------------------------------------------------------
;AUTHOR: JACOB PALME ;AUTHOR: JACOB PALME
;EXTERNAL PROCEDURE TO BE CALLED FROM ALGOL VER 10 ;EXTERNAL PROCEDURE TO BE CALLED FROM ALGOL VER 10
;THE CALL IS RUN("NAME"); ;THE CALL IS RUN("NAME");
;ACTION: SAME AS IF .RUN NAME WAS GIVEN FROM TTY ;ACTION: SAME AS IF .RUN NAME WAS GIVEN FROM TTY
TITLE RUN ROUTINE TITLE RUN ROUTINE
ENTRY RUN ENTRY RUN
RUN: JRST RUN+4 RUN: JRST RUN+4
EXP 0 EXP 0
;TRACE BLOCK ;TRACE BLOCK
1,,3 1,,3
;3 LETTER NAME ;3 LETTER NAME
SIXBIT /RUN/ SIXBIT /RUN/
--------------- ---------------
JSP 16,.%ALGDR##+1 JSP 16,.%ALGDR##+1
EXP RUN+1 EXP RUN+1
;ADDRESS OF TRACE BLOCK ;ADDRESS OF TRACE BLOCK
1,,6 1,,6
362000,,2 362000,,2
;NON-TYPE EXTERNAL PROCEDURE, 1 PARAM ;NON-TYPE EXTERNAL PROCEDURE, 1 PARAM
70540,,3 70540,,3
;STRING, FORMAL BY NAME ;STRING, FORMAL BY NAME
JSP 16,.%ALGDR##+12 JSP 16,.%ALGDR##+12
XCT 3(15) XCT 3(15)
MOVE 3,0 MOVE 3,0
;GETSTRING ADDRESS ;GETSTRING ADDRESS
HRRZ 1,1 HRRZ 1,1
;GET LENGTH OF ARGUMENT STRING IN 1 ;GET LENGTH OF ARGUMENT STRING IN 1
CAIL 1,6 CAIL 1,6
;SKIP IF LESS THAN 6 ;SKIP IF LESS THAN 6
MOVEI 1,6 MOVEI 1,6
;SET LENGTH TO 6 IF GREATER ;SET LENGTH TO 6 IF GREATER
WIND: ILDB 2,FRPOIN WIND: ILDB 2,FRPOIN
;TAKE A CHAR FROM THE STRING ;TAKE A CHAR FROM THE STRING
;(REG 0 IS POINTER) ;(REG 0 IS POINTER)
SUBI 2,40 SUBI 2,40
;CONV TO SIXBIT ;CONV TO SIXBIT
IDPB 2,TOPOIN IDPB 2,TOPOIN
;STORE IN NAME ;STORE IN NAME
SOJG 1,WIND SOJG 1,WIND
;LOOP MAX 6 TURNS ;LOOP MAX 6 TURNS
HRRZI RUNBLK HRRZI RUNBLK
;SET UP FOR RUN ;SET UP FOR RUN
CLOSE 2,0 CLOSE 2,0
;CLOSE THE LPT ;CLOSE THE LPT
RUNP: CALLI 0,35 RUNP: CALLI 0,35
;RUN THE SPECIFIED PROGRAM ;RUN THE SPECIFIED PROGRAM
MACRO ROUTINES Page E-5 MACRO ROUTINES Page E-5
RUN ROUTINE RUN ROUTINE
OUTSTR [ASCIZ/?CANNOT FIND SPECIFIED PROGRAM/] OUTSTR [ASCIZ/?CANNOT FIND SPECIFIED PROGRAM/]
;LOGS OUT INSTEAD ;LOGS OUT INSTEAD
HRRZI RUNBLK HRRZI RUNBLK
;SET UP FOR RUN AGAIN ;SET UP FOR RUN AGAIN
MOVE 3,[SIXBIT/LOGOUT/] MOVE 3,[SIXBIT/LOGOUT/]
;BUT LOGOUT THIS TIME ;BUT LOGOUT THIS TIME
MOVEM 3,NAME MOVEM 3,NAME
;PUT INTO RUN BLOCK ;PUT INTO RUN BLOCK
JRST RUNP JRST RUNP
;GO LOGOUT ;GO LOGOUT
HALT HALT
RUNBLK: SIXBIT/DSK/ RUNBLK: SIXBIT/DSK/
;TAKE IT FROM DSK: ;TAKE IT FROM DSK:
NAME: Z NAME: Z
;TO BE ENTERED FROM CALL ARGUMENT ;TO BE ENTERED FROM CALL ARGUMENT
Z Z
;NOT INTERESTED IN EXT ;NOT INTERESTED IN EXT
Z Z
Z Z
Z Z
FRPOIN: POINT 7,(3) FRPOIN: POINT 7,(3)
;TAKE FROM WHAT REG 3 POINTS TO ;TAKE FROM WHAT REG 3 POINTS TO
TOPOIN: POINT 6,NAME TOPOIN: POINT 6,NAME
;AND PLACE IN NAME ;AND PLACE IN NAME
;THE PROGRAM IS NEVER USED AGAIN-SO WE CAN DESTROY POINTERS ;THE PROGRAM IS NEVER USED AGAIN-SO WE CAN DESTROY POINTERS
END END
APPENDIX F APPENDIX F
SAMPLE GNOSIS PROGRAM SAMPLE GNOSIS PROGRAM
Given a normal implementation GNOSIS, the following Given a normal implementation GNOSIS, the following
demonstration program should be runable from your account by demonstration program should be runable from your account by
typing "R HOW<CR><LF>". If not, check with a systems typing "R HOW<CR><LF>". If not, check with a systems
programmer to discover where the program resides and how to programmer to discover where the program resides and how to
run it. If this also fails, you may wish to get the HOW.SAV run it. If this also fails, you may wish to get the HOW.SAV
file off the GNOSIS distribution tape so that you can both file off the GNOSIS distribution tape so that you can both
run and study it. In order to learn the inner workings of run and study it. In order to learn the inner workings of
GNOSIS, it really is essential to do both. You might also GNOSIS, it really is essential to do both. You might also
want to study the ALGOL translation of the HOW.GNO lesson. want to study the ALGOL translation of the HOW.GNO lesson.
It is called HOW.ALG, of course, and it too is available on It is called HOW.ALG, of course, and it too is available on
the distribution tape. (Of course, you could always make the distribution tape. (Of course, you could always make
your own ".ALG" version by submitting HOW.GNO to GNOSIS.) Do your own ".ALG" version by submitting HOW.GNO to GNOSIS.) Do
not forget to have the HOW.DTA and HOW.SRT files ready in not forget to have the HOW.DTA and HOW.SRT files ready in
your account before you run the HOW program! your account before you run the HOW program!
The program has been used to teach first-time computer The program has been used to teach first-time computer
users -- mainly students -- how to use the computer. The users -- mainly students -- how to use the computer. The
objective of the lesson was to teach enough to enable a objective of the lesson was to teach enough to enable a
student to run stored GNOSIS programs with a minimum of student to run stored GNOSIS programs with a minimum of
frustration. Thus, HOW stresses erasing, the log in frustration. Thus, HOW stresses erasing, the log in
procedure, and so on. procedure, and so on.
The text of the program follows immediately below. It The text of the program follows immediately below. It
has been altered slightly to fit this 60 column format. has been altered slightly to fit this 60 column format.
------------------------------------------------------------ ------------------------------------------------------------
%NEXTLESSON r("quolst"); %NEXTLESSON r("quolst");
!These lines, beginning with a "!" in column 1, !These lines, beginning with a "!" in column 1,
!will be treated as comments by the GNOSIS processor !will be treated as comments by the GNOSIS processor
!and ignored. Note that "!" must not be the FIRST !and ignored. Note that "!" must not be the FIRST
!character in the lesson, since GNOSIS would then !character in the lesson, since GNOSIS would then
!take "!" as a command indicator. !take "!" as a command indicator.
! !
!Note that all commands in this lesson could have been !Note that all commands in this lesson could have been
!abbreviated to three letters. !abbreviated to three letters.
! !
!If you would like to use this lesson, to teach your !If you would like to use this lesson, to teach your
SAMPLE GNOSIS PROGRAM Page F-2 SAMPLE GNOSIS PROGRAM Page F-2
!students about the computer, then you should go !students about the computer, then you should go
!through the lesson with an editor and replace !through the lesson with an editor and replace
!all the occurrences of "<password>" with the !all the occurrences of "<password>" with the
!account's real password, and all the occurrences of !account's real password, and all the occurrences of
!"<account number>" with the actual account number. !"<account number>" with the actual account number.
! !
%NOCONTROLC %NOCONTROLC
%COPYRIGHT (c) 1978 by Walter Maner %COPYRIGHT (c) 1978 by Walter Maner
%TEACHER Dr. Walter Maner, Philosophy Department, A&L 428 %TEACHER Dr. Walter Maner, Philosophy Department, A&L 428
(489-6517) (489-6517)
%NAME %NAME
%DISK %DISK
%BELL %BELL
%JUSTIFY %JUSTIFY
%PROCEDURE PROCEDURE echoinput; %PROCEDURE PROCEDURE echoinput;
BEGIN BEGIN
Write("Your last response, as received by the computer after Write("Your last response, as received by the computer after
you pushed RETURN,[N]"); you pushed RETURN,[N]");
Write("was as follows: "); Write("was as follows: ");
Write(answercopy); Write(answercopy);
Newline Newline
END; END;
%QUESTION %QUESTION
Is this your first time to use a computer? Is this your first time to use a computer?
%NEUTRAL yes %NEUTRAL yes
Well, then, congratulations for having made it this far. Well, then, congratulations for having made it this far.
I'm going to celebrate a little... I'm going to celebrate a little...
%ALGOL %ALGOL
BEGIN BEGIN
INTEGER i; INTEGER i;
FOR i:= 1 STEP 1 UNTIL 500 DO Outsymbol(controlg) FOR i:= 1 STEP 1 UNTIL 500 DO Outsymbol(controlg)
END; END;
%NEUTRAL no %NEUTRAL no
Then I'll skip the gala welcome party I had planned. Then I'll skip the gala welcome party I had planned.
%NEUTRAL %NEUTRAL
%GOTO repeat; %GOTO repeat;
%QUESTION %QUESTION
Would you like to review the log-in procedure with me, just Would you like to review the log-in procedure with me, just
to be sure to be sure
you will remember how to do it the next time you want to you will remember how to do it the next time you want to
log in? log in?
%NEUTRAL yes %NEUTRAL yes
Alright. We will review the essential steps. Alright. We will review the essential steps.
%NEUTRAL no %NEUTRAL no
Fine. I won't bother to rehearse the steps for you. Fine. I won't bother to rehearse the steps for you.
%GOTO skipreview; %GOTO skipreview;
%NEUTRAL %NEUTRAL
I was expecting a simple 'yes' or 'no' response from you. I was expecting a simple 'yes' or 'no' response from you.
%GOTO repeat; %GOTO repeat;
%TEXT nopause:=true; %TEXT nopause:=true;
%QUESTION nopause:=true; %QUESTION nopause:=true;
What is the very first thing you should do at the terminal? What is the very first thing you should do at the terminal?
%RIGHT Push the RETURN button %RIGHT Push the RETURN button
The computer will then respond with a period PROMPT '.' for The computer will then respond with a period PROMPT '.' for
SAMPLE GNOSIS PROGRAM Page F-3 SAMPLE GNOSIS PROGRAM Page F-3
you on the bottom left. you on the bottom left.
By this simple token, the computer indicates to you that By this simple token, the computer indicates to you that
the terminal IS connected the terminal IS connected
and waiting on you to type something in. and waiting on you to type something in.
If for some reason you do NOT get a period prompt after you If for some reason you do NOT get a period prompt after you
push the RETURN push the RETURN
button, ask anybody you see around you for advice or button, ask anybody you see around you for advice or
assistance. assistance.
There are several reasons why you might fail to get the There are several reasons why you might fail to get the
prompt, none of them prompt, none of them
your fault: (1) the terminal could be out of your fault: (1) the terminal could be out of
order, (2) the terminal may not be turned on, (3) the order, (2) the terminal may not be turned on, (3) the
terminal might not be terminal might not be
connected the computer, (4) the computer itself might not connected the computer, (4) the computer itself might not
be running, or (5) be running, or (5)
the transmit or receive speed of the terminal might need to the transmit or receive speed of the terminal might need to
be adjusted. be adjusted.
You don't need to remember any of this, however. You don't need to remember any of this, however.
Almost ANYONE you are likely to see in a terminal room will Almost ANYONE you are likely to see in a terminal room will
be more than be more than
willing to help you willing to help you
when you encounter a problem such as this (it makes them when you encounter a problem such as this (it makes them
feel important), so PLEASE DO ASK FOR HELP. feel important), so PLEASE DO ASK FOR HELP.
%RIGHT connect %RIGHT connect
%SAME %SAME
%RIGHT return %RIGHT return
%SAME %SAME
%NEUTRAL turn on %NEUTRAL turn on
Technically, you are right. Technically, you are right.
But let's assume that the terminal is switched on and But let's assume that the terminal is switched on and
proceed from that point. proceed from that point.
%GOTO repeat; %GOTO repeat;
%WRONG log %WRONG log
You can't log in unless the terminal is connected to the You can't log in unless the terminal is connected to the
computer. The computer. The
best way to tell whether or not the terminal is patched in best way to tell whether or not the terminal is patched in
is to push is to push
the RETURN key. If the terminal IS connected properly and the RETURN key. If the terminal IS connected properly and
the computer the computer
IS operating, the period PROMPT '.' will appear at the IS operating, the period PROMPT '.' will appear at the
bottom left. bottom left.
This is the computer's way of saying it is ready to This is the computer's way of saying it is ready to
receive receive
input from your terminal. input from your terminal.
%WRONG %WRONG
Hint: You push a single button located on the right side Hint: You push a single button located on the right side
of the keyboard. of the keyboard.
%QUESTION %QUESTION
What is the second thing you should do? What is the second thing you should do?
%RIGHT Type 'LOG' %RIGHT Type 'LOG'
This causes the computer to check and to see whether any This causes the computer to check and to see whether any
SAMPLE GNOSIS PROGRAM Page F-4 SAMPLE GNOSIS PROGRAM Page F-4
logins are logins are
going to be allowed at this time. There might be too many going to be allowed at this time. There might be too many
jobs already jobs already
logged in. Or the system may be temporarily restricted logged in. Or the system may be temporarily restricted
for various for various
kinds of maintenance. But, if all goes well, the computer kinds of maintenance. But, if all goes well, the computer
will proceed to log you in. will proceed to log you in.
%RIGHT Log %RIGHT Log
%SAME %SAME
%WRONG account %WRONG account
That will be entered later. That will be entered later.
First, the computer has to see if there is enough room for First, the computer has to see if there is enough room for
you on the system. you on the system.
%WRONG number %WRONG number
%SAMEE %SAMEE
%WRONG ppn %WRONG ppn
%SAME %SAME
%WRONG account %WRONG account
%SAME %SAME
%WRONG pass %WRONG pass
%SAME %SAME
%WRONG %WRONG
%QUESTION %QUESTION
After accepting the 'LOG' command, the computer will After accepting the 'LOG' command, the computer will
respond with a respond with a
'#' prompt in the lower left side of the screen. What do '#' prompt in the lower left side of the screen. What do
you do next? you do next?
%RIGHT Type '<account number>' %RIGHT Type '<account number>'
That, of course, is our 'account number,' That, of course, is our 'account number,'
'project-programmer number,' 'project-programmer number,'
or 'ppn' (for short). or 'ppn' (for short).
%RIGHT <account number> %RIGHT <account number>
%SAME %SAME
%RIGHT project programmer %RIGHT project programmer
Our account number is <account number>, of course. Our account number is <account number>, of course.
%RIGHT number %RIGHT number
%SAME %SAME
%RIGHT ppn %RIGHT ppn
%SAME %SAME
%RIGHT account %RIGHT account
%SAME %SAME
%WRONG pass %WRONG pass
The password is filed UNDER our account number. So the The password is filed UNDER our account number. So the
computer can't computer can't
validate your password until it knows where to look validate your password until it knows where to look
(i.e., the account (i.e., the account
number). Our account number is '<account number>.' number). Our account number is '<account number>.'
%WRONG <password> %WRONG <password>
%SAME %SAME
%WRONG %WRONG
Hint: It is expecting you to type in two fields of digits, Hint: It is expecting you to type in two fields of digits,
separated only separated only
by a comma. by a comma.
%WRONG %WRONG
SAMPLE GNOSIS PROGRAM Page F-5 SAMPLE GNOSIS PROGRAM Page F-5
Hint: This number has a name but, if you forgot the name, Hint: This number has a name but, if you forgot the name,
just type in the just type in the
number itself. number itself.
%QUESTION %QUESTION
Alright. Let's suppose the computer is in the process of Alright. Let's suppose the computer is in the process of
logging you in. It already knows logging you in. It already knows
the account number. What is the next thing it needs to the account number. What is the next thing it needs to
know? know?
%RIGHT password %RIGHT password
Our password is '<password>', of course. Our password is '<password>', of course.
%RIGHT pass word %RIGHT pass word
%SAME %SAME
%RIGHT <password> %RIGHT <password>
This, of course, is known as our 'password. This, of course, is known as our 'password.
%WRONG %WRONG
Hint: This is the secret 'code' that opens your account. Hint: This is the secret 'code' that opens your account.
%WRONG %WRONG
%QUESTION %QUESTION
One last review question: In which order do we do the One last review question: In which order do we do the
following things? following things?
[T](1) Push the RETURN button [T](1) Push the RETURN button
[T](2) Type in the PASSWORD [T](2) Type in the PASSWORD
[T](3) Type 'LOG' [T](3) Type 'LOG'
[T](4) Type in the ACCOUNT NUMBER [T](4) Type in the ACCOUNT NUMBER
Your response should be a series of four digits. Your response should be a series of four digits.
%NOEXTRA %NOEXTRA
%ORDER %ORDER
%RIGHT 1 3 4 2 %RIGHT 1 3 4 2
%RIGHT 1 , 3 , 4 , 2 %RIGHT 1 , 3 , 4 , 2
%WRONG %WRONG
Number 1 is first. Number 1 is first.
%WRONG %WRONG
Number 3 is second. Number 3 is second.
%WRONG %WRONG
Number 4 is third. Number 4 is third.
%WRONG %WRONG
Number 2 is fourth. Number 2 is fourth.
%WRONG %WRONG
%NOORDER %NOORDER
%EXTRA %EXTRA
%TEXT skipreview: %TEXT skipreview:
All you do to run one of the lessons is type 'RUN ', All you do to run one of the lessons is type 'RUN ',
followed immediately by the name of the lesson followed immediately by the name of the lesson
you want, and finish with a push of the RETURN button. you want, and finish with a push of the RETURN button.
The computer takes over from that point, and the rest The computer takes over from that point, and the rest
should be self-explanatory. should be self-explanatory.
%TEXT erase: %TEXT erase:
If you type like your professor does, then you're going to If you type like your professor does, then you're going to
make a few make a few
SAMPLE GNOSIS PROGRAM Page F-6 SAMPLE GNOSIS PROGRAM Page F-6
mistakes from time to time. How do you correct them? mistakes from time to time. How do you correct them?
Well, you can take advantage of the fact that the Well, you can take advantage of the fact that the
computer (usually, computer (usually,
at least) doesn't pay attention to what you have typed at least) doesn't pay attention to what you have typed
until you push until you push
the return button. Until you push that button, you have the return button. Until you push that button, you have
the chance to the chance to
'erase' whatever it is that you have mistyped. 'erase' whatever it is that you have mistyped.
The simplest erasing command is the CTRL-U or '^U'. The simplest erasing command is the CTRL-U or '^U'.
Typing in this character causes everything you have typed Typing in this character causes everything you have typed
on a line to be on a line to be
erased--instantly. erased--instantly.
To type a CTRL-U, depress the 'CTRL' key and--while To type a CTRL-U, depress the 'CTRL' key and--while
continuing to hold it continuing to hold it
down--depress the 'U' key. down--depress the 'U' key.
Then release both keys. Then release both keys.
Now I'll let you get some practice using the '^U' command. Now I'll let you get some practice using the '^U' command.
%QUESTION %QUESTION
Following the arrow prompt, type in some garbage. Following the arrow prompt, type in some garbage.
Then use the '^U' to erase it all. Then use the '^U' to erase it all.
Then, before you push RETURN, type in something Then, before you push RETURN, type in something
else--something sensible. else--something sensible.
When you have experimented enough, type 'GO ON'. When you have experimented enough, type 'GO ON'.
%NEUTRAL go on %NEUTRAL go on
%NEUTRAL %NEUTRAL
%ALGOL echoinput; %ALGOL echoinput;
%GOTO repeat; %GOTO repeat;
%EXTRA %EXTRA
%TEXT %TEXT
Of course, you will not want to erase the ENTIRE line just Of course, you will not want to erase the ENTIRE line just
to get rid of, to get rid of,
say, the last character you typed in. say, the last character you typed in.
So, you'll need some way to erase just one character at a So, you'll need some way to erase just one character at a
time. time.
To do this, you push the 'DELETE' or 'RUB OUT' key. The To do this, you push the 'DELETE' or 'RUB OUT' key. The
first time you first time you
push it, the computer types a back-slash ('\') and then push it, the computer types a back-slash ('\') and then
erases the erases the
last character you typed. The second time, the last character you typed. The second time, the
next-to-the-last next-to-the-last
character is erased, and so on. character is erased, and so on.
NOTE: Every time an erasure is made, the computer RE-TYPES NOTE: Every time an erasure is made, the computer RE-TYPES
the character it has deleted. the character it has deleted.
It does not actually erase the character physically from It does not actually erase the character physically from
the display. the display.
Thus you can erase your response all the way back to the Thus you can erase your response all the way back to the
start of the line if necessary and start over. start of the line if necessary and start over.
SAMPLE GNOSIS PROGRAM Page F-7 SAMPLE GNOSIS PROGRAM Page F-7
If you typed 'sciences' when you meant to type If you typed 'sciences' when you meant to type
'science', then you 'science', then you
should push the 'RUB OUT' key or the 'DELETE' key once. should push the 'RUB OUT' key or the 'DELETE' key once.
The computer The computer
will respond by typing a '\s' to let you know it has will respond by typing a '\s' to let you know it has
deleted the 's' deleted the 's'
(your word will then look like this: 'sciences\s'). When (your word will then look like this: 'sciences\s'). When
you hit the you hit the
'RETURN' the computer will react as if you had typed in 'RETURN' the computer will react as if you had typed in
'science' and 'science' and
the 's\s' which appears at the end of the word 'science' the 's\s' which appears at the end of the word 'science'
will NOT be will NOT be
transmitted to the computer. transmitted to the computer.
Before I ask you some questions about the use of the 'RUB Before I ask you some questions about the use of the 'RUB
OUT' or 'DELETE' OUT' or 'DELETE'
key, I will give you an opportunity to experiment with it. key, I will give you an opportunity to experiment with it.
%QUESTION %QUESTION
Following the arrow prompt, type in some garbage. Following the arrow prompt, type in some garbage.
Then, before you push RETURN, use the 'RUB OUT' or 'DELETE' Then, before you push RETURN, use the 'RUB OUT' or 'DELETE'
key to erase one key to erase one
or more of the characters you typed. or more of the characters you typed.
Then--still before you push RETURN--type in a couple of Then--still before you push RETURN--type in a couple of
additional characters. additional characters.
THEN (finally) push the RETURN. THEN (finally) push the RETURN.
You'll notice the computer is TOTALLY IGNORANT of whatever You'll notice the computer is TOTALLY IGNORANT of whatever
you erased (i.e., the you erased (i.e., the
characters BETWEEN the two back-slash marks). characters BETWEEN the two back-slash marks).
Type 'GO ON' when you are ready to proceed with the lesson. Type 'GO ON' when you are ready to proceed with the lesson.
%NEUTRAL go on %NEUTRAL go on
%NEUTRAL %NEUTRAL
%ALGOL echoinput; %ALGOL echoinput;
%GOTO repeat; %GOTO repeat;
%QUESTION %QUESTION
What will your response look like after you have typed What will your response look like after you have typed
'politicall' for 'politicall' for
'political' and used the 'RUB OUT' key to delete the 'l'? 'political' and used the 'RUB OUT' key to delete the 'l'?
(Note: When you answer this question, DO NOT actually (Note: When you answer this question, DO NOT actually
depress the depress the
'RUB OUT' or 'DELETE' key. Rather, IMITATE what the 'RUB OUT' or 'DELETE' key. Rather, IMITATE what the
computer would do computer would do
and what the answer would look like IF you had used that and what the answer would look like IF you had used that
key. key.
CHECK THE KEYBOARD for the BACK-slash '\'. CHECK THE KEYBOARD for the BACK-slash '\'.
With that key--NOT the OTHER slash '/'--you can imitate With that key--NOT the OTHER slash '/'--you can imitate
what the computer does. what the computer does.
%NOEXTRA %NOEXTRA
%ORDER %ORDER
%RIGHT politicall\l %RIGHT politicall\l
%LACK \ %LACK \
SAMPLE GNOSIS PROGRAM Page F-8 SAMPLE GNOSIS PROGRAM Page F-8
The computer types a back-slash automatically before it The computer types a back-slash automatically before it
types whatever types whatever
letter you are deleting. Perhaps you typed the wrong kind letter you are deleting. Perhaps you typed the wrong kind
of slash. of slash.
The back-slash runs from northwest to southeast, so to The back-slash runs from northwest to southeast, so to
speak. Or speak. Or
perhaps you actually USED the 'RUB OUT' or 'DELETE' key. perhaps you actually USED the 'RUB OUT' or 'DELETE' key.
(Of course, if (Of course, if
you were REALLY erasing a character instead of merely you were REALLY erasing a character instead of merely
faking how it faking how it
would look when you did so, then you WOULD use that key.) would look when you did so, then you WOULD use that key.)
%ALGOL echoinput; %ALGOL echoinput;
%EXTRA %EXTRA
%WRONG \ \ %WRONG \ \
The computer will type only ONE back-slash at this point. The computer will type only ONE back-slash at this point.
It will not type the SECOND back-slash until both these It will not type the SECOND back-slash until both these
conditions conditions
hold: hold:
[T](1) you have finished using the RUB OUT key;; and [T](1) you have finished using the RUB OUT key;; and
[T](2) you have begun to type the rest of the word or line. [T](2) you have begun to type the rest of the word or line.
%WRONG / %WRONG /
That's not the kind of slash you should be using if you That's not the kind of slash you should be using if you
intend to imitate intend to imitate
EXACTLY what the computer does. EXACTLY what the computer does.
%WRONG %WRONG
Remember: It will re-type the character it is deleting. It Remember: It will re-type the character it is deleting. It
doesn't REALLY doesn't REALLY
erase it. erase it.
%ALGOL echoinput; %ALGOL echoinput;
%WRONG %WRONG
Hint: It's going to look like the last character is Hint: It's going to look like the last character is
doubled. And don't doubled. And don't
forget to put the back-slash ('\') in your answer. forget to put the back-slash ('\') in your answer.
%ALGOL echoinput; %ALGOL echoinput;
%WRONG %WRONG
%ALGOL echoinput; %ALGOL echoinput;
%QUESTION %QUESTION
Suppose you had typed 'logzical.' How many times would you Suppose you had typed 'logzical.' How many times would you
depress the depress the
'RUB OUT' key? 'RUB OUT' key?
%RIGHT 5 %RIGHT 5
%RIGHT five %RIGHT five
%WRONG 4 %WRONG 4
That deletes the 'l', 'a', 'c', and 'i' but it leaves the That deletes the 'l', 'a', 'c', and 'i' but it leaves the
'z'. 'z'.
%WRONG four %WRONG four
Hint: You'll need to delete some of the good characters to Hint: You'll need to delete some of the good characters to
get back to get back to
SAMPLE GNOSIS PROGRAM Page F-9 SAMPLE GNOSIS PROGRAM Page F-9
the one which is wrong. the one which is wrong.
%WRONG %WRONG
%QUESTION %QUESTION
What does your answer look like after you have deleted What does your answer look like after you have deleted
'logzical' back 'logzical' back
to the 'z'? (Note: DO NOT actually use the 'RUB OUT' or to the 'z'? (Note: DO NOT actually use the 'RUB OUT' or
'DELETE' key. 'DELETE' key.
Just type a series of characters which imitates how the Just type a series of characters which imitates how the
answer would answer would
look if you HAD USED IT.) look if you HAD USED IT.)
%NOEXTRA %NOEXTRA
%ORDER %ORDER
%RIGHT logzical\laciz %RIGHT logzical\laciz
%LACK \ %LACK \
The computer types a back-slash before it types the first The computer types a back-slash before it types the first
character it character it
is deleting. Perhaps you typed the wrong kind of slash. The is deleting. Perhaps you typed the wrong kind of slash. The
back-slash back-slash
runs from northwest to southeast, so to speak. Or perhaps runs from northwest to southeast, so to speak. Or perhaps
you actually you actually
used the 'RUB OUT' or 'DELETE' KEY, thus causing the used the 'RUB OUT' or 'DELETE' KEY, thus causing the
computer to type computer to type
the slash. THIS WILL NOT work!!!!! Type the back-slash the slash. THIS WILL NOT work!!!!! Type the back-slash
yourself, and yourself, and
DO NOT use the 'RUB OUT' or 'DELETE' key!!!! (Of course, DO NOT use the 'RUB OUT' or 'DELETE' key!!!! (Of course,
if you were if you were
REALLY erasing a character instead of merely faking how it REALLY erasing a character instead of merely faking how it
would look would look
when you did so, then you WOULD use that key.) when you did so, then you WOULD use that key.)
%ALGOL echoinput; %ALGOL echoinput;
%NEUTRAL logzical\laciz\ical %NEUTRAL logzical\laciz\ical
That's exactly how it would look after you had both erased That's exactly how it would look after you had both erased
the incorrect the incorrect
characters and typed in the correct ones. characters and typed in the correct ones.
But I wanted to know how it would look after you erased but But I wanted to know how it would look after you erased but
BEFORE BEFORE
you started typing in the correct characters. you started typing in the correct characters.
%ALGOL echoinput; %ALGOL echoinput;
%GOTO repeat; %GOTO repeat;
%EXTRA %EXTRA
%WRONG \ \ %WRONG \ \
It only types ONE back-slash as long as you are deleting It only types ONE back-slash as long as you are deleting
characters. characters.
It's true, of course, that it types a SECOND back-slash It's true, of course, that it types a SECOND back-slash
when you push when you push
some other key besides the 'RUB OUT' or 'DELETE' key. some other key besides the 'RUB OUT' or 'DELETE' key.
%WRONG %WRONG
Hint: It will appear that each character is 'added' to Hint: It will appear that each character is 'added' to
the original the original
word as they are deleted. word as they are deleted.
%ALGOL echoinput; %ALGOL echoinput;
%WRONG %WRONG
SAMPLE GNOSIS PROGRAM Page F-10 SAMPLE GNOSIS PROGRAM Page F-10
Hint: If the word was 'universixty' then, after using Hint: If the word was 'universixty' then, after using
the 'RUB OUT' the 'RUB OUT'
key three times, the answer would appear to be key three times, the answer would appear to be
'universixty\ytx'. 'universixty\ytx'.
%ALGOL echoinput; %ALGOL echoinput;
%WRONG %WRONG
To see how your answer should look, type the word To see how your answer should look, type the word
'logzical' and then 'logzical' and then
push the 'RUB OUT' or 'DELETE' key five times just as you push the 'RUB OUT' or 'DELETE' key five times just as you
were doing earlier were doing earlier
when you were experimenting with the key. when you were experimenting with the key.
REMEMBER HOW IT LOOKS REMEMBER HOW IT LOOKS
AT THIS POINT because that is exactly how you will have to AT THIS POINT because that is exactly how you will have to
type it in. type it in.
Then erase the whole line with a '^U', and re-type the line Then erase the whole line with a '^U', and re-type the line
just as it looked just as it looked
before you erased it. before you erased it.
This should be a piece of cake since the erased line is This should be a piece of cake since the erased line is
still visible to still visible to
you--but not to the computer. you--but not to the computer.
%ALGOL echoinput; %ALGOL echoinput;
%WRONG %WRONG
%ALGOL echoinput; %ALGOL echoinput;
%WRONG %WRONG
%ALGOL echoinput; %ALGOL echoinput;
%TEXT %TEXT
Well, you are finished with the hardest section of this Well, you are finished with the hardest section of this
lesson. lesson.
Congratulations! Congratulations!
Before we leave erasing entirely, however, I want to teach Before we leave erasing entirely, however, I want to teach
you about one you about one
other useful command, the '^R' or CTRL-R. other useful command, the '^R' or CTRL-R.
Suppose you want to know how your answer is going to look Suppose you want to know how your answer is going to look
to the computer to the computer
before you actually push the RETURN key. before you actually push the RETURN key.
(You might want to know, for example, that you actually (You might want to know, for example, that you actually
SUCCEEDED in correcting SUCCEEDED in correcting
a misspelled word.) a misspelled word.)
The CTRL-R gives you this computer's eye view. The CTRL-R gives you this computer's eye view.
Try it out now and see. Try it out now and see.
The procedure is the same as before: Hold the CTRL key The procedure is the same as before: Hold the CTRL key
down while you push the down while you push the
'R' key. Then release both. 'R' key. Then release both.
%EXTRA %EXTRA
%QUESTION nopause:= TRUE; %QUESTION nopause:= TRUE;
Following the arrow prompt, deliberately misspell a word. Following the arrow prompt, deliberately misspell a word.
Then, using 'RUB OUT' or 'DELETE', correct it. Then, using 'RUB OUT' or 'DELETE', correct it.
Next, type a CTRL-R to be sure you succeeded. Next, type a CTRL-R to be sure you succeeded.
Finally, push RETURN to get the computer to tell you how it Finally, push RETURN to get the computer to tell you how it
SAMPLE GNOSIS PROGRAM Page F-11 SAMPLE GNOSIS PROGRAM Page F-11
'sees' your answer. 'sees' your answer.
When you are ready to move on, type 'GO ON'. When you are ready to move on, type 'GO ON'.
%NEUTRAL go on %NEUTRAL go on
%NEUTRAL %NEUTRAL
%ALGOL echoinput; %ALGOL echoinput;
%GOTO repeat; %GOTO repeat;
%TEXT %TEXT
When you want to leave the computer for a while, you When you want to leave the computer for a while, you
cannot just walk cannot just walk
away or unplug it. Since the computer can't see you, it away or unplug it. Since the computer can't see you, it
thinks you are thinks you are
still there....... still there.......
Therefore, it will wait patiently (forever) for you to give Therefore, it will wait patiently (forever) for you to give
it some more input. it some more input.
Since others are waiting to use the machine, this kind of Since others are waiting to use the machine, this kind of
loyalty loyalty
is not a virtue. is not a virtue.
To prevent this, when you leave the terminal, you M-U-S-T To prevent this, when you leave the terminal, you M-U-S-T
have the computer perform a 'LOGOUT' have the computer perform a 'LOGOUT'
for you. The correct way to do this is to type 'K/F'. for you. The correct way to do this is to type 'K/F'.
ALTHOUGH WE CAN PRACTICE THIS OPERATION DURING THE LESSON, ALTHOUGH WE CAN PRACTICE THIS OPERATION DURING THE LESSON,
IN REALITY YOU WILL NOT IN REALITY YOU WILL NOT
REALLY BE LOGGING OFF UNTIL LATER. REALLY BE LOGGING OFF UNTIL LATER.
Here is why. Here is why.
Before we can ACTUALLY log off, we need to have our old Before we can ACTUALLY log off, we need to have our old
friend from the friend from the
first part of the lesson--the period prompt--in the lower first part of the lesson--the period prompt--in the lower
left corner left corner
of the screen. of the screen.
%TEXT %TEXT
The 'K/F' command is the one required to log you off. The 'K/F' command is the one required to log you off.
Here is the procedure to follow: Here is the procedure to follow:
1. Wait until you see a period prompt at the bottom left. 1. Wait until you see a period prompt at the bottom left.
2. When you do (assuming you want to log out), type 'K/F'. 2. When you do (assuming you want to log out), type 'K/F'.
3. Stand by until the computer actually logs you off the 3. Stand by until the computer actually logs you off the
system. system.
This may take a while during peak loads but, eventually, This may take a while during peak loads but, eventually,
the computer the computer
will inform you that it has logged you off and, just for will inform you that it has logged you off and, just for
the record, the record,
will throw in a bunch of statistics. will throw in a bunch of statistics.
4. If, after a reasonable wait, the computer has not 4. If, after a reasonable wait, the computer has not
logged you off, logged you off,
ask someone around you for help or advice. ask someone around you for help or advice.
SAMPLE GNOSIS PROGRAM Page F-12 SAMPLE GNOSIS PROGRAM Page F-12
%NOEXTRA %NOEXTRA
%QUESTION %QUESTION
What do you type to log off, saving all the lessons? What do you type to log off, saving all the lessons?
%RIGHT K/F %RIGHT K/F
In just a moment (upon completion of this lesson) you will In just a moment (upon completion of this lesson) you will
get to log get to log
off of your terminal. off of your terminal.
Never leave the terminal--not even momentarily--without Never leave the terminal--not even momentarily--without
logging off. logging off.
Even if the computer has 'CRASHED' (i.e., stopped Even if the computer has 'CRASHED' (i.e., stopped
running), at least TRY to log off. It may not react in running), at least TRY to log off. It may not react in
the normal fashion to the normal fashion to
your log off attempt. However, when it comes 'UP' again, your log off attempt. However, when it comes 'UP' again,
it will log it will log
you off if it hasn't forgotten all about you in the you off if it hasn't forgotten all about you in the
meantime. meantime.
Here is one final reminder. Here is one final reminder.
A 'K/F' will not log you off while the lesson program is A 'K/F' will not log you off while the lesson program is
still in progress. still in progress.
First, the First, the
the lesson will have to finish running all the way to the the lesson will have to finish running all the way to the
end. end.
When it has ended, the computer will When it has ended, the computer will
type 'Leaving the lesson <lessonname>' followed (after a type 'Leaving the lesson <lessonname>' followed (after a
pause) by the words pause) by the words
'End of execution' and -- finally -- will give you a period 'End of execution' and -- finally -- will give you a period
prompt. prompt.
After THIS prompt you will be able to log off -- but not After THIS prompt you will be able to log off -- but not
before! before!
%RIGHT KJOB/F %RIGHT KJOB/F
%SAME %SAME
%RIGHT K %RIGHT K
%SAME %SAME
%EXTRA %EXTRA
%NEUTRAL kiss %NEUTRAL kiss
We call it 'kissing off,' but what do we actually TYPE when We call it 'kissing off,' but what do we actually TYPE when
it is time to it is time to
'kiss off'? 'kiss off'?
%GOTO repeat; %GOTO repeat;
%LACK / %LACK /
You forgot the slash character. It looks like this: '/'. You forgot the slash character. It looks like this: '/'.
Do not type the BACK-slash by mistake. It looks like this: Do not type the BACK-slash by mistake. It looks like this:
'\'. '\'.
%WRONG %WRONG
Hint: The command is an abbreviation for Kill (my job) Fast. Hint: The command is an abbreviation for Kill (my job) Fast.
%WRONG %WRONG
%WRONG %WRONG
%END %END
/* /*
APPENDIX G APPENDIX G
FORMATTING THE <LESSONNAME>.ALG FILE FORMATTING THE <LESSONNAME>.ALG FILE
Sophisticated GNOSIS programmers may find that they Sophisticated GNOSIS programmers may find that they
need to study the <lessonname>.ALG file GNOSIS writes in need to study the <lessonname>.ALG file GNOSIS writes in
order to track down bugs. This file will be much easier to order to track down bugs. This file will be much easier to
read if it is first run through the formatting program, read if it is first run through the formatting program,
ALGED. ALGED was written in SIMULA, originally to format ALGED. ALGED was written in SIMULA, originally to format
SIMULA files, but has been modified by the author for use SIMULA files, but has been modified by the author for use
with ALGOL files. Nevertheless, ALGED still requires the with ALGOL files. Nevertheless, ALGED still requires the
SIMULA run-time environment and, in any case, cannot be used SIMULA run-time environment and, in any case, cannot be used
at non-SIMULA installations without violation of copyright. at non-SIMULA installations without violation of copyright.
Consequently, ALGED may not be available on your system. If Consequently, ALGED may not be available on your system. If
it is, however, the command "R ALGED" runs the program, it is, however, the command "R ALGED" runs the program,
producing a beautifully formatted output file. The producing a beautifully formatted output file. The
GNOSIS.ALG file was prepared by ALGED. GNOSIS.ALG file was prepared by ALGED.
ALGED.SIM, ALGED.SAV and ALGED.HLP are furnished with ALGED.SIM, ALGED.SAV and ALGED.HLP are furnished with
the GNOSIS distribution tape. The help file for ALGED the GNOSIS distribution tape. The help file for ALGED
follows. follows.
------------------------------------------------------------ ------------------------------------------------------------
[ALGED.HLP] [ALGED.HLP]
ALGED Version 1 ALGED Version 1
An ALGOL Editor and Indentation Program An ALGOL Editor and Indentation Program
Date: 27 February 1976 Date: 27 February 1976
Original Author: Mats Ohlin, FOA 1, Fack, Original Author: Mats Ohlin, FOA 1, Fack,
S-104 50 STOCKHOLM, SWEDEN S-104 50 STOCKHOLM, SWEDEN
Modified for ALGOL: 4 April 1978 Modified for ALGOL: 4 April 1978
by Dr. Walter Maner by Dr. Walter Maner
Department of Philosophy Department of Philosophy
Old Dominion University Old Dominion University
Norfolk, VA 23508 Norfolk, VA 23508
FORMATTING THE <LESSONNAME>.ALG FILE Page G-2 FORMATTING THE <LESSONNAME>.ALG FILE Page G-2
The ALGED program formats ALGOL source program files. The ALGED program formats ALGOL source program files.
If program defaults are accepted, ALGED will indent the If program defaults are accepted, ALGED will indent the
program to bring out its structure, nesting pairs of BEGINs program to bring out its structure, nesting pairs of BEGINs
and ENDs, and will upcase ALGOL reserved words, upcase the and ENDs, and will upcase ALGOL reserved words, upcase the
first character of ALGOL standard identifiers, and lowcase first character of ALGOL standard identifiers, and lowcase
user identifiers. Line numbers will be removed! user identifiers. Line numbers will be removed!
Lines which become too long at indentation will be Lines which become too long at indentation will be
split at an appropriate position (e.g., at a blank split at an appropriate position (e.g., at a blank
character). A warning message is issued when the character). A warning message is issued when the
text-splitting algorithm must divide a line in an arbitrary text-splitting algorithm must divide a line in an arbitrary
fashion. The algorithm is, for example, reluctant to insert fashion. The algorithm is, for example, reluctant to insert
a <CR><LF> in the middle of a long text constant. By the a <CR><LF> in the middle of a long text constant. By the
same token, if it detects a <CR><LF> inside a text constant same token, if it detects a <CR><LF> inside a text constant
(i.e., before the constant was closed off by a free (i.e., before the constant was closed off by a free
doublequote), then ALGED aborts rather than risk making doublequote), then ALGED aborts rather than risk making
garbage of the file it is editing. Lines in the source file garbage of the file it is editing. Lines in the source file
longer than the record length specified for output will also longer than the record length specified for output will also
cause an error. cause an error.
The following information is requested from the user: The following information is requested from the user:
1. the name of the file to be formatted. 1. the name of the file to be formatted.
2. the name of the output file (ALGED defaults to same 2. the name of the output file (ALGED defaults to same
file as the one specified for input). file as the one specified for input).
3. the maximum record (line) length for the output 3. the maximum record (line) length for the output
file (ALGED defaults to 132). file (ALGED defaults to 132).
4. the indentation value (ALGED defaults to 3 spaces). 4. the indentation value (ALGED defaults to 3 spaces).
5. the value of the column beyond which further 5. the value of the column beyond which further
indentation nesting must cease (ALGED defaults to indentation nesting must cease (ALGED defaults to
60). 60).
6. whether TABS can be used to indent, thus saving 6. whether TABS can be used to indent, thus saving
some character storage space (ALGED defaults to some character storage space (ALGED defaults to
"NO" since the presence of TABS can cause "NO" since the presence of TABS can cause
formatting difficulties if the file is ever formatting difficulties if the file is ever
resubmitted to ALGED). resubmitted to ALGED).
7. the conversion mode for ALGOL reserved words (ALGED 7. the conversion mode for ALGOL reserved words (ALGED
defaults to ALL CAPS). defaults to ALL CAPS).
8. the conversion mode for ALGOL standard identifiers 8. the conversion mode for ALGOL standard identifiers
(ALGED defaults to capitalizing the first (ALGED defaults to capitalizing the first
character). character).
9. the conversion mode for user identifiers (ALGED 9. the conversion mode for user identifiers (ALGED
defaults to lower case). defaults to lower case).
FORMATTING THE <LESSONNAME>.ALG FILE Page G-3 FORMATTING THE <LESSONNAME>.ALG FILE Page G-3
10. the conversion mode for comments and option 10. the conversion mode for comments and option
statements (ALGED defaults to leaving them as it statements (ALGED defaults to leaving them as it
found them). found them).
11. the conversion mode for text constants (ALGED 11. the conversion mode for text constants (ALGED
defaults to leaving them as it found them). defaults to leaving them as it found them).
The user will get the default values for each of the The user will get the default values for each of the
questions 2 through 11 if he responds with <CR><LF> when questions 2 through 11 if he responds with <CR><LF> when
asked about them. Moreover if, at the end of the file name asked about them. Moreover if, at the end of the file name
for input to ALGED the user types <ALTMODE> or <ESCAPE> for input to ALGED the user types <ALTMODE> or <ESCAPE>
instead of <CR><LF>, then the program will assume he wishes instead of <CR><LF>, then the program will assume he wishes
to accept ALL remaining default values and will go to work to accept ALL remaining default values and will go to work
immediately. For further help, the user can type a '?' at immediately. For further help, the user can type a '?' at
run-time. run-time.
For the most attractive results, BEGINs and ENDs should For the most attractive results, BEGINs and ENDs should
appear on lines entirely to themselves in the source file. appear on lines entirely to themselves in the source file.
Aesthetic considerations would also seem to dictate that the Aesthetic considerations would also seem to dictate that the
source file not contain more than one statement per line. source file not contain more than one statement per line.
ALGED expects to find the file ALGED.DAT in SYS and ALGED expects to find the file ALGED.DAT in SYS and
will complain if it has to look for it elsewhere. will complain if it has to look for it elsewhere.
(ALGED.DAT contains a list of ALGOL reserved words and (ALGED.DAT contains a list of ALGOL reserved words and
standard identifiers.) standard identifiers.)
[End of ALGED.HLP 4 April 1978] [End of ALGED.HLP 4 April 1978]
APPENDIX H APPENDIX H
CONTENTS OF GNOSIS DISTRIBUTION TAPE CONTENTS OF GNOSIS DISTRIBUTION TAPE
This 1600 BPI 9-track tape is a BACKUP 2(216)-2 tape, This 1600 BPI 9-track tape is a BACKUP 2(216)-2 tape,
Format 1, written in INTERCHANGE mode. It was prepared Format 1, written in INTERCHANGE mode. It was prepared
under a 6.03+VM TOPS-10 Monitor 603(15717). The VID is under a 6.03+VM TOPS-10 Monitor 603(15717). The VID is
"GNOSIS VERSION 2". Saves were made under the PPN "GNOSIS VERSION 2". Saves were made under the PPN
[5642,1001]. Note that two independent GNOSIS "save sets" [5642,1001]. Note that two independent GNOSIS "save sets"
exist on the tape, one called "ALGOL VER 7" (which is valid exist on the tape, one called "ALGOL VER 7" (which is valid
under ALGOL Version 7) and the other called "ALGOL VER 10" under ALGOL Version 7) and the other called "ALGOL VER 10"
(which is valid under ALGOL Version 10). (which is valid under ALGOL Version 10).
1. ALGED.DAT 1. ALGED.DAT
This is the required data file for ALGED. It This is the required data file for ALGED. It
contains list of ALGOL reserved words and standard contains list of ALGOL reserved words and standard
identifiers. ALGED expects to find this file in identifiers. ALGED expects to find this file in
SYS. SYS.
2. ALGED.HLP 2. ALGED.HLP
This is the system help file for ALGED. Also This is the system help file for ALGED. Also
appears in an appendix to GNOSIS.DOC. appears in an appendix to GNOSIS.DOC.
3. ALGED.SAV 3. ALGED.SAV
This is the OSAVEd version of ALGED.SIM This is the OSAVEd version of ALGED.SIM
4. ALGED.SIM 4. ALGED.SIM
This is the text formatting program for ".ALG" This is the text formatting program for ".ALG"
files. ALGED will indent the program to bring out files. ALGED will indent the program to bring out
its logical structure, nesting pairs of BEGINs and its logical structure, nesting pairs of BEGINs and
ENDs, and will upcase ALGOL reserved words, upcase ENDs, and will upcase ALGOL reserved words, upcase
the first character of ALGOL standard identifiers, the first character of ALGOL standard identifiers,
and lowcase user identifiers. and lowcase user identifiers.
5. GNOLIB.REL 5. GNOLIB.REL
This file contains essential GNOSIS library This file contains essential GNOSIS library
procedures. It is required for all lessons using procedures. It is required for all lessons using
the %NEXTLESSON or %NOCONTROLC command. the %NEXTLESSON or %NOCONTROLC command.
CONTENTS OF GNOSIS DISTRIBUTION TAPE Page H-2 CONTENTS OF GNOSIS DISTRIBUTION TAPE Page H-2
6. GNOSIS.ALG 6. GNOSIS.ALG
This is the GNOSIS source program. The This is the GNOSIS source program. The
internal documentation is lavish. internal documentation is lavish.
7. GNOSIS.DOC 7. GNOSIS.DOC
This is the 102-page GNOSIS manual. This is the 102-page GNOSIS manual.
8. GNOSIS.HLP 8. GNOSIS.HLP
This is the system help file for GNOSIS. This is the system help file for GNOSIS.
9. GNOSIS.LST 9. GNOSIS.LST
This is a CREF listing of the GNOSIS.ALG This is a CREF listing of the GNOSIS.ALG
source program. source program.
10. GNOSIS.MIC 10. GNOSIS.MIC
This is the MIC program which greatly This is the MIC program which greatly
simplifies the preparation of GNOSIS lessons. simplifies the preparation of GNOSIS lessons.
11. GNOSIS.REL 11. GNOSIS.REL
This is relocatable code for GNOSIS.ALG. This is relocatable code for GNOSIS.ALG.
12. GNOSIS.RNH 12. GNOSIS.RNH
This is the RUNOFF source file for GNOSIS.HLP. This is the RUNOFF source file for GNOSIS.HLP.
13. GNOSIS.SAV 13. GNOSIS.SAV
This is the OSAVEd version of GNOSIS.ALG. It This is the OSAVEd version of GNOSIS.ALG. It
was compiled with /NOSYMBOLS/PRODUCTION switches in was compiled with /NOSYMBOLS/PRODUCTION switches in
effect. effect.
14. GNOSIS.TWO 14. GNOSIS.TWO
This is the manual, GNOSIS.DOC, in dual This is the manual, GNOSIS.DOC, in dual
format. If you queue ten copies of this to the format. If you queue ten copies of this to the
LPT, you will have 20 copies of GNOSIS.DOC. The LPT, you will have 20 copies of GNOSIS.DOC. The
LPT output must be cut down the middle. LPT output must be cut down the middle.
15. HOW.ALG 15. HOW.ALG
When HOW.GNO was submitted to GNOSIS, the When HOW.GNO was submitted to GNOSIS, the
translator wrote this file. It has been formatted translator wrote this file. It has been formatted
using the ALGED program. using the ALGED program.
16. HOW.GNO 16. HOW.GNO
CONTENTS OF GNOSIS DISTRIBUTION TAPE Page H-3 CONTENTS OF GNOSIS DISTRIBUTION TAPE Page H-3
This is the script form of the demonstration This is the script form of the demonstration
lesson "HOW". lesson "HOW".
17. HOW.SAV 17. HOW.SAV
This is the OSAVEd version of HOW.ALG. It This is the OSAVEd version of HOW.ALG. It
functions as a demonstration lesson for GNOSIS. functions as a demonstration lesson for GNOSIS.
18. INTRUT.MAC 18. INTRUT.MAC
This is the MACRO code associated with This is the MACRO code associated with
%NOCONTROLC command. %NOCONTROLC command.
19. INTRUT.REL 19. INTRUT.REL
This is the relocatable code generated by This is the relocatable code generated by
MACRO for the above file. MACRO for the above file.
20. MIC.DOC 20. MIC.DOC
This is the standard documentation for MIC. This is the standard documentation for MIC.
21. PUB.MAC 21. PUB.MAC
This is the MACRO code associated with the This is the MACRO code associated with the
%NEXTLESSON command for installations with a PUB: %NEXTLESSON command for installations with a PUB:
area. area.
22. PUB.REL 22. PUB.REL
This is the relocatable code generated by This is the relocatable code generated by
MACRO for the above file. MACRO for the above file.
23. R.MAC 23. R.MAC
This is the MACRO code associated with the This is the MACRO code associated with the
%NEXTLESSON command. %NEXTLESSON command.
24. R.REL 24. R.REL
This is the relocatable code generated by This is the relocatable code generated by
MACRO for the above file. MACRO for the above file.
25. READ.ME 25. READ.ME
GNOSIS implementation instructions are GNOSIS implementation instructions are
contained in this file. contained in this file.
26. RUN.MAC 26. RUN.MAC
This is the MACRO code associated with This is the MACRO code associated with
%NEXTLESSON command. %NEXTLESSON command.
CONTENTS OF GNOSIS DISTRIBUTION TAPE Page H-4 CONTENTS OF GNOSIS DISTRIBUTION TAPE Page H-4
27. RUN.REL 27. RUN.REL
This is the relocatable code generated by This is the relocatable code generated by
MACRO for above. MACRO for above.
28. SORT.MIC 28. SORT.MIC
This is a simple MIC program which can be used This is a simple MIC program which can be used
to sort <lessonname>.SRT files. to sort <lessonname>.SRT files.
29. TAPE.DIR 29. TAPE.DIR
This listing. This listing.
APPENDIX I APPENDIX I
IMPLEMENTATION CHECKLIST IMPLEMENTATION CHECKLIST
Note that two complete and independent GNOSIS "save Note that two complete and independent GNOSIS "save
sets" exist on the tape, one called "ALGOL VER 7" (which is sets" exist on the tape, one called "ALGOL VER 7" (which is
valid under ALGOL Version 7) and the other called "ALGOL VER valid under ALGOL Version 7) and the other called "ALGOL VER
10" (which is valid under ALGOL Version 10). Be sure to 10" (which is valid under ALGOL Version 10). Be sure to
RESTORE files from the appropriate save set. RESTORE files from the appropriate save set.
I.1 ESSENTIAL STEPS I.1 ESSENTIAL STEPS
1. [ ]Store GNOSIS.SAV, HOW.SAV and GNOLIB.REL in 1. [ ]Store GNOSIS.SAV, HOW.SAV and GNOLIB.REL in
"SYS:". "SYS:".
2. [ ]Store GNOSIS.MIC in "MIC:" if your monitor is 2. [ ]Store GNOSIS.MIC in "MIC:" if your monitor is
Version 6.03 or later; otherwise store GNOSIS.MIC Version 6.03 or later; otherwise store GNOSIS.MIC
in "SYS:". in "SYS:".
3. [ ]Store GNOSIS.DOC<555> in "DOC:". 3. [ ]Store GNOSIS.DOC<555> in "DOC:".
4. [ ]Store GNOSIS.HLP in "HLP:". 4. [ ]Store GNOSIS.HLP in "HLP:".
I.2 OTHER DESIRABLE STEPS I.2 OTHER DESIRABLE STEPS
1. [ ]Store ALGED.SAV and ALGED.DAT in "SYS:". 1. [ ]Store ALGED.SAV and ALGED.DAT in "SYS:".
2. [ ]Store ALGED.HLP in "HLP:". 2. [ ]Store ALGED.HLP in "HLP:".
I.3 TESTING I.3 TESTING
1. [ ]Restore HOW.GNO from the distribution tape into 1. [ ]Restore HOW.GNO from the distribution tape into
your account. your account.
2. [ ]Execute the GNOSIS.MIC file with the command "DO 2. [ ]Execute the GNOSIS.MIC file with the command "DO
GNOSIS HOW" or "DO SYS:GNOSIS HOW", whichever is GNOSIS HOW" or "DO SYS:GNOSIS HOW", whichever is
appropriate. Note that it is normal for GNOSIS to appropriate. Note that it is normal for GNOSIS to
issue a few WARNING messages but abnormal for it to issue a few WARNING messages but abnormal for it to
IMPLEMENTATION CHECKLIST Page I-2 IMPLEMENTATION CHECKLIST Page I-2
issue ERROR messages. issue ERROR messages.
3. [ ]Create files in your account with the names 3. [ ]Create files in your account with the names
HOW.SRT and HOW.DTA. (HOW will dump data in these HOW.SRT and HOW.DTA. (HOW will dump data in these
at program exit.) at program exit.)
4. [ ]Type "RUN HOW" and verify that the lesson 4. [ ]Type "RUN HOW" and verify that the lesson
executes. executes.
5. [ ]Type "R HOW" to verify that the system copy of 5. [ ]Type "R HOW" to verify that the system copy of
"HOW" will execute. "HOW" will execute.
6. [ ]Delete "HOW.*" from your account. 6. [ ]Delete "HOW.*" from your account.
'