Enhanced data stream processing in a fixed function terminal

Abstract: An enhanced fixed function video display terminal having various features for the efficient transmission of data streams. The video display terminal may have a memory for storing substantially more characters than can be dis­ played to the operator on the display screen width and length. This permits manipulation of data at document page boundaries, scrolling, etc. One or more extended attribute buffers (312, 314) are added to enable charac­ ters to be displayed in a variety of fonts, colors, etc. The data stream from the host computer to the display terminal and from the display terminal to the host comput­ er contains data characters and attribute characters which are interleaved for efficiency in input/output program­ ming. When receiving data, the display terminal has the capability of parsing the data stream into data or at­ tribute characters and adding pad characters to completely fill the display buffers. Similarly, the display terminal interleaves data and attribute characters and compacts the data stream by stripping pad characters when sending data back to the host computer.

Description: The subject invention relates generally to video display terminals for data processing systems, and more particularly, relates to fixed function video display terminals having enhanced communication features. The use of video display terminals is now common in data processing. Each such display terminal normally has at least a video monitor or liquid crystal display (LCD) and an operator keyboard. In addition, terminals may also contain other audio and/or visual output devices (e.g., alarms, etc.) and other manual input devices (e.g. joy-sticks, etc.). Architecturally, display terminals may be divided into two categories. The more complex type may be termed multifunction or "smart" terminals. Such terminals have sufficient logic capability within the terminal to reconfigure and adapt to various different applications and to respond directly to various operator inputs. The advantage of this architecture is that the communication requirements between terminal and host computer are greatly reduced. Unfortunately, the additional logic in this type of terminal makes it more costly to build and maintain. The second category of display terminal is the fixed function or "dumb" terminal. This type operates in a fashion where each keystroke or operator input is transmitted to and processed within the host computer. Since the display terminal has a minimum of logic, the cost is less than a smart terminal. Previous terminals of this type had a very limited command set with which the display controller software in the host computer could update the contents of the screen (e.g., basic moves, inserts, write between limits, read between limit commands, etc.) In addition, most previous fixed function terminals had a screen buffer the same size as the physical screen. This limits the display controller software to manipulating data only on the physical screen (usually 24 rows by 80 columns). Fixed function display terminals tend to require more communication time because all the data is processed in the host computer. The communication requirement imposes a burden on the host computer and the terminal which it would be desirable to avoid. One method known in the art for greatly enhancing the fixed function terminal is the addition of an attribute buffer. The attribute buffer is arranged within the display terminal such that each displayable character has one or more corresponding attribute(s) which may be specified by the attribute buffer. Specifiable attributes include color, blinking, underlining, etc. To enhance performance and reduce complexity, fixed function terminals have display buffers which are addressed as one large sequential space. This means that data sent to the display buffer must be sequential and contiguous for each write operation. This is also true for receiving data from a fixed function terminal (i.e., read operation). As display buffers get larger (i.e., more characters are displayed) and more attributes are added, the performance of the fixed function terminal becomes limited by the time required to make the I/O transfers to and from this single large sequential space. Therefore, it becomes important to maximize the efficiency of such I/O transfers. IBM Technical Disclosure Bulletin, Volume 24, Number 11A, dated April, 1982, entitled "Prefetch of Attribute Bytes in a Display Buffer", by G. A. Emerson, suggests that efficiency may be enhanced by coding field attributes and extended field attributes for easy detection. This permits intermixing characters within a single I/O transfer. A further enhancement is proposed in IBM Technical Disclosure Bulletin, Volume 26, Number 103, dated March, 1984, entitled "CRT Display Feature Editing and Control", by D. A. Stockwell. This reference proposes alternating display and attribute characters within the I/O stream. This simplifies input/output operations by permitting a single write or read to access both the display buffer and extended attribute buffers of a terminal. The disadvantage of this approach is the requirement to transfer all characters within each I/O operation, even though many (in some cases, perhaps even most) character positions are blank. Another attempted improvement is described in IBM Technical Disclosure Bulletin, Volume 26, Number 10A, dated March, 1984, entitled "Implementation of Field Inheritance", by P. A. Beaver, et al. This approach to the problem of blank characters is insertion of pad characters into the data stream. The problem with this technique is that these additional pad characters consume I/O time when inserted into the data stream. All of these techniques provide less than optimal performance because of the transmission of excess blank characters and/or the reliance upon multiple I/O operations. This problem is particularly acute in a word processing environment, although not limited to such an environment where the right end of line invariably ends in a number of spaces. These spaces are virtually meaningless, but must nevertheless be individually transmitted in prior art systems. The present invention relates to a method of sending to a host computer a data stream from a presentation space buffer and at least a first attribute buffer of fixed function display terminal, to a method for receiving into a fixed function display terminal a data stream from a host computer which data stream has a presentation space portion and at least a first attribute portion and, to a fixed function display terminal subsystem implementing such methods. The method of sending a data stream to a host computer from a presentation space buffer and at least a first attribute buffer of a fixed function display terminal, according to the invention, is characterized in that it comprises the steps of: a. pointing a pointer to the current character position; b. reading the current character position in said first attribute buffer; c. if an attribute character is present at said current character position in said first attribute buffer, generating an attribute control character and placing said attribute control character and said attribute character in said data stream; d. reading a presentation space character at the current character position in said presentation space buffer; e. placing said presentation space character in said data stream f. placing an end of row character in said data stream if said presentation space character is a presentation space pad character, and if all the subsequent presentation space characters until the end of the row of said presentation space buffer are all presentation space pad characters. The method of receiving, from a host computer, a data stream having a presentation space portion and at least a first attribute portion, into a fixed function display terminal having a presentation space buffer and at least a first attribute buffer, according to the invention, is characterized in that it comprises the steps of: a. pointing a pointer to a current character in said data stream; b. reading the current character to determine whether it is a presentation space character, an attribute character or an end of row character; c. placing said current character in said presentation space buffer if it is a presentation space character; d. writing said current character in said first at tribute buffer if it is an attribute character; e. padding said presentation space buffer with presentation space pad characters until the end of the row upon the detection of said end of row character; and, f. padding said first attribute buffer with first attribute pad characters until the end of the row upon the detection of said end of row character. The fixed function display subsystem of the invention for controlling the displaying of a number of symbols is of the type comprising a controller having first means for responsively coupling said controller to a keyboard, second means for responsively coupling the controller to a video subsystem with a monitor and, third means for responsively coupling said controller to a host computer, said controller further having a memory comprising a presentation space buffer for storing more than said number of symbols and at least one attribute buffer for storing at least one attribute for each symbol in said presentation space buffer (310), said fixed function display subsystem being characterized in that it includes fourth means responsively coupled to said memory and said third means, said fourth means comprising means for reading the current character position in said attribute buffer, means responsive to the reading of an attribute character in said current position in said attribute buffer for storing an attribute control character, an attribute buffer number and said attribute character in a communication buffer, means for reading a presentation space character at the current character position in said presentation space buffer, means for placing said presentation space character in said communication buffer and means for placing an end of row character in said communication buffer in response to the reading of pad characters in all subsequent character positions in the current row in said presentation space buffer; said fixed function display subsystem being further characterized in that said fourth means further comprise means for reading the current character in a data stream received in said communication buffer from said host computer and determine whether it is a presentation space character, an attribute character or an end of row character, means for placing said current character in said presentation space buffer if it is a presentation space character, means for placing said current character in said first attribute buffer if it is an attribute character and means for padding said presentation space buffer and said attribute buffer with pad characters until the end of the row if it is an end of row character. Fig. 1 is a block diagram of a display subsystem of the present invention coupled to a host computer. Fig. 2 is a block diagram of control 100 of the present invention. Fig. 3 is a detailed block diagram of the control section. Fig. 4 is a representation of display store. Fig. 5 shows display of characters on video subsystem. Fig. 6 is a diagram showing data handling for a write operation. Fig. 7 is a flowchart for the parse operation. Fig. 8 shows data handling for a read operation. Fig. 9 is a flowchart for the data compaction operation. The present invention is a fixed function display terminal having various features particularly adapted, but not limited to word processing applications. These features are described herein in detail with lesser attention directed to those aspects of the display terminal which are well known in the art. Fig. 1 is a block diagram showing display subsystem 50, the present invention, coupled to host computer 10. The connection is made via standard input/output interface 40. Display subsystem 50 is a fixed function terminal. That means that every operator input is directly communicated to host computer 10 via standard input/output interface 40. Control of display subsystem 50 is exercised by display controller 20, which has a physical connection to display subsystem 50. Fig. 2 is a block diagram of control 100 of display subsystem 50. It contains a number of elements, of which are omitted from this view for clarity. Control 100 is a microprocessor based terminal controller which is coupled via input/output interface 40 to display controller 20 (see also Fig. 1). The elements of control 100, which are most pertinent to the present invention, include I/O interface logic 214 which is coupled via input/output interface 40 to the host system. Processor 200 is a microprogrammed controller which controls operation of display subsystem 50. Presentation space buffer 310 stores the characters to be actually displayed. Attribute buffers 312 . . .314 store attribute characters. Fig. 3 is a more detailed block diagram of control 100. A microprocessor unit, MPU 200, manages control 100. MPU 200 executes microprogram instructions stored within read only store, ROS 202. Table 1 is a list of the microprograms stored within ROS 202. Micro instructions, data, and control signals are transferred between MPU 200 and the other elements of control 50 via data bus 250. Stub 252 couples data bus 250 to MPU 200. Stub 254 couples data bus 250 to ROS 202. Similarly, stub 258 couples bus 250 to DRAM gate array 224 and to logic gater array 208 via stub 256. Stub 260 couples data bus 250 to optional store 220. Battery 204 supplies power to maintain critical volatile memory in case of power failure. Power from battery 204 is coupled to power logic 206 via cable 262. Power logic 206 senses loss of power and switches power from battery 204 to vital circuitry via cables 264 and 266. Keyboard interface circuit (IFC) 212 couples to a keyboard via cable 114 and contains the necessary drivers, receivers, and timing circuits. Keyboard IFC 212 is coupled to logic gate array 208 via cable 268 by which operator keyboard inputs may be transferred to host computer 10 in accordance with the further description below. Slot 120 contains photo sensor 216 whereby it may be determined that a security key has been properly inserted into slot 120. Photo sensor 216 communicates with the rest of control 50 via cable 270 to logic gate array 208. DRAM gate array 224 provides the addressing and control for the major random access, read/write storage elements of control 100. Timing is provided by 45 megahertz oscillator, OSC45 226, 56 megahertz oscillator, OSC56 228, and 60 megahertz oscillator, OSC60 230. These are coupled to DRAM gate array 224 via cables 274, 276 and 278, respectively. DRAM gate array 224 is controlled via cable 280 from logic gate array 208. One of the storage elements controlled by DRAM gate array 224 is character generation (CG) random access memory (RAM) 236. This device is coupled to DRAM gate array 224 via cable 286 and stores the data required to generate characters to refresh the display of monitor 106. Video interface circuit (IFC) 234 contains the drive circuitry. It is coupled to DRAM gate array 224 via cable 284. Video subsystem 102 is driven by cable 104 from stud 290 and 288 coupled to CG RAM 236 and video IFC 234, respectively. Alarm driver 232 is coupled via cable 282 to logic gate array 208. Display store 222 is coupled to DRAM gate array 224 via cable 294 and stub 298. Display store 222 contains the memory which stores the characters to be displayed and the attributes thereof. The organization of display store 222 is explained in detail below. Optional store 220 is an expansion card which contains both read only storage and random access memory. These are used to add to the least significant bits of the microprogram storage and the display data. Printer interface circuit (IFC) 218 is coupled to logic gate array 208 via cable 300. It contains the drivers, receivers, and timing circuitry for controlling a printer via cable 118. Communication between control 100 and host computer 10 is via standard input/output interface 40. This I/O interface terminates at I/O IFC 214, which contains the drivers, receivers, and timing circuitry required to operate on a standard I/O interface. I/O IFC 214 is coupled via cable 302 to logic gate array 208. The data transferred via standard interface 40 is buffered in COMM buffer 210 which is coupled to logic gate array 208 via cable 304. The data is stored in COMM buffer 210 in character serial fashion as the transfer is made on standard interface 40. The parsing and compacting operations are discussed in detail below. Fig. 4 is a conceptual diagram of the layout of display store 222. It is essentially one large contiguous random access memory. However, it can be thought of as two or more separate storage elements divided in address space. Display store 222 is conceptually one character in width. Presentation space buffer 310 is one of the address spaces. It contains the characters which are actually displayed on monitor 106. The capacity of presentation space buffer 310 may be, but is not required to be substantially larger than that required to store that data displayed on monitor 106. As explained above, this permits enhanced performance for various functions such as scrolling, etc. Extended attribute buffer 312 is of the same size as presentation space buffer 310. Extended attribute buffer 312 stores characters which signify various attributes of the characters stored in presentation space buffer 310. Other buffers of the same size, optional EABs 314, may be employed to specify other attributes of the characters stored in display store 222. Presentation space buffer 310 can be thought of as containing a number of columns. Preferably at least 80 columns are present even though only 40 are shown in Fig. 4 for the purposes of clarity. along the other axis, presentation space buffer 310 has a number of rows. In the preferred mode, monitor 106 can display up to 24 rows. Therefore, presentation space buffer 310 may have well in excess of 24 rows. As actually implemented, presentation space buffer 310 is consecutively addressed. That means that the hardware address of the first column of row N is one greater than the address of the last column of row N-1. Each character stored in presentation space buffer 310 can be referenced by a column number 320 (from 1-80 in preferred embodiment) and a row number. Character 324, for example, can be referenced as column 22, row X. Extended attribute buffer 312 can be thought of as similarly organized. Character 326 is located at column 22, row X. Therefore, it is directly related to character 324. In fact character 326 specifies one or more attributes of character 324. Other attributes of character 324 may be specified by character 328 which is located at column 22, row X, of optional EABs 314. Characters abcd 332, ABC 334, and 12345678 336 are shown in presentation space buffer 310 illustrating the manner in which they would be displayed on monitor 106. Underlining attribute " " 337 is shown in extended attribute buffer 312 illustrating the manner in which it would be displayed on monitor 106. Fig. 5 shows the contents of presentation space buffer 310 as it would be displayed on monitor 106 of video subsystem 102. The organization of monitor 106 is the same as the organization of presentation space buffer 310. That means that character 344 as displayed would be the same as character 324 as displayed with the attributes signified by characters 326 and 328. Similarly, abcd 338, ABC 340, and 12345678 342 are displayed as stored in presentation space buffer 310 combined with underlining attribute " " 337 stored in extended attribute buffer 312 (see also Fig. 4). Fig. 6 is a flow diagram showing the parsing of an I/O data stream received from host computer 10 into its various components along with the padding of characters into unused addresses of display store 222. For simplicity, various hardware elements are not shown to add greater clarity to the functional relationships. For greater detail concerning the hardware configuration, reference should be made to Fig. 3. A character serial data stream is received from host computer 10 and transferred to COMM buffer 210 via data path 354. As shown in Fig. 3, data path 354 contains cable 304 coupled between COMM buffer 210 and logic gate array 208, cable 302 coupled between logic gate array 208 and I/O IFC 214, and standard I/O interface 40. Referring again to Fig. 6, COMM buffer 210 temporarily stores each character in serial fashion in the order in which it was received from the host computer 10. Communication buffer 210 is functionally coupled to display store 222 via data path 348 which is divided into stubs 344 and 346 and coupled to presentation space buffer 310 and extended attribute buffer 312, respectively. The data is sent from COMM buffer 210 to display store 222 via data path 348 in character serial fashion in the order in which it was received from host computer 10 in FIFO (i.e., first in-first out) fashion. The data stream is parsed in the manner described below such that characters to be displayed are transferred in serial fashion to presentation space buffer 310 via stub 344 and attribute characters are transferred to extended attribute buffer 312 via stub 346. For simplicity, only one extended attribute buffer is shown although additional such buffers may be used as discussed above and as explained below. After being parsed, each character is written into the appropriate buffer in the order received. The first character is written at column 1, row 1 or such other starting position as specified in the data stream. The next character is written to the same row at the next column to the right unless the next character is an attribute character which exists at the same column location as the presentation space character. This process continues until the each desired column has been written in a given row. The next character is then written into the left-most column of the next sequential row. Unused addresses are filled with pad characters in the manner explained below. Pointer 343 in presentation space buffer 310 and pointer 345 in EAB buffer 312 each point to the same address within its respective buffer. This ensures that each EAB character corresponds to the appropriate presentation space character. Data from display store 222 is transmitted to monitor 106 via cable 104 from the combination of data paths 350 and 352. The characters stored in presentation space buffer 310 are written as modified by the corresponding characters of extended attribute buffer 312 at the corresponding positions on monitor 106 in the manner specified above. Fig. 7 is a flowchart of the parsing operation which corresponds to the data handling shown in Fig. 6. The procedure is entered at element 360. Element 362 initializes the procedure by resetting the counters for column, row and the COMM buffer. The first two of these will control the storing of characters within the presentation space buffer and the extended attribute buffers, wherein each column is filled sequentially within a given row followed by each column within the next sequential row. The COMM buffer counter controls removal of characters from COMM buffer which characters are stored in the order received from host computer 10. Element 364 fetches the next character from COMM buffer 210 as controlled by COMM buffer counter which is then incremented in preparation for the next fetch. The character fetched is then reviewed to determine whether it is an end of row character. This is a unique character which indicates that no more valid characters will be received for the current row. This is represented as hexadecimal "FF" (see also Fig. 6). If the pad control character is found at element 366, elements 368 and 370 store presentation space and attribute pad characters at the current column position in the EABs and presentation space buffer, respectively. These are represented as hexadecimal "OO" for EAB 312 and hexadecimal "40" for presentation space buffer 310 in the preferred embodiment, although any unique code can be selected for the pad character (see also Fig. 6). Element 372 determines whether all columns have been padded for the current row by examining the column counter. If the row is not yet complete, the column counter is incremented and control returned to element 368. When the last column has been padded, control is directed to element 386 to begin the next row. If element 366 has not found an end of row character, element 374 determines whether the instant character is an EAB control character. Again referring to Fig. 6, this is represented by a hexadecimal "10". If an EAB control character is found, element 380 fetches the next character from COMM buffer 210 and increments the COMM buffer counter. That character will designate which EAB to reference in multiple EAB systems. Therefore, the character is sent to the EAB reference register. Element 382 then fetches the EAB character to be stored and increments the COMM buffer counter. After the EAB character has been stored in the appropriate EAB, control is returned to element 364 to fetch the next character from COMM buffer 210. Should element 374 not find an EAB control character, the current character is assumed to be a data character to be stored in presentation space buffer 310 for display on monitor 106. Element 376 effects the store operation. Element 378 then increments the column counter. Element 384 determines whether all columns of the current row have been filled. If not, control is returned to element 364 to fetch the next character from COMM buffer 210. If element 384 determines that the row has been filled, element 386 resets the column counter so that the leftmost desired column of the next row will be accessed. Element 388 increments the row counter to access the next row. Element 390 determines whether all rows have been filled. If not, control is returned to element 364 to begin the next row. If all rows are filled, the procedure exits at element 392. Fig. 8 is a schematic representation of the compaction of data as it is being sent from display store 222 to host computer 10. The components are the same as in Fig. 6 with the data being sent in the opposite direction. Fig. 9 is a flowchart for the compaction of data as shown in Fig. 8. The procedure is entered via element 500. The row and COMM buffer counters are reset at element 502. Element 504 resets the column counter, and element 506 resets the EAB counter. All four of these counters perform the same function as was described above in accordance with Fig. 7. The next character is fetched from the first EAB at element 508. Element 510 determines whether the character is an attribute pad character. If not, then the character fetched is a valid EAB character. Element 512 stores an EAB control character (i.e, hexadecimal "10") in COMM buffer 210 and increments the COMM buffer counter. The EAB number is the value of the EAB counter which is next stored in COMM buffer 210 and the COMM buffer counter is again incremented. The actual EAB character is transferred to COMM buffer 210 by element 516, and COMM buffer counter is incremented. Control is then returned to element 518. Incrementing the EAB counter at element 518 permits access of the next EAB in multiple EAB systems. Element 520 determines whether all of the EABs have been tried for the current column number. If not, control is given to element 508 to fetch a character from the next EAB. After each EAB has been tried for a given column, element 522 fetches the next character from presentation space buffer 310. Element 524 determines whether it is a presentation space pad character. If not, element 526 stores the valid character in COMM buffer 210 and COMM buffer counter is incremented. Element 528 increments the column counter. If element 530 determines that this is not the last column, control is returned to element 506 to begin the next column with the first EAB. If all columns are tried, control is given to element 534 to find the next row. If element 524 finds a presentation space pad character, element 539 determines whether all the presentation space positions from the current column to the last column are filled with pad characters. If not, the character is a valid data character and the process flows to element 526. If element 539 finds that all the presentation space positions are filled with pad characters, no further valid data is in the current row and control is given to element 532. Element 532 stores a row ending control character (i.e., hexadecimal "FF") in COMM buffer 210 and increments the COMM buffer counter. The row counter is incremented at element 534 which enables access to the next row. Element 536 determines if all rows have been tried. If not, control is returned to element 504. If all rows have been accessed, the procedure exits at element 538.

