;***************************************************************************;
;                                                                           ;
;                                   WILD                                    ;
;                     general-purpose wildcard utility                      ;
;                                                                           ;
;                         Author: David F. Pallmann                         ;
;            Copyright (C) 1983 by LMS Technical Services, Inc.             ;
;                                                                           ;
;***************************************************************************;
;
; 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]
;

OBJNAM  WILD.LIT

VMAJOR=1

;edit history
VEDIT=100.      ;29-Dec-83 DFP creation.

;universals
SEARCH  SYS
SEARCH  SYSSYM
SEARCH  TRM
SEARCH  MACLIB
SEARCH  WLDSCN

;registers
IMP=A5                                  ;impure index

;impure area
OFINI
OFDEF   PREFIX,100.                     ;command line prefix
OFDEF   SUFFIX,100.                     ;command line suffix
OFDEF   FILCNT,4                        ;files procesed
OFDEF   CMDLIN,200.                     ;command buffer
OFSIZ   IMPSIZ

START:  PHDR    -1,0,PH$REE!PH$REU      ;program header
       GETIMP  IMPSIZ,IMP              ;allocate impure area
       BYP
       LIN
       BNE     GETFIL
       TYPECR  usage is .WILD files command_line
       TYPECR  example: .WILD *.BAS COMPIL %
       JMP     EXIT

GETFIL: WINIT
       BYP
       WSPEC
       JNE     EXIT
       BYP

GETPRE: LEA     A0,PREFIX(IMP)
10$:    MOVB    (A2)+,D1
       CMPB    D1,#'%
       BEQ     GETSUF
       MOVB    D1,(A0)+
       BNE     10$
       TYPECR  ? no wildcard reference (%) in command line
       JMP     EXIT

GETSUF: CLRB    @A0
       LEA     A0,SUFFIX(IMP)
10$:    MOVB    (A2)+,(A0)+
       BNE     10$
       CLRB    -2(A0)

       CLRW    FILCNT(IMP)

LOOP:   WSCAN                           ;get a file
       JNE     DONE                    ; none left to process
       INCW    FILCNT(IMP)
       CALL    EXEC                    ;execute command line
       CTRLC   DONE
       BR      LOOP                    ;process next file

DONE:   MOVW    FILCNT(IMP),D1
       BNE     10$
       TYPECR  %no such files
       BR      EXIT
10$:    DCVT    0,OT$TRM!OT$TSP
       TYPE    file
       CMPW    D1,#1
       BEQ     20$
       TYPE    s
20$:    TYPECR  < processed>

EXIT:   CRT     #12.
       CRLF
       EXIT

EXEC:   LEA     A2,CMDLIN(IMP)          ;index command line buffer

       LEA     A0,PREFIX(IMP)          ;copy prefix to buffer
       CALL    COPY

       TSTW    D.DEV(A4)
       BEQ     10$
       LEA     A1,D.DEV(A4)
       UNPACK
       MOVW    D.DRV(A4),D1
       DCVT    0,OT$MEM
       MOVB    #':,(A2)+

10$:    LEA     A1,D.FIL(A4)
       UNPACK
       UNPACK
       CALL    TRIM
       MOVB    #'.,(A2)+
       UNPACK
       CALL    TRIM

       CLR     D1
       MOVB    D.PPN+1(A4),D1
       BEQ     20$
       MOVB    #'[,(A2)+
       OCVT    0,OT$MEM
       MOVB    #',,(A2)+
       MOVB    D.PPN(A4),D1
       OCVT    0,OT$MEM
       MOVB    #'],(A2)+

20$:    LEA     A0,SUFFIX(IMP)
       CALL    COPY

       SAVE    A0-A5,D0-D5
       LEA     A0,SPSAVE
       MOV     SP,@A0

       LEA     A2,CMDLIN(IMP)
       CRT     #12.
       TYPE    .
       TTYL    @A2
       CRT     #11.
       AMOS
       CRLF

       LEA     A0,SPSAVE
       MOV     @A0,SP
       REST    A0-A5,D0-D5

       RTN

COPY:   MOVB    (A0)+,(A2)+
       BNE     COPY
       DEC     A2
       RTN

TRIM:   CMMB    -(A2),#40
       BEQ     TRIM
       INC     A2
       RTN

SPSAVE: LWORD   0

       END