CA1273703A - Method of pixel to vector conversion in an automatic picture coding system - Google Patents

Method of pixel to vector conversion in an automatic picture coding system

Info

Publication number
CA1273703A
CA1273703A CA000484318A CA484318A CA1273703A CA 1273703 A CA1273703 A CA 1273703A CA 000484318 A CA000484318 A CA 000484318A CA 484318 A CA484318 A CA 484318A CA 1273703 A CA1273703 A CA 1273703A
Authority
CA
Canada
Prior art keywords
contour
picture
bin
chain
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CA000484318A
Other languages
French (fr)
Inventor
Benjamin E. Mccann
Michael L. Rieger
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tektronix Inc
Original Assignee
Tektronix Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tektronix Inc filed Critical Tektronix Inc
Application granted granted Critical
Publication of CA1273703A publication Critical patent/CA1273703A/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/20Contour coding, e.g. using detection of edges
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features
    • G06V10/46Descriptors for shape, contour or point-related descriptors, e.g. scale invariant feature transform [SIFT] or bags of words [BoW]; Salient regional features
    • G06V10/469Contour-based spatial representations, e.g. vector-coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Image Processing (AREA)

Abstract

Abstract of the Disclosure An automatic picture coding system including a method for converting a bit-map image of the picture to vectors as the picture is being scanned. The bit map is delayed as it is being generated to form a series of tessellations or windows of data. The windows are propagated through a series of neighborhood-logic elements which perform data transformation operations such as growing, smoothing and thinning of the bit-map image. A bit stream output from the neighborhood logic which output includes only line and edge features of the original picture is transferred serially to a microcomputer where the features are parti-tioned into a plurality of line segments. Each line segment is chain coded and temporarily stored, as it is acquired, in a corresponding one of a plurality of lists, the lists being linked in an order corresponding with the order in which the segments are acquired. When the storage of each chain-coded segment is completed, the segment is converted to vectors and transmitted to a user device for display, storage, or further processing, the lists in which the converted segments were stored being unlinked and deallo-cated. The process is continued until the entire document has been scanned and converted to vectorial data.

Description

~ '~3~

Method of Pixel to Vector Conversion in an Automatic Picture Coding System Background of the Invention 05 This invention relates to the computer processing of pictures. More particularly, the invention relates to a method and associated apparatus for the processing and compaction of raster-scanned data, in real time, as a document is being scanned.
Computer-aided design and drafting is practiced exten-sively in the engineering and graphic arts however, there exists an extensive archive of documents generated manually or otherwise in pictorial form, i.e., more suitable for human interpretation than interpretation by machine. The demand for conversion of such archives to machine script will grow as the transition to computer~based graphics progresses and becomes more complete.
Techniques for automatically converting drawings and other pictures to machine script for processing, storage or display are well known. One of the most efficient and compact machine-script data sets representative of a picture comprises vectors including data items representing spatial location of the vectors with respect to the original pic-ture. Generally, techniques for converting a picture into such vectorial data fall into two categories, viz.: line following and raster-to-vector conversion. Line-following schemes, while generating vectorial data directly, require large and expensive assemblies that are best suited for high production environments. Line following is said to be advantageous becau3e the original picture is used as the image memory, instead of a bit-map copy of the picture in the computer memory. A "bit-map~ is a ~gnal ~et in machine script representing a tessellation of small picture elements or pixels of the original document. Generally, line-following imaging systems having devices that can be directed randomly in two dimensions to detect and follow picture features are either expensive, or slow. An example of the former comprises a device uti;izing a scanning laser beam which is directed by moving mirrors, and having acous-tooptical devices for detecting features of the picture.
An example of the latter is an electromechanical device such as a plotter having a light sensor instead of a pen.
05 In some implementations, an operator manually guides a carriage along a line to be acquired; a photosensor detects when the carriage is directly over a line and enables the system to store X and Y coordinates of the carriage. By moving the carriage on an irregular path over the line, the intersections of the path and the line are stored as end poi~ts of a string of vectors. A totally automatic - line following system must first scan the entire picture to locate lines and features, and maintain a data-storage boo~eeping system to preclude duplicate storage of data.
Otherwise, an operator must locate lines and direct the process, line by line.
In raster-to-vector conversion systems, the original picture or its microfilm is scanned, e.g., optically, and the information thereon resolved into a bit map. The optical characteristics of each pixel are used to control detection circuits that generate positionally defined signals of the bit map. An advantage of raster-to-vector conversion systems is that raster-scan imaging devices are inexpensive and prevalent; however, this kind of system has commonly required storage of the entire image as a bit map in a data store accessible by a computer, the computer then executing a program for converting the bit map to a vecto-rial data set.
The storage of a bit-map copy of a picture re~uire~
a large data store. For example, a bit stream acquired from raster scanning an E-~ize drawing with a resolution of 0.1 millimeter comprises approximately 100 million bits of data. A ~bit stream~ means a sequence of electrical signals or pulses comprising a set of binary digits repre-senting data in coded form wherein the significance ofeach bit is determined by its position in the sequence and its relation to other bits. Various data reduction algorithims bas~d on information and coding theory have 1 .~3~r~

been utilized to achieve significant reduction in the storage requirement for scanned data. Unfortunately, however, the form of representation of data as coded messages generally lacks information necessary for reconstituting regular line drawings.
In view of the foregoing, it is an object of this invention to provide an improved method of encoding pictures.
Another object of the present invention is to provide improved means for raster-to-vector conversion in an automatic picture coding system.
It is another object of the present invention to provide an improved automatic picture coding system having reduced storage requirements.
It is another object of the invention to provide an improved automatic picture coding system including a method of converting a pixel bit stream into vectorial data as the bit stream is acquired.
Summary of the Invention In accordance with one aspect of the invention there is provided a method of encoding pictures, comprising the steps of:
raster scanning a picture; generating, as the picture is being scanned, a bit map representative of the features of the picture;
regenerating the bit map, as the picture is acquired during the scanning and generating steps, as a bit stream representative of line and edge features of the picture; temporarily storing, as the bit stream is regenerated, those portions of the bit stream which represent the line and edge features of the picture, said temporary storing step including the steps of converting the bit stream, as it is regenerated, into a plurality of chain-coded line segments;
and storing the plurality of chain-coded line segments, as the scanning and regenerating steps continue, in a corresponding plurality of storage elements linked in an order corresponding with the order in which the features of the picture are encountered during the scanning, generating and regenerating steps; converting each stored line segment to vectorial data; transmitting the vectorial data to a user device; and continuing the preceding steps until the entire picture is scanned and encoded.
In accordance with another aspect of the invention there is provided apparatus for automatically converting a document to machine script, comprising: means for raster scanning said document, means coupled to said scanning means for generating a series of tessellations of black and white pixels from said scanned document, each of the tessellations including a center pixel and adjacent pixels surrounding the center pixel; means for regenerating the series of tessellations as a bit stream having a plurality of elements, each element of the bit stream corresponding w.ith a tessellation having a black center pixel, the bit stream being representative of line and edge features of the scanned document, such features including a plurality of discontinuous contours; means receiving the bit stream for classifying in succession each element of the bit stream as a unique set of contour segments, which set includes at least one of the contour segments representing a contour start, a contour end, and a contour continuation; means for generating a data item representing the directional orientation of each of the contour start segments and each of the contour continuation segments in directions corresponding with the general directions in which the document is scanned; means for storing the data items representing each of the plurality of contours, each said storage means being associated with one contour and allocated responsive to said classifying means when a contour start segment associated with said one contour is received, the one contour being stored in the associated storage means as the data items representing the contour continuation segments of the one contour are successively received while the document is being scanned by said raster scanning means, each of the plurality of storage means being ordered in accordance with the relative order of the contours as successively received in the bit stream; means responsive to said classifying means receiving a contour end segment for converting the stored contour associated with the received contour end segment to a vectorial data set representing an abstraction of the associated stored contour, and including means for deallocating the storage means corresponding with the converted contour; and means for utilizing the vectorial data set.

~ ~7~ ?~3 3b In one aspect of the invention, a bit-map image of a picture is regenerated as a series of tessellated picture elements representing only the lines and edges of the picture; as the bit map is regenerated the line and edge data is encoded as a plurality of line segments or contours and stored as an ordered list of such contours;
as the storage of each encoded contour is completed, the contour is removed from the list, converted to a vectorial representation of the contour, and output to a user device.
In another aspect of the invention, the contours are listed in an order corresponding with the order in which the contours are intercepted as the picture is scanned, and wherein means are provided for connecting two or more contiguous contours as a single contour having a general orientation which is transverse to the general directions of scanning.

1.~3 ~

Brief Description of the Drawin~
Fig. l is a block diagram of an automatic picture coding system in accordance with the instant invention.
Fig. 2 is a more detailed block diagram of the system OS of Fig. 1.
Figs. 3 and 4 illustrate a data format utilized in the practice of the present invention.
Fig. 5 is a block diagram of one stage of the window-processor of Fig. 2.
Fig. 6 is a diagram illustrating the spatial relationship of data output by contiguous stages ~f the window processor of Fig. 2.
Fig. 7 is a block diagram of the final stage of the window proc~ssor of Fig. 2.
Fig. 8 is a flow diagram illustrating the operation of the state control logic of Fig. 2.
Fig. 9 illustrates representative ones of tessellations of pixels in each of the various classes of window data items according to the instant invention.
Fig. 10 is a vector diagram of a subset of chain-code vectors utilized in the practice of the present invention.
Fig. ll is a pictorial diagram showing an analogy of the raster-to-chain-code conversion process in accordance with the present invention.
Fig. 12 shows a bit-map representation of the contours shown in Fig. 11.
Fig. 13 is a portion of a bit map utilized to explain a feature of the instant invention.
Fig. 14 illustrates the steps of conversion of data from a bit map, to a chain-coded contour, and then to a vectorial representation of the bit-map image.
Fig. 15 is a general flow diagram of the microcomputer implemented portion of the process in accordance with the instant invention.
Figs. 16-34 are flow diagrams illustrating in detail the process shown generally in the FigO 15 flow diagram;
Figs. 16-24 describe the data window handling routines for each of the window classes.

~L~7~

Fig. 25 is a flow diagram of the ADDCODE subroutine.
Fig. 26 is a flow diagram of the NEWBIN subroutine.
Fig. 27 is a flow diagram of the INSERT subroutine.
Fig. 28 is a flow diagram of the UNWIND subroutine.
05 Fig. 29 is a flow diagram of the DELETE subroutine.
Fig. 29A is a diagram illustrating the pointer structure of a bin list.
Fig. 30 is a flow diagram of the LINEFINDER subroutine.
Fig. 30A is a diagram showing the function performed by the LINE FINDER subroutine.
Fig. 31 is a flow diagram of the NEXTENDPOINT subroutine.
Fig. 32 is a flow diagram of the NEXTCODE subroutine.
Fig. 33 is a flow diagram of the CCD FULL interrupt subroutine.
Fig. 34 is a flow diagram of the real-time clock interrupt subroutine.

7~ 3 Description of the Preferred Embodiment Referring now to the various views of the drawing for a more detailed description of the construction, operation and other features of the invention by characters of refer-05 ence, Fig. 1 shows a simplified block diagram of an auto-matic picture coding system 10 comprising an image acquisi-tion element 12 which converts an image of a document 14 into electrical signals. A variety of means may be utilized to acquire an image of a document including scanners wherein 1~ the document to be read is moved past a fixed sensor and light source. An example is the facimile drum scanner in which the original is attached to the outside of a rapidly rotating cylinder moving slowly along its axis with respect to the sensor, thus producing a raster-scanned image of the document. In a variation of the foregoing, the original document and the detector remain fixed and the scanning is effected by moving mirrors. A second type of scanner is one in which a small intense spot of light is scanned over a document, light reflected from the document being detected by a single-element detector with no particular directional characteristics. Such scanners include laser scanners having moving mirrors which scan a laser spot across the picture. A moving spot may also be produced by focusing the face of a raster-scanned CRT onto the docu-ment. Another scanning approach involves scanning the docu-ment or an optical image of the document, with an area detector such as a vidicon or a solid-state imaging array.
The image acquisition element 12 of the presently de-scribed embodiment of the invention utilizes a form of raster scanning to dissect an optical image of the document 14 into a plurality of rows of square picture elements or pixels, one of which rows 16 is depicted ln Fig. 1.
A linear array of photosensitive charge-coupled devices (CCD) senses one entire row 1~ of contiguous pixels of the appropriately illuminated document 14. The light inten-sity in each pixel is compared with a threshold value and converted to a binary digital signal represen$ing either a black or a white area of the document 14. The electrical ~ ~3~

signals representing the row 16 are coupled via a connection 18 to a digital hardware element 20. The entire document 14 is scanned by successively repositioning the linear CCD imaging array in the direction perpendicular to the 05 row 16 by mechanical means 22 responsive to the digital hardware element 20. The result is a digital image in the form of a serial matrix or bit map having elements repre-senting the entire document 14.
The digital hardware element 20 comprises a preprocessor 24 and a control logic element 26. The preproocessor 24 receives the serial digitized data from the image acquisi-tion element 12 and performs a series of high-speed trans-formations on the data as it is received. The preprocessor 24 changes the data from a bit-map representation of the sensed image into a compact feature representation by per-forming preprocessing operations such as smoothing, growing, thinning, etc. Smoothing is a process which removes spurious points adjacent to a line, growing fills discontinuities in lines and broad features, and thinning reduces broad features to skeletal lines usually no more than one pixel wide. The transformed data is transferred via a bus 28 to a microcomputer 30 for additional, high-level processing.
The data output from the preprocessor 24 to the microcom-puter 30 is still a bit-map representation of the document 14; however, only pixels associated with line data and edges are output to the microcomputer 30. The data is transferred in real time as the document 14 is being scanned. The micro-computer 30, under control of a software module 32, encodes and lists the data, and converts the listed data into an abstraction comprising a list of vectors representing the original document. When the image of the document 14 has been thus encoded as vectors, the data can be easily edited, displayed and stored, or otherwise processed by a user device 34. For example, the vectorial data provides a com-pact base for syntactic pattern recognition. The task ofidentifying arcs, characters, or other features or symbols from vectorial data is significantly less complex than from the plurality of intensity values of a bit map. Calculating feature parameters such as areas or trajectories is also made simpler by using vectorial data.
The control logic 26 serves as an interface between the microcomputer 30, the preprocessor 24, and the image 05 acquisition element 12, providing control, sequencing and timing functions. Among these functions are control of the mechanical means 22 for scanning the imaging array as well as data transfer functions.
Referring now to Fig. 2, the automatic picture coding system 10 of Fig. 1, is shown in greater detail. The image acquisition element 12 comprises a light source 36, a lens 38, and an image detector 40. The uniformly illuminated document 14 is held in a fixed position and one line of the document is focused onto the image detector 40 which in the presently described embodiment of the invention is a linear CCD photodiode array having 1024 photosensitive elements receiving photons from the row 16. The lens 38 and image detector 40 are mounted on a carriage 42 which is connected to a stepper motor 44 by mechanical means 46. Before an image of a line is acquired, all photodiodes in the array 40 are reverse biased to a fixed voltage asso-ciated with a charge stored by the junction compacitance of the photodiodes. As photons strike the junction, electron-hole pairs are produced resulting in a loss of charge from the junction. The amount of charge loss is a linear function of the number of photons striking the diode. At the end of an integration period, the charge is transferred from the photodiodes to a CCD analog shift register 48. After the transfer, the photodiodes 40 once again begin integrating light while the sensed charge pat-tern is shifted through the CCD analog shift register 48 to a threshold comparator 50. Each of the output voltages of the charge-pattern sequence representing the light strik-ing each of the photodiodes in seguence along the array 40 is compared to a predetermined threshold voltage in the threshold comparator 50 and regenerated as a binary signal representative of the light/dark pattern of the sensed line wherein a binary "one" represents a black or ~7~,r~

