Beispiel 5 ist funktionell identisch zu Beispiel 1, nur dass statt in C in Assembler programmiert wurde.
TITLE 'BEISPIEL5' ******************************************************************** * * * Beispiel 5 * * * * Dieses Beispiel verwendet ausschliesslich die iedtcmd- * * Schnittstelle zur Ausfuehrung von EDT-Anweisungen. * * Die Funktionalität ist identisch mit der des "Beispiel 1" in C. * * * * Das Beispielprogramm fuehrt folgende Aktionen durch: * * * * 1) Einlesen eines Auswahlkriteriums (CCSN) * * 2) Ausgabe eines Inhaltsverzeichnisses in die Arbeitsdatei 0 * * mit der @SHOW-Anweisung (Format 1). * * 3) Loeschen aller Zeilen, die nicht das Auswahlkriterium * * enthalten mit der @ON-Anweisung (Format 10). * * 4) Einstellen der Arbeitsdatei 0 und anschliessender Wechsel * * in den F-Modus-Dialog mit einer @SETF- und einer nach- * * folgenden @DIALOG-Anweisung. * * 5) Der Anwender kann nun die ausgegebenen Zeilen editieren * * und schliesslich den EDT und damit auch diese Beispiel- * * programm beenden. * * * ******************************************************************** * BEISP5 START BEISP5 AMODE ANY BEISP5 RMODE ANY GPARMOD 31 * BALR R10,0 USING *,R10 * * STARTMELDUNG AUSGEBEN * LA R1,6 * LAENGE = 6 FUER DIE AUSGABE STH R1,LEERMSG * EINES LEERZEICHENS * WROUT LEERMSG,WROUTERR WROUT STARTMSG,WROUTERR WROUT LEERMSG,WROUTERR
* * CCSN EINLESEN * WRTRD PROMPT,,EINB,,12,WRTRDERR * LH R15,EINB LAENGE DER EINGABE SH R15,=Y(5) 4 BYTE FUER SLF UND 1 FUER EX EX R15,EXMVCCSN CCS IN DIE ON-ANWEISUNG UEBERTRAGEN LA R14,CCSN AUF ZEICHEN NACH DEM CCSN LA R14,1(R14,R15) POSITIONIEREN MVI 0(R14),'''' APOSTROPH SETZEN --------------- (1) * LA R1,4 * LAENGE = 4 FUER DIE UEBERGABE STH R1,LEERMSG * EINES LEERSTRINGS AN DEN EDT * * INHALTSVERZEICHNIS IN DIE ARBEITSDATEI 0 AUSGEBEN * LA R1,CMD1 ADRESSE EDT-ANWEISUNG LA R2,LEERMSG MSG1 = LEERSTRING LA R3,LEERMSG MSG2 = LEERSTRING LA R4,ZUSMSG1 ADR. DER AUSZUGEBENDEN FEHLERMELDUNG * BAL R11,CMDCALL AUFRUF DER CMD-SCHNITTSTELLE DES EDT * * ALLE ZEILEN LOESCHEN, DIE NICHT DEM SUCHKRITERIUM (CCSN) * ENTSPRECHEN UND DIE VERBLIEBENEN ZEILEN NEU DURCHNUMMERIEREN * LA R1,CMD2 ADRESSE EDT-ANWEISUNG LA R2,LEERMSG MSG1 = LEERSTRING LA R3,LEERMSG MSG2 = LEERSTRING LA R4,ZUSMSG2 ADR. DER AUSZUGEBENDEN FEHLERMELDUNG * BAL R11,CMDCALL AUFRUF DER CMD-SCHNITTSTELLE DES EDT * * IN DIE ARBEITSDATEI 0 WECHSELN UND IN DEN * F-MODUS-DIALOG UMSCHALTEN * LA R1,CMD3 ADRESSE EDT-ANWEISUNG LA R2,MESSAGE3 ADRESSE DER AUSZUGEBENDEN MELDUNG LA R3,LEERMSG MSG2 = LEERSTRING LA R4,ZUSMSG3 ADR. DER AUSZUGEBENDEN FEHLERMELDUNG * BAL R11,CMDCALL AUFRUF DER CMD-SCHNITTSTELLE DES EDT *
* ENDEMELDUNG AUSGEBEN * LA R1,6 * LAENGE = 6 FUER DIE AUSGABE STH R1,LEERMSG * EINES LEERZEICHENS * WROUT LEERMSG,WROUTERR WROUT ENDEMSG,WROUTERR WROUT LEERMSG,WROUTERR * TERM PROGRAMM BEENDEN * * BEHANDLUNG VON EDT-FEHLERN * EDTERR EQU * OC EGLRMSGL,EGLRMSGL LAENGE DER EDT-MELDUNG = 0 ? BZ NOMSG JA, DANN NICHTS AUSGEBEN * * ZUSAETZLICH ANGEGEBENE MELDUNG AUSGEBEN * LH R5,0(R4) LAENGE DER ZUSAETZLICHEN MELDUNG BCTR R5,0 -1 FUER EX-BEFEHL EX R5,EXMVC MELDUNG UEBERNEHMEN * WROUT ZUSMSG,WROUTERR ZUSAETZLICHE MELDUNG AUSGEBEN * * EDT-FEHLERMELDUNG AUSGEBEN * LH R1,EGLRMSGL * LAENGE DER EDT-MELDUNG LA R1,5+14(R1) * + 5 (WEGEN SATZLAENGENFELD) * * + 14 (WG. "MELDUNGSTEXT: ") STH R1,ERRMSG1 * IM LAENGENFELD ABLEGEN MVC ERRTEXT,EGLRMSGF MELDUNGSTEXT UEBERTRAGEN * WROUT ERRMSG1,WROUTERR EDT-MELDUNG AUSGEBEN * NOMSG EQU * TERM PROGRAMM BEENDEN * * BEHANDLUNG VON WRTRD-FEHLERN * WRTRDERR EQU * WROUT ERRMSG2,WROUTERR * WROUTERR EQU * TERM PROGRAMM BEENDEN EJECT
********************************************************************** * * * UNTERPROGRAMME * * * ********************************************************************** * ********************************************************************** * UNTERPROGRAMM: CMDCALL * * * * AUFGABE: * * DIESES UNTERPROGRAMM VERSORGT DIE PARAMETERLISTE FUER DIE CMD- * * SCHNITTSTELLE DES EDT UND RUFT ANSCHLIESSEND DIE CMD-SCHNITTSTELLE * * AUF. NACH DER RUECKKEHR VOM EDT WIRD IM OK-FALL ZUM AUFRUFER * * ZURUECKGEKEHRT, IM FEHLERFALL ZU EINER FEHLERROUTINE, WELCHE * * DIE ZUSAETZLICH UEBERGEBENE FEHLERMELDUNG SOWIE DIE VOM EDT * * ZURUECK GELIEFERTE MELDUNG AUSGIBT. * * * * PARAMETER: (R1): (IN) ADRESSE EINES SATZES VARIABLER LAENGE * * (DVS-FORMAT), DER DIE AUSZUFUEHRENDEN * * EDT-ANWEISUNGEN ENTHAELT. * * (R2): (IN) ADRESSE EINES SATZES VARIABLER LAENGE * * (DVS-FORMAT), DER DIE VOM EDT AUSZUGEBENDE * * MELDUNG1 ENTHAELT. * * (R3): (IN) ADRESSE EINES SATZES VARIABLER LAENGE * * (DVS-FORMAT), DER DIE VOM EDT AUSZUGEBENDE * * MELDUNG2 ENTHAELT. * * (R4): (IN) ADRESSE EINES SATZES VARIABLER LAENGE * * (DVS-FORMAT), DER DIE IM FEHLERFALL * * ZUSAETZLICH AUSZUGEBENDE MELDUNG ENTHAELT. * * (R11): (IN) RUECKSPRUNGADRESSE * * * * RUECKGABEWERT: KEINER * ********************************************************************** * CMDCALL EQU * STM R1,R3,COMMAND CMD-PARAMETERLISTE VERSORGEN LA R1,CMDPL ADR. DER CMD-PARAMETERLISTE LA R13,SAVEAREA ADR. DER SAVEAREA L R15,=V(IEDTCMD) ADR. DER CMD-SCHNITTSTELLE * BALR R14,R15 EDT-CMD-SCHNITTSTELLE AUFRUFEN * CLC EGLMRET,=AL2(EUPRETOK) FEHLER BEIM AUFRUF DES EDT ? BNE EDTERR JA, FEHLERMELDUNGEN AUSGEBEN BR R11 NEIN, ZURUECK ZUM AUFRUFER EJECT
********************************************************************** * * * KONSTANTEN * * * ********************************************************************** * * REGISTERDEFINITIONEN * R0 EQU 0 R1 EQU 1 R2 EQU 2 R3 EQU 3 R4 EQU 4 R5 EQU 5 R6 EQU 6 R7 EQU 7 R8 EQU 8 R9 EQU 9 R10 EQU 10 R11 EQU 11 R12 EQU 12 R13 EQU 13 R14 EQU 14 R15 EQU 15 EJECT ********************************************************************** * * * FELDER * * * ********************************************************************** * SAVEAREA DS 18F * EXMVC MVC ZUSMSG(0),0(R4) EX-BEFEHL ZUR UEBERTRAGUNG * DER ZUSATZMELDUNG * EXMVCCSN MVC CCSN(0),EINGABE CCSN IN ON-ANWEISUNG EINTRAGEN LEERMSG DC Y(LEERMEND-LEERMSG) LEERER SATZ DS CL2 DC ' ' DC ' ' LEERMEND EQU * * PROMPT DC Y(PRMPTEND-PROMPT) EINGABE-AUFFORDERUNG DS CL2 DC C' ' DC C'Bitte CCSN eingeben (UTFE, UTF16, EDF...): ' PRMPTEND EQU *
* EINB DC Y(EINBEND-EINB) EINGABEBEREICH FUER WRTRD DS CL2 EINGABE DC C' ' EINBEND EQU * * CMD1 DC Y(CMD1END-CMD1) EDT-ANWEISUNGSFOLGE 1 DS CL2 DC C'SHOW F=* TO 1 LONG' CMD1END EQU * * CMD2 DC Y(CMD2END-CMD2) EDT-ANWEISUNGSFOLGE 2 DS CL2 DC C'ON &&:100-107: FIND NOT ''' CCSN DC C' ' DC C' DELETE;RENUMBER' CMD2END EQU * * CMD3 DC Y(CMD3END-CMD3) EDT-ANWEISUNGSFOLGE 3 DS CL2 DC C'SETF(0);DIALOG' CMD3END EQU * * MESSAGE3 DC Y(MSG3END-MESSAGE3) VOM EDT AUSZUGEBENDE MELDUNG DS CL2 DC C'Beispiel 5 fuer die UP-Schnittstelle' MSG3END EQU * * ERRMSG1 DC Y(ERRM1END-ERRMSG1) SATZ ZUR AUSGABE DER EDT-MELDUNG DS CL2 DC C' ' DC C'Meldungstext: ' ERRTEXT DS CL80 ERRM1END EQU * * ERRMSG2 DC Y(ERRM2END-ERRMSG2) FEHLERMELDUNG BEI EINGABEFEHLERN DS CL2 DC C' ' DC C'Eingabe zu lang!' ERRM2END EQU * * STARTMSG DC Y(STRTMEND-STARTMSG) STARTMELDUNG DS CL2 DC C' ' DC C'Start Beispiel5' STRTMEND EQU * * ENDEMSG DC Y(ENDEMEND-ENDEMSG) ENDEMELDUNG
DS CL2 DC C' ' DC C'Ende Beispiel5' ENDEMEND EQU * * ZUSMSG1 DC Y(ZUSM1END-ZUSMSG1) ZUSAETZLICH AUSZUGEBENDE DS CL2 FEHLERMELDUNG BEI DER DC C' ' EDT-ANWEISUNGSFOLGE 1 DC C'Fehler bei der @SHOW-Anweisung!' ZUSM1END EQU * * ZUSMSG2 DC Y(ZUSM2END-ZUSMSG2) ZUSAETZLICH AUSZUGEBENDE DS CL2 FEHLERMELDUNG BEI DER DC C' ' EDT-ANWEISUNGSFOLGE 2 DC C'Fehler bei der @ON- oder der @RENUMBER-Anweisung!' ZUSM2END EQU * * ZUSMSG3 DC Y(ZUSM3END-ZUSMSG3) ZUSAETZLICH AUSZUGEBENDE DS CL2 FEHLERMELDUNG BEI DER DC C' ' EDT-ANWEISUNGSFOLGE 3 DC C'Fehler bei der @SETF- oder der @DIALOG-Anweisung!' ZUSM3END EQU * * ZUSMSG DC Y(ZUSMEND-ZUSMSG) SATZ VARIABLER LAENGE ZUR DS CL2 AUSGABE DER ZUSAETZLICHEN DC C' ' FEHLERMELDUNG DC CL80' ' ZUSMEND EQU * * * PARAMETERLISTE DER EDT-CMD-SCHNITTSTELLE * CMDPL DC A(EDTGLCB) ADRESSE EDTGLCB DC A(EDTUPCB) ADRESSE EDTUPCB COMMAND DC A(0) ADRESSE DER EDT-ANWEISUNGEN MSG1 DC A(0) ADRESSE MESSAGE1 MSG2 DC A(0) ADRESSE MESSAGE2 * * EDT-SPEZIFISCHE SCHNITTSTELLEN-MAKROS DER V17.0A * IEDTGLCB C,VERSION=2 ------------------------------- (2) * IEDTUPCB C,VERSION=3 END
Erläuterungen
(1) | Zwischen CCSN und Apostroph dürfen keine Leerzeichen stehen, sonst ist eine Suche nach Teilzeichenketten (z.B. EDF ) nicht möglich. |
(2) | Es wird die V17-Version der jeweiligen Schnittstelle generiert. |
Wenn die in Abschnitt „Produktion von Hauptprogrammen in Assembler“ erklärte Prozedur im BS2000 in einer Datei namens ASS.DO
und die Quelldatei als S-Element BEISPIEL5.ASS
in der Bibliothek EDT.BEISPIELE
abgelegt ist, kann das obige Programm mit
/CALL-PROC ASS.DO,(5)
übersetzt und gebunden werden. Das erzeugte Programm ist anschließend mit
/START-EXECUTABLE-PROGRAM (E=BSP5A,L=EDT.BEISPIELE)
ausführbar. Bei Ablauf von ASS.DO
werden etwa folgende Ausgaben vom System bzw. vom Assembler erzeugt:
% BLS0523 ELEMENT 'ASSEMBH', VERSION '012', TYPE 'C' FROM LIBRARY' :MARS: $TSOS.SYSPRG.ASSEMBH.012' IN PROCESS % BLS0500 PROGRAM 'ASSEMBH', VERSION '01.2C00' OF '2002-03-06' LOADED % BLS0552 COPYRIGHT (C) FUJITSU SIEMENS COMPUTERS GMBH 2002. ALL RIGHTS RESERVED % ASS6010 V01.2C00 OF BS2000 ASSEMBH READY % ASS6011 ASSEMBLY TIME: 836 MSEC % ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES % ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS % ASS6006 LISTING GENERATOR TIME: 291 MSEC % ASS6012 END OF ASSEMBH % BND0500 BINDER VERSION 'V02.3A00' STARTED % BND1501 LLM FORMAT: '1' % BND1101 BINDER NORMALLY TERMINATED. SEVERITY CLASS: 'OK'
Die von diesem Beispielprogramm erzeugten Ausgaben entsprechen denen von Beispiel1, mit Ausnahme der Meldung CCM0998
nach Programmbeendigung.