463 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			463 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
#
 | 
						|
# test file for mp (not comprehensive)
 | 
						|
#
 | 
						|
# v7 m4 does not have `decr'.
 | 
						|
#
 | 
						|
 | 
						|
#
 | 
						|
# include string macros
 | 
						|
#
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# create some fortrash strings for an even uglier language
 | 
						|
#
 | 
						|
integer TEXT(5)
 | 
						|
data TEXT(1)/LETt/
 | 
						|
data TEXT(2)/LETe/
 | 
						|
data TEXT(3)/LETx/
 | 
						|
data TEXT(4)/LETt/
 | 
						|
 | 
						|
data TEXT(5)/EOS/
 | 
						|
 | 
						|
integer DATA(5)
 | 
						|
data DATA(1)/LETd/
 | 
						|
data DATA(2)/LETa/
 | 
						|
data DATA(3)/LETt/
 | 
						|
data DATA(4)/LETa/
 | 
						|
 | 
						|
data DATA(5)/EOS/
 | 
						|
 | 
						|
integer BEGIN(6)
 | 
						|
data BEGIN(1)/LETb/
 | 
						|
data BEGIN(2)/LETe/
 | 
						|
data BEGIN(3)/LETg/
 | 
						|
data BEGIN(4)/LETi/
 | 
						|
data BEGIN(5)/LETn/
 | 
						|
 | 
						|
data BEGIN(6)/EOS/
 | 
						|
 | 
						|
integer END(4)
 | 
						|
data END(1)/LETe/
 | 
						|
data END(2)/LETn/
 | 
						|
data END(3)/LETd/
 | 
						|
 | 
						|
data END(4)/EOS/
 | 
						|
 | 
						|
integer IF(3)
 | 
						|
data IF(1)/LETi/
 | 
						|
data IF(2)/LETf/
 | 
						|
 | 
						|
data IF(3)/EOS/
 | 
						|
 | 
						|
integer THEN(5)
 | 
						|
data THEN(1)/LETt/
 | 
						|
data THEN(2)/LETh/
 | 
						|
data THEN(3)/LETe/
 | 
						|
data THEN(4)/LETn/
 | 
						|
 | 
						|
data THEN(5)/EOS/
 | 
						|
 | 
						|
integer ELSE(5)
 | 
						|
data ELSE(1)/LETe/
 | 
						|
data ELSE(2)/LETl/
 | 
						|
data ELSE(3)/LETs/
 | 
						|
data ELSE(4)/LETe/
 | 
						|
 | 
						|
data ELSE(5)/EOS/
 | 
						|
 | 
						|
integer CASE(5)
 | 
						|
data CASE(1)/LETc/
 | 
						|
data CASE(2)/LETa/
 | 
						|
data CASE(3)/LETs/
 | 
						|
data CASE(4)/LETe/
 | 
						|
 | 
						|
data CASE(5)/EOS/
 | 
						|
 | 
						|
integer REPEAT(7)
 | 
						|
data REPEAT(1)/LETr/
 | 
						|
data REPEAT(2)/LETe/
 | 
						|
data REPEAT(3)/LETp/
 | 
						|
data REPEAT(4)/LETe/
 | 
						|
data REPEAT(5)/LETa/
 | 
						|
data REPEAT(6)/LETt/
 | 
						|
 | 
						|
data REPEAT(7)/EOS/
 | 
						|
 | 
						|
integer WHILE(6)
 | 
						|
data WHILE(1)/LETw/
 | 
						|
data WHILE(2)/LETh/
 | 
						|
data WHILE(3)/LETi/
 | 
						|
data WHILE(4)/LETl/
 | 
						|
data WHILE(5)/LETe/
 | 
						|
 | 
						|
data WHILE(6)/EOS/
 | 
						|
 | 
						|
integer DEFAULT(8)
 | 
						|
data DEFAULT(1)/LETd/
 | 
						|
data DEFAULT(2)/LETe/
 | 
						|
data DEFAULT(3)/LETf/
 | 
						|
data DEFAULT(4)/LETa/
 | 
						|
data DEFAULT(5)/LETu/
 | 
						|
