home *** CD-ROM | disk | FTP | other *** search
- FILE: OSDANMPP.FAX - 5/13/94
-
- TITLE: 940513 - OS/2 NAMED PIPES
-
- DESCRIPTION:
-
- Named Pipes are an interprocess communication vehicle that OS/2 and
- OS/2-DOS programs can utilize under OS/2 to communicate with each other.
-
- Please note that two or more OS/2-DOS based programs cannot communicate
- with each other without the assistance of an OS/2-based program providing
- a named pipe through which the interprocess communications are passed.
- Since OS/2 does not come with programs that demonstrate this built-in
- feature of the operating system, many OS/2 customers have asked for
- additional information and sample programs demonstrating the use of
- named pipes in the operating system. We feel that this fax will
- provide some of the basics needed to get started with named pipes.
- The reference section of this fax lists important publications that
- will help you understand even more about Named Pipe application
- programming interfaces (APIs). It is important to note that
- named pipes can be used to communicate between programs running on the
- same machine or communicate with programs running across an IBM
- Lan Server or equivalent based lan. A pre-requisite for using the
- information presented in this fax is a knowledge of C, C++, Advanced
- BASIC, and optionally 80x86 assembly language programming.
-
- If you have been sent this fax as a result of having problems connecting
- or communicating with the Microsoft SQL Server product via ODBC using a
- Windows** based front-end product (such as a Visual Basic or
- PowerBuilder**), please download the file "PEKNMP.ZIP" or "NMP.ZIP"
- from IBM's OS/2 Support Library number 12 (Windows** application
- questions) on Compuserve ("GO IBMOS2"). The download contains a patch
- file and instructions on how to configure these types of Windows**
- applications for use under WIN-OS/2.
-
- Please direct all programming questions related to this information
- to the IBM Developers forums on Compuserve (GO IBMOS2).
-
-
- Included in this fax are the following items:
-
- 1. An OS/2-based C / C++ program that creates a named pipe and queries
- the user for keystrokes to be sent to the NAMEPIPE.BAS or NAMEPIPE.CPP
- program. It can be compiled with IBM CSET/2, CSET++ 2.1, or Borland
- C++ for OS/2 2.x. None of these compilers come with the main
- OS/2 package at this time. This is an example of a pipe server
- OS/2 program through which DOS or Windows applications would need
- to communicate on a stand-alone computer. In network situations,
- DOS, Windows, or OS/2 applications can be named pipe servers using
- the appropriate named pipe APIs (these APIs are part of the LAN
- system being used - contact your lan vendor for these APIs or
- refer to the reference section for books with this information).
-
- 2. A QBASIC program that reads keystrokes from an OS/2 named
- pipe and changes colors on the screen according to the characters
- received from the named pipe (NAMEPIPE.BAS). QBASIC comes with OS/2.
-
-
-
-
-
-
-
-
- 3. A Borland Turbo C++ v3.0 for DOS program that reads keystokes from
- an OS/2 named pipe and changes colors on the screen according to
- the character received from the named pipe (NAMEPIPE.CPP). The
- Turbo C++ v3.0 for DOS compiler does not come with OS/2.
-
- 4. A listing of the assembly language interfaces that can be used for
- advanced Named Pipe communication programming for VDMs (virtual DOS
- machines - the DOS sessions in OS/2). These are for use by advanced
- programmers.
-
- 5. A list of references for additional information.
-
- = Item 1 ===================================================================
-
- /**********************************************************/
- /**********************************************************/
- /*** ***/
- /*** Program name: PIPEOS2.C or PIPEOS2.CPP ***/
- /*** ***/
- /*** Created : 16th May 1990 ***/
- /*** ***/
- /*** Revised : 26th February 1992 ***/
- /*** ***/
- /*** Author : Tim Sennitt, Dorle Hecker ***/
- /*** Slight modifications for C++ ***/
- /*** compiler use by Ron Bassett ***/
- /*** ***/
- /*** Purpose : To demonstrate the use of an OS/2 ***/
- /*** created named pipe connecting to ***/
- /*** many DOS sessions ***/
- /*** ***/
- /*** Compile : icc /O+ pipeos2.c (using IBM CSET/2)***/
- /*** or icc /Gm+ /O+ pipeos2.cpp (using ***/
- /*** IBM CSET++ v2.1) ***/
- /*** or : cl386 pipeos2.c ***/
- /*** ***/
- /*** Note: This program will compile using Borland C++ ***/
- /*** for OS/2 2.x. Create a new project in the IDE, ***/
- /*** add this source file to the project, view the ***/
- /*** settings for the project, select the Target tab, ***/
- /*** select OS2 Exe for the Program Target, select ***/
- /*** Multi-thread for the Thread Options, and select ***/
- /*** Use DLL for the Generate Import LIbrary. Close ***/
- /*** settings window and choose Run. ***/
- /*** ***/
- /*** Input param : A number between 1 and 255 ***/
- /*** (number of pipe instances) ***/
- /*** ***/
- /*** The original program listing appears in the OS/2 ***/
- /*** REDBOOK VOLUME 2: DOS and Windows** Environment, ***/
- /*** p. 282, IBM Order number GG24-3731-00. ***/
- /*** To order, please phone 1-800-765-4426. ***/
- /*** ***/
- /**********************************************************/
- /*** DEFINES ***/
- /**********************************************************/
-
-
-
-
- #define INCL_DOS
- #define INCL_DOSNMPIPES
- /**********************************************************/
- /*** INCLUDES and VARIABLES ***/
- /**********************************************************/
- #include <os2.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
-
- #ifdef __IBMC__
- void _System NewThread(ULONG threadArg);
- #endif
-
- #ifdef __IBMCPP__
- void _System NewThread(ULONG threadArg);
- #else
- void NewThread(ULONG threadArg);
- #endif
-
- TID threadID[512];
- HPIPE piphand[255];
- ULONG threadArg, threadFlags, stack_size;
- ULONG outbuffer, inbuffer, timeout, BytesWrit;
- USHORT rc, loopsize, i;
- char prep_string[11];
- /**********************************************************/
- /*** MAIN PROGRAM ***/
- /**********************************************************/
- main(int argc, char *argv[], char *envp[])
- {
- BOOL fEnd_Correct=FALSE;
- threadFlags = 0; /* start thread immediatly */
- stack_size = 1024; /* give stack size in bytes */
- threadArg = 1;
-
- if ( argc != 2 || (loopsize = atoi(argv[1])) == 0 )
- { printf("You have not specified the correct bacon size !\n");
- printf("The syntax is PIPEOS2 NNNN (where NNNN is a number between \
- 1 and 255)\n");
- exit(0);
- } /*end-if*/
- for (i = 1; i < loopsize+1; i++)
- {
- rc = DosCreateThread(&threadID[i],
- (PFNTHREAD)NewThread, i,
- threadFlags,
- stack_size);
- if (rc != 0)
- { printf("DosCreateThread error = %d\n",rc);
- exit (1);
- } /*end-if*/
- printf("Pipe-Thread number %d created\n",i);
- printf("Please start the DOS client\n");
- } /*end-for*/
-
-
-
-
-
- printf("Now lets send some data to it......\n");
-
- /****************************************************************/
- /* At this point we will loop getting keyboard input */
- /* and writing this to our named pipe (until we enter null) */
- /****************************************************************/
- printf("ENTER\n [B]lue, [C]yan, [G]reen, [P]urple, \
- [R]ed, [W]hite, [Y]ellow or [Q]uit\n");
- gets(prep_string);
- while (prep_string[0] != 0)
- {
- if (prep_string[0] == 'q' || prep_string[0] == 'Q')
- { for (i = 1; i < loopsize+1; i++)
- { rc = DosWrite(piphand[i],
- (PVOID)prep_string,
- strlen(prep_string),
- &BytesWrit);
- if (rc !=0) printf("Return code from DosWrite= %d\n",rc);
- } /* end-for */
- prep_string[0]=0; fEnd_Correct=TRUE;
- }
- else
- { for (i = 1; i < loopsize+1; i++)
- {
- rc = DosWrite(piphand[i],
- (PVOID)prep_string,
- strlen(prep_string),
- &BytesWrit);
- if (rc !=0) printf("Return code from DosWrite= %d\n",rc);
- } /* end-for */
- printf("ENTER\n [B]lue, [C]yan, [G]reen, [P]urple, \
- [R]ed, [W]hite, [Y]ellow or [Q]uit\n");
- gets(prep_string);
-
- } /* endif */
- } /* endwhile */
-
- if (!fEnd_Correct)
- { prep_string[0]='q';
- rc = DosWrite(piphand[i],
- (PVOID)prep_string,
- strlen(prep_string),
- &BytesWrit);
- if (rc !=0) printf("Return code from DosWrite= %d\n",rc);
- }
- exit(0);
- }
-
- /****************************************************************/
- /* This is our thread process which creates N named pipes then */
- /* waits for the DOS sessions to connect to them. */
- /****************************************************************/
- void NewThread(ULONG threadArg)
- {
-
-
-
-
-
-
- outbuffer = 25;
- inbuffer = 25;
- timeout = 200;
-
- rc = DosCreateNPipe("\\PIPE\\TEST\0", /* create pipe */
- &piphand[threadArg],
- 0x4081,
- 0x0008,
- outbuffer,
- inbuffer,
- timeout);
- if (rc != 0)
- { DosBeep(300,200); DosBeep(100,200);
- exit(1);
- }
- DosBeep(300,200); DosBeep(600,200);
-
- /****************************************************************/
- /* now we wait for our DOS session to connect to us */
- /****************************************************************/
-
- rc = DosConnectNPipe(piphand[threadArg]);
- if (rc != 0)
- { DosBeep(100,200);
- exit(1);
- }
- DosBeep(600,200);
- printf("DOS Session number %d connected\n",threadArg);
- }
-
-
- = Item 2 ===================================================================
-
- 5 ' PIPENAME.BAS
- 10 'This program is listed in the OS/2 REDBOOK VOLUME 2: DOS and Windows**
- 11 'Environment, p. 282, IBM Order number GG24-3731-00, orderable through
- 12 '1-800-765-4426.
- 15 '
- 16 'This program can be compiled with QBASIC.EXE that comes with OS/2 2.x.
- 17 'It works with OS/2 2.1 GA, and OS/2 2.11 with additional service modules
- 18 ' applied to the system. This program must work in conjunction with
- 19 ' another OS/2-based program called PIPEOS2.C / PIPEOS2.CPP also listed
- 20 ' in this fax. Using the two programs together demonstrate
- 21 ' interprocess communication between an OS/2 program and a DOS program
- 22 ' running in an OS/2 VDM session. The OS/2 program accepts keystrokes
- 23 ' from the user and sends them via a named pipe to this program which
- 24 ' will respond to the keystrokes by filling the screen with a color
- 25 ' that corresponds to the keystroke sent. You must run the OS/2
- 26 ' PIPEOS2.EXE (program listing follows this listing) before this program.
- 38 '
- 39 CLS : KEY OFF
- 40 COLOR 7, 0
- 50 OPEN "r", 1, "\PIPE\TEST", 1
- 60 FIELD 1, 1 AS A$
- 70 GET 1
- 80 IF A$ = "B" OR A$ = "b" THEN BKGRND = 9: GOTO 90' Color Blue
-
-
-
-
- 81 IF A$ = "C" OR A$ = "c" THEN BKGRND = 3: GOTO 90' Color Cyan
- 82 IF A$ = "G" OR A$ = "g" THEN BKGRND = 10: GOTO 90' Color Green
- 83 IF A$ = "P" OR A$ = "p" THEN BKGRND = 5: GOTO 90' Color Purple
- 84 IF A$ = "R" OR A$ = "r" THEN BKGRND = 12: GOTO 90' Color Red
- 85 IF A$ = "W" OR A$ = "w" THEN BKGRND = 7: GOTO 90' Color White
- 86 IF A$ = "Y" OR A$ = "y" THEN BKGRND = 6: GOTO 90' Color Yellow
- 87 IF A$ = "Q" OR A$ = "q" THEN SYSTEM 'exit to the operating system
- 90 COLOR 0, BKGRND: CLS : GOTO 70
-
-
- = Item 3 ===================================================================
-
- // This is a Borland Turbo C++ v3.0-based DOS program listing.
- // This program MUST be used in conjunction with the PIPEOS2.C
- // or PIPEOS2.CPP program listed previously. See the instructions
- // in the program below for more information.
-
- #include <fstream.h>
- #include <conio.h>
- #include <string.h>
- #include <iostream.h>
- #include <stdlib.h>
- #include <process.h>
-
- int main(void) {
- char ch[1];
- int color;
-
- textbackground(BLACK);
- clrscr();
- cout << "NAMEPIPE.EXE - A simple program for reading named pipes" << endl;
- cout << " written with Borland Turbo C++ v3.0 for"<< endl;
- cout << " DOS. For use with OS/2 and PIPEOS2.EXE." << endl;
- cout << endl << endl << "Program instructions:" << endl << endl;
- cout << "1. If you are running this program in a DOS full screen," << endl;
- cout << " press ALT-HOME to run it in a Window now." << endl;
- cout << "2. Run the PIPEOS2 program with a parameter of 1 from \
- an OS/2 Window." << endl;
- cout << "3. Once the PIPEOS2 program is running, press any key in"<<endl;
- cout << " this program's window to allow it to open the named" << endl;
- cout << " pipe and read a character from the named pipe." << endl;
- cout << "4. Switch back to the PIPEOS2 program's window and press"<<endl;
- cout << " one of the keys enclosed in brackets followed by the ENTER \
- key."<<endl << " Try different keys followed by the ENTER key." << endl;
- cout << endl << "Press any key to continue..." << endl << endl;
- getch();
- fstream f1("\\PIPE\\TEST",ios::in); // open the pipe for input
- if (!f1) {
- textbackground(BLACK);
- clrscr();
- cerr << endl << "Cannot open the named pipe for input." << endl;
- cerr << "Check the pipe name in PIPEOS2.C and make" << endl;
- cerr << "sure it matches the pipe name listed in this" << endl;
- cerr << "program (NAMEPIPE.CPP). Also, make sure that" << endl;
- cerr << "the PIPEOS2 program IS running in an OS/2" << endl;
- cerr << "window *before* running this program." << endl << endl;
-
-
-
-
- cerr << "Program terminating... press any key to exit." << endl;
- getch();
- exit(EXIT_FAILURE);
- }
- cout << "Reading data from the pipe..." << endl;
- do {
- f1.getline(ch,2);
- if (ch[0]>'a') ch[0]-=32;
- switch (ch[0]) {
- case 'B':
- textbackground(BLUE);
- clrscr();
- break;
- case 'C':
- textbackground(CYAN);
- clrscr();
- break;
- case 'G':
- textbackground(GREEN);
- clrscr();
- break;
- case 'P':
- textbackground(MAGENTA);
- clrscr();
- break;
- case 'R':
- textbackground(RED);
- clrscr();
- break;
- case 'W':
- textbackground(WHITE);
- clrscr();
- break;
- case 'Y':
- textbackground(YELLOW);
- clrscr();
- break;
- default:
- cout << endl << "With the PIPEOS2 program active, press" << endl;
- cout << "one of the keys in brackets followed by the"<< endl;
- cout << "ENTER key." << endl << endl;
- break;
- }
- cout << "Received " << ch << " through the pipe." << endl;
- } while (ch[0]!='Q');
- clrscr();
- cout << endl << "The quit command was received from the pipe." << endl;
- cout << "Exiting program..." << endl;
- return(0);
- }
-
-
-
-
-
-
-
-
-
-
- = Item 4 ===================================================================
-
- *********************************************************************
- The section below details IBM OS/2 2.1's specification of
- the DOS Emulation (VDM) INT 21 function 5F named pipe support.
- This information is presented for your information only
- and IBM does not guarantee that these interfaces
- will not change in the future.
-
- Please note: There are more named pipe functions than those listed
- here, but those functions absolutely require the presence of IBM
- Lan Server or equivalent software. Contact your lan vendor for
- a listing of the named pipe functions that they support. The
- functions listed here are supported by the OS/2 base operating system
- without the need for Lan Server or equivalent accompanying software.
-
- In all cases below, the function number listed must be moved into AX
- before making the INT 21 function call.
- *********************************************************************
-
- - INT 21 function 5F32 -----------------------------------------------------
- QNmPipeInfo - Get info on a named pipe
- Inputs:
- BX is handle of pipe
- CX is size of buffer for info
- DX is Level of info to get
- DS:SI is address of buffer
- Function:
- Get pipe info
- Returns:
- Carry set
- AX = error
- Carry Clear
- OK
-
- - INT 21 function 5F33 -----------------------------------------------------
- QNmpHandState - Get pipe mode information
- Inputs:
- BX is handle of pipe
- Function:
- Return mode of pipe
- Returns:
- Carry clear
- AX = Pipe mode word
- Carry set
- AX = error
-
- - INT 21 function 5F34 -----------------------------------------------------
- SetNmpHandState - Set pipe mode
- Inputs:
- BX is handle of pipe
- CX is pipe mode word to set
- Function:
- Set mode of pipe
-
-
-
-
-
-
- Returns:
- Carry Clear
- Indicated mode set
- Carry set
- AX = error
-
- - INT 21 function 5F35 -----------------------------------------------------
- PeekNmPipe - Peek on a named pipe
- Inputs:
- BX is handle of pipe
- CX is size of buffer for peek
- DS:SI is address of peek buffer
- Function:
- Peek from pipe
- Returns:
- Carry set
- AX = error code. IF ERROR IS ERROR_MORE_DATA Carry
- clear returns are also set.
- Carry Clear
- CX = bytes peeked from pipe
- User DX:SI is available data
- AX is pipe status
-
- * WARNING: Microsoft changed the specification for this function
- in later versions of their OS products. The IBM implementation
- still reflects the original specification in order to preserve
- backwards compatibility. If you would like to make your function
- compatible with Microsoft's implementation of this function, please
- download the "PEKNMP.ZIP" or "NMP.ZIP" package as described at the
- top of this fax. For each OS/2 system that runs your program, you
- will need to provide the patch program. If you do not need
- Microsoft OS compatibility or Micrsoft SQL Server connectivity,
- you will not need this additional program.
-
- - INT 21 function 5F36 -----------------------------------------------------
- TransactNmPipe - Do a transact named pipe
- Inputs:
- BX is handle of pipe
- CX is source (write) buffer length
- DX is destination (read) buffer length
- DS:SI is address of source (write) buffer
- ES:DI is address of destination (read) buffer
- Function:
- Write the data part of the transaction
- NOTE: IT IS ASSUMED THE RESPONSE SMB HAS ONE PARAMETER WHICH IS THE
- AMOUNT WRITTEN.
- Returns:
- Carry set
- AX = error code. IF ERROR IS ERROR_MORE_DATA Carry
- clear returns are also set.
- Carry Clear
- CX = bytes read into destination (read) buffer address
-
- - INT 21 function 5F37 -----------------------------------------------------
- CallNmPipe - Do a call named pipe
-
-
-
-
-
- Inputs:
- DS:SI -> Call named pipe parameter structure
- Function:
- Do a call named pipe
- Returns:
- Carry set
- AX = error code. IF ERROR IS ERROR_MORE_DATA Carry
- clear returns are also set.
- Carry Clear
- CX = Bytes read
-
- - INT 21 function 5F38 -----------------------------------------------------
- WaitNmPipe - Do a wait named pipe
- Inputs:
- DS:DX -> Pipe name
- BX:CX = Timeout value
- Function:
- Do a wait named pipe
- Returns:
- Carry set
- AX = error
- Carry Clear
-
- - INT 21 function 5F39 -----------------------------------------------------
- RawReadNmPipe/WriteNmPipe - Do raw I/O on a pipe
- Inputs:
- BX is handle of pipe
- CX is size to read
- DS:DX is address of buffer
- Function:
- Do a Raw read transaction on the pipe
- Returns:
- Carry set
- AX = error code. IF ERROR IS ERROR_MORE_DATA Carry
- clear returns are also set.
- Carry Clear
- CX = bytes read into transfer address
-
- - INT 21 function 5F3A -----------------------------------------------------
- RAW WRITE NAMED PIPE
- Inputs:
- BX is handle of pipe
- CX is size to write
- DS:DX is address of buffer
- Function:
- Do a Raw write transaction on the pipe
- Returns:
- Carry set
- AX = error
- Carry Clear
- CX = bytes written from transfer address
-
-
-
-
-
-
-
-
-
-
- ********************************************************************
- The information below was downloaded from Compuserve, from an upload
- by Ralf Brown. IBM does not warrant that the information below
- is correct or will actually function correctly when used. Please
- direct questions to the PC DOS programming forums on Compuserve if
- there is a question or problem with the following information.
- IBM has also been given permission by the authors to distribute INF
- files listing these and other DOS functions by the authors. Look on
- Compuserve and other online sources such as the PCC BBS (919-517-0001)
- for these files in the near future.
- ********************************************************************
-
- --------N-215F32-----------------------------
- INT 21 u - Named Pipes - LOCAL DosQNmPipeInfo
- AX = 5F32h
- BX = handle
- CX = size of _PIPEINFO structure
- DX = level (must be 0001h)
- DS:SI -> _PIPEINFO structure (see below)
- Return: CF clear if successful
- _PIPEINFO structure filled in
- CF set on error
- AX = error code
-
- Format of _PIPEINFO structure:
- Offset Size Description
- 00h WORD size of outgoing buffer
- 02h WORD size of incoming buffer
- 04h BYTE maximum number of instances allowed
- 05h BYTE current number of instances
- 06h BYTE length of the name (including terminating NUL)
- 07h N BYTEs name
-
- --------N-215F33-----------------------------
- INT 21 u - Named Pipes - LOCAL DosQNmPHandState
- AX = 5F33h
- BX = handle
- Return: CF clear if successful
- AH = pipe mode bit mask (see below)
- AL = maximum number of instances
- CF set on error
- AX = error code
-
- Bitfields for pipe mode:
- bit 7 set if nonblocking, clear if blocking
- bit 6 set if server end, clear if client end
- bit 2 set if write in message mode, clear if write in byte mode
- bit 0 set if read in message mode, clear if read in byte mode
-
- --------N-215F34-----------------------------
- INT 21 u - Named Pipes - LOCAL DosSetNmPHandState
- AX = 5F34h
- BX = handle
- CX = pipe mode bit mask
-
-
-
-
-
- bit 15: set if nonblocking, clear if blocking
- bit 8: set if read in message mode, clear if read in byte mode
- Return: CF clear if successful
- CF set if error
- AX = error code
-
- --------N-215F35-----------------------------
- INT 21 u - Named Pipes - LOCAL DosPeekNmPipe
- AX = 5F35h
- BX = handle
- CX = buffer length
- DS:SI -> buffer
- Return: CF clear if successful
- CX = bytes read
- SI = bytes left in the pipe
- DX = bytes left in the current message
- DI = pipe status
- 0001h disconnected
- 0002h listening
- 0003h connected
- 0004h closing
- CF set if error
- AX = error code
-
- --------N-215F36-----------------------------
- INT 21 u - Named Pipes - LOCAL DosTransactNmPipe
- AX = 5F36h
- BX = handle
- CX = in buffer length
- DS:SI -> in buffer
- DX = out buffer length
- ES:DI -> out buffer
- Return: CF clear if successful
- CX = bytes read
- CF set on error
- AX = error code
-
- --------N-215F37-----------------------------
- INT 21 u - Named Pipes - DosCallNmPipe
- AX = 5F37h
- DS:SI -> DosCallNmPipe stack frame (see below)
- Return: CF clear if successful
- CX = bytes read
- CF set on error
- AX = error code
-
- Format of DosCallNmPipe stack frame:
- Offset Size Description
- 00h DWORD timeout
- 04h DWORD -> bytes read WORD (not used!!)
- 08h WORD out buffer length
- 0Ah DWORD address of out buffer
- 0Eh WORD in buffer length
- 10h DWORD address of in buffer
- 14h DWORD address of pipe name
-
-
-
-
-
- --------N-215F38-----------------------------
- INT 21 u - Named Pipes - LOCAL DosWaitNmPipe
- AX = 5F38h
- DS:DX -> pipe name
- BX:CX = timeout value
- Return: CF clear if successful
- CF set if error
- AX = error code
-
- --------N-215F39-----------------------------
- INT 21 U - Named Pipes - LOCAL DosRawReadNmPipe
- AX = 5F39h
- BX = handle
- CX = buffer length
- DS:DX -> buffer
- Return: CF clear if successful
- CX = bytes read
- CF set if error
- AX = error code
-
- --------N-215F3A-----------------------------
- INT 21 U - Named Pipes - LOCAL DosRawWriteNmPipe
- AX = 5F3Ah
- BX = handle
- CX = buffer length
- DS:DX -> buffer
- Return: CF clear if successful
- CX = bytes written
- CF set if error
- AX = error code
-
-
- = Item 5 ===================================================================
-
- ----------
- References
- ----------
-
- "IBM OS/2 Volume 2: Dos and Windows** Environment", p. 282-283., 1992.
- IBM Publication ordering number: GG-3731-00.
- To order, call 1-800-765-4426.
-
- "IBM OS/2 Control Program Programming Reference", 1992.
- IBM Publication ordering number: S10G-6263-00.
- To order, call 1-800-765-4426.
-
- Brown, Ralf and Kyle, Jim. "Network Interrupts - A Programmer's
- Reference to Network APIs". p. 105-106. Addison-Wesley, 1994.
- ISBN number: 0-201-62644-6.
-
- Orfali, Robert and Harkey, Dan. "Client/Server Programming with
- OS/2 2.1". New York, NY: Van Nostrand Reinhold, 1993.
- ISBN number: 0-442-01833-9.
-
-
-
-
-
-
-
- Sheils, Michael. "The Undocumented LAN Manager and Named Pipe
- APIs for DOS and Windows**". p. 119-143. Dr. Dobbs Journal. April 1993.
-
- Brown, Ralf. (Electronic) PC Interrupt List (found on Compuserve in
- the PC DOS Programming area). Look for the OS/2 INF version on
- Compuserve and other online sources as well.
-
-
- ----------------------
- NOTICES AND TRADEMARKS
- ----------------------
-
- The following terms mentioned in this FAX are trademarks or
- registered trademarks of the IBM Corporation in the United
- States and/or other countries:
-
- IBM
- -----------------------------------------------
- OS/2
- -----------------------------------------------
-
- The following terms, denoted by a double
- asterisk (**) in this FAX, are trademarks of
- other companies as follows:
-
- Trademark: Owner:
- --------------------------------------------------------------
- Windows Microsoft Corporation
- --------------------------------------------------------------
- PowerBuilder PowerSoft, Inc.
- --------------------------------------------------------------
-
-
-
- Report by: OS/2 Dosap Analyst Team - 05/94
- IBM - Boca Raton, Florida
-
-
-
-
-
-