dark area and ~zero" represents a white or light area.
One such line of data sensed by the CCD array 40 is referred to herein as a "raster~ of data, or simply, a raster. One line or raster of data is stored in a line store 52.
05 A new raster of data is acquired by the image detector 40 while the previous image is being shifted out of the CCD shift register 48 into the line store 52. Thus, the stepper motor 44 is activated to begin moving the carriage 42 immediately after the transfer of the raster of data from the photodiode array 40 into the CCD shift register 48. The image detector 40 is moved on the carriage 42 which in the presently described embodiment is a micrometer driven translation stage, the micrometer 46 being turned by the stepper motor 44. The use of a stepper motor allows precise positioning of the array over a number of steps and allows the array 40 to be stepped intermittently precluding prob-lems due to mechanical inertia. In the presently described embodiment, approximately seven steps of the steppe~ motor 44 are required to move the image-detector array 40 one pixel thickness down the document 14 to acquire the next raster of data. The stepper motor 44 is driven by a motor latch and driver circuit 54 in response to input signals from the system software as will be described hereinafter.
A raster of data ~tored in the line store 52 is trans-ferred one bit at a time on demand to the preprocessor orwindow processor 24 under control of the control logic 26, and while this transfer is occuring, another ra~ter of data is being acquired by the imagP acquisition element 12.
The window processor 24 thus processes successive rasters of data as they are acquired utilizing a technique known in the art as nneighborhood~ or window logic. Neighborhood logic refers to an operation performed digitally on an array of data A(I,J) which is carried out so as to trans-form A(I,J) into a new data array A'(I,J) wherein each element in the new array has a value determined only by the corresponding element in the original array along with the values of its nearest neighbors. The nearest neighbor configuration is called a ~window" and apparatus performing ~,~'7~ ' ~3 ., 10 operations on arrays of identically configured windows is called window logic. Referring to Fig. 3, there is shown a bit map 60 of black and white pixels of sampled data representing a portion of a scanned document with successive 05 raster portions being arranged horizontally in the figure.
A 3-pixel wide by 3-pixel high section of the bit map 60 is defined as a window 62. A window such as the window 62 may be centered at any pixel in the image. Although a window such as the window 62 of the presently described embodiment of the invention is a square tessellation, other tessellations may be utilized. The window processor 24 examines each of the 3 X 3 windows in the image serially a number of times and, based on the pattern of light and dark pixels within the win~ow, changes a center pixel 64 from light to dark, from dark to light, or leaves it un-changed. This operation, applied sequentially to windows centered at each pixel in the image and, in some instances, repeated a number of times, performs all image transforma-tions involved in thinning, growing, noise elimination and smoothing of the image.
Fig. 4 represents a window of pixel data having 9 pixels labled 8-0 as shown. The instant invention utilizes a data format wherein each window is expressed as a 9-bit binary word, each of the bits of the word having a numbered loca-tion in the window which corresponds with the binary weight of the bit, i.e., the most-siynificant bit of the binary word corresponds with the center pixel (28); the least-significant bit, with the pixel to the right of the center pixel (2) in Fig. 4. The window 62 of Fig. 3 is thus ex-pressed as a binary number 100,001,111, or 4178 in octal notation. A window 65 of Fig. 3 is expressed as 110,001,1012 or 6158 in the data format of the instant invention. Each wlndow pattern thus has a unique number associated with it which represents one of 512 (2 ) possible patterns.
This unique number is used in the window processor as a table-lookup instruction to determine a new value of the center pixel`of the window. For example, the window 48 represents a single isolated black pixel in a field of white and may be considered as noise. The noise can be removed by loading a zero into the table location corre-sponding to the window 48 The window processor would then replace every occurrence of 48 with 0~0. Similarly, 05 a window 3778 having a white pixel in a field of black can be filled in by regenerating 7778' In the Fig. 4 representation of a window, the three raster portions, formed respectively by pixel groups 3-1;
4,8,0; and 5-7 reside in three successive rasters of data.
Referring now to Fig. 5 in conjunction with Fig. 2, the bit stream from the line store 52 is input to the window processor 24 via a bus 66 to a first stage 68 of the window processor 24. All 9 bits of a window are examined simulta-neously utilizing a tapped delay-line structure comprising 15 l-bit delay elements 70-75 and 1024-bit delay elements 76,77. Utilizing the representative window format shown in Fig. 4, the first raster segment comprising bits 3-1 is delayed one raster plus two bits in the delay elements 70, 71, 76, and another raster plus two bits in the delay 20 elements 72, 73, 77. Bit 3, the first received by the window-processor stage 68, is delayed an additional two bits in the delay elements 74, 75, and bit 2 is delayed one bit in the delay element 74. Bits 3-1 are thus regener-ated as address signals A3-Al input to a read-only store (ROS) 78. Concurrently, the second raster segment comprising bits 4,8 and 0 will have been delayed one raster plus two bits in delay elements 70, 71, 76 and two additional bits in delay elements 72, 73 to generate address input signals A4, A8, A0 of th~ middle raster segment. Concurrently, bit 5 of the third raster segment comprising bits 5-7 will have been delayed two bits in the delay element~ 70, 71, and bit 6 delayed one bit in the delay element 70 to form along with bit 7 the address input signals A5-A7. Each of the windows forming the image are thus circulated in succession through the window processor stage 68 in response to timing signals on a connection 79, the data bits compris-ing each window being applied as the address inputs of the 512 X 1 bit ROS 78.

~;~73~03 The ROS 78 is programmed for the desired transformation function, i.e., thinning, growing, etc., such that an output signal thereof represents the appropriate new value for the center pixel based on the input window pattern. The 05 most important task of the window processor 24 is thinning lines to their skeletons. A skeleton of a line is a local representation of the trajectory of the line; line thinning facilitates the extraction of a contour from the data in subsequent processing. A ~contour" is defined as a connected string of single black pixels on a white background or an edge between a black and white region of an image, and the encoded equivalent or representation thereof. While thinning, the output of the ROS 78 is a white pixel for ~ll input windows which have a white center pixel. However, some windows containing a black center pixel will produce black pixel outputs from the ROS while others will produce white pixel outputs. By successive applications of the thinning operation, black pixels will be changed to white leaving a skeletal or thinned representation of the image which is a subset of the black regions of the original image. The window processor 24 of the presently described embodiment of the invention includes sixteen window-processor stages like the window-processor stage shown in Fig. 5 connected in series or pipelined to process the digital image sixteen times in succession at hardware speeds. Referring to Fig. 5, an additional l-bit delay element 82 is interposed between the output 80 of the ROS
78 and an input connection 84 to the next stage of the window processor 24. The additional pixel of delay 82 at the output of each stage of the window processor was intro-duced to achieve full nonrecur~ive processing in each of the window-processor stages, i.e., the output bit stream of a window-processor stage is not utilized by the same window-processor stage in constructing windows of data subsequently processed by the same stage. Nonrecursive window processor stages such as the window processor stage of Fig. 5 are cascaded directly in the window processor 24 by connecting the output 84 of one stage to an input ~;73~3 terminal of the next succeeding stage (like the input termi-nal ~6 of Fig. 5). In such an implementation there is a delay of one raster plus two pixels between adjacent pro-cessing stages resulting in a data relationship between 05 adjacent stages as shown in the bit-map representation of Fig. 6. The direction of bit-stream processing or window travel is from left to right and top to bottom in Fig.
6 as depicted by arrows 86, 87. Referring to Fig. 6, a first window 88 of data represents the data being processed by a first stage of the window processor, an output bit 90 of the stage being the center bit of the window 88.
The second stage of the window processor considers a 3 X 3 window 92 of data having only bits that have already passed through the first stage represented by the window 88. An output bit being generated by any one stage is not utilized concurrently by the next succeeding stage; each stage [except of course the first stage) examines a bit map which has been regenerated by the previous stage.
The window processor 24 includes 15 pipelined stages each performing local transformations on the image in accor-dance with the contents of the ROS for each stage of the processor. The particular window patterns which produce changed center pixels are listed in TABLE I below. All other window patterns are passed without change. The listed window patterns are in the octal-coded, 9-bit binary nota-tion of the window-data format described with reference to Figs. 3 and ~. Five programs are listed: S~OOTH, FULL
GROW, SEMI-GROW, QUARTER GROW and THIN. The SMOOTH program comprises four sequential passes of processing which reduce image noise and smooth line contours. The three GROW pro-grams, each consisting of one stage of processing, perform different amounts of growing on the image, effectively increasing the size and area of black regions of the image.
The FULL GROW program fills all white center pixels in the input window; the SEMI-GROW program which is a subset of FULL GROW attacks broken and jagged lines; and QUARTER
GROW patches small holes in lines and edges. THIN, the last of the data transformation functions performed by ~2737~13 ~

the window processor, comprises two passes which are alter-nated and repeated four times each. One of the passes peels pixels from the upper-left portion of contours; the other, from the lower-right.

~ ~3~

WINDOW PROCESSOR FUNCTIONS

FULL GROW

SEMI-GROW QUARTER GROW

021-023 lSl-157021-023 177 ~ 7~

TABLE I ~ Cont inued ) WINDOW PROCESSOR FUNCTIONS

406 40~

SO

:~X7;~

Referring now to Fig. 7 in conjunction with Fig. 2, a final stage 94 of the window processor 24 includes a ROS 96 which is programmed to generate a WINDOW DATA READY
output signal on a connection 98 for each input window 05 pattern having a center pixel which is part of either one or more lines or an edge of the digitized image. The WINDOW
DATA READY signal is thus generated for all windows having a black center pixel, except for all-black windows. A zero (WINDOW DATA READY not enabled) is generated for all windows having a white center pixel. The process of the instant invention for converting raster format data to vectorial data requires only information about edges and thus the microcomputer is flagged for a window data transfer a num-ber of times which is only a fraction of the number of pixels in the original image. Solid white and solid black regions of the image are processed at the maximum speed of the window processor, producing no data for the software to process; consequently, the image can be processed on a demand basis as it is acquired. The WINDOW DATA READY
signal, coupled via the connection 98 to a state control logic element 100, flags the presence of window data to be read by the microcomputer. The window data is transferred as an eight-bit byte of data, signals D7-D0 (the center pixel, 28, is always black and is therefore implied), via 25 a bus 102 to a window-data store 104 for subsequent access by the microcomputer 30.
The control logic 26 serves as an interface between the microcomputer 30, the window processor 24 and the image acquisition element 12, providing control, sequencing and timing functions. A master clock 106 which may be a conven-tional crystal-controlled oscillator, pulse shaper and divider circuits, provides a timing signal input to a CCD
clock generator 108 and to the microcomputer 30 via a bus 110. The bus 110 comprises interrupt request and status lines. A PIXEL CLOCK signal output of the CCD clock genera-tor 108 has a rising edge which is associated with a valid intensity-related signal at the output of the CCD array and thus operates at the basic pixel rate of the CCD array.

- ~73~

The microcomputer 30 communicates with the control logic 26 via an external bus 112 coupled to bus driver/receiver cir-cuits 114 of the contol logic 26. An interrupt logic element 116 receives interrupt requests and status signals from a 05 status register of the state control logic 100 for trans-mission to the microcomputer 30 via the bus drivers 114. An internal data bus 118 of the control logic 26 receives data for transmission to the microcomputer 30 via the bus drivers 114. An internal data bus 118 of the control logic 26 re-ceives data for transmission to the microcomputer 30 fromcontrol logic 26 elements such as the window data store 104, an X-coordinate logic element 120 and a ROS 122. The ROS 122 contains utility firmware such as a bootloading ro~tine for initialization, and processing programs which are accessed by the microcomputer 30 via a select/control bus 124 through an address-decoder and bus-logic element 126. The microcom-puter 30 selects elements of the control logic 26 for commu-nication therewith via the bus 124. The microcomputer 30 is a general-purpose data processor; the presently described embodiment of the invention utilizes an LSI/11 microcomputer manufactured by the Intel Corporation.
Various data items must be passed between the control logic 26 and the microcomputer 30 during system operation.
The most obvious of these is the window data output of the window processor 24 which is stored in the window data store 104. In order to process the window data, the microcomputer 30 software must have access to the X-coordinate in the ras-ter of the center pixel of the window being transferred.
This data is obtained from an X-coordinate store in the X-coordinate logic element 120. The state control logic 100 generates a NEW LINE signal in the status register each time a new raster reaches the output of the window processor 24.
Several data items must also be exchanged by the control logic 26 and the microcomputer 30 software to operate the stepper motor 44 for positioning the CCD array for each ras-ter. The software controls the stepper motor 44 by writing a sequence of bits into the motor latch and driver circuit 54. To provide timing for this function, the interrupt logic 37~

116 generates at precise intervals a real-time clock inter-rupt derived from the master clock 106. This timing informa-tion allows the microcomputer software to generate control signals which start, stop and control the direction and 05 speed of the stepper motor 44. Upon initialization, a REWIND
command from the microcomputer 30 operates the stepper motor 44 to move the carriage 42 to a reference position relative to the start of the image. Upon reaching the reference posi-tion, a signal CE generated by the carriage is regenerated by the state control logic 100 as a CARRIAGE END signal to inform the microcomputer of such event. The software gener-ates a MOTOR READY signal when the stepper motor 44 has stepped the carriage 42 into position for acquiring a new raster of data. Subsequently, the state control logic 100 generates a CCD FULL signal when a valid raster of data has been transferred from the image detector 40 into the shift register 48, indicating that the motor 44 may again be stepped. The motor driving software operates as an asynchro-nous task driven by the real-time clock and C~D FULL inter-rupts, operating in a multiprogramming mode with theimage-handling software.
The state control logic 100 coordinates the operation of the stepper motor 44, the transfer of a raster of data into the line store 52, the shifting of this raster through the window processor 24, and the transfer of data from the win-dow data store 104 to the microcomputer 30. In order to achieve a meaningful and orderly progression of operations for program steps involved in these operations and the at-tendant movement of information signals and data among the various units, registers and other elements of the automatic picture coding system, after a need for specific movements, combinations of movements or operations has been estab-lished, control signals and timing pulses must be generated or issued to permit the prescribed movement or operation at the desired time. Any undesirable movements or operations must likewise be inhibited. The exact manner in which spe-cific control signals are logically derived and timing pulses are generated from a clock source (such as the master ~73;~

clock 106), delay network or divider according to precisely defined conditions in the system at certain precisely de-fined times has become a matter of common knowledge within the art. Therefore, in the ensuing discussion no attempt is 05 made to describe in great detail the circuit origins of each of the control and timing signals which bring about the in-formation movements or initiate operations within the sys-tem. Referring now to Fig. 8 in conjunction with Fig. 2, a state transition diagram of the state control logic 100 is shown. There are three major states: IDLE, FILL and PROCESS, the PROCESS substates being shown in the right-hand portion of Fig. 8. The IDLE state, designated by reference character 130, is entered upon hardware initialization, or at the end of the PROCESS state. Hardware initialization is effected by a BUS INIT signal generated by the microcomputer 30 upon power-up and during the execution of a RESET instruction.
The BUS INIT signal returns the control logic to the IDLE
state, resets the status register and disables all inter-rupts. To leave an initial IDLE state, the control logic 100 must receive a MOTOR READY signal from the microcomputer 30.
The MOTOR READY signal indicates that the stepper motor 44 has moved the CCD array into position for acquiring the next valid raster of data. MOTOR READY is asserted by the micro-computer 30 by performing a write operation to a motor-ready address in the interface address space of the address decod-er 126. After receiving the MOTOR READY signal, the state control logic 100 waits for a LINE SYNC signal from the CCD
clock generator circuit 108. The first LINE SYNC signal re-sults in a substate 132 wherein a potentially blurred ras-ter, obtained while the motor was still stepping, is beingtransferred into the CCD shift register 48; this raster is discarded, and the control logic waits for the next LINE
SYNC signal. When the next LINE SYNC signal is received, the control logic enters the FILL state in which a thresholded raster of data is shifted into the line store 52 for inter-mediate storage. Intermediate storage is necessary because the rate at which data is output by the window processor 24 may exceed the capabilities of the microcomputer 30 to ~3~

access it in real time. The window processor operation may be delayed to wait for the microcomputer; however, it is un-desirable to propagate such delay to the analog CCD shift register 48; therefore the line store 52 is utilized to 05 buffer the data. Coincident with entry into the FILL state, substate 134, a CCD FULL signal is generated. If enabled ~y software, an interrupt is also generated. This condition in-dicates that a raster of data has been transferred from the photodiode array 40 into the CCD shift register 48, and the motor-control software may begin t~ step the carriage 42 to the next position for acquiring another raster, while the previous raster of data is being shifted out of the CCD
shift register 48. A pixel-clock counter is set to 0 and the PIXEL CLOCK signal is enabled to the line store 52 allowing pixels to be shifted through the threshold comparator 50 to the line store 52, substate 136. When 1024 pixels have been shifted into the line store, the control logic enters a se-quence of process states wherein the data in the line store 52 is shifted pixel by pixel via the bus 66 into the window processor 24. Concurrently, a processed raster is being shifted out of the last window-processor stage into the win-dow data store 104. At the beginning of the PROCESS se-quence, substate 138, an X-coordinate counter is set to 993 (the number of pixels per raster minus 32), 993 being the X-coordinate of the pixel output from the window processor on the bus 102. Recall that each stage of the window proces-sor delays the data one raster plus two pixels to allow each stage to use data completely processed by the previous stage. Therefore, when pixel zero of the thirty-third raster is present at the input 66 of the window processor, pixel 993 of the first raster i9 present at the output of the win-dow processor 24. Note also, that since the line store 52 stores only 1024 bits and 1025 bits per raster are required, a zero bit i9 added as the 1025th bit of each raster.
Beginning the process sequence, a PIXEL CLOCK is gener-ated, one pixel of data from the line store 52 is shifted into the window processor 24 and the X-coordinate counter is incremented, substate 140. Before each new bit is clocked into the window processor 24, the WINDOW DATA READY signal output of the window processor on the bus 98 is checked by the control logic. When the WINDOW DATA READY signal is true, the clocking of data from the line store 52 to 05 the window processor is inhibited, a DATA READY flag is set for the soft~are, and an interrupt is generated, sub-state 142. The control logic 100 remains in the clock in-hibit substate 142 until a READ STROBE signal RS addressing the window data store 104 indicates to the state control logic 100 that the available data has been read by the software. Concurrently, the contents of the X-coordinate counter are latched into the X-coordinate store so that the software may read the X-coordinate of the transferred data item. The window processor and line store 52 clocks are then enabled and the processing of the raster bit string continues, substate 140.
When the X-coordinate counter reaches 1024, a substate 144 is entered wherein the NEW LTNE signal and an interrupt signal are generated, and the window processor clock is inhibited. If WINDOW DATA READY occurs when the X-coordinate is 1024, the conditlon i8 flagged and acknowledged by the software (subRtatç 14~) before a NEW LIN~ slgnal can be asserted by the state control logic 100. The microcomputer ~0 software acknowledges the NEW LINE flag by reading the window data store 104 (which initially contains meaningless information), causing the control logic to enter a substate 146 wherein the X-coordinate counter is cleared. Shifting of pixels into the window processor continues in substate 148 with pauses for the WINDOW DATA READY condition in substate 1~0, until the last pixel has been shifted into the window processor, i.e., when the X-coordinate counter reaches a count of 992, whereupon the control logic returns to the idle state 130. The state of the WINDOW DATA READY
signal is not tested after the final pixel clock of a raster is issued; if WINDOW DATA READY is true at that time, the condition is flagged at the start of the next process cycle before any clocking of the window processor occurs.
Some overlapping of the events leading to the next FILL

~737if)~

state may occur during the process states. If the MOTOR
READY signal occurs before the previous raster of data has been processed and a ~INE SYNC signal indicating a valid image transfer is generated, the control logic is 05 enabled directly from the process state to the fill state without an intervening idle stat~.
A major advantage of the picture coding system of the present invention is the ability to process raster data one pixel at a time on demand, making large bit-map storage areas unnecessary. Only pixels falling on edges of light or dark regions generate items which are transferred to the microcomputer 30 for processing. When complex images are being encoded, a considerable number of data items are transferred from the window processor to the micro-computer the time interval between the availability ofsuccessive data items for transfer to the microcomputer is highly variable and somewhat random. This is in contrast to the relatively fixed length of time required by the microcomputer to process each data item. The window proces-sor produces data items faster than the microcomputer soft-ware can process the data; therefore to avoid data overrun, the control logic halts the window processor until data output by the window processor is accepted by the microcom-puter. However, instances may also occur in which long time intervals occur between successive processable data items wherein the software would be required to wait for the window processor. Accordingly, the microcomputer fetches data from the window data store 104 on demand in response to an interrupt signal from the state control logic 100 and stores up to 256 window data items in an internal queue for subsequent processing during such intervals.
An important task of the microcomputer 30 is the encoding and listing of data from the window processor 24. Each data item represents an element of a line in the ima~e of the drawing being scanned. The output of the process is a series of lists, each list describing one contour of the image. In order to sort and compile the raster data, a method of coding contours, the Freeman code, is utilized.

73~

See H. Freeman, ~On the Encoding of Arbitrary Geometric Conf:igurations," IRE Trans.,EC-10 (2), June 1961, 260-268.
Freeman coding or chain coding is a means for the computer representation of line-drawing data, wherein an overlaid 05 square lattice is assumed and the lines of the drawing are represented by sequences of straight-line segments connecting elements of the lattice closest to the lines.
In passing from one element to the next, the slope function of each line segment is quantized as one of a set of stan-dard slopes, usually eight in number. Each element of thechain-coded contour describes a translation of the co~tour from one pixel to it's neighbor.
The sorting process of the instant invention generates iists of chain-coded contours which are converted to a series of connected vectors. The control logic 100 generates an interrupt signal to the microcomputer whenever a window containing a black center pixel is output from the window processor. The microcomputer fetches the window from the window data store in the data format previously described with reference to Figs. 3 and 4. Each window data item is utilized by the microcomputer as a table-lookup instruc-tion to obtain one or two chain-codes and/or instructions for operations to be performed on the lists of encoded contours. Each of the 256 windows is classified in the lookup table as one of eight classes, the class being deter-minative of process execution. The eight classes are as follows:

Cla~s No. Class ~escription 0 Contour Continuation 1 Single Contour Creation
2 Single Contour Completion
3 Double Contour Creation
4 Double Contour Completion Single Contour Creation; Double Contour Completion 6 Double Contour Creation; Single Contour Completion 7 Double Contour Creation; Double Contour Completion ~73703 The alternative adjectives ~start" and ~end~ are used inter-changably with "creation" and ~completion" herein to de-scribe windows or window classes. Referring to Fig. 9, examples of each class of window are shown along with the 05 corresponding window code. Representations of the chain codes generated for contour segments of continuation and creation windows are shown as arrows emanating from the windows. A chain-code list comprises a string of digits representing the shape of a contour. Each chain-code digit in the list represents a translation from one pixel on the contour to the next adjacent pixel. Referring briefly to Fig. 10, the contour segments in each window of data are initially assigned a chain code which is one of five vectors 4, 5, 6, 7 and 0 which are a subset of the well-known 8-direction chain-coding matrix. The chain-code vectors of Fig. 10 correspond with the arrows shown in Fig. 9, except for chain-code 4, a special case which will be explained later. These vectors correspond directionally with the scanning directions of the image acquisition ele-ment in that they proceed generally downward and towardthe right. Co~ntours with vertical inflections are inter-preted as two contours joined at the inflection as illus-trated in Fig. 9, classes 3 and 4. All of the ~ 6 possi-ble window patterns having a black center pixel are listed in TABLE II below in the order of the octal-coded 9-bit binary number corresponding with each window pattern. The class number of each window is listed in the second column of TABLE II; the class description of each window is listed along with the chain code(s) generated by contour continu-ations and creations. Chain codes which represent edgesare denoted by an asterisk in TABLE II.

~ 71~

TABLE II
WINDOW DESCRIPTIONS AND CODES

400 - Dot 401 1 1 Start 0 402 2 1 End 403 1 1 Start 0 404 2 1 End 405 0 Continuation 0 406 2 1 End 407 0 Continuation 0*
410 2 1 End 411 0 Continuation 0 412 4 2 End ~ 413 0 Continuation 0 414 2 1 End 415 0 Continuation 0 416 2 1 End 417 0 Continuation 0*
420 2 1 End 421 0 Continuation 0 422 4 2 End 423 0 Continuation 0 424 4 2 End 425 5 1 Start; 2 End 0 426 4 2 End 427 5 1 Start; 2 End 0*
430 2 1 End 431 0 Continuation 0 432 4 2 End 433 0 Continuation 0 434 4 2 End 435 5 1 Start; 2 End 0 436 4 2 End 437 0 Continuation 0*
440 1 1 Start 5 441 3 2 Start 0 5 442 0 Continuation 5 443 3 2 Start 0 5 444 0 Continuation 5 445 6 2 Start; 1 End 0 5 446 0 Continuation 5 447 6 2 Start; 1 End 0* 5 450 0 Continuation 5 451 6 2 Start; 1 End 0 5 452 5 1 Start; 2 End 5 453 6 2 Start; 1 End 0 5 454 0 Continuation 5 455 6 2 Start; 1 End 0 5 456 0 Continuation 5 457 6 2 Start; 1 End 0* 5 460 2 1 End 461 0 Continuation 0 462 4 2 End 463 0 Continuation 0 ~X7;~'70~

TABLE II (Continued) WINDOW WINDOW CLASS CHAIN CHAIN

465 5 1 Start; 2 End 0 466 4 2 End 467 5 1 Start; 2 End 0*
470 2 1 End 471 0 Continuation 0 472 4 2 End 473 0 Continuation 0 474 4 2 End 475 5 1 Start; 2 End 0 476 4 2 End 477 0 Continuation 0*
500 1 1 Start 6 501 3 2 Start 0 6 502 0 Continuation 6 503 3 2 Start 0 6 504 0 Continuation 6 505 6 2 Start; 1 End 0 6 506 0 Continuation 6 507 6 2 Start; 1 End 0* 6 510 0 Continuation 6 511 6 2 Start; 1 End 0 6 512 5 1 Start; 2 End 6 513 6 2 Start; 1 End 0 6 514 0 Continuation 6 515 6 2 Start; 1 End 0 6 516 0 Continuation 6 517 6 2 Start; 1 End 0* 6 520 0 Continuation 6 521 6 2 Start; 1 End 0 6 522 5 1 Start; 2 End 6 523 6 2 Start; 1 End 0 6 524 5 1 Start 2 End 6 525 7 2 Start; 2 End 0 6 526 5 1 Start; 2 End 6 5Z7 7 2 Start; 2 End 0* 6 530 0 Continuation 6 531 6 2 ~tart; 1 End 0 6 532 5 1 Start; 2 End 6 533 6 2 Start; 1 End 0 6 534 5 1 Start; 2 End 6 535 7 2 Start; 2 End 0 6 536 5 1 Start; 2 End 6 537 6 2 Start; 1 End 0* 6 540 1 1 Start 6 541 3 2 Start 0 6 542 0 Continuation 543 3 2 Start 0 6 544 0 Continuation 6 545 6 2 Start; 1 End 0 6 546 0 Continuation 6 547 6 2 Start; 1 End 0* 6 550 0 Continuation 6 551 6 2 Start; 1 End 0 6 lX73703 TABLE Il (Continued) WINDOW WINDOW CLASS CHAIN CHAIN
CODE CLASS DESCRIPTIO~ CODE 1 CODE 2 05 552 5 1 Start; 2 End 6 553 6 2 Start; 1 End 0 6 554 0 Continuation 6 555 6 2 Start; 1 End 0 6 556 0 Continuation 6 557 6 2 Start; 1 End 0* 6 560 0 Continuation 6*
561 6 2 Start; 1 End 0 6*
562 5 1 Start; 2 End 6*
563 6 2 Start; 1 End 0 6*
564 5 1 Start; 2 End 6*
565 7 2 Start; 2 End 0 6*
566 5 1 Start; 2 End 6*
567 7 2 Start; 2 End 0* 6*
570 0 Continuation 6 *
571 6 2 Start; 1 End 0 6*
572 5 1 Start; 2 End 6*
573 6 2 Start; 1 End 0 6 574 0 Continuation 6~
575 6 2 Start; 1 End 0 6*
576 0 Continuation 6*
577 3 2 Start 0* 6*
600 1 1 Start 7 601 1 1 Start 0 602 0 Continuation 7 603 1 1 Start 0 604 0 Continuation 7 605 0 Continuation 0 606 0 Continuation 7 607 0 Continuation 0*
- 610 0 Continuation 7 611 0 Continuation 0 612 5 1 Start; 2 End 7 613 0 Continuation 0 61~ 0 Continuation 7 615 0 Continuation 0 616 0 Continuation 7 617 0 Continuation 0*
620 0 Continuation 7 621 0 Continuation 0 622 5 1 Start; 2 End 7 623 0 Continuation 0 624 5 1 Start; 2 End 7 625 5 1 Start; 2 End 0 626 5 1 Start; 2 End 7 627 5 1 Start; 2 End 0*
630 0 Continuation 7 631 0 Continuation 0 632 5 1 Start; 2 End 7 633 0 Continuation 0 634 5 1 Start; 2 End 7 635 5 l Start; 2 End 0 636 5 1 Start; 2 End 7 637 0 Continuation 0*

~7~03 TABLE II (Continued) WINDOW WINDOW CLASS CHAIN CHAIN

05 640 3 2 Start 5 7 641 3 2 Start 0 5 642 6 2 Start; 1 End 5 7 643 3 2 Start 0 5 644 6 2 Start; 1 End 5 7 645 6 2 Start; 1 End 0 5 646 6 2 Start; 1 End 5 7 647 6 2 Start; 1 End 0* 5 650 6 2 Start; 1 End 5 7 651 6 2 Start; 1 End 0 5 652 7 2 Start; 2 End 5 7 653 6 2 Start; 1 End 0 5 654 6 2 Start; 1 End 5 7 655 6 2 Start; 1 End 0 5 656 6 2 Start; 1 End 5 7 657 6 2 Start; 1 End 0* 5 660 0 Continuation 7 661 0 Continuation 0 662 5 1 Start; 2 End 7 663 0 Continuation 0 664 5 1 Start; 2 End 7 665 5 1 Start; 2 End 0 666 5 1 Start; 2 End 7 667 5 1 Start; 2 End 0*
670 0 Continuation 7 671 0 Continuation 0 672 5 1 Start; 2 End 7 673 0 Continuation 0 674 5 l Start; 2 End 7 675 5 1 Start; 2 End 0 676 S 1 Start; 2 End 7 677 0 Continuation 0*
700 1 1 Start 6 701 3 2 Start 0* 6*
702 0 Continuation 6 703 3 2 Start 0* 6 704 0 Continuation 6 705 6 2 Start; 1 End 0* 6*
706 0 Continuation 6 707 0 Continuation 6*
710 0 Continuation 6 711 6 2 Start; 1 End 0* 6*
712 5 1 Start; 2 End 6 713 6 2 Start; 1 End 0* 6*
714 0 Continuation 6 715 6 2 Start; 1 End 0* 6*
716 0 Continuation 6 717 0 Continuation 6*
720 0 Continuation 6 721 6 2 Start; l End 0* 6*
722 5 1 Start; 2 End 6 723 6 2 Start; 1 End 0* 6*
724 5 1 Start; 2 End 6 725 7 2 Start; 2 End 0* 6*

1~7~70~

TABLE II (Continued) WINDOW WINDOW CLASS CHAIN CHAIN

05 726 5 1 Start; 2 End 6 727 5 1 Start; 2 End 6*
730 0 Continuation 6 731 6 2 Start; 1 End 0* 6*
732 5 1 Start; 2 End 6 733 6 2 Start; 1 End 0* 6*
734 5 1 Start; 2 End 6 735 7 2 Start; 2 End 0* 6*
736 5 1 Start; 2 End 6 737 0 Continuation 6*
740 1 l Start 6 741 3 2 Start 0* 6*
742 0 Continuation 6 743 3 2 Start 0* 6*
744 0 Continuation 6 745 6 2 Start; 1 End 0* 6*
746 0 Continuation 6 747 0 Continuation 6*
748 0 Continuation 6 751 6 2 Start; 1 End 0* 6*
752 5 1 Start; 2 End 6 753 6 2 Start; 1 End 0* 6 754 0 Continuation 6 755 6 2 Start; l End 0* 6*
756 0 Continuation 6 757 0 Continuation 6*
760 0 Continuation 6*
761 0 Continuation 0*
762 5 l Start; 2 End 6*
763 0 Continuation 0*
764 5 1 Start; 2 End 6*
765 5 l Start; 2 End 0*
766 5 1 Start; 2 End 6*
767 4 2 End 770 0 Continuation 6*
771 0 Continuation 0*
772 5 l Start; 2 End 6*
773 0 Continuation 0 774 0 Continuation 6*
775 0 Continuation 0*
776 0 Continuation 6*
777 - Blank ~h~73703 The window data items are handled generally by assigning chain-code digits in accordance with the stored data as listed in TABLE II, and sorting the chain-code digits into lists. The digits accumulated in each list represent the 05 chain code for one contour in the image being scanned.
The digits are assigned to lists by their order of occur-rence along each raster of data; the relative order of the lists being changed when an intersection, branch, or completion of a contour occurs. Instructions for reordering the chain-code lists are contained in the software modules associated with each of the classes as described hereinafter.
The software is partitioned into two parallel tasks.
One task is interrupt driven from the control hardware and controls the stepper motor, thus positioning the CCD
linear array. The second and primary software task trans-forms the window data from the window processor into a series of lists encoding the lines and edges of the scanned image. The X-coordinate along the current raster of a window is also supplied by the control logic. The Y-coordinate is maintained in the software by counting the number of rasters processed. The X-Y coordinate pair designates the origin of a contour. Chain-code lists are built for succes-sive rasters by ordering the lists left to right in the same order as th~ lines and edges crossing the current raster in a scan. Thus, for each window corresponding with a contour crossing the raster, the appropriate chain code for that window is appended to the end of the corresponding chain-code list. Different classes of windows may call for creating one or two chain-code lists, deleting one or two lists, or any combination of these actions. One window class, the continuation, is by far the most common class encountered in a typical image, and merely adds an-other chain code to the appropriate list.
Referring now to Figs. 11 and 12, an analogy of the process of list manipulation of the instant invention is illustrated wherein a "chute" 160 is positioned over a first one 162 of many ordered "bins" 161-166. The bins ~73703 161, 163 shown with dashed lines represent lists which have been previously removed from the active ordered list of bins as will be explained later. The upper portion of Fig. 11 represents a plurality of rasters of data such 05 as the rasters 168, 171, 174 having six interconnected contours 161'-166' represented as chain-code vectors which have been stored previously in the bins 161-166. The bins 161-166 represent lists in the microcomputer store. Each line segment forming the contours 161'-166' of Fig. 11 is annotated with the associated chain-code number. Inter-mediate points or pixels on a contour are shown as dots;
the start of each contour is shown as an open dot. The contours 161'-166' are representative of the bit-map image s~own in Fig. 12. The lower-most raster 174 represents the raster currently being processed; subsequent rasters are not shown. The state of the process is described by a list called the bin list which is initially empty. Each element of the list represents one contour that crosses the raster being processed. The order of elements in the list corresponds with the left-to-right order of contours crossing the raster currently being processed. When the first contoux 162'crossing the current raster 174 is encoun-tered, (pixel 176) a chain code 6 is dropped down the chute 160 into the bin 162, representing storage of the chain code in a list. The chute 160 is then advanced to the next bin 164 to await the next contour crossing as illustrated by the chute 160' in dashed lines. Consider now that the next window 178' on the raster represents a contour cre-ation. The new contour 178' lies on the current raster 174 to the left of the contour 164' stored in the bin 164 under the current chute. Similarily, the new contour 178' must be located to the right of the contour 162' previously processed. Therefore, a new bin 178 must be created and inserted before the bin 164 under the chute 160', and the chute then repositioned over the new bin 178 for deposit~ng the first chain code of the new contour 178'. Only windows which are a continuation class can be stored in an existing bin. Therefore, a creation-class window which represents 1~7~370;~

the start of a new contour must lie somewhere to the left of the current bin as marked by the chute. Similarily, if a completion-class window is encountered, the bin being completed must be under the chute. Continuing the analogy, 05 when a completion-class window is encountered, instead of dropping a chain code into the bin, a ~lid" is dropped sealing the current bin and removing it from the bin list, as illustrated in Fig. 11 by the bins 161, 163 shown in dashed lines previously deleted from the active bin list 10 when the corresponding contours 161', 163' were completed.
One window may require a combination of actions, e.g., a class 6 window 180 at the juncture of three contours 163'-165' called for double contour creation and single contour completion, i.e., the then current bin 163 was 15 deleted and two new bins 164,165 were inserted into the bin list.
Three pointers or markers, LEFT, RIGHT and CURRENT, are used to control the bin list and are represented in Fig. 11 as flags labeled, respectively L, R and C. The LEFT marker points to the left-hand bin or beginning of the list, the RIGHT marker to the right-hand bin or end of the list, and th~ CURRENT marker to the chute, the latter marking the pos~ion in the list where raster processing is being done. Each element of the bin list is itself a list of chain codes. The chain codes alone are only a mea-sure of the shape of a contour; therefore, the chain-code lists include the absolute X-Y coordinate pair which defines the starting point of the contour on the bit-map image, or the location where the chain-code list defining the contour was created.
Fach of the 256 windows uniquely defines which chain codes, if any, are to be listed or stored in a bin. For example, the 418 window, Fig. 9, class one, defines the beginning of a contour with the first chain code being 35 O. Assume that a second window, the 6208 window, Fig. 9, class 0, appears adjacent and to the right of the 418 window, and overlapping the right-hand two-thirds of the 4018 window. These two windows, in succession, define a ~;~737~3 `

chain-code list comprising the codes 0, 7. Windows which create two contours define two chain codes; for example, the 6408 window, Fig. 9, class 3, defines the chain codes
5 and 7, each representing the start of a new contour.
05 As previously described, the state of the process of the instant invention is defined by the bin list and the pointers LEFT, RIGHT, and CURRENT. Referring again to Fig.
11, two additional elements utilized to maintain the lists are a special-mode bistable or flag 182 and a reverse stack tRS) 184 which is a last-in, first-out (LIFO) store. The reverse stack 184 and the special-mode flag are utilized to augment the listing of positively sloped contours. Refer-ring to Fig. 13, in conjunction with Fig. 11 a negatively sloped line 190 is scanned left-to-right and top-to-bottom to produce a class 1 single creation window 418 followed by a string of continuation windows 6218, 5208, 7148, 4058, 6318, 5208, 5148 and a single completion window 4048 forming one chain-coded contour 00660066. A positively sloped line 192 on the other hand, generates a sequence of two-start 20 and two-end windows: 5018, 4618, 4208, 5468, 5018, 4638, 4248, 5068, and 4048, resulting in four contours each having two chain codes. Positively sloped lines could thus poten-tially generate many very short contours instead of one long contour as in negatively sloped lines. The chain-code accumulating algorithm modifies the listing of positively sloped contours by postponing the actual start of two lists when a class 3, two-start window having a horizontal right-going segment such as the 518 window (see Fig. 9) is en-countered. This transformation is implemented by using the reverse stack 184 to accumulate and reverse the horizon-tal portion of the contour for subsequent listing. Consider-ing for example the 518 window, the first chain code pushed onto the reverse stack corresponds with the left-hand, down-going vector of that window, which chain code is pushed onto the stack as it normally would be stored in a bin, as the chain code 6. The horizontal element of the 518 window is then reversed (by adding 4 mod 8) and pushed onto the stack as the chain code 4. Each successive horizontal continuation is likewise reversed and pushed onto the stack until a non-horizontal code or a window which is not a continuation class is encountered, either of which events terminates the special mode. When a 05 special-mode terminator is encountered, a subroutine UNWI~D
is called to build a chain-code list by storing the contents of the reverse stack in the list, reversing the order of the chain in the process. Thus, referring still to Fig.
13, the first two windows 518 and 4618 of the positively sloped contour 192 which where initially stored in the reverse stack as chain codes 6,4,4 are listed as 4,4,6.
The new bin may be appended to an exis~ing bin depending upon the configuration of the terminating window. The entire positively-sloped contour 192 of Fig. 13, is thus stored 15 as chain codes 44664466. Referring to Fig. 11, the left-hand contour 162' illustrated as being stored in the LEFT bin 162 is comprised of a segment 194 which was initially stored in the reverse stack 184. The contour segment 194 originated at a class 3 two-start pixel 196 and was pushed onto the 20 reverse stack 184 as chain codes 5,4,4. Subsequently, upon termination of the special mode, the line segment 194 was popped from the reverse stack 184 and stored as chain codes 4,4,5 in the bin 162. The special mode can be terminated by a class 0 non-horizontal window, or by any class 2,4,5,6 or 7 window.
The chain-code lists are a compact, accurate representa-tion of the edge and line contours of a bit map, and repre-sent a one-to-one translation of the image, but not an abstraction thereof. An abstract representation, i.e., vectors, is a close approximation of the chain codes.
Accordingly, as each chain-code list representing one con-tour is completed, the list is converted to vectors, thereby further compressing the original image data. For example, referring to Fig. 14, an original image of a contour is represented by a bit map 198 which is converted to a chain-code representation 200 forming a list 444544454445444.
The initial software description of the image in the picture coding system of the instant invention is in the form of 1~73703 such chain-code lists. When the contour is terminated, the list is passed to a program segment LINE FINDER which converts the list to vectors such as the vector 202.
The currently described embodimen~ of the invention 0S is implemented in part in the microcomputer 30 software which is listed herein in Appendix I. The so~tware listing of Appendix I is written in UCSD Pascal language. The Pascal language is well known in the art and no detailed explana-tion thereof is included herein; see Quick Pascal by D. L.
Matuszek, Wiley 19~2. The microcomputer implemented portion of the process of the instant invention is described with reference to Figs. 15-34 which are flow diagrams showing the structure and general sequence of operations of the Appendix I listing. Referring to Fig. 15 which should be viewed during the description in conjunction with Figs. 2 and 8, an overview of the process of the instant invention is shown wherein one document is scanned and encoded between the START 204 and STOP 206 designators, the encoded document being output to a user device as represented by block 208.
The process is initialized, block 210, on power up or reset by reading program data into the microcomputer 30 and ini-tializing the state control logic 100 as previously de-scribed with reference to Fig. 8. A rewind procedure, block 212, returns the CCD carriage 42 to a reference position for starting a scan of the document, and interrupts are enabled, block 214. Dashed lines connecting the interrupt enable block 214 with blocks 216, 218, the motor 44 stepping rou-tines, indicate that the block 216, 218 operations are interrupt driven and operate in a multiprogramming mode in parallel with the contour processing routines represented by the remainder of the Fig. 15 flow diagram. The CCD full interrupt handler, block 216, initiates stepping of the stepper motor 44, and enables the real-time clock interrupt handler, block 218. The latter, in response to interrupt signals from the master clock 106, times the motor move-ments, initiates additional motor steps and issues the MOTOR READY signal when the motor has moved the CCD array into position for acquiring the next valid raster of data.

