
TODO List
- Provide a common print dialog box for QT-based applications
- Creating user-level programs to access APS functionality
- Support interrogating Samba for contents of remote Windows printer queues
- Support for determining printer type via IEEE 1284
- Restructuring transport architecture for clearer delination between transports and the
rest of the APS library, and to allow external transports to be added without recompiling
the core library.
- Length of the directory path is hardcoded to 1024; find a generalized solution.
- Change the spool directory name to printer name, when printer is renamed.
- Decide about the name of the directory if one exist with the printer
name.
- The .ppd file should be deleted from /etc/printers directory when printer is removed.
- Change the APS_RESULT implementation to include information on where an error orginated
from.
- Provide return codes for job operations (ie. parse lprm output et. al)
- Update docs for Get/SetConnectInfo
- Provide summary compatibility list for operations on various transports
- Improve introduction of APS internal structures and objects: ie. describe transports,
printers, jobs, queues, attributes, etc...
- Implement safe writing for all configs (ie. expose explicit Begin, Write, Read, and
Abort operations for all file operations (and perhaps other in-code structural artifacts)
- implement printer name aliases at the APS library level
- maintain high-level APS database of open printers
- improve use of Printer object as a repository for printer config-related data
- printer config data, if referenced, should persist even if its on-disk representations
have been wiped
- Consdier keeping lists of available Printers rather than arrays of available printer
configurations (ie. Aps_Printcap_Info) (explicit locking of resources will prevent a
printer and all configs from vanishing until all references are gone)
- need to ensure that only one instance of each printer exists (perhaps we should
pre-allocate these instances upon reading of configs so APS high-level need only do an
AddRef() before returning to user)
- Transport object holds a list of configured printers and a list of removed/vanished
printers with outstanding references (in case they reappear) (assumption: only configured
printers will appear in printcap but instances of PrintcapInfo can persist for any
still-open printers)
- formalize design of object vector-tables
- also cleans up global name space since the related functions can be declared
static/local to the module in which the vector table is def'd.
- provide low-overhead name-resolution and name-comparison for printers (ie. get Printer
object by name)
- provide explicit library initialization / uninitialization calls for diagnostic purposes
(locate unfreed resources, etc...)
- extend compile-time configuration options to include things like compilation for
libefence, libdmalloc, function inlining, system capabilities, workarounds / kludges,
compiling out support for specific transports/subtransports
- simplification of transport interface
- dynamic loading / releasing of transport modules
- improved high-level interface abstraction hide communication method from high-level
calls (ie. Aps_ functions are no more than stubs for internal functions)
- may ease transition to a daemon-oriented setup, or provide opportunities for serializing
access to various resources (ie. by replacing high-level layer we could support daemon
RPC's or wrap function calls in a Mutex)
- may help to simplify the layout of APS and demystify the location of various bits of
functionality
- provide auto-documentation for internal APS components
- requires scanning through the list of function headers and extracting fields like:
function prototype, high-level description, input/output parameter descriptions, return
codes (error values), notes for the user, implementation notes, known problems.
- could automatically build an HTML document indexed by function name, by source file
name, by module name, by grouping.
- we'd have to update all of our headers; this might be a good
thing in the long run.
- increase available queue/job/printer/model functionality so that individual fields may
be accessed via some common means... eg. Aps_ObjGetString(object, id, & string);
Aps_ObjGetInt(object, id, & num);
- part of this functionality already exists in the form of object properties, but we need
to formalize the documentation for it and provide support for "active"
access/modification of fields (via callback / vtbl entry), protection of fields
- this kind of thing could help reduce the number of Aps_<obj>Get<something>
and Aps_<obj>Set<something> entry points and also centralize most of the
parameter validation procedures