! ************************** AMUS Program Label ******************************
! Filename: TSTDSK.BAS                                        Date: 09/01/89
! Category: Test suspect disk  Hash Code: 762-221-365-506   Version: 1.0(100)
! Initials: AODP/AM       Name: GARY D. CHESSER
! Company: EmergiTech                              Telephone #: 61488666712
!
! Related Files: AMOS.SBR,REWRIT.LIT,REDALL.LIT,BLOCKS.SBR
! Min. Op. Sys.: 1.3                           Expertise Level: INT
! Special: EMULAT A PRINTER TERMINAL AND RUN THIS PROGRAM ON SUSPECTED BAD
! LOGICAL DISK ON YOUR SYSTEM.
! Description: Print out the total number of free block then
! this program will test every block on a suspect logical disk.
!
!
       PROGRAM TSTDSK, 1.0(100)
!
!REQUIREMENTS:
!
!       BAS:NOTIFY.SBR  ;ON AMUS NETWORK BY STOINER & WILSON
!       BAS:WHOBAS.SBR  ;ON AMUS NETWORK BY EMERGITECH
!       BAS:DAYTIM.SBR  ;ON AMUS NETWORK BY DAVE PALLMANN
!       BAS:JOBPRG.SBR  ;ON AMUS NETWORK BY EMERGITECH
!       BAS:AMOS.SBR    ;ON AMUS NETWORK BY DAVE PALLMANN
!       BAS:BLOCKS.SBR  ;ON AMUS NETWORK BY DALE EICHBAUER
!
!       SYS:REWRIT.LIT  ;STANDARD AMOS PROGRAM
!       SYS:REDALL.LIT  ;STANDARD AMOS PROGRAM
!
!       BAS:ERROR.LOG   ;SEQUENTIAL FILE THAT HOLDS SOFT AND HARD ERRORS

!THIS IS THE MAP1 STATEMENTS FOR JOB AND PROGRAM NAME USED IN JOBPRG
       MAP1 names(40),S,12             ! 40 is not mandatory. Must be > #JOBS

       MAP1    ERR'VARS
               MAP2 ERR'0,B,1          ! Error number
               MAP2 ERR'1,F            ! Error Line Number
               MAP2 ERR'2,F            ! Error File Channel

       MAP1 WHOREC
               MAP2 WHOLOG,S,28
               MAP2 LOGINNAME,S,10

       MAP1 D$,S,8
       MAP1 T$,S,8
       MAP1    PROGRAM'NAME,S,10
       MAP1    CMDLIN,S,80
       MAP1    ERRTYPE,S,50
       MAP1    RESULT,F,6

!THESE ARE ALL NEEDED IN TSTDSK
       MAP1    FSPEC,S,5
       MAP1    CONTIG,F,6
       MAP1    FREE,F,6
       MAP1    COMMAND'LINE,S,12
       MAP1    TRMNAM,S,6
       MAP1    MSP,S,80


!ERROR ROUTINE TO MUST BE CALLED ON AN ERROR
ON ERROR GOTO LOG'ERR

!CMDLIN IS THE LINE THAT IS SENT TO JOB1
       PROGRAM'NAME = "TSTDSK.RUN"
       CMDLIN = "ERROR IN PROGRAM " + PROGRAM'NAME
       CMDLIN = CMDLIN + " VUE ERROR.LOG DSK0:7,6"


       ? TAB(-1,0)
       INPUT "WHAT DISK DO YOU WISH TO TEST >"FSPEC

!              WHERE FSPEC IS A VALID PARTIAL FILESPEC (E.G. "DSK0:"),
!              AND CONTIG & FREE ARE FLOATING POINT VARIABLES ON
!              WORD BOUNDARIES.

               XCALL BLOCKS,FSPEC,CONTIG,FREE

       PRINT FSPEC;" HAS ";CONTIG;"BLOCKS OF CONTIGUOUS SPACE AND"
       PRINT "          ";FREE;"BLOCKS OF TOTAL FREE SPACE"

