home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / C / TOOLKIT.ZIP / OPERATOR.C < prev    next >
Encoding:
C/C++ Source or Header  |  1985-05-29  |  21.4 KB  |  700 lines

  1.  
  2. /*
  3.  * DEGAS Elite Screen Operator!
  4.  * version 121386
  5.  * File: OPERATOR.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 "operator.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   EORed_with     ^
  40. #define   DELAY          for( delay=0; delay<32767; delay++ );
  41. #define   CONSOL         2
  42. #define   CR             13
  43. #define   LF             10
  44. #define   MAXSLIDE       120
  45. #define   JIFFYTIME      (.0166667)
  46. #define   QUEUESIZE      40
  47. #define   LOREZ          0
  48. #define   MEDREZ         1
  49. #define   HIREZ          2
  50. #define   DEGAS00        0xDE00
  51. #define   DEGAS01        0xDE01
  52. #define   DEGAS80        0xDE80
  53. #define   DEGAS81        0xDE81
  54. #define   LWGET(x)       ( (int) *((int *)(x)) )
  55. #define   B1OB_W(x)      (dialog0+(x)*sizeof(OBJECT)+20)
  56. #define   B1OB_H(x)      (dialog0+(x)*sizeof(OBJECT)+22)
  57.  
  58. /*------------------------------------------*/
  59. extern int  gl_apid;
  60.  
  61. /*------------------------------------------*/
  62. int  contrl[ 12 ],
  63.      intin[ 128 ], ptsin[ 128 ],
  64.      intout[ 128 ], ptsout[ 128 ],
  65.      work_in[]={ 1,1,1,1,1,1,1,1,1,1,2 }, work_out[ 57 ],
  66.      gem_handle, menu_id, button,
  67.      key0, key1, key2, key3, key4, key5,
  68.      printable, aborted,
  69.      DE_id, menu_id, slots, resolution,
  70.      xres, yres, seq_size,
  71.  
  72.      /* corners of Dialog Box   */
  73.      x0,  y0,  w0,  h0, xd0, yd0, wd0, hd0,
  74.      x1,  y1,  w1,  h1, xd1, yd1, wd1, hd1,
  75.  
  76.      /* Operations activity flags.  TRUE="Use Me!" */
  77.      bwmsk_flag, band_flag, bor_flag, beor_flag, bns_flag, bnd_flag,
  78.  
  79.      /* corner of AND box */
  80.      bax, bay, baw, bah,
  81.  
  82.      /* corner of OR box */
  83.      box, boy, bow, boh,
  84.  
  85.      /* corner of EOR box */
  86.      bex, bey, bew, beh,
  87.  
  88.      /* corner of WithMASK box */
  89.      bwx, bwy, bww, bwh,
  90.  
  91.      /* corner of NOT SOURCE box */
  92.      bnsx, bnsy, bnsw, bnsh,
  93.  
  94.      /* corner of NOT DEST box */
  95.      bndx, bndy, bndw, bndh,
  96.  
  97.      /* corners of Source Number window */
  98.      src_nx, src_ny, src_nw, src_nh,
  99.  
  100.      /* corners of Mask Number window */
  101.      msk_nx, msk_ny, msk_nw, msk_nh,
  102.  
  103.      /* corners of Dest Number window */
  104.      des_nx, des_ny, des_nw, des_nh,
  105.  
  106.      /* Corners of Exit button */
  107.      bxx, bxy, bxw, bxh,
  108.  
  109.      /* Corners of View button */
  110.      bvx, bvy, bvw, bvh,
  111.  
  112.      /* Corners of Perform button */
  113.      bpx, bpy, bpw, bph,
  114.  
  115.      msgbuff[ 20 ], keycode, ret,
  116.      l, done, slidpos[ 10 ], slidmax[ 10 ],
  117.  
  118.      i, j, k, n, x, y, handle,
  119.      gr_1, gr_2, gr_3, gr_4,
  120.      ptemp[ 1 ], temp,
  121.      diax, diay, diaw, diah,
  122.      formresult, key,
  123.  
  124.      srcpix, maskpix, destpix;
  125.  
  126. /*------------------------------------------*/
  127. char rs_strings[]="[1][I can't operate|without|DEGAS Elite.][ Sorry ]",
  128.      strack[ 100 ],
  129.      tempstring[ 100 ],
  130.      fsequence[ 100 ],
  131.      debug[ 100 ];
  132.  
  133. /*------------------------------------------*/
  134. long      *s_ptrs, screen[ 15 ], dialog0;
  135.  
  136. /*------------------------------------------*/
  137. float     slidstep[ 10 ], slidacc[ 10 ];
  138.  
  139. OBJECT *rsc_pointer;
  140.  
  141. /*------------------------------------------*/
  142. main()
  143. begin
  144.      int x, result, event;
  145.  
  146.      appl_init();
  147.      gem_handle=graf_handle( &i, &i, &i, &i );
  148.      menu_id=menu_register( gl_apid,"  Screen Operator" );
  149.  
  150.      result=rsrc_load( "OPERATOR.RSC" );
  151.      if( result<0 )then begin
  152.           form_alert( 1,"[1][ Operator Resource | not found! ][ Danger! ]");
  153.      endif
  154.  
  155.      rsrc_gaddr( 0, 0, &dialog0 );
  156.    
  157.      band_flag=FALSE;
  158.      bor_flag=FALSE;
  159.      beor_flag=FALSE;
  160.      bns_flag=FALSE;
  161.      bnd_flag=FALSE;
  162.  
  163.      srcpix=1; maskpix=2; destpix=3;
  164.  
  165.      graf_mouse( 0, 0L );
  166.      v_show_c( gem_handle, 0 );
  167.  
  168.      do begin
  169.           event=evnt_multi( MU_MESAG,
  170.                               1, 1, ret,
  171.                               0, 0, 0, 0, 0,
  172.                               0, 0, 0, 0, 0,
  173.                               msgbuff, 0, 0,
  174.                               &ret, &ret, &ret,
  175.                               &ret, &ret, &ret );
  176.  
  177.           if( event & MU_MESAG )then begin
  178.  
  179.                if( msgbuff[ 0 ] equals AC_OPEN )then begin
  180.                     if( msgbuff[ 4 ] equals menu_id )then begin
  181.                          v_opnvwk( work_in, &gem_handle, work_out );
  182.  
  183.                          inquire();
  184.  
  185.                          v_clsvwk( gem_handle );
  186.                     endif
  187.                endif
  188.  
  189.                if( msgbuff[ 0 ] equals DEGAS80 )then begin
  190.                     v_opnvwk( work_in, &gem_handle, work_out );
  191.                     xres=work_out[ 0 ]; yres=work_out[ 1 ];
  192.  
  193.                     menu_handle();
  194.  
  195.                     v_clsvwk( gem_handle );
  196.                endif
  197.  
  198.           endif
  199.  
  200.      repeat while( TRUE );
  201. end
  202. /*-------------------------------------------*/
  203. inquire()
  204. begin
  205.      DE_id=appl_find( "DEGELITE" );
  206.      if( DE_id<0 )then form_alert( 1, rs_strings );
  207.  
  208.      if( DE_id >=0 )then begin
  209.           msgbuff[ 0 ]=DEGAS00;
  210.           msgbuff[ 1 ]=gl_apid;
  211.           msgbuff[ 2 ]=0;
  212.           appl_write( DE_id, 16, msgbuff );
  213.      endif
  214. end
  215. /*-------------------------------------------*/
  216. menu_handle()
  217. begin
  218.      int  ix, iy, amount, x, pressed, mx, my, vdest;
  219.      char  *pointer, z;
  220.  
  221.      x0=( xres/2 )-10;
  222.      y0=( yres/2 )-10;
  223.      w0=h0=20;
  224.  
  225.      s_ptrs=(char *)(  ( (long)msgbuff[ 3 ]<<16 )ORed_with
  226.                     (  ( (long)msgbuff[ 4 ] )ANDed_with 0x0000ffffL) );
  227.  
  228.      for( ix=0; ix<15; screen[ ix++ ]=ERROR );
  229.      slots=msgbuff[ 5 ];
  230.      for( ix=0; ix<slots; ++ix )begin
  231.           screen[ ix ]=s_ptrs[ ix ];
  232.      next
  233.  
  234.      wind_update( TRUE );
  235.      form_center( dialog0, &xd1, &yd1, &wd1, &hd1 );
  236.  
  237.      form_dial( 0, x1, y1, w1, h1, xd1, yd1, wd1, hd1 );
  238.      form_dial( 1, x1, y1, w1, h1, xd1, yd1, wd1, hd1 );
  239.  
  240.      set1_button_state();
  241.  
  242.      objc_draw( dialog0, 0, 2, xd1, yd1, wd1, hd1 );
  243.  
  244.      ftoa( (float)srcpix, tempstring,0 );
  245.      adjust( dialog0, SRCNUM, tempstring,src_nx,src_ny,src_nw,src_nh);
  246.      ftoa( (float)maskpix, tempstring,0 );
  247.      adjust( dialog0, MASKNUM, tempstring,msk_nx,msk_ny,msk_nw,msk_nh);
  248.      ftoa( (float)destpix, tempstring, 0 );
  249.      adjust( dialog0, DESTNUM, tempstring,des_nx,des_ny,des_nw,des_nh);
  250.  
  251.      do begin
  252.           key1=form_do( dialog0, 0 );
  253.  
  254.           if( key1 equals BPERFORM )then begin
  255.                operate();
  256.                rsc_pointer=( OBJECT *)dialog0;
  257.                rsc_pointer[ BPERFORM ].ob_state=NORMAL;
  258.                objc_draw( dialog0, BPERFORM, 1, bpx, bpy,
  259.                                                 bpw, bph );
  260.           endif
  261.  
  262.           if( ( key1 equals BNOTSRC )
  263.             OR( key1 equals BNOTDEST )
  264.             OR( key1 equals SRCDN )
  265.             OR( key1 equals SRCUP )
  266.             OR( key1 equals MASKDN )
  267.             OR( key1 equals MASKUP )
  268.             OR( key1 equals DESTDN )
  269.             OR( key1 equals DESTUP )
  270.             OR( key1 equals BAND )
  271.             OR( key1 equals BOR )
  272.             OR( key1 equals BEOR )
  273.             OR( key1 equals BWMASK) )then begin
  274.  
  275.                filter_key( key1 );
  276.           endif
  277.  
  278.           if( key1 equals BVIEW )then begin
  279.                vdest=destpix;
  280.                if( vdest >= 3 )then vdest=( vdest+4 );
  281.                Setscreen( screen[ vdest ], screen[ vdest ], -1 );
  282.  
  283.                do begin
  284.                     vq_mouse( gem_handle, &pressed, &mx, &my );
  285.                repeat while( pressed );
  286.  
  287.                Setscreen( screen[ 0 ], screen[ 0 ], -1 );
  288.           endif
  289.  
  290.      repeat while( key1 does_not_equal BEXIT );
  291.  
  292.      rsc_pointer=( OBJECT *)dialog0;
  293.      rsc_pointer[ BEXIT ].ob_state=NORMAL;
  294.      objc_draw( dialog0, BEXIT, 1, bxx, bxy, bxw, bxh );
  295.  
  296.      form_dial( 2, x1, y1, w1, h1, xd1, yd1, wd1, hd1 );
  297.      form_dial( 3, x1, y1, w1, h1, xd1, yd1, wd1, hd1 );
  298.      wind_update( FALSE );
  299. end
  300.  
  301. /*----------------------------------------------*/
  302. operate()
  303. begin
  304.      int   index, src, msk, des;
  305.      long  *source, *mask, *dest;
  306.      long  temp1, temp2, temp3;
  307.  
  308.      src=srcpix;
  309.      if( src >= 3 )then src=src+4;
  310.      msk=maskpix;
  311.      if( msk >= 3 )then msk=msk+4;
  312.      des=destpix;
  313.      if( dest >= 3 )then des=des+4;
  314.  
  315.      source=screen[ src ];
  316.      mask=screen[ msk ];
  317.      dest=screen[ des ];
  318.  
  319.      v_hide_c( gem_handle );
  320.      Setscreen( screen[ des ], screen[ des ], -1 );
  321.  
  322.      for( index=0; index<8000; index++ )begin
  323.               
  324.           temp1=( *source++ );
  325.           temp2=( *mask++ );
  326.           temp3=( *dest );
  327.  
  328.           if( bns_flag equals TRUE )then temp1=( temp1^0xFFFFFFFF );
  329.  
  330.           if( bwmsk_flag equals TRUE )then begin
  331.                if( band_flag equals TRUE )then begin
  332.                     temp3=( temp1 ANDed_with temp2 );
  333.                endif
  334.                if( bor_flag equals TRUE )then begin
  335.                     temp3=( temp1 ORed_with temp2 );
  336.                endif
  337.                if( beor_flag equals TRUE )then begin
  338.                     temp3=( temp1 EORed_with temp2 );
  339.                endif
  340.           endif
  341.  
  342.           if( bwmsk_flag equals FALSE )then begin
  343.                if( band_flag equals TRUE )then begin
  344.                     temp3=( temp1 ANDed_with temp3 );
  345.                endif
  346.                if( bor_flag equals TRUE )then begin
  347.                     temp3=( temp1 ORed_with temp3 );
  348.                endif
  349.                if( beor_flag equals TRUE )then begin
  350.                     temp3=( temp1 EORed_with temp3 );
  351.                endif
  352.           endif
  353.  
  354.           if(  ( band_flag equals FALSE )
  355.             AND( bor_flag equals FALSE  )
  356.             AND( beor_flag equals FALSE )
  357.             AND( bwmsk_flag equals FALSE) )then temp3=temp1;
  358.  
  359.           if( bnd_flag equals TRUE )then temp3=( temp3^0xFFFFFFFF );
  360.           ( *dest++ )=temp3;
  361.      next
  362.  
  363.      Setscreen( screen[ 0 ], screen[ 0 ], -1 );
  364.      v_show_c( gem_handle );
  365. end
  366.  
  367. /*----------------------------------------------*/
  368. set1_button_state()
  369. begin
  370.      rsc_pointer=( OBJECT *)dialog0;
  371.  
  372.      objc_offset( dialog0, BEXIT, &bxx, &bxy );
  373.      bxw=( LWGET( B1OB_W( BEXIT )))-1;
  374.      bxh=( LWGET( B1OB_H( BEXIT )))-1;
  375.  
  376.      objc_offset( dialog0, BVIEW, &bvx, &bvy );
  377.      bvw=( LWGET( B1OB_W( BVIEW )))-1;
  378.      bvh=( LWGET( B1OB_H( BVIEW )))-1;
  379.  
  380.      objc_offset( dialog0, BPERFORM, &bpx, &bpy );
  381.      bpw=( LWGET( B1OB_W( BPERFORM )))-1;
  382.      bph=( LWGET( B1OB_H( BPERFORM )))-1;
  383.  
  384.      objc_offset( dialog0, BAND, &bax, &bay );
  385.      baw=( LWGET( B1OB_W( BAND )))-1;
  386.      bah=( LWGET( B1OB_H( BAND )))-1;
  387.      if( band_flag equals TRUE )then begin
  388.           rsc_pointer[ BAND ].ob_state=SELECTED;
  389.      endif
  390.      if( band_flag equals FALSE )then begin
  391.           rsc_pointer[ BAND ].ob_state=NORMAL;
  392.      endif
  393.  
  394.      objc_offset( dialog0, BOR, &box, &boy );
  395.      bow=( LWGET( B1OB_W( BOR )))-1;
  396.      boh=( LWGET( B1OB_H( BOR )))-1;
  397.      if( bor_flag equals TRUE )then begin
  398.           rsc_pointer[ BOR ].ob_state=SELECTED;
  399.      endif
  400.      if( bor_flag equals FALSE )then begin
  401.           rsc_pointer[ BOR ].ob_state=NORMAL;
  402.      endif
  403.  
  404.      objc_offset( dialog0, BEOR, &bex, &bey );
  405.      bew=( LWGET( B1OB_W( BEOR )))-1;
  406.      beh=( LWGET( B1OB_H( BEOR )))-1;
  407.      if( beor_flag equals TRUE )then begin
  408.           rsc_pointer[ BEOR ].ob_state=SELECTED;
  409.      endif
  410.      if( beor_flag equals FALSE )then begin
  411.           rsc_pointer[ BEOR ].ob_state=NORMAL;
  412.      endif
  413.  
  414.      objc_offset( dialog0, BWMASK, &bwx, &bwy );
  415.      bww=( LWGET( B1OB_W( BWMASK )))-1;
  416.      bwh=( LWGET( B1OB_H( BWMASK )))-1;
  417.      if( bwmsk_flag equals TRUE )then begin
  418.           rsc_pointer[ BWMASK ].ob_state=SELECTED;
  419.      endif
  420.      if( bwmsk_flag equals FALSE )then begin
  421.           rsc_pointer[ BWMASK ].ob_state=NORMAL;
  422.      endif
  423.  
  424.      objc_offset( dialog0, BNOTSRC, &bnsx, &bnsy );
  425.      bnsw=( LWGET( B1OB_W( BNOTSRC )))-1;
  426.      bnsh=( LWGET( B1OB_H( BNOTSRC )))-1;
  427.      if( bns_flag equals TRUE )then begin
  428.           rsc_pointer[ BNOTSRC ].ob_state=SELECTED;
  429.      endif
  430.      if( bns_flag equals FALSE )then begin
  431.           rsc_pointer[ BNOTSRC ].ob_state=NORMAL;
  432.      endif
  433.  
  434.      objc_offset( dialog0, BNOTDEST, &bndx, &bndy );
  435.      bndw=( LWGET( B1OB_W( BNOTDEST )))-1;
  436.      bndh=( LWGET( B1OB_H( BNOTDEST )))-1;
  437.      if( bnd_flag equals TRUE )then begin
  438.           rsc_pointer[ BNOTDEST ].ob_state=SELECTED;
  439.      endif
  440.      if( bnd_flag equals FALSE )then begin
  441.           rsc_pointer[ BNOTDEST ].ob_state=NORMAL;
  442.      endif
  443.  
  444.      objc_offset( dialog0, SRCNUM, &src_nx, &src_ny );
  445.      src_nw=( LWGET( B1OB_W( SRCNUM )))-1;
  446.      src_nh=( LWGET( B1OB_H( SRCNUM )))-1;
  447.  
  448.      objc_offset( dialog0, MASKNUM, &msk_nx, &msk_ny );
  449.      msk_nw=( LWGET( B1OB_W( MASKNUM )))-1;
  450.      msk_nh=( LWGET( B1OB_H( MASKNUM )))-1;
  451.  
  452.      objc_offset( dialog0, DESTNUM, &des_nx, &des_ny );
  453.      des_nw=( LWGET( B1OB_W( DESTNUM )))-1;
  454.      des_nh=( LWGET( B1OB_H( DESTNUM )))-1;
  455. end
  456.     
  457. /*---------------------------------------------------------*/
  458. filter_key( keypress )
  459. int  keypress;
  460. begin
  461.      int x;
  462.  
  463.      rsc_pointer=( OBJECT *)dialog0;
  464.  
  465.      if( keypress equals SRCDN )then begin
  466.           if( srcpix>1 )then begin
  467.                srcpix--;
  468.                ftoa( (float)srcpix, tempstring,0 );
  469.                adjust( dialog0, SRCNUM, tempstring, src_nx, src_ny,
  470.                                                     src_nw, src_nh );
  471.           endif
  472.      endif
  473.  
  474.      if( keypress equals SRCUP )then begin
  475.           x=( srcpix+1 );
  476.           if( x>=3 )then x=( x+4 );
  477.           if(  ( screen[ x ] != 0 )
  478.             AND( srcpix < 8  ) )then begin
  479.                srcpix++;
  480.                ftoa( (float)srcpix, tempstring,0 );
  481.                adjust( dialog0, SRCNUM, tempstring, src_nx, src_ny,
  482.                                                     src_nw, src_nh );
  483.           endif
  484.      endif
  485.  
  486.      if( keypress equals MASKDN )then begin
  487.           if( maskpix>1 )then begin
  488.                maskpix--;
  489.                ftoa( (float)maskpix, tempstring,0 );
  490.                adjust( dialog0, MASKNUM, tempstring, msk_nx, msk_ny,
  491.                                                      msk_nw, msk_nh );
  492.           endif
  493.      endif
  494.  
  495.      if( keypress equals MASKUP )then begin
  496.           x=( maskpix+1 );
  497.           if( x>=3 )then x=( x+4 );
  498.           if(  ( screen[ x ] != 0 )
  499.             AND( maskpix < 8       ) )then begin
  500.                maskpix++;
  501.                ftoa( (float)maskpix, tempstring,0 );
  502.                adjust( dialog0, MASKNUM, tempstring, msk_nx, msk_ny,
  503.                                                      msk_nw, msk_nh );
  504.           endif
  505.      endif
  506.  
  507.      if( keypress equals DESTDN )then begin
  508.           if( destpix>1 )then begin
  509.                destpix--;
  510.                ftoa( (float)destpix, tempstring, 0 );
  511.                adjust( dialog0, DESTNUM, tempstring, des_nx, des_ny,
  512.                                                      des_nw, des_nh );
  513.           endif
  514.      endif
  515.  
  516.      if( keypress equals DESTUP )then begin
  517.           x=( destpix+1 );
  518.           if( x>=3 )then x=( x+4 );
  519.           if(  ( screen[ x ] != 0 )
  520.             AND( destpix < 8       ) )then begin
  521.                destpix++;
  522.                ftoa( (float)destpix, tempstring, 0 );
  523.                adjust( dialog0, DESTNUM, tempstring, des_nx, des_ny,
  524.                                                     des_nw, des_nh );
  525.           endif
  526.      endif
  527.  
  528.      if( keypress equals BNOTSRC )then begin
  529.           bns_flag=( not bns_flag );
  530.           if( bns_flag equals TRUE )then begin
  531.                rsc_pointer[ BNOTSRC ].ob_state=SELECTED;
  532.                objc_draw( dialog0, BNOTSRC, 1, bnsx,bnsy,bnsw,bnsh);
  533.           endif
  534.  
  535.           if( bns_flag equals FALSE )then begin
  536.                rsc_pointer[ BNOTSRC ].ob_state=NORMAL;
  537.                objc_draw( dialog0, BNOTSRC, 1, bnsx,bnsy,bnsw,bnsh);
  538.           endif
  539.      endif
  540.  
  541.      if( keypress equals BNOTDEST )then begin
  542.           bnd_flag=( not bnd_flag );
  543.           if( bnd_flag equals TRUE )then begin
  544.                rsc_pointer[ BNOTDEST ].ob_state=SELECTED;
  545.                objc_draw( dialog0, BNOTDEST, 1, bndx,bndy,bndw,bndh);
  546.           endif
  547.  
  548.           if( bnd_flag equals FALSE )then begin
  549.                rsc_pointer[ BNOTDEST ].ob_state=NORMAL;
  550.                objc_draw( dialog0, BNOTDEST, 1, bndx,bndy,bndw,bndh);
  551.           endif
  552.      endif
  553.  
  554.      if( keypress equals BAND )then begin
  555.           band_flag=( not band_flag );
  556.           if( band_flag equals TRUE )then begin
  557.                rsc_pointer[ BAND ].ob_state=SELECTED;
  558.                objc_draw( dialog0, BAND, 1, bax,bay,baw,bah);
  559.                bor_flag=FALSE;
  560.                rsc_pointer[ BOR ].ob_state=NORMAL;
  561.                objc_draw( dialog0, BOR, 1, box,boy,bow,boh);
  562.                beor_flag=FALSE;
  563.                rsc_pointer[ BEOR ].ob_state=NORMAL;
  564.                objc_draw( dialog0, BEOR, 1, bex,bey,bew,beh);
  565.           endif
  566.  
  567.           if( band_flag equals FALSE )then begin
  568.                rsc_pointer[ BAND ].ob_state=NORMAL;
  569.                objc_draw( dialog0, BAND, 1, bax,bay,baw,bah);
  570.  
  571.                if( ( bor_flag equals FALSE )
  572.                 AND( beor_flag equals FALSE) )then begin
  573.                     bwmsk_flag=FALSE;
  574.                     rsc_pointer[ BWMASK ].ob_state=NORMAL;
  575.                     objc_draw( dialog0, BWMASK, 1, bwx,bwy,bww,bwh);
  576.                endif
  577.           endif
  578.      endif
  579.  
  580.      if( keypress equals BOR )then begin
  581.           bor_flag=( not bor_flag );
  582.           if( bor_flag equals TRUE )then begin
  583.                rsc_pointer[ BOR ].ob_state=SELECTED;
  584.                objc_draw( dialog0, BOR, 1, box,boy,bow,boh);
  585.                band_flag=FALSE;
  586.                rsc_pointer[ BAND ].ob_state=NORMAL;
  587.                objc_draw( dialog0, BAND, 1, bax,bay,baw,bah);
  588.                beor_flag=FALSE;
  589.                rsc_pointer[ BEOR ].ob_state=NORMAL;
  590.                objc_draw( dialog0, BEOR, 1, bex,bey,bew,beh);
  591.           endif
  592.  
  593.           if( bor_flag equals FALSE  )then begin
  594.                rsc_pointer[ BOR ].ob_state=NORMAL;
  595.                objc_draw( dialog0, BOR, 1, box,boy,bow,boh);
  596.  
  597.                if( ( band_flag equals FALSE )
  598.                 AND( beor_flag equals FALSE) )then begin
  599.                     bwmsk_flag=FALSE;
  600.                     rsc_pointer[ BWMASK ].ob_state=NORMAL;
  601.                     objc_draw( dialog0, BWMASK, 1, bwx,bwy,bww,bwh);
  602.                endif
  603.  
  604.           endif
  605.      endif
  606.  
  607.      if( keypress equals BEOR )then begin
  608.           beor_flag=( not beor_flag );
  609.           if( beor_flag equals TRUE )then begin
  610.                rsc_pointer[ BEOR ].ob_state=SELECTED;
  611.                objc_draw( dialog0, BEOR, 1, bex,bey,bew,beh);
  612.                band_flag=FALSE;
  613.                rsc_pointer[ BAND ].ob_state=NORMAL;
  614.                objc_draw( dialog0, BAND, 1, bax,bay,baw,bah);
  615.                bor_flag=FALSE;
  616.                rsc_pointer[ BOR ].ob_state=NORMAL;
  617.                objc_draw( dialog0, BOR, 1, box,boy,bow,boh);
  618.           endif
  619.  
  620.           if( beor_flag equals FALSE )then begin
  621.                rsc_pointer[ BEOR ].ob_state=NORMAL;
  622.                objc_draw( dialog0, BEOR, 1, bex,bey,bew,beh);
  623.  
  624.                if( ( band_flag equals FALSE )
  625.                 AND( bor_flag equals FALSE ))then begin
  626.                     bwmsk_flag=FALSE;
  627.                     rsc_pointer[ BWMASK ].ob_state=NORMAL;
  628.                     objc_draw( dialog0, BWMASK, 1, bwx,bwy,bww,bwh);
  629.                endif
  630.           endif
  631.      endif
  632.  
  633.      if( keypress equals BWMASK )then begin
  634.  
  635.           if( ( band_flag equals TRUE )
  636.             OR(  bor_flag equals TRUE )
  637.             OR( beor_flag equals TRUE ))then begin
  638.  
  639.                bwmsk_flag=( not bwmsk_flag );
  640.  
  641.                if( bwmsk_flag equals TRUE )then begin
  642.                     rsc_pointer[ BWMASK ].ob_state=SELECTED;
  643.                     objc_draw( dialog0, BWMASK, 1, bwx,bwy,bww,bwh);
  644.                endif
  645.  
  646.                if( bwmsk_flag equals FALSE )then begin
  647.                     rsc_pointer[ BWMASK ].ob_state=NORMAL;
  648.                     objc_draw( dialog0, BWMASK, 1, bwx,bwy,bww,bwh);
  649.                endif
  650.           endif
  651.      endif
  652.  
  653. end
  654.  
  655. /*-----------------------------------------------*/
  656. adjust( box_addr, object, string, x, y, w, h )
  657. long box_addr;
  658. int  object, x, y, w, h;
  659. char *string;
  660. begin
  661.      set_text( box_addr, object, string );
  662.      objc_draw( box_addr, object, 1, x, y, w, h );
  663. end
  664.  
  665. /*-----------------------------------------------*/
  666. set_text( tree, object, string )
  667. OBJECT    *tree;
  668. int       object;
  669. char      *string;
  670. begin
  671.      TEDINFO   *obj_spec;
  672.  
  673.      obj_spec=(TEDINFO *)( tree+object )->ob_spec;
  674.      obj_spec->te_ptext=( string );
  675.      obj_spec->te_txtlen=( strlen( string ));
  676. end
  677.  
  678. /*-------------------------------------------*/
  679. strcat( to, from )
  680. char *to, *from;
  681. begin
  682.      while ( *to) ++to;
  683.      while ( *to++ = *from++ );
  684. end
  685.  
  686. /*-------------------------------------------*/
  687. strlen( string )
  688. char *string;
  689. begin
  690.      int  x;
  691.  
  692.      for( x=0; *string++; ++x );
  693.      return x;
  694. end
  695.  
  696.  
  697.  
  698.  
  699.  
  700.