:- dynamic pl/1.

pl :-
	( current_op( 900, fy, nospy) -> 
		% sicstus (3.8)
		% current_op( _, _, sequential)
		% sicstus (3.7)
		retractall( pl(_OldP) ),
		prolog_flag(version,Ver),
		assert( pl(sicstus(Ver)) )
		;
		(  current_op( _P, _A, '#=' ) -> 
			% eclipse (4.2)
			getcwd(Cwd), 
			assert( prolog_load_context(directory,Cwd) ),
			assert( wh_prolog(eclipse(ver)) ),
			retract_all( pl(_OldP) ),
			get_flag( version, Ver ),
			assert( pl(eclipse(Ver)) )
			;
			( current_op( _P, _A, module_transparent ) ->
				% swi (3.3)
				current_prolog_flag( version, Ver ),
				retractall( pl(_OldP) ),
				assert( pl(swi(Ver)) )
				;
				( current_op(_P,_A,same) ->
					retractall( pl(_OldP) ),
					use_module( library(lists) ),
					current_prolog_flag( version, YapVer ),
                    atom_concat( 'Yap-', Rgt, YapVer ),
                    atom_codes( Rgt, RgtCs ),
					append( MjCs, [0'.|SrtCs], RgtCs ),
					append( MnCs, [0'.|FxCs], SrtCs ),
					number_codes( Mj, MjCs ),
					number_codes( Mn, MnCs ),
					number_codes( Fx, FxCs ),
					assert( pl(yap(Mj:Mn:Fx)) )
					;
					true
				)
			)
		)
	).

on_pl( Prolog, Guarded ) :-
	( pl( Prolog ) ->
		call( Guarded )
		;
		true
	).

:- pl.
