summaryrefslogtreecommitdiff
path: root/apps/plugins/nim.c
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2010-08-23 16:56:49 +0000
committerThomas Martitz <kugel@rockbox.org>2010-08-23 16:56:49 +0000
commitabdc5935beb7dc3fa63bffeec584921ad2a4c8bd (patch)
tree3eb3ca86063d0fff58ca8ed2c49dbb0af0792570 /apps/plugins/nim.c
parent8106c9dc646bbb26131896eb12d23edb26cba476 (diff)
downloadrockbox-abdc5935beb7dc3fa63bffeec584921ad2a4c8bd.tar.gz
rockbox-abdc5935beb7dc3fa63bffeec584921ad2a4c8bd.zip
Introduce plugin_crt0.c that every plugin links.
It handles exit() properly, calling the handler also when the plugin returns normally (also it makes exit() more standard compliant while at it). It also holds PLUGIN_HEADER, so that it doesn't need to be in each plugin anymore. To work better together with callbacks passed to rb->default_event_handler_ex introduce exit_on_usb() which will call the exit handler before showing the usb screen and exit() after it. In most cases it was passed a callback which was manually called at all other return points. This can now be done via atexit(). In future plugin_crt0.c could also handle clearing bss, initializing iram and more. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27862 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/nim.c')
-rw-r--r--apps/plugins/nim.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/apps/plugins/nim.c b/apps/plugins/nim.c
index 460e2751e9..3301277410 100644
--- a/apps/plugins/nim.c
+++ b/apps/plugins/nim.c
@@ -48,7 +48,7 @@ V1.2 : 2003-07-30
48 take a match. Later you are obliged to take at least one.) 48 take a match. Later you are obliged to take at least one.)
49*/ 49*/
50 50
51PLUGIN_HEADER 51
52 52
53/*Pattern for the game*/ 53/*Pattern for the game*/
54static unsigned char smile[]={0x00, 0x11, 0x04, 0x04, 0x00, 0x11, 0x0E}; /* :-) */ 54static unsigned char smile[]={0x00, 0x11, 0x04, 0x04, 0x00, 0x11, 0x0E}; /* :-) */
@@ -144,6 +144,7 @@ enum plugin_status plugin_start(const void* parameter)
144 int x,v,min; 144 int x,v,min;
145 bool ok; 145 bool ok;
146 bool go; 146 bool go;
147 atexit(nim_exit);
147 148
148 /* if you don't use the parameter, you can do like 149 /* if you don't use the parameter, you can do like
149 this to avoid the compiler warning about it */ 150 this to avoid the compiler warning about it */
@@ -193,7 +194,6 @@ enum plugin_status plugin_start(const void* parameter)
193 { 194 {
194 case BUTTON_STOP|BUTTON_REL: 195 case BUTTON_STOP|BUTTON_REL:
195 go = true; 196 go = true;
196 nim_exit(NULL);
197 return PLUGIN_OK; 197 return PLUGIN_OK;
198 break; 198 break;
199 199
@@ -214,9 +214,7 @@ enum plugin_status plugin_start(const void* parameter)
214 break; 214 break;
215 215
216 default: 216 default:
217 if (rb->default_event_handler_ex(button, nim_exit, 217 exit_on_usb(button);
218 NULL) == SYS_USB_CONNECTED)
219 return PLUGIN_USB_CONNECTED;
220 break; 218 break;
221 } 219 }
222 display_first_line(x); 220 display_first_line(x);
@@ -291,7 +289,6 @@ enum plugin_status plugin_start(const void* parameter)
291 min=1; 289 min=1;
292 } 290 }
293 } 291 }
294 nim_exit(NULL);
295 return PLUGIN_OK; 292 return PLUGIN_OK;
296} 293}
297#endif 294#endif