TITLE 'IEAVAD71 - SNAP MODULE - FORMET SUBROUTINE' 00050002 * /* START OF SPECIFICATIONS **** 00150000 * 00200000 *01* MODULE-NAME = IEAVAD71 ( VS2 ) 00250000 * 00300000 *01* DESCRIPTIVE-NAME = SNAP FORMET ROUTINE 00400002 * 00450000 *01* COPYRIGHT = NONE 00500000 * 00550000 *01* STATUS = VERSION 1 00600000 * 00650000 * 00850000 *01* FUNCTION = THIS ROUTINE PRODUCES THE PORTION OF THE DUMP THAT 01250000 * CONSISTS OF THE ADDRESS PORTION OF THE DATA, EIGHT OR SIXTEEN 01255040 * WORDS OF DATA AND THE EBCDIC TRANSLATION OF THESE WORDS. 01260040 * THE NUMBER OF WORDS PER LINE IS DETERMINED BY ABDLLNGH IN 01263040 * ABDAREA (ABDLLNGH IS THE LENGTH OF THE LINE IN BYTES). 01270040 * 01274040 *02* OPERATION = THIS ROUTINE DETERMINES HOW MANY LINES WILL 01278040 * BE REQUIRED TO DUMP THE REQUESTED STORAGE. IT THEN BUILDS 01282040 * THE RECORDS USING A LAYOUT LINE PATTERN, ONE BY ONE 01286040 * TO REPRODUCE THIS STORAGE. EACH FULL LINE CONTAINS 01290040 * A THREE BYTE ADDRESS FOLLOWED BY EIGHT WORDS OF STORAGE, 01294040 * IF A STANDARD LINE LENGTH, OR SIXTEEN WORDS OF STORAGE, 01298040 * IF THE LONG LINE IS REQUESTED, FOLLOWED BY THE EBCDIC 01302040 * TRANSLATION OF THESE WORDS. THE LENGTH OF THE LINE TO 01306040 * BE DUMPED IS DETERMINED BY ABDLLNGH IN ABDAREA. AFTER 01320040 * EACH RECORD IS BUILT, IEAVAD11 IS CALLED TO MOVE THE 01323040 * RECORD TO AN OUTPUT BUFFER Z40MPXH 01330040 * 01335040 * 01340040 *01* NOTES 01350000 * 01400000 *02* CHARACTER-CODE-DEPENDENCIES = THIS MODULE IS EBCDIC CHARACTER 01450000 * CODE DEPENDENT. 01500000 * 01510000 *02* DEPENDENCIES = NONE 01550000 * 01600000 *02* PERFORMANCE = AS IN FUNCTION. 01650000 * 01700000 *02* RESTRICTIONS = NONE 01750000 * 01800000 *02* REGISTER-CONVENTIONS = THE REGISTER CONVENTIONS ARE DESCRIBED 01850000 * UNDER REGISTER EQUATES. 01900000 * 01910000 *02* PATCH-LABEL = NONE 01950000 * 02000000 *01* MODULE-TYPE = MODULE 02050000 * 02052000 *02* PROCESSOR = ASSEMBLER-370R 02060000 * 02070000 *02* MODULE-SIZE = BYTES 02092040 * 02094000 *02* ATTRIBUTES = REENTERABLE 02096000 * 02098000 *01* ENTRY = IEAVAD71 02098800 * 02099200 *02* PURPOSE = FORMAT DATA AS DESCRIBED ABOVE 02099600 * 02099700 *02* LINKAGE = BALR 02099800 * 02109800 *02* INPUT = ABDBLOCK SHOULD CONTAIN THE ADDRESS OF THE DATA TO BE 02126600 * DISPLAYED. ABDLENTH SHOULD CONTAIN THE SIZE OF THE DATA BLOCK 02127000 * TO BE DISPLAYED. IF A UPR EVENT IS ANTICIPATED, UPRFMET SHOULD 02127400 * BE SET TO '1'B. IF UPR ANTICIPATED SET ABDUPRFN TO X'80' TO 02127800 * DISPLAY THE NOT ALLOCATED MESSAGE OR TO X'40' TO SKIP A LINE IN 02128200 * THE DISPLAY WHERE THE UPR OCCURRED. ANY OTHER SETTING WILL 02128300 * RESULT IN A RETURN TO THE CALLER WITH A CODE OF ZERO. GPR1 MUST 02128400 * CONTAIN THE ADDRESS OF ABDAREA, GPR13 THE ADDRESS OF THE 02128500 * CALLERS SAVE AREA, GPR14 THE RETURN ADDRESS AND GPR15 THE 02129200 * ADDRESS OF IEAVAD71. 02129600 * 02131600 *02* OUTPUT = LINES OF THE DUMP 02131700 * 02132100 *02* EXIT-NORMAL = BACK TO CALLER 02133100 * 02135100 *02* EXIT-ERROR = BACK TO CALLER WITH A CODE OF EIGHT IF SPACE FOR A 02138802 * SAVE AREA IS NOT AVAILABLE. A 0C4 ABEND OCCURS IF AN UNEXPECTED 02140800 * UPR OCCURS 02140900 * 02142900 *01* EXTERNAL-REFERENCES 02143200 * 02143600 *02* ROUTINES = IEAVAD11,IEAVAD51,IEAVAD61 02144000 * 02144100 *02* DATA-SETS = NONE 02144300 * 02154300 *02* DATA-AREA = ABDAREA - ABDUMP WORK AREA 02178200 * 02180200 *01* TABLES = NONE 02184200 * 02184600 *01* MACROS = GETMAIN,FREEMAIN,IHAABDA 02185000 * 02195000 *01* CHANGE-ACTIVITY = YM2513,Z40MPXH 02195640 * 02196240 * 02197000 **** END OF SPECIFICATIONS ***/ 02200000 IEAVAD71 CSECT 03500000 * 03550000 * REGISTER EQUATES 03600000 * 03650000 R0 EQU 0 NAME FOR REGISTER RESTORING 03700000 ABDARPTR EQU 1 ADDRESS OF ABDAREA 03750000 PARAM EQU 1 POINTER TO GETMAIN PARAM LIST 03800000 START EQU 2 ADDRESS OF NEXT DATA TO BE DISPLAYED 03850000 INDENTCN EQU 3 NUMBER OF BYTES IN CURRENT LINE 03900000 * NOT TO BE DISPLAYED 03950000 * REGISTERS INCOMP AND SIZE MUST REMAIN AN EVEN-ODD PAIR SINCE THEY 04000000 * ARE USED IN A DIVIDE OPERATION 04050000 INCOMP EQU 4 NUMBER OF BYTES IN LAST LINE 04100000 * TO BE DISPLAYED 04150000 SIZE EQU 5 NUMBER OF BYTES TO BE DISPLAYED 04200000 LINES EQU 5 NUMBER OF COMPLETE LINES TO 04250000 * BE DISPLAYED 04300000 LAYLINE EQU 6 ADDRESS OF LAYOUT LINE 04350000 CURLINE EQU 6 ADDRESS OF NEXT LINE TO BE DISPLAYED 04400000 LASTLINE EQU 7 ADDRESS OF LAST LINE DISPLAYED 04450000 LINESIZE EQU 8 SET FOR SHORT OR LONG LINE ZM40084 04470040 MISSING EQU 11 NUMBER OF LINES UNDEFINED ZM40084 04500040 PGADDR EQU 9 NEXT POSSIBLE DEFINED ADDR 04550000 MASK EQU 10 USED BY ROUNDING Z40MPXH 04570040 WORK EQU 11 GENERAL WORK REGISTER 04600000 SAVERET EQU 11 SAVE RETURN CODE OVER FREEMAIN 04650000 BASE EQU 12 BASE REGISTER 04700000 SAVEAREA EQU 13 ADDRESS OF SAVE AREA 04750000 RETREG EQU 14 RETURN ADDRESS 04800000 TEMP EQU 14 WORK REGISTER 04850000 BASEIN EQU 15 TEMPORARY BASE REGISTER 04900000 RETCODE EQU 15 RETURN CODE 04950000 TOREG EQU 15 ENTRY ADDRESS TO SUBROUTINE 05000000 EJECT 05050000 * GENERAL EQUATES 05100000 * 05150000 ZERO EQU 0 CONSTANT 05200000 ONE EQU 1 CONSTANT 05250000 TWO EQU 2 CONSTANT 05300000 THREE EQU 3 CONSTANT 05350000 FOUR EQU 4 CONSTANT 05400000 FIVE EQU 5 CONSTANT 05450000 SIX EQU 6 CONSTANT 05500000 EIGHT EQU 8 CONSTANT 05550000 NINE EQU 9 CONSTANT 05600000 TWELVE EQU 12 CONSTANT 05650000 K14 EQU 14 CONSTANT 05700000 K17 EQU 17 CONSTANT 05750000 K18 EQU 18 CONSTANT 05800000 TWENTY EQU 20 CONSTANT 05850000 K22 EQU 22 CONSTANT 05900000 K24 EQU 24 CONSTANT 05950000 K25 EQU 25 CONSTANT 06000000 K29 EQU 29 CONSTANT 06050000 L32 EQU 32 CONSTANT 06100000 L64 EQU 64 CONSTANT Z40MPXH 06110040 TWO04 EQU 204 CONSTANT Z40MPXH 06120040 ONE20 EQU 120 CONSTANT Z40MPXH 06130040 SEVENTY2 EQU 72 CONSTANT 06150000 M32 EQU 5 VALUE FOR SHIFT TO MULTIPLY BY 32 06200000 M64 EQU 6 SHIFT TO MULITPLY BY 64 Z40MPXH 06220040 D32 EQU 5 VALUE FOR SHIFT TO DIVIDE BY 32 06250000 D64 EQU 6 SHIFT TO DIVIDE BY 64 Z40MPXH 06270040 PREV EQU 4 DISPLACEMENT IN SAVEAREA 06300000 NEXT EQU 8 DISPLACEMENT IN SAVEAREA 06350000 MULT4 EQU X'FC' ROUND DOWN TO MULTIPLE OF WORDS 06400000 ALL EQU X'FF' MASK TO RESET BITS 06450000 PGTEST EQU X'FF' MASK T0 REFERENCE PG IN VALID TEST 06500000 SEPCHAR EQU C'-' INSERTED INTO OUTPUT MESSAGE 06550000 DOUBLE EQU C'0' DOUBLE SPACE CARRIAGE CONTROL CHAR 06600000 BLANK EQU C' ' FOR BLANKING ABDLINE 06650000 FREEMAIN EQU 10 SVC NUMBER 06700000 EJECT 06750000 * AFTER SAVING THE CALLERS REGISTERS IN THE PROVIDED SAVE AREA, THE 06800000 * ROUTINE ISSUES A CONDITIONAL GETMAIN FOR SPACE FOR ITS OWN SAVE 06850000 * AREA. IF THE GETMAIN FAILS, CONTROL IS RETURNED TO THE CALLER WITH 06900000 * A CODE OF EIGHT. OTHERWISE, THE SAVE AREAS AREA CHAINED IN STANDARD 06950002 * FASHION AND PROCESSING CONTINUES. 07000000 USING *,BASEIN 07050000 MODID BR=YES 07100002 DROP BASEIN 07300000 STM RETREG,BASE,TWELVE(SAVEAREA) SAVE CALLERS REGISTERS 07350000 BALR BASE,ZERO ESTABLISH ADDRESSIBILITY 07400000 USING *,BASE 07450000 LR WORK,ABDARPTR SAVE ABDAREA ADDRESS OVER GM 07500000 * ESTABLISH TEMPORARY BASE FOR ABDAREA 07550000 USING ABDAREA,WORK 07600000 LA PARAM,ABDGMA+FOUR SET ADDR OF GETMAIN PARAM LIST 07650000 * ISSUE GETMAIN FOR 72 BYTES FROM SUBPOOL 253 FOR USE AS REGISTER 07700000 * SAVE AREA 07750000 GETMAIN EC,LV=72,SP=253,A=ABDGMA,MF=(E,(1)) 07800000 * ESTABLISH REAL BASE FOR ABDAREA 07850000 LR ABDARPTR,WORK RESTORE ABDAREA ADDRESS 07900000 DROP WORK 07950000 USING ABDAREA,ABDARPTR 08000000 * IF GETMAIN IS NOT SUCCESSFUL CONTROL IS RETURNED TO CALLER WITH 08050000 * CODE OF EIGHT 08100040 LTR RETCODE,RETCODE WAS SPACE OBTAINED 08150000 BNZ EXITEND NO, BRANCH TO EXITING ROUTINE 08200000 L WORK,ABDGMA GET ADDR OF AREA OBTAINED BY GM 08250000 ST SAVEAREA,PREV(WORK) BACK CHAIN SAVE AREAS 08300000 ST WORK,NEXT(SAVEAREA) FORWARD CHAIN SAVE AREAS 08350000 LR SAVEAREA,WORK PUT NEW SAVE AREA ADDR IN R13 08400000 * MASK AND LINESIZE WILL BE INITIALIZED ACCORDING TO THE LENGTH OF 08404040 * THE DUMP LINES, EITHER 32 OF 64 BYTES PER LINE Z40MPXH 08408040 CLI ABDLLNGH,TWO04 CHECK FOR LONG LINE Z40MPXH 08412040 BE LONGINIT YES, INITIALIZE LONG Z40MPXH 08416040 L MASK,MASKWD SET MASK FOR 120C LINE Z40MPXH 08420040 N MASK,MASK32 Z40MPXH 08421040 L LINESIZE,THIRTY2 32 BYTES PER STANDARD LINE ZM40084 08424040 B COMMON CONT COMMON PROCESSING Z40MPXH 08432040 LONGINIT L MASK,MASKWD SET MASK FOR 204C LINE Z40MPXH 08436040 N MASK,MASK64 Z40MPXH 08437040 L LINESIZE,SIXTY4 64 BYTES PER CONDENSED LINE ZM40084 08440040 * THE USER HAS SUPPLIED THE INITIAL PRINT ADDRESS - ABDBLOCK - AND THE 08450000 * SIZE OF THE AREA TO BE PRINTED - ABDLENTH. THE ROUTINE ROUNDS THE 08500000 * INITIAL ADDRESS DOWN TO A FULL WORD BOUNDARY AND INCREASES THE 08550000 * SIZE BY THE ADDITIONAL BYTES. THE TOTAL SIZE IS THEN ROUNDED UP TO 08600000 * A FULL WORD BOUNDARY. INITIAL ADDRESS AND SIZE ARE PLACED IN ABDSTAD 08650000 * AND ABDSIZE. 08700000 COMMON L WORK,ABDBLOCK OBTAIN INIT PRINT ADDR Z40MPXH 08750040 ST WORK,ABDSTAD INIT ABDSTAD FIELD 08800000 NI ABDSTAD+THREE,MULT4 ROUND DOWN TO WORD BOUNDARY 08850000 S WORK,ABDSTAD CALC NUMBER OF BYTES GAINED BY ROUND 08900000 A WORK,ABDLENTH ADD USER SIZE TO GAIN 08950000 LA WORK,THREE(WORK) START ROUND UP TO WORD BOUNDARY 09000000 ST WORK,ABDSIZE INIT SIZE OF AREA TO DISPLAY 09050000 NI ABDSIZE+THREE,MULT4 ROUND DOWN TO WORD BOUNDARY 09100000 XC ABDUPRID(FOUR),ABDUPRID INIT FIELD 09150000 XC ABDIND(FOUR),ABDIND SET INDENTATION FACTOR AND 09200000 * NUMBER OF IDENTICAL LINES TO ZERO 09250000 * SINCE THE ROUTINE IS DESIGNED TO DISPLAY DATA IN MULTIPLES OF 32 09300000 * OR 64 BYTES ON A 32 OR 64 BYTE BOUNDARY, RESPECTIVELY, THE INITIAL 09350040 * PRINT ADDRESS IS ROUNDED DOWN TO A MULTIPLE OF THE NUMBER OF 09360040 * BYTES PER DUMP LINE AND THE NUMBER OF BYTES ADDED IS SAVED 09400040 * IN ABDIND TO LATER SUPPRESS THE DISPLAY OF THE ADDITIONAL BYTES. 09450000 L START,ABDSTAD RETRIEVE INIT PRINT ADDRESS 09500000 NR START,MASK ROUND ADDR DOWN TO THE PROPER 09550040 * LINE BOUNDARY Z40MPXH 09580040 S START,ABDSTAD STILL EQUAL INIT ADDR 09650000 BZ FORMET01 YES, BRANCH - NO INDENT FACTOR 09700000 LCR INDENTCN,START THE POSITIVE OF THE DIFFERENCE 09750000 * IS NUMBR OF BYTES TO SUPPRESS 09800000 STH INDENTCN,ABDIND SAVE VALUE IN ABDAREA 09850000 * THE TOTAL LINESIZE IS THEN DIVIDED BY SIZE TO YIELD THE NUMBER OF 09900040 * LINES TO BE DISPLAYED IN REGISTER LINES AND THE NUMBER OF EXTRA 09930040 * BYTES TO BE DISPLAYED ON THE LAST LINE. THE LATTER VALUE IS SAVED IN 09960040 * ABDINCPL. 10050000 FORMET01 L SIZE,ABDSIZE RETRIEVE SIZE OF PRINT AREA 10100000 AH SIZE,ABDIND INCREMENT BY INDENTATION FACTOR 10150000 SR INCOMP,INCOMP 10200000 DR INCOMP,LINESIZE DIVIDE TOT SIZE BY LINESIZE ZM40084 10250040 STH INCOMP,ABDINCPL SAVE REMAINDER 10300000 LTR LINES,LINES ANY COMPLETE LINES TO PROCESS 10350000 BNZ COMPLINE YES, GO PROCESS THEM 10400000 * WHEN ALL COMPLETE LINES HAVE BEEN PROCESSED, CONTROL IS RETURNED 10450000 * HERE. 10500000 INCPLINE LH INCOMP,ABDINCPL RETRIEVE COUNT OF EXTRA BYTES 10550000 LTR INCOMP,INCOMP IS THERE PARTIAL LINE 10600000 BNZ DOLAST YES, PROCESS LAST LINE 10650000 NORMEXIT LA RETCODE,ZERO SET RETURN CODE TO 0 10700000 EXIT LR SAVERET,RETCODE SAVE RETURN CODE OVER FREEMAIN 10750000 NI ABDUPRF,ALL-UPRFMET RESET UPR INDICATOR 10800000 LR PARAM,SAVEAREA SET R1 TO ADDRESS OF SPACE TO 10850000 * BE FREED 10900000 L SAVEAREA,PREV(SAVEAREA) RESTORE ADDRESS OF CALLERS 10950000 * SAVE AREA 11000000 L R0,FREECON SET R0 VALUE FOR FREEMAIN 11050000 SVC FREEMAIN FREE SAVE AREA SPACE 11100000 LR RETCODE,SAVERET RESTORE RETURN CODE 11150000 RETURN L RETREG,TWELVE(SAVEAREA) RESTORE REGISTER 14 11200000 LM R0,BASE,TWENTY(SAVEAREA) RESTORE REGISTERS 0-12 11250000 BR RETREG RETURN TO CALLER 11300000 EXITEND LA RETCODE,EIGHT SET RETURN CODE FOR INSUFFICIENT 11350002 * SPACE 11400000 NI ABDUPRF,ALL-UPRFMET RESET UPR INDICATOR 11450000 B RETURN GO FINISH EXIT PROCEDURE 11500000 EJECT 11550000 * THE NEXT SECTION OF CODE IS INCOMPLETE - LAST - LINE PROCESSING 11600000 * WHERE THE LAST LINE DOES NOT CONTAIN ENOUGH BYTES FOR FULL LINE. 11650040 * FORMAT20 IS CALLED UNPACK LOCATION COUNTER AND TO PROVIDE AN EBCDIC 11680040 * TRANSLATION OF THE LINE AND, FOR EACH WORD OF THE LAST LINE TO 11750000 * BE DISPLAYED, THE ROUTINE CALLS FORMAT22 TO UNPACK THE DATA. 11800000 * THE PROCESSING ALSO INCLUDES SPECIAL PROVISION FOR ANTICIPATED 11850000 * UPR EVENTS WHICH WILL BE DESCRIBED WITH THE APPLICABLE CODE. 11900000 DOLAST TM ABDUPRF,UPRFMET IS UPR ANTICIPATED 11950000 BNO FORMET09 NO, BRANCH 12000000 OI ABDUPRF,UPRFMT20 SET FORMAT20 TO EXPECT UPR 12050000 FORMET09 L WORK,ABDSTAD SET LOCATION COUNTER ADDRESS TO 12100000 SH WORK,ABDIND INIT ADDR MINUS INDENTATION FACTOR 12150000 * I.E. BYTE BDY OF THE LINE Z40MPXH 12200040 ST WORK,ABDFWORK FORMAT20 EXPECTS IT HERE 12250000 LA WORK,ABDFWORK+ONE SET DATA ADDR FOR FORMAT20 12300000 ST WORK,ABDBPTR IN ABDBPTR 12350000 ST LINES,ABDLCNT FORMAT20 NEEDS COUNT OF 12360040 * LINES Z40MPXH 12370040 L TOREG,VAD51 GET ADDR OF FORMAT20 12400000 BALR RETREG,TOREG GO TO FORMAT20 12450000 * FORMAT20 RETURNS A CODE OF EIGHT IF A UPR OCCURED 12500000 SH RETCODE,HALF8 IS RETURN DUE TO UPR 12550000 BZ LASTUPR YES, GO PROCESS UPR 12600000 MVC ABDBPTR(FOUR),ABDSTAD SET INIT DATA ADDR 12650000 * THE FOLLOWING SECTION OF CODE CALCULATES THE ADDRESS OF THE LAYOUT 12700000 * LINE TO BE USED TO FORMAT THE FIRST WORD OF THE LINE 12750000 * THE LAYOUT LINE TO BE USED DEPENDS ON THE PRINT LINE FORMAT 12760040 * INCLLINE FOR STANDARD OR INCL64 FOR CONDENSED LINE FORMAT Z40MPXH 12770040 LH INDENTCN,ABDIND RETRIEVE INDENTATION COUNT 12800000 SRL INDENTCN,TWO DIVIDE BY FOUR FOR INDEX INTO 12850000 * LAYOUT LINES 12900000 MH INDENTCN,HALF3 MULTIPLY BY THREE FOR ACTUAL 12950000 * DISPLACEMENT INTO LAYOUT LINES 13000000 CLI ABDLLNGH,TWO04 CONDENSED LINE? Z40MPXH 13010040 BE LNGLAST YES, USE LONG LAYOUT LINE Z40MPXH 13020040 LA WORK,INCLLINE(INDENTCN) GET ADDR DESIRED LAYOUT LINE 13050000 B LAST Z40MPXH 13060040 LNGLAST LA WORK,INCL64(INDENTCN) CONDENSED LAYOUT Z40MPXH 13070040 LAST ST WORK,ABDLLINE SET IT FOR FORMAT22 Z40MPXH 13100040 * CALCULATE THE NUMBER OF WORDS TO BE DISPLAYED ON THE LAST LINE 13150000 * AS (NUMBER OF BYTES LEFT OVER FROM COMPLETE LINE PROCESSING MINUS 13200000 * THE INDENTATION FACTOR) DIVIDED BY FOUR. 13250000 LH WORK,ABDINCPL GET NUMBER OF BYTES IN PARTIAL LINE 13300000 SH WORK,ABDIND SUBTRACT INDENTATION FACTOR 13350000 SRL WORK,TWO DIVIDE BY 4 TO GET WORDS ON LINE 13400000 FORMET11 TM ABDUPRF,UPRFMET DID CALLER ANTICIPATE UPR 13450000 BNO FORMET10 NO, BRANCH 13500000 OI ABDUPRF,UPRFMT20 SET FORMAT22 TO INTERCEPT UPR 13550000 FORMET10 L TOREG,VAD61 ADDR OF FORMAT22 13600000 BALR RETREG,TOREG GO TO FORMAT22 13650000 SH RETCODE,HALF8 DID FORMAT22 HAVE UPR 13700000 BZ LASTUPR YES, GO PROCESS IT 13750000 BCT WORK,FORMET11 SUBTRACT 1 FROM WORD COUNT AND 13800000 * IF NOT ZERO GO PROCESS NEXT WORD 13850000 * WHEN ALL THE WORDS ON THE LAST LINE HAVE BEEN EDITED, PRINT THE 13900000 * LINE AND RETURN TO CALLER WITH NORMAL CODE 13950000 L TOREG,VAD11 GET OUTPUT ADDR 14000000 BALR RETREG,TOREG GO TO OUTPUT ROUTINE 14050000 B NORMEXIT EXIT TO CALLER 14100000 EJECT 14150000 * THIS SECTION OF THE ROUTINE PROCESSES COMPLETE LINES OF DATA. 14200000 * AN EBCDIC TRANSLATION OF EACH LINE IS GIVEN AND ALL OF THE DATA IS 14250000 * UNPACKED INTO THE OUTPUT LINE. THERE ARE TWO SPECIAL CASES. THE 14300000 * FIRST LINE MAY HAVE THE FIRST PORTION SUPPRESSED IF THE USER DID NOT 14350000 * REQUEST A DISPLAY BEGINNING ON A LINE BOUNDARY. ALSO, 14400040 * EACH LINE IS COMPARED TO THE LAST PRINTED LINE AND, IF EQUAL, IS 14430040 * NOT DISPLAYED. A MESSAGE IS PRODUCED, HOWEVER, INDICATING EQUAL 14500000 * LINES. 14550000 FORMET02 EQU * 14600000 COMPLINE L START,ABDSTAD RETRIEVE INIT PRINT ADDR 14650000 SH START,ABDIND SET INIT ADDR TO LINE BDY Z40MPXH 14700040 ST START,ABDFWORK SET IN FIELD AS LOCATION COUNTER 14800000 LA WORK,ABDFWORK+ONE SET ADDR OF DATA AREA 14850000 ST WORK,ABDBPTR FOR FORMAT20 14900000 ST LINES,ABDLCNT AND COUNT OF LINES Z40MPXH 14920040 TM ABDUPRF,UPRFMET DID CALLER ANTICIPATE UPR 14950000 BNO TOVAD51 NO, BRANCH 15000000 OI ABDUPRF,UPRFMT20 SET FORMAT20 TO INTERCEPT UPR 15050000 TOVAD51 L TOREG,VAD51 GET ADDR OF FORMAT20 15100000 BALR RETREG,TOREG GO TO FORMAT20 ROUTINE 15150000 SH RETCODE,HALF8 DID FORMAT20 HAVE UPR 15200000 BZ UPR YES, GO PROCESS IT 15250000 * THE ROUTINE THEN CALCULATES HOW MANY WORDS SHOULD NOT BE DISPLAYED 15300000 * ON THE LINE. THIS IS ONLY MEANINGFUL ON THE FIRST COMPLETE LINE TO 15350000 * ALLOW FOR THE INDENTATION FACTOR. ON ALL OTHER LINES, THE RESULT IS 15400000 * ZERO. 15450000 LH INDENTCN,ABDIND RETRIEVE INDENTATION FACTOR 15500000 SRL INDENTCN,ONE DIVIDE BY 2 FOR USE AS ADJUSTMENT 15550000 * TO BEGINNING OF STANDARD LAYOUT LINE 15600000 * TWO LAYOUT LINES ARE DEFINED FOR COMPLETE LINES: STANDARD IS 15608040 * USED FOR THE NORMAL 32 BYTES PER LINE CASE AND COMP64 IS USED 15616040 * WHEN 64 BYTES PER LINE IS REQUESTED. Z40MPXH 15624040 CLI ABDLLNGH,TWO04 LONG LINE REQUESTED? Z40MPXH 15632040 BE LNGLL YES, USE COMP64 Z40MPXH 15640040 LA LAYLINE,STANDARD(INDENTCN) INDEX INTO LAYOUT LINE 15650000 B INDXLINE SKIP AROUND Z40MPXH 15660040 LNGLL LA LAYLINE,COMP64(INDENTCN) INDEX INTO COM64 15670040 * LAYOUT LINE Z40MPXH 15680040 INDXLINE ST LAYLINE,ABDLLINE SET FOR FORMAT22 Z40MPXH 15700040 MVC ABDBPTR(FOUR),ABDSTAD SET ADDR OF DATA TO UNPACK 15750000 TM ABDUPRF,UPRFMET DID CALLER ANTICIPATE UPR 15800000 BNO FORMET03 NO, BRANCH 15850000 OI ABDUPRF,UPRFMT20 SET FORMAT22 TO INTERCEPT UPR 15900000 FORMET03 L TOREG,VAD61 GET ADDR OF FORMAT22 15950000 BALR RETREG,TOREG GO TO FORMAT22 ROUTINE 16000000 SH RETCODE,HALF8 DID FORMAT22 HAVE UPR 16050000 BZ UPR YES, GO PROCESS IT 16100000 MVC ABDSTAD(FOUR),ABDBPTR SAVE UPDATED START ADDR 16150000 L TOREG,VAD11 GET ADDR OF OUTPUT ROUTINE 16200000 BALR RETREG,TOREG GO TO PRINT ROUTINE 16250000 BCTR LINES,ZERO DECREMENT LINE COUNT BY ONE 16300000 LH INDENTCN,ABDIND RETRIEVE INDENTATION FACTOR 16350000 LTR INDENTCN,INDENTCN IS THE INDENTATION FACTOR ZERO 16400000 BNZ ZEROIDNT NO, GO ZERO IT 16450040 FORMET07 LTR LINES,LINES HAVE ALL LINES BEEN PROCESSED 16500000 BP MORELINE NO,BRANCH Z40MPXH 16550040 * FORM05 AMD FORMET05 PERFORM THE SAME PROCESS FOR THE DIFFERENT 16556040 * LINE LENGTHS. FORM05 IS FOR THE CONDENSED LINE, FORMET05 IS FOR 16562040 * THE STANDARD LINE Z40MPXH 16568040 CLI ABDLLNGH,TWO04 LONG LINE? Z40MPXH 16574040 BE FORM05 YES, BRANCH Z40MPXH 16580040 B FORMET05 NO, STANDARD LINE Z40MPXH 16586040 MORELINE L CURLINE,ABDSTAD GET ADDRESS OF NEXT LINE TO 16600040 * BE DISPLAYED Z40MPXH 16650040 LR LASTLINE,CURLINE ADDR OF LAST WRITTEN LINE IS 16700000 SR LASTLINE,LINESIZE LINESIZE LESS THAN CURRENT ZM40084 16750040 TM ABDUPRF,UPRFMET DID CALLER ANTICIPATE UPR 16800000 BNO PRE04 NO, BRANCH Z40MPXH 16850040 LA WORK,FORMETX SET UPR EXIT ROUTINE ADDRESS 16900000 ST WORK,ABDUPRXT TO FORMETX 16950000 PRE04 CLI ABDLLNGH,TWO04 LONG LINE? Z40MPXH 16958040 BE FORM04 YES, TAKE OTHER PATH Z40MPXH 16966040 * THIS SECTION OF CODE IS ENTERED FOR THE STANDARD LINE LENGTH, TO 16974040 * CHECK FOR DUPLICATE LINES. FORM04 DOES THE SAME PROCESSING FOR 16982040 * CONDENSED LINES. Z40MPXH 16990040 FORMET04 CLC ZERO(L32,CURLINE),ZERO(LASTLINE) IS NEXT LINE EQUAL 17000002 * LAST 17050000 BNE FORMET06 NO, BRANCH 17100000 CLC ABDIDENT(TWO),THIRTY2K CHECK FOR MAX NUMBER OF IDENTICAL 17110040 * LINES @ZA05372 17120040 BE FORMET06 YES, BRANCH TO PRINT MSG @ZA05372 17130040 XC ABDUPRXT(FOUR),ABDUPRXT DISSALLOW UPR EVENT 17150000 * SINCE THE NEXT LINE TO BE DISPLAYED IS EQUAL TO THE LAST DISPLAYED 17200000 * LINE, IT WILL BE SUPPRESSED. ABDSTAD WILL BE INCREMENTED BY 32 AND 17250000 * 1 WILL BE ADDED TO A COUNT OF IDENTICAL LINES 17300000 LA CURLINE,L32(CURLINE) INCR TO NEXT LINE ADDR 17350000 ST CURLINE,ABDSTAD STORE ADDR OF NEXT LINE 17400000 LH WORK,ABDIDENT GET IDENTICAL LINES COUNTER 17450000 LA WORK,ONE(WORK) UP COUNT BY ONE 17500000 STH WORK,ABDIDENT SAVE COUNTER 17550000 BCTR LINES,ZERO DECREMENT LINE COUNT BY 1 17600000 B FORMET07 PROCESS NEXT LINE 17650040 FORM04 CLC ZERO(L64,CURLINE),ZERO(LASTLINE) NEXT LINE EQUAL THE 17651040 * LAST LINE? Z40MPXH 17652040 BNE FORM06 NO, BRANCH Z40MPXH 17653040 XC ABDUPRXT(FOUR),ABDUPRXT DISALLOW UPR Z40MPXH 17654040 * WHEN NEXT LINE IS EQUAL TO THE LAST LINE DISPLAYED, IT IS SUPPRESSED 17655040 * ABDSTAD WILL BE INCREMENTED BY 64 (NUMBER OF BYTES DISPLAYED BY LINE) 17656040 * AND THE IDENTICAL LINE COUNT IS INCREMENTED. Z40MPXH 17657040 LA CURLINE,L64(CURLINE) UP TO NEXT LINE Z40MPXH 17658040 ST CURLINE,ABDSTAD SAVE THIS ADDR Z40MPXH 17659040 LH WORK,ABDIDENT IDENTICAL LINES COUNT Z40MPXH 17660040 LA WORK,ONE(WORK) INCREMENT COUNTER Z40MPXH 17661040 STH WORK,ABDIDENT SAVE COUNTER Z40MPXH 17662040 BCTR LINES,ZERO DECREMENT LINE COUNTER Z40MPXH 17663040 B FORMET07 PROCESS NEXT LINE Z40MPXH 17664040 * WHEN THE NEXT 64 BYTE LINE TO BE DISPLAYED IS NOT IDENTICAL TO THE 17665040 * PREVIOUS LINE OR WHEN THE LAST 64 BYTE LINE HAS BEEN PROCESSED, 17666040 * FORM05 CHECKS FOR ANY SUPPRESSED IDENTICAL LINES. IF ANY EXIST, THE 17667040 * APPROPRIATE MEXXAGE IS DISPLAYED. Z40MPXH 17668040 FORM06 XC ABDUPRXT(FOUR),ABDUPRXT DISALLOW UPR EVENT Z40MPXH 17669040 FORM05 LH WORK,ABDIDENT IDENTICAL LINES COUNT Z40MPXH 17670040 LTR WORK,WORK ANY IDENTICAL LINES? Z40MPXH 17671040 BZ FORMET08 NO, BRANCH Z40MPXH 17672040 * INITIAL IDENTICAL ADDRESS IS EQUAL TO THE ADDRESS OF THE CURRENT LINE 17673040 * MINUS 64 TIMES THE NUMBER OF IDENTICAL LINES. Z40MPXH 17674040 LR START,WORK NUMBER OF IDENT LINES Z40MPXH 17675040 SLL START,M64 MULTIPLY BY 64 BYTES Z40MPXH 17676040 LNR START,START MINUS ADDRESS OF THE Z40MPXH 17677040 A START,ABDSTAD CURRENT LINE EQUALS Z40MPXH 17678040 ST START,ABDFWORK INIT ADDR Z40MPXH 17679040 BCT WORK,MANYLINE BRANCH IF >1 LINES Z40MPXH 17680040 B ONLYONE ONE IDENT LINE Z40MPXH 17681040 * THIS SECTION OF CODE IS ENTERED WHEN THE NEXT LINE TO BE DISPLAYED 17700000 * IS NOT IDENTICAL WITH THE PREVIOUS LINE AND WHEN THE LAST LINE 17750000 * HAS BEEN PROCESSED. IN BOTH CASES, TEH ROUTINE CHECKS IF THERE ARE 17800000 * ANY SUPRESSED IDENTICAL LINES AND IF SO, DISPLAYS THE APPROPRIATE 17850000 * MESSAGE. 17900000 FORMET06 XC ABDUPRXT(FOUR),ABDUPRXT DISALLOW UPR EVENT 17950000 FORMET05 LH WORK,ABDIDENT RETRIEVE IDENTICAL LINES COUNTER 18000000 LTR WORK,WORK ANY LINES TO DISPLAY 18050000 BZ FORMET08 NO, BRANCH 18100000 * THE INITIAL IDENTICAL ADDRESS IS EQUAL TO THE ADDRESS OF THE CUR- 18150000 * RENT LINE MINUS 32 TIMES THE NUMBER OF IDENTICAL LINES 18200000 LR START,WORK INIT START OF IDENT LINES ADDR 18250000 SLL START,M32 MULTIPLY NUMBER OF LINES BY LENGTH 18300000 LNR START,START MAKE VALUE NEGATIVE 18350000 A START,ABDSTAD COMPLETE CALCULATION 18400000 ST START,ABDFWORK SET INIT ADDR FOR FORMAT22 18450000 BCT WORK,MANYLINE BRANCH IF MORE THAN ONE IDENT LINE 18500000 * WHEN THERE IS ONE IDENTICAL LINE A MESSAGE IS PRODUCED AS FOLLOWS 18550000 * 18600000 * LINE XXXXXX SAME AS ABOVE 18650000 ONLYONE MVC ABDLINE+SIX(FOUR),MSG1 SET FIRST PART OF MSG 18700040 LA WORK,ONELINE GET ADDR OF LAYOUT LINE 18750000 ST WORK,ABDLLINE SET VALUE FOR FORMAT22 18800000 LA WORK,ABDFWORK+ONE SET DATA ADDRESS 18850000 ST WORK,ABDBPTR SET VALUE FOR FORMAT22 18900000 L TOREG,VAD61 ADDR OF FORMAT22 18950000 BALR RETREG,TOREG GO TO FORMAT22 19000000 MVC ABDLINE+K17(K14),MSG1+FIVE SET REST OF MSG 19050000 B GOOUTPUT RETURN TO COMMON CODE 19100000 * WHEN THERE IS MORE THAN ONE IDENTICAL LINE THE MSG PRODUCED IS AS 19150000 * FOLLOWS 19200000 * 19250000 * LINES XXXXXX-YYYYYY SAME AS ABOVE 19300000 * THE YYYYYY ADDRESS IS THE ADDRESS OF THE CURRENT LINE MINUS 32 19350000 MANYLINE MVC ABDLINE+SIX(FIVE),MSG1 SET FIRST PART OF MESSAGE 19400000 LA WORK,MANYP1 GET ADDR OF LAYOUT LINE 19450000 ST WORK,ABDLLINE SET VALUE FOR FORMAT22 19500000 LA WORK,ABDFWORK+ONE GET ADDR OF XXXXXX PORTION OF MSG 19550000 ST WORK,ABDBPTR SET VALUE FOR FORMAT22 19600000 L TOREG,VAD61 GET ADDRESS OF FORMAT22 19650000 BALR RETREG,TOREG GO TO FORMAT22 19700000 MVI ABDLINE+K18,SEPCHAR SET ADDRESS SEPARATOR INTO MESSAGE 19750000 L WORK,ABDSTAD GET CURRENT LINE ADDRESS 19800000 SR WORK,LINESIZE CALC LAST IDENT LINE ADDR ZM40084 19850040 ST WORK,ABDFWORK SET FOR UNPACK BY FORMAT22 19900000 LA WORK,ABDFWORK+ONE GET ADDRESS OF DATA 19950000 ST WORK,ABDBPTR SET VALUE FOR FORMAT22 20000000 * THE LAYOUT LINE ADDR DOES NOT HAVE TO BE SET SINCE FORMAT22 WILL 20050000 * UPDATE THE FIRST LAYOUT LINE ADDR PASSED THE X'FF'. HOWEVER THIS 20100000 * REQUIRES THAT MANYP1 AND MANYP2 REMAIN CONTIGUOUS IN MEMORY 20150000 L TOREG,VAD61 GET ADDR OF FORMAT22 20200000 BALR RETREG,TOREG GO TO FORMAT22 20250000 MVC ABDLINE+K25(K14),MSG1+FIVE SET REST OF MESSAGE 20300000 GOOUTPUT L TOREG,VAD11 GET ADDRESS OF OUTPUT 20350000 BALR RETREG,TOREG OUTPUT THE MESSAGE 20400000 XC ABDIDENT(TWO),ABDIDENT SET IDENTICAL LINE COUNT TO 0 20450000 * THIS PORTION OF THE ROUTINE CAN BE ENTERED AS A RESULT OF A UPR. IF 20500000 * SO, THE RETURN ADDRESS IS IN ABDUPRID. 20550000 L TOREG,ABDUPRID GET ADDR OF POSSIBLE RETURN POINT 20600000 LTR TOREG,TOREG IS THERE A SPECIAL RETURN POINT 20650000 BNZ BACKUPR YES, GO SET FOR SPECIAL RETURN 20700000 B FORMET07 BRANCH TO CHECK FOR IDENTICAL LINE 20710040 * @ZA05372 20720040 FORMET08 LTR LINES,LINES 20750000 BNP INCPLINE BRANCH WHEN ALL LINES HAVE BEEN 20800000 * PROCESSED 20850000 B FORMET02 PROCESS NEXT COMPLETE LINE 20900000 ZEROIDNT XC ABDIND(TWO),ABDIND SET INDENTATION FACTOR TO ZERO 20950000 B FORMET08 CHECK IF WORK DONE 21000000 BACKUPR XC ABDUPRID(FOUR),ABDUPRID ZERO UPR EXIT ADDRESS 21050000 BR TOREG RETURN TO CORRECT LOCATION 21100000 EJECT 21150000 * THIS SECTION OF CODE IS ENTERED WHEN A UPR OCCURS DURING INCOMPLETE 21200000 * LINE PROCESSING. IF REQUESTED A MESSAGE CONTAINING THE INITIAL 21250000 * UNALLOCATED AND LAST UNALLOCATED ADDRESSES IS PRODUCED. OTHERWISE 21300000 * CONTROL IS RETURNED TO THE CALLER. 21350000 LASTUPR MVI ABDCC,BLANK SET ABDCC TO BLANK 21400000 MVC ABDLINE(L'ABDLINE),ABDCC BLANK REST OF LINE 21450000 TM ABDUPRFN,ABDUPRPM USER REQUEST UNALLOCATED MESSAGE 21500000 BNO NORMEXIT NO, START EXITING 21550000 L WORK,ABDSTAD RETRIEVE FAILING ADDR 21600000 NR WORK,MASK ROUND DOWN TO LINE BNDRY Z40MPXH 21650040 A WORK,ABDIND CALCULATE INITIAL PRINT ADDR 21700000 ST WORK,ABDSTAD SAVE INITIAL PRINT ADDR 21750000 MVC ABDLINE+SIX(NINE),NOTTHERE SET MESSAGE IN LINE 21800000 LA WORK,ABDSTAD+ONE SET DATA ADDRESS 21850000 ST WORK,ABDBPTR FOR FORMAT22 21900000 LA WORK,UNALP1 SET LAYOUT LINE ADDRESS 21950000 ST WORK,ABDLLINE FOR FORMAT22 22000000 L TOREG,VAD61 GET ADDRESS OF FORMAT22 22050000 BALR RETREG,TOREG GO TO FORMAT22 22100000 LH WORK,ABDINCPL GET NUMBER OF BYTES IN LAST LINE 22150000 A WORK,ABDSTAD CALCULATE LAST UNALLOC ADDR PLUS 1 22200000 BCTR WORK,ZERO DECREMENT TO LAST REQUESTED ADDR 22250000 ST WORK,ABDFWORK STORE FOR FORMAT22 22300000 LA WORK,ABDFWORK+ONE SET DATA ADDR 22350000 ST WORK,ABDBPTR FOR FORMAT22 22400000 L TOREG,VAD61 GET ADDRESS OF FORMAT22 22450000 BALR RETREG,TOREG GO TO FORMAT22 22500000 MVI ABDLINE+K22,SEPCHAR PUT SEPARATOR IN MSG 22550000 MVC ABDLINE+K29(K14),NOTTHERE+NINE MOVE SECOND HALF MSG 22600000 * INTO LINE 22650000 L TOREG,VAD11 GET ADDRESS OF OUTPUT 22700000 BALR RETREG,TOREG GO WRITE UNALLOCATED MESSAGE 22750000 B NORMEXIT BEGIN RETURN PROCEDURE 22800000 EJECT 22850000 * THIS SECTION OF THE CODE HANDLES UPR EVENTS THAT OCCURRED WHILE 22900000 * EITHER FORMAT20 OR FORMAT22 WAS IN CONTROL. IF THE USER REQUESTED 22950000 * THAT A MESSAGE DETAILING THE UNDEFINED LOCATIONS BE PRODUCED 23000000 * THEN THE MESSAGE 23050000 * LOCATIONS XXXXXX-YYYYYY NOT DEFINED 23100000 * IS PRODUCED. THE ROUTINE DETERMINES THE NEXT DEFINED LINE ADDRESS 23150000 * AND RETURNS TO MAINLINE PROCESSING. 23200000 UPR MVI ABDCC,BLANK SET ENTIRE PRINT LINE TO BLANKS 23250000 MVC ABDLINE(L'ABDLINE),ABDCC 23300000 TM ABDUPRFN,ABDUPRSL CALLER REQ SKIP LINE WITH NO MSG 23350000 BO SKIPONLY YES - BYPASS MSG PROCESSING 23400000 TM ABDUPRFN,ABDUPRPM CALLER REQ MSG BE PRODUCED 23450000 BNO NORMEXIT NO THEN BRANCH TO RETURN TO CALLER 23500000 MVC ABDLINE+SIX(NINE),NOTTHERE SET FIRST PART MSG IN LINE 23550000 LA WORK,ABDSTAD+ONE SET POINTER TO INVALID ADDR 23600000 ST WORK,ABDBPTR FOR FORMAT22 ROUNTINE 23650000 LA WORK,UNALP1 ALSO SET LAYOUT LINE ADDR 23700000 ST WORK,ABDLLINE FOR ROUTINE 23750000 L TOREG,VAD61 GET ADDR OF FORMAT22 23800000 BALR RETREG,TOREG CALL FORMAT22 23850000 SKIPONLY L WORK,ABDSTAD SET UNDET ADDR TO LINE BNDRY Z40MPXH 23900040 NR WORK,MASK USE PRESET ROUNDING MASK Z40MPXH 23910040 ST WORK,ABDSTAD ADDR NOW ROUNDED Z40MPXH 23920040 MVI ABDCC,DOUBLE SET TO DOUBLE SPACE LINE 23950000 XC ABDIND,ABDIND SET INDENTATION COUNT TO ZERO 24000000 L PGADDR,ABDSTAD RETRIEVE INVALID LINE ADDR 24050000 A PGADDR,PGSIZE INCREMENT ADDR TO NEXT PAGE 24100000 N PGADDR,PGMASK GET ADDR OF BEGINNING OF NXT PAGE 24150000 * CALCULATE NUMBER OF INVALID LINES 24200000 LR MISSING,PGADDR ALGORITHM IS NEXT POSS VALID ADDR 24250000 S MISSING,ABDSTAD MINUS INIT INVALID ADDR 24300000 CLI ABDLLNGH,TWO04 LONG LINE? Z40MPXH 24310040 BNE DIV32 NO, SKIP THIS SHIFT INST Z40MPXH 24320040 SRL MISSING,D64 DIVIDE BY LINE LENGTH Z40MPXH 24330040 B DECREM CONTINUE PROCESSING Z40MPXH 24340040 DIV32 SRL MISSING,D32 DIVIDED BY LENGTH OF LINE 24350040 * IS EQUAL TO NUMBER OF INVALID LINES 24400000 DECREM SR LINES,MISSING DECREMENT LINE COUNT BY 24450040 * NUMBER OF INVALID LINES 24500000 BM ALLDONE IF RESULT IS LESS THAN ZERO THEN 24550000 * AS MUCH AS POSSIBLE OF THE AREA 24600000 * REQUESTED BY THE CALLER HAS BEEN 24650000 * DISPLAYED 24700000 ST PGADDR,ABDSTAD SAVE PGADDR AS POSS VALID ADDR 24750000 BZ TESTLAST IF RESULT WAS ZERO THEN THE ONLY 24800000 * DATA LEFT TO BE PRINTED IS THE 24850000 * PARITIAL LAST LINE 24900000 * THE RESULT IS GREATER THAN ZERO SO MORE LINES REMAIN TO BE 24950000 * DISPLAYED. HOWEVER, THE CODE INSURES THAT THE NEXT PAGE IS VALID 25000000 * BEFORE ATTEMPTING TO PRINT IT. IF NOT, THE ABOVE CODE IS REENTERED 25050000 LA WORK,NXTPGBAD SET ADDR OF UPR EXIT TO 25100000 ST WORK,ABDUPRXT LOGIC TO HANDLE IT 25150000 NI ZERO(PGADDR),PGTEST REFERENCE NEXT PAGE 25200000 * IF THE NEXT INSTRUCTION IS REACHED THEN THE NEXT PAGE IS VALID 25250000 XC ABDUPRXT,ABDUPRXT ZERO UPR EXIT ADDR 25300000 * SET PART OF THE ROUTINE IS FINAL PROCESSING BEFORE RETURNING TO 25350000 * MAINLINE CODE FROM UPR PROCESSING 25400000 FINISH TM ABDUPRFN,ABDUPRSL USER REQ SKIP LINE ONLY 25450000 BO EXITBACK YES - BYPASS MSG PROCESSING 25500000 BCTR PGADDR,ZERO CALCULATE LAST ADDR FOR MESSAGE 25550000 ST PGADDR,ABDFWORK SAVE ADDR FOR FORMAT22 25600000 LA WORK,ABDFWORK+ONE SET DATA ADDR FOR 25650000 ST WORK,ABDBPTR FORMAT22 ROUTINE 25700000 * NOTE THAT ABDLLINE IS STILL SET FROM FIRST PART OF MESSAGE 25750000 L TOREG,VAD61 GET ADDRESS OF FORMAT22 25800000 BALR RETREG,TOREG CALL IEAVAD61 25850000 MVI ABDLINE+K22,SEPCHAR PUT SEPARATOR INTO LINE 25900000 MVC ABDLINE+K29(K14),NOTTHERE+NINE SET REST OF MESSAGE 25950000 L TOREG,VAD11 GET ADDR OF PRINT ROUTINE 26000000 BALR RETREG,TOREG CALL IEAVAD11 26050000 MVI ABDCC,DOUBLE ALSO DOUBLE SPACE AFTER MESSAGE 26100000 EXITBACK LTR LINES,LINES COMPLETE LINES ALL PROCESSED 26150000 BZ INCPLINE YES, BUT PARTIAL LAST LINE MAY EXIST 26200000 BP FORMET02 NO, GO PROCESS COMPLETE LINES 26250000 B NORMEXIT YES AND NO PARTIAL LAST LINE 26300000 * THIS IS THE ENTRY POINT WHEN A UPR OCCURS TESTING THE NEXT PAGE 26350000 NXTPGBAD L WORK,PREV(SAVEAREA) RETRIEVE ADDR CALLERS SAVEAREA 26400000 L PARAM,K24(WORK) RETRIEVE POINTER TO ABDAREA 26450000 B SKIPONLY PRETEND UPR OCCURED AT PGADDR 26500000 * WHEN THE LINE COUNT GOES NEGATIVE AFTER SUBTRACTING MINIMUM NUMBER 26550000 * OF INVALID LINES THEN THE LAST ADDRESS REQUESTED BY THE CALLER 26600000 * IS CALCULATED AS PGADDR PLUS THE NEGATIVE LINE COUNT TIMES THE 26650000 * LENGTH OF THE LINE PLUS THE NUMBER OF BYTES IN THE PARTIAL LAST 26700000 * LINE 26750000 ALLDONE CLI ABDLLNGH,TWO04 LONG LINE? Z40MPXH 26760040 BNE SHORT NO, SKIP NEXT SHIFT INST Z40MPXH 26770040 SLL LINES,M64 MULTIPLY BY LINE LENGTH Z40MPXH 26780040 B CONTDONE CONTINUE ON COMMON PATH Z40MPXH 26790040 SHORT SLL LINES,M32 MULT NEGATIVE COUNT BY 32 Z40MPXH 26800040 CONTDONE AR PGADDR,LINES ADD TO PGADDR THUS DECREM Z40MPXH 26820040 A PGADDR,ABDINCPL ADD SIZE OF PARTIAL LINE TO ADDR 26900000 XC ABDINCPL,ABDINCPL INSURE THAT PROCESSING WILL END 26950000 * WITHOUT ATTEMPT TO DISPLAY 27000000 * PARTIAL LINE 27050000 B FINISH TERMINATION PROCESSING 27100000 * WHEN THE LINE COUNT EXACTLY REACHES ZERO THEN THE ROUTINE CHECKS 27150000 * IF A PARTIAL LINE EXISTS. IF NOT, TERMINATION PROCESSING 27200000 * IS ENTERED. IF A LINE DOES EXIST, THE ROUTINE INSURES THAT THE 27250000 * PAGE IT IS ON IS VALID. IF IT IS THEN TERMINATION PROCESSING 27300000 * IS ENTERED. IF NOT, THE LAST VALID ADDRESS IS SET TO PGADDR PLUS 27350000 * THE SIZE OF THE PARTIAL LINE. THE PARTIAL LINE SIZE IS THEN 27400000 * SET TO ZERO AND TERMINATION PROCESSING IS ENTERED. 27450000 TESTLAST LH WORK,ABDINCPL GET SIZE OF PARTIAL LINE 27500000 LTR WORK,WORK IS PARTIAL LINE SIZE EQUAL ZERO 27550000 BZ FINISH YES - GO TO TERMINATION PROCESSING 27600000 LA WORK,LASTBAD ENTER LASTBAD IF UPR OCCURS 27650000 ST WORK,ABDUPRXT 27700000 NI ZERO(PGADDR),PGTEST REFERENCE NEXT PAGE 27750000 * IF THIS INSTRUCTION IS REACHED THEN THE NEXT PAGE IS VALID AND 27800000 * THE PARTIAL LINE CAN BE DISPLAYED 27850000 XC ABDUPRXT,ABDUPRXT SET UPR EXIT OFF 27900000 B FINISH TERMINATION PROCESSING 27950000 *LASTBAD IS REACHED IF PAGE CONTAINING PARTIAL LINE IS ALSO INVALID 28000000 LASTBAD L WORK,PREV(SAVEAREA) RETRIEVE ADDR OF CALLERS SAVEAREA 28050000 L PARAM,K24(WORK) RETRIEVE ADDR OF ABDAREA 28100000 AH PGADDR,ABDINCPL CALC LAST ADDR REFERENCED BY CALLER 28150000 XC ABDINCPL,ABDINCPL SET PARTIAL LINE LENGTH TO ZERO 28200000 B FINISH TERMINATION PROCESSING 28250000 EJECT 28300000 * THIS PART OF THE ROUTINE IS ENTERED WHEN A UPR OCCURRED TESTING 28350000 * FOR EQUAL LINES. IF THE EQUAL LINE COUNT IS OTHER THAN ZERO - 28400000 * EQUAL LINES WERE FOUND BEFORE THE UPR - THE ROUTINE ENTERS THE 28450000 * PORTION OF THE CODE THAT PRINTS THE EQUAL LINES MESSAGE INDICATING 28500000 * TO RETURN TO LABEL UPR TO LOCATE THE NEXT VALID ADDRESS. OTHERWISE, 28550000 * THE ROUTINE BRANCHES DIRECTLY TO UPR. 28600000 FORMETX L WORK,PREV(SAVEAREA) RETRIEVE ADDR OF CALLERS SAVEAREA 28650000 L PARAM,K24(WORK) RETRIEVE ADDR OF ABDAREA 28700000 LH WORK,ABDIDENT GET IDENTICAL LINES COUNT 28750000 LTR WORK,WORK ANY IDENTICAL LINES 28800000 BZ UPR NO, GO GET NEXT VALID ADDR 28850000 LA WORK,UPR SET TO GO TO UPR AFTER 28900000 ST WORK,ABDUPRID PRINTING EQUAL LINES MESSAGE 28950000 * DETERMINE WHICH ROUTINE TO USE TO PRINT THE EQUAL LINES MESSAGE 28960040 CLI ABDLLNGH,TWO04 LONG LINE? Z40MPXH 28970040 BE FORM05 USE LONG LINE FORMAT Z40MPXH 28980040 B FORMET05 PRINT EQ LINES MESSAGE 29000000 EJECT 29050000 * CONSTANTS 29100000 DS 0F 29150000 MASKWD DC X'FFFFFFFF' ROUNDING MASK (GENERAL) Z40MPXH 29160040 MASK64 DC X'FFFFFFC0' ROUND DOWN TO 64 BYTE BDY Z40MPXH 29170040 MASK32 DC X'FFFFFFE0' ROUND DOWN TO 32 BYTE BDY Z40MPXH 29190040 PGMASK DC X'FFFFF000' TO ROUND DOWN TO PAGE BOUNDARY 29250000 THIRTY2 DC F'32' CONSTANT FOR MATH MANIPULATIONS 29300000 SIXTY4 DC F'64' CONSTANT FOR MATH Z40MPXH 29310040 FREECON DC X'FD000048' FREEMAIN 72 BYTES IN SP253 29350000 VAD11 DC V(IEAVAD11) ADDRESS OF OUTPUT ROUTINE 29400000 VAD51 DC V(IEAVAD51) ADDRESS OF FORMAT20 ROUTINE 29450000 VAD61 DC V(IEAVAD61) ADDRESS OF FORMAT22 ROUTINE 29500000 PGSIZE DC F'4096' NUMBER OF BYTES ON PAGE 29550000 HALF3 DC H'3' VALUE FOR MULTIPLY INSTRUCTION 29600000 HALF8 DC H'8' VALUE FOR RETURN CODE CHECK 29650000 THIRTY2K DC H'32767' MAXIMUM VALUE FOR HALFWORD @ZA05372 29670040 * LAYOUT LINE TO EDIT THE NORMAL COMPLETE LINE 29700000 STANDARD DC X'0903' 29750000 DC X'1203' 29800000 DC X'1B03' 29850000 DC X'2403' 29900000 DC X'3003' 29950000 DC X'3903' 30000000 DC X'4203' 30050000 DC X'4B03' 30100000 DC X'FF' 30150000 * LAYOUT LINE EO EDIT CONDENSED COMPLETE LINE Z40MPXH 30152040 COMP64 DC X'0703' Z40MPXH 30154040 DC X'0F03' Z40MPXH 30156040 DC X'1703' Z40MPXH 30158040 DC X'1F03' Z40MPXH 30160040 DC X'2803' Z40MPXH 30162040 DC X'3003' Z40MPXH 30164040 DC X'3803' Z40MPXH 30166040 DC X'4003' Z40MPXH 30168040 DC X'4903' Z40MPXH 30170040 DC X'5103' Z40MPXH 30172040 DC X'5903' Z40MPXH 30174040 DC X'6103' Z40MPXH 30176040 DC X'6A03' Z40MPXH 30178040 DC X'7203' Z40MPXH 30180040 DC X'7A03' Z40MPXH 30182040 DC X'8203' Z40MPXH 30184040 DC X'FF' Z40MPXH 30186040 MSG1 DC C'LINES SAME AS ABOVE' FOR IDENTICAL LINES PROCESSING 30200000 NOTTHERE DC C'LOCATIONS NOT ALLOCATED' MSG FOR UPR RECOVERY 30250000 * LAYOUT LINE FOR SINGLE IDENTICAL LINE 30300000 ONELINE DC X'0B02FF' 30350000 * LAYOUT LINES FOR MORE THAN ONE IDENTICAL LINE 30400000 MANYP1 DC X'0C02FF' 30450000 DC X'1302FF' MUST BE CONTIGUOUS WITH MANYP1 30500000 * LAYOUT LINES FOR INCOMPLETE LINE 30550000 * ALL MUST BE CONTIGUOUS IN MEMORY 30600000 INCLLINE DC X'0903FF' 30650000 DC X'1203FF' 30700000 DC X'1B03FF' 30750000 DC X'2403FF' 30800000 DC X'3003FF' 30850000 DC X'3903FF' 30900000 DC X'4203FF' 30950000 * LAYOUT LINE FOR EDITING AFTER UPR ON LAST LINE 31000000 UNALP1 DC X'1002FF1702FF' 31050000 * LAYOUT LINE FOR EDITING CONDENSED INCOMPLETE LINE Z40MPXH 31052040 INCL64 DC X'0703FF' Z40MPXH 31054040 DC X'0F03FF' Z40MPXH 31056040 DC X'1703FF' Z40MPXH 31058040 DC X'1F03FF' Z40MPXH 31060040 DC X'2803FF' Z40MPXH 31062040 DC X'3003FF' Z40MPXH 31064040 DC X'3803FF' Z40MPXH 31066040 DC X'4003FF' Z40MPXH 31068040 DC X'4903FF' Z40MPXH 31070040 DC X'5103FF' Z40MPXH 31072040 DC X'5903FF' Z40MPXH 31074040 DC X'6103FF' Z40MPXH 31076040 DC X'6A03FF' Z40MPXH 31078040 DC X'7203FF' Z40MPXH 31080040 DC X'7A03FF' Z40MPXH 31082040 DC X'8203FF' Z40MPXH 31084040 EJECT 31100000 * DSECT MAP FOR ABDAREA 31150000 IHAABDA 31200000 */*IEAVAD71: CHART */ 31205040 */* HEADER 31210040 */*DUMP LINE FORMATTER 31215040 */*FEBRUARY, 1975 WANDA GERHEIM PAGE# */ 31220040 */* E IEAVAD71 */ 31225040 */* P SAVE CALLERS REGISTERS */ 31230040 */* P GETMAIN SAVEAREA */ 31235040 */* D (NO,EXITEND,YES,) RETURN CODE = 0? */ 31240040 */* P CHAIN SAVEAREAS */ 31245040 */* D (YES,LONGINIT,NO,) LONG LINE REQUESTED? */ 31245640 */* P SET MASK FOR 32 BYTE BDY */ 31246240 */* P (,COMMON) SET LINESIZE TO 32 BYTES */ 31246840 */*LONGINIT: P SET MASK FOR 64 BYTE BDY */ 31248040 */* P SET LINESIZE TO 64 BYTES */ 31248640 */*COMMON: P SET BEGINNING ADDR INTO ABDSTAD */ 31249240 */* P ROUND INITIAL ADDR DOWN TO WORD BDY */ 31250040 */* P ADD BYTES GAINED TO SIZE OF STORAGE */ 31650040 */* P ROUND TOTAL SIZE TO WORD BDY */ 32050040 */* P INITIALIZE # OF IDENTICAL LINES TO 0 */ 32450040 */* P INITIALIZE INDENTATION FACTOR TO 0 */ 32850040 */* P ROUND ADDR DOWN TO LINE BDY */ 33250040 */* D (NO,NOSUP,YES,) ANY BYTES TO SUPPRESS? */ 33650040 */* P SAVE NUMBER OF BYTES TO SUPPRESS */ 34050040 */*NOSUP: P ADD INDENTATION TO TOTAL SIZE */ 34450040 */* P DIVIDE TOTAL SIZE BY LINESIZE */ 34850040 */* D (NO,INCPLINE,YES,) ANY COMPLETE LINES TO PROCESS? */ 35250040 */*COMPLINE: P SET INITIAL ADDR TO LINE BDY */ 35650040 */* P SET ADDR OF DATA AREA FOR FORMAT20 */ 36050040 */* P STORE LINES INTO ABDLCNT FOR FORMAT20 */ 36100040 */* D (NO,TOVAD51,YES,) UPR EXPECTED? */ 36450040 */* P SET FORMAT20 TO INTERCEPT UPR */ 36850040 */*TOVAD51: S IEAVAD51: TRANSLATE TO EBCDIC */ 37250040 */* D (YES,UPR,NO,) DID VAD51 HAVE UPR? */ 37650040 */* P CALCULATE INDENTATION FACTOR */ 38050040 */* D (YES,LNGLL,NO,) LONG LAYOUT LINE? */ 38100040 */* P (,INDXLINE) INDEX INTO STANDARD LAYOUT LINE */ 38150040 */*LNGLL: P INDEX INTO COMP64 LAYOUT LINE */ 38250040 */*INDXLINE: D (NO,FORMET03,YES,) UPR EXPECTED? */ 38300040 */* P SET FORMAT22 TO INTERCEPT UPR */ 39250040 */*FORMET03: S IEAVAD61: TRANSLATE TO EBCDIC */ 39650040 */* D (YES,UPR,NO,) DID UPR OCCUR? */ 40050040 */* P SAVE UPDATED START ADDR */ 40450040 */* S IEAVAD11: OUTPUT THE LINE */ 40850040 */* P DECREMENT THE LINE COUNT BY ONE */ 41250040 */* D (NO,ZEROIDNT,YES,) INDENTATION FACTOR ZERO? */ 41300040 */*FORMET07: D (NO,MORELINE,YES,) ALL LINES PROCESSED? */ 42050040 */* D (NO,FORMET05,YES,FORM05) LONG LINE? */ 42100040 */*MORELINE: P GET ADDR OF NEXT LINE */ 42450040 */* P CALCULATE ADDR OF LAST LINE WRITTEN */ 42850040 */* D (NO,PRE04,YES,) UPR EXPECTED? */ 43250040 */* P SET UP UPR EXIT FOR FORMETX */ 43650040 */*PRE04: D (YES,FORM04,NO,) LONG LINE? */ 43700040 */*FORMET04: D (NO,FORMET06,YES,) IS NEXT LINE SAME AS LAST? */ 44050040 */* P DISALLOW UPR EVENT */ 44450040 */* P INCREMENT TO NEXT LINE TO PRINT */ 44850040 */* P INCREMENT COUNT OF DUPLICATE LINES */ 45250040 */* P (,FORMET07) DECREMENT LINE COUNT BY ONE */ 45650040 */*FORMET06: P DISALLOW UPR */ 46050040 */*FORMET05: D (NO,FORMET08,YES,) ANY LINES TO DISPLAY? */ 46450040 */* P CALCULATE INITIAL IDENTICAL LINE ADDR */ 46850040 */* D (NO,MANYLINE,YES,) ONLY ONE IDENTICAL LINE? */ 47250040 */*ONELINE: P LAYOUT IDENTICAL LINE MSG */ 47650040 */* S IEAVAD61: TRANSLATE ADDR FOR MSG */ 48050040 */* P (,GOOUTPUT) SET UP REST OF MSG */ 48450040 */*FORM04: D (NO,FORM06,YES,) NEXT LINE SAME AS LAST? */ 48470040 */* P DISALLOW UPR */ 48490040 */* P INCREM TO NEXT LINE ADDR */ 48510040 */* P SAVE ADDR OF NEXT LINE */ 48530040 */* P INCREM IDENTICAL LINE COUNT */ 48550040 */* P SAVE COUNTER */ 48570040 */* P (,FORMET07) DECREMENT LINE COUNT BY 1 */ 48590040 */*FORM06: P DISALLOW UPR */ 48610040 */*FORM05: P RETRIEVE IDENTICAL LINES COUNT */ 48630040 */* D (NO,FORMET08,YES,) ANY LINES TO DISPLAY? */ 48650040 */* P INIT START OF IDENTICAL LINES ADDR */ 48670040 */* P MULTIPLY BY LENGTH OF LINE */ 48690040 */* P MINUS ADDR OF CURRENT LINE */ 48710040 */* P SET INITIAL ADDR FOR FORMAT22 */ 48730040 */* D (YES,ONELINE,NO,) ONLY ONE IDENTICAL LINE? */ 48750040 */*MANYLINE: P SET FIRST PAR TO MSG */ 48850040 */* P GET ADDR OF FIRST IDENTICAL LINE */ 49250040 */* S IEAVAD61: TRANSLATE ADDR FOR MSG */ 49650040 */* P CALCULATE LAST IDENTICAL LINE ADDR */ 50050040 */* S IEAVAD61: TRANSLATE ADDR FOR MSG */ 50450040 */* P SET REST OF MSG */ 50850040 */*GOOUTPUT: S IEAVAD11: OUTPUT THE MSG */ 51250040 */* P SET IDENTICAL LINE COUNT TO ZERO */ 51650040 */* D (YES,BACKUPR,NO,) IS THERE A SPECIAL RETURN */ 52050040 */*FORMET08: D (YES,COMPLINE,NO,) ANYMORE LINES? */ 52450040 */*INCPLINE: P GET COUNT OF EXTRA BYTES */ 52850040 */* D (YES,DOLAST,NO,) IS THERE A PARTIAL LINE? */ 53250040 */*NORMEXIT: P SAVE NORMAL RETURN CODE */ 53650040 */* P RESET UPR INDICATOR */ 54050040 */* P SET UP ADDR TO BE FREED */ 54450040 */* P RESTORE ADDR OF CALLERS SAVEAREA */ 54850040 */* P FREE THIS SAVEAREA */ 55250040 */*RETURN: P RESTORE RETURN CODE AND REGS */ 55650040 */* R RETURN TO CALLER */ 56050040 */*EXITEND: P SET RC=8 FOR INSUFFICIENT SPACE */ 56450040 */* P (,RETURN) RETURN TO CALLER */ 56850040 */*DOLAST: D (NO,FORMET09,YES,) IS UPR EXPECTED? */ 57250040 */* P SET FORMAT20 TO EXPECT UPR */ 57650040 */*FORMET09: P SET LOC ADDR TO LINE BDY */ 58050040 */* P SET DATA IN ABDBPTR FOR FORMAT20 */ 58450040 */* P STORE LINES INTO ABDLCNT FOR FORMAT20 */ 58500040 */* S IEAVAD51: TRANSLATE THE ADDRESS */ 58850040 */* D (YES,LASTUPR,NO,) DID UPR OCCUR? */ 59250040 */* P SET INITIAL ADDR */ 59650040 */* D (YES,LNGLAST,NO,) LONG LINE? */ 59700040 */* P (,LAST) USE INCLLINE FOR LAYOUT LINE */ 59750040 */*LNGLAST: P USE INCL64 FOR LAYOUT LINE */ 59800040 */*LAST: P SET LINE FOR FORMAT22 */ 60450040 */* P CALCULATE # OF WORDS FOR LAST LINE */ 60850040 */*FORMET11: D (NO,FORMET10,YES,) UPR ANTICIPATED? */ 61250040 */* P SET FORMAT22 TO EXPECT UPR */ 61650040 */*FORMET10: S IEAVAD61: TRANSLATE ONE WORD */ 62050040 */* D (YES,LASTUPR,NO,) UPR OCCUR? */ 62450040 */* P SUBTRACT 1 FROM WORD COUNT */ 62850040 */* D (NO,FORMET11,YES,) IS WORD COUNT ZERO? */ 63250040 */* S IEAVAD11: OUTPUT LAST LINE */ 63650040 */* P (,NORMEXIT) GO TO EXIT */ 64050040 */*BACKUPR: P ZERO UPR EXIT ADDR */ 64450040 */* R GO TO RETURN ADDR */ 64850040 */*LASTUPR: P BLANK OUT ABDLINE */ 65250040 */* D (NO,NORMEXIT,YES,) USER REQUEST UNALLOC MSG? */ 65650040 */* P RETRIEVE FAILING ADDRESS */ 66050040 */* P SET MSG IN PRINT LINE */ 66450040 */* P SET DATA AND ADDRESSES IN LINE */ 66850040 */* S IEAVAD61: TRANSLATE DATA AND ADDRS */ 67250040 */* P CALCULATE LAST REQUESTED ADDR */ 67650040 */* S IEAVAD61: TRANSLATE LAST ADDR */ 68050040 */* P SET REST OF MSG */ 68450040 */* S IEAVAD11: OUTPUT THE MSG */ 68850040 */* P (,NORMEXIT) GO TO EXIT */ 69250040 */*UPR: P BLANK OUT PRINT LINE */ 69650040 */* D (YES,SKIPONLY,NO,) SKIP LINE REQUESTED? */ 70050040 */* D (NO,NORMEXIT,YES,) MSG REQUESTED? */ 70450040 */* P SET FIRST PART OF MSG */ 70850040 */* P SET POINTER TO INVALID ADDR */ 71250040 */* P SET PRINT LINE ADDR */ 71650040 */* S IEAVAD61: TRANSLATE ADDR */ 72050040 */*SKIPONLY: P RETRIEVE INVALID LINE ADDR */ 72450040 */* P GET ADDR OF NEXT PAGE */ 72850040 */* P CALCULATE # OF INVALID LINES BY LINESIZE */ 73250040 */* D (NO,ALLDONE,YES,) ANY MORE LINES TO DISPLAY? */ 73650040 */* P SAVE POSSIBLE VALID ADDRESS */ 74050040 */* D (YES,TESTLAST,NO,) ONLY PARTIAL LINE DISPLAYED? */ 74450040 */* P SET UPR EXIT */ 74850040 */* D (NO,NXTPGBAD,YES,) NEXT PAGE VALID? */ 75250040 */* P ZERO UPR EXIT */ 75650040 */*FINISH: D (YES,EXITBACK,NO,) SKIP ONLY ONE LINE? */ 76050040 */* P CALCULATE LAST ADDR FOR MSG */ 76450040 */* S IEAVAD61: TRANSLATE ADDR */ 76850040 */* P SET REST OF MSG */ 77250040 */*EXITBACK: D (YES,COMPLINE,NO,) ANY COMPLETE LINES LEFT? */ 77650040 */* D (YES,INCPLINE,NO,) ANY PARTIAL LINES? */ 78050040 */* P (,NORMEXIT) ALL LINES PROCESSED */ 78450040 */*NXTPGBAD: P GET ADDR OF CALLERS SAVEAREA */ 78850040 */* P GET PTR TO ABDAREA */ 79250040 */* P (,SKIPONLY) CONTINUE */ 79650040 */*TESTLAST: P GET SIZE OF PARTIAL LINE */ 80050040 */* D (YES,FINISH,NO,) NO PARTIAL LINE? */ 80450040 */* P SET UPR EXIT ADDR */ 80850040 */* D (NO,LASTBAD,YES,) NEXT PAGE VALID? */ 81250040 */* P SET UPR OFF */ 81650040 */* P (,FINISH) CONTINUE PROCESSING */ 82050040 */*LASTBAD: P GET ADDR OF CALLERS SAVE AREA */ 82450040 */* P GET ADDR OF ABDAREA */ 82850040 */* P CALCULATE LAST ADDR REFERENCED */ 83250040 */* P SET PARTIAL LINE LENGTH TO ZERO */ 83650040 */* P (,FINISH) CONTINUE */ 84050040 */*FORMETX: P GET ADDR OF CALLERS SAVEAREA */ 84450040 */* P GET ADDR OF ABDAREA */ 84850040 */* D (NO,UPR,YES,) ANY IDENTICAL LINES? */ 85250040 */* P SET TO GO TO UPR AFTER MSG PRINTED */ 85650040 */* D (YES,FORM05,NO,FORMET05) LONG LINE? */ 86050040 */*ZEROIDNT: P ZERO INDENTATION FACTOR */ 86450040 */* P (,FORMET08) PROCESS NEXT LINE */ 86850040 */*ALLDONE: P CALCULATE LAST ADDR REQUESTED BY LINESIZE */ 87250040 */* P (,FINISH) FINISH UP */ 87650040 */*IEAVAD71: END */ 88050040 END 88450040