[fpc-devel]Compilation of Apples Universal Interfaces

Dr. Rolf Jansen InstantWare at t-online.de
Mon Aug 16 10:31:50 CEST 2004

There is an ongoing fruitful private discussion between Olle Raab, 
Jonas Maebe and me (Rolf Jansen) about the compilation of Apples 
Universal PInterfaces with Free Pascal.

The actual state is, that with relatively minor tweaks the UI´s can be 
compiled for Classic Mac OS (Olle) and also for Mac OS X (Rolf). After 
Jonas made some changes to the compiler with respect to the resolution 
of external names, I was able to produce a running NIB based Carbon 
application completely with Free Pascal within Xcode. NIB means that 
the user interface is built by Interface Builder and not with ResEdit.

Olle suggested to continue the discussion at the fpc-devel list, so 
after giving to you (the group) this short summary, I continue with the 


I am with you to keep the number of changes to the PInterfaces as small 
as possible. However, I would like to make a distinction between buggy 
or misleading parts of the PInterfaces and those parts which simply 
belong to another flavour (presumably the Mac one).

A.  I advocate for debugging the UI´s and not to accommodate
     for bugs in the Free Pascal mode -Mmacpas.

B.  I advocate for improving the Free Pascal mode -Mmacpas in order
     to allow all Pascal Mac developers a smooth transition.

C.  I advocate for maintaining and improving the PInterfaces
     as time goes by since Apple will not do it anymore.

Examples for A:

IMHO the active LongDouble routines in fp.p and the use of the term 
"object" at several places belong definitely to category A. In fact, 
your example "SetDeskCPat" is deactivated with the {$IFC 
CALL_NOT_IN_CARBON} directive. IT IS the policy of the UI to 
activate/deactivate not used parts for different platforms/targets - by 
this way the interfaces became universal.

I doubt that the term LongDouble was ever used by Mac Pascal 
Programmers. LongDouble was known as extended. So, I suggest not to 
care about the LongDouble routines, but simply deactivate them for Mac 
OS X by encapsulating them with the conditional directive {$IFC 

I consider "object" to be a reserved word for Mac Pascal. So it is a 
bug to use it as record field names or in routine declarations as 
parameter names. There is no other way, "object" must be renamed in the 

In CFStrings.p compared to CFStrings.h the declaration of CFSTR is 
simply missing, but many other parts of the UI´s rely on it. So, there 
is no other way, the following declaration should be added at line 158:

function CFSTR(cStr: ConstCStringPtr): CFStringRef; external name 

Example for B:

{$LibExport+} belongs definitely to category B. It might be a good idea 
to let Free Pascal accept this directive in -Mmacpas in the future, 
even if it does nothing special but simply ignor it.

Example for C:

The changes to the type declaration of CStringPtr/ConstCStringPtr from 
Ptr to PChar belong to category C. After thinking about it, I aggree 
with you that this more specific change is better compared to the more 
general change of Ptr from ^SInt8 to PChar.

It might be a good idea to surround changes of category C with the 
conditional compiler directive {$IFC NOT UNDEFINED FPC}.

This would mean in the given case that in MacTypes.p:

	CStringPtr            = Ptr;
	CStringPtrPtr         = ^CStringPtr;
	ConstCStringPtr       = Ptr;
	ConstCStringPtrPtr    = ^ConstCStringPtr;

should be changed to:

	CStringPtr            = Ptr;
	CStringPtr            = PChar;
	CStringPtrPtr         = ^CStringPtr;
	ConstCStringPtr       = CStringPtr;
	ConstCStringPtrPtr    = ^ConstCStringPtr;

If we follow these rules then no change of either category will break 
compatibility to old Mac compilers or different targets.

I aggree with you that it would be great if Apple would allow us to 
distribute a patched version of the PInterfaces. In the meantime we 
have to go the diff and patch way.

Best regards


__ InstantWare ______________________________________________________
  Dr. Rolf Jansen * Stephanienstraße 19 * D-76133 Karlsruhe * Germany


More information about the fpc-devel mailing list