$ ! Checksummer $ ! $ ! (C) 2005-2006 Dr. ERDI Gergo $ ! $ ! See http://cactus.rulez.org/elte/2005-1-vms/#3 for a description of what it does $ ! $ ! Licensed under the GNU General Public License, version 2 $ $ !---------- $ ! #1: Process command-line arguments $ $ ERROR = "WRITE SYS$ERROR ""ERROR: "", " $ IF (P3 .NES. "") $ THEN $ ERROR "Too many arguments" $ EXIT $ ENDIF $ $ IF (P1 .EQS. "") $ THEN $ ERROR "Missing argument" $ EXIT $ ENDIF $ $ IF (P2 .EQS. "") $ THEN $ CALL check 'P1' $ ELSE $ CALL create 'P1' 'P2' $ ENDIF $ EXIT $ $ create: SUBROUTINE $ OPEN /WRITE outf 'P2' $ $ f = F$SEARCH(P1,0) $ LOOP_B: $ IF (f .EQS. "") THEN GOTO LOOP_E $ ! Make sure we don't try to open the checksum file just being generated $ IF (F$SEARCH(P2,1) .NES. f) $ THEN $ CHECKSUM 'f' $ WRITE outf f, " ", CHECKSUM$CHECKSUM $ ENDIF $ f = F$SEARCH(P1,0) $ GOTO LOOP_B $ LOOP_E: $ $ CLOSE outf $ ENDSUBROUTINE $ $ check: SUBROUTINE $ OPEN /READ /ERROR=ERR_IO inf 'P1' $ LOOP_B: $ READ /END_OF_FILE=LOOP_E inf line $ fspec = F$ELEM(0, " ", line) $ oldsum = F$INT(F$ELEM(1, " ", line)) $ IF (F$SEARCH(fspec) .EQS. "") $ THEN $ WRITE SYS$ERROR "'", fspec, "' is missing." $ ELSE $ CHECKSUM 'fspec' $ IF (CHECKSUM$CHECKSUM .NE. oldsum) THEN WRITE SYS$ERROR "'", fspec, "' has been changed." $ ENDIF $ GOTO LOOP_B $ LOOP_E: $ CLOSE inf $ $ EXIT $ $ ERR_IO: $ ERROR "Opening ""''P1'"" failed." $ EXIT $ ENDSUBROUTINE