diff options
Diffstat (limited to 'doc/rfc/rfc798.txt')
-rw-r--r-- | doc/rfc/rfc798.txt | 986 |
1 files changed, 986 insertions, 0 deletions
diff --git a/doc/rfc/rfc798.txt b/doc/rfc/rfc798.txt new file mode 100644 index 0000000..9dca3ae --- /dev/null +++ b/doc/rfc/rfc798.txt @@ -0,0 +1,986 @@ + + +Network Working Group A. Katz +Request for Comments: 798 ISI + September 1981 + + + DECODING FACSIMILE DATA FROM THE RAPICOM 450 + +I. Introduction + + This note describes the implementation of a program to decode + facsimile data from the Rapicom 450 facsimile (fax) machine into an + ordinary bitmap. This bitmap can then be displayed on other devices + or edited and then encoded back into the Rapicom 450 format. In + order to do this, it was necessary to understand the how the + encoding/decoding process works within the fax machine and to + duplicate that process in a program. This algorithm is descibed in + an article by Weber [1] as well as in a memo by Mills [2], however, + more information than is presented in these papers is necessary to + successfully decode the data. + + The program was written in L10 as a subsystem of NLS running on + TOPS20. The fax machine is interfaced to TOPS20 as a terminal + through a microprocessor-based interface called FAXIE. + + Grateful acknowledgment is made to Steve Treadwell of University + College, London and Jon Postel of Information Sciences Institute for + their assistance. + +II. Interface to TOPS20 + + The fax machine is connected to a microprocessor-based unit called + FAXIE, designed and built by Steve Casner and Bob Parker. More + detailed information can be found in reference [3]. FAXIE is + connected to TOPS20 over a terminal line, and a program was written + to read data over this line and store it in a file. The decoding + program reads the fax data from this file. + + The data comes from the fax machine serially. FAXIE reads this data + into an 8-bit shift register and sends the 8-bit byte (octet) over + the terminal line. Since the fax machine assigns MARK to logical 0's + and SPACE to logical 1's (which is backward from RS232), FAXIE + complements each bit in the octet. The data is sent to TOPS20 in + octets, the most significant bit first. If you read each octet from + most significant bit to least significant bit in the order FAXIE + sends the data to TOPS20, you would be reading the data in the same + order in comes into FAXIE from the fax machine. + + The standard for storing Rapicom 450 Facsimile Data is described in + RFC 769 [4]. According to this standard, each octet coming from + FAXIE must be complemented and inverted (i.e. invert the order of the + bits in the octet). Thus, the receiving program did this before + + + +Alan R. Katz [page 1] + + + +DECODING FACSIMILE DATA RFC 798 +II. Interface to TOPS20 + + + + storing the data in a file. When the decoding program reads this + file, it must invert and complement each octet before reading the + data. + + Each data block from the fax machine is 585 bits long. The end of + this data is padded with 7 0's to make 592 bits or 74 octets. + According to RFC 769, this data is stored in a file preceded by a + length octet and a command octet. The possible commands are: + + 56 (70 octal)--This is a Set-Up block (the first block of the + file, contains information about the fax image) + + 57 (71 octal)--This is a data block (the rest of the blocks in the + file except for the last one) + + 58 (72 octal)--End command (the last block of the file) + + The length field tells how many octets in this block and is always 76 + (114 octal) except for the END command which can be 2 (no data). The + length and command octets are NOT inverted and complemented. + + Below is a diagram of each block in the file: + + +--------+--------+--------+--------+--------+--------+-------- + | length | command| data | data | ... | | + +--------+--------+--------+--------+--------+--------+-------- + +III. The Rapicom 450 Encoding Algorithm + + An ordinary 8 1/2" by 11" document is made up of about 2100 scan + lines, each line has 1726 pels (picture elements) in it. Each pel + can be either black (1) or white (0). + + The Rapicom 450 has three picture quality modes. In fine detail + mode, all of the document is encoded. In quality mode only every + other scan line is encoded and it is intended that these missing + lines are filled in on playback by replicating the previous line. + There is also express mode, where only every third line is encoded. + + + + + + + + + + + +[page 2] Alan R. Katz + + + +RFC 798 DECODING FACSIMILE DATA + III. The Rapicom 450 Encoding Algorithm + + + + Data is encoded two lines at a time, using a special two dimensional + run-length encoding scheme. There are 1726 pels on top and 1726 pels + on the bottom. Each pair (top-bottom) of pels is called a column. + For each of the 1726 columns you can have any one of four + configurations (called states): + + column + (top-bottom) pels state + ------------ ---- ------ + W-W 0,0 0 + W-B 0,1 1 + B-W 1,0 2 + B-B 1,1 3 + + The encoding algorithm can be described in terms of a + non-deterministic finite-state automaton shown in Fig. 1 (after Mills + [2]). You start out in a state (0-3) and transform to another state + by emitting the appropriate bits marked along the arcs of the + diagram. For example, suppose you are in state 1 (WB). To go to + state 2 (BW), you would output the bits 101 (binary); to go to state + 0 (WW) you would output the bits 1000. Note that the number of bits + on each transition is variable. + + In states 0 (WW) and 3 (BB), a special run length encoding scheme is + used. There are two state variables associated with each of these + states. One variable is a run-length counter and the other is the + field length (in bits) of this counter. Upon entry to either of + these two states, the counter is initialized to zero and is + incremented for every additional column of the same state. At the + end of the run, this counter is transmitted, extending with high + order zeros if necessary. If the count fills up the field, it is + transmitted, the field length is incremented by one, and the count + starts again. This count is called the run length word and it is + between 2 and 7 bits long. + + For example, suppose we are in state 0 (WW) and the run length for + this state (refered to as the white run length) is 3. Suppose there + are three 0's in a row. The first 0 was encoded when we came to this + state, there are two more 0's that must be encoded. Thus we would + send a 010 (binary). Similarly, if there are seven 0's in a row, we + would send a 110, but eight 0's would be sent by 111 followed by 0000 + and the white run length becomes 4. (Ten 0's would be encoded as 111 + followed by 0010 and the white run length would be 4). + + + + + + +Alan R. Katz [page 3] + + + +DECODING FACSIMILE DATA RFC 798 +III. The Rapicom 450 Encoding Algorithm + + + + + 0100 + ------------------------>----------------------------------- + | | + | -------------------<------------------------------- | + | | 1 | | + | V | | + ---------------- ----------------- | | + | | | | | | + | | 010 | | | | + |->| 2 |---------------------->| 1 |->| | | + | | | | | | | | + 0| | B-W | 101 | W-B | |1 | | + |<-| |<----------------------| |<-| | | + | | | | | | + | | ----->| | | | + ---------------- | ----------------- | | + | ^ | | | ^ | | + | | ------------>------| | | | | | + | | | 1 | | | | | + | | | | | | ^ V + | | | | | | | | + 0111| |1 | | 1000| |1 | | + | | | | | | | | + | | | | | | | | + | | | | | | | | + | | | 1011 | | | | | + | | | ----------<----------- | | | | + V | | | V | | | + ---------------- | ----------------- | | + | |<--- | | | | + | | 0 | | | | + | 3 |<----------------------| 0 |------ | + | | | | | + | B-B | | W-W | | + | |---------------------->| |<--------- + | | 0 | | + | | | | + ---------------- ----------------- + | ^ | ^ + | | | | + ------ ------ + run run + Figure 1. + Non-deterministic finite-state machine diagram for RAPICOM 450 + + + + +[page 4] Alan R. Katz + + + +RFC 798 DECODING FACSIMILE DATA + III. The Rapicom 450 Encoding Algorithm + + + + Run length word lengths must be between 2 and 7. The field length is + decremented if the run is encoded in one word and: + + 1. If the run length is 3 and the highest order bit is 0. + + 2. Or, if the run length is 4, 5, 6, or 7 and the highest order 2 + bits are 0. + + In addition to all this, there is a special rule to follow if the run + occupies at least two run words (and can involve incrementing the run + word size) and the run ends exactly at the end of a scan line. In + this case, the last word of the run is tested for decrement as if the + previous words in the run did not exist. + + An Example: + + To confirm the reader's understanding of the encoding procedure, + suppose we had the following portion of a document (1=black, + 0=white): + + top row: 0 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 ... + bottom row: 1 1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 ... + ----------- ------------------------------- + state: 1 3 3 3 3 2 0 0 0 0 0 2 2 1 0 0 ... + + Suppose also that the black run field length is 2, the white run + length is 3, and the state is 1. (This example comes from + reference [1].) + + This portion would be encoded as: + + 1 1011 11 000 1 0100 100 1 0 010 1000 ... + + NOTE: It turns out that the Rapicom 450 sends the bits of a field + in reverse order. This will be discussed in the section V. + However, since each run length field is sent reversed, the above + encoded bit pattern would actually be sent as: + + 1 1011 11 000 1 0100 001 1 0 010 1000 ... + ^ + |-this is actually 100 reversed + + + + + + + + +Alan R. Katz [page 5] + + + +DECODING FACSIMILE DATA RFC 798 +III. The Rapicom 450 Encoding Algorithm + + + + Another Example: + + This example illustrates the rule for decrementing the run length + word lengths: + + top row: 0 1 1 0 0 1 1 1 1 1 0 0 ... + bottom row: 1 1 1 1 1 0 1 1 1 1 1 0 ... + ----------- ----------------------- + state: 1 3 3 1 1 2 3 3 3 3 1 0 ... + + Here, let us suppose that the black run field length is now 4, the + white is still 3, and the state is 1. + + This portion would be encoded as: + + 1 1011 0001 1 1 101 0111 011 1 1000 ... + ^ ^ + |-goes to 3 |-blk cnt goes to 2 + + When we reverse the order of the run fields, the bit pattern that + is actually sent is: + + 1 1011 1000 1 1 101 0111 110 1 1000 ... + ^ + |-this is actually 0001 reversed, etc. + +IV. The Setup Block and the Data Header + + Each data block from the fax machine is 585 bits long. The number of + blocks in a picture is variable and depends on the size and + characteristics of the picture. It should be emphasized that a block + can end in the middle of a scan line of the document. There can in + fact be many scan lines in a block. + + The 585 bit data block is composed of a 24 bit sync code which is + used to recognize the beginning of a block, a 37 bit header, 512 bits + of actual data, and a 12 bit CRC checksum: + + ------------------------------------------------------------------ + | 24-bit | 37-bit | 512-bit | 12-bit | + |sync code | header | data | checksum | + ------------------------------------------------------------------ + + The number of useful data bits is variable and can be between 0 and + 512 (although there are always 512 bits there, some of them are to be + ignored). The number of data bits to be used is given in the header. + + + +[page 6] Alan R. Katz + + + +RFC 798 DECODING FACSIMILE DATA + IV. The Setup Block and the Data Header + + + + The 37 bits of header is composed of: + + ------------------------------------------------------------------ + | 2-bit |5-bit| 10-bit | 12-bit | 3-bit | 3-bit |2-bit| + |seq num|flags|data count| x position|black size|white size|state| + ------------------------------------------------------------------ + + An explanation of these fields follows: + + IMPORTANT NOTE: Most (but not all) of these fields are sent by + the fax machine in REVERSE ORDER. The order of each n-bit field + must be inverted. + + Sync code + + This is used to synchronize on each block. The value of this + 24 bit field is 30474730 octal (not reversed). + + Sequence number + + This number cycles through 0, 1, 2, 3 for the data blocks. It + is 0 for the Set-Up block (not reversed). + + Flags + + Each of these flags are 1 bit wide: + + Run + + Purpose unknown, it always seems to be 1. + + Cofb + + Purpose unknown, it always seems to be 0. + + Rpt + + 1 for Set-Up blocks (which are repeated when coming from + the fax machine though only one of them is transfered by + FAXIE to TOPS20 and stored in the file) and 0 for data + blocks. + + Spare + + Purpose unknown, doesn't matter. + + + + +Alan R. Katz [page 7] + + + +DECODING FACSIMILE DATA RFC 798 +IV. The Setup Block and the Data Header + + + + Sub + + 1 if this is a Set-Up block. + + Data Count + + Number of useful bits to use out of the 512 data bits. NOT ALL + of the 512 data bits are used, only this number of them. This + number can be 0 (usually in one of the first data blocks) which + means to throw away this block. (This field is reversed!) + + X Position + + Current position on the scan line, a value between 0 and 1725. + If this number is greater than where the previous block left + off, the intervening space should be filled with white (0's). + If this number is less than where the previous block left off, + set the X position to this value and replace the overlapped + data with the new data from this block. If this number is + greater than 1726, ignore this field and continue from where + the previous block left off. (This field is reversed!) + + Black Size + + The size of the black run length field, must be between 2 and + 7. This is the correct value for the black size. It may + differ from what was found at the end of the previous block. + (This field is reversed!) + + White Size + + The size of the white run length field, must be between 2 and + 7. It may differ from what was found at the end of the + previous block. (This field is reversed!) + + State + + The current state. This is the correct state. It may differ + from the state at the end of the previous block. (This field is + not reversed.) + + Data + + 512 bits of the actual encoding of the document. NOT ALL of + this data is used in general, only the amount specified by the + + + + +[page 8] Alan R. Katz + + + +RFC 798 DECODING FACSIMILE DATA + IV. The Setup Block and the Data Header + + + + data count. If this is a set up block, the data contains + information about the type of document (see below). + + Checksum + + CRC checksum on the entire block. Uses polynomial + x**12+x**8+x**7+x**5+x**3+1. + + In a setup block, the data portion of the data block consists of: + + ----------------------------------------------------------- + | 6-bit | 5-bit | 1-bit | 20-bits | 480-bits + | flags | spare |multi page| of zeros | 1's and 0's + ----------------------------------------------------------- + + Specifically these are: + + 6 flags (each are 1 bit): + + Start bit + + Always 0. + + Speed + + Is 1 if express mode. + + Detail + + Is 1 if detail mode. (NOTE: If the Detail and Speed flags + are both 0, then data is in Quality mode). + + 14 inch paper + + is 1 if 14 inch paper length. + + 5.5 inch paper + + is 1 if 5.5 inch paper length. (NOTE: If the 14 inch and 5 + inch flags are both 0, then paper length is 11 inch). + + paper present + + is 1 if paper is present at scanner (should be always 1). + + + + + +Alan R. Katz [page 9] + + + +DECODING FACSIMILE DATA RFC 798 +IV. The Setup Block and the Data Header + + + + Spare: + + These 5 bits can be any value. + + Multi-page: + + 1 if multi page mode + + Rest of data of set-up block: + + The above fields are followed by twenty 0 bits and the rest of + the 512 bits of the block are alternating 0's and 1's. + + There are a number of important points to be remembered in regard to + the header of a data block. First of all, the data count, the + x-position, and the black and white run sizes must be read IN REVERSE + ORDER. The reason for this is that the fax machine sends these bits + in reverse order. However, the sequence number and the state fields + ARE NOT REVERSED. In addition to this, each run field in the data IS + REVERSED. This reversing of the bits in each n-bit field is + completely separate from the reversing and complementing of each + octet mentioned earlier. + + Second, only the first n bits, where n is the value of the data count + field (remember its reversed!), of the data is valid, the rest is to + be ignored. If n is zero, the whole block is to be ignored. + + Third, if the x position is beyond where the last block ended, fill + the space between where the last block ended and the current x + postion with white (0's). If the x postition is less then where the + last block ended, replace the overlapped data with the data in the + new block. If the x postition is greater than 1726, ignore it and + continue from where the previous block left off. + + Fourth, the black size, white size (reversed), and state (not + reversed!) given in the header are the correct values even if they + disagree with the end of the previous block. + + Finally, the sequence number (not reversed) should count through + 0,1,2,3. If it does not, a block is missing. + + + + + + + + + +[page 10] Alan R. Katz + + + +RFC 798 DECODING FACSIMILE DATA + V. The Decoding Algorithm + + + +V. The Decoding Algorithm + + Upon first glance at the finite state diagram in Figure 1, it may + seem that it would be difficult to create a decoding procedure. For + example, if you are in the WW state, and the next bit is a 1, how do + you know whether to do a transition to WB or BW? The answer to this + is to recognize that every arc out of the BW state begins with 0 and + every arc out of WB begins with 1. Thus, if you are in the WW state, + and the next bit is 1, followed by a 0, you know to go to the BW + state. If the next bit is 1, followed by a 1, you know to go to the + WB state. + + In writing the decoding program it was necessary to have two ways of + reading the next bit in the data stream. The first way reads the bit + and "consumes" it, i.e. increments the bit pointer to point at the + next bit. The other way does not "consume" it. Below are four + statements which show how to decode fax data. The numbers in + parentheses are not to be consumed, that is to say they will be read + again in making the next transition. + + If I am in state BW (2) and the next bits are: + 0 (0): go to BW + 0111: go to BB + 010 (1): go to WB + 0100: go to WW + + If I am in state WB (1) and the next bits are: + 1 (1): go to WB + 1000: go to WW + 101 (0): go to BW + 1011: go to BB + + If I am in state WW (0), then first go through the run length + algorithm, then if the next bits are: + 0: go to BB + 1 (0): go to BW + 1 (1): go to WB + + If I am in state BB (3), then first go through the run length + algorithm, then if the next bits are: + 0: go to WW + 1 (0): go to BW + 1 (1): go to WB + + For the run length algorithm, remember, look at the next n bits, + where n is the length of either the black or white run length + + + +Alan R. Katz [page 11] + + + +DECODING FACSIMILE DATA RFC 798 +V. The Decoding Algorithm + + + + word, REVERSE the bits, and output that many BB's or WW's + (depending on whether black or white run). If the field is full, + increment the size of the word, and get that many bits more, i.e. + get the next n+1 bits, etc. Also, the run length word length can + be decremented according to the rules given in section III. + + You always go through the run length even if there is only one WW + or BB, in this case, the run field will be 0. + + Let us look at the first example given in section III. Suppose we + want to decode the bits: 110111100010100100100101000... (we have + already reversed the run lengths to make things easier). + + We are in state 1 (WB) and the black run length word length is 2 + and the white length is 3. We get these initial values either + from the block header, or by remembering them from the previous + transitions if this is not the start of the block. According to + our rules, we would parse this string as follows: + + 1(1) 1011 11 000 1(0) 0100 100 1(0) 0(0) 010(1) 1000... + + The numbers in parentheses are numbers that were read but not + "consumed", thus the next number in the sequence is the same as + the one in parentheses. First, we see a 1 and that the next bit + is a 1, this means that we go to WB. Then we have a 1011 which + means to go to BB. Then we do a run, we have a 11 followed by a + 000 which means the black run length gets incremented by 1 (it is + now 3) and we get 3 MORE BB's. Now we have a 1 followed by 0 + which means go to BW. Next a 0100 which is WW. Then we have a + run, 100, which means four more WW's. We keep going like this and + we get the original bit pattern given in the first example of + section III. + + It is important to always start fresh when dealing with each + block. There are many reasons for this. The first is that + sometimes blocks are dropped, and you can recover from this if you + resynchronize at the start of each block. Also, if at the end of + the previous block, there is about to be a transition, instead of + making it at the beginning of the next block, the fax machine + gives the new state in the header of the next block and goes from + there. Thus it is important to always start at whatever state is + given in the header, and to align yourself at the current X + position given there also. + + Sometimes, while decoding a block, a bit pattern will occur which + + + + +[page 12] Alan R. Katz + + + +RFC 798 DECODING FACSIMILE DATA + V. The Decoding Algorithm + + + + does not correspond to any transition. If this happens, the rest + of the block may be bad and should be discarded. + + The decoding program decodes the fax data block by block until it + comes to an END command in the data, or runs out of data. + +VI. Program Performance + + The L10 NLS program takes about two CPU minutes to run on TOPS20 on a + DEC KL10 to decode the average document in fine detail mode. In this + mode, the picture is about 1726 by 2100 pels, and takes about 204 + disk pages to store. + + We have a program which displays bit maps on an HP graphics terminal + and have been able to display portions of documents. (not all of an + 8.5" by 11" document will fit in the display). We can use the + terminal's zoom capability to look at very small portions of the + document. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Alan R. Katz [page 13] + + + +DECODING FACSIMILE DATA RFC 798 +References + + + +References + + [1] Weber, D. R., "An Adaptive Run Length Encoding Algorithm", + International Conference on Communications, ICC-75, IEEE, San + Francisco, California, June 1975. + + [2] Mills, D. L., "Rapicom 450 Facsimile Data Decoding", + WP2097/MD33E, COMSAT Laboratories, Washington D.C., undated. + + [3] Casner, S. L., "Faxie", ISI Internal Memo, USC/Information + Sciences Institute, February 1980. + + [4] Postel, Jon, "Rapicom 450 Facsimile File Format", RFC 769, + USC/Information Sciences Institute, September 1980. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[page 14] Alan R. Katz + + + +RFC 798 DECODING FACSIMILE DATA + Appendix + + + +Appendix + + In this appendix is given the first portion of the data which comes + from the fax machine, this same data in RFC 769 format, and some of + this data decoded into a bitmap. The data is represented in octal + octets. + + The following is data of the form which comes out of the fax machine + with length and command octets added: + + 114 70 142 171 330 13 377 377 377 371 53 200 0 5 125 125 + 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 + 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 + 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 + 125 125 125 125 125 125 125 125 125 121 21 261 114 71 142 171 + 330 40 0 102 326 270 152 42 42 44 111 0 42 151 267 122 + 366 110 237 102 211 365 111 171 336 51 244 247 377 377 111 362 + 177 377 377 377 377 377 377 377 377 376 104 213 241 41 111 377 + 111 337 377 377 377 377 377 377 377 377 377 377 377 163 301 361 + 377 377 377 377 360 177 12 0 114 71 142 171 330 141 137 177 + 377 344 10 0 160 23 301 160 137 376 204 352 135 27 353 264 + 0 70 100 7 20 75 0 0 0 0 0 344 0 0 0 0 + 0 0 0 0 34 275 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 7 41 310 34 200 0 0 344 0 0 0 71 + 13 331 204 0 114 71 142 171 330 241 137 26 302 160 0 16 + 100 71 0 370 270 271 0 162 0 71 174 134 100 162 0 34 + 234 200 344 7 156 100 1 310 16 107 43 323 263 220 365 313 + 327 57 377 325 331 36 56 47 325 324 344 3 227 40 71 35 + 200 1 310 1 313 220 0 0 7 241 330 0 0 137 342 200 + 114 71 142 171 330 340 77 40 142 160 0 0 0 0 162 71 + 73 162 376 276 234 277 376 67 265 301 16 20 171 1 311 313 + 346 377 321 75 256 113 245 377 262 160 136 247 13 251 350 374 + 270 236 235 217 136 203 220 75 166 166 364 177 305 366 72 107 + 63 330 352 345 313 320 71 34 270 46 57 0 + + The following is the same data after put into RFC 769 format (with + each data octet reversed and complemented): + + 114 70 271 141 344 57 0 0 0 140 53 376 377 137 125 125 + 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 + 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 + 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 125 + 125 125 125 125 125 125 125 125 125 165 167 162 114 71 271 141 + 344 373 377 275 224 342 251 273 273 333 155 377 273 151 22 265 + 220 355 6 275 156 120 155 141 204 153 332 32 0 0 155 260 + 1 0 0 0 0 0 0 0 0 200 335 56 172 173 155 0 + + + +Alan R. Katz [page 15] + + + +DECODING FACSIMILE DATA RFC 798 +Appendix + + + + 155 4 0 0 0 0 0 0 0 0 0 0 0 61 174 160 + 0 0 0 0 360 1 257 377 114 71 271 141 344 171 5 1 + 0 330 357 377 361 67 174 361 5 200 336 250 105 27 50 322 + 377 343 375 37 367 103 377 377 377 377 377 330 377 377 377 377 + 377 377 377 377 307 102 377 377 377 377 377 377 377 377 377 377 + 377 377 377 377 37 173 354 307 376 377 377 330 377 377 377 143 + 57 144 336 377 114 71 271 141 344 172 5 227 274 361 377 217 + 375 143 377 340 342 142 377 261 377 143 301 305 375 261 377 307 + 306 376 330 37 211 375 177 354 217 35 73 64 62 366 120 54 + 24 13 0 124 144 207 213 33 124 324 330 77 26 373 143 107 + 376 177 354 177 54 366 377 377 37 172 344 377 377 5 270 376 + 114 71 271 141 344 370 3 373 271 361 377 377 377 377 261 143 + 43 261 200 202 306 2 200 23 122 174 217 367 141 177 154 54 + 230 0 164 103 212 55 132 0 262 361 205 32 57 152 350 300 + 342 206 106 16 205 76 366 103 221 221 320 1 134 220 243 35 + 63 344 250 130 54 364 143 307 342 233 13 377 + + The following is the first part of the expanded bitmap of this data + (there are about 4 scan lines here, or 2 pairs of scan lines): + + 177 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 + 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 + 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 + 377 377 377 377 377 377 367 377 377 377 377 377 377 377 377 377 + 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 + 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 + 337 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 + 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 + 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 + 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 + 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 + 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 + 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 377 + 377 377 377 377 377 377 377 374 0 4 327 377 377 377 377 377 + 374 377 356 377 177 0 10 0 201 200 0 0 0 0 100 0 + 0 0 0 0 0 0 1 140 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 204 10 0 0 10 0 0 0 100 0 + 20 10 7 250 2 0 57 100 100 2 100 100 164 0 20 21 + 31 310 153 137 377 377 377 377 177 32 176 344 2 200 216 0 + 4 0 240 0 0 14 70 0 0 0 0 0 2 47 137 336 + 137 377 377 377 377 375 377 372 20 140 45 376 377 377 377 237 + 377 276 357 377 377 377 227 345 314 175 63 215 202 6 347 143 + 377 337 376 70 371 370 352 300 213 373 371 377 377 343 73 334 + 0 207 315 3 33 111 377 167 337 377 1 323 365 177 377 177 + 377 374 377 135 377 377 365 67 343 55 377 377 377 377 357 377 + 377 377 377 377 377 377 203 377 236 175 376 236 337 273 347 377 + + + +[page 16] Alan R. Katz + + + +RFC 798 DECODING FACSIMILE DATA + Appendix + + + + 376 77 377 377 377 377 377 377 377 377 377 377 300 0 0 0 + 200 102 177 377 277 377 377 377 376 377 366 365 173 302 12 0 + 40 200 0 0 0 4 100 0 0 0 0 0 0 2 5 354 + 0 0 0 0 0 0 0 0 4 0 10 0 0 0 200 10 + 40 20 1 0 100 0 140 0 20 210 101 374 3 200 155 304 + 0 6 100 103 376 0 120 121 31 332 243 177 377 377 377 377 + 377 233 377 354 0 241 217 1 30 0 240 0 0 12 150 202 + 40 0 0 0 62 47 157 376 173 373 377 377 377 377 377 377 + 20 141 321 376 377 377 377 327 377 376 377 377 377 377 237 216 + 316 375 167 215 202 6 300 143 377 237 374 70 175 330 377 304 + 255 373 153 377 377 353 377 104 0 267 315 203 13 311 177 377 + 377 377 1 223 367 377 373 167 377 376 77 137 377 345 165 67 + 43 51 277 377 277 377 357 377 377 377 373 177 377 377 223 377 + 366 175 376 234 377 271 347 377 376 157 377 377 377 377 377 377 + 377 377 377 377 340 0 0 0 0 0 177 377 37 377 377 377 + 377 376 367 357 272 300 2 0 4 0 0 0 0 0 0 0 + 0 0 0 0 20 0 1 144 0 0 0 0 0 0 4 4 + 0 0 100 2 100 10 201 10 0 20 75 0 0 40 142 0 + 0 74 341 234 103 4 157 300 0 2 0 141 372 0 0 20 + 30 376 55 277 177 377 377 367 377 371 376 100 15 61 16 200 + 30 0 40 0 0 0 311 200 24 0 0 0 62 55 377 316 + 367 347 377 357 377 377 377 377 170 305 5 276 377 377 377 357 + 377 377 377 377 377 177 377 377 357 177 377 76 207 246 340 147 + 376 336 356 10 17 320 105 235 275 377 377 373 377 347 335 317 + 50 77 377 353 75 333 377 377 377 377 363 337 343 277 356 171 + 7 357 76 216 377 211 207 176 257 217 377 377 367 357 357 277 + 377 357 377 377 377 375 367 377 377 377 377 375 377 377 356 377 + 366 377 377 377 377 377 377 377 377 377 377 377 340 0 0 0 + 0 44 373 377 77 377 377 177 177 377 377 337 376 170 173 0 + 0 0 100 0 1 10 0 0 0 0 0 200 160 0 223 160 + 300 0 0 0 0 0 0 6 100 220 0 0 140 4 3 30 + 121 20 351 300 206 74 167 0 30 64 41 234 172 30 175 300 + 4 32 4 345 367 200 103 60 177 372 177 233 377 377 377 377 + 376 125 207 210 233 21 364 361 277 1 50 16 140 120 41 335 + 377 306 214 10 67 377 373 377 377 377 377 377 377 367 377 377 + 377 363 277 377 377 377 377 377 267 177 377 377 377 377 377 237 + 377 377 377 77 377 377 355 373 + + + + + + + + + + + + +Alan R. Katz [page 17] + |