| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- MODULE CStrProg;
- (* C string returns, char ** outputs and C-written CHAR buffers.
- CStr.CString is an explicit ADDRESS alias; CStr.Copy is the
- C-to-Modula-2 conversion. Expected exit code: 42. *)
- FROM CStr IMPORT CString, Length, Copy, IsNil;
- FROM CStrTest IMPORT m2_cstr_hello, m2_cstr_out, m2_cstr_fill;
- VAR
- ExitCode : INTEGER;
- buf : ARRAY [0..15] OF CHAR;
- p : CString;
- n : CARDINAL;
- ok : BOOLEAN;
- BEGIN
- p := m2_cstr_hello();
- ok := (NOT IsNil(p)) AND (Length(p) = 5);
- IF ok THEN
- n := Copy(p, buf);
- ok := (n = 5) AND (buf[0] = 'h') AND (buf[4] = 'o')
- AND (buf[5] = CHR(0))
- END;
- IF ok THEN
- p := NIL;
- ok := IsNil(p) AND (Length(p) = 0);
- IF ok THEN
- m2_cstr_out(p);
- ok := (NOT IsNil(p)) AND (Length(p) = 5);
- IF ok THEN
- n := Copy(p, buf);
- ok := (n = 5) AND (buf[0] = 'w') AND (buf[4] = 'd')
- AND (buf[5] = CHR(0))
- END
- END
- END;
- IF ok THEN
- n := m2_cstr_fill(buf, 16);
- ok := (n = 6) AND (buf[0] = 'b') AND (buf[5] = 'r')
- AND (buf[6] = CHR(0))
- END;
- IF ok THEN
- n := Copy(NIL, buf);
- ok := (n = 0) AND (buf[0] = CHR(0))
- END;
- IF ok THEN ExitCode := 42 ELSE ExitCode := 1 END
- END CStrProg.
|