]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.bin/m4/TEST/test.m4
zfs: merge openzfs/zfs@86e115e21
[FreeBSD/FreeBSD.git] / usr.bin / m4 / TEST / test.m4
1 #       $OpenBSD: test.m4,v 1.3 2003/06/03 02:56:11 millert Exp $
2 #       $NetBSD: test.m4,v 1.4 1995/09/28 05:38:05 tls Exp $
3 #
4 # Copyright (c) 1989, 1993
5 #       The Regents of the University of California.  All rights reserved.
6 #
7 # This code is derived from software contributed to Berkeley by
8 # Ozan Yigit.
9 #
10 # Redistribution and use in source and binary forms, with or without
11 # modification, are permitted provided that the following conditions
12 # are met:
13 # 1. Redistributions of source code must retain the above copyright
14 #    notice, this list of conditions and the following disclaimer.
15 # 2. Redistributions in binary form must reproduce the above copyright
16 #    notice, this list of conditions and the following disclaimer in the
17 #    documentation and/or other materials provided with the distribution.
18 # 3. Neither the name of the University nor the names of its contributors
19 #    may be used to endorse or promote products derived from this software
20 #    without specific prior written permission.
21 #
22 # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 # SUCH DAMAGE.
33 #
34
35 # test file for mp (not comprehensive)
36 #
37 # v7 m4 does not have `decr'.
38 #
39 define(DECR,`eval($1-1)')
40 #
41 # include string macros
42 #
43 include(string.m4)
44 #
45 # create some fortrash strings for an even uglier language
46 #
47 string(TEXT, "text")
48 string(DATA, "data")
49 string(BEGIN, "begin")
50 string(END, "end")
51 string(IF, "if")
52 string(THEN, "then")
53 string(ELSE, "else")
54 string(CASE, "case")
55 string(REPEAT, "repeat")
56 string(WHILE, "while")
57 string(DEFAULT, "default")
58 string(UNTIL, "until")
59 string(FUNCTION, "function")
60 string(PROCEDURE, "procedure")
61 string(EXTERNAL, "external")
62 string(FORWARD, "forward")
63 string(TYPE, "type")
64 string(VAR, "var")
65 string(CONST, "const")
66 string(PROGRAM, "program")
67 string(INPUT, "input")
68 string(OUTPUT, "output")
69 #
70 divert(2)
71 diversion #1
72 divert(3)
73 diversion #2
74 divert(4)
75 diversion #3
76 divert(5)
77 diversion #4
78 divert(0)
79 define(abc,xxx)
80 ifdef(`abc',defined,undefined)
81 #
82 # v7 m4 does this wrong. The right output is 
83 #       this is A vEry lon sEntEnCE
84 # see m4 documentation for translit.
85 #
86 translit(`this is a very long sentence', abcdefg, ABCDEF)
87 #
88 # include towers-of-hanoi
89 #
90 include(hanoi.m4)
91 #
92 # some reasonable set of disks
93 #
94 hanoi(6)
95 #
96 # include ackermann's function
97 #
98 include(ack.m4)
99 #
100 # something like (3,3) will blow away un*x m4.
101 #
102 ack(2,3)
103 #
104 # include a square_root function for fixed nums
105 #
106 include(sqroot.m4)
107 #
108 # some square roots.
109 #
110 square_root(15)
111 square_root(100)
112 square_root(-4)
113 square_root(21372)
114 #
115 # some textual material for enjoyment.
116 #
117 [taken from the 'Clemson University Computer Newsletter',
118  September 1981, pp. 6-7]
119      
120 I am a wizard in the magical Kingdom of Transformation and I
121 slay dragons for a living.  Actually, I am a systems programmer.
122 One of the problems with systems programming is explaining to
123 non-computer enthusiasts what that is.  All of the terms I use to
124 describe my job are totally meaningless to them.  Usually my response
125 to questions about my work is to say as little as possible.  For
126 instance, if someone asks what happened at work this week, I say
127 "Nothing much" and then I change the subject.
128      
129 With the assistance of my brother, a mechanical engineer, I have devised
130 an analogy that everyone can understand.  The analogy describes the
131 "Kingdom of Transformation" where travelers wander and are magically
132 transformed.  This kingdom is the computer and the travelers are information.
133 The purpose of the computer is to change information to a more meaningful
134 forma.  The law of conservation applies here:  The computer never creates
135 and never intentionally destroys data.  With no further ado, let us travel
136 to the Kingdom of Transformation:
137      
138 In a land far, far away, there is a magical kingdom called the Kingdom of
139 Transformation.  A king rules over this land and employs a Council of
140 Wizardry.  The main purpose of this kingdom is to provide a way for
141 neighboring kingdoms to transform citizens into more useful citizens.  This
142 is done by allowing the citizens to enter the kingdom at one of its ports
143 and to travel any of the many routes in the kingdom.  They are magically
144 transformed along the way.  The income of the Kingdom of Transformation
145 comes from the many toll roads within its boundaries.
146      
147 The Kingdom of Transformation was created when several kingdoms got
148 together and discovered a mutual need for new talents and abilities for
149 citizens.  They employed CTK, Inc. (Creators of Transformation, Inc.) to
150 create this kingdom.  CTK designed the country, its transportation routes,
151 and its laws of transformation, and created the major highway system.
152      
153 Hazards
154 =======
155      
156 Because magic is not truly controllable, CTK invariably, but unknowingly,
157 creates dragons.  Dragons are huge fire-breathing beasts which sometimes
158 injure or kill travelers.  Fortunately, they do not travel, but always
159 remain near their den.
160      
161 Other hazards also exist which are potentially harmful.  As the roads
162 become older and more weatherbeaten, pot-holes will develop, trees will
163 fall on travelers, etc.  CTK maintenance men are called to fix these
164 problems.
165      
166 Wizards
167 =======
168      
169 The wizards play a major role in creating and maintaining the kingdom but
170 get little credit for their work because it is performed secretly.  The
171 wizards do not wan the workers or travelers to learn their incantations
172 because many laws would be broken and chaos would result.
173      
174 CTK's grand design is always general enough to be applicable in many
175 different situations.  As a result, it is often difficult to use.  The
176 first duty of the wizards is to tailor the transformation laws so as to be
177 more beneficial and easier to use in their particular environment.
178      
179 After creation of the kingdom, a major duty of the wizards is to search for
180 and kill dragons.  If travelers do not return on time or if they return
181 injured, the ruler of the country contacts the wizards.  If the wizards
182 determine that the injury or death occurred due to the traveler's
183 negligence, they provide the traveler's country with additional warnings.
184 If not, they must determine if the cause was a road hazard or a dragon.  If
185 the suspect a road hazard, they call in a CTK maintenance man to locate the
186 hazard and to eliminate it, as in repairing the pothole in the road.  If
187 they think that cause was a dragon, then they must find and slay it.
188      
189 The most difficult part of eliminating a dragon is finding it.  Sometimes
190 the wizard magically knows where the dragon's lair it, but often the wizard
191 must send another traveler along the same route and watch to see where he
192 disappears.  This sounds like a failsafe method for finding dragons (and a
193 suicide mission for thr traveler) but the second traveler does not always
194 disappear.  Some dragons eat any traveler who comes too close; others are
195 very picky.
196      
197 The wizards may call in CTK who designed the highway system and
198 transformation laws to help devise a way to locate the dragon.  CTK also
199 helps provide the right spell or incantation to slay the dragon. (There is
200 no general spell to slay dragons; each dragon must be eliminated with a
201 different spell.)
202      
203 Because neither CTK nor wizards are perfect, spells to not always work
204 correctly.  At best, nothing happens when the wrong spell is uttered.  At
205 worst, the dragon becomes a much larger dragon or multiplies into several
206 smaller ones.  In either case, new spells must be found.
207      
208 If all existing dragons are quiet (i.e. have eaten sufficiently), wizards
209 have time to do other things.  They hide in castles and practice spells and
210 incatations.  They also devise shortcuts for travelers and new laws of
211 transformation.
212      
213 Changes in the Kingdom
214 ======================
215      
216 As new transformation kingdoms are created and old ones are maintained,
217 CTK, Inc. is constantly learning new things.  It learns ways to avoid
218 creating some of the dragons that they have previously created.  It also
219 discovers new and better laws of transformation.  As a result, CTK will
220 periodically create a new grand design which is far better than the old.
221 The wizards determine when is a good time to implement this new design.
222 This is when the tourist season is slow or when no important travelers
223 (VIPs) are to arrive.  The kingdom must be closed for the actual
224 implementation and is leter reopened as a new and better place to go.
225      
226 A final question you might ask is what happens when the number of tourists
227 becomes too great for the kingdom to handle in a reasonable period of time
228 (i.e., the tourist lines at the ports are too long).  The Kingdom of
229 Transformation has three options: (1) shorten the paths that a tourist must
230 travel, or (2) convince CTK to develop a faster breed of horses so that the
231 travelers can finish sooner, or (3) annex more territories so that the
232 kingdom can handle more travelers.
233      
234 Thus ends the story of the Kingdom of Transformation.  I hope this has
235 explained my job to you:  I slay dragons for a living.
236
237 #
238 #should do an automatic undivert..
239 #