Libreria: gafslib - Finali di scacchi Versione: 1.41 - Ottobre 2006 Autore: Guido Antonelli - Email:rigel_g@iol.it La libreria GAFSLIB e' composta da un insieme di funzioni che hanno lo scopo di utilizzare le tabelle dei finali generate dal programma gafs, con numero totale di pezzi <= 6 (<= 5 nella versione per Windows), sia in versione normale a 8 bit o piu' per posizione che in versione comp- ressa a 2 bit per posizione. Dal punto di vista esterno esistono due sole possibili chiamate da parte di un programma utente: 1. iniz_tabelle() = esegue l'inizializzazione del vettore di strutture che contiene la descrizione delle tabelle dei finali disponibili ed altre funzioni minori. char iniz_tabelle(char *percorso, char flag_tab, short int memram) Parametri di ingresso: char *percorso = percorso delle tabelle char flag_tab 0 = tabelle a 8 o piu' bit per posizione 1 = tabelle a 2 bit per posizione short int memram = memoria RAM in Mb utilizzabile per le tabelle Valore di ritorno: >= 3 nessun errore (il valore di ritorno e' il massimo numero di pezzi nelle tabelle dei finali utilizzabili) 1 errore (anche nome percorso tabelle > 50 car.) NOTA: La funzione iniz_tabelle() puo' essere chiamata piu' di una volta nel corso del programma. Questa possibilita' e' prevista per per- mettere all'utente di passare da un tipo di tabella all'altro, in generale da 2 bit per posizione ad 8 e piu' bit per posizione. 2. calc_posizione() = restituisce il risultato trovato nelle tabelle per una data posizione. char calc_posizione(char np, char pez[], char pos[], char gioc, char flag_mem, char enpas, char *prisult, short int *pnmosse); Parametri di ingresso: char np = numero complessivo di pezzi (Re compresi) char pez[] = contiene i pezzi in sequenza: Re bianco - Pezzi bianchi - Re nero - Pezzi neri indicati con i seguenti codici: PEDONE = 0 CAVALLO = 1 ALFIERE = 2 TORRE = 3 REGINA = 4 RE = 5 char pos[] = contiene le corrispondenti posizioni dei pezzi con la seguente convenzione: 0 = a1, 1 = b1 ... 62 = g8, 63 = h8 char gioc = giocatore che ha la mossa (Bianco = 0, Nero = 1) char flag_mem 0 lettura tabella da disco <> 0 lettura tabella da RAM (con caricamento automa- tico iniziale alla prima chiamata) char enpas 0 non esistono catture en passant n posizione casella di arrivo del pedone che effet- tua la cattura en passant Parametri di uscita: char *prisult 0 patta 1 vittoria -1 sconfitta short int *pnmosse = numero mosse per vittoria o sconfitta (signifi- cativo solo se flag_tab = 0) Valore di ritorno: 0 calcolo posizione avvenuto correttamente 1 primo pezzo != Re 2 pezzo inesistente 3 posizione inesistente 4 casella occupata da piu' pezzi 5 numero Re != 2 6 Re a contatto tra loro 7 posizione errata del pedone che cattura en passant 8 tabella non presente in lista 9 tabella non presente su disco 10 spazio di allocazione insufficiente 11 errore in fread() 12 errore in fseek() 13 posizione illegale 14 superato max. numero di svuotamenti memoria RAM (5)