// Gadgets.c - Copyright © 1994 Mike Austin

#include <dos/dos.h>
#include <proto/gadtools.h>
#include <proto/multiuser.h>
#include "MFileMode.h"
#include "GUI.h"

VOID SetGadgets(struct FileInfoBlock *FileInfo)
{
	GT_SetGadgetAttrs(MainGadgets[GD_GAD_UID],
			MainWnd, 		NULL,
			GTCB_Checked,	(FileInfo->fib_Protection & muFIBF_SET_UID),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_SCRIPT],
			MainWnd, 		NULL,
			GTCB_Checked,	(FileInfo->fib_Protection & FIBF_SCRIPT),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_PURE],
			MainWnd, 		NULL,
			GTCB_Checked,	(FileInfo->fib_Protection & FIBF_PURE),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_ARCHIVE],
			MainWnd, 		NULL,
			GTCB_Checked,	(FileInfo->fib_Protection & FIBF_ARCHIVE),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_USER_READ],
			MainWnd, 		NULL,
			GTCB_Checked,	!(FileInfo->fib_Protection & FIBF_READ),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_USER_WRITE],
			MainWnd, 		NULL,
			GTCB_Checked,	!(FileInfo->fib_Protection & FIBF_WRITE),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_USER_EXECUTE],
			MainWnd, 		NULL,
			GTCB_Checked,	!(FileInfo->fib_Protection & FIBF_EXECUTE),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_USER_DELETE],
			MainWnd, 		NULL,
			GTCB_Checked,	!(FileInfo->fib_Protection & FIBF_DELETE),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_GROUP_READ],
			MainWnd, 		NULL,
			GTCB_Checked,	(FileInfo->fib_Protection & FIBF_GRP_READ),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_GROUP_WRITE],
			MainWnd, 		NULL,
			GTCB_Checked,	(FileInfo->fib_Protection & FIBF_GRP_WRITE),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_GROUP_EXECUTE],
			MainWnd, 		NULL,
			GTCB_Checked,	(FileInfo->fib_Protection & FIBF_GRP_EXECUTE),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_GROUP_DELETE],
			MainWnd, 		NULL,
			GTCB_Checked,	(FileInfo->fib_Protection & FIBF_GRP_DELETE),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_OTHER_READ],
			MainWnd, 		NULL,
			GTCB_Checked,	(FileInfo->fib_Protection & FIBF_OTR_READ),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_OTHER_WRITE],
			MainWnd, 		NULL,
			GTCB_Checked,	(FileInfo->fib_Protection & FIBF_OTR_WRITE),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_OTHER_EXECUTE],
			MainWnd, 		NULL,
			GTCB_Checked,	(FileInfo->fib_Protection & FIBF_OTR_EXECUTE),
			TAG_END);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_OTHER_DELETE],
			MainWnd, 		NULL,
			GTCB_Checked,	(FileInfo->fib_Protection & FIBF_OTR_DELETE),
			TAG_END);

	UserInfo->uid = FileInfo->fib_OwnerUID;
	muGetUserInfo(UserInfo, muKeyType_uid);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_OWNER],
			MainWnd, 		NULL,
			GTST_String,	FileInfo->fib_OwnerUID ? UserInfo->UserID : NULL,
			TAG_END);

	GroupInfo->gid = FileInfo->fib_OwnerGID;
	muGetGroupInfo(GroupInfo, muKeyType_gid);

	GT_SetGadgetAttrs(MainGadgets[GD_GAD_GROUP],
			MainWnd, 		NULL,
			GTST_String,	FileInfo->fib_OwnerGID ? GroupInfo->GroupID : NULL,
			TAG_END);
}

VOID ReadGadgets(struct FileInfoBlock *FileInfo)
{
	if(MainGadgets[GD_GAD_UID]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection |= muFIBF_SET_UID;
	else
		FileInfo->fib_Protection &= ~muFIBF_SET_UID;

	if(MainGadgets[GD_GAD_SCRIPT]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection |= FIBF_SCRIPT;
	else
		FileInfo->fib_Protection &= ~FIBF_SCRIPT;

	if(MainGadgets[GD_GAD_PURE]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection |= FIBF_PURE;
	else
		FileInfo->fib_Protection &= ~FIBF_PURE;

	if(MainGadgets[GD_GAD_ARCHIVE]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection |= FIBF_ARCHIVE;
	else
		FileInfo->fib_Protection &= ~FIBF_ARCHIVE;

	if(MainGadgets[GD_GAD_USER_READ]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection &= ~FIBF_READ;
	else
		FileInfo->fib_Protection |= FIBF_READ;

	if(MainGadgets[GD_GAD_USER_WRITE]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection &= ~FIBF_WRITE;
	else
		FileInfo->fib_Protection |= FIBF_WRITE;

	if(MainGadgets[GD_GAD_USER_EXECUTE]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection &= ~FIBF_EXECUTE;
	else
		FileInfo->fib_Protection |= FIBF_EXECUTE;

	if(MainGadgets[GD_GAD_USER_DELETE]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection &= ~FIBF_DELETE;
	else
		FileInfo->fib_Protection |= FIBF_DELETE;

	if(MainGadgets[GD_GAD_GROUP_READ]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection |= FIBF_GRP_READ;
	else
		FileInfo->fib_Protection &= ~FIBF_GRP_READ;

	if(MainGadgets[GD_GAD_GROUP_WRITE]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection |= FIBF_GRP_WRITE;
	else
		FileInfo->fib_Protection &= ~FIBF_GRP_WRITE;

	if(MainGadgets[GD_GAD_GROUP_EXECUTE]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection |= FIBF_GRP_EXECUTE;
	else
		FileInfo->fib_Protection &= ~FIBF_GRP_EXECUTE;

	if(MainGadgets[GD_GAD_GROUP_DELETE]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection |= FIBF_GRP_DELETE;
	else
		FileInfo->fib_Protection &= ~FIBF_GRP_DELETE;

	if(MainGadgets[GD_GAD_OTHER_READ]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection |= FIBF_OTR_READ;
	else
		FileInfo->fib_Protection &= ~FIBF_OTR_READ;

	if(MainGadgets[GD_GAD_OTHER_WRITE]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection |= FIBF_OTR_WRITE;
	else
		FileInfo->fib_Protection &= ~FIBF_OTR_WRITE;

	if(MainGadgets[GD_GAD_OTHER_EXECUTE]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection |= FIBF_OTR_EXECUTE;
	else
		FileInfo->fib_Protection &= ~FIBF_OTR_EXECUTE;

	if(MainGadgets[GD_GAD_OTHER_DELETE]->Flags & GFLG_SELECTED)
		FileInfo->fib_Protection |= FIBF_OTR_DELETE;
	else
		FileInfo->fib_Protection &= ~FIBF_OTR_DELETE;
}
