Oberon.Dim3Base.Mod 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. (* ETH Oberon, Copyright 2001 ETH Zuerich Institut fuer Computersysteme, ETH Zentrum, CH-8092 Zuerich.
  2. Refer to the "General ETH Oberon System Source License" contract available at: http://www.oberon.ethz.ch/ *)
  3. MODULE Dim3Base IN Oberon; (** portable *) (* David Ulrich Nov 95 - März 96 *)
  4. (* This module contains not portable procedures for the Native version **)
  5. IMPORT S := SYSTEM, Pictures;
  6. CONST Black* = 15; White* = 0; (** black and white of the windows color table **)
  7. VAR
  8. baseAdr: ADDRESS;
  9. lineW, height: LONGINT;
  10. (** correct color table for Native version **)
  11. PROCEDURE CheckColorTab*(VAR R, G, B: ARRAY OF INTEGER);
  12. (* nothing to do *)
  13. END CheckColorTab;
  14. (** convert color number to Dim3 color palette **)
  15. PROCEDURE GetRealColor*(color: INTEGER):INTEGER;
  16. BEGIN
  17. RETURN color
  18. END GetRealColor;
  19. (** calculate picture addresses **)
  20. PROCEDURE SetPicture*(P: Pictures.Picture);
  21. BEGIN
  22. baseAdr := P.address;
  23. lineW := P.width; height := P.height;
  24. END SetPicture;
  25. (** get address of position X in current scanline Y of actual picture **)
  26. PROCEDURE GetAddress*(X, Y: INTEGER): ADDRESS;
  27. BEGIN
  28. RETURN baseAdr + lineW * Y + X;
  29. END GetAddress;
  30. (** ReplConst in previosly set picture with mode replace, H = 1 **)
  31. PROCEDURE ReplConst*(col, X, Y, W: INTEGER);
  32. VAR col4: SET32; color: CHAR; pictAdr: ADDRESS; color4: ARRAY 4 OF CHAR;
  33. BEGIN
  34. color := CHR(col);
  35. color4[0] := color; color4[1] := color; color4[2] := color; color4[3] := color;
  36. col4 := S.VAL(SET32, color4);
  37. pictAdr := baseAdr + lineW * Y + X;
  38. WHILE W > 4 DO S.PUT(pictAdr, col4); DEC(W, 4); INC(pictAdr, 4) END;
  39. WHILE W > 0 DO S.PUT(pictAdr, color); DEC(W); INC(pictAdr) END;
  40. END ReplConst;
  41. END Dim3Base.