-
Notifications
You must be signed in to change notification settings - Fork 0
/
colori.c
153 lines (116 loc) · 2.85 KB
/
colori.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*
* This program is copyrighted to Gabriele Zappi (C)
*
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/times.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <string.h>
#include <signal.h>
#include <curses.h>
/* #include "strfunz.c" */
#include "ruota.h"
#ifndef strlower
#define strlower strlow
#endif
/* defines e macrodefines */
// in "ruota.h"
/* typedefs */
// in "ruota.h"
/* prototipi di funzione */
#include "myproto.h"
/* Variabili globali */
char * Prgname; // Puntatore a carattere da assegnare.
int ges_fine()
{
endwin();
exit(0);
}
int main(int argc, char *argv[])
{
WINDOW *win;
S_GAMEPROFILE * gp;
int i,j;
int ret;
// imposta la funzione da eseguire prima dell'uscita comandata o provocata
atexit( (void *) ges_fine ); // al return o exit del main()
signal(SIGINT, (void *) ges_fine); // in caso di interruzione
signal(SIGTERM, (void *) ges_fine); // in caso di interruzione
signal(SIGKILL, (void *) ges_fine); // in caso di interruzione
signal(SIGQUIT, (void *) ges_fine); // in caso di interruzione
/*
* Siccome Prgname e' un puntatore, devo allocare memoria per
* decidere (dinamicamente) la sua dimensione. Deve tenere il nome
* del programma chiamato senza path, quindi sicuramente non puo'
* essere piu' lungo di argv[0]. Sono quindi sicuro che e' una
* dimensione sufficiente.
*/
Prgname = malloc( strlen( argv[0] ) );
if( Prgname == NULL ) {
printf( "Errore di allocazione memoria per Prgname\n\r" );
exit(-1);
}
/* Prendo il nome escludendo l'eventuale pathname */
strcpy( Prgname, (strrchr(argv[0],'/'))? strrchr(argv[0],'/') + 1 : argv[0] );
#ifdef DEBUG
fprintf(stdout, "argv[0]= %s\n\r", argv[0] );
fprintf(stdout, "Prgname = %s\n\r", Prgname );
fflush(stdout);
#endif
win=initscr();
start_color();
crmode();
noecho();
erase();
refresh();
/*
* Alloco memoria per la principale struttura di gioco.
*/
if ( (gp = malloc(sizeof(S_GAMEPROFILE *))) == NULL ){
printf( "Errore: non posso allocare tanta memoria per la struttura di gioco\n\r" );
exit(-1);
}
for(i=0;i<COLORS;i++)
for(j=0;j<COLORS;j++)
init_pair(i*COLORS+j,j, i);
do {
ret = gioca( gp );
} while( ret!=9 );
return(0);
exit(0);
}
int gioca( S_GAMEPROFILE * gp )
{
static u8 c=0;
static long volta_entrato=0L;
register int i,j;
int ncolore;
++volta_entrato;
erase();
refresh();
move(0,0);
// COLOR_PAIR(c1%(COLORS*COLORS));
for(i=0;i<COLORS;i++)
for(j=0;j<COLORS;j++) {
ncolore=i*COLORS+j;
move(j,i*8);
color_set( ncolore ,NULL);
printw("Col = %2d", ncolore );
}
color_set( 0 ,NULL);
move(23,0);
printw("Premere 'q' o <invio> per terminare... ");
fflush(stdout);
c=getch();
if( c=='q' || c==10 || c==13 ) {
return 9;
}
return EXIT_SUCCESS;
}