cstruct_layout_prog.mod 956 B

123456789101112131415161718192021222324252627282930
  1. MODULE CStructLayoutProg;
  2. FROM SYSTEM IMPORT ADDRESS, ADR;
  3. FROM CStructLayout IMPORT Mixed, Rect, FRect, RGBA;
  4. PROCEDURE mixed_size () : INTEGER; EXTERNAL "m2_c_layout_mixed_size";
  5. PROCEDURE rect_size () : INTEGER; EXTERNAL "m2_c_layout_rect_size";
  6. PROCEDURE frect_size () : INTEGER; EXTERNAL "m2_c_layout_frect_size";
  7. PROCEDURE rgba_size () : INTEGER; EXTERNAL "m2_c_layout_rgba_size";
  8. PROCEDURE off (base, field : ADDRESS; which : INTEGER) : INTEGER;
  9. EXTERNAL "m2_c_layout_offset";
  10. VAR
  11. ExitCode : INTEGER;
  12. m : Mixed;
  13. BEGIN
  14. IF (SIZE(Mixed) = mixed_size())
  15. AND (SIZE(Rect) = rect_size())
  16. AND (SIZE(FRect) = frect_size())
  17. AND (SIZE(RGBA) = rgba_size())
  18. AND (off(ADR(m), ADR(m.b), 0) = 1)
  19. AND (off(ADR(m), ADR(m.f), 1) = 1)
  20. AND (off(ADR(m), ADR(m.d), 2) = 1)
  21. AND (off(ADR(m), ADR(m.i), 3) = 1)
  22. AND (off(ADR(m), ADR(m.p), 4) = 1) THEN
  23. ExitCode := 42
  24. ELSE
  25. ExitCode := 1
  26. END
  27. END CStructLayoutProg.