SCANFREQ

AGO .START


THIS PROGRAM CREATES THE FREQENCY TABLE (QFREQTBL)

IT DOES THAT BY READING 2 FILES, AND COUNTING THE CHARACTERS

IN THEM. WHEN I DID IT, ONE FILE WAS A TEXT FILE, AND THE

OTHER WAS A LOAD MODULE. MAYBE FOR 'NORMAL' USE, ONE WOULD USE

1, OR 2, DATA FILES. THIS IS A 3 STEP PROCESS.


1. RUN READING 1-2 FILES THAT REPRESENT THE LIKELY DATA FILES

THAT YOU'LL BE PROCESSING. I USED ONE TEXT FILE, AND 1 LOAD MOD.

THE OUTPUT OF THAT RUN CONSISTS OF 256 "DEF RECORDS THAT CAN

BE USED TO ASSEMBLE THE FREQUENCY TABLE.


NOTE THAT DEF RECORDS ARE PRODUCED TWICE, ONCE AFTER EACH

INPUT FILE. USE THE LAST, COMPOSITE SET.


2. CUT+PASTE THOSE DEF RECORDS INTO THE END OF THIS SOURCE PROGRAM

AND RUN IT AGAIN. THIS 2ND RUN WILL PRODUCE THE DC X' RECORDS

THAT YOU SEE BELOW. YOU THEN WANT TO CUT+PASTE THOSE INTO THE

SCAN???? PROGRAM THAT WILL BE USING THE TABLE TO FIND CHARACTER

STRINGS.


3. PASTE THIS NEW TABLE INTO THE SCANFAST / SCANSTR / SCANEDIT

PROGRAMS SO THAT THEY'LL RUN FASTER. I'VE DONE THAT AS BEST

I WAS ABLE, BUT I DON'T HAVE YOUR DATA.


ALTERNATIVELY, SCANFREQ ALSO PRODUCES A 256 BYTE RECORD THAT IS

THE EVENTUAL QFREQTBL TABLE THAT'S USED IN EACH OF THE SCAN...

PROGRAMS. I'LL CONSIDER CREATING A FILE THAT IMPORTS THAT RECORD

INTO THE VARIOUS SCAN... PROGRAMS. I HAVEN'T DECIDE WHETHER TO

DO THAT OR NOT.


SO, RUN SCANFREQ ONCE WITH //INA AND //INE READING DATA.

THE WAY I'VE SET IT UP IS THAT:


//INE READS AND ANALYZES RECORDS.

//INA READS AND ANALYZES RECFM=U DATA BLOCKS, IGNORING RECORDS.


ONE OUTPUT OF THAT FIRST RUN IS 256 "DEF" SOURCE CODE RECORDS.

YOU TAKE THOSE, AND REPLACE THE EXISTING DEF RECORDS WITH THE

NEW ONES THAT YOU'VE PRODUCED, AND THE OUTPUT OF THAT SEDONE RUN

IS THE SET OF "DC" X RECORDS THAT YOU SEE BELOW.


THE OTHER OUTPUT IS THE 256 BYTE RECORD THAT IS THE EVENTUAL

FREQUENCY TABLE.


------------ THESE FEW LINES ARE USEFUL IN Z390.ORG TESTING.-------

------------ FIRST THE ASSEMBLE, LINK, TEST REQUEST

SET INE=C:\USERS\LIN\DOCUMENTS\BUSHSTUFF.TXT

SET INA=C:\USERS\LIN\DOCUMENTS\Z390CODE\ADSTRING.390

SET FREQTBL=C:\USERS\LIN\DOCUMENTS\Z390CODE\SCANFREQ.FREQTBL.TXT

SET SYSPRINT=C:\USERS\LIN\DOCUMENTS\Z390CODE\SCANFREQ.SYSPRINT.TXT

BAT\ASMLG C:\USERS\LIN\DOCUMENTS\Z390CODE\SCANFREQ


C:\USERS\LIN\DOCUMENTS\Z390CODE\SCANFREQ


---- PARM(A) ONLY DO INA FILE. PARM(E) ONLY DO INE FILE.

