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.