data DEFAULT(6)/LETl/
 | 
						|
data DEFAULT(7)/LETt/
 | 
						|
 | 
						|
data DEFAULT(8)/EOS/
 | 
						|
 | 
						|
integer UNTIL(6)
 | 
						|
data UNTIL(1)/LETu/
 | 
						|
data UNTIL(2)/LETn/
 | 
						|
data UNTIL(3)/LETt/
 | 
						|
data UNTIL(4)/LETi/
 | 
						|
data UNTIL(5)/LETl/
 | 
						|
 | 
						|
data UNTIL(6)/EOS/
 | 
						|
 | 
						|
integer FUNCTION(9)
 | 
						|
data FUNCTION(1)/LETf/
 | 
						|
data FUNCTION(2)/LETu/
 | 
						|
data FUNCTION(3)/LETn/
 | 
						|
data FUNCTION(4)/LETc/
 | 
						|
data FUNCTION(5)/LETt/
 | 
						|
data FUNCTION(6)/LETi/
 | 
						|
data FUNCTION(7)/LETo/
 | 
						|
data FUNCTION(8)/LETn/
 | 
						|
 | 
						|
data FUNCTION(9)/EOS/
 | 
						|
 | 
						|
integer PROCEDURE(10)
 | 
						|
data PROCEDURE(1)/LETp/
 | 
						|
data PROCEDURE(2)/LETr/
 | 
						|
data PROCEDURE(3)/LETo/
 | 
						|
data PROCEDURE(4)/LETc/
 | 
						|
data PROCEDURE(5)/LETe/
 | 
						|
data PROCEDURE(6)/LETd/
 | 
						|
data PROCEDURE(7)/LETu/
 | 
						|
data PROCEDURE(8)/LETr/
 | 
						|
data PROCEDURE(9)/LETe/
 | 
						|
 | 
						|
data PROCEDURE(10)/EOS/
 | 
						|
 | 
						|
integer EXTERNAL(9)
 | 
						|
data EXTERNAL(1)/LETe/
 | 
						|
data EXTERNAL(2)/LETx/
 | 
						|
data EXTERNAL(3)/LETt/
 | 
						|
data EXTERNAL(4)/LETe/
 | 
						|
data EXTERNAL(5)/LETr/
 | 
						|
data EXTERNAL(6)/LETn/
 | 
						|
data EXTERNAL(7)/LETa/
 | 
						|
data EXTERNAL(8)/LETl/
 | 
						|
 | 
						|
data EXTERNAL(9)/EOS/
 | 
						|
 | 
						|
integer FORWARD(8)
 | 
						|
data FORWARD(1)/LETf/
 | 
						|
data FORWARD(2)/LETo/
 | 
						|
data FORWARD(3)/LETr/
 | 
						|
data FORWARD(4)/LETw/
 | 
						|
data FORWARD(5)/LETa/
 | 
						|
data FORWARD(6)/LETr/
 | 
						|
data FORWARD(7)/LETd/
 | 
						|
 | 
						|
data FORWARD(8)/EOS/
 | 
						|
 | 
						|
integer TYPE(5)
 | 
						|
data TYPE(1)/LETt/
 | 
						|
data TYPE(2)/LETy/
 | 
						|
data TYPE(3)/LETp/
 | 
						|
data TYPE(4)/LETe/
 | 
						|
 | 
						|
data TYPE(5)/EOS/
 | 
						|
 | 
						|
integer VAR(4)
 | 
						|
data VAR(1)/LETv/
 | 
						|
data VAR(2)/LETa/
 | 
						|
data VAR(3)/LETr/
 | 
						|
 | 
						|
data VAR(4)/EOS/
 | 
						|
 | 
						|
integer CONST(6)
 | 
						|
data CONST(1)/LETc/
 | 
						|
data CONST(2)/LETo/
 | 
						|
data CONST(3)/LETn/
 | 
						|
data CONST(4)/LETs/
 | 
						|
data CONST(5)/LETt/
 | 
						|
 | 
						|
data CONST(6)/EOS/
 | 
						|
 | 
						|
integer PROGRAM(8)
 | 
						|
data PROGRAM(1)/LETp/
 | 
						|
