SCAN1

AGO .START MVC

C:\USERS\LIN\DOCUMENTS\Z390CODE\SCANMIN

VC

MVC

MVC MVC MVCMVC MVC MVC

MVC

MV

SET PA="COPY,EDIT,MVC,ABD"

SET G=C:\USERS\LIN\DOCUMENTS\Z390CODE\SCAN1

SET IN=%G%.MLC

SET OUT=%G%.OUTPUT.OUT.TXT

SET SYSPRINT=%G%.OUTPUT.SYSPRINT.TXT

BAT/ASMLG %G%.MLC TIME(1) PARM(%PA%)


BAT/EZ390 %G%.MLC TEST PARM(%PA%)


YOU CAN ONLY SCAN FOR 1 PARAMETER.

BUT, YOU CAN EDIT THAT PARAMETER.


//SCAN EXEC SCAN1,PARM='MVC' COPIES RECORDS CONTAINING MVC

//STEPLIB DD DISP=SHR,DSN=

//SYSPRINT DD SYSOUT=*

//IN DD DISP=SHR,DSN=

//OUT DD DISP=(,CATLG),DSN=


PARM='EDIT,MVC,WER' SELECTS RECORDS CONTAINING MVC, CHANGES TO WER

PARM='COPY,MVC' COPIES ALL RECORDS COUNTS RECORDS CONTAINING MVC

PARM='COPY,EDIT,MVC,YES' COPIES ALL RECORDS, CHANGES MVC TO YES


THE EDIT STRINGS MUST BE THE SAME LENGTH.


SET LISTING=C:\USERS\LIN\DOCUMENTS\Z390CODE\SCANMIN.PRN

SET ATFILE=C:\USERS\LIN\DOCUMENTS\Z390CODE\SCANMIN.BREAK.ATFILE.TXT

SET COMMANDS=C:\USERS\LIN\DOCUMENTS\Z390CODE\SCANMIN.BREAK.COMMANDS.TXT

SET SYSIN=C:\USERS\LIN\DOCUMENTS\Z390CODE\SCANMIN.BREAK.SYSIN.TXT

BAT/EZ390 C:\USERS\LIN\DOCUMENTS\Z390CODE\QBR.MLC PARM(SYSIN)


.START ANOP

* -----------------------------------------------------------

MACRO

&LABEL REVB &COND,&TO

LCLC &C,&B

LCLA &LEN

AIF ('&COND' NE 'B').ADDREM

&LABEL NOP &TO

MEXIT

.ADDREM ANOP

&LEN SETA K'&COND

AIF ('&COND'(2,1) NE 'N').ADD

&B SETC '&COND'(3,&LEN-2)

AGO .DOIT

.ADD ANOP

&B SETC '&COND'(2,&LEN-1)

&B SETC 'N&B'

.DOIT ANOP

&LABEL B&B &TO

MEND

* -----------------------------------------------------------

MACRO

&LBL APERR &BC,&MSG

&LBL REVB &BC,SYS&SYSNDX

BAL R1,PUTERR

MAKEMSG &MSG

SYS&SYSNDX DS 0H

MEND

*

MACRO

@ &MSG

LCLA &L

LCLC &C

