Hello Thomas Dunbar, hello GPC-list!
I can reproduce your error concerning strings with GPC for EMX:
when i compile:
program t(input,output); type s1=string(10); var s:s1; begin readln(s); writeln(substr(s,2,3)); end.
with gpc on solaris or linux, it compiles fine. when i compile with emxgpc, i get:
... (error messages)
The error comes from a wrong cooperation between GPC and GCC: Each of both thinks that it is job of the other one to implement the function __gcc_bcmp. Perhaps a recompile of GPC for EMX would solve the problem, but here is how you can get around the error: Just write a small file gcc_bcmp.c which contains the following:
/* __gcc_bcmp function */
/* Like bcmp except the sign is meaningful. Result is negative if S1 is less than S2, positive if S1 is greater, 0 if S1 and S2 are equal. */
typedef int size_t;
int __gcc_bcmp (s1, s2, size) unsigned char *s1, *s2; size_t size; { while (size > 0) { unsigned char c1 = *s1++, c2 = *s2++; if (c1 != c2) return c1 - c2; size--; } return 0; }
(I found it in the file libgcc2.c from the gcc-2.6.3 source.) Include it into the compile, e.g.:
gpc myfile.pas gcc_bcmp.c
A more elegant way would be to include the missing routine into gpc.lib for EMX. (But I don't know how to do this :-).
This problem will probably be fixed in my next release of GPC-EMX binaries.
Yours,
Peter
-------------------------------------------------------------------------------- Dipl. Phys. Peter Gerwinski Fachbereich Physik Universitaet-GH Essen Phone: +49-201-183-2763 D-45117 Essen Fax: +49-201-183-2120 Germany e-mail: pege@mail.theo-phys.uni-essen.de --------------------------------------------------------------------------------