data PROGRAM(2)/LETr/
 | 
						|
data PROGRAM(3)/LETo/
 | 
						|
data PROGRAM(4)/LETg/
 | 
						|
data PROGRAM(5)/LETr/
 | 
						|
data PROGRAM(6)/LETa/
 | 
						|
data PROGRAM(7)/LETm/
 | 
						|
 | 
						|
data PROGRAM(8)/EOS/
 | 
						|
 | 
						|
integer INPUT(6)
 | 
						|
data INPUT(1)/LETi/
 | 
						|
data INPUT(2)/LETn/
 | 
						|
data INPUT(3)/LETp/
 | 
						|
data INPUT(4)/LETu/
 | 
						|
data INPUT(5)/LETt/
 | 
						|
 | 
						|
data INPUT(6)/EOS/
 | 
						|
 | 
						|
integer OUTPUT(7)
 | 
						|
data OUTPUT(1)/LETo/
 | 
						|
data OUTPUT(2)/LETu/
 | 
						|
data OUTPUT(3)/LETt/
 | 
						|
data OUTPUT(4)/LETp/
 | 
						|
data OUTPUT(5)/LETu/
 | 
						|
data OUTPUT(6)/LETt/
 | 
						|
 | 
						|
data OUTPUT(7)/EOS/
 | 
						|
 | 
						|
#
 | 
						|
 | 
						|
 | 
						|
defined
 | 
						|
#
 | 
						|
# v7 m4 does this wrong. The right output is
 | 
						|
#      this is A vEry lon sEntEnCE
 | 
						|
# see m4 documentation for translit.
 | 
						|
#
 | 
						|
this is A vEry lon sEntEnCE
 | 
						|
#
 | 
						|
# include towers-of-hanoi
 | 
						|
#
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# some reasonable set of disks
 | 
						|
#
 | 
						|
move disk from A to C
 | 
						|
move disk from A to B
 | 
						|
move disk from C to B
 | 
						|
move disk from A to C
 | 
						|
move disk from B to A
 | 
						|
move disk from B to C
 | 
						|
move disk from A to C
 | 
						|
move disk from A to B
 | 
						|
move disk from C to B
 | 
						|
move disk from C to A
 | 
						|
move disk from B to A
 | 
						|
move disk from C to B
 | 
						|
move disk from A to C
 | 
						|
move disk from A to B
 | 
						|
move disk from C to B
 | 
						|
move disk from A to C
 | 
						|
move disk from B to A
 | 
						|
move disk from B to C
 | 
						|
move disk from A to C
 | 
						|
move disk from B to A
 | 
						|
move disk from C to B
 | 
						|
move disk from C to A
 | 
						|
move disk from B to A
 | 
						|
move disk from B to C
 | 
						|
move disk from A to C
 | 
						|
move disk from A to B
 | 
						|
move disk from C to B
 | 
						|
move disk from A to C
 | 
						|
move disk from B to A
 | 
						|
move disk from B to C
 | 
						|
move disk from A to C
 | 
						|
move disk from A to B
 | 
						|
move disk from C to B
 | 
						|
move disk from C to A
 | 
						|
move disk from B to A
 | 
						|
move disk from C to B
 | 
						|
move disk from A to C
 | 
						|
move disk from A to B
 | 
						|
move disk from C to B
 | 
						|
move disk from C to A
 | 
						|
move disk from B to A
 | 
						|
move disk from B to C
 | 
						|
move disk from A to C
 | 
						|
move disk from B to A
 | 
						|
move disk from C to B
 | 
						|
move disk from C to A
 | 
						|
move disk from B to A
 | 
						|
move disk from C to B
 | 
						|
move disk from A to C
 | 
						|
move disk from A to B
 | 
						|
move disk from C to B
 | 
						|
move disk from A to C
 | 
						|
move disk from B to A
 | 
						|
move disk from B to C
 | 
						|
move disk from A to C
 | 
						|
move disk from A to B
 | 
						|
move disk from C to B
 | 
						|
move disk from C to A
 | 
						|
move disk from B to A
 | 
						|
move disk from C to B
 | 
						|
