home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Libraries / stdwin / Appls / test / bike.c next >
Encoding:
C/C++ Source or Header  |  1991-02-25  |  2.7 KB  |  173 lines  |  [TEXT/????]

  1. #include "stdwin.h"
  2. #include "tilist.h"
  3.  
  4. #define NFRONT    3
  5. #define NBACK    6
  6.  
  7. #define VSTEP 50
  8. #define HSCALE 470
  9.  
  10. #define TIPWIDTH 40
  11.  
  12. int front[NFRONT] = {28, 38, 48};
  13. int back[NBACK] = {28, 24, 20, 17, 15, 13};
  14.  
  15. double verzet[NFRONT][NBACK];
  16. double lowest, highest;
  17.  
  18. WINDOW *win;
  19.  
  20. TILIST *til;
  21.  
  22. TEXTITEM *fronttips[NFRONT];
  23. TEXTITEM *backtips[NBACK];
  24.  
  25. calculate()
  26. {
  27.     int f, b;
  28.     double v;
  29.     
  30.     lowest = 1e10;
  31.     highest = 0.0;
  32.     for (f = 0; f < NFRONT; ++f) {
  33.         for (b = 0; b < NBACK; ++b) {
  34.             v = (double)front[f] / (double)back[b];
  35.             verzet[f][b] = v;
  36.             if (v < lowest)
  37.                 lowest = v;
  38.             if (v > highest)
  39.                 highest = v;
  40.         }
  41.     }
  42. }
  43.  
  44. setuptil()
  45. {
  46.     int f, b;
  47.     int h, v;
  48.     
  49.     til = tilcreate(win);
  50.     
  51.     h = 0;
  52.     v = 2;
  53.     for (b = 0; b < NBACK; ++b) {
  54.         backtips[b] = tiladd(til, h, v, h+TIPWIDTH-2, 0, 1);
  55.         h += TIPWIDTH;
  56.     }
  57.     
  58.     h = 0;
  59.     v = 0;
  60.     for (f = 0; f < NFRONT; ++f) {
  61.         v += VSTEP;
  62.         fronttips[f] = tiladd(til, h, v, h+TIPWIDTH-2, 0, 1);
  63.     }
  64.     
  65.     settilvalues();
  66. }
  67.  
  68. settilvalues()
  69. {
  70.     int f, b;
  71.     char buf[100];
  72.     
  73.     for (f = 0; f < NFRONT; ++f) {
  74.         sprintf(buf, "%d", front[f]);
  75.         tilsettext(fronttips[f], buf);
  76.     }
  77.     for (b = 0; b < NBACK; ++b) {
  78.         sprintf(buf, "%d", back[b]);
  79.         tilsettext(backtips[b], buf);
  80.     }
  81. }
  82.  
  83. gettilvalues()
  84. {
  85.     int f, b;
  86.     char *text;
  87.     
  88.     for (f = 0; f < NFRONT; ++f) {
  89.         text = tilgettext(fronttips[f]);
  90.         sscanf(text, "%d", &front[f]);
  91.     }
  92.     for (b = 0; b < NBACK; ++b) {
  93.         text = tilgettext(backtips[b]);
  94.         sscanf(text, "%d", &back[b]);
  95.     }
  96.     settilvalues();
  97.     calculate();
  98.     wchange(win, 0, 0, 30000, 30000);
  99. }
  100.  
  101. void
  102. drawproc(win, left, top, right, bottom)
  103.     WINDOW *win;
  104.     int left, top, right, bottom;
  105. {
  106.     int f, b;
  107.     int h, v;
  108.     int lasth;
  109.     
  110.     tildraw(til, left, top, right, bottom);
  111.     
  112.     v = VSTEP;
  113.     for (f = 0; f < NFRONT; ++f) {
  114.         for (b = 0; b < NBACK; ++b) {
  115.             h = (verzet[f][b] - lowest) *
  116.                  (HSCALE - 2*TIPWIDTH) / (highest - lowest);
  117.             h += 2*TIPWIDTH;
  118.             wcprintf(50, h, v-2-wlineheight(), "%d", back[b]);
  119.             wdrawbox(h-2, v-2, h+2, v+2);
  120.             wcprintf(50, h, v+2, "%.2f", verzet[f][b]);
  121.             if (b > 0) {
  122.                 wpaint(lasth+2, v-1, h-2, v+1);
  123.             }
  124.             lasth = h;
  125.         }
  126.         v += VSTEP;
  127.     }
  128. }
  129.  
  130. main(argc, argv)
  131.     int argc;
  132.     char **argv;
  133. {
  134.     winitargs(&argc, &argv);
  135.     calculate();
  136.     wsetdefwinsize(HSCALE + 4*wcharwidth('0'), (NFRONT+1) * VSTEP);
  137.     win = wopen("Bike", drawproc);
  138.     wsetdocsize(win, HSCALE + 4*wcharwidth('0'), (NFRONT+1) * VSTEP);
  139.     setuptil();
  140.     for (;;) {
  141.         EVENT e;
  142.         wgetevent(&e);
  143.         if (tilevent(til, &e))
  144.             continue;
  145.         switch (e.type) {
  146.         case WE_COMMAND:
  147.             switch (e.u.command) {
  148.             case WC_CLOSE:
  149.                 quit();
  150.                 /*NOTREACHED*/
  151.             case WC_CANCEL:
  152.                 settilvalues();
  153.                 break;
  154.             case WC_RETURN:
  155.                 gettilvalues();
  156.                 break;
  157.             }
  158.             break;
  159.         case WE_CLOSE:
  160.             quit();
  161.             /*NOTREACHED*/
  162.         }
  163.     }
  164. }
  165.  
  166. quit()
  167. {
  168.     wclose(win);
  169.     wdone();
  170.     exit(0);
  171.     /*NOTREACHED*/
  172. }
  173.