#include <libraries/dos.h>
#include <libraries/dosextens.h>
#include <libraries/filehandler.h>
#include <exec/memory.h>


main()
{
getpath();
getdisks();

exit();
}

void btoc(bstring)
char *bstring;
{
register UBYTE len, count, *cstring;

cstring = (UBYTE *) bstring;
len = cstring[0];   

for( count = 0;count < len;count++)
  cstring[count] = cstring[count+1];

cstring[count] = '\0';
}

getpath()
{
register SHORT        cont=1;
BYTE                  pathstr[100],copystr[100];
struct FileLock      *my_lock;
struct FileLock      *devlock;
struct FileInfoBlock *FileInfo;
struct DeviceNode    *devlist;
BYTE                 *str;

pathstr[0] = 0;
copystr[0] = 0;

if(!(FileInfo = (struct FileInfoBlock *)AllocMem(sizeof(struct FileInfoBlock),MEMF_CHIP)))
  return(0);

my_lock = Lock("",ACCESS_READ);

devlock = (struct FileLock *) BADDR(my_lock);

do
  {
  Examine(my_lock, FileInfo);
  strcpy(pathstr,FileInfo->fib_FileName);
  if((my_lock = ParentDir(my_lock)))
    strcat(pathstr,"/");
  else
    {
    if(pathstr[0] == '\0')
      {
      devlist = (struct DeviceNode *) BADDR(devlock->fl_Volume);
      while(devlist->dn_Type)
        devlist = (struct DeviceNode *) BADDR(devlist->dn_Next);
      str = BADDR(devlist->dn_Name);
      movmem(str,pathstr,(ULONG)str[0]+1L);
      btoc(pathstr);
    }
    strcat(pathstr,":");
    cont = 0;
    }
  strcat(pathstr,copystr);
  strcpy(copystr,pathstr);
  } while(cont);
FreeMem(FileInfo,sizeof(struct FileInfoBlock));

UnLock(my_lock);
printf("Aktueller Pfad: %s\n\n\n",pathstr);
}

getdisks()
{
extern struct DosLibrary       *DOSBase;
struct RootNode                *rnode;
register struct DosInfo        *dinfo;
register struct DeviceNode     *dnode;
char                           *bname,name[32];

rnode = (struct RootNode *) DOSBase->dl_Root;
dinfo = (struct DosInfo  *) BADDR(rnode->rn_Info);

Forbid();
for(dnode = (struct DeviceNode *) BADDR(dinfo->di_DevInfo);BADDR(dnode);
  dnode = (struct DeviceNode *) BADDR(dnode->dn_Next))
  {
  if(!dnode->dn_Type && dnode->dn_Task && BADDR(dnode->dn_Name))
    {
    bname = (char *) BADDR(dnode->dn_Name);
    movmem(bname,name,(ULONG)bname[0]+1L);
    btoc(name);
    printf("%s\n\n",name);
    }
  }
Permit();
}
