void stretch_window(void) { int dx, dy; int x0, x1, y0, y1; SETMOUSEICON(&mouse_box); move_mouse(screen, mouse, &mousex, &mousey, 0); SETMOUSEICON(DEFAULT_MOUSE_CURSOR); x0 = ACTIVE(x0); y0 = ACTIVE(y0); x1 = x0 + BIT_WIDE(ACTIVE(border)); y1 = y0 + BIT_HIGH(ACTIVE(border)); if (2 * (mousex - x0) < x1 - x0) x0 = x1; dx = mousex - x0; if (2 * (mousey - y0) < y1 - y0) y0 = y1; dy = mousey - y0; /* x0,y0 is corner farthest from mouse. x0+dx,y0+dx is mouse position */ get_rect(screen, mouse, x0, y0, &dx, &dy, 0); do_button(0); /* look for shape event here */ do_event(EVENT_SHAPE, active, E_MAIN); (void)shape(x0, y0, dx, dy); }
/*{{{ shape_window -- reshape a window with the mouse*/ void shape_window(void) { int dx = 16, dy = 16; SETMOUSEICON(&mouse_box); move_mouse(screen, mouse, &mousex, &mousey, 0); SETMOUSEICON(DEFAULT_MOUSE_CURSOR); get_rect(screen, mouse, mousex, mousey, &dx, &dy, 0); do_button(0); /* look for shape event here */ do_event(EVENT_SHAPE, active, E_MAIN); (void)shape(mousex, mousey, dx, dy); }
void main( int argc, char *argv[], char *envp[] ) { int i; /* ----- evnt_multi return parameters */ int event, msg[8], key, nclicks; MRETS mrets; int rez; /* * Initialize global arguments */ if( (nargs = argc) != 1) args = argv; env = envp; /* * See if we were run from the AUTO folder... */ if( (gl_apid = appl_init()) == -1 ) { Cconws("\r\nError initializing GEM, hit a key..."); Cconin(); exit( gl_apid ); } rez = Getrez() + 2; if(( rez != 2 ) && ( rez != 6 ) ) { /* Ensure that we run ONLY in ST LOW or TT MED - 640x480 16 colors */ form_alert( 1, "[3][ | This program runs in| ST LOW or TT MED Only][ OK ]" ); appl_exit(); exit( -1 ); } /* * Set up work_in to initialize VDI functions to useful values, * Get the physical workstation handle from the AES, then * open a virtual workstation and get our AES work area's extent. */ work_in[0] = Getrez()+2; /* let's not gag GDOS */ for( i = 1; i < 10; work_in[i++] = 1 ) ; work_in[10] = 2; /* raster coordinates */ vhandle = graf_handle( &gl_wchar, &gl_hchar, &gl_wbox, &gl_hbox ); v_opnvwk( work_in, &vhandle, work_out ); xres = work_out[0]; yres = work_out[1]; /* * Call initialization hooks */ Wind_get( 0, WF_WORKXYWH, ( WARGS *)&desk ); if( !rsrc_init() ) { form_alert( 1, "[3][ RSC ERROR ][ OK ]" ); v_clsvwk( vhandle ); appl_exit(); exit( -1 ); } wind_init(); evnt_init(); /* * Main event loop */ do { event = Evnt_multi( ev_mask, ev_clicks, ev_bmask, ev_bstate, &ev_m1, &ev_m2, ( WORD *)msg, ev_time, &mrets, ( WORD *)&key, ( WORD *)&nclicks ); wind_update( BEG_UPDATE ); /* * call pre-event-processing hook */ if( evnt_hook( event, msg, &mrets, &key, &nclicks ) ) continue; /* Dispatch events. * It is possible to get more than one event at a time, so if the * order of event handling is important to you, change the order * in which they're handled here. */ if( event & MU_TIMER ) do_timer( &event ); if( event & MU_KEYBD ) do_key( mrets.kstate, key, &event ); if( event & MU_BUTTON ) do_button( &mrets, nclicks, &event ); if( event & MU_M1 ) do_m1( &mrets, &event ); if( event & MU_M2 ) do_m2( &mrets, &event ); if( event & MU_MESAG ) switch( msg[0] ) { case MN_SELECTED: do_menu( msg, &event ); break; case WM_REDRAW: case WM_TOPPED: case WM_CLOSED: case WM_FULLED: case WM_ARROWED: case WM_HSLID: case WM_VSLID: case WM_SIZED: case WM_MOVED: case WM_NEWTOP: do_windows( msg, &event ); break; case AC_OPEN: acc_open( msg ); break; case AC_CLOSE: acc_close( msg ); break; default: msg_hook( msg, &event ); } /* switch */ /* MU_MESAG */ wind_update( END_UPDATE ); /* * Event handling routines zero out the event variable * to exit the application. */ } while( event ); gem_exit( 0 ); }