#ifndef _StartupItems_H_
#define _StartupItems_H_
#include <NSSystemDirectories.h>
#include <CoreFoundation/CFArray.h>
#include <CoreFoundation/CFDictionary.h>
#include "SystemStarter.h"
#define kProvidesKey CFSTR("Provides")
#define kRequiresKey CFSTR("Requires")
#define kDescriptionKey CFSTR("Description")
#define kUsesKey CFSTR("Uses")
#define kErrorKey CFSTR("Error")
#define kBundlePathKey CFSTR("PathToBundle")
#define kPIDKey CFSTR("ProcessID")
#define kDomainKey CFSTR("Domain")
#define kErrorPermissions CFSTR("incorrect permissions")
#define kErrorInternal CFSTR("SystemStarter internal error")
#define kErrorReturnNonZero CFSTR("execution of Startup script failed")
#define kErrorFork CFSTR("could not fork() StartupItem")
CFMutableArrayRef StartupItemListCreateWithMask (NSSearchPathDomainMask aMask);
CFMutableDictionaryRef StartupItemListGetProvider (CFArrayRef anItemList, CFStringRef aService);
CFMutableArrayRef StartupItemListCreateDependentsList (CFMutableArrayRef anItemList,
CFStringRef aService ,
Action anAction );
CFMutableDictionaryRef StartupItemListGetNext (CFArrayRef aWaitingList,
CFDictionaryRef aStatusDict ,
Action anAction );
CFMutableDictionaryRef StartupItemWithPID (CFArrayRef anItemList, pid_t aPID);
pid_t StartupItemGetPID(CFDictionaryRef anItem);
CFStringRef StartupItemCreateDescription(CFMutableDictionaryRef anItem);
CFArrayRef StartupItemListCreateFromRunning(CFArrayRef anItemList);
CFIndex StartupItemListCountServices (CFArrayRef anItemList);
void RemoveItemFromWaitingList(StartupContext aStartupContext, CFMutableDictionaryRef anItem);
void AddItemToFailedList(StartupContext aStartupContext, CFMutableDictionaryRef anItem);
int StartupItemRun (CFMutableDictionaryRef aStatusDict, CFMutableDictionaryRef anItem, Action anAction);
void StartupItemExit (CFMutableDictionaryRef aStatusDict, CFMutableDictionaryRef anItem, Boolean aSuccess);
void StartupItemSetStatus(CFMutableDictionaryRef aStatusDict, CFMutableDictionaryRef anItem, CFStringRef aServiceName, Boolean aSuccess, Boolean aReplaceFlag);
bool StartupItemSecurityCheck(const char *aPath);
#endif