int PASCAL WinMain( HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) { EVENT ev; SAREA area; char buff[80]; an_event_string *ptr; ORD evrow = TOP_ROW; BOOL fixup = FALSE; int mrow, mcol; int diff; hInstance = hInstance; hPrevInstance = hPrevInstance; lpCmdLine = lpCmdLine; nShowCmd = nShowCmd; if( InitSwapper() ) return( 0 ); // Yes - well, I would make the swapper // return 1 on error, unlike everything // else, wouldn't I? if( !uistart() ) return( 0 ); ToCharacter(); initmouse( 2 ); uimenus( barmenu, pulldownuimenus, EV_FUNC( 1 ) ); UIData->mouse_clk_delay = uiclockdelay( 250 ); UIData->tick_delay = uiclockdelay( 3000 ); mainwin.area.height = UIData->height - 7; area.row = 0; area.col = 0; area.width = UIData->width; area.height = UIData->height; uidirty( area ); uirefresh(); if( uivopen( &mainwin ) ) { uirefresh(); sprintf( buff, "screen height : %d\0", UIData->height ); uivtextput( &mainwin, TOP_ROW - 1, 2, UIData->attrs[ ATTR_NORMAL ], buff, 30 ); for( ; ; ) { uipushlist( evlist ); ev = uivgetevent( NULL ); uipoplist(); if( ev == EV_QUIT ) break; if( ev == EV_ALT_R ) break; if( ev == EV_MOUSE_PRESS_R ) { uimousepos( NULL, &mrow, &mcol ); mrow++; mcol++; uipushlist( evlist ); ev = uicreatepopup( mrow, mcol, &filemenu, FALSE, TRUE, NULL ); uipoplist(); } switch ( ev ) { case EV_SAMPLE_DIALOG: sample_dialog(); break; case EV_OPEN: open(); break; case EV_FUNC(1): area.width = 10; area.height = 10; area.row = 1; area.col = 1; uivattribute( &mainwin, area, (ATTR) 1 ); break; case EV_CURSOR_RIGHT: mainwin.col++; if( mainwin.col >= mainwin.area.width ) mainwin.col--; fixup = TRUE; break; case EV_CURSOR_DOWN: mainwin.row++; if( mainwin.row >= mainwin.area.height ) mainwin.row--; fixup = TRUE; break; case EV_CURSOR_LEFT: if( mainwin.col > 0 ) { mainwin.col--; fixup = TRUE; } break; case EV_CURSOR_UP: if( mainwin.row > 0 ) { mainwin.row--; fixup = TRUE; } break; } if( fixup ) { fixup = FALSE; uivsetcursor( &mainwin ); } if( ev != EV_NO_EVENT ) { for( ptr=evstrs; ; ++ptr ){ if( ptr->ev == EV_NO_EVENT ) { sprintf( buff, "event 0x%4.4x", ev ); break; } else if( ptr->ev == ev ) { strcpy( buff, ptr->str ); break; } } uivtextput( &mainwin, evrow, 2, UIData->attrs[ ATTR_NORMAL ], buff, 30 ); if( ++evrow >= mainwin.area.height ){ evrow = TOP_ROW; } uivtextput( &mainwin, evrow, 2, UIData->attrs[ ATTR_NORMAL ], "", 30 ); switch( ev ) { case EV_MOUSE_PRESS: BandOn = 1; uimousepos( NULL, &mrow, &mcol ); BandArea.row = mrow; BandArea.col = mcol; BandArea.width = 0; BandArea.height = 0; uibandinit( BandArea, UIData->attrs[ ATTR_ACTIVE ] ); break; case EV_MOUSE_DRAG: if( BandOn ) { uimousepos( NULL, &mrow, &mcol ); diff = mcol - BandArea.col; if( diff < 0 ) diff = 0; BandArea.width = diff; diff = mrow - BandArea.row; if( diff < 0 ) diff = 0; BandArea.height = diff; uibandmove( BandArea ); } break; case EV_MOUSE_RELEASE: if( BandOn ) uibandfini(); BandOn = 0; break; } } } uivclose( &mainwin ); } uinomenus(); uiswap(); uirestorebackground(); /* must be after uiswap */ finimouse(); ToGraphical(); uistop(); FiniSwapper(); return( 0 ); }
VSCREEN* global uivopen( register VSCREEN *vptr ) /***********************************************/ { register char* box; register ATTR attr; register int priority; register void (_FAR *updatertn)( struct sarea, void * ); register bool okbuffer; register int len; register ORD col; register unsigned int flags; register bool covered; auto SAREA area; okarea( vptr->area ); flags = vptr->flags; area = vptr->area; if( ( flags & V_DIALOGUE ) != 0 ) { if( flags & V_LISTBOX ) { box = (char *)&UiGChar[ UI_SBOX_TOP_LEFT ]; attr = UIData->attrs[ ATTR_NORMAL ]; } else { box = (char *)&UiGChar[ UI_BOX_TOP_LEFT ]; attr = UIData->attrs[ ATTR_DIAL_FRAME ]; } priority = P_DIALOGUE; } else { flags &= ~V_UNBUFFERED; box = (char *)&UiGChar[ UI_SBOX_TOP_LEFT ]; attr = UIData->attrs[ ATTR_FRAME ]; priority = P_VSCREEN; } if( ( flags & V_UNFRAMED ) == 0 ) { (area.row)--; (area.col)--; (area.height) += 2; (area.width) += 2; okarea( area ); } if( ( flags & V_UNBUFFERED ) != 0 ) { priority = P_UNBUFFERED; bfake( &(vptr->window.type.buffer), area.row, area.col ); okbuffer = TRUE; updatertn = NULL; } else { okbuffer = balloc( &(vptr->window.type.buffer), area.height, area.width ); updatertn = (void(*)(struct sarea,void *))update; } if( okbuffer ) { vptr->window.area = area; vptr->window.priority = priority; vptr->window.update = updatertn; vptr->window.parm = vptr; covered = openwindow( &(vptr->window) ); vptr->flags = flags; if( ( flags & V_UNFRAMED ) == 0 ) { if( ( !UIData->no_blowup ) && ( covered == FALSE ) && ( ( flags & V_NO_ZOOM ) == 0 ) ) { blowup( &UIData->screen, area, box, attr ); } area.row = 0; area.col = 0; drawbox( &(vptr->window.type.buffer), area, box, attr, FALSE ); if( vptr->name != NULL ) { #if 0 do not delete this stuff col = 0; len = area.width; bstring( &(vptr->window.type.buffer), 0, col, UIData->attrs[ATTR_CURR_SELECT_DIAL], " ", len ); len = __min( strlen( vptr->name ), area.width ); col = ( area.width - len ) / 2; bstring( &(vptr->window.type.buffer), 0, col, UIData->attrs[ATTR_CURR_SELECT_DIAL], vptr->name, len ); #else len = __min( strlen( vptr->name ), area.width ); col = ( area.width - len ) / 2; bstring( &(vptr->window.type.buffer), 0, col, attr, vptr->name, len ); #endif } bframe( &(vptr->window.type.buffer ) ); } area = vptr->area; area.row = 0; area.col = 0; vptr->open = TRUE; uivfill( vptr, area, UIData->attrs[ ATTR_NORMAL ], ' ' ); uivsetcursor( vptr ); return( vptr ); } return( NULL ); }