1~73703 Returning to the main program, decision block 220, when the Y-position count maintained by the software reaches 1400, the entire document has been scanned, i.e., 1400 rasters acquired, and the process stops 206. If the Y-posi-05 tion is less than 1400, the program proceeds to block 222 and reads the status register of the state control logic to determine if processing can proceed. Conditions such as LIGHT ON (document-illuminating lamps 36) and CARRIAGE
END are monitored, as well as process events such as NEW
LINE, block 224, and DATA R~ADY, block 228. If the NEW
LINE condition is asserted by the state control logic, the software resets the chute or CURRENT bin pointer, block 226, to the LEFT bin and increments the Y-position count.
If the DATA READY signal is asserted, the program fetches the next window of data from the window data store 104 or from the FIFO queue previously described, and classifies the new window of data, block 230. ~in manipulation opera-tions are initiated in block 232, i.e., new bins are creat-ed, if required; chain codes corresponding with contour segments represented by the window of data classified in block 230 are stored in the appropriate bin of the bin list; and other bin manipulations are initiated in accor-dance with the class of the window. During bin manipulation, if a contour termination or bin end occurs~ block 234, the completed contour is passed to the LINE FINDER subrou-tine, block 236, output is generated as indicated by block 208, and the program returns to the start of the loop at decision block 220. A bin end may occur in a class 1, 2 or 4-7 window; if there is no bin end, as may be the case in a class 0-4 or 6 window, then control passes directly to block 220. In each of the blocks 216, 218, 230, 232, 236 of Fig. 15, other figures of the drawing are noted to which reference is made infra in a more detailed descrip-tion of certain of the operations described generally with reference to Fig. 15; the convention is utilized throughout the description of the flow diagrams.
Referring to Figs. 15 and 16, block 230, a window of data is classified according to one of eight classes 0-7 ~,x7~370~

as shown. Chain codes are inserted into bins or chain-code lists where required in accordance with the class of the window, and lists manipulated accordingly. Subroutines performing operations associated with each of the eight 05 classes of window data are described with reference to Figs. 17-24. Figs. 25-29, 30, 31 and 32 describe open sub-routines called either by the class 0-7 subroutines of Figs. 17-24 or by another one of the open subroutines, or both. In Figs. 25-29, 30, and 31-34, the circled symbol "R" means a conventional return of control to the calling program or subroutine. In Pascal, control conventionally returns to the calling program or subroutine upon completion - of the procedure or function comprising a sequence of state-~ents enclosed by the "fat parentheses," BEGIN . . . END;
there is no explicit RETURN statement in Pascal. For exam-ple, in Fig. 17, block 254 includes a single call of the subroutine NEW8IN, Fig. 26, after the execution of which control is returned to block 256. Block 256 includes two successive calls of the subroutine INSERT, Fig. 27. After the first call and execution of the subroutine INSERT, control is returned to block 256; after the second, to block 258.
Referring to Fig. 17, a class 0 continuation window normally adds a chain code to the CURRENT pin, block Z40, and then advances the CURRENT bin pointer to the next bin, block 242. An example of the foregoing operation is illus-trated in Fig. 11 by the ~torage of the pixel 240' in the bin 164. If the chain code being stored represents a hori-zontal line, decision block 244, i.e., the chain code is 0, then the CURRENT bin pointer is not advanced because the next pixel will be a part of the same contour and will be stored in the same bin. An example of the foregoing operation is seen in Fig. 11 as storage of the pixel 244'.
If the special mode flag is enabled, decision block 246, and the line segment is horizontal, decision block 248, a pointer STKTOP which addresses the next available storage location of the LIFO reverse stack RS is incremented by one, block 249, and the program pushes a chain code 4 onto 7~7~3 the reverse stack, block 250. An example of the foregoing in Fig. 11 is the pixel 250'. The NO branch from the deci-sion block 248 indicates that a special mode terminator has been encountered. The program responds, block 252, 05 by unwinding the reverse stack into a new bin N1, making another new bin, block 254, inserting the new bin N1 and then the new bin N2 before the CURRENT position in the bin list, block 256, and adding the chain code to the new bin N2 which became the CURRENT bin when it was inserted into the bin list. Finally, in block 260, the CURREN~ bin pointer is advanced to the next bin.
Referrin~ to Fig. 18, the processing of a class 1, one-start window begins, block 262, by making a new bin and then inserting the new bin before the CURRENT position in the bin list, block 264. If the window is not a single pixel, decision block 266, the chain code is added to the new bin, block 268; the CURRENT bin pointer is advanced to the next bin, block 270, if the chain code is not hori-zontal, decision block 272. An example of the foregoing 20 in Fig. 11 is the pixel 268' which is a 4408 window. If the window is a single pixel, decision block 266, i.e., a 48 window, it is handled as a special case of the class 1, one-start window by inhibiting chain-code siorage and sending the bin to the LINE FINDER, block ~74.
Referring to Fig. 19, a class 2 single contour termina-tion window is handled simply by sending the CURRENT bin to the LINE FINDER, block 276, if the special mode is not enabled, block 278. If the special mode is enabled, the reverse stack unwinds into a new bin, block 280, and the CURRENT bin pointer is advanced to the next bin, block 282.
Referring now to Fig. 20, a class 3, two-start window enables the special mode flag when the chain code of the right-hand line segment of the window is 0 indicating a ~5 horizontal line segment, decision block 284. To set the special mode, the reverse stack is cleared, block 286, the left-hand code of the window is pushed onto the stack and the right-hand or horizontal contour segment is reversed 1~:73'7~13 by adding 4 mod 8 and pushed onto the stack as chain code 4, block 288. The special mode flag is then enabled, block 290. An example of special mode in~tion is seen in Fig.
11 wherein the pixel 196 is pushed onto the reverse stack 05 as chain codes 5, 4, and appropriately, the special-mode flag 182 is raised. Continuing with Fig. 20, if the right-hand code of the class 3, two-start window is not horizon-tal, block 284, the program makes a first new bin N1, block 292; inserts the new bin N1 before the CURRENT bin, block 293; adds the l~ft-hand chain code to the Nl bin, block 294; and advances the C~RRENT bin pointer to the next bin, block 296. A second new bin N2 is created, block 298, ana inserted before the CURRENT bin, block 299; the right-hand chain code is added to the N2 bin, block 300; and the CURRENT bin pointer advanced to the next bin, block 302.
Thus two new lists are created and the chain codes for the 2-start window stored therein.
Referring to Fig. 21, for a cla~s 4, double contour termination not in special mode, decision block 304, the terminated contours are passed to the LINE FINDER subrou-tine, blocks 306, 308. If the special mode is enabled, the reverse stack unwinds into a new bin, block 310, and the new bin is appended to the next bin in the bin list, block 312. The CURRENT bin, i.e., the bin into which the reverse stack was unwound is deleted from the bin list, block 314, the contents thereof having been stored in the next bin, and the CURRENT bin pointer is then advanced to that next bin, block 316.
Referring now to Fig. 22, for a class 5, single contour creation, double contour termination window, a new bin N1 is first created for the new contour, block 318. If the special mode is not enabled, decision block 320, the two terminated contours are passed to the LINE FINDER sub-routine, blocks 322, 324, the new bin N1 is inserted before the CURRENT bin in the bin list, block 326, and the chain code of the new contour is stored in the new bin which in the INSERT subroutine became the CURRENT bin, block 328. If the special mode is enabled, the reverse stack 1;~7;~703 unwinds into a new bin N2, block 330, the CURRENT bin pointer is advanced, block 332, and the CURRENT bin which is the single termination contour is passed to the LINE
FINDER subroutine, block 334. The new bin Nl is then in-OS serted before the CURRENT bin, block 326, and the chaincode for the new contour added to Nl, block 328.
Referring to Fig. 23, for a class 6, 2-start, l-end window, the program first makes two new bins Nl and N2, block 336. At this time the new bins Nl and N2 are only allocated but not connected, i.e., not inserted into the bin list. If special mode is enabled, decision block 338, the program unwinds the reverse stack into another new bin N0, block 340, and advances the CURRENT bin pointer to the next bin, block 342. If the special mode is not enabled, the CURRENT bin is passed to the LINE FINDER sub-routine, block 344. The new bin Nl is inserted before the CURRENT bin, block 346, the left-hand chain code forming one of the new contours is added to Nl, block 348, and the CURRENT bin pointer is advanced to the next bin, block 350. The new bin N2 is then inserted in the list before the CURRENT bin, block 352, the right-hand chain code which starts one of the new contours is then added to N2, block 354, and the CURRENT bin pointer is advanced, block 356, if the chain code stored in the new bin N2 does not repre-sent a horizontal line segment, decision block 358. Itis noted that the CURRENT bin pointer is always advanced after the first chain code is stored in bin Nl because the first chain code cannot be 0, i.e., a horizontal line.
With the special mode enabled in class 6 and assuming that only two bins, LEFT and RIGHT, were inserted in bin list prior to creation of the new bins N0, Nl, N2, the order of bins in the list after processing the class 6 window would be: LEFT, N0, Nl, N2, RIGHT, with the CURRENT bin pointer pointing either to N2 or to RIGHT, depending on whether or not the right-hand code was 0.
Referring to Fig. 24, the class 7, 2-start, 2-end window subroutine is identical with the class 6 subroutine, Fig.
23, except that in each branch of the subroutine following ~73~:)3 the special mode decision block 360 an additional bin having a terminated contour is passed to the LIN~ FINDER, blocks 362, 364.
As previously described, the bin is a data structure 05 used to represent a contour of an image acquired from a document. When a contour is completely acquired, the con-tents of the bin are converted to vectorial data, trans-mitted to a user device, and the bin deleted. The data structure of the bin is as follows:

TYPE
B I N= ~ECORD
NEXT: A BIN;
LAST: ~BIN;
ID: INTEGER;
XSTART: INTEGER;
YSTART: INTEGER;
FIRSTBUF: ~ BUFFER;
LASTBUF: J\BUFFER;
NEXT i~ a pointer to the next bin, i.e., the bin to the right on the picture; LAST is a pointer to the last bin in the list. NEXT and LAST are NIL if there is no next or last bin. ID is a unique integer identification of the bin; XSTART and YSTART are the X and Y coordinates of the window that created the bin; and FIRSTBUF and LASTBUF are pointers to the first and last chain-code buffers in the bin. The bin list may include a plurality of bins in a doubly-threaded structure.
A "buffer" is a storage element in a bin for storing chain codes. A bin comprises one or more buffers, each buffer having locations for storing 18 chain codes, plus storage locations for buffer pointers and descriptors.
A bin may be comprised of a plurality of buffers (FP) in a doubly-threaded structure. The data structure of a chain-code buffer is as follows:

1;~73703 TYPE
BU~FER=RECORD
NEXT: /\BUFFER;
LAST: A BUFFER;
05 NUMUSED: INTEGER;
CODES: ARRAY l0...17~ OF CHAR

NEXT is a pointer to the next buffer in the bin, or NIL;
LAST is a pointer to the last buffer in the bin, or NIL, NUMUSED is the number of chain codes stored in the buffer;
and CODES is the array of chain codes, in ascending order, stored in the buffer. BP and FP are alternative ~orms, respectively, of the terms BIN and BUFFER.
Referring now to Fig. 25, the ADDCODE subroutine takes a chain code as an argument and appends that chain code to the CURRENT bin. Block 370 gets the address of the last buffer of the CURRENT bin. The decision block 372 a~ks if all of the chain-code storage locations in the buffer have been used. If not, block 374, the program stores the new chain code in the array location addressed in block 370 and increments the NUMUSED field by 1, block 376. If all 18 storage locations of the buffer have been used, a new buffer must be allocated, block 378, and appended to the list as the last buffer, blocks 380, 38Z. In block 384, the NUMUSED field of the new buffer is set to zero, and the new chain code is stored in the data array C~DES
of the newly allocated buffer, block 374.
Four bin manipulat~ on subroutines are called by the window handling routines, viz.: NEWBIN, INSERT, UNWIND
and DELETE. NEWBIN creates a new chain-code bin; INSERT
threads the new bin into the bin list; UNWIND completes the two-start backtracking procedure; and DELETE removes a chain-code bin from the bin list.
Referring to Fig. 26, the NEWBIN subroutine, block 386, allocates a new chain-code bin. In block 388, the NEXT
and LAST pointers are set to NIL which indicates that the new bin is not threaded into the bin list. In block 390, the X and Y coordinate storage locations are set to a 1;~7~370~

current value from variables kept in the main program, effectively locating the starting point of a new contour.
A new buffer is allocated in block 392 but not threaded into the list, the LAST and NEXT pointers of the buffer 05 being set to NIL, block 394. The NUMUSED field of the new buffer is set to zero, block 394, and the new bin i~ pointed at the newly allocated buffer, block 396.
Referring now to Fig. 27, the INSERT subroutine takes the specified new chain-code bin and inserts it before the CURRENT bin; it maintains the LEFT and RIGHT pointers to the master list. The first decision block 400 of the INSERT subroutine asks if the bin list is empty. If it is empty, block 402 is executed. The LEFT marker must, by definition, point to the left-most bin in the list, and RIGHT to the right-most bin. In this instance, the newly allocated bin being inserted into the bin list will be the only bin listed, therefore, the LEFT and RIGHT mark-ers must take the address passed by the new bin. If the list is not empty, the decision block 404 asks if CURRENT
equals NIL. If true, all bins in the list have already been processed and the new bin is being inserted at the right-hand end of the list, blocks 406-408. This condition occurs if a contour creation appears on the raster being processed to the right of all other contours intercepting the raster. In the block 406, the NEXT field of the current RIGHT bin takes the address of the new bin BP; in block 407, the LAST pointer of the new bin ~P takes the address of the current RIGHT bin; and in block 408, the RIGHT marker is moved to the new bin BP. The NO branch from the decision block 404 indicates that the new bin is to be inserted between existing bins in the list. The block 410, utilizing a temporary pointer TP, establishes pointer connections between the CURRENT bin and the new bin BP, and also between the new bin and the bin to the right of the new bin. If TP equals NIL, block 412, indicating that there are no bins before the CURRENT bin, then the new bin becomes the LEFT bin, block 414. If there are bins in the list before the CURRENT bin, then block 416 establishes that the bin lX737~

which precedes the CURRENT bin has a new right-hand neighbor which is the new bin BP. Block 418 connects the new bin to its left neighbor. Finally, block 420, the new bin becomes the CURRENT bin.
05 Referring now to Fig. 28, the UNWIND subroutine takes the contents of the LIFO reverse stack RS in which chain codes are stored, and copies the stack into a new bin, storing the chain codes in the reverse order of their storage in the stack, 18 per buffer. The UNWIND operation terminates the special mode initiated by a class 3 double-creation window (Fig. 20). Block 422 calls the NEWBIN
subroutine to create th~ new bin. Variables J and I are set to zero. J is an integer variable which increases by 18 after each buffer o~ the new bin is filled with chain codes. I is an integer variable which starts at zero and increases by 1 each time a buffer of 18 chain codes is stored, block 424. STKTOP is an integer variable which varies from 1 to N and points to the storage element in the array STACK, i.e., the reverse stack, which was last filled by a chain code; therefore, STKTOP is a measure of the number of chain codes stored in the reverse stack.
The decision block 426 asks if a sufficient number of buf-fers have been processed to store the stack. If not, block 428 is entered. The first statement of blo~k 428 gets the address of the last buffer in the new bin; this buffer is referenced via the field LASTBUF. The first time block 428 is executed after calling UNWIND, the last buffer is the buffer allocated by the NEWBIN subroutine called in block 422; in subsequent iterations of block 428, the last buffer is allocated internally in the UNWIND subroutine as will be seen below. The second statement of block 428 sets a variable K, the total number of chain codes remaining to be copied, to STKTOP minus J. J is still zero at this point, the first iteration of block 428. If K is greater than 18, block 430, then K is set to 18 in block 432. When the program enters block 434 the variable K will be one of two values, viz.: either 18 which is the maximum number of chain codes in a buffer, or the number of chain codes 1;~7;3~3 remaining to be copied from the last buffer in the stack.
In block 434, a variable M is set to zero. M varies from zero to K-l and thus addresses the element of the array CODES of the buffer where the next chain code is to be 05 copied from the stack. In block 436, if M is less than K then block 437 is entered wherein one chain code is copied from the reverse stack to the new bin by the statement shown. (J+M) is the total number of chain codes previously copied from the stack, therefore [STKTOP-(J+M)] selects the storage element of the stack from which a chain code is to be copied into the Mth storage location of the bufer.
When the chain code is copied, M is incremented by one, block 438 and the program loop comprising blocks 436-438 reiterates until up to 18 chain codes are copied from the stack into one buffer. When M equals K, block 436, block 440 is entered and J is increased by K, thereby adding the number of chain codes copied by the inner loop 436-438 just exited, to the total number of chain codes copied prior to entering that loop. In decision block 442, if J is less than STKTOP, then block 444 is entered wherein another buffer FP is allocated and appended onto the list of buffere in the new bin. The four statements of block 444 which append the new buffer onto the bin may be read in order as follows: the old last buffer now has a next buffer FP; the new buffer FP has a preceding buffer which was the old last buffer of the bin; the new buffer is made the last buffer of the bin; and there are no more buffers after the new buffer. One new buffer is created for each iteration of the outer loop of the UNWIND subroutine which includes the block 444. The NO branch is taken from the block 442 when unwinding of the stack into the new bin i8 completed, and block 424 is entered wherein the variable I is incremented by 1. If stack unwinding is completed, I is greater than tSTKTOP-1)/18 and the program takes the YES branch from block 426 to block 446 and the INSERT sub-routine is called to thread the new bin into the bin list.
Block 448 disables the special mode and the subroutine is exited.

1~ 7()3 Referring now to Figs. 29 and 29A, in the DELETE subrou-tine, the LEFT, RIGHT and CURRENT markers of the bin list and the bin pointers are altered to unthread or deallocate a bin BP from the bin list. The decision block 450 asks 05 if the bin which is being deleted has any left-hand neigh-bors in the bin list. A YES branch from the block 450 indi cates the condition illustrated in Fig. 29A which shows a bin list of 3 bins 451-453 which have the markers, respec-tively, LEFT, CURRENT, and RIGHT. The NEXT field of each bin points to its right-hand neighbor, if any; and the LAST field of ~ach bin points its left-hand neighbor, if any. The block 454 of the DELETE subroutine, Fig. 29, as-signs the contents of the NEXT field of the CURRENT bin to the NEXT field of its left-hand neighbor, thus effec-tively deleting the next field of the CURRENT bin fromthe bin list. If the bin being deleted has no left-hand neighbors, then the LEFT marker is assigned to the right-hand neighbor of the bin being deleted, block 456. The decision block 458 asks if the bin being deleted has any right-hand neighbors. If yes, the LAST field of the right-hand neighbor receives the contents of the LAST field of the bin being deleted, block 460. If the bin being deleted has no right-hand neighbor, the RIGHT marker is assigned to the left-hand neighbor of the bin being deleted, block 462. If the bin being deleted is the CURRENT bin, block 464, the CURRENT bin pointer is advanced to the next bin, block 466, and the bin being deleted is deallocated, block 4~8.
Referring now to Figs. 30 and 30A, the LINE FINDER sub-routine first sets a start point (SX, SY) to the XSTART
and YSTART coordinates of the bin being converted to vec-tors, block 470. If the bin is empty, block 471, the program transmits a single point having coordinates SX, SY to the user device, block 472, and deletes the bin, block 474, by calling the DELETE subroutine. The transmission of a single point is a special case of the class 1, single-contour creation subroutine, Fig. 18, block 274, which transmits a contour comprising a single pixel. The NO branch ~7~

from block 471 enters the decision block 476; if there are chain codes remaining to process, the program gets a next endpoint (EX, EY), block 477, and outputs to the user device a vector which extends from ~SX, SY) to (EX, 05 EY), block 478. The start point is set to t~.X, EY), block 479, in preparation for processing the next line of the contour, if any. Referring to Fig. 30A, one contour 480 is represented by a series of chain codes stored in a bin.
The LINE FINDER subroutine generates a first vector 478' 10 from the contour 480, the vector 478' having a start point SX, SY and an end point EX, EY; the vector 478' is generated by the LINE FINDER program loop comprising block 476-479.
Subsequent vectors 482, 483 of the contour 480 are generated by reiteration of the loop 476-479. When all the chain codes are exhausted from the bin being converted to vectors, the NO branch is taken from decision block 476 and the bin is deleted in block 474 by calling the DELETE
subroutine.
With each iteration of the LINE FINDER, the NEXTENDPOINT
subroutine is called in block 477. The NEXTENDPOINT program segment maintains three markers, viz.: START, MIDDLE POINT
and END POINT of the vector being processed. NEXTENDPOINT
is the heart of the line finding algorithm; it walks down a contour of chain codes keeping track of ~the position of the markers in X-Y space. Referring to Fig. 31, block 486, the MIDDLE, and END POINT markers are set to the cur-rent start point SX, SY. The decision block 488 asks if any chain codes are remaining in the buffer being processed.
If so, the MIDDLE POINT marker is advanced one chain code, block 490, and the END POINT marker is advanced two chain codes, block 491. A test END POINT is extrapolated, block 492, from the START POINT through the MIDDLE POINT and the distance from the test END POINT to the true END POINT
is calculated, block 493, using look-up tables. When the extrapolated distance exceeds a predetermined error toler-ance, block 494, the END POINT marker is reversed, block 495, by N chain codes, where N is the maximum X or Y compo-nent of the error distance. The position of the END POINT

3~(~3 marker, after reversal, is output, block 496, to the LINE
FINDER, block 477, and is defined as a vertex point or corner. All three markers are reset to the vertex point and the LINE FINDER process continues to exhaustion of 05 the chain-code list. If the extrapolated error is less than the predetermined threshold, Fig. 31, block 494, the NEXTENDPOINT program loops on the path 497 and, assuming there are chain codes remaining to be processed in the contour, continues advancing down the contour in blocks 1~ 490, 491, fetching more chain codes in the NEXTCODE
subroutine.
Referring now to Fig. 32, NEXTCODE is a subroutine which provides a stream of chain codes from a bin on successive calls. Parameters passed to the NEXTCODE subroutine are a buffer pointer BP and an index COUNT. Recall that chain codes are stored in a bin wherein each storage element of the bin is a buffer storing 18 chain codes. To read any particular chain code, the buffer and the particular location of the chain code in the buffer must be specified.
Before NEXTCODE is called the first time, COUNT is set to zero, and BUFFER is set to point to the first buffer in the bin. A chain-code is output in response to the state-ment of block 500, from the COUNT element of the CODES
array, i.e., the statement takes a buffer pointer and a count integer which is the chain code address and outputs the chain code. COUNT is incremented by one, block 502, so as to address the next chain code in the array when NEXTCODE is subsequently called. In block 504, if COUNT
is greater than or equal to NUMUSED, tthe number of chain codes stored in the buffer), then the buffer pointer is advanced to the next buffer of 18 chain codes, block 506, and COUNT is set to zero, block 508.
The motor stepping routines are described with reference to Figs. 33 and 34. Referring to Fig. 33, the CCD FULL
interrupt handler subroutine is entered in response to a CCD FULL interrupt signal from the state control logic 100 (Pig. 2). In block 510, the motor step count is set;
the step count is the number of steps required of the ~7370;3 stepper motor 44 to move the aspect of the CCD array down-ward with respect to the document being scanned from one raster to the next. The real-time clock count is set in block 512. The real-time clock count is an integer repre-05 senting the time required for the motor to move one step,including time for damping any mechanical vibrations which may occur in the CCD array as a result of the movement.
In block 514, a data item INDEX is increased by a second data item INCREMENT. The motor steps an integer number of steps to move the CCD array one raster position; however, because the distance between adjacent rasters is not exactly an integer number of steps of the stepper motor, a negligi-ble offset accumulates from raster to raster. INDEX is a real number comprising an integer count field and a fractional-quantity field. INCREMENT is a value representing the fractional part or offset of a full motor step, which ~alue accumulates in INDEX as successive motor steps are effected by the CCD FULL and real-time clock interrupt handlers; when the accumulating offset reaches a value which equals or exceeds a full step, the motor step count is incremented by one, resulting in an additional motor step for the current array repositioning operation. In block 516, the motor latch and driver circuit 54 receives the motor step count; CCD full interrupts are disabled, block 518; and real-time clock interrupts are enabled in block 520. Referring to Fig. 34, when the next real-time clock interrupt occurs, the clock count is decremented by one, block 522. If the clock count is not equal to zero, block 524, the subroutine is exited and the clock count continues to decrement each time a real-time clock interrupt occurs until the clock count reaches zero, thereby allowing a predetermined time period to pass during which time period the motor moves and settles. Upon the next subsequent real-time clock interrupt, the INDEX quantity is again increased by the quantity INCREMENT, block 526; the motor is stepped once again, block 528; the real-time clock count is set, block 530; and the step count is decremented by one, block 532. If the step count is equal to zero, decision 1~7;~7~3 block 534, indicating that the motor has been stepped to the next postion for acguiring another array of data, the real-time clock interrupts are disabled, block S36; the CCD full interrupts are enabled, block 538; and the program 05 issues the MOTOR READY signal, block 540.
While the principles of the invention have now been made clear in an illustrative embodiment, there will be immediately obvious to those skilled in the art, many modi-fications of structure, proportions, the elements, materi-als, and components used in the practice of the invention,and otherwise, which are particularly adapted for specific environments and operating requirements without departing from those principles. The appended claims are, therefore, intended to cover and embrace any such modifications, within the limits only of the true spirit and scope of the invention.

APPENDIX I
[Program listing accompanying the instant application to be inserted here.]

lX73703 GRAPIX ~.~ OMSI Pascal Y1.2C RT11 19-Jun 84 2:49 Sitc ~1~1 Pag~
Tc}tro~, loc., Tc} Lab~, BuildiDg SO, Bca~crton OR 97077 Linc Stmt Lc~el Ncst Somce statç~cDt PROGRAM GRAE'~C;
3 l~
THIS PROG}~M HAS I~L Gl~PHICS SUPPORT SOFl'WARE
S AND THE~ ~NITIALIZATION ROUTIN~S. IT ALSO HAS A P~W
6 RANWM DIDDLY PROGR~MS.
7 ~l 9 TYPE~ AI,PA=ARR~Y[1.. 141 OF CHAR;
XYPAIR=RE~CORD
11 PX: INI~GER;
12 PY: ~ GE~R
13 ~ND; , 1~ BLOCK=R~CORD
XI:^BLOCK;
16 - CASL rNTPGER O~
17 1: (LAST:^BLOCK;
~8 BROTHI~R:~BLOCI~;
19 ID: IN~GE~R;
XSTART: INT~GER;
21 YSI ART~ G~R;
22 STARTI IODL: ^BLOCIC;

23 ENDNODE~:^BLOC}~;
24 FIRSI-BUP:^BLOCK;
2S LASl'BUP:^BLOCIC;
26 COMPSTART:^BLOCR;
27 E~l)GE~FLAG: INT~G}~R);
28 2: ~NODE~ID: INT~GE~R;

~Z7~37~)~

