/*************************************************************************
/*                                                                       *
/* 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 ?              *
/*                                                                       *
/*************************************************************************/

#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;

devs()
{ /* Art der Devices festlegen */
  LONGBITS WhichDevices = DLF_DEVICES | DLF_VOLUMES | DLF_DISKONLY | DLF_DIRS;
  /* Anzahl der gefundenen Devices */
  LONG  numdevs;
  /* Listenkopf */
  struct DirectoryEntry	*DeviceList = NULL;
  /* Laufvariable in Schleife */
  register struct DirectoryEntry *dev;
  int i = 0;
  char ausgabe[100];

  /* Schreibroutine initialisieren */
  Write_to_Fenster ( NULL,NULL );
  /* Devices holen */
  if ( (numdevs = AddDADevs( &DeviceList, WhichDevices )) == 0 )
  { Write_to_Fenster ( rp,"Keine Devices gefunden ! Sehr seltsam !" );
    return ( TRUE );
  }
  /* Anzahl ausgeben */
  sprintf( ausgabe,"Habe %ld Devices gefunden !", numdevs);
  Write_to_Fenster ( rp,ausgabe );

  /* In Schleife Art und Namen ausgeben ( erst Name und dann Art, sorry ) */
  for ( dev = DeviceList; dev; dev = dev->de_Next)
  { sprintf ( ausgabe," %-30s ·········· ",dev->de_Name );
    switch (dev->de_Type)
    { case DLX_DEVICE:
        strcat( ausgabe,"Residentes Device");
        break;
      case DLX_VOLUME:
        strcat( ausgabe,"Volume [angemeldet]");
        break;
      case DLX_UNMOUNTED:
        strcat( ausgabe,"Volume [nicht angemeldet]");
        break;
      case DLX_ASSIGN:
        strcat( ausgabe,"Logische Zuweisung (assign)");
        break;
      default:
        strcat( ausgabe,"Habe eine sehr seltsames Gerät gefunden ! Sehr seltsam !");
    }
    Write_to_Fenster ( rp,ausgabe );
    /* Scrollen unterbrechen */
    if ( i++ % 20 == 19 )
      fmore();
  }
  /* Speicherplatz freimachen */
  FreeDAList(DeviceList);
  return ( TRUE );
}
