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.