home *** CD-ROM | disk | FTP | other *** search
/ Kyūkyoku!! X68000 Emulator / X68000Book.dat / mac / OLS / X68000 / Ko-Window / gvpsrt10.lzh / gv_psort.c next >
C/C++ Source or Header  |  1995-02-28  |  3KB  |  149 lines

  1. /*
  2.     Copyright 1995 Ogasawara Hiroyuki(COR.)
  3. */
  4.  
  5. #include    <corlib.h>
  6. #include    <sys_doslib.h>
  7.  
  8. #include    "Sesse.inc"
  9.  
  10. #define        PROG        "GV_PSort 1.00"
  11.  
  12. #define        GVIEWWIN    "gview.win"
  13. #define        XSIZE        (80+6)
  14. #define        YSIZE        14
  15.  
  16. int        WindowHeapSize= 1024*0;
  17.  
  18. static void
  19. WaitMark()
  20. {
  21.     MouseSetPattern( 1, &SessePattern, 7, 3 );
  22.     MS_SEL( 1 );
  23. }
  24.  
  25. static void
  26. MakeNewGWin( ng )
  27. UGraphic    *ng;
  28. {
  29.     EventInfo    info;
  30.     info.option= EventUser;
  31.     info.ComBuffer= ng;
  32.     info.ComData= UserGraphic;
  33.     PidSendEvent( GVIEWWIN, &info, TRUE );
  34.     MFREE( ng->buf );
  35. }
  36.  
  37. static
  38. sort_exec( a, b )
  39. unsigned short    *a, *b;
  40. {
  41.     return    *a-*b;
  42. }
  43.  
  44. GV_PSort( gp )
  45. UGraphic    *gp;
  46. {
  47.     UGraphic    ng;
  48.     WaitMark();
  49.     if( gp->color != WindowAttrGraphic65536 && gp->palet ){
  50.         unsigned char    *str= MALLOC( gp->h*gp->v ),
  51.                 *ptr= (void*)gp->buf,
  52.                 new[256];
  53.         unsigned short    Palet[256];
  54.         int    len= gp->color == WindowAttrGraphic16 ? 16 : 256;
  55.         int    x, y, i;
  56.         if( (int)(ng.buf= (void*)str) < 0 ){
  57.             MS_SEL( 0 );
  58.             ConsoleAutoPrint( "âüâéâèé¬æ½éΦé▄é╣é±\r\n" );
  59.             return    FALSE;
  60.         }
  61.         memcpy( Palet, gp->palet, len*2 );
  62.         qsort( Palet, len, sizeof(short), sort_exec );
  63.         for( i= 0 ; i < len ; i++ ){
  64.             int    j;
  65.             for( j= 0 ; j< len ; j++ ){
  66.                 if( Palet[j] == gp->palet[i] ){
  67.                     new[i]= j;
  68.                     break;
  69.                 }
  70.             }
  71.         }
  72.         for( i= 0 ; i < gp->h*gp->v ; i++ )
  73.             *str++= new[*ptr++];
  74.         ng.palet= Palet;
  75.         ng.color= gp->color;
  76.         ng.h= gp->h;
  77.         ng.v= gp->v;
  78.         MakeNewGWin( &ng );
  79.     }
  80.     MS_SEL( 0 );
  81.     return    TRUE;
  82. }
  83.  
  84. static int
  85. EventExec( wp, info )
  86. WindowID    wp;
  87. EventInfo    *info;
  88. {
  89.     DrawBuf    dbuf[4];
  90.     switch( info->option ){
  91.         case EventOpen:
  92.             WindowSetEventAttr( wp,  EventOpenON|EventRedrawON
  93.                 |EventCloseON|EventMouseSwitchON|EventIconifyON
  94.                 |EventUserON );
  95.             WindowRedraw( wp );
  96.             return    TRUE;
  97.         case EventIconify:
  98.             IconEnt( wp, PROG, AttrDefault, 12 );
  99.             return    TRUE;
  100.         case EventRedraw:
  101.             DrawSetClear( dbuf, ColorGray );
  102.             DrawSetSymbol( dbuf+1, 3, 1, PROG, 9|4, 12 );
  103.             WindowDraw( wp, dbuf, 2 );
  104.             return    TRUE;
  105.         case EventClose:
  106.             WindowClose( wp );
  107.             WindowConnectionClose();
  108.             return    TRUE;
  109.         case EventUser:
  110.             switch( info->ComData ){
  111.             case UserGraphic:
  112.                 GV_PSort( info->ComBuffer );
  113.                 return    TRUE;
  114.             case UserString:
  115.             case UserPaste:
  116.             case UserStrings:
  117.                 break;
  118.             }
  119.             return    FALSE;
  120.  
  121.         case EventMouseSwitch:
  122.             if( info->LeftON ){
  123.                 ConsoleOpen();
  124.                 ConsolePrint(
  125. "\r\n" PROG " 1995 COR.\r\n\
  126. -----------------------------------------------------------------------\r\n\
  127. 16/256ÉFëµæ£âfü[â^é╠âpâîâbâgé≡â\ü[âgé╡é▄é╖üBôⁿÅoù═é═ UserGraphic é┼ìséó\r\n\
  128. é▄é╖üBÅoù═é╔ gview.win é¬òKùvé┼é╖üB\r\n\
  129. -----------------------------------------------------------------------\r\n"
  130.                 );
  131.                 return    TRUE;
  132.             }
  133.             return    FALSE;
  134.     }
  135.     return    FALSE;
  136. }
  137.  
  138.  
  139. void
  140. WindowMain( argc, argv )
  141. char    **argv;
  142. {
  143.     int    x= 300, y= 0;
  144.     argc= AnalyzeArgs( argc, argv, &x, &y, NULL, NULL );
  145.     WindowTitleOpen( x, y, XSIZE, YSIZE, NULL, " ",
  146.                         Close|Push|Icon, EventExec );
  147. }
  148.  
  149.