!*************************************************************************
! TRKANA.BAS - TRACK ANALYSIS for TRACK.LIT output
!
! by Dave Heyliger - AMUS Staff
!
! Usage: .RUN TRKANA (program will prompt for *.TRK file to process)
!
! TRKANA will process a *.TRK file and provide a cumulative report for
! each unique activity within the track file.
!
! Last Update 10-20-87: fixed "next day air" problem!
!*************************************************************************
MAP1 in'file,S,10,"" !input file
MAP1 out'file,S,10,"" !output file
MAP1 in'line,S,82 !input string from file
MAP1 temp'string,S,10 !temporary string value
MAP1 temp'string2,S,10 !another bogus string variable
MAP1 temp'time,F !temporary time value
MAP1 activity(100) !up to 100 unique activities:
MAP2 action,S,10 ! action
MAP2 input'time,F ! time of input
MAP2 total'time,F ! total time spent on activ.
MAP1 last'activity,F !pointer to "last activity"
MAP1 line'count,F !total lines read in
MAP1 activity'pointer,F !pointer to activity array
MAP1 cum'time,F !total time tracked
MAP1 am'or'pm,S,2,"" !10-20-87
! INITIALIZE ARRAY
!
FOR I = 1 TO 100
action(I) = ""
NEXT I
last'activity = 0
line'count = 0
cum'time = 0
! QUERY FOR FILE
!
? TAB(-1,0)
? TAB(5,20);
INPUT "Enter track file to be processed: ",in'file
IF in'file = "" THEN END
? TAB(7,20);
INPUT "Enter output file to be created: ", out'file
IF out'file = "" THEN END
OPEN #1,in'file,INPUT
OPEN #2,out'file,OUTPUT
INPUT LINE #1,in'line
INPUT LINE #1,in'line
! PROCESS
! Read file line by line and process
!
? TAB(-1,0)
? "Processing " in'file ".";
REPEAT: INPUT LINE #1,in'line
IF LEN(in'line) < 10 &
THEN in'line = in'line + SPACES(10 - LEN(in'line))
IF EOF(1) THEN CALL OUTPUT'ANALYSIS
CALL SCAN'ARRAY
CALL ISOLATE'TIME
IF line'count <> 0 THEN CALL TIME'UPDATE
last'activity = activity'pointer
line'count = line'count + 1
? ".";
GOTO REPEAT
! SCAN ARRAY Subroutine
! On entry: a line from the track file has been read
! On exit: activity'pointer has location of unique activity
!
SCAN'ARRAY:
temp'string = MID$(in'line,20,10)
FOR I = 1 to 100
IF action(I) = "" &
THEN action(I) = temp'string : total'time(I) = 0 : &
activity'pointer = I : RETURN &
ELSE IF action(I) = temp'string &
THEN activity'pointer = I : RETURN
NEXT I
! ISOLATE'TIME Subroutine
! On entry: line has been read in, activity pointer valid array location
! On exit: input'time has been inserted into array in "minutes" format
!
ISOLATE'TIME:
FOR I = 1 TO 10
IF MID$(in'line,I,1) <> " " THEN NEXT I
temp'string = MID$(in'line,I+1,8)
CALL CONVERT'TO'MINUTES
input'time(activity'pointer) = temp'time
RETURN
! CONVERT'TO'MINUTES Subroutine
! On entry: temp'string holds input time in "xx:xx xM" format
! On exit: temp'time holds "minutes" format value of above format
!
CONVERT'TO'MINUTES:
temp'time = 60 * (VAL(MID$(temp'string,1,2)))
IF MID$(temp'string,7,2) = "PM" &
THEN IF MID$(temp'string,1,2) <> "12" &
THEN temp'time = temp'time + 60*12
temp'time = temp'time + (VAL(MID$(temp'string,4,2)))
RETURN
! TIME'UPDATE Subroutine
! On entry: last'activity holds previous activity, temp'time holds time
! On exit: last'activity total time is updated in "minutes" format
!
TIME'UPDATE:
!10-20-87
IF am'or'pm = "" THEN am'or'pm = MID$(temp'string,7,2)
IF am'or'pm = "PM" &
THEN IF MID$(temp'string,7,2) = "AM" &
THEN total'time(last'activity) = total'time(last'activity) &
+ (24*60 - input'time(last'activity) + temp'time) : &
am'or'pm = MID$(temp'string,7,2) :&
IF MID$(temp'string,1,2) = "12" &
THEN total'time(last'activity) = &
total'time(last'activity) - 12*60 : RETURN &
ELSE RETURN
!10-20-87
! OUTPUT'ANALYSIS Subroutine
! On entry: analysis is complete
! On exit: analysis displayed
!
OUTPUT'ANALYSIS:
?
FOR I = 1 TO 100
IF action(I) = "" THEN GOTO FINAL
? #2,CHR(9);
? #2,action(I) " ";
IF total'time(I) < 10 THEN ? #2, " :0" ;: ? #2,STR(total'time(I)) : GOTO CUM
IF total'time(I) < 59 &
THEN ? #2, " :" ;: ? #2,STR(total'time(I)) &
ELSE CALL MINUTES'TO'HOURS
CUM: cum'time = cum'time + total'time(I)
NEXT I
FINAL: ? #2
? #2,"Total number of lines processed: " line'count
? #2,"Total number of unique activities: " I
? #2,"Cumulative time recorded: ";
total'time(I) = cum'time
CALL MINUTES'TO'HOURS
CLOSE #2
END
! MINUTES'TO'HOURS Subroutine
! On entry: total'time(I) >= 60
! On exit: total'time converted to string of xx:xx and printed out
!
MINUTES'TO'HOURS:
temp'string = STR(INT(total'time(I)/60)) + ":"
temp'string2 = STR(total'time(I) - ((INT(total'time(I)/60)) * 60))
IF LEN(temp'string2) = 1 &
THEN temp'string = temp'string + "0" + temp'string2 &
ELSE temp'string = temp'string + temp'string2
? #2,temp'string
RETURN