; ************************** AMUS Program Label ******************************
; Filename: EXT.M68                                         Date: 01/04/90
; Category: UTIL         Hash Code: 663-713-773-475      Version: 1.0(100)
; Initials: ULTR/AM      Name: DAVID PALLMANN
; Company: ULTRASOFT CORPORATION                   Telephone #: 5163484848
; Related Files: WLDSCN.LIB (required for assembly/linkage)
; Min. Op. Sys.: AMOSL 1.3B                    Expertise Level: BEG
; Special:  Use 2.0 assembler.    To link: .LNKLIT EXT,WLDSCN/L
; Description: Shows extensions in an account.  Defaults to your own account,
; or you can specify an account on the command line.
; ****************************************************************************

;****************************************************************************
;*                                                                          *
;*                                   EXT                                    *
;*      Show file extensions in current account or specified location       *
;*                                                                          *
;****************************************************************************
;Copyright (C) 1990 UltraSoft Corporation.  All Rights Reserved.
;
;Written by: David Pallmann
;
;Edit History:
;1.0(100)  04-Jan-90  created.

       VMAJOR  =1
       VMINOR  =0
       VSUB    =0
       VEDIT   =100.
       VWHO    =0

       AUTOEXTERN

       SEARCH  SYS
       SEARCH  SYSSYM

;assembly parameters

       MAXEXT  =5000.                  ; max extensions we can store

;variables

       .OFINI
       .OFDEF  EXTCNT, 2               ; extension count
       .OFDEF  EXTLST, 2*MAXEXT        ; extension list
       .OFDEF  BUFFER, 8.              ; RAD50 conversion buffer
       .OFSIZ  MEMSIZ

;wildcard scanner macros

DEFINE  WINIT
       IF      NDF,W.INIT,EXTERN W.INIT
       CALL    W.INIT
       ENDM

DEFINE  WSPEC   EXT
       IF      NDF,W.SPEC,EXTERN W.SPEC
       CALL    W.SPEC
       IF      B,EXT,ASCII /???/
       IF      NB,EXT,ASCII /'EXT/
       BYTE    0
       ENDM

DEFINE  WSCAN
       IF      NDF,W.SCAN,EXTERN W.SCAN
       CALL    W.SCAN
       ENDM

DEFINE  WFULL
       IF      NDF,W.FULL,EXTERN W.FULL
       CALL    W.FULL
       ENDM

DEFINE  WLIST   ADDR
       IF      NDF,W.LIST,EXTERN W.LIST
               IF      NB,ADDR
               PUSH    A0
               LEA     A0,ADDR
               ENDC
       CALL    W.LIST
               IF      NB,ADDR
               POP     A0
               ENDC
       ENDM

;***********
;*  START  *
;***********

START:  PHDR    -1,0,PH$REE!PH$REU      ; program header
       GETIMP  MEMSIZ,A5               ; allocate variable memory
       WINIT                           ; initialize wildcard scanner
       LEA     A3,EXTLST(A5)           ;
       CLRW    EXTCNT(A5)              ;

CMDLIN: BYP                             ;
       WSPEC                           ;
       JNE     EXIT                    ;

LOOP:   CTRLC   EXIT                    ;
       WSCAN                           ;
       JNE     SORT                    ;

       MOVW    D.EXT(A4),D5            ;

       CLR     D0                      ;
       MOVW    EXTCNT(A5),D0           ;
       BEQ     ADD                     ;
       LEA     A0,EXTLST(A5)           ;
10$:    CMPW    D5,(A0)+                ;
       JEQ     LOOP                    ;
       SOB     D0,10$                  ;

ADD:    MOVW    D5,(A3)+                ;
       INCW    EXTCNT(A5)              ;
       JMP     LOOP                    ;

;**********
;*  SORT  *
;**********
;Sort extensions alphabetically

SORT:   TSTW    EXTCNT(A5)              ;
       JEQ     NONE                    ;
SO.HOM: MOV     #1,D0                   ;
       LEA     A0,EXTLST(A5)           ;
SO.CHK: CMPW    D0,EXTCNT(A5)           ;
       BHIS    SHOW                    ;
       CMMW    @A0,2(A0)               ;
       BLOS    SO.NXT                  ;
SO.SWP: MOVW    @A0,D6                  ;
       MOVW    2(A0),@A0               ;
       MOVW    D6,2(A0)                ;
       CMPW    D0,#1                   ;
       BEQ     SO.CHK                  ;
       DECW    D0                      ;
       SUB     #2,A0                   ;
       BR      SO.CHK                  ;
SO.NXT: ADD     #2,A0                   ;
       INCW    D0                      ;
       BR      SO.CHK                  ;

;***********
;*  SHOW   *
;***********

SHOW:   CLR     D0                      ;
       MOVW    EXTCNT(A5),D0           ;
       BEQ     NONE                    ;
       TYPECR  Extensions in this account:
       CRLF                            ;
       LEA     A1,EXTLST(A5)           ;
10$:    CTRLC   20$                     ;
       LEA     A2,BUFFER(A5)           ;
       UNPACK                          ;
       TTYL    BUFFER(A5)              ;
       TAB                             ;
       SOB     D0,10$                  ;
       CRLF                            ;
20$:    CRLF                            ;
       BR      EXIT                    ;

NONE:   TYPECR  %Directory is empty     ;
       CRLF                            ;

EXIT:   EXIT                            ;

       END