!######################################################
!# HASHCK.BAS - "HASH CHECK"
!#
!# Checks hash totals from the following files:
!# HASHCK.OLD HASHCK.NEW
!#
!# (See the .LOG - JAN '86 for details on using HASHCK)
!#
!# Also, grab HSHDSK.CMD and HSHDSK.DOC.... ok?
!#
!# by Dave Heyliger AMUS Staff
!#
!# last update: 11/16/85
!#######################################################
MAP1 NEW'FILE,S,50,""
MAP1 NEW'NAME,S,10,""
MAP1 NEW'HASH,S,15,""
MAP1 NEW'EXT,S,3,""
MAP1 NEW'PPN,S,15,""
MAP1 OLD'FILE,S,50,""
MAP1 OLD'NAME,S,10,""
MAP1 OLD'HASH,S,15,""
MAP1 OLD'EXT,S,3,""
MAP1 OLD'PPN,S,15,""
INITIALIZE:
!---
! Open two files: HASHCK.OLD and HASKCK.NEW. It is in these two
! files that all comparisons will be made. Also, open the daily
! report file, HASHCK.RPT and establish starting P,PN. Grab first
! filenames and away we go.
!---------------------------------------------------------------------
OPEN #2,"HASHCK.OLD",INPUT
OPEN #1,"HASHCK.NEW",INPUT
OPEN #3,"HASHCK.RPT",OUTPUT
TOP: INPUT LINE #2,OLD'FILE
INPUT LINE #1,NEW'FILE
CK:
!If both files are at the very end, quit.
IF (EOF(1) = 1 AND EOF(2) = 1) THEN GOTO THE'END
!If "Grand" on either file, read past it.
IF MID$(OLD'FILE,1,5) = "Grand" &
THEN INPUT LINE #2,OLD'FILE
IF MID$(NEW'FILE,1,5) = "Grand" &
THEN INPUT LINE #1,NEW'FILE
!If "No such files" read past it.
IF MID$(OLD'FILE,1,5) = "%No s" &
THEN INPUT LINE #2,OLD'FILE
IF MID$(NEW'FILE,1,5) = "%No s" &
THEN INPUT LINE #1,NEW'FILE
!If an old P,PN deleted at the END of the series.
IF (EOF(1) = 1 AND EOF(2) <> 1) &
THEN INPUT LINE #2,OLD'FILE :&
? MID$(OLD'FILE,36,14) : &
? #3,MID$(OLD'FILE,36,14) &
" * DELETED *" : GOTO DELETED'PPN
!If a new P,PN added at the END of the series.
IF (EOF(2) = 1 AND EOF(1) <> 1) &
THEN ? MID$(NEW'FILE,36,14) : &
? #3,MID$(NEW'FILE,36,14) &
" ** NEW **" : GOTO ADDED'PPN
NEXT'PPN:
!---
! Determine if P,PN is NEW, DELETED, or same ol' P,PN as last time
!------------------------------------------------------------------------
OLD'PPN = MID$(OLD'FILE,36,15)
NEW'PPN = MID$(NEW'FILE,36,15)
IF OLD'PPN = NEW'PPN &
THEN ? OLD'PPN : ? #3,OLD'PPN : GOTO BREAKDOWN
IF OLD'PPN > NEW'PPN &
THEN ? NEW'PPN : ? #3,NEW'PPN " ** NEW **" : GOTO ADDED'PPN
IF OLD'PPN < NEW'PPN &
THEN ? OLD'PPN : ? #3,OLD'PPN " * Deleted *" : GOTO DELETED'PPN
ADDED'PPN:
!---
! This portion of the program will be called if a new P,PN has been
! added since the last run of HSHDSK (Hash disk). It will report that
! a new P,PN has been added, and will list the new files in this P,PN
!---------------------------------------------------------------------------
IF MID$(NEW'FILE,1,2) = "To" &
THEN INPUT LINE #1,NEW'FILE
IF MID$(NEW'FILE,1,2) = " " &
THEN INPUT LINE #1,NEW'FILE :&
IF MID$(NEW'FILE,1,2) <> "Gr" &
THEN ? #3, : GOTO CK &
ELSE INPUT LINE #1,NEW'FILE : ? #3, : GOTO CK
NEW'NAME = MID$(NEW'FILE,1,10)
? #3,NEW'NAME " has been added"
INPUT LINE #1,NEW'FILE
GOTO ADDED'PPN
DELETED'PPN:
!---
! Similar to ADDED'PPN but here a deletion message is printed, along
! with a listing of the deleted files within this P,PN
!---------------------------------------------------------------------------
IF MID$(OLD'FILE,1,2) = "To" &
THEN INPUT LINE #2,OLD'FILE
IF MID$(OLD'FILE,1,2) = " " &
THEN INPUT LINE #2,OLD'FILE :&
IF MID$(OLD'FILE,1,2) <> "Gr" &
THEN ? #3, : GOTO CK &
ELSE INPUT LINE #2,OLD'FILE : ? #3, : GOTO CK
OLD'NAME = MID$(OLD'FILE,1,10)
? #3,OLD'NAME " has been deleted"
INPUT LINE #2,OLD'FILE
GOTO DELETED'PPN
BREAKDOWN:
!---
! Break down the filename by name, ext, and hash total
!---------------------------------------------------------------------
IF MID$(OLD'FILE,7,1) <> " " &
THEN INPUT LINE #2,OLD'FILE : GOTO PPN'OLD'END
IF MID$(NEW'FILE,7,1) <> " " &
THEN INPUT LINE #1,NEW'FILE : GOTO PPN'NEW'END
OLD'NAME = MID$(OLD'FILE,1,10)
OLD'HASH = MID$(OLD'FILE,18,15)
OLD'EXT = MID$(OLD'FILE,8,3)
NEW'NAME = MID$(NEW'FILE,1,10)
NEW'HASH = MID$(NEW'FILE,18,15)
NEW'EXT = MID$(NEW'FILE,8,3)
ANALYSE:
!---
! There are many different combinations of how run-time reading
! of the two input files can be interpreted, and so this attempts
! to decide just what the heck is going on!
!----------------------------------------------------------------------
!Case #1: Non-blank equal filenames - only time hash totals are checked.
IF OLD'NAME = NEW'NAME &
THEN IF MID$(OLD'NAME,1,1) <> " " &
THEN GOTO CHECK'HASH ELSE ? #3, : GOTO TOP
!Case #2: P,PN use to have only ONE file in it, now it has TWO or more new.
IF MID$(OLD'FILE,1,1) = " " &
THEN ? #3,NEW'NAME " has been added" :&
INPUT LINE #1, NEW'FILE : GOTO BREAKDOWN
!Case #3: P,PN use to have TWO or more files in it, now it has only ONE.
IF MID$(NEW'FILE,1,1) = " " &
THEN ? #3,OLD'NAME " has been deleted" :&
INPUT LINE #2,OLD'FILE : GOTO BREAKDOWN
!See if extensions are same even though filenames are different.
!If so, bypass this next series of cases #4-#5
IF OLD'EXT = NEW'EXT THEN GOTO C6
!Case #4: A file has been deleted from the P,PN
IF OLD'EXT < NEW'EXT &
THEN ? #3,OLD'NAME " has been deleted" :&
INPUT LINE #2,OLD'FILE : GOTO BREAKDOWN
!Case #5: New file has been added to the P,PN
IF OLD'EXT > NEW'EXT &
THEN ? #3,NEW'NAME " has been added" :&
INPUT LINE #1,NEW'FILE : GOTO BREAKDOWN
C6:
!Case #6: Same extension, file deletion from P,PN
IF OLD'NAME < NEW'NAME &
THEN ? #3,OLD'NAME " has been deleted" :&
INPUT LINE #2,OLD'FILE : GOTO BREAKDOWN
!Case #7: Same extension, file addition into P,PN
IF OLD'NAME > NEW'NAME &
THEN ? #3,NEW'NAME " has been added" :&
INPUT LINE #1,NEW'FILE : GOTO BREAKDOWN
CHECK'HASH:
!---
! Examimes hash total only when names are identical
!-----------------------------------------------------------
IF OLD'HASH <> NEW'HASH &
THEN IF MID$(OLD'NAME,1,6) <> "HASHCK" &
THEN IF MID$(OLD'NAME,1,5) <> "START" &
THEN ? #3,OLD'NAME " has a hash conflict: old = "; :&
? #3,MID$(OLD'FILE,18,15) " new = "; :&
? #3,MID$(NEW'FILE,18,15)
INPUT LINE #2,OLD'FILE
INPUT LINE #1,NEW'FILE
GOTO BREAKDOWN
PPN'OLD'END:
!---
! If the end of the OLD P,PN listing has occurred but not the NEW
! listing, then all remaining files in the NEW listing are new, and
! so write these files to the report file.
!-------------------------------------------------------------------------
IF MID$(NEW'FILE,1,2) = "To" &
THEN INPUT LINE #1,NEW'FILE
IF MID$(NEW'FILE,1,2) = " " &
THEN ? #3, : GOTO TOP
NEW'NAME = MID$(NEW'FILE,1,10)
? #3,NEW'NAME " has been added"
INPUT LINE #1,NEW'FILE
GOTO PPN'OLD'END
PPN'NEW'END:
!---
! Similar to PPN'OLD'END but OLD listing is longer than NEW listing.
!-------------------------------------------------------------------------
IF MID$(OLD'FILE,1,2) = "To" &
THEN INPUT LINE #2,OLD'FILE
IF MID$(OLD'FILE,1,2) = " " &
THEN ?#3, : GOTO TOP
OLD'NAME = MID$(OLD'FILE,1,10)
? #3,OLD'NAME " has been deleted"
INPUT LINE #2,OLD'FILE
GOTO PPN'NEW'END
THE'END:
? "Comparison is complete"
CLOSE #1:CLOSE #2:CLOSE #3:END