!PERFORM REDALL ON SUSPECT LOGICAL

       PRINT
       PRINT "Now Reading all of ";FSPEC
               COMMAND'LINE = "REDALL " + FSPEC
                       XCALL AMOS,COMMAND'LINE

!PERFORM REWRIT ON SUSPECT LOGICAL

       PRINT
       PRINT "Now Writing all of ";FSPEC
               CMDLIN = "REWRIT " + FSPEC
                       XCALL AMOS,CMDLIN

!Notify job1 we are done
       XCALL NOTIFY,TRMNAM,MSG

!THIS IS THE END OF THIS PROGRAM
FINISHED:
END

!THIS IS THE ERROR SBRBTHAT IS CALLED ON BY AN ERROR
LOG'ERR:

!FIND PROPER VALUES OF ERROR
               ERR'0 = ERR(0)
               ERR'1 = ERR(1)
               ERR'2 = ERR(2)

!IS THIS A CONTROL C
               IF ERR'0 = 1 THEN END

!TELL JOB1 THAT WE HAVE AN ERROR IN THIS PROGRAM
!CHANGE "TRM1' TO YOUR SYSTEM OPERATORS TRMDEF NAME
       XCALL NOTIFY,"TRM1",CMDLIN

!GET INFO ON THE THIS USERS : JOB NAME,TERMINAL NAME,ALPHA BASE LOGIN

       XCALL WHOBAS,WHOREC

!GET TIME OF DAY & DATE
       XCALL DAYTIM,D$,T$
!LOG THE ERROR INFORMATION IN ERROR.LOG

!GET JOBS AND PROGRAM NAME THEY ARE RUNNING
       XCALL JOBPRG,names(1)           ! note names(1) !!!

!HAS ERROR.LOG BEEN CREATED YET?
LOOKUP "DSK0:ERROR.LOG[7,6]",RESULT

!NOPE THEN CREATE
       IF RESULT = 0 THEN &
               OPEN #98,"DSK0:ERROR.LOG[7,6]",OUTPUT : &
               CLOSE #98

!ELSE APPEND TO ERROR.LOG
       OPEN #99,"DSK0:ERROR.LOG[7,6]",APPEND
       PRINT #99,"ERROR IN PROGRAM " + PROGRAM'NAME;
       PRINT #99,"   TIME: ";T$;
       PRINT #99,"   DATE: ";D$

!WHAT TYPE OF ERROR DO WE HAVE?
       GOSUB ERROR'NUMBER
       PRINT #99,"ERROR IS " + ERRTYPE
       PRINT #99,"ERROR IN LINE NUMBER " + ERR'1
       PRINT #99,"ERROR IN FILE CHANNEL " + ERR'2
       PRINT #99,"JOB = ";WHOLOG[1;6];" ";"TRM = ";WHOLOG[7;6];"LOGINNAME = ";LOGINNAME
       PRINT #99,"----------------------------------------------------------------------------"
       PRINT #99,"JOB   PROGRAM"
       PRINT #99,"*************"

       FOR I = 1 TO 40
               IF names(I) = "" THEN I = 40 &
                                ELSE PRINT #99,names(I)
       NEXT I
       PRINT #99,"----------------------------------------------------------------------------"
       CLOSE #99

!THE ABOVE COULD ALSO CONTAIN INFO ON ERF(X)
!FOR ISAM ERRORS WHERE X = FILE CHANNEL NUMBER IN ISAM STATEMENT

GOTO FINISHED

!THIS SBR WILL FIND THE TYPE OF HARD ERROR WE HAVE
ERROR'NUMBER:

IF ERR'0 = 1 THEN &
ERRTYPE ="Control-C interrupt"

IF ERR'0 = 2 THEN &
ERRTYPE ="System Error"

