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

#ifndef ulmScales__h
#define ulmScales__h

#include "SYSTEM.h"
#include "ulmDisciplines.h"
#include "ulmEvents.h"
#include "ulmObjects.h"
#include "ulmOperations.h"

typedef
	struct ulmScales_MeasureRec *ulmScales_Measure;

typedef
	void (*ulmScales_AssignProc)(ulmScales_Measure, ulmScales_Measure);

typedef
	INT32 (*ulmScales_CompareProc)(ulmScales_Measure, ulmScales_Measure);

typedef
	void (*ulmScales_ConvertProc)(ulmScales_Measure, ulmScales_Measure);

typedef
	struct ulmScales_ScaleRec *ulmScales_Scale;

typedef
	void (*ulmScales_CreateProc)(ulmScales_Scale, ulmScales_Measure*, BOOLEAN);

typedef
	struct ulmScales_FamilyRec *ulmScales_Family;

typedef
	struct ulmScales_FamilyRec { /* ulmDisciplines_ObjectRec */
		INT64 _prvt0;
		char _prvt1[8];
	} ulmScales_FamilyRec;

typedef
	struct ulmScales_UnitRec *ulmScales_Unit;

typedef
	void (*ulmScales_GetValueProc)(ulmScales_Measure, ulmScales_Unit, INT32*);

typedef
	struct ulmScales_InterfaceRec *ulmScales_Interface;

typedef
	void (*ulmScales_SetValueProc)(ulmScales_Measure, ulmScales_Unit, INT32);

typedef
	void (*ulmScales_OperatorProc)(INT8, ulmScales_Measure, ulmScales_Measure, ulmScales_Measure);

typedef
	struct ulmScales_InterfaceRec { /* ulmObjects_ObjectRec */
		ulmScales_CreateProc create;
		ulmScales_GetValueProc getvalue;
		ulmScales_SetValueProc setvalue;
		ulmScales_AssignProc assign;
		ulmScales_OperatorProc op;
		ulmScales_CompareProc compare;
		ulmScales_ConvertProc scaleToReference, referenceToScale;
	} ulmScales_InterfaceRec;

typedef
	struct ulmScales_MeasureRec { /* ulmOperations_OperandRec */
		INT64 _prvt0;
		char _prvt1[89];
	} ulmScales_MeasureRec;

typedef
	struct ulmScales_ScaleRec { /* ulmDisciplines_ObjectRec */
		INT64 _prvt0;
		char _prvt1[40];
	} ulmScales_ScaleRec;

typedef
	CHAR ulmScales_UnitName[32];

typedef
	struct ulmScales_UnitRec { /* ulmDisciplines_ObjectRec */
		INT64 _prvt0;
		char _prvt1[40];
	} ulmScales_UnitRec;


import ulmEvents_EventType ulmScales_invalidOperation, ulmScales_incompatibleScales, ulmScales_badCombination;

import ADDRESS *ulmScales_FamilyRec__typ;
import ADDRESS *ulmScales_ScaleRec__typ;
import ADDRESS *ulmScales_UnitRec__typ;
import ADDRESS *ulmScales_MeasureRec__typ;
import ADDRESS *ulmScales_InterfaceRec__typ;

import void ulmScales_ConvertMeasure (ulmScales_Scale scale, ulmScales_Measure *measure);
import void ulmScales_CreateAbsMeasure (ulmScales_Scale scale, ulmScales_Measure *measure);
import void ulmScales_CreateMeasure (ulmScales_Scale scale, ulmScales_Measure *measure, INT8 type);
import void ulmScales_CreateRelMeasure (ulmScales_Scale scale, ulmScales_Measure *measure);
import void ulmScales_GetFamily (ulmScales_Scale scale, ulmScales_Family *family);
import void ulmScales_GetName (ulmScales_Unit unit, ulmScales_UnitName name);
import void ulmScales_GetReference (ulmScales_Family family, ulmScales_Scale *reference);
import void ulmScales_GetScale (ulmScales_Measure measure, ulmScales_Scale *scale);
import void ulmScales_GetScaleOfUnit (ulmScales_Unit unit, ulmScales_Scale *scale);
import void ulmScales_GetValue (ulmScales_Measure measure, ulmScales_Unit unit, INT32 *value);
import void ulmScales_Init (ulmScales_Scale scale, ulmScales_Family family, ulmScales_Interface if_);
import void ulmScales_InitFamily (ulmScales_Family family, ulmScales_Scale reference);
import void ulmScales_InitUnit (ulmScales_Scale scale, ulmScales_Unit unit, ulmScales_UnitName name);
import BOOLEAN ulmScales_IsAbsolute (ulmScales_Measure measure);
import BOOLEAN ulmScales_IsRelative (ulmScales_Measure measure);
import INT8 ulmScales_MeasureType (ulmScales_Measure measure);
import BOOLEAN ulmScales_NextUnit (ulmScales_Scale scale, ulmScales_Unit *unit);
import void ulmScales_SetValue (ulmScales_Measure measure, ulmScales_Unit unit, INT32 value);
import void ulmScales_TraverseUnits (ulmScales_Scale scale);
import void *ulmScales__init(void);


#endif // ulmScales
