/********************************/ /* iismap valdes 8 30 82 */ /* */ /* Set IIS maps */ /********************************/ #include #include "iisfv.h" /*Set map at in window */ iismap (window, map, imin, imax) char map[]; int window; int imin, imax; { register short *lut, i, j; static int pos[2]; short *status, x; float y; if (iisdev == 3) return; lut = iiswda[window].lut; switch (map[0]) { case 'w': /* monochrome */ if (imin < 0) imin = 0; if (imax < 0) imax = 0; if (imin > 255) imin = 255; if (imax > 255) imax = 255; if (imax == imin) return; for (i = 0; i < 256; i++) { lut[i] = 255.* (i - imin) / (imax - imin); if (i < imin) lut[i] = 0; if (i > imax) lut[i] = 255; } break; case 't': /* monochrome with trackball */ status = iiswda[window].cursor.status; for (i = 1; (i < 256) && (lut[i] == lut[0]); i++); i--; for (j = 254; (j > i) && (lut[j] == lut[255]); j--); j++; if ((i == j) || (lut[i] == lut[j])) { pos[0] = 255; pos[1] = 383; } else { y = (float) (lut[j] - lut[i]) / (j - i); pos[0] = 2 * i - (2 * lut[i] - 255) / y; if (y > 1) y = 2 - (1 / y); if (y < -1) y = -2 - (1 / y); pos[1] = 128 * y + 255.5; } iiscr (window, 1, pos); for (;;) { iiscr (window, 0, pos); if (status[0] & 040000) break; x = status[1] >> 1; y = (status[2] - 255.5) / 128.; if (y > 1) y = 1./ (2 - y); if (y < -1) y = -1./ (2 + y); for (i = 0; i < 256; i++) { lut[i] = y * (i - x) + 127.5; lut[i] = lut[i] < 0 ? 0 : lut[i]; lut[i] = lut[i] > 255 ? 255 : lut[i]; } iislut (window); } break; } } /*Set output function maps*/ iisomap (map) char map[]; { register short i; static int call = 1; static short table[1024]; static short zero[10204]; switch (iisdev) { case 1: switch (map[0]) { case 'm': /* Monochrome */ if (call) { for (i = 0; i < 256; i++) table[i] = i * 4; for (; i < 1024; i++) table[i] = table[255]; call = 0; } iisofm1 (table); break; case '0': /* Disable display */ iisofm1 (zero); break; } break; case 2: switch (map[0]) { case 'm':/*Monochrome*/ if (call) { for (i = 0; i < 256; i++) table[i] = i; for (;i < 1024; i++) table[i] = table[255]; call = 0; } iisofm1(table); break; case '0':/*Disable display*/ iisofm1(zero); break; } } } /*Set graphics maps*/ iisgmap (window, bits, color) int window; int bits; int color; { register unsigned char i; static short *glut; glut = iiswda[window].glut; switch (iisdev) { case 1: case 2: if (bits < 0) { bits = -bits; for (i = 0; i < 255; i++) if (i == bits) glut[i] = color; } else { for (i = 0; i < 255; i++) if (i & bits) glut[i] = color; } } }