INTERNAL COMMANDS DLL INTERFACE 1. OVERVIEW Each "Internal Command" is a DLL that contains the code for that command. The 'GENERIC.C' and associated files in the GENERIC directory provide a template for creating a new Internal Command. An important consideration in implementing a new command is where to store your data. In order for your DLL to be completely reentrant, no variable can be stored in the data segment. That is, don't declare variables outside of a function, and no static variables inside a function. The reason for this is that each invocation of a DLL function uses that same data segment. If a DLL function was called reentrantly, static variables would be overwritten. Thus, if a DLL requires more data than will fit on the stack, use dynamic allocation. 2. REQUIREMENTS Each DLL must provide the following 3 functions for use by Windows Shell: int FAR PASCAL ModuleProc (HWND hwndDisplay, int argc, LPSTR argv[]); @ ORDINAL 3 hwndDisplay - Window handle of STDIO Display to use for I/O. argc - Number of command line arguments. argv - Array of pointers to command line arguments. The first pointer always points to the name of the DLL. This function is called to let the DLL do the function which it is providing. For example, if this were a DLL providing a file deletion function, the DLL would perform the deletion at this time. int FAR PASCAL ShowOptions (HWND hwndParent); @ ORDINAL 4 This function is called to tell the DLL to show it's options box. The DLL should display a window which allows the user to set options in the DLL. int FAR PASCAL ShowAbout (HWND hwndParent); @ ORDINAL 5 This function is called to tell the DLL to show it's about box. The DLL should display an about window at this time. NOTE - It is essential that the DLL export these functions at the specified ordinal value in it's .DEF file. Otherwise, The Windows Shell will not properly access the DLL. 3. USING THE DISPLAY The header file 'wstdio.h' has been provided for outputing lines and other function to the display. The most common of these is dputs(), which you can use to output a line to the display. See the header file for the description of the rest of the functions. 4. UTILITY FUNCTIONS The 'wslib.dll' provides several useful functions for parsing command lines, and yielding to other applications. It is extremely important that you use the YieldToOthers() function your code sits in a tight loop for an extended length of time. See the header file 'wslib.h' for a list of useful functions.