/* voc 2.1.0 [2025/05/18] for gcc LP64 on slackware xtspaF */

#ifndef ulmServices__h
#define ulmServices__h

#include "SYSTEM.h"
#include "ulmDisciplines.h"

typedef
	struct ulmServices_ObjectRec *ulmServices_Object;

typedef
	struct ulmServices_ServiceRec *ulmServices_Service;

typedef
	void (*ulmServices_InstallProc)(ulmServices_Object, ulmServices_Service);

typedef
	BOOLEAN (*ulmServices_LoadModuleProc)(CHAR*, ADDRESS );

typedef
	BOOLEAN (*ulmServices_LoadServiceProc)(CHAR*, ADDRESS , CHAR*, ADDRESS );

typedef
	struct ulmServices_LoaderInterfaceRec *ulmServices_LoaderInterface;

typedef
	struct ulmServices_LoaderInterfaceRec {
		ulmServices_LoadModuleProc loadModule;
		ulmServices_LoadServiceProc loadService;
	} ulmServices_LoaderInterfaceRec;

typedef
	struct ulmServices_ObjectRec { /* ulmDisciplines_ObjectRec */
		INT64 _prvt0;
		char _prvt1[16];
	} ulmServices_ObjectRec;

typedef
	struct ulmServices_ServiceRec { /* ulmDisciplines_ObjectRec */
		INT64 _prvt0;
		char _prvt1[72];
	} ulmServices_ServiceRec;

typedef
	struct ulmServices_TypeRec *ulmServices_Type;

typedef
	struct ulmServices_TypeRec { /* ulmDisciplines_ObjectRec */
		INT64 _prvt0;
		char _prvt1[56];
	} ulmServices_TypeRec;



import ADDRESS *ulmServices_ObjectRec__typ;
import ADDRESS *ulmServices_ServiceRec__typ;
import ADDRESS *ulmServices_LoaderInterfaceRec__typ;
import ADDRESS *ulmServices_TypeRec__typ;

import void ulmServices_Create (ulmServices_Service *service, CHAR *name, ADDRESS name__len);
import void ulmServices_CreateType (ulmServices_Type *type, CHAR *name, ADDRESS name__len, CHAR *baseName, ADDRESS baseName__len);
import void ulmServices_Define (ulmServices_Type type, ulmServices_Service service, ulmServices_InstallProc install);
import void ulmServices_GetBaseType (ulmServices_Type type, ulmServices_Type *baseType);
import void ulmServices_GetSupportedBaseType (ulmServices_Object object, ulmServices_Service service, ulmServices_Type *baseType);
import void ulmServices_GetType (ulmServices_Object object, ulmServices_Type *type);
import void ulmServices_GetTypeName (ulmServices_Type type, CHAR *name, ADDRESS name__len);
import void ulmServices_Init (ulmServices_Object object, ulmServices_Type type);
import void ulmServices_InitLoader (ulmServices_LoaderInterface if_);
import void ulmServices_InitType (ulmServices_Type type, CHAR *name, ADDRESS name__len, CHAR *baseName, ADDRESS baseName__len);
import BOOLEAN ulmServices_Install (ulmServices_Object object, ulmServices_Service service);
import BOOLEAN ulmServices_Installed (ulmServices_Object object, ulmServices_Service service);
import BOOLEAN ulmServices_IsExtensionOf (ulmServices_Type type, ulmServices_Type baseType);
import void ulmServices_Seek (CHAR *name, ADDRESS name__len, ulmServices_Service *service);
import void ulmServices_SeekType (CHAR *name, ADDRESS name__len, ulmServices_Type *type);
import BOOLEAN ulmServices_Supported (ulmServices_Object object, ulmServices_Service service);
import void *ulmServices__init(void);


#endif // ulmServices
