[N.B. DCX Format specs at end of document - page 55] DCA/Intel Communicating Applications Specification Version 1.2 Copyright (C) 1988, 1989, 1990. All rights reserved. Digital Communications Associates, Inc. 1000 Alderman Drive Alpharetta, GA 30201-4199 Intel Corporation 5200 N.E. Elam Young Pkwy. Hillsboro, OR 97124-6497 Intel Part Number: 301812-004 This specification was jointly developed by Digital Communications Associates, Incorporated and Intel Corporation. Although it has been released into the public domain and is not confidential or proprietary, the specification is still the copyright and property of Digital Communications Associates, Incorporated and Intel Corporation. Disclaimer of Warranty DIGITAL COMMUNICATIONS ASSOCIATES, INCORPORATED (DCA) AND INTEL CORPORATION EXCLUDE ANY AND ALL IMPLIED WARRANTIES, INCLUDING WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. NEITHER DCA NOR INTEL MAKE ANY WARRANTY OF REPRESENTATION, EITHER EXPRESS OR IMPLIED, WITH RESPECT TO THIS SPECIFICATION, ITS QUALITY, PERFORMANCE, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. NEITHER DCA NOR INTEL SHALL HAVE ANY LIABILITY FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RESULTING FROM THE USE OR MODIFICATION OF THIS SPECIFICATION. This specification uses the following trademarks: SatisFAXtion is a trademark and Intel is a registered trademark of Intel Corporation. DCA and Digital Communications Associates are registered trademarks of Digital Communications Associates, Incorporated. Table of Contents Recent News About CAS .................................... 1 Introduction ............................................. 5 Additional Copies of CAS ................................. 5 Programmer's Overview .................................... 6 Events and Control Files ............................ 7 Queues .............................................. 7 Using the Resident Manager .......................... 8 Group Events (V1.2) ...................................... 8 Control Files ............................................ 9 Conventions ......................................... 9 Control File Format ................................. 11 Control File Fields With Special Meanings for Group Events (V1.2) 15 File Transfer Record (FTR) .......................... 15 Group File Format (V1.2) ............................ 17 Sequence of Events for Transmitting and Receiving Files .. 18 Transmitting a Single File .......................... 18 Transmitting Multiple Files as a Single Event ....... 18 Receiving Files ..................................... 18 Transmitting to a Group (Group Send) (V1.2) ......... 19 Receiving from a Group (Group Polled Receive) (V1.2) 19 Function Table ........................................... 21 Get Installed State (00H) ................................ 22 Submit a Task (01H) ...................................... 23 Abort the Current Event (02H) ............................ 24 Find First Entry in Queue (05H) .......................... 26 Find Next Entry in Queue (06H) ........................... 28 Open a File (07H) ........................................ 29 Delete a File (08H) ...................................... 31 Delete All Files (in a queue, 09H) ....................... 32 Get Event Date (0AH) ..................................... 33 Set Task Date (0BH) ...................................... 34 Get Event Time (0CH) ..................................... 35 Set Task Time (0DH) ...................................... 36 Get External Data Block (0EH) ............................ 37 Get/Set Autoreceive State (0FH) .......................... 38 Get Current Event Status (10H) ........................... 39 Get Queue Status (11H) ................................... 40 Get Hardware Status (12H) ................................ 41 Run Diagnostics (13H) .................................... 42 Move Received File (14H) ................................. 43 Submit a Single File to Send (15H) ....................... 44 Unload Resident Manager (16H) ............................ 46 Set Cover Page Status (17H) .............................. 47 Error Codes .............................................. 49 Phonebook Format ......................................... 51 PCX Format ............................................... 53 Data Encoding ....................................... 54 File Header ......................................... 54 DCX Format ............................................... 55 ASCII File Interpretation for Fax Transmission ........... 55 DCA/Intel Communicating Applications Specification V1.2 iii Glossary ................................................. 57 iv DCA/Intel Communicating Applications Specification V1.2 DCA/Intel Communicating Applications Specification V1.2 v Recent News About CAS The following changes or enhancements have been made to the Communicating Applications Specification (CAS) in Version 1.2. These features should not be used by CAS applications designed to run on earlier CAS versions. (Refer to function OEH on page 37 for information on how to determine the CAS version number.) In this specification, version 1.2 changes and enhancements are designated with the label (V1.2). Page 8 Group Events CAS now supports group events in which the same activity is carried out between the local computer and several remote devices (fax machines or remote computers). Two types of group events are supported: Group Send and Group Polled Receive. Page 10 Phone Numbers When specifying a phone number, you can now include A, B, C, and D, which specifies the keys on the additional column of keys on some of the newer telephones. Also, W is now supported, which causes the hardware to wait for a subsequent dial tone. Page 11 Control File The following fields of the Control File are either new or have enhanced features. Refer to the description of the Control File field beginning on Page 11 for details. Offset Length Description 0 1 Event type. Group Send and Group Polled Receive event types have been added. 2 2 Status of event. A negative error code value causes the event to be submitted directly to the Log Queue. 12 47 Phone number to call (or filename of Group File). For group events, the filename of the group file is entered in this field. 140 1 Delete files flag. New field. DCA/Intel Communicating Applications Specification V1.2 - 1 - 141 2 Event handle for parent event. New field. 196 20 Reserved for internal use by CAS implementations. New field. 216 1 Cover page read flag. New field. 217 1 Suppress Page Headers. New field. Page 15 Required Fields in a Control File for a Group Event When a Control File is the parent Control File for a group event (Group Send or Group Polled Receive), certain fields of the Control File have special meaning (as described on page 15). Page 16 File Transfer Record (FTR) The File Type field (offset 0) of the File Transfer Record now supports two new file formats: HP PCL Level IV and Epson FX85 file formats. These file types are optional and are not required to be supported by all CAS implementations. Page 17 Group File Format When the event type in a Control File (offset 0) is 4 (Group send) or 5 (Group Polled Receive), the application must also create a Group File that contains information about the members of the group. The file name of the Group File must then be placed in the "Phone number to call" field of its associated Control File to link the two files. The Group File contains multiple records, one for each member of the group. Refer to Page 17 for a detailed description of the Group File format. Page 19 Transmitting and Receiving Group Events The section beginning on page 15 titled "Transmitting to a Group (Group Send)" and "Receiving from a Group (Group Polled Receive) describes the steps a programmer must follow to transmit and receive group events with CAS. Page 23 Submit a Task Function The Submit a Task function (01H) now supports Group Send and Group Polled Receive events. - 2 - DCA/Intel Communicating Applications Specification V1.2 Page 29 Open a File Function The Open a File function (07H) now supports group files. Page 40 Get Queue Status Function The Get Queue Status function (11H) supports two new values for register DL (3 and 4). These values have been added to allow applications to efficiently determine when sends and receives have occurred. Page 47 Set Cover Page Status Function The function Set Cover Page Status (17H) is a new function. It is provided to allow an application to set and clear the new Cover Page Read flag (offset 216) of the Control File. Page 49 Error Codes Two new classes of error codes have been added: Class 5 for application specific errors and Class 6 for CAS implementation specific errors. Also, two new class 4 error codes have been defined: 040AH (No dial tone - check phone line and cord) and 040EH (Timeout while waiting for secondary dial tone). DCA/Intel Communicating Applications Specification V1.2 - 3 - - 4 - DCA/Intel Communicating Applications Specification V1.2 Introduction The DCA/Intel Communicating Applications Specification (CAS) defines a standard, high-level programming interface for data communications applications. It offers software developers a simple and straightforward method for adding data communications functions to their products. This interface is independent of the hardware and software used to implement the underlying communications facilities. This shields software developers from the details typically associated with using communications hardware. It also permits developers to code their applications to the interface and to be assured that their applications will work with new generations of hardware products. CAS is designed to support a wide variety of communications hardware. Version 1.2 of this specification provides functions that are applicable to fax modem hardware. This type of hardware can be used for both facsimile and file transfer. Over time, CAS will evolve to add functions appropriate for other hardware. Version 1.2 of CAS requires DOS 3.0 or later. Additional Copies of CAS To obtain additional copies of this specification, contact Intel at one of the following numbers: (503) 629-7000 (inside the U.S. or Canada) (503) 629-7354 (outside the U.S. or Canada) The Intel Electronic Bulletin Board contains an ASCII version of this specification that you can download with a modem using the XMODEM transfer protocol. You can reach the Bulletin Board 24 hours a day by calling: (503) 645-6275 Before you call, set your modem for 300, 1200, or 2400 bits per second; 8 data bits; no parity; and 1 stop bit. You can also obtain an ASCII version of this specification if you have a touch-tone phone and an Intel fax board (Connection CoProcessor or SatisFAXtion). FaxBack is available 24 hours a day. You can reach FaxBack by calling: (800) 525-3019 (Inside the U.S. or Canada) (503) 629-7576 (Outside the U.S. or Canada) The document number is 0006. DCA/Intel Communicating Applications Specification V1.2 - 5 - Programmer's Overview The DCA/Intel CAS provides a standard programming interface that allows software developers to access the communication services provided by hardware. The software that implements CAS (called the Resident Manager) controls the interface to the hardware and allows multiple applications/processes to use the hardware without conflict. To use the CAS interface, an application submits data-communication events to the Resident Manager. The Resident Manager then schedules the event and performs the necessary data transfer without further interaction with the application. An application that is using the CAS interface does not need to monitor, maintain, or service a communications event. The Resident Manager performs these events for the application, in the background. The Resident Manager provides a kernel of primitives (control files and function calls) that set up data communication events, schedule the events for execution, and check the results of the event. The set of CAS primitives has purposely been kept simple and generic, both to support as many types of applications as possible and to relieve certain classes of applications from being forced to use functions specific to other classes. Applications access CAS functions through interrupt 2FH (Multiplex interrupt on DOS versions 3.0 and above). Similar to DOS function calls accessed through interrupt 21H, CAS functions are accessed by loading registers with defined values, issuing an interrupt 2FH, and examining the values returned in the appropriate registers. The following convention is used for function calls: Register Usage AH Multiplex Number (0CBH) AL Function Code BX Event Handle CX File Number CX, DX Date, Time DS:DX Pointer to Data Area DL Queue 0 - Task Queue 1 - Receive Queue 2 - Log Queue All multiplex interrupts require a unique multiplex number. For all Intel CAS implementations, this number is 0CBH. - 6 - DCA/Intel Communicating Applications Specification V1.2 Events and Control Files The Resident Manager currently supports the following six data- communication events: Send The local computer transmits information to a remote device (fax machine or computer). Receive The local computer receives information from a remote device. Polled Send The local computer waits for a remote device to call and then automatically sends information to it. Polled Receive The local computer calls a remote device and receives information from it. Group Send (V1.2) The local computer transmits the same information to multiple remote devices. Group Polled The local computer calls multiple remote devices and receives information Receive (V1.2) from them. Each event has one or more Control Files associated with it. A Control File contains information about an event that the Resident Manager uses to schedule, execute, and report the status of the event. For example, the Control File for a send event contains the phone number, date, and time information for the event. Queues To manage the events presented to it, the Resident Manager places the Control Files associated with these events in queues. Three types of queues are supported: a Task Queue, a Receive Queue, and a Log Queue. Task Queue contains a list of pending events that the application running on the local computer has initiated. Pending events can be send, polled send, polled receive, group send, and group polled receive events. Receive Queue contains a list of events that the local computer has received from a remote device. Log Queue contains a record of all the events that have been completed, aborted, or terminated with an error. These event queues allow the Resident Manager to schedule and monitor events. They also allow an application to check on the status of events. DCA/Intel Communicating Applications Specification V1.2 - 7 - Using the Resident Manager To initiate an event, the application must first create a Control File for the event. This file contains information such as the name of the file (or files) to send, the phone number of the destination, and the date and time for transmission. The application then submits the Control File for the event to the Resident Manager and receives back a unique event handle. The application uses the event handle to keep track of that particular event. Note: Event handles are never 0. While an event is pending, the Resident Manager keeps the Control File for the event in the Task Queue. When it is time to process the event, the Resident Manager takes the event's Control File off the Task Queue and sends the necessary information about the event to the communications hardware. While the event is being processed (that is, while it is the current event), its Control File is not on any queue; however, the application can access information about the current event by using the CAS Get Current Event Status function. Once the event is completed, successfully or not, the Resident Manager updates the status information in the event's Control File and moves the file to the Log Queue. The application can then use the CAS functions to examine the Control Files in the log queue and determine the status of completed events. Note: The event handle for an event remains the same even though the Control File for the event has been moved from the task queue to the log queue. For receive events, the Resident Manager receives data from the remote device and stores it in a disk file. Once the receive event is completed, the Resident Manager creates a Control File for the event and places copies of it in both the Receive Queue and the Log Queue. The application can then use CAS functions to examine the Control Files in the Receive and Log Queues and to open files of received data. The Resident Manager saves the Control Files in the Receive and Log Queues until the application explicitly deletes them. The data files that are received from a remote device are also saved until the application explicitly saves them or deletes. Data files that are sent to a remote device can be saved after they are sent or automatically deleted, according to how the application sets up the Control File. Group Events (V1.2) Group events are events in which the same activity is carried out between the local computer and several remote devices. For example, with a group send event, the local computer can send the same file (or files) to a group of several remote devices. Or, with a group polled receive, the local computer polls a group of remote devices to receive information from them. - 8 - DCA/Intel Communicating Applications Specification V1.2 For group events, the application must set up two files: a parent Control File that defines the event to be carried out and a Group File that defines the group of individuals that the event is going to be directed to. When the parent Control File for a group event is submitted to the Task Queue, the Resident Manager assigns an event handle to the group (or parent) event. It also examines the Group File and assigns an event handle to each group member. This latter event handle is used to identify the instance of the group event (called a sub-event) that is processed for that group member. Each time a sub-event is completed, the Resident Manager creates a Control File in the Log Queue for that sub-event. When all the sub-events associated with a parent event have been processed, the Resident Manager moves the Control File for the parent event to the Log Queue. It also moves the Group File to the Log Queue. This file is the same as the original Group File, except that the status fields are filled in for each individual and the event handle fields are filled in with the event handle corresponding to each sub-event. If a group event is cancelled, the Resident Manager ceases processing all the sub-events associated with that event. Control Files A Control File contains the specific control information (who to call, when to call, etc.) for a given send or receive event. Some fields in a Control File are meaningful only in certain instances. For example, the "Time length of phone connection" fields are not meaningful in a Control File for a pending Send event and will contain zeros. Conventions In the description of the Control File that follows, several terms are used that require further explanation. These include ASCIIZ string, DOS file time format, and phone number. ASCIIZ String An ASCIIZ string is simply a string of ASCII characters followed by a zero byte to indicate the end of the string. DOS File Date and Time Format DOS file date and time format is a convention that DOS uses for storing the date and time in two-byte fields. The format of the date is: DCA/Intel Communicating Applications Specification V1.2 - 9 - Bits Description 0-4 A value from 1 to 31, indicating the day of the month (where 1 is the first day). 5-8 A value from 1 to 12, indicating the month of the year (where 1 is January, 2 is February, etc.). 9-15 A value from 0 to 119 (which corresponds to 1980 to 2099) indicating the year. The format of the time is: Bits Description 0-4 The number of two-second increments. 5-10 A value from 0 to 59, indicating the minutes. 11-15 A value from 0 to 23, indicating the hours. Phone Numbers When specifying a phone number, you can include not only the digits 0 through 9 and the characters # and *, but also the following special characters: Character Description A,B,C,D Specifies keys in the additional column of keys (that is, the 1633 Hz high-group frequency) on some telephones. (V1.2) , Causes the hardware to pause when dialing. ! Signals a hook flash, for use with special PBX functions. P Specifies pulse dialing for rotary phones. T Specifies tone dialing for touch-tone phones. M Causes the hardware to use the current connection without dialing a new number (manual dialing). When used, this character must be the first character in the phone number. W Causes the hardware to wait for a subsequent dial tone. This is useful when waiting for a tone for an outside line. (V1.2) All other characters are reserved. - 10 - DCA/Intel Communicating Applications Specification V1.2 Control File Format Listed below is the general format of a Control File. The fields preceded by bullets ( ) are fields the application must fill in when creating a Control File. Other fields are filled in by the Resident Manager and must be set to 0 when creating the Control File. For a receive event, the Resident Manager fills in all the fields. The Offset column indicates the offset of the field (in bytes) from the start of the file. The Length column indicates the length of the field in bytes. The values listed in the Description field are values, not bit positions. Multi-byte fields containing numeric, date, or time values have the least-significant byte first. When using high-level languages to create a Control File, make sure the data structures are packed (aligned on byte boundaries). Offset Length Description 0 1 Event type: 0 - Send 1 - Receive 2 - Polled Send 3 - Polled Receive 4 - Group Send (V1.2) 5 - Group Polled Receive (V1.2) 6-127 - Reserved -1 (0FFH) - Serious hardware error not associated with an ordinary event. Note: When filling out this field, you must set it to 0, 2, 3, 4, or 5. The value 1 is used by the Resident Manager when creating a Control File for a receive event. The value -1 is not valid for Control Files and results in an error. 1 1 Transfer type: 0 - 200x200 dpi, fax mode. 1 - 100x200 dpi, fax mode. 2 - File transfer mode. 3-127 - Reserved. Note: You must set the Transfer type field to 0, 1, or 2 for send events (this field doesn't apply for polled receive or group polled receive events). For file transfers, the sending Resident Manager supplies information from the Control File as a header for the file transmission. The receiving Resident Manager can then use this header information to create a Control File for the receive event. DCA/Intel Communicating Applications Specification V1.2 - 11 - Offset Length Description 2 2 Status of event: 0 - Successfully completed. 1 - Waiting to be processed. 2 - Number dialed or event in progress. 3 - Connection made -- sending. 4 - Connection made -- receiving. 5 - Event was aborted. 6-32,767 - Reserved. Negative value - Error. Note: The Resident Manager ordinarily sets the value in this field to indicate the status of the event. When the Control File is created, this field should normally be set to "0." (The following information is new for V1.2.) If the field is set to a negative value when the event is submitted (for example, if it is set to one of the class 5 error codes), the event will be added directly to the Log Queue and will not be processed. (Refer to the section later in this section titled "Error Codes.") 4 2 Time you want to send the information (used for send events only). For receive events, this is the time the receive event occurred. The format is in DOS file date and time format. 6 2 Date you want to send the information (used for send events only). For receive events, this is the date the receive event occurred. The format is in DOS file date and time format. Note: Setting both the time and date fields to zero schedules the file to be sent immediately. Therefore, to send a file at once, zero the four bytes (long word) at offset 4. 8 2 Number of files to transfer (maximum 32766). 10 2 Offset in this Control File of first File Transfer Record. Note: If you don't plan to include cover page text (described at offset 383), this field must specify offset 383. Otherwise, this field must specify the offset immediately after the cover page text. 12 47 Phone number to call (or filename of Group File (V1.2)), as an ASCIIZ string. For non-group events, place a phone number in this field. (The following information is new for V1.2.) For group events, place the filename of the Group File (without specifying the drive or path) in this field. The Group File must be in the same directory as the Control File for the parent event when the event is submitted. - 12 - DCA/Intel Communicating Applications Specification V1.2 Offset Length Description 59 64 Application-specific tag field, as an ASCIIZ string. Note: This field is used by applications to identify Control Files that are "owned" by that application. For example, when an application creates Control Files, it can fill this field with a specific ASCII string. Later, when it checks Control Files, it can check for the same string to ensure that it handles only the Control Files that apply to it. If a file is received as a file transfer this field will have meaning in the Control File for the receive event. If a file is received as a fax, this field will be filled with zeros. 123 1 Reserved. Set to zero. 124 1 Time length of phone connection: seconds (0 - 59). Has no meaning for parent Control Files. 125 1 Time length of phone connection: minutes (0-59). Has no meaning for parent Control Files. 126 1 Time length of phone connection: hours (0-23.) Has no meaning for parent Control Files. 127 4 Total number of pages in all files. Has no meaning for parent Control Files. 131 4 Number of pages transmitted so far. Has no meaning for parent Control Files. 135 2 Number of files transmitted so far. Has no meaning for parent Control Files. 137 1 Cover page flag: 0 - Don't send cover page. 1 - Send cover page. 2-127 - Reserved. Note: If you plan to send only a cover page, set this field to 1 and the number of files to transfer (offset 8) to 0. Setting both fields to 0 results in an error. 138 2 Number of transmission errors reported by the hardware for all transmissions controlled by this Control File. Has no meaning for parent Control Files. 140 1 Delete files flag (V1.2). Determines whether or not the files listed in the File Transfer Records (FTRs) are deleted after the event is completed. (The FTR use and format is describe later in this specification in the section titled "File Transfer Record (FTR).") 0 - Don't delete files after event 1 - Delete files if successful 2 - Always delete files after event 3-127 - Reserved. DCA/Intel Communicating Applications Specification V1.2 - 13 - Offset Length Description Note: This field is valid in a Control File for event types 0 (send), 2 (polled send), and 4 (group send). If the event type is a group send and the value of the delete files flag is 1 (delete if successful), the files will only be deleted if all sub-events have been successfully completed. If the event is a group send and the value of the flag is 2 (always delete), the files will be deleted after all sub-events have been attempted. If the delete files flag is set to 2 (always delete), the files will always be deleted whether the event is successful, cancelled by the user, or aborted during transmission due to line or board errors. 141 2 Event handle for parent event (V1.2). The Resident Manager assigns this handle. Initialize to zero. This handle is zero if there is no parent event. 143 53 Reserved. Set to zero. 196 20 Available for internal use by CAS implementations (V1.2). Set to zero. This field is available for CAS implementations to use for internal flags and other features. 216 1 Cover page read flag (V1.2). Initialize to zero. The application can use CAS function 17H to set this field to indicate whether or not the user has read the cover page. 0 - cover page not read 1 - cover page read 2-127 - reserved 217 1 Suppress Page Headers (V1.2). This field only has meaning for faxes. Setting this field to 1 causes the line of fax addressing information at the top of each fax page to be suppressed. 0 - Page Headers 1 - No Page Headers 2-127 - reserved 218 21 Remote CSID (the CCITT identification of the fax device), as an ASCIIZ string (set by the Resident Manager). Set to zero. 239 32 Destination Name, as an ASCIIZ string (To: field). 271 32 Sender Name, as an ASCIIZ string (From: field). 303 80 Path and name of PCX logo file (maximum size 1728 x 800 pels), as an ASCIIZ string. A fully qualified pathname for the file (including the drive) must be entered. 383 var Cover page text, as an ASCIIZ string. The length is variable, as indicated by var, but a maximum of 36 lines of text is recommended (or else the received page might be longer than 11 inches). Lines can be separated by new line characters (0AH) or CR-LF pairs (0DH, 0AH). Lines longer than 80 characters are wrapped around. - 14 - DCA/Intel Communicating Applications Specification V1.2 Offset Length Description Note: The text field is not required to be present. If it is absent, the first File Transfer Record (FTR) must start at offset 383. In all cases, the field at offset 10 identifies the start of the first FTR. var var Table of 128-byte File Transfer Records (FTRs). The first FTR begins at the offset specified by the word at offset 10 of the Control File. The following section describes the format of each FTR. Control File Fields With Special Meanings for Group Events (V1.2) If the event type for a Control File is 4 (Group Send) or 5 (Group Polled Receive), the fields shown below for the parent event's Control File have the following functions: Offset Length Description 1 1 Transfer Type. Not used for group events. The transfer type for each member event is defined in the group file. 12 47 Filename of Group File. ASCIIZ string that must be a DOS filename. Do not give the path. This file must be in the same the directory as the parent Control File when the group event is submitted. 239 32 Destination Name, ASCIIZ string. For group events, this field can contain a group identifier (or it can be left blank). File Transfer Record (FTR) Listed below is the general format of a File Transfer Record. These records appear at the end of the Control File, one for each file that is transferred as part of the event. Fields preceded by bullets ( ) are fields the programmer must fill in when creating an FTR. Other fields are filled in by the Resident Manager software and should be set to 0 when creating the FTR. When creating an FTR for a file transfer, specify only the file name. When creating an FTR for a fax, you must also specify the file type, text size, and page length fields. In both cases, set the other fields to zero. DCA/Intel Communicating Applications Specification V1.2 - 15 - Each FTR has the following format: Offset Length Description 0 1 File type (has meaning only for faxes): 0 - ASCII 1 - PCX 2 - DCX 3-15 Reserved 16-31 - (V1.2) Reserved for printer file formats. At this time, code 16 is assigned to the HP PCL Level IV file format and code 17 is assigned to the Epson FX85 format. These codes are optional and may not be supported by all CAS implementations. 32-127 - Reserved 1 1 Text size to use if file type is ASCII (has meaning only for faxes): 0 - 80 column by 66 lines (11 inches) 1 - 132 column by 88 lines (11 inches) 2-127 - Reserved 2 1 Status of this file: 0 - Untouched 1 - Has been opened 2 - Has been moved 3 - Has been deleted 4 - Not yet received 5-127 - Reserved 3 4 Bytes of this file transmitted so far. Has no meaning for parent Control Files. 7 4 Size in bytes of this file. 11 2 Number of pages in this file transmitted so far. Has no meaning for parent Control Files. 13 2 Number of pages in this file. 15 80 Path and name of file to send, as an ASCIIZ string. A fully qualified pathname for the file (including the drive) must be entered. 95 1 If you set the Inches field (offset 96) to a value in the range 1 through 127, this field specifies the number of additional 1/8-inch increments in page length. If the Inches field is outside that range, this field has no meaning. This field has meaning only for faxes. 96 1 Page length in inches (has meaning only for faxes). 0 - Page length is 11 inches. 1-127 - Page length is the specified number of inches, plus the number of 1/8 inches specified in the 1/8 inches field (offset 95). (-1) - ASCII pages end with form feeds only. All other values are reserved. 97 31 Reserved. Set to zero. - 16 - DCA/Intel Communicating Applications Specification V1.2 Group File Format (V1.2) When the event type in a Control File (offset 0) is 4 (Group send) or 5 (Group Polled Receive), the application must also create a Group File that contains information about the members of the group. The file name of the Group File must then be placed in the "Phone number to call" field of its associated Control File to link the two files. No pathname is given for the Group File. Instead, the Group File must reside in the same directory as its associated Control File. The Group File contains multiple records, one for each member of the group. Note: Entries in this file must be for individuals. There is no mechanism for nesting groups. A record in the Group File has the following format: Offset Length Description 0 1 Transfer type for individual sub-event. Values are 0 - 200x200 dpi, fax mode 1 - 100x200 dpi, fax mode 2 - File transfer mode 3-127 - Reserved 1 2 Individual status. The status of a sub-event. Set to zero. Values correspond to the Status of Event field in a Control File: 0 - Successfully completed 1 - Waiting to be processed 2 - Number dialed or event in progress 3 - Connection made -- sending 4 - Connection made -- receiving 5 - Event was cancelled 6-32767 - Reserved Negative numbers - Error. 3 47 Phone Number to Call. This is the phone number of the group member this record pertains to. An ASCIIZ string. 50 32 Destination Name. The group member's destination name as an ASCIIZ string. 82 2 Event Handle. This is the event handle of the sub-event associated with this group member. The Resident Manager assigns this value. Initialize to zero. 84 44 Reserved. Sequence of Events for Transmitting and Receiving Files This section provides an overview of the steps a programmer should follow to transmit and receive files using the DCA/Intel CAS function calls. Although these sections are general, they refer to specific function calls. Later sections of this specification provide detailed descriptions of the function calls. DCA/Intel Communicating Applications Specification V1.2 - 17 - Transmitting a Single File 1. Invoke CAS function 00H (Get Installed State) to determine if the Resident Manager is installed. If it is, continue with the following steps. 2. Create the data file you wish to transmit. 3. Create the data structure required by function 15H (Submit a Single File to Send). 4. Invoke function 15H (Submit a Single File to Send). 5. Check for errors in sending. Transmitting Multiple Files as a Single Event 1. Invoke CAS function 00H (Get Installed State) to determine if the Resident Manager is installed. If it is, continue with the following steps. 2. Create the data files you wish to transmit. 3. Create a Control File that includes one File Transfer Record (FTR) for each file you wish to transmit. 4. Invoke function 01H (Submit a Task). 5. Check for errors. Receiving Files 1. Invoke CAS function 00H (Get Installed State) to determine if the Resident Manager is installed. If it is, continue with the following steps. 2. Invoke function 05H (Find First Entry in Queue) to determine if any receive events have occurred. If a receive event has occurred, continue with the following steps. 3. Invoke function 07H (Open a File) to open the Control File for the receive event.. 4. For each File Transfer Record in the Control File, examine the "Status of this file" field to determine if the associated received file has been moved or deleted. For each received file that has not been moved or deleted, continue with step 5. If no such files remain, close the Control File and continue with step 8. - 18 - DCA/Intel Communicating Applications Specification V1.2 5. Invoke function 14H (Move Received File) to move the received file to the appropriate directory or filename or invoke function 08H (Delete a File) to delete the received file. 6. Once you have moved, renamed, or deleted all the received files, invoke DOS function 3EH (Close File Handle) to close the Control File. 7. Invoke function 08H (Delete a File) to delete the Control File. 8. Invoke function 06H (Find Next Entry in Queue) to determine if additional receive events have occurred. If there are additional receive events, repeat steps 3 through 7. Transmitting to a Group (Group Send) (V1.2) 1. Invoke CAS function 00H (Get Installed State) to determine if the Resident Manager is installed. If it is, continue with the following steps. 2. Create the data file (or files) you wish to transmit. 3. Create a parent Control File that includes one File Transfer Record (FTR) for each file you wish to transmit. Include the filename of the group file for the event (created in step 4) in the phone number field (offset 12) of the Control File. 4. Create a Group File that includes one record for each member of the group you are transmitting data to. 5. Invoke function 01H (Submit a Task). 6. Check for errors in sending. Receiving from a Group (Group Polled Receive) (V1.2) 1. Invoke CAS function 00H (Get Installed State) to determine if the Resident Manager is installed. If it is, continue with the following steps. 2. Create a parent Control File for a group polled receive event. Include the filename of the group file for the event (created in step 3) in the phone number field (offset 12) of the Control File. 3. Create a Group File that includes one record for each member of the group you are receiving from. 4. Invoke function 01H (Submit a Task). 5. Perform the steps described above in the section titled "Receiving Files." DCA/Intel Communicating Applications Specification V1.2 - 19 - - 20 - DCA/Intel Communicating Applications Specification V1.2 Function Table Function Name Function Number Get Installed State....................................00H Submit a Task..........................................01H Abort the Current Event................................02H Reserved.........................................03H - 04H Find First Entry in Queue..............................05H Find Next Entry in Queue...............................06H Open a File............................................07H Delete a File..........................................08H Delete All Files (in a queue)..........................09H Get Event Date.........................................0AH Set Task Date..........................................0BH Get Event Time.........................................0CH Set Task Time..........................................0DH Get External Data Block................................0EH Get/Set Autoreceive State..............................0FH Get Current Event Status...............................10H Get Queue Status.......................................11H Get Hardware Status....................................12H Run Diagnostics........................................13H Move Received File.....................................14H Submit a Single File to Send...........................15H Unload Resident Manager................................16H Set Cover Page Status (V1.2)...........................17H Reserved.........................................18H - 80H DCA/Intel Communicating Applications Specification V1.2 - 21 - 00H Get Installed State Description: Get Installed State (00H) detects whether the Resident Manager is currently installed. Input: AH = Multiplex number AL = 00H Return: On return, AL contains the installed state as follows: AL = 00H Not installed AL = 01H Not installed, not OK to install AL = FFH Installed There is no error returned. See Also: Get External Data Block (0EH) - 22 - DCA/Intel Communicating Applications Specification V1.2 01H Submit a Task Description: The Submit a Task function (01H) schedules a send, a polled send, a polled receive, a group send, or a group polled receive event. Before invoking this function, you must first create a Control File for the event (and a group file if the event is a group send or group polled receive event). The function adds this Control File to the Task Queue. The event handle returned by this function is a positive integer that must be used in all subsequent references to this event. Once the event is completed, the Resident Manager automatically moves the Control File for the event from the Task Queue to the Log Queue (that is, copies the Control File from the Task Queue to the Log Queue, renames the copy, and deletes the original Control File from the Task Queue). For Polled Receive events, a copy of the Control File is also placed in the Receive Queue. (The following information is new for V1.2.) For group events, the parent Control File and the Group File are moved to the Log Queue when the task is complete. Input: AH = Multiplex number AL = 01H DS:DX points to ASCIIZ path and name of Control File Return: AX = Positive event handle or negative error code Note: Files associated with a event must remain in existence until the event is complete or an error results. See Also: Submit a Single File to Send (015H) DCA/Intel Communicating Applications Specification V1.2 - 23 - 02H Abort the Current Event Description: The Abort the Current Event function (02H) aborts the currently executing event. To prevent the execution of a pending event, use the Delete a File function (08H). Note: Terminating an event is not instantaneous. It might take up to 30 seconds. Input: AH = Multiplex number AL = 02H Return: AX = Event handle of aborted event or negative error code See Also: Delete a File (08H) - 24 - DCA/Intel Communicating Applications Specification V1.2 03H - 04H Reserved These functions are reserved. DCA/Intel Communicating Applications Specification V1.2 - 25 - 05H Find First Entry in Queue Description: The Find First Entry in Queue function (05H) searches the queue you specify in the DL register for an event whose status matches the one you specify in the CX register. Entries in queues are ordered by the date and time in which the corresponding events occurred (or are scheduled to occur). Depending on the value you place in the DH register, the function searches for the earliest or latest such event. The function returns a 15-bit event handle of the entry it finds. Once you use this function to obtain an event handle, you can access the file associated with that event by calling the Open a File function (07H). Use the Find Next Entry in Queue function (06H) to find subsequent entries in the queue. Input: AH = Multiplex number AL = 05H CX = Status of the event you are seeking. This value is compared with the field at offset 2 of the Control File. 0 - Event has successfully completed. 1 - Event is waiting to be processed. 2 - Number dialed or event in progress. 3 - Connection has been made -- sending. 4 - Connection has been made -- receiving. 5 - Event was aborted. -1 Chooses an event without regard to status. This value will probably be used most often. Other negative values Matches error codes in Control File. DH = Direction: 0 - Search forward chronologically (from the first occurring event to the last occurring event). 1 - Search backward chronologically (from the last occurring event to the first occurring event). DL = Queue to search: 0 - Find first Control File in Task Queue. 1 - Find first Control File in Receive Queue. 2 - Find first Control File in Log Queue. Return: AX = 0 if successful or a negative error code. BX = Event handle for this file. - 26 - DCA/Intel Communicating Applications Specification V1.2 05H Find First Entry in Queue If the queue is empty, this function returns error code 204H (no more events) in the AX register. Note that the number in register AX is the negative (2's complement) of the error code (that is, FDFCH.) See Also: Find Next Entry in Queue (06H) Open a File (07H) DCA/Intel Communicating Applications Specification V1.2 - 27 - 06H Find Next Entry in Queue Description: After a call to the Find First Entry in Queue function (05H), you can step chronologically through a queue using the Find Next Entry in Queue function (06H). Each subsequent call to Find Next Entry in Queue returns the event handle of the next event chronologically (as set by function 05H) in the specified Queue. For example, if you set the Find First Entry function to search forward chronologically, the Find Next Entry function searches forward for the next entry that matches the specifications set with Find First Entry. If you set Find First Entry to search backwards chronologically, Find Next Entry searches backwards. You must invoke the Find First Entry in Queue function (05H) prior to using the Find Next Entry in Queue function. Once you use this function to obtain an event handle, you can access the file associated with that event by calling the Open a File function (07H). Input: AH = Multiplex number AL = 06H DL = Queue to search: 0 - Find next Control File in Task Queue 1 - Find next Control File in Receive Queue 2 - Find next Control File in Log Queue Return: AX = 0 if successful or a negative error code BX = Event handle for this file See Also: Find First Entry in Queue (05H) Open a File (07H) - 28 - DCA/Intel Communicating Applications Specification V1.2 07H Open a File Description: After you obtain an event handle (by either scanning a Queue using the Find First Entry in the Queue (05H) and Find Next Entry in the Queue (06H) functions or by creating a event using the Submit a Task (01H) function), you can use the Open a File function (07H) to access the DOS file corresponding to the event. For events in the Task and Log Queues, this function opens the Control File for the event. For events in the Receive Queue, this function opens either the Control File or one of the received data files. This function opens the desired file in read-only mode and returns an ordinary DOS file handle. The application should use the normal DOS function (3EH) to close that handle when it is finished with it. Input: AH = Multiplex number AL = 07H BX = Event handle CX = Receive file number. This file number specifies which file to open among those associated with a receive event. This number applies only to events in the Receive Queue and is ignored for events in the Task and Log Queues. The number is interpreted as follows: 0 - The Control File. The format of this file is described earlier in this document. 1 - First received file. Corresponds to the first file in the list of received filenames (file transfer record 0). 2 - Second received file. 3 - Third received file. n - nth received file. DL = Queue: 0 - Open Control File in Task Queue. 1 - Open Control File in Receive Queue or the received data file specified in the CX register. 2 - Open Control File in Log Queue. 3 - Open group file in Task Queue (V1.2) 4 - Open group file in Log Queue (V1.2) DCA/Intel Communicating Applications Specification V1.2 - 29 - 07H Open a File Return: AX = 0 if successful or a negative error code. BX = DOS file handle for the requested file. See Also: Submit a Task (01H) Find First Entry in Queue (05H) Find Next Entry in Queue (06H) Move Received File (14H) - 30 - DCA/Intel Communicating Applications Specification V1.2 08H Delete a File Description: The Delete a File function (08H) deletes one or more files in a specific Queue. Note: The delete files flag (offset 140) in the Control File for an event can cause the Resident Manager to automatically delete all the files associated with the event after the event has been successfully completed (flag set to 1) or after the event has been attempted (flag set to 2). Input: AH = Multiplex number AL = 08H BX = Event handle CX = Receive file number. This number specifies which file to delete among those associated with a receive event. This number applies only to events in the Receive Queue and is ignored for events in the Task and Log Queues. The number is interpreted as follows: 0 - Delete all files associated with the specified Control File (including the Control File). 1 - Delete the first received file associated with the event handle. 2 - Delete the second received file associated with the event handle. n - Delete the nth received file associated with the event handle. DL = Queue: 0 - Delete Control File in Task Queue and corresponding Group File, if it exists. 1 - Delete a file or files associated with an event in the Receive Queue. 2 - Delete Control File in Log Queue and corresponding Group Log File if it exists. Return: AX = 0 if successful or a negative error code. See Also: Abort the Current Event (02H) Delete All Files (09H) DCA/Intel Communicating Applications Specification V1.2 - 31 - 09H Delete All Files (in a queue) Description: The Delete All Files function (09H) deletes all Control Files in the specified queue Input: AH = Multiplex number AL = 09H DL = Queue: 0 - Delete all Control Files in the Task Queue, including all Group Files. 1 - Delete all Control Files in the Receive Queue and all received files. 2 - Delete all Control Files in the Log Queue, including all Group Files. Return: AX = 0 if successful or a negative error code See Also: Delete A File (08H) - 32 - DCA/Intel Communicating Applications Specification V1.2 0AH Get Event Date Description: The Get Event Date function (0AH) gets the date associated with a given event handle. Input: AH = Multiplex number AL = 0AH BX = Event handle of the event whose date you want to obtain DL = Queue: 0 - Task Queue 1 - Receive Queue 2 - Log Queue Return: AX = 0 if successful or a negative error code CX = Year (1980 - 2099) DH = Month (1 - 12) DL = Day (1 - 31) See Also: Set Task Date (0BH) Get Event Time (0CH) DCA/Intel Communicating Applications Specification V1.2 - 33 - 0BH Set Task Date Description: The Set Task Date function (0BH) sets the execute date of a Control File specified by the event handle. This function is valid only for events that the local computer initiates. Note: Setting the date for an event to a value that is earlier than the current date (or setting registers CX, DH, and DL to zero) causes the transmission to occur immediately. Input: AH = Multiplex number AL = 0BH BX = Event handle CX = Year (1980 - 2099) DH = Month (1 - 12) DL = Day (1 - 31) Return: AX = 0 if successful or a negative error code See Also: Get Event Date (0AH) Set Task Time (0DH) - 34 - DCA/Intel Communicating Applications Specification V1.2 0CH Get Event Time Description: The Get Event Time function (0CH) gets the time associated with a given event handle. Input: AH = Multiplex number AL = 0CH BX = Event handle DL = Queue: 0 - Task Queue 1 - Receive Queue 2 - Log Queue Return: AX = 0 if successful or a negative error code CH = Hour (0 - 23) CL = Minutes (0 - 59) DH = Seconds (0 - 59) DL = 0 See Also: Get Event Date (0AH) Set Task Time (00H) DCA/Intel Communicating Applications Specification V1.2 - 35 - 0DH Set Task Time Description: The Set Task Time function (0DH) sets the execute time of a Control File specified by the event handle. This function is valid only for events in the Task Queue, not for events in the Receive or Log Queues. Note: Setting the time for a event to a value that makes the date and time earlier than the current date and time causes the transmission to occur immediately. Setting the time to zero (setting registers CH, CL, and DH to zero) selects 12:00 AM. Input: AH = Multiplex number AL = 0DH BX = Event handle CH = Hour (0 - 23) CL = Minutes (0 - 59) DH = Seconds (0 - 59) The value of DL is unused. Return: AX = 0 if successful or a negative error code See Also: Set Task Date (0BH) Get Event Time (0CH) - 36 - DCA/Intel Communicating Applications Specification V1.2 0EH Get External Data Block Description: The External Data Block contains additional information about the current Resident Manager installation (such as the name of the default logo file). Input: AH = Multiplex number AL = 0EH DS:DX points to a 256-byte EDB area Return: AX = 0 if successful or a negative error code EDB area is filled with the External Data Block The format of the External Data Block is as follows: (values in decimal): Offset Length Description 0 1 CAS major version number. 1 1 CAS minor version number. 2 68 ASCIIZ string specifying the pathname of the directory containing Resident Manager configuration files and other software that implements CAS. The path ends with a backslash. The user specifies this name when installing the software. 70 13 Name of default phonebook file, as an ASCIIZ string. This file is assumed to be in the Resident Manager and software directory. 83 13 Name of default logo file, as an ASCIIZ string. This file is assumed to be in the Resident Manager and software directory. The user specifies this name when installing the software. 96 32 Default sender name, as an ASCIIZ string. The user specifies this name when installing the software. 128 21 CSID (the CCITT identification of the fax device) as an ASCIIZ string. 149 107 Reserved. DCA/Intel Communicating Applications Specification V1.2 - 37 - 0FH Get/Set Autoreceive State Description: The Get/Set Autoreceive State function (0FH) examines or alters the receive state of the hardware. If an event is in progress, the new autoreceive state will not take effect until the event is completed. Input: AH = Multiplex number AL = 0FH DL = Function code: 0 - get current autoreceive state 1 - set current autoreceive state to value in DH DH = Number of rings before answer or 0 to disable Return: AX = current autoreceive state or negative error code 0 - Autoreceive disabled positive number - Number of rings before the hardware answers - 38 - DCA/Intel Communicating Applications Specification V1.2 10H Get Current Event Status Description: The Get Current Event Status function (10H) returns the status of the currently executing event. Input: AH = Multiplex number AL = 10H DS:DX points to a 512-byte status area Return: AX = 0 if successful or a negative error code BX = Event number of the current event (if the function completed without an error). If there is no current event, error code 202H is returned. Note that the number in register BX is the negative (2's complement) of the error code (that is, FDFEH.) This function fills the status area pointed to by DS:DX on entry with a truncated version of the Control File for the current event. This data structure is identical to the Control File structure with two exceptions: Only one File Transfer Record (FTR) is included. The FTR included is the one controlling the current file transfer. No cover page text field is included. Instead the current FTR begins at offset 383. Therefore, the end of the Control File has the following format: Offset Length Description 303 80 Path and name of PCX logo file (maximum size 1728 x 800 pels) 383 128 The File Transfer Record corresponding to the current event DCA/Intel Communicating Applications Specification V1.2 - 39 - 11H Get Queue Status Description: The Get Queue Status function (11H) returns the current status of a queue you specify. Input: AH = Multiplex number AL = 11H DL = Queue: 0 - Find status of Task Queue 1 - Find status of Receive Queue 2 - Find status of Log Queue 3 - Find status of Send Events 4 - Find status of Receive Events Return: If DL = 0, 1, or 2 AX = Total number of changes made to this queue since the Resident Manager was started, or a negative error code. If the number of changes exceeds 7FFFH, the count begins again at 0. BX = Current number of Control Files in this queue. CX = Current number of received files. (This register is non-zero only if you request the status of the Receive Queue by specifying DL = 1.) The value in this register is incremented for each file received. If DL = 3 (V1.2) AX = Number of successful sends since the Resident Manager was started, including events cancelled by the user. BX = Number of unsuccessful sends since the Resident Manager was started, including warnings. If DL = 4 (V1.2) AX = Number of received file transfer events since the Resident Manager was started BX = Number of received fax events since the Resident Manager was started - 40 - DCA/Intel Communicating Applications Specification V1.2 12H Get Hardware Status Description: The Get Hardware Status function (12H) returns the status of the communication hardware. Caution: The values and structure returned by this function are hardware-dependent and will vary according to type of hardware used to implement the CAS services. It is recommended that you use the Get Current Event (10H) and Get Queue Status (11H) functions, or examine the Control File, instead of using this function. Input: AH = Multiplex number AL = 12H DS:DX points to a 128-byte status area Return: AX = 0 if successful or a negative error code. If successful, the function fills the status area with hardware-dependent status information. Contact the manufacturer of your communications hardware for information on the content and format of the status information. See Also: Get Task Status (10H) Get Queue Status (11H) DCA/Intel Communicating Applications Specification V1.2 - 41 - 13H Run Diagnostics Description: The Run Diagnostics function (13H) runs a set of diagnostics or reports on their progress. Input: AH = Multiplex number AL = 13H DL = Mode: 0 - Report progress of diagnostics 1 - Start running diagnostics Return: If request was to start running diagnostics (DL = 1), AX contains either a 0 (diagnostics successfully begun) or a negative error code. If request was to report the progress of diagnostics, AX contains a 40H (diagnostics in process) or some other non-negative number indicating that diagnostics passed. If AX contains a negative number, the diagnostics failed and the value indicates the reason for failure. The values are hardware-dependent. Contact the manufacturer of your communications hardware for information on the failure codes. - 42 - DCA/Intel Communicating Applications Specification V1.2 14H Move Received File Description: The Move Received File function (14H) moves a received file to a different directory and gives it a new name. The new directory can be on a different device. Note: The path to the new directory must exist. This function cannot create directories. Input: AH = Multiplex number AL = 14H BX = Event handle CX = Receive file number (must be nonzero to specify a received file) 1 - First received file 2 - Second received file 3 - Third received file n - nth received file DS:DX = Pointer to a new path and name of the file (in the form of an ASCIIZ string). This file must not exist already. Return: AX = 0 if successful or a negative error code. DCA/Intel Communicating Applications Specification V1.2 - 43 - 15H Submit a Single File to Send Description: The Submit a Single File to Send function (15H) provides a simple method of sending a single file, either as a fax or as a file transfer. The function creates and submits the necessary Control File and returns the corresponding event handle (or negative error code). Before invoking this function, you must create a data structure (described later) that contains the appropriate information. The file sent using this function must be in ASCII, PCX, or DCX format. Input: AH = Multiplex number AL = 15H DS:DX = Pointer to a variable-length data area, described later in this section Return: AX = positive event handle or a negative error code The format of the data area pointed to by DS:DX is as follows. The individual fields have the same meaning as in a Control File. Offset Length Description 0 1 Transfer type: 0 - 200x200 dpi, fax mode 1 - 100x200 dpi, fax mode 2 - File transfer mode 3-127 - Reserved. 1 1 Text size (if ASCII file, fax mode) 0 - 80-column 1 - 132-column 2-127 - Reserved. 2 2 Time to send, in DOS file date and time format 4 2 Date to send, in DOS file date and time format Note: Setting both the time and date fields to zero schedules the file to be sent immediately. Therefore, to send a file at once, zero the four bytes (long word) at offset 2. Offset Length Description 6 32 Destination Name, as an ASCIIZ string (To: field) 38 80 Path and name of the file to send, as an ASCIIZ string - 44 - DCA/Intel Communicating Applications Specification V1.2 15H Submit a Single File to Send 118 47 Phone number to call, as an ASCIIZ string 165 64 Application-specific tag field, as an ASCIIZ string 229 1 Reserved; set to zero 230 1 Cover page flag: 0 - Don't send cover page 1 - Send cover page 2-127 - Reserved 231 23 Reserved; set to zero 254 var Cover text, as an ASCIIZ string. This text is sent if the cover page flag (offset 230) is set to 1. You must set all fields, except for the Application-Specific Tag field, before calling this function. However, you can set the Destination Name and Cover Text fields to the empty string, if desired. The file is not deleted when the event is completed. See Also: Submit A Task (01H) DCA/Intel Communicating Applications Specification V1.2 - 45 - 16H Unload Resident Manager Description: The Unload Resident Manager function (16H) unloads the Resident Manager from memory. Unloading frees the memory the Resident Manager used, making it available for other applications. However, once the Resident Manager is unloaded, the manager functions are no longer available. For example, unloading the manager from memory suspends all pending events. If there is a event which is scheduled to be sent in five minutes, it will not be sent until the manager is reloaded. Once the manager is reloaded, however, it will immediately send events that should have been sent while it was unloaded. In addition, when the manager is not installed, you cannot receive anything. Unloading the Resident Manager from memory will fail if a terminate and stay resident (TSR) program has been loaded after the manager, if there is a polled send, or if the manager or corresponding communications board is busy doing a event. Input: AH = Multiplex number AL = 16H BX = 1234H CX = 5678H DX = 9ABCH Return: AX = 0 if successful or a negative error code This function returns error 209H if the communications board is busy. It returns error 20BH if it can't remove the Resident Manager. - 46 - DCA/Intel Communicating Applications Specification V1.2 17H Set Cover Page Status (V1.2) Description: The Set Cover Page Status function (17H) sets the Cover Page Read flag (offset 216) in the Control File for the specified event. The Resident Manager checks the Log Queue and the Receive Queue for the specified Control File. This function and the Cover Page Read flag provide applications with a means of recording whether or not the user has read the cover page. Input: AH = Multiplex number AL = 17H BX = Event handle CL = Cover page status 0 - Not read 1 - Read Return: AX = 0 if successful or a negative error code DCA/Intel Communicating Applications Specification V1.2 - 47 - 18H - 80H Reserved These functions are reserved. - 48 - DCA/Intel Communicating Applications Specification V1.2 Error Codes An error code consists of two parts, an error class and an error subcode. The error class is returned in AH and the error subcode is returned in AL. The error class indicates the general type of operation in which the error occurred. Examples of general operations are: manipulation of the schedule, manipulation of a Control File, etc. The error subcode can be a DOS error code or an error code defined by the Resident Manager. Error subcodes indicate the specific kind of error that occurred. This method of handling error codes allows an application to examine either the full error code returned in AX, or the class/subcode of an error individually. Error codes are listed in the following table. All codes are in Hexadecimal. Before each listing of specific errors is a description of the error class code. The full error code (class + subcode) is listed in the Error column, and the class and subcode are listed separately in the next two columns. When these errors are returned to an application, they are returned as the negative of these codes. For example, a "No more events" error will be returned in AX as 0FDFCH which is the negative (2's complement) of 0204H. Table of Error Codes Error Class Subcode Description 0 Class: Fax warnings (not an error) 0000 0 0 No error 0002 0 2 Bad scanline count 0003 0 3 Page sent with errors, couldn't resend 0004 0 4 Receive data lost 0005 0 5 Invalid or missing logo file 0006 0 6 File name doesn't match nonstandard format (NSF) header 0007 0 7 File size doesn't match nonstandard format (NSF) header 1 Class: DOS warnings; data was sent. The error subcode is the error returned by DOS. Examples are: 0101 1 1 Invalid function number 0105 1 5 Access denied 0106 1 6 Invalid handle 01xx 1 ... (See the DOS Technical Reference) 2 Class: Fatal errors. The function failed or the data was not sent. 0200 2 0 Multiplex handler failed 0201 2 1 Unknown command (bad function number) 0202 2 2 Event not found (bad event handle) 0203 2 3 Attempted to Find Next before Find First - 49 - DCA/Intel Communicating Applications Specification V1.2 Error Class Subcode Description 0204 2 4 No more events 0207 2 7 Invalid Queue type (bad Queue number) 0208 2 8 Bad Control File 0209 2 9 Communication board is busy 020A 2 A Invalid command parameter 020B 2 B Can't uninstall the Resident Manager 020C 2 C File already exists 0280 2 80 Unknown task type (not a Send or Poll event) 0281 2 81 Bad phone number 0282 2 82 Bad PCX file header 0283 2 83 Unexpected EOF 0284 2 84 Unexpected disconnect 0285 2 85 Exceeded maximum dialing retries 0286 2 86 No files specified for Send event 0287 2 87 Communication board timeout 0288 2 88 Received more than 1023 (maximum) pages of data 0289 2 89 Manual connect posted too long ago 028A 2 8A Hardware command set error 028B 2 8B Bad nonstandard format (NSF) header file 3 Class: Fatal DOS errors, data not sent. The error subcode is the error returned by DOS. Examples are: 0302 3 2 File not found 0303 3 3 Path not found 03xx 3 ... (See the DOS Technical Reference Manual) 4 Class: Fax errors 0401 4 1 Remote unit not Group 3 compatible 0402 4 2 Remote unit didn't send its capabilities 0403 4 3 Remote unit requested disconnect 0404 4 4 Remote unit isn't capable of file transfers 0405 4 5 Exceeded retrain or fax resend limit 0406 4 6 Line noise or the local and remote unit don't agree on a bit rate 0407 4 7 Remote unit disconnected after receiving data 0408 4 8 No response from remote unit after sending data 0409 4 9 Capabilities of remote unit aren't compatible 040A 4 A No dial tone - check phone line and cord (V1.2) 040B 4 B Invalid response from remote unit after sending data 040D 4 D Phone line dead or remote unit disconnected 040E 4 E Timeout while waiting for secondary dial tone (V1.2) 0411 4 11 Invalid command from remote after receiving data 0415 4 15 Tried to receive from incompatible hardware 041F 4 1F Unexpected end of file while receiving 045C 4 5C Received data overflowed input buffer - 50 - DCA/Intel Communicating Applications Specification V1.2 Error Class Subcode Description 045D 4 5D Remote hardware unexpectedly stopped sending data 045E 4 5E Remote hardware didn't send any data 045F 4 5F Remote hardware took too long to send fax scan line 0463 4 63 Can't get through to remote unit 0464 4 64 User canceled event 5 Class: Application specific errors (V1.2) Applications can use the class 5 error codes to record information specific to an application in a Control File in the Log Queue. To do this, the application must set the status of event field (offset 2 in the Control File) to the negative value (2's complement) of the selected error code. For example, if the error code is 501H, the status of event field is set to FAFFH. When the application submits the event to the Task Queue, using the Submit a Task function (01H), the Resident Manager bypasses the Task Queue and places the Control File directly on the Log Queue. The status of event field then contains the error code. 6 Class: CAS implementation specific errors (V1.2) Manufacturers implementing CAS can use the class 6 error codes to define additional error conditions unique to their hardware. Manufacturers are urged to use these codes sparingly since they will not be consistent across all CAS implementations. Be sure to document class 6 error codes clearly in end-user documentation so that users can interpret these codes correctly if CAS applications display them. Phonebook Format This phonebook format is used by Intel's fax applications, but may be used by other applications as well. It is not actually a part of the DCA/Intel CAS. It has an extendible format that will be very useful for many applications. A phonebook file has two major parts, a header and a data space for the variable length records. Each record has a unique record number from 0 to 999. This number is always used to refer to the record. There is an array of record offsets in the phonebook header. The offset of record N from the beginning of the file is the (4 x N)th byte in the array. An offset of 0 means that the corresponding record number is unused. DCA/Intel Communicating Applications Specification V1.2 - 51 - There are up to 10 variable ASCIIZ fields defined for any phonebook. The application that created the phonebook defines what they are called. Each variable field has a maximum length of 60 bytes. The names of these fields are stored in the header, and the values of these fields are stored with each record. The phonebook header looks like this: Offset Length Description 0 2 ID Field: must be 1AH BBH 2 1 Major version number (from Get External Data Block, function 0EH) 3 1 Minor version number 4 2 Number of records in the file, 0 to 1000 6 2 Number of unused bytes in the file, 0 to 32766 8 2 Number of variable fields in this phonebook, 0 to 10 10 150 Array of 10 variable field names, 15 bytes apiece, as ASCIIZ strings 160 4000 Array of record offsets, 4 bytes apiece When a record is deleted, an offset of 0 is placed in the offset array and the length of the record is added to the unused bytes count. When a record is changed and its new length is larger than its old length, the record is written at the end of the file, its offset in the offset array is updated, and the number of freed bytes is added onto the unused bytes count. A record is variable in length. There are two types of records: Person and Group. Person Records look like this: Offset Length Description 0 2 Record ID 2 2 Number of groups the individual belongs to. 4 2 Number of bytes the record occupies. 6 1 Record type. This is 1 for a Person Record. 7 1 Type of hardware: 0 - Limited to fax 1 - Faxes and file transfer using fax modem 2-127 Reserved 8 32 ASCIIZ name. Must NOT be blank. 40 47 ASCIIZ phone number. At least one digit or M is required. 87 var ASCIIZ variable fields var var Array of 2-byte record IDs of groups that this person belongs to. - 52 - DCA/Intel Communicating Applications Specification V1.2 Group records look like this: Offset Length Description 0 2 Record ID 2 2 Number of members in the group 4 2 Number of bytes the record occupies 6 1 Record type. This is 2 for a group record. 7 1 File transfer capability: 0 - At least one member doesn't have file transfer capability. 1 - All members have file transfer capability. 2-127 Reserved 8 32 ASCIIZ name. Must not be blank. 40 47 reserved - must be zeros. 87 var Array of 2-byte record IDs of the members in the group. The first four fields of both record types are basically the same, so a 40- byte record header can be read in from any record. PCX Format Note: This section is adapted from "Technical Documentation for PC Paintbrush & Frieze Graphics," (C) 1985 ZSoft Corporation. To obtain this document, contact ZSoft Corporation at (404) 428-0008. A PCX format file stores one page image in the form of a rectangular bitmap. PCX files have a 128-byte header followed by compressed image data. The PCX file format allows for multiple colors each with multiple shades, but Fax Mode transfers require black and white, no shades. The PCX file format also allows for different resolutions, but a PCX file for Fax Mode transfer is interpreted as having 200 pels per inch both horizontally and vertically, no matter what the file header says. The PCX file format can handle very large page sizes, but for Fax Transfer mode, the bitmap width must not exceed 1728 pels (about 8.5 inches wide). Lengths are unlimited, since fax paper comes in rolls, but 2200 pels is 11 inches, and that is the recommended maximum length for easy handling by the receiver. Pel locations can be given in X,Y coordinates where the origin is at the top left corner of the page, X increases toward the right, and Y increases toward the bottom. DCA/Intel Communicating Applications Specification V1.2 - 53 - Data Encoding The compression technique used is a simple run length encoding, where duplicate bytes (not bits) are compressed. To compress a bitmap, it is read one horizontal line at a time from top to bottom. (No line wrapping is performed.) Each line is read from left to right. The line is read eight pels at a time (one byte). Within a byte, the most significant bit corresponds to the leftmost pel. Runs of up to 63 bytes that are all the same are stored as a run pair: a count byte followed by the byte that repeats. The count byte of a run pair has the two most significant bits set, and the 6 other bits contain the count. If a byte of data does not repeat, it is stored just as is, unless it happens to have its two most significant bits set, in which case it is stored as run pair with a repeat count of one. This is the algorithm for decompressing the byte stream from a PCX file: FOR each byte, X, read from the file IF the top two bits of X are 1's BEGIN runlength = 6 lowest bits of X data = net byte following X END ELSE BEGIN runlength = 1 data = X END File Header Here is the structure at the start of a PCX file for fax images: Offset Length Description 0 1 PCX ID, Must be 0Ah. 1 1 Version info. A value of 2 is suggested. Anything higher is allowed. 2 1 Encoding method. Must be 1. 3 1 Bits per pixel. Must be 1 for Fax Mode transfer. 4 2 X position of the upper left corner, usually 0. 6 2 Y position of the upper left corner, usually 0. 8 2 X position of the bottom right corner, maximum 1727. The difference between this field and the upper left corner X position plus 1 is the width of the bitmap. This width must be a multiple of 8. 10 2 Y position of the bottom right corner, 2200 recommended maximum. 12 2 Display card horizontal resolution. Ignored in Fax Transfer mode. A value of 640 is recommended for compatibility with Intel's Graphics Editor. - 54 - DCA/Intel Communicating Applications Specification V1.2 Offset Length Description 14 2 Display card vertical resolution. Ignored in Fax Transfer mode. A value of 200 is recommended for compatibility with Intel's Graphics Editor. 16 48 Palette information. Ignored in Fax Transfer mode. Should be 0's. 64 1 Reserved. Must be 0. 65 1 Number of color planes. Must be 1 for Fax Transfer Mode. 66 2 Horizontal line width in bytes, equal to (XRight - XLeft + 1)/8. 68 60 Reserved. Should be 0. The data for the first line starts immediately after the header. DCX Format The DCX file format allows multiple pages to be stored in one file. A DCX file has a header followed by pages. Each page is exactly the same as a PCX file, including the PCX header for each bitmap. The DCX file header starts with a 4-byte integer ID used to verify the file type. This ID is always 987654321 (decimal). After the ID is a list of offsets into the file for the pages of the document. The list is a simple array of 4-byte integers, the last of which has a value of 0 to mark the end of the array. The first page is page 0, and the offset from the beginning of the file of the nth page is stored at array location n. The array has a maximum of 1024 entries, including the 0 terminator. This means that up to 1023 pages can be stored in one DCX file, and that the maximum size of the index is 4096 bytes. The index can be smaller if fewer than 1023 pages are in the file, though this is optional. ASCII File Interpretation for Fax Transmission ASCII text files are automatically converted to graphics by the hardware as the files are sent. The hardware interprets the text file in the same manner as a nonintelligent printer with 8.5- by 11-inch paper. The page length can be set to other lengths using the Page Length fields of the FTR (offsets 95 and 96). The full IBM 8-bit character set, including characters from 80h to FFh, is supported (see the "Characters, Keystrokes, and Colors" section of the IBM Technical Reference). These special characters are recognized: Value Description 0D Carriage return. Moves "printhead" to column 0. Line contents are NOT erased. Overstrike is OK. DCA/Intel Communicating Applications Specification V1.2 - 55 - 0A Line feed. Current line is output. Moves the "printhead" to the beginning of the next line. - 56 - DCA/Intel Communicating Applications Specification V1.2 Value Description 0C Form feed. Causes the current page to end, and a new page is started. The "printhead" moves to the beginning of the top line of the new page. 08 Backspace. moves "printhead" back one space. Previous character is NOT erased. Overstrike is OK. 09 Tab. Moves "printhead" to next tabstop. Tabstops are every eight columns. 1A End of file. Interpretation of the file stops. This is optional, interpretation will stop at the end of the file if this character is not present. Two text sizes are available; An 80-column by 66-line text size, and a 132- column by 88-line text size. (See the section earlier in this specification titled "Control Files" for information on text size selection.) Lines should not be wider than the page width. After 11 inches have passed vertically from the top of the current page, a new page is started. DCA/Intel Communicating Applications Specification V1.2 - 57 - Glossary Control File: A file created by either an application or the Resident Manager that contains information needed to complete an event or information about an already completed event. Current Event: The communications event that the hardware is currently processing. While an event is the current event, its Control File is not in any of the Resident Manager's queues. External Data Block (EDB): Data used by the Resident Manager that may be of use to an application. Event: An action to be performed by the Resident Manager. This action can be a Send (fax or file), a Polled Send, a Polled Receive, a Receive (fax or file), a Group Send (V1.2), or a Group Polled Receive (V1.2). Event handle: A unique non-zero 15-bit value that the Resident Manager assigns to an event to keep track of it. Group (V1.2): A selection of remote devices that you are going to send the same file (or set of files) to or that you are going to receive information from. Two types of events use groups: Group Send and Group Polled Receive. Group File (V1.2): A file that lists the individual destinations for a group event. Group Polled Receive (V1.2): An event in which the local computer calls a group of remote devices to receive information. Group Send (V1.2): An event in which one or more files are sent to a group of remote devices. Log Queue: A queue of Control Files and group files for events that have been completed (or aborted). Non-Standard Facilities (NSF): Any format different from the Facsimile transfer format as defined in the CCITT specification. Used to transfer files directly without first translating into a bit image. Parent Control File (V1.2): The Control File for a Group Send or Group Polled Receive event. Polled Receive: An event that allows a machine to call other machines to receive a transmission. Polled Send: An event that allows a machine to be called by another machine before sending a transmission. Similar to a send except that the receiving machine initiates the transaction. Queue: A data structure internal to the Resident Manager that manages Control Files. Three types of Queues exist: Task, Receive, and Log. - 58 - DCA/Intel Communicating Applications Specification V1.2 Receive: An event (Fax or file transfer) in which a local computer receives data from a remote device. Receive Queue: A queue of controls files for events that the local computer has received. Resident Manager: A terminate-and-stay-resident program that manages events in the "background." It provides the functional interface to applications. Send: An event (Fax or file Transfer) in which the local computer sends data to a remote device. Task Queue: A queue of Control Files for send, polled send, polled receive, group send, or group polled receive events that are waiting to be executed. DCA/Intel Communicating Applications Specification V1.2 - 59 -