*DECK,DSPLOT
      PROGRAM DSPLOT
     1(OUTPUT=257,INPUT=65,OLDHF=513,OLDPD=257,NEWPD=257,DKDATA=257 
     2,TAPE1=OLDHF,TAPE2=OLDPD,TAPE4=NEWPD,TAPE5=DKDATA,TAPE6)
* 
      INTEGER ADATE,ADATEL,DATES,DAYS,FDAY,SNSW2
      COMMON /IERR/IERR(62) 
      DIMENSION IN(8),IB(6),IFLAWS(75,25,7),IPACK(75) 
      DIMENSION DATES(4),IDEV(100),HIST(100,4),IHITS(100,73)
      DIMENSION IDATES(8),IERTB(20),IERCT(20),IERMSG(8) 
      DIMENSION ID(4),IPLOT(10),ISITE(4),MONTHS(12),FDAY(3),IDA(3)
      DIMENSION NCHT(100),NCHE(100) 
      DIMENSION IDISK(12) 
      CHARACTER SPLAT*51
      DATA SPLAT/'********************************************* 
     1,*****'/
      DATA MONTHS/31,28,31,30,31,30,31,31,30,31,30,31/
      DATA IDISK /O"05",O"40",O"41",O"42",O"43",O"44",
     .            O"45",O"46",O"50",O"51",O"52",O"53"/
      NPACKS = 75 
      NFLAWS = 25 
      ISKIP = 0 
      SNSW2 = 0 
      IDF = 0 
      CALL SSWTCH(2,SNSW2)
