ScriptControl


*** libSC
Contient des fonctions de support pour les applications :
Les noms des languages sont toujours en minuscules.

Classe SC

Constructeur SC
	SC( void )

Initialise une connection avec SCserver :
- si ncessaire lance SCserver,
- cre un BMessenger.

Destructeur SC
	virtual ~SC( void )

Rend les ressources alloues.

Error
	long Error( void )

Retourne le code d'erreur de la dernire opration.

SCCreateDo
	BMessage *SCCreateDoString( const char *language, ulong what,
	 const char *string )
	BMessage *SCCreateDoFile( const char *language, ulong what,
	 const char *file_name )
	BMessage *SCCreateDoFile( const char *language, ulong what,
	 record_ref file_ref )

Cre un message 'SCst' ou 'SCfi et ajoute les champs SCwhat et SClanguage.
En principe l'application cre un tel message, y ajoute les arguments 
passer au script et l'envoie  SCserver avec SCsend.
Retourne NULL si new BMessage a chou (*trs* peu probable).

SCSend
	long SCsend( BMessage *msg, BMessage **reply = NULL )
	long SCsend( ulong what, BMessage **reply = NULL )

Envoie un message  SCserver. Les variantes avec **reply attendent une
rponse (rponse synchrone).
*** Il faut viter de lancer un script de faon synchrone, surtout depuis
le thread principal.
Retourne un code d'erreur standard.

SCGetLanguageList
	BList *SCGetLanguageList( void )

Interroge SCserver et rend une BList dont les lments sont des pointeurs sur
des chanes contenant les noms des languages supports.
Cet appel est destin aux installateurs qui peuvent ainsi proposer
l'installation de l'application pour tel ou tel language.
Retourne NULL en cas d'erreur de cration de la liste (plus de mmoire ?).

SCInstall
	long SCInstall( record_ref file, const char *language = NULL )
	long SCInstall( const char *file, const char *language = NULL )

Installe les messages de l'application dans le langage demand ou dans tous
les langages disponibles si language==NULL, depuis le fichier file pass par
nom ou par record_ref.
Renvoie un code d'erreur standard.


*** Fichier de dfinition des messages :
Il y a 2 types de messages : ceux accepts par l'application et ceux envoys
 un script.
Le # indique une ligne de commentaire.
Les valeurs numriques (dont les signatures et what) peuvent tre exprims
sous forme numrique ( 1576798789 en dcimal, 0x75234865 en hexadcimal) ou
sous forme de constante ascii ( 'MyAp' ).
Le saut de ligne n'est pas un sparateur.
Les mots cls et les noms de types sont insensibles  la casse.
Format :

"nom de l'appli" 'SIGN'
sends
"nom du message" 'WHAT' ( <arguments> ) ( <valeurs de retour> )
...
receive
...

Aprs send on a donc les messages envoys par l'application  SCserver, la
rponse tant retourne par le script, et aprs receive, les messages que
comprend l'application et auxquels elle renvoit
Les noms sont des chanes quelconques, elles peuvent contenir les squences
standard \\, \", \t etc...
Les listes d'arguments sont de la forme :
"nom de l'argument" nom_du_type {taille}, <argument suivant> ...
Le nom du type est l'un des noms standards de champs BMessage, la taille
devant tre indique pour le type raw (et seulement celui-ci).
Il n'y a pas de valeurs par dfaut, ni d'arguments facultatifs car tous les
langages ne permettent pas de construire simplement des appels  nombre
d'arguments variables.


*** SCserver
Excute des requtes relatives aux scripts.
SCserver construit la liste des langages disponibles sur la base de la
prsence des interprteurs.
Les interprteurs doivent tre nomms SC<language> o <language> peut
actuellement tre python (et c++ si a intresse quelqu'un).


Messages reconnus :
'SCll' : liste des languages installs (rponse immdiate).
(pas de champ)
rponse : 'SCll'
	string SClanguage : tableau de noms

'SCin' : installe les messages d'une application pour un langage donn.
	string SClanguage : nom du langage au format duquel on configure
l'application.
	ref SCfile : fichier contenant la description des messages.
Il n'y a pas de rponse, mais SCserver affichera une bote d'alerte en cas
de problme.

'SCfi' : excution de script (fichier) :
	long SCwhat : valeur  mettre dans le what du message rexpdi.
	string SClanguage : chaine contenant le nom du language, l'interprteur
est recherch sous le nom "SC"+SClanguage.
	ref SCscript : rfrence du fichier contenant le script.

'SCst' : excution de script (chane) :
	long SCwhat : valeur  mettre dans le what du message rexpdi.
	string SClanguage : chaine contenant le nom du language, l'interprteur
est recherch sous le nom "SC"+SClanguage.
	string SCscript : chane contenant le script.

Ces 2 messages sont envoys  l'interpreteur identifi par SClanguage :
- SCserver met SCwhat dans what et on retire le champ SCwhat,
- le champ SClanguage est retir,
- le message est envoy comme message de dmarrage  l'interpreteur, qui
doit en principe retourner une rponse, relaye par SCserver vers
l'application.
Il est fortement dconseill  l'application d'envoyer un SCfi ou SCst de
faon synchrone : si l'interprteur ou SCserver se plantent, les BMessages
dtachs et encore sans rponse n'en recevront pas et l'application restera
dans SCsend indfiniment.

*** Langages supports
Si a intresse quelqu'un je peux faire un convertisseur vers C++, mais la
libSC devrait suffire, puisqu'en C++ on fabrique habituellement les messages
 la main avec les Add???, et libSC permet de ne pas se proccuper de la
signature de SCserver et de la communication inter application.

Actuellement seul Python est support :
- il y a un module intgr, SC, qui fournit les services de libSC et les
fonctions de manipulation des BMessages :

	find( signature, thread_id, launch_if_necessary )






*** Convertisseurs
