# gsT

## gs_bust

`gs_bust` correspond à une **position illégale**, détectée par `SANCensus()` (dans `sanmsc.c`). `SANStatus()` renvoie ce code quand, par exemple :

- le nombre de rois est incorrect,
- les droits de roque sont incohérents avec la position réelle des rois/tours,
- un pion se trouve sur la première ou la dernière rangée,
- il y a un surplus de pièces,
- ou le camp qui n'est **pas** au trait est laissé en échec.

Dans le moteur, ce cas n'est atteignable que via un `setboard` avec un FEN syntaxiquement valide mais illégal aux échecs.

## gs_dmat

`gs_dmat` correspond à une **nulle par matériel insuffisant** : ni l'un ni l'autre camp n'a assez de force pour mater seul (par exemple Roi+Fou contre Roi+Fou, ou Roi+Cavalier contre Roi+Fou, sans pion ni pièce majeure). C'est calculé par `SANDrawTestIMat()` dans `sandrw.c`, et sur le plan théorique des échecs c'est un jugement correct de la part du SAN Kit.

## gs_dhmc

`gs_dhmc` correspond à la règle des 50 coups.

## gs_norm

`gs_norm` signifie tout simplement **partie normale, en cours** — la position est légale et la partie n'est pas terminée (pas de mat, pat, nulle, ou dépassement de capacité). C'est la valeur que `SANStatus()` à chaque coup joué sans que rien de particulier ne se soit produit.

## gs_over

`gs_over` **n'est pas une vraie nulle aux échecs** — c'est un artefact technique du SAN Kit.

L'historique de coups de la bibliothèque est un tableau de **taille fixe**, dimensionné pour 200 coups pleins (400 demi-coups) au maximum (`fmpL` dans `sandef.h`). Au-delà, écrire un coup de plus provoquerait un **plantage pur et simple** (`SANHistPush()` appelle `SANFatal()` → `exit(1)`).

Pour éviter ce plantage, `SANStatus()` renvoie `gs_over` comme garde-fou juste avant d'atteindre cette limite — mais la bibliothèque le mappe (à tort) sur « nulle » (`1/2-1/2`) dans sa table `cv_gtc_gsv[]` (`sanint.c`).
