m4(1) m4(1)
NAME
m4 - Makroprozessor
SYNTAX
m4 [Option...] [Datei...]
BESCHREIBUNG
Das Kommando m4 ist ein Makroprozessor, der für C, Assembler und
andere Sprachen geeignet ist. Alle Argument-Dateien werden der Reihe
nach verarbeitet; sind keine Dateien vorhanden oder lautet ein Datei-
name -, wird von Standardeingabe gelesen. Der verarbeitete Text wird
auf die Standardausgabe geschrieben.
OPTIONEN
-e Interaktiver Betrieb. Unterbrechungen werden ignoriert, und die
Ausgabe ist ungepuffert.
-s Zeilennummer-Anpassung für den C-Präprozessor einschalten
(#line...).
-B int Größe der Rückstell- und Argumentpuffer ändern (Standard
4.096).
-H int Größe des Hash-Feldes für die Symboltabellen ändern (Standard
199).
Diese Größe sollte eine Primzahl sein.
-S int Größe des Aufrufpuffers ändern (Standard 100 Einträge).
Makros benötigen drei Einträge im Aufrufpuffer, Nicht-
Makroargumente einen Eintrag.
-T int Größe des Token-Puffers ändern (Standard: 512 Bytes).
Um wirksam zu sein, müssen die oben angeführten Optionen vor den
Dateinamen und vor den Optionen -D oder -U erscheinen. Die Reihenfolge
der Optionen -D und -U ist wichtig.
-D Name[=Wert]
Definiert Name zu Wert oder Null, falls Wert nicht angegeben
ist.
-U Name
Löscht die Definition von Name.
-- Ende der Optionenliste. Die Angabe ist nötig, wenn der erste
Dateiname mit - beginnt.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
m4(1) m4(1)
Makroaufrufe haben das Format:
Name(arg1,arg2, ..., argn)
Zwischen Klammer und Makronamen darf kein Leerzeichen stehen. Wenn auf
den Namen eines definierten Makros nicht ( folgt, wird angenommen, daß
es sich um einen Aufruf des Makros ohne Argumente handelt. Makronamen
bestehen aus alphanumerischen Ziffern und dem Unterstrich wobei das
erste Zeichen keine Ziffer sein darf.
Führende Leerzeichen ohne Anführungszeichen, Tabulatoren und Neue-
Zeile-Zeichen werden während der Sammlung von Argumenten ignoriert.
Für die Darstellung von Zeichenketten werden einfache Anführungszei-
chen verwendet. Der Wert einer mit Anführungszeichen umschlossenen
Zeichenkette ist die Zeichenkette nach Entfernung der Anführungszei-
chen.
Wenn ein Makroname erkannt wird, werden seine Argumente beim Suchen
nach der zugehörigen rechten Klammer gesammelt. Wenn weniger Argumente
geliefert werden als in der Makrodefinition enthalten sind, werden die
nachfolgenden Argumente als Null verstanden. Die Makroauswertung läuft
normalerweise während der Sammlung der Argumente ab, und Kommata oder
rechte runde Klammern, die sich innerhalb des Wertes eines verschach-
telten Aufrufs befinden, werden genauso behandelt, wie die entspre-
chenden Zeichen im ursprünglichen Eingabetext. Nach der Argumentsamm-
lung wird das Makro in die Eingabe zurückgeschrieben und wieder auf
Ersetzung geprüft.
m4 stellt nachstehende vordefinierte Makros zur Verfügung. Diese
Makros können neudefiniert werden, dann geht jedoch ihre ursprüngliche
Bedeutung verloren. Ihre Werte sind Null, sofern keine anderen Angaben
vorliegen.
changecom
ändert die Standardeinstellung für linke (#) und rechte (Neue-
Zeile) Kommentarmarkierung. Ohne Argumente ist der Kommentarme-
chanismus abgeschaltet. Bei einem Argument wird die linke Markie-
rung gemäß dem Argument gesetzt, und die rechte Markierung bleibt
Neue-Zeile. Bei zwei Argumenten werden beide Markierungen geän-
dert. Kommentarmarkierungen können bis zu fünf Zeichen lang sein.
changequote
ändert linke und rechte Anführungszeichen-Symbole (zwei Argu-
mente).
Die Symbole können bis zu fünf Zeichen lang sein. changequote
ohne Argumente stellt die ursprünglichen Werte wieder her (d. h.
"").
decr gibt den um 1 verringerten Wert des Arguments zurück.
define
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
m4(1) m4(1)
erwartet zwei Argumente, wobei das erste den Namen und das zweite
den Wert des Makros angibt. Jedes $n im Ersatztext wird durch das
n-te Argument ersetzt; n entspricht einem Wert von 1 bis 9. Feh-
lende Argumente werden durch die Nullzeichenkette ersetzt; $#
wird durch die Anzahl der Argumente ersetzt; $* wird durch eine
Liste aller durch Kommata voneinander getrennten Argumente
ersetzt; $@ hat dieselbe Bedeutung wie $*, wobei jedoch jedes
Argument in (die aktuellen) Anführungszeichen gesetzt wird.
defn gibt die Definition des Arguments in Anführungszeichen zurück.
Dies ist für die Umbenennung von Makros, insbesondere vordefi-
nierten, nützlich.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
m4(1) m4(1)
divert m4
arbeitet mit 10 Ausgabedateien, die von 0 bis 9 numeriert sind.
Die Endausgabe ist die Verkettung dieser Ausgabedateien in nume-
rischer Reihenfolge. Am Anfang ist Datei 0 die aktuelle Datei.
Das Makro divert (umlenken) legt die aktuelle Ausgabedatei auf
das angegebene (Ziffernfolge-) Argument. Ausgaben, die in eine
Datei umgelenkt werden, die keine Numerierung zwischen 0 und 9
aufweist, werden gelöscht.
divnum
gibt den Wert des aktuellen Ausgabekanals als Zeichenkette
zurück.
dnl liest und löscht Zeichen einschließlich des nächsten Neue-Zeile-
Zeichens.
dumpdef
gibt aktuelle Namen und Definitionen für die angegebenen Einhei-
ten aus oder für alle, wenn keine Argumente angegeben werden.
errprint
gibt sein Argument an die Fehler-Ausgabedatei.
eval bewertet das Argument unter Anwendung der 32-Bit-Arithmetik als
arithmetischen Ausdruck. Zu den Operatoren gehören +, -, *, /, %,
** (Potenzierung), bitweises &, |, ^ und ~, Relationen, runde
Klammern. Oktal- und Hexadezimalzahlen können wie in C spezifi-
ziert werden. Das zweite Argument liefert die Basis für das
Ergebnis; der Standardwert ist 10. Das dritte Argument kann zur
Angabe der Mindestanzahl von Ziffern im Ergebnis verwendet wer-
den.
ifdef
Wenn das erste Argument definiert und ungleich 0 (Null) ist, ist
der Wert das zweite Argument, sonst das dritte. Wenn es kein
drittes Argument gibt, ist sein Wert Null.
ifelse
setzt Texte bedingt in den Ausgabetext ein.
ifelse erwartet drei oder mehr Argumente. Wenn das erste Argument
dieselbe Zeichenkette wie das zweite Argument ist, dann wird das
dritte Argument zurückgeliefert. Ist dies nicht der Fall und lie-
gen mehr als vier Argumente vor, wird der Prozeß mit den weiteren
Argumenten wiederholt. Andernfalls ist der Wert entweder die
vierte Zeichenkette oder Null, wenn es diese nicht gibt.
include
gibt den Inhalt der im Argument angegebenen Datei zurück.
incr gibt den um 1 erhöhten Wert des Arguments zurück. Der Wert des
Arguments wird berechnet, indem die Anfangsziffernfolge als
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
m4(1) m4(1)
Dezimalzahl interpretiert wird.
index
gibt die Position im ersten Argument zurück, an der das zweite
Argument (Nullursprung) beginnt, oder -1, wenn das zweite Argu-
ment nicht vorhanden ist.
len gibt die Anzahl der Zeichen des Arguments zurück.
maketemp
füllt die Zeichenkette XXXXX im Argument mit der aktuellen Pro-
zeßnummer auf.
m4exit m4
wird sofort beendet. Das erste Argument ist, falls angegeben,
der Endestatus; der Standard ist 0.
m4wrap
das erste Argument wird an das endgültige Dateiende zurückge-
stellt.
popdef
löscht die aktuelle Definition des Arguments und macht gegebenen-
falls eine frühere Definition wieder sichtbar.
pushdef
hat dieselbe Bedeutung wie define, sichert jedoch die vorherge-
hende Definition.
shift
gibt alle Argumente außer dem ersten Argument zurück. Die anderen
Argumente werden mit Anführungszeichen versehen und nach Einfügen
von Kommata zwischen den einzelnen Argumenten zurückgestellt.
Durch die Anführungszeichen wird verhindert, daß die Argumente
später zusätzlich überprüft werden.
sinclude
arbeitet wie include mit folgendem Unterschied: m4 gibt keine
Meldung aus, wenn nicht auf die Datei zugegriffen werden kann.
substr
gibt eine Teilzeichenkette des ersten Arguments zurück. Das
zweite Argument ist die Position des ersten Zeichens (von 0 ab
gezählt); das dritte Argument zeigt die Länge der Teilzeichen-
kette an. Fehlt das dritte Argument, endet die Teilzeichenkette
mit der Original-Zeichenkette.
syscmd
führt das Reliant UNIX Systemkommando aus, das im ersten Argument
angegeben wird. Ein Wert wird nicht zurückgegeben.
sysval
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
m4(1) m4(1)
ist der Rückgabewert des letzten Aufrufs von syscmd.
traceon
schaltet die Ablaufverfolgung für die angegebenen Makros ein
Werden keine Makros angegeben, wird die Ablaufverfolgung für alle
Makros, einschließlich eingebauter, eingeschaltet.
traceoff
schaltet die Ablaufverfolgung global und für angegebene Makros
ab. Bei Makros, die explizit mit traceon verfolgt werden, kann
die Ablaufverfolgung nur durch explizite Aufrufe von traceoff
abgeschaltet werden.
translit
übersetzt die Zeichen des ersten Arguments, indem die Buchstaben
der Menge des zweiten Arguments gegen die Buchstaben der Menge
des dritten Arguments ausgetauscht werden. Abkürzungen sind nicht
zulässig.
undefine
erwartet als Argument ein Makro, dessen Definition gelöscht wird.
undivert
liefert alle Ausgaben in numerischer Reihenfolge. Werden Argu-
mente angegeben, liefert undivert die gewünschten Ausgaben aus
den angegebenen Ausgabepuffern in der angegebenen Reihenfolge.
INTERNATIONALE UMGEBUNG
Die Sprache der Meldungstexte wird durch die Umgebungsvariablen
LCALL, LCMESSAGES oder LANG bestimmt.
In der Standardeinstellung verhält sich das System so, als wäre es
nicht internationalisiert, d. h. die Meldungstexte erscheinen in eng-
lischer Sprache. Wenn Sie die Sprache der Meldungstexte ändern wollen,
müssen Sie eine dieser Variablen entsprechend setzen.
Ausführliche Informationen zu den Abhängigkeiten der Umgebungsvaria-
blen und zur Internationalisierung im allgemeinen finden Sie im Hand-
buch "Leitfaden für Programmierer: Internationalisierung - Lokalisie-
rung". Zur Einstellung der Benutzerumgebung siehe auch environ(5).
SIEHE AUCH
cc(1).
Kapitel "m4" in "Leitfaden und Werkzeuge für die Programmierung mit
C".
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98