&L SETA (K'&MSG)

&L SETA (&L-1)

.LOOP ANOP

&C SETC '&MSG'(&L,1)

.* MNOTE ,'C=&C L=&L'

AIF ('&C' NE ' ').DC

AIF (&L LT 2).DC

&L SETA &L-1

AGO .LOOP

.DC DC AL1(&L-1),CL&L&MSG

MEND

*

MACRO

&LBL MAKEMSG &MSG

LCLA &L

&L SETA (K'&MSG-3)

&LBL DC AL1(&L),C&MSG

MEND

*

SCAN1 START 0

USING *,13,12

YREGS

STM 14,12,12(13)

ST 15,8(13)

ST 13,4(15)

LA 13,0(15)

LA 11,4095

LA 12,1(11,13)

L R2,0(R1)

LH R3,0(R2)

CLI 1(R2),5

BL OPEN

CLC =C'TEST,',2(R2)

BNE OPEN

MVI FLAGTEST,C'T'

LA R2,5(R2)

SH R3,=H'5'

PUSH PRINT

PRINT NOGEN

OPEN OPEN (SYSPRINT,OUTPUT,IN,INPUT,OUT,OUTPUT)

POP PRINT

* -------------------------------------------------

PUTINI PUT SYSPRINT,INIMSG

CH R3,=H'4'

BL NOTDOC

CLC =C'DOC',2(R2)

BNE NOTDOC

LA R5,DOC

L R6,=A(ENDDOC-1)

SR R7,R7

LA R8,99

MVCDOC IC R7,0(R5)

CR R7,R8

BNL *+16

MVC INIMSG+1(88),INIMSG

MVC INIMSG+1(0),1(R5)

EX R7,*-6

PUT SYSPRINT,INIMSG

LA R5,2(R5,R7)

LR R8,R7

CR R5,R6

BL MVCDOC

*

LA R2,4(R2)

SH R3,=H'4'

*

NOTDOC MVC TRTPACK+16(144),TRTPACK

MVI SPACES,C' '

MVC SPACES+1,SPACES

MVC LINE(256),SPACES

MVC SAVEPARM(256),SPACES

MVC LINE(256),SPACES

XC PARMLEN-2(4),PARMLEN-2

MVC PARM(256),SPACES

XC INDEX,INDEX

*

* NOTDOC MVC TRTPACK+16(144),TRTPACK

* MVI PARM,C' '

* MVC PARM+1(SAVEPARM-PARM-1),PARM

* XC PARM-4(4),PARM-4

* MVI SAVEPARM-1,C' '

* MVC SAVEPARM(159),SAVEPARM-1

*

SH R3,=H'1'

BM NOPARM

MVC PARM(0),2(R2)

EX R3,*-6

B RESTART

NOPARM OI RC,12

BAL R1,PUTERR NO PARM SPECIFIED

MAKEMSG 'PARM= MISSING'

B Z

* ----------------------------------------------

DS 0D

TIMEHH DC X'00'

TIMEMM DC X'00'

TIMESS DC HL2'0'

TIMEBIN DC FL4'0'

TIMEPACK DC PL8'0',XL8'00'

EDITTIME DC X'4021207A20207A20204B2020'

EDITSEC DC X'402020206B2020206B2021204B2020'

* TIMEDW XC DW,DW

* SLL R0,4

* ST R0,DW+4

* OI DW+7,X'0F'

* SR R0,R0

* BR R14

TIME TIME ,LINKAGE=SVC

LA R1,DW

ST R0,TIMEHH

SR R0,R0

* IC R0,TIMEHH

* BAL R14,TIMEDW

ZAP DW,P0

MVO DW+6(2),TIMEHH

MP DW,=P'3600'

MVC DW+8,DW

* IC R0,TIMEHH

* BAL R14,TIMEDW

ZAP DW,P0

MVO DW+6(2),TIMEMM

MP DW,=P'60'

AP DW+8,DW

MP DW+8,=P'100'

* LH R1,TIMESS

* BAL R14,TIMEDW

ZAP DW,P0

MVO DW+5(3),TIMESS

AP DW+8,DW

MVC TIMEPACK,DW+8

OI TIMEPACK+7,X'0F'

*

CLI TIMEPACK+15,0

BE UNPKTIME

MVC DW,TIMEPACK

SP DW,TIMEPACK+8

BM UNPKTIME

*

LA R1,LINE+15+L'EDITSEC-4

MVC LINE+14(L'EDITSEC),EDITSEC

EDMK LINE+14(L'EDITSEC),DW+2

MVC LINE+15+L'EDITSEC(21),=C'SECONDS, ELAPSED TIME'

MVC LINE+15(54),0(R1)

*

UNPKTIME MVC TIMEPACK+8,TIMEPACK

* UNPK LINE+1(11),TIMEPACK+2(6)

MVC LINE+1(L'EDITTIME),EDITTIME

ED LINE+1(L'EDITTIME),TIMEHH

* PUT SYSPRINT,LINE-1

BAL R14,PUTLINE

MVC LINE,LINE-1

BR R9

*-------------------------------------------------

RESTART XC INDEX,INDEX

MVC FLAGS,SPACES

MVC APTYPE(4),SPACES

XC APEND,APEND

LA R1,PARM

BAL R14,PUTPARM

RESTARTL LA R1,1(R1)

CLC SPACES(11),0(R1)

BE SAVELEN

CLC =C'|||',0(R1)

BNE RESTARTL

*

MVC SAVEPARM(188),0(R1)

LA R2,PARM+188

SR R2,R1

MVI 0(R1),C' '

MVC 1(0,R1),0(R1)

EX R2,*-6

SAVELEN S R1,=A(PARM+1)

LR R3,R1

BAL R14,PUTPARM

OI PUTAGAIN+1,X'F0'

CLI PARM,C','

BNE QCOPY

BAL R1,PUTERR

MAKEMSG 'CANNOT START PARM WITH ","'

* ---------------------------------------------

ISITQUOT MVI FLAGQUOT,C' '

CLI 0(R8),C'C'

BE CHKQ02

CLI 0(R8),C'X'

BE CHKQ02

CLI 0(R8),C'P'

BE CHKQ02

BR R14

CHKQ02 CLI 1(R8),C'"'

BE CHKQ04

CLI 1(R8),C''''

BE CHKQ04

CLI 1(R8),C'*'

BE CHKQ04

BR R14

CHKQ04 MVI FLAGQUOT,C'Q'

BR R14

* ---------------------------------------------

MVI FLAGALL,C'A'

SAVEFLAG MVC 0(1,R14),PARM

NI PUTAGAIN+1,X'0F'

BUMPPARM LA R1,PARM

LA R1,1(R1)

CLI 0(R1),C','

BH BUMPPARM+4

MVC PARM,1(R1)

S R1,=A(PARM-1)

LH R3,PARMLEN

SR R3,R1

STH R3,PARMLEN

CLI PARM,C' '

BNE QCOPY

BAL R1,PUTERR PARM= SEARCH ARG MISSING

MAKEMSG 'PARM= SEARCH ARG MISSING'

*

* MVC PARM,1(R1)

* SAVPARML STH R3,PARMLEN

* STH R3,PARMLEN-2

* * MVC SAVESTR,SPACES

* MVC SAVESTR+1(0),PARM

* EX R3,*-6

* STC R3,SAVESTR

QCOPY STH R3,PARMLEN

LA R14,FLAGCOPY

CLC =C'COPY,',PARM

BE SAVEFLAG

LA R14,FLAGLIST

CLC =C'LIST,',PARM

BE SAVEFLAG

LA R14,FLAGEDIT

CLC =C'EDITALL',PARM

BE SAVEFLAG-4

CLC =C'EDIT,',PARM

BE SAVEFLAG

LA R14,FLAGTEST

CLC =C'TEST,',PARM

BE SAVEFLAG

LA R14,FLAGWTO

CLC =C'WTO,',PARM

BE SAVEFLAG

PUTAGAIN NOP *+8

BAL R14,PUTPARM

* ------------------------------------

LA R3,PARM

LA R3,1(R3)

CLC SPACES(11),0(R3)

BNE *-10

S R3,=A(PARM+1) MVC...

STH R3,PARMLEN

*

LA R8,PARM

BAL R14,ISITQUOT

CLI FLAGQUOT,C'Q'

BE ANALPARM

*

CLI FLAGEDIT,C'E'

BNE SAVELENG

*

TM PARMLEN+1,0 Q. ODD # CHARS IN STRING? FROM,TOOO

BZ QEDIT1 YES, GOOD

BAL R1,PUTERR EDIT OPERANDS NOT SAME LENGTH

MAKEMSG 'EDIT FROM/TO MUST BE SAME LENGTH'

QEDIT1 SRL R3,1 06 MVC,TOO 04 ME,TO

LA R14,PARM(R3) 03 02

BCTR R3,0

CLI 0(R14),C','

BE SAVELENG

BAL R1,PUTERR EDIT OPERANDS NOT SAME LENGTH

MAKEMSG 'EDIT FROM/TO MUST BE SAME LENGTH'

*

SAVELENG STH R3,PARMLEN

STH R3,PARMLEN-2

STC R3,CLC+1

STC R3,FOUNDMVC+1

LA R4,CHAR

LA R2,PARM-2

BAL R14,QFREQ

SR R4,R4

IC R4,CHAR

LA R5,INDEX(R4)

MVI 0(R5),C'A'

* C'MVCL' R3=3 LENGTH-1

LH R5,OFFSET R5=1 BACK UP TO THE FRONT

LR R6,R3 R6=3

SR R6,R5 R6=2 END LOC SO WE DON'T S0C5

STH R6,LASTPOSS

B GET

*

ADDR DC F'0'

NOTFOUND DS 0H

PUT L R2,ADDR

CLI FLAGCOPY,C'C'

BE PUTPUT

CLI FLAGFND,C'F'

BNE GET

PUTPUT AP #OUT,=P'1'

PUT OUT,(2)

CLI FLAGLIST,C'L'

BNE GET

CLI FLAGFND,C'F'

BNE GET

LA R1,130

LH R0,DCBLRECL-IHADCB+IN

CR R1,R0

BL *+6

LR R1,R0

BCTR R1,0

MVC LINE(0),0(R2)

EX R1,*-6

BAL R14,PUTLINE

*

GET GET IN

LA R1,0(R1)

LR R11,R1

AP #IN,=P'1'

MVI FLAGFND,C' '

ST R1,ADDR

LH R10,DCBLRECL-IHADCB+IN

*

TM DCBRECFM-IHADCB+IN,X'80'

BO *+8

LH R10,0(R1) RECFM=VB LENGTH

AR R10,R1

*

AH R1,OFFSET

SH R10,LASTPOSS

LA R7,256

LH R9,PARM-2

B LOOP

LA R1,256(R1)

LOOP LR R2,R10

SR R2,R1

SH R2,=H'1'

BM NOTFOUND

CR R2,R7

BL SHORT

TRT 0(256,R1),INDEX

BZ LOOP-4

* AP #CHARFND,=P'1'

B CLCIT

*

TRT TRT 0(0,R1),INDEX

SHORT AP #TRT,P1

EX R2,TRT

BZ NOTFOUND

CLCIT LR R2,R1

S R2,OFFSET

AP #CLC,P1

*

CLC CLC 0(0,R2),PARM

BE FOUND

CLCNXT LA R1,1(R1)

B LOOP

*

FOUND AP #CLCFND,=P'1'

MVI FLAGFND,C'F'

CLI FLAGEDIT,C'E'

BNE PUT

LA R14,PARM+2(R3)

FOUNDMVC MVC 0(0,R2),0(R14)

AP #CHANGES,=P'1'

CLI FLAGALL,C'A'

BNE PUT

B CLCNXT

*

PUTR1 MVC LINE,LINE-1

STM R14,R1,PUTPARM-16

IC R15,0(R1)

MVC LINE(0),1(R1)

EX R15,*-6

B PUTLINE+4

DC 4F'0'

PUTPARM MVC LINE,PARM

PUTLINE STM R14,R1,PUTPARM-16

CLI FLAGWTO,C'W'

BNE NOTWTO

MVC LINE-5(4),=H'90,0'

WTO MF=(E,LINE-5)

MVC LINE-5(5),LINE-6

NOTWTO LA R0,LINE-1

CLI FLAGTEST,C'T'

BNE PUTLINEP

* CLI LINE,C'('

* BE PUTLINEP

L R14,PUTERR-4

LTR R14,R14

BNZ *+8

L R14,PUTPARM-16

LA R14,0(R14)

SR R14,R13

ST R14,12(R13)

MVC LINE-7(6),=C'(....)'

UNPK LINE-6(5),14(3,R13)

TR LINE-6(4),HEX-240

MVI LINE-2,C')'

LA R0,LINE-8

PUTLINEP PUT SYSPRINT,(0)

MVC LINE-7(166),LINE-8

LM R14,R1,PUTPARM-16

BR R14

*

DC 2F'0'

PUTERR ST R1,PUTERR-4

OI RC,12

MVC LINE,LINE-1

SR R2,R2

IC R2,0(R1)

MVC LINE(0),1(R1)

EX R2,*-6

* LA R1,LINE+3(R2)

* LH R2,PARM-2

* MVC 0(0,R1),PARM

EX R2,*-6

BAL R14,PUTLINE

B Z

*

MVC 0(0,R4),0(R15)

TRT 0(0,R15),ISITCHAR

PRINTSTR EX R3,PRINTSTR-6

BNZ PRINTSTX

CH R3,=H'22'

BL *+8

EX 0,*

EX R3,PRINTSTR-12

LA R4,3(R3,R4)

LA R15,2(R3,R15)

BR R9

*

PRINTSTX LA R0,1(R3)

UNPK 0(3,R4),0(2,R15)

TR 0(2,R4),HEX-240

LA R4,2(R4)

LA R15,1(R15)

BCT R0,PRINTSTX+4

MVI 0(R4),C' '

LA R4,1(R4)

BR R9

*

DC F'0'

Z MVC LINE,LINE-1

CLI RC,0

BNE NOTOTALS

LA R10,PARMLEN

LA R11,LINE

MVC LINE-7,LINE-8

* OI #IN+4,X'0F'

* OI #CLCFND+4,X'0F'

* OI #CHANGES+4,X'0F'

* UNPK MSG+6(9),#CLCFND

* UNPK MSG+25(9),#IN

LH R3,PARMLEN

LA R0,1(R3)

CVD R0,DW

OI DW+7,X'0F'

*

UNPK LINE-1(3),DW+6(2)

MVI LINE-1,C' '

*

MVC LINE+3(3),=C'( )'

LA R15,CHAR

LA R4,LINE+4

SR R3,R3

BAL R9,PRINTSTR

LA R4,LINE+7

CLI LINE+5,C')'

BE *+12

MVI LINE+6,C')'

LA R4,LINE+8

LH R3,PARMLEN

LA R15,PARM

BAL R9,PRINTSTR

CLI FLAGEDIT,C'E'

BNE *+8

BAL R9,PRINTSTR

*

* LA R15,PARM

* LA R4,LINE+5

* BAL R9,PRINTSTR

* *

* MVC LINE+5(0),PARM

* EX R3,*-6

* LA R4,LINE+7(R3)

* MVC 0(3,R4),=C'( )'

* MVC 1(1,R4),CHAR

* LA R4,3(R4)

* CLI APTYPE,C'E'

* BL MOVECHAR

* *

* LA R0,1(R3)

* LA R15,PARM

* LA R4,LINE+5

* MVC LINE+4(88),SPACES

* UNPKTOTL UNPK 0(3,R4),0(2,R15)

* TR 0(2,R4),HEX-240

* LA R4,2(R4)

* LA R15,1(R15)

* BCT R0,UNPKTOTL

* MVC 0(2,R4),=C' ('

* UNPK 2(3,R4),CHAR(2)

* TR 2(2,R4),HEX-240

* MVI 4(R4),C')'

* LA R4,5(R4)

* *

* MOVECHAR MVC PUTERR-4(4),X0

* * MVC 1(L'MSG,R4),MSG

* * PUTTOT PUT SYSPRINT,LINE-1

* * MVC 1(88,R4),0(R4)

* * PUT SYSPRINT,LINE-1

* * B NOTOTALS

* * HEXTOT LA R0,1(R2)

* * LA R14,LINE

* * LA R15,PARM

* * UNPKSTR UNPK 0(3,R14),0(2,R15)

* * TR 0(2,R14),HEX-240

* * LA R14,2(R14)

* * LA R15,1(R15)

* * BCT R0,UNPKSTR

* * MVC 0(5,R14),=C' ( )'

* * UNPK 2(3,R14),CHAR(2)

* * TR 2(2,R14),HEX-240

* * MVI 4(R14),C')'

* * MVC 6(L'MSG,R14),MSG

* * CP #CHANGES,P0

* * BE *+16

* * UNPK 7+L'MSG(9,R14),#CHANGES

* * MVC 17+L'MSG(16,R14),=C'STRINGS CHANGED'

* * *

* * BAL R14,PUTLINE

* * B PUTTOT+4

*

MVC 0(6,R4),=C' USED '

LA R4,6(R4)

ST R4,Z-4

SR R2,R2

LA R3,#TRT

TOTLOOP MVC 1(10,R4),EDIT9

LA R1,9(R4)

EDMK 1(10,R4),0(R3)

ZAP 0(5,R3),P0

MVC 0(11,R4),0(R1)

LA R0,11(R4)

SR R0,R1

AR R4,R0

* LA R4,1(R4)

* CLI 0(R4),C' '

* BNE *-8

IC R2,5(R3)

MVC 1(0,R4),6(R3)

EX R2,*-6

LA R4,3(R4,R2)

LA R3,7(R3,R2)

CLI 0(R3),X'99'

BL TOTLOOP

BAL R14,PUTLINE

CLI 0(R3),X'FF'

BE NOTOTALS

LA R3,1(R3)

L R4,Z-4

B TOTLOOP

*

NOTOTALS BAL R9,TIME

CLI SAVEPARM,C'|'

BNE CLOSE

ZAP #IN,=P'0'

ZAP #CLCFND,=P'0'

MVI RC,0

* MVC DOC(64),PARM-2

CLOSE (IN,,OUT)

OPEN (IN,INPUT,OUT,OUTPUT)

MVC PARM(188),SAVEPARM+3

MVC SAVEPARM(188),SAVEPARM-1

MVC LINE,LINE-1

MVI LINE,C'-'

MVC LINE+1(70),LINE

BAL R14,PUTLINE

B RESTART

MSG DC C'FOUND ......... TIMES IN ......... RECORDS.'

CLOSE CLOSE (IN,,OUT,,SYSPRINT)

EXIT LH R15,RC-1

L 13,4(13)

L 14,12(13)

LM 0,12,20(13)

BR 14

* -------------------------------------------------

* OPENX DC 0F'0',X'85',AL3(OPENX+4)

* CLI DCBRECFM-IHADCB(1),0 Q. BLANK DCB?

* BNE 0(14) NO, JUST RETURN.

* CNOP 0,4 YES, ASSURE ALIGNMENT

* BAL 15,16(R15) LOAD A(DCB TO COPY FROM)

* DC A(IN) AND COPY RECFM+LRECL.

* MVC DCBRECFM-IHADCB(1,1),DCBRECFM-IHADCB(15)

* MVC DCBLRECL-IHADCB(2,1),DCBLRECL-IHADCB(15)

* BR 14

*

PUSH PRINT

PRINT NOGEN

IN DCB DDNAME=IN,DSORG=PS,MACRF=GL,LRECL=80,RECFM=FT,EODAD=Z

OUT DCB DDNAME=OUT,DSORG=PS,MACRF=PM,LRECL=80,RECFM=FT

*UT DCB DDNAME=OUT,DSORG=PS,MACRF=PM,EXLXT=OPENX

SYSPRINT DCB DDNAME=SYSPRINT,DSORG=PS,MACRF=PM,LRECL=133,RECFM=FT

POP PRINT

*

*

* ROUTINE TO PROCESS CHAR, HEX, PACKED STRINGS.

* INPUT = LENGTH-1 AND THE FIELD (1 OR 2 STRINGS)

* EXPECTED INPUT == 05C'ABC' 09X"C1C2C3" 05P'123'

* OUTPUT == 'C02ABC "X02ABC 'P070000000000123

*

* **NOT C R8,=A(PARM)

* APNOT CP AP#,P1

* * BE *+8

* * BAL R14,APERR BOTH EDIT OPER MUST BE QUOTED OR NOT QUOTED

* APERR BE,'BOTH EDIT OPER MUST BE QUOTED OR NOT QUOTED'

* APNOT LM R1,R9,ANALPARM-36 R2=0, NOT FOUND

* BR R9

AP90 MVC 0(3,R8),SPACES

LH R3,PARMLEN

B SAVELENG

* LM R1,R9,ANALPARM-36

* SR R2,R2 R2=0, NOT FOUND

* BR R9

DC 9F'0'

ANALPARM STM R1,R9,ANALPARM-36

LA R8,PARM

LR R7,R8

MVC APTYPE(4),SPACES

LH R3,PARMLEN

LA R0,0(R8,R3)

BCTR R0,0

ST R0,APEND

ZAP AP#,P0

B APAGAIN

AP# DC PL1'0'

APSIGN DC C' '

APTYPE DC 2CL2' '

APEND DC F'0'

APLOOP MVI 0(R8),C' '

LA R8,1(R8)

CLI FLAGEDIT,C'E' Q. EDIT?

* BE *+8 YES

* BAL R14,APERR 2 ARGS, BUT NOT EDIT.

APERR BNE,'2 ARGS, BUT NOT EDIT.'

APAGAIN BAL R14,ISITQUOT

CLI FLAGQUOT,C'Q'

APERR BNE,'BOTH ARGUMTNTS MUST OR MUST MOT BE QUOTED'

* -------------------------------------

AP02 AP AP#,P1

CP AP#,P1

BNE *+12

LR R7,R8

MVC APTYPE,0(R8) SAVE BOTH C"

*

MVC AP03CLI+1(1),1(R8)

CP AP#,P2

APERR BH,'MORE THAN 2 ARGUMENTS'

*

LA R6,1(R8)

AP02L LA R6,1(R6)

AP03CLI CLI 0(R6),0

** CLC 0(1,R6),1(R8)

BE AP04

CLC SPACES(11),0(R6)

* BNE AP02L

* BAL R14,APERR MISSING ENDING "

APERR BE,'MISSING ENDING "'

B AP02L

AP04 LR R3,R6

SR R3,R8

SH R3,=H'3' C"ABC",C

STH R3,PARMLEN-2

CLI 0(R8),C'C'

BNE APNOTC

* -------------------CHAR ROUTINE-----------------

MVC 0(0,R7),2(R8)

EX R3,*-6

LA R7,2(R7,R3) NEXT AVAILABLE LOC

LA R8,1(R6)

*

APSAVLEN CP AP#,P1

BNE APCLCLEN

STH R3,PARMLEN

CLI 0(R8),C','

BE APLOOP

CLI FLAGEDIT,C' '

APERR BNE,'EDIT W/O SECOND OPERAND'

CLI 1(R8),C' '

BE AP90

APERR B,'BAD CONTINUATION'

*

APCLCLEN CP AP#,P2

* BE *+8

APERR BNE,'MORE THAN 2 ARGUMENTS'

CH R3,PARMLEN

BE AP90

* BAL R14,APERR FROM/TO LENGTHS DON'T MATCH

APERR B,'FROM/TO LENGTHS DO NOT MATCH'

* ---------------------HEX ROUTINE-----------------

TRT 2(0,R8),ISITHEX

APNOTC CLI 0(R8),C'X' X'C1C2',

BNE APNOTX

TM PARMLEN-1,1 Q. ODD # DIGITS?

* BO *+8

* BAL R14,APERR ODD # HEX DIGITS

APERR BZ,'ODD # OF HEX DIGITS'

EX R3,APNOTC-6

* BZ *+8

* BAL R14,APERR INVALID HEX

APERR BNZ,'INVALID HEX DIGIT'

LA R3,1(R3)

SRL R3,1

LR R0,R3

SH R3,=H'1'

* BNM *+8

* BAL R14,APERR NEX LENGTH=0

APERR BM,'HEX LENGTH=0'

LA R8,2(R8)

PACKHEX TRT 0(2,R8),ISITHEX

* BZ *+8

* BAL R14,APERR INVALID HEX

APERR BNZ,'INVALID HEX'

TR 0(2,R8),MAKEHEX

PACK 0(2,R7),0(3,R8)

LA R7,1(R7)

LA R8,2(R8)

BCT R0,PACKHEX

LA R7,1(R7)

LA R8,1(R8)

B APSAVLEN

* ------------------PACKED ROUTINE-----------------

** PACK 0(0,R7),2(0,R8)

PACK 0(0,R7),12(0,R13)

TRT 2(0,R8),ISIT# R8=FROM

APNOTX MVC APSIGN,2(R8) R7=TO

CLI 2(R8),C'-' R7=TO

BNE NOTMINUS

SH R3,=H'1'

MVC 2(55,R8),3(R8)

L R0,APEND

BCTR R0,0

ST R0,APEND

NOTMINUS EX R3,APNOTX-6 R7=TO

* BZ *+8 R3=LEN-1

* BAL R14,APERR P'###' NOT NUMERIC

APERR BNZ,'P"###" NOT NUMERIC'

LR R1,R3 FROM LENGTH-1

LA R3,1(R3)

SRL R3,1

LR R14,R3

SLL R14,4

LA R15,0(R1,R14)

MVC 12(48,R13),2(R8)

EX R15,APNOTX-12

LA R8,4(R8,R1) P'123',

LA R7,0(R7,R3)

NI 0(R7),X'FD'

CLI APSIGN,C'-'

BE *+8

NI 0(R7),X'FC'

LA R7,2(R7)

MVI FLAGPACK,C'P'

B APSAVLEN

*

* DC F'0'

* APERR LA R14,0(R14)

* SH R14,=H'4'

* ST R14,APERR-4

* SR R14,R13

* ST R14,12(R13)

* UNPK APERRMSG+2(5),14(3,R13)

* TR APERRMSG+2(4),HEX-240

* MVI APERRMSG+6,C')'

* S R8,=A(PARM)

* LA R1,LINE(R8)

* MVI 0(R1),C'!'

* BAL R14,PUTLINE

* ** MVC APERRQQ,0(R2)

* BAL R1,PUTERR

* APERRMSG MAKEMSG '(....), STRING SYNTAX ERROR'

* DC AL1(L'APERRMSG-1) +L'APERRQQ)

* APERRMSG DC C'(....), STRING SYNTAX ERROR'

* APERRQQ DC CL16' '

*

* ========================= GET LEAST FREQ USED CHAR =============

*

QFREQ STM R14,R6,12(R13) R2,LENGTH/STRING

QFREQFF XC 0(3,R4),0(R4) ZERO OFFSET, DEFAULT TO 1ST CHAR

MVC 0(1,R4),2(R2) AND SAVE THE CHAR

SR R1,R1

IC R1,2(R2) LOAD FREQ OF CHAR

LA R14,QFREQTBL(R1) GET LOC IN FREQ TBL

MVC 64(1,R13),0(R14) SAVE THAT.

*

* R4 = OFFSET(2) AND CHAR(1)

* R3 = H'LEN-1' AND STRING

LH R1,0(R2) LOAD LENGTH-1

LA R1,1(R1) CALC REAL LENGTH

LA R2,2(R2) POINT TO STRING

LR R0,R2 SAVE STRING ADDR

LA R14,QFREQTBL ADDR OF FREQ TABLE THAT I MADE UP.

*

QFREQ10 SR R15,R15

IC R15,0(R2) GET CHAR

AR R15,R14 GET LOC IN TABLE

CLC 64(1,R13),0(R15) Q.NEW CHAR LESS FREQ

BNH QFREQ20 NO.

MVC 64(1,R13),0(R15) YES, SAVE FREQ

MVC 0(1,R4),0(R2) SAVE CHAR

LR R15,R2 CALC OFFSET FROM

SR R15,R0 BEG OF STRING

STH R15,1(R4) AND SAVE THAT.

*

QFREQ20 LA R2,1(R2) BUMP CHAR

BCT R1,QFREQ10 LOOP THROUGH STRING

* LH R0,0(R2)

* SH R0,0(R4)

* STH R0,3(R4)

LM R14,R6,12(R13) LOAD REGS

BR R14 AND RETURN

*

LTORG

P0 DC P'0'

P1 DC P'1'

P2 DC P'2'

QFREQFQ DC C' '

QFREQRC DC H'0'

*

QFREQTBL DS 0XL256

DC X'5431292B2C4E2A2C2D23342027222336442428242125211F28213D2620212122'

DC X'2A2221283921242224252523292020213024213335262F242920252126202022'

DC X'944120222C37244723232089465A4522482024202E2021203127323C4B593227'

DC X'77842420222024202220267F497A38533B2220202420202122336B5066656A5D'

DC X'3E917C8886937D818A8E2120202020214258748B878F9083518C20202B212120'

DC X'25318D9285768263804D2220224A2020272021202220202127212120214B2021'

DC X'286E62685F60575556693F40302021223A4C5564675E5B5F4361292625212224'

DC X'35226F70524C5C3F4F3A23202A2020207B7E797273716D6C7578232120212427'

* ===================================================================

LTORG

FLAGWTO DC C' '

FLAGTEST DC C' '

FLAGS DS 0CL6

FLAGLIST DC C' '

FLAGCOPY DC C' '

FLAGEDIT DC C' '

FLAGALL DC C' '

FLAGPACK DC C' '

FLAGFND DC C' '

FLAGQUOT DC C' '

*

* ??? USED #### TRTS AND ### CLCS TO FIND ### STRINGS IN ### RECORDS

*

*

EDIT9 DC X'40202020202020202120'

#TRT DC PL5'0',AL1(07),CL8'TRTS AND'

#CLC DC PL5'0',AL1(11),CL12'CLCS TO FIND'

#CLCFND DC PL5'0',AL1(09),CL10'STRINGS IN'

#IN DC PL5'0',AL1(07),CL8'RECORDS.',X'FE'

#CHANGES DC PL5'0',AL1(15),CL16'STRINGS CHANGED,'

#OUT DC PL5'0',AL1(14),CL15'RECORDS WRITTEN',X'FF'

DS 0H

DC X'00'

RC DC X'00',C' '

CHAR DC C' '

OFFSET DC HL2'0'

LASTPOSS DC HL2'0'

* ---------------------------------------------

INIMSG DC CL133' SCAN1 (EDIT2) V01.02 &SYSDATE &SYSTIME'

ISITCHAR EQU *-64

DC X'00',11C' ',4X'00'

DC X'00',8C' ',7X'00'

DC 2X'00',8C' ',6X'00'

DC 9C' ',7X'00'

DC C' ',9X'00',6C' '

DC C' ',9X'00',6C' '

DC C' ',8X'00',6C' '

DC 16C''

DC C' ',9X'00',6C' '

DC C' ',9X'00',6C' '

DC C' ',8X'00',6C' '

DC 10X'00',6C' '

*

* THIS GOES WITH ANALPARM ROUTINE

ISITHEX EQU *-192

DC C' ',XL6'00',9C' ' ISIT HEX LINE

MAKEHEX EQU *-192

DC X'40FAFBFCFDFEFF',9C' ' MAKE HEX LINE

DC CL16' '

DC 10X'00',6C' ' ISIT HEX LINE

DC C'0123456789',CL6' ' MAKE HEX LINE

CNOP 6,0

HEX DC C'0123456789ABCDEF',C' '

*

DS 0D

ISIT# EQU *-240

X0 EQU *

TRTPACK DC X'00000000000000000000080804040804'

DS XL144

SPACES DS CL96

LINE DS CL133,CL123,CL33

SAVEPARM DS CL133,CL123,CL33

*

DS H

PARMLEN DS H

PARM DS CL133,CL123

*

DW DS 2D

SAVESTR DS CL48

*

INDEX DS XL256

ORG TRTPACK+16

DOC EQU *

@ 'SCAN1 WAS WORKING AT 200 LINES OF CODE, AND 2K'

@ 'ADDING QUOTES, OPIONS, AND TOTALS, NOW 1,000 LINES AND 7K'

@ ' '

@ '//SCAN EXEC PGM=SCAN1,PARM="MVC" COPY RECS CONTAINING MVC'

@ '//STEPLIB DD DISP=SHR,DSN='

@ '//SYSPRINT DD SYSOUT=*'

@ '//IN DD DISP=SHR,DSN='

@ '//OUT DD DISP=(,CATLG),DSN= '

@ ' '

@ 'PARM=DOC PRINT PROGRAM DESCRIPTION (MUST BE FIRST IN PARM'

@ ' =COPY ALL RECORDS'

@ ' =LIST PRINTS RECORDS ON //SYSPRINT'

@ ' =TEST PRINT LOCATIONS OF (ERROR/ALL) MSGS'

@ ' =EDIT (REPLACE, REALLY) ONE STRING WITH ANOTHER OF SAME LEN'

@ ' =EDITALL REPLACE ALL STRINGS IN THE RECORD'

@ ' ||| ALLOWS MULTIPLE (TEST) RUNS, USING SAME FILE, AND'

@ ' DIFFERENT PARM FIELDS. I PUT THE ||| IN FOR TESTING,'

@ ' AND LEFT IT. EG: IF YOU CODE ...'

@ ' '

@ 'PARM=''MVC|||EDIT,MVC,XYZ|||EDITALL,MVC,XYZ|||EDITALL,MV,MM'''

@ ' THE FIRST PASS WILL FIND ALL RECORDS CONTAINING MVC'

@ ' THE SECOND PASS WILL CHANGE THE FIRST MVC TO XYZ'

@ ' THE THIRD PASS WILL CHANGE EVERY MVC IN EACH RECORD.'

@ ' THE FORTH PASS WILL CHANGE MVVVVVVVV TO MMMMMMMMM'

@ ' '

@ 'PARM="DOC,COPY,EDIT,MVC,YES" DOC,MUST BE FIRST, COPY ENTIRE FILE'

@ ' CHANGE FIRST MVC YES IN EACH RECORD'

@ 'PARM="DOC,MVC" PRINT DOC, FIND MVC RECORDS.'

@ 'PARM="EDIT,MVC,WER" SELECT RECS CONTAINING MVC, CHANGE TO WER'

@ 'PARM="COPY,MVC" COPY ALL RECS,COUNT RECORDS CONTAINING MVC'

@ 'PARM="COPY,EDIT,MVC,YES" COPY ALL RECORDS, CHANGE MVC TO YES'

@ ' (THE EDIT STRINGS MUST BE THE SAME LENGTH)'

@ 'PARM="SAVE|||PARM|||SAVEPARM|||EDIT,SAVE,OOPS"'

@ ' ||| IS A PARM SEPARATER. THIS SCANS THE SAME //IN FILE'

@ ' 4 TIMES LOOKING FOR "SAVE", THEN "PARM", THEN'

@ ' "SAVEPARM" AND LAST EDITING "SAVE" TO "OOPS"'

@ ' '

@ 'CAN HAVE QUOTED STRINGS IN PARM. EG'

@ ' '

@ 'PARM C"PUT,LINE" FIND PUT,LINE STRINGS.'

@ 'PARM EDIT,C"PUT",C"NOP" FIND AND CHANGE PUT TO NOP'

@ ' AGAIN, STRINGS MUST BE SAME LENGTH'

@ 'AND YOU CAN HAVE PACKED AND HEX STRINGS. EG:'

@ ' X"C1C2C3" MUST HAVE EVEN # HEX DIGITS'

@ ' P"123" PACKED 123 LENGTH =2'

@ ' P"-1234" PACKED NEGATIVE -1234 LENGTH =3'

@ ' FOR PACKED #S, THE SIGN MUST BE ###C OR ###D (MINUS)'

@ ' NOT ###F, WHICH IS USED FOR PRINTING.'

@ ' '

@ ' IF YOU ARE DOING AN EDIT, THEN EITHER BOTH OR'

@ ' NEITHER STRINGS MUST BE QUOTED. AND SAME LENGTH.'

@ ' '

@ 'ONE OF A SET OF SCAN PROGRAMS:'

@ 'FASTSCAN SCAN FOR MULTIPLE STRINGS IN 1 PASS OF FILE.'

@ 'MYSCAN SCAN/EDIT WITH SEVERAL OPTIONS'

@ 'SCANFREQ READ A FILE, CALC CHAR FREQUENCY.'

@ 'SCAN1 ONLY 1 ARGUMENT, SPECIFIED IN PARM FIELD'

ENDDOC EQU *

ORG

END SCAN1