1 #include "body.h"
2 
3 void
PopDownTO(XtPointer data,XtIntervalId * id)4 PopDownTO(XtPointer data, XtIntervalId *id)
5 {
6     Widget w = (Widget)data;
7     XtUnmanageChild(w);
8     bd->Shuffle();
9     tm->ResetTimer();
10     bd->DrawAll();
11 }
12 
13 void
ScoreRegisterCB(Widget w,int index)14 ScoreRegisterCB(Widget w, int index)
15 {
16 #if DEBUG
17     fprintf(stderr, "ScoreRegisterCB\n");
18 #endif
19     sc->Register();
20 #if USE_MOTIF
21     XtRemoveCallback(w, XmNokCallback, (XtCallbackProc)ScoreRegisterCB, NULL);
22 #else /* USE_MOTIF */
23     XtRemoveCallback(w, XtNcallback, (XtCallbackProc)ScoreRegisterCB, NULL);
24 #endif /* USE_MOTIF */
25 }
26 
27 void
ResizeCB(void)28 ResizeCB(void)
29 {
30     int wid, hei;
31 
32     if (bd->GetGeometry(wid, hei))
33         bd->SetSize(wid, hei);
34 #if DEBUG
35     fprintf(stderr, "ResizeCB: (%d,%d)\n", wid, hei);
36 #endif
37 }
38 
39 void
ExposeCB(Widget w,XtPointer tag,XtPointer p)40 ExposeCB(Widget w, XtPointer tag, XtPointer p)
41 {
42 #if USE_MOTIF
43     XExposeEvent *e = &(((XmDrawingAreaCallbackStruct *)p)->event->xexpose);
44 #else /* USE_MOTIF */
45     XExposeEvent *e = &(((XEvent *)p)->xexpose);
46 #endif /* USE_MOTIF */
47 #if DEBUG
48     fprintf(stderr, "ExposeCB: (%d,%d) -> (%d,%d)\n", e->x, e->y, e->width, e->height);
49 #endif
50     bd->DrawRegion(e->x, e->y, e->width, e->height);
51 }
52 
53 void
GameCB(Widget w,int index)54 GameCB(Widget w, int index)
55 {
56     static long pausedTime;
57     int pauseStatus;
58 #if DEBUG
59     fprintf(stderr, "GameCB: %d\n", index);
60 #endif
61     switch(index) {
62     case 0: /* Start */
63         bd->LogGiveUp();
64         bd->Shuffle();
65         bd->DrawAll();
66         mb->Sensitive();
67         tm->ResetTimer();
68         break;
69     case 1: /* Restart */
70         bd->LogGiveUp();
71         bd->Restart();
72         bd->DrawAll();
73         mb->Sensitive();
74         tm->ResetTimer();
75         break;
76     case 2: /* Pause */
77         pauseStatus = bd->TogglePause();
78         if (pauseStatus == 1) { // Paused
79             mb->PauseOn();
80             pausedTime = tm->GetTimer();
81         } else if (pauseStatus == 0) {  // Pause cancelled
82             mb->PauseOff();
83             tm->SetTimer(pausedTime);
84         }
85         break;
86     case 3: /* Score */
87         sc->DisplayScore(bd->game);
88         break;
89     case 4: /* Personal Score */
90         sc->PersonalStat(bd->game);
91         break;
92     case 5: /* About */
93         Message(MESSAGE_SYMBOL, globRes.aboutString);
94         break;
95     case 6: /* Exit */
96         exit(0);
97     }
98 }
99 
100 void
SuppCB(Widget w,int index)101 SuppCB(Widget w, int index)
102 {
103 #if DEBUG
104     fprintf(stderr, "SuppCB: %d\n", index);
105 #endif
106     switch(index) {
107     case 0: /* Hint */
108         bd->Hint();
109         break;
110     case 1: /* Back */
111         bd->Back();
112         break;
113     }
114 }
115 
116 void
ChangeGameCB(Widget w,int index,XtPointer p)117 ChangeGameCB(Widget w, int index, XtPointer p)
118 {
119     int xsize, ysize;
120     int trial;
121 
122 #if DEBUG
123     fprintf(stderr, "ChangeGameCB: %d\n", index);
124 #endif
125     if (index >= NUM_GAME) {
126         if (index == NUM_GAME) {
127             bd->ToggleClickTrial();
128         } else {
129             bd->ToggleGravity();
130         }
131         SetGameStart();
132         bd->DrawAll();
133     } else {
134         mb->CheckGame(index);
135         trial = bd->game / NUM_GAME;
136         if (index == bd->game % NUM_GAME)
137             return;
138         index += trial * NUM_GAME;
139         GetGameSize(index, xsize, ysize);
140         bd->ChangeGame(index, xsize, ysize);
141         GetBoardSizeFromGameSize(xsize, ysize, globRes.Width, globRes.Height);
142         bd->SetGeometry(globRes.Width, globRes.Height);
143         SetGameStart();
144     }
145     bd->WriteRcFile();
146 }
147 
148 void
ChangePixmapCB(Widget w,int index,XtPointer p)149 ChangePixmapCB(Widget w, int index, XtPointer p)
150 {
151     char subdir[16];
152 extern Widget toplevel;
153 
154 #if DEBUG
155     fprintf(stderr, "ChangePixmapCB: %d\n", index);
156 #endif
157     mb->CheckPixmap(index);
158     if (globRes.imageSet != index + 1) {
159         int xsize, ysize;
160 	globRes.imageSet = index + 1;
161         InitPicture();
162         GetGameSize(bd->game%NUM_GAME, xsize, ysize);
163         GetBoardSizeFromGameSize(xsize, ysize, globRes.Width, globRes.Height);
164         bd->SetGeometry(globRes.Width, globRes.Height);
165         bd->WriteRcFile();
166         SetGameStart();
167     }
168 }
169 
170 void
AutoDemoCB(void)171 AutoDemoCB(void)
172 {
173     bd->Robot();
174     XtAppAddTimeOut(app_context, 2000,
175                     (XtTimerCallbackProc)AutoDemoCB, NULL);
176 }
177 
178 void
ExitCB(void)179 ExitCB(void)
180 {
181     exit(0);
182 }
183