/*
 *  VALIDATE 1.1a
 *  
 *  © 1991,92 by Markus Leder
 *
 *  Freely Distributable 
 * 
 *  Keine Garantie bei Mißbrauch oder unsachgemäßer Veränderung des Quellcodes
 *
 *  Verbesserungsvorschläge an
 *
 *  Markus Leder
 *  Wacholderweg 24
 *
 *  3014 Laatzen
 *
 *  Z-NETZ: M.LEDER@A-LINK-H
 *
 */


#include <exec/types.h>
#include <exec/exec.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <libraries/dos.h>
#include <libraries/dosextens.h>
#include <string.h>

struct DosBase *DosBase;
   
VOID CloseAll()
{
   if (DosBase) CloseLibrary(DosBase);
   exit(0L);
}

VOID OpenAll(void)
{
   DosBase=(struct DosBase *) OpenLibrary("dos.library",0);
   if (!DosBase) { printf("Validate says: Error! No DosBase\n"); CloseAll(); };
}

struct FileLock *lock;     /* Um an Lock von SYS: zu kommen */
struct InfoData *info;     /* InfoData für DiskStatus */
BOOL ok;
BOOL flag=TRUE;                 /* Flag für blinken bei "VALIDATE" */ 
int i;

VOID Usage(name)
char name[]; 
{
   printf("\nVALIDATE 1.1a © in 1991,92 by Markus Leder\n\nFREELY DISTRIBUTABLE\n\n");
   printf("Last compiled on %s, %s\n\n",__DATE__,__TIME__);
   printf("\x1b[32mUsage:\x1b[33m %s [drive]\x1b[31m\n",name);
   printf("Where [drive] is the volume to be waiting for.\n");
   printf("If [drive] isn't specified, \"SYS:\" is used (default).\n\n");
}

main(ArgC,ArgV) /* Tätä */
int ArgC;
char *ArgV[];
{
   OpenAll(); /* Alles was man so braucht öffnen */
   if(ArgC==1) ArgV[1]="SYS:"; /* Default = SYS: */
   if (*ArgV[1]=='?') 
      Usage(ArgV[0]);
   else
      {
         info=AllocMem(sizeof(struct InfoData),MEMF_CLEAR|MEMF_PUBLIC); /* Speicher für Info */
         if (info==0) { printf("Validate says: Error! Nix Memory for InfoData"); CloseAll(); };    /* Wat? Die paar Bytes */
         lock=(struct FileLock *)Lock(ArgV[1],ACCESS_READ);                   /* Lock auf BootDrive */
         if (lock==0) { printf("Validate says: Error! No Lock on %s\n",ArgV[1]); CloseAll();};        /* Hmmmmmm */
         ok=(BOOL) Info(lock,info); /* Info über Volume holen */
         if (ok=FALSE) {printf("Validate says: Error! No Info on %s\n",ArgV[1]); CloseAll("");} /* Nanu ? */
   
         while(info->id_DiskState!=ID_VALIDATED) 
            {
          
               switch(flag) /* Wegen blinken */
               {
                  case TRUE:
        
                  printf("%c\x1b[32mValidating %s",13,ArgV[1]); /* Text */
                  flag=FALSE; /* TRUE = Dieser Teil , FALSE andere */
                  Delay(25); /* Wir haben Zeit, das System vielleicht nicht */
      
                  case FALSE: /* Soooo. "VALIDATING" in blau */
      
                  printf("%c\x1b[33mValidating %s",13,ArgV[1]);
                  flag=TRUE; /* Beim nächsten mal wieder schwarz */
                  Delay(25); /* Siehe CASE TRUE */
               }
            Info(lock,info); /* Mal sehn, ob schon fertig */
         } 
      if (info) FreeMem(info,sizeof(struct InfoData)); /* InfoBlock wieder ans System */
      if (lock) UnLock(lock);     /* Lock wieder freigeben */
      printf("%c\x1b[K\x1b[31m%c",13,13);
   };
   CloseAll(); /* ÄNDÄ */
}