move disk from A to C
 | 
						|
move disk from A to B
 | 
						|
move disk from C to B
 | 
						|
 | 
						|
#
 | 
						|
# include ackermann's function
 | 
						|
#
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# something like (3,3) will blow away un*x m4.
 | 
						|
#
 | 
						|
9
 | 
						|
#
 | 
						|
# include a square_root function for fixed nums
 | 
						|
#
 | 
						|
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# some square roots.
 | 
						|
#
 | 
						|
3
 | 
						|
10
 | 
						|
negative-square-root
 | 
						|
146
 | 
						|
#
 | 
						|
# some textual material for enjoyment.
 | 
						|
#
 | 
						|
[taken from the 'Clemson University Computer Newsletter',
 | 
						|
 September 1981, pp. 6-7]
 | 
						|
 | 
						|
I am a wizard in the magical Kingdom of Transformation and I
 | 
						|
slay dragons for a living.  Actually, I am a systems programmer.
 | 
						|
One of the problems with systems programming is explaining to
 | 
						|
non-computer enthusiasts what that is.  All of the terms I use to
 | 
						|
describe my job are totally meaningless to them.  Usually my response
 | 
						|
to questions about my work is to say as little as possible.  For
 | 
						|
instance, if someone asks what happened at work this week, I say
 | 
						|
"Nothing much" and then I change the subject.
 | 
						|
 | 
						|
With the assistance of my brother, a mechanical engineer, I have devised
 | 
						|
an analogy that everyone can understand.  The analogy describes the
 | 
						|
"Kingdom of Transformation" where travelers wander and are magically
 | 
						|
transformed.  This kingdom is the computer and the travelers are information.
 | 
						|
The purpose of the computer is to change information to a more meaningful
 | 
						|
forma.  The law of conservation applies here:  The computer never creates
 | 
						|
and never intentionally destroys data.  With no further ado, let us travel
 | 
						|
to the Kingdom of Transformation:
 | 
						|
 | 
						|
In a land far, far away, there is a magical kingdom called the Kingdom of
 | 
						|
Transformation.  A king rules over this land and employs a Council of
 | 
						|
Wizardry.  The main purpose of this kingdom is to provide a way for
 | 
						|
neighboring kingdoms to transform citizens into more useful citizens.  This
 | 
						|
is done by allowing the citizens to enter the kingdom at one of its ports
 | 
						|
and to travel any of the many routes in the kingdom.  They are magically
 | 
						|
transformed along the way.  The income of the Kingdom of Transformation
 | 
						|
comes from the many toll roads within its boundaries.
 | 
						|
 | 
						|
The Kingdom of Transformation was created when several kingdoms got
 | 
						|
together and discovered a mutual need for new talents and abilities for
 | 
						|
citizens.  They employed CTK, Inc. (Creators of Transformation, Inc.) to
 | 
						|
create this kingdom.  CTK designed the country, its transportation routes,
 | 
						|
and its laws of transformation, and created the major highway system.
 | 
						|
 | 
						|
Hazards
 | 
						|
=======
 | 
						|
 | 
						|
Because magic is not truly controllable, CTK invariably, but unknowingly,
 | 
						|
creates dragons.  Dragons are huge fire-breathing beasts which sometimes
 | 
						|
injure or kill travelers.  Fortunately, they do not travel, but always
 | 
						|
remain near their den.
 | 
						|
 | 
						|
Other hazards also exist which are potentially harmful.  As the roads
 | 
						|
become older and more weatherbeaten, pot-holes will develop, trees will
 | 
						|
fall on travelers, etc.  CTK maintenance men are called to fix these
 | 
						|
problems.
 | 
						|
 | 
						|
Wizards
 | 
						|
=======
 | 
						|
 | 
						|
The wizards play a major role in creating and maintaining the kingdom but
 | 
						|
get little credit for their work because it is performed secretly.  The
 | 
						|
wizards do not wan the workers or travelers to learn their incantations
 | 
						|
because many laws would be broken and chaos would result.
 | 
						|
 | 
						|
CTK's grand design is always general enough to be applicable in many
 | 
						|
different situations.  As a result, it is often difficult to use.  The
 | 
						|
