[metapost] Dumping preloaded executables in the [g]?olden days

Nelson H. F. Beebe beebe at math.utah.edu
Wed Jan 5 20:22:14 CET 2005


Laurence Finston <lfinsto1 at gwdg.de> asks this morning on the
metafont/metapost lists about preloading TeX and Metafont with
already-compiled/processed macro packages.

Below is a demonstration in TOPS-20 on the KLH10 simulator that I ran
just now to show how easy it was for Don Knuth to provide for
preloading of large macro packages in TeX and Metafont on TOPS-20.

The KLH10 simulator, running on a Sun Blade 2500 with dual 1.28GHz
CPUs, is about six times faster than our original DEC-20/60 was; that
system was retired on 31-Oct-1990.  The original system cost was over
$250K, and one served the College of Science at Utah for 12 years, and
another the Department of Computer Science for about 10 years.

Now with either of two PDP-10 simulators, I can relive life on TOPS-20
(for me, 1978--1990). I arrived in Utah a year after Don Knuth began
the TeX project at Stanford, and we both had similar machines.  At the
time, DEC-10s and DEC-20s (different O/S, similar PDP-10 hardware)
were the backbone of the Arpanet, of which Utah and Stanford were two
of the five founders in 1969 --- the others were UC/Berkeley, UC/Los
Angeles, and UC/Santa Barbara.  My system ran TOPS-20, Don's ran LOTS
(Low-Overhead Timesharing System) at SCORE, and Richard Stallman's ran
ITS (Incompatible Timesharing System) at MIT.  Code developed on any
of these would run with minor mods on the others because of the common
PDP-10 hardware.  Thus, we all had, used, and loved Richard's Emacs
built on top of Dan Murphy's TECO (Text Editor and Corrector).  Dan's
wife Sarah headed the DEC Fortran team, and I'm writing this message
in mm (a C translation from Columbia University of the original DEC-20
assembly-coded mail program) and GNU Emacs (a reimplementation in C
and Lisp of the original TECO and assembly-coded PDP-10 emacs) ... see
how we're all connected!  

Although TeX and Metafont started out written in SAIL (Stanford
Artificial Intelliengence Language) [Don says that it was because SAIL
had a good debugger], the 1981--1982 rewrite in Pascal relied on the
availability of Chuck Hedrick's excellent Pascal compiler from
Rutgers, bootstrapped in Pascal and PDP-10 assembly code, if I recall
correctly.

Here is the demonstration (using Fortran, because that is the only
compiler that I have at the moment):

;;; The funny mixed case happens when I type ESCape for command and
;;; filename completion.

@dayTIME
 Wednesday, January 5, 2005 11:59:19

@infORMATION (ABOUT) verSION
 TOPS-20AN Maximum System, TOPS-20AN Monitor 7(21017)
 TOPS-20 Command processor 7(4143)

@type restRT.foR.3
00100         program restart
00200   * Demonstrate TOPS-20 restart
00300         character*40 line1, line2
00400         logical init
00500         data init /.false./
00600         if (.not. init) then
00700             write (6,'('' ONE: Enter a line of data: '', $)')
00800             read (5,'(a)') line1
00900             write (6,'('' You typed: ['' A '']'')') line1
01000             init = .true.
01100         end if
01200         write (6,'('' TWO: Enter a line of data: '', $)')
01300         read (5,'(a)') line2
01400         write (6,'('' You typed: ['' A '']'')') line2
01500         write (6,'('' You originally typed: ['' A '']'')') line1
01600         call exit
01700         end

;;; Compile and link the program into an executable image in memory

@load restrt.for
FORTRAN: RESTRT
RESTART
LINK:   Loading

;;; Save the memory image as an executable program

@save restrt
 RESTRT.EXE.1 Saved

;;; Run the program, and interrupt it with Ctl-C after the second prompt

@run restrt
ONE: Enter a line of data: Initial stuff
You typed: [Initial stuff                           ]
TWO: Enter a line of data: ^C

;;; Save the interrupted image as an new program

@savE (on file) new-restrt
 NEW-RESTRT.EXE.1 Saved

;;; Run the interrupted program: notice that it continues from
;;; the point that it left off, because init is now .true.
;;; All of its local variables are still available, because they
;;; are static in C-ese (i.e., not allocated on the stack).

@run NEW-RESTRT
TWO: Enter a line of data: More stuff
You typed: [More stuff                              ]
You originally typed: [Initial stuff                           ]
CPU time 0.01   Elapsed time 3.78

TeX and Metafont use a magic integer constant instead of a Boolean
variable: ready_already has the value 314159 after the initial
processing.

No special hacks or magic system calls were needed to do this, so even
user programs on TOPS-20 made use of the feature to eliminate the
overhead of reprocessing startup data on every run.

-------------------------------------------------------------------------------
- Nelson H. F. Beebe                    Tel: +1 801 581 5254                  -
- University of Utah                    FAX: +1 801 581 4148                  -
- Department of Mathematics, 110 LCB    Internet e-mail: beebe at math.utah.edu  -
- 155 S 1400 E RM 233                       beebe at acm.org  beebe at computer.org -
- Salt Lake City, UT 84112-0090, USA    URL: http://www.math.utah.edu/~beebe  -
-------------------------------------------------------------------------------



More information about the metapost mailing list