61 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			OpenEdge ABL
		
	
	
	
	
	
#
 | 
						|
program callc(input,output) ;
 | 
						|
var success: integer ;
 | 
						|
procedure rcsid ; begin writeln('$Header$') end ;
 | 
						|
function kwad(val:integer) : integer ; extern ;
 | 
						|
procedure cmain ; extern ;
 | 
						|
procedure incs ; begin success:=success+1 end ;
 | 
						|
procedure pptr( function ptwice(val:integer):integer ) ; extern ;
 | 
						|
#ifndef NOFLOAT
 | 
						|
function ceval( function pinside(val:integer):real ): boolean ; extern ;
 | 
						|
function outside(val:integer):real ;
 | 
						|
begin
 | 
						|
	outside:= 1.411
 | 
						|
end ;
 | 
						|
procedure envellop ;
 | 
						|
var testval: integer ;
 | 
						|
function  inside(val:integer):real ;
 | 
						|
begin
 | 
						|
	if testval<>1234 then writeln('The static link is incorrect')
 | 
						|
		 else success:=success+1 ;
 | 
						|
	inside:=sqrt(val)
 | 
						|
end ;
 | 
						|
begin
 | 
						|
	testval:=1234 ;
 | 
						|
	if ceval(inside) then success:=success+1
 | 
						|
		 else writeln('Calling inside through C doesn''t work');
 | 
						|
	if ceval(outside) then success:=success+1
 | 
						|
		 else writeln('Calling outside through C doesn''t work')
 | 
						|
end;
 | 
						|
#endif
 | 
						|
procedure cptr( function pkwad(val:integer):integer ) ;
 | 
						|
begin
 | 
						|
	if ( pkwad(-2)<>4 ) and (pkwad(-8)<>64) then
 | 
						|
		writeln('Using C function pointers in Pascal doesn''t work')
 | 
						|
	else
 | 
						|
		success:=success+1
 | 
						|
end ;
 | 
						|
function twice(val:integer) : integer ;
 | 
						|
begin
 | 
						|
	twice:= 2*val
 | 
						|
end ;
 | 
						|
begin
 | 
						|
	success:=0 ;
 | 
						|
	if (kwad(2)<>4) and (kwad(8)<>64) then
 | 
						|
		writeln('C cals don''t work')
 | 
						|
	else
 | 
						|
		success:=success+1 ;
 | 
						|
	cmain;
 | 
						|
	pptr(twice) ;
 | 
						|
#ifndef NOFLOAT
 | 
						|
	envellop ;
 | 
						|
#endif
 | 
						|
	if success <>
 | 
						|
#ifdef NOFLOAT
 | 
						|
	4
 | 
						|
#else
 | 
						|
	7
 | 
						|
#endif
 | 
						|
	then writeln('Only ',success,' tests passed')
 | 
						|
		      else writeln('All tests passed')
 | 
						|
end.
 |