home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0678.ZIP / CCE_0678.PD / E_GEM135 / SOURCE / TOOL.C < prev    next >
C/C++ Source or Header  |  1994-03-09  |  6KB  |  338 lines

  1.  
  2. #include <time.h>
  3. #include "proto.h"
  4.  
  5. static int clipping_area[4];
  6.  
  7. char _upper(char ch)
  8. {
  9.     if (ch>='a')
  10.     {
  11.         if(ch>'z')
  12.         {
  13.             if (ch=='ä')
  14.                 return('Ä');
  15.             else if (ch=='ö')
  16.                 return('Ö');
  17.             else if (ch=='ü')
  18.                 return('Ü');
  19.         }
  20.         else
  21.             return(ch-32);
  22.     }
  23.  
  24.     return(ch);
  25. }
  26.  
  27. char _lower(char ch)
  28. {
  29.     if (ch>='A')
  30.     {
  31.         if(ch>'Z')
  32.         {
  33.             if (ch=='Ä')
  34.                 return('ä');
  35.             else if (ch=='Ö')
  36.                 return('ö');
  37.             else if (ch=='Ü')
  38.                 return('ü');
  39.         }
  40.         else
  41.             return(ch+32);
  42.     }
  43.  
  44.     return(ch);
  45. }
  46.  
  47. void _bitblt(OBJECT *tree,MFDB *form,boolean flag)
  48. {
  49.     reg int pxy[8],*ptr=pxy;
  50.     reg int x = tree->ob_x - 3,y = tree->ob_y - 3;
  51.     reg int w = tree->ob_width + 5,h = tree->ob_height + 5;
  52.     
  53.     graf_mouse(M_OFF,NULL);
  54.  
  55.     if (flag)
  56.     {
  57.         *ptr++ = x;
  58.         *ptr++ = y;
  59.         *ptr++ = x + w;
  60.         *ptr++ = y + h;
  61.         *ptr++ = 0;
  62.         *ptr++ = 0;
  63.         *ptr++ = w;
  64.         *ptr   = h;
  65.         vro_cpyfm(x_handle,3,pxy,screen,form);
  66.     }
  67.     else
  68.     {
  69.         *ptr++ = 0;
  70.         *ptr++ = 0;
  71.         *ptr++ = w;
  72.         *ptr++ = h;
  73.         *ptr++ = x;
  74.         *ptr++ = y;
  75.         *ptr++ = x + w;
  76.         *ptr   = y + h;
  77.         vro_cpyfm(x_handle,3,pxy,form,screen);
  78.     }
  79.  
  80.     graf_mouse(M_ON,NULL);
  81. }
  82.  
  83. void _line(int x1,int y1,int x2,int y2)
  84. {
  85.     reg int pxy[4];
  86.     
  87.     pxy[0] = x1;
  88.     pxy[1] = y1;
  89.     pxy[2] = x2;
  90.     pxy[3] = y2;
  91.     v_pline(x_handle,2,pxy);
  92. }
  93.  
  94. void _bar(int x,int y,int w,int h,int interior,int color)
  95. {
  96.     reg int pxy[4];
  97.  
  98.     vsf_interior(x_handle,interior);
  99.     vsf_color(x_handle,color);    
  100.     pxy[0] = x;
  101.     pxy[1] = y;
  102.     pxy[2] = x + w;
  103.     pxy[3] = y + h;
  104.     v_bar(x_handle,pxy);
  105. }
  106.  
  107. void _rectangle(int sx,int sy,int dx,int dy)
  108. {
  109.     reg int pxy[10];
  110.  
  111.     pxy[0] = pxy[6] = pxy[8] = sx;
  112.     pxy[1] = pxy[3] = pxy[9] = sy;
  113.     pxy[2] = pxy[4] = dx;
  114.     pxy[5] = pxy[7] = dy;
  115.     v_pline(x_handle,5,pxy);
  116. }
  117.  
  118. void _vdi_attr(int mode,int wid,int col)
  119. {
  120.     vswr_mode(x_handle,mode);
  121.     vsl_width(x_handle,wid);
  122.     vsl_color(x_handle,col);
  123. }
  124.  
  125. void _text_attr(int font,int height,int color)
  126. {
  127.     int dummy;
  128.  
  129.     vst_font(x_handle,font);
  130.  
  131.     if (height>0)
  132.         vst_height(x_handle,height,&dummy,&dummy,&dummy,&dummy);
  133.     else
  134.         vst_point(x_handle,-height,&dummy,&dummy,&dummy,&dummy);
  135.     vst_color(x_handle,color);
  136. }
  137.  
  138. void _beg_ctrl()
  139. {
  140.     wind_update(BEG_UPDATE);
  141.     wind_update(BEG_MCTRL);
  142. }
  143.  
  144. void _end_ctrl()
  145. {
  146.     wind_update(END_MCTRL);
  147.     wind_update(END_UPDATE);
  148. }
  149.  
  150. int _mouse_but(void)
  151. {
  152.     int but,dummy;
  153.  
  154.     if (!_back_win)
  155.         graf_mkstate(&dummy,&dummy,&but,&dummy);
  156.     else
  157.         vq_mouse(x_handle,&but,&dummy,&dummy);
  158.  
  159.     return(but);
  160. }
  161.  
  162. void _mouse_pos(reg int *x,reg int *y)
  163. {
  164.     int dummy;
  165.     graf_mkstate(x,y,&dummy,&dummy);
  166. }
  167.  
  168. void _no_click()
  169. {
  170.     int dummy;
  171.     if (_mouse_but() & 1)
  172.         evnt_button(1,1,0,&dummy,&dummy,&dummy,&dummy);
  173. }
  174.  
  175. /*************************/
  176.  
  177. int min(int v_1,int v_2)
  178. {
  179.     if (v_1<v_2)
  180.         return(v_1);
  181.     else
  182.         return(v_2);
  183. }
  184.  
  185. int max(int v_1,int v_2)
  186. {
  187.     if (v_1>v_2)
  188.         return(v_1);
  189.     else
  190.         return(v_2);
  191. }
  192.  
  193. void Min(int *var,int val)
  194. {
  195.     if (*var>val)
  196.         *var = val;
  197. }
  198.  
  199. void Max(int *var,int val)
  200. {
  201.     if (*var<val)
  202.         *var = val;
  203. }
  204.  
  205. int scan_2_ascii(int scan,int state)
  206. {
  207.     reg KEYTAB *keytab = Keytbl((void *) -1l,(void *) -1l,(void *) -1l);
  208.  
  209.     if (state)
  210.     {
  211.         scan = (int) (((unsigned) scan)>>8);
  212.         if ((scan>=120) && (scan<=131))
  213.             scan -= 118;
  214.  
  215.         if (state & 3)
  216.             scan = (int) *(keytab->shift+scan);
  217.         else
  218.             scan = (int) *(keytab->unshift+scan);
  219.     }
  220.  
  221.     scan &= 0xff;
  222.     if (scan>='a')
  223.     {
  224.         if (scan<='z')
  225.             scan -= 32;
  226.         else if (scan=='ä')
  227.             scan='Ä';
  228.         else if (scan=='ö')
  229.             scan='Ö';
  230.         else if (scan=='ü')
  231.             scan='Ü';
  232.     }
  233.     return(scan);
  234. }
  235.  
  236. void mfdb(MFDB *fm,int *adr,int w,int h,int st,int pl)
  237. {
  238.     fm->fd_addr        = adr;
  239.     fm->fd_w        = (w+15) & 0xfff0;
  240.     fm->fd_h        = h;
  241.     fm->fd_wdwidth    = fm->fd_w>>4;
  242.     fm->fd_stand    = st;
  243.     fm->fd_nplanes    = pl;
  244. }
  245.  
  246. long mfdb_size(MFDB *fm)
  247. {
  248.     return ((long) (fm->fd_wdwidth<<1) * (long) fm->fd_h * (long) fm->fd_nplanes);
  249. }
  250.  
  251. int Event_Multi(EVENT *event,long last)
  252. {
  253.     reg int events;
  254.     clock_t timer;
  255.  
  256.     if (event->ev_mflags & MU_TIMER)
  257.     {
  258.         clock_t interval;
  259.  
  260.         interval = event->ev_mthicount;
  261.         interval <<= 16;
  262.         interval |= event->ev_mtlocount;
  263.         interval /= 5;
  264.  
  265.         if (last>0)
  266.             timer = last + interval;
  267.         else
  268.             timer = clock() + interval;
  269.     }
  270.  
  271.     do
  272.     {
  273.          events = EvntMulti(event);
  274.  
  275.         if ((events & MU_BUTTON) && _back_win && !event->ev_mbstate && !_bevent)
  276.         {
  277.             if (_mouse_but() & event->ev_bmask)
  278.                 events &= ~MU_BUTTON;
  279.         }
  280.  
  281.         if ((event->ev_mflags & MU_TIMER) && !(events & MU_TIMER) && clock()>=timer)
  282.             events |= MU_TIMER;
  283.     } while(!events);
  284.  
  285.     return (events);
  286. }
  287.  
  288. void rc_sc_clear(GRECT *dest)
  289. {
  290.     rc_sc_copy(dest,dest->g_x,dest->g_y,0);
  291. }
  292.  
  293. void rc_sc_invert(GRECT *dest)
  294. {
  295.     rc_sc_copy(dest,dest->g_x,dest->g_y,D_INVERT);
  296. }
  297.  
  298. void rc_sc_copy(GRECT *source,int dx,int dy,int mode)
  299. {
  300.     reg GRECT work = *source;
  301.  
  302.     if (rc_intersect(&desk,&work))
  303.     {
  304.         reg GRECT dest;
  305.  
  306.         dest.g_x = dx;
  307.         dest.g_y = dy;
  308.         dest.g_w = work.g_w;
  309.         dest.g_h = work.g_h;
  310.         
  311.         if (rc_intersect(&desk,&dest))
  312.         {
  313.             reg int pxy[8];
  314.  
  315.             rc_grect_to_array(&work,pxy);
  316.             rc_grect_to_array(&dest,pxy+4);
  317.             vro_cpyfm(x_handle,mode,pxy,screen,screen);
  318.         }
  319.     }
  320. }
  321.  
  322. void save_clipping(int *area)
  323. {
  324.     reg long *clip=(long *) clipping_area;
  325.  
  326.     *((long *) area)++ = *clip++;
  327.     *((long *) area)++ = *clip++;
  328. }
  329.  
  330. void restore_clipping(int *area)
  331. {
  332.     reg long *clip=(long *) clipping_area;
  333.  
  334.     vs_clip(x_handle,1,area);
  335.     *clip++ = *((long *) area)++;
  336.     *clip++ = *((long *) area)++;
  337. }
  338.