THIS APPLIES TO MVS RUNS AS WELL.


SET INE=C:\USERS\LIN\DOCUMENTS\Z390CODE\COUNTCHR.PRN

SET INA=C:\USERS\LIN\DOCUMENTS\Z390CODE\COUNTCHR.360

SET FREQTBL=C:\USERS\LIN\DOCUMENTS\Z390CODE\SCANFREQ.FREQTBL.TXT

SET SYSPRINT=C:\USERS\LIN\DOCUMENTS\Z390CODE\COUNTCHR.SYSPRINT.TXT

BAT\EZ390 C:\USERS\LIN\DOCUMENTS\Z390CODE\COUNTCHR PARM(A)

*

TO USE THIS IN AN MVS ENVIRONMENT ...

//FREQ EXEC PGM=SCANFREQ

//STEPLIB DD DISP=SHR,DSN=

//SYSPRINT DD SYSOUT=*

//INA DD DISP=SHR,DSN= BINARY DATA FILE

//INE DD DISP=SHR,DSN= TEXT DATA FILE

//FREQTBL DD DISP=(,CAT6LG),DSN= 256 BYTE CHAR FREQUENCY RECORD


IF I'VE ADDED CODE TO THE OTHER PROGRAMS, YOU COULD OPEN THE FREQTBL

FILE AND READ THAT RECORD OVER THE QFREQTBL TABLE OF CHARACTER

FREQUENCY. WE'LL SEE IF I GET TO THAT. AND WHETHER I/WE THINK

THAT IT'S WORTH DOING.


STEP2 IS, YOU HAVE TO EDIT SCANFREQ, REPLACING THE NEW DEF RECORDS

BEFORE DOING THE 2ND RUN. THEN EDIT THE SCAN??? PROGRAMS WITH

THE NEW QFREQTBL SOURCE CODE.


STEP3 WOULD BE TO RE-ASSEMBEL THE SCAN PROGRAM(S) WITH YOUR NEW

FREQUENCY TABLE. THAT WOULD PROBABLY RUN A BIT BETTER IN YOUR

ENVIRONMENT.


THIS IS THE QFREQTBL THAT I CREATED AND USED.


DC X'5431292B2C4E2A2C2D23342027222336'

DC X'442428242125211F28213D2620212122'

DC X'2A222128392124222425252329202021'

DC X'3024213335262F242920252126202022'

DC X'944120222C37244723232089465A4522'

DC X'482024202E2021203127323C4B593227'

DC X'77842420222024202220267F497A3853'

DC X'3B2220202420202122336B5066656A5D'

DC X'3E917C8886937D818A8E212020202021'

DC X'4258748B878F9083518C20202B212120'

DC X'25318D9285768263804D2220224A2020'

DC X'272021202220202127212120214B2021'

DC X'286E62685F60575556693F4030202122'

DC X'3A4C5564675E5B5F4361292625212224'

DC X'35226F70524C5C3F4F3A23202A202020'

DC X'7B7E797273716D6C7578232120212427'


DONE. I USED THIS TO ANALYZE MY BUSHSTUFF.TXT AND ADSTRING.390

LOAD MOD FOR CHARACTER FREQUENCY. THE TABLE ABOVE IS WHAT I'VE USED.

.START ANOP

MACRO

DEF &LOC,&FREQ

GBLA &N

GBLC &LAST

LCLA &L

&L SETA &N+31

AIF ('&LAST' EQ '&FREQ').ORG

&N SETA &N+1

.ORG ORG QFREQTBL+X'&LOC'

DC AL1(&L)

&LAST SETC '&FREQ'

MEND

*

MACRO

&LBL $$LA &R,&F

AIF ('&F'(1,1) EQ '(').ADD0

&LBL LA &R,&F

MEXIT

.ADD0 ANOP

&LBL LA &R,0&F

MEND

*

MACRO

&LBL SORT &FIRST,&END,&ENTLEN,&KEY,&KEYLEN

* SORT FIRST,END,ENTLEN,KEYLOC,KEYLEN

LCLA &N

