/*
 * AutoAssign.c :
 * --------------
 * Auteur         : Xavier Mertens
 * Version        : 1 
 * Révision       : 00 
 * Création       : 25 Oct 1992 - 13:45
 * Modification   : -
 * Langage        : Lattice c v5.0
 * Compatibilité  : 1.3 - 2.x - 3.0  
 * Description    : Petite application permettant très facilement
 *                  l'assignation de répertoire.
 */

#include <exec/types.h>
#include <exec/execbase.h>
#include <libraries/dosextens.h>
#include <intuition/intuitionbase.h>
#include <workbench/workbench.h>
#include <workbench/startup.h>

#ifdef LATTICE
  int CXBRK(void) { return(0); }
  int chkabort(void) { return(0); }
#endif

#define PRINT(x) Write(Output(),x,strlen(x))

extern struct WBStartup *WBenchMsg;
extern struct ExecBase  *SysBase;

struct Lock           *Verrou;
struct Library        *IconBase;
struct WBArg          *Arg;
struct DiskObject     *DiskLock;
struct IntuitionBase  *IntuitionBase;
struct IntuiText OkText = { 
  1,0,JAM1,5,3,NULL,(STRPTR)"    Ok   ",NULL };
struct IntuiText Text = { 
  1,0,JAM1,16,10,NULL,(STRPTR)"Répertoire introuvable!!!",NULL };

TEXT Assign[20],
     Repertoire[30],
     Cmd[70];    

_main(){
  int i=0;
  LONG OldDir;

  char **ToolArray;
  char *Value;

/* Si on lance le programme depuis le CLI : afficher petit message... */
  if(((struct Process *)SysBase->ThisTask)->pr_CLI){
    PRINT("AutoAssign v1.00 © Xavier Mertens - Octobre 1992.\n");
    PRINT("I'm a WORKBENCH not a CLI utility!\n");
    Exit(5);
  }

/* Ouverture des bibliothèques nécessaires... */

  if(!(IntuitionBase = (struct IntuitionBase *)
                       OpenLibrary("intuition.library",NULL))||
     !(IconBase = (struct Library *)
                  OpenLibrary("icon.library",NULL)))
    CloseAll();

/* Examen des tooltypes du fichier .info... */

  for(i=0,Arg=WBenchMsg->sm_ArgList;i<WBenchMsg->sm_NumArgs;i++,Arg++){
    OldDir=CurrentDir(Arg->wa_Lock);
    if(DiskLock=GetDiskObject(Arg->wa_Name)){
      ToolArray=DiskLock->do_ToolTypes;
      if(Value=FindToolType(ToolArray,"ASSIGN"))
        strcpy(Assign,Value);
      if(Value=FindToolType(ToolArray,"REPERTOIRE"))
        strcpy(Repertoire,Value);
      FreeDiskObject(DiskLock);
    }
    CurrentDir(OldDir);
  }

/* On teste si le répertoire à assigner existe bien... */

  if(!(Verrou=(struct Lock *)Lock(Repertoire,ACCESS_READ))){

/* Sinon on afiche un message d'erreur à l'aide d'un requester... */

    AutoRequest(IntuitionBase->ActiveWindow,&Text,NULL,&OkText,
                NULL,NULL,320,60);
    CloseAll();
  }    

/* La commande à excécuter... */

  sprintf(Cmd,"C:Assign %s %s",Assign,Repertoire);
  Execute(Cmd,NULL,NULL);  

/* C'est tout... */

  CloseAll();
}

/* Fermeture des ressources... */

CloseAll(){
  if(Verrou)        UnLock(Verrou);
  if(IntuitionBase) CloseLibrary(IntuitionBase);
  if(IconBase)      CloseLibrary(IconBase);
  Exit(0);
  return(TRUE); /* Pour éviter un Warning de compilation... */
}

/* Eof */