first duty of the wizards is to tailor the transformation laws so as to be
 | 
						|
more beneficial and easier to use in their particular environment.
 | 
						|
 | 
						|
After creation of the kingdom, a major duty of the wizards is to search for
 | 
						|
and kill dragons.  If travelers do not return on time or if they return
 | 
						|
injured, the ruler of the country contacts the wizards.  If the wizards
 | 
						|
determine that the injury or death occurred due to the traveler's
 | 
						|
negligence, they provide the traveler's country with additional warnings.
 | 
						|
If not, they must determine if the cause was a road hazard or a dragon.  If
 | 
						|
the suspect a road hazard, they call in a CTK maintenance man to locate the
 | 
						|
hazard and to eliminate it, as in repairing the pothole in the road.  If
 | 
						|
they think that cause was a dragon, then they must find and slay it.
 | 
						|
 | 
						|
The most difficult part of eliminating a dragon is finding it.  Sometimes
 | 
						|
the wizard magically knows where the dragon's lair it, but often the wizard
 | 
						|
must send another traveler along the same route and watch to see where he
 | 
						|
disappears.  This sounds like a failsafe method for finding dragons (and a
 | 
						|
suicide mission for thr traveler) but the second traveler does not always
 | 
						|
disappear.  Some dragons eat any traveler who comes too close; others are
 | 
						|
very picky.
 | 
						|
 | 
						|
The wizards may call in CTK who designed the highway system and
 | 
						|
transformation laws to help devise a way to locate the dragon.  CTK also
 | 
						|
helps provide the right spell or incantation to slay the dragon. (There is
 | 
						|
no general spell to slay dragons; each dragon must be eliminated with a
 | 
						|
different spell.)
 | 
						|
 | 
						|
Because neither CTK nor wizards are perfect, spells to not always work
 | 
						|
correctly.  At best, nothing happens when the wrong spell is uttered.  At
 | 
						|
worst, the dragon becomes a much larger dragon or multiplies into several
 | 
						|
smaller ones.  In either case, new spells must be found.
 | 
						|
 | 
						|
If all existing dragons are quiet (i.e. have eaten sufficiently), wizards
 | 
						|
have time to do other things.  They hide in castles and practice spells and
 | 
						|
incatations.  They also devise shortcuts for travelers and new laws of
 | 
						|
transformation.
 | 
						|
 | 
						|
Changes in the Kingdom
 | 
						|
======================
 | 
						|
 | 
						|
As new transformation kingdoms are created and old ones are maintained,
 | 
						|
CTK, Inc. is constantly learning new things.  It learns ways to avoid
 | 
						|
creating some of the dragons that they have previously created.  It also
 | 
						|
discovers new and better laws of transformation.  As a result, CTK will
 | 
						|
periodically create a new grand design which is far better than the old.
 | 
						|
The wizards determine when is a good time to implement this new design.
 | 
						|
This is when the tourist season is slow or when no important travelers
 | 
						|
(VIPs) are to arrive.  The kingdom must be closed for the actual
 | 
						|
implementation and is leter reopened as a new and better place to go.
 | 
						|
 | 
						|
A final question you might ask is what happens when the number of tourists
 | 
						|
becomes too great for the kingdom to handle in a reasonable period of time
 | 
						|
(i.e., the tourist lines at the ports are too long).  The Kingdom of
 | 
						|
Transformation has three options: (1) shorten the paths that a tourist must
 | 
						|
travel, or (2) convince CTK to develop a faster breed of horses so that the
 | 
						|
travelers can finish sooner, or (3) annex more territories so that the
 | 
						|
kingdom can handle more travelers.
 | 
						|
 | 
						|
Thus ends the story of the Kingdom of Transformation.  I hope this has
 | 
						|
explained my job to you:  I slay dragons for a living.
 | 
						|
 | 
						|
#
 | 
						|
#should do an automatic undivert..
 | 
						|
#
 | 
						|
 | 
						|
diversion #1
 | 
						|
 | 
						|
diversion #2
 | 
						|
 | 
						|
diversion #3
 | 
						|
 | 
						|
diversion #4
 |