# Referència als scripts

Aquesta pàgina subministra material de referència per a les funcions de scripts.

Vegeu la pàgina de descripció Caixa d'eines esquerra per a informació general.

Vegeu la pàgina dels exemples de scripts per un inici ràpid de les funcions de programació.

## Llenguatge dels scripts

El llenguatge a usar és Script Pascal.
Per a una referència completa sobrte el llenguatge d'objectes Pascal, podeu llegir la Guia de Referència Pascal gratuïta http://www.freepascal.org/docs-html/ref/ref.html. Però tingueu en compte que alguna característica no està implementada el el llenguatge script, per exemple: no punters, no compilador, no sobrecàrrega.

Afegides a les característiques estàndard de l'script Pascal, hi ha les següents fucions específiques de Skychart.

## Funció menú principal

Tots els ítems del menú principal poden ser usatd des dels scripts.
La llista completa dels noms dels ítems del menú està disponible a la llista del menú.

Podeu executar les accions del menú usant el mètode Clic, o comprovar si una opció s'activa provant la propietat Marcada.

## Cadena de traducció

Cada cadena traduïda per al programa principal pot ser usada en un script.
Directament useu la constant rsXXX per obtenir la cadena traduïda.
La lloista completa de cadenes és obtenible del codi font.
Si alguna cadena no estés traduïda per al vostre idioma no dubteu a fer-ho personalment.

## Constants

name | value
--- | ---
deg2rad | constant de conversió de graus a radians
rad2deg | constant de conversió de radians a graus

## Accés a variables globals

function GetS(varname:string; var str: string):Boolean;
Obté la variable de cadena global identificada per varname
varname | value
--- | ---
ChartName | El nom de la darrera carta que envia un esdeveniment
RefreshText | El text de l'esdeveniment ChartRefresh
SelectionText | El text breu de l'objecte triat
DescriptionText | La descripció completa de l'objecte
DistanceText | El text del darrer esdeveniment de mesura de distància
Str1 .. Str10 | Deu variables globals per al vostre ús.

function SetS(varname:string; str: string):Boolean;
Identifica la variable de cadena global com varname per a ús futur
varname | value
--- | ---
Str1 .. Str10 | Deu variables globals per al vostre ús

function GetI(varname:string; var i: Integer):Boolean;
Obté la variable entera global identificada per varname
varname | value
--- | ---
Int1 .. Int10 | Deu variables globals per al vostre ús

function SetSL(varname:string; stlr: Tstringlist):Boolean;
Identifica la variable de llista de cadena global com varname per a ús futur
varname | value
--- | ---
Strl1 .. Strl10 | Deu variables globals per al vostre ús

function GetI(varname:string; var i: Integer):Boolean;
Obté la variable global entera identificada per varname
varname | value
--- | ---
Int1 .. Int10 | Deu variables globals per al vostre ús

function SetI(varname:string; i: Integer):Boolean;
Identifica la variable entera global com varname per a ús futur
varname | value
--- | ---
Int1 .. Int10 | Deu variables globals per al vostre ús

function GetD(varname:string; var x: double):boolean;
Identifica la variable double global com varname per a ús futur
varname | value
--- | ---
TelescopeRA | La AR de la posició del telescopi
TelescopeDE | La DEC de la posició del telescopi
TimeNow | El tempa actual en format TDateTime
Double1 .. Double10 | Deu variables globals per al vostre ús

function SetD(varname:string; x: Double):Boolean;
Posa la variable global double identificada per varname per a ús futur
varname | value
--- | ---
Double1 .. Double10 | Deu variables globals per al vostre ús

function GetV(varname:string; var v: Variant):Boolean;
Obté la variable global variant identificada per varname
varname | value
--- | ---
Telescope1 , Telescope2 | Dos objectes del telescopi ASCOM
Dome1 , Dome2 | Dos objectes de la cúpula ASCOM
Camera1 , Camera2 | Dos objectes de la càmera ASCOM
Focuser1 , Focuser2 | Dos objectes de l'enfocador ASCOM
Filter1 , Filter2 | Dos objectes de la roda filtre ASCOM
Rotator1 , Rotator2 | Dos objectes del rotador ASCOM
Variant1 .. Variant10 | Deu variables globals per al vostre ús

function SetV(varname:string; v: Variant):Boolean;
Obté la variable global variant identificada com varname per a ús futur.
varname | value
--- | ---
Telescope1 , Telescope2 | Dos objectes del telescopi ASCOM
Dome1 , Dome2 | Dos objectes de la cúpula ASCOM
Camera1 , Camera2 | Dos objectes de la càmera ASCOM
Focuser1 , Focuser2 | Dos objectes de l'enfocador ASCOM
Filter1 , Filter2 | Dos objectes de la roda filtre ASCOM
Rotator1 , Rotator2 | Dos objectes del rotador ASCOM
Variant1 .. Variant10 | Deu variables globals per al vostre ús

## Mapa i objectes celestes

function Cmd(cname:string; arg:Tstringlist):string;
Executa un dels comandaments del servidor Skychart. Afegeix el nom del comandament abans de la llista de cadenes, i després cada paràmetre.

procedure SendInfo(origin,str:string);
Envia un missatge als clients connectats al servidor Skychart .

function GetObservatoryList(list:TstringList):boolean;
Retorna la llista dels observatoris favorits

function GetScopeRates(list:TstringList):boolean;
Retorna una llista de les velocitats suportades pel telescopi

