DEFFN pfad$(a$)=LEFT$(a$,RINSTR(a$,"\"))
FUNCTION fileselectpro$(titel$,endung$,new_pfad$,pruef!,VAR new_file$)
  ' MODUL fileselect (Teil 1)
  ' Copyright by Torsten Runge (Version 1.3 vom 04.02.1997)
  '
  ' Parameter:
  '     titel$          Titelzeile der Fileselectbox
  '     endung$         Dateiendung die angehängt wird oder eine
  '                     falsche ersetzt
  '     new_pfad$       Pfad kann hiermit übergeben werden
  '                     Backslash \ sollte letztes Zeichen sein
  '     pruef!          BOOLEAN, soll geprüft werden, ob Datei vorhanden ist?
  '     new_file$       Dateiname kann hiermit übergeben werden und
  '                     steht nach Funktionsende aktualisiert darin
  '
  ' Rückgabe
  '     fileselectpro   Ausgewählter Pfad
  '
  ' Lokale Variable:
  LOCAL button&         ! Exit-Button der FileSelectBox, enthält
  '                        0 für ABBRUCH  oder  1 für OK/Return
  LOCAL al_button&      ! Exit-Button der AlertBox
  LOCAL punkt%          ! Stelle des Extensionspunktes
  LOCAL suche!          ! Wurde eine Suche ausgeführt
  '                        TRUE  es wurde gesucht
  suche!=FALSE          !  FALSE es wurde nicht gesucht
  '
  ' Rechtecklisten sperren und kontrolle beim Proggi:
  ~WIND_UPDATE(1)
  ~WIND_UPDATE(3)
  '
  ' Endung an den Pfad anhängen:
  IF MID$(new_pfad$,LEN(new_pfad$),1)<>"\"
    new_pfad$=new_pfad$+"\"
  ENDIF
  new_pfad$=UPPER$(new_pfad$+"*."+endung$)
  '
  ' Dateiauswahl mit Suchhilfe
  REPEAT
    ' Ist neues AES vorhanden?
    IF ((INT{{ADD(GB,4)}})>=&H140 AND (INT{{ADD(GB,4)}})<&H200) OR (INT{{ADD(GB,4)}})>=&H300
      ' neueres AES vorhanden...
      '
      ' ...zur Externen Fileselectbox:
      ~FN fsel_exinput(titel$,new_pfad$,new_file$,button&)
      '
      ' Leider nicht vorhanden:
    ELSE
      ' kein neueres AES vorhanden...
      '
      ' ...Fileselectbox des AES aufrufen:
      ~FSEL_INPUT(new_pfad$,new_file$,button&)
    ENDIF
    '
    '
    IF pruef!=FALSE AND new_file$<>""
      ' Damit Dateisuchhilfe nicht anspruch genommen wird,
      ' Dateiende auf Richtige Endung setzen...
      '
      punkt%=INSTR(new_file$,".")
      IF punkt%>0
        new_file$=MID$(new_file$,1,punkt%)+endung$
      ELSE
        new_file$=new_file$+"."+endung$
      ENDIF
    ENDIF
    '
    ' Dateisuchhilfe:
    IF endung$<>"*" AND pruef!=TRUE
      IF (button&=1) AND (UPPER$(MID$(new_file$,INSTR(new_file$,"."),LEN(endung$)+1))<>"."+UPPER$(endung$))
        ' OK wurde angewählt und es steht keine Dateiendung im Dateinamenfeld...
        '
        ' ...DTA setzen:
        ~FSETDTA(BASEPAGE+128)
        '
        ' ...erste Datei die zutrifft suchen:
        IF FSFIRST(@pfad$(new_pfad$)+new_file$+"*."+endung$,0)=0
          ' Es wurde eine Datei gefunden...
          '
          ' ...gefundenen Dateinamen in Variable schreiben:
          new_file$=CHAR{BASEPAGE+158}
          '
          ' ...Schleifenabbruch verhindern:
          suche!=TRUE
        ELSE
          ' Es wurde keine Datei gefunden...
          '
          ' ...Alert: Nachfragen, ob Weiter oder Abbruch:
          ALERT 1,"Bei der Suche nach einer Datei|mit der Endung  '."+endung$+"'|wurde keine Datei mit Ihren|Angaben gefunden!",1,"Weiter|Abbruch",al_button&
          IF al_button&=2
            ' Abbruch:
            button&=0
          ENDIF
        ENDIF
      ELSE
        ' ...Schleifenabbruch freigeben:
        suche!=FALSE
      ENDIF
    ENDIF
  UNTIL (button&=0) OR (suche!=FALSE AND UPPER$(MID$(new_file$,INSTR(new_file$,"."),LEN(endung$)+1))="."+UPPER$(endung$)) OR (endung$="*" AND button&=1)
  ' UNTIL (button&=0) OR (suche!=FALSE AND UPPER$(MID$(new_file$,INSTR(new_file$,"."),LEN(endung$)+1))="."+UPPER$(endung$)) OR (endung$="*" AND button&=1) OR (suche!=FALSE AND new_file$="")
  '
  ' Kontrolle beim AES und Rechtecklisten freigeben:
  ~WIND_UPDATE(2)
  ~WIND_UPDATE(0)
  '
  ' EXIT-Button auswerten:
  IF button&=0
    ' Abbruch-Button wurde angewählt...
    '
    ' ...Leerstring zurückgeben:
    RETURN ""
  ELSE
    ' OK-Button wurde angewählt...
    '
    '
    IF pruef!=TRUE
      ' Datei soll auf existens überprüft werden...
      '
      IF EXIST(@pfad$(new_pfad$)+new_file$)=TRUE
        ' Die Datei existiert...
        '
        ' ...Pfad und Dateinamen zurückgeben:
        RETURN @pfad$(new_pfad$)+new_file$
      ELSE
        ' Die Datei existiert nicht...
        '
        ' ...Warnmeldung ausgeben:
        al_button&=FORM_ALERT(1,"[1][| TeleComp-Fileselectmodul| | Die Datei ist nicht | vorhanden!][Abbruch]")
        '
        ' ...Leerstring zurückgeben:
        RETURN ""
      ENDIF
    ELSE
      ' Datei soll nicht auf existens überprüft werden...
      '
      ' ...Pfad zurückgeben:
      RETURN @pfad$(new_pfad$)+new_file$
    ENDIF
  ENDIF
ENDFUNC
FUNCTION fsel_exinput(titel$,VAR fsel_pfad$,fsel_file$,button&)
  ' MODUL fileselect - Teil 2
  '       (nur neueres AES!)
  '
  ' Parameter:
  '     titel$          Titelzeile der Fileselectbox
  '     fsel_pfad$      Pfad kann hiermit übergeben werden und
  '                     steht nach Funktionsende aktualisiert darin
  '     fsel_file$      Dateiname kann hiermit übergeben werden und
  '                     steht nach Funktionsende aktualisiert darin
  '     button$         hiermit wird der EXIT-Button zurückgegeben
  '
  ' Rückgabe
  '     fsel_exinput    Ausgewählter Pfad
  '
  ' Speicherplatz belegen:
  $F%
  '
  ' Titel auf Format bringen:
  titel$=MID$(titel$,1,MIN(LEN(titel$),29))+CHR$(0)
  '
  ' Pfade und Dateinamen auf Format bringen:
  fsel_pfad$=fsel_pfad$+CHR$(0)+SPACE$(400)
  fsel_file$=fsel_file$+CHR$(0)+SPACE$(150)
  '
  ' AES-Ausführung:
  GCONTRL(0)=91
  GCONTRL(1)=0
  GCONTRL(2)=2
  GCONTRL(3)=3
  GCONTRL(4)=0
  '
  ADDRIN(0)=V:fsel_pfad$  !Pfad
  ADDRIN(1)=V:fsel_file$  !Datei
  ADDRIN(2)=V:titel$      !Titel
  '
  GEMSYS
  '
  ' Pfad und Dateiname zurückübergeben:
  fsel_pfad$=CHAR{V:fsel_pfad$}     !Pfad
  fsel_file$=CHAR{V:fsel_file$}     !Dateiname
  '
  ' EXIT-Button:
  button&=GINTOUT(1)           !Abbruch=0, OK=1
  '
  RETURN GINTOUT(0)       !Fehlercode
ENDFUNC