LCLC &L

&N SETA &SYSNDX

&L SETC 'SYS&N'

&LBL STM 14,4,12(13)

$$LA 14,&ENTLEN LOAD ENTRY LENGTH

$$LA 15,&END

LA 4,&ENTLEN.(15)

SR 15,14

$$LA 1,&FIRST

&L.A LR 3,1

LA 2,&ENTLEN.(1)

&L.C CLC &KEY.(&KEYLEN,1),&KEY.(2)

BH *+6

LR 2,1

BXLE 1,14,&L.C

CR 2,1

BE &L.N

MVC 0(&ENTLEN,4),0(2)

MVC 0(&ENTLEN,2),0(3)

MVC 0(&ENTLEN,3),0(4)

&L.N LA 1,&ENTLEN.(3)

CR 1,15

BL &L.A

LM 14,4,12(13)

MEND

*

*

SCANFREQ START 0

YREGS

USING *,13

DS 18F

ORG *-72

STM 14,12,12(13)

ST 13,4(15)

ST 15,8(13)

LR 13,15

L R1,0(R1)

CLI 1(R1),0

BE OPEN

MVC PARM(1),2(R1)

B OPEN

ORG

* LGETMAIN DC A(2048)

* AGETMAIN DC F'0'

#RECS DC PL6'0',CL11'RECORDS'

#CHARS DC PL6'0',CL11'CHARACTERS'

PUSH PRINT

PRINT NOGEN

INE DCB DDNAME=INE,DSORG=PS,MACRF=GL,LRECL=32760,RECFM=FT,EODAD=Z

INA DCB DDNAME=INA,DSORG=PS,MACRF=GL,LRECL=32760,RECFM=F,EODAD=Z

OUT DCB DDNAME=FREQTBL,DSORG=PS,MACRF=PM,LRECL=256,RECFM=F

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

*

USING IHADCB,R7

OPENIN MVC OPENMSG+1(8),DCBDDNAM

MVC OPENMSG+17(3),=C' IN'

OPEN ((7),INPUT)

B OPENUNPK

*

OPENMSG DC CL60' ........ OPENED OUTPUT, RECFM=.. LRECL=..... BLKSIZE='

*PENMSG DC C' ........ OPENED, RECFM=.. LRECL=..... BLKSIZE=..... '

OPENOUT MVC OPENMSG+1(8),DCBDDNAM

MVC OPENMSG+17(3),=C'OUT'

OPEN ((7),OUTPUT)

*

OPENUNPK UNPK OPENMSG+31(3),DCBRECFM(2)

TR OPENMSG+31(3),HEX-240

MVI OPENMSG+33,C' '

LH R0,DCBLRECL

CVD R0,DW

OI DW+7,X'0F'

UNPK OPENMSG+40(5),DW+5(3)

LH R0,DCBBLKSI

CVD R0,DW

OI DW+7,X'0F'

UNPK OPENMSG+54(5),DW+5(3)