function GetCometList(const filter: string; maxnum:integer; list:TstringList):boolean;
Retorna una llista dels cometes d'acord amb el filtre

function GetAsteroidList(const filter: string; maxnum:integer; list:TstringList):boolean;
Retorna una llista dels asteroides d'acord amb el filtre

function CometMark(list:TstringList):boolean;
Marca els cometes llistats al mapa

function AsteroidMark(list:TstringList):boolean;
Marca els asteroides llistats al mapa

## Coordinates conversion

Procedure Eq2Hz(var ra,de : double ; var a,h : double);
Converteix l'equatorial AR,DEC a Alt/Az a,h per al lloc i l'hora de la carta actual, els angles en radians

Procedure Hz2Eq(var a,h : double; var ra,de : double);
Converteix Alt/Az a,h a equatorials AR,DEC per al lloc i l'hora de la carta actual, angles en radians

Procedure Eq2Gal(var ra,de : double ; var l,b : double);
Converteix equatorials AR,DEC a galàctics l,b , angles en radians

Procedure Gal2Eq(var l,b : double; var ra,de : double);
Converteix galàctics l,b a equatorials AR,DEC, angles en radians

Procedure Eq2Ecl(var ra,de : double ; var l,b : double);
Converteix equatorials AR,DEC a eclíptiques amb obliqüitat per la data de la carta actual, angles en radians

Procedure Ecl2Eq(var l,b : double; var ra,de : double);
Converteix eclíptiques l,b a equatorials AR,DEC amb obliqüitat per a la data de la carta actual, angles en radians

## Formatat i conversió

Function ARtoStr(var ar: Double) : string;
Retorna una cadena formatada d'Ascensió Recta des d'un valor AR

Function DEtoStr(var de: Double) : string;
Retorna una cadena de Declinació formatada des d'un valor DEC.

Function StrtoAR(str:string; var ar: Double) : boolean;
Converteix una cadena formatada al valor decimal de l'AR.

Function StrtoDE(str:string; var de: Double) : boolean;
Converteix una cadena formatada al valor decimal de la DEC

Function JDtoStr(var jd: Double) : string;
Formata un dia julià a una cadena AAAA-MM-DD

Function StrtoJD(dt:string; var jdt: Double) : boolean;
Converteix una cadea amb format AAAA-MM-DD a valor de dia julià

Function FormatFloat(Const Format : String; var Value : double) : String;
Formata un nombre decimal d'acord a l'especificació de Format

Function Format(Const Fmt : String; const Args : Array of const) : String;
La funció Pascal de Format

Procedure StrtoFloatD(str:string; var defval: Double; var val: Double);
Converteix una cadena a un valor de coma flotant. Retorna defval si la cadena no és un nombre vàlid

function IsNumber(str: String): boolean;
Retorna True (veritat) si la cadena representa un nombre vàlid.

function StringReplace(str,s1,s2: String): string;
Remplaça tota occurrència de s1 per s2 en str

procedure JsonToStringlist(jsontxt:string; var SK,SV: TStringList);
Recorre una cadena formatada JSON i retorna dues llistes de cadena. SK conté els noms i SV els valors corresponents

## Diàleg

function OpenDialog(var fn: string): boolean;
El diàleg normal d'Obrir fitxer. Retorna True (veritat) si s'ha premut el botó D'acord després de la tria de fitxer.

function SaveDialog(var fn: string): boolean;
El diàleg Desa normal.Retorna True (veritat) si s'ha premut el botó D'acord després de la tria de fitxer.

function MsgBox(const aMsg: string):boolean;
Diàleg de missatge de confirmació. Retorna True (veritat) si s'ha fet clic a SI.

Procedure ShowMessage(const aMsg: string);
Mostra un missatge.

function CalendarDialog(var dt: double): boolean;
El diàleg del calendari Skychart . Retorna el dia julià

## Executa programa extern

function Run(cmdline:string):boolean;
Executa l'ordre especificada. Retorna immediatament sense esperar que acabi l'execució.

function RunOutput(cmdline:string; var output:TStringlist):boolean;
Executa l'ordre especificada, espera a la terminació i posa la sortida estàndard (stdout) a “output (sortida)”. Atenció aquesta funció pot bloquejar completament el programa principal si no acaba a temps.

function OpenFile(fn:string):boolean;
Obre un fitxer document usant el programa per defecte

També mireu a exemples sobre com cal demanar una funció en una llibreria externa.

## Connector client TCP/IP

Per a totes aquestes funcions socknum identifica el conector a usar. Això és un nombre entre 1 i 10, i així permet 10 connexions simultànies a servidors diferents.

function TcpConnect(socknum:integer; ipaddr,port,timeout:string):boolean;
Connecta al servidor al ipaddr:port i fixa el timeout per a les operacions següents

function TcpDisconnect(socknum:integer):boolean;
Desconnecta del servidor

Function TcpConnected(socknum:integer) : boolean;
Retorna True (Veritat) si el connector està connectat

Function TcpRead(socknum:integer; var buf : string; termchar:string) : boolean;
Read data from the socket until the character termchar is encountered, typically termchar is CRLF

Function TcpReadCount(socknum:integer; var buf : string; var count : integer) : boolean;
Read data from the socket until count character are read or timeout is reached

Function TcpWrite(socknum:integer; var buf : string; var count : integer) : boolean;
Write data to the socket from buf for a length of count

Procedure TcpPurgeBuffer(socknum:integer);
Purge all the received data currently queued in the receive buffer