/*************************************************************************
/*                                                                       *
/* C-Beispielprogramm für die Get-It ( Diskettenmagazin der AIT-UG )     *
/* geschrieben von Peter Fischer, RP.-Ebert-Str. 6, D-3257 Springe 1     *
/*                                                                       *
/* Kurs 6 : ARP                                                          *
/* Datum : 30.5.89                                                       *
/*                                                                       *
/* Copyrights (c)'89 by PeeF.                                            *
/* Der ausführbare Code ist Public Domain in bester Manier.              *
/* Der Quellcode darf von jedem/r GetiT-Leser/in benutzt werden, wie es  *
/* in seinem/ihrem Interesse liegt. NUR : Wenn Ihr wesentliche Teile     *
/* kopiert, so erwähnt, daß der Teil von mir stammt. Okay ?              *
/*                                                                       *
/*************************************************************************/

/* Headerfiles */

#include <intuition/intuition.h>
#include <exec/exec.h>
#include <graphics/gfx.h>
#include <stdio.h>
#include <libraries/arpbase.h>

/* Für AmigaDOS & Co */

extern struct IntuitionBase *IntuitionBase;
extern struct GfxBase *GfxBase;
extern struct DiskfontBase *DiskfontBase;
extern struct ArpBase *ArpBase;

/* Selbstdarstellung des Programms */
extern struct Screen *Scr;
extern struct Window *Fenster;
extern struct RastPort *rp;

/* Für Warteschleifen */
extern struct IntuiMess *mess;

files()
{ /* Basisstruktur */
  struct AnchorPath *Anchor;
  int Result,i = 0;
  extern struct StringInfo strinfo;
  extern struct Gadget inp;
  /* Stringvariablen für Pattern und Ausgabe */
  static char patt[30] = "";
  char ausgabe[100];

  /* Schreibroutine initialisieren. */
  Write_to_Fenster ( NULL,NULL );

  /* Bekanntgabe.	*/
  SetWindowTitles ( Fenster,"Eingabe des Patternstrings",-1 );
  /* Dem Gadget die Bufferadresse für String mitteilen.	*/ 
  strinfo.Buffer = &patt[0];
  /* Gadget in Liste einordnen.	*/
  AddGadget ( Fenster,&inp,-1 );
  /* Nun wird Gadget gezeichnet 	*/
  RefreshGadgets ( &inp,Fenster,NULL );
  /* und aktiviert. */
  ActivateGadget ( &inp,Fenster,NULL );
  /* Warten auf die Fertig-Nachricht. ( Also auf ein RET im Gadget. )	*/
  GetMess( Fenster,GADGETUP,0L );
  /* Weg mit dem Gadget.	*/
  RemoveGadget ( Fenster,&inp );
  /* Und neuen Fenstertitel.	*/
  SetWindowTitles ( Fenster,"Passende Strings",-1 );
  /* Fenster löschen.	*/
  Move ( rp,0,0 );
  SetBPen ( rp,0 );
  ClearScreen ( rp );

  /* Speicherplatz reservieren. */
  Anchor = AllocMem ( (ULONG)sizeof( struct AnchorPath ) + 105,MEMF_CLEAR );
  if ( Anchor != NULL )
  { /* Den Rest fertigmachen. */
    Anchor->ap_Length = 100;
    Anchor->ap_BreakBits = 0;
  }
  else
    notaus ("Kein Speicher mehr !");

  /* Ersten Eintrag holen */
  Result = FindFirst( &patt[0], Anchor);

  /* Solange ein Eintrag gefunden wurde ... */
  while ( Result == 0 )
  { /* Art überprüfen und mitteilen ... */
    if ( Anchor->ap_Info.fib_EntryType >= 0 )
      sprintf ( ausgabe," DIR  : %-30s",Anchor->ap_Info.fib_FileName );
    else
      sprintf ( ausgabe," FILE : %-30s, Größe %6d Bytes",
                Anchor->ap_Info.fib_FileName,Anchor->ap_Info.fib_Size );
    /* und ausgeben. */
    Write_to_Fenster ( rp,ausgabe );
    /* Ggfs Scrollen unterbrechen. */
    if ( i++ % 20 == 19 )
      fmore();
    /* Und nächsten Eintrag holen */
    Result = FindNext( Anchor );
  }
  /* Speicherplatz zurückgeben. */
  FreeMem ( Anchor,sizeof( struct AnchorPath )+105 );
  return ( TRUE );
}
