Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

Example 5 - Assembler main program

&pagelevel(3)&pagelevel

In terms of functionality, example 5 is identical to example 1, the difference being that it is programmed in Assembler instead of C.

          TITLE 'BEISPIEL5'
********************************************************************
*                                                                  *
* Example 5                                                        *
*                                                                  *
* This example uses only the iedtcmd                               *
* interface to execute EDT statements.                             *
* The functionality is identical to that of "Example 1" in C.      *
*                                                                  *
* The example program performs the following actions:              *
*                                                                  *
* 1) Read a selection criterion (CCSN)                             *
* 2) Output a table of contents to work file 0                     *
*    using the @SHOW statement (Format 1).                         *
* 3) Delete all the lines which do not contain the search          *
*    criterion with the @ON statement (Format 10).                 *
* 4) Set work file 0 and then switch to the F mode                 *
*    dialog by means of a @SETF statement followed by a            *
*    @DIALOG statement.                                            *
* 5) The user can now edit the lines that are output               *
*    and after that terminate EDT and consequently also this       *
*    example program.                                              *
*                                                                  *
********************************************************************
*
BEISP5   START
BEISP5   AMODE ANY
BEISP5   RMODE ANY
         GPARMOD 31
*
         BALR  R10,0
         USING *,R10
*
*        OUTPUT START MESSAGE
*
         LA    R1,6               * LENGTH = 6 FOR THE OUTPUT
         STH   R1,LEERMSG         * OF A BLANK
*
         WROUT LEERMSG,WROUTERR
         WROUT STARTMSG,WROUTERR
         WROUT LEERMSG,WROUTERR
*
*        READ IN CCSN
*
         WRTRD PROMPT,,EINB,,12,WRTRDERR
