|
|
1.1 ! root 1: /* code_word.c - define code words for one dimensional encoding */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/others/quipu/photo/RCS/code_word.c,v 7.0 89/11/23 22:01:34 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/others/quipu/photo/RCS/code_word.c,v 7.0 89/11/23 22:01:34 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: code_word.c,v $ ! 12: * Revision 7.0 89/11/23 22:01:34 mrose ! 13: * Release 6.0 ! 14: * ! 15: */ ! 16: ! 17: /* ! 18: * NOTICE ! 19: * ! 20: * Acquisition, use, and distribution of this module and related ! 21: * materials are subject to the restrictions of a license agreement. ! 22: * Consult the Preface in the User's Manual for the full terms of ! 23: * this agreement. ! 24: * ! 25: */ ! 26: ! 27: ! 28: ! 29: #include <stdio.h> ! 30: #include "quipu/photo.h" ! 31: ! 32: extern int PIC_LINESIZE; ! 33: ! 34: /* The following are declarations of the code words that are used with one ! 35: /* dimensional encoding. The first number in each pair give the length ! 36: /* of the string, the second gives the string in hex, starting at the 13th bit ! 37: /* position. ! 38: /* The declarations are made this way so that the arays are made at compile ! 39: /* time as opposed to run time. ! 40: */ ! 41: ! 42: ! 43: /* White terminal run lengths */ ! 44: ! 45: static code_word wt_term [] = { ! 46: { 8 , 0x6a0 }, /* 0 : 00110101 */ ! 47: { 6 , 0x380 }, /* 1 : 000111 */ ! 48: { 4 , 0xe00 }, /* 2 : 0111 */ ! 49: { 4 , 0x1000 }, /* 3 : 1000 */ ! 50: { 4 , 0x1600 }, /* 4 : 1011 */ ! 51: { 4 , 0x1800 }, /* 5 : 1100 */ ! 52: { 4 , 0x1c00 }, /* 6 : 1110 */ ! 53: { 4 , 0x1e00 }, /* 7 : 1111 */ ! 54: { 5 , 0x1300 }, /* 8 : 10011 */ ! 55: { 5 , 0x1400 }, /* 9 : 10100 */ ! 56: { 5 , 0x700 }, /* 10: 00111 */ ! 57: { 5 , 0x800 }, /* 11: 01000 */ ! 58: { 6 , 0x400 }, /* 12: 001000 */ ! 59: { 6 , 0x180 }, /* 13: 000011 */ ! 60: { 6 , 0x1a00 }, /* 14: 110100 */ ! 61: { 6 , 0x1a80 }, /* 15: 110101 */ ! 62: { 6 , 0x1500 }, /* 16: 101010 */ ! 63: { 6 , 0x1580 }, /* 17: 101011 */ ! 64: { 7 , 0x9c0 }, /* 18: 0100111 */ ! 65: { 7 , 0x300 }, /* 19: 0001100 */ ! 66: { 7 , 0x200 }, /* 20: 0001000 */ ! 67: { 7 , 0x5c0 }, /* 21: 0010111 */ ! 68: { 7 , 0xc0 }, /* 22: 0000011 */ ! 69: { 7 , 0x100 }, /* 23: 0000100 */ ! 70: { 7 , 0xa00 }, /* 24: 0101000 */ ! 71: { 7 , 0xac0 }, /* 25: 0101011 */ ! 72: { 7 , 0x4c0 }, /* 26: 0010011 */ ! 73: { 7 , 0x900 }, /* 27: 0100100 */ ! 74: { 7 , 0x600 }, /* 28: 0011000 */ ! 75: { 8 , 0x40 }, /* 29: 00000010 */ ! 76: { 8 , 0x60 }, /* 30: 00000011 */ ! 77: { 8 , 0x340 }, /* 31: 00011010 */ ! 78: { 8 , 0x360 }, /* 32: 00011011 */ ! 79: { 8 , 0x240 }, /* 33: 00010010 */ ! 80: { 8 , 0x260 }, /* 34: 00010011 */ ! 81: { 8 , 0x280 }, /* 35: 00010100 */ ! 82: { 8 , 0x2a0 }, /* 36: 00010101 */ ! 83: { 8 , 0x2c0 }, /* 37: 00010110 */ ! 84: { 8 , 0x2e0 }, /* 38: 00010111 */ ! 85: { 8 , 0x500 }, /* 39: 00101000 */ ! 86: { 8 , 0x520 }, /* 40: 00101001 */ ! 87: { 8 , 0x540 }, /* 41: 00101010 */ ! 88: { 8 , 0x560 }, /* 42: 00101011 */ ! 89: { 8 , 0x580 }, /* 43: 00101100 */ ! 90: { 8 , 0x5a0 }, /* 44: 00101101 */ ! 91: { 8 , 0x80 }, /* 45: 00000100 */ ! 92: { 8 , 0xa0 }, /* 46: 00000101 */ ! 93: { 8 , 0x140 }, /* 47: 00001010 */ ! 94: { 8 , 0x160 }, /* 48: 00001011 */ ! 95: { 8 , 0xa40 }, /* 49: 01010010 */ ! 96: { 8 , 0xa60 }, /* 50: 01010011 */ ! 97: { 8 , 0xa80 }, /* 51: 01010100 */ ! 98: { 8 , 0xaa0 }, /* 52: 01010101 */ ! 99: { 8 , 0x480 }, /* 53: 00100100 */ ! 100: { 8 , 0x4a0 }, /* 54: 00100101 */ ! 101: { 8 , 0xb00 }, /* 55: 01011000 */ ! 102: { 8 , 0xb20 }, /* 56: 01011001 */ ! 103: { 8 , 0xb40 }, /* 57: 01011010 */ ! 104: { 8 , 0xb60 }, /* 58: 01011011 */ ! 105: { 8 , 0x940 }, /* 59: 01001010 */ ! 106: { 8 , 0x960 }, /* 60: 01001011 */ ! 107: { 8 , 0x640 }, /* 61: 00110010 */ ! 108: { 8 , 0x660 }, /* 62: 00110011 */ ! 109: { 8 , 0x680 }, /* 63: 00110100 */ ! 110: }; ! 111: ! 112: /* Black terminal run lengths */ ! 113: ! 114: static code_word bl_term [] = { ! 115: { 10, 0x1b8 }, /* 0 : 0000110111 */ ! 116: { 3 , 0x800 }, /* 1 : 010 */ ! 117: { 2 , 0x1800 }, /* 2 : 11 */ ! 118: { 2 , 0x1000 }, /* 3 : 10 */ ! 119: { 3 , 0xc00 }, /* 4 : 011 */ ! 120: { 4 , 0x600 }, /* 5 : 0011 */ ! 121: { 4 , 0x400 }, /* 6 : 0010 */ ! 122: { 5 , 0x300 }, /* 7 : 00011 */ ! 123: { 6 , 0x280 }, /* 8 : 000101 */ ! 124: { 6 , 0x200 }, /* 9 : 000100 */ ! 125: { 7 , 0x100 }, /* 10: 0000100 */ ! 126: { 7 , 0x140 }, /* 11: 0000101 */ ! 127: { 7 , 0x1c0 }, /* 12: 0000111 */ ! 128: { 8 , 0x80 }, /* 13: 00000100 */ ! 129: { 8 , 0xe0 }, /* 14: 00000111 */ ! 130: { 9 , 0x180 }, /* 15: 000011000 */ ! 131: { 10, 0xb8 }, /* 16: 0000010111 */ ! 132: { 10, 0xc0 }, /* 17: 0000011000 */ ! 133: { 10, 0x40 }, /* 18: 0000001000 */ ! 134: { 11, 0x19c }, /* 19: 00001100111 */ ! 135: { 11, 0x1a0 }, /* 20: 00001101000 */ ! 136: { 11, 0x1b0 }, /* 21: 00001101100 */ ! 137: { 11, 0xdc }, /* 22: 00000110111 */ ! 138: { 11, 0xa0 }, /* 23: 00000101000 */ ! 139: { 11, 0x5c }, /* 24: 00000010111 */ ! 140: { 11, 0x60 }, /* 25: 00000011000 */ ! 141: { 12, 0x194 }, /* 26: 000011001010 */ ! 142: { 12, 0x196 }, /* 27: 000011001011 */ ! 143: { 12, 0x198 }, /* 28: 000011001100 */ ! 144: { 12, 0x19a }, /* 29: 000011001101 */ ! 145: { 12, 0xd0 }, /* 30: 000001101000 */ ! 146: { 12, 0xd2 }, /* 31: 000001101001 */ ! 147: { 12, 0xd4 }, /* 32: 000001101010 */ ! 148: { 12, 0xd6 }, /* 33: 000001101011 */ ! 149: { 12, 0x1a4 }, /* 34: 000011010010 */ ! 150: { 12, 0x1a6 }, /* 35: 000011010011 */ ! 151: { 12, 0x1a8 }, /* 36: 000011010100 */ ! 152: { 12, 0x1aa }, /* 37: 000011010101 */ ! 153: { 12, 0x1ac }, /* 38: 000011010110 */ ! 154: { 12, 0x1ae }, /* 39: 000011010111 */ ! 155: { 12, 0xd8 }, /* 40: 000001101100 */ ! 156: { 12, 0xda }, /* 41: 000001101101 */ ! 157: { 12, 0x1b4 }, /* 42: 000011011010 */ ! 158: { 12, 0x1b6 }, /* 43: 000011011011 */ ! 159: { 12, 0xa8 }, /* 44: 000001010100 */ ! 160: { 12, 0xaa }, /* 45: 000001010101 */ ! 161: { 12, 0xac }, /* 46: 000001010110 */ ! 162: { 12, 0xae }, /* 47: 000001010111 */ ! 163: { 12, 0xc8 }, /* 48: 000001100100 */ ! 164: { 12, 0xca }, /* 49: 000001100101 */ ! 165: { 12, 0xa4 }, /* 50: 000001010010 */ ! 166: { 12, 0xa6 }, /* 51: 000001010011 */ ! 167: { 12, 0x48 }, /* 52: 000000100100 */ ! 168: { 12, 0x6e }, /* 53: 000000110111 */ ! 169: { 12, 0x70 }, /* 54: 000000111000 */ ! 170: { 12, 0x4e }, /* 55: 000000100111 */ ! 171: { 12, 0x50 }, /* 56: 000000101000 */ ! 172: { 12, 0xb0 }, /* 57: 000001011000 */ ! 173: { 12, 0xb2 }, /* 58: 000001011001 */ ! 174: { 12, 0x56 }, /* 59: 000000101011 */ ! 175: { 12, 0x58 }, /* 60: 000000101100 */ ! 176: { 12, 0xb4 }, /* 61: 000001011010 */ ! 177: { 12, 0xcc }, /* 62: 000001100110 */ ! 178: { 12, 0xce }, /* 63: 000001100111 */ ! 179: }; ! 180: ! 181: /* White make up codes */ ! 182: ! 183: static code_word wt_make [] = { ! 184: { 5 , 0x1b00 }, /* 64 : 11011 */ ! 185: { 5 , 0x1200 }, /* 128 : 10010 */ ! 186: { 6 , 0xb80 }, /* 192 : 010111 */ ! 187: { 7 , 0xdc0 }, /* 256 : 0110111 */ ! 188: { 8 , 0x6c0 }, /* 320 : 00110110 */ ! 189: { 8 , 0x6e0 }, /* 384 : 00110111 */ ! 190: { 8 , 0xc80 }, /* 448 : 01100100 */ ! 191: { 8 , 0xca0 }, /* 512 : 01100101 */ ! 192: { 8 , 0xd00 }, /* 576 : 01101000 */ ! 193: { 8 , 0xce0 }, /* 640 : 01100111 */ ! 194: { 9 , 0xcc0 }, /* 704 : 011001100 */ ! 195: { 9 , 0xcd0 }, /* 768 : 011001101 */ ! 196: { 9 , 0xd20 }, /* 832 : 011010010 */ ! 197: { 9 , 0xd30 }, /* 896 : 011010011 */ ! 198: { 9 , 0xd40 }, /* 960 : 011010100 */ ! 199: { 9 , 0xd50 }, /* 1024: 011010101 */ ! 200: { 9 , 0xd60 }, /* 1088: 011010110 */ ! 201: { 9 , 0xd70 }, /* 1152: 011010111 */ ! 202: { 9 , 0xd80 }, /* 1216: 011011000 */ ! 203: { 9 , 0xd90 }, /* 1280: 011011001 */ ! 204: { 9 , 0xda0 }, /* 1344: 011011010 */ ! 205: { 9 , 0xdb0 }, /* 1408: 011011011 */ ! 206: { 9 , 0x980 }, /* 1472: 010011000 */ ! 207: { 9 , 0x990 }, /* 1536: 010011001 */ ! 208: { 9 , 0x9a0 }, /* 1600: 010011010 */ ! 209: { 6 , 0xc00 }, /* 1664: 011000 */ ! 210: { 9 , 0x9b0 }, /* 1728: 010011011 */ ! 211: { 11, 0x20 }, /* 1792: 00000001000 */ ! 212: { 11, 0x30 }, /* 1856: 00000001100 */ ! 213: { 11, 0x34 }, /* 1920: 00000001101 */ ! 214: { 12, 0x24 }, /* 1984: 000000010010 */ ! 215: { 12, 0x26 }, /* 2048: 000000010011 */ ! 216: }; ! 217: ! 218: /* Black make up codes */ ! 219: ! 220: static code_word bl_make [] = { ! 221: { 10, 0x78 }, /* 64 : 0000001111 */ ! 222: { 12, 0x190 }, /* 128 : 000011001000 */ ! 223: { 12, 0x192 }, /* 192 : 000011001001 */ ! 224: { 12, 0xb6 }, /* 256 : 000001011011 */ ! 225: { 12, 0x66 }, /* 320 : 000000110011 */ ! 226: { 12, 0x68 }, /* 384 : 000000110100 */ ! 227: { 12, 0x6a }, /* 448 : 000000110101 */ ! 228: { 13, 0x6c }, /* 512 : 0000001101100 */ ! 229: { 13, 0x6d }, /* 576 : 0000001101101 */ ! 230: { 13, 0x4a }, /* 640 : 0000001001010 */ ! 231: { 13, 0x4b }, /* 704 : 0000001001011 */ ! 232: { 13, 0x4c }, /* 768 : 0000001001100 */ ! 233: { 13, 0x4d }, /* 832 : 0000001001101 */ ! 234: { 13, 0x72 }, /* 896 : 0000001110010 */ ! 235: { 13, 0x73 }, /* 960 : 0000001110011 */ ! 236: { 13, 0x74 }, /* 1024: 0000001110100 */ ! 237: { 13, 0x75 }, /* 1088: 0000001110101 */ ! 238: { 13, 0x76 }, /* 1152: 0000001110110 */ ! 239: { 13, 0x77 }, /* 1216: 0000001110111 */ ! 240: { 13, 0x52 }, /* 1280: 0000001010010 */ ! 241: { 13, 0x53 }, /* 1344: 0000001010011 */ ! 242: { 13, 0x54 }, /* 1408: 0000001010100 */ ! 243: { 13, 0x55 }, /* 1472: 0000001010101 */ ! 244: { 13, 0x5a }, /* 1536: 0000001011010 */ ! 245: { 13, 0x5b }, /* 1600: 0000001011011 */ ! 246: { 13, 0x64 }, /* 1664: 0000001100100 */ ! 247: { 13, 0x65 }, /* 1728: 0000001100101 */ ! 248: { 11, 0x20 }, /* 1792: 00000001000 */ ! 249: { 11, 0x30 }, /* 1856: 00000001100 */ ! 250: { 11, 0x34 }, /* 1920: 00000001101 */ ! 251: { 12, 0x24 }, /* 1984: 000000010010 */ ! 252: { 12, 0x26 }, /* 2048: 000000010011 */ ! 253: }; ! 254: ! 255: ! 256: ! 257: ! 258: /* ROUTINE: Get_code () */ ! 259: /* */ ! 260: /* SYNOPSIS: Gets a code word from an array given the run_length */ ! 261: /* and the colour (0 = white, 1 = black) */ ! 262: ! 263: full_code ! 264: get_code (run, colour) ! 265: ! 266: char colour; ! 267: int run; ! 268: { ! 269: ! 270: full_code result; ! 271: result.make.length = 0; ! 272: if (run > PIC_LINESIZE) ! 273: (void) fprintf (stderr,"Run too long\n"); ! 274: ! 275: if (colour == WHITE) { ! 276: if (run > 63) ! 277: result.make = wt_make [(run/64)-1]; ! 278: result.term = wt_term [run%64]; ! 279: ! 280: } else { ! 281: if (run > 63) ! 282: result.make = bl_make [(run/64)-1]; ! 283: result.term = bl_term [run%64]; ! 284: } ! 285: ! 286: return (result); ! 287: ! 288: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.