'
' Directory V1.0
' (w)&(c) 1991 bei Christian Krapp         \  /\  /\ | | \  /\  /\ | |
'                                           \/  \/--\|-|  \/  \/--\|-|
' --=>! FREEWARE !<=--                    software for Amiga & ATARI ST
'
' Geschrieben am 1.4.1991
'
' Adresse:                     Christian Krapp
'                            Hagenmähderstraße 9
'
'                            W-8901  Stadtbergen
'                        Bundesrepublik  Deutschland
'
' Zeilen: 46
'
DIM dateien$(300),lÄngen%(300)                 ! Felder für die Daten !
'                                                ! Dateien$=Namen  längen%=Länge
ladedir("SYS:",".info",1)                      ! Aufruf der Routine !
'
FOR i%=0 TO datei%                             ! Ausgabe der Daten !
  IF lÄngen%(i%)=-1                              ! Ist die Länge=-1, dann ist es
    PRINT dateien$(i%),"Ordner"                  ! ein Ordner
  ELSE                                         ! Sonst ist es eine Datei !
    PRINT dateien$(i%),lÄngen%(i%);" Byte"
  ENDIF
NEXT i%
'
PROCEDURE ladedir(name$,test$,methode%)        ! Dir Routine:
  CLR datei%                                     !
  LET name$=name$+CHR$(0)                        ! Name der Verzeichnisses
  lock%=Lock(V:name$,-2)                         ! Reservieren, Nur lesen
  speicher%=AllocMem(270,2)                      ! 270 Byte Speicher reservieren
  test%=Examine(lock%,speicher%)                 ! ersten FileInfoBlock holen
  IF lock%=0 OR speicher%=0 OR test%=0           ! ist irgendeiner dieser Werte
    IF speicher%<>0                              ! Null, dann Ende !
      ~FreeMem(speicher%,270)                    ! Speicher freigeben
    ENDIF
    IF lock%<>0
      ~UnLock(lock%)                             ! Gerät freigeben
    ENDIF
    EDIT
  ENDIF
  REPEAT                                       ! Auswerten der Daten
    REPEAT
      zeichen%=PEEK(speicher%+8+stelle%)         ! erstes Zeichen des Dateinamen
      dateien$(datei%)=dateien$(datei%)+CHR$(zeichen%) ! holen
      INC stelle%
    UNTIL zeichen%=0                             ! bis ein 0-Zeichen kommt !
    IF LPEEK(speicher%+4)<0                      ! ist dies eine Datei/Ordner
      lÄngen%(datei%)=LPEEK(speicher%+124)       ! Datei, dann länge holen
    ENDIF
    IF (test$<>"" AND INSTR(UPPER$(dateien$(datei%)),UPPER$(test$))<>0 AND methode%=0) OR test$="" OR (test$<>"" AND INSTR(UPPER$(dateien$(datei%)),UPPER$(test$))=0 AND methode%=1)
      INC datei%                                 ! ist der eventuell angegebene
    ENDIF                                        ! String vorhanden
    CLR stelle%                                  ! für Dateinamen
    dateien$(datei%)=""                          ! Dateiname löschen
    lÄngen%(datei%)=-1                           ! Länge auf -1 (Ordner)
    test%=ExNext(lock%,speicher%)                ! nächsten FileInfoBlock an-
  UNTIL test%=0                                  ! fordern; Null dann ende
  ~UnLock(lock%)                               ! Gerät freigeben
  ~FreeMem(speicher%,270)                      ! Speicher freigeben
  DEC datei%                                   ! eine "Datei" abziehen
  IF datei%>0                                  ! sind irgendwelche Daten da ?
    FOR x%=1 TO datei%-1                         ! auf zum sotieren
      FOR y%=x%+1 TO datei%
        IF UPPER$(dateien$(x%))>UPPER$(dateien$(y%))
          SWAP dateien$(x%),dateien$(y%)
          SWAP lÄngen%(x%),lÄngen%(y%)
        ENDIF
      NEXT y%
    NEXT x%
  ENDIF
RETURN
'
' diese routine ist für all diejenigen  gedacht, die in ihrem programm das
' direktory einlesen wollen. auf die funktionsweise der routine möchte ich
' nicht weiter eingehen, da diese schon oben etwas erklärt wird.
' syntax: ladedir(name$,test$,methode%)
'                 name$ = ist das gerät mit verzeichnis (z.B. DF0:C)
'                 test$ = gibt einen belibigen string an der dann
'                         entsprechend der methode% angewandt wird.
'                         dies muß nicht angegeben werden!
'              methode% = gibt an, wie der test$-string benutzt wird.
'                         0 = es werden nur die dateien übergeben, die
'                             den test$-string beinhalten
'                         1 = es werden alle dateien übergeben, die den
'                             test$-string nicht beinhalten
'
' die daten werden in dateien$() übergeben. dabei steht in dateien$(0) der
' dateiname bzw. verzeichniss. wurde aber test$ angegeben, dann kann es sein,
' daß hier schon die erste datei steht!!! in längen%() steht dann die ent-
' sprechenden längen (dateien$(1) & längen%(1)...). steht in längen%() -1, dann
' ist dies keine datei sondern ein ordner!!!
'
' diese prozedur darf jeder benutzten und weitergeben. wird diese routine be-
' nutzt, dann muß in der anleitung/programm mein name erscheinen!!!
'
