/* Centrage de la référence et de la valeur d'un composant.
Version 1.00: 11 août 1998
Version 1.01: 13 avril 2000 (modif gestion SAVEALL, OBJECTS)
Version 1.02: 16 avril 2000 (amélioration placement)
Version 1.03: 4 novembre 2000 (localisation anglais/français)
$VER: Centrer.AmiCAD 1.03, © R.Florac, 4 novembre 2000 */

options results

signal on error
signal on syntax

'LANGUAGE'
if result='français.language' then fr=1
else fr=0

nc=0; objet=1
'SAVEALL:OBJECTS'; objets=result
if objets<1 then do
    if fr=1 then 'MESSAGE("Il n''y a rien à faire !")'
    else 'MESSAGE("Nothing to do !")'
    exit
end

do while objet>0
    'O=FINDOBJ(-'objet',1,-1,-1)'; objet=result
    if objet>0 then do
	nc=nc+1
	call centrer(objet)
	objet=objet+1
	if objet>objets then objet=0
    end
end

if nc=0 then do
    if fr=1 then 'MESSAGE("Sélectionnez d''abord"+CHR(10)+"le composant à arranger")'
    else 'MESSAGE("Select a component"+CHR(10)+"before calling this script")'
    exit
end

exit

centrer: procedure
    parse arg o
    'GETPOS(O='o')'; p=result
    'R=GETREF(O)'
    ref=result
    'V=GETVAL(O)'
    val=result
    if ref>0 then do
	if val=0 then do
	    if p=1 | p=3 then do
		'MOVE(R,0,LINE(O)-LINE(R)+(HEIGHT(O)+HEIGHT(R))/2)'
	    end
	    else do
		'MOVE(R,COL(O)-COL(R)+(WIDTH(O)-WIDTH(R))/2,0)'
	    end
	end
	else do
	    if p=1 | p=3 then do
		'MOVE(R,0,LINE(O)-LINE(R)+HEIGHT(O)/2)'
	    end
	    else do
		'MOVE(R,COL(O)-COL(R)+(WIDTH(O)-WIDTH(R))/2,0)'
	    end
	end
    end
    if val>0 then do
	if ref=0 then do
	    if p=1 | p=3 then do
		'MOVE(V,0,LINE(O)-LINE(V)+(HEIGHT(O)+HEIGHT(V))/2)'
	    end
	    else do
		'MOVE(V,COL(O)-COL(V)+(WIDTH(O)-WIDTH(V))/2,0)'
	    end
	end
	else do
	    if p=1 | p=3 then do
		'MOVE(V,0,LINE(O)-LINE(V)+(HEIGHT(O)+3*HEIGHT(V)/2)/2)'
	    end
	    else do
		'MOVE(V,COL(O)-COL(V)+(WIDTH(O)-WIDTH(V))/2,0)'
	    end
	end
    end
return

/* Traitement des erreurs, interruption du programme */
syntax:
erreur=RC
if fr=1 then 'MESSAGE("Script Centrer.AmiCAD"+CHR(10)+"Erreur de syntaxe"+CHR(10)+"en ligne 'SIGL'"+CHR(10)+"'errortext(erreur)'")'
else 'MESSAGE("Script Centrer.AmiCAD"+CHR(10)+"Syntax error"+CHR(10)+"in line 'SIGL'"+CHR(10)+"'errortext(erreur)'")'
exit

error:
if fr=1 then 'MESSAGE("Script Centrer.AmiCAD"+CHR(10)+"Erreur en ligne 'SIGL'")'
else 'MESSAGE("Script Centrer.AmiCAD"+CHR(10)+"Error in line 'SIGL'")'
exit
