PCjs Machines

Home of the original IBM PC emulator for browsers.

Logo

PC-SIG Diskette Library (Disk #211)

[PCjs Machine "ibm5160"]

Waiting for machine "ibm5160" to load....

Information about “JUSTIFY AND SPEED READ”

JUSTIFY is a proportional spacing device for text printed on IBM,
EPSON or STAR Micronics printers.  The Speed Reading Demo gives you a
solid overview of this commercial program's style and exercises.
LINEBUG is a very useful BASIC utility to verify line numbering.

System Requirements: Two drives, BASIC

How to Start: After loading BASICA from DOS, switch disks to drive
A: and type SR.BAS or LINEBUG.BAS.  Run JUSTIFY.EXE directly from
DOS.

File Descriptions:

LINEBUG  BAS  Part of JUSTIFY.EXE
TIMED    TXT  Part of Speed Reading demo
SR       BAS  Speed Reading demo  (BBP)
JUSTIFY  EXE  Right/left micro-justifies text  (COMFAX)
JUSTIFY  ASM  Assembler source code
EYE      TXT  Part of Speed Reading demo
ART      TXT  Part of Speed Reading demo
TUTOR2        Part of JUSTIFY.EXE
TUTORIAL      Part of JUSTIFY.EXE

ART.TXT

ACC036605
!U08,22@       THE GREAT CHICAGO FIRE

  Chicago. Sunday evening, October 8,
1871.  Mrs. O'Leary of 558 De Koven
Street finished milking her cow and
returned to the house, leaving her lan-
tern in the barn.  That much is fact.
Legend has it that the cow kicked the
lantern over into the straw and started
what is known as the Great Chicago Fire.
STOP
  The rest is history.  Three days of
raging fire, leaving 250 persons dead
and 100,000 homeless.  Three days of
flames, spreading over 3.5 square miles
of Chicago and destroying property
valued at $195,000,000.
  National Fire Prevention Week is ob-
served each year during the week con-
taining the tragic anniversary of this
disastrous fire.  Originally, there was
only a single day, October 8, set aside
STOP
to mark the catastrophic event.  But
because of the number of lives lost and
the amount of property damaged yearly,
President Harding decided that a full
week was necessary to remind people of
the importance of fire prevention.
  Each one of us plays an important role
in fire prevention.  Because 60 percent
of all fires are preventable, it's up to
us to learn more about the causes of
fire and its prevention.
STOP
  Every year thousands of people die in
fires, usually in their homes or apart-
ments.  According to the National Bureau
of Standards, many people underestimate
the time it takes a fire to spread.  But
when fire strikes, it's the seconds and
minutes that count.  This is because fire
spreads 1,100 percent in the first four
minutes.  And heat travels upward at the
rate of 90 feet per second.
STOP
  The Bureau states that it may take
only two minutes from the time a fire
begins until it engulfs an entire room.
  The best way to prevent fire is to be
on the lookout for possible fire haz-
ards--to stop fire before it has a
chance to start.  This means being alert
and cautious not only during the second
week in October, but every day of the
year.
END
EOF
RET

CRC.TXT

PC-SIG Disk No. #211, version v1

The following is a list of the file checksums which should be produced by
the CRCK4 program on disk #9 (and others).  If the CRC numbers do not match
you may have a bad file.  To use type:  CRCK4 <filespec>

CRCK4 output for this disk:


CRCK ver 4.2B (MS DOS VERSION )
CTL-S pauses, CTL-C aborts

--> FILE:  ART     .TXT         CRC = 31 3C

--> FILE:  EYE     .TXT         CRC = 55 D0

--> FILE:  JUSTIFY .ASM         CRC = 63 51

--> FILE:  JUSTIFY .EXE         CRC = 50 67

--> FILE:  LINEBUG .BAS         CRC = 63 2A

--> FILE:  SR      .BAS         CRC = 3E B8

--> FILE:  TIMED   .TXT         CRC = A9 FF

--> FILE:  TUTOR2  .            CRC = 9D 76

--> FILE:  TUTORIAL.            CRC = 0C 54

--> FILE:  XXX     .            CRC = F9 E6

--> FILE:  CRC     .TXT         CRC = 50 DF

--> FILE:  CRCK4   .COM         CRC = BD 22

 ---------------------> SUM OF CRCS = 38 56

DONE

These and other Public Domain and user-supported programs from:

PC Software Interest Group
1125 Stewart Ct  Suite G
Sunnyvale, CA 94086
(408) 730-9291

EYE.TXT

TEXT
&Very good, READER.
Now here's another speed reading drill--
the EYE MOVEMENT EXERCISE.  This one is
designed to train your eyes to move
quickly across a line of print.  Try to
take in the whole phrase at a glance.
The speed will be set a little faster
(10% faster, actually) than your present
reading rate.
\GYour present reading rate is GWPM words/minute.
END
EYEM|0201|03|36
Most of us/ find ourselves
occasionally wanting/ to be
something different/ from what we are.
Secretaries want/ to be photographers.
Photographers want/ to be airline pilots.
Airline pilots want/ to be professors.
And professors dream/ of being
great Olympic heroes./ Dreams generally help
give us a goal/ to strive for
and keep us/ from falling
into a rut./ They make us excel
by spurring/ our ambitions.
STOP
But dreams/ can hurt us, too---
when we begin/ to covet
those abilities/ which we lack.
This kind/ of envy
causes unhappiness/ and discontent
because jealous people/ often overlook
their own strengths/ while they begrudge
those of others./ So keep your dreams
in check/ by reminding yourself
of your own/ strong points
and making the most/ of them.
And the next time/ you find yourself
STOP
yearning to be/ what you aren't,
remember the story/ of the shoemaker
who joined the throngs/ of people
welcoming home/ a conquering monarch.
People threw flowers/ in the hero's path
and cheered themselves hoarse./	But the shoemaker
stood silent./ "Why aren't
you cheering?"/ someone demanded.
"You're gazing on/ the greatest man
of our times,"/ a bystander confirmed.
"Oh, him,"/ the shoemaker replied.
"He can't even make/ a pair of shoes."
END
ASK
&How was that, READER?
Would you like to try another one? (Y/N)
STOP
2YNY+05N+00
ENTER Y or N

END
EOF
RET


END
EYEM|0172|03|29
When the shrill blare/ of the alarm
rouses you,/ how do you
greet the day?/ Do you rise and shine,
cheerfully humming/ your favorite tune?
Or do you/ drag yourself
wearily out of bed/ with a resentful scowl?
Recent research/ conducted by
the Health Promotions/ Department
of St. Louis/ University Hospital
suggests that/ your attitude upon waking
can influence/ your entire day.
STOP
So if you start off/ grumpy and irritable,
kiss the rest/ of the day goodbye.
And beware/ of the snooze alarm.
That 10-minute catnap/ is apt
to make you/ even more lethargic.
Though getting up/ may be
no laughing matter,/ the researchers say
the following wake-up plan/ will produce
a positive attitude/ toward yourself
and your day:/ Get up immediately
after awakening./ Stand with your hands
STOP
on the back/ of your hips,
palms facing upward./ Now, begin to laugh.
Let your laughter/ feed off itself
and spread/ throughout your body.
Keep laughing/ for a few minutes.
When you feel comfortable,/ stop laughing.
Then proceed with/ your morning routine.
END
EOF
RET

JUSTIFY.ASM

        PAGE  60,132
TITLE JUSTIFY - PRINTER JUSTIFY PROGRAM
JUS_STACK SEGMENT PARA STACK 'STACK'
          DB    128 DUP('STACK   ')
JUS_STACK    ENDS
WORKAREA SEGMENT PARA  'DATA'
AREA     DB    512 DUP(?)
FCB      DB    2
FILENAME DB    'PRNTFILE'
EXTEN    DB    '   '
CURBLK   DW    0
RECSIZ   DW    0
FILSIZ   DW    0
DATE     DW    0
TIME     DW    0
         DB    '        '
REC      DB    0
RANREC   DD    0
COL      DB    0
TRTAB    DW    396 DUP(0)
         DW              0B             ;!
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW      111100100B
         DW      111100100B
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW              0B             ;"
         DW              0B
         DW              0B
         DW      111000000B
         DW      111000000B
         DW              0B
         DW              0B
         DW      111000000B
         DW      111000000B
         DW              0B
         DW              0B
         DW              0B
         DW              0B             ;#
         DW        1010000B
         DW        1010000B
         DW      111111100B
         DW      111111100B
         DW        1010000B
         DW        1010000B
         DW      111111100B
         DW      111111100B
         DW        1010000B
         DW        1010000B
         DW              0B
         DW              0B             ;$
         DW        1100000B
         DW       11101000B
         DW       10101000B
         DW       10101000B
         DW      111111100B
         DW      111111100B
         DW       10101000B
         DW       10101000B
         DW       10111000B
         DW         110000B
         DW              0B
         DW              0B             ;%
         DW      111000000B
         DW      111000100B
         DW      101001000B
         DW      111011000B
         DW      111110000B
         DW        1111100B
         DW       11011100B
         DW      110011000B
         DW      100011100B
         DW          11100B
         DW              0B
         DW              0B             ;&
         DW              0B
         DW              0B
         DW       11001100B
         DW      111011110B
         DW      100110110B
         DW      101111100B
         DW       11011100B
         DW      111011000B
         DW         111100B
         DW         100100B
         DW              0B
         DW              0B             ;'
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW      110100000B
         DW      111100000B
         DW      111000000B
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW              0B             ;(
         DW              0B
         DW              0B
         DW              0B
         DW        1110000B
         DW       11111000B
         DW      110001100B
         DW      100000100B
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW              0B             ;)
         DW              0B
         DW              0B
         DW              0B
         DW      100000100B
         DW      110001100B
         DW       11111000B
         DW        1110000B
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW              0B             ;*
         DW         100000B
         DW       10101000B
         DW       11111000B
         DW        1110000B
         DW      111111100B
         DW      111111100B
         DW        1110000B
         DW       11111000B
         DW       10101000B
         DW         100000B
         DW              0B
         DW              0B             ;+
         DW         100000B
         DW         100000B
         DW         100000B
         DW         100000B
         DW      111111100B
         DW      111111100B
         DW         100000B
         DW         100000B
         DW         100000B
         DW         100000B
         DW              0B
         DW              0B             ;,
         DW              0B
         DW              0B
         DW              0B
         DW           1101B
         DW           1111B
         DW           1110B
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW              0B             ;-
         DW              0B
         DW         100000B
         DW         100000B
         DW         100000B
         DW         100000B
         DW         100000B
         DW         100000B
         DW         100000B
         DW         100000B
         DW              0B
         DW              0B
         DW              0B             ;.
         DW              0B
         DW              0B
         DW              0B
         DW           1100B
         DW           1100B
         DW           1100B
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW              0B            ;/
         DW              0B
         DW            100B
         DW           1100B
         DW          11000B
         DW         110000B
         DW        1100000B
         DW       11000000B
         DW      110000000B
         DW      100000000B
         DW              0B
         DW              0B
         DW              0B             ;0
         DW              0B
         DW        1110000B
         DW       11111000B
         DW      110001100B
         DW      100000100B
         DW      100000100B
         DW      110001100B
         DW       11111000B
         DW        1110000B
         DW              0B
         DW              0B
         DW              0B             ;1
         DW              0B
         DW              0B
         DW       10000100B
         DW      110000100B
         DW      111111100B
         DW      111111100B
         DW            100B
         DW            100B
         DW              0B
         DW              0B
         DW              0B
         DW              0B             ;2
         DW              0B
         DW              0B
         DW       10000100B
         DW      110001100B
         DW      100011100B
         DW      100110100B
         DW      101100100B
         DW      111000100B
         DW      110000100B
         DW              0B
         DW              0B
         DW              0B             ;3
         DW              0B
         DW              0B
         DW      100000100B
         DW      100000100B
         DW      100000100B
         DW      101000100B
         DW      111100100B
         DW      110111100B
         DW      100011100B
         DW              0B
         DW              0B
         DW              0B             ;4
         DW              0B
         DW          10000B
         DW         110000B
         DW        1110000B
         DW       11010000B
         DW      110010000B
         DW      111111100B
         DW      111111100B
         DW          10000B
         DW          10000B
         DW              0B
         DW              0B             ;5
         DW              0B
         DW      111101000B
         DW      111101100B
         DW      100100100B
         DW      100100100B
         DW      100100100B
         DW      100111100B
         DW      100011100B
         DW      100000000B
         DW              0B
         DW              0B
         DW              0B             ;6
         DW              0B
         DW              0B
         DW        1110000B
         DW       11111000B
         DW      110101100B
         DW      100100100B
         DW         100100B
         DW         111100B
         DW          11000B
         DW              0B
         DW              0B
         DW              0B             ;7
         DW              0B
         DW      100000100B
         DW      100001100B
         DW      100011000B
         DW      100110000B
         DW      101100000B
         DW      111000000B
         DW      110000000B
         DW      100000000B
         DW              0B
         DW              0B
         DW              0B             ;8
         DW              0B
         DW       11011000B
         DW      111111100B
         DW      100100100B
         DW      100100100B
         DW      100100100B
         DW      100100100B
         DW      111111100B
         DW       11011000B
         DW              0B
         DW              0B
         DW              0B             ;9
         DW              0B
         DW       11000000B
         DW      111100000B
         DW      100100000B
         DW      100100100B
         DW      100101100B
         DW      100111000B
         DW      111110000B
         DW       11100000B
         DW              0B
         DW              0B
         DW              0B            ;:
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW       11001100B
         DW       11001100B
         DW       11001100B
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW              0B            ;;
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW       11001101B
         DW       11001111B
         DW       11001110B
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW              0B            ;<
         DW              0B
         DW              0B
         DW              0B
         DW         100000B
         DW        1110000B
         DW       11011000B
         DW      110001100B
         DW     1000000100B
         DW              0B
         DW              0B
         DW              0B
         DW              0B            ;=
         DW              0B
         DW              0B
         DW        1010000B
         DW        1010000B
         DW        1010000B
         DW        1010000B
         DW        1010000B
         DW        1010000B
         DW              0B
         DW              0B
         DW              0B
         DW              0B            ;>
         DW              0B
         DW              0B
         DW              0B
         DW      100000100B
         DW      110001100B
         DW       11011000B
         DW        1110000B
         DW         100000B
         DW              0B
         DW              0B
         DW              0B
         DW              0B            ;?
         DW              0B
         DW       10000000B
         DW      110000000B
         DW      100000000B
         DW      100110100B
         DW      100100100B
         DW      100100000B
         DW      111000000B
         DW       11000000B
         DW              0B
         DW              0B
         DW              0B            ;@
         DW       11111000B
         DW      111111100B
         DW      100000100B
         DW      100000100B
         DW      100100100B
         DW      101110100B
         DW      101010100B
         DW      101010100B
         DW      101010100B
         DW      111110100B
         DW       11110100B
         DW              0B             ;A
         DW        1111100B
         DW       11111100B
         DW       10010000B
         DW       10010000B
         DW      100010000B
         DW      100010000B
         DW       10010000B
         DW       10010000B
         DW       11111100B
         DW        1111100B
         DW              0B
         DW              0B             ;B
         DW              0B
         DW      100000100B
         DW      111111100B
         DW      111111100B
         DW      100100100B
         DW      100100100B
         DW      100100100B
         DW      100100100B
         DW      111111100B
         DW       11011000B
         DW              0B
         DW              0B             ;C
         DW              0B
         DW       11111000B
         DW      111111100B
         DW      100000100B
         DW      100000100B
         DW      100000100B
         DW      100000100B
         DW      100000100B
         DW      110001100B
         DW       10001000B
         DW              0B
         DW              0B             ;D
         DW      100000100B
         DW      100000100B
         DW      111111100B
         DW      111111100B
         DW      100000100B
         DW      100000100B
         DW      100000100B
         DW      100000100B
         DW       11111000B
         DW       11111000B
         DW              0B
         DW              0B             ;E
         DW              0B
         DW      111111100B
         DW      111111100B
         DW      100100100B
         DW      100100100B
         DW      100100100B
         DW      100100100B
         DW      100000100B
         DW      100000100B
         DW              0B
         DW              0B
         DW              0B             ;F
         DW              0B
         DW      111111100B
         DW      111111100B
         DW      100100000B
         DW      100100000B
         DW      100100000B
         DW      100100000B
         DW      100000000B
         DW      100000000B
         DW              0B
         DW              0B
         DW              0B             ;G
         DW       11111000B
         DW      111111100B
         DW      100000100B
         DW      100000100B
         DW      100100100B
         DW      100100100B
         DW      100100100B
         DW      100100100B
         DW      100111100B
         DW         111000B
         DW              0B
         DW              0B             ;H
         DW              0B
         DW      111111100B
         DW      111111100B
         DW         100000B
         DW         100000B
         DW         100000B
         DW         100000B
         DW      111111100B
         DW      111111100B
         DW              0B
         DW              0B
         DW              0B             ;I
         DW              0B
         DW              0B
         DW      100000100B
         DW      100000100B
         DW      111111100B
         DW      111111100B
         DW      100000100B
         DW      100000100B
         DW              0B
         DW              0B
         DW              0B
         DW              0B             ;J
         DW              0B
         DW          11000B
         DW          11100B
         DW            100B
         DW      100000100B
         DW      100000100B
         DW      111111100B
         DW      111111000B
         DW      100000000B
         DW      100000000B
         DW              0B
         DW              0B             ;K
         DW              0B
         DW      111111100B
         DW      111111100B
         DW         100000B
         DW        1110000B
         DW        1110000B
         DW       11011000B
         DW      110001100B
         DW      100000100B
         DW              0B
         DW              0B
         DW              0B             ;L
         DW      111111100B
         DW      111111100B
         DW            100B
         DW            100B
         DW            100B
         DW            100B
         DW            100B
         DW            100B
         DW            100B
         DW              0B
         DW              0B
         DW              0B             ;M
         DW      111111100B
         DW      111111100B
         DW      100000000B
         DW      110000000B
         DW       11000000B
         DW       11000000B
         DW      110000000B
         DW      100000000B
         DW      111111100B
         DW      111111100B
         DW              0B
         DW              0B             ;N
         DW              0B
         DW      111111100B
         DW      111111100B
         DW      110000000B
         DW       11000000B
         DW        1100000B
         DW         110000B
         DW      111111100B
         DW      111111100B
         DW              0B
         DW              0B
         DW              0B             ;O
         DW       11111000B
         DW      111111100B
         DW      100000100B
         DW      100000100B
         DW      100000100B
         DW      100000100B
         DW      100000100B
         DW      100000100B
         DW      111111100B
         DW       11111000B
         DW              0B
         DW              0B             ;P
         DW      111111100B
         DW      111111100B
         DW      100100000B
         DW      100100000B
         DW      100100000B
         DW      100100000B
         DW      100100000B
         DW      100100000B
         DW       11000000B
         DW       11000000B
         DW              0B
         DW              0B             ;Q
         DW       11111000B
         DW      111111100B
         DW      100000100B
         DW      100000100B
         DW      100000100B
         DW      100100100B
         DW      100010100B
         DW      100001000B
         DW      111111100B
         DW       11111100B
         DW              0B
         DW              0B             ;R
         DW              0B
         DW      111111100B
         DW      111111100B
         DW      100100000B
         DW      100100000B
         DW      100100000B
         DW      100110000B
         DW      100111000B
         DW      111101100B
         DW       11000100B
         DW              0B
         DW              0B             ;S
         DW       11001000B
         DW      111101100B
         DW      100100100B
         DW      100100100B
         DW      100100100B
         DW      100100100B
         DW      100100100B
         DW      100100100B
         DW      110111100B
         DW       10011000B
         DW              0B
         DW              0B             ;T
         DW      100000000B
         DW      100000000B
         DW      100000000B
         DW      100000000B
         DW      111111100B
         DW      111111100B
         DW      100000000B
         DW      100000000B
         DW      100000000B
         DW      100000000B
         DW              0B
         DW              0B             ;U
         DW      111111000B
         DW      111111100B
         DW            100B
         DW            100B
         DW            100B
         DW            100B
         DW            100B
         DW            100B
         DW      111111100B
         DW      111111000B
         DW              0B
         DW              0B             ;V
         DW              0B
         DW      111000000B
         DW      111100000B
         DW         110000B
         DW          11000B
         DW           1100B
         DW          11000B
         DW         110000B
         DW      111100000B
         DW      111000000B
         DW              0B
         DW              0B             ;W
         DW      111111100B
         DW      111111100B
         DW          11000B
         DW         110000B
         DW        1100000B
         DW        1100000B
         DW         110000B
         DW          11000B
         DW      111111100B
         DW      111111100B
         DW              0B
         DW              0B             ;X
         DW              0B
         DW      100000100B
         DW      110001100B
         DW       11011000B
         DW        1110000B
         DW         100000B
         DW        1110000B
         DW       11011000B
         DW      110001100B
         DW      100000100B
         DW              0B
         DW              0B             ;Y
         DW      100000000B
         DW      110000000B
         DW       11000000B
         DW        1100000B
         DW         111100B
         DW         111100B
         DW        1100000B
         DW       11000000B
         DW      110000000B
         DW      100000000B
         DW              0B
         DW              0B             ;Z
         DW              0B
         DW      100000100B
         DW      100001100B
         DW      100011100B
         DW      100110100B
         DW      101100100B
         DW      111000100B
         DW      110000100B
         DW      100000100B
         DW              0B
         DW              0B
         DW              0B            ;[
         DW              0B
         DW              0B
         DW      111111100B
         DW      111111100B
         DW      100000100B
         DW      100000100B
         DW      100000100B
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW              0B            ;\
         DW              0B
         DW      100000000B
         DW      110000000B
         DW       11000000B
         DW        1100000B
         DW         110000B
         DW          11000B
         DW           1100B
         DW              0B
         DW              0B
         DW              0B
         DW              0B            ;]
         DW              0B
         DW              0B
         DW      100000100B
         DW      100000100B
         DW      100000100B
         DW      100000100B
         DW      111111100B
         DW      111111100B
         DW              0B
         DW              0B
         DW              0B
         DW    12 DUP(0)
         DW              0B             ;_
         DW              0B
         DW              1B
         DW              1B
         DW              1B
         DW              1B
         DW              1B
         DW              1B
         DW              1B
         DW              1B
         DW              0B
         DW              0B
         DW              0B             ;`
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW      111000000B
         DW      111100000B
         DW      110100000B
         DW              0B
         DW              0B
         DW              0B
         DW              0B
         DW              0B             ;a
         DW           1000B
         DW        1011100B
         DW        1010100B
         DW        1010100B
         DW        1010100B
         DW        1010100B
         DW        1010100B
         DW        1011100B
         DW         111000B
         DW            100B
         DW              0B
         DW              0B             ;b
         DW              0B
         DW      111111100B
         DW      111111100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1111100B
         DW         111000B
         DW              0B
         DW              0B
         DW              0B             ;c
         DW              0B
         DW         111000B
         DW        1111100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW              0B
         DW              0B             ;d
         DW              0B
         DW         111000B
         DW        1101100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW      111111100B
         DW      111111100B
         DW              0B
         DW              0B             ;e
         DW         111000B
         DW        1101100B
         DW        1010100B
         DW        1010100B
         DW        1010100B
         DW        1010100B
         DW        1010100B
         DW        1110100B
         DW         110000B
         DW              0B
         DW              0B
         DW              0B             ;f
         DW              0B
         DW              0B
         DW         100000B
         DW         100000B
         DW       11111100B
         DW      111111100B
         DW      100100000B
         DW      100100000B
         DW      100000000B
         DW              0B
         DW              0B
         DW              0B             ;g
         DW              0B
         DW         111000B
         DW        1101100B
         DW        1000101B
         DW        1000101B
         DW        1000101B
         DW        1000101B
         DW        1111101B
         DW        1111111B
         DW             10B
         DW              0B
         DW              0B             ;h
         DW              0B
         DW      111111100B
         DW      111111100B
         DW        1000000B
         DW        1000000B
         DW        1000000B
         DW        1000000B
         DW        1000000B
         DW        1111100B
         DW         111100B
         DW              0B
         DW              0B             ;i
         DW              0B
         DW              0B
         DW        1000100B
         DW        1000100B
         DW      101111100B
         DW      101111100B
         DW            100B
         DW            100B
         DW              0B
         DW              0B
         DW              0B
         DW              0B             ;j
         DW              0B
         DW              0B
         DW              0B
         DW              1B
         DW        1000001B
         DW        1000001B
         DW      101111111B
         DW      101111111B
         DW              0B
         DW              0B
         DW              0B
         DW              0B             ;k
         DW              0B
         DW              0B
         DW      111111100B
         DW      111111100B
         DW          10000B
         DW         111000B
         DW        1101100B
         DW        1000100B
         DW              0B
         DW              0B
         DW              0B
         DW              0B             ;l
         DW              0B
         DW              0B
         DW              0B
         DW      100000100B
         DW      100000100B
         DW      111111100B
         DW      111111100B
         DW            100B
         DW            100B
         DW              0B
         DW              0B
         DW              0B             ;m
         DW        1111100B
         DW        1111100B
         DW        1000000B
         DW        1000000B
         DW         111100B
         DW        1111100B
         DW        1000000B
         DW        1000000B
         DW        1111100B
         DW         111100B
         DW              0B
         DW              0B             ;n
         DW              0B
         DW        1111100B
         DW        1111100B
         DW        1000000B
         DW        1000000B
         DW        1000000B
         DW        1000000B
         DW        1000000B
         DW         111100B
         DW         111100B
         DW              0B
         DW              0B             ;O
         DW              0B
         DW         111000B
         DW        1111100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1111100B
         DW         111000B
         DW              0B
         DW              0B             ;p
         DW              0B
         DW        1111111B
         DW        1111111B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1111100B
         DW         111000B
         DW              0B
         DW              0B             ;q
         DW              0B
         DW         111000B
         DW        1111100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW        1111111B
         DW        1111111B
         DW              0B
         DW              0B             ;r
         DW              0B
         DW        1111100B
         DW        1111100B
         DW         100000B
         DW        1000000B
         DW        1000000B
         DW        1000000B
         DW        1000000B
         DW        1000000B
         DW              0B
         DW              0B
         DW              0B             ;s
         DW              0B
         DW        1110100B
         DW        1110100B
         DW        1010100B
         DW        1010100B
         DW        1010100B
         DW        1010100B
         DW        1011100B
         DW        1011100B
         DW              0B
         DW              0B
         DW              0B             ;t
         DW              0B
         DW        1000000B
         DW        1000000B
         DW      111111000B
         DW      111111100B
         DW        1000100B
         DW        1000100B
         DW        1000100B
         DW            100B
         DW            100B
         DW              0B
         DW              0B             ;u
         DW              0B
         DW        1111000B
         DW        1111100B
         DW            100B
         DW            100B
         DW            100B
         DW            100B
         DW        1111100B
         DW        1111000B
         DW            100B
         DW              0B
         DW              0B             ;v
         DW              0B
         DW        1000000B
         DW        1100000B
         DW         110000B
         DW          11000B
         DW           1100B
         DW          11000B
         DW         110000B
         DW        1100000B
         DW        1000000B
         DW              0B
         DW              0B             ;w
         DW              0B
         DW        1111100B
         DW        1111100B
         DW           1000B
         DW          10000B
         DW         100000B
         DW          10000B
         DW           1000B
         DW        1111100B
         DW        1111100B
         DW              0B
         DW              0B             ;x
         DW              0B
         DW              0B
         DW        1101100B
         DW         111000B
         DW          10000B
         DW          10000B
         DW         111000B
         DW        1101100B
         DW              0B
         DW              0B
         DW              0B
         DW              0B             ;y
         DW              0B
         DW        1000000B
         DW        1100001B
         DW         110011B
         DW          11110B
         DW            100B
         DW          11000B
         DW         110000B
         DW        1100000B
         DW        1000000B
         DW              0B
         DW              0B             ;z
         DW              0B
         DW        1000100B
         DW        1001100B
         DW        1001100B
         DW        1010100B
         DW        1010100B
         DW        1110100B
         DW        1100100B
         DW        1000100B
         DW              0B
         DW              0B
         DW              0B             ;{
         DW              0B
         DW              0B
         DW              0B
         DW         100000B
         DW      111011100B
         DW      110001100B
         DW      100000100B
         DW      100000100B
         DW              0B
         DW              0B
         DW              0B
         DW    12 DUP(0)
         DW              0B             ;}
         DW              0B
         DW              0B
         DW              0B
         DW      100000100B
         DW      100000100B
         DW      110001100B
         DW      111011100B
         DW         100000B
         DW              0B
         DW              0B
         DW              0B
         DW    1032 DUP(0)
         DW              0B             ;¢
         DW              0B
         DW        1110000B
         DW       11111000B
         DW       10001000B
         DW       10001000B
         DW      111111100B
         DW      111111100B
         DW       10001000B
         DW       10001000B
         DW              0B
         DW              0B
         DW    1560 DUP(0)
LINE2    DB 128 DUP(32)
         DB    255
L1       DB 960 DUP(0)
         DB    255
L2       DB 960 DUP(0)
         DB    255
         DB    970 DUP(255)
COL59    DB    0
HCOL     DB    0
LCOL     DB    0
C12      DB    12
IBITS    DW    0
IREM     DW    0
C24      DB    24
L1SUB    DW    0
HSI1     DW    0
HSI2     DW    0
HSI3     DW    0
HSI4     DW    0
HSI5     DW    0
HSI6     DW    0
HSI9     DW    0
HSI7     DW    0
HBYTE1   DB    0
HBYTE2   DB    0
HWORD    DW    0
ENDSW    DW    0
LINCNT   DW    0
PAGESIZE DW    61
HOLDDX   DW    0
PRTPRMPT DB    'ENTER PRINTER TYPE         1 = IBM'
         DB    0DH
         DB    0AH
         DB    0AH
         DB    '                           2 = EPSON MX80 OR MX100'
         DB    0DH
         DB    0AH
         DB    0AH
         DB    '                           3 = EPSON FX80 OR FX100'
         DB    0DH
         DB    0AH
         DB    0AH
         DB    '                           4 = STAR MICRONICS GEMINI 10X OR 15X'
         DB    0DH
         DB    0AH
         DB    0AH
         DB    '                           5 = STAR MICRONICS DELTA 10 OR 15'
         DB    0DH
         DB    0AH
         DB    0AH
         DB    '<1>'
         DB    24H
PRMPEL   DB    0DH
         DB    0AH
         DB    'ENTER LAST LINE ON PAGE'
         DB    0DH
         DB    0AH
         DB    '<60> '
         DB    24H
PRMPPS   DB    0DH
         DB    0AH
         DB    'ENTER LINES PER PAGE'
         DB    0DH
         DB    0AH
         DB    '<66> '
         DB    24H
PRMPFN   DB    0DH
         DB    0AH
         DB    'ENTER FILE NAME'
         DB    0DH
         DB    0AH
         DB    '<B:PRNTFILE>'
         DB    24H
PRMPLM   DB    0DH
         DB    0AH
         DB    'ENTER LEFT MARGIN'
         DB    0DH
         DB    0AH
         DB    '<1>'
         DB    24H
PRMPRM   DB    0DH
         DB    0AH
         DB    'ENTER RIGHT MARGIN'
         DB    0DH
         DB    0AH
         DB    '<80>'
         DB    24H
PRMPSL   DB    0DH
         DB    0AH
         DB    'ENTER STARTING LINE'
         DB    0DH
         DB    0AH
         DB    '<6>'
         DB    24H
PERR     DB    0DH
         DB    0AH
         DB    'PRINTER ERROR'
         DB    0DH
         DB    0AH
         DB    24H
OPAPR    DB    0DH
         DB    0AH
         DB    'PUT PAPER IN PRINTER THEN HIT ENTER'
         DB    0DH
         DB    0AH
         DB    24H
TOUT     DB    0DH
         DB    0AH
         DB    'ENABLE PRINTER THEN HIT ENTER'
         DB    0DH
         DB    0AH
         DB    24H
OPNERR   DB    0DH
         DB    0AH
         DB    'FILE NOT FOUND'
         DB    0DH
         DB    0AH
         DB    24H
ENDMSG   DB    0DH
         DB    0AH
         DB    'TO END PROGRAM, TYPE "E"'
         DB    0DH
         DB    0AH
         DB    24H
COPYRITE DB    '                           COPYRIGHT (C) 1984 COMFAX'
         DB    0DH
         DB    0AH
         DB    0AH
         DB    0AH
         DB    24H
PRNAME   DB    '                               JUSTIFY BY COMFAX'
         DB    0DH
         DB    0AH
         DB    0AH
         DB    24H
BUFFER   DB    20
         DB    64 DUP(0)
PRTRCODE DB    '1'
LMARG    DW    1
RMARG    DW    80
SLINE    DW    6
ELINE    DW    60
PAGSIZ   DW    66
FILNAM   DB    13 DUP(32)
PGCOMD   DB    2
         DB    '66       '
SPAC16   DB    27
         DB    65
         DB    12
SPAC19   DB    27
         DB    65
         DB    8
SPAC118  DB    27
         DB    65
         DB    4
DIRPRE   DB    '   '
DIRAREA  DB    64 DUP(0)
DIR2PRE  DB    '  '
DIR2AREA DB    64 DUP(0)
HOLDBX   DW    0
PATHSW   DB    0
HOLDAL   DB    0
DEFAULT  DB    0
HOLDDRIV DB    0
INDENT   DW    0
HMAR     DB    '   '
WORKAREA ENDS
EXTRA    SEGMENT PARA  'DATA'
LINE1    DB 128 DUP(32)
         DB    255
EXTRA    ENDS
JUS_CSEG SEGMENT PARA  'CODE'
JUS_PROC PROC FAR
         ASSUME CS:JUS_CSEG,DS:WORKAREA,SS:JUS_STACK,ES:EXTRA
         PUSH  DS              ;Set return segment addr to stack
         SUB   AX,AX             ;Clear a reg
         PUSH  AX                ;Put zero return addr to stack
         STI                     ;ENABLE INTERRUPTS
         MOV   AX,SEG WORKAREA   ;SET SEGREG BASE OF DATA BUFFER
         MOV   DS,AX
         MOV   AX,SEG EXTRA      ;SET SEGREG BASE
         MOV   ES,AX
         MOV   AH,19H            ;GET DEFAULT DRIVE
         INT   21H
         ADD   AL,41H
         MOV   DEFAULT,AL
CLSCR:   MOV   AX,600H        ;CLEAR SCREEN
         MOV   CX,0
         MOV   DX,2479H
         MOV   BH,7
         INT   10H
         MOV   AH,9           ;DISPLAY PROGRAM NAME
         LEA   DX,PRNAME
         INT   21H
         MOV   AH,9           ;DISPLAY COPYRIGHT NOTICE
         LEA   DX,COPYRITE
         INT   21H
         MOV   AH,9           ;DISPLAY PRINTER PROMPT
         LEA   DX,PRTPRMPT
         INT   21H
         MOV   AH,12          ;READ KEYBOARD CHARACTER AND DISPLAY IT
         MOV   AL,1
         INT   21H
         CMP   AL,13          ;CR?
         JE    DLM            ;YES--JUMP
         CMP   AL,'1'         ;CHECK FOR LEGAL PRINTER CODE
         JL    CLSCR
         CMP   AL,'6'
         JGE   CLSCR
         MOV   PRTRCODE,AL    ;STORE PRINTER CODE
DLM:     MOV   AH,9           ;DISPLAY LEFT MARGIN PROMPT
         LEA   DX,PRMPLM
         INT   21H
         LEA   DX,BUFFER      ;READ FROM KEYBOARD INTO BUFFER
         MOV   AL,4
         MOV   BUFFER,AL
         MOV   AH,10
         INT   21H
         CMP   BUFFER+1,0     ;CR ONLY?
         JE    DRM            ;YES--JUMP
         LEA   BX,BUFFER+2    ;CONVET IT TO BINARY
         MOV   CL,BUFFER+1
         MOV   CH,0
         CALL  CONVERT
         JNC   GOOD1          ;IS IT VALID?
         JMP   DLM
GOOD1:   MOV   LMARG,AX       ;STORE LEFT MARGIN
DRM:     MOV   AH,9           ;DISPLAY RIGHT MARGIN PROMPT
         LEA   DX,PRMPRM
         INT   21H
         LEA   DX,BUFFER      ;READ FROM KEYBOARD INTO BUFFER
         MOV   AL,4
         MOV   BUFFER,AL
         MOV   AH,10
         INT   21H
         CMP   BUFFER+1,0     ;CR ONLY?
         JE    DSL            ;YES--JUMP
         LEA   BX,BUFFER+2    ;CONVET IT TO BINARY
         MOV   CL,BUFFER+1
         MOV   CH,0
         CALL  CONVERT
         JNC   GOOD2          ;IS IT VALID?
         JMP   DRM
GOOD2:   MOV   RMARG,AX       ;STORE RIGHT MARGIN
DSL:     MOV   AH,9           ;DISPLAY STARTING LINE
         LEA   DX,PRMPSL
         INT   21H
         LEA   DX,BUFFER      ;READ FROM KEYBOARD INTO BUFFER
         MOV   AL,4
         MOV   BUFFER,AL
         MOV   AH,10
         INT   21H
         CMP   BUFFER+1,0     ;CR ONLY?
         JE    DEL            ;YES--JUMP
         LEA   BX,BUFFER+2    ;CONVET IT TO BINARY
         MOV   CL,BUFFER+1
         MOV   CH,0
         CALL  CONVERT
         JNC   GOOD3          ;IS IT VALID?
         JMP   DSL
GOOD3:   MOV   SLINE,AX       ;STORE STARTING LINE
DEL:     MOV   AH,9           ;DISPLAY ENDING LINE
         LEA   DX,PRMPEL
         INT   21H
         LEA   DX,BUFFER      ;READ FROM KEYBOARD INTO BUFFER
         MOV   AL,4
         MOV   BUFFER,AL
         MOV   AH,10
         INT   21H
         CMP   BUFFER+1,0     ;CR ONLY?
         JE    DPS            ;YES--JUMP
         LEA   BX,BUFFER+2    ;CONVET IT TO BINARY
         MOV   CL,BUFFER+1
         MOV   CH,0
         CALL  CONVERT
         JNC   GOOD4          ;IS IT VALID?
         JMP   DEL
GOOD4:   MOV   ELINE,AX       ;STORE ENDING LINE
DPS:     MOV   AH,9           ;DISPLAY LINES PER PAGE
         LEA   DX,PRMPPS
         INT   21H
         LEA   DX,BUFFER      ;READ FROM KEYBOARD INTO BUFFER
         MOV   AL,4
         MOV   BUFFER,AL
         MOV   AH,10
         INT   21H
         CMP   BUFFER+1,0     ;CR ONLY?
         JE    DFN            ;YES--JUMP
         LEA   BX,BUFFER+2    ;CONVET IT TO BINARY
         MOV   CL,BUFFER+1
         MOV   CH,0
         CALL  CONVERT
         JNC   GOOD5          ;IS IT VALID?
         JMP   DPS
GOOD5:   MOV   PAGSIZ,AX      ;STORE LINES PER PAGE
DFN:     MOV   AH,9           ;DISPLAY FILE NAME
         LEA   DX,PRMPFN
         INT   21H
         LEA   DX,BUFFER      ;READ FROM KEYBOARD INTO BUFFER
         MOV   AL,64
         MOV   BUFFER,AL
         MOV   AH,10
         INT   21H
         CMP   BUFFER+1,0
         JNE   NINIT
         JMP   INITPRT
NINIT:   CMP   BUFFER+1,1
         JNE   FNA
         JMP   ZRODFLT
FNA:     CMP   BUFFER+1,2
         JNE   FNB
         JMP   ZRODFLT
FNB:     CMP   BUFFER+3,':'
         JE    FNC
         JMP   ZRODFLT
FNC:     MOV   AL,BUFFER+2
         CMP   AL,96
         JBE   NOCONV1
         CMP   AL,122
         JG    NOCONV1
         SUB   AL,32
NOCONV1: CMP   AL,'A'
         JL    DFN
         CMP   AL,'H'
         JGE   DFN
         MOV   DIRPRE,AL
         MOV   DIRPRE+1,':'
         MOV   DIRPRE+2,'\'
         MOV   DIR2PRE,AL
         MOV   DIR2PRE+1,':'
         SUB   AL,40H
         MOV   FCB,AL
         MOV   HOLDDRIV,AL
         MOV   CX,8
         MOV   SI,0
LUPBLK1: MOV   AL,32
         MOV   FILENAME[SI],AL
         INC   SI
         LOOP  LUPBLK1
         MOV   BX,OFFSET BUFFER+4
         MOV   SI,0
         MOV   CX,8
LUPFN1:  MOV   AL,[BX]
         MOV   HOLDBX,BX
         CMP   AL,'\'             ;WAS A PATH SPECIFIED
         JE    PRCP1              ;YES--JUMP
         JMP   LFN1Y
PRCP1:   MOV   SI,0
         MOV   PATHSW,1
         MOV   AL,[BX]
LUPP1:   CMP   AL,96
         JBE   NOCONV2
         CMP   AL,122
         JG    NOCONV2
         SUB   AL,32
NOCONV2: MOV   DIR2AREA[SI],AL
         INC   BX
         INC   SI
         MOV   AL,[BX]
         CMP   AL,13
         JNE   LUPP1
LUPP2:   DEC   BX
         DEC   SI
         MOV   AL,[BX]
         CMP   AL,'\'
         JNE   LUPP2
         CMP   BX,HOLDBX
         JNE   LUPP3
         INC   SI
         MOV   DIR2AREA[SI],0
         INC   BX
         MOV   SI,0
         MOV   CX,8
         JMP   LFN1Z
LUPP3:   MOV   DIR2AREA[SI],0
         INC   BX
         MOV   SI,0
         MOV   CX,8
         JMP   LFN1Z
LFN1Y:   MOV   AL,[BX]
         CMP   AL,96
         JBE   NOCONV3
         CMP   AL,122
         JG    NOCONV3
         SUB   AL,32
NOCONV3: MOV   FILENAME[SI],AL
         INC   SI
         INC   BX
LFN1Z:   MOV   AL,[BX]
         CMP   AL,13
         JE    CKIBMP
         CMP   AL,'.'
         JE    PRCEXT
         JMP   LFN1Y
PRCEXT:  INC   BX
         MOV   AL,[BX]
         CMP   AL,13
         JNE   CEXT
         JMP   DFN
CEXT:    MOV   SI,0
         MOV   CX,3
LUPEX1:  MOV   AL,[BX]
         CMP   AL,96
         JBE   NOCONV4
         CMP   AL,122
         JG    NOCONV4
         SUB   AL,32
NOCONV4: MOV   EXTEN[SI],AL
         INC   SI
         INC   BX
         MOV   AL,[BX]
         CMP   AL,13
         JE    CKIBMP
         LOOP  LUPEX1
CKIBMP:  CMP   PRTRCODE,'1'   ;IBM PRINTER?
         JE    ISIBM          ;YES--JUMP
         JMP   INITPRT
ISIBM:   MOV   SPAC16+1,51
         MOV   SPAC16+2,36
         MOV   SPAC19+1,51
         MOV   SPAC19+2,24
         MOV   SPAC118+1,51
         MOV   SPAC118+2,12
INITPRT: MOV   AX,600H        ;CLEAR SCREEN
         MOV   CX,0
         MOV   DX,2479H
         MOV   BH,7
         INT   10H
         MOV   AH,9           ;DISPLAY END MESSAGE
         LEA   DX,ENDMSG
         INT   21H
         MOV   AX,ELINE       ;COMPUTE LINES/PAGE
         SUB   AX,SLINE
         INC   AX
         MOV   PAGESIZE,AX
         MOV   DX,0              ;SET PAGE SIZE
         MOV   AH,0
         MOV   AL,27
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPRA
         RET
CKPRA:   MOV   AH,0
         MOV   AL,67
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   SETFORM
         RET
SETFORM: MOV   AX,PAGSIZ
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR1
         RET
CKPR1:   MOV   DX,0           ;SET PRINTER SPACING TO 1/6 INCH
         MOV   AH,0
         MOV   AL,SPAC16
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   ACP1
         RET
ACP1:    MOV   AH,0
         MOV   AL,SPAC16+1
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   ACP1Z
         RET
ACP1Z:   MOV   AH,0
         MOV   AL,SPAC16+2
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   ACP2
         RET
ACP2:    MOV   AX,SLINE
         DEC   AX
         CMP   AX,0
         JE    CKPATH
         MOV   CX,AX
SPACDN1: MOV   AH,0           ;SPACE TO STARTING LOCATION ON PAGE
         MOV   AL,10
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   ACP3
         RET
ACP3:    LOOP  SPACDN1
CKPATH:  CMP   PATHSW,1         ;WAS A PATH SPECIFIED?
         JNE   AFTINIT          ;NO--JUMP
         MOV   DL,FCB           ;MOVE DRIVE NUMBER
         LEA   SI,DIRAREA
         MOV   AH,47H
         INT   21H
         MOV   AH,3BH
         CMP   HOLDDRIV,0     ;WAS A DRIVE SPECIFIED?
         JNE   DRIVESPC       ;YES--JUMP
         LEA   DX,DIR2AREA
         INT   21H
         JMP   AFTINIT
DRIVESPC: LEA  DX,DIR2PRE
         INT   21H
AFTINIT: LEA   DX,FCB         ;GET LOCATION OF FCB
         MOV   AH,15          ;OPEN FILE
         INT   21H
         MOV   HOLDAL,AL      ;STORE RETURN CODE
         CMP   PATHSW,1       ;WAS A PATH SPECIFIED?
         JNE   CMPHAL         ;NO--JUMP
         MOV   AH,3BH
         CMP   HOLDDRIV,0     ;WAS A DRIVE SPECIFIED:
         JNE   DRIVSP2        ;YES--JUMP
         MOV   AL,DEFAULT     ;MOVE DEFAULT DRIVE
         MOV   DIRPRE,AL
         MOV   DIRPRE+1,':'
         MOV   DIRPRE+2,'\'
         LEA   DX,DIRPRE
         INT   21H
         JMP   CMPHAL
DRIVSP2: LEA   DX,DIRPRE
         INT   21H
CMPHAL:  CMP   HOLDAL,0
         JE    SETRS
         MOV   AH,9
         LEA   DX,OPNERR
         INT   21H
         RET
SETRS:   MOV   RECSIZ,512     ;SET RECORD SIZE
         LEA   DX,AREA        ;GET LOCATION OF BUFFER
         MOV   AH,26          ;SET DISK TRANSFER ADDRESS
         INT   21H
         MOV   CX,1           ;CHARACTER COUNT=1
         MOV   BX,OFFSET LINE1
READIT:  MOV   HOLDDX,DX      ;SAVE DX
         MOV   ENDSW,0
         LEA   DX,FCB         ;GET LOCATION OF FCB
         MOV   AH,20          ;READ FILE
         INT   21H
         CMP   AL,1           ;END OF FILE?
         JNE   NE1            ;NO--JUMP
         JMP   ENDF1
NE1:     MOV   DX,HOLDDX      ;RESTORE DX
         MOV   HSI5,-1        ;SUBSCRIPT
INCSUB:  INC   HSI5           ;INCREMENT SUBSCRIPT
         MOV   SI,HSI5
         CMP   SI,512         ;END OF RECORD?
         JE    READIT
         MOV   AL,AREA[SI]    ;MOVE BYTE
         CMP   AL,10          ;NEWLINE?
         JNE   CMPHOF1        ;NO--JUMP
         JMP   MOVBX2
ZRODFLT: MOV   CX,8
         MOV   SI,0
LUPBLK2: MOV   AL,32
         MOV   FILENAME[SI],AL
         INC   SI
         LOOP  LUPBLK2
         MOV   AL,0
         MOV   FCB,AL
         MOV   BX,OFFSET BUFFER+2
         MOV   SI,0
         MOV   CX,8
         JMP   LUPFN1
CMPHOF1: CMP   AL,12          ;SKIP TO HEAD OF FORM?
         JE    SKP1           ;YES--JUMP
         CMP   AL,13          ;ELIMINATE VOLKSWRITER SPECIAL CHARACTERS
         JE    INCSUB
         CMP   AL,26
         JNE   NE2
         JMP   ENDF1
NE2:     CMP   AL,20
         JE    INCSUB
         CMP   AL,21
         JE    INCSUB
         CMP   AL,24
         JE    INCSUB
         CMP   AL,25
         JE    INCSUB
         MOV   ENDSW,1
         CMP   AL,155         ;CENT SIGN?
         JNE   NE2XX          ;NO--JUMP
         MOV   AL,212         ;CONVERT TO PRINTER CENT SIGN
NE2XX:   MOV   ES:[BX],AL
         INC   BX             ;INCREMENT POINTER
         JMP   INCSUB
SKP1:    MOV   AH,0           ;TELL PRINTER TO SKIP TO HOF
         MOV   AL,12
         MOV   DX,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CHKDP1
         RET
CHKDP1:  MOV   DX,0           ;SET PRINTER SPACING TO 1/6 INCH
         MOV   AH,0
         MOV   AL,SPAC16
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   ACP4
         RET
ACP4:    MOV   AH,0
         MOV   AL,SPAC16+1
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   ACP5
         RET
ACP5:    MOV   AH,0
         MOV   AL,SPAC16+2
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   ACP5X
         RET
ACP5X:   MOV   AX,SLINE
         DEC   AX
         CMP   AX,0
         JE    ZZZLN
         MOV   CX,AX
SPACDN2: MOV   AH,0           ;SPACE TO STARTING LOCATION ON PAGE
         MOV   AL,10
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   ACP3X
         RET
ACP3X:   LOOP  SPACDN2
ZZZLN:   MOV   LINCNT,0        ;ZERO LINE COUNT
         MOV   BX,OFFSET LINE1  ;MOVE SPACES TO LINE1
FSL1:    MOV   AL,255
         CMP   ES:[BX],AL     ;END OF LINE?
         JE    SOFFL1         ;YES--JUMP
         MOV   AL,32          ;MOVE A SPACE
         MOV   ES:[BX],AL
         INC   BX
         JMP   FSL1
SOFFL1:  MOV   BX,OFFSET LINE1
NLLUP:   INC   HSI5
         MOV   SI,HSI5
         CMP   SI,512         ;END OF RECORD
         JNE   CKNL1          ;NO--JUMP
         MOV   HOLDDX,DX      ;SAVE DX
         MOV   ENDSW,0
         LEA   DX,FCB         ;GET LOCATION OF FCB
         MOV   AH,20          ;READ FILE
         INT   21H
         CMP   AL,1           ;END OF FILE?
         JNE   MOVZSI         ;NO--JUMP
         JMP   ENDF1
MOVZSI:  MOV   DX,HOLDDX
         MOV   SI,0
CKNL1:   MOV   AL,AREA[SI]    ;SEARCH FOR NEWLINE
         CMP   AL,10
         JNE   NLLUP
         JMP   INCSUB
MOVBX2:  MOV   AH,6           ;READ KEYBOARD CHARACTER
         MOV   DL,0FFH
         INT   21H
         CMP   AL,'E'         ;END IT?
         JNE   COMPSE
         JMP   EOJ
COMPSE:  CMP   AL,'e'
         JNE   MOVBX8         ;NO--JUMP
         JMP   EOJ
MOVBX8:  MOV   AH,0BH
         INT   21H
         MOV   BX,OFFSET LINE2
         JMP   INCSUB2
READIT2: MOV   HOLDDX,DX      ;SAVE DX
         MOV   ENDSW,999
         LEA   DX,FCB         ;GET LOCATION OF FCB
         MOV   AH,20          ;READ FILE
         INT   21H
         CMP   AL,1           ;END OF FILE?
         JNE   NE2B           ;NO--JUMP
         JMP   ENDF1
NE2B:    MOV   DX,HOLDDX      ;RESTORE DX
NEWLN1:  MOV   HSI5,-1        ;SUBSCRIPT
INCSUB2: INC   HSI5           ;INCREMENT SUBSCRIPT
         MOV   SI,HSI5
         CMP   SI,512         ;END OF RECORD?
         JE    READIT2
         MOV   AL,AREA[SI]    ;MOVE BYTE
         CMP   AL,10          ;NEWLINE?
         JNE   CKSHOF2        ;NO--JUMP
         JMP   NEWLN3
CKSHOF2: CMP   AL,12          ;SKIP TO HEAD OF FORM
         JE    SKP2           ;YES--JUMP
         CMP   AL,13          ;ELIMINATE VOLKSWRITER SPECIAL CHARACTERS
         JE    INCSUB2
         CMP   AL,26
         JNE   NE3
         JMP   ENDF1
NE3:     CMP   AL,20
         JE    INCSUB2
         CMP   AL,21
         JE    INCSUB2
         CMP   AL,24
         JE    INCSUB2
         CMP   AL,25
         JE    INCSUB2
         CMP   AL,155         ;CENT SIGN?
         JNE   NE3XX          ;NO--JUMP
         MOV   AL,212         ;CONVERT TO PRINTER CENT SIGN
NE3XX:   MOV   [BX],AL
         MOV   ENDSW,2
         INC   BX             ;INCREMENT POINTER
         JMP   INCSUB2
MVZ1:    MOV   IBITS,0
         MOV   IREM,0
         JMP   MOVSI1
SKP2:    MOV   AX,PAGESIZE
         SUB   AX,2
         MOV   LINCNT,AX
         JMP   INCSUB2
FSL2:    MOV   AL,255
         CMP   [BX],AL          ;END OF LINE?
         JE    SOFFL2           ;YES--JUMP
         MOV   AL,32            ;MOVE A SPACE
         MOV   [BX],AL
         INC   BX
         JMP   FSL2
SOFFL2:  MOV   BX,OFFSET LINE2
NLLUP2:  INC   HSI5
         MOV   SI,HSI5
         CMP   SI,512            ;END OF RECORD?
         JNE   CKNL2             ;NO--JUMP
         MOV   HOLDDX,DX         ;SAVE DX
         MOV   ENDSW,999
         LEA   DX,FCB            ;GET LOCATION OF FCB
         MOV   AH,20             ;READ FILE
         INT   21H
         CMP   AL,1              ;END OF FILE?
         JNE   MOVZSI2           ;NO--JUMP
         JMP   ENDF1
MOVZSI2: MOV   DX,HOLDDX
         MOV   SI,0
CKNL2:   MOV   AL,AREA[SI]       ;SEARCH FOR NEWLINE
         CMP   AL,10
         JNE   NLLUP2
         JMP   INCSUB2
NEWLN3:  MOV   AL,255
         CMP   [BX],AL
         JE    MOVOFF
         MOV   AL,32
         MOV   [BX],AL
         INC   BX
         JMP   NEWLN3
MOVOFF:  MOV   AX,LINCNT
         CMP   AX,PAGESIZE
         JNE   MVO
         MOV   DX,0           ;SET PRINTER SPACING TO 1/6 INCH
         MOV   AH,0
         MOV   AL,SPAC16
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   ACP7K
         RET
ACP7K:   MOV   AH,0
         MOV   AL,SPAC16+1
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   ACP7L
         RET
ACP7L:   MOV   AH,0
         MOV   AL,SPAC16+2
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   ACP7M
         RET
ACP7M:   MOV   AH,0
         MOV   AL,12
         MOV   DX,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR3
         RET
CKPR3:   MOV   LINCNT,0
         MOV   AX,SLINE
         DEC   AX
         CMP   AX,0
         JE    MVO
         MOV   CX,AX
SPACDN4: MOV   AH,0                ;SPACE TO STARTING LOCATION ON PAGE
         MOV   AL,10
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   ACPJJ
         RET
ACPJJ:   LOOP  SPACDN4
MVO:     MOV   BX,OFFSET LINE1
         ADC   BX,RMARG
         DEC   BX
         MOV   AX,RMARG
         DEC   AX
         MOV   COL,AL
         MOV   AL,COL
         SUB   AL,12
         MOV   COL59,AL
         MOV   SI,LMARG
         DEC   SI
         CMP   LINE1[SI],'.'            ;CHANGE MARGIN?
         JE    NM1                      ;YES--JUMP
         JMP   MOVIND
NM1:     CMP   LINE1+1[SI],'.'
         JE    NM2
         JMP   MOVIND
NM2:     CMP   LINE1+3[SI],'M'
         JNE   CKSMALM
CKLARGA: CMP   LINE1+4[SI],'A'
         JNE   CKSMALA
CKLARGR: CMP   LINE1+5[SI],'R'
         JNE   CKSMALR
CKLARGG: CMP   LINE1+6[SI],'G'
         JNE   CKSMALG
CKLARGL: CMP   LINE1+2[SI],'L'
         JNE   CKSMALL
         JMP   SETLEFT
CKSMALM: CMP   LINE1+3[SI],'m'
         JE    CKLARGA
         JMP   MOVIND
CKSMALA: CMP   LINE1+4[SI],'a'
         JE    CKLARGR
         JMP   MOVIND
CKSMALR: CMP   LINE1+5[SI],'r'
         JE    CKLARGG
         JMP   MOVIND
CKSMALG: CMP   LINE1+6[SI],'g'
         JE    CKLARGL
         JMP   MOVIND
CKSMALL: CMP   LINE1+2[SI],'l'
         JNE   CKRIGHT
         JMP   SETLEFT
CKRIGHT: CMP   LINE1+2[SI],'R'
         JNE   CKRGT2
         JMP   SETRIGHT
CKRGT2:  CMP   LINE1+2[SI],'r'
         JE    JSR
         JMP   MOVIND
JSR:     JMP   SETRIGHT
SETLEFT: MOV   CX,0
         CMP   LINE1+7[SI],' '
         JNE   NM2B
         JMP   MOVIND
NM2B:    CMP   LINE1+7[SI],10
         JNE   NM3
         JMP   MOVIND
NM3:     CMP   LINE1+7[SI],13
         JNE   NM4
         JMP   MOVIND
NM4:     MOV   CX,1
         CMP   LINE1+8[SI],' '
         JE    PLEFT
         CMP   LINE1+8[SI],10
         JE    PLEFT
         CMP   LINE1+8[SI],13
         JE    PLEFT
         MOV   CX,2
         CMP   LINE1+9[SI],' '
         JE    PLEFT
         CMP   LINE1+9[SI],10
         JE    PLEFT
         CMP   LINE1+9[SI],13
         JE    PLEFT
         MOV   CX,3
PLEFT:   LEA   BX,HMAR
         MOV   AL,LINE1+7[SI]
         MOV   HMAR,AL
         MOV   AL,LINE1+8[SI]
         MOV   HMAR+1,AL
         MOV   AL,LINE1+9[SI]
         MOV   HMAR+2,AL
         CALL  CONVERT
         JNC   CNVLM
         JMP   MOVIND
CNVLM:   MOV   LMARG,AX
         JMP   CKPR15
SETRIGHT: MOV   CX,0
         CMP   LINE1+7[SI],' '
         JNE   NM5
         JMP   MOVIND
NM5:     CMP   LINE1+7[SI],10
         JNE   NM6
         JMP   MOVIND
NM6:     CMP   LINE1+7[SI],13
         JNE   NM7
         JMP   MOVIND
NM7:     MOV   CX,1
         CMP   LINE1+8[SI],' '
         JE    PRIGHT
         CMP   LINE1+8[SI],10
         JE    PRIGHT
         CMP   LINE1+8[SI],13
         JE    PRIGHT
         MOV   CX,2
         CMP   LINE1+9[SI],' '
         JE    PRIGHT
         CMP   LINE1+9[SI],10
         JE    PRIGHT
         CMP   LINE1+9[SI],13
         JE    PRIGHT
         MOV   CX,3
PRIGHT:  LEA   BX,HMAR
         MOV   AL,LINE1+7[SI]
         MOV   HMAR,AL
         MOV   AL,LINE1+8[SI]
         MOV   HMAR+1,AL
         MOV   AL,LINE1+9[SI]
         MOV   HMAR+2,AL
         CALL  CONVERT
         JNC   CNVRM
         JMP   MOVIND
CNVRM:   MOV   RMARG,AX
         JMP   CKPR15
MOVIND:  MOV   BX,OFFSET LINE1
         CLC
         ADC   LINCNT,1
         CLC
         ADC   BX,RMARG                  ;LOCATE LAST NON-BLANK CHARACTER
         DEC   BX
         MOV   AX,RMARG
         DEC   AX
         MOV   COL,AL
         MOV   AL,COL
         SUB   AL,18
         MOV   COL59,AL
         MOV   SI,LMARG
         DEC   SI
         MOV   INDENT,0
         CMP   LINE1[SI],' '
         JNE   CKBLK1
         MOV   INDENT,1
         CMP   LINE1+1[SI],' '
         JNE   CKBLK1
         MOV   INDENT,2
         CMP   LINE1+2[SI],' '
         JNE   CKBLK1
         MOV   INDENT,3
         CMP   LINE1+3[SI],' '
         JNE   CKBLK1
         MOV   INDENT,4
         CMP   LINE1+4[SI],' '
         JNE   CKBLK1
         MOV   INDENT,5
         CMP   LINE1+5[SI],' '
         JNE   CKBLK1
         MOV   INDENT,6
         CMP   LINE1+6[SI],' '
         JNE   CKBLK1
         JMP   NOJUS1
CKBLK1:  MOV   AL,ES:[BX]              ;BLANK?
         CMP   AL,32
         JNE   FB1                     ;NO--JUMP
         DEC   COL                     ;DECREMENT COLUMN
         MOV   AL,COL59
         CMP   COL,AL                  ;COLUMN 59?
         JE    NOJUS1                  ;YES--JUMP
         DEC   BX                      ;DECREMENT POINTER
         JMP   CKBLK1
NOJUS1:  MOV   IBITS,0
         MOV   IREM,0
         JMP   MOVSI1
FB1:     MOV   AX,RMARG                 ;COMPUTE BITS TO INSERT
         SUB   AL,COL
         DEC   AL
         CMP   AL,0
         JNE   FB1Z
         JMP   MVZ1
FB1Z:    MUL   C12
         MOV   HWORD,AX
         MOV   AL,COL
         SUB   AX,LMARG
         SUB   AX,INDENT
         MOV   HCOL,AL
         INC   HCOL
         MOV   AX,HWORD
         DIV   HCOL
         MOV   HBYTE1,AL
         MOV   HBYTE2,AH
         CBW
         MOV   IBITS,AX
         MOV   AL,HBYTE2
         CBW
         MOV   IREM,AX
MOVSI1:  MOV   AX,LMARG
         ADD   AX,INDENT
         DEC   AX
         MOV   HSI9,AX
         MOV   L1SUB,0
         MOV   LCOL,0
         MOV   AX,LMARG            ;SKIP TO STARTING COLUMN
         ADD   AX,INDENT
         DEC   AX
         CMP   AX,0
         JE    LUP1
         MUL   C12
         MOV   CX,AX
         MOV   AL,0
MOVZR1:  MOV   SI,L1SUB
         MOV   L1[SI],AL
         MOV   L2[SI],AL
         INC   L1SUB
         LOOP  MOVZR1
LUP1:    MOV   SI,HSI9
         MOV   AL,LINE1[SI]
         MUL   C24
         MOV   HSI2,AX
         MOV   CX,12
LUP2:    MOV   SI,HSI2
         MOV   AX,TRTAB[SI]
         MOV   SI,L1SUB
         SAR   AX,1
         MOV   L1[SI],AL
         MOV   SI,HSI2
         MOV   AX,TRTAB[SI]
         AND   AL,1B
         SAL   AL,1
         SAL   AL,1
         SAL   AL,1
         SAL   AL,1
         SAL   AL,1
         SAL   AL,1
         SAL   AL,1
         MOV   SI,L1SUB
         MOV   L2[SI],AL
         INC   L1SUB
         INC   HSI2
         INC   HSI2
         LOOPNZ LUP2
         CMP   IBITS,0
         JE    CKRM1
         MOV   CX,IBITS
LUP3:    MOV   SI,L1SUB
         MOV   L1[SI],0
         MOV   L2[SI],0
         INC   L1SUB
         LOOPNZ LUP3
CKRM1:   CMP   IREM,0
         JE    CKE1
         DEC   IREM
         MOV   SI,L1SUB
         MOV   L1[SI],0
         MOV   L2[SI],0
         INC   L1SUB
CKE1:    CMP   L1SUB,960
         JGE   NEWLN4
         INC   HSI9
         JMP   LUP1
NEWLN4:  MOV   AL,255
         INC   BX
         CMP   ES:[BX],AL
         JE    LUP8B
         MOV   AL,32
         MOV   ES:[BX],AL
         JMP   NEWLN4
LUP8B:   MOV   HSI4,-1        ;SUBSCRIPT
         MOV   DX,0           ;PRINTER NUMBER
         MOV   AH,0           ;SET PRINTER SPACING TO 1/9 INCH
         MOV   AL,SPAC19
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR4
         RET
CKPR4:   MOV   AH,0
         MOV   AL,SPAC19+1
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPRZ1
         RET
CKPRZ1:  MOV   AH,0
         MOV   AL,SPAC19+2
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPRZZ
         RET
CKPRZZ:  MOV   AH,0
         MOV   AL,27          ;SET PRINTER TO DUAL DENSITY GRAPHICS
         MOV   DX,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPRZ2
         RET
CKPRZ2:  MOV   AH,0
         MOV   AL,76
         MOV   DX,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR5
         RET
CKPR5:   MOV   AH,0
         MOV   AL,192
         MOV   DX,0
         INT   17H
         MOV   AH,0
         MOV   AL,3
         MOV   DX,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   LOOPCHR
         RET
LOOPCHR: MOV   DX,0           ;PRINTER NUMBER
         INC   HSI4           ;BUMP SUBSCRIPT
         MOV   SI,HSI4
         MOV   AL,L1[SI]
         MOV   AH,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR6
         RET
CKPR6:   INC   SI
         CMP   SI,960         ;END OF TABLE?
         JNE   LOOPCHR        ;NO--BRANCH
         MOV   AH,0           ;CARRIAGE RETURN
         MOV   AL,13
         MOV   DX,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR7
         RET
CKPR7:   MOV   AH,0           ;LINE FEED
         MOV   AL,10
         MOV   DX,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   NOTE9
         RET
NOTE9:   MOV   HSI4,-1          ;SUBSCRIPT
         MOV   DX,0           ;PRINTER NUMBER
         MOV   AH,0           ;SET PRINTER SPACING TO 1/18 INCH
         MOV   AL,SPAC118
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR8
         RET
CKPR8:   MOV   AH,0
         MOV   AL,SPAC118+1
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR9
         RET
CKPR9:   MOV   AH,0
         MOV   AL,SPAC118+2
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR10
         RET
CKPR10:  MOV   AH,0
         MOV   AL,27          ;SET PRINTER TO DUAL DENSITY GRAPHICS
         MOV   DX,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR11
         RET
CKPR11:  MOV   AH,0
         MOV   AL,76
         MOV   DX,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR12
         RET
CKPR12:  MOV   AH,0
         MOV   AL,192
         MOV   DX,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR12Z
         RET
CKPR12Z: MOV   AH,0
         MOV   AL,3
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   LOOPCH2
         RET
LOOPCH2: MOV   DX,0           ;PRINTER NUMBER
         INC   HSI4           ;BUMP SUBSCRIPT
         MOV   SI,HSI4
         MOV   AL,L2[SI]
         MOV   AH,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR13
         RET
CKPR13:  INC   SI
         CMP   SI,960         ;END OF TABLE?
         JNE   LOOPCH2        ;NO--BRANCH
         MOV   AH,0           ;CARRIAGE RETURN
         MOV   AL,13
         MOV   DX,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR14
         RET
CKPR14:  MOV   AH,0           ;LINE FEED
         MOV   AL,10
         MOV   DX,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   CKPR15
         RET
CKPR15:  MOV   SI,OFFSET LINE2
         MOV   DI,OFFSET LINE1
         MOV   CX,LENGTH LINE2
 REP     MOVS  LINE1,LINE2
         CMP   ENDSW,888
         JE    EOJ
         JMP   MOVBX2
ENDF1:   CMP   ENDSW,0
         JE    EOJ
         MOV   ENDSW,888
         JMP   NOJUS1
EOJ:     MOV   AH,0           ;TELL PRINTER TO SKIP TO HOF
         MOV   AL,12
         MOV   DX,0
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   EOJZZ
         RET
EOJZZ:   MOV   DX,0           ;SET PRINTER SPACING TO 1/6 INCH
         MOV   AH,0
         MOV   AL,SPAC16
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   EOJZ1
         RET
EOJZ1:   MOV   AH,0
         MOV   AL,SPAC16+1
         INT   17H
         CALL  CHKPRTR
         CMP   AH,99
         JNE   EOJZ2
         RET
EOJZ2:   MOV   AH,0
         MOV   AL,SPAC16+2
         INT   17H
         CALL  CHKPRTR
         RET
JUS_PROC ENDP
CONVERT  PROC  NEAR
         PUSH  BX                           ;SAVE BX AND CX
         PUSH  CX
         SUB   AX,AX                        ;TO START, RESULT=0,
         SUB   DX,DX                        ; DECIMAL COUNT=0,
         MOV   DI,0FFH                      ; ASSUME NO BAD CHARACTERS
         CMP   CX,7                         ;STRING TOO LONG?
         JA    NO_GOOD               ;IF SO, GO SET CF AND EXIT
BLANKS:  CMP   BYTE PTR [BX],' '     ;SCAN PAST LEADING BLANKS
         JNE   CHK_NEG
         INC   BX
         LOOP  BLANKS
CHK_NEG: CMP   BYTE PTR [BX],'-'     ;NEGATIVE NUMBER?
         JNE   CHK_POS
         INC   BX                    ;IF SO, INCREMENT POINTER,
         DEC   CX                    ; DECREMENT THE COUNT,
         CALL  CONV_AB               ; AND CONVERT THE STRING
         JC    THRU
         CMP   AX,32768              ;IS THE NUMBER TOO SMALL?
         JA    NO_GOOD
         NEG   AX                    ;NO, COMPLEMENT THE RESULT
         JS    GOOD
CHK_POS: CMP   BYTE PTR [BX],'+'     ;POSITIVE NUMBER?
         JNE   GO_CONV
         INC   BX                    ;IF SO, INCREMENT POINTER,
         DEC   CX                    ; DECREMENT THE COUNT,
GO_CONV: CALL  CONV_AB               ; AND CONVERT THE STRING
         JC    THRU
         CMP   AX,32767              ;IS THE NUMBER TOO BIG?
         JA    NO_GOOD
GOOD:    CLC
         JNC   THRU
NO_GOOD: STC                         ;IF SO, SET CARRY FLAG
THRU:    POP   CX                    ;RESTORE REGISTERS
         POP   BX
         RET                         ; AND EXIT
CONV_AB: PUSH  BP                    ;SAVE SCRATCH REGISTERS
         PUSH  BX
         PUSH  SI
         MOV   BP,BX
CHK_PT:  CMP   DX,0                  ;DECIMAL POINT ALREADY FOUND?
         JNZ   RANGE                 ; IF SO, SKIP FOLLOWING CHECK
         CMP   BYTE PTR DS:[BP],'.'  ;DECIMAL POINT?
         JNE   RANGE
         DEC   CX                    ;IF SO,DECREMENT COUNT,
         MOV   DX,CX                 ; AND RECORD IT IN DX
         JZ    END_CONV              ; EXIT IF CX=0
         INC   BP                    ; INCREMENT POINTER
RANGE:   CMP   BYTE PTR DS:[BP],'0'  ;IF THE CHARACTER IS NOT A DIGIT
         JB    NON_DIG
         CMP   BYTE PTR DS:[BP],'9'
         JBE   DIGIT
NON_DIG: MOV   DI,BP                 ;PUT ITS ADDRESS IN DI,
         STC                         ; SET THE CARRY FLAG,
         JC    END_CONV              ; AND EXIT
DIGIT:   MOV   SI,10                 ;THE CHARACTER IS A DIGIT,
         PUSH  DX
         MUL   SI                    ; SO MULTIPLY AX BY 10
         POP   DX
         MOV   BL,DS:[BP]            ; FETCH ASCII CODE,
         AND   BX,0FH                ; SAVE ONLY HIGH BITS,
         ADD   AX,BX                 ; AND UPDATE PARTIAL RESULT
         JC    END_CONV              ; EXIT IF RESULT IS TOO BIG
         INC   BP                    ; OTHERWISE, INCREMENT
         LOOP  CHK_PT                ; BP AND CONTINUE
         CLC                         ; WHEN DONE, CLEAR CARRY FLAG
END_CONV:  POP SI                    ; RESTORE REGISTERS
         POP   BX
         POP   BP
         RET
CONVERT  ENDP
CHKPRTR  PROC  NEAR
         PUSH  AX
         PUSH  DX
         TEST  AH,1
         JNZ   TIMEOUT
         TEST  AH,32
         JNZ   OUTPAPR
         TEST  AH,8
         JNZ   IOERR
         JMP   RTRN
IOERR:   MOV   AH,9
         LEA   DX,PERR
         INT   21H
         POP   DX
         POP   AX
         MOV   AH,99
         RET
TIMEOUT: PUSH  AX
         PUSH  DX
         MOV   AH,9
         LEA   DX,TOUT
         INT   21H
DRDK:    LEA   DX,BUFFER
         MOV   AL,2
         MOV   BUFFER,AL
         MOV   AH,10
         INT   21H
         POP   DX
         POP   AX
         INT   17H
RTRN:    POP   DX
         POP   AX
         RET
OUTPAPR: PUSH  AX
         PUSH  DX
         MOV   AH,9
         LEA   DX,OPAPR
         INT   21H
         JMP   DRDK
CHKPRTR  ENDP
JUS_CSEG ENDS
         END   JUS_PROC

LINEBUG.BAS

10  CLS
13  LOCATE 3,29
16  PRINT "LINEBUG BY COMFAX"
20  LOCATE 5,25
30  PRINT "COPYRIGHT (C) 1984 COMFAX"
40  LOCATE 10,1
50  INPUT "ENTER PROGRAM NAME TO BE CHECKED ";PRG$
100 OPEN "I",#1,PRG$
250 OLDLINNO$="00000"
300 GOTO 500
400 IF EOF(1) GOTO 2300
500 LINE INPUT #1,IMAGE$
550 LINNO$="00000"
600 XX=1
700 IF MID$(IMAGE$,XX,1)=" " GOTO 1100
750 IF MID$(IMAGE$,XX,1) < "0" GOTO 2100
760 IF MID$(IMAGE$,XX,1) > "9" GOTO 2100
800 XX=XX+1
900 IF XX>6 GOTO 2100
1000 GOTO 700
1100 IF XX<2 GOTO 2100
1200 XX=XX-1
1300 YY=6-XX
1400 HLIN$ = MID$(IMAGE$,1,XX)
1500 MID$(LINNO$,YY)=HLIN$
1600 IF OLDLINNO$ >= LINNO$ GOTO 1900
1700 OLDLINNO$=LINNO$
1800 GOTO 400
1900 PRINT "LINE NO. ERROR ";LINNO$
2000 GOTO 1700
2100 HLD$=MID$(IMAGE$,1,20)
2150 PRINT "ILLEGAL LINE NO. ";HLD$
2200 GOTO 400
2300 CLOSE #1
2400 SYSTEM

SR.BAS

0 '  "sr.BAS  4/16/84 ...JC
1 GOTO 3000
2 '==================INITIALIZATION \/========================
3 FOR I%=1 TO 10:KEY I%,STR$(I%):NEXT: ' ENABLE FUNCTION KEYS
4 COMMON FILE$,NWPM,S$ ' FOR HARD-code overlaying)
5 DIM TEXT$(500), I$(30), FIRST%(40), NUM$(50), NUM%(50),N$(20),MORT.AGE(125),R(20):S$="":REALDATE$=DATE$
6  DEF FNEQUAL(R$)=MID$(AA$,2,1)=R$
7 SPECIAL$="!#$^&|\": TRUE%=-1: FALSE%=0:FLSHRATE=4
8 DEFINT I,D,L,N:LESSON=LESSON%
9 BEGINTIME$="00:00:00":T$=TIME$
10 DEF FNHERE%(DUMMY$)=0<INSTR(SPECIAL$,LEFT$(DUMMY$,1)) AND DUMMY$<> ""
11 DEF FNUPPER$(DUMMY$)=CHR$(ASC(DUMMY$)+32*(ASC(DUMMY$)>90))
12 DEF FNLFT$(DUMMY$)=LEFT$(DUMMY$,1)
13 DEF FNCENTER(X)=INT(((80-X)/2))
14 DEF FNC(X)=INT(((80-X)/2))
15 DEF FN TIMER(T$)=((VAL(LEFT$(TIME$,2))*60*60)+(VAL(MID$(TIME$,4,2))*60)+VAL(RIGHT$(TIME$,2))) - ((VAL(LEFT$(T$,2))*60*60)+(VAL(MID$(T$,4,2))*60)+VAL(RIGHT$(T$,2)))
16 DEF SEG=0
17 DEF FNCENTER%(X$)=INT(((80-LEN(X$))/2))
18 RETURN
19 '---------------  wait for space bar \/
20 IF MESSAGE$="" THEN MESSAGE$="Please Press <SPACE BAR> to Continue."
21 LOCATE 25,FNCENTER(LEN(MESSAGE$)):PRINT MESSAGE$;
22 DEF SEG=0:POKE 1050,PEEK(1052)
23 AA$="":WHILE AA$="":AA$=INKEY$:WEND:' get a keypress
24 IF AA$<>CHR$(32) AND AA$<>CHR$(45) AND AA$<>CHR$(43) THEN GOSUB 90:GOTO 23
25 MESSAGE$="":RETURN
29 IF VAL(LEFT$(TIME$,2))  >=  23 THEN TIME$="00":BEGINTIME$=TIME$:'    Change clock only when necessary
30 T=((VAL(RIGHT$(TIME$,2)))+(VAL(MID$(TIME$,4,2))*60)+(VAL(LEFT$(TIME$,2))*3600))
31 S=VAL(RIGHT$(TIME$,2)):M=VAL(MID$(TIME$,4,2))*60:H=VAL(LEFT$(TIME$,2))*3600
32 IF (T+DELAY%) - (S+M+H) > 0 THEN 31
33 RETURN
34 '----------------- short pause \/
35 FOR I=1 TO PAUSE:NEXT:RETURN
39 '----------------- get a character \/
40 AA$="":WHILE AA$="":AA$=INKEY$:WEND:RETURN 'aa$
45 AA$="":WHILE AA$="":GOSUB 92:AA$=INKEY$:WEND:RETURN 'aa$
49 '----------------- print header \/
50  ' header at line 1 in inverse
51  IF HEADER$="" THEN HEADER$="Speed Reading . . . The Computer Course"
52  LOCATE 1,1:COLOR 0,7:PRINT SPACE$(FNCENTER(LEN(HEADER$)));" ";HEADER$;" ";:     WHILE POS(0)<80:PRINT " ";:WEND:PRINT " ";:COLOR 7,0
53  HEADER$="Speed Reading . . . The Computer Course":RETURN
54 LOCATE 3,1:PRINT STRING$(80,45)
56 RETURN
60  LOCATE Y%,X%:PRINT PROMPT$;" ";:RETURN
69 ' ----NWPM from GWPM \/
70 NWPM = GWPM-5*WRONG
79 '--------------- "correct answer" sound \/
80 SOUND 600,1: SOUND 750,1: SOUND 600,2: RETURN
84 '--------------- "incorrect answer" sound \/
85 SOUND 90,8:SOUND 50,12:RETURN
89 '--------------- input error sound \/
90 SOUND 1800,1:RETURN
91 STOP'---------- prompt for spacebar when it is midnite? \/
92 IF TIME$="00:00:00" THEN Y%=CSRLIN:X%=POS(0):LOCATE 25,1,0:COLOR 0,7:PRINT SPACE$(FNC(LEN(FTR$)-1));" ";FTR$;" ";:WHILE POS(0)<79:PRINT " ";:WEND:PRINT " ";:COLOR 7,0:PAUSE=4000:GOSUB 35:LOCATE 25,1:PRINT SPACE$(79);:LOCATE Y%,X%,1:RETURN ELSE RETURN
94 '---------------  sound for page turn \/
95 SOUND 200,2:RETURN
99 '--------------- read line of input as <A$> \/
100 A$="":AA$="":LOCATE ,,1
101 IF SPACEMODE%=TRUE% THEN TIME$="23:59:"+DL$
105 IF SPACEMODE%=TRUE% THEN GOSUB 45 ELSE GOSUB 40
106 IF SPACEMODE%=TRUE% THEN IF AA$=CHR$(32) THEN SPACEMODE%=FALSE%:GOTO 180
110 IF AA$=CHR$(13) THEN SPACEMODE%=FALSE%:GOTO 180
112 IF AA$=CHR$(8) AND LEN(A$)>0 THEN PRINT CHR$(29);" ";CHR$(29);:IF LEN(A$)>1 THEN A$=LEFT$(A$,LEN(A$)-1):GOTO 105 ELSE A$="":GOTO 105
113 IF AA$=CHR$(8) THEN GOSUB 90: GOTO 105
120 IF ASC(AA$)<32 THEN GOSUB 90: GOTO 105
140 IF LEN(A$)=MAXLENGTH THEN GOSUB 90 : GOTO 105
150 PRINT AA$; : A$=A$+AA$ : GOTO 105
180 LOCATE ,,0 : RETURN
199 '-------------- output simple text screens \/
200 LN=FILEPOS:M%=LN:FIRST%(1)=LN:PAGE%=1
210 VPOS=1
212 IF FNHERE%(TEXT$(LN)) THEN GOSUB 10000 ELSE LOCATE VPOS,20:PRINT TEXT$(LN);
260 LN=LN+1:VPOS=VPOS+2
265 IF TEXT$(LN)="" THEN VPOS=VPOS-1
270 IF TEXT$(LN)<>"STOP" AND TEXT$(LN)<>"END" THEN 212
271 IF PAGE%>1 THEN MESSAGE$="Press <SPACE BAR> Or + To Continue, - To Review.":GOSUB 20:CLS ELSE MESSAGE$="Press <SPACE BAR> To Continue.":GOSUB 20
272 IF AA$=CHR$(45) AND PAGE%=1 THEN DUMMY=0 ELSE CLS
276 IF TEXT$(LN)="STOP" THEN IF AA$<>CHR$(45) THEN FIRST%(PAGE%)=M%:M%=LN+1:LN=LN+1:PAGE%=PAGE%+1:GOTO 210 ELSE IF PAGE%>1 THEN FIRST%(PAGE%)=M%:LN=FIRST%(PAGE%-1):M%=FIRST%(PAGE%-1):PAGE%=PAGE%-1:GOTO 210 ELSE GOTO 271
277 IF TEXT$(LN)="END" THEN IF AA$<>CHR$(45) THEN GOTO 280 ELSE IF PAGE%>1 THEN FIRST%(PAGE%)=M%:LN=FIRST%(PAGE%-1):M%=FIRST%(PAGE%-1):PAGE%=PAGE%-1:GOTO 210
280 FILEPOS=LN+1:RETURN
300 LN=FILEPOS:WRONG=0:M%=LN:FIRST%(1)=LN:PAGE%=1
310 VPOS=1
315 IF FNHERE%(TEXT$(LN)) THEN GOSUB 10020 ELSE LOCATE VPOS,20:PRINT TEXT$(LN);
360 LN=LN+1:VPOS=VPOS+2
365 IF TEXT$(LN)="" THEN VPOS=VPOS-1
368 IF FUNCT$="ASKM" AND TEXT$(LN) = "ENDM"  THEN GOSUB 20:GOTO 410
369 IF FUNCT$="ASKM" AND TEXT$(LN)="STOPM" THEN GOSUB 20:CLS:IF AA$<>CHR$(13) THEN FIRST%(PAGE%)=M%:M%=LN+1:LN=LN+1:PAGE%=PAGE%+1:GOTO 310 ELSE IF PAGE%>1 THEN FIRST%(PAGE%)=M%:LN=FIRST%(PAGE%-1):M%=FIRST%(PAGE%-1):PAGE%=PAGE%-1:GOTO 31 ELSE GOSUB 35000:
370 IF TEXT$(LN) <> "STOP" AND TEXT$(LN)<>"END" THEN 315
371 IF TEXT$(LN)="END" AND FUNCT$="ASK" THEN GOSUB 20:GOTO 410: ' quiz section\/
372 INFO$=TEXT$(LN+1):NUMAN=VAL(LEFT$(INFO$,1)):FOR J=1 TO NUMAN:CHOICE$(J)=MID$(INFO$,J+1,1):NEXT
373 RMD$=MID$(INFO$,NUMAN+2):IF FUNCT$="QUIZ" THEN CORRECT$=RMD$ ELSE FOR J=1 TO NUMAN:BRANCH(J)=VAL(MID$(RMD$,INSTR(RMD$,CHOICE$(J))+1,3)):NEXT
374 QUEST$=TEXT$(LN+2)
378 LOCATE 25,40-LEN(QUEST$)/2-1,1:PRINT QUEST$;": ";
380 GOSUB 40:A$=AA$
385 VALID=0:FOR J=1 TO NUMAN:IF ASC(A$)=ASC(CHOICE$(J)) OR ASC(A$)=ASC(CHOICE$(J))+32 THEN VALID=-1
388 NEXT
389 IF NOT VALID THEN GOSUB 90:GOTO 380
390 COLOR 23:PRINT CHR$(ASC(A$)+32*(ASC(A$)>90));:COLOR 7,0
391 LOCATE ,,0:IF FUNCT$="ASK" OR FUNCT$="ASKM" THEN 420
392 FOR J=1 TO 200:NEXT
394 LOCATE 22,1:PRINT SPACE$(79);
395 IF A$=CORRECT$ OR A$=CHR$(ASC(CORRECT$)+32) THEN LOCATE 22,29:PRINT"That's correct, "READER$".":GOSUB 80: ELSE LOCATE 22,19:PRINT"I'm sorry, "READER$", the correct answer is "CORRECT$".":WRONG=WRONG+1:GOSUB 85
400 GOSUB 20
405 IF TEXT$(LN)<>"END" THEN CLS:LN=LN+3:GOTO 310
410 CLS:FILEPOS=LN+(3*(-1*(FUNCT$="QUIZ"))-(FUNCT$="ASK" OR FUNCT$="ASKM")):RETURN
411 ' end of quiz section /\
412 ' ask the user what he wants to do and go there \/
420 J=1
422 LN=LN+3
425 IF A$ = CHOICE$(J) OR ASC(A$)=ASC(CHOICE$(J))+32 THEN LN=LN+BRANCH(J):CLS: GOTO 310 ELSE J=J+1:GOTO 425
450 LN=LN-REV:CLS:GOTO 310
499 '-------------- output timed readings -- return <GWPM> \/
500 LN=FILEPOS
502 IF VAL(LEFT$(TIME$,2))  >=  23 THEN TIME$="00"'    Change clock only when necessary
503 T$=TIME$
510 VPOS = 1
515 IF FNHERE%(TEXT$(LN)) THEN GOSUB 10020 ELSE LOCATE VPOS,20:PRINT TEXT$(LN);
560 LN=LN+1:VPOS=VPOS+2
565 IF TEXT$(LN)="" THEN VPOS=VPOS-1
570 IF TEXT$(LN) <> "STOP" AND TEXT$(LN)<>"END" THEN 515 ELSE GOSUB 20:CLS:IF TEXT$(LN)="STOP" THEN LN=LN+1: GOTO 510 ELSE 580
580 FILEPOS=LN+1:TYME=FN TIMER(T$):GWPM=CINT(WDCOUNT/TYME*60):RETURN
585 FILEPOS=LN+1:GWPM=CINT(WDCOUNT/TYME*60):RETURN
599 '-------------- output accelerated readings \/
600 LN=FILEPOS
601 IF NUMSCREENS%=0 THEN NUMSCREENS%=1
602 IF WREC=1 THEN DELAY%=(NUMWORDS%/(SPD/60))/NUMSCREENS%:GOTO 610
605 DELAY%=(NUMWORDS%/((NWPM+NWPM/10)/60))/NUMSCREENS%
610 VPOS=1
615 IF FNHERE%(TEXT$(LN)) THEN GOSUB 10020 ELSE LOCATE VPOS,20:PRINT TEXT$(LN);
660 LN=LN+1:VPOS=VPOS+2
665 IF TEXT$(LN)="" THEN VPOS=VPOS-1
670 IF TEXT$(LN) <> "STOP" AND TEXT$(LN)<>"END" THEN 615 ELSE GOSUB 29:CLS:IF TEXT$(LN)="STOP" THEN LN=LN+1:GOTO 605 ELSE 680
680 FILEPOS=LN+1:RETURN
699 '-------------- output rapid preception warm-up drills \/
700 NUM%=VAL(MID$(FUNCT$,5)):LN=FILEPOS-1
703 PAUSE=1200:GOSUB 35:LOCATE 10,41:PRINT CHR$(254):GOSUB 95:GOSUB 35
705 FOR L%=1 TO NUM%
708 IF L%=INT(NUM%/2) THEN GOSUB 800:CLS :PAUSE =1200:GOSUB 35:LOCATE 10,41:PRINT CHR$(254):GOSUB 95:GOSUB 35
710 LN=LN+1:LOCATE 12,41-LEN(TEXT$(LN))/2:PRINT TEXT$(LN)
715 FOR I=1 TO 1139/FLSHRATE:NEXT:LOCATE 12,41-LEN(TEXT$(LN))/2:PRINT SPACE$(LEN(TEXT$(LN)))
720 DELAY=1:GOSUB 29
725 LOCATE 12,41-LEN(TEXT$(LN))/2:PRINT TEXT$(LN):GOSUB 29:LOCATE 12,41-LEN(TEXT$(LN))/2:PRINT SPACE$(LEN(TEXT$(LN))):GOSUB 29
730 NEXT
740 FILEPOS=FILEPOS+NUM:RETURN
800 '==============\/ mortality table
803 IF AGE>19 AND AGE<86 THEN FOR II=20 TO AGE+5:READ MORT.AGE(II):NEXT ELSE GOTO 805
804 GOTO 820
805 FOR II=20 TO 90:READ MORT.AGE(II):NEXT
815 '=======calculate how many yrs till dooms day
820 IF AGE<20 THEN YRS.LEFT=MORT.AGE(20):GOTO 830 ELSE IF AGE> 85 THEN YRS.LEFT=MORT.AGE(90):GOTO 830
825 YRS.LEFT=(MORT.AGE(AGE+5)+MORT.AGE(AGE))/2
830 RETURN
899 '-------------- read text file \/
900 ' FILE$=FILE$+".dat"
902 OPEN FILE$ FOR INPUT AS #1
910 LN=1
920 IF NOT EOF(1) THEN LINE INPUT#1,TEXT$(LN):LN=LN+1:GOTO 920 ELSE 930
930 CLOSE#1:CLS:NUMLNS=LN-1
940 RETURN
999 '-------------- process file `file$' till `RET'
1000 '
1010 ' GOSUB 50
1050 GOSUB 900
1055 FILEPOS=1
1056 FUNCT$=TEXT$(FILEPOS)
1057 IF FUNCT$="EOF" THEN IF TEXT$(FILEPOS+1)<>"RET" THEN FILE$=TEXT$(FILEPOS+1):GOSUB 51000:GOSUB 900:GOTO 1050 ELSE 1095
1058 IF LEFT$(FUNCT$,4)="SKIP" THEN IF VAL(MID$(FUNCT$,5)) = 0 THEN FILEPOS = FILEPOS+2 ELSE FILEPOS=FILEPOS+VAL(MID$(FUNCT$,5)):GOTO 1090
1059 CLS:FILEPOS=FILEPOS+1
1060 IF FUNCT$="TEXT" THEN GOSUB 200:GOTO 1090
1062 IF LEFT$(FUNCT$,3)="ACC" THEN NUMWORDS%=VAL(MID$(FUNCT$,4,4)):NUMSCREENS%=VAL(MID$(FUNCT$,8)):GOSUB 600:GOTO 1090
1065 IF LEFT$(FUNCT$,5)="TREAD" THEN WDCOUNT=VAL(MID$(FUNCT$,6)):GOSUB 500:GOTO 1090
1068 IF FUNCT$="HCODE" THEN SEG$=TEXT$(FILEPOS):FILE$=TEXT$(FILEPOS+1):GOTO 60000
1069 IF LEFT$(FUNCT$,3)="SPD" THEN GOSUB 840:GOTO 1090
1070 IF FUNCT$="RATE" THEN GOSUB 800:GOTO 1090
1075 IF LEFT$(FUNCT$,4)="RNDW" THEN GOSUB 700: GOTO 1090
1077 IF LEFT$(FUNCT$,4) ="RNDL" THEN GOSUB 40000:GOTO 1090
1078 IF LEFT$(FUNCT$,3)="ASK" OR LEFT$(FUNCT$,4)="QUIZ" THEN GOSUB 300:GOTO 1090
1079 IF LEFT$(FUNCT$,4)="EYEM" THEN NUMWORDS%=VAL(MID$(FUNCT$,6,4)):NUMSCREENS%=VAL(MID$(FUNCT$,11,2)):NUMLNS%=VAL(MID$(FUNCT$,14)):GOSUB 15000:GOTO 1090
1080 IF LEFT$(FUNCT$,8)="SETFLASH" THEN FLSHRATE=VAL(MID$(FUNCT$,9)):GOTO 1090
1086 'CLS:PRINT"Invalid command in file "FILE$".":STOP
1088 FILEPOS=FILEPOS+1
1090 GOTO 1056
1095 RETURN
1999 ' ------------- menu \/
2099 ' ------------- draw box \/
2100 LOCATE TOP%,LEFT%:PRINT CHR$(218);:FOR I%=(LEFT%+1) TO (RIGHT%-1):PRINT CHR$(196);:NEXT:LOCATE TOP%,RIGHT%:PRINT CHR$(191);
2105 LOCATE TOP%,LEFT%:PRINT CHR$(218);:FOR I%=(LEFT%+1) TO (RIGHT%-1):PRINT CHR$(196);:NEXT:LOCATE TOP%,RIGHT%:PRINT CHR$(191);
2110 FOR Y%=(TOP%+1) TO (BOTTOM%-1):LOCATE Y%,LEFT%:PRINT CHR$(179);:LOCATE Y%,RIGHT%:PRINT CHR$(179);:NEXT
2115 LOCATE BOTTOM%,LEFT%:PRINT CHR$(192);:FOR I%=(LEFT%+1) TO (RIGHT%-1):PRINT CHR$(196);:NEXT:LOCATE BOTTOM%,RIGHT%:PRINT CHR$(217);:RETURN
2120 ' -------------
3000 '============\/ main code starts here
3002 GOSUB 3
3010 GOSUB 6000                   '============\/ intro book routine
3020 GOSUB 8000                   '============\/initial questions
3030 GOSUB 51000:                                                                    FILE$="TIMED.TXT":GOSUB 1000'=============\/first timed reading
3040 GOSUB  12000      '===========\/ find rate of reader
3050 GOSUB 13000                  ' ===========\/ more questions & mortality
3060 GOSUB 9000:GOSUB 14000       '=====\/ RPD'S
3065 NWPM=GWPM*1.1:FILE$="eye.txt":GOSUB 51000:                                              GOSUB 1000                    '===========\/ eye move exercise
3070 GOSUB 30000                  '============\/ speed reading description
3080 NWPM=NWPM+NWPM*0.2:FILE$="ART.txt":                                              GOSUB 51000:GOSUB 1000    '===============\/ accelerated reading
3085 GOSUB  5000               '===============\/ ending text
3090 GOSUB 16000               '===============\/ bookshelf & conclusion
5000 '================\/ end of demo
5070 CLS:LOCATE 3,1:PRINT S$;"Congratulations, ";READER$;"!"
5080 LOCATE 5,1:PRINT S$;"You just read that at ";NWPM;" words per minute."
5085  FOR I%=1 TO 3:PLAY "mbl32o4cdefgabo5c":NEXT:PLAY"o3o4cbagfedco4l12o5c"
5090 LOCATE 7,1:PRINT S$;"That means you're already reading 20%"
5100 LOCATE 9,1:PRINT S$;"faster than you were at the beginning of"
5110 LOCATE 11,1:PRINT S$;"this demonstration."
5120 LOCATE 15,1:PRINT S$;"That's terrific!  With this course and"
5130 LOCATE 17,1:PRINT S$;"a few weeks of practice you should be"
5140 LOCATE 19,1:PRINT S$;"able to double or even triple your"
5150 LOCATE 21,1:PRINT S$;"present reading rate."
5160 GOSUB 20
5170 CLS:LOCATE 5,1:PRINT S$;"Well, ";READER$;", it's time for me to say"
5180 LOCATE 7,1:PRINT S$;"goodbye.  I hope you decide to take"
5190 LOCATE 9,1:PRINT S$;"SPEED READING . . . The Computer Course."
5200 LOCATE 11,1:PRINT S$;"It's been fun working with you.  I'll"
5210 LOCATE 13,1:PRINT S$;"look forward to seeing you again soon"
5220 LOCATE 15,1:PRINT S$;"in Lesson One.
5280 GOSUB 20
5999 RETURN
6000  ' INTRO  ===================\/
6030 COLOR 7,0:KEY OFF:CLS
6060 GOTO 6115
6065  IF HEADER$="" THEN HEADER$="Speed Reading . . . The Computer Course"
6070  LOCATE 1,1:PRINT SPACE$(FNCENTER%(HEADER$));:COLOR 0,7:PRINT " ";HEADER$;" ";:COLOR 7,0: FOR Q%=POS(0) TO 79:PRINT " ";:NEXT :PRINT " ";:COLOR 7,0
6075 RETURN
6080  LOCATE Y%,X%:PRINT PROMPT$;" ";:RETURN
6085 '----------------------------
6090 CLS: LOCATE 1,1
6095 PRINT S$; S$;:COLOR 0,7:PRINT S$; " SPEED READING . . . THE COMPUTER COURSE":COLOR 7,0
6100 PRINT S$;:PRINT S$; S$;SPC(9);"A Speed Reading Course":COLOR 7:PRINT S$;
6105 RETURN
6110 '----------------------------
6115 B$(1)="DICKENS      ":B$(2)="MICHENER     ":B$(3)="STEINBECK    ":B$(4)="MELVILLE     "
6120 B$(5)="HEMINGWAY    ":B$(6)="HAWTHORNE    ":B$(7)="WHITMAN      ":B$(8)="THOREAU      "
6125 B$(9)="SPEED READING":B$(10)="DICKINSON    "
6130 '-----------------------------
6135 LESSON=9: HANG=45
6140 GOSUB 6170
6145 LESSON=0: HANG=10
6150 GOTO 6380
6155 '*****************************
6160 '*        BOOK SHELF         *
6165 '*****************************
6170 CLS
6175 LOCATE ,,0
6180 S$=""
6185 LOCATE 19,21:PRINT STRING$(39,176)
6190 LOCATE 20,21:PRINT SPC(4);STRING$(3,176);SPC(25);STRING$(3,176);
6195 FOR I%=1 TO HANG*15:NEXT
6200 '-----------------------------
6205 COLOR 0,7
6210 FOR J%=1 TO 10
6215 PLAY "l36mbn"+MID$(STR$(J%+30),2)
6220 LOCATE 2,20+J%*4-3:PRINT STRING$(3,223);
6225 LOCATE 3,20+J%*4-3: PRINT STRING$(3,205);
6230 FOR I%=1 TO 14:LOCATE 3+I%,20+J%*4-3: PRINT " ";MID$(B$(J%),I%,1);" ";CHR$(219):NEXT
6235 LOCATE 17,20+J%*4-3: PRINT STRING$(3,205)
6240 LOCATE 18,20+J%*4-3: PRINT " ";CHR$(248);" "
6245 NEXT
6250 COLOR 7,0
6255 FOR I%=1 TO HANG*44:NEXT
6260 '-----------------------------
6265 LOCATE 2,20+(LESSON*4)-3: PRINT S$; CHR$(218);CHR$(196);CHR$(191)
6270 LOCATE 3,20+(LESSON*4)-3: PRINT S$; CHR$(198);CHR$(205);CHR$(181)
6275 FOR I%=4 TO 16: LOCATE I%,20+(LESSON*4)-3:PRINT CHR$(179);MID$(B$(LESSON),I%-3,1);CHR$(179):NEXT
6280 LOCATE 17,20+(LESSON*4)-3: PRINT S$; CHR$(198);CHR$(205);CHR$(181)
6285 LOCATE 18,20+(LESSON*4)-3: PRINT S$; CHR$(192);CHR$(196);CHR$(217)
6290 FOR I%=1 TO HANG*44:NEXT
6295 '-----------------------------
6300 FOR I%=1 TO 3:PLAY "mbl32o4o5co4bagfedc":NEXT:PLAY"o3cdefgabo4co4l12o5c"
6305 FOR I%=2 TO 4:LOCATE I%,20+(LESSON*4)-3:PRINT S$; "   ":FOR J%=1 TO 80*(I%<4):NEXT:NEXT
6310 LOCATE  9,20+11+LEN(S$)
6315 PRINT S$; CHR$(201);CHR$(205);CHR$(203);STRING$(15,205);CHR$(187);
6320 FOR I%=1 TO 14
6325  OFFSET=0:Q$="   "
6330  IF I%<5 THEN 6350
6335  IF LESSON=3 THEN OFFSET=-1: GOTO 6350
6340  IF LESSON=8 THEN OFFSET=1: GOTO 6350
6345  IF LESSON>3 AND LESSON<8 THEN Q$=""
6350  LOCATE I%+4,20+(LESSON*4)-3+OFFSET:PRINT Q$;
6355  LOCATE I%+9,31:PRINT CHR$(186);" ";CHR$(186);SPC(15);CHR$(186);
6360 NEXT
6365 LOCATE I%+9,20+11+LEN(S$):PRINT S$; CHR$(200);CHR$(205);CHR$(202);STRING$(15,205);CHR$(188);
6370 RETURN
6375 '-----------------------------
6380 LOCATE 12,19+20: PRINT "THE"
6385 LOCATE 14,20+18: PRINT "BUREAU"
6390 LOCATE 16,20+20: PRINT "OF"
6395 LOCATE 18,20+17: PRINT "BUSINESS"
6400 LOCATE 20,20+17: PRINT "PRACTICE"
6405 DELAY%=3:GOSUB 6765:FOR I%=12 TO 20 STEP 2: LOCATE I%,20+14+LEN(S$):PRINT S$; SPC(15):NEXT
6410 LOCATE 15,20+17: PRINT "PRESENTS"
6415 PLAY "l08n32n56
6420 DELAY%=3:GOSUB 6765:LOCATE 15,20+14+LEN(S$):PRINT SPC(15)
6425 LOCATE 12,20+15+LEN(S$): PRINT "SPEED "
6430 LOCATE 14,20+17+LEN(S$): PRINT "READING..."
6435 LOCATE 17,20+19+LEN(S$): PRINT "THE"
6440 LOCATE 19,20+17+LEN(S$): PRINT "COMPUTER"
6445 LOCATE 21,20+18+LEN(S$): PRINT "COURSE"
6450 PLAY "l08n32n56
6455 DELAY%=3:GOSUB 6765:FOR I%=12 TO 21: LOCATE I%,20+14+LEN(S$):PRINT S$; SPC(15):NEXT
6460 LOCATE 13,20+20+LEN(S$): PRINT  " A "
6465 LOCATE 15,20+15+LEN(S$): PRINT  "SPEED READING"
6470 LOCATE 17,20+18+LEN(S$): PRINT  "PROGRAM"
6475 PLAY "l08n32n56
6480 DELAY%=3:GOSUB 6765:FOR I%=12 TO 20 STEP 1: LOCATE I%,20+14+LEN(S$):PRINT SPC(15):NEXT: GOTO 6545
6485 LOCATE 10,37+LEN(S$): PRINT "Copyright"
6490 LOCATE 11,39+LEN(S$): PRINT  "1983"
6495 LOCATE 12,38+LEN(S$): PRINT  STRING$(6,196)
6500 LOCATE 13,35+LEN(S$): PRINT  "The Bureau of"
6505 LOCATE 14,37+LEN(S$): PRINT  "Business": LOCATE 15,37: PRINT "Practice"
6510 LOCATE 17,35+LEN(S$): PRINT  "24 Rope Ferry"
6515 LOCATE 18,39+LEN(S$): PRINT  "Road"
6520 LOCATE 20,37+LEN(S$): PRINT  "Waterford "
6525 LOCATE 21,36+LEN(S$): PRINT  "Connecticut"
6530 LOCATE 22,39+LEN(S$): PRINT  "06386"
6535 PLAY "l08n32n56": DELAY%=3: GOSUB 6765
6540 FOR LN=10 TO 22: LOCATE LN,34+LEN(S$): PRINT "               ": NEXT: GOTO 6605
6545 LOCATE 10,36+LEN(S$): PRINT "Programmed"
6550 LOCATE 11,39+LEN(S$): PRINT  " by "
6555 LOCATE 12,38+LEN(S$): PRINT  STRING$(6,196)
6560 LOCATE 13,36+LEN(S$): PRINT  "Innovative"
6565 LOCATE 14,36+LEN(S$): PRINT  "Programming": LOCATE 15,36:PRINT "Associates"
6570 LOCATE 17,36+LEN(S$): PRINT  "One Airport "
6575 LOCATE 18,39+LEN(S$): PRINT  "Place"
6580 LOCATE 20,37+LEN(S$): PRINT  "Princeton "
6585 LOCATE 21,36+LEN(S$): PRINT  "New  Jersey"
6590 LOCATE 22,39+LEN(S$): PRINT  "08540"
6595 PLAY "l08n32n56": DELAY%=3: GOSUB 6765
6600 FOR LN=10 TO 22: LOCATE LN,34+LEN(S$): PRINT "               ": NEXT: GOTO 6485
6605 LOCATE 16,20+16+LEN(S$): COLOR 0,7:PRINT " WELCOME! ";:COLOR 7,0
6610 FOR I%=1 TO 3:PLAY "mbl32o4cdefgabo5c":NEXT:PLAY"o3o4cbagfedco4l12o5c"
6615 MESSAGE$="Please Press The <SPACE BAR> To Begin.":GOSUB 20:CLS:GOSUB 6065
6620 GOSUB 6905
6625 ' ******************************
6630 GOSUB 6065
6635 LOCATE 4,22: PRINT S$;"Hello, ";READER$;"!  For the next few"
6640 LOCATE 6,22: PRINT S$;"minutes I'm going to show you exactly what"
6645 LOCATE 8,22: PRINT S$;"SPEED READING . . . The Computer Course"
6650 LOCATE 10,22: PRINT S$;"can do for you."
6655 LOCATE 14,22:PRINT S$;"I'll begin by asking you a few simple"
6660 LOCATE 16,22:PRINT S$"questions.  All you have to do is"
6665 LOCATE 18,22:PRINT S$;"TYPE IN THE ANSWER and PRESS <ENTER>,"
6670 LOCATE 20,22:PRINT S$;"just as you did a moment ago."
6690 MESSAGE$="":GOSUB 20
6700 ' ****************************************************
6705 RETURN
6710 '  *****************************************
6715 '					   ||
6720 ' COMMON SUBROUTINES START HERE      \/
6725 ' *****************************************
6730 '--------------- wait for space bar  \/
6760 '--------------- pause for <delay> seconds \/
6765 T$=TIME$:GOT.HERE= FN TIMER(T$)
6770 IF (FN TIMER(T$)-GOT.HERE) < DELAY% THEN 6770
6775 RETURN
6780 '----------------- short pause -- 1 to <pause> \/
6785 FOR I=1 TO PAUSE : NEXT : RETURN
6790 '----------------- get a character \/
6795 AA$="":WHILE AA$="":AA$=INKEY$:WEND:RETURN
6800 RETURN
6805 '--------------- correct answer \/
6810 SOUND 600,1: SOUND 750,1: SOUND 600,2: RETURN
6815 '--------------- incorrect answer \/
6820 PLAY "O0l6f+l4c":RETURN
6825 '--------------- input error \/
6830 SOUND 1800,1:RETURN
6835 '--------------- page turn \/
6840 SOUND 200,2:RETURN
6845 '--------------- read line of input as <A$> \/
6850 A$="":AA$=""
6855 LOCATE ,,1
6860 GOSUB 6795
6865 IF A$=CHR$(13) THEN GOTO 6895
6870 IF AA$=CHR$(13) THEN 6900
6875 IF AA$=CHR$(8) AND LEN(A$)>0 THEN PRINT CHR$(29);" ";CHR$(29);:                 IF LEN(A$)>1 THEN A$=LEFT$(A$,LEN(A$)-1):GOTO 6860 ELSE A$="":GOTO 6860
6880 IF AA$=CHR$(8) THEN GOSUB 6830: GOTO 6860
6885 IF ASC(AA$)<32 THEN GOSUB 6830: GOTO 6860
6890 IF LEN(A$)=MAXLENGTH THEN GOSUB 6830 : GOTO 6860
6895 PRINT AA$; : A$=A$+AA$ : GOTO 6860
6900 LOCATE ,,0 : RETURN
6905 ' GET NAME
6910 LOCATE 7,1:PRINT SPACE$(79);:LOCATE 7,20:PRINT"Please type your first name"
6915 LOCATE 8,1:PRINT SPACE$(79);:X%=25:Y%=8:PROMPT$="and then press <ENTER>:":GOSUB 7045:GOSUB 6080
6920 MAXLENGTH = 20: GOSUB 6850:READER$=A$
6925 IF LEN(READER$) > 0 THEN FOR K% = LEN(READER$) TO 2 STEP -1 : IF MID$(READER$,K%,1) <> " " THEN GOTO 6930 ELSE NEXT
6930 READER$=LEFT$(READER$,K%)
6935 IF READER$="" OR READER$=CHR$(13) OR 0<INSTR(READER$," ") OR 0<>INSTR("0123456789!@#$%^&*()_+=-~`';:/?.>,<",LEFT$(READER$,1)) THEN 6910
6940 ' ******************************
6945 ' *  TRANSLATE READER'S NAME   *
6950 ' ******************************
6955 LR=LEN(READER$): BREADER$=READER$
6960 N$(1)=LEFT$(READER$,1)
6965 IF N$(1) >= "a" AND N$(1) <= "z" THEN N$(1)=CHR$(ASC(N$(1))-32)
6970 FOR J=2 TO LR
6975  N$(J)=MID$(READER$,J,1)
6980  IF N$(J) >= "A" AND N$(J) <= "Z" THEN N$(J)=CHR$(ASC(N$(J))+32)
6985 NEXT J
6990 FOR J=1 TO LR: IF N$(J)="-" OR N$(J)=" " THEN N$(J+1)=CHR$(ASC(N$(J+1))-32)
6995 NEXT
7000 FOR J=1 TO LR: MID$(READER$,J,1)=N$(J): NEXT J
7005 FOR J=1 TO LR
7010  N$(J)=MID$(READER$,J,1): IF N$(J)="-" THEN 7020
7015  IF N$(J) >= "A" AND N$(J) <= "Z" THEN 7020 ELSE N$(J)=CHR$(ASC(N$(J))-32)
7020 NEXT J
7025 FOR J=1 TO LR: MID$(BREADER$,J,1)=N$(J): NEXT J
7030 OKR$="OK, "+READER$+".": OKBR$="OK, "+BREADER$+"."
7035 CLS:GOSUB 6065
7040 RETURN
7045 LOCATE 12,1'          arrow
7050 PRINT"                   <ENTER> is the              ┌────┐
7055 PRINT"                   dark grey key on            │    │
7060 PRINT"                   the right side of           ├────┤
7065 PRINT"                   the keyboard that           │ ──┘│";:LOCATE CSRLIN,POS(0)-5:PRINT CHR$(17)
7070 PRINT"                   looks like this             ├────┤";:LOCATE CSRLIN,POS(0)-18: PRINT CHR$(26)
7075 PRINT"                                               │    │
7080 PRINT"                                               └────┘
7085 RETURN
8000 '==\/ init.questions
8005 S$="                     ":PAUSE=750
8010 CLS:GOSUB 6065:LOCATE 5,1:PRINT S$;"OK. First question.
8020 LOCATE 9,1:PRINT S$;"How many books do you read in an"
8030 LOCATE 11,1:PRINT S$;"average week? (Please count technical
8035 LOCATE 13,1:PRINT S$;"manuals, texts, etc., as books.)
8040 LOCATE 15,1:PRINT S$;"Type in the number: ___ books."
8042 VTAB=15:GOSUB 40000:BOOKS=VAL(A$)
8070 ' ============\' 2nd ?
8072 CLS:GOSUB 6065
8075 LOCATE 7,1:PRINT S$;"Good, ";READER$;" . Now tell me this:"
8080 LOCATE 11,1:PRINT S$;"How many times per week do you read a newspaper?"
8082 LOCATE 13,1:PRINT S$;"(Count Sunday editions as two newspapers.)"
8085 LOCATE 15,1:PRINT S$;"Type in the number: ___"
8090 VTAB=15:GOSUB 40000
8115 NEWSPAPERS=VAL(A$)
8125 ' ============\/ 3rd ?
8130 CLS:GOSUB 6065:LOCATE 6,1:PRINT S$;"What about magazines? How many of them
8135 LOCATE  8,1:PRINT S$;"do you read during the week?"
8140 LOCATE 10,1:PRINT S$;"(Remember to include professional journals,"
8145 LOCATE 12,1:PRINT S$;"technical and trade periodicals, and so on.)"
8150 LOCATE 14,1:PRINT S$;"Type in the number: ___ magazines."
8155 VTAB=14:GOSUB 40000
8166 MAGAZINES=VAL(A$)
8190 ' ============\/ 4th ?
8195 CLS:GOSUB 6065:LOCATE 6,1:PRINT S$;"How many reports and other long documents"
8200 LOCATE 8,1:PRINT S$;"do you read a week?"
8205 LOCATE 12,1:PRINT S$;"Type in the number: ___ reports and documents."
8210 VTAB=12:GOSUB 40000:DOCUMENTS=VAL(A$)
8245 ' ============\/ 5th ?
8250 CLS:GOSUB 6065:LOCATE 5,1:PRINT S$;"One more question, ";READER$;" ."
8255 LOCATE 7,1:PRINT S$;"How many memos and letters (business and"
8260 LOCATE 9,1:PRINT S$;"personal) do you read on the average in"
8265 LOCATE 11,1:PRINT S$;"a week?"
8270 LOCATE 13,1:PRINT S$;"(Include newsletters here, too.)"
8275 LOCATE 15,1:PRINT S$;"Type in the number: ___ letters and memos."
8280 VTAB=15:GOSUB 40000
8300 LETTERS=VAL(A$)
8315 '==========\/calculation page
8320 CLS:GOSUB 6065:LOCATE 5,1:PRINT S$;"Thanks for the input, ";READER$;". Now I'm"
8325 LOCATE 7,1:PRINT S$;"going to use that data to tell you approx-"
8330 LOCATE 9,1:PRINT S$;"imately how many words you read every week."
8360 LOCATE 13,1:PRINT S$;" Then I'm going to add 25% to that figure"
8365 LOCATE 15,1:PRINT S$;"to account for all the cereal boxes, forms,"
8370 LOCATE 17,1:PRINT S$;"signs, and so forth that we all read all"
8380 LOCATE 19,1:PRINT S$;"the time."
8382 GOSUB 51003:AVEWORDS=75000!*BOOKS+10000*NEWSPAPERS+50000!*MAGAZINES+1500*DOCUMENTS+300*LETTERS
8383 AVEWORDS=AVEWORDS*1.25
8384 PRECISE=AVEWORDS:GOSUB 25000:AVEWORDS$=PRECISE$                                          'get # ending          *
8385 MESSAGE$="":GOSUB 20
8386 CLS:GOSUB 6065:LOCATE 9,1:PRINT S$;"OK, now give me just a couple of seconds"
8387 LOCATE 11,1:PRINT S$;"while I perform some quick calculations"
8388 LOCATE 13,1:PRINT S$;"and then . . .":MESSAGE$="":GOSUB 20
8400 '===============\/ tell reader average words
8402  FOR I%=1 TO 3:PLAY "mbl32o4cdefgabo5c":NEXT:PLAY"o3o4cbagfedco4l12o5c"
8405 CLS:GOSUB 6065:LOCATE 4,1:PRINT S$;"Surprise, ";READER$;" ! According to my"
8410 LOCATE 6,1:PRINT S$;"calculations you read about ";AVEWORDS$
8415 LOCATE 8,1:PRINT S$;"words every week."
8420 LOCATE 12,1:PRINT S$;"That's a lot.  Do you have any idea how"
8425 LOCATE 14,1:PRINT S$;"much time it takes you to do all that"
8430 LOCATE 16,1:PRINT S$;"reading every week?"
8435 LOCATE 20,1:PRINT S$;"Let's find out.":GOSUB 20
8440 CLS:LOCATE 1,1:PRINT S$;"OK, ";READER$;". Now comes the fun part."
8445 LOCATE 5,1:PRINT S$;"I'm going to give you a little reading"
8450 LOCATE 7,1:PRINT S$;"test, but don't worry about it.  This"
8455 LOCATE 9,1:PRINT S$;"test doesn't count.  It's only for your"
8460 LOCATE 11,1 :PRINT S$;"benefit.  I want to find out what your"
8465 LOCATE 13,1:PRINT S$;"normal, everyday reading speed is, that's"
8470 LOCATE 15,1:PRINT S$;"all.  Then I'm going to show you how this"
8475 LOCATE 17,1:PRINT S$;"course can increase your reading speed."
8490 MESSAGE$="Press <SPACE BAR> When You Are Ready.":GOSUB 20
8495 RETURN
9000 '============\/RPD'S INTRO
9010 CLS'GOSUB 6065:GOSUB 30:GOSUB 35
9015 'LOCATE 12,5: COLOR 15: PRINT S$;"== RAPID PERCEPTION DRILLS ==":COLOR 7
9020 'GOSUB 20:CLS
9025 ERASE TEXT$: DIM TEXT$(500)
9030 CLS: V1$="visual ": V2$="VISUAL ":P1$="perception": P2$="PERCEPTION"
9032  FOR I%=1 TO 3:PLAY "mbl32o4cdefgabo5c":NEXT:PLAY"o3o4cbagfedco4l12o5c"
9035 LOCATE 7,9: PRINT S$;"The following exercises"
9040 LOCATE 9,14: PRINT S$;"are designed"
9045 LOCATE 11,13: PRINT S$;"to improve your"
9050 LOCATE 13,12:PRINT S$;V1$;P1$
9055 LOCATE 15,19: PRINT S$;"and"
9060 LOCATE 17,7:PRINT S$;"         eye span.         "
9065 FOR I=1 TO 1100: NEXT
9070 FOR J=1 TO 2
9075 LOCATE 13,12:PRINT S$;V2$;P1$
9080 LOCATE 17,7:PRINT S$;"         eye span.         ": GOSUB 9270
9085 LOCATE 13,12:PRINT S$;V1$;P2$
9090 LOCATE 17,7:PRINT S$;"      e y e  s p a n.      ": GOSUB 9270
9095 LOCATE 13,12:PRINT S$;V2$;P1$
9100 LOCATE 17,7:PRINT S$;"   e  y  e   s  p  a  n.   ": GOSUB 9270
9105 LOCATE 13,12:PRINT S$;V1$;P2$
9110 LOCATE 17,7:PRINT S$;"e   y   e    s   p   a   n.": GOSUB 9270
9115 LOCATE 13,12:PRINT S$;V2$;P1$
9120 LOCATE 17,7:PRINT S$;"   e  y  e   s  p  a  n.   ": GOSUB 9270
9125 LOCATE 13,12:PRINT S$;V1$;P2$
9130 LOCATE 17,7:PRINT S$;"      e y e  s p a n.      ": GOSUB 9270
9135 NEXT J
9140 LOCATE 13,12:PRINT S$;V2$;P1$
9145 LOCATE 17,7:PRINT S$;"         eye span.         ": GOSUB 9270
9150 LOCATE 13,12:PRINT S$;V1$;P2$
9155 LOCATE 17,7:PRINT S$;"      e y e  s p a n.      ": GOSUB 9270
9160 LOCATE 13,12:PRINT S$;V2$;P1$
9165 LOCATE 17,7:PRINT S$;"   e  y  e   s  p  a  n.   ": GOSUB 9270
9170 LOCATE 13,12:PRINT S$;V1$;P2$
9175 LOCATE 17,7:PRINT S$;"e   y   e    s   p   a   n.": GOSUB 9270
9180 LOCATE 13,12:PRINT S$;V2$
9185 LOCATE 17,4:PRINT S$;"e    y    e     s    p    a    n.": GOSUB 9270
9190 FOR I=1 TO 7000: NEXT
9192 RETURN
9270 FOR I=1 TO 400: NEXT: RETURN
9998 '================MORE SUBROUTINES \/=====================
9999 '--------------- \/ handle special commands: #,\,&,|,^,!
10000 '
10020 COMM$=LEFT$(TEXT$(LN),1)
10040 SWITCH%=INSTR(SPECIAL$,COMM$)
10050 IF SWITCH% < 1 THEN RETURN
10060 ON SWITCH% GOSUB 10100,10200,10300,10400,10500,10600,10700
10093 RETURN
10099 '----- `!' command for video options \/ -----
10100 LOCATE VPOS,20:CLR1%=7:CLR2%=0:CLR$=MID$(TEXT$(LN),2,1)
10110 IF CLR$="U" OR CLR$ = "u" THEN CLR1%=1
10115 IF CLR$="H" OR CLR$ = "h" THEN CLR1%=15
10120 IF CLR$="X" OR CLR$ = "x" THEN CLR1%=9
10125 IF CLR$="R" OR CLR$ = "r" THEN CLR1%=0:CLR2%=7
10130 IF CLR$="F" OR CLR$ = "f" THEN CLR1%=23
10135 I%=3:WHILE MID$(TEXT$(LN),I%,1)<>"@":NUM$=NUM$+MID$(TEXT$(LN),I%,1):I%=I%+1:WEND:LEN.NUM%=I%+1:POINTER%=LEN.NUM%
10142 FOR I%=1 TO LEN(NUM$)
10143 IF MID$(NUM$,I%,1)="," THEN NUMCOMMA%=NUMCOMMA%+1:NUM$(NUMCOMMA%) = MID$(NUM$,I%-2,2)
10144 NEXT
10145 NUMCLR% = (NUMCOMMA%+1)/2:NUM$(NUMCLR%*2)=RIGHT$(NUM$,2)
10147 FOR I% = 1 TO NUMCOMMA%+1:NUM%(I%)=VAL(NUM$(I%)):NEXT:GOTO 10160
10151 COLOR 7,0:FOR I% = POINTER% TO LEN.NUM%+NUM%(G%)-2:PRINT MID$(TEXT$(LN),I%,1);:NEXT
10152 COLOR CLR1%,CLR2%:FOR I%=LEN.NUM%-1+NUM%(G%) TO LEN.NUM%-1+NUM%(G%) + NUM%(G%+1)-1:PRINT MID$(TEXT$(LN),I%,1);:NEXT:POINTER%=I%:RETURN
10160 FOR G% = 1 TO (2*NUMCLR%) STEP 2:GOSUB 10151:NEXT
10165 COLOR 7,0: FOR I% = POINTER% TO LEN(TEXT$(LN)):PRINT MID$(TEXT$(LN),I%,1);:NEXT
10175 FOR I% = 1 TO NUMCOMMA% + 1 : NUM$(I%)="":NUM%(I%)=0:NEXT
10177 CLR$="":POINTER%=0:NUMCOMMA%=0:NUM$="":LEN.NUM%=0:CLR1%=7:CLR2%=0:COMM$=""
10190 RETURN
10499 '----- `&' command for READER \/ -----
10500 Z%=INSTR(TEXT$(LN),"READER")
10520 LOCATE VPOS,20:PRINT MID$(TEXT$(LN),2,Z%-2);READER$;:PRINT MID$(TEXT$(LN),Z%+6);
10590 RETURN
10599 '----- `|' command for pauses \/ -----
10600 DELAY%=VAL(MID$(TEXT$(LN),3,1)):GOSUB 29:LOCATE VPOS,20:PRINT MID$(TEXT$(LN),4);:RETURN
10699 '----- `\' command for GWPM \/ -----
10700 Z%=INSTR(TEXT$(LN),"GWPM")
10720 LOCATE VPOS,20:PRINT MID$(TEXT$(LN),3,Z%-4);GWPM;:PRINT MID$(TEXT$(LN),Z%+5);
10799 RETURN
12000 '==================\/ GWPM from init reading
12120 CLS:LOCATE 2,20:PRINT"Good, "READER$"!  You read that selection"
12122 LOCATE 4,20:PRINT"at a rate of "MID$(STR$(GWPM),2)" words per minute."
12123 FOR I%=1 TO 3:PLAY "mbl32o4cdefgabo5c":NEXT:PLAY"o3o4cbagfedco4l12o5c"
12124 LOCATE 6,20:PRINT"Believe it or not, you can read even"
12126 LOCATE 8,20:PRINT"faster than that, and in a couple of"
12128 LOCATE 10,20:PRINT"minutes I'm going to prove it to you."
12130 LOCATE 13,20:PRINT"But first, I have to ask you another"
12132 LOCATE 15,20:PRINT"very important question."
12133  MESSAGE$="Please Press <SPACE BAR> to Continue."
12134 LOCATE 25,FNCENTER(LEN(MESSAGE$)):PRINT MESSAGE$;:MESSAGE$=""
12135 GOSUB 20 :RETURN
13000 '==\/ quest after tmedread
13005 S$="                   ":PAUSE=550
13010 CLS:LOCATE 5,20:PRINT"Now, "READER$", please don't think I'm"
13020 LOCATE 7,20:PRINT"being nosy or indiscreet, but I have to get"
13030 LOCATE 9,20:PRINT"rather personal. Don't worry, I won't tell"
13050 LOCATE 11,20:PRINT "anybody your answer.  (Besides, I forget"
13060 LOCATE 13,20:PRINT "everything I learn once I'm turned off.)"
13105 LOCATE 15,1:PRINT S$;"Here's the question:  How old are you?"
13110 LOCATE 17,1:PRINT S$;"Type your age: ___ "
13115 LOCATE 21,1:PRINT S$;"Then press <ENTER> ."
13120 LOCATE 17,35,,4,12:MAXLENGTH=3:GOSUB 100:LOCATE,,0,7,7
13125 LOCATE 17,35:PRINT SPACE$(28)
13130 B$="qwertyuiop[]`';lkjhgfdsa\zxcvbnm,./!@#$%^&*()_+=-"
13131 FOR JJ=1 TO LEN (A$):IF INSTR(B$,MID$(A$,JJ,1)) THEN WRONG=1:GOTO 13133 ELSE WRONG=0
13132  NEXT
13133  IF (VAL(A$)<1 OR VAL(A$)>120 OR  WRONG) THEN GOSUB 90:LOCATE 17,35:PRINT "___":GOTO 13120
13135 AGE=VAL(A$)
13140 LOCATE 17,35:PRINT A$
13145 GOSUB 35
13150 '============\/ next screen
13155 CLS:LOCATE 4,1:PRINT S$;"Thank you, ";READER$;" ."
13160 LOCATE 8,1:PRINT S$;"Let me explain why I had to ask you that"
13165 LOCATE 10,1:PRINT S$;"question."
13170 LOCATE 14,1:PRINT S$;"You see, I'm about to calculate the"
13175 LOCATE 16,1:PRINT S$;"amount of time you will spend reading"
13180 LOCATE 18,1:PRINT S$;"during the rest of your life."
13185 MESSAGE$="PRESS <SPACE BAR> FOR THE ANSWER.":GOSUB 20
13188 GOSUB 800'**********find yrs.left
13190 '================\/ calculate lifetime of reading
13193 AVE.MINS=AVEWORDS/GWPM                           '      *
13194 TOT.MINS=YRS.LEFT* AVE.MINS*52
13195 TOT.HOURS=TOT.MINS/60:PRECISE=TOT.HOURS:GOSUB 25000:TOT.HOURS$=PRECISE$                                          'get # ending          *
13196 TOT.DAYS=TOT.HOURS/16:PRECISE=TOT.DAYS:GOSUB 25000:TOT.DAYS$=PRECISE$:          TOT.YRS=TOT.DAYS/360:PRECISE=TOT.YRS:GOSUB 25000:TOT.YRS$=PRECISE$                                                        '             *
13197 TOT.YRS=(INT(TOT.YRS*100))/100'                         *
13198 'MONEY.SAVED=(INT(5*TOT.HOURS* .2*10))/1000'               *
13199 '******************
13200 CLS:LOCATE 3,1:PRINT S$;"Here's the answer:"
13205 LOCATE 6,1:PRINT S$;"Based on your present reading speed and"
13210 LOCATE 8,1:PRINT S$;"the data you've supplied, I estimate"
13215 LOCATE 10,1:PRINT S$;"that you will spend as many as ";TOT.HOURS$;
13217 LOCATE 12,1:PRINT S$;"hours during your remaining lifetime reading."
13220 LOCATE 16,1:PRINT S$;"That's ";TOT.DAYS$;" days!":LOCATE 18,1:PRINT S$;"Or ";TOT.YRS;" YEARS!"
13223 YRS.SAVE$=STR$(TOT.YRS*0.2)
13224  MONEY.SAVED=5*TOT.HOURS* 0.2
13225 GOSUB 20
13230 '============\/ reader is worth ...
13235 CLS:LOCATE 1,1:PRINT S$;"Now, ";READER$;", just imagine that you"
13240 LOCATE 3,1:PRINT S$;"could increase your reading speed by 20%."
13245 LOCATE 5,1:PRINT S$;"That would mean you could save as many as"
13250 LOCATE 7.1:PRINT SPACE$(LEN(S$)-1);LEFT$(YRS.SAVE$,5);" years of your life.  And if you value"
13255 LOCATE 9,1:PRINT S$;"your time, that means you'd be saving"
13257 PRECISE=MONEY.SAVED:GOSUB 25000:MONEY.SAVED$=PRECISE$
13260 LOCATE 11,1:PRINT S$;"at least $";MONEY.SAVED$;" over the course of your"
13265 LOCATE 13,1:PRINT S$;"life (and that's based on a low rate of"
13270 LOCATE 15,1:PRINT S$;"just $5.00 per hour)."
13275 LOCATE 17,1:PRINT S$;"And all this just by learning to read"
13280 LOCATE 19,1:PRINT S$;"a little faster than you read now!"
13290 GOSUB 20
13300 '=========\/ next screen
13305 CLS:LOCATE 3,1:PRINT S$;"Well, ";READER$;", I've got some good news"
13310 LOCATE 5,1:PRINT S$;"for you."
13315 LOCATE 9,1:PRINT S$;"If you want to learn to read faster"
13320 LOCATE 11,1:PRINT S$;"and understand more of what you read,"
13325 LOCATE 13,1:PRINT S$;"SPEED READING . . . The Computer Course"
13330 LOCATE 15,1:PRINT S$;"is designed especially for you."
13340 MESSAGE$="PRESS <SPACE BAR> TO FIND OUT WHY." :GOSUB 20
13345 CLS:LOCATE 5,1:PRINT S$;"Coming up next on the screen will be a"
13350 LOCATE 7,1:PRINT S$;"sample of just some of the special"
13355 LOCATE 9,1:PRINT S$;"speed reading exercises that are provided"
13360 LOCATE 11,1:PRINT S$;"in this course to help you improve your"
13365 LOCATE 13,1:PRINT S$;"speed and comprehension."
13370 LOCATE 17,1:PRINT S$;"Watch the screen carefully now, ";READER$;"."
13375 LOCATE 19,1:PRINT S$;"The Rapid Perception Drills are about"
13380 LOCATE 21,1:PRINT S$;"to begin!"
13385 MESSAGE$="PRESS <SPACE BAR> TO BEGIN EXERCISES.":GOSUB 20
13390 RETURN
14000 '
14005 S$="                    "
14015 CLS:PRINT S$;"  In the first drill, ";READER$;", letters,":PRINT
14017 PRINT S$;"words, and phrases will appear on the":PRINT
14020 PRINT S$;"screen and disappear in a fraction of a":PRINT
14030 PRINT S$;"second.  They will then reappear so you ":PRINT
14035 PRINT S$;"can check that you read them correctly.":PRINT
14040 PRINT S$;"Focus your eyes on the square (";CHR$(254);")";" which will":PRINT
14045 PRINT S$;"appear in the center of the screen.  This":PRINT
14050 PRINT S$;"exercise will develop peripheral vision,":PRINT
14055 PRINT S$;"a necessary step in the speed reading":PRINT
14060 PRINT S$;"process."
14065 MESSAGE$="Press <SPACE BAR> To Begin.":GOSUB 20
14070 CLS: LETTERS=3
14075 COL=16: SPC$="   ": LOOPLIM=1: SPEED=44
14080 GOSUB 14110
14085 COL=15:SPC$="  ": LETTERS=4:LOOPLIM=1
14090 GOSUB 14140
14095 COL=5: SPC$="       ": LETTERS=6: LOOPLIM=1
14100 GOSUB 14140
14105 GOTO 14265
14109 SOUND 500,1
14110 '-------------------------------
14115 '-    PRINT RADNOM LETTERS     -
14120 '-------------------------------
14125 FOR SEC=1 TO 1100: NEXT
14130 SOUND 499,1:LOCATE 11,20+LEN(S$): PRINT CHR$(254)
14135 FOR SEC=1 TO 1100: NEXT
14140 FOR J=1 TO LOOPLIM
14145 FOR Q=1 TO 5: R(Q+5)=R(Q): R(Q)=32: NEXT
14150 FOR Q=1 TO LETTERS
14155  R2=INT(26*RND)+65
14160 IF R2=65 OR R2=69 OR R2=73 OR R2=79 OR R2=85 THEN 14155
14165   FOR Q2=1 TO Q
14170    IF R2=R(Q2) OR R2=R(Q2+5) THEN 14155
14175   NEXT Q2
14180  R(Q)=R2
14185 NEXT Q
14190 RNDSTR$=""
14195 FOR Q=1 TO 5
14200  RNDSTR$=RNDSTR$+CHR$(R(Q))+SPC$
14205 NEXT Q
14210 LOCATE 12,COL: PRINT S$;RNDSTR$
14215 FOR SEC=1 TO SPEED: NEXT
14220 LOCATE 12,COL: PRINT S$;SPC(50)
14225 FOR SEC=1 TO 1100: NEXT
14230 LOCATE 12,COL: PRINT S$;RNDSTR$
14235 FOR SEC=1 TO 1100: NEXT
14240 LOCATE 12,COL: PRINT S$;SPC(50)
14245 FOR SEC=1 TO 1100: NEXT
14250 NEXT J
14255 RETURN
14260 ' ******************************
14265 CLS
14270 LOCATE 8,1
14275 PRINT S$;"Those letters were flashed at 1/4 second.": PRINT
14280 PRINT S$;"How was that, ";READER$;" ? Would you like":PRINT
14285 PRINT S$;"to try some words and phrases flashed   ": PRINT
14290 PRINT S$;"faster or slower?  ": PRINT
14295 PRINT S$;"       1.faster ": PRINT
14300 PRINT S$;"       2.slower": PRINT
14305 LOCATE 21,1: PRINT S$;"Type in the number of your selection: ___"
14310 IK$=INKEY$: IF IK$<>"" THEN 14310
14315 IK$=INKEY$: IF IK$="" THEN 14315
14320 IF IK$="1" THEN COL=1: SPEED2=444: GOTO 14335
14325 IF IK$="2" THEN COL=16: SPEED2=222: GOTO 14335
14330 LOCATE 18,1: PRINT S$;"     Please enter only 1 or 2     ": GOTO 14315
14335 LOCATE 21,59:PRINT " "; IK$;"    "
14340 LOCATE 23,1: PRINT S$;"         GET READY TO BEGIN.         "
14345 FOR I=1 TO 4400: NEXT
14350 ' ******************************
14355 '==========\/data
14370 GOTO 14430
14375 ' ******************************
14380 CLS
14385 '-----------------------
14390 CLS: LOCATE 8,1
14395 'LOOPLIM=VAL(TEXT$(Q)): HANG=FNHANG(VAL(TEXT$(Q+1))): HANG=HANG-(HANG*(ADJUST/100))
14400 LOOPLIM=1:HANG=300'VAL(TEXT$(JJ)): I=VAL(TEXT$(Q+1))/4: HANG=(I-(I*SPEED))*1100
14405 'PRINT TEXT$(Q),TEXT$(Q+1)
14410 FOR I=1 TO LOOPLIM: PRINT S$;TEXT$(I): PRINT: NEXT
14415 FOR I=1 TO HANG: NEXT: CLS
14420 Q=Q+LOOPLIM+2
14425 RETURN
14430 '---------------------------
14440 RESTORE 21000: FOR JJ=1 TO 9:READ TEXT$(JJ):NEXT
14450 CLS:' FOR I=1 TO 1100:NEXT:LOCATE 10,20+LEN(S$):PRINT CHR$(254):FOR I=1 TO 1100:NEXT
14455 REM
14460 GOSUB 14475
14465 RETURN '======\/ to main code
14470 '--------------------------
14475  LOOPLIM=9
14480 CLS: FOR I=1 TO 1100:NEXT:LOCATE 10,20+LEN(S$):SOUND 500,1:PRINT CHR$(254):FOR I=1 TO 1100:NEXT
14485 FOR J=1 TO 9
14490  TL=LEN(TEXT$(J))
14495  IF TL/2=INT(TL/2) THEN TL=TL-1
14500  COL=20-TL/2+LEN(S$)
14505  LOCATE 11,COL: PRINT TEXT$(J): FOR I=1 TO SPEED: NEXT
14510  LOCATE 11,COL: PRINT SPC(TL+1):  FOR I=1 TO 1100: NEXT
14515  LOCATE 11,COL: PRINT TEXT$(J): FOR I=1 TO 1100: NEXT
14520  LOCATE 11,COL: PRINT SPC(TL+1):  FOR I=1 TO 1100: NEXT
14525 NEXT J
14530 RETURN
14999 ' ------------ eye movement exercises \/
15000 CLS
15020 DELAY%=(NUMWORDS%/(NWPM/60))/NUMSCREENS%:LN=LN+1:PAUSE=DELAY%*1139/(NUMLNS%/NUMSCREENS%)
15030 LN=FILEPOS:VPOS=1
15040 ' top of loop
15050 L%=INSTR(TEXT$(LN),"/"):IF L%>0 THEN LOCATE VPOS,20:PRINT MID$(TEXT$(LN),1,L%-1);:GOSUB 35:LOCATE VPOS,20:PRINT SPACE$(L%-1);:LOCATE VPOS,40:PRINT MID$(TEXT$(LN),L%+1);:GOSUB 35:LOCATE VPOS,40:PRINT SPACE$(LEN(TEXT$(LN))-L%);
15060 IF TEXT$(LN)="" THEN VPOS=VPOS-1
15070 IF TEXT$(LN) <> "STOP" AND TEXT$(LN)<>"END" THEN VPOS=VPOS+2:LN=LN+1:GOTO 15040
15080 IF TEXT$(LN)="STOP" THEN LN=LN+1:VPOS=1:GOTO 15040
15090 IF TEXT$(LN)="END" THEN 15100 ELSE GOTO 15040
15100 FILEPOS=LN+1:RETURN
16000 'ending
16005 'GOSUB 3
16010 COLOR 7,0:KEY OFF:CLS
16015 GOTO 16070
16020  IF HEADER$="" THEN HEADER$="Speed Reading . . . The Computer Course"
16025  LOCATE 1,1:COLOR 0,7:PRINT SPACE$(FNCENTER%(HEADER$));" ";HEADER$;" ";:     FOR Q%=POS(0) TO 79:PRINT " ";:NEXT :PRINT " ";:COLOR 7,0
16030 RETURN
16035  LOCATE Y%,X%:PRINT PROMPT$;" ";:RETURN
16040 '----------------------------
16045 CLS: LOCATE 1,1
16050 PRINT S$; S$;:COLOR 0,7:PRINT S$; " SPEED READING . . . THE COMPUTER COURSE":COLOR 7,0
16055 PRINT S$;:PRINT S$; S$;SPC(9);"A Speed Reading Course":COLOR 7:PRINT S$;
16060 RETURN
16065 '----------------------------
16070 B$(1)="DICKENS      ":B$(2)="MICHENER     ":B$(3)="STEINBECK    ":B$(4)="MELVILLE     "
16075 B$(5)="HEMINGWAY    ":B$(6)="HAWTHORNE    ":B$(7)="WHITMAN      ":B$(8)="THOREAU      "
16080 B$(9)="SPEED READING":B$(10)="DICKINSON    "
16085 '-----------------------------
16090 LESSON=9:'HANG=45
16095 GOSUB 16125
16100 LESSON=0:'HANG=10
16105 GOTO 16500'title is now "thankyou
16110 '*****************************
16115 '*        BOOK SHELF         *
16120 '*****************************
16125 CLS
16130 LOCATE ,,0
16135 S$=""
16140 LOCATE 19,21:PRINT STRING$(39,176)
16145 LOCATE 20,21:PRINT SPC(4);STRING$(3,176);SPC(25);STRING$(3,176);
16150 FOR I%=1 TO HANG*15:NEXT
16155 '-----------------------------
16160 COLOR 0,7
16165 FOR J%=1 TO 10
16170 PLAY "l36mbn"+MID$(STR$(J%+30),2)
16175 LOCATE 2,20+J%*4-3:PRINT STRING$(3,223);
16180 LOCATE 3,20+J%*4-3: PRINT STRING$(3,205);
16185 FOR I%=1 TO 14:LOCATE 3+I%,20+J%*4-3: PRINT " ";MID$(B$(J%),I%,1);" ";CHR$(219):NEXT
16190 LOCATE 17,20+J%*4-3: PRINT STRING$(3,205)
16195 LOCATE 18,20+J%*4-3: PRINT " ";CHR$(248);" "
16200 NEXT
16205 COLOR 7,0
16210 FOR I%=1 TO HANG*44:NEXT
16215 '-----------------------------
16220 LOCATE 2,20+(LESSON*4)-3: PRINT S$; CHR$(218);CHR$(196);CHR$(191)
16225 LOCATE 3,20+(LESSON*4)-3: PRINT S$; CHR$(198);CHR$(205);CHR$(181)
16230 FOR I%=4 TO 16: LOCATE I%,20+(LESSON*4)-3:PRINT CHR$(179);MID$(B$(LESSON),I%-3,1);CHR$(179):NEXT
16235 LOCATE 17,20+(LESSON*4)-3: PRINT S$; CHR$(198);CHR$(205);CHR$(181)
16240 LOCATE 18,20+(LESSON*4)-3: PRINT S$; CHR$(192);CHR$(196);CHR$(217)
16245 FOR I%=1 TO HANG*44:NEXT
16250 '-----------------------------
16255 FOR I%=1 TO 3:PLAY "mbl32o4o5co4bagfedc":NEXT:PLAY"o3cdefgabo4co4l12o5c"
16260 FOR I%=2 TO 4:LOCATE I%,20+(LESSON*4)-3:PRINT S$; "   ":FOR J%=1 TO 80*(I%<4):NEXT:NEXT
16265 LOCATE  9,20+11+LEN(S$)
16270 PRINT S$; CHR$(201);CHR$(205);CHR$(203);STRING$(15,205);CHR$(187);
16275 FOR I%=1 TO 14
16280  OFFSET=0:Q$="   "
16285  IF I%<5 THEN 16305
16290  IF LESSON=3 THEN OFFSET=-1: GOTO 16305
16295  IF LESSON=8 THEN OFFSET=1: GOTO 16305
16300  IF LESSON>3 AND LESSON<8 THEN Q$=""
16305  LOCATE I%+4,20+(LESSON*4)-3+OFFSET:PRINT Q$;
16310  LOCATE I%+9,31:PRINT CHR$(186);" ";CHR$(186);SPC(15);CHR$(186);
16315 NEXT
16320 LOCATE I%+9,20+11+LEN(S$):PRINT S$; CHR$(200);CHR$(205);CHR$(202);STRING$(15,205);CHR$(188);
16325 RETURN
16500 LOCATE 14,20+18: PRINT "THANK"
16505 LOCATE 16,20+19: PRINT "YOU"
16510 MESSAGE$="PRESS <SPACE BAR> TO EXIT PROGRAM.":GOSUB 20:CLS:NEW
20000 '============\/data
20100 '============\/mortality data
20105 DATA 62.01,61.03,60.05,59.08,58.10
20110 DATA 57.12,56.15,65.17,54.20,53.22
20115 DATA 52.25,51.28,50.31,49.33,48.36
20120 DATA 47.40,46.43,45.46,44.50,43.53
20125 DATA 42.57,41.61,40.65,39.70,38.75
20130 DATA 37.79,36.85,35.90,34.96,34.03
20135 DATA 33.10,32.18,31.27,30.37,29.48
20140 DATA 28.60,27.72,26.86,26.01,26.16
20145 DATA 24.33,23.50,22.68,21.87,21.07
20150 DATA 20.28,19.50,18.72,17.95,17.20
20155 DATA 16.45,15.72,15.00,14.30,13.60
20160 DATA 12.93,12.27,11.62,11.00,10.39
20165 DATA 9.79,9.22,8.67,8.14,7.62
20170 DATA 7.13,6.66,6.21,5.78,7.37
20175 DATA 4.99
21000 DATA fox,depend,hidden,parliament,exaggerate
21100 DATA anonymous benefactor,common misunderstanding,forwarding address,decaffeinated coffee
25000 '============\/ figure ending expression
25005 PRECISE=INT(PRECISE)
25010 PRECISE$=STR$(PRECISE)
25015 IF LEN(PRECISE$)>=8 THEN ENDING$=",000,000":PRECISE=(INT(PRECISE/(1000000!)+0.5)):GOTO 25100
25022 IF LEN(PRECISE$)>=5 THEN ENDING$=",000":PRECISE=(INT(PRECISE/(1000)+0.5)):GOTO 25100
25035 IF LEN (PRECISE$)<5 THEN ENDING$=""
25100 PRECISE$=STR$(PRECISE)+ENDING$
29999 RETURN
30000 '==========\/ speed reading description
30002 PAUSE=1500:S$="                    "
30005 CLS:LOCATE 1,1:PRINT S$;"OK, ";READER$;".  Now that you've sampled
30010 LOCATE 3,1:PRINT S$;"some of the eye movement exercises, look"
30015 LOCATE 5,1:PRINT S$;"at some of the other special features of"
30020 LOCATE 7,1:PRINT S$;"SPEED READING . . . The Computer Course:"
30025 GOSUB 35:LOCATE 9,1:PRINT S$;"--> interesting practice readings"
30030 PAUSE=500:GOSUB 35:LOCATE 11,1:PRINT S$;"--> challenging comprehension tests"
30035 GOSUB 35:LOCATE 13,1:PRINT S$;"--> more eye exercises and drills"
30040 GOSUB 35:LOCATE 15,1:PRINT S$;"--> instruction in speed reading fundamentals"
30045 GOSUB 35:LOCATE 17,1:PRINT S$;"--> survey of your present reading habits"
30050 GOSUB 35:LOCATE 21,1:PRINT S$;"And there's more . . ."
30060 MESSAGE$="Press <SPACE BAR> And See.":GOSUB 20
30065 '==\/ next screen
30070 CLS:LOCATE 1,1:PRINT S$;"This course also includes these exciting"
30075 LOCATE 3,1:PRINT S$;"features:":PAUSE =1500:GOSUB 35
30080 LOCATE 7,1:PRINT S$;"--> a 128-page workbook with charts and"
30085 LOCATE 9,1:PRINT S$;"    graphs to record your progress"
30090 PAUSE =500:GOSUB 35:LOCATE 11,1:PRINT S$;"--> a unique program (the Magic Converter)"
30095 LOCATE 13,1:PRINT S$;"    which allows you to test your reading"
30100 LOCATE 15,1:PRINT S$;"    speed on anything you want to read--"
30105 LOCATE 17,1:PRINT S$;"    right now and for years to come."
30110 GOSUB 35:LOCATE 20,1:PRINT S$;"Next up--a complete list of lesson topics."
30115 MESSAGE$="PRESS <SPACE BAR> FOR MENU OF LESSONS.":GOSUB 20
30116 '==\/lesson1
30117 X$=" SPEED READING . . . The Computer Course "
30119 GOSUB 17
30120 CLS:LOCATE 1,FNCENTER%(X$):COLOR 0,15:PRINT X$;:COLOR 7,0
30122 X$="LESSON ONE: PRINCIPLES OF SPEED READING"
30125 LOCATE 5,FNCENTER%(X$):PRINT X$;
30130 LOCATE 9,1:PRINT S$;"Find out how you can read faster--and"
30135 LOCATE 11,1:PRINT S$;"smarter--in just a short time.  Learn the "
30140 LOCATE 13,1:PRINT S$;"fundamental speed reading techniques you "
30145 LOCATE 15,1:PRINT S$;"need to know in order to increase your "
30150 LOCATE 17,1:PRINT S$;"reading speed and discover how the unique"
30155 LOCATE 19,1:PRINT S$;"capabilities of the computer can help"
30160 LOCATE 21,1:PRINT S$;"you master them."
30165 GOSUB 20
30170 '==\/lesson2
30175 X$=" SPEED READING . . . The Computer Course "
30180 CLS:LOCATE 1,FN CENTER%(X$)::COLOR 0,15:PRINT X$;:COLOR 7,0
30185 X$="LESSON TWO: READING HABIT SURVEY"
30190 LOCATE 5,FN CENTER%(X$):PRINT X$;
30195 LOCATE 9,1:PRINT S$;"This computerized survey of your reading"
30200 LOCATE 11,1:PRINT S$;"skills will tell you in minutes exactly "
30205 LOCATE 13,1:PRINT S$;"which reading habits you need to acquire"
30210 LOCATE 15,1:PRINT S$;"and which ";CHR$(34);"bad";CHR$(34);" habits are holding you "
30215 LOCATE 17,1:PRINT S$;"back and keeping you from reading faster."
30220 GOSUB 20
30225 '==\/lesson3
30230 X$=" SPEED READING . . . The Computer Course "
30235 CLS:LOCATE 1,FN CENTER%(X$)::COLOR 0,15:PRINT X$;:COLOR 7,0
30240 X$="LESSON THREE: READ FOR MAIN IDEAS"
30245 LOCATE 5,FN CENTER%(X$):PRINT X$;
30250 LOCATE 9,1:PRINT S$;"Train yourself to focus instantly on the"
30255 LOCATE 11,1:PRINT S$;"main ideas in any reading matter.  Improve"
30260 LOCATE 13,1:PRINT S$;"your reading speed and comprehension by"
30265 LOCATE 15,1:PRINT S$;"learning to analyze paragraph structure,"
30270 LOCATE 17,1:PRINT S$;"read phrases not individual words, and"
30275 LOCATE 19,1:PRINT S$;"spot the key signal words that unlock the"
30280 LOCATE 21,1:PRINT S$;"meaning of sentences at a glance."
30285 GOSUB 20
30290 '==\/lesson4
30295 X$=" SPEED READING . . . The Computer Course "
30300 CLS:LOCATE 1,FN CENTER%(X$)::COLOR 0,15:PRINT X$;:COLOR 7,0
30305 X$="LESSON FOUR: PREREAD WITH A PURPOSE"
30310 LOCATE 5,FN CENTER%(X$):PRINT X$;
30315 LOCATE 9,1:PRINT S$;"Find out how prereading can save you an"
30320 LOCATE 11,1:PRINT S$;"enormous amount of time and effort.  This"
30325 LOCATE 13,1:PRINT S$;"vital speed reading technique allows you"
30330 LOCATE 15,1:PRINT S$;"to get the overall picture quickly and"
30335 LOCATE 17,1:PRINT S$;"then zero in on the important material."
30340 LOCATE 19,1:PRINT S$;"Learn how to do it in this lesson."
30345 GOSUB 20
30350 '==\/lesson5
30355 X$=" SPEED READING . . . The Computer Course "
30360 CLS:LOCATE 1,FN CENTER%(X$)::COLOR 0,15:PRINT X$;:COLOR 7,0
30365 X$="LESSON FIVE: SKIM FOR SPEED"
30370 LOCATE 5,FN CENTER%(X$):PRINT X$;
30375 LOCATE 9,1:PRINT S$;"Everyone knows that skimming is one way"
30380 LOCATE 11,1:PRINT S$;"to read faster.  But do you know how to"
30385 LOCATE 13,1:PRINT S$;"get the most out of skimming?  Do"
30390 LOCATE 15,1:PRINT S$;"you know when to skim and when to slow"
30395 LOCATE 17,1:PRINT S$;"down?  Do you know how to skim for main"
30400 LOCATE 19,1:PRINT S$;"ideas and how to skim for details?"
30405 LOCATE 21,1:PRINT S$;"Learn how in this lesson."
30410 GOSUB 20
30415 '==\/lesson6
30420 X$=" SPEED READING . . . The Computer Course "
30425 CLS:LOCATE 1,FN CENTER%(X$)::COLOR 0,15:PRINT X$;:COLOR 7,0
30430 X$=" LESSON SIX: EXPLORE PATTERN & STRUCTURE "
30435 LOCATE 5,FN CENTER%(X$):PRINT X$;
30440 LOCATE 9,1:PRINT S$;"Learn to read any piece of writing faster,"
30445 LOCATE 11,1:PRINT S$;"with better comprehension, by understanding"
30450 LOCATE 13,1:PRINT S$;"its structure.  This lesson teaches you"
30455 LOCATE 15,1:PRINT S$;"to pick out the five basic writing patterns."
30460 LOCATE 17,1:PRINT S$;"Then it shows you why recognizing these"
30465 LOCATE 19,1:PRINT S$;"patterns will increase your reading speed"
30470 LOCATE 21,1:PRINT S$;"and proficiency."
30475 GOSUB 20
30480 '==\/lesson7
30485 X$=" SPEED READING . . . The Computer Course "
30490 CLS:LOCATE 1,FN CENTER%(X$)::COLOR 0,15:PRINT X$;:COLOR 7,0
30495 X$="LESSON SEVEN: IMPROVE RETENTION & RECALL"
30500 LOCATE 5,FN CENTER%(X$):PRINT X$;
30505 LOCATE 9,1:PRINT S$;"Discover why you forget information"
30510 LOCATE 11,1:PRINT S$;"you read and find out exactly how to"
30515 LOCATE 13,1:PRINT S$;"improve your retention and recall skills"
30520 LOCATE 15,1:PRINT S$;"by following five basic memory rules."
30525 GOSUB 20
30530 '==\/lesson8
30535 X$=" SPEED READING . . . The Computer Course "
30540 CLS:LOCATE 1,FN CENTER%(X$)::COLOR 0,15:PRINT X$;:COLOR 7,0
30545 X$="LESSON EIGHT: EXTEND YOUR READING SKILLS"
30550 LOCATE 5,FN CENTER%(X$):PRINT X$;
30555 LOCATE 9,1:PRINT S$;"See how it all comes together and find"
30560 LOCATE 11,1:PRINT S$;"out how you can use your newly acquired"
30565 LOCATE 13,1:PRINT S$;"skills, no matter what you're reading."
30570 LOCATE 15,1:PRINT S$;"Let the Magic Converter program extend"
30575 LOCATE 17,1:PRINT S$;"your skills for years to come by allowing"
30580 LOCATE 19,1:PRINT S$;"you to measure your reading speed for"
30585 LOCATE 21,1:PRINT S$;"anything you ever choose to read."
30590 GOSUB 20
30595 '==\/ next screen
30596 X$=" SPEED READING . . . The Computer Course "
30597 CLS:LOCATE 1,FN CENTER%(X$)::COLOR 0,15:PRINT X$;:COLOR 7,0
30600 LOCATE 12,1:PRINT S$;"All this--and much more--in just eight"
30605 LOCATE 14,1:PRINT S$;"easy and stimulating lessons!"
30610 GOSUB 20
30620 '==\/last screen prior art
30625 CLS:LOCATE 1,1:PRINT S$;"OK, ";READER$;".  Enough talk.  Now for some"
30630 LOCATE 3,1:PRINT S$;"ACTION!  I'm going to prove to you how"
30635 LOCATE 5,1:PRINT S$;"this course will help you to increase your"
30640 LOCATE 7,1:PRINT S$;"reading speed AND improve your comprehension."
30645 LOCATE 11,1:PRINT S$;"Coming up next on the screen is a short"
30650 LOCATE 13,1:PRINT S$;"reading test.  I'll advance the screens"
30655 LOCATE 15,1:PRINT S$;"for you this time.  All you have to do is"
30665 LOCATE 17,1:PRINT S$;"read.  So, sit back, relax, and when you're ready . . ."
30670 MESSAGE$="PRESS <SPACE BAR> TO BEGIN READING!":GOSUB 20
30675 RETURN
40000 LOCATE 20,1:PRINT S$;"Then press <ENTER> ."
40005 LOCATE VTAB,42,,4,12:MAXLENGTH=3:GOSUB 100:LOCATE,,0,7,7
40010 LOCATE VTAB,42:PRINT SPACE$(3)
40020 'IF ((VAL(A$)=0   AND LEFT$(A$,1)<>"0") OR ( VAL(A$)<10 AND VAL(A$)>0 AND LEN(A$)>1 AND LEFT$(A$,1)<>"." AND NOT VAL(RIGHT$(A$,1)))) THEN GOSUB 90:LOCATE VTAB,42:PRINT "___":GOTO 40005
40021 B$="AQWERTYUIOPLKJHGFDSZXCVBNMqwertyuiop[]`';lkjhgfdsa\zxcvbnm,/!@#$%^&*()_+=-":WRONG=0
40022 FOR JJ=1 TO LEN (A$):IF (INSTR(B$,MID$(A$,JJ,1)) OR    INSTR("..",MID$(A$,JJ,2))) THEN WRONG=1:GOSUB 90:GOTO 40000 ELSE WRONG=0
40023 NEXT JJ
40025 LOCATE VTAB,42:PRINT A$;SPC(3-LEN(A$))
40030 GOSUB 35:RETURN
50000 LOCATE 25,1:PRINT SPACE$(80);:RETURN
51000 CLS:HEADER$="One Moment, Please.":GOSUB 50
51003 XY=FRE(""):RETURN
51304 ,12:MAXLENGTH=4:GOSUB 100:LOCATE,,0,7,7

TIMED.TXT

TEXT
PLEASE READ THESE INSTRUCTIONS CAREFULLY:


1. When you press <SPACE BAR> to begin,
   the reading will appear.  I'll be timing
   you, so start reading right away.
2. As soon as you finish reading each
   screen, "turn the page" by pressing
   the <SPACE BAR> as directed.
3. Read at your normal pace so that you
   understand what you're reading.
4. Reread these instructions.
END
TREAD302
!U04,33@   THE SINKING OF AN UNSINKABLE SHIP

  It was pitch black on that April night
in 1912 and there had been iceberg warn-
ings off the southern coast of Newfound-
land.  But the White Star Liner Titanic
continued full speed ahead on her maiden
voyage from Southampton to New York.
  The "fastest ship afloat," as she had
been called by the newspapers, was trying
to break a speed record for the trans-
atlantic crossing.
STOP
  Yet despite rumors of icebergs that
circulated through the salons and dining
rooms that evening, none of the 2,200
passengers and crew seemed the least bit
concerned.  After all, they reassured one
another, what could possibly happen.
The Titanic was unsinkable, wasn't she?
  Well, the Titanic did make the headlines
the next day as a recordbreaker.  But in-
stead of going down in history as the
fastest crossing,  it will be remembered
STOP
as one of the greatest sea disasters of
all time. The "unsinkable" luxury liner
had sliced her bow on an iceberg and sunk
in a matter of hours, taking 1,517 sur-
prised and unbelieving people to the bot-
tom with her.  It turned out that there
were only enough lifeboats for a fraction
of the people on board.  The assurance of
her builders that she was unsinkable and
the ambition of her captain that she win
a record turned out to be no match for
STOP
the dangers of the open sea.
  Still, it might be said that some good
did come out of this tragic event.  In the
wake of the Titanic disaster came a wave
of maritime reforms designed to ensure
safer passage on the high seas.  Perhaps
the lives lost that night were not lost
in vain, and those who went down with the
Titanic helped to prevent countless others
in the years since from meeting a similar
fate.
END
EOF
RET

Directory of PC-SIG Library Disk #0211

 Volume in drive A has no label
 Directory of A:\

ART      TXT      2032   3-20-84  12:52a
CRC      TXT      1123  11-15-84   9:29a
CRCK4    COM      1536  10-21-82   7:54p
EYE      TXT      2919   1-01-80   1:34a
JUSTIFY  ASM     72229   5-26-84   4:14p
JUSTIFY  EXE     17792   5-26-84   4:22p
LINEBUG  BAS       849   5-26-84   2:52p
SR       BAS     44416   1-01-80   4:10a
TIMED    TXT      2218   4-17-84  11:51a
TUTOR2            1632   5-26-84   3:15p
TUTORIAL          3978   5-26-84   4:26p
XXX                640   7-01-84   4:54p
       12 file(s)     151364 bytes
                        6144 bytes free