;*************************** AMUS Program Label ****************************** ; Filename: UDIR.M68 Date: 01/30/89 ; Category: UTIL Hash Code: 755-547-731-423 Version: 1.0(100) ; Initials: ULTR/AM Name: DAVID PALLMANN ; Company: ULTRASOFT CORP. Telephone #: ; Related Files: ; Min. Op. Sys.: Expertise Level: BEG ; Special: Demonstration program only. Source code not complete. ; Description: A fancy directory program using windowing like the Macintosh. ; Please send all feedback regarding this program to ULTR/AM. ; ;***************************************************************************** ;Copyright (C) 1988 UltraSoft Corp. All Rights Reserved. ;Written by: David Pallmann ; ;Edit History: ;1.0(100) 01-Sep-88 created. /DFP VMAJOR =1 VMINOR =0 VEDIT =100. SEARCH SYS SEARCH SYSSYM SEARCH TRM SEARCH ULTRA FILMAX=1000. ; max #files we have room for ;********************** ;* FILE TABLE ENTRY * ;********************** .OFINI .OFDEF FI.NAM,4 ; filename .OFDEF FI.EXT,2 ; file extension .OFDEF FI.BLK,4 ; file size in blocks .OFDEF FI.SIZ,4 ; file size in bytes .OFDEF FI.TYP,2 ; file type .OFSIZ FI.ESZ ;************* ;* STORAGE * ;************* .OFINI .OFDEF FLAGS,4 ; flags: F$HELP=1 ; help text is displayed .OFDEF SPEC,30. ; wildcard specification .OFDEF FILTBL,FI.ESZ*FILMAX ; file table .OFDEF FILCNT,4 ; file count .OFDEF BLKCNT,4 ; total blocks .OFDEF OFFSET,4 ; display offset .OFSIZ MEMSIZ START: PHDR -1,0,PH$REE!PH$REU ; program header GETIMP MEMSIZ,A5 ; allocate memory WINIT ; initialize WLDSCN CMDLIN: BYP LEA A0,SPEC(A5) 10$: LIN BEQ 20$ MOVB (A2)+,(A0)+ BR 10$ 20$: CLRB @A0 TERM: TRMRST D0 ORW #T$DAT!T$ECS,D0 TRMWST D0 LOOKUP: LEA A2,SPEC(A5) WSPEC ; process command line specification JNE EXIT ; error LOAD: CLR FILCNT(A5) MOV #FILMAX,D3 LEA A3,FILTBL(A5) 10$: CTRLC EXIT WSCAN BNE 20$ CALL GETFIL ADD #FI.ESZ,A3 SOB D3,10$ 20$: SCREEN: CUROFF CLS HIGH TYPESP UltraSoft Directory of TSTB SPEC(A5) BNE 10$ TYPE *.* BR 20$ 10$: TTYL SPEC(A5) 20$: CURSOR #1,#47. TYPESP Total of MOV BLKCNT(A5),D1 DCVT 0,OT$TRM!OT$TSP TYPE block CMP D1,#1 BEQ 30$ TYPE s 30$: TYPE < in > MOV FILCNT(A5),D1 DCVT 0,OT$TRM!OT$TSP TYPE file CMP D1,#1 BEQ 40$ TYPE s 40$: CURSOR #3,#1 LOW TYPE <File .Ext Blocks Bytes> HIGH CALL SORT.BY.EXT PAGE: CURSOR #4,#1 CLREOS MOV #4,D4 ; init row MOV FILCNT(A5),D0 BEQ 30$ LEA A3,FILTBL(A5) MOV OFFSET(A5),D7 SUB D7,D0 BEQ 30$ MUL D7,#FI.ESZ ADD D7,A3 10$: CTRLC EXIT CALL DISPLAY INCB D4 CMPB D4,#23. BHI 30$ ADD #FI.ESZ,A3 SOB D0,10$ 30$: CALL HLP OPTION: KBD EXIT UCS BIT #F$HELP,FLAGS(A5) BEQ 10$ PUSH D1 CURSOR #5,#47. CLREOL CURSOR #6,#47. CLREOL CURSOR #7,#47. CLREOL CURSOR #8.,#47. CLREOL POP D1 10$: CMPB D1,#'H JEQ HELP CMPB D1,#'[-'@ JEQ FINISH CMPB D1,#'C-'@ JEQ FINISH CMPB D1,#'R-'@ JEQ PAGE.UP CMPB D1,#'T-'@ JEQ PAGE.DOWN CMPB D1,#'K-'@ JEQ UP CMPB D1,#'J-'@ JEQ DOWN CMPB D1,#'^-'@ JEQ HOME CMPB D1,#'E-'@ JEQ ENDDIR CMPB D1,#'E JEQ EXT CMPB D1,#'N JEQ NAME CMPB D1,#'A JEQ ASIZE CMPB D1,#'D JEQ DSIZE CMPB D1,#'S JEQ ASIZE JMP OPTION EXT: CALL SORT.BY.EXT JMP HOME NAME: CALL SORT.BY.NAME JMP HOME ASIZE: CALL SORT.BY.ASIZE JMP HOME DSIZE: CALL SORT.BY.DSIZE JMP HOME PAGE.UP: MOV OFFSET(A5),D7 SUB #19.,D7 JMI HOME MOV D7,OFFSET(A5) JMP PAGE UP: TST OFFSET(A5) JEQ OPTION DEC OFFSET(A5) CURSOR #23.,#1 CLREOL CURSOR #4,#1 INSLIN LEA A3,FILTBL(A5) MOV OFFSET(A5),D7 MUL D7,#FI.ESZ ADD D7,A3 MOV #4,D4 CALL DISPLAY JMP OPTION PAGE.DOWN: MOV OFFSET(A5),D7 ADD #19.,D7 CMP D7,FILCNT(A5) JHIS ENDDIR MOV D7,OFFSET(A5) JMP PAGE DOWN: MOV OFFSET(A5),D7 INC D7 CMP D7,FILCNT(A5) JHIS OPTION INC OFFSET(A5) CURSOR #4,#1 DELLIN CURSOR #22.,#1 LEA A3,FILTBL(A5) MOV OFFSET(A5),D7 ADD #23.-4,D7 CMP D7,FILCNT(A5) JHIS OPTION MUL D7,#FI.ESZ ADD D7,A3 MOV #23.,D4 CALL DISPLAY JMP OPTION HELP: CALL HLP JMP OPTION HOME: CLR OFFSET(A5) JMP PAGE ENDDIR: MOV FILCNT(A5),D7 DEC D7 CMP D7,#16. BLOS 10$ SUB #16.,D7 10$: MOV D7,OFFSET(A5) JMP PAGE FINISH: CURSOR #24.,#1 CURON HIGH EXIT: EXIT ;************ ;* GETFIL * ;************ ;Copy file information from DDB @A4 into file entry @A3 ;Adds one to FILCNT(A5) ;Sets space (linked) or C (contiguous) into FI.TYP(A3) GETFIL: INC FILCNT(A5) MOV D.FIL(A4),FI.NAM(A3) MOVW D.EXT(A4),FI.EXT(A3) MOV D.FSZ(A4),D1 MOV D1,FI.BLK(A3) ADD D1,BLKCNT(A5) MOV D.LSZ(A4),D0 CMP D0,#512. BHIS 20$ ;SEQUENTIAL FILE MOVB #40,FI.TYP(A3) DEC D1 MUL D1,#510. SUB #2,D0 ADD D0,D1 MOV D1,FI.SIZ(A3) BR 30$ ;RANDOM FILE 20$: MOVB #'C,FI.TYP(A3) MUL D1,#512. MOV D1,FI.SIZ(A3) 30$: RTN ;************* ;* DISPLAY * ;************* ;D4 contains row DISPLAY: CURSOR D4,#1 DEPACK FI.NAM(A3) DEPACK FI.NAM+2(A3) TYPE . DEPACK FI.EXT(A3) TYPESP MOVB FI.TYP(A3),D1 TTY TYPESP MOV FI.BLK(A3),D1 DCVT 5,OT$TRM!OT$ZER MOV FI.SIZ(A3),D1 DCVT 7,OT$TRM!OT$ZER RTN ;Sort files by extension SORT.BY.EXT: MOV FILCNT(A5),D5 JEQ 99$ DEC D5 JEQ 99$ CLR D4 LEA A3,FILTBL(A5) 10$: CMPW D4,D5 JHIS 99$ CMMW FI.EXT(A3),FI.EXT+FI.ESZ(A3) BLO 40$ BHI 15$ CMM FI.NAM(A3),FI.NAM+FI.ESZ(A3) BLO 40$ 15$: MOV A3,A0 ; SWAP LEA A1,FI.ESZ(A3) MOV #FI.ESZ,D0 20$: MOVB @A0,D7 MOVB @A1,(A0)+ MOVB D7,(A1)+ SOB D0,20$ TSTW D4 ; BACK-UP BEQ 10$ SUB #FI.ESZ,A3 DECW D4 BR 10$ 40$: ADD #FI.ESZ,A3 INCW D4 BR 10$ 99$: CURSOR #3,#47. TYPE extension order CLREOL RTN ;Sort files by name SORT.BY.NAME: MOV FILCNT(A5),D5 JEQ 99$ DEC D5 JEQ 99$ CLR D4 LEA A3,FILTBL(A5) 10$: CMPW D4,D5 JHIS 99$ CMM FI.NAM(A3),FI.NAM+FI.ESZ(A3) BLO 40$ BHI 15$ CMMW FI.EXT(A3),FI.EXT+FI.ESZ(A3) BLO 40$ 15$: MOV A3,A0 ; SWAP LEA A1,FI.ESZ(A3) MOV #FI.ESZ,D0 20$: MOVB @A0,D7 MOVB @A1,(A0)+ MOVB D7,(A1)+ SOB D0,20$ TSTW D4 ; BACK-UP BEQ 10$ SUB #FI.ESZ,A3 DECW D4 BR 10$ 40$: ADD #FI.ESZ,A3 INCW D4 BR 10$ 99$: CURSOR #3,#47. TYPE alphabetical filename order CLREOL RTN ;Sort files by ascending size SORT.BY.ASIZE: MOV FILCNT(A5),D5 JEQ 99$ DEC D5 JEQ 99$ CLR D4 LEA A3,FILTBL(A5) 10$: CMPW D4,D5 JHIS 99$ CMM FI.SIZ(A3),FI.SIZ+FI.ESZ(A3) BLOS 40$ MOV A3,A0 ; SWAP LEA A1,FI.ESZ(A3) MOV #FI.ESZ,D0 20$: MOVB @A0,D7 MOVB @A1,(A0)+ MOVB D7,(A1)+ SOB D0,20$ TSTW D4 ; BACK-UP BEQ 10$ SUB #FI.ESZ,A3 DECW D4 BR 10$ 40$: ADD #FI.ESZ,A3 INCW D4 BR 10$ 99$: CURSOR #3,#47. TYPE ascending size order CLREOL RTN ;Sort files by descending size SORT.BY.DSIZE: MOV FILCNT(A5),D5 JEQ 99$ DEC D5 JEQ 99$ CLR D4 LEA A3,FILTBL(A5) 10$: CMPW D4,D5 JHIS 99$ CMM FI.SIZ(A3),FI.SIZ+FI.ESZ(A3) BHIS 40$ MOV A3,A0 ; SWAP LEA A1,FI.ESZ(A3) MOV #FI.ESZ,D0 20$: MOVB @A0,D7 MOVB @A1,(A0)+ MOVB D7,(A1)+ SOB D0,20$ TSTW D4 ; BACK-UP BEQ 10$ SUB #FI.ESZ,A3 DECW D4 BR 10$ 40$: ADD #FI.ESZ,A3 INCW D4 BR 10$ 99$: CURSOR #3,#47. TYPE descending size order CLREOL RTN HLP: HIGH CURSOR #5,#47. TYPE N CURSOR #6,#47. TYPE E CURSOR #7,#47. TYPE A CURSOR #8.,#47. TYPE D LOW CURSOR #5,#49. TYPE <- name order> CURSOR #6,#49. TYPE <- extension order> CURSOR #7,#49. TYPE <- ascending size order> CURSOR #8.,#49. TYPE <- descending size order> HIGH OR #F$HELP,FLAGS(A5) RTN END