MVC LINE(L'OPENMSG),OPENMSG

PUT SYSPRINT,LINE

MVC LINE+1(66),LINE

BR R8

DROP R7

*

OPEN1 BAL R8,OPENIN

GET1 GET (7)

AP #RECS,=P'1'

LR R3,R1

LH R4,DCBLRECL-IHADCB(R7)

AR R4,R3

LOOP1 SR R1,R1

AP #CHARS,=P'1'

IC R1,0(R3)

SLL R1,2

LA R2,TBL(R1)

L R14,0(R2)

LA R14,1(R14)

TM 1(R2),X'80'

BO *+8

ST R14,0(R2)

LA R3,1(R3)

LR R0,R4

SR R0,R3

CH R0,=H'134'

BL NOCHK

CLI 0(R3),C' '

BNE *+14

CLC LINE(132),0(R3)

BE GET1

CLI 0(R3),0

BNE *+14

CLC IDMSG(132),0(R3)

BE GET1

NOCHK CR R3,R4

BL LOOP1

B GET1

Z BAL R8,CLOSE

BR R9

POP PRINT

*

OPEN LA R7,SYSPRINT

BAL R8,OPENOUT

PUT SYSPRINT,IDMSG

MVI IDMSG,0

MVC IDMSG+1(132),IDMSG

*

BAL R9,SETUP

*

LA R7,INE

CLI PARM,C'A'

BE *+12

BAL R9,OPEN1

BAL R9,REPORT

*

LA R7,INA

CLI PARM,C'E'

BE *+12

BAL R9,OPEN1

BAL R9,REPORT

*

LA R7,OUT

BAL R8,OPENOUT

PUT OUT,QFREQTBL

*

MVC LINE,LINE-1

MVC LINE+1(22),=C'FREQTBL RECORD WRITTEN'

PUT SYSPRINT,LINE

MVC LINE,LINE-1

*

LA R7,INA

BAL R8,CLOSE

LA R7,INE

BAL R8,CLOSE

LA R7,OUT

BAL R8,CLOSE

*

MVC LINE,LINE-1

MVC LINE(8),=C' BYE BYE'

PUT SYSPRINT,LINE

MVC LINE,LINE-1

*

LA R7,SYSPRINT

BAL R8,CLOSE

*

L R13,4(R13)

LM 14,12,12(13)

SR 15,15

BR 14

*

CLOSE TM DCBOFLGS-IHADCB(R7),DCBOFOPN

BZR R8

CLOSE ((7))

TM DCBOFLGS-IHADCB+SYSPRINT,DCBOFOPN

BZR R8

MVC LINE+1(8),DCBDDNAM-IHADCB(R7)

MVC LINE+9(7),=C' CLOSED'

PUT SYSPRINT,LINE

BR R8

*

PARM DC C' '

ED11 DC X'4020206B2020206B2020206B202120'

*

REPORT MVC LINE(L'ED11),ED11

ED LINE(L'ED11),#RECS

MVC LINE+L'ED11+2(11),#RECS+6

MVC LINE+25(L'ED11),ED11

ED LINE+25(L'ED11),#CHARS

MVC LINE+23+L'ED11+3(11),#CHARS+6

MVC LINE+23+L'ED11+3+13(6),=C'SO FAR'

PUT SYSPRINT,LINE

MVC LINE,LINE-1

*

LA R3,TBL

LA R4,256

SR R2,R2

LOOP2 ST R2,12(R13)

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

UNPK LINE+15(3),15(2,R13)

TR LINE+15(2),HEX-240

MVI LINE+17,C','

*

L R0,0(R3)

CVD R0,16(R13)

OI 23(R13),X'0F'

UNPK LINE+18(11),18(6,R13)

*

* MVC LINE+7(L'ED11),ED11

* ED LINE+7(L'ED11),18(R13)

* LTR R0,R0

* BNZ *+8

* MVI LINE+8+L'ED11,C'0'

*

LA R3,4(R3)

LA R2,1(R2)

PUT SYSPRINT,LINE

BCT R4,LOOP2

BR R9

*

QFREQTBL DC 256X'05'

ORG QFREQTBL

DC X'151413'

ORG QFREQTBL+X'20' BLANK + SPECIAL CHARS

DC X'15',15X'09'

ORG QFREQTBL+X'30' ASCII NUMBERS

DC X'14',9X'12',6X'09'

ORG QFREQTBL+X'40' ASCII UPPER CASE LETTERS

DC X'091411111114111111141011121212141110121212131010091309'

DC 6X'08' SPECIAL CHARS,THEN LOWER CASE LETTERS

DC X'091411111114111111141011121212141110121212131010091309'

DC 5X'08'

ORG QFREQTBL+X'80'

* A B C D E F G H I

DC X'05141111111411111114',6X'05' EBCDIC LOWER CASE

* J K L M N O P Q R

DC X'05111110111314110013',6X'05' "

* S T U V W X Y Z

DC X'05051313120909081209',6X'05' "

DC 16X'05'

ORG QFREQTBL+X'C1'

DC X'141212121912121214',6X'05' UPPER CASE

DC X'05121212101414120314',6X'05'

DC X'05051414121111040904',6X'05'

DC X'15151413131313131313',6X'05'

ORG

*

SETUP DS 0H

DEF 17,00000000000

DEF 1C,00000000000

DEF 2D,00000000000

DEF 2E,00000000000

DEF 39,00000000000

DEF 3D,00000000000

DEF 3E,00000000000

DEF 42,00000000000

DEF 4A,00000000000

DEF 51,00000000000

DEF 53,00000000000

DEF 55,00000000000

DEF 57,00000000000

DEF 63,00000000000

DEF 65,00000000000

DEF 67,00000000000

DEF 69,00000000000

DEF 72,00000000000

DEF 73,00000000000

DEF 75,00000000000

DEF 76,00000000000

DEF 8B,00000000000

DEF 8C,00000000000

DEF 8D,00000000000

DEF 8E,00000000000

DEF 9A,00000000000

DEF 9B,00000000000

DEF 9F,00000000000

DEF AB,00000000000

DEF AE,00000000000

DEF AF,00000000000

DEF B1,00000000000

DEF B3,00000000000

DEF B5,00000000000

DEF B6,00000000000

DEF BB,00000000000

DEF BE,00000000000

DEF CD,00000000000

DEF EB,00000000000

DEF ED,00000000000

DEF EE,00000000000

DEF EF,00000000000

DEF FC,00000000000

DEF 0B,00000000001

DEF 14,00000000001

DEF 16,00000000001

DEF 19,00000000001

DEF 1D,00000000001

DEF 22,00000000001

DEF 25,00000000001

DEF 2F,00000000001

DEF 32,00000000001

DEF 3B,00000000001

DEF 56,00000000001

DEF 77,00000000001

DEF 8A,00000000001

DEF 8F,00000000001

DEF 9D,00000000001

DEF 9E,00000000001

DEF B2,00000000001

DEF B7,00000000001

DEF B9,00000000001

DEF BA,00000000001

DEF BC,00000000001

DEF BF,00000000001

DEF CE,00000000001

DEF DD,00000000001

DEF FB,00000000001

DEF FD,00000000001

DEF 1E,00000000002

DEF 1F,00000000002

DEF 21,00000000002

DEF 27,00000000002

DEF 3F,00000000002

DEF 43,00000000002

DEF 4F,00000000002

DEF 64,00000000002

DEF 68,00000000002

DEF 71,00000000002

DEF 78,00000000002

DEF AA,00000000002

DEF AC,00000000002

DEF B4,00000000002

DEF CF,00000000002

DEF DE,00000000002

DEF E1,00000000002

DEF 0D,00000000003

DEF 0E,00000000003

DEF 2B,00000000003

DEF 48,00000000003

DEF 49,00000000003

DEF EA,00000000003

DEF FA,00000000003

DEF 09,00000000004

DEF 13,00000000004

DEF 26,00000000004

DEF 28,00000000004

DEF 31,00000000004

DEF 37,00000000004

DEF 46,00000000004

DEF 52,00000000004

DEF 62,00000000004

DEF 66,00000000004

DEF 74,00000000004

DEF DF,00000000004

DEF FE,00000000004

DEF 11,00000000005

DEF 29,00000000005

DEF 2A,00000000005

DEF 3A,00000000005

DEF A0,00000000005

DEF DC,00000000005

DEF 15,00000000006

DEF 1B,00000000006

DEF 35,00000000006

DEF 6A,00000000006

DEF DB,00000000006

DEF 3C,00000000007

DEF 59,00000000007

DEF 5F,00000000007

DEF B0,00000000007

DEF B8,00000000007

DEF FF,00000000007

DEF 0C,00000000008

DEF 12,00000000008

DEF 23,00000000008

DEF C0,00000000008

DEF 18,00000000009

DEF 2C,00000000009

DEF 38,00000000009

DEF DA,00000000009

DEF 02,00000000010

DEF 20,00000000010

DEF EC,00000000010

DEF 06,00000000011

DEF 9C,00000000011

DEF 03,00000000013

DEF 07,00000000013

DEF 44,00000000013

DEF 04,00000000014

DEF 08,00000000016

DEF 54,00000000019

DEF 36,00000000020

DEF CC,00000000020

DEF 30,00000000022

DEF 58,00000000022

DEF A1,00000000022

DEF 01,00000000023

DEF 5E,00000000023

DEF 5A,00000000024

DEF 79,00000000024

DEF 33,00000000026

DEF 0A,00000000027

DEF E0,00000000027

DEF 34,00000000031

DEF 0F,00000000036

DEF 45,00000000037

DEF 6E,00000000039

DEF 24,00000000043

DEF D0,00000000043

DEF E9,00000000044

DEF 70,00000000046

DEF 5B,00000000047

DEF 1A,00000000049

DEF 80,00000000053

DEF CA,00000000053

DEF E7,00000000054

DEF CB,00000000060

DEF 41,00000000072

DEF 90,00000000079

DEF D8,00000000082

DEF 10,00000000084

DEF 4E,00000000086

DEF 4C,00000000089

DEF 47,00000000091

DEF 50,00000000095

DEF 6C,00000000099

DEF AD,00000000113

DEF BD,00000000113

DEF 5C,00000000147

DEF E5,00000000147

DEF D1,00000000151

DEF A9,00000000168

DEF 05,00000000179

DEF E8,00000000200

DEF 7B,00000000220

DEF 98,00000000224

DEF E4,00000000227

DEF 6F,00000000234

DEF 00,00000000240

DEF D2,00000000240

DEF C7,00000000286

DEF C8,00000000287

DEF C6,00000000303

DEF 91,00000000335

DEF 5D,00000000336

DEF 4D,00000000348

DEF D6,00000000361

DEF E6,00000000384

DEF 7F,00000000390

DEF D5,00000000414

DEF D7,00000000414

DEF C4,00000000420

DEF C5,00000000446

DEF D9,00000000458

DEF C2,00000000460

DEF A7,00000000482

DEF D3,00000000514

DEF 7D,00000000535

DEF 7C,00000000559

DEF D4,00000000561

DEF C3,00000000663

DEF C9,00000000692

DEF 7E,00000000727

DEF 7A,00000000735

DEF F7,00000000829

DEF F6,00000000849

DEF C1,00000000851

DEF E2,00000000864

DEF E3,00000000872

DEF F5,00000000989

DEF F3,00000001010

DEF F4,00000001303

DEF 92,00000001346

DEF F8,00000001422

DEF A5,00000001432

DEF 60,00000001669

DEF F9,00000001906

DEF F2,00000001956

DEF 6D,00000002188

DEF F0,00000002227

DEF 82,00000002265

DEF 86,00000002608

DEF F1,00000002702

DEF 6B,00000002777

DEF A8,00000002887

DEF 87,00000003466

DEF A6,00000003557

DEF 97,00000003929

DEF 61,00000003949

DEF A4,00000004314

DEF 84,00000004814

DEF 94,00000005100

DEF 83,00000005421

DEF 4B,00000005469

DEF 88,00000006781

DEF 93,00000007094

DEF 99,00000009007

DEF A2,00000009144

DEF 89,00000010347

DEF 95,00000010476

DEF 96,00000011890

DEF 81,00000012251

DEF A3,00000013664

DEF 85,00000017084

DEF 40,00000039118

ORG

LA R4,16

LA R2,QFREQTBL

*

UNPK0 LA R3,LINE+17

LA R1,4

MVC LINE+9(8),=C'DC X'''

UNPK UNPK 0(9,R3),0(5,R2)

TR 0(8,R3),HEX-240

LA R2,4(R2)

LA R3,8(R3)

BCT R1,UNPK

MVI 0(R3),C''''

PUT SYSPRINT,LINE

BCT R4,UNPK0

MVC LINE,LINE-1

BR R9

*

LTORG

DC CL4' '

LINE DC CL133' '

IDMSG DC CL133' SCANFREQ, ASM &SYSDATE AT &SYSTIME'

DW DC D'0'

HEX DC C'0123456789ABCDEF'

TBL DC 256F'0'

DCBD DEVD=DA

END SCANFREQ