. .
29 IF~ NODE~USLD: INTeG~R;
PLNDING: IN-P~eGE~R;
31 UPDOWN~Nl~(}E~R;
32 LINI~S: ARRAY[l.. ~l OP RE~CORD
33 LADDR:^BLOCK;
34 NID: INI~G~R
END);
36 3: (LASI'COD~S:^BLOCK;
37 NUMUSI~D: IN~GE~R;
38 CODBS: ARRAY[0... l71 OP CHAR) 39 ~D;
BLPTR=^BLOCR;
~1 .2 YAR ROMDAllJM,l,l,K,XPOS,YPOS,lX,TY,eRROR,ARCE~RRORSlXTOP, B,C,S,BUCRE~TID: INl~GER;
43 ONAME,rNAME: ALE7A;
E~NDX,I~NDY~INTLGLR;
~5 Y~5NO: CHAR;
46 NOTSP}~CIAL,E7R~1~011TPUT,LIN~OUTPUT,ARCOUTPVT: BOOLI~AN;
47 - Sl'ACIC: ARRAY[1.. 10241 OE~ CHAR;
48 PRE~ROM:ARRAY1256.511J O}~ GE~R;
49 LE~FI ,RIGHT,CURRLNT,TP: BLPTR;
SO DLC9DE~R: ARRAY[0.31J OP mAIR;
51 E7RE~S: ARRAY[Q.71 OP XY~AIR;
S2 COMPRESSOR: ARRAY10.. 7,0.. 71 OP INT~GER;
S3 RI~ RSI~R: ARRAY[0.. 151 OP CHAR;
54 SQRTABLE: ARRAY[0... 7,0.. 7~ OP ~GER;

GRAE71X OMSI Pascal Vl.2C RTll l9-Ju~84 2:49 Site ~ 1 Pagc 2 Tcl~tro~, Inc., Tcl~ Lab~, Building SO, Bes~crton OR g7aT7 Line StrntLcvcl 21cst SourceS~temcnt ~ X73703 5S ~ OPPBRROR,NE~ NOD~ IN~GE~R;
S6 CYB~RLlNK,ARC20UTPUT,E7ILleOllT,NOD~OUTPUT, TYP~2NODB: BOOL~AN;
S7 PRE~LI~: BLPrR;
S8 FCRR& ORlGrN 170010BlNl~G~R;
S9 XPOSR~G ORIGIN 170012B:INI~GBR;
RAMSWl'rCH ORIGIN 170014B:INT~G~R;
61 RAMSORIGIN 160000B:ARRAY10.~ OP INT~GER;
62 Sl'ATUS ORIGIN 170000B~ GLR;
63 MOTORRE~ADY ORIGIN 170006B:INT~G~R;
6~ CIRCBUF ORIGIN ~OOB:ARRAY[O.. IZ71 OF INTBGE~R;
CBORIGIN270B:INTBGE~R;
TRACL~TOPP~G,TES~NG~MAG~MO~Or~NG~AR~NG, ~UTG ~ N~OOLEAN;
67 LASTXPOS~A~GRX~A m OYLASTHlY~A~nX~NT~GER;
S~GCASES~RRAYlO..~ OP~GER;
XCFN,YCLN~CALE,YSCAL~AL;
~ BLoCKSLFFT~AXBLOCKS~NTeG~R;
71 SCALLDBOOLLAN;
n ~ - PROC~DURBPL~;BXTERNAL;
7~ PROC~DURBSNDATA;EXTE~NAL;
PROCBDUREFLU$H;~XTBRNAL;

n rs~+-l ~ PROC~DURLPAG~;

~ 1- ERAS~ TH~SCREeNON ~ TBRM~AlS~/

~ VARlDNTeG~R;
BLG~

~ S~ , ~X737~

86 1 2~ - WRIT~(CHR(27):1,CHR(12).1 87 2 2 1 FOR 1:=1 TO ~300 DO /- WAIT POR TI~RMINAL (BRllT~
FORCE~
88 3 2 2 W~(CHR(o):l) 89 I~ND;
91 PROC~DURI~ GRMOD~;
g2 93 /~ PUTS THE T~RR~INAL IN GRAPHICS MODE~ ~/

9S BE~GIN
96 1 2 1 WR.l~(cHR(29):l) g7 E~ND;

99 PROCLDURE~ ~NMODE~;

101 /- PUTS TERMINAL IN ALPH~NUME~RIC MODI~ /

103 BI~GIN
10~ 1 2 1 WRITE(cHx(3l~V
1115 END;
lQ6 ltl7 PROCE~DURL CU}~SOR(VAR C,X,Y:INT~G~R);

GRAFIX OMSI Pascal VI~C RTll 19 Jun-84 2-.49 Site ffl4-1 Pagc 3 Telctron~, Inc., Tcl~ Lab~, Building 50, Bcavcrton OR 97077 Linc St~nt Lcvd Nest Sourcc Statemcnt 109 /- DOE~S A GrN MODE~ TO G~T CI~RSOR POSITION /
11~
111 VAR HIX,HIY,LOX,LOY,I,I~NTLGER;

SS

1~7~7~3 -CH,CHY,CLY,CHX,CLXC~R;
1~3 ' "
114 BE~GIN
1~ I-SC
116 MCALL.lTYOUT,.lT~
117 .l-rYOUT ~31.
118 .lTYOU'r ~.
1~9 .rrYOUT #26.
120 .GLOBL E~CHO
~21 CLI~ ECHO ;CL~ART~RMINAL~C~HOBY SE~WR~
~22 .l~N
123 MOVB 960,CH(~) ~24 .~N
~25 MOVB %0,CHY(6) 126 .
127 MOVB %0,CLY(l~
~ .m~
329 MOV~ %0,CHX(~) .rrnN
~31 MOVB %0,CLX(O
- .m'lN
~3~ .~N
~ INC ECHO ~N~BLE~CHC) 13S ~/
136 1 2 1 C:=ORD~CH~;
~37 2 2 I HIX:=ORD(CHX)~ 37B;
138 3 2 1 HIY:=ORD(CHY) J~ 37B;
139 4 2 1 LOX:=ORD(CI~C)h 37B;
1~0 S 2 1 LOY:=ORD(CLY) ~It 37B;
141 6 2 1 1:=HIX'32+LOX;
1~,2 7 2 1 J:=HIY-32+LOY;
143 8 2 1 X:=11123 (13) DIV 2;1- TRANSPORM TO APCS COORDINAl'P.
SYSI~M /

S C

14~ 9 ~ Y-=1400 (1-3) DIV 2;
145 10 2 1 LASI LOY:=0;
146 11 2 1 LASI~IIY:=0;
1~7 ~ 2 1 I,ASrH~:=0 lU ~ND;

150 PROCI~DURL DRAWABS(X,Y: IN~GE~R);
~Sl 1- DR~W ~ VE~CTOR TO TH~ CIFIBD POSITION /

lS~ VAR HlX,}lIY,LOX,LOY,lX,TY: INTBGBR;
~S5 DR~WIT:BOOLE~N;
~S6 BPGIN
~S~ 1 2 1 IP SCALleDTHLN B~GIN
lS9 3 2 3 LOX:=ROUND~CCE~N-512/XSCALI~;
160 ~, 2 3 HIX:=ROUND~CCEN~S121XSCALI~);
161 S 2 3 ' LOY:=ROUND(YCEN-700/YSCALB);
162 6 2 3 HIY:=ROUND(YCE~N~701YYSC~LI~);

GRAFIX OMSI Pa~cal Vl~C RTll 19-Jull-84 2:49 Sitc #1~1 P~gc 4 Tclctroni~, Inc., Tcl~ L~b~, Building 50, Bca~ ton OR ~T7 Linc Stmt Lcvel Ncst Sowce StatcmcDt 163 7 2 3 l~7 (X~HIX) I (X~LOX) I (Y~HIY) I (Y CLOY~ N
DRAWIT:=PALSL
16~ 9 2 4 ~ B~GIN
165 10 2 S DRAWlT:zTRU~;
166 11 2 S X:=ROUND~((X-XCBN)qCSCALE~)+S12);
167 12 2 S Y:=ROUND(((Y-YCEN)-YSCALQ)+700) 11i8 END

170 13 ~ .2 ~ DRAWIT~
171 14 2 1 1~ DRAWITTHE~N BEG~
m l~i 2 3 '17C:=X;
173 17 2 3 IP IX>=ltlU TH~N lX:=1023;
174 19 2 3 TY:=((1~1X)''2) DIV 3;
17S 20 2 3 'IX:=((1400-Y)-2) DIV 3; /- COORDINAl~ TRANSE7ORM l 176 21 2 3 HI~C:=40B I (~IX DIV 32) h 37B);
177 Z2 2 3 LOX:=100B I (IX ~ 37B); I- G~T Bl~S FOR
TR~NSMISSION /
178 23 2 3 HIY:~40B I (~Y I~IV 32) h ~7B);
179 24 2 3 LOY:=1~0B l~TY h 37B);
180 /- NOW S~ND THOSE THAT Wl~ MUS~ l ~81 25 2 3 IE7 HlY=LASl'HIY TH}~N
182 26 2 ~ 7 HlX=L~SrHDC TH~N
183 27 2 5 IP LOY=LASILOY THEN WR~T~(CHR(LOX).l~
28~ 29 2 6 ~ WRll~(~HR(LOY)-.l, CHR(I,OX).l) 18S 30 2 S I~LSE~WRIT~(CHR(LOY):l,CH!R(HI~.
l,CHRa,OX):l) 186 31 2 ~ E~LS~I~HIX=LAS~IXTHI~N
lg7 32 2 S IE7LOY=LAmOY THEN WRIT~(CHR(HIY):l,CHR(LOX):l) ~ ~ 2 6 BI~ WRITE~(CHR(HIY):l,CHR(LOY);
l,CHR(LOX):l) 189 3S 2 S E~ WRI~(CHR(HIY):l,CHR(LOY):l,CHR(HIX)~
CHR(LOX):l);
190 36 2 3 LAmOY:=l,OY;/-R}~MLMB~'R /
191 37 2 3 LASI'HIX:=HIX;
192 38 2 3 LASI'HIY:=HIY
193 ~ND
W ~ND;

~96 PROC~DUR~ MOV~ABS(X,Y:IN~G~R);

~7;37~)3 `

1- MOVI~ TO SOMI~ POSl rlON ON TH~ SCRE~EN l -W
2ao BE~GIN
201 1 2 1 GRMODE;
202 2 2 1 DR~WABS(X,Y) 2~ ~ND;
20~
20S PROC~DU~ INIT;
~06 207 1- THIS PROC~DURL R~ADS TH~ DATA TABLE~S 17ROM THL HOSI' PROCESSOR l 20~
209 YAR l,l~TLCi}~R;

211 B~
212 1 2 1 WRIT~LN('LOAD~IG D~TA~;
2~3 2 2 1 PLIP; I' S8ND COMMAND TO HO~ t 214 3 2 1 5NDATA, 215 ~ 2 1 FOR 1:=1 TO 256 DO /- LOAD SINGULARIl'Y ANALYSIS
TA~LES l 216 S 2 2 BE~GlN

GRAFI~C OMSI Patall Vl~C RTll 19~ U 2:~9 Sitc ~ 1 P &e S
Tel~tro~, Inc., Tc~ Labs, Building S0, Bc~vc~ OR g7077 Linc Stmt Lc~el Ncst S~urcc Slatement 217 6 2 3 RE~ADLN(lBS,C), 218 7 2 3 PR~ROMm:=B'6~+S-8t C
2V LND;
220 8 2 1 FOR l:z0 TO 7 DO 1- FRL~MAN CODI~ TO D~,DY CONVLRT~R l Zll 9 2 2 RE~ADLN(E7R~ PX,FRBS[II.PY);
m lo 2 1 FOR 1:=0 TO 7 DO l~ COMPACTIFY TABL~ l 1~73703 223 11 ~ ~ 8~GIN - -22~ J2 2 3 PO~ J:=0 TO 7 DO
225 13 2 4 RBAD(COMPR~SSORll,ll);
æ6 14 2 3 R~ADLN
227 END;
228 ~S 2 1 POR 1:=0 TO 31 DO /- PRLI~MA2J COD~ DE~ R (E7ROM
SINGULAIRITY TABLE~
229 16 2 2 R~ADLN(D}~COl)PRlll PX~DECt~DER[n~
z~ n 2 1 POR 1:=0 TO lS DO r TH~ ~LMAN CODE~ RSINO T~LE~ /
231 18 2 2 BI~
232 V 2 3 RE~ADLN(l);
233 20 2 3 RLVI~RSI~R[I]:=CHR(J) Z35 21 2 1 FOR 1:=0 TO 7 DO 1' SQUAR}~ ROOT T~BLE POR LINIPY ~l 236 22 Z 2 BE~GIN
237 23 2 3 POR J:=0 TO 7 DO
238 2~ 2 4 RE~AD(SQRTABLE~ll,ll);
239 25 2 3 R~ADLN
2 0 END;
241 26 2 1 RAMSWlTCH:=0; /- NOW LOAD R~MS /
242 Z7 2 I POR l:=0 TO S11 DO
243 28 2 2 READLN(R~MSl");
24~ 29 2 1 RAMSWlTCH:--1;/^ LOADllPPE~R HALP /
2~S 31) 2 1 FOR l:=0 TO S11 DO
2Ui 31 2 2 R~3ADLN(RAMS[n);
247 32 Z 1 RAMSWITCH:=0; /- SLT TO LOWE~R HALF E7OR IDENlTl Y
PUNCIlON /
~U 33 2 1 FLIP; /' PLIP BACK TO TLRMINAL, ALL DONl~ HE~
249 3~ 2 1 WRITELN(~SIZING MLMORYl;
25D 3S 2 1 MAXBLOCKS:=0; /- l IME~ TO SIZP MEMORY l 251 36 2 1 PRI~E~LIST:=NIL; I- GOING TO ALLOCAT}~ ALL WB, CAN /
2S2 37 2 1 WHILE~ TRUL DO
253 38 2 2 BI~GIN

~0 ,., ~73703 2S~ 39 ~ W(LE~FI);1~LLOCAl~A210THI~RBLOCII:,SeE!IP
OUI O~ SPAC~ 1 2s~ rsc 256 MOV %6,1(%~ ;ET SPACIC PIR TO MleASURB
SPACE~ LE~
257 SUB L~FI (%~),1(%Ç) ~ NOW H~S AVAILABL~ SPACI~ LEIFI' 25B CMP 1(%6),~00 ;1)0 UNSIGN~D COMPARI~ OP I ~ND
~00 259 BHI lS
260 CLR 1(%6);CLE~AR I TO ~DICAT~ COMPLE~TION
261 lS: NOP

263 40 2 3 LEFI'^~XI':=PRE~ELISI'; /'' S~ W BLOCK ~DDR 1 26~ ~,1 2 3 FRE~}~LISP:=LE~FI;
265 42 2 3 MAXBLOCRS:=MAXBLOCKS~l;
266 43 2 3 IE~ I=0 TH~N PXIT I- LI~V~ 400 81~S PO~ TH~ STACK ~I
267 ~ND;
268 ~S 2 1 BLOCKSLPPT:=M~XBLOCICS
269 ~ND;

GRAE'IX OMSI Pascal V12C RTll 19JUD~ 2.49Sitc ~ 1 P lp6 Tc~tsoDL~, Inc., Tcl~ Lllbs, Building S0, Bc~lverto~ OR 970T7 L~DC St~nt Lc~cI Nc t Source Statcmcnt 271 PROCEDURI~ N~WBLOCK(VAR P BL~l'R);
m m r 274 NE3WBLOCR IS AN ARl~'ICLAL PRI~ SI ORAG~ MArNT~ Nt:l~27S ROUTIN~ USED TO CUT OVI~ AD DOWN.

m 1~73'-~U3 278 ~ BBGIN
Z79 1 2 1 BLOCKSLB~ =BLOCI~SLBPT-l;
Z8D Z 2 1 IP PRBBLISI'=NIL THLN B~G IN
281 4 2 3 WRITBL~I;
Z82 S 2 3 WRlT~LNt'OUT OPME~MORY.. ~;
Z83 6 2 3 FLUSH;
28~ rsc `28~ 7 2 3 END
2~ 8 2 2 E~I~BEGIN
289 9 2 3 P:--E7RBELlSr;
Z90 10 2 3 FRE~E~LlSI':=r^N}~Xr 2g2 ~ND;

29~ PROCE~DURE~ RBLBLOCI~ BLPrR);

296 r 2g7 AND ITS OPPOSITE~, A DE~ALLOCATOR
298 . /

300 B}~GIN
301 1 2 I BLOCKSLEFl:=BLOCKSLBFl+l;
30Q 2 2 1 r NI~XT:=E7RI~ELISI;
30B 3 2 1 PRLPLIST:=P

3as E~ron dctectcd: 0 Pree mcmorg: 116~7 word~

~g c~

LISTS ~- - OMSI Pascal Vl C RTli 19~ 4 2 51 ~itc #14-1 P~ge 1 ~ . ~
Tc}tronDc, Inc., Tc~ L~bs, Buildiog 50, Beavcrtoo OR g7077 Linc Stmt Le~cI Nest Sourc~ Statcmcot PROGRAM LISTS;

3 l~
4 THIS MODULB OP TH~ APCS CONTAINS THB VARIOUS ROUTINBS
S THAT MANTAIN AND MANIPULATI~ PRBLMAN LISTS.
6 ~l 8TYP}~ RAST=ARRAYl0.~ OP BOOLEAN;
gPIL~RAST=ARRAYI0-31] P ~GI~R;
ALPA=ARRAYI1.. 14] OP CHAR;
11 XYPAIR=RLCORD
12 PX: INTLGBR;
~3 PY: ~GER
1~ ~ND;
BLOCK=R~CORD
16 NBXT:^BLOCK;
17 CASB ~GBR OP
18 1: (LAST:^BLOCK;
lg BROTH~R:^BLOCK;
ID: INTLGBR;
21 XSI'ART: INT~GER;
æ YSI ART: INI~G~R;
23 STARTNODE~:^BLOCIC;
24 ENDNODI~:^BLOCK;
PIRSTBUP:^BLOCR;
26 LASTBUF:^BLOCK;
27 COMPSI'ART:^BLOC~C;
28 E~DGE~LAG: INTBGER);

~.~737C~3 2: (NODI~ID. INT~GLR;
.
- NODE~USE!D~ GI~R;
31 PBNDING: IN~GER;
32 UPDOWN~ GI~R;
33 LINE~S: ARRAY[ 1.. 4] O~ RE~CORD
3~ LADDR:^BLOCK;
NID: I~GI~R
36 ~ND);
37 3: (LASI-COD~S:^BLOCK;
38 NUMUSLD: INI~GER;
39 CODE~S: ARRAY[0.. 1~ OP CHAR) ~0 ~ND;
41 BLPI R=^BLOCK;

43 VAR ROMDATUM ,I,J,X,XPOS,YPOS,l`X,TY,E~RROR,ARC~RROR.Sl'KTOP, B,C,S,BUCKBTID~ GE~R;
M ONAMI~,INAMI~: ALFA;
~,5 ENDX,BNDY:INT~GER;
4ti Yl~SNO: CHAR;
~,7 SPE~ClAL,l:REEOU-rPUT,LlNEOUTPUT,ARCOUl PUT: BOOLleAN;
48 SIACK: ARRAY11... 10241 OP CHAR;
49 FRLROM: ARRAY[2.56.~11] OP INTEÇGE~R;
SO L~PT,RIGHT,CURRI~NT,TP: BLI~l`R;
S1 D~CODER: ARRAY¦0.313 OP XYPAIR;
S2 PRLE~S: ARRAY[0.. 71 O~ XYPA~;
S3 COMPRI~SSOR: AE~RAY10.. 7,0.. 71 OP INT~G~R;
S~ R~ RSER:ARRAY[0.. 1!q OE7 C~R;

Llm OMSI Pascal V1.2C RT11 19-Jun-84 2:!i1 Sitc #14-1 Page 2 Telctronix, Inc., Tc} Labs, Building 50, Bcavcrton OR 97077 Linc Stmt Lcvel Ne~;t Source Statanent C ~

~73703 SS ~ SQRTABLE: ARRAY~0.. 7,0.. 71 O~ GER;
S6 OPPERROR,NEXlNODEID: INTEGleR;
S7 REDISPLAY, 4RC20UTPUT,FILEOUT,NODEOUTPUT,TYPE2NODE:
BOOLEAN;
S8 FREELIST: BLPI'R;
59 FCREG ORIGIN 170010B INTEGER;
XPOSREG ORIGIN 170012B:INl~GER;
61 RAMSWITCH ORI(}IN 170014BINTEGER;
62 RAMS ORIGIN 160000B:ARRAY[0.5111 OP IN~G~R;
63 STATUS ORIGlN ~700OOB:INT~GER;
M MOTORREADY ORIGIN 1700n6B:lNTEGER;
6S CIRCBUF ORIGIN 400B ARRAY[0.. 1Z71 OP IN~GI~R;
66 CB ORIGIN 270B~NTEGER;
67 TRACESI OPPIN5,TESI'ING.IMAGEMODE,DOl~NGBARSING, INPUTGIVEN:BOOLRAN;
68 LASl~CPOSLASTGRX,LASTGRY,LAST HIYLASTHIX~ GER;
69 SINGCASES ARRAYl0.. 71 O~ INI~GER;
XCEN,YCEN,XSCALE,YSCALI~-~AL;
71 BLOCKSLEFI',MAXBLOCK:INTEGER;
n SCALED:BOOLI~AN;
73 WINDOWWIDTH,MAXBEND:IN1~5ER;

PROCEDURE NEWBLOCK(VAR BP:BLPTR); E~RNAL;
76 PROCEDURE RELBLOCK(BP:BLE~R); I~XTERNAL;
77 PROCI~DURE LINEIE~Y(BP:BLPI R); ~RNAL;

79 I'S~
81 PROCEOURE NEWBUCKET(VAR BPTR-BLlrrR);
~2 U NEWBUCKE~T MAKES AND INITIALIZE~S A NEW PRE~E!MAN BIN FOR
USE IN
, . r G S

1~737U;~

~ ~ ACCUMULAT~NG ~E~MAN CODI~S. -86 ' 88 VAR PP:BLPTR;

9D BE~GIN
91 1 2 1 N~WBLOCK(BPI-R);
92 2 2 1 BPTR^ N~XT:=NIL;
93 3 2 1 BPl'R^ LAST:=NIL;
9~ ~ 2 1 BPrR^BROTHE~R:=NIL, 9S S 2 1 BErl'R~XSTART:=XPOS;
96 6 2 1 BPTR^.YSTART:=YPOS;
97 7 2 1 BPI'R^SIARTNOD~:=NIL;
98 8 2 1 B~IR^~NDNODE~:=NIL;
99 9 2 1 BPIR^~DGEFLAG:~;
100 10 2 1 N~WBLOCK(FP);
101 11 2 1 BPIR^~71RSIBUP:=E7P;
102 12 2 1 BPl'R^ LASTBUP:=E~P;

10~ 14 2 1 BErrR^.COMPSTART:=PP;
2 1 PEr~ASr:=NIL;
106 t6 2 1 FP^ NUMUSED:=0 107 E~ND;

LISIS OMSI P~scal Vl~ RTll l~un 84 2:!i1 Site #1~1 Pagc 3 . . T~tronL~, Inc., Telc Labs, Builting S~, Bca~rcrloD OR g70T1 Linc Stmt Lcvel N~t Sourcc State~c~t 109 PROCEDURE ADD~R~EMAN(COD~DATA~ GE~R);

~6 1~7370;~

ADDFRE~MAN TAK~S A FREE~MAN COD~ AND APPl~NDS IT THEI ,-BOITOM O~ MA~ BIN POINI~D AT BY ~CURRI~
114 .
l~S
116 VAR BP:BLPTR;
117 I,J: INTLGE~R;
1~8 120 1 2 1 IE~ CURRE~NT=NIL l~l~N WRITE~(CHR(7~:1,CHR(31):1,TOO
MANY'~) lZ1 3 2 Z I~LS~ BE~GIN
12Z 4 2 3 BP:=CURRLNl'^LAmUP; /' ~E~T PrR TO LASI' BllE~7~R I
123 S 2 3 I~ BP^NUMUSl~D>=IB THLN BI~GIN I Sl~ IE' ALRE!AI)Y
FULL /
1~4 7 2 5 Nl~WBLOC}~(BP);
I25 8 2 S BP^NeXT:--NIL;
126 9 2 5 BP^lASTCOD~S:=CURRENT~LASTBUE~;
~27 10 2 5 CURR~ LAmUE7^NE~ BP;
~28 11 2 5 CURRENSALASTBUP:=BP;
~29 12 2 S Br~JMUSl~D:=O
130 .. ~ND;
~31 13 2 3 IP (COD~DATA h 10B)<~0 THE~N CURR~NT"~DG~FLAG:=l;
~32 /' BIT 3 (000~10 OCTAL) IS BDGL BIT POR
FRLE~MAN CODE~ /
133 IS 2 3 Br.CODBS[BrNUMUSED]:=CHR(CODEDATA h 7B);
134 16 2 3 BrNUMUS~D:=BP^NUMUSED+l s eND
~36 ~ND;

138 PUNCTION NE~WNOD~tHOWMANY~ G}~R; Ll,L2,L3,L~: BL}~TR).
BL~I R;
139 , 140 1~

1~737~:)3 WNODE~ MAI~s A NI~W NODI~ WITH THE SPE~CIE~ D NUMBER
142 - OE7 CON~CTIONS. L(l~ A~ THE~ ADDR}~æES OE7 THI~ PRLE~MAN BINS THAT
1~.3 THE~ NODE~ IS CONN~Cl~D TO. THE E7UNCIlON OUTPUl' IS TH~
NOD~S ADD~SS

t46 VAR NP:BLPIR;
1~7 148 BE~GIN
149 1 2 1 l17 NODI~OUTPUT TH~N BE~ DON'T BOTHER UNL~SS NBE~D
TO /
lSO 3 2 3 NI~WBLOCR(NP);
lSl ~, 2 3 NB~Cl'NODEID:=NeXTNODEID~l;
~S2 S 2 3 Nr.NODE~lD:=N~CI'NODElD;
~S3 6 2 3 NrNOD~US~D:=HOWMANY;
7 2 3 Nr PE~NDING:=HOWMANY;
l5S 8 2 3 Nr.UPDOWN:=O;/- FOR EWE~ INFO ~/
IS6 9 2 3 NP^lIN~S[l]lADDR:=Ll;
157 10 2 3 ~llNE~S~2]lADDR:=L2;
lS8 11 2 3 NrllNl~S[3]1ADDR:=L3;
L59 12 2 3 Nr.LlNE~S14]1ADDR:zL~;
16D ~3 2 3 NE~WNODE:=NP
161 E~ND
162 14 2 2 ELSL NE~WNODE~:=NIL /- }~LTURN NIL IF NO ACTION /

LIS~S OMSI Pascal Vl.2C RTll 19~ 84 2Sl Sitc #14-1 Pagc TektroDL~, Inc., Tck Lsbs, Building SD, BcsvertoD OR 97077 Linc Stmt Le~rel Nel~t Sourcc Statcmc 163 ~ND;

~.~7;~7W

iROCl~DURI~ INSE~RT(BP:BLErrR); '-166 ' 167 ~.
168 INS~RT TAI~ES THE~ CIE711~D PRleE~MAN BIN AND INSERTS IT
B~FOR~
169 THE~ CURRBNT BIN. IT MAINTAINS THI~ START AND ~ND
170 POIN~RS TO THE~ MASI~R PRLEMAN BrN LIST.
171 o ln 173 VAR TP:BLP'lrR;

175 BE~GIN
176 1 2 1 IF (LLPT=NIL) lk (RIGHT=NIB) THI~N B~GIN 1- NO BINS YLT l m 3 2 3 LEFr:=BP;
178 4 2 3 RIGHT:=BP
179 ~ND
180 S 2 2 I~LSI~ IF CURRLNT=NIL TH~N B~GIN 1- AT THE~ I~ND OP TH~
LIST l 181 7 2 ~ RIGHrN~Xr:=BP;
182 8 2 ~ BrlASI :=RIGHT;
183 9 2 4 RIGHl':=BP
IU I~ND
18510 2 3 ELSEI BE~GIN /- INSERTION IN THE MIDDLE~ OP LlSr ~/
18611 2 4 TP:=CURR~Nr LAST;
18712 2 4 BrNEXr:=CURRENT;
18813 2 4 CURRENrLASr:=BP;
18914 2 4 IP TP~>NIL THE~N BEG~ /- CHLCIC TO SE~E IE' THERE IS
A PRPDCeSSOR /
1!~16 2 fi l'P^.NEXr:=BP;
19117 26 BP^ l AST:~--I'P

19318 25 ~LSE~ LEFI':=BP 1- OTHE~RWISE~ WL HAVE~ NEW FIRST
ELEMENT l G ~

~737~

-- .

195 19 2 1 CURRleNT:=BP; I- INSE~RT ALWAYS S~TS CURR12NT '~/
196 20 2 1 1~;

198 PROCE~DURI~ DE~LETE~(BP:BLPTR);

201 DELETE~ DLL~ S THE SPECIFIE~D FRE~LIRAN BIN. IT DO~S NOT
DI~LE~
202 THE~ STORAGE~ BLOCKS THAT WE~R~ USE~D TO STORE~ FR~MAN
CODleS.

20~
20S BE~GIN
2D6 1 2 1 IP BrlAST=NlL l~}~N LEPT:=BP^N~XT /~ LINK AROUND
BIN BL~NG DI~LE~ D l 207 3 2 2 I~LSE Br LASI'~ =Br~Xr;
208 4 2 1 IP BP^N~=NIL THE~N RlG}lT:=Br.LASI' 209 6 2 2 ~LSE~ BP^N~Xr1AST:=BrLASI';
210 7 2 1 IP CUR~NT=BP THE~N CURRI~NT:=BP^NE~Xr; /- AUTO ADVANCE~
IF NE~I~DE~D /
211 9 2 1 RPLBLOCK(BP)/- DI~LE~ ACTUAL ~02A~
2~2 ~ND;

