Natural unterscheidet zwei Arten von Subroutinen: interne Subroutinen, die direkt im Programm definiert werden, und externe Subroutinen, die als separate Objekte außerhalb des Programms gespeichert werden (dies wird später in diesem Tutorial beschrieben).
Sie werden jetzt eine interne Subroutine in Ihrem Programm definieren,
mit der ein Stern (*) in die neue Benutzervariable #MARK
geschrieben wird. Diese Subroutine wird aufgerufen, wenn ein Mitarbeiter 20
oder mehr Urlaubstage hat.
Wenn Sie mit den Übungen in diesem Dokument fertig sind, wird Ihre Beispielanwendung folgendermaßen strukturiert sein:

Dieses Dokument enthält die folgenden Übungen:
Sie werden jetzt die interne Subroutine in Ihr Programm einfügen.
Interne Subroutine definieren
Geben Sie Folgendes unter der Benutzervariablen
#NAME-END ein:
1 #MARK (A1)
Diese Variable wird von der Subroutine benutzt. Daher muss Sie zuerst definiert werden.
Um die Subroutine zu definieren, geben Sie Folgendes vor dem
END-Statement ein:
DEFINE SUBROUTINE MARK-SPECIAL-EMPLOYEES MOVE '*' TO #MARK END-SUBROUTINE
Wenn diese Subroutine ausgeführt wird, schreibt sie einen
Stern (*) in die Benutzervariable #MARK.
Anmerkung:
Statt des Statements MOVE '*' TO #MARK können
Sie auch die folgende Variante des ASSIGN- oder
COMPUTE-Statements benutzen: #MARK := '*'.
Ändern Sie das DISPLAY-Statement wie folgt:
DISPLAY NAME 3X DEPT 3X LEAVE-DUE 3X '>=20' #MARK
Hiermit wird eine neue Spalte in der Ausgabe angezeigt. Die Überschrift dieser Spalte ist ">=20". Die Spalte enthält einen Stern (*), wenn der betreffende Mitarbeiter 20 oder mehr Urlaubstage hat.
Jetzt, nachdem Sie die interne Subroutine definiert haben, können Sie den entsprechenden Code zum Aufruf dieser Subroutine eingeben.
Interne Subroutine ausführen
Geben Sie Folgendes vor dem DISPLAY-Statement
ein:
IF LEAVE-DUE >= 20 THEN PERFORM MARK-SPECIAL-EMPLOYEES ELSE RESET #MARK END-IF
Wenn ein Mitarbeiter gefunden wird, der 20 oder mehr
Urlaubstage (LEAVE-DUE) hat, wird die neue Subroutine mit dem
Namen MARK-SPECIAL-EMPLOYEES ausgeführt. Wenn ein Mitarbeiter
weniger als 20 Urlaubstage hat, wird der Inhalt von #MARK
zurückgesetzt.
Ihr Programm sollte nun folgendermaßen aussehen:
DEFINE DATA
LOCAL
1 #NAME-START (A20)
1 #NAME-END (A20)
1 #MARK (A1)
1 EMPLOYEES-VIEW VIEW OF EMPLOYEES
2 FULL-NAME
3 NAME (A20)
2 DEPT (A6)
2 LEAVE-DATA
3 LEAVE-DUE (N2)
END-DEFINE
*
RP1. REPEAT
*
INPUT USING MAP 'MAP01'
*
IF #NAME-START = '.' THEN
ESCAPE BOTTOM (RP1.)
END-IF
*
IF #NAME-END = ' ' THEN
MOVE #NAME-START TO #NAME-END
END-IF
*
RD1. READ EMPLOYEES-VIEW BY NAME
STARTING FROM #NAME-START
ENDING AT #NAME-END
*
IF LEAVE-DUE >= 20 THEN
PERFORM MARK-SPECIAL-EMPLOYEES
ELSE
RESET #MARK
END-IF
*
DISPLAY NAME 3X DEPT 3X LEAVE-DUE 3X '>=20' #MARK
*
END-READ
*
IF *COUNTER (RD1.) = 0 THEN
REINPUT 'No employees meet your criteria.'
END-IF
*
END-REPEAT
*
DEFINE SUBROUTINE MARK-SPECIAL-EMPLOYEES
MOVE '*' TO #MARK
END-SUBROUTINE
*
END
Führen Sie das Programm mit RUN
aus.
Geben Sie in der daraufhin erscheinenden Map "JONES" ein und drücken Sie EINGABE.
Die Liste der Mitarbeiter sollte jetzt eine zusätzliche Spalte enthalten.
Geben Sie EDIT in der
MORE-Zeile ein, um zum Programmeditor zurückzukehren.
Speichern Sie das Programm mit
STOW.
Geben Sie einen Punkt (.) in der Kommandozeile ein, um zum Menü Development Functions zurückzukehren.
Sie können nun mit den nächsten Übungen fortfahren: Verarbeitungsregeln und Helproutinen.