|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <signal.h> ! 3: #include "pico.h" ! 4: ! 5: extern short CURSCRATCH, CUROLD; ! 6: extern struct SRC src[MANY]; ! 7: extern void onquit(); ! 8: extern int DEF_LL, DEF_NL; ! 9: ! 10: ramputitall(k) ! 11: { ! 12: register unsigned char *pr, *pg, *pb; ! 13: struct SRC *from = &src[k]; ! 14: register int j, ex = from->sx + from->ex; ! 15: int i, offset, delta, sx = from->sx; ! 16: int sy = from->sy, ey = from->sy + from->ey; ! 17: short w[1024]; /* avoid malloc */ ! 18: ! 19: offset = sy*DEF_LL + sx; ! 20: delta = DEF_LL - ex + sx; ! 21: ! 22: pr = from->pixred+offset; ! 23: pg = from->pixgrn+offset; ! 24: pb = from->pixblu+offset; ! 25: signal(SIGINT, SIG_IGN); /* don't mess up the ramtek */ ! 26: switch (from->nchan) ! 27: { case 1: ! 28: for (i = sy; i < ey; i++, pr += delta) ! 29: { for (j = sx; j < ex; j++) ! 30: w[j] = *pr++; ! 31: wi(w, ex-sx, 1, sx, i); ! 32: } ! 33: break; ! 34: case 4: ! 35: case 3: ! 36: for (i = sy; i < ey; i++, pr+=delta, pg+=delta, pb+=delta) ! 37: { for (j = sx; j < ex; j++) ! 38: w[j] = ((*pr++ & 224)<<1)| ! 39: ((*pg++ & 224)>>2)| ! 40: ((*pb++ & 224)>>5); ! 41: wi(w, ex-sx, 1, sx, i); ! 42: } ! 43: break; ! 44: default: ! 45: fprintf(stderr, "undefined number of channels\n"); ! 46: break; ! 47: } ! 48: signal(SIGINT, onquit); ! 49: } ! 50: ! 51: ramlamcl() ! 52: { int cm[512], a, b, c, i; ! 53: ! 54: for (i = 0; i < 512; i++) ! 55: { a = (i & (7<<6)) << 3; ! 56: b = (i & (7<<3)) << 2; ! 57: c = (i & (7 )) << 1; ! 58: cm[i] = a | b | c; ! 59: } ! 60: signal(SIGINT, SIG_IGN); ! 61: lam(512, cm); ! 62: signal(SIGINT, onquit); ! 63: reloadmaps(); ! 64: } ! 65: ! 66: ramlambwram() ! 67: { int cm[512], i; ! 68: ! 69: for (i = 0; i < 512; i++) ! 70: cm[i] = i; ! 71: signal(SIGINT, SIG_IGN); ! 72: lam(512, cm); ! 73: signal(SIGINT, onquit); ! 74: reloadmaps(); ! 75: } ! 76: ! 77: ramgetitall(from) ! 78: struct SRC *from; ! 79: { ! 80: register unsigned char *pr, *pg, *pb; ! 81: register int j, ex = from->sx + from->ex; ! 82: int i, offset, delta, sx = from->sx; ! 83: int sy = from->sy, ey = from->sy + from->ey; ! 84: short w[1024]; /* avoid malloc */ ! 85: ! 86: if (from == Old) ! 87: fprintf(stderr, "reading screen..."); ! 88: ! 89: offset = sy*DEF_LL + sx; ! 90: delta = DEF_LL - ex + sx; ! 91: ! 92: pr = from->pixred+offset; ! 93: pg = from->pixgrn+offset; ! 94: pb = from->pixblu+offset; ! 95: ! 96: signal(SIGINT, SIG_IGN); /* don't mess up the ramtek */ ! 97: switch (from->nchan) ! 98: { case 1: ! 99: for (i = sy; i < ey; i++, pr+=delta, pg+=delta, pb+=delta) ! 100: { ri(0, i, DEF_LL, w); ! 101: for (j = sx; j < ex; j++) ! 102: { *pg = *pb = *pr = w[j]; ! 103: pg++; pb++; pr++; ! 104: } ! 105: } ! 106: break; ! 107: case 4: ! 108: case 3: ! 109: for (i = sy; i < ey; i++, pr+=delta, pg+=delta, pb+=delta) ! 110: { ri(0, i, DEF_LL, w); ! 111: for (j = sx; j < ex; j++) ! 112: { *pr++ = ((w[j]>>6)&7)<<5; ! 113: *pg++ = ((w[j]>>3)&7)<<5; ! 114: *pb++ = ((w[j] )&7)<<5; ! 115: } } ! 116: break; ! 117: default: ! 118: fprintf(stderr, "undefined number of channels\n"); ! 119: break; ! 120: } ! 121: signal(SIGINT, onquit); ! 122: if (from == Old) ! 123: fprintf(stderr, "\n"); ! 124: RESIDENT; ! 125: } ! 126: ! 127: /* a few extra builtins: ! 128: */ ! 129: ! 130: ramlyank(x, y) ! 131: { register int i; ! 132: register unsigned char *pr, *pg, *pb; ! 133: extern char faster; ! 134: short w[1024]; /* avoid malloc */ ! 135: int from=Old->sx, to=Old->ex; ! 136: ! 137: if (y < Old->sy || y >= Old->ey) return 0; ! 138: ! 139: if (!faster) ! 140: { ramyank(x, y); ! 141: return 0; ! 142: } else ! 143: { if (x != 0) ! 144: return 0; ! 145: } ! 146: i = (y < 1 || y >= DEF_LL) ? 0 : DEF_LL*(y-1); ! 147: pr = scratchred+i; ! 148: pg = scratchgrn+i; ! 149: pb = scratchblu+i; ! 150: ! 151: if (Old->nchan == 1) ! 152: for (i = from; i < to; i++) ! 153: w[i] = *pr++; ! 154: else ! 155: for (i = from; i < to; i++) ! 156: w[i] = ((*pr++ & 224)<<1) | ((*pg++ & 224)>>2) | (*pb++>>5); ! 157: ! 158: signal(SIGINT, SIG_IGN); ! 159: wi(&w[from], to - from, 1, from, y-1); ! 160: signal(SIGINT, onquit); ! 161: ! 162: return 1; ! 163: } ! 164: ! 165: ramyank(x, y) ! 166: { register int i = DEF_LL*y+x; ! 167: unsigned char *pr = scratchred+i; ! 168: unsigned char *pg = scratchgrn+i; ! 169: unsigned char *pb = scratchblu+i; ! 170: short ch; ! 171: ! 172: if (Old->nchan == 1) ! 173: ch = *pr; ! 174: else ! 175: ch = ((*pr & 224)<<1)|((*pg & 224)>>2)|(*pb >>5); ! 176: wii(&ch, x, y); ! 177: return 1; ! 178: } ! 179: ! 180: unsigned char Rmap[256], Gmap[256], Bmap[256]; ! 181: ! 182: reloadmaps() ! 183: { register int i; ! 184: for (i = 0; i < 256; i++) ! 185: Rmap[i]=Gmap[i]=Bmap[i]=i; ! 186: } ! 187: ! 188: ramredcmap(i, z) ! 189: { int j = i%256; ! 190: int k = z%256; ! 191: ! 192: Rmap[j] = k; ! 193: if (j == 255) docmap(); ! 194: return k; ! 195: } ! 196: ! 197: ramgrncmap(i, z) ! 198: { int j = i%256; ! 199: int k = z%256; ! 200: ! 201: Gmap[j] = k; ! 202: if (j == 255) docmap(); ! 203: return k; ! 204: } ! 205: ! 206: ramblucmap(i, z) ! 207: { int j = i%256; ! 208: int k = z%256; ! 209: ! 210: Bmap[j] = k; ! 211: if (j == 255) docmap(); ! 212: return k; ! 213: } ! 214: ! 215: docmap() ! 216: { int i, cm[512], a, b, c; ! 217: ! 218: if (Old->nchan == 1) ! 219: { for (i = 0; i < 256; i++) ! 220: cm[i] = Rmap[i]; ! 221: } else ! 222: { for (i = 0; i < 512; i++) ! 223: { a = ((Rmap[(i&(7<<6))>>1])&240)<<4; ! 224: b = ((Gmap[(i&(7<<3))<<2])&240); ! 225: c = ((Bmap[(i&(7 ))<<5])&240)>>4; ! 226: cm[i] = a | b | c; ! 227: } ! 228: } ! 229: signal(SIGINT, SIG_IGN); ! 230: lam(512, cm); ! 231: signal(SIGINT, onquit); ! 232: } ! 233: ! 234: ramzap() ! 235: { ! 236: fill(0, Old->sx, Old->sy, Old->ex, Old->ey); ! 237: } ! 238: ! 239: ramgetcmap(i, r,g,b) ! 240: { int h = 0, k = 0; ! 241: ! 242: if (r) { h++; k += Rmap[i]; } ! 243: if (g) { h++; k += Gmap[i]; } ! 244: if (b) { h++; k += Bmap[i]; } ! 245: if (h > 1) k /= h; ! 246: ! 247: return k; ! 248: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.