/************************************************************************** * * Othello II v2.53 - 08/02/2004 * * Copyright (C) 2000-2004 François LEIBER * * This file is part of Othello II. * * Othello II is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Othello II is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * *************************************************************************/ unsigned char Touche[10] = { }; unsigned char Vieilles[10] = { }; #ifdef _89 #define ALPHA (Touche[0] & 128) #define DIAMANT (Touche[0] & 64) #define SHIFT (Touche[0] & 32) #define SECOND (Touche[0] & 16) #define DROITE (Touche[0] & 8) #define BAS (Touche[0] & 4) #define GAUCHE (Touche[0] & 2) #define HAUT (Touche[0] & 1) #define F5 (Touche[1] & 128) #define CLEAR (Touche[1] & 64) #define CIRCONFLEXE (Touche[1] & 32) #define E (Touche[1] & 16) #define J (Touche[1] & 8) #define MOINS (Touche[1] & 4) #define O (Touche[1] & 4) #define PLUS (Touche[1] & 2) #define U (Touche[1] & 2) #define ENTER ((Touche[1] & 1) || (Touche[5] & 1)) #define F4 (Touche[2] & 128) #define RETOUR (Touche[2] & 64) #define T (Touche[2] & 32) #define D (Touche[2] & 16) #define I (Touche[2] & 8) #define N9 (Touche[2] & 8) #define N (Touche[2] & 4) #define N6 (Touche[2] & 4) #define S (Touche[2] & 2) #define N3 (Touche[2] & 2) #define ESPACE (Touche[2] & 1) #define F3 (Touche[3] & 128) #define CATALOG (Touche[3] & 64) #define Z (Touche[3] & 32) #define C (Touche[3] & 16) #define PAR_FERME (Touche[3] & 16) #define H (Touche[3] & 8) #define N8 (Touche[3] & 8) #define M (Touche[3] & 4) #define N5 (Touche[3] & 4) #define R (Touche[3] & 2) #define N2 (Touche[3] & 2) #define W (Touche[3] & 1) #define POINT (Touche[3] & 1) #define F2 (Touche[4] & 128) #define MODE (Touche[4] & 64) #define Y (Touche[4] & 32) #define B (Touche[4] & 16) #define PAR_OUVRE (Touche[4] & 16) #define G (Touche[4] & 8) #define N7 (Touche[4] & 8) #define L (Touche[4] & 4) #define N4 (Touche[4] & 4) #define Q (Touche[4] & 2) #define N1 (Touche[4] & 2) #define V (Touche[4] & 1) #define N0 (Touche[4] & 1) #define F1 (Touche[5] & 128) #define HOME (Touche[5] & 64) #define X (Touche[5] & 32) #define A (Touche[5] & 16) #define F (Touche[5] & 8) #define K (Touche[5] & 4) #define P (Touche[5] & 2) #define APPS (Touche[5] & 1) #define ESCAPE (Touche[6] & 1) #else #define BAS (Touche[0] & 128) #define DROITE (Touche[0] & 64) #define HAUT (Touche[0] & 32) #define GAUCHE (Touche[0] & 16) #define ALPHA (Touche[0] & 8) #define SHIFT (Touche[0] & 4) #define DIAMANT (Touche[0] & 2) #define SECOND (Touche[0] & 1) #define N3 (Touche[1] & 128) #define N2 (Touche[1] & 64) #define N1 (Touche[1] & 32) #define F8 (Touche[1] & 16) #define W (Touche[1] & 8) #define S (Touche[1] & 4) #define Z (Touche[1] & 2) #define N6 (Touche[2] & 128) #define N5 (Touche[2] & 64) #define N4 (Touche[2] & 32) #define F3 (Touche[2] & 16) #define E (Touche[2] & 8) #define D (Touche[2] & 4) #define X (Touche[2] & 2) #define N9 (Touche[3] & 128) #define N8 (Touche[3] & 64) #define N7 (Touche[3] & 32) #define F7 (Touche[3] & 16) #define R (Touche[3] & 8) #define F (Touche[3] & 4) #define C (Touche[3] & 2) #define STO (Touche[3] & 1) #define VIRGULE (Touche[4] & 128) #define PAR_OUVRE (Touche[4] & 64) #define PAR_FERME (Touche[4] & 32) #define F2 (Touche[4] & 16) #define T (Touche[4] & 8) #define G (Touche[4] & 4) #define V (Touche[4] & 2) #define SPACE (Touche[4] & 1) #define TAN (Touche[5] & 128) #define COS (Touche[5] & 64) #define SIN (Touche[5] & 32) #define F6 (Touche[5] & 16) #define Y (Touche[5] & 8) #define H (Touche[5] & 4) #define B (Touche[5] & 2) #define SLASH (Touche[5] & 1) #define P (Touche[6] & 128) #define ENTER ((Touche[6] & 64) || (Touche[9] & 2)) #define LN (Touche[6] & 32) #define F1 (Touche[6] & 16) #define U (Touche[6] & 8) #define J (Touche[6] & 4) #define N (Touche[6] & 2) #define CIRCONFLEXE (Touche[6] & 1) #define FOIS (Touche[7] & 128) #define APPS (Touche[7] & 64) #define CLEAR (Touche[7] & 32) #define F5 (Touche[7] & 16) #define I (Touche[7] & 8) #define K (Touche[7] & 4) #define M (Touche[7] & 2) #define EGAL (Touche[7] & 1) #define ESCAPE (Touche[8] & 64) #define MODE (Touche[8] & 32) #define PLUS (Touche[8] & 16) #define O (Touche[8] & 8) #define L (Touche[8] & 4) #define THETA (Touche[8] & 2) #define RETOUR (Touche[8] & 1) #define PETIT_MOINS (Touche[9] & 128) #define POINT (Touche[9] & 64) #define N0 (Touche[9] & 32) #define F4 (Touche[9] & 16) #define Q (Touche[9] & 8) #define A (Touche[9] & 4) #define MOINS (Touche[9] & 1) #define CATALOG (Touche[7] & 1) #endif ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Attend l'appui d'une touche en supportant l'APD // Peut faire d'autres actions si nécessaire (faire tourner des animations par ex.) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void attend_touche(short option) { short tmp, compteur = 0, rangee = 0; long apd = 0; do { rangee++; rangee %= _89_92(7, 10); tmp = Vieilles[rangee]; Touche[rangee] = _rowread(~(1 << rangee)); Vieilles[rangee] = Touche[rangee]; Touche[rangee] &= ~tmp; if (CLEAR != 0 || (apd++) == 2000000) // Eteint la machine lors de l'appui sur CLEAR ou si l'APD finit { off(); apd = 0; Touche[rangee] = 0; } else if (PAR_OUVRE != 0) { OSContrastDn(); Touche[rangee] = 0; } else if (PAR_FERME != 0) { OSContrastUp(); Touche[rangee] = 0; } else if ((compteur++) % 1300 == 0) // Toutes les 1300 boucles, effectuer une action switch (option) { case 1: tourne_pion(); break; // Action 1 : tourner les pions dans le menu default: break; // Action par défaut : ne rien faire } } while (Touche[rangee] == 0); beep(800 + 60 * rangee, 2); }