Nina Didenko f75ee32e72 sym2num: don't hardcode path to cpp 5 lat temu
..
UI 30cd56ac38 dtprintinfo: Fix a potential exploitable buffer overrun 5 lat temu
libUI 08cea15be5 get rid of the 'extern sys_errlist' and 'sys_nerr' in SysErrorMsg. 5 lat temu
objects 05d231606e dtprintinfo: correct another possible buffer overflow 5 lat temu
util 297b6bd845 Fix warnings on FreeBSD 6 lat temu
DtPrintinfo.C 07900bd93b Remove Unixware and openserver support 6 lat temu
Dtprintinfo 83b6996daa Initial import of the CDE 2.1.30 sources from the Open Group. 12 lat temu
Imakefile f75ee32e72 sym2num: don't hardcode path to cpp 5 lat temu
README 83b6996daa Initial import of the CDE 2.1.30 sources from the Open Group. 12 lat temu
dtprintinfo.msg.src 2712d5f787 NetBSD port 10 lat temu
dtprintinfomsg.h 07900bd93b Remove Unixware and openserver support 6 lat temu
msg.awk 83b6996daa Initial import of the CDE 2.1.30 sources from the Open Group. 12 lat temu
sym2num f75ee32e72 sym2num: don't hardcode path to cpp 5 lat temu

README

/* $XConsortium: README /main/2 1996/07/15 14:15:33 drk $ */
Directories:

libUI - Contains base class for UI
libUI/MotifUI - Contains Motif UI classes
UI - Subclasses of objects in libUI/MotifUI. These objects
define the UI for dtprintinfo.
objects - Contains base class for objects
objects/PrintObj - Contains print queue objects
util - Contains utility classes
service - No longer used

Actions

The following actions are defined in /usr/dt/appconfig/types/C/print.dt.

DtPrintManager - runs 'dtprintinfo -all'

DtPrint (no args) - runs the DtPrintinfo action

DtPrint (with args) - runs the Print action

DtPrintinfo (no args) - runs 'dtprintinfo' to show the LPDEST or
default printer

DtPrintinfo (with args) - runs 'dtprintinfo -p ' to show the
specific printer

The default printer actions are defined in /etc/dt/appconfig/types/C by
running 'dtprintinfo -populate'. There's a datatype (action definition)
file for each queue on the system name .dt.

_Print (no args) - runs the 'DtPrintinfo ' action.

_Print (with args) - runs the 'Print' action.

Printer action files are created in $HOME/.dt/.Printers. These are empty
files named _Print and have the execute bit set. They are the
action files that are supplied when a printer is dragged from Print Manager
to the File Manager or Front Panel.

The CreateActionFile function in UI/DtPrinterIcon.C creates the system action
definition files in /etc/dt/appconfig/types/$LANG and customized action
definition in $HOME/.dt/types. The Apply function in UI/DtPrtProps.C modifies
action definition in $HOME/.dt/types.

Drag-n-Drop

The guts of drag-n-drop (DND) is coded in the libUI/MotifUI/DtDND.C file.
Currently, only the DtFILENAME_TRANSFER protocol is used. The printer
icons, DtPrinterIcon objects defined in UI/DtPrinterIcon.C, use the DtDND
class to handle files dropped on the printer icon and print job list box and
to handle dragging printers to other objects. When a file is dropped on a
printer or print job list box, dtprintinfo receives a filename and when
a printer is dragged to an object, dtprintinfo supplies the filename of
the action file (Example: $HOME/.dt/.Printers/_Print).

Widgets

libUI/MotifUI/Icon.c - Custom icon widget used by the IconObj class defined
in libUI/MotifUI/IconObj.C.

libUI/MotifUI/WorkArea.c - Custom container widget used by the Container
class defined in libUI/MotifUI/Container.C.

Classes

There are 2 class hierarchies: an UI class hierarchy and a object class
hierarchy. The Motif User Interface classes are defined in the
libUI/MotifUI directory. The printer objects are defined in the
objects/PrintObj directory. These classes are designed to be used as
libraries.

Action API's

The DtPrinterIcon class uses the DtDbLoad, DtActionInvoke, DtDbReloadNotify,
DtActionExists, DtActionIcon, DtActionDescription, and DtActionLabel
functions. The DtPrtProps class uses the DtActionInvoke function. The
Application class uses the DtDbLoad function.

Drag-n-Drop API's

The DtDND class uses the XmDropSiteUpdate, XmDropSiteConfigureStackingOrder,
DtDndDropRegister, and DtDndDragStart functions.

Remote Printer related API's

The ConnectToPrintServer function in objects/PrintObj/ParseJobs.C uses the
gethostbyname, gethostbyaddr, getservbyname, rresvport, and connect
functions to return a socket to a remote print server.

The SendPrintJobStatusReguest function writes to the socket a request for
long format printer status.

These two high level functions are called by the OpenClose function in
UI/DtApp.C and by the ProcessJobs function in objects/PrintObj/Queue.C
via the call to the RemotePrintJobs function in ParseJobs.C.

The RemotePrintJobs is a high level function that reads the socket for
the print status that's returned by the server. This functions waits for
the output, thus it blocks the dtprintinfo process. It is used during the
'Find Print Jobs' operation in the Print Manager version of dtprintinfo.

The OpenClose function in UI/DtApp.C uses the BaseUI->Thread function
function to gather the status returned by the print server so that the
dtprintinfo process does not block. This is accomplished by using the
the fcntl function to set the O_NDELAY bit on the socket and then using the
socket as the file descriptor in the XtAppAddInput function. Refer to the
CreateThread function in libUI/MotifUI/MotifThread.C.

Message Catalog

The message catalog uses symbolic tags and a MESSAGE macro that makes the
source code easier to read and modify. When building dtprintinfo the
dtprintinfo_cat.h and dtprintinfo_msg.h header are automatically generated
by the sym2num script, gencat, and awk msg.awk script. Here's a sample
output of creating the message header files.

rm -f dtprintinfo.cat dtprintinfo_msg.h dtprintinfo_cat.h
./sym2num dtprintinfo dtprintinfo.msg > msg.tmp
gencat dtprintinfo.cat msg.tmp
awk -f msg.awk dtprintinfo.msg > dtprintinfo_cat.h
rm -f msg.tmp