|
[Home]
[Products]
[Support]
[Documents]
[Partners]
[Contact Us]
[Search]
[Freeware]
The STRING assembler macro instruction was developed in the late 1980s on MVS/XA using the Assembler H, and started to be distributed on the CBT Tape in 1992. STRING can be used in VSE/ESA and z/VSE using the High-Level Assembler; it is described on this page. Note: When the %TIME operand is specified, STRING internally uses the TIME macro, which is available on all MVS systems, and also on VSE/ESA 2.4 and above. On older VSE systems, the TIME macro is not available and %TIME should not be used. The source of the STRING macro instruction is available here. An MVS sample program can also be found below. It is more complex than the sample VSE program. Sample VSE ProgramThis is a very simple VSE program that uses the STRING macro. Its JCL is MVS JCL because this program was written, assembled and executed in MVS using VSE-ON-MVS libraries. VSE users need to convert the JCL to assemble and execute this program in VSE, provided, of course, the source code of the STRING macro has been installed on the VSE system.
//HLASM EXEC PGM=ASMA90,PARM=(OBJECT,NODECK,NOESD,NORLD,NOXREF)
**********************************************************************
**********************************************************************
******** VSE TEST PROGRAM FOR THE 'STRING' MACRO - HLASM ONLY ********
**********************************************************************
**********************************************************************
BALR R7,0
USING *,R7
COMRG REG=(R8) COM-REG
USING COMREG,R8
** LA R9,COMREND-1 Last byte of COM-REG
** PDUMP (R8),(R9) Print COMREG in hex
PACK JDATE,YYDDD PACK Julian Date
*
OPEN SYSLST OPEN Print File
STRING '1Title Line -',40X,'Page ',(KPAGE,P,R4Z), X
INTO=PRTLINE
PUT SYSLST Write title line
*
STRING ' JOBNAME=',(COMNAME,,L), JOB NAME w/o trail spaces X
' COM-REG=',((R8),,X), COM-REG addr X
' YYDDD=',YYDDD, Julian Date X
' YYYY-MM-DD=',(JDATE,P,YYYY-MM-DD), X
' HH:MM:SS.hhh=',%TIME, Current Time X
INTO=PRTLINE
PUT SYSLST Write PRTLINE
*
STRING 1X,INTO=PRTLINE Blank line
PUT SYSLST Write PRTLINE
*
CLOSE SYSLST CLOSE Print File
EOJ RC=1 EOJ
*
SYSLST DTFPR DEVADDR=SYSLST,IOAREA1=PRTLINE,CTLCHR=ASA
KPAGE DC P'0001' Page counter
JDATE DS P'99365' Packed Julian Date
PRTLINE DS CL121 Print Line
STRING GENERATE Generate @STRING Routine
MAPCOMR COM-REG MAP
IPW$EQU R0-RF
R14 EQU RE STRING needs R14
END
//SYSLIB DD DSN=GSFSOFT.VSEONMVS.MACLIB,DISP=SHR
// DD DSN=CBTTAPE.FILE183.PDS(STRING),DISP=SHR
// DD DSN=SYS1.MACLIB(DCB),DISP=SHR
//SYSUT1 DD UNIT=VIO,SPACE=(CYL,1)
//SYSPRINT DD SYSOUT=*
//SYSLIN DD DSN=&&SYSLIN,DISP=(NEW,PASS),UNIT=VIO,BLKSIZE=3200
//*
//GO EXEC PGM=LOADER,PARM=NOPRINT
//STEPLIB DD DSN=GSFSOFT.VSEONMVS.LOAD,DISP=SHR
//SYSLIN DD DSN=&&SYSLIN,DISP=(OLD,DELETE)
//SYSLST DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
MVS Sample ProgramThis is an MVS program that is used to test most features of the STRING macro. This is not a simple program and not a VSE program, sorry !
********************************************************************** 11580000
********************************************************************** 11590000
******** MVS TEST PROGRAM FOR THE 'STRING' MACRO - HLASM ONLY ******** 11600017
********************************************************************** 11610000
********************************************************************** 11620000
TESTPGM START X'027000' 11700002
TESTPGM AMODE 24 (PRE-SMS PUT) 11710008
BALR R12,0 11720000
USING *,R12 11730000
OPEN (SYSPRINT,OUTPUT) 11800000
STRING 'Assembler is &SYSVER, DATE is &SYSDATC',INTO=XXX 11810007
PUT SYSPRINT,XXX 11820007
STRING 'AMPERSAND=&& AND APOSTROPHE='' ',INTO=XXX 11830014
PUT SYSPRINT,XXX 11840014
*
RBPREFIX EQU * 11850002
RBINTCOD EQU *+6,2,C'H' ? 11860002
L R1,PSATOLD-PSA(0,0) TCB 11870008
L R1,0(,R1) TCBRBP 11880002
L R2,PSAAOLD-PSA(0,0) ASCB 11890014
R2ASCB USING ASCB,R2 11900014
L R8,=X'88888888' 11902017
STRING 'SVC',(RBINTCOD-RBPREFIX(R1),H,R3Z), X11910002
1X,(WWWW,,T),' - ', VV.MM OF SVC RTNE X11920002
' COM-REG=',((R8),,X), COM-REG ADDR X11930008
'ASID=',(R2ASCB.ASCBASID,,X),1X, X11940014
PARM1,1X, MAIN PGM NAME X11950002
INTO=XXX 11960002
PUT SYSPRINT,XXX 11970002
*
LA R2,XXX 11990002
STRING 1X,INTO=((R2),8) 12000002
*
MACRO JDATE MACRO 12010000
@JDATE &DATE JDATE MACRO 12020000
LA R1,=P'&DATE' JDATE MACRO 12030000
*** STRING ((R1),P),2X,((R1),P),INTO=XXX 12040000
STRING ((R1),P,R5Z), JDATE MACRO X12050000
2X,((R1),P,YYMMDD), JDATE MACRO X12060000
2X,((R1),P,YY/MM/DD), JDATE MACRO X12070000
2X,((R1),P,DD/MM/YY), JDATE MACRO X12080000
2X,((R1),P,MM/DD/YY), JDATE MACRO X12090000
2X,((R1),P,YYYYMMDD), JDATE MACRO X12100000
2X,((R1),P,YYYY-MM-DD), JDATE MACRO X12110000
INTO=XXX JDATE MACRO 12120000
PUT SYSPRINT,XXX JDATE MACRO 12130000
MEND JDATE MACRO 12140000
*
@JDATE 90058 12150000
@JDATE 91059 12160000
@JDATE 93060 12170000
@JDATE 94365 12180000
@JDATE 80058 12190000
@JDATE 84059 12200000
@JDATE 88060 12210000
@JDATE 92061 12220000
@JDATE 00366 12230000
LA R2,1234 12240000
STRING 'CVTPTR=X''',(CVTPTR,4,X),'''',INTO=XXX, X12250000
' 1234=',((R2),,R4Z) 12260000
PUT SYSPRINT,XXX 12270000
L R1,CVTPTR(0,0) 12280008
STRING 'CVTDATE=',(56(R1),P,YYMMDD),INTO=XXX 12290000
PUT SYSPRINT,XXX 12300000
LA R0,1000 12310000
LA R3,0033 12320000
STRING 'D1=/',D1,'/,WWWW=/',WWWW,'/', X12330000
((R3),,L),'/',((R3),,X),'/',((R0),,L),'/', X12340000
((R3),,R9B),'/',INTO=XXX 12350000
LR R4,R15 LENGTH USED 12360000
PUT SYSPRINT,XXX 12370000
STRING WWWW, X12380000
(4(R13),4,X),'''',(4(R13),F),'''', X12390000
(4(R13),F,L),'''', X12400000
(4(R13),F,L11),'''', X12410000
(4(R13),F,Z9),'''', X12420000
8X,'R4=',((R4),,L), LENGTH USED X12430000
INTO=XXX 12440000
PUT SYSPRINT,XXX 12450000
*
STRING %TIME,D1,'B12345678B',5X,(CTR1,P),1X,PARM1,1X,PARM2, X12460000
INTO=XXX 12470000
PUT SYSPRINT,XXX 12480000
LA R3,17 12490000
STRING INTO=XXX,'CCC1234A',(D1,(R3)),'.',(CTR1,P,R7Z) 12500000
PUT SYSPRINT,XXX 12510000
STRING C'DDN2(',(D1,,T),')',X'40C1C2,C3C4', +12520009
' PSATOLD=',(PSATOLD-PSA,,X), +12530000
INTO=XXX 12540000
PUT SYSPRINT,XXX 12550000
AIF ('&SYSVER' EQ 'ASMH').HLASM99 12560007
PSABASE USING PSA,R0 12570000
STRING 'PSATOLD=',(PSABASE.PSATOLD,,X), +12580000
' PSATOLD=',(PSATOLD-PSA,,X), +12590000
INTO=XXX 12600000
PUT SYSPRINT,XXX 12610000
.HLASM99 ANOP 12620000
BALR R0,0 12630000
STRING 'R0=',((R0),,X),' 16(R0)=',(16(R0),4,X),INTO=XXX 12640000
PUT SYSPRINT,XXX 12650000
STRING 'R0=',((R0),,X),' CTR1=',(CTR1,P,R5B),INTO=XXX 12660012
PUT SYSPRINT,XXX 12670012
SLR R0,R0 12680012
STRING 'R0=',((R0),,X),' CTR2=',(CTR2,P,L),'.',INTO=XXX 12690015
PUT SYSPRINT,XXX 12700012
* 12710016
CALL TCSECT2 <- 2nd CSECT 12720016
* 12730016
CALL TCSECT3 <- 3rd CSECT 12740016
* 12750002
AMODE31 LA R12,0(,R12) BALR->BASR 12760002
L R15,=A(*+X'80000006') AMODE=31 12770002
BSM 0,R15 AMODE=31 12780002
L R1,=A(@STRING) point at CSECT 12790007
CLC =C'/390',11(R1) (GENERATE,AR_MODE) ? 12800007
BNE EXIT no, prevent S0E0 12810007
DSPSERV CREATE, X12820002
NAME==CL8'STRING00', C'STRING00' X12830002
BLOCKS=HDRBLKS, SIZE IN PAGES X12840002
STOKEN=DSPCSTKN, X12850002
ORIGIN=DSPCORG 12860002
ALESERV ADD,STOKEN=DSPCSTKN,ALET=DSPCALET 12870002
LAM R8,R8,DSPCALET POINT TO THE DATA SPACE 12880002
L R8,DSPCORG SPACE ORIGIN (0 OR 4096) 12890002
SAC 512 MODE=AR 12900002
LAM R14,R6,TESTPGM+40 S0E0-28 12910003
STRING WWWW,'AR_MODE WORKED OK',INTO=(2048(R8),100) 12920007
LAM R2,R2,DSPCALET POINT TO THE DATA SPACE 12930007
LR R2,R8 SPACE ORIGIN (0 OR 4096) 12940007
STRING (2048+L'WWWW(R2),30,T),INTO=XXX 12950007
SAC 0 MODE=AR OFF 12960007
PUT SYSPRINT,XXX AR_MODE WORKS OK 12970007
* 12980002
EXIT SLR R15,R15 12990007
SVC 3 GOBACK 13000002
*
* STRING is used in other CSECTs
*
TCSECT2 CSECT 13020016
BAKR R14,0 13030016
LR R10,R15 13040016
USING TCSECT2,R10 13050016
STRING '----> TCSECT2 STRING <---- R516',INTO=XXX 13060016
PUT SYSPRINT,XXX 13070016
L R1,CVTPTR(0,0) 13080016
STRING 'CVTDATE=',(56(R1),4,X),',R8=',((R8),,L),INTO=XXX 13090016
PUT SYSPRINT,XXX 13100016
PR 13110016
DROP 13120017
* 13130016
CSECT no-name 13140016
ENTRY TCSECT3 13150016
TCSECT3 BAKR R14,0 13160016
LR R12,R15 13170017
USING TCSECT3,R12 13180017
L R10,PRT3ADDR 13190017
USING SYSPRINT,R10 13200017
STRING '----> TCSECT3 STRING <---- R517',INTO=XXX 13210017
PUT SYSPRINT,XXX 13220017
L R1,CVTPTR(0,0) 13230016
STRING 'CVTDATE=',(56(R1),4,X),',R9=',((R9),,L),INTO=XXX 13240017
PUT SYSPRINT,XXX 13250017
PR 13260016
DS 0F 13270017
PRT3ADDR DC A(SYSPRINT) 13280017
*
* Data Areas
*
TESTPGM CSECT 13300016
D1 DC C'D1-----D1 ' 13310000
WWWW DC C'WWWW' 13320000
CTR1 DC P'1' 13330000
CTR2 DC P'-33' 13340015
PARM1 DC C'<-PARM1->' 13350000
PARM2 DC C'<-PARM2->' 13360000
DSPCSTKN DS XL8 0 AS TOKEN 13370002
DSPCALET DS F 8 ALET 13380002
DSPCORG DS F 12 ORIGIN 13390002
HDRBLKS DC F'100' 13400002
CVTPTR EQU 0016,4,C'A' 13410000
SYSPRINT DCB DSORG=PS,DDNAME=SYSPRINT,MACRF=PM,RECFM=FB,LRECL=121 13420000
XXX DS CL121 13430017
*
* Generate STRING code - check several options
*
XYZ DSECT 13450000
STRING GENERATE 13460007
** STRING (GENERATE,NO_CSECT) -\ 13470007
** STRING (GENERATE,AR_MODE) -/ 13480007
** STRING (GENERATE,,LOCTR) 13490007
** STRING (GENERATE,AR_MODE,LOCTR) 13500007
** STRING (GENERATE,NO_CSECT,LOCTR) invalid combination 13510007
YREGS 13520000
*
PSA DSECT 13530000
PSATOLD EQU *+X'21C',4,C'A' 13540000
PSAAOLD EQU *+X'224',4,C'A' 13550014
ASCB DSECT 13560014
ASCBASID EQU *+36,2,C'X' 13570014
END 13580000
|