home *** CD-ROM | disk | FTP | other *** search
/ Kyūkyoku!! X68000 Emulator / X68000Book.dat / mac / OLS / X68000 / Ko-Window / kow142s.lzh / corlib / MgDefaultOpen.c < prev    next >
C/C++ Source or Header  |  1995-02-25  |  3KB  |  125 lines

  1. /*    Copyright 1992 H.Ogasawara (COR.)    */
  2. /* MonoGusaLib -> Mglib*/
  3.  
  4. #include    "corlib.h"
  5. #include    <winop.h>
  6. #include    "MgProg.h"
  7.  
  8. MgLibPack    *__Mg_Dummy;
  9.  
  10. void
  11. __Mg_SendKeyString( wp, info, p )
  12. WindowID    wp;
  13. EventInfo    *info;
  14. unsigned char        *p;
  15. {
  16.     while( *p ){
  17.         info->KeyCode= *p++;
  18.         info->ShiftStat= 0;
  19.         info->option= EventKey;
  20.         WindowSendEvent( wp, info );
  21.     }
  22. }
  23.  
  24. static
  25. DExec( wp, info )
  26. WindowID    wp;
  27. EventInfo    *info;
  28. {
  29.     MgLibPack    *dp;
  30.     if( info->option == EventOpen ){
  31.         WindowSetClientData( wp, 0, dp= __Mg_Dummy );
  32.     }else
  33.         dp= WindowGetClientPointer( wp );
  34.     switch( info->option ){
  35.     case EventOpen:
  36.         if( dp->attr & WindowAttrGraphicUse ){
  37.             DefGraphicInit( &dp->gra,
  38.                 dp->attr & WindowAttrGraphicUse,
  39.                 DefGraphicSleep, (void*)-1 );
  40.             WindowSetAttr( wp, dp->attr & WindowAttrGraphicUse );
  41.             WindowSetEventAttr( wp, EventAttrDefault|EventUserON|
  42.                 EventGraphicON|EventPopON|EventMoveON );
  43.             GposInit( wp );
  44.         }else
  45.             WindowSetEventAttr( wp, EventAttrDefault|EventUserON );
  46.         if( !(*dp->exec)( wp, info ) )
  47.             WindowRedraw( wp );
  48.         return    TRUE;
  49.     case EventRedraw:
  50.          if( dp->attr & WindowAttrGraphicUse ){
  51.              if( DefGraphicRedraw( &dp->gra, wp, info ) )
  52.                  return    TRUE;
  53.              DefGraphicPalet( &dp->gra );
  54.          }
  55.         if( !(*dp->exec)( wp, info ) ){
  56.             DrawBuf    dbuf[1];
  57.             DrawSetClear( dbuf, 1 );
  58.             WindowDraw( wp, dbuf, 1 );
  59.         }
  60.         return    TRUE;
  61.     case EventClose:
  62.         if( !(*dp->exec)( wp, info ) ){
  63.             WindowClose( wp );
  64.             WindowConnectionClose();
  65.         }
  66.         free( dp );
  67.         return    TRUE;
  68.     case EventIconify:
  69.         if( !(*dp->exec)( wp, info ) )
  70.             IconEnt( wp, (char*)GetTitleAddress(wp), AttrDefault, 12 );
  71.         return    TRUE;
  72.     case EventUser:
  73.         if( !(*dp->exec)( wp, info ) ){
  74.             char    **pp;
  75.             switch( info->ComData ){
  76.             default:
  77.                 return    FALSE;
  78.             case UserStrings:
  79.                 for( pp= info->ComBuffer ; *pp ;)
  80.                     __Mg_SendKeyString( wp, info, *pp++ );
  81.             case UserString:
  82.             case UserPaste:
  83.                 __Mg_SendKeyString( wp, info, info->ComBuffer );
  84.             }
  85.         }
  86.         return    TRUE;
  87.     case EventMove:
  88.     case EventPop:
  89.     case EventGraphic:
  90.         if( !(*dp->exec)( wp, info ) )
  91.             return    DefGraphicEnt( &dp->gra, wp, info );
  92.         return    TRUE;
  93.     default:
  94.         return    (*dp->exec)( wp, info );
  95.     }
  96.     return    FALSE;
  97. }
  98.  
  99. WindowID
  100. MgWindowDefaultOpen( x, y, h, v, title, mode, Exec )
  101. char    *title;
  102. int    (*Exec)();
  103. {
  104.     if( !(__Mg_Dummy= (MgLibPack*)malloc( sizeof( MgLibPack ) )) )
  105.         return    NULL;
  106.  
  107.     __Mg_Dummy->exec= Exec;
  108.     __Mg_Dummy->attr= (mode>>8) & WindowAttrGraphicUse;
  109.     return    WindowTitleOpen( x, y, h, v, NULL, title,
  110.                 Close|Push|(mode&MgTitleItem), DExec );
  111. }
  112.  
  113. WindowID
  114. MgWindowDefaultOpenArgs( x, y, h, v, title, argc, argv, mode, Exec )
  115. char    *title, **argv;
  116. int    (*Exec)();
  117. {
  118.     if( mode & MgSwitchHV)
  119.         AnalyzeArgs( argc, argv, &x, &y, &h, &v );
  120.     else
  121.         AnalyzeArgs( argc, argv, &x, &y, NULL, NULL );
  122.     return    MgWindowDefaultOpen( x, y, h, v, title, mode, Exec );
  123. }
  124.  
  125.