/*
 *	ParMCD.c - Copyright © 1990 by Devil's child.
 *
 *	Created:	08 Oct 1990  20:51:16
 *	Modified:	21 Nov 1990  17:15:45
 *
 *	Make>> cc -qf -ps -m0b -wp -wd -wu -so -hi ram:ParM.syms <file>.c
 *	Make>> ln <file>.o
 *	Make>> Protect <file> +p
 */

#include <arp_ports.h>

void ParMCD(long len, char *line);
#pragma regcall(ParMCD(d0,a0))

void ParMCD(long len, char *line)
{
	struct ExecBase *SysBase = *((struct ExecBase **)4L);
	struct ArpBase *ArpBase;
	struct Process *MyProcess;
	short argc;
	char *argv[2];
	struct InfoData *infodata;
	long args[8];
	struct Window *W;
	struct MsgPort *ReplyPort;
	struct IntuiMessage Msg;
	char dir[120];

	if (!(ArpBase = (struct ArpBase *)OpenLibrary("arp.library", 39L))) return;
	MyProcess = (struct Process *)SysBase->ThisTask;
	SysBase->ThisTask->tc_UserData = (APTR)&ArpBase; /* for GADS() ??? used to be for my resident Printf() */

	argc = GADS(line, len, "Usage: ParMCD [New current directory name]", (char **)&argv, "Dir");
	if (argc < 0) {
		Puts(argv[0]);
		ArpExit(20L, ERROR_LINE_TOO_LONG);
	}
	infodata = ArpAlloc(sizeof(struct InfoData));
	args[0] = (long)infodata >> 2;
	SendPacket(ACTION_DISK_INFO, args, (struct MsgPort *)MyProcess->pr_ConsoleTask);
	W = (struct Window *)infodata->id_VolumeNode;
	if ( (W->IDCMPFlags & MENUPICK) && (ReplyPort = CreatePort(NULL, NULL)) ) {
		PathName( MyProcess->pr_CurrentDir, dir, 80);
		Msg.Class = 0x0FL;
		if (argv[0])
			Msg.IAddress = (APTR)argv[0];
		else
			Msg.IAddress = (APTR)dir;
		Msg.ExecMessage.mn_Node.ln_Type = NT_MESSAGE;
		Msg.ExecMessage.mn_Length = sizeof( struct IntuiMessage );
		Msg.ExecMessage.mn_ReplyPort = ReplyPort;      
		PutMsg(W->UserPort, (struct Message *)&Msg);
		WaitPort(ReplyPort);
		GetMsg(ReplyPort);
		DeletePort(ReplyPort);
	}
	CloseLibrary(ArpBase);
}