IF ERR'0 = 3 THEN &
ERRTYPE ="Out of Memory"

IF ERR'0 = 4 THEN &
ERRTYPE ="Out of Data"

IF ERR'0 = 5 THEN &
ERRTYPE        ="Next without FOR"

IF ERR'0 = 6 THEN &
ERRTYPE        ="RETURN without GOSUB"

IF ERR'0 = 7 THEN &
ERRTYPE        ="RESUME without ERROR"

IF ERR'0 = 8 THEN &
ERRTYPE        ="Subscript out of range"

IF ERR'0 = 9 THEN &
ERRTYPE        ="Floating Point overflow"

IF ERR'0 = 10 THEN &
ERRTYPE        ="Divide by zero"

IF ERR'0 = 11 THEN &
ERRTYPE        ="Illegal function value"

IF ERR'0 = 12 THEN &
ERRTYPE        ="XCALL subroutine not found"

IF ERR'0 = 13 THEN &
ERRTYPE        ="File already open"

IF ERR'0 = 14 THEN &
ERRTYPE        ="IO to unopened file"

IF ERR'0 = 15 THEN &
ERRTYPE        ="Record size overflow"

IF ERR'0 = 16 THEN &
ERRTYPE        ="File specification error"

IF ERR'0 = 17 THEN &
ERRTYPE        ="File not found"

IF ERR'0 = 18 THEN &
ERRTYPE        ="Device not ready"

IF ERR'0 = 19 THEN &
ERRTYPE        ="Device full"

IF ERR'0 = 20 THEN &
ERRTYPE        ="Device error"

IF ERR'0 = 21 THEN &
ERRTYPE        ="Device in use"

IF ERR'0 = 22 THEN &
ERRTYPE        ="Illegal user code"

IF ERR'0 = 23 THEN &
ERRTYPE        ="Protection Violation"

IF ERR'0 = 24 THEN &
ERRTYPE        ="Write protected"

IF ERR'0 = 25 THEN &
ERRTYPE        ="File type mismatch"

IF ERR'0 = 26 THEN &
ERRTYPE        ="Device does not exist"

IF ERR'0 = 27 THEN &
ERRTYPE        ="Bitmap kaput"

IF ERR'0 = 28 THEN &
ERRTYPE        ="Disk not mounted"

IF ERR'0 = 29 THEN &
ERRTYPE        ="File already exists"

IF ERR'0 = 30 THEN &
ERRTYPE        ="Redimentioned array"

IF ERR'0 = 31 THEN &
ERRTYPE        ="Illegal record number"

IF ERR'0 = 32 THEN &
ERRTYPE        ="Invalid filename"

IF ERR'0 = 33 THEN &
ERRTYPE        ="Stack overflow"

IF ERR'0 = 34 THEN &
ERRTYPE        ="Invalid syntax code"

IF ERR'0 = 35 THEN &
ERRTYPE        ="Unsupported function"

IF ERR'0 = 36 THEN &
ERRTYPE        ="Invalid subroutine version"

IF ERR'0 = 37 THEN &
ERRTYPE        ="File in use"

IF ERR'0 = 38 THEN &
ERRTYPE        ="Record in use"

IF ERR'0 = 39 THEN &
ERRTYPE        ="Deadly embrace"

IF ERR'0 = 40 THEN &
ERRTYPE        ="File cannot be deleted"

IF ERR'0 = 41 THEN &
ERRTYPE        ="File cannot be renamed"

IF ERR'0 = 42 THEN &
ERRTYPE        ="Record not locked"

IF ERR'0 = 43 THEN &
ERRTYPE        ="Multiple link translation"

IF ERR'0 = 44 THEN &
ERRTYPE        ="LOKSER queue is full"

IF ERR'0 = 45 THEN &
ERRTYPE        ="Device not file structured"

IF ERR'0 = 46 THEN &
ERRTYPE        ="Illegal ISAM sequence"

RETURN