;***************************************************************************
;
;   HASH - hash any number of files;  returns unique hash based on data only
;
;***************************************************************************
;1.0 08-Sep-84 DFP written by D. Pallmann
;
; File uses universal (.UNV) files other
; than SYS, SYSSYM, and TRM.
; These are on the AMUS network
;
; File makes external references to WLDSCN.OBJ[P,PN].  After
; assembly, enter this command:  .LNKLIT file,WLDSCN[P,PN]
;

       ASMMSG  /LMS Disk File Hash Utility/
       ASMMSG  /Link with WLDSCN/

       SEARCH  SYS
       SEARCH  SYSSYM
       SEARCH  TRM
       SEARCH  CRT
       SEARCH  WLDSCN

       .OFINI
       .OFDEF  FILE,D.DDB
       .OFSIZ  MEMSIZ

START:  PHDR    -1,0,PH$REE!PH$REU      ;program header
       GETIMP  MEMSIZ,A5               ;allocate local memory
       WINIT                           ;initialize WLDSCN

HEADER: HIGH
       CRLF
       TYPECR  LMS Disk File Hash Utility
       TYPESP  Version
       VCVT    START+2,OT$TRM
       LOW
       CRLF
       CRLF

GETFIL: TYPESP  <What files to hash (CR for ALL:*.*[*,*])?>
       HIGH
       KBD     EXIT
       LOW
       BYP
       LIN
       BNE     10$
       LEA     A2,DEFALT
10$:    WSPEC
       BNE     GETFIL
       CRLF

SETUP:  CLR     D4
       CLR     D5

DOFILE: WSCAN
       JNE     REPORT

       INC     D4
       TYPE    .

       MOVW    D.DEV(A4),FILE+D.DEV(A5)
       MOVW    D.DRV(A4),FILE+D.DRV(A5)
       MOV     D.FIL(A4),FILE+D.FIL(A5)
       MOVW    D.EXT(A4),FILE+D.EXT(A5)
       MOVW    D.PPN(A4),FILE+D.PPN(A5)
       INIT    FILE(A5)

       LOOKUP  FILE(A5)
       TST     FILE+116(A5)
       BMI     DOFILE                  ;bypass random file

       CMMW    FILE+D.FIL(A5),#[BAD]
       BNE     PROCES
       CMMW    FILE+D.FIL+2(A5),#[BLK]
       BNE     PROCES
       CMMW    FILE+D.EXT(A5),#[SYS]
       BEQ     DOFILE                  ;bypass BADBLK.SYS

PROCES: OPENI   FILE(A5)
10$:    CTRLC   EXIT
       FILINB  FILE(A5)
       TST     FILE+D.SIZ(A5)
       BEQ     20$
       ADD     D1,D5
       BR      10$
20$:    CLOSE   FILE(A5)
       JMP     DOFILE

REPORT: LOW
       CRLF
       CRLF
       TYPESP  <Hashing is complete,>
       HIGH
       MOV     D4,D1
       DCVT    0,OT$TRM!OT$TSP
       LOW
       TYPECR  files were processed.
       TYPESP  Hash total is:
       HIGH
       MOV     D5,D1
       OCVT    10.,OT$TRM
       CRLF

EXIT:   HIGH
       CRLF
       EXIT

DEFALT: ASCIZ   /ALL:*.*[*,*]/
       EVEN

       END