home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / misc / emu / AROSdev.lha / AROS / workbench / c / cd.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-01-27  |  2.1 KB  |  110 lines

  1. /*
  2.     (C) 1995-96 AROS - The Amiga Replacement OS
  3.     $Id: cd.c,v 1.7 1997/01/27 00:22:36 ldp Exp $
  4.     $Log: cd.c,v $
  5.     Revision 1.7  1997/01/27 00:22:36  ldp
  6.     Include proto instead of clib
  7.  
  8.     Revision 1.6  1996/10/10 13:12:11  digulla
  9.     Wrong parameter for Lock()
  10.  
  11.     Revision 1.5  1996/09/17 16:42:59  digulla
  12.     Use general startup code
  13.  
  14.     Revision 1.4  1996/09/13 17:52:09  digulla
  15.     Use IPTR
  16.  
  17.     Revision 1.3  1996/08/13 15:34:04  digulla
  18.     #include <exec/execbase.h> was missing
  19.  
  20.     Revision 1.2  1996/08/01 17:40:43  digulla
  21.     Added standard header for all files
  22.  
  23.     Desc:
  24.     Lang:
  25. */
  26. #include <exec/execbase.h>
  27. #include <exec/memory.h>
  28. #include <proto/exec.h>
  29. #include <dos/dos.h>
  30. #include <proto/dos.h>
  31. #include <utility/tagitem.h>
  32.  
  33. int main (int argc, char ** argv)
  34. {
  35.     STRPTR args[1]={ 0 };
  36.     struct RDArgs *rda;
  37.     BPTR dir;
  38.     STRPTR buf;
  39.     ULONG i;
  40.     struct FileInfoBlock *fib;
  41.     LONG error=0;
  42.  
  43.     rda=ReadArgs("DIR",(IPTR *)args,NULL);
  44.     if(rda!=NULL)
  45.     {
  46.     if(args[0])
  47.     {
  48.         dir=Lock(args[0],SHARED_LOCK);
  49.         if(dir)
  50.         {
  51.         fib=AllocDosObject(DOS_FIB,NULL);
  52.         if(fib!=NULL)
  53.         {
  54.             if(Examine(dir,fib))
  55.             {
  56.             if(fib->fib_DirEntryType>0)
  57.                 dir=CurrentDir(dir);
  58.             else
  59.             {
  60.                 SetIoErr(ERROR_DIR_NOT_FOUND);
  61.                 error=RETURN_ERROR;
  62.             }
  63.             }else
  64.             error=RETURN_ERROR;
  65.             FreeDosObject(DOS_FIB,fib);
  66.         }else
  67.         {
  68.             SetIoErr(ERROR_NO_FREE_STORE);
  69.             error=RETURN_ERROR;
  70.         }
  71.         UnLock(dir);
  72.         }else
  73.         error=RETURN_ERROR;
  74.     }else
  75.     {
  76.         dir=CurrentDir(0);
  77.         for(i=256;;i+=256)
  78.         {
  79.         buf=AllocVec(i,MEMF_ANY);
  80.         if(buf==NULL)
  81.         {
  82.             SetIoErr(ERROR_NO_FREE_STORE);
  83.             error=RETURN_ERROR;
  84.             break;
  85.         }
  86.         if(NameFromLock(dir,buf,i))
  87.         {
  88.             if(FPuts(Output(),buf)<0||
  89.                FPuts(Output(),"\n")<0)
  90.             error=RETURN_ERROR;
  91.             FreeVec(buf);
  92.             break;
  93.         }
  94.         FreeVec(buf);
  95.         if(IoErr()!=ERROR_LINE_TOO_LONG)
  96.         {
  97.             error=RETURN_ERROR;
  98.             break;
  99.         }
  100.         }
  101.         CurrentDir(dir);
  102.     }
  103.     FreeArgs(rda);
  104.     }else
  105.     error=RETURN_FAIL;
  106.     if(error)
  107.     PrintFault(IoErr(),"CD");
  108.     return error;
  109. }
  110.