From: claytonbrauner AT geocities DOT com Newsgroups: comp.os.msdos.djgpp Subject: Mouse Callback function using Allegro 3.0 Message-ID: <355fcc53.30849407@news.sas.shaw.wave.ca> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Lines: 39 Date: Mon, 18 May 1998 05:57:17 GMT NNTP-Posting-Host: cybers96d194.ss.wave.shaw.ca NNTP-Posting-Date: Sun, 17 May 1998 23:57:17 MDT Organization: Shaw Fiberlink Ltd. (Calgary) To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk I am trying to set up a very simple mouse event stack to catch all mouse events by making a mouse callback that pushes pertinent data onto a stack. The only problem is, it doesn't work. It runs and registers the first event, but then after the first it refuses to beleive that the counter variable is changing-and so does nothing. I've tried making these variables "volatile", as i have been told that that will make the compiler generate code to check it all the time rather then when the compiler thinks it has changed. But I got the same results. I know the answer will be something trivial, so this is killing me!!! Thanks for listening. (I've written a smallish program to show my problem:) #include volatile struct evrev { int mev,x,y; } events[50]; volatile int nev=0; void mouseCB( int mev) { events[nev].mev=mev; events[nev].x=mouse_x; events[nev].y=mouse_y; nev++; } END_OF_FUNCTION(mouseCB) void main( void) { char* s=(char*)malloc(80); LOCK_FUNCTION(mouseCB); LOCK_VARIABLE(nev); LOCK_VARIABLE(events); allegro_init(); install_keyboard(); install_mouse(); install_timer(); install_keyboard(); set_gfx_mode(GFX_VGA,320,200,0,0); mouse_callback=mouseCB; show_mouse(screen); while(!key[KEY_SPACE]) { while(nev>0) { disable(); sprintf(s,"event %i",nev); textout(screen,font,s,events[nev].x,events[nev].y,15); nev--; enable(); } } }