{ 'L', 'l', 'L', 'L'-'A'+1, EV_ALT_L }, { 'M', 'm', 'M', 'M'-'A'+1, EV_ALT_M }, { 'N', 'n', 'N', 'N'-'A'+1, EV_ALT_N }, { 'O', 'o', 'O', 'O'-'A'+1, EV_ALT_O }, { 'P', 'p', 'P', 'P'-'A'+1, EV_ALT_P }, { 'Q', 'q', 'Q', 'Q'-'A'+1, EV_ALT_Q }, { 'R', 'r', 'R', 'R'-'A'+1, EV_ALT_R }, { 'S', 's', 'S', 'S'-'A'+1, EV_ALT_S }, { 'T', 't', 'T', 'T'-'A'+1, EV_ALT_T }, { 'U', 'u', 'U', 'U'-'A'+1, EV_ALT_U }, { 'V', 'v', 'V', 'V'-'A'+1, EV_ALT_V }, { 'W', 'w', 'W', 'W'-'A'+1, EV_ALT_W }, { 'X', 'x', 'X', 'X'-'A'+1, EV_ALT_X }, { 'Y', 'y', 'Y', 'Y'-'A'+1, EV_ALT_Y }, { 'Z', 'z', 'Z', 'Z'-'A'+1, EV_ALT_Z }, { VK_F1, EV_FUNC( 1 ), EV_SHIFT_FUNC( 1 ), EV_CTRL_FUNC( 1 ), EV_ALT_FUNC( 1 ) }, { VK_F2, EV_FUNC( 2 ), EV_SHIFT_FUNC( 2 ), EV_CTRL_FUNC( 2 ), EV_ALT_FUNC( 2 ) }, { VK_F3, EV_FUNC( 3 ), EV_SHIFT_FUNC( 3 ), EV_CTRL_FUNC( 3 ), EV_ALT_FUNC( 3 ) }, { VK_F4, EV_FUNC( 4 ), EV_SHIFT_FUNC( 4 ), EV_CTRL_FUNC( 4 ), EV_ALT_FUNC( 4 ) }, { VK_F5, EV_FUNC( 5 ), EV_SHIFT_FUNC( 5 ), EV_CTRL_FUNC( 5 ), EV_ALT_FUNC( 5 ) }, { VK_F6, EV_FUNC( 6 ), EV_SHIFT_FUNC( 6 ), EV_CTRL_FUNC( 6 ), EV_ALT_FUNC( 6 ) }, { VK_F7, EV_FUNC( 7 ), EV_SHIFT_FUNC( 7 ), EV_CTRL_FUNC( 7 ), EV_ALT_FUNC( 7 ) }, { VK_F8, EV_FUNC( 8 ), EV_SHIFT_FUNC( 8 ), EV_CTRL_FUNC( 8 ), EV_ALT_FUNC( 8 ) }, { VK_F9, EV_FUNC( 9 ), EV_SHIFT_FUNC( 9 ), EV_CTRL_FUNC( 9 ), EV_ALT_FUNC( 9 ) }, { VK_F10, EV_FUNC( 10 ), EV_SHIFT_FUNC( 10 ), EV_CTRL_FUNC( 10 ), EV_ALT_FUNC( 10 ) }, { VK_F11, EV_FUNC_11, EV_SHIFT_FUNC_11, EV_CTRL_FUNC_11, EV_ALT_FUNC_11 }, { VK_F12, EV_FUNC_12, EV_SHIFT_FUNC_12, EV_CTRL_FUNC_12, EV_ALT_FUNC_12 } }; extern MOUSEORD MouseRow; extern MOUSEORD MouseCol;
EVENT intern process_menuevent( VSCREEN *vptr, EVENT ev ) /*******************************************************/ { register int index; register int oldmenu = 0; register EVENT itemevent; auto EVENT newevent; auto DESCMENU* desc; auto int menu; auto bool select; auto ORD mouserow; auto ORD mousecol; auto int mouseon; newevent = ev; if( ev > EV_NO_EVENT && ev <= EV_LAST_KEYBOARD ) { /* this allows alt numeric keypad stuff to not activate the menus */ Menu->altpressed = FALSE; } if( isdialogue( vptr ) == FALSE ) { if( NumMenus > 0 ) { desc = &Describe[ Menu->menu - 1 ]; newevent = EV_NO_EVENT; /* Moved here from "else" case below */ if( Menu->popuppending ) { Menu->popuppending = FALSE; itemevent = createpopup( desc, &ev ); } else { itemevent = EV_NO_EVENT; } if( Menu->active ) { oldmenu = menu = Menu->menu; } else { oldmenu = menu = 0; } select = FALSE; if( ev == EV_ALT_PRESS && !Menu->ignorealt ) { Menu->altpressed = TRUE; } else if( ev == EV_ALT_RELEASE && Menu->altpressed ) { if( Menu->active ) { menu = 0; } else { desc = &Describe[ 0 ]; menu = 1; } Menu->altpressed = FALSE; } else if( ev == EV_FUNC( 10 ) && UIData->f10menus ) { desc = &Describe[ 0 ]; menu = 1; } else if( ev == EV_MOUSE_PRESS_R || ev == EV_MOUSE_PRESS_M ) { newevent = ev; menu = 0; Menu->draginmenu = FALSE; } else if( ( ev == EV_MOUSE_PRESS ) || ( ev == EV_MOUSE_DRAG ) || ( ev == EV_MOUSE_REPEAT ) || ( ev == EV_MOUSE_RELEASE ) || ( ev == EV_MOUSE_DCLICK ) ) { uigetmouse( &mouserow, &mousecol, &mouseon ); if( ( mouserow < uimenuheight() ) && ( Menu->active || ev == EV_MOUSE_PRESS || ev == EV_MOUSE_DCLICK || ev == EV_MOUSE_DRAG || ev == EV_MOUSE_REPEAT ) ) { if( ev == EV_MOUSE_DCLICK ) { ev = EV_MOUSE_PRESS; } menu = 0; for( index = 0 ; !MENUENDMARKER( Menu->titles[ index ] ); ++index ) { desc = &Describe[ index ]; if( ( MENU_GET_ROW( desc ) == mouserow ) && ( desc->titlecol <= mousecol ) && ( mousecol < desc->titlecol + desc->titlewidth + 2 ) ) { Menu->draginmenu = TRUE; Menu->popuppending = TRUE; menu = index + 1; break; } } } else if( Menu->active || Menu->draginmenu ) { if( ( desc->area.col < mousecol ) && ( mousecol < desc->area.col + desc->area.width - 1 ) && ( mouserow < desc->area.row + desc->area.height - 1 ) && ( desc->area.row <= mouserow ) ) { Menu->movedmenu = TRUE; } else if( ev == EV_MOUSE_PRESS ) { newevent = ev; menu = 0; Menu->draginmenu = FALSE; } else if( ev == EV_MOUSE_RELEASE ) { menu = 0; Menu->draginmenu = FALSE; } } else { newevent = ev; } if( ev != EV_MOUSE_RELEASE && menu != oldmenu ) { Menu->movedmenu = TRUE; } if( ev == EV_MOUSE_RELEASE ) { if( !Menu->movedmenu ) { menu = 0; } else { select = TRUE; } Menu->movedmenu = FALSE; } } else if( uialtchar( ev ) != '\0' ) { process_char( uialtchar( ev ), &desc, &menu, &select ); newevent = EV_NO_EVENT; } else if( Menu->active ) { switch( ev ) { case EV_ESCAPE : menu = 0; break; case EV_RETURN : if( menu > 0 ) { Menu->popuppending = TRUE; } break; case EV_CURSOR_LEFT : menu -= 1; if( menu == 0 ) { menu = NumMenus; } Menu->popuppending = TRUE; desc = &Describe[ menu - 1 ]; break; case EV_CURSOR_RIGHT : menu += 1; if( menu > NumMenus ) { menu = 1; } Menu->popuppending = TRUE; desc = &Describe[ menu - 1 ]; break; case EV_CURSOR_DOWN : Menu->popuppending = TRUE; break; case EV_NO_EVENT : break; default : if( ev <= EV_LAST_KEYBOARD ) { if( process_char( ev, &desc, &menu, &select ) ) { break; } } if( itemevent != EV_NO_EVENT ) { newevent = itemevent; select = TRUE; } else { newevent = ev; } } } else { newevent = ev; } if( menu != oldmenu ) { if( menu > 0 && !Menu->active ) { newevent = EV_MENU_ACTIVE; } Menu->active = ( menu > 0 ); if( oldmenu > 0 ) { menutitle( oldmenu, FALSE ); } if( menu > 0 ) { Menu->menu = menu; menutitle( menu, TRUE ); } if( menu == 0 || oldmenu == 0 ) { uimenutitlebar(); } } if( Menu->active ) { if( itemevent == EV_NO_EVENT ) { if( MENUGRAYED(Menu->titles[ menu-1]) ) { Menu->popuppending = FALSE; } else { itemevent = Menu->titles[ menu-1 ].event; } } Menu->event = itemevent; if( select ) { newevent = Menu->event; Menu->active = FALSE; uimenutitlebar(); } } } } if( ev == EV_MOUSE_RELEASE ) { Menu->draginmenu = FALSE; } if( Menu->ignorealt ) { Menu->ignorealt = FALSE; } if( ( !Menu->active && ( oldmenu != 0 ) ) || ( Menu->active && ( oldmenu != Menu->menu ) ) ) { if( ( Menu->menu > 0 ) && Menu->active ) { uimenucurr( &Menu->titles[Menu->menu - 1 ] ); } else { /* no current menu */ uimenucurr( NULL ); } } if ( Menu->popuppending ) { InitMenuPopupPending = TRUE; } return( newevent ); }
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 ); }
static EVENT menu_list[] = { EV_FIRST_EDIT_CHAR, EV_LAST_EDIT_CHAR, EV_ALT_Q, EV_ALT_M, EV_SCROLL_PRESS, EV_CAPS_RELEASE, EV_NO_EVENT, EV_MOUSE_PRESS, EV_MOUSE_DRAG, EV_MOUSE_RELEASE, EV_ESCAPE, EV_RETURN, EV_CURSOR_LEFT, EV_CURSOR_RIGHT, EV_CURSOR_DOWN, EV_ALT_PRESS, EV_ALT_RELEASE, EV_FUNC(10), EV_NO_EVENT }; static char* alt = "qwertyuiop\0\0\0\0asdfghjkl\0\0\0\0\0zxcvbnm"; static bool InitMenuPopupPending = FALSE; extern void uisetbetweentitles( int between ) { BetweenTitles = between; } extern char uialtchar( EVENT ev ) /*******************************/