Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Beispiel 5 - Assembler-Hauptprogramm

&pagelevel(3)&pagelevel

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.