*** 
* 
*     AUTHOR
*     ------
* 
*     J.E. SIPPER         80/06/15
*     CONSULTANT, ENGINEERING SERVICES
*     SOUTHEAST REGION
* 
*     ENHANCEMENTS TO DISKPLOT BY;
* 
*     DALE D. CORNING 
*     SENIOR SYSTEMS ENGINEER 
*     BLDASO
* 
*     AND 
* 
*     BOB HARDY 
*     CONSULTANT, ENGINEERING SERVICES
*     WESTERN REGION
* 
* 
*     OVERVIEW
*     --------
* 
*     DSPLOT IS A FORTRAN FIVE APPLICATION PROGRAM WITH THE DESIGNED
*     PURPOSE OF ASSISTING THE 6000/CYBER SYSTEMS HARDWARE PERFORMANCE
*     ANALYZER (HPA) IN PROVIDING FACTUAL, USABLE INFORMATION RELATIVE
*     TO DISK SUBSYSTEM PERFORMANCE.
* 
*     ONE OF THE MAJOR DEFICIENCIES OF HPA REPORTS TODAY ON DISK DRIVES 
*     IS THAT FAILURES ON KNOWN SOFT FLAWS CARRY AS MUCH WEIGHT AS AN 
*     ERROR PRODUCED BY A HARDWARE FAILURE. (SOFT FLAWS ARE DISK PACK 
*     SURFACES THAT ARE KNOWN TO BE MARGINAL BUT CUSTOMERS CHOOSE NOT 
*     TO FLAW THEM).  STATISTICS GATHERED OVER A TWO MONTH PERIOD IN
*     THE SOUTHEAST REGION INDICATE THAT UNLESS MEDIA FAILURES CAN BE 
*     ELIMINATED FROM PERFORMANCE MONITORING REPORTS, THE RESULTS WILL
*     BE UNREALISTIC AND UNUSABLE FOR PERFORMANCE TREND ANALYSIS SINCE
*     THE STATISTICS WILL NOT BE REAL WORLD.  ONE SITE WENT FROM A 30%
*     RATING TO OVER 90% ONCE KNOWN SOFT-FLAW ERRORS WERE REMOVED FROM
*     THE STATISTICS. 
* 
*     IN HPA DISK ANALYSIS, ALL ERRORS ASSOCIATED WITH THE OPERATION
*     OF A DISK ARE REPORTED AGAINST THE UNIT.  THOSE ERRORS INCLUDE
*     CHANNEL, CONTROLER, AND SOFTWARE ERRORS ALONG WITH THE UNIT AND 
*     MEDIA FAILURES.  THE PROGRAM DSPLOT PROVIDES THE MEANS OF 
*     PERFORMING TREND ANALYSIS ON A UNIT BY REMOVING THESE ERRORS
*     ALONG WITH THE SOFT FLAWS FAILURES.  REPORTS ONE AND THREE ARE
*     A RESULT OF THIS PROCESS.  REPORT FOUR LISTS ALL ERRORS EXCEPT
*     SOFT FLAWS, PACK SERIAL NUMBER ENTRIES AND FIRMWARE LOAD ENTRIES. 
*     REPORT NUMBER TWO LISTS ERRORS THAT OCCURED ON KNOWN SOFT FLAWS.
* 
*     DSPLOT IS DESIGNED TO USE THE HPA HISTORY FILE (OLDHF) AS INPUT 
*     AND IS NORMALLY EXECUTED ONCE A WEEK ON THE SAME DAY OF THE WEEK
*     SO THAT IT IS ALWAYS PROCESSING THE LAST 7 DAYS OF SYSTEM ERROR 
*     FILE.  REFER TO THE DESCRIPTION OF SENSE SWITCH TWO IN THE SECTION
*     MARKED EXECUTION.  AS ADDITIONAL INPUT, DSPLOT REQUIRES ITS OWN 
*     HISTORY FILE OF PERFORMANCE AND SOFT FLAW INFORMATION (OLDPD) AND 
*     A TEXT FILE CALLED (DKDATA).  THE FILE (DKDATA) CONTAINS  DESCRIP-
*     TIONS OF THE SYMPTOM AND ERROR CODES FOUND IN REPORT FOUR.
* 
*     THE FILE (OLDPD) MUST BE INITIALLY CREATED BY SITE PERSONEL. IT'S 
*     THEN MAINTAINED BY DSPLOT. A DETAILED DESCRIPTION OF THE FORMAT 
*     OF THIS FILE IS PROVIDED LATER. 
* 
*     DSPLOT PRODUCES FIVE REPORTS, DESIGNED TO ACCOMPLISH THE
*     FOLLOWING GOALS;
*        AT THE END OF UNIT PLOTS DSPLOT PROVIDES SOME INFORMATION
*        AND STATISTICS ON THE TOTAL NUMBER AND TYPES OF ERRORS 
*        ALONG WITH THE NUMBER OF RECORDS PROCESSED AND/OR SKIPPED
*        ON THE FILE OLDHF. A SORYED TABLE IS ALSO PRINTED WHICH
*        CONTAINS A LIST OF THE NUMBER OF ERRORS WHICH OCCURED ON 
*        EACH CHANNEL OF EACH MAINFRAME.
* 
* 
*     1. A SUMMARY OF ERRORS THAT OCCURRED ON EACH DISK UNIT/PACK IN
*        THE SYSTEM.  THIS REPORT DOES NOT INCLUDE SOFT FLAW ERRORS OR
*        ERRORS THAT HAVE BEEN DERIVED FROM THE MALFUNCTION OF THE
*        CHANNEL, CONTROLER, OR SOFTWARE.  (ALL ERRORS EXCEPT THE 
*        SOFT FLAW ERRORS WILL BE INCLUDED IN REPORT NUMBER FOUR) EACH
*        ERROR INDICATES THE DISK ADDRESS AND NUMBER OF FAILURES AT 
*        EACH ADDRESS FOR THE REPORT PERIOD.  THIS REPORT SHOULD DRAW 
*        ATTENTION TO NEW MARGINAL SURFACE AREAS ON DISK PACKS THAT MAY 
*        REQUIRE CLEANING OR FLAWING.  REMEMBER, HOWEVER, THAT THIS IS
*        SIMPLY A LIST OF WHERE ALL ERRORS OCCURRED, INCLUDING THOSE
*        CREATED BY HARDWARE FAILURES.  THE REPORT IS PRINTED IN DISK 
*        PACK SERIAL NUMBER ORDER AND FAILURES ON EACH PACK ARE SORTED
*        USING EST ORDINAL OR HUID AND UNIT AS THE FIRST SORT KEY, THEN 
*        CYLINDER, TRACK AND SECTOR AS THE SECOND.  ERROR LOG ENTRIES 
*        WHICH DO NOT HAVE A DISK PACK SERIAL NUMBER IDENTIFIED ARE ALL 
*        LISTED UNDER THE PACK NUMBER OF  UNKNOWN  (THIS SITUATION
*        OCCURS DUE TO THE TECHNIQUE USED BY THE OPERATING SYSTEMS IN 
*        LOGGING DISK PACK SERIAL NUMBERS - THE PACK NUMBER IS NOT
*        LOGGED WITH EACH DISK FAILURE AS IS DONE WITH VSNS ON MAGNETIC 
*        TAPES).
* 
*     2. A SUMMARY OF SOFT FLAW STATISTICS.  ALL THE KNOWN SOFT FLAWS 
*        ON ALL PACKS ARE LISTED IF THEY HAD ERRORS THIS PERIOD OR LAST.
*        DATA IS PROVIDED FOR THE PAST 4 PERIODS AS WELL AS A TOTAL 
*        COUNT TO DATE.  THIS REPORT CAN BE USED TO TRACK SOFT FLAWS
*        AND TO SPOT TRENDS THAT INDICATE THAT A SOFT FLAW IS GETTING 
*        WORSE AND SHOULD BE CONSIDERED A HARD FLAW, THUS FLAWED IN 
*        THE UTILITY MAP OF THE PACK.  THE REPORT IS NOT NECESSARILY
*        PRINTED IN PACK SERIAL NUMBER ORDER OR CYLINDER, TRACK, SECTOR 
*        ORDER.  IT IS ACTUALLY PRINTED IN THE ORDER THE SOFT FLAWS ARE 
*        IDENTIFIED ON OLDPD WHEN IT IS INITIALLY CREATED BY THE SITE 
*        (AS WILL BE SEEN LATER, IT IS SUGGESTED THAT THEY BE SPECIFIED 
*        IN NUMERICAL ORDER SINCE IT IMPROVES USABILITY). 
* 
*        TWO VALUES ARE PRINTED FOR EACH MONITOR DATE AS FOLLOWS; 
*        XXXX (YYY).  XXXX IS THE NUMBER OF ERRORS THAT WERE MATCHED
*        TO THIS SPECIFIC PACK SERIAL NUMBER, CYLINDER/TRACK/SECTOR.
*        (IE. PACK SERIAL NUMBER WAS IDENTIFIED IN THE SEF RECORD). YYY 
*        IS THE NUMBER OF ERRORS MATCHED TO THIS CYLINDER/TRACK/SECTOR, 
*        BUT THE SERIAL NUMBER FIELD IN THE SEF RECORD WAS BLANK.  THE
*        ERROR IN ALL PROBABILITY OCCURRED ON THIS PACK, BUT IT CANNOT
*        BE CONFIRMED.
* 
*     3. PLOTS OF DISK UNIT PERFORMANCE.  UP TO 4 WEEKS OF DATA FOR EACH
*        DISK UNIT IS PLOTTED IF THAT UNIT EXCEEDED AN AVERAGE OF .4
*        ERRORS PER DAY FOR ANY OF THE 4 WEEKS.  THIS REPORT CAN BE USED
*        TO TRACK UNIT TRENDS SINCE THE DATA PLOTTED REPRESENTS AS CLOSE
*        TO REALITY AS IS CURRENTLY POSSIBLE - IE. NON DRIVE RELATED
*        ERRORS AND ERRORS ON KNOWN SOFT FLAWS HAVE BEEN REMOVED. 
*        UNITS IN THE PLOTS ARE PRESENTED IN DEVICE TYPE, EST ORDINAL 
*        OR HUID AND UNIT NUMBER ORDER.  THE UNIT NUMBER IS USED WITH 
*        THE EST TO DETERMINE WHICH SPINDLE ON A MULTI SPINDLE DEVICE 
*        DETECTED THE ERROR. IT IS KEPT WITH THE HUID FOR CONVENIENCE 
*        ONLY.
* 
*     4. REPORT FOUR AND FIVE WILL ONLY BE GENERATED IF SENSE SWITCH(1) 
*        IS OFF.  IN ORDER FOR THESE REPORTS TO BE GENERATED THE HOST 
*        SYSTEM MUST HAVE SORT/MERG VERSION 5 AVAILBLE.  IF SORT/MERG 
*        V5 IS NOT AVAILBLE THE USER MUST ENABLE SENSE SWITCH ONE THUS
*        ELIMINATING REPORTS FOUR AND FIVE. 
*        IN REPORT FOUR ALL DISK ERRORS EXCEPT SOFT FLAWS ARE LISTED. 
*        THUS THE ERRORS LISTED HERE WILL MATCH REPORT ONE WITH THE 
*        ADDITION OF CHANNEL, CONTROLER, AND SOFTWARE ERROR CONDITIONS. 
*        FOR THE NON DRIVE ORIENTED ERRORS THE DEVICE TYPE IS CHANGED 
*        TO (CH) AND AN (*) IS PRINTED TO THE RIGHT OF THE TOTAL ERROR
*        COUNT.  ALL ERRORS IN THIS REPORT ARE SORTED BY MFID,EST 
*        THEN BY UNIT, HEAD, CYLINDER, SECTOR, AND SYMPTOM CODE.  IF THE
*        HPA SYMPTOM CODE IS NOT AVAILBLE IN THE SEF DATA THE ERROR CODE
*        IS USED. 
* 
*        REPEAT ERRORS WILL BE ACCUMULATED WHEN THE MFID,EST,SYMPTOM
*        CODE, HEAD, CYLINDER, SECTOR, AND UNIT ALL MATCH.  WHEN THIS 
*        HAPPENS THE QUANTITY WILL BE BUMPED.  IF THIS ERROR OCCURED ON 
*        TWO DIFFERENT CHANNELS THE TOTALS WILL BE SHOWN FOR EACH 
*        CHANNEL AS WELL AS THE COMBINED TOTAL.  IF A MATCH IS NOT MADE 
*        A NEW ENTRY IS STARTED.
* 
*     5. REPORT 5 CONTAINS AN EXPLANATION OF THE SYMPTOM AND ERROR CODES
*         THAT ARE PRINTED IN REPORT NUMBER FOUR. 
* 
*    THE FILES USED BY DSPLOT AND THEIR PURPOSE IS LISTED BELOW:  
* 
* 
*     1. OLDHF - THIS IS THE OLD HISTORY FILE FROM THE LATEST RUN OF
*        HPA.  IT MUST INCLUDE THE NORMAL SHR (SYSTEM HISTORY RECORD) 
*        AND NORMALLY 8 SEF RECORDS (SYSTEM ENGINEERING FILE RECORDS -
*        IE, 8 DAYS OF HISTORY).  ERROR INFORMATION FOR THE PAST WEEK 
*        IS EXTRACTED FROM THIS FILE BY DSPLOT.  ALTHOUGH DSPLOT IS 
*        NORMALLY EXECUTED WEEKLY TO UPDATE ITS OWN HISTORY FILE, A 
*        PROCESS IS DESCRIBED LATER THAT ALLOWS DAILY EXECUTION AS
*        REQUIRED.
* 
*     2. OLDPD - THIS IS THE PERFORMANCE DATA FILE FROM THE LAST RUN OF 
*        DSPLOT (SEE NEWPD FILE DESCRIPTION).  THIS FILE IS MAINTAINED
*        BY DSPLOT BUT MUST BE INITIALLY CREATED BY THE SITE.  THE
*        DATA CAN BE KEYPUNCHED AND COPIED TO A FILE, OR THE FILE CAN 
*        BE CREATED USING NOS OR NOSBE FILE EDITORS.  IT MUST BE CREATED
*        IN THE FORMAT BELOW.  NOTE THAT IF THE SITE DOES NOT HAVE
*        ANY PACKS WITH SOFT FLAWS, THIS FILE NEED NOT BE CREATED 
*        INITIALLY, BUT IT IS STILL MAINTAINED BY DSPLOT SINCE IT IS
*        ALSO USED TO STORE UNIT PERFORMANCE STATISTICS.
* 
*        SOFT FLAWS MUST BE IDENTIFIED FOR EACH PACK SERIAL NUMBER SUCH 
*        THAT ERRORS THAT OCCUR ON THESE SPOTS DO NOT GET LOGGED AGAINST
*        THE DISK UNIT.  SOFT FLAWS EXIST PRIMARILY ON SINGLE DENSITY 
*        DISK PACKS AND ARE THE CORRECTABLE ERRORS THAT EXIST IN THE
*        FACTORY MAP THAT ARE NOT LISTED AS BEING FLAWED IN THE UTILITY 
*        MAP.  IF THEY ARE NOT IN THE UTILITY MAP, IN ALL PROBABILITY 
*        THE SYSTEM IS STILL USING THESE SURFACES AND CAN EXPECT ERRORS 
*        WITH CERTAIN DATA PATTERNS.
* 
*        DOUBLE DENSITY PACKS NORMALLY DO NOT HAVE SOFT FLAWS SINCE NO
*        CORRECTABLE ERRORS ARE LISTED IN THE FACTORY MAPS (EVERY ERROR 
*        IN THE FACTORY MAP IS ALSO INCLUDED IN THE UTILITY MAP).  THUS 
*        SINGLE DENSITY PACKS WILL BE THE PRIMARY REASON FOR CREATING 
*        THE OLDPD FILE IN THE FOLLOWING FORMAT.
* 
*        A. LINE 1 MUST BE BLANKS.  DSPLOT WILL LATER CHANGE THIS INTO
*           MONITOR DATES LINE. 
* 
*        B. THE NEXT LINE MUST IDENTIFY THE DISK PACK SERIAL NUMBER 
*           THAT HAS SOFT FLAWS. THERE IS NO REQUIREMENT THAT PACKS BE
*           SPECIFIED IN NUMERICAL ORDER, BUT IT WOULD PROBABLY BE
*           EASIER TO USE IF THEY ARE.  STARTING IN COLUMN 1, IDENTIFY
*           THE PACK AS   PNXXXXXX    WHERE XXXXXX IS THE 6-DIGIT PACK
*           SERIAL NUMBER.
* 
*        C. THE NEXT N LINES IDENTIFY THE KNOWN SOFT FLAWS THAT EXIST 
*           ON THE DISK PACK JUST DEFINED IN THE ABOVE LINE.  UP TO 25
*           SOFT FLAWS MAY BE IDENTIFIED, AND ALTHOUGH THERE IS NO
*           REQUIREMENT THAT THEY BE IN NUMERICAL ORDER, IT WOULD BE
*           EASIER TO USE IF THEY ARE.  STARTING IN COLUMN 1, IDENTIFY
*           THE FIRST KNOWN SOFT FLAW IN THE FOLLOWING FORMAT.
*           CCCC/TT/SS  WHERE CCCC IS THE CYLINDER NUMBER, TT IS THE
*           TRACK AND SS IS THE SECTOR.  A NEW LINE IS CREATED FOR EACH 
*           SOFT FLAW ON THIS PACK UNTIL ALL HAVE BEEN IDENTIFIED.
* 
*             *** WARNING - OCTAL VALUES ARE REQUIRED BUT FLAWS ARE 
*             *** DEFINED IN DECIMAL IN THE FLAW MAPS.  THESE DECIMAL 
*             *** VALUES MUST BE CONVERTED TO OCTAL BEFORE BEING INPUT
*             *** INTO THE OLDPD FILE.
*             *** IF SOFT FLAWS ARE TO BE  ENTERED FOR AN 885/FMD THE 
*             *** ENTRIES MUST BE LOGICAL POSITIONS.  ANY TIME A SECTOR 
*             *** IS FLAWED VIA THE UTILITY FMU ALL OTHER SOFT FLAWS
*             *** ON THAT TRACK MUST BE ADJUSTED ACCORDINGLY. 
*             *** WHEN A FMD PACK IS REMOVED OR AN 844 PACK IS DELETED
*             *** FROM SERVICE ALL INFORMATION CONCEERNING THAT PACK
*             *** MUST BE REMOVED FROM THE SOFT FLAW INFORMATION
*             *** IN OLDPD  ANY TEXT EDITER MAY BE USED FOR THIS TASK.
* 
*        D. ONCE ALL SOFT FLAWS HAVE BEEN IDENTIFIED FOR A GIVEN PACK 
*           SERIAL NUMBER, STEPS B AND C ARE REPEATED FOR ADDITIONAL
*           PACKS.  A MAXIMUM OF 75 PACKS MAY BE IDENTIFIED.  BELOW 
*           IS AN EXAMPLE OF THE INITIAL CREATION OF AN OLDPD FILE. 
* 
*             COLUMN   1
*             1234567890
*             ----------
*                             (LINE 1 CONTAINS BLANKS)
*             PN471910
*             0023/13/11
*             0202/07/03
*             1213/01/04
*             PN472059
*             0206/03/01
* 
*     3. NEWPD - THIS FILE IS THE OUTPUT OF DSPLOT.  IT REFLECTS THE
*        ORIGINAL CONTENT OF FILE OLDPD PLUS THIS WEEKS STATISTICS. 
*        THEREFORE, NEWPD MUST BE SAVED AND USED AS OLDPD WHEN DSPLOT 
*        IS EXECUTED THE NEXT WEEK.  AS DSPLOT IS EXECUTED EACH WEEK, 
*        STATISTICS ARE ADDED TO THIS FILE SUCH THAT A SLIDING WINDOW 
*        OF 4 WEEKS OF DATA IS MAINTAINED FOR ANALYSIS.  THIS ALLOWS
*        ANY OUTPUT OF DSPLOT TO REFLECT PERFORMANCE DATA FOR THE PAST
*        MONTH, CREATING A COMPACT MONTHLY REPORT TO MANAGEMENT AS WELL 
*        AS FOR SITE OR SERVICE CENTER USE. 
* 
*    4. TAPE3 IS A SCRATCH FILE GENERATED BY DSPLOT.
*       TAPE3 CONTAINS ALL DISK ERRORS THAT OCCURED DURING THE WEEK 
*       IT IS USED AS BOTH INPUT AND OUTPUT FILE FOR SORT MERG. 
*       *** NOTE ***
*           SOFT FLAW ERRORS ARE NOT WRITTEN TO THE FILE TAPE3. 
* 
*   5. DKDATA IS A TEXT FILE WHICH IS USED FOR RETRIEVING A DESCRIPTION 
*      OF EACH SYMPTOM AND ERROR CODE THAT WAS REPORTED IN REPORT 
*      NUMBER FOUR.  THESE DESCRIPTIONS AND A COUNT OF THE NUMBER 
*      OF TIMES EACH ERROR TYPE WAS FOUND IS PRINTED AS REPORT NUMBER 
*      FIVE.
* 
*   6. HPTEXT IS A USER LIBRARY FILE WHICH IS USED DURING COMPILATION 
*      OF DSPLOT.  THIS FILE CONTAINS SYMBOL NAMES AND EQUATES FOR
*      ALL HPA SYMPTOM AND ERROR CODES.  THE MAIN PURPOSE OF THIS 
*      FILE IS TO EASE THE MAINTENANCE OF DSPLOT AND SIMILAR PROGRAMS 
*      THAT MAKE DECISIONS BASED ON ERROR OR SYMPTOM CODES DERIVED
*      FROM THE SEF OR OLDHF FILES. 
* 
*     INSTALLATION
*     ------------
* 
*     DSPLOT NEED NOT BE INSTALLED INTO THE CUSTOMER DEADSTART TAPE - 
*     IT IS NORMALLY EXECUTED FROM A USER FILE.  THE SOURCE CODE MUST 
*     BE EXTRACTED FROM THE PROGRAM LIBRARY IT RESIDES ON USING 
*     UPDATE, COMPILED INTO BINARY BY FORTRAN FIVE AND SAVED FOR
*     LATER EXECUTION EITHER AS A PERMANENT FILE OR ON PUNCHED CARDS. 
*     SINCE DSPLOT IS EXPECTED TO EXECUTE ON BOTH NOS AND NOSBE, AND
*     SYSTEM CONTROL CARDS ARE DIFFERENT FOR BOTH SYSTEMS, DIFFERENT
*     JOB DECKS ARE REQUIRED TO PERFORM THE ABOVE TASK.  THE FOLLOWING
*     IS A TYPICAL NOS INSTALLATION DECK. 
* 
*       JOB AND ACCOUNT CARDS AS REQUIRED. (75K FIELD LENGTH REQUIRED)
*       REQUEST CARD FOR CML TAPE AS FILE NAME CML. 
*       UPDATE(Q,P=CML) 
*       COMPASS(I,B=TXT)
*       LIBGEN(F=TXT,N=HPTEXT,P=HPTEXT) 
*       SAVE,HPTEXT.
*       UPDATE(Q,P=CML) 
*       FTN5,I,ANSI=0,G=HPTEXT,B=DSPLOT,OPT=2.
*       SAVE,DSPLOT.
*       REWIND,COMPILE,CML. 
*       UPDATE,Q,P=CML,C=DKDATA,D,8.
*       SAVE,DKDATA.
*       7/8/9  (EOR)
*       *C,HPTEXT 
*       7/8/9       (EOR) 
*       *COMPILE DSPLOT 
*       7/8/9 
*       *COMPILE,DKDATA 
*       6/7/8/9  (EOF)
* 
*     THE FOLLOWING IS A TYPICAL NOSBE INSTALLATION DECK. 
* 
*       JOB AND ACCOUNT CARDS AS REQUIRED. (75K FIELD LENGTH REQUIRED)
*       REQUEST CARD FOR CML TAPE AS FILE NAME CML. 
*       REQUEST,DSPLOT,*PF. 
*       REQUEST,DKDATA,*PF. 
*       UPDATE(Q,P=CML) 
*       COMPASS(I,B=BIN)
*       EDITLIB.
*       UPDATE(Q,P=CML) 
*       RFL,75000.
*       FTN5,I,ANSI=0,G=HPTEXT,B=DSPLOT,OPT=2.
*       CATALOG(DSPLOT,ID=YOURID,RP=999)
*       REWIND,CML. 
*       UPDATE,Q,P=CML,C=DKDATA,D,8.
*       CATALOG,DKDATA,ID=YOURID,RP=999.
*       7/8/9   (EOR) 
*       *C,HPTEXT 
*       7/8/9        (EOR)
*       LIBRARY(HPTEXT,NEW) 
*       ADD(*,BIN)
*       FINISH. 
*       ENDRUN. 
*       *COMPILE DSPLOT 
*       7/8/9 
*       *COMPILE,DKDATA 
*       6/7/8/9  (EOF)
* 
*     ONCE THE BINARY OF DSPLOT HAS BEEN SAVED AS A PERMANENT FILE, 
*     FILE OLDPD MUST BE CREATED AS DESCRIBED PREVIOUSLY PRIOR TO THE 
*     EXECUTION OF DSPLOT.  IT SHOULD BE SAVED AS PERMANENT FILE OLDPD. 
* 
* 
* 
*     EXECUTION 
*     --------- 
* 
*     DSPLOT IS A WEEKLY PERFORMANCE ROUTINE.  ITS INTENT IS
*     TO PROVIDE A BIG PICTURE OF DISK PERFORMANCE FOR THE WEEK 
*     JUST ENDED. IN ORDER TO INSURE THERE ARE NO HOLES IN THE
*     DATA, DSPLOT SHOULD BE RUN ONE DAY BEHIND AFTER THE 
*     INITIAL RUN.  AFTER THE INITIAL RUN OF DSPLOT YOU SHOULD
*     WAIT UNTIL 8 DAYS OF DATA HAS BEEN ADDED TO THE OLDHF.
*     AFTER THIS DSPLOT SHOULD BE RUN EVERY SEVENTH DAY.
* 
* 
*     THE NORMAL IMPLEMENTATION OF DSPLOT IS TO SET UP A JOB THAT IS
*     SUBMITTED FOR EXECUTION BY THE AUTOMATIC JOB SCHEDULER, SKEDULR.
*     THIS IS ASSUMED TO BE THE SITUATION AND THE JOB DECKS THAT FOLLOW 
*     TAKE THIS FACT INTO CONSIDERATION.  THE FOLLOWING JOB REPRESENTS
*     A NORMAL EXECUTION UNDER NOS. 
* 
*       /JOB
*       JOB AND ACCOUNT CARDS AS REQUIRED. (75K FIELD LENGTH REQUIRED)
*       ATTACH CARD FOR HPA OLD HISTORY FILE AS FILE NAME OLDHF.
*       GET,DSPLOT,DKDATA.
*       GET,OLDPD/NA. 
*       SWITCH,2.   (INITIAL OR DAILY RUN ONLY) 
*       DSPLOT. 
*       REPLACE,NEWPD=OLDPD.  (USE ON WEEKLY UPDATES ONLY)
*       REPLACE,OUTPUT=OSKPLOT. 
*       /EOR
*       /NOSEQ
*       EASTERN CYBERNET CENTER - SYSTEM K4    (NAME OF SITE) 
*       24                (NUMBER OF DISK UNITS ATTACHED TO THIS SYSTEM)
*       /EOF
* 
* 
* 
*   ****NOTE****
*       IF YOU DESIRE NOT TO PRINT REPORT FOUR AND FIVE ENTER 
*       THE CARD (SWITCH,1. AFTER THE CARD (SWITCH,2.)
* 
*       SWITCH,2. SHOULD ONLY BE USED ON INITIAL INSTALLATION 
*       OR WHEN YOU DESIRE MORE THAN ONE RUN PER WEEK 
* 
* 
*     THE FOLLOWING JOB REPRESENTS A NORMAL EXECUTION UNDER NOSBE.
*     THIS EXAMPLE DOES NOT LIST REPORT FOUR. 
* 
* 
*       /JOB
*       JOB AND ACCOUNT CARDS AS REQUIRED. (75K FIELD LENGTH REQUIRED)
*       ATTACH CARD FOR HPA OLD HISTORY FILE AS FILE NAME OLDHF.
*       ATTACH,DSPLOT,ID=YOURID,MR=1. 
*       REQUEST,NEWPD,*PF.
*       ATTACH,OLDPD,ID=YOURID. 
*       ATTACH,DKDATA,ID=YOURID.
*       SWITCH(1,ON)     (REPORT FOUR NOT USED) 
*       SWITCH(2,ON)     (INITIAL RUN ONLY) 
*       DSPLOT. 
*       CATALOG(NEWPD,OLDPD,ID=YOURID,RP=999) 
*       REWIND,OUTPUT.
*       PURGE,OLDPD.
*       PURGE,OSKPLOT,ID=YOURID.
*       RETURN,OSKPLOT. 
*       REQUEST,OSKPLOT,*PF.
*       COPY,OUTPUT,OSKPLOT.
*       CATALOG,OSKPLOT,ID=YOURID,RP=999. 
*       EXIT. 
*       RETURN,OSKPLOT. 
*       REQUEST,OSKPLOT,*PF.
*       COPY,OUTPUT,OSKPLOT.
*       CATALOG,OSKPLOT,ID=YOURID,RP=999. 
*       /EOR
*       EASTERN CYBERNET CENTER - SYSTEM A    (NAME OF SITE)
*       16             (NUMBER OF DISK UNITS ATTACHED TO THIS SYSTEM) 
*       /EOF
* 
* 
*     WHEN DSPLOT IS EXECUTED, THE FIRST OUTPUT IDENTIFIES THE VERSION
*     NUMBER OF DSPLOT AND THE DATE IT WAS WRITTEN.  NEXT, THE USER IS
*     REQUESTED TO PROVIDE THE NAME OF THE SITE, IN 40 CHARACTERS OR
*     LESS, THAT IS TO BE PRINTED IN THE HEADER INFORMATION FOR EACH OF 
*     THE REPORTS CREATED.  THEN, THE USER IS ASKED TO SUPPLY THE 
*     NUMBER OF DISK UNITS ATTACHED TO THE SYSTEM.  THIS CAN BE USED
*     LATER TO DETERMINE THE PERCENTAGE OF UNITS THAT MEET OR EXCEED
*     THE PERFORMANCE GOAL.  NOTE THAT IN THE JOB EXAMPLES ABOVE, THESE 
*     TWO DATA ITEMS ARE PROVIDED IN THE JOB STREAM FOLLOWING THE END-
*     OF-RECORD CARD.  NOTE THAT THE OUTPUT OF THE PROGRAM IS SAVED AS
*     A PERMANENT FILE AND PRINTED LOCALLY.  THIS TECHNIQUE MAKES IT
*     EASY TO ACCOMPLISH REMOTE PERFORMANCE MONITORING WITHOUT HAVING 
*     TO EXECUTE DSPLOT (THE OUTPUT FILE, OSKPLOT, IS SIMPLY ATTACHED 
*     AND PRINTED). 
* 
*     IF THE USER WISHES TO EXECUTE DSPLOT DAILY OR MORE OFTEN THAN 
*     ONCE A WEEK SUCH THAT THE OUTPUT CAN BE USED TO ENHANCE SYSTEM
*     PERFORMANCE MONITORING CAPABILITIES OF HPA, ONLY ONE CAUTION
*     MUST BE USED - DO NOT REPLACE PERMANENT FILES OLDPD OR OSKPLOT. 
*     OLDPD HAS BEEN CONSTRUCTED SUCH THAT IT MAINTAINS FOUR 7-DAY
*     PERFORMANCE STATISTICS ON EACH UNIT IN THE SYSTEM THAT HAS HAD
*     ERRORS, THUS 28 DAYS OF DATA CAN BE MAINTAINED.  IF OLDPD IS
*     UPDATED MORE OFTEN THAN ONCE A WEEK, IT NO LONGER REPRESENTS
*     WEEKLY STATISTICS.
* 
*  ****NOTE**** 
*         DSPLOT WILL NOT EXECUTE MORE FREQUENTLY THAN WEEKLY UNLESS
*         SENSE SWITCH TWO IS TURNED ON.
* 
*      IF SENSE SWITCH (2) IS ON DSPLOT WILL PRINT THE FOLLOWING MESSAGE
*      "ENTER THE NUMBER OF DAYS TO PROCESS." 
*       AFTER THIS MESSAGE DSPLOT WILL CHECK THE INPUT FILE FOR A VALUE 
*        BETWEEN 1 AND 30. IF THAT VALUE IS NOT THERE, 7 DAYS WILL BE 
*       PROCESSED.  IF IT IS THERE THE FIRST "N" DAYS WILL BE TAKEN FROM
*       THE FILE OLDHF. 
* 
*      IF SENSE SWITCH(2) IS OFF DSPLOT WILL OBTAIN THE DATE OF THE 
*      LAST RUN OFF OF THE MONITOR DATES LINE OF THE FILE (OLDPD) 
*      AND CREATE A WINDOW STARTING AT THE LAST DATE OF OPERATION 
*      PLUS ONE AND EXTENDING THROUGH THE LAST DATE OF OPERATION PLUS 
*      SEVEN.  THIS WINDOW IS SEARCHED FOR ON THE FILE OLDHF. 
*      THERE ARE THREE POSSIBLE RESULTS OF THIS SEARCH. 
* 
*      A. IF THE FIRST DAY FOUND ON THE FILE OLDHF IS EQUAL TO THE DATE 
*         OF THE LAST RUN PLUS SEVEN DAYS. ERRORS WILL BE PROCESSED 
*         NORMALLY UNTIL THE DATE IS EQUAL TO OR LESS THAN THE DATE OF
*         THE LAST RUN PLUS ONE.  THE NUMBER OF DAYS WITH DATA FOUND
*         DURING THIS SEVEN DAY PERIOD IS REPORTED. 
* 
*      B. IF THE FIRST DAY FOUND ON THE FILE OLDHF IS GREATER THAN
*         THE DATE OF THE LAST RUN PLUS SEVEN, RECORDS ARE SKIPPED
*         UNTIL THE DATE FOUND IS EQUAL TO OR LESS THAN THE DESIRED DAY.
*         A MESSAGE WILL BE PRINTED SHOWING THE NUMBER OF DAYS SKIPPED
*         AND WHEN DSPLOT SHOULD BE RUN AGAIN TO CATCH UP.
* 
*      C. IF THE FIRST DATE FOUND ON THE OLDHF IS LESS THAN SEVEN 
*         DAYS NEWER THAN THE DATE OF THE LAST RUN AS FOUND ON OLDPD. 
*         THE PROGRAM WILL ABORT WITH A FORTRAN ERROR NUMBER "52".
*         TWO LINES OF INFORMATION WILL BE PRINTED.  THESE LINES
*         CONTAIN THE DATES FOUND ON BOTH FILES (OLDHF AND OLDPD).
*         THE FORMAT OF THESE DATES ARE AS FOLLOWS. 
*           YYDDD   (YY)=YEAR-70 IN OCTAL 
*                  (DDD)=DAY IN OCTAL 
* 
* 
*     THE FOLLOWING REPRESENTS A TYPICAL NOS JOB TO RUN DSPLOT DAILY. 
*     NOTE THAT A VALUE OF TWO IS USED.  THIS OBTAINS A PARTIAL RECORD
*     FROM TODAY ALONG WITH YESTERDAYS DATA.     (NOTE: 
*     IT IS ASSUMED THAT HPA IS EXECUTED AFTER MIDNIGHT EACH DAY IN 
*     ORDER TO UPDATE ITS HISTORY FILE, THEREFORE THE REASON FOR THE
*     PARTIAL DAYS STATISTICS.  IF HPA IS EXECUTED PRIOR TO MIDNIGHT
*     EACH DAY TO PERFORM THIS TASK, THERE WILL NOT BE A PARTIAL RECORD 
*     AND THE COPY SHOULD BE CHANGED TO READ ONE DAY ONLY.
* 
*       JOB AND ACCOUNT CARDS AS REQUIRED. (75K FIELD LENGTH REQUIRED)
*       ATTACH CARD FOR HPA OLD HISTORY FILE AS FILE NAME OLDHF.
*       GET,DSPLOT. 
*       GET,OLDPD,DKDATA. 
*       SWITCH,2.                 (IGNORE DATE WINDOWING) 
*       DSPLOT. 
*       7/8/9    (EOR)
*       EASTERN CYBERNET CENTER - SYSTEM K4     (NAME OF SITE)
*       24              (NUMBER OF DISK UNITS ATTACHED TO THIS SYSTEM)
*       02             (READ TWO RECORDS) 
*       6/7/8/9   (EOF) 
* 
* 
*     THE FOLLOWING NOSBE JOB ACCOMPLISHES THE SAME TASK. 
* 
*       JOB AND ACCOUNT CARDS AS REQUIRED. (75K FIELD LENGTH REQUIRED)
*       ATTACH CARD FOR HPA OLD HISTORY FILE AS FILE NAME OLDHF.
*       ATTACH,DSPLOT,ID=YOURID,MR=1. 
*       ATTACH,OLDPD,ID=YOURID. 
*       ATTACH,DKDATA,ID=YOURID.
*       SWITCH(2,ON)              (IGNORE DATE WINDOWING) 
*       DSPLOT. 
*       7/8/9    (EOR)
*       EASTERN CYBERNET CENTER - SYSTEM A   (NAME OF SITE) 
*       24              (NUMBER OF DISK UNITS ATTACHED TO THIS SYSTEM)
*       02              (READ TWO RECORDS)
*       6/7/8/9  (EOF)
* 
* 
*     USING DSPLOT OUTPUT 
*     --------------------
* 
*     THE WEEKLY OUTPUTS OF DSPLOT SHOULD BE PRINTED AND SAVED BY 
*     ON-SITE OR SERVICE CENTER PERSONNEL.  THE DISK UNIT/PACK
*     ERROR REPORTS SHOULD BE USED TO DETERMINE THE EXISTANCE OF
*     NEW SOFT FLAWS ON DISK PACKS (SAME PACK, CYLINDER, TRACK AND
*     SECTOR HAS FAILURES IN AT LEAST THREE WEEKLY REPORTS) AND TO
*     SPOT HARDWARE PROBLEMS (SUCH AS FAILURES ON THE SAME UNIT ON
*     THE SAME HEAD (TRACK), BUT DIFFERENT CYLINDERS).
* 
*     IF A NEW SOFT FLAW IS IDENTIFIED, IT MUST BE ADDED TO THE 
*     OLDPD FILE IN THE SAME FORMAT USED TO CREATE IT INITIALLY.
*     SIMPLY EDIT THE FILE USING A SYSTEM TEXT EDITOR AND ADD THE 
*     ENTRY TO A PACK THAT ALREADY EXISTS IN THE TABLE, OR CREATE A 
*     NEW PNXXXXXX ENTRY IF THE FAILURE IS ON A NEW PACK.  THEN MAKE
*     THE MODIFIED OLDPD FILE A PERMANENT FILE AGAIN. 
* 
*     THE SECOND REPORT GENERATED BY DSPLOT, THE SOFT FLAW STATISTICS,
*     SHOULD BE USED TO DETERMINE TRENDS OF KNOWN SOFT FLAWS.  IF A 
*     SOFT FLAW FAILS EVERY WEEK, AND THE NUMBER OF ERRORS ARE ON THE 
*     INCREASE, IT IS TIME TO TALK TO THE CUSTOMER ABOUT CONVERTING 
*     THIS SOFT FLAW INTO A HARD FLAW, BY FLAWING IT IN THE UTILITY 
*     MAP. (THE CUSTOMER MAY HAVE TO DUMP, THEN RESTORE PERMANENT FILES 
*     ON THIS PACK TO ACCOMPLISH THIS). 
* 
*     THE THIRD REPORT, THE UNIT PERFORMANCE PLOTS, SHOULD BE USED TO 
*     DETERMINE WHICH ARE THE WORSE UNITS IN THE SYSTEM SUCH THAT THEY
*     CAN BE SCHEDULED FOR MAINTENANCE TO IMPROVE THEIR PERFORMANCE.
*     IT CAN ALSO BE USED AS A MONTHLY REPORT TO MANAGEMENT TO INDICATE 
*     DISK SUBSYSTEM PERFORMANCE. 
*     THE TABLE DESCRIBING THE NUMBER OF ERRORS BY MAINFRAME AND
*     CHANNEL SHOULD BE USEFUL IN DETECTING POSSIBLE CONTROLLER OR
*     CHANNEL PROBLEMS.  BEFORE A CONTROLLER IS BLAMED THE C.E. SHOULD
*     INSURE THAT THE DATA IS NOT COLERED BY A SINGLE ACCESS DISK OR
*     BY HEAVY USE ON THAT ONE ACCESS.
* 
* 
*     THE FOURTH REPORT MAY BE USED TO DEFINE THE NUMBER, TYPES AND 
*     LOCATIONS OF ERRORS BY DEVICE AS WELL AS BY PACK S/N.  ATTENTION
*     TO THIS REPORT MAY SHOW PATTERNS IN THE TYPE OR LOCATION OF ERRORS
*     IN A DISK, CONTROLER, CHANNEL OR PACK.
* 
*     ERRORS ASSESSED AGAINST A DISK CHANNEL OR CONTROLER ARE ALSO
*     LISTED IN REPORT FOUR.  THESE ERRORS WILL BE LISTED WITH THE
*     DRIVE THEY OCCURED ON BUT WILL HAVE A DEVICE TYPE OF (CH) AND 
*     AN (*) WILL BE PRINTED TO THE RIGHT OF THE FAILURE COUNT. 
* 
*     THE FIFTH REPORT WILL PRINT A DESCRIPTION AND COUNT OF THE ERROR
*     TYPES THAT WERE LISTED IN REPORT NUMBER FOUR. 
* 
*     DESCRIPTION 
*     ----------- 
* 
*     THE FOLLOWING STEPS ARE PERFORMED BY DSPLOT TO ACCOMPLISH ITS 
*     DESIGNED TASK.
* 
* 
***   1. CLEAR OR PRESET COUNTERS AND BUFFERS.  OBTAIN THE SITE NAME
*        AND NUMBER OF UNITS ATTACHED TO THE SYSTEM FROM THE USER.
  
      MASKERR = O"7777" 
      MASKPN = O"77770000000000000000"
      MASKNUM = O"00007777777777770000" 
      MASKCYL = O"7777" 
      MASKTRK = O"77" 
      MASKSEC = O"77" 
      MASKADD = O"77777777000000000000" 
      MASKPN1 = O"77777777777777770000" 
      MASKDT = O"3777"
      MASKCH = O"37"
      MASKCEU = O"77777777777777" 
      MASKEQ = O"7" 
      MASKUN = O"77"
      MASKDAY = O"77777"
      IPN = O"20160000000000000000" 
      IBLANKS = O"5555" 
      ICONT = 8H CONTINU
      IBLANK = O"55555555555555550000"
      IHISTRY = 10HHISTORY
      IPLOT(1) = 10H* 
      IPLOT(2) = 10H**
      IPLOT(3) = 10H*** 
      IPLOT(4) = 10H****
      IPLOT(5) = 10H***** 
      IPLOT(6) = 10H******
      IPLOT(7) = 10H******* 
      IPLOT(8) = 10H********
      IPLOT(9) = 10H********* 
      IPLOT(10)= 10H**********
      DO 8080 I=1,100 
      NCHT(I) = NCHE(I) = 0 
8080  CONTINUE
      NDAYS = 8 
      IERRS = 0 
      INP = 0 
      IGLOBAL = 0 
      IFALSE = 0
      DO 1001 I=1,20
      IERTB(I) = 10H
      IERCT(I) = 0
1001  CONTINUE
      DO 10 I=1,NPACKS
      IPACK(I) = 0
      DO 10 J=1,NFLAWS
      IFLAWS(I,J,1) = 0 
   10 CONTINUE
      DO 11 I=1,100 
      IDEV(I) = 0 
      DO 11 J=1,4 
      HIST(I,J) = 0 
   11 CONTINUE
      DO 12 I=1,100 
      DO 12 J=1,73
      IHITS(I,J) = -1 
   12 CONTINUE
      ADATE = 10H 
      ADATEL = 10H
      PRINT 13
  13  FORMAT(10X,'DSPLOT VERSION 2.0  SEPT 8 1982',///, 
     11X,'SITE NAME IN 40 CHARACTERS OR LESS? ')
      READ (*,14,END=10000)ISITE
   14 FORMAT(4A10)
10000 PRINT 15,ISITE
   15 FORMAT(' SITE NAME ENTERED = ',4A10)
      PRINT 16
   16 FORMAT(1X,'NUMBER OF DISK DEVICES ATTACHED TO THIS SYSTEM? ') 
      READ (*,17,END=10001)NUNITS 
   17 FORMAT(A3)
10001 PRINT 18,NUNITS 
   18 FORMAT(' NUMBER OF UNITS ENTERED = ',A3)
      DO 19 I=1,8 
      IDATES(I) = 0 
      IERMSG(I) = 10H 
   19 CONTINUE
  
***   2. GET THE CURRENT DATE FROM THE SYSTEM AND READ THE PREVIOUS 
*        MONITOR DATES FROM THE OLD PERFORMANCE DATA FILE, OLDPD. 
*        IF SENSE SWITCH (2) IS OFF, ESTABLISH A WINDOW FOR PROCESSING
*        THAT STARTS AT THE DATE OF THE LAST RUN PLUS SEVEN DAYS AND
*        CONTINUES TO THE DATE OF THE LAST RUN PLUS ONE DAY.
* 
*        IF SENSE SWITCH (2) IS ON PRINT THE REQUEST FOR THE NUMBER 
*        OF DAYS TO PROCESS AND READ THE VALUE. 
  
      DATES(1) = DATE(I)
      DATES(2)=DATES(3)=DATES(4)=10H
      REWIND 2
      I = 0 
      READ (2,21,END=10002) (DATES(J),J=2,4)
   21 FORMAT(BZ,3A10) 
10002 IF(SNSW2.EQ.1) GO TO 2100 
      ADATE=DATES(2)
      CALL JULE (ADATE) 
      PRINT 9999,DATES(2) 
9999  FORMAT(1X,'ENDING DATE OF LAST RUN WAS',2X,A10,/) 
      JD = ADATE.AND.O"777" 
      JYR = SHIFT(ADATE,-9).AND.O"77" 
      JD = JD+1 
      IF(JD.LE.365) GO TO 200 
      JD = 0
      JYR = JYR+1 
200   ADATE = SHIFT(JYR,9).OR.JD
      JD = JD+6 
      IF(JD.LE.365) GO TO 210 
      JD = JD-365 
      JYR = JYR+1 
210   ADATEL = SHIFT(JYR,9).OR.JD 
      GO TO 2030
2100  PRINT 2105
2105  FORMAT(1X,'ENTER THE NUMBER OF DAYS TO PROCESS (01 TO 30)') 
      READ (*,2110,END=2115) NDAYS
2110  FORMAT(I2)
2115  IF((NDAYS.GE.1).AND.(NDAYS.LE.30)) GO TO 2030 
      NDAYS = 7 
      PRINT 2117
2117  FORMAT(1X,'*** NUMBER OF DAYS OUT OF RANGE 07 DAYS WILL BE USED') 
2030  CONTINUE
      IF(EOF(2)) 50,30,50 
  
***   3. READ THE REMAINING DATA FROM OLDPD AND STORE IT INTO THE 
*        PROPER BUFFER.  PNXXXXXX ENTRIES ARE SAVED IN THE PACK NAMES 
*        BUFFER, IPACK.  CYLINDER,TRACK AND SECTOR VALUES THAT IDENTIFY 
*        SOFT FLAWS ON A PACK ARE STORED IN BUFFER IFLAWS.
  
   30 READ (2,31,END=10003) IB
   31 FORMAT (BZ,5(A10,1X),I6)
10003 IF(EOF(2)) 50,32,50 
   32 J = IB(1).AND.MASKPN
      IF(J.EQ.IPN) GOTO 37
      IF(IB(1).EQ.IHISTRY) GOTO 40
      IF(I.NE.0) GOTO 34
      PRINT 33
   33 FORMAT(' ABORTED - FILE OLDPD IS OUT OF SEQUENCE')
      GOTO 999
  
   34 IFLAWS(I,K,1) = IB(1) 
      IF(IB(6).EQ.-1) IB(6) = 0 
      IFLAWS(I,K,2) = 0 
      IFLAWS(I,K,3) = 0 
      IFLAWS(I,K,4) = IB(2) 
      IFLAWS(I,K,5) = IB(3) 
      IFLAWS(I,K,6) = IB(4) 
      IFLAWS(I,K,7) = IB(6) 
      K = K + 1 
      IF(K.LE.NFLAWS) GOTO 30 
      PRINT 35,IPACK(I) 
   35 FORMAT(' ABORTED - MORE THAN 25 SOFT FLAWS ON PACK ',A10) 
      GOTO 999
* 
*     PACK NUMBER ENTRY.  EXTRACT PACK NUMBER AND SAVE IT.
* 
   37 I = I + 1 
      IF(I.LE.NPACKS) GOTO 39 
      PRINT 38
   38 FORMAT(' ABORTED - MORE THAN 75 DISK PACKS DEFINED ON OLDPD') 
      GOTO 999
  
   39 IB(1) = IB(1).AND.MASKNUM 
      IPACK(I) = IB(1).OR.IBLANKS 
      IPACK(I) = SHIFT(IPACK(I),12) 
      K = 1 
      GOTO 30 
  
***   4. ONCE THE HISTORY FLAG IS READ, THE REMAINING CONTENTS OF 
*        OLDPD ARE STORED AS DEVICE STATISTICS (DEVICE TYPE, CHANNEL
*        EQUIPMENT, UNIT AND AVERAGE DAILY ERROR RATES) IN THE DEV
*        AND HIST BUFFERS.
  
   40 DO 44 I=1,100 
   41 READ (2,42,END=10004) IDEV(I),(HIST(I,J),J=2,4) 
   42 FORMAT(BZ,A10,4(1X,F7.1)) 
10004 IF(EOF(2)) 50,43,50 
   43 H = HIST(I,2) + HIST(I,3) + HIST(I,4) 
      IF(H.EQ.0.0) GOTO 41
      HIST(I,1) = 0.0 
   44 CONTINUE
      READ (2,42,END=10005) IB
10005 IF(EOF(2)) 50,45,50 
   45 PRINT 46
   46 FORMAT(' ABORTED - TOO MANY ENTRIES IN HISTORY OF OLDPD') 
      GOTO 999
  
  
***   5. WHEN END-OF-FILE IS REACHED ON OLDPD, THE SPECIFIED DATA 
*        (REFER TO SENSE SWITCH (2)) IS READ FROM OLDHF.
* 
*        A MESSAGE IS ISSUED INDICATING THE NUMBER OF SEF RECORDS THAT
*        WERE ACTUALLY PROCESSED. 
* 
*        EACH SEF ENTRY IS LOOKED AT TO OBTAIN A DATE FOR THIS RECORD,
*        TO DETERMINE IF THE ENTRY IS A DISK ERROR OTHER THAN A 115B
*        (PACK SERIAL NUMBER ENTRY) OR 151B (CONTROLWARE VERSION).  IF
*        IT IS, THE FOLLOWING PROCESSES ARE COMPLETED.
*        ALL ERRORS OTHER THAN 115B, 151B AND SOFT FLAWS ARE WRITTEN
*        ON FILE TAPE3 FOR LATER USE IF REPORT FOUR HAS 
*        NOT BEEN DISABLED BY TURNING ON SENSE SWITCH 1.
  
   50 REWIND 1
      OPEN (3,STATUS='SCRATCH',ACCESS='SEQUENTIAL', 
     1FORM='UNFORMATTED',RECL=80) 
      REWIND 3
   51 READ(1,END=10006) IN
10006 IF(EOF(1)) 52,51,52 
   52 FILES = 7.0 
      IFILES = NDAYS
      DO 96 LL = 1,NDAYS
      IF(SNSW2.EQ.1) GO TO 53 
      IF(IDF.EQ.3HYES) GO TO 53 
      IDF = 3HYES 
      IREAD = 0 
57    READ(1,END=10007) IN
10007 IF(EOF(1)) 97,58,97 
58    IREAD = 0 
      ITST = SHIFT(IN(1),-12).AND.MASKDAY 
      IF(ITST.GT.ADATEL) GO TO 57 
      IF(ITST.EQ.ADATEL) GO TO 54 
      GO TO 2000
* 
97    IREAD = IREAD+1 
      ISKIP = ISKIP+1 
      IF(IREAD.EQ.1) GO TO 57 
      PRINT 1099
1099  FORMAT(1X,'EOI ENCOUNTERED ON OLDHF',/) 
1000  PRINT 1090,ITST,ADATEL
1090  FORMAT(1X,'OLDHF LATEST DATE IS ',1X,O5,20X,/ 
     .,1X,'DSPLOT WILL NOT RUN UNTIL ',1X,O5,20X,/
     .,1X,'RUN ABORTED',1X,/) 
      GO TO 9977
* 
2000  IF(ISKIP.GT.0) GO TO 54 
      GO TO 1000
* 
   53 READ (1,END=10008) IN 
10008 IF(EOF(1)) 94,54,94 
   54 IREAD = O"77" 
      IF(IDATES(LL).NE.0) GOTO 55 
      IDATES(LL) = SHIFT(IN(1),-12).AND.MASKDAY 
   55 CONTINUE
      ITST = SHIFT(IN(1),-12).AND.MASKDAY 
      DAYS = LL-1 
      IF(SNSW2.EQ.1) GO TO 2020 
      IF(ITST.LT.ADATE) GO TO 900 
2020  CONTINUE
      IRT = SHIFT(IN(1),18) .AND. O"777"
      DO 2022 I = 1,12
      IF (IRT .EQ. IDISK(I)) GO TO 2024 
 2022 CONTINUE
      GO TO 53
 2024 CONTINUE
      IF ((IN(3) .AND. ICONT) .EQ. 8H CONTINU) GO TO 53 
      J = IN(1).AND.MASKERR 
      IF ((IRT.EQ.5) .AND. (J.NE.5) .AND. (J.NE.O"24"))  GO TO 53 
  
*     PERFORM SPECIAL HANDLING ON 887 - HYDRA SEF RECORDS 
*     - - - IGNORE 887 ERROR LOG AND ERROR REGISTER IMAGES
      IF (IRT .EQ. O"53") THEN
         IF ((J .EQ. O"4006") .OR. (J .EQ. O"4007")) GO TO 53 
  
*     - - - RESTORE 887 ERROR CODES FOR CH DOWN/EQ OFF
         ISYMCDE = IN(3) .AND. MASKERR
         IF (ISYMCDE .EQ. O"15") THEN 
            IN(1) = IN(1) .AND. O"7777 7777 7777 7777 0000" .OR. O"35"
            J = O"35" 
         ELSE IF (ISYMCDE .EQ. O"30") THEN
            IN(1) = IN(1) .AND. O"7777 7777 7777 7777 0000" .OR. O"52"
            J = O"52" 
         ENDIF
  
*     - - - ADJUST 887 ADDRESS IN DETAIL STATUS 
         IN(6) = SHIFT(IN(5),36) .AND. MASKADD
  
*     - - - BLANK OUT THE PSN 
         IN(5) = IBLANK 
      ENDIF 
  
*     ADJUST 834/836 ADDRESS IN DETAIL STATUS 
      IF ((IRT .EQ. O"40") .OR. (IRT .EQ. O"41") .OR. (IRT .EQ. O"42")) 
     .     THEN 
         K2 = SHIFT(IN(6), 6) .AND. O"7700 0000 0000 0000"
         K3 = SHIFT(IN(6),12) .AND. O"0077 0000 0000 0000" .OR. K2
         IN(6) = IN(6) .AND.   O"7777 0000 0000 7777 7777" .OR. K3
      ENDIF 
  
*     ADJUST 819 ADDRESS IN DETAIL STATUS 
      IF (IRT .EQ. O"50") THEN
         IN(6) = SHIFT(IN(4),36) .AND. MASKADD
         IN(5) = IBLANK 
      ENDIF 
*** 
*       ALL ENTRIES ARE CHECKED TO ASCERTAIN IF THEY ARE UNIT ERRORS OR 
*       ERRORS DERIVED FROM CHANNEL, CONTROLLER, OR SOFTWARE.  IF THEY
*       ARE UNIT ERRORS THEY ARE SAVE FOR REPORTS 1,2,AND 3. IF THEY ARE
*       NOT UNIT ERRORS THEY ARE WRITTEN ON TAPE THREE FOR USE IN REPORTS 
*       FOUR AND FIVE.
* 
      CALL STERMS 
* 
      IF (IRT .EQ. O"45") GO TO 85
      IF ((J .EQ. 5) .OR. (J .EQ. O"24")) GO TO 5502
      IF (J .LE. O"37") GO TO 85
      IF ((J .GT. O"44") .AND. (J .LE. O"77")) GO TO 85 
  
      DO 5500 I=1,62
      IF(IERR(I).EQ.O"0000") GO TO 85 
      IF(J.EQ.IERR(I)) GO TO 85 
5500  CONTINUE
5502  CONTINUE
* 
      IERRS = IERRS + 1 
      K1 = SHIFT(IN(6),-48).AND.MASKCYL 
      K2 = SHIFT(IN(6),-42).AND.MASKTRK 
      K3 = SHIFT(IN(6),-36).AND.MASKSEC 
      ENCODE (10,56,K) K1,K2,K3 
   56 FORMAT(O4,1H/,O2,1H/,O2)
      IN(5) = IN(5).AND.MASKPN1 
      IF(IN(5).EQ.0) GO TO 59 
      IF(IN(5).NE.IBLANK) GOTO 90 
  
***      A. IF THE PACK SERIAL NUMBER FIELD IS BLANK, SCAN THE SOFT 
*           FLAW MAPS FOR ALL PACKS FOR A MATCH.  IF FOUND, BUMP THE
*           UNCONFIRMED ERROR COUNT FOR THIS FLAW, THE GLOBAL SEARCH
*           COUNTER AND THE FALSE ERROR COUNTER.  DO NOT REPORT THIS
*           ERROR AGAINST THE DISK UNIT.
  
  59  INP = INP+1 
      DO 61 I=1,NPACKS
      IF(IPACK(I).EQ.0) GOTO 70 
      DO 60 J=1,NFLAWS
      IF(IFLAWS(I,J,1).EQ.0) GOTO 61
      IF(K.NE.IFLAWS(I,J,1)) GOTO 60
      IGLOBAL = IGLOBAL + 1 
      IFLAWS(I,J,3) = IFLAWS(I,J,3) + 1 
      GOTO 63 
   60 CONTINUE
   61 CONTINUE
      GOTO 70 
   62 IFLAWS(I,J,2) = IFLAWS(I,J,2) + 1 
   63 IFALSE = IFALSE + 1 
      GOTO 53 
  
***      B. IF THE ERROR DID NOT OCCUR ON A KNOWN SOFT FLAW (EITHER 
*           A SEARCH OF A KNOWN PACK SERIAL NUMBER FLAW LIST FAILED 
*           TO FIND A MATCH, OR THE GLOBAL SEARCH OF ALL PACK FLAWS 
*           FOR AN UNKNOWN PACK SERIAL NUMBER FAILED), AND THE ERROR
*            IS A DRIVE TYPE ERROR, BUMP THE ERROR
*           COUNTER FOR THIS UNIT, RECORDING THE CYLINDER, TRACK AND
*           SECTOR WHERE THE ERROR OCCURRED.
* 
*           WHILE WE ARE LOOKING AT THIS ERROR UPDATE THE COUNT FOR 
*           THE MAINFRAME AND CHANNEL IT OCCURED ON.
  
   70 J1 = IN(2).AND.MASKDT 
      MMF = SHIFT(IN(1),3).AND.O"1" 
      IF(MMF.EQ.1) GO TO 7000 
      J2 = SHIFT(IN(2),-12).AND.O"3777" 
      GO TO 7001
7000  J2 = IN(3).AND.O"7777"
      J4 = SHIFT(IN(1),-27).AND.MASKUN
      ENCODE (10,7002,J) J1,J2,J4 
7002  FORMAT (R2,1X,I4,1H-,O2)
      GO TO 7003
7001  J4 = SHIFT(IN(1),-27).AND.MASKUN
      ENCODE (10,71,J) J1,J2,J4 
  71  FORMAT(R2,1X,O4,1H-,O2) 
7003  DO 72 I=1,100 
      IF(IDEV(I).EQ.0) GOTO 74
      IF(IDEV(I).EQ.J) GOTO 75
   72 CONTINUE
      PRINT 73
   73 FORMAT(' ABORTED - MORE THAN 100 DISK DEVICES IN SYSTEM') 
      GOTO 999
  
   74 IDEV(I) = J 
   75 HIST(I,1) = HIST(I,1) + 1.0 
* 
*     ADD THIS FAILURE TO THE DISK UNIT STATISTICS AREA.
* 
      J1 = IN(6).AND.MASKADD
      J3 = J.AND.MASKCEU
      DO 81 I=1,100 
      IF(IHITS(I,1).EQ.-1) GOTO 82
      IF(IHITS(I,1).NE.IN(5)) GOTO 81 
      DO 80 J=2,71,3
      IF(IHITS(I,J+2).EQ.-1) GOTO 83
      J2 = IHITS(I,J+2).AND.MASKADD 
      IF(J1.NE.J2) GOTO 80
      IF(J3.NE.IHITS(I,J+1)) GOTO 80
      IHITS(I,J) = IHITS(I,J) + 1 
      GO TO 85
   80 CONTINUE
      GO TO 85
   81 CONTINUE
      GO TO 85
   82 IHITS(I,1) = IN(5)
      IHITS(I,4) = J1 
      IHITS(I,3) = J3 
      IHITS(I,2) = 1
      GO TO 85
   83 IHITS(I,J+2) = J1 
      IHITS(I,J+1) = J3 
      IHITS(I,J) = 1
  85  WRITE (3) IN
      MFID = SHIFT(IN(1),27).AND.O"77000000"
      IF(MFID.EQ.0) MFID = O"55000000"
      MFCH = SHIFT(IN(2),24).AND.O"77"
      MFCH1 = SHIFT(MFCH,3).AND.O"700"
      MFCH2 = MFCH.AND.O"7" 
      MFCH = (MFCH1+O"3300").OR.(MFCH2+O"33") 
      MFID = MFID.OR.MFCH 
      MFID = MFID.OR.O"55555555555500460000"
      DO 8000,NC = 1,100
      IF(NCHT(NC).EQ.MFID) GO TO 8005 
      IF(NCHT(NC).NE.0) GO TO 8000
      NCHT(NC) = MFID 
      GO TO 8005
8000  CONTINUE
      PRINT 8999
8999  FORMAT(1X,'*** ERROR *** MORE THAN 100 MFID-CH''S FOUND') 
      DO 8010 I=1,100 
      PRINT 8011,NCHT(I),NCHE(I)
8011  FORMAT(1X,O20,2X,O20) 
8010  CONTINUE
      STOP
* 
8005  NCHE(NC) = NCHE(NC)+1 
      GOTO 53 
  
***      C. IF THE PACK SERIAL NUMBER FIELD IS NOT BLANK, SCAN THE
*           SOFT FLAW MAP OF THIS SPECIFIC PACK, IF PRESENT, TO SEE 
*           IF A MATCH CAN BE FOUND.  IF IT IS, BUMP THE CONFIRMED
*           ERROR COUNT FOR THIS FLAW AND THE FALSE ERROR COUNTER.  DO
*           NOT REPORT THIS ERROR AGAINST THE DISK UNIT.
  
   90 DO 91 I=1,NPACKS
      IF(IPACK(I).EQ.0) GOTO 70 
      IF(IPACK(I).EQ.IN(5)) GOTO 92 
   91 CONTINUE
      GOTO 70 
* 
*     PACK NUMBERS MATCH.  SCAN FOR SPECIFIC CYL/TRK/SEC. 
* 
   92 DO 93 J = 1,NFLAWS
      IF(IFLAWS(I,J,1).EQ.0) GOTO 70
      IF(K.EQ.IFLAWS(I,J,1)) GOTO 62
   93 CONTINUE
      GOTO 70 
   94 IF(IREAD.NE.0) GOTO 96
      FILES = LL - 1.0
      IFILES = LL - 1 
      PRINT 95,IFILES 
   95 FORMAT(//,1X,I1,' SEF RECORDS WERE PROCESSED FROM OLDHF.',/)
      GOTO 900
   96 CONTINUE
  
***   6. DETERMINE THE AMOUNT OF DATA TO READ FROM OLDHF. 
*        ONCE EIGHT RECORDS HAVE BEEN PROCESSED FROM OLDHF, OR END OF 
*       INFORMATION HAS BEEN READ, OR THE DATE OF THE 
*       NEW ERROR READ WAS EQUAL TO OR LESS THAN THE DATE 
*       OF THE LAST RUN AND SENSE SWITCH 2 IS OFF OR SENSE SWITCH 2 IS
*      ON AND THE PROPER NUMBER OF RECORDS HAVE BEEN READ.
  
  900 IFIRST = 0
      LAST = 0
      FDAY(1) = DATES(1)
      FDAY(2) = DATES(1)
      FDAY(3) = DATES(1)
      DO 910 I=1,8
      IF(IDATES(I).NE.0.AND.LAST.EQ.0) LAST = I 
      IF(IDATES(I).NE.0) IFIRST = I 
  910 CONTINUE
      IDA(1) = ADATEL 
      IDA(2) = ADATE
      IF(SNSW2.NE.1) GO TO 915
      IDA(1) = IDATES(LAST) 
      IDA(2) = IDATES(IFIRST) 
      ADATEL = IDATES(LAST) 
915   IDA(3) = ADATEL 
      DO 970 I=1,3
      J1 = SHIFT(IDA(I),-9) + 70
      J3 = IDA(I).AND.O"777"
      J4 = J1.AND.3 
      MONTHS(2) = 28
      IF(J4.NE.0) GOTO 930
      MONTHS(2) = 29
  930 DO 940 J2=1,12
      IF(J3.LE.MONTHS(J2)) GOTO 950 
      J3 = J3-MONTHS(J2)
  940 CONTINUE
  950 ENCODE(10,960,FDAY(I)) J1,J2,J3 
  960 FORMAT(1X,2(I2.2,1H/),I2.2,1H.) 
  970 CONTINUE
      DATES(1) = FDAY(3)
  
***   7. SORT THE UNIT HISTORY DATA INTO DISK TYPE HUID OR EST
*        AND UNIT NUMBER ORDER. 
  
      DO 101 J=1,101
      IF(IDEV(J).EQ.0) GOTO 103 
  101 CONTINUE
      PRINT 102 
  102 FORMAT(' ABORTED - MORE THAN 100 DISK DEVICES ON OLDPD')
      GOTO 999
  103 J = J-1 
      IF(J.NE.0) GOTO 105 
      PRINT 104 
  104 FORMAT(' TERMINATED - NO DISK ERRORS FOUND ON OLDHF') 
      GOTO 999
  105 NDEVICE = J 
      DO 108 I=1,J
      K = I 
      DO 106 L=I,J
      IF(IDEV(L).LT.IDEV(K)) K = L
  106 CONTINUE
      IF(K.EQ.I) GOTO 108 
      JJ = IDEV(I)
      IDEV(I) = IDEV(K) 
      IDEV(K) = JJ
      DO 107 M = 1,4
      H = HIST(I,M) 
      HIST(I,M) = HIST(K,M) 
      HIST(K,M) = H 
  107 CONTINUE
  108 CONTINUE
  
***   8. WRITE THE COLLECTED DATA TO THE NEW PERFORMANCE DATA FILE, 
*        NEWPD.  DATA IS WRITTEN IN THE FOLLOWING ORDER;
* 
*        . MONITOR DATES
*        . DISK PACK SERIAL NUMBER, FOLLOWED BY SOFT FLAW STATISTICS, 
*          REPEATED FOR EACH PACK.
*        . HISTORY FLAG 
*        . UNIT PERFORMANCE STATISTICS, PREVIOUSLY SORTED BY DEVICE 
*          TYPE, CHANNEL, EQUIPMENT AND UNIT. 
  
      REWIND 4
      WRITE (4,110) DATES 
  110 FORMAT(4A10)
      DO 114 I=1,NPACKS 
      IF(IPACK(I).EQ.0) GOTO 115
      L = SHIFT(IPACK(I),48).AND.MASKNUM
      L = L.OR.IPN
      WRITE (4,111) L 
  111 FORMAT(A8)
      DO 113 J=1,NFLAWS 
      IF(IFLAWS(I,J,1).EQ.0) GOTO 114 
      IFLAWS(I,J,7) = IFLAWS(I,J,7) + IFLAWS(I,J,2) + IFLAWS(I,J,3) 
      WRITE (4,112)(IFLAWS(I,J,K),K=1,7)
  112 FORMAT(A10,1X,I4,1X,'(',I3,')',3(1X,A10),1X,I6) 
  113 CONTINUE
  114 CONTINUE
  115 WRITE (4,111) IHISTRY 
      DO 116 I=1,100
      IF(IDEV(I).EQ.0) GOTO 117 
      HIST(I,1) = HIST(I,1)/FILES 
      WRITE (4,42) IDEV(I),(HIST(I,J),J=1,4)
  116 CONTINUE
  117 CONTINUE
  
***   9. SORT THE NON-SOFT FLAW FAILURES USING THREE KEYS.  FIRST, PACK 
*        SERIAL NUMBER, SECOND, HUID OR EST AND UNIT THEN THIRD,
*        CYLINDER/TRACK/SECTOR. 
  
      DO 120 J=1,100
      IF(IHITS(J,1).EQ.-1) GOTO 121 
      IF(IHITS(J,1).EQ.IBLANK) IHITS(J,1) = 10HUNKNOWN
      IF(IHITS(J,1).EQ.0) IHITS(J,1) = 10HUNKNOWN 
  120 CONTINUE
  121 J = J - 1 
      IF(J.EQ.0) GOTO 140 
      DO 128 I=1,J
      K = I 
      DO 122 L=I,J
      IF(IHITS(L,1).LT.IHITS(K,1)) K = L
  122 CONTINUE
      DO 123 M=1,73 
      JJ = IHITS(I,M) 
      IHITS(I,M) = IHITS(K,M) 
      IHITS(K,M) = JJ 
  123 CONTINUE
      DO 124 JJ=2,71,3
      IF(IHITS(I,JJ+1).EQ.-1) GOTO 125
  124 CONTINUE
  125 JJ = JJ - 3 
      IF(JJ.EQ.0) GOTO 128
      DO 127 II = 2,JJ,3
      KK = II 
      DO 126 LL = II,JJ,3 
      IF(IHITS(I,LL+1).LT.IHITS(I,KK+1)) KK = LL
      IF(IHITS(I,LL+1).EQ.IHITS(I,KK+1).AND.IHITS(I,LL+2).LT.IHITS(I,KK+
     12)) KK = LL 
  126 CONTINUE
      J1 = IHITS(I,II)
      J2 = IHITS(I,II+1)
      J3 = IHITS(I,II+2)
      IHITS(I,II) = IHITS(I,KK) 
      IHITS(I,II+1) = IHITS(I,KK+1) 
      IHITS(I,II+2) = IHITS(I,KK+2) 
      IHITS(I,KK) = J1
      IHITS(I,KK+1) = J2
      IHITS(I,KK+2) = J3
  127 CONTINUE
  128 CONTINUE
  
***  10. PRINT THE SORTED NON-SOFT FLAW ERROR REPORT. 
  
      PRINT 130,ISITE,FDAY(2),FDAY(1) 
  130 FORMAT(1H1,///,20X,4A10,/,10X,'DISK UNIT/PACK/ADDRESS ERROR REPORT
     1 FOR ',A10,' - ',A10,/, 
     220X,'(EXCLUDES ERRORS ON KNOWN SOFT FLAWS)',/,14X,'EST/'
     3,19X,'EST/',19X,'EST/',/, 
     41X,'PACK NO. QTY HUID-UN  CYL/TK/S  QTY HUID-UN  CYL/TK/S  QTY '
     5,'HUID-UN  CYL/TK/S',/,1X,'-------- ---------------------- '
     6,'---------------------- --------------------',/) 
      DO 136 I=1,100
      IF(IHITS(I,1).EQ.-1) GOTO 140 
      DO 131 J=2,71,3 
      IF(IHITS(I,J).EQ.-1) GOTO 132 
      J1 = SHIFT(IHITS(I,J+2),-48).AND.MASKCYL
      J2 = SHIFT(IHITS(I,J+2),-42).AND.MASKTRK
      J3 = SHIFT(IHITS(I,J+2),-36).AND.MASKSEC
      ENCODE(10,56,IHITS(I,J+2)) J1,J2,J3 
  131 CONTINUE
  132 J = J - 1 
      PRINT 133,(IHITS(I,K),K=1,J)
  133 FORMAT(1X,A8,1X,I3,1X,R7,1X,A10,2(1X,I3,1X,R7,1X,A10),
     17(/,9X,3(1X,I3,1X,R7,1X,A10)))
      IF(J.EQ.73) PRINT 134 
  134 FORMAT(11X,'(FIRST 24 UNIQUE ADDRESSES LISTED ABOVE - MORE MAY HAV
     1E OCCURRED)') 
      PRINT 135 
  135 FORMAT(' ---------------------------------------------------------
     1--------------------')
  136 CONTINUE
  
***  11. PRINT THE UNSORTED SOFT-FLAW STATISTICS REPORT.  DO NOT PRINT
*        STATISTICS UNLESS A FLAW HAD ERRORS THIS REPORT PERIOD OR
*        ON THE LAST REPORT PERIOD.  PACKS AND FLAWS RETAIN THE SAME
*        ORDER AS THEY EXIST ON THE OLDPD FILE (USER CREATED ORDER).
  
  140 IF(IPACK(1).EQ.0) GOTO 150
      PRINT 141,ISITE,DATES 
  141 FORMAT(1H1,///,10X,'SOFT FLAW STATISTICS FOR ',4A10,/,
     117X,'(C=CONFIRMED HITS   U=UNCONFIRMED SOFT FLAW HITS)',//, 
     21X,'PACK NO.  CYL TRK SEC ',4(A10,1X),' TOTAL ',/,
     31X,'--------  -----------  ---------  ---------  ---------  ------
     4---  -----',/,
     526X,4('C    U',5X),/) 
      DO 147 I=1,NPACKS 
      K = 0 
      DO 144 J=1,NFLAWS 
      IF(IFLAWS(I,J,1).EQ.0) GOTO 145 
      IF((IFLAWS(I,J,2)+IFLAWS(I,J,3)).NE.0) GOTO 142 
      IF(IFLAWS(I,J,4).EQ.10H          ) GOTO 144 
      IF(IFLAWS(I,J,4).EQ.10H   0 (  0)) GOTO 144 
  142 K = K + 1 
      DO 143 L=1,6
      IFLAWS(I,K,L) = IFLAWS(I,J,L) 
  143 CONTINUE
  144 CONTINUE
  145 IF(K.EQ.0) GOTO 147 
      PRINT 146,IPACK(I),((IFLAWS(I,L,M),M=1,7),L=1,K)
  146 FORMAT(1X,A8,2X,A10,2X,I4,' (',I3,')',3(1X,A10),1X,I6,
     124(/11X,A10,2X,I4,' (',I3,')',3(1X,A10),1X,I6)) 
      PRINT 135 
  147 CONTINUE
  
***  12. PRINT THE PLOT OF UNIT ERROR STATISTICS.  UP TO 4 REPORT 
*        PERIODS ARE INDICATED FOR EACH UNIT.  DO NOT PRINT STATISTICS
*        ON A UNIT UNLESS ONE OF THE REPORT PERIODS INDICATE A FAILURE
*        RATE OF .4 ERRORS PER DAY OR GREATER.
  
  150 PRINT 151,ISITE 
  151 FORMAT(//,1H1,///,12X,'DISK PERFORMANCE DATA FOR ',4A10,1X, 
     1//,24X,'(AVERAGE DAILY ERROR RATES EXCLUDING SOFT FLAWS)',
     2/,21X,'0         1         2         3         4         5',
     3/,4X,'EST/    MONITOR  .',5('         .'),
     4/,1X,'DT-HUID-UN  DATES   ',5('0123456789'),'0',
     5/,31X,'.',/,31X,'.')
      ID(2)=ID(3)=ID(4)=10H 
      DO 161 I=1,100
      IF(HIST(I,1).GT.0.35) GOTO 152
      IF(HIST(I,2).GT.0.35) GOTO 152
      IF(HIST(I,3).GT.0.35) GOTO 152
      IF(HIST(I,4).LE.0.35) GOTO 161
  152 ID(1)= IDEV(I)
      DO 158 K=1,4
      IF(DATES(K).EQ.10H          ) GOTO 159
      L = HIST(I,K)*10.0+1.5
      IF(L.GE.51) GOTO 156
      IF(L.GT.10) GOTO 154
      PRINT 153,ID(K),DATES(K),IPLOT(L) 
  153 FORMAT(1X,3A10,'.') 
      GOTO 158
  154 PRINT 155,ID(K),DATES(K),SPLAT(1:L) 
  155 FORMAT(1X,2A10,A) 
      GOTO 158
  156 L = 51
      PRINT 157,ID(K),DATES(K),HIST(I,K)
  157 FORMAT(1X,2A10,5(10H**********),'* (',F5.1,')') 
  158 CONTINUE
  159 PRINT 160 
  160 FORMAT(31X,'.') 
  161 CONTINUE
      PRINT 160 
      PRINT 162,NUNITS
  162 FORMAT(20X,'PERFORMANCE GOAL',//, 
     1/,6X,'THERE ARE ',A3,' DISK UNITS ATTACHED TO THIS SYSTEM. ', 
     2/,6X,'ONLY THOSE UNITS WITH AVERAGE DAILY ERROR RATES OF .4 ',
     3/,6X,'OR MORE ARE PLOTTED ABOVE.',///)
  
***  13. PRINT STATISTICS RELATIVE TO NUMBER AND TYPES OF ERRORS
*        ENCOUNTERED DURING THIS REPORT PERIOD.  THESE FACTS ARE TO BE
*        USED TO JUSTIFY CHANGES TO THE OPERATING SYSTEM ERROR LOGGING
*        PROCESS AND TO HPA.
  
      IF(IERRS.EQ.0) GOTO 999 
      P1 = INP
      P2 = IERRS
      P3 = IFALSE 
      P4 = IGLOBAL
      IREAL = IERRS - IFALSE
      P5 = IREAL
      P = P1/P2*100.0 
      Q = P3/P2*100.0 
      R = 0.0 
      S = P5/P2*100.0 
      IF(IGLOBAL.EQ.0) GOTO 170 
      R = P4/P3*100.0 
  170 PRINT 171,IERRS,FDAY(2),FDAY(1),IFALSE,Q,IREAL,S,INP,IERRS,P, 
     1IGLOBAL,IFALSE,R
  171 FORMAT(2X,I4,' DISK UNIT ERRORS OCCURRED FOR THE PERIOD ',A10,
     1' - ',A10,
     1/,2X,I4,' OF THE ERRORS OCCURRED ON KNOWN SOFT FLAWS (',F5.1,'%)',
     2/,2X,I4,' OF THE ERRORS WERE NOT ON KNOWN SOFT FLAWS (',F5.1,'%)',
     3/,
     4/,2X,I4,' OF THE ',I4,' TOTAL ERRORS OCCURRED ON UNKNOWN DISK PACK
     5S (',F5.1,'%)', 
     6/,2X,I4,' OF THE ',I4,' SOFT FLAW ERRORS OCCURRED ON UNCONFIRMED D
     7ISK PACKS (',F5.1,'%)',/) 
      PRINT 382,DAYS
 382  FORMAT(4X,I2,1X,'DAYS PROCESSED DURING THIS CALENDER WEEK',/) 
      IF(ISKIP.EQ.0) GO TO 390
      PRINT 380,ISKIP 
 380  FORMAT(4X,I2,1X,'DAYS SKIPPED ON OLDHF')
      ISKI = 7-ISKIP
      IF(ISKIP.LT.7) GO TO 320
      IF(ISKIP.EQ.7) GO TO 330
      IF(ISKIP.GT.7) GO TO 340
320   PRINT 325,ISKI
 325  FORMAT(7X,'RERUN DSPLOT IN',1X,I2,1X,'DAYS TO STAY CURRENT')
      GO TO 390 
330   PRINT 335 
 335  FORMAT(7X,'RUN DSPLOT AGAIN TODAY TO BECOME CURRENT') 
      GO TO 390 
340   PRINT 345 
 345  FORMAT(7X,'RERUN UNTIL DAYS SKIPPED ARE .LT. 7',///)
***   13A. SORT DATA ON THE NUMBER OF ERRORS BY MFID.CHANNEL
*          AFTER THE DATA IS SORTED, PRINT IT.
*          AN ERROR WILL RESULT IF MORE THAN 100 COMBINATIONS OF
*          MFID/CHANNEL ARE FOUND.
* 
390   DO 4000 NC = 1,100
      IF (NCHT(NC).EQ.0) GO TO 4003 
4000  CONTINUE
      NC = 101
4003  NC = NC-1 
      DO 4010 I=1,NC
      K = I 
      DO 4005 L=I,NC
      MFID1 = NCHT(L).AND.O"77000000" 
      MFID2 = NCHT(I).AND.O"77000000" 
      MFID3 = NCHT(K).AND.O"77000000" 
      IF (MFID1.NE.MFID2) GO TO 4020
      IF (MFID1.NE.MFID3) GO TO 4011
      NCH1 = NCHT(L).AND.O"7777"
      NCH2 = NCHT(K).AND.O"7777"
      IF  (NCH1.LT.NCH2) K = L
      GO TO 4005
4011  IF (MFID1.LT.MFID3) K = L 
4005  CONTINUE
      IF(K.EQ.I) GO TO 4010 
      NSWAP = NCHT(I) 
      NCHT(I) = NCHT(K) 
      NCHT(K) = NSWAP 
      NSWAP = NCHE(I) 
      NCHE(I) = NCHE(K) 
      NCHE(K) = NSWAP 
4010  CONTINUE
      GO TO 4100
4020  DO 4025 NE = L,NC 
      MFID4 = NCHT(NE).AND.O"77000000"
      IF (MFID4.GT.MFID3) GO TO 4025
      IF (MFID4.LT.MFID1) K = NE
      NCH3 = NCHT(NE).AND.O"7777" 
      IF (NCH3.LT.NCH2) K = NE
4025  CONTINUE
      IF (K.EQ.I) GO TO 4010
      NSWAP = NCHT(I) 
      NCHT(I) = NCHT(K) 
      NCHT(K) = NSWAP 
      NSWAP = NCHE(I) 
      NCHE(I) = NCHE(K) 
      NCHE(K) = NSWAP 
      GO TO 4010
4100  PRINT 8998
8998  FORMAT(1H1,5X,'ERROR DISTRIBUTION BY MAINFRAME ID AND CHANNEL',// 
     1,6X,'SOFT FLAWS, PACK SERIAL ENTRIES, AND CONTROLWARE ',/ 
     2,6X,'LOAD ENTRIES ARE EXCLUDED FROM THIS LIST.',//
     3,6X,'MFID-CH  ERRORS',/ 
     4,6X,'-------  ------',) 
* 
8997  FORMAT(3X,A10,3X,I4.4)
      DO 8020 I=1,100 
      IF(NCHT(I).EQ.0) GO TO 8021 
      PRINT 8997,NCHT(I),NCHE(I)
8020  CONTINUE
***  14. IF SENSE SWITCH ONE IS OFF, SORT TAPE3 IN THE FOLLOWING
*        ORDER. 
*         A. MAINFRAME ID 
*          B. EST 
*           C. UNIT 
*            D. HEAD
*             E. CYLINDER 
*              F. SECTOR
*               G. SYMPTOM/ERROR CODE 
* 
*        IF SENCE SWITCH 1 IS ON, END THIS RUN... 
8021  CALL SSWTCH(1,IPRI) 
      IF(IPRI.EQ.1) GO TO 9977
      OPEN (6,STATUS='SCRATCH',ACCESS='SEQUENTIAL', 
     1FORM='UNFORMATTED',RECL=80) 
      REWIND 3
      REWIND 6
      CALL SM5SORT (0)
      CALL SM5FROM ('TAPE3')
      CALL SM5TO ('TAPE6')
      CALL SM5MRL (80)
      CALL SM5EL ('T')
      CALL SM5ENR(1200) 
      CALL SM5RETA ('YES')
      CALL SM5KEY (4,6,'BINARY_BITS','A') 
      CALL SM5KEY (17,2,'BINARY','A') 
      CALL SM5KEY (28,6,'BINARY_BITS','A')
      CALL SM5KEY (53,1,'BINARY','A') 
      CALL SM5KEY (51,2,'BINARY','A') 
      CALL SM5KEY (54,1,'BINARY','A') 
      CALL SM5KEY (9,2,'BINARY','A')
      CALL SM5END 
* 
***  15. READ THE SORTED FILE TAPE3, ACCUMULATE A COUNT FOR 
*        THE NUMBER OF TIMES AN ERROR IS REPEATED.  OBTAIN THE
*        SYMPTOM CODE FROM THE OCTAL CODE STORED IN THE SEF.
* 
*        ERRORS ARE PRINTED IN THE ORDER THEY WERE SORTED IN
*        STEP 14.  A DOUBLE SPACE IS PROVIDED BETWEEN EACH
*        HUID/EST.
* 
      PRINT 492 
 492  FORMAT(1H1,//,10X,'ACCUMULATED ERRORS SORTED IN THE FOLLOWING'
     1,' ORDER',/,10X,'MFID,EST,UNIT,HEAD,CYL,TRK,SEC, AND SYMPTOM' 
     2,' CODE',//,5X,'THE QUANTITY IS BUMPED WHEN THE MFID,EST, SY' 
     3  ,'MTOM CODE, HEAD, ',/,15X,'CYLINDER, SECTOR, AND UNIT' 
     4,' ALL MATCH',//,5X,'(*) THESE ERRORS ARE NOT CONSIDERED TO BE '
     5,'DRIVE TYPE ERRORS',/,11X,'THEY WERE NOT INCLUDED IN THE PREV' 
     6,'IOUS REPORTS',//) 
      PRINT 491 
491   FORMAT(8X,'M CHANNEL  CHANNEL',10X,'SYMPTOM',18X,'PACK',
     14X,'TOTAL',/,1X,'DT EST F NBR QTY  NBR QTY EQ UN',4X,'CODE',5X, 
     2'CYL   HD  SEC   NUMBER   QTY   *',/,1X,'-- --- - -- ----  --'
     3,' ---- -- --    -------  ----  --  ---  --------  ----  -')
      REWIND 6
      ICHQTY = 1
      ICHQTY1 = 0 
      ICH=ICH1=ICHA=O"77" 
      IQTY = 1
      IUNMES = 0
      IR = 0
      IRD = 0 
 397  READ (6,END=10009) IN 
10009 IF (EOF(6)) 400,395,400 
395   IR=0
      IDT = IN(2).AND.O"3777" 
      IUD = SHIFT(IN(2),-12).AND.O"7777"
      ISC = IN(1).AND.O"7777" 
      IHD = SHIFT(IN(6),-42).AND.O"77"
      ICY = SHIFT(IN(6),-48).AND.O"7777"
      ISE = SHIFT(IN(6),-36).AND.O"77"
      ICH = SHIFT(IN(2),-36).AND.MASKCH 
      IEQ = SHIFT(IN(1),-33).AND.MASKEQ 
      IUN = SHIFT(IN(1),-27).AND.MASKUN 
      IPN = SHIFT(IN(5),-12).AND.O"7777777777777777"
      IF(IPN.EQ.0) IPN = 10H  UNKNOWN 
      IF(IPN.EQ.IBLANK) IPN = 10H  UNKNOWN
      MFID = SHIFT(IN(1),9).AND.O"77" 
      IF(MFID.EQ.0) MFID = 1H 
      IRD = IRD+1 
      IF((IUD.EQ.IUD1).AND.(MFID.EQ.MFID1).AND.(ISC.EQ.ISC1).AND
     A.(IHD.EQ.IHD1)
     1.AND.(ICY.EQ.ICY1).AND.(ISE.EQ.ISE1).AND.(IUN.EQ.IUN1)) 
     2GOTO 1500 
      GOTO 1512 
 1500 IF(IUNMES.GE.16) IUNMES = IUNMES + 1
      IF(ICH.NE.ICH1) GO TO 1510
      ICHQTY = ICHQTY+1 
      GO TO 1560
1510  ICHA = ICH
      ICHQTY1 = ICHQTY1+1 
1560  IQTY = IQTY+1 
      GO TO 397 
* 
1512  IF(IRD.EQ.1) GO TO 1520 
      IF((IUD.EQ.IUD1).AND.(MFID.EQ.MFID1)) IUNMES = IUNMES+1 
      GO TO 1530
* 
1520  IDT1 = IDT
      IUD1 = IUD
      ISC1 = ISC
      IHD1 = IHD
      ICY1 = ICY
      ISE1 = ISE
      IPN1 = IPN
      MFID1 = MFID
      ICH1 = ICH
      IEQ1 = IEQ
      IUN1 = IUN
      ICH=ICHA=O"77"
      GO TO 397 
* 
1530  IMC = IFERR(ISC1) 
      IERC = ICHQTY + ICHQTY1 
      DO 2021 IZ=1,20 
      IF(IERTB(IZ).EQ.10H          ) GO TO 2010 
      IF(IERTB(IZ).NE.IMC) GO TO 2021 
      IERCT(IZ) = IERCT(IZ) + IERC
      GO TO 2031
2010  IERTB(IZ) = IMC 
      IERCT(IZ) = IERC
      GO TO 2031
2021  CONTINUE
2031  IF((IUNMES.GE.16).AND.(IUD.EQ.IUD1)) GO TO 1535 
      IF((IUNMES.GE.16).AND.(IUD.NE.IUD1)) GO TO 1550 
      IMD = SHIFT(IMC,-24).AND.O"7777"
      IF(IMD.NE.2HEC) GO TO 2032
      IMD = IMC.AND.O"777777" 
      IF((IMD.LE.3H037).OR.((IMD.GT.3H044).AND.(IMD.LE.3H077))) 
     1GO TO 1585
2032  IF (IMC.EQ.10H    EC0102) GO TO 1585
      IF(IMC.EQ.10H    EC0103) GO TO 1585 
      IF(IMC.EQ.10H    EC0111) GO TO 1585 
      IF(IMC.EQ.10H    EC0115) GO TO 1585 
      IF(IMC.EQ.10H    EC0125) GO TO 1585 
      IF(IMC.EQ.10H    EC0127) GO TO 1585 
      IF(IMC.EQ.10H    EC0151) GO TO 1585 
      IF(IMC.EQ.10H    EC0154) GO TO 1585 
      IF(IMC.EQ.10H    EC0403) GO TO 1585 
      IF(IMC.EQ.10H   SC100  ) GO TO 1585 
      IF(IMC.EQ.10H   SC101  ) GO TO 1585 
      IF(IMC.EQ.10H   SC322  ) GO TO 1585 
      IF(IMC.EQ.10H   SC102  ) GO TO 1585 
      IF(IMC.EQ.10H   SC201  ) GO TO 1585 
      IF(IMC.EQ.10H   SC202  ) GO TO 1585 
      IF(IMC.EQ.10H   SC203  ) GO TO 1585 
      IF(IMC.EQ.10H   SC231  ) GO TO 1585 
      IF(IMC.EQ.10H   SC232  ) GO TO 1585 
      IF(IMC.EQ.10H   SC233  ) GO TO 1585 
      IF(IMC.EQ.10H   SC100-R) GO TO 1585 
      IF(IMC.EQ.10H   SC100-U) GO TO 1585 
      IF(IMC.EQ.10H   SC101-R) GO TO 1585 
      IF(IMC.EQ.10H   SC101-U) GO TO 1585 
      IF(IMC.EQ.10H   SC105-R) GO TO 1585 
      IF(IMC.EQ.10H   SC105-U) GO TO 1585 
      IF(IMC.EQ.10H   SC106-R) GO TO 1585 
      IF(IMC.EQ.10H   SC106-U) GO TO 1585 
      IF(IMC.EQ.10H   SC107-R) GO TO 1585 
      IF(IMC.EQ.10H   SC107-U) GO TO 1585 
      IF(IMC.EQ.10H   SC201-R) GO TO 1585 
      IF(IMC.EQ.10H   SC201-U) GO TO 1585 
      IF(IMC.EQ.10H   SC202-R) GO TO 1585 
      IF(IMC.EQ.10H   SC202-U) GO TO 1585 
      IF(IMC.EQ.10H   SC222-R) GO TO 1585 
      IF(IMC.EQ.10H   SC222-U) GO TO 1585 
      IF(IMC.EQ.10H   SC231-R) GO TO 1585 
      IF(IMC.EQ.10H   SC231-U) GO TO 1585 
      IF(IMC.EQ.10H   SC232-R) GO TO 1585 
      IF(IMC.EQ.10H   SC232-U) GO TO 1585 
      IF(IMC.EQ.10H   SC233-R) GO TO 1585 
      IF(IMC.EQ.10H   SC233-U) GO TO 1585 
      IF(IMC.EQ.10H   SC322-R) GO TO 1585 
      IF(IMC.EQ.10H   SC322-U) GO TO 1585 
      IMD = IMC.AND.O"77777777777777770000" 
      IF(IMD.EQ.10H   SC600  ) GO TO 1585 
      IF(IMD.EQ.10H   SC601  ) GO TO 1585 
      IF(IMD.EQ.10H   SC602  ) GO TO 1585 
      IF(IMD.EQ.10H   SC603  ) GO TO 1585 
      IF(IMD.EQ.10H   SC611  ) GO TO 1585 
      IF(IMD.EQ.10H   SC610  ) GO TO 1585 
      IF(IMD.EQ.10H   SC606  ) GO TO 1585 
      IF(IMD.EQ.10H   SC604  ) GO TO 1585 
      IF(IMD.EQ.10H   SC605  ) GO TO 1585 
      IF(IMD.EQ.10H   SC607  ) GO TO 1585 
* 
      IF(ICHA.EQ.O"77") GO TO 1540
* 
      PRINT 1577,IDT1,IUD1,MFID1,ICH1,ICHQTY,ICHA,ICHQTY1,IEQ1
     1,IUN1,IMC,ICY1,IHD1,ISE1,IPN1,IQTY
1535  ICHQTY1=0 
      ICHQTY = 1
      IQTY = 1
      IF(ILAST.EQ.3HYES) GO TO 9930 
      IF(IUD.NE.IUD1) PRINT 1576
      IF(IUD.NE.IUD1) IUNMES = 0
1576  FORMAT(1H ) 
      GO TO 1520
1577  FORMAT(1X,R2,1X,O3,1X,R1,1X,O2,'-',I4.4,2X,O2,'-',I4.4,1X,O2
     1,1X,O2,1X,A10,2X,O4,2X,O2,2X,O2,3X,R8,2X,I4.4)
* 
1540  PRINT 1575,IDT1,IUD1,MFID,ICH1,ICHQTY,IEQ1,IUN1,IMC,ICY1
     1,IHD1,ISE1,IPN1,IQTY
      GO TO 1535
1575  FORMAT(1X,R2,1X,O3,1X,R1,1X,O2,'-',I4.4,4X,'-',5X,O2,1X,O2
     1,1X,A10,2X,O4,2X,O2,2X,O2,3X,R8,2X,I4.4)
* 
1585  PRINT 1587,IUD1,MFID1,ICH1,ICHQTY,IEQ1,IUN1,IMC,IPN1,IQTY 
1587  FORMAT(' CH ',O3,1X,R1,1X,O2,'-',I4.4,4X,'-',5X,O2,1X,O2
     1,1X,A10,17X,R8,2X,I4.4,2X,'*')
      GO TO 1535
* 
1550  IUNMES = IUNMES-15
      PRINT 1574,IDT1,IUD1,IUNMES 
      GO TO 1535
1574  FORMAT(1X,R2,1X,O4,2X,'--- ERROR LIMIT ---',2X,I4.4 
     1,1X,' ADDITIONAL ERRORS. SEE HPA')
* 
 400  IR=IR+1 
      IF(IR.LT.2) GO TO 397 
      ILAST = 3HYES 
      GO TO 1530
* 
9930  PRINT 493,IRD 
493   FORMAT(//,15X,I4.4,2X,'ENTRIES PROCESSED')
*** 
* 
*     16. PRINT THE DESCRIPTION OF THE FIRST 20 ERROR/SYMPTOM 
*         CODES LISTED IN THE LAST REPORT 
* 
      PRINT 3000
3000  FORMAT (1H1,/,20X,' ERROR CODE DESCRIPTIONS ',
     1/,20X,' ----------------------- ',
     2//,2X,' THE FOLLOWING OUTPUT IS INTENDED TO PROVIDE THE CE WITH A 
     3LIST OF ERROR ',
     4/,2X,' CODE OR SYMPTOM CODE DESCRIPTIONS FOR THE FIRST TWENTY ' 
     5,'ERROR TYPES FOUND',/,3X,'IN THE ABOVE REPORT.',//)
* 
      I      = 0
      K      =0 
      REWIND 5
      DO 3240 I = 1,20
      IFLAG1 = 0
      IFLAG2 = 0
      IF(IERCT(I).EQ.0) GO TO 9977
* 
3220  READ (5,3221,END=10010) IERMSG
3221  FORMAT(BZ,8A10) 
10010 IF(EOF(5))3222,3226,3222
* 
3222  IFLAG1 = IFLAG1 + 1 
      IF (IFLAG1.EQ.1) GOTO 3223
      GOTO 3224 
* 
3223  REWIND 5
      GO TO 3220
* 
3224  REWIND 5
      JSC = IERTB(I)
      DO 3125 L = 1,9 
      IF((JSC.AND.O"77000000000000000000").NE.(O"55000000000000000000") 
     1) GO TO 3126
      JSC = (SHIFT(JSC,6).OR.(O"55")) 
3125  CONTINUE
3126  JSK = IERCT(I)
      PRINT 3225,JSC,JSK
3225  FORMAT (/,1H ,2X,A10,' ERROR MESSAGE OCCURRED ',I5,' TIMES ',/,1H 
     1,13X,'NO TEXT FOUND FOR THIS ERROR/SYMPTOM CODE.')
      GO TO 3240
* 
3226  IZ = IERMSG(1)
      DO 3250 L=1,7 
      IF(IZ.EQ.IERTB(I)) GO TO 3245 
      IZ = SHIFT(IZ,6)
3250  CONTINUE
      GO TO 3230
3245  JSC = IERTB(I)
      DO 3135 L = 1,9 
      IF((JSC.AND.O"77000000000000000000").NE.(O"55000000000000000000") 
     1) GO TO 3136
      JSC = (SHIFT(JSC,6).OR.(O"55")) 
3135  CONTINUE
3136  JSK = IERCT(I)
      IFLAG2 = IFLAG2 + 1 
      IF(IFLAG2.GE.2) GO TO 3228
* 
      PRINT 3227,JSC,JSK,(IERMSG(K),K=2,8)
3227  FORMAT (/,1H ,2X,A10,' ERROR MESSAGE OCCURRED ',I5,' TIMES ',/,1H 
     1,12X,7A10)
      GO TO 3220
* 
3228  LBLNK = (SHIFT(IERMSG(2),6).AND.O"77")
      IF(LBLNK.NE.O"55") GO TO 3300 
      PRINT 3229,(IERMSG(K),K=2,8)
3229  FORMAT (1H ,12X,7A10) 
      GO TO 3220
* 
3230  IF (IFLAG2.EQ.0) GOTO 3220
* 
3240  CONTINUE
      GO TO 9977
3300  PRINT 3305,(IERMSG(K),K=2,8)
3305  FORMAT(1H ,13X,7A10)
      GOTO 3220 
9977  STOP
  999 CONTINUE
      END 
      SUBROUTINE JULE (ADATE) 
**
*     SUBROUTINE JULE CONVERTS DATES IN THE FORMAT YY/MM/DD.
*     TO JULEAN DATES IN THE FORMAT YYDDD 
*     CODE FOR THIS ROUTINE WAS EXTRACTED FROM NORM.
* 
*     ENTRY 
*     ARGUMENT CONTAINS THE DATE TO BE CONVERTED. 
* 
*     EXIT
*     ARGUMENT CONTAINS THE CONVERTED DATE. 
* 
*     CALLS CONDEC
* 
      IMPLICIT INTEGER(A-N) 
      DIMENSION LEAPTBL(12) 
      DATA (LEAPTBL(JMN),JMN=1,12) /0,31,59,90,120,151,181,212
     .,243,273,304,334/ 
* 
      IDY = SHIFT(ADATE,-6).AND.O"7777" 
      IMO = SHIFT(ADATE,-24).AND.O"7777"
      IYR = SHIFT(ADATE,-42).AND.O"7777"
      CALL CONDEC (IYR) 
      IF(IYR.LT.0) GO TO 900
      CALL CONDEC(IMO)
      IF(IMO.LE.0) GO TO 900
      CALL CONDEC(IDY)
      IF(IDY.LT.0) GO TO 900
      IDY = IDY+LEAPTBL(IMO)
* 
*     IF GREATER THAN FEB 
* 
      IF(IDY.GT.60) GO TO 520 
      IYR = IYR-70
      ADATE = SHIFT(IYR,9).OR.IDY 
      GO TO 910 
* 
*     SEE IF LEEP YEAR
* 
520   ITST = IYR
525   ITST = ITST-4 
      IF(ITST.GT.0) GO TO 525 
      IF(ITST.LT.0) GO TO 530 
      IDY = IDY+1 
* 
530   IYR = IYR-70
      ADATE = SHIFT(IYR,9).OR.IDY 
910   CONTINUE
      RETURN
900   PRINT 901, ADATE,IDY,IMO,IYR
901   FORMAT(1X,'BAD DATES ON OLDPD, DATE =',1X,A10,1X,I2,1X,I2,1X,I2)
      STOP
      END 
      SUBROUTINE CONDEC (IWRD)
* 
**
*     SUBROUTINE CONDEC CONVERTS RT JUSTIFIED DECIMAL 
*     DISPLAY CODE DIGITS TO INTEGER
* 
*     ENTRY 
*     ARGUMENT IS DISPLAY CODE WORD TO CONVERT
* 
*     EXIT
*     ARGUMENT IS DESTINATION 
*     SET TO MINUS 1 IF ARGUMENT WAS NON NUMERIC OTHER THAN 
*     BLANK OR ZERO. ROUTINE STOPS AT FIRST 0 OR BLANK
*     CHARACTER.
* 
*   THIS ROUTINE WAS EXTRACTED FROM THE NOS PROGRAM "NORM"
* 
      IMPLICIT INTEGER(A-N) 
      ISIG = 1
      ISCR = IWRD 
      IWRD = 0
      DO 10 J=1,10
      ICHAR = ISCR.AND.O"77"
      IF(ICHAR.GT.O"44") GO TO 30 
      IF(ICHAR.LT.O"33") GO TO 30 
      ICHAR = ICHAR-O"33" 
      IWRD = IWRD+(ICHAR*ISIG)
      ISCR = SHIFT(ISCR,-6) 
      ISIG = ISIG * 10
10    CONTINUE
      GO TO 50
* 
*     CHECK TO SEE IF CHAR BLANK OR 00
* 
30    CONTINUE
      IF(ICHAR.EQ.00) GO TO 50
      IF(ICHAR.EQ.O"55") GO TO 50 
      IWRD = -1 
50    CONTINUE
      RETURN
      END 
          IDENT  MESSAG 
          ENTRY  IFERR
          SST 
         BASE   M 
* 
**
* 
*         ENTRY IFERR 
*         THIS ROUTINE IS SET UP FOR USE AS A LIBRARY FUNCTION
*         ROUTINE OR SUBROUTINE 
* 
*         ENTRY  (A1) = THE ADDRESS OF THE CODE TO
*                       BE CONVERTED
*         EXIT   (X6) = THE CONVERTED VALUE 
* 
*                VALUE IS = TO SCNNNN FOR 844 AND 885 DSA 
*                              ECNNNN FOR ALL OTHER ERRORS
* 
IFERR     EQ     *-1S17        ENTRY/EXIT 
          SB1    D4MIN
          SB2    D4MAX+1
          SB3    D8MIN
          SB4    D8MAX+1
          SA1    X1            ARGUMENT PASSED TO PROG
          SB5    X1 
          LT     B5,B1,IERCD   NOT DSA
          LT     B5,B2,ISC844  844 DSA
          LT     B5,B3,IERCD         DSA NOT DISK 
          LT     B5,B4,ISCFMD  885 DSA
          JP     IERCD         DSA NOT DISK 
* 
**
*    PROGRAM MESSAG 
* 
*    PURPOSE:  SUPPLY AN HPA SYMPTOM CODE IN PLACE OF THE OCTAL CODE
*              STORED IN THE SEF. 
*              SYMPTOM CODES SUPPLIED FOR DISK ERRORS ONLY
*              844 AND 885
* 
*      ISCDSK 
*      SUPPLY ERROR CODE
*        IF THE OCTAL ERROR CODE FROM THE SEF IS NOT WITHIN THE 
*        RANGE OF 844 OR 885 SYMPTOM CODES IT WILL BE PREFIXED
*        WITH THE DISPLAY CODE VALUE "EC" AND RETURNED AS IS. 
*      ISCFMD 
*       SUPPLY A SYMPTOM CODE FOR AN 885
*         CODE SUPPLIED MUST BE IN THE RANGE OF 2700B TO 3177B
*      ISC844 
*       SUPPLY A SYMPTOM CODE FOR AN 844
*         CODE SUPPLIED MUST BE IN THE RANGE OF 1000B TO 1077B
*    EXIT 
*       THE CORRECT SYMPTOM CODE WILL BE STORED IN X6 
*       IN DISPLAY CODE  RIGHT JUSTIFIED WITH BLANK FILL
*  IF THE INPUT CODE COULD NOT BE MATCHED THE PROGRAM WILL
*  EXIT WITH THE CODE UNCHANGED.  X1 = X6 
* 
**
* 
*         THIS SUBROUTINE MATCHES THE ERROR CODE OBTAINED FROM THE
*         CONTENTS OF (A1) WITH THE CONTENTS OF TAGTBL. 
*         THE CORRECT SYSTEM CODE IS THEN EXTRACTED FROM MSGTBL USING 
*         THE INDEX OBTAINED IN THE SEARCH OF TAGTBL. 
*         BOTH MSGTBL AND TAGTBL ARE ORDER DEPENDENT TABLES.
* 
**
* 
*     ISCFMD PROCESSES 885 ERRORS 
* 
ISCFMD    SB6    TAGMAX        MAX TABTBL INDEX+1 
          RJ     SETUP       SET INITIAL VALUES 
MES1      SA2    B1+TAGTBL
MES2      LX2    12D
          BX3    X2*X5       MASK CURRENT PARCEL
          BX4    X3-X1
          ZR     X4,MATCH    FOUND CODE 
          SB2    B2+1        NEXT MSG 
          SB3    B3+1        PARCEL COUNT 
          LT     B3,B7,MES2  NOT LAST PARCEL
          SB3    0           CLEAR PARC COUNT 
          SB1    B1+1        NEXT WD FROM TAGTBL
          GE     B1,B6,IERCD   MATCH NOT FOUND
          JP     MES1 
* 
*         MATCH FOUND 
* 
MATCH     SA2    B2+MSGTBL
          BX6    X2 
          JP     IFERR         EXIT 
* 
*         SUBROUTINE FOR INITIAL SET UP 
* 
SETUP     EQ     *-1S17      ENTRY/EXIT 
          MX5    12D
          LX5    12D         MASK FOR CODE
          SB7    5           MAX CODES PER WORD 
          SB1    0           TAG TABLE INDEX
          SB2    0           MESSAGE TABLE INDEX
          SB3    0           CODE COUNTS CURRENT WD 
          EQ     SETUP
* 
*         PROCESS 844 MESSAGE 
* 
 ISC844   SB6    TGMAX
          RJ     SETUP       SET INITIAL VALUES 
 MESA     SA2    B1+TAGTB 
 MESB     LX2    12D
          BX3    X2*X5       MASK CURRENT VALUE 
          BX4    X3-X1
          ZR     X4,MATCH2   FOUND CODE 
          SB2    B2+1       NEXT MSG
          SB3    B3+1       MESSAGE COUNT 
          LT    B3,B7,MESB
          SB3    0       CLEAR MESSAGE COUNT
          SB1    B1+1       NEXT WORD FROM TGTBL
          GE    B1,B6,IERCD   MATCH NOT FOUND 
          JP    MESA
* 
*         MATCH FOUND FOR 844 
* 
MATCH2    SA2    B2+MSGTB 
          BX6    X2 
          JP     IFERR         EXIT 
* 
*         PROCESS DISK ERROR CODES
* 
IERCD     MX5    12D
          SX6    0
          SB1    0             CHAR COUNT 
          SB2    0             SHIFT COUNT FOR DISP CHAR
          SB3    4             # OF CHAR TO CNVT
          MX5    3
          LX5    3             INTEGER MASK 
          SX4    33B           DISP CODE ADDER
LOOP      BX3    X1*X5         MASK CHAR
          IX3    X3+X4         ADD
          LX3    B2            POSIT CHAR 
          BX6    X3+X6         INSERT CHAR
          SB2    B2+6          INC SHIFT COUNT
          AX1    3             SHIFT ARGUMENT 
          SB1    B1+1          INC CHAR COUNT 
          LT     B1,B3,LOOP    NOT DONE 
          SA1    MASK 
          BX6    X1+X6
          LX6    6
          JP     IFERR         EXIT 
* 
MASK      DATA   55555555050300000000B
*                         E C N N N N 
* 
**
* 
*     THESE CODES AND MESSAGES ARE FOR 844'S
* 
* 
*  TGMAX CONTAINS THE MAXIMUM NUMBER OF WORDS IN THE 844 SYMTOM CODE
*  REFERANCE TABLE  (#OF ENTRIES /5)
* 
 TGMAX    EQU    12D
* 
 TAGTB    VFD    12/D4100,12/D4101,12/D4322,12/D4102,12/D4201 
          VFD    12/D4300,12/D4301,12/D4303,12/D4302,12/D4304 
          VFD    12/D4305,12/D4306,12/D4321,12/D4307,12/D4308 
          VFD    12/D4309,12/D4310,12/D4312,12/D4311,12/D4313 
          VFD    12/D4314,12/D4315,12/D4316,12/D4317,12/D4318 
          VFD    12/D4319,12/D4320,12/D4200,12/D4202,12/D4203 
          VFD    12/D4206,12/D4246,12/D4207,12/D4247,12/D4209 
          VFD    12/D4249,12/D4210,12/D4250,12/D4211,12/D4251 
          VFD    12/D4204,12/D4205,12/D4212,12/D4252,12/D4213 
          VFD    12/D4253,12/D4214,12/D4254,12/D4216,12/D4217 
          VFD    12/D4218,12/D4103,12/D4104,12/D4105,12/D4230 
          VFD    12/D4231,12/D4232,12/D4233,24/00000000 
* 
 MSGTB    VFD   60/10A   SC100
* 
          VFD    60/10A   SC101 
          VFD    60/10A   SC322 
          VFD    60/10A   SC102 
          VFD    60/10A   SC201 
          VFD    60/10A   SC300 
          VFD    60/10A   SC301 
          VFD    60/10A   SC303 
          VFD    60/10A   SC302 
          VFD    60/10A   SC304 
          VFD    60/10A   SC305 
          VFD    60/10A   SC306 
          VFD    60/10A   SC321 
          VFD    60/10A   SC307 
          VFD    60/10A   SC308 
          VFD    60/10A   SC309 
          VFD    60/10A   SC310 
          VFD    60/10A   SC312 
          VFD    60/10A   SC311 
          VFD    60/10A   SC313 
          VFD    60/10A   SC314 
          VFD    60/10A   SC315 
          VFD    60/10A   SC316 
          VFD    60/10A   SC317 
          VFD    60/10A   SC318 
          VFD    60/10A   SC319 
          VFD    60/10A   SC320 
          VFD    60/10A   SC200 
          VFD    60/10A   SC202 
          VFD    60/10A   SC203 
          VFD    60/10A   SC206 
          VFD    60/10A   SC246 
          VFD    60/10A   SC207 
          VFD    60/10A   SC247 
          VFD    60/10A   SC209 
          VFD    60/10A   SC249 
          VFD    60/10A   SC210 
          VFD    60/10A   SC250 
          VFD    60/10A   SC211 
          VFD    60/10A   SC251 
          VFD    60/10A   SC204 
          VFD    60/10A   SC205 
          VFD    60/10A   SC212 
          VFD    60/10A   SC252 
          VFD    60/10A   SC213 
          VFD    60/10A   SC253 
          VFD    60/10A   SC214 
          VFD    60/10A   SC254 
          VFD    60/10A   SC216 
          VFD    60/10A   SC217 
          VFD    60/10A   SC218 
          VFD    60/10A   SC103 
          VFD    60/10A   SC104 
          VFD    60/10A   SC105 
          VFD    60/10A   SC230 
          VFD    60/10A   SC231 
          VFD    60/10A   SC232 
          VFD    60/10A   SC233 
* 
* 
*     TAGMAX AND MSGTB ARE FOR PROCESSING 885 ERRORS
* 
*         TAGMAX EQUALS THE NUMBER OF LOCATIONS IN THE TABLE
*         TAGTBL.  (TAGMAX = #OF ENTRIES/5) 
 TAGMAX   EQU    45D
* 
 TAGTBL   VFD    12/D8100R,12/D8100U,12/D8322R,12/D8322U,12/D8101R
          VFD    12/D8101U,12/D8107R,12/D8107U,12/D8106R,12/D8233R
          VFD    12/D8201R,12/D8354R,12/D8301R,12/D8221R,12/D8345R
          VFD    12/D8300R,12/D8330R,12/D8230R,12/D8230R4,12/D8230R0
          VFD    12/D8230R1,12/D8230R2,12/D8230R3,12/D8230R5,12/D8308R
          VFD    12/D8309R,12/D8346R,12/D8349R,12/D8347R,12/D8343R
          VFD    12/D8348R,12/D8331R,12/D8332R,12/D8333R,12/D8334R
          VFD    12/D8336R,12/D8350R,12/D8341R,12/D8340R,12/D8337R
          VFD    12/D8339R,12/D8344R,12/D8338R,12/D8315R,12/D8351R
          VFD    12/D8355R,12/D8319R,12/D8353R,12/D8320R,12/D8204R
          VFD    12/D8206R,12/D8206R4,12/D8206R0,12/D8206R1,12/D8206R2
          VFD    12/D8206R3,12/D8206R5,12/D8213R,12/D8213R4,12/D8213R0
          VFD    12/D8213R1,12/D8213R2,12/D8213R3,12/D8213R5,12/D8222R
          VFD    12/D8222R4,12/D8222R0,12/D8222R1,12/D8222R2,12/D8222R3 
          VFD    12/D8222R5,12/D8216R,12/D8202R,12/D8231R,12/D8232R 
          VFD    12/D8103R,12/D8217R,12/D8357R,12/D8358R,12/D8359R
          VFD    12/D8360R,12/D8361R,12/D8362R,12/D8363R,12/D8370R
          VFD    12/D8105R,12/D8207R,12/D8207R4,12/D8207R0,12/D8207R1 
          VFD    12/D8207R2,12/D8207R3,12/D8207R5,12/D8209R,12/D8210R 
          VFD    12/D8211R,12/D8212R,12/D8214R,12/D8214R4,12/D8214R0
          VFD    12/D8214R1,12/D8214R2,12/D8214R3,12/D8214R5,12/D8108R
          VFD    12/D8600R,12/D8601R,12/D8602R,12/D8603R,12/D8611R
          VFD    12/D8610R,12/D8606R,12/D8604R,12/D8605R,12/D8607R
          VFD    12/D8106U,12/D8233U,12/D8201U,12/D8354U,12/D8301U
          VFD    12/D8221U,12/D8345U,12/D8300U,12/D8330U,12/D8230U
          VFD    12/D8230U4,12/D8230U0,12/D8230U1,12/D8230U2,12/D8230U3 
          VFD    12/D8230U5,12/D8308U,12/D8309U,12/D8346U,12/D8349U 
          VFD    12/D8347U,12/D8343U,12/D8348U,12/D8331U,12/D8332U
          VFD    12/D8333U,12/D8334U,12/D8336U,12/D8350U,12/D8341U
          VFD    12/D8340U,12/D8337U,12/D8339U,12/D8344U,12/D8338U
          VFD    12/D8315U,12/D8351U,12/D8355U,12/D8319U,12/D8353U
          VFD    12/D8320U,12/D8204U,12/D8206U,12/D8206U4,12/D8206U0
          VFD    12/D8206U1,12/D8206U2,12/D8206U3,12/D8206U5,12/D8213U
          VFD    12/D8213U4,12/D8213U0,12/D8213U1,12/D8213U2,12/D8213U3 
          VFD    12/D8213U5,12/D8222U,12/D8222U4,12/D8222U0,12/D8222U1
          VFD    12/D8222U2,12/D8222U3,12/D8222U5,12/D8216U,12/D8202U 
          VFD    12/D8231U,12/D8233U,12/D8103U,12/D8217U,12/D8357U
          VFD    12/D8358U,12/D8359U,12/D8360U,12/D8361U,12/D8362U
          VFD    12/D8363U,12/D8370U,12/D8105U,12/D8207U,12/D8207U4 
          VFD    12/D8207U0,12/D8207U1,12/D8207U2,12/D8207U3,12/D8207U5 
          VFD    12/D8209U,12/D8210U,12/D8211U,12/D8212U,12/D8214U
          VFD    12/D8214U4,12/D8214U0,12/D8214U1,12/D8214U2,12/D8214U3 
          VFD    12/D8214U5,12/D8108U,12/D8600U,12/D8601U,12/D8602U 
          VFD    12/D8603U,12/D8611U,12/D8610U,12/D8606U,12/D8604U
          VFD    12/D8605U,12/D8607U,36/000000000000
* 
*     885 MESSAGE TABLE FOR CML DSA ENHANCEMENT 85/04/19
* 
 MSGTBL   VFD    60/10A   SC100-R 
          VFD    60/10A   SC100-U 
          VFD    60/10A   SC322-R 
          VFD    60/10A   SC322-U 
          VFD    60/10A   SC101-R 
          VFD    60/10A   SC101-U 
          VFD    60/10A   SC107-R 
          VFD    60/10A   SC107-U 
          VFD    60/10A   SC106-R 
          VFD    60/10A   SC233-R 
          VFD    60/10A   SC201-R 
          VFD    60/10A   SC354-R 
          VFD    60/10A   SC301-R 
          VFD    60/10A   SC221-R 
          VFD    60/10A   SC345-R 
          VFD    60/10A   SC300-R 
          VFD    60/10A   SC330-R 
          VFD    60/10A   SC230-R 
          VFD    60/10ASC230-4-R- 
          VFD    60/10ASC230-0-R- 
          VFD    60/10ASC230-1-R- 
          VFD    60/10ASC230-2-R- 
          VFD    60/10ASC230-3-R- 
          VFD    60/10ASC230-5-R- 
          VFD    60/10A   SC308-R 
          VFD    60/10A   SC309-R 
          VFD    60/10A   SC346-R 
          VFD    60/10A   SC349-R 
          VFD    60/10A   SC347-R 
          VFD    60/10A   SC343-R 
          VFD    60/10A   SC348-R 
          VFD    60/10A   SC331-R 
          VFD    60/10A   SC332-R 
          VFD    60/10A   SC333-R 
          VFD    60/10A   SC334-R 
          VFD    60/10A   SC336-R 
          VFD    60/10A   SC350-R 
          VFD    60/10A   SC341-R 
          VFD    60/10A   SC340-R 
          VFD    60/10A   SC337-R 
          VFD    60/10A   SC339-R 
          VFD    60/10A   SC344-R 
          VFD    60/10A   SC338-R 
          VFD    60/10A   SC315-R 
          VFD    60/10A   SC351-R 
          VFD    60/10A   SC355-R 
          VFD    60/10A   SC319-R 
          VFD    60/10A   SC353-R 
          VFD    60/10A   SC320-R 
          VFD    60/10A   SC204-R 
          VFD    60/10A   SC206-R 
          VFD    60/10ASC206-4-R- 
          VFD    60/10ASC206-0-R- 
          VFD    60/10ASC206-1-R- 
          VFD    60/10ASC206-2-R- 
          VFD    60/10ASC206-3-R- 
          VFD    60/10ASC206-5-R- 
          VFD    60/10A   SC213-R 
          VFD    60/10ASC213-4-R- 
          VFD    60/10ASC213-0-R- 
          VFD    60/10ASC213-1-R- 
          VFD    60/10ASC213-2-R- 
          VFD    60/10ASC213-3-R- 
          VFD    60/10ASC213-5-R- 
          VFD    60/10A   SC222-R 
          VFD    60/10ASC222-4-R- 
          VFD    60/10ASC222-0-R- 
          VFD    60/10ASC222-1-R- 
          VFD    60/10ASC222-2-R- 
          VFD    60/10ASC222-3-R- 
          VFD    60/10ASC222-5-R- 
          VFD    60/10A   SC216-R 
          VFD    60/10A   SC202-R 
          VFD    60/10A   SC231-R 
          VFD    60/10A   SC233-R 
          VFD    60/10A   SC103-R 
          VFD    60/10A   SC217-R 
          VFD    60/10A   SC357-R 
          VFD    60/10A   SC358-R 
          VFD    60/10A   SC359-R 
          VFD    60/10A   SC360-R 
          VFD    60/10A   SC361-R 
          VFD    60/10A   SC362-R 
          VFD    60/10A   SC363-R 
          VFD    60/10A   SC370-R 
          VFD    60/10A   SC105-R 
          VFD    60/10A   SC207-R 
          VFD    60/10ASC207-4-R- 
          VFD    60/10ASC207-0-R- 
          VFD    60/10ASC207-1-R- 
          VFD    60/10ASC207-2-R- 
          VFD    60/10ASC207-3-R- 
          VFD    60/10ASC207-5-R- 
          VFD    60/10A   SC209-R 
          VFD    60/10A   SC210-R 
          VFD    60/10A   SC211-R 
          VFD    60/10A   SC212-R 
          VFD    60/10A   SC214-R 
          VFD    60/10ASC214-4-R- 
          VFD    60/10ASC214-0-R- 
          VFD    60/10ASC214-1-R- 
          VFD    60/10ASC214-2-R- 
          VFD    60/10ASC214-3-R- 
          VFD    60/10ASC214-5-R- 
          VFD    60/10A   SC108-R 
          VFD    60/10A   SC600-R 
          VFD    60/10A   SC601-R 
          VFD    60/10A   SC602-R 
          VFD    60/10A   SC603-R 
          VFD    60/10A   SC611-R 
          VFD    60/10A   SC610-R 
          VFD    60/10A   SC606-R 
          VFD    60/10A   SC604-R 
          VFD    60/10A   SC605-R 
          VFD    60/10A   SC607-R 
          VFD    60/10A   SC106-U 
          VFD    60/10A   SC233-U 
          VFD    60/10A   SC201-U 
          VFD    60/10A   SC354-U 
          VFD    60/10A   SC301-U 
          VFD    60/10A   SC221-U 
          VFD    60/10A   SC345-U 
          VFD    60/10A   SC300-U 
          VFD    60/10A   SC330-U 
          VFD    60/10A   SC230-U 
          VFD    60/10ASC230-4-U- 
          VFD    60/10ASC230-0-U- 
          VFD    60/10ASC230-1-U- 
          VFD    60/10ASC230-2-U- 
          VFD    60/10ASC230-3-U- 
          VFD    60/10ASC230-5-U- 
          VFD    60/10A   SC308-U 
          VFD    60/10A   SC309-U 
          VFD    60/10A   SC346-U 
          VFD    60/10A   SC349-U 
          VFD    60/10A   SC347-U 
          VFD    60/10A   SC343-U 
          VFD    60/10A   SC348-U 
          VFD    60/10A   SC331-U 
          VFD    60/10A   SC332-U 
          VFD    60/10A   SC333-U 
          VFD    60/10A   SC334-U 
          VFD    60/10A   SC336-U 
          VFD    60/10A   SC350-U 
          VFD    60/10A   SC341-U 
          VFD    60/10A   SC340-U 
          VFD    60/10A   SC337-U 
          VFD    60/10A   SC339-U 
          VFD    60/10A   SC344-U 
          VFD    60/10A   SC338-U 
          VFD    60/10A   SC315-U 
          VFD    60/10A   SC351-U 
          VFD    60/10A   SC355-U 
          VFD    60/10A   SC319-U 
          VFD    60/10A   SC353-U 
          VFD    60/10A   SC320-U 
          VFD    60/10A   SC204-U 
          VFD    60/10A   SC206-U 
          VFD    60/10ASC206-4-U- 
          VFD    60/10ASC206-0-U- 
          VFD    60/10ASC206-1-U- 
          VFD    60/10ASC206-2-U- 
          VFD    60/10ASC206-3-U- 
          VFD    60/10ASC206-5-U- 
          VFD    60/10A   SC213-U 
          VFD    60/10ASC213-4-U- 
          VFD    60/10ASC213-0-U- 
          VFD    60/10ASC213-1-U- 
          VFD    60/10ASC213-2-U- 
          VFD    60/10ASC213-3-U- 
          VFD    60/10ASC213-5-U- 
          VFD    60/10A   SC222-U 
          VFD    60/10ASC222-4-U- 
          VFD    60/10ASC222-0-U- 
          VFD    60/10ASC222-1-U- 
          VFD    60/10ASC222-2-U- 
          VFD    60/10ASC222-3-U- 
          VFD    60/10ASC222-5-U- 
          VFD    60/10A   SC216-U 
          VFD    60/10A   SC202-U 
          VFD    60/10A   SC231-U 
          VFD    60/10A   SC232-U 
          VFD    60/10A   SC103-U 
          VFD    60/10A   SC217-U 
          VFD    60/10A   SC357-U 
          VFD    60/10A   SC358-U 
          VFD    60/10A   SC359-U 
          VFD    60/10A   SC360-U 
          VFD    60/10A   SC361-U 
          VFD    60/10A   SC362-U 
          VFD    60/10A   SC363-U 
          VFD    60/10A   SC370-U 
          VFD    60/10A   SC105-U 
          VFD    60/10A   SC207-U 
          VFD    60/10ASC207-4-U- 
          VFD    60/10ASC207-0-U- 
          VFD    60/10ASC207-1-U- 
          VFD    60/10ASC207-2-U- 
          VFD    60/10ASC207-3-U- 
          VFD    60/10ASC207-5-U- 
          VFD    60/10A   SC209-U 
          VFD    60/10A   SC210-U 
          VFD    60/10A   SC211-U 
          VFD    60/10A   SC212-U 
          VFD    60/10A   SC214-U 
          VFD    60/10ASC214-4-U- 
          VFD    60/10ASC214-0-U- 
          VFD    60/10ASC214-1-U- 
          VFD    60/10ASC214-2-U- 
          VFD    60/10ASC214-3-U- 
          VFD    60/10ASC214-5-U- 
          VFD    60/10A   SC108-U 
          VFD    60/10A   SC600-U 
          VFD    60/10A   SC601-U 
          VFD    60/10A   SC602-U 
          VFD    60/10A   SC603-U 
          VFD    60/10A   SC611-U 
          VFD    60/10A   SC610-U 
          VFD    60/10A   SC606-U 
          VFD    60/10A   SC604-U 
          VFD    60/10A   SC605-U 
          VFD    60/10A   SC607-U 
          END 
          IDENT COMERR
          ENTRY STERMS
          SST 
* 
**
* 
*     THIS PROGRAM IS USED TO STORE THE OCTAL EQUIVALENCE OF HPA
*     SYMPTOM CODES INTO COMMON STORAGE AREA FOR USE BY DSPLOT. 
* 
*     THE SYMBOLS SPECIFIED HERE ARE TO BE SATISFIED BY THE TEXT
*     FILE (HPTEXT) 
* 
*     THE MACRO (STERR) IS USED TO STORE THE DATA IN THE COMMON 
*     STORAGE AREA. 
*     WHEN CALLED THE MACRO ASSUMES THE ADDRESS TO BE STORED IN IS
*     IN REGISTER B1.  THE DATA OR SYMTOM CODE VALUE TO BE STORED 
*     IS SUPPLIED WITH THE MACRO CALL.THE VALUE OF B1 WILL BE 
*     INCREASED BY ONE AFTER THE DATA IS STORED.  B1 IS USED FOR THE
*     INDEX INTO THE COMMON STORAGE AREA. 
* 
*     MACRO CALL EXAMPLE: 
*    STERR  EC001      EC001 WILL EQUAL THE VALUE 0001 AS 
*      RETRIEVED FROM HPTEXT
*    STERR  T71301R    T71301R WILL BE 1771B AT CML LV167 
* 
* 
 STERR    MACRO  EC 
          SX7 EC
          SA7 B1       STORE SYMTOM CODE IN COMMON
          SB1 B1+1       INCORMENT ADDRESS
          ENDM
* 
*  COMMON AREA
* 
          USE    /IERR/ 
 IERR     BSSZ   62D
          USE    *
* 
*     DATA STORAGE
* 
 STERMS   EQ     *-1S17        ENTRY/EXIT 
          SB1    IERR 
* 
          STERR  EC102       RMS ERRORS 
          STERR  EC103       DUAL ACCESS COUPLER RSVD 
          STERR  EC111       ADDR BYTE NOT ACCPT
          STERR  EC115       DISK PACK S/N MSG ENTRY
          STERR  EC125       INVALID COMMAND
          STERR  EC127       DEAD MAN TIMER 
          STERR  EC151       FIRMWARE REVISION MSG ENTRY
          STERR  EC152       DSC HARDWARE ERROR 
      STERR EC154       RMS ABNORMAL ERROR
      STERR EC403       FUNCTION TIME OUT 
* 
*     D44 CONTROLER/CHANNEL ERROR CODES 
* 
          STERR  D4100       COUPLER RSVD OTHER ACCESS
          STERR  D4101       DSU RSVD OTHER ACCESS
          STERR  D4102       DSC CHANNEL PARITY ERROR 
          STERR  D4201       DSC INVAID COMMAND 
          STERR  D4200       DSC MEMORY PARITY ERROR
          STERR  D4202       DEAD MAN TIMER EXPIRED 
          STERR  D4203       DSC HARDWARE ERROR 
          STERR  D4231       FMD PROCESSOR TIME OUT 
          STERR  D4232       FMD BUFFER MEMORY PARITY ERROR 
          STERR  D4233       FMD DATA PARITY ERROR
* 
*   FMD CONTROLER/CHANNEL ERRORS
* 
          STERR  D8100R        COUPLER RSVD OTHER CHANNEL 
          STERR  D8100U 
          STERR  D8322R        FUNCTION REJECT DSU BUSY 
          STERR  D8322U 
          STERR  D8101R        DSU RSVD OTHER ACCESS
          STERR  D8101U 
          STERR  D8107R        SOFTWARE ADDRESS ERROR 
          STERR  D8107U 
          STERR  D8106R        AUTOLOAD ERROR 
          STERR  D8201R        BAD COMMAND/PARAM
          STERR  D8105R        ABNORMAL, NO CAUSE 
          STERR  D8105U 
          STERR  D8106U        AUTOLOAD ERROR 
          STERR  D8201U        BAD COMMAND/PARAM
          STERR  D8202R        DEAD MAN TIMER EXPIRED 
          STERR  D8202U 
          STERR  D8231R        PROCESSOR TIMEOUT
          STERR  D8231U 
          STERR  D8232R        BUFFER MEMORY PARITY ERROR 
          STERR  D8232U 
          STERR  D8233R        DSC DATA PARITY ERROR
          STERR  D8233U 
* 
*   PARALLEL FMD CONTROLLER TYPE ERRORS 
* 
          STERR  D8600R        LSP NO FUNCTION REPLY
          STERR  D8600U 
          STERR  D8601R        LSP NO STATUS
          STERR  D8601U 
          STERR  D8602R        LSP STATUS PARITY ERROR
          STERR  D8602U 
          STERR  D8603R        LSP BUFFER MEMORY PARITY 
          STERR  D8603U 
          STERR  D8611R        LSP H.S. XFER-ENABLE 
          STERR  D8611U 
          STERR  D8610R        LSP ADDRESS-ENABLE 
          STERR  D8610U 
          STERR  D8606R        LSP ESM DOUBLE BIT 
          STERR  D8606U 
          STERR  D8604R        LSP NO ACCEPT
          STERR  D8604U 
          STERR  D8605R        LSP ABORT ADDRESS
          STERR  D8605U 
          STERR  D8607R        LSP CHANNEL PARITY ERROR 
          STERR  D8607U 
* 
          JP     STERMS        EXIT TO DSPLOT 
          END 
