|
|
1.1 root 1: /*% cyntax % && cc -go # %
2: */
3: #include <stdio.h>
4: #include <libc.h>
5: #include "3610op.h"
6: main(argc, argv)
7: char *argv[];
8: {
9: register r0=0, g0=0, b0=0, a0=255;
10: register dr, dg, db, da;
11: register x0=0, y0=0, x1=1280, y1=1024;
12: register r1=255, g1=255, b1=255, a1=255;
13: register i, n, d;
14: register vert=0;
15: while(argc>1 && argv[1][0]=='-') switch(argv[1][1]){
16: default:
17: Usage:
18: fprintf(stderr,
19: "Usage: ramp [-w x0 y0 x1 y1] [-v] [[r0 [g0 b0 [a0]]] r1 [g1 b1 [a1]]]\n");
20: exit(1);
21: case 'w':
22: if(argv[1][2])
23: argv[1]+=2;
24: else{
25: --argc;
26: argv++;
27: }
28: if(argc<5) goto Usage;
29: x0=atoi(argv[1]);
30: y0=atoi(argv[2]);
31: x1=atoi(argv[3]);
32: y1=atoi(argv[4]);
33: argc-=4;
34: argv+=4;
35: break;
36: case 'v':
37: vert++;
38: --argc;
39: argv++;
40: break;
41: }
42: switch(argc){
43: case 1:
44: break;
45: case 2:
46: r1=g1=b1=atoi(argv[1]);
47: break;
48: case 3:
49: r0=g0=b0=atoi(argv[1]);
50: r1=g1=b1=atoi(argv[2]);
51: break;
52: case 4:
53: r1=atoi(argv[1]); g1=atoi(argv[2]); b1=atoi(argv[3]);
54: break;
55: case 5:
56: r0=atoi(argv[1]); g0=atoi(argv[2]); b0=atoi(argv[3]);
57: a0=atoi(argv[4]);
58: break;
59: case 7:
60: r0=atoi(argv[1]); g0=atoi(argv[2]); b0=atoi(argv[3]);
61: r1=atoi(argv[4]); g1=atoi(argv[5]); b1=atoi(argv[6]);
62: break;
63: case 9:
64: r0=atoi(argv[1]); g0=atoi(argv[2]); b0=atoi(argv[3]);
65: a0=atoi(argv[4]);
66: r1=atoi(argv[5]); g1=atoi(argv[6]); b1=atoi(argv[7]);
67: a1=atoi(argv[8]);
68: break;
69: default:
70: goto Usage;
71: }
72: msnare();
73: if(x0>x1){ d=x0; x0=x1; x1=d; }
74: if(y0>y1){ d=y0; y0=y1; y1=d; }
75: dr=r1-r0;
76: dg=g1-g0;
77: db=b1-b0;
78: da=a1-a0;
79: mcmd(WRMSKL); mlong(0xffffffff);
80: mcmd(WRBANK); mbyte(15);
81: if(vert){
82: n=y1-y0;
83: d=n>1?n-1:1;
84: for(i=0;i!=n;i++)
85: rect(x0, i+y0, x1, i+y0+1,
86: r0+dr*i/d, g0+dg*i/d, b0+db*i/d, a0+da*i/d);
87: }
88: else{
89: n=x1-x0;
90: d=n>1?n-1:1;
91: for(i=0;i!=n;i++)
92: rect(i+x0, y0, i+x0+1, y1,
93: r0+dr*i/d, g0+dg*i/d, b0+db*i/d, a0+da*i/d);
94: }
95: mflush();
96: exit(0);
97: }
98: rect(x0, y0, x1, y1, r, g, b, a){
99: mcmd(MOVP1); mword(x0); mword(y0);
100: mcmd(MOVP2); mword(x1-1); mword(y1-1);
101: mcmd(SETCLL); mbyte(a); mbyte(r); mbyte(g); mbyte(b);
102: mcmd(FFILL);
103: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.