!*************************** AMUS Program Label ******************************
! Filename: DSKDOC.BAS Date: 03/30/90
! Category: UTIL Hash Code: 371-744-067-716 Version: 1.0(100)
! Initials: CHES/AM Name: GARY CHESSER
! Company: EMERGITECH Telephone #: 6148666712
! Related Files: .LIT : GARWRT,GARRED,FIXGAR .SBR : BLOCKS,AMOS,RINKEY,NOECHO
! Min. Op. Sys.: 1.3 Expertise Level: INT
! Special: Everyone should be off your system when running this program.
! Description: Used to diagnose a possible suspect drive. This program has six
! calls which you may use to check out a disk on your system.
!
!*****************************************************************************
!PROGRAMS NEEDED FOR THE DISK DOCTOR
! SYS:GARWRT.LIT
! SYS:GARRED.LIT
! SYS:FIXGAR.LIT
!
! BAS:RINKEY.SBR
! BAS:NOECHO.SBR
! BAS:AMOS.SBR
! BAS:BLOCKS.SBR
!
! DSKDOC.TXT AND DSKDOC.RUN MUST BE IN THE SAME PPN
!
! [SAA] Add few trivial items to show them how to exit program.
! Steve Archuleta, AMUS Staff
!
Program DSKDOC,1.0(100)
MAP1 TITLE,S,30,"Gary Chesser's Disk Doctor"
MAP1 TDATE,B,4
MAP1 T1DATE,@TDATE
MAP2 MONTH,B,1
MAP2 DAY,B,1
MAP2 YEAR,B,1
MAP2 FIL,B,1
MAP1 DRIVE,S,5,"DSK0:"
MAP1 CHOICE,S,1,"D"
MAP1 CMDLIN,S,80
MAP1 DT$,S,8
MAP1 CHAR,B,2
MAP1 CONTIG,F,6
MAP1 FREE,F,6
MAP1 PERCENT,F,6
ON ERROR GOTO ABORT'IT
GET'TITLE:
PRINT TAB(-1,0);TAB(-1,29) !CLEAR SCREEN & TURN OFF CURSOR
GOSUB DSP'TITLE !DISPLAY OUR SCREEN
GET'INPUT:
XCALL NOECHO !NEEDS TO BE SET W/RINKEY
XCALL RINKEY,CHAR !INPUT USER'S SPEC
IF CHAR=0 THEN GOTO GET'INPUT !IF NOTHING GET MORE INPUT
IF CHAR=27 THEN GOTO FINISH !IF ESC THE EXIT PROGRAM
IF CHAR=8 THEN GOSUB GO'LEFT !IF LEFT ARROW MOVE LEFT
IF CHAR=10 THEN GOSUB GO'DOWN !IF DOWN ARROW MOVE DOWN
IF CHAR=11 THEN GOSUB GO'UP !IF UP ARROW MOVE UP
IF CHAR=12 THEN GOSUB GO'RIGHT !IF RIGHT ARROW MOVE RIGHT
IF CHAR=13 THEN GOSUB GO'DOIT !IF RETURN THEN PERFORM USER REQUEST
GOTO GET'INPUT !IF NONE OF ABOVE ANSWERS GET USER REQ
!*****************************************************************************
!DISPLAY MAIN SCREEN FOR USER INPUT
! DEFAULT CHOICE = D FOR DEVICE SPECIFICATIONS
!*****************************************************************************
DSP'TITLE:
GOSUB PROG'CHOICE !DISPLAY USER HELP
? tab(-1,29); !TURN OFF CUSOR
GOSUB GET'DATE
PRINT TAB(1,70);DT$
PRINT TAB(3,22);TAB(-1,32);" ";TITLE;" ";TAB(-1,33)
PRINT TAB(-1,23)
PRINT TAB(5,1);"2ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3";TAB(-1,33)
PRINT TAB(6,1);"62ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ36";TAB(-1,33)
PRINT TAB(7,1);"66 66";TAB(-1,33)
PRINT TAB(8,1);"66 66";TAB(-1,33)
PRINT TAB(9,1);"66 66";TAB(-1,33)
PRINT TAB(10,1);"66 66";TAB(-1,33)
PRINT TAB(11,1);"66 66";TAB(-1,33)
PRINT TAB(12,1);"66 66";TAB(-1,33)
PRINT TAB(13,1);"61ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ56";TAB(-1,33)
PRINT TAB(14,1);"1ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ5";TAB(-1,33)
PRINT TAB(-1,24)
PRINT TAB(7,13);TAB(-1,33);" ";"Help";" ";TAB(-1,33)
PRINT TAB(7,29);TAB(-1,32);" ";"Select Drive";" ";TAB(-1,33)
PRINT TAB(7,53);TAB(-1,33);" ";"Mounted Drives";" ";TAB(-1,33)
PRINT TAB(10,13);TAB(-1,33);" ";"Read";" ";TAB(-1,33)
PRINT TAB(10,33);TAB(-1,33);" ";"Write";" ";TAB(-1,33)
PRINT TAB(10,53);TAB(-1,33);" ";"Statistics";" ";TAB(-1,33)
PRINT TAB(16,30) "Press CTRL-C to EXIT"; ![SAA] Show em how to exit
CHOICE = "D"
RETURN
GET'DATE:
TDATE = DATE
DT$ = (MONTH USING "#Z")+"/"+(DAY USING "#Z")+"/"+&
(YEAR USING "#Z")
RETURN
GO'DOIT:
IF CHOICE = "D" THEN &
? TAB(20,1); : &
INPUT "Input Drive name Ex. DSK0: >";DRIVE
IF CHOICE = "M" THEN &
? TAB (-1,0) : &
CMDLIN = "MOUNT" : &
XCALL AMOS,CMDLIN : &
? TAB(20,1);TAB(-1,32); : &
? TAB(20,26);TAB(-1,33); : &
? TAB(20,2); : &
INPUT "Press return to continue";W
IF CHOICE = "H" THEN &
? TAB (-1,0) : &
CMDLIN = "HELP DSKDOC.TXT" : &
XCALL AMOS,CMDLIN : &
? TAB(23,1);TAB(-1,32) : &
? TAB(23,26);TAB(-1,33); : &
? TAB(23,2); : &
INPUT "Press return to continue";W
IF CHOICE = "R" THEN &
? TAB (-1,0) : &
CMDLIN = "GARRED " + DRIVE : &
XCALL AMOS,CMDLIN
IF CHOICE = "W" THEN &
? TAB (-1,0) : &
CMDLIN = "GARWRT " + DRIVE : &
XCALL AMOS,CMDLIN
IF CHOICE = "S" THEN &
? TAB(-1,0) : &
CMDLIN = "FIXGAR " + DRIVE[1,3] : &
XCALL AMOS,CMDLIN : &
GOSUB GET'BLOCKS : &
? TAB(23,1);TAB(-1,32) : &
? TAB(23,26);TAB(-1,33); : &
? TAB(23,2); : &
INPUT "Press return to continue";W
!start all over again
START'AGAIN:
GOTO GET'TITLE
GET'BLOCKS:
XCALL BLOCKS,DRIVE,CONTIG,FREE
!NOT DEVELOPED YET,IN NEXT REVISION ?
! PERCENT = 100 * (FREE/57680)
PRINT
PRINT DRIVE;" has ";CONTIG;"Blocks of contiguous space and"
PRINT " ";FREE;"Blocks of total free space"
! PRINT " ";PERCENT;" percent of free space available"
RETURN
GO'DOWN:
IF CHOICE = "W" OR CHOICE = "R" OR CHOICE = "S" THEN RETURN
IF CHOICE = "D" THEN &
CHOICE = "W" : &
PRINT TAB(7,13);TAB(-1,33); : &
PRINT TAB(7,29);TAB(-1,33); : &
PRINT TAB(7,53);TAB(-1,33); : &
PRINT TAB(10,13);TAB(-1,33); : &
PRINT TAB(10,33);TAB(-1,32); : &
PRINT TAB(10,53);TAB(-1,33); : &
GOTO DFINISH
IF CHOICE = "H" THEN &
CHOICE = "R" : &
PRINT TAB(7,13);TAB(-1,33); : &
PRINT TAB(7,29);TAB(-1,33); : &
PRINT TAB(7,53);TAB(-1,33); : &
PRINT TAB(10,13);TAB(-1,32); : &
PRINT TAB(10,33);TAB(-1,33); : &
PRINT TAB(10,53);TAB(-1,33); : &
GOTO DFINISH
IF CHOICE = "M" THEN &
CHOICE = "S" : &
PRINT TAB(7,13);TAB(-1,33); : &
PRINT TAB(7,29);TAB(-1,33); : &
PRINT TAB(7,53);TAB(-1,33); : &
PRINT TAB(10,13);TAB(-1,33) : &
PRINT TAB(10,33);TAB(-1,33) : &
PRINT TAB(10,53);TAB(-1,32)
DFINISH:
RETURN
GO'UP:
IF CHOICE = "D" OR CHOICE = "M" OR CHOICE = "H" THEN RETURN
IF CHOICE = "R" THEN &
CHOICE = "H" : &
PRINT TAB(7,13);TAB(-1,32); : &
PRINT TAB(7,29);TAB(-1,33); : &
PRINT TAB(7,53);TAB(-1,33); : &
PRINT TAB(10,13);TAB(-1,33); : &
PRINT TAB(10,33);TAB(-1,33); : &
PRINT TAB(10,53);TAB(-1,33); : &
GOTO UFINISH
IF CHOICE = "W" THEN &
CHOICE = "D" : &
PRINT TAB(7,13);TAB(-1,33); : &
PRINT TAB(7,29);TAB(-1,32); : &
PRINT TAB(7,53);TAB(-1,33); : &
PRINT TAB(10,13);TAB(-1,33); : &
PRINT TAB(10,33);TAB(-1,33); : &
PRINT TAB(10,53);TAB(-1,33); : &
GOTO UFINISH
IF CHOICE = "S" THEN &
CHOICE = "M" : &
PRINT TAB(7,13);TAB(-1,33); : &
PRINT TAB(7,29);TAB(-1,33); : &
PRINT TAB(7,53);TAB(-1,32); : &
PRINT TAB(10,13);TAB(-1,33); : &
PRINT TAB(10,33);TAB(-1,33); : &
PRINT TAB(10,53);TAB(-1,33);
UFINISH:
RETURN
GO'RIGHT:
IF CHOICE = "S" OR CHOICE = "M" THEN RETURN
IF CHOICE = "R" THEN &
CHOICE = "W" : &
PRINT TAB(7,13);TAB(-1,33); : &
PRINT TAB(7,29);TAB(-1,33); : &
PRINT TAB(7,53);TAB(-1,33); : &
PRINT TAB(10,13);TAB(-1,33); : &
PRINT TAB(10,33);TAB(-1,32); : &
PRINT TAB(10,53);TAB(-1,33); : &
GOTO RFINISH
IF CHOICE = "W" THEN &
CHOICE = "S" : &
PRINT TAB(7,13);TAB(-1,33); : &
PRINT TAB(7,29);TAB(-1,33); : &
PRINT TAB(7,53);TAB(-1,33); : &
PRINT TAB(10,13);TAB(-1,33); : &
PRINT TAB(10,33);TAB(-1,33); : &
PRINT TAB(10,53);TAB(-1,32); : &
GOTO RFINISH
IF CHOICE = "H" THEN &
CHOICE = "D" : &
PRINT TAB(7,13);TAB(-1,33); : &
PRINT TAB(7,29);TAB(-1,32); : &
PRINT TAB(7,53);TAB(-1,33); : &
PRINT TAB(10,13);TAB(-1,33); : &
PRINT TAB(10,33);TAB(-1,33); : &
PRINT TAB(10,53);TAB(-1,33); : &
GOTO RFINISH
IF CHOICE = "D" THEN &
CHOICE = "M" : &
PRINT TAB(7,13);TAB(-1,33); : &
PRINT TAB(7,29);TAB(-1,33); : &
PRINT TAB(7,53);TAB(-1,32); : &
PRINT TAB(10,13);TAB(-1,33); : &
PRINT TAB(10,33);TAB(-1,33); : &
PRINT TAB(10,53);TAB(-1,33);
RFINISH:
RETURN
GO'LEFT:
IF CHOICE = "R" OR CHOICE = "H" THEN RETURN
IF CHOICE = "S" THEN &
CHOICE = "W" : &
PRINT TAB(7,13);TAB(-1,33); : &
PRINT TAB(7,29);TAB(-1,33); : &
PRINT TAB(7,53);TAB(-1,33); : &
PRINT TAB(10,13);TAB(-1,33); : &
PRINT TAB(10,33);TAB(-1,32); : &
PRINT TAB(10,53);TAB(-1,33); : &
GOTO LFINISH
IF CHOICE = "W" THEN &
CHOICE = "R" : &
PRINT TAB(7,13);TAB(-1,33); : &
PRINT TAB(7,29);TAB(-1,33); : &
PRINT TAB(7,53);TAB(-1,33); : &
PRINT TAB(10,13);TAB(-1,32); : &
PRINT TAB(10,33);TAB(-1,33); : &
PRINT TAB(10,53);TAB(-1,33); : &
GOTO LFINISH
IF CHOICE = "D" THEN &
CHOICE = "H" : &
PRINT TAB(7,13);TAB(-1,32); : &
PRINT TAB(7,29);TAB(-1,33); : &
PRINT TAB(7,53);TAB(-1,33); : &
PRINT TAB(10,13);TAB(-1,33); : &
PRINT TAB(10,33);TAB(-1,33); : &
PRINT TAB(10,53);TAB(-1,33); : &
GOTO LFINISH
IF CHOICE = "M" THEN &
CHOICE = "D" : &
PRINT TAB(7,13);TAB(-1,33); : &
PRINT TAB(7,29);TAB(-1,32); : &
PRINT TAB(7,53);TAB(-1,33); : &
PRINT TAB(10,13);TAB(-1,33); : &
PRINT TAB(10,33);TAB(-1,33); : &
PRINT TAB(10,53);TAB(-1,33); : &
GOTO LFINISH
LFINISH:
RETURN
PROG'CHOICE:
PRINT TAB(23,10);TAB(-1,145);" Use <-- --> Arrow keys to Select Program Present Drive ";DRIVE;" ";TAB(-1,33)
RETURN
ABORT'IT:
? TAB(-1,28); !TURN CURSOR BACK ON FOR WHOEVER
IF ERR(0) = 1 THEN GOTO FINISH ![SAA] don't complain on CTRL-C
PRINT "ERR(0) = ";ERR(0)
PRINT "ERR(1) = ";ERR(1)
PRINT "ERR(2) = ";ERR(2)
FINISH:
END