La tabella comandi live (LIVECMDS) è composta da un numero di definizioni (LIVECMD) contigue, ognuna delle quali contiene tutte le informazioni su uno specifico comando live.
La posizione (relativa al file) e la dimensione della tabella sono specificate rispettivamente dai campi LIVEHEADER.ITEMSOFF e LIVEHEADER.ITEMSSIZE.
Definizione comando live
I comandi live (LIVECMD) hanno una parte iniziale comune, quindi un'area dati specifica per ogni tipo di elemento. La parte comune è la seguente:
Nome |
Offset |
Tipo |
Descrizione |
---|---|---|---|
CODE |
+0 |
U16 |
Codice del comando |
SIZE |
+2 |
U32 |
Dimensione completa del comando (tutti i campi). |
DATA |
+6 |
... |
Dati specifici del comando (opzionali). |
I comandi attualmente previsti sono:
•Comando 0x0001 - Inserimento circuito
•Comando 0x0002 - Modifica circuito
•Comando 0x0003 - Rimozione circuito
•Comando 0x0006 - Inserimento struttura
•Comando 0x0007 - Inserimento variabile
Comando 0x0001 - Inserimento circuito
Questo comando permette di inserire un circuito in un dato blocco, in una certa posizione. I dati del comando, sono i seguenti:
Nome |
Offset |
Tipo |
Descrizione |
---|---|---|---|
CODE |
+0 |
U16 |
0x0001 |
SIZE |
+2 |
U32 |
32 + ITEMSSIZE |
BLOCKID |
+6 |
U32 |
ID blocco contenitore |
RUNGID |
+10 |
U32 |
ID del circuito interessato (và in stato Inserting) |
REFID |
+14 |
U32 |
ID del circuito di riferimento (solo per locazioni inserimento #1, altrimenti 0) |
IFLAGS |
+18 |
U16 |
Impostazioni di inserimento: 0x000F = Locazione di inserimento: 0x0 = Prima del circuito con ID REFID (#1) 0x1 = Dopo il circuito con ID REFID (#1) 0x2 = Come primo circuito del blocco 0x3 = Come ultimo circuito del blocco |
FLAGS |
+20 |
U16 |
Impostazioni del circuito: 0x0001 (ignorato in modifiche live) |
ITEMSOFF |
+22 |
U32 |
Offset della tabella elementi circuito (relativo al file) |
ITEMSSIZE |
+26 |
U32 |
Dimensione della tabella elementi circuito |
TEXT |
+30 |
U32 |
Offset descrizione del circuito (relativo a stringhe) |
ATTENZIONE: la tabella elementi circuito deve comunque essere accodata al comando live stesso.
Comando 0x0002 - Modifica circuito
Questo comando permette di inserire un circuito modificato, rimuovendo quello vecchio, in un dato blocco. I dati del comando, sono i seguenti:
Nome |
Offset |
Tipo |
Descrizione |
---|---|---|---|
CODE |
+0 |
U16 |
0x0002 |
SIZE |
+2 |
U32 |
32 + ITEMSSIZE |
BLOCKID |
+6 |
U32 |
ID blocco contenitore |
RUNGID |
+10 |
U32 |
ID del circuito interessato (va in stato Inserting) |
REFID |
+14 |
U32 |
ID del circuito precedente da rimuovere (va in stato Dropping) |
|
+18 |
U16 |
(riservato) |
FLAGS |
+20 |
U16 |
Impostazioni del circuito: 0x0001 (ignorato in modifiche live) |
ITEMSOFF |
+22 |
U32 |
Offset della tabella elementi circuito (relativo al file) |
ITEMSSIZE |
+26 |
U32 |
Dimensione della tabella elementi circuito |
TEXT |
+30 |
U32 |
Offset descrizione del circuito (relativo a stringhe) |
Comando 0x0003 - Rimozione circuito
Questo comando permette di rimuovere un circuito esistente. I dati del comando, sono i seguenti:
Nome |
Offset |
Tipo |
Descrizione |
---|---|---|---|
CODE |
+0 |
U16 |
0x0003 |
SIZE |
+2 |
U32 |
14 |
BLOCKID |
+6 |
U32 |
ID blocco contenitore |
RUNGID |
+10 |
U32 |
ID del circuito da rimuovere (va in stato Deleting) |
Comando 0x0006 - Inserimento struttura
Questo comando permette di creare una nuova struttura. I dati del comando, sono i seguenti:
Nome |
Offset |
Tipo |
Descrizione |
---|---|---|---|
CODE |
+0 |
U16 |
0x0006 |
SIZE |
+2 |
U32 |
44 + (VARSCNT * sizeof (VAR)) |
TYPEID |
+6 |
U32 |
ID tipo struttura utente Nota: solo valori 0x0001000-0xFFFFFFFE; i valori 0 e 0xFFFFFFFF sono ID a significato speciale. |
FLAGS |
+10 |
U16 |
Impostazioni struttura: 0x0001 (ignorato in modifiche live) 0x0002 (ignorato in modifiche live) |
NAME |
+12 |
U32 |
Offset nome della struttura (relativo a stringhe). |
TEXT |
+16 |
U32 |
Offset descrizione della struttura (relativo a stringhe) |
VARSOFF |
+20 |
U32 |
Offset della tabella variabili (relativa al file) (#1) |
VARSCNT |
+24 |
U32 |
Dimensione della tabella variabili |
SIZE |
+28 |
U32 |
Dimensione della struttura [byte] |
OBCID |
+32 |
U32 |
ID classe OB di riferimento (0=nessuna)(#2,#3) |
ATTRIB |
+36 |
U32 |
Attributi della struttura: 0x00000001 Struttura riferita a classe OB (AREFOBC)(#2) 0x00000002 Struttura principale classe OB (AISOBC)(#2,#3) |
MODIFIER |
+40 |
U32 |
Offset modificatori della struttura (relativo a stringhe). |
(#1) La definizione di struttura usa una normale tabella di definizione variabili per definire i propri elementi. In questo caso gli ID delle variabili non hanno senso e dovrebbero essere sempre a 0.
(#2) A pari valore di OBCID non 0, con attributo AREFOBC, può esistere una sola struttura con flag AISOBC, mentre posso essere 0 o più strutture senza attributo AISOBC.
(#3) Una struttura viene definita "orfana" qualora si trova nella condizione di attributi AREFOBC impostato e campo OBCID = 0: questa condizione capita quando aggiornando/rimuovendo una classe OB, vi sono ancora delle variabili (o altro) che vi fanno riferimento.
Comando 0x0007 - Inserimento variabile
Questo comando permette di creare una nuova variabile dotata di valore di inizializzazione. I dati del comando, sono i seguenti:
Nome |
Offset |
Tipo |
Descrizione |
---|---|---|---|
CODE |
+0 |
U16 |
0x0007 |
SIZE |
+2 |
U32 |
60 |
VARID |
+6 |
U32 |
ID univoco della variabile utente Nota: solo valori 0x0001000-0xFFFFFFFE; i valori 0 e 0xFFFFFFFF sono ID a significato speciale. |
TYPEID |
+10 |
U32 |
ID tipo dato variabile Nota: può essere un tipo predefinito oppure definito dall'utente. |
FLAGS |
+14 |
U16 |
Impostazioni della variabile: 0x0001 (ignorato in modifiche live) 0x0002 (ignorato in modifiche live) 0x0004 (ignorato in modifiche live) |
NAME |
+16 |
U32 |
Offset nome della variabile (relativo a stringhe) |
TEXT |
+20 |
U32 |
Offset descrizione della variabile (relativo a stringhe) |
BITTEXT |
+24 |
U32 |
Offset descrizioni dei bit variabili, ovvero sequenza di stringhe relative ad ogni singolo bit separate dal carattere ascii 0xFF (relativo a stringhe). |
DIM0 |
+28 |
U32 |
1a dimensione array (0=non specificata)(#1) o indice 0 per Alias. |
DIM1 |
+32 |
U32 |
2a dimensione array (0=non specificata)(#1) o indice 1 per Alias. |
DIM2 |
+36 |
U32 |
3a dimensione array (0=non specificata)(#1) o indice 2 per Alias. |
ALIASID |
+40 |
U16 |
ID tipo alias |
ALIASBIT |
+42 |
U16 |
N. di bit per alias (dipende dal tipo di ID alias) |
SIZE |
+44 |
U32 |
Dimensione della variabile. Se Alias, la dimensione è 0. |
VALUE |
+48 |
U32 |
Offset valore iniziale della variabile (relativo a stringhe, 0=nessun valore). |
ATTRIB |
+52 |
U32 |
Attributi variabile: 0x00000001 La variabile può essere scritta (WRITE) 0x00000002 La variabile può essere letta (READ) 0x00000004 La variabile può essere forzata (FORCE) 0x00000008 La variabile può essere rilasciata (RELEASE) 0x00000010 La variabile è costante (CONST) 0x00000020 La variabile non ha accesso a bit (NOBITS) |
MODIFIER |
+56 |
U32 |
Offset modificatori della variabile (relativo a stringhe). |
DIM0L |
+60 |
U32 |
Offset etichetta 1a dimensione array (relativo a stringhe). (#2) |
DIM1L |
+64 |
U32 |
Offset etichetta 2a dimensione array (relativo a stringhe). (#2) |
DIM2L |
+68 |
U32 |
Offset etichetta 3a dimensione array (relativo a stringhe). (#2) |
(#1) Sebbene i campi ARRAYn siano a 32bit, nella versione attuale di SW la dimensione massima va comunque considerata solo a 16bit (ovvero massimo indice 0xFFFF).
(#2) Per etichetta si intende nome di una variabile (a valore costante) oppure la rappresentazione ascii di un valore numerico, ovvero un offset alla tabella stringhe .