*
         LH    R15,EINB           LENGTH OF INPUT
         SH    R15,=Y(5)          4 BYTES FOR SLF AND 1 FOR EX
         EX    R15,EXMVCCSN       PASS CCS TO THE ON STATEMENT
         LA    R14,CCSN           SET POSITION AT CHARACTER
         LA    R14,1(R14,R15)     AFTER CCSN
         MVI   0(R14),''''        SET APOSTROPHE          --------------- (1)
*
         LA    R1,4               * LENGTH = 4 TO PASS AN
         STH   R1,LEERMSG         * EMPTY STRING TO EDT
*
*        OUTPUT TABLE OF CONTENTS TO WORK FILE 0
*
         LA    R1,CMD1            ADDRESS OF EDT STATEMENT
         LA    R2,LEERMSG         MSG1 = EMPTY STRING
         LA    R3,LEERMSG         MSG2 = EMPTY STRING
         LA    R4,ZUSMSG1         ADDR. OF ERROR MESSAGE TO BE OUTPUT
*
         BAL   R11,CMDCALL        CALL OF THE EDT'S CMD INTERFACE
*
*       DELETE ALL LINES WHICH DO NOT CORRESPOND TO THE SEARCH 
*       CRITERION (CCSN) AND RENUMBER THE REMAINING LINES
*
         LA    R1,CMD2            ADDRESS OF THE EDT STATEMENT
         LA    R2,LEERMSG         MSG1 = EMPTY STRING
         LA    R3,LEERMSG         MSG2 = EMPTY STRING
         LA    R4,ZUSMSG2         ADDR. OF ERROR MESSAGE TO BE OUTPUT
*
         BAL   R11,CMDCALL        CALL OF THE EDT'S CMD INTERFACE
*
*        GO TO WORK FILE 0 AND SWITCH TO THE
*        F MODE DIALOG
*
         LA    R1,CMD3            ADDRESS OF EDT STATEMENT
         LA    R2,MESSAGE3        ADDRESS OF MESSAGE TO BE OUTPUT
         LA    R3,LEERMSG         MSG2 = EMPTY STRING
         LA    R4,ZUSMSG3         ADDR. OF ERROR MESSAGE TO BE OUTPUT
*
         BAL   R11,CMDCALL        CALL OF THE EDT'S CMD INTERFACE
*
*        OUTPUT END MESSAGE
*
         LA    R1,6               * LENGTH = 6 FOR THE OUTPUT
         STH   R1,LEERMSG         * OF A BLANK
*
         WROUT LEERMSG,WROUTERR
         WROUT ENDEMSG,WROUTERR
         WROUT LEERMSG,WROUTERR
*
         TERM                          TERMINATE PROGRAM
*
*        HANDLING OF EDT ERRORS
*
EDTERR   EQU   *
         OC    EGLRMSGL,EGLRMSGL       LENGTH OF EDT MESSAGE = 0 ?
         BZ    NOMSG                   YES, THEN OUTPUT NOTHING
*
*        OUTPUT ADDITIONALLY SPECIFIED MESSAGE
*
         LH    R5,0(R4)                LENGTH OF ADDITIONAL MESSAGE
         BCTR  R5,0                    -1 FOR EX INSTRUCTION
         EX    R5,EXMVC                TAKE OVER MESSAGE
*
         WROUT ZUSMSG,WROUTERR         OUTPUT ADDITIONAL MESSAGE
*
*        OUTPUT EDT ERROR MESSAGE
*
         LH    R1,EGLRMSGL             * LENGTH OF EDT MESSAGE
         LA    R1,5+14(R1)             * + 5 (DUE TO RECORD LENGTH FIELD)
*                                      * + 14 (DUE TO "MELDUNGSTEXT: ")
         STH   R1,ERRMSG1              * STORE IN LENGTH FIELD
         MVC   ERRTEXT,EGLRMSGF        PASS MESSAGE TEXT
*
         WROUT ERRMSG1,WROUTERR        OUTPUT EDT MESSAGE
*
NOMSG    EQU   *
         TERM                          TERMINATE PROGRAM
*
*        HANDLING OF WRTRD ERRORS
*
WRTRDERR EQU   *
         WROUT ERRMSG2,WROUTERR
*
WROUTERR EQU   *
         TERM                          TERMINATE PROGRAM
         EJECT
**********************************************************************
*                                                                    *
*        SUBROUTINES                                                 *
*                                                                    *
**********************************************************************
*
**********************************************************************
* SUBROUTINE: CMDCALL
*
*                                                                    *
* TASK:                                                              *
* THIS SUBROUTINE ENTERS VALUES IN THE PARAMETER LIST FOR THE EDT'S  *
* INTERFACE AND THEN CALLS THE CMD INTERFACE                         *
* AFTER  A SUCCESSFUL RETURN FROM EDT, CONTROL IS RETURNED TO THE    *
* CALLER. IF AN ERROR OCCURS, CONTROL PASSES TO AN ERROR ROUTINE     *
* WHICH OUTPUTS THE ADDITIONALLY PASSED ERROR MESSAGE AS WELL        *
* AS THE MESSAGE RETURNED BY EDT.                                    *
*                                                                    *
* PARAMETER: (R1):  (IN) ADDRESS OF A RECORD OF VARIABLE LENGTH      *
*                        (DMS FORMAT) WHICH CONTAINS THE EDT         *
*                        STATEMENTS THAT ARE TO BE EXECUTED.         *
*            (R2):  (IN) ADDRESS OF A RECORD OF VARIABLE LENGTH      *
*                        (DMS FORMAT) WHICH CONTAINS THE MESSAGE1    *
*                        THAT IS TO BE OUTPUT BY EDT.                *
*            (R3):  (IN) ADDRESS OF A RECORD OF VARIABLE LENGTH      *
*                        (DMS FORMAT) WHICH CONTAINS THE MESSAGE2    *
*                        THAT IS TO BE OUTPUT BY EDT.                *
*            (R4):  (IN) ADDRESS OF A RECORD OF VARIABLE LENGTH      *
*                        (DMS FORMAT) WHICH CONTAINS THE ADDITIONAL  *
*                        MESSAGE FOR OUTPUT BY EDT IF AN ERROR OCCURS*
*            (R11): (IN) RETURN ADDRESS                              *
*                                                                    *
* RETURN VALUE: NONE                                                 *
**********************************************************************
*
CMDCALL  EQU   *
         STM   R1,R3,COMMAND           FILL CMD PARAMETER LIST
         LA    R1,CMDPL                ADDR. OF CMD PARAMETER LIST
         LA    R13,SAVEAREA            ADDR. OF SAVE AREA
         L     R15,=V(IEDTCMD)         ADDR. OF CMD INTERFACE
*
         BALR  R14,R15                 CALL EDT CMD INTERFACE
*
         CLC   EGLMRET,=AL2(EUPRETOK)  ERROR ON EDT CALL?
         BNE   EDTERR                  YES? OUTPUT ERROR MESSAGE
         BR    R11                     NO? RETURN TO CALLER
         EJECT
**********************************************************************
*                                                                    *
*        CONSTANTS                                                   *
*                                                                    *
**********************************************************************
*
*        REGISTER DEFINITIONS
*
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
**********************************************************************
*                                                                    *
*        FIELDS                                                      *
*                                                                    *
**********************************************************************
*
SAVEAREA DS    18F
*
EXMVC    MVC   ZUSMSG(0),0(R4)         EX INSTRUCTION FOR TRANSFER 
*                                      OF THE ADDITIONAL MESSAGE
*
EXMVCCSN MVC   CCSN(0),EINGABE         ENTER CCSN IN ON STATEMENT
LEERMSG  DC    Y(LEERMEND-LEERMSG)     EMPTY RECORD
         DS    CL2
         DC    ' '
         DC    ' '
LEERMEND EQU   *
*
PROMPT   DC    Y(PRMPTEND-PROMPT)      INPUT PROMPT
         DS    CL2
         DC    C' '
         DC    C'Bitte CCSN eingeben (UTFE, UTF16, EDF...): '
PRMPTEND EQU   *
*
EINB     DC    Y(EINBEND-EINB)         INPUT RANGE FOR WRTRD
         DS    CL2
EINGABE  DC    C'        '
EINBEND  EQU   *
*
CMD1     DC    Y(CMD1END-CMD1)         EDT STATEMENT SEQUENCE 1
         DS    CL2
         DC    C'SHOW F=* TO 1 LONG'
CMD1END  EQU   *
*
CMD2     DC    Y(CMD2END-CMD2)         EDT STATEMENT SEQUENCE 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 STATEMENT SEQUENCE 3
         DS    CL2
         DC    C'SETF(0);DIALOG'
CMD3END  EQU   *
*
MESSAGE3 DC    Y(MSG3END-MESSAGE3)     MESSAGE TO BE OUTPUT BY EDT
         DS    CL2
         DC    C'Beispiel 5 fuer die UP-Schnittstelle'
MSG3END  EQU   *
*
ERRMSG1  DC    Y(ERRM1END-ERRMSG1)     RECORD FOR OUTPUT OF EDT MESSAGE
         DS    CL2
         DC    C' '
         DC    C'Meldungstext: '
ERRTEXT  DS    CL80
ERRM1END EQU   *
*
ERRMSG2  DC    Y(ERRM2END-ERRMSG2)     ERROR MESSAGE ON INPUT ERRORS
         DS    CL2
         DC    C' '
         DC    C'Eingabe zu lang!'
ERRM2END EQU   *
*
STARTMSG DC    Y(STRTMEND-STARTMSG)    START MESSAGE
         DS    CL2
         DC    C' '
         DC    C'Start Beispiel5'
STRTMEND EQU   *
*
ENDEMSG  DC    Y(ENDEMEND-ENDEMSG)     END MESSAGE
         DS    CL2
         DC    C' '
         DC    C'Ende Beispiel5'
ENDEMEND EQU   *
*
ZUSMSG1  DC    Y(ZUSM1END-ZUSMSG1)     ADDITIONAL ERROR MESSAGE
         DS    CL2                     FOR OUTPUT IN EDT
         DC    C' '                    STATEMENT SEQUENCE 1
         DC    C'Fehler bei der @SHOW-Anweisung!'
ZUSM1END EQU   *
*
ZUSMSG2  DC    Y(ZUSM2END-ZUSMSG2)     ADDITIONAL ERROR MESSAGE
         DS    CL2                     FOR OUTPUT IN EDT
         DC    C' '                    STATEMENT SEQUENCE 2
         DC    C'Fehler bei der @ON- oder der @RENUMBER-Anweisung!'
ZUSM2END EQU   *
*
ZUSMSG3  DC    Y(ZUSM3END-ZUSMSG3)     ADDITIONAL ERROR MESSAGE
         DS    CL2                     FOR OUTPUT IN EDT
         DC    C' '                    STATEMENT SEQUENCE 3
         DC    C'Fehler bei der @SETF- oder der @DIALOG-Anweisung!'
ZUSM3END EQU   *
*
ZUSMSG   DC    Y(ZUSMEND-ZUSMSG)       RECORD OF VARIABLE LENGTH
         DS    CL2                     FOR OUTPUT OF THE ADDITIONAL
         DC    C' '                    ERROR MESSAGE
         DC    CL80' '
ZUSMEND  EQU   *
*
*        PARAMETER LIST FOR THE EDT CMD INTERFACE
*
CMDPL    DC    A(EDTGLCB)              EDTGLCB ADDRESS
         DC    A(EDTUPCB)              EDTUPCB ADDRESS
COMMAND  DC    A(0)                    ADDRESS OF EDT STATEMENTS
MSG1     DC    A(0)                    ADDRESS OF MESSAGE1
MSG2     DC    A(0)                    ADDRESS OF MESSAGE2
*
*        EDT-SPECIFIC INTERFACE MACROS IN V17.0A
*
         IEDTGLCB C,VERSION=2          ------------------------------- (2)
*
         IEDTUPCB C,VERSION=3
         END

Explanations

(1)There must not be any blanks between CCSN and the apostrophe as otherwise no search for substrings (e.g. EDF) is possible.
(2)The V17 version for the relevant interface is generated.

If the procedure explained in the section “Producing main programs in Assembler” is stored in a file named ASS.DO in BS2000 and the source file is stored as the S element BEISPIEL5.ASS in the library EDT.BEISPIELE then the above program can be compiled and linked with

/CALL-PROC ASS.DO,(5)

The generated program can then be executed using

/START-EXECUTABLE-PROGRAM (E=BSP5A,L=EDT.BEISPIELE)

When ASS.DO runs, the following or similar output is generated by the system or the compiler:

%  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'

The output generated by this example program corresponds to the output generated in example 1 with the exception of the message CCM0998 after program termination.