BOOL InitializeMonitor(VOID) This routine is called once by the print manager to start the monitor. Any one time only initializition by the monitor is done here. For the AppleTalk Monitor, we start a thread to capture networked printers. BOOL AddPort() This routine is called when the user selects 'other...' from the list of ports. The AppleTalk Monitor presents a browse dialog to allow the user to choose an AppleTalk printer. This dialog is modeled after the Macintosh Chooser. BOOL EnumPorts() This routine is called whenever the print manager needs to determine a list of available ports. We gather the data concerning each configured port and pass it back. BOOL DeletePort() This routine is called when the print manager user selects 'Delete' from the Details... dialog of the print manager. We remove the selected port from the list and release the printer if it is captured. ISSUE: Can we guarantee that a job is not in progress for this port when the call is made? How long can we take for this call? If we have to release the printer, should we queue up a request to our captive thread? BOOL ConfigurePort() This routine is called whenever the print manager user presses the configure button for one of our ports. The AppleTalk Monitor presents a dialog to allow the user to capture or not capture the specified printer. OpenPort() Called by the print manager to establish a connection and to generate a handle to the port. The AppleTalk Monitor attempts to PAPOpen the printer, and if successful, returns a handle for the port. ISSUES: What should the handle value be? Do we return false if someone else has the printer open already? What happens if someone tries to open the printer while it's being captured? ClosePort() Not sure the diff between close port and enddocport ReadPort() This routine is called when the print manager wants to read data from the printer. Not sure if this is synchronous or not, what we are supposed to do if there is no data to be read, or what we are to do if there is more data to be read than the specified buffer can hold. WritePort() This routine is called when the print manager wants to send data to a printer. Is it synchronous or asynchronous? What are the limits on the buffer sizes? What errors can be returned? StartDocPort() Called by the print manager at the beginning of a print job. The AppleTalk Monitor should reset any job performance counts, save a handle to the printer object (and job?) so that job status can be updated and that the job can be deleted when finished. EndDocPort() Called by the print manager at the end of the print job. The AppleTalk Monitor should mark performance counts as valid and store them somewhere as well as change the job status to complete and delete the print job.