214 PlJr CTION NLXl~RLI~(VAR STRLAM:BLPTR; VAR COUNT~NI~GER3:
INTLGER;
2~5 LISIS OMSI Pa5Cal V1 C RT11 19 JUn-84 2 S1 SitC ~ P8~e S
Tc~troni~, IDC., TC~ Lab~, Building S0, Bcavcrtor~ OR ~7077 Linc Stmt Lcvel Ne~t Source Statemcnt ~6~

1~73703 217 ~ N~CI'E7RE~ TAKES A BLOCR I~I'R AND AN INDE~C AND MANIPULATE~S
218 THPM TO PROYID~ A SI R~AM OE7 FRI~E~MAN CODLS /7ROM A
PRPEMAN BIN ~Y
219 SUCCESSI~ CALLS. IT IS Y~RY USE~FUL POR S~QUENTIALLY
SCA~ING
22D A E~RELMAN CHAIN CODE LIST. leVENTUALLY ~RE~AM~ WILL
Bl~ NIL
221 SIGNALLING THAT ALL COD~S HAVE BEEN PROCE~ D.

m 1 22~

226 1 2 1 NEXI~ =ORD(STREAM^.COD~SICOUN
227 2 2 1 COUNT:=COUNT+l;
~8 3 2 1 1~ COI~NT=STREAM^NllMUSPD TH~3N BEGI~I
229 5 2 3 SIREAM:zSI'R~AM^NE~XI';
230 6 2 3 COUNT:z0 /- ARRAY IS 0 TO 17 l 231 }~ND
232 END;
2~3 23~ PROCI~DUR}~ COMPACTI~Y(BP:BLPI~);

~6 1-237 COMPACTIPY DOE~S WAHT lTS NAME IMPLIE!S. IT TAKES A
FR~EMAN BIN
23B AND COMPR~ S ANY RIGHT ANGLI~ MAN CHAIN CODE~
PAIRS INTO
239 THE~IR APPROPRIAl~ DIAGONAL ANALOGUE~S AND IT MAKB
SURL THAT ALL
240 BUF}7E~R BLOCKS AR}~ }7ULL.
241 .
2~2 2~3 VAR INSI R~AM,OUTSl'Rl~AM,TP:BLPTR;

127~703 COUNT,OUTCOIJNT,OLDCC)DL,PIEWCODI~ GE~R;

246 PROC~DUR~ ADDPR~(VAR SIR~AM:BLPl`R; VAR COUNTDNT~GEÇR;
NE~WCODL~J~GE~R);

249 LITTLP INTI~RNAL SUBR THAT DOI~S OPPOSITE~ OP
W TH~ SUBR NE~ ~AN, ADDS COD~S TO AN I~XISIIN& CHAIN
CODI~
251 BUFFE~R LIST. IT ASSUMES TI~T TH~ IS SPACI~ ALRI~ADY
2SZ AVAILABLE~, A GUARANT~E~ SINCE! COMPACTIFICAI ION C:AN
2S3 NOT MABE~ A CHAIN CODI~ ANY LONGI~R
2~ 1 257 1 3 1 COUNT~ OUNT+l;
2S8 2 3 1 IP COUNT=18 THI~N BEGIN
2S9 4 3 3 SrR~AM^NlJMUS~D:=18;
26D S 3 3 SrREAM:=SI RLAM^NI~XI;
261 6 3 3 COIJNT:~0 262 END;
263 7 3 1 STRI~AM^.CODI~S[COUNT']:=CHR(N~WCODL) 26~ ~ND;

266 BE~GIN
267 1 2 1 INSrR~AM:=BP^.COMPSTART; /- START WHE!REI Wl~ LEFr OPP
LASI TIME /
268 2 2 1 OUTSTREAM:=lNSrR~AM;
269 3 2 1 INCOUNT:~, 270 4 2 1 OUTCOUNT:--1;1- KLUGEl FOR INITIAL USE OF ADDFR~

LISI'S OMSI Psscal Vl.2C RTll l~Jun 84 2:!i1 Sitc ~1~1 Pagc Tcl~tronD~, Inc., Tc~ Labs, Building 50, Bcavc~ton OR ~7077 ~737()3 LmeStmtL~elN~ ~S~tement m s 2 1 1~ ~ ~ EAM<>~LTH~NB~G~
m 7 2 3 OLDCOD~:=NEXTFRP~5~AM~NCOU~ G~T~R~
COD~FROMLI~-/
274 8 2 3 WHILL ~SrR~AM~LDO/-PROC~RESTOPLI~/
275 9 2 ~ B~G~
~6 10 2 5 NLWCOD~:=NEXTFREP(~AM~NCOU~ T
N~XTONL-/
m 11 2 S l:=COMPR~ORlOLDCOD~WCODL];/-~IPCAN
B~COMPR~D-/
278 ~ 2 S 1~1<~ TH~NB~G~/-YES-l z~i 14 2 7 ADDFRe~(OUTSrRLAM,OUTCOUNT~;/-ADD
D~GONALCODL-/
280 ~S 2 7 1~ IN~AM<>NIL TH~N OLDCODE~:
=N~XT}7REE~(INSI RLAM,INCOUNT) 281 17 2 8 ELS~ Ol,DCODE!:- 1 282 }~ND
283 18 2 6 E~LS~ BE~GIN /- LLS~ luSr PUT BACK OLDCOD~ /
284 t9 2 7 ADDI7Rl~L(OUTSl~AM,OUTCOUNT,OLDCOD~);
28S 20 2 7 OLDCODE~:=NE~WCODI~/- USE~ NE~W CODE POR OLD
NPXT TIME~ /

2g7 I~ND;
2B8 21 2 3 1~ OLDCOD~ N ADD~ (OUTSI'RE~AM,OUTCOUNT, OLDCODE) 289 /~ ADD LAST CODE~? /
290 }~ND;
291 ~S 2 1 IP OUTSrRE~AMoNILTHLN B~ NS~W Rl~L~ASE~ ANY
UNN~I~DE~D BLOCRS /
292 25 2 3 OUTSTRLAM^NUMUSI~D:=OUTCOUNI ~1;
293 26 2 3 TP:=OUTSl~AM^NLXT;

~73703 29~27 i~ 3-- - OUl'Sl'ReAM^N~ NIL;
295 28 2 3 Br LASTBUE7:=OUTSI R~AM; J- FUC UP BIN D~SCRIPTOR ~/
296 29 2 3 Br.COMPSTART:=OUTS~AM;
297 30 2 3 WHILI~ TPoNIL DO
298 31 2 4 BE~GIN
299 32 2 S INSTR~AM:=TrNE~XT;
300 33 2 5 RPLBLOCK(`rP);
3D1 34 2 S TP:=INSI R~AM
302 E~ND
3~ ~ND
304 35 2 2 ~LS~ BP~.COMPSl'ART:=BrlASl'BUE7 /- START AT E~ND NI~Xr TIME! ~/
30s eND;
3t~6 3~7 PROCI~IWRE~ UNWIND, 310 THIS PROCEDU~B TABS TH~ CONl~NTS OP THI~ SI'~CR
311 AND POPS l~IEM ON A LIFO BASIS. THI~ E!MAN
312 CODI~S ARE~ USI~D TO MARE~ A NE~W FRI~eMAN BIN WHICH
313 IS INSE~RTED BE~FOR~ TH}~ ~CURR~NT BrN .
314 t/
3~S
316 YAR BP:BLl~PR;
317 ~P:BLPI R;
318 I,l,K,M,N,P:INl~GLR;
3~9 320 Bl~GIN
321 1 2 1 N~WBUCKET(BP); /- MAKE~ BIN /
3~ 2 2 1 1:=0;I' I'OTAL CODESPOPP}7D COUN~R l 323 3 2 1 P:=0; /' EDGE E7LAG ~/
324 4 2 1 FOR 1:=0 TO (Sl'KTOP-1) DIV t8 DO I- ONCE~ PER BU~ R
BLOCK ~/

1~7~703 LISI S ~ - OMSI P~scal V12C RT11 19 Jun-84 2:51 site #~ Pagc 7 Te~troT~D~, Inc., Te} L~b~, Building 50, Bea~CTtoD OR 97~77 L;DC StlDt Lcvd Ncst SollrCC StatCmCDt 325 S 2 2 BE~GIN
326 6 2 3 FP:=BP^LASTBUP; /~ GE~T PTR TO LAST BLOCIC WHICH
IS P,MPTY 1 3;!7 7 2 3 K:=STKTOP~ GE~TNUMBER LEFI TO DO /
328 8 2 3 IP K~18 THEN R:=18; /- ONLY 18 PE~R BLOC:K /
329 10 2 3 POR M:=0TO K-l DO
11 2 4 B~GIN
331 12 2 S N:-ORD(STACK[Sr}CTOP~J+M)l); /' G~T NJ~XT CODP /
332 ~3 2 S P:=P I (N h 10B3; /- OR IN EDGL BIT /
~3 14 2 S FP^.CODLS[M] :=CHR(N ~ 7B) /- SAVE1 COD~ /
33~ ENDi 33~ 15 2 3 l:=J~; /'' ADD NUMBER DONI~ TO TOTAL DON~ /
336 16 2 3 FP^NUMUSED:=K; I S~T NUM USI~D /
337 17 2 3 IP J<S~CTOP TH~N BEGIN /- MOR~ Ll~
338 19 2 S NLWBLOCK(PP); /- MAKI~ A NE~W BUPPE~R BLOCK AND
APPLND IT I
339 20 2 S BrLASTBUF^Nl~XT:=~P;
340 21 2 S FP^LASI':=BP'lASTBUP;
3~1 Z 2 5 Br.LASl'BUP:=PP;
3~2 23 2 S PP^ NI~CI':=NIL;

3~ E~ND;
34S 2S 2 1 INSI~RT(BP); /~ INS~RT TH~ NE~W BI~, CHE~CK ITS EW}~
FLA~ /
346 26 Z 1 IF Pc~G THI~N Br~DGE~FLAG:=l;
3~7 28 2 1 SPLCIAL:=FALSL /~ E~XIl' SPI~CIAL STACKING MODE~ /
348 leND;
3~9 ~273703 - YROCE~DURI~ ME~M~7UL; --3Sl 352VAR PLACE~,I:INTLGER;
3S3NPIBLPTR;

356 1 2 1 WRlTe(CHR(7)); /- BL~P TÆRMINAL TO INlDICATE~ MEM FULL /
3S7 2 2 1 PLACE~:=0; /' FIND PLAC~ O~ CURRENT IN LISI' /
358 3 2 1 NP:=LEFI;
359 ~, 2 1 WHILE NP<XURRI~NTDO

361 6 2 3 PLACl~:=PLACE!+I;
3~2 7 2 3 NP:=NP^NE~XI
3~ ~ND;
364 8 2 I CURRI~ =LE~FI;/-Nl:)W FLUSH ANDDUPLICATI~ ALLBINS /
365 9 2 1 WHILES CURRE~NToNlL DO
366 10 2 2 B~GIN
367 11 2 3 N~WBUCKE~T(NP); /'' ~ARE~ RE~PLSACEME~NT '~/
368 12 2 3 NP'Sl'ARTNODE~:=NE~WNODE~(2,CURRl~NT,NP~dIL~NlI,); /~
MAKE~ A NODE~ TO LINK THE~M /
369 13 .2 3 CURRENr-lF'NDNODL:=NrSTARTNODE~;
370 14 2 3 LINEIE~Y(CURRI~NT~;/- PROCI~SSCURRE~NT BIN /
2 3 NrXSrART:=~NDX; /- E~ND O~ CURRENT BIN SE~ AS
SIDE~ CT /
372 16 2 3 Nr.YSTART:=ENDY;
373 17 2 3 INSE~RT(NP); /- PUT NEW BIN IN WIIERE~ OLD ONE~ WAS, INSE~RT DO~S 'CURRENT:=NP' /
374 18 2 3 CURRE~NT:=CURRI~NT^.NE~XT /- ADVANCE TO NI~XI OLD BIN ~/
375 I~ND;
376 19 2 1 CURRENT:=LElFI'; /- PUT CURRLNl BACK TO RIGHT POSmON /
377 20 2 1 FOR l:=lTOPLACE~ DO
~78 21 2 2 CURRLNT:=CURR~3NT^N~XT

~G

1~7370;~

LISTS ~ - O~ISI Pa~csl Vl.2C RTll 19JUD~ 2:51Sitc #14-1 Pagc8 Tcl~troD~ DC., Tcl~ Labs, Buildi~g 50, Bc~vcrton OR g7~7 LiDe S~mt Lcvcl Ncst SOUrcCstatCmCDt 379 I~ND;

3Bl BE~GIN

~rror~ detectcd: O
Prcc mcmo~y: 11413 ~vord~

1~7370~3 LINII7Y ~ OMSI Pa~cal Vl~C RTll l9-Jun-84 2:!i4 Sitc fl4-1 P~e 1 Tcl~troni~, loc., Tcl~ Lab~, Building S0, Bcavcrton OR g70T7 Linc Stml Lc~d Nest Sour&e Statcmeot PROGRAM LINIFY;

4 LINIE~Y IS THE ACTUAL LINI~ FINDING ROUTINL. IT TA~S
S AS A PARAMET~R THE~ ADDR~SS OF A FRLE~MAN BrN WHICH IT
THEN
6 OUTPUTS ACCORDING TO OPTIONS SP~CIFIE~D PRIOR TO
DIGITIZATION.
7 IT WILL OIJTPUT THI~ FRE~E~MAN BIN AS PRI~LMANS CODI~S ON
8 THI~ OPE~RATOR TLRMINAL, AS LIN}~S ON THAT TE~RMINAL, OR
AS NOD~3S
. . 9 WHICH ARE~ S~NT TO THB HOSI' PROCESSOR.
~/

12 TYPI~ RAST=ARRAY[0.511J OF BOOL~AN;
13 FILE!RAST=ARRAY[0.. 31¦ OF INT~GEÇR;
14 ALFA--ARRAYIl.. lfl OF CHAR;
lS ~CYPAIR=RECORD
16 PX: INTEGE~R;
17 PY: ~IT~GER
18 E~ND;
19 BLOCK=RI~CORD
N~CI':^BLOCIC;
21 CASE ~Nl~GLR OY
22 1: (LAST:^BLOCK;
23 BROTHE~R:^BLOCIC;
24 ID: INT~G~R;
2S XSI'ART: INT~G~R;

~3~3 26 ~ - YSTART~ GER;
27 - Sl ARTNOD~: ^BLOCK;
28 E~NDNOD~:^BLOCK;
29 FiRSrBUF: ^BLOCl C;
L~SI'BU~:^BLOCR;
31 COMPSTART:^BLOCK;
32 I~DGI~PLAG: IN~GI~R~;
~ 2: (NODE~ID: INTLGLR;
34 NODEUSED: INT~GER;
PE~NDING: IN~GER;
36 UPDOWN~ GE~R;
37 LINES:ARRAY~ OF RE~CORD
38 LADDR:^BLOCK;
39 NID: INTLG~R
~ ~ND); A
41 3: (LASl'CODE~i:^BLOCK;
42 NUMUSI~D: INTLGI~R;
43 CODES: ARR~Y10.. 1~ OP C}lAR) 44 END;
BLPTR-^BLOCK;
47 VAR ROMDATUM,I,J,K,XPOS,YPOS,TX,TYERROR,ARCERROR,SI KTOP, B,C,S,BUCKETID. INTEGE~R;
48 ONAM~,INAME: ALPA;
0 E~NDX,~NDY~ GER;
S0 YI~SNO: CHAR;
Sl SPECIAL,PREEOUTPUT,LINE~OUTPUT,~RCOUTPUT: BOOLEAN;
52 STACK: ARRAYl1.. 102~l OP CHAR;
S3 PRE~ROM: ARRAY[256.511~ OF ~GI~R;
S4 LLFT,RIGHT,CURRENI,ll?: BLPTR;

LINIPY OMSIPa~calVl~CRTll19JUD~ 2:54Site~ 1 P~gc2 Te~trs~, Inc., Tck L~b~, BuildiDg 5~ werton OR 970T7 1~37(~3 Linc Stmt L~ N~d Sourcc Statement SS DBCODE~R: ARRAY[0. ~1] OF XYPAIR;
S6 FRE~S: ARRAY[0.. 71 OF XYPAIR;
57 COMPRESSOR: ARRAYlQ.7,0.. 71 O~ INTBGE~R;
S8 REVBRS~R: ARRAY[0... ~!q OF CHAR;
59 SQRTABLE~: ARRAY10.. 7,0.. 71 OP INT~GER;
OPPERROR,N~XI'NODI~ID: INI~G~R;
61 REDlSPLAY,ALPHAMODle,FlL}~OUT~NODE~OUTPUl~,GRIDDlNG:
BOOLE~AN;
62 FRI~LISI: BLPI'R;
63 FCR}~G ORIGIN 170010B:INl~GER;
6~ XPOSRE~G ORIGIN 17U012B:INT¢GI~R;
6S RAMSWITCH ORIGIN 170014B~ GE~R;
66 RAMS ORIGIN 16S000B ARRAY 10.5111 OP INT~GBR;
67 SlATUS ORIGIN 17Q000B~GER;
68 MOTORRLADY ORIGIN 170006B:rNT~GE~R;
69 CIRCBUF ORIGIN 4Q0B-ARRAY[0.. 1Z71 OP IN~GER;
CB ORIGIN Z70B:INT~GER;
71 TRAC~,STOPPlNG,~ NG,lMAGPMODP~DoTTlNB.BARslNG~
INPUTGIV~N:BOOLZAN;
72 LASTXPOSLASTGRX,LASTGRY.LASTHIY,LASTHIX:INT~GE~R;
n SINGCASZSARRAY[0.. 7] OPINTLGER;
7~ XCE~N,YCLN,XSCALE,YSCALE~-R}~AL;
7S BLOCKSLI~FI ,MA~CBLOCKS:INT~GE~R;
76 SCALE~D:BOOLE~AN;
77 WINDOWWIDTN,MAXB}~NWNT~GPR;

79 PROCZDURL COMPACrl~Y(BP BJ,PTR); E~C~RNAL; /~ COMPRLSSE~S
A E7RP}~MAN BIN I
PROC}~DURE~ ANMOD~; LXl~RNAL; /- GRAPHICS /
81 PROCEDURL RE~LBLOCK(BP:BLPTR);I~ RNAL; /- F~ SOM~
~ORAGL /

~7370;3 82 ~ FUNCTION NEXI'FREE(VAR P:BLPTR; VAR C~GE~R)~ GI~R;
LXIl~RNAL; 1- GE~T NE~XI' CODE FROM A BlN ~1 83 PROCEDUR~ D~LEI'E(BP:BL~R); E~ERNAL; /~ DI~LET~ A
PRPE~MAN BIN 1 84 PROCEDURE~ MOVEABS(X,Y~ GER); leXI~RNAL; /- GRAPHICS ~/
8S PROCEDURE DRAWABS(X,Y:INl~GER); E~XTERNAL; /- GRAPHICS /
86 FUNCTION NLWNOD~(HOWMANY: INTE~l~R; LlL2,L3~L~: ESLPrR):
BLPTR; E~CI~RNAL; 1- MAKI~S NODI~
87 PROCEDURE PLIP; I~XTERNAL; /- DIRECT ItO TO OTH~R S~RIAL
LIN~ 1 88 PROC}~DURL HOSI'WT; EXI~RNAL; /'' WAIT UNTIL HOSr IS READY 1 I~S~+I

92 PROCE~DURE~ LINEIE7Y(BP:BLPl'R);
~3 94 VAR EP,FP,TP BLPI R;
COllNT,AFX,AFY,PlND~C~ GE~R;
96 EC,E~X,~Y,SX,SY,I,I,R: INT~GER;
g7 NP:BLPTR;
98 ,.
99 PROCEDURE~ CH~CKNODE(TONODl~,FROMNODE: BLPTR; X,Y,OX,OY:
INT~GER);

~ 1-lOQ CHECKNODE CHECKS TO SE~ ALL TH~ LINE~S eMANATlNG
PROM A NODE!
103 HAV~ BEI~N CREAl~D. IP SO, THEIR ID~ ARE~ AVAILABL~
POR TRANSMISSION.
104 ~/
lQS
106 VAR l,MASK: INI~G~R;
107 TE~MP:BLE~R;

~1 1~737l~3 LINIE~Y OMSI Pascal V1.2C RT11 ~Jun-84 2:54 Sitc ~ 1 P~ge 3 Tclctr~n~, Inc., Tel~ Lab~, Building 50, Bca~cnon OR 97077 Linc Stmt Levd Nest SourceSt~tcment 109 B~GIN
110 1 3 1 IP ~ONODl~<>NIL)& ~ROMNODE~>NIL~THI~N BEGrN/' CH~CK ARG EXIST /
111 3 3 3 MASK:=1;/- POR E~ RSUSLINE! IN~70 /
112 ~ 3 3 FOR I:=1 TO TONODE~^NODEIUSED DO /~ CHI~CK ALL
LINKS TO PIND CURRENT BIN '~/
113 5 3 4 llF TONODE^ L~S[IIlADDR=BP ~HLN BEGIN /a BP
IS ARG TO LINI~
114 7 3 6 TONODle^LlNE~S[I]NlD:=PROMNODl~^NODElD;
/- CONNI~CT TO OPPOSITI~ NODL /
1~5 8 3 6 TONODE^llNES[ll.LADDR:=NIL; /' DONT-T DO
IT A~AIN /
116 9 3 6 IP BrlDG~PLAC;=1 THEN TONOD~^.UPDOWN:
----TONODE^.UPDOWN I MASK; r CHI~CK PDG~S /
117 11 3 6 ~CIT /- ONCI~ POUND DO IT AND LEA~ /

119 12 3 5 ELS~ MASK:=MASK-2; /- SHIFI' BlT POR N~XT LrNK /
120 ~3 3 3 TONODE~^ PENDING:=TONODE^ P~NDING-1; /- DI~CR
NUMBE~R TO DO 'I
~21 14 3 3 IE7 TONODI~ NDlNGc~ l'Hl~N BI~GIN /- SE!E~ IF Rl~ADY
TO &O /
122 16 3 S PLIP; /- LOOKS THAT WAY, TALK TO HOST /
123 D 3 S HOSTWT; /- MAKI~ SUR~ ITS RI~ADY /
12~ 18 3 S WRlTB('1':1,TONODE~^NODE~ID:li,X:S,Y:S, TONODE~^ .UPDOWN~,TONODE^ .NODEUSI~D~);
~25 19 3 S FOR I:=1 TO TONODE^NOD~US~D DO

~ ~73703 - WRITE~IONODI~^ LINE~S[IINID~
~Z7 21 3 S W}UT~LN; /~ ON~ NOD~ PleR LIN~ /
128 22 3 5 FLIP /~ BACK TO THE l~RMINAL /
~29 ~ND
W END
131 END;

133 PROCE~DUR~ NBX~NDPOINT;

~36 N~X~NDPO~NT IS THE~ HI~ART OP TH~ LIN~ PINDIN~
ALGORITHM. lT
~7 WALXS DOWN THL PRELMAN CHAIN COD13 K~EPIN(3 TRACK OP 1~1 ~38 POSITION OP THE~ MARKERS IN X-Y SPAC~. WHEN 11' ~7INDS A
LARGL
139 ~NOUGH DLVIATION IT RE~lIJRNS THE~ CURRE~ NDPOINT IN
140 THE NON-LOCAL VARIABLEIS E~X AND E1Y.

1~,3 VAR MPl,MP2,LASll~P:BL}q~;
14~ WINDOWARRAY[l.. ISI OPINT~G~R;
1~,S CORNLRFLAG,LOCALSTATE,GLOBALSI'AT~:BOOLI~AN;
lU DX,DY~BACKUP,MCl,l~gC2,MXl,MX2,1~gYl,MY2,FCOD}~,I,I, NUMFR~PS: INTLGER;
1~.7 1~8 PUNCTION ~;LOBAL(FCODE~:INI~GE!R; VAR BACKUP:~GER):BOOL ~AN;
149 , ~so r ~S1 GLOBAL DOI~S 1~ ACTUAL OUT OP BOUNDS CHE~CKING, RE~TURNING
lS2 A BOOLEAN VALUI~. IP l'HAT ~ALUI~ IS TRUE~ THE~N BACKUP
~5a CONTAINS THL NUMBE~R OF PR~E~MAN CHAIN COD~S THAT l'H~ BIN
IS4 SHOULD B~ BACK~D UP.

g3 1 ~737~)3 lS7 VAR PX,PY,ERRORX,E~RRORY,~7,MX,MY~ G~R;

~S9 BEGrN
160 1 ~ 1 GLOBAL:=PALS~ ASSUMI~ PAILUR~ TO BRI~AK LINE l 162 GLOBALSTATE FLIP FLOPS IN ORDLR TO G~T l ~NO FRE~PMAN

LINIPY OMSI Pa~cal Vl.2C RTll 19-Jun-84 2:54 Sitc ~ 1 Pligc ~, Te1~trooi~, Inc., Tel~ L~b~, Building 50, Bunerto~ OR g7a~7 Line Stmt Lcvcl Ncst SourceStatcment 163 CODI~S AT THE~ ~ND OP THE~ BIN FOR ~ RY ON~ MAN
CODE GOTl~N
16~ POR TH~ MIDDL~ OP TH~ BIN. ~7URTHERMORl~ IT IS
NI~CE~SSARY TO WAIT UNllL
16S ENOUGH CODI~S H~VE BE~EN REIAD B_FOR~ ANYI HING CAN BP
DONI~. THIS
166 IS BEACUS}~ OF THE US~ OF AN AVE~RAGING WIND~W ON TH~
MIDDLE~ POSmON

168 2 4 1 IE~ GLOBALSI'ATI~ h (NUMFRE~_S>---WINDOWWIDTH)THE~N BEGIN
169 4 ~, 3 F:=NE~XTFR~E~MPl,MCl) h 7B; /- GBT N~XT FRE~MAN
CODE FROM LAGGING MARKL~ /
170 S 4 3 MXl:=MXl+FRE~_S[Fl*X; /- UPDATP, POSITION /
171 6 4 3 MY1:=~qYl+FRPl~F
m 7 4 3 MX:=(~lX1+MX2)DIV2;/- GET ~VI~RAGI~DMIDDLI~
POSITION /
173 8 ~ 3 MY:=(MY1+MY2) DIV 2;
174 9 ~ 3 PX:=MK~X; /- ~RAPOLATI~ CORR_CT ENDPOINT ~I
17S 10 4 3 PY:=MY~SY;
176 11 ~ 3 E~RRORX:=~BS(I~Y-PX); /- G~T X AND Y ~RROR

., ~y ,, 1~3703 ~: COMPON~NTS~
1~ ~- ~ 3 ~RRORY:=AB~Y-r~;
1~ ~ 4 3 IFSQRTABLEl~RRORX~RROR~>~RRORTH~NB~&~/-SE~IFTOO MUCH-I
m ~ 4 S GLOBAL:=TRUL;
16 4 S IF~RRORX>ERRORYTH~NBACKUP:=ERRQRX/-~T
BACKUP'I
~1 ~ 4 6 ~BACKUP:=~RRORY
182 I~ND;
~B 19 $ 3 P:--N~XTPRE~(Mn~C2)~ ~;/-DO$AM~PORLLADING
POSmON /
3 MX2:=MX2+~ReES[~PX;
~S 21 4 3 MY2:=MY2~FR~ES1~Y
~ND;
1 GLOBA~TATe:=NOTGLOBA ~ AT~/-TOGGLLSTAT~-/
~8 ' E~ND;
,8g BLG~
~1 1 3 1 NUMPRLES:~;/-NUMB~ROFPRe~MANCOD~SREADFROM ~ND
MARKI~R -/
15Q 2 3 1 SX:--EX; / SET SI ART AND MIDDLE MARKERS TO CURRENT
E~ND MARKE~R /
lg3 3 3 1 SY:=~Y;
19~ 4 3 1 MX1:-E~;
19S S 3 1 MY1:=EY;
196 6 3 1 MCl:=EC; /- POrNTER AND IND~CES TOO l ~7 7 3 1 MPl:=I~P;
198 8 3 1 GLOBAI~ATE~:=FALSe;
199 9 3 1 WHILE~ EPoNlL DO /~ DONT DO 11' BEYOND END OF LISI' J
200 10 3 2 BeGlN
201 11 3 3 LASI~P:zEP; I- GE~T CURRENT POINl'ER /
~02 12 . 3 3 FCODE:=NEXI'PREE~ P,LC~ ~ 7B; /- GEÇT NEXT FREEMAN
CODE FROM END OF LISI l ~73703 20B 13 ~ 3 ~ -NUMFRBLS:=~FRBE~S~l; -20~ 14 - 3 3 E~X:=EX~ PCODB].PX; /'' UPDAI~ POSIl'ION l 20S U 3 3 E~Y:=EY~PRBESIFCCDE~] PY;
206 16 3 3 IF NUME~E~ES=~rNDOWWIDTH THBN BB~ IP T~
LAGGING MA~K}7;R CAN Bl~ S~T /
207 18 3 S ~X2:=E~X;
208 19 3 5 MY2:=EY;
209 20 3 S MCZ:=BC;
210 21 3 S MP2:=EP
211 END;
2~2 22 3 3 CORNE~RFLAG:=GLOBAL(PCODB,BAC~CUP); l~ S~ IF TH~T
LASI' CODE~ MADE A CORNE~R /
213 23 3 3 IP CORNBRPLA~ THBN BBGIN
21~, 2S 3 S IP EP=NIL THEN BE~GrN 1- LAST CODB M~DEI CORBBR ~/
21S 27 3 7 BP:=LASTBP; / MAKB BACKUP POSSlBLe ~/
216 28 3 7 E~C:=~rNUMUæD

