;*************************** AMUS Program Label ******************************
; Filename: FNDUFD.M68                                      Date: 11/05/89
; Category: UTIL         Hash Code: 646-333-232-232      Version: none
; Initials: WYCH/AM      Name: W HARTGERS
; Company: OMEGON HOLLAND                          Telephone #: 85-40404
; Related Files: None
; Min. Op. Sys.: AMOSL 2.0                     Expertise Level: INT
; Special: This program runs ONLY on AMOS 2.0 with extended file structure
; Description: Program to look for ufd block on disk
;
;
;*****************************************************************************
; Important: This program runs ONLY on amos 2.0 with extended file structure
;            It's not to be used for disks created and used by older
;            file systems!
;
; In case of corrupt ufd-links, you should be able to run this program,
; and re-build the corrupt ufd-list by using DSKDDT or BLKEDT (on this system
; also) will do.
;
;***************************************************************************;

       SEARCH SYS
       SEARCH SYSSYM
       SEARCH TRM

       .OFINI
       .OFDEF  DDB1,D.DDB
       .OFDEF  ASC,80.
       .OFDEF  CH,DC.SIZ               ; Work field for DEVCHR
       .OFDEF  SZBLK,4.                ; # of blocks on devive
       .OFSIZ  SIZE


START:  GETIMP  SIZE,A5

       LIN                             ; Enf of line ?
       JEQ             FOUT            ; Yes, error
       BYP                             ; Bypass blanks

       FSPEC           DDB1(A5)        ; Uphere A2 points to the device name
       INIT            DDB1(A5)        ; Init buffer
       DEVCHR          DDB1(A5),CH(A5)         ; Return chararistics of device
       CLR             D1
       MOVW            DDB1+D.FMT(A5),D1       ; D1=Structure of the disk
       CMP             D1,#2                   ; Extended?
       BEQ             5$                      ; Yep
       TYPECR          <?Device is traditional format>
       EXIT
5$:
       MOV             CH+DC.BLK(A5),SZBLK(A5) ; Save number of blocks on device
       TYPE            <Device has >           ; Say howmany blocks to check
       MOV             SZBLK(A5),D1
       DCVT            0,OT$TRM
       TYPECR          < blocks.>
       MOV             SZBLK(A5),D4            ; Save # of blocks
       MOV             #0,D3                   ; Clear counter
10$:
       CMP             D3,D4                   ; End of physical?
       JLE             12$                     ; Nope
       JMP             FINE                    ; Yes, stop it

12$:
       MOV             D3,DDB1+D.REC(A5)       ; Set up block number
       READ            DDB1(A5)                ; Read block
       MOV             DDB1+D.BUF(A5),A4       ; A4=start of buffer
       CTRLC           FINE
25$:

       ADD             #4.,A4                  ; Update pointer
       CMPB            (A4)+,#4.               ; Could it be an UFD block?
       JNE             50$                     ; Nope
       ADD             #1,A4                   ;
       CMPB            (A4)+,#6.               ; Still UFD?
       JNE             50$                     ; Nope
       CMPB            (A4)+,#0.               ; Last check also OK?
       JNE             50$                     ; Nope
       ;
       ; assume UFD block (2.0)
       ;
       ADD             #28.,A4                 ; Index RAD50 file-name
       LEA             A2,ASC(A5)              ; and the ascii field
       MOV             A4,A1                   ; Save pointer
       UNPACK                                  ; Unpack file name
       UNPACK
       MOVB            #'.,(A2)+               ;
       UNPACK                                  ; and extention
       CLRB            (A2)+
       LEA             A2,ASC(A5)

       TYPE            <Found block : >        ; Output req. information
       MOV             D3,D1
       DCVT            0,OT$TRM
       TYPE            < (>
       OCVT            0,OT$TRM
       TYPE            <)>
       TYPE            <, first file in it  : >
       TAB
       TTYL            @A2                     ; and file name
       CRLF


50$:
       ADD             #1,D3                   ; Update block #
       JMP             10$                     ; and try again


FINE:
       EXIT

FOUT:
       TYPECR  <FNDUFD device-name: >
       EXIT

       END