arith.c - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       arith.c (2469B)
       ---
            1 #include "u.h"
            2 #include "lib.h"
            3 #include "draw.h"
            4 
            5 Point
            6 Pt(int x, int y)
            7 {
            8         Point p;
            9 
           10         p.x = x;
           11         p.y = y;
           12         return p;
           13 }
           14 
           15 Rectangle
           16 Rect(int x, int y, int bx, int by)
           17 {
           18         Rectangle r;
           19 
           20         r.min.x = x;
           21         r.min.y = y;
           22         r.max.x = bx;
           23         r.max.y = by;
           24         return r;
           25 }
           26 
           27 Rectangle
           28 Rpt(Point min, Point max)
           29 {
           30         Rectangle r;
           31 
           32         r.min = min;
           33         r.max = max;
           34         return r;
           35 }
           36 
           37 Point
           38 addpt(Point a, Point b)
           39 {
           40         a.x += b.x;
           41         a.y += b.y;
           42         return a;
           43 }
           44 
           45 Point
           46 subpt(Point a, Point b)
           47 {
           48         a.x -= b.x;
           49         a.y -= b.y;
           50         return a;
           51 }
           52 
           53 Rectangle
           54 insetrect(Rectangle r, int n)
           55 {
           56         r.min.x += n;
           57         r.min.y += n;
           58         r.max.x -= n;
           59         r.max.y -= n;
           60         return r;
           61 }
           62 
           63 Point
           64 divpt(Point a, int b)
           65 {
           66         a.x /= b;
           67         a.y /= b;
           68         return a;
           69 }
           70 
           71 Point
           72 mulpt(Point a, int b)
           73 {
           74         a.x *= b;
           75         a.y *= b;
           76         return a;
           77 }
           78 
           79 Rectangle
           80 rectsubpt(Rectangle r, Point p)
           81 {
           82         r.min.x -= p.x;
           83         r.min.y -= p.y;
           84         r.max.x -= p.x;
           85         r.max.y -= p.y;
           86         return r;
           87 }
           88 
           89 Rectangle
           90 rectaddpt(Rectangle r, Point p)
           91 {
           92         r.min.x += p.x;
           93         r.min.y += p.y;
           94         r.max.x += p.x;
           95         r.max.y += p.y;
           96         return r;
           97 }
           98 
           99 int
          100 eqpt(Point p, Point q)
          101 {
          102         return p.x==q.x && p.y==q.y;
          103 }
          104 
          105 int
          106 eqrect(Rectangle r, Rectangle s)
          107 {
          108         return r.min.x==s.min.x && r.max.x==s.max.x &&
          109                r.min.y==s.min.y && r.max.y==s.max.y;
          110 }
          111 
          112 int
          113 rectXrect(Rectangle r, Rectangle s)
          114 {
          115         return r.min.x<s.max.x && s.min.x<r.max.x &&
          116                r.min.y<s.max.y && s.min.y<r.max.y;
          117 }
          118 
          119 int
          120 rectinrect(Rectangle r, Rectangle s)
          121 {
          122         return s.min.x<=r.min.x && r.max.x<=s.max.x && s.min.y<=r.min.y && r.max.y<=s.max.y;
          123 }
          124 
          125 int
          126 ptinrect(Point p, Rectangle r)
          127 {
          128         return p.x>=r.min.x && p.x<r.max.x &&
          129                p.y>=r.min.y && p.y<r.max.y;
          130 }
          131 
          132 Rectangle
          133 canonrect(Rectangle r)
          134 {
          135         int t;
          136         if (r.max.x < r.min.x) {
          137                 t = r.min.x;
          138                 r.min.x = r.max.x;
          139                 r.max.x = t;
          140         }
          141         if (r.max.y < r.min.y) {
          142                 t = r.min.y;
          143                 r.min.y = r.max.y;
          144                 r.max.y = t;
          145         }
          146         return r;
          147 }
          148 
          149 void
          150 combinerect(Rectangle *r1, Rectangle r2)
          151 {
          152         if(r1->min.x > r2.min.x)
          153                 r1->min.x = r2.min.x;
          154         if(r1->min.y > r2.min.y)
          155                 r1->min.y = r2.min.y;
          156         if(r1->max.x < r2.max.x)
          157                 r1->max.x = r2.max.x;
          158         if(r1->max.y < r2.max.y)
          159                 r1->max.y = r2.max.y;
          160 }
          161 
          162  ulong
          163 drawld2chan[] = {
          164         GREY1,
          165         GREY2,
          166         GREY4,
          167         CMAP8,
          168 };
          169 
          170 
          171 ulong
          172 setalpha(ulong color, uchar alpha)
          173 {
          174         int red, green, blue;
          175 
          176         red = (color >> 3*8) & 0xFF;
          177         green = (color >> 2*8) & 0xFF;
          178         blue = (color >> 1*8) & 0xFF;
          179         /* ignore incoming alpha */
          180         red = (red * alpha)/255;
          181         green = (green * alpha)/255;
          182         blue = (blue * alpha)/255;
          183         return (red<<3*8) | (green<<2*8) | (blue<<1*8) | (alpha<<0*8);
          184 }
          185 
          186 Point        ZP;
          187 Rectangle ZR;