L~IPY OMSI Pa~cal Vl.2C RTll 19-JL~n-84 2:S4 Sitc ~ 1 Page S
Tel~tro~, Inc., Te~ Labs, Building 50, Bcavcrton OR ~7077 LiDC St~t Levd Nat Sou~ce StatcmeDt ,;
217 BND;
218 29 3 5 IE~ BACKUP>=NUMPREBS THBN BACKUP:=NUMFRI~I~l;
/~ SBB IP BACKUP TOO MUCH l 219 31 3 S FOR 1:=1 TO BACKUP DO /- BACKUP END MARKI~R /
2ZD 32 3 6 BE~GIN
221 33 3 7 ~C:=EC-l;
2~2 3~ 3 7 IP BC~0THENBEGIN
~3 36 3 9 EP:=EP~ LASTCODBS;
37 3 9 BC:=BrNUMUS~
225 ~ND;
226 3B 3 7 l:=ORD(EP^-CODES[BC]);

~6 ~73703 2Z7 39 ~ - 7-; EX =Ex-~mPx; ~- POSITION TOO l -228 ~0- 3 7 ~Y:=~Y-FRl~ES[~l.PY
END;
230 41 3 S I~XIT /- E~CIT LOOP WHeN A CORNI~R IS POUND l 232 ~ND;
233 42 3 1 IE~ EP~NIL TH~N B~GIN /- IS THIS A CORN~R IN A BDN /
3 3 ~ =N~WNOD~(2,BP,BP~NIL~IL);/'' MAKEI THE~ NODL
E7OR IT l 235 4S 3 3 CHeCKNOD~(BrSl'ARTNODL,NP,SX,SY,l~X,l~Y); /^ CHE~CK
BOI~l DIRE~CTIONS /
236 46 3 3 CHeCKNODl~NP,BrSI'ARTNODE PX,eY,SX,SY);
237 47 3 3 IP BP^SIARl~ODE~NIL THLN
238 48 3 ~ IP BrSTARTNODE~^.PE~NDlNG~=O THE~N
R~LBLOCK(BrSrARTNODE); 1- RBLLAS~ IF TR~NSMIT~D I
W 50 3 3 BrSTARTNODB:=NP;/-NPISNOWTHBSIARTNOD~O~
THL BIN I
2~0 51 3 3 BrXSTART:=~C; I- UPDATE~ START POS TOO I
241 S2 3 3 Br.YSTART:=EY;
242 S3 3 3 IF LINE~OUTPUT THI~N MOVI~ABS(SXSY) I- IF DR~ING
LINE~S SLT UP POR DRAW I
243 I~D
244 END;
2~S
246 BI~GIN
247 1 2 1 IF BP=NIL THE~N WRITL(CHR(7):1,CHR(31):1,'NULL BIN':8) I- LRROR CHECK ~I
2~8 3 2 2 I~ BE~GIN
249 4 2 3 IP ALPHAMODE THI~N BEGIN / OUTPUT FRLE~MAN CODL AS
CHARACTI~RS? I
2S0 6 2 S FP:=BP^.FIRSTBU~ G~T I~R TO E~IRST BLOCK
0~ PRLEMAN CODES I
251 7 2 S IP FPoNlLTHE~N BE~GIN

~73703 252 9 ~ .7-- - COUN~:=0; J- r~rr INDE~C "I ~
253 10 2 7 WHILE FPoNIL DO /~ WHIL~ MAN
CODES L~Fr l 254 11 2 8 BE~
255 12 2 9 J:=NEXr~R~(}7P,CO~T) ~ 7B; /~ ~ET
NE~Xr CODE /
256 13 2 9 WRlT~(CHRa+48):1) t- wRrr~ CVD~ AS
ASCII NUMERAL l 257 LND;
2S8 14 2 7 WRITELN;/- <CR~TOTE~RMINAT~ A CHAIN COD~ ~/
259 ~S 2 7 WRIT~LN/' BLANIC LIN~TO S}~PARATE~ l 260 E~ND
261 E~ND
262 16 2 3 coMpAcTlFlr(Bp); r SQUEEZL PXTRA BLOCKS AND
CORNE~RS OUT OF CHArN CODL /
263 17 2 3 BUCK~TID:=BUC~TID+l; 1- N~l~D NEW ID FOR BrN l 264 18 2 3 BP~,ID:=BUCRE~l~;
265 19 2 3 IP FR~EOUTPUT THEN BEGIN /- DRAW ACTUAL FRI~PMAN
CODES? /
266 21 - 2 S I~X:=Br XSTART; I- INITIALIZ~ TO THE
B~GINNING OF THE~ BIN /
267 22 2 S E~Y:=Br.YSI'ART;
268 23 2 S MOVE~ABS(B,eY);
269 2~ 2 S ~P:=BP^.PIRSTBU~; I- GET PrR TO CHAIN COD~
BLOCKS ~/
270 25 2 5 IE~ PPc~NlL TH~N BEGrN

LINI}7Y OMSI Pascal Vl;!C RTll l9-Jull-84 2:!i4 Sitc ~ 1 Psge 6 Tcktro~is, Inc., Telc Lab~, BuildiDg S0, BcalrcrtoD OR

Li~c S~mtLc~d Nctt Sourcc StatcmeDt 1~37V3 ~71 27 ~: 7- - COUNT:=0;I~ INIT INDI~C r --m 28 - 2 7 J:=N}~ P,COlJNT) h 7B;I- G~T FIRST
COD~ /
m 29 2 7 Rl~Pl~AT
Z74 30 Z 8 BE~GIN
27S 3t 2 9 I:=J; l~ DO RUN LE~NGTH COMPRI~SSION /
Z76 32 2 9 R:=l; I~ RUN LE~NGTH /
m 33 2 9 IP ~P~>NILTHE~N BI~GIN
278 3~ 2 11 J:=~X~E~(E7P,COVNT) h 7B; /~
GE~T NE~ CODI~ /
279 3$ 2 11 WHILE~ I=l DO /- DO IT UNTIL
DIPF~RI~NT CODE IS FOUND /
280 37 2 lZ Bl~GIN
281 38 2 13 R:=R~l;
282 39 2 13 IP PP=NIL TH~N E~CIT /9 QUIT
IP LlSr E~XHAUS~D /
2~3 41 2 14 ELS~ J:=NEXIF~EE(PP, COUNT) J~ 7B
28q ~ND
28S END;
286 ~,2 2 9 ~ X+PREE~SIIl.PX'R; /- UPDATE~
POSITION l 287 43 2 9 EY:=EY+FR8ESII~Y R;
288 ~ 2 9 DRAWABS(I~ Y) /- DRAW TO IT /

W ~IL ~P=~L) h ~=1) /- ~A~P, WH~N
LIST DON~ AND CODI~S ARI~ EQUAL /
291 ~ND
292 4S 2 6 ~LSP DR.AWABS(~X,BY)/- DRAW POrNT FOP~ EM3~1'Y
LISI' /
2~3 END;
29~ 4i 2 3 IF LINE~OUTPUT I NODEOUTPUT THE~N BE~GIN /~ TRANSMIT
E~ND POINT ~IFO? /

~q 12~37(3~

295 ~8 ~ - 5 ` ~ =Br XSI'ART; io INITIAXZI~ ~ND POSITION /
296 49 2 S ~Y:=BP^.YSTART;
297 S0 2 S IF LINLOUl'PUT THEN ~OVl~ABS(~X,E~Y); /- SeT UP
LINE~ DRAWING /
298 S2 2 S IP Br.FlRmUP~>NlL THE!N BE~GIN
299 S4 2 7 E~P:=Br.FlRmUE7; /- INITIALIZE~ MARKE~RS /
300 SS 2 7 EC:=0;
301 S6 2 7 WHILI~ E~P~IIL DO /- UNTIL LISI IS E~MPl"f /
302 S7 2 8 Bl~OEN
3D3 S8 2 9 NE~ NDPOINT;/- GI~T NEXT CORN~R DN
I~X,E~Y /
304 S9 2 9 IP LIN}~OUTPUl THE~N DRAWABS(LX,E~Y) /'' DR~IV TO IT IP WANT~D J
30S E~ND
306 E~ND
3~7 61 2 6 ELSE IP LI~OUTPUT THE~N l)RAWABS(E~X,E~Y) I-NULL LISI', DRAW POINT /
3~ ~ND;
309 63 2 3 IPNODEOUl'PUTTHI~N B~;IN1- COMPL~ NODE~
TRAIJSMISSION? /
310 6S 2 5 CHI~CKNODE(BPSTARTNODI~,Br~NDNODI~, BrXSTART,BP^.YSTARTEX,E~Y); /- CH_CK NODBS /
311 66 2 5 CHECKNODE(BP PNDNODE~,BPSrARTNODP,E~ Y, Br XSTART,BP^.YSTART);
3~2 67 2 S IP BPS~ARTNODE^.PENDIN~;~=0 IHE~N
RELBLOCK(BP^STARTNODE~ SEE IP CAN BE RELEASED /
313 69 2 S IF (BP^STARTNODE~BrE~NDNODE) 314 70 2 6 (BP~NDNODE^.PENDING<=0) THEN
RE~LBLOCK(BP^ ~NDNODE) 31S END;
316 71 2 3 PP:=BP.PlRSlBUP; /- PREE ALL PRleLMAN CODL BUPFE~R
BLOCKS /
317 72 2 3 WHIL~ FPoNlL DO

qo 1~370~ ~

318 n ~ ~ - - BE~GrN ~-319 7~ 2 S TP:=FP^NE~CI;
320 7S 2 5 RELBLOCK(PP);
321 76 2 S PP:=TP
322 END;
323 77 2 3 DELETE(BP); /- NOW DELETE ACllJAL BIN DESCRIPTOR 'I
32~ 78 2 3 END;

LINIE7Y OMSI Pa~csl V12C RTIl 19 Jun B4 2:!i4 Site #1~1 Page 7 ~ektronix, loc., Tek Labs, Luilding 50, Bea~re~ton OR 97~77 Linc Stmt Lcvcl N~t Source Statema~t 32S 79 2 1 E~NDX:=EX; /- S~T END OP BIN AS SID~ CT POR
M~UL' l 326 80 2 1 ENDY:=~Y;
327 81 2 1 ANMODE~ /- LEAV~ ~N ALPHA MODE IN CASE OP ~ OR
MLSS~GE ~l 328 ~ND; /' THAI"S ALL FOLKS /

3â0 BE~GIN

ErrDr~l detectcd: 0 Pree memory: 10969 word~

q~ .-~7370~

SING ~ OMSI Pascal V12C RT11 1~Jun 84 2:52 Site #1~1 P~
Tektroni~, Inc., Tel~ Lab~, Building S0, BeavertoD OX 970T7 Line Stmt Lcvel N~st Source StatcmeDt PROGRAM SING;

4 SING IS THl~ SINGLARITY ANALYZI~R POR THS~ KPGS SYSrBM.
IT'S ARGUME~NTS ARI~ WINDOW NUMBE~R, WINDOW
DE~scRlproR ~ND TWO
6 PC)SSIBLE PRE~MAN CODE~S.

B

9lYPE~ RAST=ARRAYl0.511] OF BOOL~AN;
10PlLeRAST=ARRAY10.311 OF INT~GBR;
Il ALFA=ARRAY11.. 141 OP CHAR;
t2 XYPAlR=ReCORD
~3 PX~ G~R;
14 PY: INT~GER
lS ~ND;
16 BLOCK=R}~CORD
17 NLXT:^BLOCR;
18 CASI~ INTBGE~R OP
V 1: (LAST:^BLOCK;
2D BROTH~R:^BLOCK;
21 ID: INl~GER;
22 XSTART: INT~GLR;
23 YSTART: INT~GE~R;
~ STARTNODE~:^BLOCK;
~NDNODI~:^BLOCIC;
26 FIRSTBUP: BLOCK;
27 LASrBU~:^BLOCK;

4 ~

~X7~703 COMP~ART: ^BLOCI~; v 29 I~DGEPLAG~ G~R);
3D 2: (NDDE~ID: INI~GPR;
31 NODE~US~D: ~NTEGER;
3Z PENDrNG: JNTæGER;
33 UPDOWN:INT~G}~R;
34 LINES: ~AY[l.. ~l O~ RE~CORD
LADDR:^BLOCK;
36 NID: INTEGI~R
37 ~ND~;
38 3: (LASICODLS:^BLOCK;
39 NUMUSE~D: INTEGER;
CODES: ARRAY[0.. 17] OF CHAR) ~1 ~ND;
~2 BLPl~C=^BLOCK;

YAR ROMDATUM,l,l,R,XPOS,YPOS,'lX,TY,ERROR,ARCERROR,SrKTOP, B,C,S,BUC~ETID: INT~GE~R;
4S ONAMI~,INAME: ALE7~;
U , l~NDXENDY:IN~GER;
47 Y~SNO: CHAR;
48 NOTSPJ~CIAL,E7REEOUIPUT,LIN~OUTPUT,ARCOUTPUT: BOOL~AN;
49 STACK: ARRAY[1... 10~4~ OF CHAR;
SO FR~ROM: ARRAY1256.5111 OF INTEGE~R;
51 LE~FI ,RI~HT,CURRE~NT,TP: BLE'TR;
S~ D~CODER: ARRAY[0.311 OF XYPAIR;
53 FRE~ES: ARRAY[0.. 7J 4F XYPAIR;
S~ COMPRE~SSOR: ARRAYlQ.7,0.. 71 OP INl~GER;

~ING OMSI Pa~cal Vl C RTll 19-Jun-84 2:!i2 Site f 14-1 P~lgc 2 Te}tro~%, Inc., I'cl~ Labs, Building 50, BeavcrtoD OR 97077 Li~c Stmt Lcvcl Nest Sourcc Statcme~t 1~7~70;~

RE~ RS~R: ARRAYl0L51 OE7 CHAR;
~6 - SQRTABLL: ARRAY~0.. 7,0.. 7] OP INT~GQR;
S7 t)PP~RROR,NP~ lODl~ID: INl~Gl~R;
S~ CYBE~RLlNK,ALPHAMODL,PlLE~OlJT,NOD~OUTPUT,m~2NODE:
BOOL~AN;
S9 FR~I~LIST: BLPll~, PCR~G ORIGIN 170010B~INl~G~R;
61 XPOSR~G ORIGIN 1700~2B:INT~G~R;
62 RAMSWITCH ORIGIN 170014B~ GER;
6a RAMS ORIGIN 160000B:ARRAY[0.511] OP INT~GI~R;
64 Sl'ATUS ORIGIN 170000B:[NT~GI~R;
MOTORRLADY ORIGIN 170006B~ C}ER;
66 CIRC~UP ORIGrN ~0OB ARRAY[0.. 1Z71 OP INI~GER;
67 CB ORIGIN 270B:INTLGI~R;
68 TRACESI OPPING,TES17N(3,1MAGEMODE~,DOIT~IG,BARSING, INPUTGIVBN:BOOLI~N;
69 LASI7UOS,LASTGRX,LASrGRY,LASTHlYLASl~lIX~GE~R;
SINGCASES:ARRAY~0.. 7] OP INT~G~R;
71 XCEN,YXEN,~CSCALL,YSCALE~L;
n BLOCKSLEE7T,MA~CBLOCKS~ ER;
73 SCALED:BOOL~AN;

7S PROC}~DURI~ NE~WBUCKE~T(VAR BPI R BLErrR); LXI~RNAL; /- CRE~AT~S
A NI~W BlIlJ l 76 PROC~DURB RPLBLOCB(BP:BLPTR); EX~RNAL; /- RELBASE~S A
BLOCK TO TH~ FRE~}~ LIST l 77 PROCEDURE~ ADDFREEMAN(COD~DATA:rNTEGER~; LXT~RNAL; /- ADDS
A COD~ TO THL CURRE~NT UN ~/
78 PROC~DUR~ INSE~RT(BP:BLPTR); E~XTI~RNAL; /- INSeRTS TH~
SPECIFIED BIN B~PORI~ THE CURRE~NT BIN d/
79 PROCeDURe D~LETE(BP:13LPI'R); ~XI~RNAL; /~ DI~LPT~S THI~
SPECIFI~D BIN /
FIJNCTION NE~Xl'PRl~E~(VAR Sl'RE~AM:BLPTR; VAR COUNT:INTEGER):
9'f ~737~3 lNTEGE~R; E~CI~RNAL; /- G~NERAll~; A SI'R~AM O~ CODI~S /
81 - PROCE~DURE COMPA~(BP:BLPI'R); }~XI~RNAL; /- COMPRE~SSeS A
PRE~E~MAN BIN l 82 PROCEDURE~ UNWIND; ~C~RNAL; /- UNWINDS THE SI ACK WHE~N
SPECIAL MODI~ IS E~XIl~D l 83 PROCEDURE~ LINP,1~7Y(BP:BLPI~); E~X~RNAL; l~ LIN~ FINDS ~1 A
FREMAN BIN /
84 PUNCllON NE~WNODE(HOWMANY:INTLGE~R; Ll,L2,L3,U: BLPIR):
BLPTR; E~X~RNAL; /- MAKE~S A NODE~ l 86 I-S~+-I

88 PROCE~DURE~ SINGULARITY(ROMDP,X:IN~EGE~RjROMDATA~ GE~RjCl:
INl~G~R;C2:1NTLG~R);

VAR LASTCODE~,l,RINl~l~R;
91 FLAGl,PLAG2,SAVE~SPC: BOOL~N;
~2 BP,Nl,N2,Ll,L2,L3L~,PPl,PP2,NP,FP,FPE7,PPL~Ll~R;

9S 1 2 1 LASTCOD~:=Cl; I- SBT TO S}~E~ LATBR IP CUXRRNT S~IOULD
BE ADVANCPD /
96 2 2 1 SAVE~SPC:--NOTSPECIAL;
g7 3 2 1 l:=(ROMDATA DIV 8) ~ 7B; I- GE~T SINGULARIl~ TYPE l 98 4 2 1 CASE~ OP
99 1- CONTINUB CURRBNT BIN l 10D S 2 2 0-. IF NOTSP~CIAL I HBN ADDFREE~MAN(Cl) l~ NORMAL MOD~ l 101 7 2 3 I~LSE B~GIN
102 8 2 ~, IP (Cl h TB)=O TH~N BI~GIN /- SI AC~ HORIZONTAL
PRE~MAN CODE 0 l 103 10 2 6 SPKTOP:=SI'KTOP~l;
104 11 2 6 SPACK[SIl~TOPI:=R~ RSl~R[Cl] /'' ST~CK THI~
RI~VERSE~ OP THE~ COD~ /

1~737~3 END
2 2 S ~1~ BLG~ LSL T~RMINATL SPBCIAL ~ODL ~/
2 6 UNWIND;I- UNWINDTHE~ STACRE~D COD~
108 1~ 2 6 NE~WBUCKLT(Nl); I- MAR}~ A BIN POR 1 CURR~NT CODE~ ~J

SIN~ OMSI Pa~cal Vl.2C RTll l9-Jun-84 2:!i2 Site ~ 1 Page 3 Tcl~ttonL~, Inc., Te~ Lab~, Building SD, BeaVertoD OR 97a77 L;DC Stmt L~d Nest Soutcc Sts2emellt 109 lS 2 6 Nl^5TARTNt)DE:=NLWNODE~(2~ URRLNT~L, NIL); I- MAKI~ NODLS POR IT /
110 16 2 6 CURRE~NrSrARTNODP:=Nl^5TARTNODE~;
111 17 2 6 CURRBNT:=CURR}~NrN}~XT; I' INSERT NE~W BIN
A,~I ~R UNSTACKLD BIN /
11Z 18 2 6 INæRT(NV;
113 19 2 6 ADD~REE~MAN(C~ ADD~EMAN COD~ T~ TH~
NE~WLY n~SE~RTED B~
114 . ~ND
13S . END;
116 J ON~ SrART S~NGULARll~ ~/
117 20 2 Z 1: B~CIN
118 21 2 3 NE~WBUCK~T(NV;I~ MAKE AND lNS~RT THE NI~W B~
119 22 2 3 INS~RT(NV;
~0 Z3 2 3 IP ROMDATA=010B THEN BEG~ SPECIAL CAS~
SJ:NGLL PIX~L W~NDOW l 121 25 2 S R~LBLOCK(N1^~RmUE7);
122 26 2 3 N~ RSrBUP:=NIL; /- NO PREEMAN CHAIN
COD~S I
~3 27 2 S NrLAmUF:=NIL;
~4 2B 2 S N1^.COMPSrART:=NIL;
12S 29 2 S NrSrARTNOD~:=NEWNOD~(2~1~1~nL~nL);

qG .. , .

1i~73703 SAKL SLLP REE~ NTLAL NODE~
~26 3û 2 S Nl^~NDNOD~:--Nl^SI'ARTNODE~;
~27 31 2 S LINEIFY(NI);
128 32 2 S LASI'CODI~ S~T TO NOT AO~JANCE~ CURRE~
L~9 ~ND
~30 33 2 ~, ~LSP B~GIN
~31 34 2 5 Nl^Sl'ARINODE~:=NEWNODE!~l,Nl,N~L,NIL,NIL);
i MAKE~ A I NODE FOR TH~ START ~/
13Z 3S Z S ADDE'RE~EMAN(Cl~ I- ADD THE~ MAN CODE ~/
~3 E~ND
~ ~ND;
135 1- ONI~ END SINGULARI~ /
136 36 2 2 2: IPNOTSPE~CIALTHE~N B}~GIN/- NORMAL MODE~ l ~37 38 2 4 CURRE~NT^~NDNODl~:=NEWNODE~(l,CURRE~NT,NIL~NIL, NIL); I- MAKI~ AN END NODI~ POR CURRE~NT BIN l 138 39 2 4 LINE~IE'Y(CURRENT); I- LINIl PIND AND DLLETE
CURR~NT BIN l 139 40 2 4 LASTCODE:=Q /- NO ADVANCE /

141 41 2 3 ~LSL BEGIN /- ELæ UNSI'ACX AND TRE~AT AS ONE~ START /
142 42 . 2 ~ UNWIND;
143 43 2 4 CURRI~NrSI'ARTNOD~:=NE~WNODE~(l,CURRE~NT,NIL~NlL, .
NIL); /- MAKE~ START NODE~ /
144 44 2 4 LASTCC)DI~:--1/- FORCE ADVANC~ /
14S END;
146 /- TWO SI ART SINGULARlllf l 147 4S 2 2 3: IE' (C2 ~: 7B)~>0 THE~N BLGIN 1- SE~ IF SPCOND CODE
IS HORIZONTAL /
148 47 2 4 NEWBUCBET~1); /- NV, SO MAKI~ l'WO N~W BINS /
1~9 48 2 4 INSLRT(Nl);/- ANDINSE~RT THI~M /
150 49 2 4 ADI)FRI~I~MAN(Cl); l- DON'T PORGBT TO ADD THE~
COD~S /
lS1 SO 2 4 CURRE~NT:=CURR~NT^NI~Xl';

q '1 ~'~73703 L52 S1 ~ :4~ ~ - NI~WBUC~T(N2);
~S3 S2 2 4 INS8RT(N2);
53 2 4 ADDPREE~MAN(C2);
2 4 N1^5I'ARTNODL~ WNOD~(2~ N2,NIL~NIL~
h~AKE~ Sl ART NODE~ ~/
~S6 S5 2 ~ NrSrARTNODI~:=Nl^SIARlNOD~;
LS7 S6 2 4 LASICODE:=C2 /- C2O0 SO AN ADVANCE WILL
HAPP~N '~/
~ ~ND
159 57 2 3 I~LSE~ BE~GIN/' INITIATE~SP~CIAL ~ODI~ /
160 S8 2 4 STACK[ll:=CHR(Cl);
161 S9 2 4 STACK[2]:=RE~VLRSE~R[C2I;
162 60 2 4 SIKTOP:--2;
, .
SING OMSI Pa~ V1.2C RT11 19-lun 84 2 !i2 ~ite #14-1 Page 4 Tcl~tro~, Inc., Tc~ Lah, Building 50, Be~Nenon OR 97a77 Linc StmtLcqel Ntst SowStatement 163 61 2 4 NOTSPECIAL:=FALSB;
lU 62 2 4 LASTCODE:=0 /- FORCE1 NO ~DVANC}~ l 165 ~ND;
166 1- l~VO E~ND S~IGULARI~ ~/
167 63 2 2 4: IF NOTSPECLAL THI~N BLGIN /- NORMAL MODB /
168 65 2 4 CURRENT^~NDNODB:=N~WNODE~(2,CURR~NT, CURRI~NI ^ N~XI',NIL,NIL); /- MA~ NDING NODB /
169 66 2 4 CURR~NrNBXIA~NDNODE~:=CURRBNT^J~NDNODE~;
170 67 2 4 LINI~IPY(CURRENT); l- LINI~ E~IND, D~LE~TB, ADVAP~C~ CURRE~
171 68 2 4 LlNl~l~Y(CURR~ /- DO IS AGAIN /
172 69 2 4 LASTCODE:=0/- NO ADVANCB ~/
173 ~ND
174 70 2 3 I~ B~GIN/- UNWINDSTACK ANOAPPBND /

~737()~'3 17S 71 ~
176 ^72 i 4 Ll:=CURRI~NT; I- CURR~NT IS A~WLY UNWOUND BIN /
IT7 7^~ 2 4 L2:=CURR~NI''NLXI';
178 74 2 4 L2^1AmUP^N~XI':=Ll^.FlRmU~ APPEND
CHAIN CODE~ LIST /
1^19 75 2 ~, Lr.FlRSl'BUl~^lA~:=L2^ LAS~BUP;
180 76 2 4 L2^ l,ASTLUP:=Ll^ .LASIlBUF;
181 77 2 ~, COMPACllFY~L2); 19 sQuBze IT DOWN /182 78 2 4 D_,LETE!(Ll~;/-TRASH UNY'VOUNDBIN 1183 79 2 4 LASI^CODE:- 11- FORCE~ AN ADVAMCE~ 1 A~ _ND;
185 1- TWO P.ND; ONL START SINGULARITY 1 A186 80 2 2 S: BEGIN
187 81 2 3 NLWBUCKE~T(Nl); 1- MAK~ A~ A~W BAI
188 82 2 3 IE7 NOTSPE~CIAL THEN BEGIN /- NOR~AAL MOD~ ''I
189 84 2 S N1^STARTNODE:=N~WNODE(3~1,CURRENT, CURR~ XT,NIL); 1- MAKE A 3 NODE~ I
190 8S 2 S CURRLNr~NDNODE:=N1^SrARTNOD~;
191 86 2 S CURR~NrN~Cr PNDNOD~:=N1~ SrARrNODE;
192 87 2 S L~ F Ir(CURRENT); /- TAK~ CAR~ OF T}~E~ IWO
~NDS l 193 88 2 5 LINEI~(CURR~NT);
194 89 2 S I~ND
l9S 90 2 4 I~LSE BLGIN I- T~RMINAT~ SP~CLAL MODE /
196 91 2 S UNWI~ID;
197 92 2 S Ll:=CURRLNT; 1- GET ADDR OF NLWLY UNWOUP~D
BIN ~I
198 93 2 S CURRLNT:=CURRLNr NB~ ADVANC~ TO BIN
TO D~LLTE~ /
199 9~. 2 S NP:=N~WMODE(3,1,1,CURR~ nL); 1- MAKE~
NODE~ FOR TH~ ~RSE~CTION I
200 9S 2 S Nl~ STARTNODL:=NP;
201 96 2 S L1~5TARTNS~D~:=NP;

9~ .

1~73~7~)3 202 ~ ~: 5 - CURR~Nl~NOD}~:zNlP; ~.
2m 98 2 5 LI~IFY(CURR~NT)/~ EMIT TH~ E~NDING BIN ~/
204 E~ND;
205 99 2 3 INSERTtNl);/- INSE~RTTHE~ SI'ARTING BIN /
206 lW 2 3 ADDFRE~E~MAN(Cl) I- AND ADD THE~ FREMAN CODE7 /
207 E~ND;
208 /- l~VO START; O~ END SINGUL~Ul~ /
209 101 2 2 6: BI~GIN
210 102 2 3 1JEWBUCKI~T(Nl); /- MAKEl TWO N~W BINS '~/
211 103 2 3 NI~VBUCKE!T(N2);
212 104 2 3 IP NOTSPECIAL THI~N Bl~(~IN /' NORMAL MODE /
213 106 2 5 Nl^ STARTNODL:=NI~WNOD~(3,Nl,~12,CURRI~NT, NIL); /- MAKI~ A 3 ~IODE /
21~ 107 2 S N2^5TARTNOD~:=Nl^SI'ARTNODE~;
21S 108 2 S CURRE~NTA~NDNOD~:=Nl^SI'ARTNODE~;
216 109 2 S LINE~IFY(CUM~NT)/- PROCI~SS ~IJDING BIN /

SING OMSI Pa~cal Vl.2C RTll ~9-Jml-84 2~i2 Sitc ~ 1 PDge S
Tc}tronix, loc., Te~ L~b~, Building 5D, Ba~verto~ OR 97077 Lil~e Stmt Lc~rel Nest Source Ststement 217 eND
218 110 2 ~ BE~GIN /- MAKI~ A S START NOD~ /
219 111 2 S UNWDND;
220 112 2 S NP:=N~WNOD~(3,CURR~NT,N1,N2,NIL); /' MAK~
NODI~ l 221 133 2 5 CURR~NT^SI'ARTNODI~:=NP;
222 11~ 2 S Nl^ STARTNODB:=NP;
223 llS 2 S N2^SI'ARTNOD~:=NP;
224 116 2 S CURRE~NT:=CURR~NT^N~CI' I- INS~RT N~W BINS
Al~l ~R UNWOUND B
225 E~ND;

226 117 ~: 3 INSERT~Nl); /- INSI~RT ~IRSI' BIN, ADD CODB TO ,-/T /
227 118 2 3 ADDFR~E~MAN(Cl);
~8 119 2 3 CURRE~NT:=CURR~ NEXI';1 /NSERT SECOND
AF~R FIRST /
229 120 2 3 INSE~RTtN2);
230 ~21 2 3 ADDPRE~EMAN(C2);
231 ~22 2 3 LASTCODE:=C2 /- USR SE~COND CODE~ TO CHECEC
ADVANC~ /
232 ~ND;
233 /- l~VO SI ART; TWO E~ND SINGULARITY /
23~ ~23 2 2 7: BEGIN
235 124 2 3 NEW8UCKI~T(Nl); /- MAU~ 2 NBW BINS /
236 12S 2 3 NE~WBUC~T(N23;
2~7 126 2 3 IP NOTSPECIAL THI~N BE&IN /- NORMAL MODl~ l 238 128 2 S Nl^SrARTNODE~ WNODE(4,CURRE~NT^NE~XT, CURRLNT,Nl,N2); /- MAK~ A 4 NODE~ /
239 ~29 2 S NrSl'ARTNODE~:=Nl^SIARTNODE~;
240 130 2 S CURRE~Nr~NDNOD~:=Nl^~ARTNODE~;
31 2 S CURRLNT^~.eNDNODE:=Nl^SIARlNODE~;
2~2 132 2 S IP ROMDE~X=375 l'Hl~N BEGIN / FUDGle TO MAKE~
PILL WORR BY PAIRING EDGLS /
243 ~ 2 7 Ll:=Nl^SrARTNODB;
24~ 13S 2 7 L2:=LrLlN}~ lADDR;
245 136 2 7 LrllNE~ LADDR:=Ll^lIN~SI41LADD~;
246 ~37 2 7 Ll^LINLS[4]lADDR:=L2 2~7 ~ND;
248 13B 2 S LIN~ Y(CURRE~NT); I- PROCI~SS THE E3NDIN~
BINS /
249 ~39 2 S LINE~IPY(CURRLNT) W BND
251 1~0 2 ~ ~LSI~ BI~GINI-TE~RMINAl~ SPE~CIAL MODI~ /
2S2 141 2 S UNWIND; I- UNWIND THB CHAIN CODI~ Sl'ACK I

I~J /

1~7~

253 142 ~: S - L2:=CURR~NT; I- GA~,T ADDR OF THAT NEW BIN l 254 143 2 S CURRE~NT:=CURR~NTANEXIA; I- GPT ~.DDR OP
BIN THAT IS E~NDrN~ l 25S 144 2 S NP:=NEWNODB('~,CURRE~NT,L2~N1,N2)j/- MARI~
A 4 NODE~ POR l'}IE~ RSECIlON l 256 14S 2 S L2ASIAAR~ODE:=NP;
257 146 2 S NlAslAARTNoDE~:=Np;
258 147 2 S N2A SIAARTNODE:=NP;
2S9 148 2 5 CURRE~NTA ENDNODE:=NP;
260 149 2 S 1~ ROMDEX--375 THEN BEGIN /- SAI~E
DELICIOUS A~UDGE~ /
261 ~51 2 7 Ll:=Nl^SlAARTNODE;
262 152 2 7 L2:=Ll^11NI~S12].LADDR;
263 153 2 7 Ll^LINE~S[2J.LADDR:=Ll^lIN~4]lADDR;
264 ~ 2 7 Ll^11NE~S14]1ADDR:=L2 25S AR,ND;
SS 2 S LINE~IPY(CURR~ PROC~ B BrN THAr E~NDS l 257 END;
268 ~S6 2 3 INS~RT(NV; I- lCNSE~RT NEW BINS, ADD FRE~MAN
CODE~S TU THE~M l 269 lS7 2 3 ADDPREEMAN(Cl);
270 ~S8 2 3 CURRENT:=CURR~NT^N~XI;

SING OMSI Pa6cal V12C RTll l~lun 84 2:52 Site ~ 1 P~lge 6 Telctronn, Inc., Telc Labs, Building S0, B~rerton OR 97077 Linc Stmt LeYcl Ncst Sourcc St~tcmcnt 271 lS9 2 3 INSE~RT(N2);
m 16D 2 3 ADDFREEMAN(C2), m 161 2 3 LASTCODE:=C2 I- ADVANCE~ ON THE STAI~ OF C2 ~/
27~ I~ND

I ~ ~ ,,.

127;~33 27S ~----~ END;
Z76 t62 ~ - 1 IP (LASICOD~ 1~ 7B3~0~HPN CURRE~ =CVRR~Nl`^N~Xr/-ADVANCE~ CURR~NT? /
m ~ND;
Z78 BI~GIN

E~orsdetected: 0 Frec memory~ 5 ~vord~

a 3 1~737~3 FR~MAN ~ - . ~ OMSI Pa5Cal V1 ~C RT11 19-JUD-84 2:55 S;tC ~1~1 P~ge 1 - -TC~trOD~ nC., TC~ Lab8, BUild;Dg S0, 8~CnOD OR 97077 Li~e Stmt Lc~el Nc~t Source StatcmcDt PROGRAM PRE~MAN;
2 l~
3 FR~MAN IS THL MAIN SUP~RVISIOR OP THI~
4 TE~KPCS DIGITIZING SYSI~M.

6 ITS FUNCTIONS:
7 COMMAND IN~RPRE!Sl~R
8 STATE~ CONTROL
9 PRE~MAN CODE~ DE~ ING

12 TYPE~ RAST=ARRAY[0.511] OF BOOLLAN;
13 FILE~RAST=ARRAY[0.311 OE~ G~R;
14 ALPA=ARRAY[1--14l OP CHAR;
IS XYPAIR=RLCORD
16 PX: INl~GEIR;
17 PY: INT~G~R
1.8 END;
19 I.
BLOCK IS THE MAIN DE~SCRIErrOR OP TH~ RNAL DAT~
21 STRUCTURE~ T HAS ONE~ OP THR~I~ PURPOSES:
2~ DLF~NI'rlON OP A FRE~MAN BIN
Z3 D}~PINITION OP A NOD~
24 STORAGE~ FOR FRLMAN CHAIN CODES
~l 26 BLOCK=RECORD
27 NE~XT:^BLOCK;
28 CASI~ GER OP

1~37()3 (LAST: ^BLOCK; 1~ MAN BIN D~SCRIPI'OR '~
3D . BROTHLR:^BLOCK;
31 ID: INI~GER;
32 XSTART: INT~GER;
33 YSTART: INT~GI~R;
34 SIARTNODE:^BLOCK;
3S I~NDNODP:'BLOCK;
36 FlRSrBUP:^BLOCR;
37 LASI BUP: ^BLOCK;
38 COMPSTART:^BLOCK;
39 EDGEFLAG: INT~GER);
2: (NODEID:INT~GER; /-NODI~ DESCRIPTOR '~/
41 NODE~US~D~ GER;
'12 PENDING: INTEG~R;
43 UPDOWN~ GER;
44 LINI~S: ARRAY[1.. 4] OP RI~CORD
4S LADDR:^BLOCK;
U NID: INT~GE~R
47 E~ND);
48 3: (LASI'CODES: ^BLOC~C; /'' PR~MAN CHAIN CODE~
BUP~R /
49 NUMUSE~D: INTEGLR;
S0 CODE~S: ARRAY~0.. 171 OP CHAR) Sl END;
S2 BLErTR=^BLOCR;

54 VAR ROMDATUM,I,I,K,XPOS,YPOS,17C,TY,E~RROR.IMXPOS,SIKTOP,B, C,S,BUCKE~TID: INl~GER;

PRE~MAN OMSI Pa~l Vl.2C RT11 19-Ju~-84 2 55 Site #14-1 P~ge 2 Tel~tronis, Inc., Tc~ L~b~, Building 50, 8ca~rerto~ OR 97077 Linc S~mt Lc~cI Nc~t Sourcc Statcmcn~

l O

~73703 ONAM~,INAM~: AL~A; - -.
S6 . ~NDX,~NDY INTeGER;
S7 Y~SNO: CHAR;
58 NOTSPl~ClAL,Pl~E~OVTPUT,LINE~OlUTPUTSTATlSIlCS: BOOLE~AN;
S9 ~ACR: ARRAY[1.. 1024] OP CHAR;
~.
61 THE~ FOLLOWING DATA STRUCrURE~S D~PINE~ THE ACTI~NS TO B
62 l'AKI~ ON THE~ ReCE~PIlON OP A GIV~N 3 X 3 WINDOW

6~, I'R~ROM IS A ARRAY WH~R~ THP INDEX IS THE~ WINDOW
NUMBE~R
IT USE~S ONLY THE~ LOW ORDeR 8 BITS OP I~AC~ INl~R
66 IN TH~ FOLLOWING FI~LDS:
67 BIT 7: ON IP THe PIRST PR~MAN COD~ PROM THE~
WINDOW IS AN ew~
68 Bl'r 6: ON IP THI~ SE~COND PREMAN CODJ~ IS AN I~
69 BITS S-3: THI~ SINGULARIl'Y l~rPL (~7) 71 1 ON~ SI ART WINDOW
n 2 ONE END WINDO~V
n 3 TWO START WINDOW

7S S ON~ START; T~VO END WIND~W
76 6 l~NO SI'ART; ONE END WINDOW
77 7 TWO Sl'ART; l~NO END WINDOW
78 BITS W: THE~ NUMBI~R(S) OP THP FR}~MAN CODE~S
79 LLAV~NG THE WINDOW. THEY ARE I~NCOD~D AS FOLLOWS:
0 NO CHAIN CODEI; USED ONLY FOR WINDOW 2S6 81 1 CODE J~1=0 ~! 2 CODP IFl=5 83 3 CODE fl=6 84 4 CODE #1=7 8S S CODI~ #1=0; COD~ ~2=S

/ d G

1~737()3 81i -~ - 6 CODE ~i=o; COD~ ~2=6 -87 7 CODI~ #l=S; CODE~ ~2=7 88 THE~ COMPR~SSION OP THIS DATA INTO 8 BITS WAS DONI~
FOR
89 HISTORICAL R~ASONS; IT WAS THOUGHT THAT THIS DATA
WOULD BE~
PUT INTO ROM IN THE~ ACTUAL APCS HARDWARI~.

92 DE~CODE~R IS AN ARRAY WHICH CONTAINS THE~ TRUL FRLMAN
CODLS
93 ~ N THL PIRST 2 AND LAST 3 BITS OP THI~ ~'REROM
~NTRY. ~
9~ PRLMAN CODE WILL HAVI~ 8 ADDI~D TO IT IE7 THAT
FRE~MAN CODL
9S IS ON AN I~WE~ RAT}II~R THAN ON A LiNL. THAT BIT, BIT 3, IS
96 STRIPPPD IN l~lE ROU~ ADDFRI~E~MAN WHE~N IT USED
TO S13T THI~
97 E~RE~MAN BIN EDGE~PLAG.

