home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / MM1 / GRAPHICS / jpegshow_3.0.lzh / JPEGSHOW / openwin.c < prev    next >
C/C++ Source or Header  |  1995-10-07  |  4KB  |  141 lines

  1. #include <stdio.h>
  2. #include <signal.h>
  3. #ifdef __UWLIBS__
  4. typedef long size_t;
  5. #endif
  6. #include "jpeglib.h"
  7. #include <wind.h>
  8. #include <mouse.h>
  9. #define MAIN
  10. #include <stdmenu.h>
  11. #include <buffs.h>
  12. #include <math.h>
  13.  
  14. #define MS_SIG 200
  15. #define MN_PREV 30
  16. #define MN_NEXT 31
  17. #define MN_SEL 32
  18. #define MN_MOD 33
  19. #define MN_SCA 34
  20.  
  21. extern struct jpeg_decompress_struct cinfo;
  22. extern int scale, gflag, rflag, sflag;
  23.  
  24. MIDSCR _modms[] = {
  25.     {{"Normal"}, ENABLE, RESERVED, 0},
  26.     {{"Gray"},  ENABLE, RESERVED, 0},
  27.     {{"1 pass"}, ENABLE, RESERVED, 0},
  28.     {{"Progress"},  ENABLE, RESERVED, 0}
  29. };
  30.  
  31. MIDSCR _sclms[] = {
  32.     {{"1"},  ENABLE, RESERVED, 0},
  33.     {{"2"}, ENABLE, RESERVED, 0},
  34.     {{"4"},  ENABLE, RESERVED, 0},
  35.     {{"8"}, ENABLE, RESERVED, 0}
  36. };
  37.  
  38. #define MOD_SZ sizeof(_modms)/sizeof(_modms[0])
  39. #define SCL_SZ sizeof(_sclms)/sizeof(_sclms[0])
  40.  
  41. MNDSCR wnmen[] =
  42. {
  43.  {{"Prev"}, MN_PREV, 6, 0, ENABLE},
  44.  {{"Next"}, MN_NEXT, 6, 0, ENABLE},
  45.  {{"Select"}, MN_SEL, 6, 0, ENABLE},
  46.  {{"Mode"},  MN_MOD, 8, MOD_SZ, ENABLE, RESERVED, _modms},
  47.  {{"Scale"}, MN_SCA, 6, SCL_SZ, ENABLE, RESERVED, _sclms }
  48. };
  49.  
  50. WNDSCR windat = {
  51.    "Jpegshow", sizeof(wnmen) / sizeof(wnmen[0]), 45, 10, WINSYNC, RESERVED, wnmen};
  52.  
  53. int wtype = WT_FSWIN | WC_MOVE | WC_GROW;
  54. int gotsig;
  55. int h_pos, v_pos;
  56. MSRET ms;
  57.  
  58. int repaint(int x, int y);
  59.  
  60. openwin(int actwin)
  61. {
  62.    register int mx, my;
  63.  
  64.    Palette(actwin, 254, 0, 0, 0);
  65.    Palette(actwin, 255, 200, 200, 200);
  66.  
  67.    Mn_Colors(actwin, 255, 254, 255, 255, 255);
  68.    _ss_wset(actwin, wtype, &windat);
  69.    Select(actwin);
  70.    Font(actwin, GRP_FONT, FNT_G8X8);
  71.    _ss_sbar(actwin, h_pos, v_pos);
  72. }
  73.  
  74. int mmenu(int actwin, int argc, char **argv)
  75. {
  76.    int sel, item;
  77.  
  78.    for (;;) {
  79.       _ss_ubar(actwin);
  80.       _ss_msig(actwin, MS_SIG);
  81.       sleep(0);
  82.       if (gotsig != MS_SIG)
  83.          continue;
  84.       _gs_mouse(actwin, &ms);
  85.       if (ms.pt_area != WR_CNTRL || ms.pt_valid == 0)
  86.          continue;                  /* not control region - ignore */
  87.  
  88.       sel = _gs_msel(actwin, &item);
  89.       switch ( sel ) {
  90.       case MN_CLOS: Select(0);
  91.                     kill(getpid(), SIGINT);
  92.                     exit(0);                   /* should kill() fail */
  93.       case MN_PREV: return -1;
  94.       case MN_NEXT: return 0;
  95.       case MN_SEL: list_box(actwin, &item, argv+1, argc-1, 10, 0, 20, 57, "Which file?");
  96.                    if ( item == 0 )
  97.                       break;
  98.                    return item;
  99.       case MN_HSCRL: 
  100.                      if ( h_pos != item && repaint(item, v_pos) ) {
  101.                         h_pos = item;
  102.                         _ss_sbar(actwin, h_pos, v_pos);
  103.                      }
  104.                      break;
  105.       case MN_VSCRL: 
  106.                      if ( v_pos != item && repaint(h_pos, item) ) {
  107.                         v_pos = item;
  108.                         _ss_sbar(actwin, h_pos, v_pos);
  109.                      }
  110.                      break;
  111.       case MN_MOD:
  112.                   switch (item) {
  113.                   case 1: gflag = rflag = sflag = 0;
  114.                           break;
  115.                   case 2: gflag = 1;
  116.                           break;
  117.                   case 3: sflag = 1;
  118.                           gflag = 0;
  119.                           break;
  120.                   case 4: rflag = 1;
  121.                           break;
  122.                   }
  123.                   break;
  124.       case MN_SCA:
  125.                   switch (item) {
  126.                   case 1: scale = 1;
  127.                           break;
  128.                   case 2: scale = 2;
  129.                           break;
  130.                   case 3: scale = 4;
  131.                           break;
  132.                   case 4: scale = 8;
  133.                           break;
  134.                   }
  135.                   break;
  136.       default:
  137.                      continue;
  138.       }
  139.    }
  140. }
  141.