[fpc-pascal] Unicodestrings and Assign(File)

Jürgen Hestermann juergen.hestermann at gmx.de
Sat May 19 17:47:09 CEST 2012


Sven Barth schrieb:
 > If you change do_open to support Unicode you should do this for the 
other functions (e.g. write,
 > read) as well so that only the *W functions are used for them.

I think read/write only work on the file handle and don't use the file name.
So no changes are needed here (I think).
But of course there are other functions that need changing, for example

Assign
Reset
Rewrite
FindFirst(File)
Rename
some others.


 > Also you need to keep in mind that do_open is used by platform 
independant code
 > so you would need to change the declarations/handling for all other 
platforms as well.

Yes. It can be a can of worms. ;-)
Although, as said: Only very few functions realy act on the file name.
Most use the file handle only (which will not change).


 > Also you need to change the declaration of Assign as this expects a 
Short-/AnsiString.

I think it should be declared as "UnicodeString" or "String" so that 
other string types that
are handed over are converted automatically.


 > Also I don't know whether the Unix users would be happy if we'd push 
UnicodeString upon them or whether they'd prefer AnsiString(CP_UTF8).

Yes, this is a general question:
What kind of string type should be used within Free Pascal mainly?
I am not sure how this is all affected by
http://wiki.freepascal.org/FPC_Unicode_support#Roadmap_of_RTL_Unicode_support_with_UnicodeString


 > In the end maybe it should be AnsiString(CP_UTF8) for Unix systems 
and UnicodeString
 > for Windows systems and AnsiString(CP_SCP) (the current string) for 
the other systems,
 > so especially the platform independant code needs to be adjusted to 
support all three
 > cases without problems (which might not need that much work in the 
end...).

As far as I know currently all platforms share the same filerec/textrec 
definitions (which is
an array of bytes now). If that is changed then it would be changed for 
all platforms.
But it can be changed to generic string type too. I am not so sure what 
this actually
means when the type differs from one platform to the other. For example, 
I have to use a "pointer
to widestring" for CreateFileW for Windows. So I need to convert to a 
null terminated widestring
from the existing string type and this conversion must work under all 
circumstances.




More information about the fpc-pascal mailing list