|
@@ -20,7 +20,7 @@ TYPE
|
|
|
(* generic property object that provides lock-free access to its value *)
|
|
|
Property* = OBJECT
|
|
|
VAR
|
|
|
- locks: LONGINT;
|
|
|
+ locks: SIZE;
|
|
|
container*: OBJECT;
|
|
|
|
|
|
PROCEDURE &InitProperty;
|
|
@@ -28,7 +28,7 @@ TYPE
|
|
|
END InitProperty;
|
|
|
|
|
|
PROCEDURE AcquireRead;
|
|
|
- VAR locks: LONGINT;
|
|
|
+ VAR locks: SIZE;
|
|
|
BEGIN
|
|
|
LOOP
|
|
|
locks := SELF.locks;
|
|
@@ -42,7 +42,7 @@ TYPE
|
|
|
END ReleaseRead;
|
|
|
|
|
|
PROCEDURE AcquireWrite;
|
|
|
- VAR locks: LONGINT;
|
|
|
+ VAR locks: SIZE;
|
|
|
BEGIN
|
|
|
LOOP
|
|
|
locks := SELF.locks;
|
|
@@ -83,12 +83,12 @@ TYPE
|
|
|
END Set;
|
|
|
|
|
|
PROCEDURE Changed (value: BOOLEAN);
|
|
|
- VAR i: LONGINT;
|
|
|
+ VAR i: SIZE;
|
|
|
BEGIN i := 0; WHILE handlers[i] # NIL DO handlers[i] (SELF, value); INC (i) END;
|
|
|
END Changed;
|
|
|
|
|
|
PROCEDURE AddHandler* (handler: BooleanHandler);
|
|
|
- VAR i: LONGINT;
|
|
|
+ VAR i: SIZE;
|
|
|
BEGIN i := 0; WHILE handlers[i] # NIL DO INC (i) END; handlers[i] := handler;
|
|
|
END AddHandler;
|
|
|
|
|
@@ -96,40 +96,40 @@ TYPE
|
|
|
|
|
|
Integer* = OBJECT (Property)
|
|
|
VAR
|
|
|
- value: LONGINT;
|
|
|
+ value: WORD;
|
|
|
handlers: ARRAY MaxHandlers OF IntegerHandler;
|
|
|
|
|
|
- PROCEDURE &InitInteger* (value: LONGINT);
|
|
|
+ PROCEDURE &InitInteger* (value: WORD);
|
|
|
BEGIN InitProperty; SELF.value := value;
|
|
|
END InitInteger;
|
|
|
|
|
|
- PROCEDURE Get* (): LONGINT;
|
|
|
- VAR value: LONGINT;
|
|
|
+ PROCEDURE Get* (): WORD;
|
|
|
+ VAR value: WORD;
|
|
|
BEGIN AcquireRead; value := SELF.value; ReleaseRead; RETURN value;
|
|
|
END Get;
|
|
|
|
|
|
- PROCEDURE Set* (value: LONGINT);
|
|
|
+ PROCEDURE Set* (value: WORD);
|
|
|
VAR changed: BOOLEAN;
|
|
|
BEGIN AcquireWrite; changed := SELF.value # value; SELF.value := value; ReleaseWrite; IF changed THEN Changed (value) END;
|
|
|
END Set;
|
|
|
|
|
|
- PROCEDURE Inc* (step: LONGINT);
|
|
|
+ PROCEDURE Inc* (step: WORD);
|
|
|
VAR changed: BOOLEAN;
|
|
|
BEGIN AcquireWrite; changed := step # 0; INC (value, step); ReleaseWrite; IF changed THEN Changed (value) END;
|
|
|
END Inc;
|
|
|
|
|
|
- PROCEDURE Dec* (step: LONGINT);
|
|
|
+ PROCEDURE Dec* (step: WORD);
|
|
|
VAR changed: BOOLEAN;
|
|
|
BEGIN AcquireWrite; changed := step # 0; DEC (value, step); ReleaseWrite; IF changed THEN Changed (value) END;
|
|
|
END Dec;
|
|
|
|
|
|
- PROCEDURE Changed (value: LONGINT);
|
|
|
- VAR i: LONGINT;
|
|
|
+ PROCEDURE Changed (value: WORD);
|
|
|
+ VAR i: SIZE;
|
|
|
BEGIN i := 0; WHILE handlers[i] # NIL DO handlers[i] (SELF, value); INC (i) END;
|
|
|
END Changed;
|
|
|
|
|
|
PROCEDURE AddHandler* (handler: IntegerHandler);
|
|
|
- VAR i: LONGINT;
|
|
|
+ VAR i: SIZE;
|
|
|
BEGIN i := 0; WHILE handlers[i] # NIL DO INC (i) END; handlers[i] := handler;
|
|
|
END AddHandler;
|
|
|
|
|
@@ -155,12 +155,12 @@ TYPE
|
|
|
END Set;
|
|
|
|
|
|
PROCEDURE Changed (value: REAL);
|
|
|
- VAR i: LONGINT;
|
|
|
+ VAR i: SIZE;
|
|
|
BEGIN i := 0; WHILE handlers[i] # NIL DO handlers[i] (SELF, value); INC (i) END;
|
|
|
END Changed;
|
|
|
|
|
|
PROCEDURE AddHandler* (handler: RealHandler);
|
|
|
- VAR i: LONGINT;
|
|
|
+ VAR i: SIZE;
|
|
|
BEGIN i := 0; WHILE handlers[i] # NIL DO INC (i) END; handlers[i] := handler;
|
|
|
END AddHandler;
|
|
|
|
|
@@ -185,23 +185,23 @@ TYPE
|
|
|
BEGIN AcquireWrite; changed := SELF.value # value; SELF.value := value; ReleaseWrite; IF changed THEN Changed (value) END;
|
|
|
END Set;
|
|
|
|
|
|
- PROCEDURE Incl* (element: LONGINT);
|
|
|
+ PROCEDURE Incl* (element: WORD);
|
|
|
VAR changed: BOOLEAN;
|
|
|
BEGIN AcquireWrite; changed := ~(element IN value); INCL (value, element); ReleaseWrite; IF changed THEN Changed (value) END;
|
|
|
END Incl;
|
|
|
|
|
|
- PROCEDURE Excl* (element: LONGINT);
|
|
|
+ PROCEDURE Excl* (element: WORD);
|
|
|
VAR changed: BOOLEAN;
|
|
|
BEGIN AcquireWrite; changed := element IN value; EXCL (value, element); ReleaseWrite; IF changed THEN Changed (value) END;
|
|
|
END Excl;
|
|
|
|
|
|
PROCEDURE Changed (value: SET);
|
|
|
- VAR i: LONGINT;
|
|
|
+ VAR i: SIZE;
|
|
|
BEGIN i := 0; WHILE handlers[i] # NIL DO handlers[i] (SELF, value); INC (i) END;
|
|
|
END Changed;
|
|
|
|
|
|
PROCEDURE AddHandler* (handler: SetHandler);
|
|
|
- VAR i: LONGINT;
|
|
|
+ VAR i: SIZE;
|
|
|
BEGIN i := 0; WHILE handlers[i] # NIL DO INC (i) END; handlers[i] := handler;
|
|
|
END AddHandler;
|
|
|
|
|
@@ -212,7 +212,7 @@ TYPE
|
|
|
value: POINTER TO ARRAY OF CHAR;
|
|
|
handlers: ARRAY MaxHandlers OF StringHandler;
|
|
|
|
|
|
- PROCEDURE &InitString* (CONST value: ARRAY OF CHAR; length: LONGINT);
|
|
|
+ PROCEDURE &InitString* (CONST value: ARRAY OF CHAR; length: SIZE);
|
|
|
BEGIN InitProperty; NEW (SELF.value, length); COPY (value, SELF.value^);
|
|
|
END InitString;
|
|
|
|
|
@@ -226,12 +226,12 @@ TYPE
|
|
|
END Set;
|
|
|
|
|
|
PROCEDURE Changed (CONST value: ARRAY OF CHAR);
|
|
|
- VAR i: LONGINT;
|
|
|
+ VAR i: SIZE;
|
|
|
BEGIN i := 0; WHILE handlers[i] # NIL DO handlers[i] (SELF, value); INC (i) END;
|
|
|
END Changed;
|
|
|
|
|
|
PROCEDURE AddHandler* (handler: StringHandler);
|
|
|
- VAR i: LONGINT;
|
|
|
+ VAR i: SIZE;
|
|
|
BEGIN i := 0; WHILE handlers[i] # NIL DO INC (i) END; handlers[i] := handler;
|
|
|
END AddHandler;
|
|
|
|
|
@@ -282,10 +282,10 @@ TYPE
|
|
|
|
|
|
TYPE IntegerMessage* = OBJECT (Message)
|
|
|
VAR
|
|
|
- value: LONGINT;
|
|
|
+ value: WORD;
|
|
|
procedure: IntegerProcedure;
|
|
|
|
|
|
- PROCEDURE &InitIntegerMessage* (value: LONGINT; procedure: IntegerProcedure);
|
|
|
+ PROCEDURE &InitIntegerMessage* (value: WORD; procedure: IntegerProcedure);
|
|
|
BEGIN InitMessage; SELF.value := value; SELF.procedure := procedure;
|
|
|
END InitIntegerMessage;
|
|
|
|
|
@@ -297,10 +297,10 @@ TYPE
|
|
|
|
|
|
TYPE IntegerIntegerMessage* = OBJECT (Message)
|
|
|
VAR
|
|
|
- value0, value1: LONGINT;
|
|
|
+ value0, value1: WORD;
|
|
|
procedure: IntegerIntegerProcedure;
|
|
|
|
|
|
- PROCEDURE &InitIntegerIntegerMessage* (value0, value1: LONGINT; procedure: IntegerIntegerProcedure);
|
|
|
+ PROCEDURE &InitIntegerIntegerMessage* (value0, value1: WORD; procedure: IntegerIntegerProcedure);
|
|
|
BEGIN InitMessage; SELF.value0 := value0; SELF.value1 := value1; SELF.procedure := procedure;
|
|
|
END InitIntegerIntegerMessage;
|
|
|
|
|
@@ -346,7 +346,7 @@ TYPE
|
|
|
procedure: StringProcedure;
|
|
|
|
|
|
PROCEDURE &InitStringMessage* (CONST value: ARRAY OF CHAR; procedure: StringProcedure);
|
|
|
- VAR length: LONGINT;
|
|
|
+ VAR length: SIZE;
|
|
|
BEGIN
|
|
|
InitMessage; length := 0;
|
|
|
WHILE value[length] # 0X DO INC (length); END;
|
|
@@ -382,10 +382,10 @@ TYPE
|
|
|
|
|
|
IntegerRequest* = OBJECT (Request)
|
|
|
VAR
|
|
|
- value: LONGINT;
|
|
|
+ value: WORD;
|
|
|
procedure: IntegerProcedure;
|
|
|
|
|
|
- PROCEDURE &InitIntegerRequest* (value: LONGINT; procedure: IntegerProcedure);
|
|
|
+ PROCEDURE &InitIntegerRequest* (value: WORD; procedure: IntegerProcedure);
|
|
|
BEGIN InitRequest; SELF.value := value; SELF.procedure := procedure;
|
|
|
END InitIntegerRequest;
|
|
|
|
|
@@ -413,7 +413,7 @@ TYPE
|
|
|
RequestInteger* = OBJECT (Request)
|
|
|
VAR
|
|
|
procedure: ProcedureInteger;
|
|
|
- result-: LONGINT;
|
|
|
+ result-: WORD;
|
|
|
|
|
|
PROCEDURE &InitRequestInteger* (procedure: ProcedureInteger);
|
|
|
BEGIN InitRequest; SELF.procedure := procedure;
|
|
@@ -442,11 +442,11 @@ TYPE
|
|
|
|
|
|
IntegerRequestBoolean* = OBJECT (Request)
|
|
|
VAR
|
|
|
- value: LONGINT;
|
|
|
+ value: WORD;
|
|
|
procedure: IntegerProcedureBoolean;
|
|
|
result-: BOOLEAN;
|
|
|
|
|
|
- PROCEDURE &InitIntegerRequestBoolean* (value: LONGINT; procedure: IntegerProcedureBoolean);
|
|
|
+ PROCEDURE &InitIntegerRequestBoolean* (value: WORD; procedure: IntegerProcedureBoolean);
|
|
|
BEGIN InitRequest; SELF.value := value; SELF.procedure := procedure;
|
|
|
END InitIntegerRequestBoolean;
|
|
|
|
|
@@ -460,7 +460,7 @@ TYPE
|
|
|
VAR
|
|
|
value: REAL;
|
|
|
procedure: RealProcedureInteger;
|
|
|
- result-: LONGINT;
|
|
|
+ result-: WORD;
|
|
|
|
|
|
PROCEDURE &InitRealRequestInteger* (value: REAL; procedure: RealProcedureInteger);
|
|
|
BEGIN InitRequest; SELF.value := value; SELF.procedure := procedure;
|
|
@@ -519,7 +519,7 @@ TYPE
|
|
|
BEGIN NEW (message, value, procedure); Add (message, NoDelay);
|
|
|
END AddBooleanMessage;
|
|
|
|
|
|
- PROCEDURE AddIntegerMessage* (value: LONGINT; procedure: IntegerProcedure);
|
|
|
+ PROCEDURE AddIntegerMessage* (value: WORD; procedure: IntegerProcedure);
|
|
|
VAR message: IntegerMessage;
|
|
|
BEGIN NEW (message, value, procedure); Add (message, NoDelay);
|
|
|
END AddIntegerMessage;
|
|
@@ -539,12 +539,12 @@ TYPE
|
|
|
BEGIN NEW (message, value, procedure); Add (message, NoDelay);
|
|
|
END AddStringMessage;
|
|
|
|
|
|
- PROCEDURE AddIntegerIntegerMessage* (value0, value1: LONGINT; procedure: IntegerIntegerProcedure);
|
|
|
+ PROCEDURE AddIntegerIntegerMessage* (value0, value1: WORD; procedure: IntegerIntegerProcedure);
|
|
|
VAR message: IntegerIntegerMessage;
|
|
|
BEGIN NEW (message, value0, value1, procedure); Add (message, NoDelay);
|
|
|
END AddIntegerIntegerMessage;
|
|
|
|
|
|
- PROCEDURE AddIntegerRequest* (value: LONGINT; procedure: IntegerProcedure);
|
|
|
+ PROCEDURE AddIntegerRequest* (value: WORD; procedure: IntegerProcedure);
|
|
|
VAR request: IntegerRequest;
|
|
|
BEGIN NEW (request, value, procedure); Add (request, NoDelay);
|
|
|
END AddIntegerRequest;
|
|
@@ -554,7 +554,7 @@ TYPE
|
|
|
BEGIN NEW (request, procedure); Add (request, NoDelay); RETURN request.result;
|
|
|
END AddRequestBoolean;
|
|
|
|
|
|
- PROCEDURE AddRequestInteger* (procedure: ProcedureInteger): LONGINT;
|
|
|
+ PROCEDURE AddRequestInteger* (procedure: ProcedureInteger): WORD;
|
|
|
VAR request: RequestInteger;
|
|
|
BEGIN NEW (request, procedure); Add (request, NoDelay); RETURN request.result;
|
|
|
END AddRequestInteger;
|
|
@@ -564,12 +564,12 @@ TYPE
|
|
|
BEGIN NEW (request, procedure); Add (request, NoDelay); RETURN request.result;
|
|
|
END AddRequestReal;
|
|
|
|
|
|
- PROCEDURE AddIntegerRequestBoolean* (value: LONGINT; procedure: IntegerProcedureBoolean): BOOLEAN;
|
|
|
+ PROCEDURE AddIntegerRequestBoolean* (value: WORD; procedure: IntegerProcedureBoolean): BOOLEAN;
|
|
|
VAR request: IntegerRequestBoolean;
|
|
|
BEGIN NEW (request, value, procedure); Add (request, NoDelay); RETURN request.result;
|
|
|
END AddIntegerRequestBoolean;
|
|
|
|
|
|
- PROCEDURE AddRealRequestInteger* (value: REAL; procedure: RealProcedureInteger): LONGINT;
|
|
|
+ PROCEDURE AddRealRequestInteger* (value: REAL; procedure: RealProcedureInteger): WORD;
|
|
|
VAR request: RealRequestInteger;
|
|
|
BEGIN NEW (request, value, procedure); Add (request, NoDelay); RETURN request.result;
|
|
|
END AddRealRequestInteger;
|
|
@@ -609,25 +609,25 @@ TYPE
|
|
|
|
|
|
(* helper types *)
|
|
|
BooleanHandler = PROCEDURE {DELEGATE} (property: Boolean; value: BOOLEAN);
|
|
|
- IntegerHandler = PROCEDURE {DELEGATE} (property: Integer; value: LONGINT);
|
|
|
+ IntegerHandler = PROCEDURE {DELEGATE} (property: Integer; value: WORD);
|
|
|
RealHandler = PROCEDURE {DELEGATE} (property: Real; value: REAL);
|
|
|
SetHandler = PROCEDURE {DELEGATE} (property: Set; value: SET);
|
|
|
StringHandler = PROCEDURE {DELEGATE} (property: String; CONST value: ARRAY OF CHAR);
|
|
|
|
|
|
Procedure = PROCEDURE {DELEGATE};
|
|
|
BooleanProcedure = PROCEDURE {DELEGATE} (value: BOOLEAN);
|
|
|
- IntegerProcedure = PROCEDURE {DELEGATE} (value: LONGINT);
|
|
|
- IntegerIntegerProcedure = PROCEDURE {DELEGATE} (value0, value1: LONGINT);
|
|
|
+ IntegerProcedure = PROCEDURE {DELEGATE} (value: WORD);
|
|
|
+ IntegerIntegerProcedure = PROCEDURE {DELEGATE} (value0, value1: WORD);
|
|
|
RealProcedure = PROCEDURE {DELEGATE} (value: REAL);
|
|
|
SetProcedure = PROCEDURE {DELEGATE} (value: SET);
|
|
|
StringProcedure = PROCEDURE {DELEGATE} (CONST value: ARRAY OF CHAR);
|
|
|
|
|
|
ProcedureBoolean = PROCEDURE {DELEGATE} (): BOOLEAN;
|
|
|
- ProcedureInteger = PROCEDURE {DELEGATE} (): LONGINT;
|
|
|
+ ProcedureInteger = PROCEDURE {DELEGATE} (): WORD;
|
|
|
ProcedureReal = PROCEDURE {DELEGATE} (): REAL;
|
|
|
|
|
|
- IntegerProcedureBoolean = PROCEDURE {DELEGATE} (value: LONGINT): BOOLEAN;
|
|
|
- RealProcedureInteger = PROCEDURE {DELEGATE} (value: REAL): LONGINT;
|
|
|
+ IntegerProcedureBoolean = PROCEDURE {DELEGATE} (value: WORD): BOOLEAN;
|
|
|
+ RealProcedureInteger = PROCEDURE {DELEGATE} (value: REAL): WORD;
|
|
|
|
|
|
(* helper function for delayed execution *)
|
|
|
PROCEDURE Delay* (delay: LONGINT): LONGINT;
|