Claims: A method of sending to a host computer a data stream from a presentation space buffer and at least a first attribute buffer of a fixed function display terminal, characterized in that it comprises the steps of: a. pointing a pointer to the current character position; b. reading the current character position in said first attribute buffer; c. if an attribute character is present at said current character position in said first attribute buffer, generating an attribute control character and placing said attribute control character and said attribute character in said data stream; d. reading a presentation space character at the current character position in said presentation space buffer; e. placing said presentation space character in said data stream; f. placing an end of row character in said data stream if said presentation space character is a presentation space pad character, and if all the subsequent presentation space characters until the end of the row of said presentation space buffer are all presentation space pad characters. A method of receiving from a host computer a data stream having a presentation space portion and at least a first attribute portion, into a fixed function display terminal having a presentation space buffer and at least a first attribute buffer, said method being characterized in that it comprises the steps of: a. pointing a pointer to a current character in said data stream; b. reading the current character to determine whether it is a presentation space character, an attribute character or an end of row character; c. placing said current character in said presentation space buffer if it is a presentation space character; d. writing said current character in said first attribute buffer if it is an attribute character; e. padding said presentation space buffer with presentation space pad characters until the end of row upon the detection of said end of row character; and, f. padding said first attribute buffer with first attribute pad characters until the end of row upon the detection of said end of row character. A fixed function display subsystem (50) implementing the methods of claims 1 and 2 for controlling the displaying of a number of symbols, said display subsystem (50) being of the type comprising a controller (100) having first means (114, 212) for responsively coupling said controller (100) to a keyboard, second means (104, 234) for responsively coupling the controller (100) to a video subsystem (102) with a monitor (106) and, third means (40, 214) for responsively coupling said controller (100) to a host computer, said controller (100) further having a memory (222) comprising a presentation space buffer (310) for storing more than said number of symbols and at least one attribute buffer (312) for storing at least one attribute for each symbol in said presentation space buffer (310), said fixed function display subsystem (50) being characterized in that it includes fourth means (200, 202, 208) responsively coupled to said memory (222) and said third means (40, 214), said fourth means (200, 202, 208) comprising means (508, 510) for reading the current character position in said attribute buffer (312), means (512, 514, 516) responsive to the reading of an attribute character in said current position in said attribute buffer (312) for storing an attribute control character, an attribute buffer number and said attribute character in a communication buffer (210), means (522) for reading a presentation space character at the current character position in said presentation space buffer (310), means (526) for placing said presentation space character in said communication buffer (210) and means (532) for placing an end of row character in said communication buffer (210) in response to the reading of pad characters in all subsequent character positions in the current row in said presentation space buffer (310), said fixed function display subsystem (50) being further characterized in that said fourth means (200, 202, 208) further comprise means (364, 366, 374) for reading the current character in a data stream received in said communication buffer (210) from said host computer and for determining whether it is a presentation space character, an attribute character or an end of row character, means (376) for placing said current character in said presentation space buffer (310) if it is a presentation space character, means (368) for placing said current character in said first attribute buffer (312) if it is an attribute character and means (368, 370) for padding said presentation space buffer (310) and said first attribute buffer (312) with pad characters until the end of the row if it is an end of row character. A fixed function display terminal of the type comprising a keyboard, a printer, a video subsystem (102) with a monitor (106), all responsively coupled to a fixed function display subsystem (50), said fixed function display terminal being characterized in that said fixed function display subsystem (50) is in accordance with claim 3.

Inventors: AKIYAMA ALEX AKIRA, HORTON BUSBOOM LEAH JANE, MAITLAND WILLIAM JOSEPH JR, AKIYAMA, ALEX AKIRA, HORTON BUSBOOM, LEAH JANE, MAITLAND, WILLIAM JOSEPH, JR.
Applicants: IBM, INTERNATIONAL BUSINESS MACHINES CORPORATION
Application year: 1990
Main classification: G09G1
IPC codes: G09G5