Copyright (C) 1994, Digital Equipment Corp.
UNSAFE MODULE wraps;
IMPORT DPS, Text;
PROCEDURE GetTransform ( ctxt: INTEGER;
VAR ctm, invctm: ARRAY [0..5] OF REAL;
VAR xOffset, yOffset: INTEGER ) =
BEGIN
GetTransformWrap ( ctxt, ADR(ctm[0]), ADR(invctm[0]), ADR(xOffset), ADR(yOffset) );
END GetTransform;
PROCEDURE FetchInteger ( ctxt: INTEGER;
u: TEXT; alreadyLocked: BOOLEAN := FALSE ): INTEGER =
VAR uu: UNTRACED REF ARRAY OF CHAR;
VAR ret: INTEGER;
BEGIN
uu := MakeString (u);
IF alreadyLocked THEN FetchIntegerWrap ( ctxt, ADR(uu[0]), ADR(ret) );
ELSE
TRY DPS.AcquireDPSMutex();
FetchIntegerWrap ( ctxt, ADR(uu[0]), ADR(ret) );
FINALLY DPS.ReleaseDPSMutex();
END;
END;
DISPOSE (uu);
RETURN ret;
END FetchInteger;
PROCEDURE FetchNumber ( ctxt: INTEGER;
u: TEXT; alreadyLocked: BOOLEAN := FALSE ): REAL =
VAR uu: UNTRACED REF ARRAY OF CHAR;
VAR ret: REAL;
BEGIN
uu := MakeString (u);
IF alreadyLocked THEN FetchNumberWrap ( ctxt, ADR(uu[0]), ADR(ret) );
ELSE
TRY DPS.AcquireDPSMutex();
FetchNumberWrap ( ctxt, ADR(uu[0]), ADR(ret) );
FINALLY DPS.ReleaseDPSMutex();
END;
END;
DISPOSE (uu);
RETURN ret;
END FetchNumber;
PROCEDURE FetchString ( ctxt: INTEGER;
u: TEXT; alreadyLocked: BOOLEAN := FALSE ): TEXT =
VAR uu, vv: UNTRACED REF ARRAY OF CHAR;
VAR ret: TEXT := "";
BEGIN
uu := MakeString (u);
vv := NEW (UNTRACED REF ARRAY OF CHAR, 1000);
IF alreadyLocked THEN FetchStringWrap ( ctxt, ADR(uu[0]), ADR(vv[0]) );
ELSE
TRY DPS.AcquireDPSMutex();
FetchStringWrap ( ctxt, ADR(uu[0]), ADR(vv[0]) );
FINALLY DPS.ReleaseDPSMutex();
END;
END;
DISPOSE (uu);
FOR j := 0 TO 999 DO
IF ORD(vv^[j]) = 0 THEN RETURN ret; END;
ret := ret & Text.FromChar (vv^[j]);
END;
RETURN ret;
END FetchString;
PROCEDURE XYHit ( ctxt: INTEGER; x, y: REAL; u: TEXT ): BOOLEAN =
VAR uu: UNTRACED REF ARRAY OF CHAR;
VAR ret: BOOLEAN;
BEGIN
uu := MakeString (u);
TRY DPS.AcquireDPSMutex();
XYHitWrap ( ctxt, x, y, ADR(uu[0]), ADR(ret) );
FINALLY DPS.ReleaseDPSMutex();
END;
DISPOSE (uu);
RETURN ret;
END XYHit;
PROCEDURE Stringwidth ( ctxt: INTEGER; f: TEXT; s: TEXT; VAR x, y: REAL ) =
VAR ff, ss: UNTRACED REF ARRAY OF CHAR;
BEGIN
ff := MakePSString (f);
ss := MakePSString (s);
TRY DPS.AcquireDPSMutex();
StringwidthWrap ( ctxt, ADR(ff[0]), ADR(ss[0]), ADR(x), ADR(y) );
FINALLY DPS.ReleaseDPSMutex();
END;
DISPOSE (ff); DISPOSE (ss);
END Stringwidth;
PROCEDURE MakePSString (t: TEXT): UNTRACED REF ARRAY OF CHAR =
VAR s: UNTRACED REF ARRAY OF CHAR;
VAR len, wax: INTEGER;
VAR k: INTEGER;
VAR c: CHAR;
BEGIN
len := Text.Length(t);
wax := 0;
FOR j := 0 TO len-1 DO
CASE Text.GetChar(t, j) OF
| '(' => wax := wax + 1;
| ')' => wax := wax + 1;
| '\\' => wax := wax + 1;
ELSE
END; (* of CASE *)
END; (* of FOR *)
s := NEW (UNTRACED REF ARRAY OF CHAR, len+wax+1);
k := 0;
FOR j := 0 TO len-1 DO
c := Text.GetChar(t, j);
CASE c OF
| '(' => s^[k] := '\\'; s^[k+1] := c; k := k + 2;
| ')' => s^[k] := '\\'; s^[k+1] := c; k := k + 2;
| '\\' => s^[k] := '\\'; s^[k+1] := c; k := k + 2;
ELSE s^[k] := c; k := k + 1;
END; (* of CASE *)
END; (* of FOR *)
s^[k] := '\000';
RETURN s;
END MakePSString;
PROCEDURE MakeString (t: TEXT): UNTRACED REF ARRAY OF CHAR =
VAR s: UNTRACED REF ARRAY OF CHAR;
VAR len: INTEGER;
BEGIN
len := Text.Length(t);
s := NEW (UNTRACED REF ARRAY OF CHAR, len+1);
FOR j := 0 TO len-1 DO s^[j] := Text.GetChar(t, j); END;
s^[len] := '\000';
RETURN s;
END MakeString;
BEGIN
END wraps.