99 FRE~P5 IS AN ARRAY WHICH IS INDI~X~D 8Y A FREM~AN
COD~ AND OUTPUTS
lOD THI~ TRUI~ DX AND DY WHICH ARI~ CAUS~D BY THAT
PR~MAN COD~.

lOQ COMPRLSSOR rA}CE~S l~VO FRLMAN CODES AND OUTPUTS THE~
DIAGONAL ANALOO
lll3 OP THOSE~ CODE~S IP POSSIBLE~; OR ITS OUTPUTS 0.

lOS RE~VLRSE~P. TAK~S AE7R~MAN COD~ AND R~TURNS THB
106 OPPOSI~ POINl~ING F~MAN CODE~.

108 SQRTABLE TAK~S A SMALL DX AND DY DISTANCB AND

la 7 ~;~73703 ~' CONTAINS

PR~MAN OMSI Pa~cal Vl.2C RTll l~Jun~ 2:55 Site #1~1 Ps~c 3 Te~oni~, Inc., Tc~ Lab~, Building SD, Eeaverton OR g70T7 Line S~nt LNel Nat So~e Statemcnt 109 THE EXACT DISIANC~, DEFINED BY PYTHAGORAS, SCALI~D
UP BY A FACTOR
110 OP 1000. IT IS USE~D BY THE~ LIN~ PINDING ROUTINE.

