home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / C / TOOLKIT.ZIP / PAGEFLIP.C < prev    next >
Encoding:
C/C++ Source or Header  |  1985-11-20  |  24.7 KB  |  757 lines

  1.  
  2. /*
  3.  * DEGAS Elite Page Flipper!
  4.  * version 121286
  5.  * File: PAGEFLIP.C
  6.  * (c) 1987 Antic Publishing
  7.  * Written by Patrick Bass
  8.  *
  9.  */
  10.  
  11. #include "obdefs.h"
  12. #include "define.h"
  13. #include "gemdefs.h"
  14. #include "osbind.h"
  15. #include "portab.h"
  16.  
  17. #include "pageflip.h"
  18.  
  19. #define   TRUE           (1)
  20. #define   FALSE          (0)
  21. #define   CANCEL         (0)
  22. #define   NO             (2)
  23. #define   ERROR          (-1)
  24. #define   begin          {
  25. #define   end            }
  26. #define   wend           }
  27. #define   repeat         }
  28. #define   next           }
  29. #define   endif          }
  30. #define   endswitch      }
  31. #define   not            !
  32. #define   equals         ==
  33. #define   does_not_equal !=
  34. #define   then
  35. #define   AND            &&
  36. #define   OR             ||
  37. #define   ANDed_with     &
  38. #define   ORed_with      |
  39. #define   DELAY          for( delay=0; delay<32767; delay++ );
  40. #define   CONSOL         2
  41. #define   CR             13
  42. #define   LF             10
  43. #define   JIFFYTIME      (.0166667)
  44. #define   MAXSLIDE       119
  45. #define   QUEUESIZE      42
  46. #define   LOREZ          0
  47. #define   MEDREZ         1
  48. #define   HIREZ          2
  49. #define   DEGAS00        0xDE00
  50. #define   DEGAS01        0xDE01
  51. #define   DEGAS80        0xDE80
  52. #define   DEGAS81        0xDE81
  53. #define   LWGET(x)       ( (int) *((int *)(x)) )
  54. #define   B1OB_W(x)      (dialog0+(x)*sizeof(OBJECT)+20)
  55. #define   B1OB_H(x)      (dialog0+(x)*sizeof(OBJECT)+22)
  56.  
  57. /*------------------------*/
  58. extern int  gl_apid;
  59.  
  60. /*------------------------*/
  61. int  contrl[ 12 ],
  62.      intin[ 128 ], ptsin[ 128 ],
  63.      intout[ 128 ], ptsout[ 128 ],
  64.      work_in[]={ 1,1,1,1,1,1,1,1,1,1,2 }, work_out[ 57 ],
  65.      gem_handle, menu_id, button,
  66.      key0, key1, key2, key3, key4, key5,
  67.      printable, aborted,
  68.      DE_id, menu_id, forever=0, slots, resolution,
  69.      xres, yres, seq_size,
  70.  
  71.      /* box 1 fsequence box size */
  72.      b1fs_x, b1fs_y, b1fs_w, b1fs_h, 
  73.  
  74.      /* box 1 TRACK0 box size */
  75.      tx, ty, tw, th, 
  76.  
  77.      /* box 1 SLIDER box size */
  78.      sx, sy, sw, sh, 
  79.  
  80.      /* corners of Dialog Box   */
  81.      x0,  y0,  w0,  h0, xd0, yd0, wd0, hd0,
  82.      x1,  y1,  w1,  h1, xd1, yd1, wd1, hd1,
  83.  
  84.      slider0,
  85.  
  86.      /* Button activity flags   */
  87.      b1flag, b2flag, b3flag, b4flag,
  88.      b5flag, b6flag, b7flag, b8flag,
  89.  
  90.      /* Corners of buttons  */
  91.      b1b1x, b1b2x, b1b3x, b1b4x, b1b5x, b1b6x, b1b7x, b1b8x, b1bcx,b1bbx,
  92.      b1b1y, b1b2y, b1b3y, b1b4y, b1b5y, b1b6y, b1b7y, b1b8y, b1bcy,b1bby,
  93.      b1b1w, b1b2w, b1b3w, b1b4w, b1b5w, b1b6w, b1b7w, b1b8w, b1bcw,b1bbw,
  94.      b1b1h, b1b2h, b1b3h, b1b4h, b1b5h, b1b6h, b1b7h, b1b8h, b1bch,b1bbh,
  95.  
  96.      /* Corners of Exit button */
  97.      b1bxx, b1bxy, b1bxw, b1bxh,
  98.  
  99.      msgbuff[ 20 ], keycode, ret,
  100.      i, j, k, l, done, slidpos[ 10 ], slidmax[ 10 ];
  101.  
  102.  
  103. /*------------------------------------------*/
  104. char rs_strings[]="[1][|I can't operate|without|DEGAS Elite!][ Sorry ]",
  105.      fps[ 50 ],
  106.      fsequence[ 100 ],
  107.      debug[ 100 ];
  108.  
  109. /*------------------------------------------*/
  110. long      *s_ptrs, screen[ 15 ], dialog0;
  111.  
  112. /*------------------------------------------*/
  113. float     slidstep[ 10 ], slidacc[ 10 ];
  114.  
  115. OBJECT *rsc_pointer;
  116.  
  117. /*------------------------------------------*/
  118. main()
  119. begin
  120.      int x, result, event;
  121.  
  122.      appl_init();
  123.      gem_handle=graf_handle( &i, &i, &i, &i );
  124.      menu_id=menu_register( gl_apid,"  Page Flipper " );
  125.  
  126.      result=rsrc_load( "PAGEFLIP.RSC" );
  127.      if( result<0 )then begin
  128.           form_alert( 1,"[1][ Flipper Resource | not found! ][ Danger ]");
  129.      endif
  130.  
  131.      rsrc_gaddr( 0, 0, &dialog0 );
  132.  
  133.      slider0=( MAXSLIDE-10 );
  134.  
  135.      objc_offset( dialog0, FSEQ, &b1fs_x, &b1fs_y );
  136.      b1fs_w=( LWGET( B1OB_W( FSEQ )))-1;
  137.      b1fs_h=( LWGET( B1OB_H( FSEQ )))-1;
  138.  
  139.      objc_offset( dialog0, TRACK0, &tx, &ty );
  140.      tw=( LWGET( B1OB_W( TRACK0 )))-1;
  141.      th=( LWGET( B1OB_H( TRACK0 )))-1;
  142.  
  143.      objc_offset( dialog0, BSPEED, &sx, &sy );
  144.      sw=( LWGET( B1OB_W( BSPEED )))-1;
  145.      sh=( LWGET( B1OB_H( BSPEED )))-1;
  146.  
  147.      for( x=0; x<QUEUESIZE; fsequence[ x++ ]=0 );
  148.      strcat( fsequence, " 1" );
  149.      seq_size=strlen( fsequence );
  150.  
  151.      do begin
  152.           event=evnt_multi( MU_MESAG,
  153.                               1, 1, ret,
  154.                               0, 0, 0, 0, 0,
  155.                               0, 0, 0, 0, 0,
  156.                               msgbuff, 0, 0,
  157.                               &ret, &ret, &ret,
  158.                               &ret, &ret, &ret );
  159.  
  160.           if( event & MU_MESAG )then begin
  161.  
  162.                if( msgbuff[ 0 ] equals AC_OPEN )then begin
  163.                     if( msgbuff[ 4 ] equals menu_id )then begin
  164.                          v_opnvwk( work_in, &gem_handle, work_out );
  165.  
  166.                          inquire();
  167.  
  168.                          v_clsvwk( gem_handle );
  169.                     endif
  170.                endif
  171.  
  172.                if( msgbuff[ 0 ] equals DEGAS80 )then begin
  173.                     v_opnvwk( work_in, &gem_handle, work_out );
  174.                     xres=work_out[ 0 ]; yres=work_out[ 1 ];
  175.  
  176.                     menu_handle();
  177.  
  178.                     v_clsvwk( gem_handle );
  179.                endif
  180.  
  181.           endif
  182.  
  183.      repeat while( TRUE );
  184. end
  185.  
  186. /*-------------------------------------------*/
  187. inquire()
  188. begin
  189.      DE_id=appl_find( "DEGELITE" );
  190.      if( DE_id<0 )then form_alert( 1, rs_strings );
  191.  
  192.      if( DE_id >=0 )then begin
  193.           msgbuff[ 0 ]=DEGAS00;
  194.           msgbuff[ 1 ]=gl_apid;
  195.           msgbuff[ 2 ]=0;
  196.           appl_write( DE_id, 16, msgbuff );
  197.      endif
  198. end
  199.  
  200. /*-------------------------------------------*/
  201. menu_handle()
  202. begin
  203.      int  ix, iy, amount, x, pressed, mx, my;
  204.      char  *pointer, z;
  205.  
  206.      x0=( xres/2 )-10; y0=( yres/2 )-10; w0=h0=20;
  207.  
  208.      s_ptrs=(char *)(  ( (long)msgbuff[ 3 ]<<16 )
  209.            ORed_with(  ( (long)msgbuff[ 4 ] )ANDed_with 0x0000ffffL) );
  210.  
  211.      for( ix=0; ix<15; screen[ ix++ ]=ERROR );
  212.      slots=msgbuff[ 5 ];
  213.      for( ix=0; ix<slots; ++ix )begin
  214.           screen[ ix ]=s_ptrs[ ix ];
  215.      next
  216.  
  217.      wind_update( TRUE );
  218.      form_center( dialog0, &xd1, &yd1, &wd1, &hd1 );
  219.  
  220.      objc_offset( dialog0, FSEQ, &b1fs_x, &b1fs_y );
  221.      b1fs_w=( LWGET( B1OB_W( FSEQ )))-1;
  222.      b1fs_h=( LWGET( B1OB_H( FSEQ )))-1;
  223.  
  224.      form_dial( 0, x1, y1, w1, h1, xd1, yd1, wd1, hd1 );
  225.      form_dial( 1, x1, y1, w1, h1, xd1, yd1, wd1, hd1 );
  226.  
  227.      set1_button_state();
  228.  
  229.      objc_draw( dialog0, 0, 2, xd1, yd1, wd1, hd1 );
  230.  
  231.      reset( 0, dialog0, TRACK0, BSPEED, MAXSLIDE, slider0 );
  232.      seq_size=strlen( fsequence );
  233.      adjust( dialog0, FSEQ, fsequence, b1fs_x, b1fs_y, b1fs_w, b1fs_h );
  234.  
  235.      amount=(float)( (slidmax[ 0 ]-slidpos[ 0 ])+1 );
  236.      amount=(float)(( ((float)60)/amount )+((float).05) );
  237.      ftoa( (float)amount, fps, 1 );
  238.      adjust( dialog0, TRACK0, fps, tx, ty, tw, th ); 
  239.  
  240.      do begin
  241.           key1=form_do( dialog0, 0 );
  242.  
  243.           if( key1 equals BPERFORM )then begin
  244.                flip_it();
  245.                objc_change(dialog0,BEXIT,0,b1bxx,b1bxy,b1bxw,b1bxh,0,1);
  246.           endif
  247.  
  248.           if( ( key1 equals BCLEAR   )OR
  249.               ( key1 equals BBKSPACE )OR
  250.               ( key1 equals B1 )OR( key1 equals B2 )OR
  251.               ( key1 equals B3 )OR( key1 equals B4 )OR
  252.               ( key1 equals B5 )OR( key1 equals B6 )OR
  253.               ( key1 equals B7 )OR( key1 equals B8 ) )then begin
  254.  
  255.                     filter_key( key1 );
  256.           endif
  257.  
  258.           if( ( key1 equals SPEEDDN )
  259.             OR( key1 equals SPEEDUP )
  260.             OR( key1 equals BSPEED  ) )then begin
  261.  
  262.               do_slider(0,dialog0,TRACK0,BSPEED,SPEEDDN,SPEEDUP,key1);
  263.               key1=( FALSE );
  264.  
  265.           endif
  266.  
  267.      repeat while( key1 does_not_equal BEXIT );
  268.  
  269.      rsc_pointer=( OBJECT *)dialog0;
  270.      rsc_pointer[ BEXIT ].ob_state=NORMAL;
  271.      objc_draw( dialog0, BEXIT, 1, b1bxx, b1bxy, b1bxw, b1bxh );
  272.  
  273.      form_dial( 2, x1, y1, w1, h1, xd1, yd1, wd1, hd1 );
  274.      form_dial( 3, x1, y1, w1, h1, xd1, yd1, wd1, hd1 );
  275.      wind_update( FALSE );
  276. end
  277.  
  278. /*----------------------------------------------*/
  279. set1_button_state()
  280. begin
  281.      rsc_pointer=( OBJECT *)dialog0;
  282.  
  283.      objc_offset( dialog0, BCLEAR, &b1bcx, &b1bcy );
  284.      b1bcw=( LWGET( B1OB_W( BCLEAR )))-1;
  285.      b1bch=( LWGET( B1OB_H( BCLEAR )))-1;
  286.  
  287.      objc_offset( dialog0, BBKSPACE, &b1bbx, &b1bby );
  288.      b1bbw=( LWGET( B1OB_W( BBKSPACE )))-1;
  289.      b1bbh=( LWGET( B1OB_H( BBKSPACE )))-1;
  290.  
  291.      objc_offset( dialog0, BEXIT, &b1bxx, &b1bxy );
  292.      b1bxw=( LWGET( B1OB_W( BEXIT )))-1;
  293.      b1bxh=( LWGET( B1OB_H( BEXIT )))-1;
  294.  
  295.      objc_offset( dialog0, B8, &b1b8x, &b1b8y );
  296.      b1b8w=( LWGET( B1OB_W( B8 )))-1;
  297.      b1b8h=( LWGET( B1OB_H( B8 )))-1;
  298.      rsc_pointer[ B8 ].ob_state=SHADOWED;  b8flag=TRUE;
  299.      if( screen[ 12 ] equals 0 )then begin
  300.           rsc_pointer[ B8 ].ob_state=DISABLED;  b8flag=FALSE;
  301.      endif
  302.  
  303.      objc_offset( dialog0, B7, &b1b7x, &b1b7y );
  304.      b1b7w=( LWGET( B1OB_W( B7 )))-1;
  305.      b1b7h=( LWGET( B1OB_H( B7 )))-1;
  306.      rsc_pointer[ B7 ].ob_state=SHADOWED;  b7flag=TRUE;
  307.      if( screen[ 11 ] equals 0 )then begin
  308.           rsc_pointer[ B7 ].ob_state=DISABLED;  b7flag=FALSE;
  309.      endif
  310.  
  311.      objc_offset( dialog0, B6, &b1b6x, &b1b6y );
  312.      b1b6w=( LWGET( B1OB_W( B6 )))-1;
  313.      b1b6h=( LWGET( B1OB_H( B6 )))-1;
  314.      rsc_pointer[ B6 ].ob_state=SHADOWED;  b6flag=TRUE;
  315.      if( screen[ 10 ] equals 0 )then begin
  316.           rsc_pointer[ B6 ].ob_state=DISABLED;  b6flag=FALSE;
  317.      endif
  318.  
  319.      objc_offset( dialog0, B5, &b1b5x, &b1b5y );
  320.      b1b5w=( LWGET( B1OB_W( B5 )))-1;
  321.      b1b5h=( LWGET( B1OB_H( B5 )))-1;
  322.      rsc_pointer[ B5 ].ob_state=SHADOWED;  b5flag=TRUE;
  323.      if( screen[ 9 ] equals 0 )then begin
  324.           rsc_pointer[ B5 ].ob_state=DISABLED;  b5flag=FALSE;
  325.      endif
  326.  
  327.      objc_offset( dialog0, B4, &b1b4x, &b1b4y );
  328.      b1b4w=( LWGET( B1OB_W( B4 )))-1;
  329.      b1b4h=( LWGET( B1OB_H( B4 )))-1;
  330.      rsc_pointer[ B4 ].ob_state=SHADOWED;  b4flag=TRUE;
  331.      if( screen[ 8 ] equals 0 )then begin
  332.           rsc_pointer[ B4 ].ob_state=DISABLED;  b4flag=FALSE;
  333.      endif
  334.  
  335.      objc_offset( dialog0, B3, &b1b3x, &b1b3y );
  336.      b1b3w=( LWGET( B1OB_W( B3 )))-1;
  337.      b1b3h=( LWGET( B1OB_H( B3 )))-1;
  338.      rsc_pointer[ B3 ].ob_state=SHADOWED;  b3flag=TRUE;
  339.      if( screen[ 7 ] equals 0 )then begin
  340.           rsc_pointer[ B3 ].ob_state=DISABLED;  b3flag=FALSE;
  341.      endif
  342.  
  343.      objc_offset( dialog0, B2, &b1b2x, &b1b2y );
  344.      b1b2w=( LWGET( B1OB_W( B2 )))-1;
  345.      b1b2h=( LWGET( B1OB_H( B2 )))-1;
  346.      rsc_pointer[ B2 ].ob_state=SHADOWED;  b2flag=TRUE;
  347.      if( screen[ 2 ] equals 0 )then begin
  348.           rsc_pointer[ B2 ].ob_state=DISABLED;  b2flag=FALSE;
  349.      endif
  350.  
  351.      objc_offset( dialog0, B1, &b1b1x, &b1b1y );
  352.      b1b1w=( LWGET( B1OB_W( B1 )))-1;
  353.      b1b1h=( LWGET( B1OB_H( B1 )))-1;
  354.      rsc_pointer[ B1 ].ob_state=SHADOWED;  b1flag=TRUE;
  355. end
  356.     
  357. /*----------------------------------------------*/
  358. flip_it()
  359. begin
  360.      int  x, y, pressed, mx, my, iy,
  361.           frame, len_sequence, index, exit;
  362.  
  363.      exit=FALSE;
  364.      len_sequence=strlen( fsequence )+1;
  365.      v_hide_c( gem_handle );
  366.  
  367.      if( len_sequence > 2 )then begin
  368.           do begin
  369.                for( frame=1; frame<len_sequence; frame++ )begin
  370.  
  371.                     x=( fsequence[ frame ]-48 );
  372.                     if( ( x>0 )AND( x<9 ) )then begin
  373.                          if( x >= 3 )then x=x+4;
  374.  
  375.                          Setscreen( (long)screen[ x ], (long)screen[ x ], -1);
  376.  
  377.                          for( y=0; y<(MAXSLIDE-slidpos[ 0 ])+1; y++ )begin
  378.                               Vsync();
  379.                               graf_mkstate( &mx, &my, &pressed, &my );
  380.                               if( pressed )then begin
  381.                                    y=(( MAXSLIDE-slidpos[ 0 ] )+2 );
  382.                                    frame=( len_sequence+1 );
  383.                                    exit=TRUE;
  384.                               endif
  385.                          next
  386.                     endif
  387.                next
  388.           repeat while( exit equals FALSE );
  389.      endif
  390.  
  391.      v_show_c( gem_handle );
  392.      if( len_sequence < 3 )then begin
  393.           form_alert( 1, "[1][ Please select at least | one picture to flip. ][ Exit ]" );
  394.      endif
  395.  
  396.      Setscreen( (long)screen[ 0 ], (long)screen[ 0 ], -1 );
  397. end
  398.  
  399. /*---------------------------------------------------------*/
  400. filter_key( keypress )
  401. int  keypress;
  402. begin
  403.      int x;
  404.  
  405.      rsc_pointer=( OBJECT *)dialog0;
  406.  
  407.      if( keypress equals BCLEAR )then begin
  408.           rsc_pointer[ BCLEAR ].ob_state=SELECTED;
  409.           objc_draw( dialog0, BCLEAR, 1, b1bcx,b1bcy,b1bcw,b1bch );
  410.           for( x=0; x<QUEUESIZE; fsequence[ x++ ]=0 );
  411.           strcat( fsequence, " " );
  412.           seq_size=strlen( fsequence );
  413.           adjust( dialog0, FSEQ, fsequence,
  414.                     b1fs_x, b1fs_y, b1fs_w, b1fs_h );
  415.           rsc_pointer[ BCLEAR ].ob_state=SHADOWED;
  416.           objc_draw( dialog0, BCLEAR, 1, b1bcx,b1bcy,b1bcw,b1bch );
  417.      endif
  418.  
  419.      if( keypress equals BBKSPACE )then begin
  420.           rsc_pointer[ BBKSPACE ].ob_state=SELECTED;
  421.           objc_draw(dialog0,BBKSPACE,1,b1bbx,b1bby,b1bbw,b1bbh);
  422.           if( seq_size>1 )then begin
  423.                seq_size=( strlen( fsequence ) )-1;
  424.                fsequence[ seq_size ]=0;
  425.                adjust( dialog0, FSEQ, fsequence,
  426.                          b1fs_x, b1fs_y, b1fs_w, b1fs_h );
  427.           endif
  428.           rsc_pointer[ BBKSPACE ].ob_state=SHADOWED;
  429.           objc_draw(dialog0,BBKSPACE,1,b1bbx,b1bby,b1bbw,b1bbh);
  430.      endif
  431.  
  432.      if( keypress equals B1 )then begin
  433.           rsc_pointer[ B1 ].ob_state=SELECTED;
  434.           objc_draw(dialog0,B1,1,b1b1x,b1b1y,b1b1w,b1b1h);
  435.           if( seq_size<QUEUESIZE )then begin
  436.                strcat( fsequence, "1" );
  437.                seq_size=strlen( fsequence );
  438.                adjust( dialog0, FSEQ, fsequence,
  439.                          b1fs_x, b1fs_y, b1fs_w, b1fs_h );
  440.           endif
  441.           rsc_pointer[ B1 ].ob_state=SHADOWED;
  442.           objc_draw(dialog0,B1,1,b1b1x,b1b1y,b1b1w,b1b1h);
  443.      endif 
  444.  
  445.      if(( keypress equals B2 )AND( b2flag equals TRUE ))then begin
  446.           rsc_pointer[ B2 ].ob_state=SELECTED;
  447.           objc_draw(dialog0,B2,1,b1b2x,b1b2y,b1b2w,b1b2h);
  448.           if( seq_size<QUEUESIZE )then begin
  449.                strcat( fsequence, "2" );
  450.                seq_size=strlen( fsequence );
  451.                adjust( dialog0, FSEQ, fsequence,
  452.                          b1fs_x, b1fs_y, b1fs_w, b1fs_h );
  453.           endif
  454.           rsc_pointer[ B2 ].ob_state=SHADOWED;
  455.           objc_draw(dialog0,B2,1,b1b2x,b1b2y,b1b2w,b1b2h);
  456.      endif 
  457.  
  458.      if(( keypress equals B3 )AND( b3flag equals TRUE ))then begin
  459.           rsc_pointer[ B3 ].ob_state=SELECTED;
  460.           objc_draw(dialog0,B3,1,b1b3x,b1b3y,b1b3w,b1b3h);
  461.           if( seq_size<QUEUESIZE )then begin
  462.                strcat( fsequence, "3" );
  463.                seq_size=strlen( fsequence );
  464.                adjust( dialog0, FSEQ, fsequence,
  465.                          b1fs_x, b1fs_y, b1fs_w, b1fs_h );
  466.           endif
  467.           rsc_pointer[ B3 ].ob_state=SHADOWED;
  468.           objc_draw(dialog0,B3,1,b1b3x,b1b3y,b1b3w,b1b3h);
  469.      endif
  470.  
  471.      if(( keypress equals B4 )AND( b4flag equals TRUE ))then begin
  472.           rsc_pointer[ B4 ].ob_state=SELECTED;
  473.           objc_draw(dialog0,B4,1,b1b4x,b1b4y,b1b4w,b1b4h);
  474.           if( seq_size<QUEUESIZE )then begin
  475.                strcat( fsequence, "4" );
  476.                seq_size=strlen( fsequence );
  477.                adjust( dialog0, FSEQ, fsequence,
  478.                          b1fs_x, b1fs_y, b1fs_w, b1fs_h );
  479.           endif
  480.           rsc_pointer[ B4 ].ob_state=SHADOWED;
  481.           objc_draw(dialog0,B4,1,b1b4x,b1b4y,b1b4w,b1b4h);
  482.      endif 
  483.  
  484.      if(( keypress equals B5 )AND( b5flag equals TRUE ))then begin
  485.           rsc_pointer[ B5 ].ob_state=SELECTED;
  486.           objc_draw(dialog0,B5,1,b1b5x,b1b5y,b1b5w,b1b5h);
  487.           if( seq_size<QUEUESIZE )then begin
  488.                strcat( fsequence, "5" );
  489.                seq_size=strlen( fsequence );
  490.                adjust( dialog0, FSEQ, fsequence,
  491.                          b1fs_x, b1fs_y, b1fs_w, b1fs_h );
  492.           endif
  493.           rsc_pointer[ B5 ].ob_state=SHADOWED;
  494.           objc_draw(dialog0,B5,1,b1b5x,b1b5y,b1b5w,b1b5h);
  495.      endif 
  496.  
  497.      if(( keypress equals B6 )AND( b6flag equals TRUE ))then begin
  498.           rsc_pointer[ B6 ].ob_state=SELECTED;
  499.           objc_draw(dialog0,B6,1,b1b6x,b1b6y,b1b6w,b1b6h);
  500.           if( seq_size<QUEUESIZE )then begin
  501.                strcat( fsequence, "6" );
  502.                seq_size=strlen( fsequence );
  503.                adjust( dialog0, FSEQ, fsequence,
  504.                          b1fs_x, b1fs_y, b1fs_w, b1fs_h );
  505.           endif
  506.           rsc_pointer[ B6 ].ob_state=SHADOWED;
  507.           objc_draw(dialog0,B6,1,b1b6x,b1b6y,b1b6w,b1b6h);
  508.      endif 
  509.  
  510.      if(( keypress equals B7 )AND( b7flag equals TRUE ))then begin
  511.           rsc_pointer[ B7 ].ob_state=SELECTED;
  512.           objc_draw(dialog0,B7,1,b1b7x,b1b7y,b1b7w,b1b7h);
  513.           if( seq_size<QUEUESIZE )then begin
  514.                strcat( fsequence, "7" );
  515.                seq_size=strlen( fsequence );
  516.                adjust( dialog0, FSEQ, fsequence,
  517.                          b1fs_x, b1fs_y, b1fs_w, b1fs_h );
  518.           endif
  519.           rsc_pointer[ B7 ].ob_state=SHADOWED;
  520.           objc_draw(dialog0,B7,1,b1b7x,b1b7y,b1b7w,b1b7h);
  521.      endif 
  522.  
  523.      if(( keypress equals B8 )AND( b8flag equals TRUE ))then begin
  524.           rsc_pointer[ B8 ].ob_state=SELECTED;
  525.           objc_draw(dialog0,B8,1,b1b8x,b1b8y,b1b8w,b1b8h);
  526.           if( seq_size<QUEUESIZE )then begin
  527.                strcat( fsequence, "8" );
  528.                seq_size=strlen( fsequence );
  529.                adjust( dialog0, FSEQ, fsequence,
  530.                          b1fs_x, b1fs_y, b1fs_w, b1fs_h );
  531.           endif
  532.           rsc_pointer[ B8 ].ob_state=SHADOWED;
  533.           objc_draw(dialog0,B8,1,b1b8x,b1b8y,b1b8w,b1b8h);
  534.      endif 
  535.  
  536. end
  537.  
  538. /*-----------------------------------------------*/
  539. adjust( box_addr, object, string, x, y, w, h )
  540. long box_addr;
  541. int  object, x, y, w, h;
  542. char *string;
  543. begin
  544.      set_text( box_addr, object, string );
  545.      objc_draw( box_addr, object, 1, x, y, w, h );
  546. end
  547.  
  548. /*-----------------------------------------------*/
  549. set_text( tree, object, string )
  550. OBJECT    *tree;
  551. int       object;
  552. char      *string;
  553. begin
  554.      TEDINFO   *obj_spec;
  555.  
  556.      obj_spec=(TEDINFO *)( tree+object )->ob_spec;
  557.      obj_spec->te_ptext=( string );
  558.      obj_spec->te_txtlen=( strlen( string ));
  559. end
  560.  
  561. /*-------------------------------------------*/
  562. strcat( to, from )
  563. char *to, *from;
  564. begin
  565.      while ( *to) ++to;
  566.      while ( *to++ = *from++ );
  567. end
  568.  
  569. /*-------------------------------------------*/
  570. strlen( string )
  571. char *string;
  572. begin
  573.      int  x;
  574.  
  575.      for( x=0; *string++; ++x );
  576.      return x;
  577. end
  578.  
  579. /*-----------------------------------------------*/
  580. reset( number, tree, track, slide, maximum, initial )
  581. int number, tree[][12], track, slide, maximum, initial;
  582. begin
  583.      float work1, work2;
  584.  
  585.      slidmax[ number ]=maximum;
  586.      slidpos[ number ]=initial;
  587.      work1=( tree[ track ][10]-tree[ slide ][10] );
  588.      work2=maximum;
  589.      work1/=work2;
  590.      slidstep[ number ]=work1;
  591.      work2=initial;
  592.      slidacc[ number ]=work1*work2;
  593.      tree[ slide ][8]=slidacc[ number ];
  594.      objc_draw( tree, track, 1, tree[0][8], tree[0][9],
  595.                                   tree[0][10],tree[0][11] );
  596. end
  597.  
  598. /*------------------------------------------------------*/
  599. do_slider( number, tree, track, slide, left, right, which )
  600. int  tree[][12], track, slide, left, right, which;
  601.  
  602. begin
  603.      int       tempx, tempy, sbasex, sbasey, tbasex, tbasey,
  604.                omx, omy, mx, my, pressed, dum,
  605.                box[ 40 ], xoffset;
  606.  
  607.      char      temp[ 30 ];
  608.  
  609.      float     amount;
  610.  
  611.  
  612.  
  613.      if( which equals right )then begin
  614.           if( slidpos[ number ]<slidmax[ number ] )then begin
  615.                slidacc[ number ]+=slidstep[ number ];
  616.                slidpos[ number ]++;
  617.  
  618.                amount=(float)( (slidmax[ number ]-slidpos[ number ])+1 );
  619.                amount=(float)(( ((float)60)/amount )+((float).05) );
  620.  
  621.                if( amount>9 )then begin
  622.                     ftoa( (float)amount, fps, 0 );
  623.                endif
  624.                if( (amount>2)AND(amount<10) )then begin
  625.                     ftoa( (float)amount, fps, 1 );
  626.                endif
  627.                if( (amount>1)AND(amount<2) )then begin
  628.                     ftoa( (float)amount, fps, 2 );
  629.                endif
  630.                if( amount<1 )then begin
  631.                     ftoa( (float)amount, fps, 3 );
  632.                endif
  633.                strcat( fps, " FPS" );
  634.  
  635.                set_text( tree, track, fps );
  636.  
  637.                tree[ slide ][ 8 ]=slidacc[ number ];
  638.                objc_draw( tree, track, 1, tree[0][8], tree[0][9],
  639.                                           tree[0][10],tree[0][11] );
  640.           endif
  641.      endif
  642.  
  643.  
  644.      if( which equals left )then begin
  645.           if( slidpos[ number ]>0 )then begin
  646.                slidacc[ number ]-=slidstep[ number ];
  647.                slidpos[ number ]--;
  648.  
  649.                amount=(float)( (slidmax[ number ]-slidpos[ number ])+1 );
  650.                amount=(float)(( ((float)60)/amount )+((float).05) );
  651.  
  652.                if( amount>9 )then begin
  653.                     ftoa( (float)amount, fps, 0 );
  654.                endif
  655.                if( (amount>2)AND(amount<10) )then begin
  656.                     ftoa( (float)amount, fps, 1 );
  657.                endif
  658.                if( (amount>1)AND(amount<2) )then begin
  659.                     ftoa( (float)amount, fps, 2 );
  660.                endif
  661.                if( amount<1 )then begin
  662.                     ftoa( (float)amount, fps, 3 );
  663.                endif
  664.                strcat( fps, " FPS" );
  665.  
  666.                set_text( tree, track, fps );
  667.  
  668.                tree[ slide ][ 8 ]=slidacc[ number ];
  669.                objc_draw( tree, track, 1, tree[0][8], tree[0][9],
  670.                                           tree[0][10],tree[0][11] );
  671.           endif
  672.      endif
  673.  
  674.  
  675.      if( which equals slide )then begin
  676.  
  677.           vsf_interior( gem_handle, 2 );
  678.           vsf_style( gem_handle, 8 );
  679.           vsf_color( gem_handle, 0 );
  680.           vswr_mode( gem_handle, 3 );
  681.  
  682.           objc_offset( dialog0, BSPEED, &sx, &sy );
  683.           sw=( LWGET( B1OB_W( BSPEED )))-1;
  684.           sh=( LWGET( B1OB_H( BSPEED )))-1;
  685.  
  686.           objc_offset( dialog0, TRACK0, &tx, &ty );
  687.           tw=( LWGET( B1OB_W( TRACK0 )))-1;
  688.           th=( LWGET( B1OB_H( TRACK0 )))-1;
  689.  
  690.           objc_offset( tree, slide, &sbasex, &sbasey );
  691.           objc_offset( tree, track, &tbasex, &tbasey );
  692.           graf_mkstate( &mx, &my, &pressed, &my );
  693.           xoffset=( mx-sbasex );
  694.  
  695.           do begin
  696.                graf_mkstate( &mx, &my, &pressed, &my );
  697.  
  698.                mx=( mx-xoffset );
  699.  
  700.                if( (mx>tx)AND(mx<(tx+tw-sw)) )then begin
  701.  
  702.                     box[ 0 ]=mx; box[ 1 ]=sy;
  703.                     box[ 2 ]=mx+sw; box[ 3 ]=sy;
  704.                     box[ 4 ]=mx+sw; box[ 5 ]=sy+sh;
  705.                     box[ 6 ]=mx; box[ 7 ]=sy+sh;
  706.                     box[ 8 ]=mx; box[ 9 ]=sy;
  707.  
  708.                     v_hide_c( gem_handle );
  709.                     v_pline( gem_handle, 5, box );
  710.                     v_pline( gem_handle, 5, box );
  711.                     v_show_c( gem_handle );
  712.                endif                              
  713.  
  714.           repeat while( pressed );
  715.  
  716.           tempx=( mx );
  717.  
  718.           if( tempx does_not_equal sbasex )then begin
  719.                if( tempx+sw > tbasex+tw )then begin
  720.                     tempx=( tbasex+tw-sw );
  721.                endif
  722.                if( tempx < tbasex )then begin
  723.                     tempx=( tbasex );
  724.                endif
  725.                slidacc[ number ]=tempx-tbasex;
  726.                slidpos[ number ]=slidacc[ number ]/slidstep[ number ];
  727.                slidacc[ number ]=slidpos[ number ];
  728.                slidacc[ number ]*=slidstep[ number ];
  729.  
  730.                amount=(float)( (slidmax[ number ]-slidpos[ number ])+1 );
  731.                amount=(float)(( ((float)60)/amount )+((float).05) );
  732.  
  733.                if( amount>9 )then begin
  734.                     ftoa( (float)amount, fps, 0 );
  735.                endif
  736.                if( (amount>2)AND(amount<10) )then begin
  737.                     ftoa( (float)amount, fps, 1 );
  738.                endif
  739.                if( (amount>1)AND(amount<2) )then begin
  740.                     ftoa( (float)amount, fps, 2 );
  741.                endif
  742.                if( amount<1 )then begin
  743.                     ftoa( (float)amount, fps, 3 );
  744.                endif
  745.                strcat( fps, " FPS" );
  746.                set_text( tree, track, fps );
  747.  
  748.                tree[ slide ][ 8 ]=slidacc[ number ];
  749.                objc_draw( tree, track, 1, tree[0][8],tree[0][9],
  750.                                           tree[0][10],tree[0][11]);
  751.           endif
  752.      endif
  753.  
  754. end
  755.  
  756.  
  757.