1~
113 FREROM: ARRAY[256.~ OP IN~GI~R;
114 L~PT.RIGHT,CURRE~NT,TP: BLErrR;
115 DECODLR: ~YIQ31J OP XYP~IR;
116 PREES: ARR~Y[0.. 71 OP XYP~Uk;
117 COMP~SSOR: ~Y10.. 7,0.. 71 OP INTLGE~R;
1~8 RI~VERSER: ARR~Y[0.. ~ OP CH~R;
119 SQRTABLI~: ARR~Y[0.. 7,0.. ~1 O~ INTLG~R;

121 OPPLRROR~XINODLID: ~ GE~R;
122 CYBE~RLINK,ALPHAMODI~,PIL~OUT,NODLOUTPUT,AQUIRI~: BOOLLAN;
,23 ~ PREELIST: BL~I'R; /- ~R TO UNUSLD BLOCK USI ~l ~25 CRI~(3 ORIGIN 170010B~ GI~R; I' 3X3 WINDOW OUTPUT
R}~GIS~R l 127 XPOSRLG ORI(;IN 170012B-lNTL(~E~R; I- X POSl~ON
RLGISI~R FOR THL WINDOW l 128 RAMSWITCH ORIGIN 170014BlNTe(~E~R; /- RLGISll~R POR
SLL~CTING THE~ RAM BANKS l 129 RAMS ORIGIN 160000B:ARRAYl0.. Sll] OE7 I~GER; I' THE
WINDOW PROCI~æOR RAMS l tO ~

1~73703 .
~31 - 1 HERL AR~ 16 SI~QUENTIAL STAG~S OP WINDOW
PROCLSSOR WHICH ACTUALLY HAVI~ lal2~
~32 BITS OF RAM EACH. THE RAMSWITCH SEL~CTS WHICH
HALF OP THIS RAM WILL
~3 B~ ACC~D BY THI~ POSSIBLL Sl~ WINDOWS. IN l~ACH
STAGE THE LOWI~R HALP
13~ OP THE RAM IS AN IDENTITY PVN~ION WHICH PERPORMS
NO TRANSFORMATIONS.
lEI UPPER HALP PERPORMS VARIOUS PUNCllONS, THEY ~REI:
~36 SrAGI~ 1: PULL GROW
~37 STAGI~ 2: SEMI-GROW
L38 STAGE 3: QUARTI~R GROW
~39 SrAGES ~lS: THrNNlNG
140 STAGE 16: INTPRUPT ENABLL
~1 THE SDC~ENTH STAGI~ TELLS THI~ HARDWARL WHICH
; WINDOWS TO NOTIPY TH~
1~,2 SOFTWARE~. THIS STAGI~ IS BASICALLY 2S6 NO'S
POLLOWLD BY 256 YLgS, 1~,3 '/
14~ STATUS ORIGIN 170000B~INTPGER: /' STATUS RE~GISTER POR
APCS HARDWAR~ /

146 STATUS Bm 147 100000 PREBMAN CHAIN CODE~ ADY PLAG
148 040000 N~W LINE READY PLAG
149 020000 UNUSeD
150 010000 TI~Sr DATA NL~DLD PLAO
lSl 004000 UNUSLD
~S2 002000 CCD CARRlAG}~ DLTECT (USED POR KNOWING
REWIND COMPLETB) IS3 - 001000 R~AL TIME CLOCK PLAG
lS4 OD0400 CCD PULL PLAG

lo q ,~
' lX73703 Lff ~ - 000200 UNUSE~D, BUT CAN B~ WRllT~N BY SOFl~
L56 . OODll~O LI&HT SWITCH, 1=ON
157 0000~0 TE~SI MOD~ E~N~BL~
~S8 000020 TE~ MODE INT~RUErP ~NABLE~
LS9 000010 NE~W LINE~ INI~RUPT ENABLE~
160 000004 FRBI~MAN CHAIN CODE~ ~ADY INT~RUPT ~NABLE~
161 OG0~02 RLAL TIME~ CLOCK INTLRIJPT E~NABL~
16Z 000001 CCD FULL INTLRUPI' EN~LI~

PREMAN OMSI P~cal V1.2C RT11 ~Jun-84 2:S5 Sitc ~ 1 Pa~ 4 Tc~troa~, Inc., Tck Lab~, Buildin~ S0, Bcs~cnon OR 970T7 Linc Stmt Lc~rel Ne~t Source State~cnt 163 .~
164 MOTORRI~ADY ORIG~ 170006B:INTBG~R; /- PLAG RI~GISTE~R
TO I~LL HARDWAR~ TO AQUIRE~ DATA l 16S CIRCBUP ORIGIN lS4000B:ARRAYI0.~11J OP XYPAIR; r PREMAN CODE AND XPOS Qlll~ /
166 CBIN ORIGIN 270B~ GER; /- rNPUT POSl'rlON /
167 CBOUT ORIGIN mB~GER; /- OUTPUT POSITION l 168 CBLEN ORIGIN 274B~ GER; /' NUMBI~R OP CODES rN 'rH~
QU~ l 169 CBSKIP ORIGIN 276B~NTLG~R; l- UNUS~D COUNT~R POR
COUNllNG SOFI'WAR~ WAITS /

171 RAMcHANGEsTopplNG~TLsl~lNG,lMAGl~MvDl~DomNG~BARslNG~
INPUTGIVI~N:BOOLE~AN;
m LASI'XPOS,LASI'GR~C,LASI LOY,LASPHIY,LASTHIXINl~GER;
173 SINGCASES:ARRAY10.. 71 OP INTLGER;
17~, XCEN,YCI~N~CSCALI~,YSCALE~
17S BLOCKSLI~PT,MAXBLOCKS:INTLGI~R;
176 SCALI~D:I~OOLI~AN;

1/ ~

~;~7~7~)3 1~ ~ Wn~DO~rWIDTH~AXB~ND~NT~C;~R; --178 , .GLOBL ~ART
~1 JMP ~TART ~OR ~I-IlODTHARD RE~TARTS

PROC~DUR~MTRSET;~XTERNAL;/-R~WnNDSTH~CCDCARRlAGE-/
PROCLDURLPAGE;~XTERNAL;/-CL~AR ~14SCR~LN-/
PROC~DUR~n~T;EXT~RNAL;/-R~ADDATASrRUCTURESPROM
HOST~/
PROCEDUREMOVEAB~X,YDNTEGER);EXT~RNAL;/-GRAPHICS
SUPPORT-/
~ PROC~DUR~DRAWAB~X,Y~NTeGLR);EXT~RNAL;
U~ PROCI~DU~E ANMODE~; EXTLRNAL;
190 PROCFDUREI CURSORtVAR C,X,Y~ G~R); E~CI~RNAL; /-GRAPHICAL ~NPU'r ~l 191 PROCE~DURE~ SlNGULARlTYtROMD~X,ROl~lDATA,Cl,C2:1N~Gl~R);
EXTLRNAL; /- THEI SIN(3ULARll~Y HANDLER /
192 FUNCTION NEU~NODE(HOWMANY:INTLGE~R;Ll.L2.L3,L~:BLl~l`R3:BLPIR;
~C~RNAL; /- MAKE~S A NOD~ /
193 PROCE~DURI~ FLIP; ~RNAL; /- MAKES SUBSE~QUENT 1/0 GOTO
OTHI~R SE~RIAL PORT l W /- THL INmAL AND USUAL SrATe IS T5> TALK TO THE TE~RMINAL ~l l9S PROCE~DUR~ FLUSH; E~RNAL; /~ PLUSH OUT TH~ OUTPUT
BU~ RS /
~96 PROCE~DURI~STOP;E~XIERNAL;/-COMMANDHOSTTHATWEAR~
DON~ 1 PROCLDUR~LNDNOD~;LXT~RNAL;/-COMMANDHOSTTHATIMAGE
IS nNlSHeD /
PROC~DURP MOR~FO;EXT~RNAL;/-GLT~L~NAMLFORNOD~
~L~ONHOST-/

l~l 1.;~737V3 PROCE~DURE~ TSTSLT; I~RNAL; t- S~T UP T~ MOD~ FOR
- HARDWARI~ /
20D PROCLDURP LINE~IFY(BINPI'R:13LPTR); E~XI~RNAL; /- THE~ LINF
FIND~R /
201 PROCE~DURL CLRSFT; I~X~RNAL; /- S~T IJP ZI~RO FILL POR
WINDOW PROC}~SSOR /
202 PROCE~DUR~ MFUL; E~XI~RNAL; /- RPCLAIMS ME~MORY WH~N NON~
LI~FT /

20~ BLGIN
205 1 1 1 STATUS:=3; I- CCD F`ULL AND RLAL TIME~ CLOCK IN~RUPTS
ON /
~D6 2 1 1 CYB~RLlNK:=FALæ;
2~7 3 1 t INIT;

209 COMMAND LINE~ ~NTeRPR~TeR S~CrlON

211 4 1 1 WRITI~LN('SPE~CIFY OmONS ON ON}~ LINE~; OE'TIONS: LINI~S, NODleS');
212 5 1 1 WRII~LN(~ MANS,QUIT,RAMSPT,TE~SI',IMAGE~,MAGNIFY,SAV~');
2L3 6 1 1 WHILE~ TRI~ DO
214 7 1 2 BE~G~
21S 8 1 3 CBIN:=0;
216 9 1 3 CBOUT:=0;

FREMAN OMSI Psscal VI~C RT11 lg-Jun-84 2:55 Site f 14-1 Page S
Tel~tro~i%, Inc., Tc} Lab~, Buildin~ Sû, Bea~crton OR 97077 Linc StmtLcvel Ne~t Source StstemeDt 217 10 1 3 CBLEN:=0;
218 11 1 3 NOTSPECIAL:=TRUI~;
219 12 1 3 LI~FT:--NIL;/~ PRLMAN BIN POINI~R INITIALIZATION l ~'~737~:~3 3 ~ 3 R.IGHT~
221 1~, i 3 CURR~NT:=NIL;
m lS 1 3 INPUTGIV}~N:=~AL5E~;
m 16 1 3 WHILE~NOT INPUTGIV~N DO
22~ 17 1 ~ BEGIN
22S 18 1 S SCALLD:=PALSE; I- CL~AR VARIOUS COMMAND E7LAGS /
;!26 19 1 5 L~OUTPUT:=FALSE~;
227 20 1 S NODE~OUTPUT:=E7ALSI~;
228 21 I S R~MCHANG13:=~ALSe;
~9 æ 1 s Sl'OPP~NG:=PALSl~;
230 23 1 S T~ING:=~ALS~;
231 2~, 1 S IMAGI~MODE:=P~L~;
232 25 1 S E~ OUTPUT:=~ALSL;
233 26 1 S AQUIR~:=PALS~;
23~ Z7 1 S ALPHAMODE~:=PALSI~;
~5 28 1 5 WHIL~NOTEIOLN DO

2~7 30 1 7 1~AD(12JAME); /~ AD COMMAND; ONLY NE~D
~IRSI CHA~A~R ~/
238 31 1 7 IP INAM}~[lJ='A'THEN ALPHAMODl~:=TRUE;
239 33 1 7 IP INAM~[ll='L' THEN LINI~ UTPUT:=TRUI~;
240 35 1 7 IF INAM~ =N' THEN NODI~OUTPUT:=~RU~;
2~1 37 1 7 IE7 INAME~ Ih~IAGE~MODE:=TRU~;
242 39 1 7 IPlNAME~[l]=~i'THENAQUI~:=TB.UE~;
243 41 1 7 IE7 rNAME[lJ=~' IHE~N RAMCHANGE~:=TRUI~;
2~ ~3 1 7 IF INAME[ll='Q'THEN SIOPPING:=TRU~;
245 4S 1 7 IP INAMEI lJ =~ THLN PRB~OIJTPUT:=TRUE;
246 47 1 7 IP INAME[l]=T THEN TE~SI'ING:=TRU}~;
247 ~9 1 7 IP' INAME~[l]='M' T}lE~N SCALED:=TRUE~;
248 Sl 1 7 INPUTGIVE~N:=ALPHAMODE~ ILINE~OUTPUT I
NODE~OUTPUT I PRE~l~OllTPUT I IMAGI~MOD~ I SrOPPlNG I TESl'ING;
2'~9 S2 1 7 ~ND;
250 S3 1 5 RI~ADLN;

~I ~

251 S4 ~ S IP RAMCH ~NGI~ N BE~GIN /~ S~T UP WINDOW PROC .-OPrlONS "I
2S2 S6 i 7 S:=0;
2S3 St 1 7 WRITEI(~VIIICH TYPE OP ~ROW? (E~ULL,SI~MI, QUARTLR,NONE~
254 S~ 1 7 WHILE~ NOT EOLN DO
2SS 59 1 8 BI~GIN
2S6 60 1 9 RLAD~IIJAML);
2S7 61 1 9 ~7INAME~II='P'THENS:=SI10000DB;
258 63 1 9 IF INAME~ 'S'THEN S:=S I40000B;
2S9 6~ 1 9 IE~ INAM}~ ' THEN S:=S I 2000DB
260 I~ND;
261 67 1 7 l~DLN;
262 68 1 7 I:=10000B;
263 69 1 7 WRITE~('NUMBE~R OF THIN PASSI~S:'3;
70 1 7 RP-ADLN(J);
26S 71 1 7 IF J>12 THLN J:=12;
266 73 1 7 FOR K:=lTOJ DC
267 7~ 1 8 BE~;IN
268 7S 1 9 S:=S I l;
269 76 1 9 1:=1 DIV 2 270 LND;

FRLMAN OMSI Pascal Vl.2C RTll ~Jun-84 2:55 Sitc #14-1 Pllgc 6 Tc~tronis, Inc., Tc~ Lab~, Building S0, Ban~crtoD OR ~7aT7 Linc Stmt LeYel Ncst Source Statcme~t 271 77 1 7 WR~('SHOW BLACK AR~AS? (Y OR N): '~;
m 78 1 7 RI~ADLN(YB~IO);
m 79 1 7 IE~ YE~O=qr' THLN S:~S l l;
Z74 81 1 7 RAMSWITCH:=S
275 END;

Il ~ .,, ~;~737~V3 Z76 82 -~ 5 IPNOT INPI~TGIV~N T~PN B~GIN - -m 8~ ~ 7 WR~LN(SP~CIPY OmONS ON O~ LIN~;
5)PllONS: LIN~S~IODI~
Z78 8S 1 7 WRIT~LN('FR~E~MANS,QllIT,RAMS~T,Tl~ST,lMAGE~, MAGNIE~Y,SA~);
279 86 1 7 I~ND

2B2 87 1 3 ~ SrOPPlNG THE~N ~ClT;/- TIM~ TO Go HOM~ ''J
~283 89 1 3 IF AQUIR~ THE~N B}3GIN /- S}~ND ALL WINDOW NUMBE~RS
TO THL HOSI /
28,~ 91 1 S WRITE~('NAME~ OPBINARY IMAGLPILI~
285 92 1 S RE~ADLN(INAM~);
286 93 1 5 FLIP; /- TALK TO THE~ HOSI' /
287 9~ 1 S WRII~LN('AQUIR~ '3;
288 95 1 S WRIT~LN(INAME);
289 96 1 S R}~ADLN(INAM~); /- FOR V1~RlFIC:AllON /
290 g7 1 S FLIP; /- NOlN BACK TO THE~ l~R~INAL /
291 98 1 S WRITLLN(~NAME) 293 99 1 4 ELSl~ IE7 L~013TP~ I NODEOUTPUT THI~N BE~GIN r E~MIl'rING LINE~S OR NODES? /
294 IDl 1 6 IF NODEOUTPUT TH~N MORINPO; /'' G~IT PILE NAM~, E~TC. /
295 103 1 6 WRlT~(q.lNE~ ERROR PACTOR: ');
~96 10~ 1 6 ~BADLN(LRRO~);
2g7 l~S 1 6 WINDOWWIDTH:=3 298 END;
299 106 1 3 IP SCAL~D THPN Bl~GrN /- SET UP SCALING PARAMl~TERS /
30D 108 1 S WRIl~LN(S~LECT THE WINDOW.~;
301 109 1 S CURSOR(KJ~POS,YPOS);
302 110.1 S FOR K:=l TO 1000D DO IC:=R;
303 112 1 S CURSOR(R,I,I);

Il ~

1~7~ 3 304 1~ S SCALE~D:=YALS~
306 11~,- i S MOV~A~,l);
306 llS 1 S DRAWABS(XPOS,J);
3~7 116 1 5 DRAWABS~OS,YPOS);
308 117 1 S DRAWABS(I,YPOS);
309 118 1 S DRAWABS(I,I);
310 IV 1 S SCAL~D:=TRU~;
311 120 1 S XCEN:=(XPOS+I) DIV 2;
3la lal I s ~C~N:=~YPOS~J) DIV 2;
313 122 1 S XSCALL:=10Z4 DIVABS(XPO~I);
31~. 123 1 S YSCALE~:=140U DIV ABS(YPOS-l);
31S 12~ 1 S END;
316 12S 1 3 YPOS:=l;
317 126 1 3 BUCK~TID:=0;
3~8 ~ 1 3 N~XrNODEID:~;
319 128 1 3 MTRS~T; /- REWIND /
320 129 1 3 CLRSFI'; /- BEGIN PLUS~ING S~IFI RE~GIS1~RS ~/
3a1 130 1 3 MOTORRE~ADY:=0; /- NOTIE~Y HARDWARE ~LL IS ~ADY /
3Za ~ 3 WHIL~ YPOS~ POLL HARDWARE~ L 30 RASTERS ARI~ CLE!~RLD '~/
323 l3a 1 ~ B8GIN
32~ 133 1 S I:=FCI~;

FR8MAN OMSIPa~CalV12CXT1~ Jun-84 25SS;tC~ P~C7 TCI~trOni~, IDC., TCI~ Lab~, BU~ Dg 50, l~eavcrton OR g70T1 LinC Stmt LcvCl NC~t sonrCc StatemCnt 32S ~S IP (I ~ 40000B)O0 TH~N YPOS:=YPOS~ N~W
RASTER? ~/
326 ~ND;
3Z7 L36 1 3 MTRSLT; /- R~WIND AG~IN /
32~ 137 1 3 IP TLSI1NG THEN BEGD~ /~ S8T UP IMAGE~ DOWNLOAD /

- l/G

1~3703 329 139 - ~ S WRIT~(NAM~ OF BINA}~Y IMAGP PIL~
331) 1~0 1 S RE~ADLN(~NAME~3;
331 1~,1 1 S PLIP;
332 1~,2 1 S WRITI~LN(~ING ');
333 lU 1 S WRIT/3LN(INAM~);
33~ 1 S PLIP;
33S 14S 1 S STATUS:=3B/'' NO LIGHTS I
336 E~IJD
337 146 1 4 LLSI~ SI'Al~JS:=103B; IC TURN ON LIGHTS ~/
338 147 1 3 PAGE~ T UP GRAPHICS ~/
3ag tU 1 3 LASTLOY:~;
340 149 1 3 LASI'HIY:=0;
1 3 LASTHLY:=0;
342 lSl t 3 MOVE~ABS(0,0);
343~152 1 3 DRAW~BS(0,1400);
3~4153 1 3 DRAWABS(10Q3,1400);
34SlS~ 1 3 DRAWABS(10Q3,0);
SS 1 3 DRAWABS(0,0);
347156 1 3 STATUS:=STATUS 114B; /- TURN ON NEWL~, 17RE~MAN
CODL INT~RUPI S ON ~I
348957 t 3 YPOS:514;I~ IGNORL FIRSI RAS~RS,ALL ZEROEIS I
3~9 ~S8 1 3 IP TE~ING TH~N TSI SI~T; I' TI~LL HARDY ARE~ W~
T~ING ~/
3S0 16D 1 3 MOTORRLADY:~,/-81~GIN DIGITIZIIJG /
3Sl t61 1 3 LAST~CPOS:Cl;
3S2 162 1 3 WHILI~ YPOS~=1400DO/- DIGITlZE 1~00RAS~RS I
353 163 1 ~, BEGIN
3S~ ~64 1 S 1:=0;
35S t6S 1 S WHILL (1=0) 8~ (YPOS<=lU10) DO
356 t66 t 6 BEGIN
3S7 167 1 7 WHILE~ CBLEN~50 DO l:=I; I- W~IT TILL
SOMLTHING IN QU~ I
358 169 1 7 I:=CIRCBUF[CBOUTI.PX; I- GE~T WINDOW

~ NUMB}~R ~
399 170 a 7 XPOS:=CIRCBUF[CBOUI~
360 m 1 7 CBOUT:=(CBOUT~l) ~ Sll;
361 m 1 7 CBLE~N~ BLQN-~;
362 173 1 7 IP CBL~N~=128THBN STAlIJS:=STAllJS 114B;
/- RE~NABL13 INTBRUPTS? /
363 17S 1 7 IP (I ~ ~OOOOB)<~O THEIN BI~GIN /- ~ND OP
RASI~R? /
36~ 177 1 9 IP CURRE~NToNlLTHl~NWRl~(CHR(7):1, CHR(31):1,q'00 ~W '~); /- ERROR l 36S 179 1 9 IP IMAGEMODE ~ (LASTXPOSol) THEN BEGIN
366 ~81 1 11 MOVI~ABS(IM~CPOS,YPOS~;
367 182 1 11 DRAWABS(LASl~XPOS,YPOO
368 ~ND;
36g lB3 1 9 LAS17CPOS:--l;
370 18~ 1 9 YPOS:=YPOS+l;
371 18S 1 9 IE~AQUIR~ N BI~GIN
372 187 1 11 FLIP;
373 ~88 1 11 RI~ADLN(lNA~e);
374 189 1 11 WRITPLN(' 1~; r WR~ ~ND OP
; . RAS~R D~LIMITE~R /
37S 190 1 11 ~LIP
376 E~ND, 3't7 191 1 9 CURRI~NT:=LLFT/-RE~SET CHUT~ ~/
~78 END;

PR~MAN OMSI Pa~cal V12C RTll 19~ 84 2:5S Site #14-1 Pagc 8 Tclttr~, Inc., Tcl~ L~bs, Buildi~g 50, Bcs rcrtoD OR Y7~77 Linc Stmt Levd Nt Sourcc StatcmcDt 379 19~ 1 7 YP ICO THEN I =a ~ 377B)~256 t- MSB SeT
FOR WINDOW; GE~ NUMBI~R /

~2737~3 380 ~ -~ 8 ~ zo 381 END;
38~ 19S 1 S1}~ loO I~ N B~G5N
383 ~97 1 7~:=5;
38~ 198 1 7 IFXPOS~0THE~N 1:=0;/- Sl'RIPWINDOW YOR
BOtrNDARY CONDmONS ~/
38S 200 1 7 IY XPOS=0 TH~N 1:=1 h 7V7B;
386 202 1 7 1~ XPOS>1023 TH~N l:z0;
3~7 ~ 1 7 IP XPOS=10;!3 THI~N 1:=1 h S74B;
388 206 1 7 n~ IMAG~MOD~ N B~OIN
389 21~ 1 9 IP LAS~OSz-lTH}~N IMXPOS:=XPOS
390 210 1 10 ~LSL IP XPOSc>LASl~POS+l THEN BE~ilN
391 212 1 12 MOVI~ABS(IMXPOS,YPOS);
392 213 1 12 DR~WABS~LASlXPOS,YPOS);
393 21~ 1 12 IMXPOS:zXPOS
39~ END
395 ~ND;
396 21S 1 7 IP AQUIR~ ~ (1~0)THE~N B
397 Z17 1 9 PLIP;
398 218 1 4 RBADLN(INAMB);/- RLADPROMrT l 399 219 1 9 WRITBLN(XPOS:!~);/ S~ND POSmON /

~ EN~;
402 221 1 7 U (Ic>Sll) h (1~03 THE~N B~GIN r PROC~SS WINDOW? l 403 223 1 9 ROMDATUM:=FR~ROM[I]; I- ~ET
DE~SCRIPTOR /
4~ 22~ 1 9 C:=(ROMDATUM J~ 7B) I ((ROMDAI UM h 3D0B) DIY 8~;
405 22S 1 9 SlNGULARl'lY(l,ROMDATUM,DE~CODE~RlCl~X, D~CODE~RIC¦.PY); /- ~NALYZE~ l 406 Z26 1 9 IP BLOClCSLEFr<(SrKTOP DIV 1~+32THI~N
M~MI7UL /- CHECK HOlN MUCH M~M LI~

ll 9 ~2737~;~

407 ~ I~
408 228---1 7 LASI7~POS:=XPOS
~09 4~D E~ND;
411 Z9 1 3 SI'ATUS:=3; r SHUT DOWN ALL BIJT R}~AL TIME~ CLOC~C
AND CCD PULL /
412 Z~D 1 3 CURRENl':=LEFI; r R~SLT CHUTlZ TO FLUSH ANY
REMA~IING BlNS /
~13 231 1 3 WHIL~ CURRENTo~lL DO /- E7LUSH OUT ~/
414 232 1 4 L,lN~lFY(CURRE~N'r);
41S 233 1 3 SCALED:=PALSe;
416 234 1 3 MOVLABS( 87,140D); /- RI~ T CURSOR ON 4014 ~/
417 235 1 3 ~NMODI~;
418 2361 3 IPNODE~OUTPUTl~IEN BE~GIN /~ LLHOSI WE~ DON3 IP N~CESSARY /
4~9 2381 5 FLIP;
430 ~9 1 5 ENDNODE~;
~21 2401 S FLIP;
422 Z~l1 S BND;
423 2~21 3 IP AQUIRI~ THI~N BEG~ DITTO /
~,2~ 141 S E~LIP;
42S 24SI S ~ADLNaN~ME~);
426 2461 S WRITE~LN('~
~,27 2~7 I S PLIP
~28 I~ND;
429 2U 1 3 MTRSI3TI~ RE~WINDCARRIAGE~ /
430 END;
~,31 2~9 1 1 FLIP;
~32 25D1 1 STOP; /- T~LL HOST WE~ ALL DON~

PREMAN OMSIPaSCalV1.2CRT~ U~84 2SSS;te~ PagC9 ~e~troni~, IDC., TC~ LabS, BU;Id;D8 50, Bca~rerton 0~ 97077 1~7;3703 Linc Stmt L~el Nellt Sour~c S~tcme1~t . .
43a 2Sl ~ I PLUSH /- PLUSH OUT ALL OIJTPUT BU~ RS ~1 deta~ O
Free memo~: 10841 worth / ~1

Claims (18)

Claims:
1. A method of encoding pictures, comprising the steps of:
raster scanning a picture;
generating, as the picture is being scanned, a bit map representative of the features of the picture;
regenerating the bit map, as the picture is acquired during the scanning and generating steps, as a bit stream representative of line and edge features of the picture;
temporarily storing, as the bit stream is regenerated, those portions of the bit stream which represent the line and edge features of the picture, said temporary storing step including the steps of converting the bit stream, as it is regenerated, into a plurality of chain-coded line segments; and storing the plurality of chain-coded line segments, as the scanning and regenerating steps continue, in a corresponding plurality of storage elements linked in an order corresponding with the order in which the features of the picture are encountered during the scanning, generating and regenerating steps;
converting each stored line segment to vectorial data;
transmitting the vectorial data to a user device; and continuing the preceding steps until the entire picture is scanned and encoded.
2. The method of claim 1, wherein the first converting step includes the step of generating a chain code for each element of the bit stream, the chain code having a directional component corresponding with the direction of the associated line segment in directions corresponding with the general directions in which the picture is raster scanned.
3. The method of claim 1, which includes the steps of:
allocating each of the plurality of storage elements when the corresponding line segment is first regenerated; and deallocating each of the plurality of storage elements after the corresponding line segment is converted to vectorial data.
4. The method of claim 1, wherein the first converting step includes the step of delimiting the start and the end of each line segment.
5. The method of claim 4, comprising the steps of:

allocating each of the plurality of storage elements when the start of the corresponding line segment is delimited; and deallocating each of the plurality of storage elements after the corresponding line segment is converted to vectorial data.
6. The method of claim 4, wherein the storage step includes the step of storing the spatial location of the start of each of the line segments in the corresponding one of the plurality of storage elements.
7. The method of claim 1, wherein the regenerating step includes thinning the features of the bit-map representation of the picture.
8. The method of claim 1, wherein the storing step includes concatenating two or more line segments which together have a spatial orientation transverse to the general direction of scanning of the picture for storage in a single one of the plurality of storage elements.
9. A method of encoding pictures, comprising the steps of:
raster scanning a picture with a detection device;
acquiring, as the picture is being scanned, a representation of successive portions of the picture in the form of a bit map;
regenerating the bit map as the picture is acquired during the scanning step as a bit stream representative of line and edge features of the picture;
encoding the bit stream as it is generated in the previous step as a plurality of chain codes representing discontinuous contours, each contour representing a segment of the regenerated features of the picture, each of the contours including at least one of the chain codes, each of the chain codes having a directional component corresponding with the general directions in which the picture is scanned;
storing each of the chain codes successively in a storage element corresponding with the contour with which the chain code is associated, the storage elements being ordered in the same order in which the contours are intercepted as the picture is scanned;
converting each of the chain-coded contours, as each is completely generated, to a vectorial signal set representing an abstraction of the chain-coded contour; and transmitting the converted contours to an output device for display, archival storage, or further processing.
10. The method of claim 9 which includes simultaneously with the transmitting step, the step of:
removing from the ordered storage elements each of the storage elements corresponding with a transmitted contour.
11. The method of claim 9, wherein the encoding step includes the steps of:
classifying each element of the regenerated bit stream as at least one of the classes of contour elements including a contour beginning, a contour end, and a contour continuation; and generating one of said chain codes for each contour beginning and each contour continuation.
12. The method of claim 11, which includes, simultaneously with the transmitting step, the step of:
removing from the ordered storage elements those storage elements corresponding with a converted contour, when the converted contour has been transmitted.
13. Apparatus for automatically converting a document to machine script, comprising:
means for raster scanning said document; means coupled to said scanning means for generating a series of tessellations of black and white pixels from said scanned document, each of the tessellations including a center pixel and adjacent pixels surrounding the center pixel;
means for regenerating the series of tessellations as a bit stream having a plurality of elements, each element of the bit stream corresponding with a tessellation having a black center pixel, the bit stream being representative of line and edge features of the scanned document, such features including a plurality of discontinuous contours;
means receiving the bit stream for classifying in succession each element of the bit stream as a unique set of contour segments, which set includes at least one of the contour segments representing a contour start, a contour end, and a contour continuation;
means for generating a data item representing the directional orientation of each of the contour start segments and each of the contour continuation segments in directions corresponding with the general directions in which the document is scanned;
means for storing the data items representing each of the plurality of contours, each said storage means being associated with one contour and allocated responsive to said classifying means when a contour start segment associated with said one contour is received, the one contour being stored in the associated storage means as the data items representing the contour continuation segments of the one contour are successively received while the document is being scanned by said raster scanning means, each of the plurality of storage means being ordered in accordance with the relative order of the contours as successively received in the bit stream;
means responsive to said classifying means receiving a contour end segment for converting the stored contour associated with the received contour end segment to a vectorial data set representing an abstraction of the associated stored contour, and including means for deallocating the storage means corresponding with the converted contour; and means for utilizing the vectorial data set.
14. The apparatus of claim 13, wherein each said storage means includes means for storing a data item representing a starting location on said scanned document of the contour stored therein.
15. A method of encoding pictures, comprising the steps of:
raster scanning a picture;
generating, as the picture is being scanned, a bit map representative of black and white pixels of the scanned picture;
regenerating from the bit map as it is acquired during the scanning step, a bit stream having a plurality of elements representing line and edge features of the picture, the bit stream representing a linear concatenation of successive rasters of the bit-map representation of the picture;
temporarily storing the line and edge features of the picture, said temporary storing step including the steps of decoding each element of the bit stream successively as it is generated, the decoding step including the steps of partitioning the features of the picture into a plurality of linear contours, each of the contours including one or more contour segments, each contour segment having an orientation with respect to the picture being scanned;
classifying each contour segment as one of a class of contour segments including a contour-start segment, a contour-end segment, and a contour-continuation segment; and assigning a chain code to each contour-start segment and each contour-continuation segment of the bit stream element according to its orientation and in the general directions in which the picture is raster scanned;
allocating a storage element for each contour-start segment decoded;
storing in the allocated storage element a data item representing the spatial location of the contour-start segment;
storing the chain code corresponding with the contour-start segment in the allocated storage element;
linking the allocated storage element with other such storage elements in an order corresponding with the order in which the contours are decoded; and storing each chain code representing a contour-continuation segment in the storage element associated with the contour;
converting each of the temporarily stored chain-coded contours to a vectorial signal set which is an abstraction of the chain-coded contour when a contour-end segment associated with the contour is decoded;
transmitting each of the converted contours to a user device;
unlinking and deallocating each of the storage elements associated with the converted contours; and repeating the above steps until the entire picture is scanned and encoded.
16. The method of claim 15, wherein the classifying step includes the steps of:
detecting a combination of contour segments including two contour-start segments together having an orientation transverse to the general direction of scanning of the picture;

temporarily storing in another storage element the detected combination of contour segments, thereby concatenating the transversely oriented contour segments; and copying the contents of the other storage element into one of the allocated storage elements.
17. The method of claim 16, further including after the copying step the step of storing another contour in the one allocated storage element, thereby appending the other contour to the concatenated contour segments.
18. The method of claim 16, wherein the copying step includes the step of appending the concatenated contour segments to another contour previously stored in the one allocated storage element.
CA000484318A 1984-06-25 1985-06-18 Method of pixel to vector conversion in an automatic picture coding system Expired - Fee Related CA1273703A (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US06/624,434 US4777651A (en) 1984-06-25 1984-06-25 Method of pixel to vector conversion in an automatic picture coding system
US624,434 1984-06-25

Publications (1)

Publication Number Publication Date
CA1273703A true CA1273703A (en) 1990-09-04

Family

ID=24502014

Family Applications (1)

Application Number Title Priority Date Filing Date
CA000484318A Expired - Fee Related CA1273703A (en) 1984-06-25 1985-06-18 Method of pixel to vector conversion in an automatic picture coding system

Country Status (4)

Country Link
US (1) US4777651A (en)
EP (1) EP0166525A3 (en)
JP (1) JPS6169264A (en)
CA (1) CA1273703A (en)

Families Citing this family (64)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4967375A (en) * 1986-03-17 1990-10-30 Star Technologies, Inc. Fast architecture for graphics processor
JPS62203264U (en) * 1986-06-16 1987-12-25
US5214718A (en) * 1986-10-06 1993-05-25 Ampex Systems Corporation Scan-in polygonal extraction of video images
JP2908451B2 (en) * 1986-10-06 1999-06-21 アムペックス コーポレーシヨン Method and apparatus for processing scanned video images
US4817187A (en) * 1987-02-19 1989-03-28 Gtx Corporation Apparatus and method for vectorization of incoming scanned image data
US4975853A (en) * 1987-11-20 1990-12-04 Hitachi Software Engineering Co., Ltd. Image processing system having polygonal line processing of pixel line data
JP2719202B2 (en) * 1989-09-21 1998-02-25 株式会社リコー Line figure feature extraction and recognition method
US5101436A (en) * 1990-05-11 1992-03-31 Optigraphics Corporation Hybrid image editor
US5048099A (en) * 1990-05-21 1991-09-10 Eastman Kodak Company Polygon-based method for automatic extraction of selected text in a digitized document
JPH0493888A (en) * 1990-08-03 1992-03-26 Canon Inc Pattern processing method
US5121440A (en) * 1990-08-30 1992-06-09 Monolithic Resources Corporation Analog video character recognition system
JP3026592B2 (en) * 1990-10-22 2000-03-27 キヤノン株式会社 Outline extraction method and apparatus
SE9101089L (en) * 1990-11-27 1992-05-30 Knut Christian Achates Scherma PROCEDURES FOR PREPARING PRINCIPAL CONSTRUCTION PROGRAMS
US5307424A (en) * 1990-12-12 1994-04-26 Eberhard Kuehl Character recognition system
US5428692A (en) * 1991-11-18 1995-06-27 Kuehl; Eberhard Character recognition system
US5148500A (en) * 1991-01-24 1992-09-15 Aoi Systems, Inc. Morphological processing system
US5396582A (en) * 1991-02-06 1995-03-07 Hewlett-Packard Company Raster to vector conversion system and method therefor
US5422819A (en) * 1991-02-22 1995-06-06 Janome Sewing Machine Co., Ltd. Image data processing system for sewing machine
US5267332A (en) * 1991-06-19 1993-11-30 Technibuild Inc. Image recognition system
JP3049672B2 (en) * 1991-12-26 2000-06-05 キヤノン株式会社 Image processing method and apparatus
JPH0698119A (en) * 1992-07-28 1994-04-08 Canon Inc Image recorder
CA2093842A1 (en) * 1992-07-30 1994-01-31 Albert D. Edgar System and method for image mapping in linear space
DE69324874T2 (en) * 1992-09-24 1999-10-14 Canon Kk Image processing method and device
US6002787A (en) * 1992-10-27 1999-12-14 Jasper Consulting, Inc. Fingerprint analyzing and encoding system
US5488698A (en) * 1992-11-05 1996-01-30 Oliver; David C. Rasterization of line segments using difference vectors
US5362796A (en) 1993-08-09 1994-11-08 Isp Investments Inc. Molded crosslinked vinyl lactam polymer gel and method of preparation
US5960109A (en) * 1993-09-07 1999-09-28 Xerox Corporation Single pass marker enclosed area detection system and method for a photocopier
US5715331A (en) * 1994-06-21 1998-02-03 Hollinger; Steven J. System for generation of a composite raster-vector image
US5600772A (en) * 1994-08-17 1997-02-04 Printronix, Inc. Bit map character convertor using chain-codes for the character filling process
JP3086396B2 (en) * 1995-03-10 2000-09-11 シャープ株式会社 Image encoding device and image decoding device
US5796858A (en) * 1996-05-10 1998-08-18 Digital Persona, Inc. Fingerprint sensing system using a sheet prism
KR100203266B1 (en) * 1996-07-09 1999-06-15 윤종용 A contour decoding apparatus
US6018593A (en) * 1996-09-11 2000-01-25 Ricoh Company, Ltd. Method and system for correcting image position based upon predetermined pattern portions
EP0831654B1 (en) * 1996-09-23 2002-07-24 Daewoo Electronics Co., Ltd Method and apparatus for encoding a contour image of an object in a video signal
FR2753785B1 (en) * 1996-09-25 1998-11-13 SELF-DIRECTING A FLYING BODY
FR2753796B1 (en) * 1996-09-25 1998-11-13 PHOTOSENSITIVE AND MOSAIC DETECTOR OF PHOTOSENSITIVE DETECTORS FOR DETECTION OF LIGHT SHARDS AND APPLICATIONS
US5969317A (en) * 1996-11-13 1999-10-19 Ncr Corporation Price determination system and method using digitized gray-scale image recognition and price-lookup files
US6125192A (en) * 1997-04-21 2000-09-26 Digital Persona, Inc. Fingerprint recognition system
US5956428A (en) * 1997-05-19 1999-09-21 Ausbeck, Jr.; Paul James Stroke code for image partitions
US6035398A (en) * 1997-11-14 2000-03-07 Digitalpersona, Inc. Cryptographic key generation using biometric data
US6122737A (en) * 1997-11-14 2000-09-19 Digital Persona, Inc. Method for using fingerprints to distribute information over a network
US6324310B1 (en) 1998-06-02 2001-11-27 Digital Persona, Inc. Method and apparatus for scanning a fingerprint using a linear sensor
US6324300B1 (en) 1998-06-24 2001-11-27 Colorcom, Ltd. Defining color borders in a raster image
US6226400B1 (en) 1998-06-24 2001-05-01 Colorcom, Ltd. Defining color borders in a raster image by identifying and breaking contrast ties
US6310970B1 (en) 1998-06-24 2001-10-30 Colorcom, Ltd. Defining surfaces in border string sequences representing a raster image
US6188781B1 (en) 1998-07-28 2001-02-13 Digital Persona, Inc. Method and apparatus for illuminating a fingerprint through side illumination of a platen
US6950539B2 (en) * 1998-09-16 2005-09-27 Digital Persona Configurable multi-function touchpad device
US6377710B1 (en) * 1998-11-25 2002-04-23 Xerox Corporation Method and apparatus for extracting the skeleton of a binary figure by contour-based erosion
US6411733B1 (en) 1998-11-25 2002-06-25 Xerox Corporation Method and apparatus for separating document image object types
US6097035A (en) * 1999-02-22 2000-08-01 Digital Persona, Inc. Fingerprint detection apparatus with partial fingerprint images
US8464302B1 (en) 1999-08-03 2013-06-11 Videoshare, Llc Method and system for sharing video with advertisements over a network
JP3791259B2 (en) * 1999-10-07 2006-06-28 セイコーエプソン株式会社 Outline smoothing processing method
WO2001067772A2 (en) 2000-03-09 2001-09-13 Videoshare, Inc. Sharing a streaming video
JP4586241B2 (en) * 2000-06-14 2010-11-24 コニカミノルタビジネステクノロジーズ株式会社 Image processing device
US6927780B2 (en) * 2002-01-14 2005-08-09 Seiko Epson Corporation Fast text/graphics resolution improvement with chain-code table look-up
JP4546291B2 (en) 2005-03-01 2010-09-15 キヤノン株式会社 Image processing apparatus and control method thereof
US7668386B2 (en) * 2005-03-25 2010-02-23 Microsoft Corporation Lossless compression algorithms for spatial data
US7889938B2 (en) * 2006-03-31 2011-02-15 Canon Kabushiki Kaisha Method and apparatus for processing line drawings in images
US7916141B2 (en) * 2006-04-10 2011-03-29 Choi Kum-Young Image processing system using vector pixel
US8116581B2 (en) * 2007-06-28 2012-02-14 Microsoft Corporation Efficient image representation by edges and low-resolution signal
JP4933404B2 (en) * 2007-11-07 2012-05-16 キヤノン株式会社 Image processing apparatus, image processing method, image processing program, and program recording medium
US8384917B2 (en) * 2010-02-15 2013-02-26 International Business Machines Corporation Font reproduction in electronic documents
CN107607783B (en) * 2017-09-01 2019-09-20 广州辰创科技发展有限公司 Efficient and flexible radar spectrum display method
CN112733826A (en) * 2020-12-28 2021-04-30 南京披云信息科技有限公司 Image processing method and device

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4103287A (en) * 1973-12-17 1978-07-25 Bell Telephone Laboratories, Incorporated Variable length codes for high quality image encoding
US4020463A (en) * 1976-02-27 1977-04-26 Recognition Equipment Incorporated Apparatus and a method for storage and retrieval of image patterns
US4307377A (en) * 1979-11-09 1981-12-22 Bell Telephone Laboratories, Incorporated Vector coding of computer graphics material
US4493105A (en) * 1982-03-31 1985-01-08 General Electric Company Method and apparatus for visual image processing
JPS5947666A (en) * 1982-09-13 1984-03-17 Dainippon Screen Mfg Co Ltd Data compressing method of binary picture
JPS59189469A (en) * 1983-04-12 1984-10-27 Fujitsu Ltd Vector generating system of line picture
GB8311813D0 (en) * 1983-04-29 1983-06-02 West G A W Coding and storing raster scan images

Also Published As

Publication number Publication date
EP0166525A3 (en) 1989-01-25
EP0166525A2 (en) 1986-01-02
JPS6169264A (en) 1986-04-09
JPH0436627B2 (en) 1992-06-16
US4777651A (en) 1988-10-11

Similar Documents

Publication Publication Date Title
CA1273703A (en) Method of pixel to vector conversion in an automatic picture coding system
US4829295A (en) Image synthesizer
US4087788A (en) Data compression system
EP0152741B1 (en) High-speed image generation of complex solid objects using octree encoding
EP0356103B1 (en) Scan-conversion process and processor
EP0145821A1 (en) Area filling hardware for a colour graphics frame buffer
EP1847965A1 (en) Plotting device and plotting method
GB2174278A (en) Area-fill graphic image processing system
EP0402161B1 (en) Representation of polygons defined by non-zero winding numbers
WO1997008649A1 (en) Drawing pixmap to vector conversion
AU736560B2 (en) Method and apparatus for texture data
CA2026527A1 (en) Parallel polygon/pixel rendering engine
JPS62187977A (en) Image data processor
EP0217655B1 (en) Method for reading a document and a document reading apparatus utilizing an image buffer
KR0161712B1 (en) Method and apparatus for assigning temporary and true labels to digital image
US20020041387A1 (en) Image processing apparatus for transmitting compressed area information to be used at editing
US6215501B1 (en) Method and filling a polygon and recording medium
US4611268A (en) Method and electronic apparatus for optimal arrangement of shapes having at least two dimensions
EP0127249B1 (en) Pattern data processing apparatus
US6441826B1 (en) Method and apparatus for generating textures for display
JPH08101903A (en) Method for coding of image memory
JPS6226471B2 (en)
JP2913635B2 (en) Drawing method in bitmap display system
EP1193650B1 (en) Apparatus for painting figure
JPS6131905B2 (en)

Legal Events

Date Code Title Description
MKLA Lapsed