Automatically remove trailing whitespace
This commit is contained in:
parent
62396c5250
commit
1446c97470
86
FEATURES
86
FEATURES
@ -1,93 +1,93 @@
|
|||||||
NCSA Mosaic Features List
|
NCSA Mosaic Features List
|
||||||
*************************
|
*************************
|
||||||
|
|
||||||
This list is up to date for version 2.5 of NCSA Mosaic.
|
This list is up to date for version 2.5 of NCSA Mosaic.
|
||||||
|
|
||||||
o Support for accessing documents, images, audio, video, animations, and data
|
o Support for accessing documents, images, audio, video, animations, and data
|
||||||
through World Wide Web, Gopher, WAIS, FTP, NNTP/Usenet news, telnet,
|
through World Wide Web, Gopher, WAIS, FTP, NNTP/Usenet news, telnet,
|
||||||
tn3270, and local files; and via gateways, Techinfo, TeXinfo, Archie, CSO
|
tn3270, and local files; and via gateways, Techinfo, TeXinfo, Archie, CSO
|
||||||
qi/ph, relational databases, and other sources.
|
qi/ph, relational databases, and other sources.
|
||||||
o Friendly X/Motif user interface.
|
o Friendly X/Motif user interface.
|
||||||
o Color and monochrome default X resource settings.
|
o Color and monochrome default X resource settings.
|
||||||
o Multiple independent document viewing windows.
|
o Multiple independent document viewing windows.
|
||||||
o Completely interruptible network input/output, with full status indication
|
o Completely interruptible network input/output, with full status indication
|
||||||
during network operations.
|
during network operations.
|
||||||
o Support for interactive fill-out forms inside documents, to enable powerful
|
o Support for interactive fill-out forms inside documents, to enable powerful
|
||||||
database and search engine front-ends. Fill-out forms can contain text entry
|
database and search engine front-ends. Fill-out forms can contain text entry
|
||||||
areas (single- or multi-line), option buttons, radio buttons, option menus,
|
areas (single- or multi-line), option buttons, radio buttons, option menus,
|
||||||
scrolled lists, and image maps. Fill-out form elements are instantiated as
|
scrolled lists, and image maps. Fill-out form elements are instantiated as
|
||||||
Motif widgets.
|
Motif widgets.
|
||||||
o Support for standard World Wide Web authentication scheme, providing
|
o Support for standard World Wide Web authentication scheme, providing
|
||||||
security about equivalent to telnet's username/password scheme.
|
security about equivalent to telnet's username/password scheme.
|
||||||
o Customizable encryption hooks to allow external PEM or PGP encryption to
|
o Customizable encryption hooks to allow external PEM or PGP encryption to
|
||||||
be used to request and receive encrypted documents.
|
be used to request and receive encrypted documents.
|
||||||
o Support for encrypted submission of forms.
|
o Support for encrypted submission of forms.
|
||||||
o Support for first time encryption of all http communication.
|
o Support for first time encryption of all http communication.
|
||||||
o Extensive HTTP/1.0 support, including the ability to allow a remote
|
o Extensive HTTP/1.0 support, including the ability to allow a remote
|
||||||
server to
|
server to
|
||||||
return URL redirections rather than documents for transparent forwarding of
|
return URL redirections rather than documents for transparent forwarding of
|
||||||
information pointers.
|
information pointers.
|
||||||
o Ability to pass any or all URL access methods to a proxy gateway to simulate
|
o Ability to pass any or all URL access methods to a proxy gateway to simulate
|
||||||
direct network connection for those behind firewalls.
|
direct network connection for those behind firewalls.
|
||||||
o Direct access to WAIS databases, including support for binary files and
|
o Direct access to WAIS databases, including support for binary files and
|
||||||
multiformat responses.
|
multiformat responses.
|
||||||
o Built-in support for recognizing and handling GIF, JPEG, TIFF, audio, AIFF,
|
o Built-in support for recognizing and handling GIF, JPEG, TIFF, audio, AIFF,
|
||||||
DVI, MPEG, MIME, XWD, RGB, HDF, PostScript files and forking off
|
DVI, MPEG, MIME, XWD, RGB, HDF, PostScript files and forking off
|
||||||
appropriate viewers.
|
appropriate viewers.
|
||||||
o Full customizability of recognized formats, external viewers, and file
|
o Full customizability of recognized formats, external viewers, and file
|
||||||
extensions.
|
extensions.
|
||||||
o Ability to fire off arbitrary client-side shell scripts in response to
|
o Ability to fire off arbitrary client-side shell scripts in response to
|
||||||
hyperlink
|
hyperlink
|
||||||
activations via format/viewer customization options.
|
activations via format/viewer customization options.
|
||||||
o Ability to natively view data inside HDF and netCDF scientific data files,
|
o Ability to natively view data inside HDF and netCDF scientific data files,
|
||||||
with powerful hypermedia interface to explore internal structure of data
|
with powerful hypermedia interface to explore internal structure of data
|
||||||
files.
|
files.
|
||||||
o Inlined images in formatted (HTML) text: X bitmaps and GIF images can be
|
o Inlined images in formatted (HTML) text: X bitmaps and GIF images can be
|
||||||
included anywhere inside a document, and can act as hyperlink anchors. Image
|
included anywhere inside a document, and can act as hyperlink anchors. Image
|
||||||
files themselves can be located anywhere on the network. Images can act as
|
files themselves can be located anywhere on the network. Images can act as
|
||||||
maps, so clicking on them sends coordinates of click to remote server.
|
maps, so clicking on them sends coordinates of click to remote server.
|
||||||
o Automatic dithering of inlined images on monochrome displays.
|
o Automatic dithering of inlined images on monochrome displays.
|
||||||
o Support of GIF89 transparent background in inlined images.
|
o Support of GIF89 transparent background in inlined images.
|
||||||
o Flexible inlined-image caching with customizable image cache size.
|
o Flexible inlined-image caching with customizable image cache size.
|
||||||
o Delayed image loading mode, to avoid automatic loading of all images in
|
o Delayed image loading mode, to avoid automatic loading of all images in
|
||||||
accessed documents for users with slow network connections.
|
accessed documents for users with slow network connections.
|
||||||
o Visited document history list per window.
|
o Visited document history list per window.
|
||||||
o Global history with previously visited locations visually distinct; global
|
o Global history with previously visited locations visually distinct; global
|
||||||
history is persistent across sessions.
|
history is persistent across sessions.
|
||||||
o Hotlist/bookmark capability -- keep list of interesting documents,
|
o Hotlist/bookmark capability -- keep list of interesting documents,
|
||||||
add/remove/rename items, list is persistent across sessions. Now stored
|
add/remove/rename items, list is persistent across sessions. Now stored
|
||||||
in nested HTML.
|
in nested HTML.
|
||||||
o Personal annotations with GUI annotation entry dialog; annotations can later
|
o Personal annotations with GUI annotation entry dialog; annotations can later
|
||||||
be edited or deleted, and hyperlinks to existing annotations are inlined
|
be edited or deleted, and hyperlinks to existing annotations are inlined
|
||||||
into subsequent accesses of an annotated document. (Any document from any
|
into subsequent accesses of an annotated document. (Any document from any
|
||||||
server via any access method can be annotated.)
|
server via any access method can be annotated.)
|
||||||
o Audio (voice) annotations with GUI for controlling recording process (SGI,
|
o Audio (voice) annotations with GUI for controlling recording process (SGI,
|
||||||
SGI, and HP only).
|
SGI, and HP only).
|
||||||
o Transparent and automatic uncompression of compressed (.Z) and gzip'd (.z or
|
o Transparent and automatic uncompression of compressed (.Z) and gzip'd (.z or
|
||||||
.gz) files (over FTP, HTTP0, HTTP/1.0, local files, and Gopher).
|
.gz) files (over FTP, HTTP0, HTTP/1.0, local files, and Gopher).
|
||||||
o "Load to local disk" mode, for pulling down arbitrary binary files and
|
o "Load to local disk" mode, for pulling down arbitrary binary files and
|
||||||
saving them to local disk without viewing them.
|
saving them to local disk without viewing them.
|
||||||
o In-document search capability.
|
o In-document search capability.
|
||||||
o Fully 8-bit clean for formatted and plain text.
|
o Fully 8-bit clean for formatted and plain text.
|
||||||
o On-the-fly font and hyperlink style selection.
|
o On-the-fly font and hyperlink style selection.
|
||||||
o Hardcoded menu entries for popular network starting points, including the
|
o Hardcoded menu entries for popular network starting points, including the
|
||||||
NCSA Internet Resources Meta-Index.
|
NCSA Internet Resources Meta-Index.
|
||||||
o Keyword search capability (for WAIS, Gopher, Archie, etc.).
|
o Keyword search capability (for WAIS, Gopher, Archie, etc.).
|
||||||
o Cut and paste formatted text into other X windows.
|
o Cut and paste formatted text into other X windows.
|
||||||
o Ability to display arbitrarily long documents.
|
o Ability to display arbitrarily long documents.
|
||||||
o Save/mail/print documents in several formats, including formatted ASCII
|
o Save/mail/print documents in several formats, including formatted ASCII
|
||||||
text and PostScript.
|
text and PostScript.
|
||||||
o Online hypertext help and FAQ list.
|
o Online hypertext help and FAQ list.
|
||||||
o No config or resource file installation required; self-contained
|
o No config or resource file installation required; self-contained
|
||||||
executable.
|
executable.
|
||||||
o Extremely customizable via compile-time definitions, X resources, and
|
o Extremely customizable via compile-time definitions, X resources, and
|
||||||
standard configuration file formats (including mailcap files for
|
standard configuration file formats (including mailcap files for
|
||||||
format/viewer customization).
|
format/viewer customization).
|
||||||
o Can be controlled by signals to allow use as a full-featured help or
|
o Can be controlled by signals to allow use as a full-featured help or
|
||||||
information presentation subsystems by existing applications.
|
information presentation subsystems by existing applications.
|
||||||
o Integrated with NCSA Collage and NCSA DTM to broadcast documents into
|
o Integrated with NCSA Collage and NCSA DTM to broadcast documents into
|
||||||
real-time networked workgroup collaboration sessions.
|
real-time networked workgroup collaboration sessions.
|
||||||
o It's PURIFY'D!!!
|
o It's PURIFY'D!!!
|
||||||
o Common Client Interface (CCI) support to allow external applications
|
o Common Client Interface (CCI) support to allow external applications
|
||||||
to communicate with Mosaic via TCP/IP.
|
to communicate with Mosaic via TCP/IP.
|
||||||
o Kiosk mode
|
o Kiosk mode
|
||||||
|
14
INSTALL
14
INSTALL
@ -177,7 +177,7 @@ xinc = -I/usr/openwin/include -I/usr/dt/include
|
|||||||
:::
|
:::
|
||||||
SWP
|
SWP
|
||||||
---
|
---
|
||||||
This is where you specify where you have installed your X libraries. Some
|
This is where you specify where you have installed your X libraries. Some
|
||||||
systems have everything off of /usr/lib, some are not so lucky. If you
|
systems have everything off of /usr/lib, some are not so lucky. If you
|
||||||
are compiling and you get an error of "can't find include file XXX.h" it is
|
are compiling and you get an error of "can't find include file XXX.h" it is
|
||||||
more than likely a problem here (or if you don't have a particular lib
|
more than likely a problem here (or if you don't have a particular lib
|
||||||
@ -280,10 +280,10 @@ JPEG support. Comment it out if you aren't going to use it.
|
|||||||
|
|
||||||
#### KERBEROS SUPPORT
|
#### KERBEROS SUPPORT
|
||||||
####
|
####
|
||||||
#### If you want Mosaic to support Kerberos authentication, set the
|
#### If you want Mosaic to support Kerberos authentication, set the
|
||||||
#### following flags appropriately. You can support Kerberos V4 and/or V5,
|
#### following flags appropriately. You can support Kerberos V4 and/or V5,
|
||||||
#### although it's most likely that your realm supports one or the other.
|
#### although it's most likely that your realm supports one or the other.
|
||||||
#### To enable DES-encryption of HTTP messages via Kerberos key exchange,
|
#### To enable DES-encryption of HTTP messages via Kerberos key exchange,
|
||||||
#### define the KRB-ENCRYPT flag.
|
#### define the KRB-ENCRYPT flag.
|
||||||
|
|
||||||
##krb4dir = /usr/athena
|
##krb4dir = /usr/athena
|
||||||
@ -298,7 +298,7 @@ JPEG support. Comment it out if you aren't going to use it.
|
|||||||
|
|
||||||
#Do not comment out.
|
#Do not comment out.
|
||||||
krbflags = $(krb4flags) $(krb5flags)
|
krbflags = $(krb4flags) $(krb5flags)
|
||||||
krblibs = $(krb4libs) $(krb5libs)
|
krblibs = $(krb4libs) $(krb5libs)
|
||||||
:::
|
:::
|
||||||
SWP
|
SWP
|
||||||
---
|
---
|
||||||
@ -315,7 +315,7 @@ to leave it alone.
|
|||||||
#### recommend linking with CNIDR's freeWAIS 0.5 distribution; other
|
#### recommend linking with CNIDR's freeWAIS 0.5 distribution; other
|
||||||
#### WAIS distributions may work but we have not tested them with
|
#### WAIS distributions may work but we have not tested them with
|
||||||
#### Mosaic. freeWAIS 0.5 can currently (Sept.1995) be found at
|
#### Mosaic. freeWAIS 0.5 can currently (Sept.1995) be found at
|
||||||
#### ftp://sunsite.unc.edu/pub/wais/servers/freeWAIS
|
#### ftp://sunsite.unc.edu/pub/wais/servers/freeWAIS
|
||||||
|
|
||||||
#### If you do not wish to link to the WAIS libraries, then comment
|
#### If you do not wish to link to the WAIS libraries, then comment
|
||||||
#### the following lines out. Mosaic will then communicate with WAIS
|
#### the following lines out. Mosaic will then communicate with WAIS
|
||||||
@ -379,7 +379,7 @@ a slight to Tom...we simply had not thought it through.
|
|||||||
Another note...the 2.8 distribution tree will be drastically changing. Do not
|
Another note...the 2.8 distribution tree will be drastically changing. Do not
|
||||||
expect patches for 2.7x to work for 2.8x. We will be moving the libraries
|
expect patches for 2.7x to work for 2.8x. We will be moving the libraries
|
||||||
out of the distribution tree and into a "library" distribution along with
|
out of the distribution tree and into a "library" distribution along with
|
||||||
pointers to completely external libs (jpeg, png, zlib, etc). Since we have
|
pointers to completely external libs (jpeg, png, zlib, etc). Since we have
|
||||||
these libs in binary form, we will probably distribute a "binary_libs" archive
|
these libs in binary form, we will probably distribute a "binary_libs" archive
|
||||||
of all the libs we build with for each platform (for those who can't get the
|
of all the libs we build with for each platform (for those who can't get the
|
||||||
lib to build or simply don't care to take the time, but still want to play
|
lib to build or simply don't care to take the time, but still want to play
|
||||||
@ -394,7 +394,7 @@ great space wishes to perform this feat for us, we would gladly accept.
|
|||||||
|
|
||||||
Scott Powers spowers@ncsa.uiuc.edu \ The N.C.S.A. X Mosaic
|
Scott Powers spowers@ncsa.uiuc.edu \ The N.C.S.A. X Mosaic
|
||||||
Paul Bleisch pbleisch@ncsa.uiuc.edu \ Development Team
|
Paul Bleisch pbleisch@ncsa.uiuc.edu \ Development Team
|
||||||
Dan Pape dpape@ncsa.uiuc.edu >
|
Dan Pape dpape@ncsa.uiuc.edu >
|
||||||
Tommy Reilly tpreilly@ncsa.uiuc.edu / Comments? Suggestions? Problems?
|
Tommy Reilly tpreilly@ncsa.uiuc.edu / Comments? Suggestions? Problems?
|
||||||
Brian Swetland swetland@ncsa.uiuc.edu/ mosaic-x@ncsa.uiuc.edu
|
Brian Swetland swetland@ncsa.uiuc.edu/ mosaic-x@ncsa.uiuc.edu
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ Binaries
|
|||||||
|
|
||||||
NCSA Mosaic is known to compile on the following platforms:
|
NCSA Mosaic is known to compile on the following platforms:
|
||||||
|
|
||||||
SGI (IRIX 4.0.x and 5.x)
|
SGI (IRIX 4.0.x and 5.x)
|
||||||
IBM (AIX 3.2.4)
|
IBM (AIX 3.2.4)
|
||||||
Sun (SunOS 4.1.3, 5.3, and 5.4 (Solaris))
|
Sun (SunOS 4.1.3, 5.3, and 5.4 (Solaris))
|
||||||
DECstation 5000-200 (Ultrix 4.x)
|
DECstation 5000-200 (Ultrix 4.x)
|
||||||
@ -34,7 +34,7 @@ Installation Instructions
|
|||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
Simply examine the toplevel Makefile, change the appropriate
|
Simply examine the toplevel Makefile, change the appropriate
|
||||||
customizable options, and type 'make'.
|
customizable options, and type 'make'.
|
||||||
|
|
||||||
The final result is a single independent executable, src/Mosaic.
|
The final result is a single independent executable, src/Mosaic.
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ There is one tricky thing:
|
|||||||
platform-independent hierarchical scientific data format, and NCSA
|
platform-independent hierarchical scientific data format, and NCSA
|
||||||
DTM, a network-based message-passing protocol useful for exchanging
|
DTM, a network-based message-passing protocol useful for exchanging
|
||||||
scientific data between applications. If you compile one of them
|
scientific data between applications. If you compile one of them
|
||||||
in, you should compile both of them in.
|
in, you should compile both of them in.
|
||||||
|
|
||||||
If you don't already know what HDF and DTM are and want to compile
|
If you don't already know what HDF and DTM are and want to compile
|
||||||
Mosaic quickly, forget about them for the time being -- you can
|
Mosaic quickly, forget about them for the time being -- you can
|
||||||
@ -111,7 +111,7 @@ depends on user feedback and support.
|
|||||||
=============================================================================
|
=============================================================================
|
||||||
Scott Powers spowers@ncsa.uiuc.edu \ The N.C.S.A. X Mosaic
|
Scott Powers spowers@ncsa.uiuc.edu \ The N.C.S.A. X Mosaic
|
||||||
Kristin Buxton kbuxton@uiuc.edu \ Development Team
|
Kristin Buxton kbuxton@uiuc.edu \ Development Team
|
||||||
Dan Pape dpape@ncsa.uiuc.edu >
|
Dan Pape dpape@ncsa.uiuc.edu >
|
||||||
Tommy Reilly tpreilly@uiuc.edu / Comments? Suggestions? Problems?
|
Tommy Reilly tpreilly@uiuc.edu / Comments? Suggestions? Problems?
|
||||||
Brian Swetland swetland@uiuc.edu / mosaic-x@ncsa.uiuc.edu
|
Brian Swetland swetland@uiuc.edu / mosaic-x@ncsa.uiuc.edu
|
||||||
=============================================================================
|
=============================================================================
|
||||||
|
@ -174,7 +174,7 @@ Mosaic*CatchPriorAndNext: True
|
|||||||
<dd>Whether or not to use PG_UP and PG_DN.
|
<dd>Whether or not to use PG_UP and PG_DN.
|
||||||
<dt>Mosaic*fullHostname: (NULL)<br>
|
<dt>Mosaic*fullHostname: (NULL)<br>
|
||||||
Mosaic*FullHostname: (NULL)
|
Mosaic*FullHostname: (NULL)
|
||||||
<dd>The full hostname of your local machine (for use in conjunction with
|
<dd>The full hostname of your local machine (for use in conjunction with
|
||||||
GetHostByNameIsEvil).
|
GetHostByNameIsEvil).
|
||||||
<dt>Mosaic*reverseInlinedBitmapColors: False<br>
|
<dt>Mosaic*reverseInlinedBitmapColors: False<br>
|
||||||
Mosaic*ReverseInlinedBitmapColors: False
|
Mosaic*ReverseInlinedBitmapColors: False
|
||||||
|
@ -24,7 +24,7 @@ Mosaic*pulldownmenu*fontList: -*-helvetica-bold-o-normal-*-14-*-iso8859-1
|
|||||||
Mosaic*XmList*fontList: -*-helvetica-medium-r-normal-*-14-*-iso8859-1
|
Mosaic*XmList*fontList: -*-helvetica-medium-r-normal-*-14-*-iso8859-1
|
||||||
Mosaic*XmText.fontList: -*-lucidatypewriter-medium-r-normal-*-14-*-iso8859-1
|
Mosaic*XmText.fontList: -*-lucidatypewriter-medium-r-normal-*-14-*-iso8859-1
|
||||||
Mosaic*XmTextField.fontList: -*-lucidatypewriter-medium-r-normal-*-14-*-iso8859-1
|
Mosaic*XmTextField.fontList: -*-lucidatypewriter-medium-r-normal-*-14-*-iso8859-1
|
||||||
|
|
||||||
Mosaic*optionmenu*marginHeight: 0
|
Mosaic*optionmenu*marginHeight: 0
|
||||||
Mosaic*optionmenu*marginTop: 5
|
Mosaic*optionmenu*marginTop: 5
|
||||||
Mosaic*optionmenu*marginBottom: 5
|
Mosaic*optionmenu*marginBottom: 5
|
||||||
@ -61,7 +61,7 @@ Mosaic*XmPushButton*highlightThickness: 0
|
|||||||
Mosaic*XmScrollBar*highlightThickness: 0
|
Mosaic*XmScrollBar*highlightThickness: 0
|
||||||
Mosaic*highlightThickness: 0
|
Mosaic*highlightThickness: 0
|
||||||
Mosaic*keyboardFocusPolicy: pointer
|
Mosaic*keyboardFocusPolicy: pointer
|
||||||
|
|
||||||
Mosaic*TitleFont: -adobe-times-bold-r-normal-*-24-*-*-*-*-*-iso8859-1
|
Mosaic*TitleFont: -adobe-times-bold-r-normal-*-24-*-*-*-*-*-iso8859-1
|
||||||
Mosaic*Font: -adobe-times-medium-r-normal-*-17-*-*-*-*-*-iso8859-1
|
Mosaic*Font: -adobe-times-medium-r-normal-*-17-*-*-*-*-*-iso8859-1
|
||||||
Mosaic*ItalicFont: -adobe-times-medium-i-normal-*-17-*-*-*-*-*-iso8859-1
|
Mosaic*ItalicFont: -adobe-times-medium-i-normal-*-17-*-*-*-*-*-iso8859-1
|
||||||
@ -102,7 +102,7 @@ Mosaic*XmList*TopShadowColor: #e7e7e7e7e7e7
|
|||||||
Mosaic*XmText*TopShadowColor: #e7e7e7e7e7e7
|
Mosaic*XmText*TopShadowColor: #e7e7e7e7e7e7
|
||||||
Mosaic*XmSelectionBox*TopShadowColor: #e7e7e7e7e7e7
|
Mosaic*XmSelectionBox*TopShadowColor: #e7e7e7e7e7e7
|
||||||
Mosaic*XmMessageBox*TopShadowColor: #e7e7e7e7e7e7
|
Mosaic*XmMessageBox*TopShadowColor: #e7e7e7e7e7e7
|
||||||
|
|
||||||
Mosaic*TroughColor: #646464646464
|
Mosaic*TroughColor: #646464646464
|
||||||
Mosaic*SelectColor: #ffffffff0000
|
Mosaic*SelectColor: #ffffffff0000
|
||||||
Mosaic*HighlightColor: #bfbfbfbfbfbf
|
Mosaic*HighlightColor: #bfbfbfbfbfbf
|
||||||
|
@ -39,7 +39,7 @@ CGI annotation server.
|
|||||||
they're placed). Default is true.
|
they're placed). Default is true.
|
||||||
|
|
||||||
|
|
||||||
<DT> <b><A NAME="catchPriorAndNext">catchPriorAndNext</A></b>: <i>Boolean</i>
|
<DT> <b><A NAME="catchPriorAndNext">catchPriorAndNext</A></b>: <i>Boolean</i>
|
||||||
<DD> This resource controls whether use of the keys Prior and Next
|
<DD> This resource controls whether use of the keys Prior and Next
|
||||||
(Page Up and Page Down on most keyboards) are explicitly caught
|
(Page Up and Page Down on most keyboards) are explicitly caught
|
||||||
in the <A NAME=18 HREF="help-on-docview-window.html">Document
|
in the <A NAME=18 HREF="help-on-docview-window.html">Document
|
||||||
@ -57,10 +57,10 @@ CGI annotation server.
|
|||||||
|
|
||||||
<DT> <B>confirmDeleteAnnotation</B>: <I>Boolean</I>
|
<DT> <B>confirmDeleteAnnotation</B>: <I>Boolean</I>
|
||||||
<DD> If false, deleting annotations will not be confirmed via a
|
<DD> If false, deleting annotations will not be confirmed via a
|
||||||
confirmation dialog box. Default is true.
|
confirmation dialog box. Default is true.
|
||||||
|
|
||||||
<DT> <b>confirmExit</b>: <i>Boolean</i>
|
<DT> <b>confirmExit</b>: <i>Boolean</i>
|
||||||
<DD> Whether NCSA Mosaic will pop up a dialog box to confirm
|
<DD> Whether NCSA Mosaic will pop up a dialog box to confirm
|
||||||
exiting the program
|
exiting the program
|
||||||
when the 'Exit Program' menu option is chosen. Default is true.
|
when the 'Exit Program' menu option is chosen. Default is true.
|
||||||
|
|
||||||
@ -74,9 +74,9 @@ CGI annotation server.
|
|||||||
<DD> Default height in pixels for a Document View window. Default is 680.
|
<DD> Default height in pixels for a Document View window. Default is 680.
|
||||||
|
|
||||||
<DT> <b><A NAME="hotlist-file">defaultHotlistFile</A></b>: <i>string</i>
|
<DT> <b><A NAME="hotlist-file">defaultHotlistFile</A></b>: <i>string</i>
|
||||||
<DD> Name of file to store the
|
<DD> Name of file to store the
|
||||||
<A NAME=6 HREF="help-on-hotlist-view.html">default hotlist</A>
|
<A NAME=6 HREF="help-on-hotlist-view.html">default hotlist</A>
|
||||||
(or list of bookmarks).
|
(or list of bookmarks).
|
||||||
Default is ".mosaic-hotlist-default"; the value
|
Default is ".mosaic-hotlist-default"; the value
|
||||||
of the environment variable $HOME will be prepended to this string.
|
of the environment variable $HOME will be prepended to this string.
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ CGI annotation server.
|
|||||||
<DT> <B>delayImageLoads</B>: <I>Boolean</I> </a>
|
<DT> <B>delayImageLoads</B>: <I>Boolean</I> </a>
|
||||||
<DD> Delayed image loading is for users with slow network connections. If
|
<DD> Delayed image loading is for users with slow network connections. If
|
||||||
true, Mosaic substitutes a small icon for inlined-images, plus an arrow
|
true, Mosaic substitutes a small icon for inlined-images, plus an arrow
|
||||||
icon for inlined-images which also act as hyperlinks.
|
icon for inlined-images which also act as hyperlinks.
|
||||||
<I>Clicking</I> on an icon tells Mosaic to load that inlined-image, while
|
<I>Clicking</I> on an icon tells Mosaic to load that inlined-image, while
|
||||||
<I>clicking</I> on the arrow is equivalent to following the associated
|
<I>clicking</I> on the arrow is equivalent to following the associated
|
||||||
hyperlink. Selecting <I>Load Images in Current</I> from Mosaic's
|
hyperlink. Selecting <I>Load Images in Current</I> from Mosaic's
|
||||||
@ -96,23 +96,23 @@ CGI annotation server.
|
|||||||
<CODE>Options</CODE> menu. Default is false.
|
<CODE>Options</CODE> menu. Default is false.
|
||||||
|
|
||||||
<DT> <b>displayURLsNotTitles</b>: <i>Boolean</i>
|
<DT> <b>displayURLsNotTitles</b>: <i>Boolean</i>
|
||||||
<DD> If true, URL's will be displayed everywhere document titles are
|
<DD> If true, URL's will be displayed everywhere document titles are
|
||||||
usually displayed. Default is false.
|
usually displayed. Default is false.
|
||||||
|
|
||||||
<DT> <B>DocsDirectory</B>: <I>string</I>
|
<DT> <B>DocsDirectory</B>: <I>string</I>
|
||||||
<DD> Can be used to override the location of the help documents. Default is
|
<DD> Can be used to override the location of the help documents. Default is
|
||||||
NULL.
|
NULL.
|
||||||
|
|
||||||
<DT> <B>documentsMenuSpecfile</B>: <I>string</I>
|
<DT> <B>documentsMenuSpecfile</B>: <I>string</I>
|
||||||
<DD> Name of file which holds an optional "Documents Menu Specfile," to allow
|
<DD> Name of file which holds an optional "Documents Menu Specfile," to allow
|
||||||
sites to add their own <CODE>Documents</CODE> menu to Mosaic's menu bar.
|
sites to add their own <CODE>Documents</CODE> menu to Mosaic's menu bar.
|
||||||
For more information, see <A HREF="faq-documents-menu.html"> information
|
For more information, see <A HREF="faq-documents-menu.html"> information
|
||||||
on creating a configurable <CODE>Documents</CODE> menu.</A> Default is
|
on creating a configurable <CODE>Documents</CODE> menu.</A> Default is
|
||||||
"/usr/local/lib/mosaic/documents.menu"
|
"/usr/local/lib/mosaic/documents.menu"
|
||||||
|
|
||||||
<DT> <B>editCommand</B>: <I>string</I>
|
<DT> <B>editCommand</B>: <I>string</I>
|
||||||
<DD> Name of the editor to load when using the <I>File-Edit Source</I> option.
|
<DD> Name of the editor to load when using the <I>File-Edit Source</I> option.
|
||||||
This editor is loaded in an xterm, specified by the
|
This editor is loaded in an xterm, specified by the
|
||||||
<code>xtermCommand</code> resource. Default is vi.
|
<code>xtermCommand</code> resource. Default is vi.
|
||||||
|
|
||||||
<DT> <B>editCommandUseXterm</B>: <I>Boolean</I>
|
<DT> <B>editCommandUseXterm</B>: <I>Boolean</I>
|
||||||
@ -137,16 +137,16 @@ CGI annotation server.
|
|||||||
out it's own full hostname via gethostbyname(), it coredumps,
|
out it's own full hostname via gethostbyname(), it coredumps,
|
||||||
then you should set this resource to true. Default is false.
|
then you should set this resource to true. Default is false.
|
||||||
|
|
||||||
<DT> <B>globalExtensionMap</B>: <I>string</I>
|
<DT> <B>globalExtensionMap</B>: <I>string</I>
|
||||||
<DD> Can be set to the location of the system-wide <A
|
<DD> Can be set to the location of the system-wide <A
|
||||||
HREF="extension-map.html">extension map</A> config file of your choice.
|
HREF="extension-map.html">extension map</A> config file of your choice.
|
||||||
Default is "/usr/local/lib/mosaic/mime.types"
|
Default is "/usr/local/lib/mosaic/mime.types"
|
||||||
|
|
||||||
<DT> <b>globalHistoryFile</b>: <i>string</i>
|
<DT> <b>globalHistoryFile</b>: <i>string</i>
|
||||||
<DD> Name of file to store the global history of all documents visited
|
<DD> Name of file to store the global history of all documents visited
|
||||||
from session to session. Default is ".mosaic-global-history"; the value
|
from session to session. Default is ".mosaic-global-history"; the value
|
||||||
of the environment variable $HOME will be prepended to this string.
|
of the environment variable $HOME will be prepended to this string.
|
||||||
<DT> <B>globalTypeMap</B>: <I>string</I>
|
<DT> <B>globalTypeMap</B>: <I>string</I>
|
||||||
<DD> Can be set to the location of the system-wide <A
|
<DD> Can be set to the location of the system-wide <A
|
||||||
HREF="mailcap.html">mailcap</A> (type map config) file of your choice.
|
HREF="mailcap.html">mailcap</A> (type map config) file of your choice.
|
||||||
Default is "/usr/local/lib/mosaic/mailcap"
|
Default is "/usr/local/lib/mosaic/mailcap"
|
||||||
@ -158,20 +158,20 @@ CGI annotation server.
|
|||||||
HREF="ftp://boole.stanford.edu/pub/">boole.stanford.edu/pub/</A>.)
|
HREF="ftp://boole.stanford.edu/pub/">boole.stanford.edu/pub/</A>.)
|
||||||
|
|
||||||
<DT> <B>hdfMaxImageDimension</B>: <I>integer</I>
|
<DT> <B>hdfMaxImageDimension</B>: <I>integer</I>
|
||||||
<DD>
|
<DD>
|
||||||
Maximum height and/or width of an <A
|
Maximum height and/or width of an <A
|
||||||
HREF="http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/hdf-browsing.html">
|
HREF="http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/hdf-browsing.html">
|
||||||
HDF</A> inlined image in pixels. Default is 400.
|
HDF</A> inlined image in pixels. Default is 400.
|
||||||
|
|
||||||
<DT> <B>hdfMaxDisplayedDatasets</B>: <I>integer</I>
|
<DT> <B>hdfMaxDisplayedDatasets</B>: <I>integer</I>
|
||||||
<DD>
|
<DD>
|
||||||
Maximum number of displayed datasets while browsing <A
|
Maximum number of displayed datasets while browsing <A
|
||||||
HREF="http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/hdf-browsing.html">
|
HREF="http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/hdf-browsing.html">
|
||||||
HDF</A> files. Default is 15. If more than the maximum exist in an HDF
|
HDF</A> files. Default is 15. If more than the maximum exist in an HDF
|
||||||
file, Mosaic will display the HDF file in "brief mode."
|
file, Mosaic will display the HDF file in "brief mode."
|
||||||
|
|
||||||
<DT> <B>hdfMaxDisplayedAttributes</B>: <I>integer</I>
|
<DT> <B>hdfMaxDisplayedAttributes</B>: <I>integer</I>
|
||||||
<DD>
|
<DD>
|
||||||
Maximum number of displayed attributes while browsing <A
|
Maximum number of displayed attributes while browsing <A
|
||||||
HREF="http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/hdf-browsing.html">
|
HREF="http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/hdf-browsing.html">
|
||||||
HDF</A> files. Default is 10. If more than the max exist in an HDF file,
|
HDF</A> files. Default is 10. If more than the max exist in an HDF file,
|
||||||
@ -179,11 +179,11 @@ CGI annotation server.
|
|||||||
|
|
||||||
<DT> <B>hdfPowerUser</B>: <I>Boolean</I>
|
<DT> <B>hdfPowerUser</B>: <I>Boolean</I>
|
||||||
<DD> If true, most of the supporting text in an HDF file will be removed.
|
<DD> If true, most of the supporting text in an HDF file will be removed.
|
||||||
Default is false.
|
Default is false.
|
||||||
|
|
||||||
<DT> <b>homeDocument</b>: <i>string</i>
|
<DT> <b>homeDocument</b>: <i>string</i>
|
||||||
<DD> Document to access on program startup. Default is
|
<DD> Document to access on program startup. Default is
|
||||||
"http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/NCSAMosaicHome.html".
|
"http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/NCSAMosaicHome.html".
|
||||||
See also
|
See also
|
||||||
<A NAME=7 HREF="specifying-home.html">information on specifying your
|
<A NAME=7 HREF="specifying-home.html">information on specifying your
|
||||||
home document</A>.
|
home document</A>.
|
||||||
@ -214,28 +214,28 @@ CGI annotation server.
|
|||||||
<DD> Controls the maximum number of cci clients communicating with the browser.
|
<DD> Controls the maximum number of cci clients communicating with the browser.
|
||||||
Default is no limit.
|
Default is no limit.
|
||||||
|
|
||||||
<DT> <B>maxWaisResponses</B>: <I>integer</I>
|
<DT> <B>maxWaisResponses</B>: <I>integer</I>
|
||||||
<DD> Controls maximum number of matches Mosaic gets from a WAIS server.
|
<DD> Controls maximum number of matches Mosaic gets from a WAIS server.
|
||||||
Default is 200.
|
Default is 200.
|
||||||
|
|
||||||
<DT> <b><A NAME="personalAnnotationDirectory">personalAnnotationDirectory</A></b>:
|
<DT> <b><A NAME="personalAnnotationDirectory">personalAnnotationDirectory</A></b>:
|
||||||
<i>string</i>
|
<i>string</i>
|
||||||
<DD> Name of directory in which to store personal annotations (as well
|
<DD> Name of directory in which to store personal annotations (as well
|
||||||
as the log file of all personal annotations currently in existence).
|
as the log file of all personal annotations currently in existence).
|
||||||
Default is ".mosaic-personal-annotations"; the value
|
Default is ".mosaic-personal-annotations"; the value
|
||||||
of the environment variable $HOME will be prepended to this string.
|
of the environment variable $HOME will be prepended to this string.
|
||||||
(If the directory so named does not exist, it will be created;
|
(If the directory so named does not exist, it will be created;
|
||||||
however, intermediate directories, if any are named,
|
however, intermediate directories, if any are named,
|
||||||
will not be created.)
|
will not be created.)
|
||||||
|
|
||||||
<DT> <B>personalExtensionMap</B>: <I>string</I>
|
<DT> <B>personalExtensionMap</B>: <I>string</I>
|
||||||
<DD> Can be set to the location of the personal <A
|
<DD> Can be set to the location of the personal <A
|
||||||
HREF="extension-map.html">extension map</A> config file of
|
HREF="extension-map.html">extension map</A> config file of
|
||||||
your choice -- the value of the environment variable HOME is prepended to
|
your choice -- the value of the environment variable HOME is prepended to
|
||||||
this. Default is ".mime.types"
|
this. Default is ".mime.types"
|
||||||
|
|
||||||
|
|
||||||
<DT> <B>personalTypeMap</B>: <I>string</I>
|
<DT> <B>personalTypeMap</B>: <I>string</I>
|
||||||
<DD> Can be set to the location of the personal <A
|
<DD> Can be set to the location of the personal <A
|
||||||
HREF="mailcap.html">mailcap</A> file of your choice -- the value of the
|
HREF="mailcap.html">mailcap</A> file of your choice -- the value of the
|
||||||
environment variable <CODE>HOME</CODE> is prepended to this. Default is
|
environment variable <CODE>HOME</CODE> is prepended to this. Default is
|
||||||
@ -266,17 +266,17 @@ CGI annotation server.
|
|||||||
|
|
||||||
<DT> <B>reloadPragmaNoCache</B>: <I>Boolean</I>
|
<DT> <B>reloadPragmaNoCache</B>: <I>Boolean</I>
|
||||||
<DD> If true, Mosaic will send additional header info to notify a proxy
|
<DD> If true, Mosaic will send additional header info to notify a proxy
|
||||||
not to use cache. This only works with caching proxy servers.
|
not to use cache. This only works with caching proxy servers.
|
||||||
Default is false.
|
Default is false.
|
||||||
|
|
||||||
<DT> <B>reloadReloadsImages</B>: <I>Boolean</I>
|
<DT> <B>reloadReloadsImages</B>: <I>Boolean</I>
|
||||||
<DD> If true, the <I>Reload</I> option will clear out cached image data for
|
<DD> If true, the <I>Reload</I> option will clear out cached image data for
|
||||||
the current document before reloading the document, thus causing the
|
the current document before reloading the document, thus causing the
|
||||||
images to be reloaded also. This is most useful for HTML authors using
|
images to be reloaded also. This is most useful for HTML authors using
|
||||||
Mosaic to view their work. Default is false.
|
Mosaic to view their work. Default is false.
|
||||||
|
|
||||||
<A NAME="sendmail">
|
<A NAME="sendmail">
|
||||||
<DT> <B>sendmailCommand</B>: <I>string</I> </A>
|
<DT> <B>sendmailCommand</B>: <I>string</I> </A>
|
||||||
<DD> Points to the <CODE>sendmail</CODE> binary. The assumption is made that
|
<DD> Points to the <CODE>sendmail</CODE> binary. The assumption is made that
|
||||||
this program accepts command-line arguments specifying addresses to which
|
this program accepts command-line arguments specifying addresses to which
|
||||||
messages should be mailed, and accepts other headers and message text from
|
messages should be mailed, and accepts other headers and message text from
|
||||||
@ -287,11 +287,11 @@ CGI annotation server.
|
|||||||
<DD> Points to the signature file used when posting articles to newsgroups. This
|
<DD> Points to the signature file used when posting articles to newsgroups. This
|
||||||
file will be included whenever you post or followup. Default is no signature.
|
file will be included whenever you post or followup. Default is no signature.
|
||||||
|
|
||||||
<DT> <B>simpleInterface</B>: <I>Boolean</I>
|
<DT> <B>simpleInterface</B>: <I>Boolean</I>
|
||||||
<DD> Allows Mosaic's menu bar and bottom button configuration to be
|
<DD> Allows Mosaic's menu bar and bottom button configuration to be
|
||||||
considerably pared down (default is false).
|
considerably pared down (default is false).
|
||||||
|
|
||||||
<DT> <b><A NAME="tmpDirectory">tmpDirectory</A></b>: <i>string</i>
|
<DT> <b><A NAME="tmpDirectory">tmpDirectory</A></b>: <i>string</i>
|
||||||
<DD> Name of directory in which to store temporary files generated by
|
<DD> Name of directory in which to store temporary files generated by
|
||||||
Mosaic. This directory should have plenty of space, ideally
|
Mosaic. This directory should have plenty of space, ideally
|
||||||
at least 10 or 20 megabytes, in case you happen to pull down a
|
at least 10 or 20 megabytes, in case you happen to pull down a
|
||||||
@ -300,10 +300,10 @@ CGI annotation server.
|
|||||||
HREF="command-line-flags.html#tmpdir">-tmpdir</A> or setting
|
HREF="command-line-flags.html#tmpdir">-tmpdir</A> or setting
|
||||||
the environment variable <code>TMPDIR</code>.
|
the environment variable <code>TMPDIR</code>.
|
||||||
|
|
||||||
<DT> <B>trackFullURLs</B>: <I>Boolean</I>
|
<DT> <B>trackFullURLs</B>: <I>Boolean</I>
|
||||||
<DD> If set to false, enables prototypical smart display of "where you're
|
<DD> If set to false, enables prototypical smart display of "where you're
|
||||||
going" during mouse tracking, including format divination. Default is
|
going" during mouse tracking, including format divination. Default is
|
||||||
true.
|
true.
|
||||||
|
|
||||||
<DT> <B>trackPointerMotion</B>: <I>Boolean</I>
|
<DT> <B>trackPointerMotion</B>: <I>Boolean</I>
|
||||||
<DD> If set to false, the mouse pointer will not be tracked so that URLs
|
<DD> If set to false, the mouse pointer will not be tracked so that URLs
|
||||||
@ -322,12 +322,12 @@ CGI annotation server.
|
|||||||
Gopher typing system. When true, Mosaic will use its own mechanism
|
Gopher typing system. When true, Mosaic will use its own mechanism
|
||||||
to determine the file types of Gopher documents. Default is true.
|
to determine the file types of Gopher documents. Default is true.
|
||||||
|
|
||||||
<DT> <B>twirlIncrement</B>: <I>integer</I>
|
<DT> <B>twirlIncrement</B>: <I>integer</I>
|
||||||
<DD> Indicates how many bytes (minimum) are transferred between updates
|
<DD> Indicates how many bytes (minimum) are transferred between updates
|
||||||
of the twirling transfer icon for normal (FTP, Gopher, HTTP) transfers.
|
of the twirling transfer icon for normal (FTP, Gopher, HTTP) transfers.
|
||||||
Default is 4096.
|
Default is 4096.
|
||||||
|
|
||||||
<DT> <b>twirlingTransferIcon</b>: <I>Boolean</I>
|
<DT> <b>twirlingTransferIcon</b>: <I>Boolean</I>
|
||||||
<DD> Can be set to false to turn off the twirling NCSA logo during document
|
<DD> Can be set to false to turn off the twirling NCSA logo during document
|
||||||
transfers. <I>Clicking</I> the icon will still interrupt a transfer.
|
transfers. <I>Clicking</I> the icon will still interrupt a transfer.
|
||||||
Default is true.
|
Default is true.
|
||||||
@ -336,22 +336,22 @@ CGI annotation server.
|
|||||||
<DD> Command to use to uncompress compressed files (files with an
|
<DD> Command to use to uncompress compressed files (files with an
|
||||||
extension of '.Z'). Default is "uncompress"
|
extension of '.Z'). Default is "uncompress"
|
||||||
|
|
||||||
<DT> <B>useDefaultExtensionMap</B>: <I>Boolean</I>
|
<DT> <B>useDefaultExtensionMap</B>: <I>Boolean</I>
|
||||||
<DD> Can be set to false to keep Mosaic from having any default <A
|
<DD> Can be set to false to keep Mosaic from having any default <A
|
||||||
HREF="extension-map.html">file-extension-to-MIME-type mappings</A>. <I>
|
HREF="extension-map.html">file-extension-to-MIME-type mappings</A>. <I>
|
||||||
We strongly recommend that this resource be left true;</I> simply
|
We strongly recommend that this resource be left true;</I> simply
|
||||||
overridden as necessary. Default is true.
|
overridden as necessary. Default is true.
|
||||||
|
|
||||||
<DT> <B>useDefaultTypeMap</B>: <I>Boolean</I>
|
<DT> <B>useDefaultTypeMap</B>: <I>Boolean</I>
|
||||||
<DD> Can be set to false to keep Mosaic from having any default <A
|
<DD> Can be set to false to keep Mosaic from having any default <A
|
||||||
HREF="mailcap.html">MIME-type-to-external-viewer mappings</A>. <I>We
|
HREF="mailcap.html">MIME-type-to-external-viewer mappings</A>. <I>We
|
||||||
strongly recommend that this resource be left true</I>; simply overridden
|
strongly recommend that this resource be left true</I>; simply overridden
|
||||||
as necessary. Default is true.
|
as necessary. Default is true.
|
||||||
|
|
||||||
<DT> <b>useGlobalHistory</b>: <i>Boolean</i>
|
<DT> <b>useGlobalHistory</b>: <i>Boolean</i>
|
||||||
<DD> If true, a global history of everywhere you visit is automatically
|
<DD> If true, a global history of everywhere you visit is automatically
|
||||||
stored. (This history is used to
|
stored. (This history is used to
|
||||||
shade anchors different colors based on whether you've visited the
|
shade anchors different colors based on whether you've visited the
|
||||||
corresponding documents or not, if resource trackVisitedAnchors
|
corresponding documents or not, if resource trackVisitedAnchors
|
||||||
is set to true) Default is true.
|
is set to true) Default is true.
|
||||||
|
|
||||||
@ -378,7 +378,7 @@ NAME="widget-resources-note">you should specify them</A> in your
|
|||||||
<DT> <b>Background</b>: <i>color</i>
|
<DT> <b>Background</b>: <i>color</i>
|
||||||
<DD> Color for main background. Default is grey.
|
<DD> Color for main background. Default is grey.
|
||||||
<DT> <b>Foreground</b>: <i>color</i>
|
<DT> <b>Foreground</b>: <i>color</i>
|
||||||
<DD> Color for normal text. Default is black.
|
<DD> Color for normal text. Default is black.
|
||||||
<DT> <b>anchorColor</b>: <i>color</i>
|
<DT> <b>anchorColor</b>: <i>color</i>
|
||||||
<DD> Color to shade anchors whose corresponding documents haven't been previously visited. Default is blue3.
|
<DD> Color to shade anchors whose corresponding documents haven't been previously visited. Default is blue3.
|
||||||
<DT> <b>visitedAnchorColor</b>: <i>color</i>
|
<DT> <b>visitedAnchorColor</b>: <i>color</i>
|
||||||
@ -386,8 +386,8 @@ NAME="widget-resources-note">you should specify them</A> in your
|
|||||||
<DT> <b>activeAnchorFG</b>: <i>color</i>
|
<DT> <b>activeAnchorFG</b>: <i>color</i>
|
||||||
<DD> Color to shade anchors that are in the process of being activated. Default is red.
|
<DD> Color to shade anchors that are in the process of being activated. Default is red.
|
||||||
<DT> <b>activeAnchorBG</b>: <i>color</i>
|
<DT> <b>activeAnchorBG</b>: <i>color</i>
|
||||||
<DD> Color to shade the background of anchors that are in the
|
<DD> Color to shade the background of anchors that are in the
|
||||||
process of being activated. Default is grey80 (the same
|
process of being activated. Default is grey80 (the same
|
||||||
color as the application's background).
|
color as the application's background).
|
||||||
<DT> <b>anchorUnderlines</b>: <i>integer</i>
|
<DT> <b>anchorUnderlines</b>: <i>integer</i>
|
||||||
<DD> This can be one of {0, 1, 2, 3}, and indicates the number
|
<DD> This can be one of {0, 1, 2, 3}, and indicates the number
|
||||||
@ -418,7 +418,7 @@ NAME="widget-resources-note">you should specify them</A> in your
|
|||||||
bitmaps. Default is false.
|
bitmaps. Default is false.
|
||||||
|
|
||||||
<DT> <B>verticalScrollOnRight</B>: <I>Boolean</I>
|
<DT> <B>verticalScrollOnRight</B>: <I>Boolean</I>
|
||||||
<DD> If false, the Document View window will place its scroll bar on the
|
<DD> If false, the Document View window will place its scroll bar on the
|
||||||
left side. Default is true.
|
left side. Default is true.
|
||||||
|
|
||||||
</DL>
|
</DL>
|
||||||
@ -428,7 +428,7 @@ bitmaps. Default is false.
|
|||||||
|
|
||||||
Font resources are also resources that belong to the HTML widget, so
|
Font resources are also resources that belong to the HTML widget, so
|
||||||
the <A NAME=8 HREF="#widget-resources-note">above note</A> applies
|
the <A NAME=8 HREF="#widget-resources-note">above note</A> applies
|
||||||
here too. Note that fonts can be changed dynamically from the
|
here too. Note that fonts can be changed dynamically from the
|
||||||
<b>Options</b> menu</A>.
|
<b>Options</b> menu</A>.
|
||||||
|
|
||||||
<DL>
|
<DL>
|
||||||
@ -437,40 +437,40 @@ here too. Note that fonts can be changed dynamically from the
|
|||||||
to any of the font choices in the Options-Font menu. For example.
|
to any of the font choices in the Options-Font menu. For example.
|
||||||
<LISTING>Mosaic*defaultFontChoice: New Century Large</LISTING>
|
<LISTING>Mosaic*defaultFontChoice: New Century Large</LISTING>
|
||||||
<DT> <b>font</b>: <i>font</i>
|
<DT> <b>font</b>: <i>font</i>
|
||||||
<DD> Font used in normal formatted text.
|
<DD> Font used in normal formatted text.
|
||||||
Default is "-adobe-times-medium-r-normal-*-17-*-*-*-*-*-iso8859-1".
|
Default is "-adobe-times-medium-r-normal-*-17-*-*-*-*-*-iso8859-1".
|
||||||
<DT> <b>italicFont</b>: <i>font</i>
|
<DT> <b>italicFont</b>: <i>font</i>
|
||||||
<DD> Font used in italic formatted text.
|
<DD> Font used in italic formatted text.
|
||||||
Default is "-adobe-times-medium-i-normal-*-17-*-*-*-*-*-iso8859-1".
|
Default is "-adobe-times-medium-i-normal-*-17-*-*-*-*-*-iso8859-1".
|
||||||
<DT> <b>boldFont</b>: <i>font</i>
|
<DT> <b>boldFont</b>: <i>font</i>
|
||||||
<DD> Font used in bold formatted text.
|
<DD> Font used in bold formatted text.
|
||||||
Default is "-adobe-times-bold-r-normal-*-17-*-*-*-*-*-iso8859-1".
|
Default is "-adobe-times-bold-r-normal-*-17-*-*-*-*-*-iso8859-1".
|
||||||
<DT> <b>fixedFont</b>: <i>font</i>
|
<DT> <b>fixedFont</b>: <i>font</i>
|
||||||
<DD> Font used in fixed (typewriter style) formatted text.
|
<DD> Font used in fixed (typewriter style) formatted text.
|
||||||
Default is "-adobe-courier-medium-r-normal-*-17-*-*-*-*-*-iso8859-1".
|
Default is "-adobe-courier-medium-r-normal-*-17-*-*-*-*-*-iso8859-1".
|
||||||
<DT> <b>header1Font</b>: <i>font</i>
|
<DT> <b>header1Font</b>: <i>font</i>
|
||||||
<DD> Font used in level 1 headers.
|
<DD> Font used in level 1 headers.
|
||||||
Default is "-adobe-times-bold-r-normal-*-24-*-*-*-*-*-iso8859-1".
|
Default is "-adobe-times-bold-r-normal-*-24-*-*-*-*-*-iso8859-1".
|
||||||
<DT> <b>header2Font</b>: <i>font</i>
|
<DT> <b>header2Font</b>: <i>font</i>
|
||||||
<DD> Font used in level 2 headers.
|
<DD> Font used in level 2 headers.
|
||||||
Default is "-adobe-times-bold-r-normal-*-18-*-*-*-*-*-iso8859-1".
|
Default is "-adobe-times-bold-r-normal-*-18-*-*-*-*-*-iso8859-1".
|
||||||
<DT> <b>header3Font</b>: <i>font</i>
|
<DT> <b>header3Font</b>: <i>font</i>
|
||||||
<DD> Font used in level 3 headers.
|
<DD> Font used in level 3 headers.
|
||||||
Default is "-adobe-times-bold-r-normal-*-17-*-*-*-*-*-iso8859-1".
|
Default is "-adobe-times-bold-r-normal-*-17-*-*-*-*-*-iso8859-1".
|
||||||
<DT> <b>header4Font</b>: <i>font</i>
|
<DT> <b>header4Font</b>: <i>font</i>
|
||||||
<DD> Font used in level 4 headers.
|
<DD> Font used in level 4 headers.
|
||||||
Default is "-adobe-times-bold-r-normal-*-14-*-*-*-*-*-iso8859-1".
|
Default is "-adobe-times-bold-r-normal-*-14-*-*-*-*-*-iso8859-1".
|
||||||
<DT> <b>header5Font</b>: <i>font</i>
|
<DT> <b>header5Font</b>: <i>font</i>
|
||||||
<DD> Font used in level 5 headers.
|
<DD> Font used in level 5 headers.
|
||||||
Default is "-adobe-times-bold-r-normal-*-12-*-*-*-*-*-iso8859-1".
|
Default is "-adobe-times-bold-r-normal-*-12-*-*-*-*-*-iso8859-1".
|
||||||
<DT> <b>header6Font</b>: <i>font</i>
|
<DT> <b>header6Font</b>: <i>font</i>
|
||||||
<DD> Font used in level 6 headers.
|
<DD> Font used in level 6 headers.
|
||||||
Default is "-adobe-times-bold-r-normal-*-10-*-*-*-*-*-iso8859-1".
|
Default is "-adobe-times-bold-r-normal-*-10-*-*-*-*-*-iso8859-1".
|
||||||
<DT> <b>addressFont</b>: <i>font</i>
|
<DT> <b>addressFont</b>: <i>font</i>
|
||||||
<DD> Font used in addresses.
|
<DD> Font used in addresses.
|
||||||
Default is "-adobe-times-medium-i-normal-*-17-*-*-*-*-*-iso8859-1".
|
Default is "-adobe-times-medium-i-normal-*-17-*-*-*-*-*-iso8859-1".
|
||||||
<DT> <b>plainFont</b>: <i>font</i>
|
<DT> <b>plainFont</b>: <i>font</i>
|
||||||
<DD> Font used in plaintext regions or preformatted documents.
|
<DD> Font used in plaintext regions or preformatted documents.
|
||||||
Default is "-adobe-courier-medium-r-normal-*-14-*-*-*-*-*-iso8859-1".
|
Default is "-adobe-courier-medium-r-normal-*-14-*-*-*-*-*-iso8859-1".
|
||||||
<DT> <b>listingFont</b>: <i>font</i>
|
<DT> <b>listingFont</b>: <i>font</i>
|
||||||
<DD> Font used in listing regions. Default is "-adobe-courier-medium-r-normal-*-12-*-*-*-*-*-iso8859-1".
|
<DD> Font used in listing regions. Default is "-adobe-courier-medium-r-normal-*-12-*-*-*-*-*-iso8859-1".
|
||||||
@ -566,7 +566,7 @@ The following resources once did something, but not anymore. <P>
|
|||||||
|
|
||||||
<DT> <b>mailCommand</b>: <i>string</i>
|
<DT> <b>mailCommand</b>: <i>string</i>
|
||||||
<DD> Replaced in version 2.0 with <A HREF="#sendmail">sendmailCommand</A>
|
<DD> Replaced in version 2.0 with <A HREF="#sendmail">sendmailCommand</A>
|
||||||
resource.
|
resource.
|
||||||
|
|
||||||
<DT> <b><A NAME="warpPointerForIndex">warpPointerForIndex</A></b>:
|
<DT> <b><A NAME="warpPointerForIndex">warpPointerForIndex</A></b>:
|
||||||
<i>Boolean</i>
|
<i>Boolean</i>
|
||||||
@ -587,14 +587,14 @@ version of Mosaic to a 2.x version:</EM>
|
|||||||
<UL>
|
<UL>
|
||||||
<LI> The class name has been changed from <i>XMosaic</i> to <i>Mosaic</i>.
|
<LI> The class name has been changed from <i>XMosaic</i> to <i>Mosaic</i>.
|
||||||
Existing Mosaic 1.2 X resources and application defaults files should be
|
Existing Mosaic 1.2 X resources and application defaults files should be
|
||||||
modified accordingly.
|
modified accordingly.
|
||||||
<LI> Information on <A HREF="faq-broken.html#11">the removal of version 1.2
|
<LI> Information on <A HREF="faq-broken.html#11">the removal of version 1.2
|
||||||
multimedia X resources.</A>
|
multimedia X resources.</A>
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
|
|
||||||
<A HREF="mosaic-docs.html"><IMG SRC="up.xbm"> Back to top level Documentation
|
<A HREF="mosaic-docs.html"><IMG SRC="up.xbm"> Back to top level Documentation
|
||||||
Index</A>
|
Index</A>
|
||||||
<P>
|
<P>
|
||||||
|
|
||||||
Last Modified: 9 July 1995 <BR>
|
Last Modified: 9 July 1995 <BR>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# @configure_output@
|
# @configure_output@
|
||||||
# This file is used by Autoconf to make the real Makefile.
|
# This file is used by Autoconf to make the real Makefile.
|
||||||
# DO NOT EDIT THIS FILE!
|
# DO NOT EDIT THIS FILE!
|
||||||
# If you want to change something do it to the Makefile autoconf
|
# If you want to change something do it to the Makefile autoconf
|
||||||
# creates. You should never have to edit this file.
|
# creates. You should never have to edit this file.
|
||||||
|
|
||||||
CC= @CC@
|
CC= @CC@
|
||||||
|
222
libXmx/Xmx.c
222
libXmx/Xmx.c
@ -171,7 +171,7 @@ void
|
|||||||
XmxAddEventHandler (Widget w, EventMask event_mask, XtEventHandler proc,
|
XmxAddEventHandler (Widget w, EventMask event_mask, XtEventHandler proc,
|
||||||
int client_data)
|
int client_data)
|
||||||
{
|
{
|
||||||
XtAddEventHandler
|
XtAddEventHandler
|
||||||
(w, event_mask, False, proc, (XtPointer)_XmxMakeClientData (client_data));
|
(w, event_mask, False, proc, (XtPointer)_XmxMakeClientData (client_data));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -195,19 +195,19 @@ XmxRemoveEventHandler (Widget w, EventMask event_mask, XtEventHandler proc,
|
|||||||
/* Adapted from Dan Heller's post in comp.windows.x.motif;
|
/* Adapted from Dan Heller's post in comp.windows.x.motif;
|
||||||
assumes BulletinBoard with one (centered) child. */
|
assumes BulletinBoard with one (centered) child. */
|
||||||
static void
|
static void
|
||||||
XmxCenteringResize
|
XmxCenteringResize
|
||||||
(CompositeWidget w, XConfigureEvent *event, String args[], int *num_args)
|
(CompositeWidget w, XConfigureEvent *event, String args[], int *num_args)
|
||||||
{
|
{
|
||||||
WidgetList children;
|
WidgetList children;
|
||||||
int width = event->width;
|
int width = event->width;
|
||||||
int height = event->height;
|
int height = event->height;
|
||||||
Dimension w_width, w_height;
|
Dimension w_width, w_height;
|
||||||
|
|
||||||
/* get handle to BulletinBoard's children and marginal spacing */
|
/* get handle to BulletinBoard's children and marginal spacing */
|
||||||
XtVaGetValues (w,
|
XtVaGetValues (w,
|
||||||
XmNchildren, &children,
|
XmNchildren, &children,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
XtVaGetValues (children[0],
|
XtVaGetValues (children[0],
|
||||||
XmNheight, &w_height,
|
XmNheight, &w_height,
|
||||||
XmNwidth, &w_width,
|
XmNwidth, &w_width,
|
||||||
@ -216,7 +216,7 @@ XmxCenteringResize
|
|||||||
XmNx, width/2 - w_width/2,
|
XmNx, width/2 - w_width/2,
|
||||||
XmNy, height/2 - w_height/2,
|
XmNy, height/2 - w_height/2,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,7 +257,7 @@ void XmxManageRemanage (Widget w)
|
|||||||
XtUnmanageChild (w);
|
XtUnmanageChild (w);
|
||||||
XtManageChild (w);
|
XtManageChild (w);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (XtIsManaged (w))
|
if (XtIsManaged (w))
|
||||||
if (XtIsShell(w))
|
if (XtIsShell(w))
|
||||||
XRaiseWindow (XtDisplay (w), XtWindow (w));
|
XRaiseWindow (XtDisplay (w), XtWindow (w));
|
||||||
@ -297,7 +297,7 @@ Widget XmxMakePushButton (Widget parent, String name, XtCallbackProc cb,
|
|||||||
}
|
}
|
||||||
Xmx_w = XtCreateManagedWidget ("pushbutton", xmPushButtonWidgetClass,
|
Xmx_w = XtCreateManagedWidget ("pushbutton", xmPushButtonWidgetClass,
|
||||||
parent, Xmx_wargs, Xmx_n);
|
parent, Xmx_wargs, Xmx_n);
|
||||||
XtAddCallback (Xmx_w, XmNactivateCallback, cb,
|
XtAddCallback (Xmx_w, XmNactivateCallback, cb,
|
||||||
(XtPointer)_XmxMakeClientData (cb_data));
|
(XtPointer)_XmxMakeClientData (cb_data));
|
||||||
|
|
||||||
if (xmstr)
|
if (xmstr)
|
||||||
@ -308,12 +308,12 @@ Widget XmxMakePushButton (Widget parent, String name, XtCallbackProc cb,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* args work */
|
/* args work */
|
||||||
Widget XmxMakeNamedPushButton (Widget parent, String name, String wname,
|
Widget XmxMakeNamedPushButton (Widget parent, String name, String wname,
|
||||||
XtCallbackProc cb,
|
XtCallbackProc cb,
|
||||||
int cb_data)
|
int cb_data)
|
||||||
{
|
{
|
||||||
XmString label;
|
XmString label;
|
||||||
|
|
||||||
if (name)
|
if (name)
|
||||||
{
|
{
|
||||||
label = XmStringCreateLtoR (name, XmSTRING_DEFAULT_CHARSET);
|
label = XmStringCreateLtoR (name, XmSTRING_DEFAULT_CHARSET);
|
||||||
@ -321,7 +321,7 @@ Widget XmxMakeNamedPushButton (Widget parent, String name, String wname,
|
|||||||
}
|
}
|
||||||
Xmx_w = XtCreateManagedWidget (wname, xmPushButtonWidgetClass,
|
Xmx_w = XtCreateManagedWidget (wname, xmPushButtonWidgetClass,
|
||||||
parent, Xmx_wargs, Xmx_n);
|
parent, Xmx_wargs, Xmx_n);
|
||||||
XtAddCallback (Xmx_w, XmNactivateCallback, cb,
|
XtAddCallback (Xmx_w, XmNactivateCallback, cb,
|
||||||
(XtPointer)_XmxMakeClientData (cb_data));
|
(XtPointer)_XmxMakeClientData (cb_data));
|
||||||
if (name)
|
if (name)
|
||||||
XmStringFree (label);
|
XmStringFree (label);
|
||||||
@ -336,9 +336,9 @@ Widget XmxMakeBlankButton (Widget parent, XtCallbackProc cb,
|
|||||||
{
|
{
|
||||||
Xmx_w = XtCreateManagedWidget ("blankbutton", xmPushButtonWidgetClass,
|
Xmx_w = XtCreateManagedWidget ("blankbutton", xmPushButtonWidgetClass,
|
||||||
parent, Xmx_wargs, Xmx_n);
|
parent, Xmx_wargs, Xmx_n);
|
||||||
XtAddCallback (Xmx_w, XmNactivateCallback, cb,
|
XtAddCallback (Xmx_w, XmNactivateCallback, cb,
|
||||||
(XtPointer)_XmxMakeClientData (cb_data));
|
(XtPointer)_XmxMakeClientData (cb_data));
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
return Xmx_w;
|
return Xmx_w;
|
||||||
}
|
}
|
||||||
@ -346,7 +346,7 @@ Widget XmxMakeBlankButton (Widget parent, XtCallbackProc cb,
|
|||||||
/* ------------------------------- COMMAND -------------------------------- */
|
/* ------------------------------- COMMAND -------------------------------- */
|
||||||
|
|
||||||
/* args work */
|
/* args work */
|
||||||
Widget XmxMakeCommand
|
Widget XmxMakeCommand
|
||||||
(Widget parent, String prompt, XtCallbackProc cb, int cb_data)
|
(Widget parent, String prompt, XtCallbackProc cb, int cb_data)
|
||||||
{
|
{
|
||||||
XmString xmstr = XmxMakeXmstrFromString (prompt);
|
XmString xmstr = XmxMakeXmstrFromString (prompt);
|
||||||
@ -354,8 +354,8 @@ Widget XmxMakeCommand
|
|||||||
XmxSetArg (XmNpromptString, (XtArgVal)xmstr);
|
XmxSetArg (XmNpromptString, (XtArgVal)xmstr);
|
||||||
Xmx_w = XtCreateManagedWidget ("command", xmCommandWidgetClass, parent,
|
Xmx_w = XtCreateManagedWidget ("command", xmCommandWidgetClass, parent,
|
||||||
Xmx_wargs, Xmx_n);
|
Xmx_wargs, Xmx_n);
|
||||||
XtAddCallback
|
XtAddCallback
|
||||||
(Xmx_w, XmNcommandEnteredCallback, cb,
|
(Xmx_w, XmNcommandEnteredCallback, cb,
|
||||||
(XtPointer)_XmxMakeClientData (cb_data));
|
(XtPointer)_XmxMakeClientData (cb_data));
|
||||||
|
|
||||||
XmStringFree (xmstr);
|
XmStringFree (xmstr);
|
||||||
@ -376,7 +376,7 @@ Widget XmxMakeScrolledList
|
|||||||
along with it... */
|
along with it... */
|
||||||
XtAddCallback (Xmx_w, XmNdefaultActionCallback, cb,
|
XtAddCallback (Xmx_w, XmNdefaultActionCallback, cb,
|
||||||
(XtPointer)_XmxMakeClientData (cb_data));
|
(XtPointer)_XmxMakeClientData (cb_data));
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
return Xmx_w;
|
return Xmx_w;
|
||||||
}
|
}
|
||||||
@ -433,7 +433,7 @@ Widget XmxMakeToggleButton (Widget parent, String name, XtCallbackProc cb,
|
|||||||
("togglebutton", xmToggleButtonWidgetClass, parent, Xmx_wargs, Xmx_n);
|
("togglebutton", xmToggleButtonWidgetClass, parent, Xmx_wargs, Xmx_n);
|
||||||
/* Used to be XmNarmCallback --- probably not right. */
|
/* Used to be XmNarmCallback --- probably not right. */
|
||||||
if (cb)
|
if (cb)
|
||||||
XtAddCallback (Xmx_w, XmNvalueChangedCallback, cb,
|
XtAddCallback (Xmx_w, XmNvalueChangedCallback, cb,
|
||||||
(XtPointer)_XmxMakeClientData (cb_data));
|
(XtPointer)_XmxMakeClientData (cb_data));
|
||||||
|
|
||||||
XmStringFree (label);
|
XmStringFree (label);
|
||||||
@ -446,7 +446,7 @@ Widget XmxMakeToggleButton (Widget parent, String name, XtCallbackProc cb,
|
|||||||
void XmxSetToggleButton (Widget button, int set_state)
|
void XmxSetToggleButton (Widget button, int set_state)
|
||||||
{
|
{
|
||||||
assert (set_state == XmxSet || set_state == XmxUnset);
|
assert (set_state == XmxSet || set_state == XmxUnset);
|
||||||
XmToggleButtonSetState
|
XmToggleButtonSetState
|
||||||
(button, (set_state == XmxSet) ? True : False, False);
|
(button, (set_state == XmxSet) ? True : False, False);
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
@ -478,10 +478,10 @@ Widget XmxMakeScale (Widget parent, XtCallbackProc cb, int cb_data,
|
|||||||
Xmx_w = XtCreateManagedWidget ("scale", xmScaleWidgetClass, parent,
|
Xmx_w = XtCreateManagedWidget ("scale", xmScaleWidgetClass, parent,
|
||||||
Xmx_wargs, Xmx_n);
|
Xmx_wargs, Xmx_n);
|
||||||
|
|
||||||
XtAddCallback
|
XtAddCallback
|
||||||
(Xmx_w, XmNvalueChangedCallback, cb,
|
(Xmx_w, XmNvalueChangedCallback, cb,
|
||||||
(XtPointer)_XmxMakeClientData (cb_data));
|
(XtPointer)_XmxMakeClientData (cb_data));
|
||||||
XtAddCallback (Xmx_w, XmNdragCallback, cb,
|
XtAddCallback (Xmx_w, XmNdragCallback, cb,
|
||||||
(XtPointer)_XmxMakeClientData (cb_data));
|
(XtPointer)_XmxMakeClientData (cb_data));
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
@ -573,7 +573,7 @@ void XmxSetOffsets (Widget w, int top, int bottom, int left, int right)
|
|||||||
XmxSetArg (XmNleftOffset, (XtArgVal)left);
|
XmxSetArg (XmNleftOffset, (XtArgVal)left);
|
||||||
if (right != XmxNoOffset)
|
if (right != XmxNoOffset)
|
||||||
XmxSetArg (XmNrightOffset, (XtArgVal)right);
|
XmxSetArg (XmNrightOffset, (XtArgVal)right);
|
||||||
|
|
||||||
XmxSetValues (w);
|
XmxSetValues (w);
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
@ -581,7 +581,7 @@ void XmxSetOffsets (Widget w, int top, int bottom, int left, int right)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* args sent to w */
|
/* args sent to w */
|
||||||
void XmxSetConstraints (Widget w,
|
void XmxSetConstraints (Widget w,
|
||||||
int top, int bottom, int left, int right,
|
int top, int bottom, int left, int right,
|
||||||
Widget topw, Widget botw, Widget lefw, Widget rigw)
|
Widget topw, Widget botw, Widget lefw, Widget rigw)
|
||||||
{
|
{
|
||||||
@ -591,7 +591,7 @@ void XmxSetConstraints (Widget w,
|
|||||||
if (topw)
|
if (topw)
|
||||||
XmxSetArg (XmNtopWidget, (XtArgVal)topw);
|
XmxSetArg (XmNtopWidget, (XtArgVal)topw);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bottom != XmATTACH_NONE)
|
if (bottom != XmATTACH_NONE)
|
||||||
{
|
{
|
||||||
XmxSetArg (XmNbottomAttachment, (XtArgVal)bottom);
|
XmxSetArg (XmNbottomAttachment, (XtArgVal)bottom);
|
||||||
@ -612,7 +612,7 @@ void XmxSetConstraints (Widget w,
|
|||||||
if (rigw)
|
if (rigw)
|
||||||
XmxSetArg (XmNrightWidget, (XtArgVal)rigw);
|
XmxSetArg (XmNrightWidget, (XtArgVal)rigw);
|
||||||
}
|
}
|
||||||
|
|
||||||
XmxSetValues (w);
|
XmxSetValues (w);
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
@ -705,7 +705,7 @@ Widget XmxMakeCenteringBboard (Widget parent, XtAppContext app)
|
|||||||
{
|
{
|
||||||
XtActionsRec rec;
|
XtActionsRec rec;
|
||||||
|
|
||||||
Xmx_w = XtCreateManagedWidget
|
Xmx_w = XtCreateManagedWidget
|
||||||
("bboard", xmBulletinBoardWidgetClass, parent, Xmx_wargs, Xmx_n);
|
("bboard", xmBulletinBoardWidgetClass, parent, Xmx_wargs, Xmx_n);
|
||||||
|
|
||||||
/* Does this have to happen more than once? */
|
/* Does this have to happen more than once? */
|
||||||
@ -714,9 +714,9 @@ Widget XmxMakeCenteringBboard (Widget parent, XtAppContext app)
|
|||||||
XtAppAddActions (app, &rec, 1);
|
XtAppAddActions (app, &rec, 1);
|
||||||
|
|
||||||
/* This does, for sure... */
|
/* This does, for sure... */
|
||||||
XtOverrideTranslations
|
XtOverrideTranslations
|
||||||
(Xmx_w, XtParseTranslationTable ("<Configure>: resize()"));
|
(Xmx_w, XtParseTranslationTable ("<Configure>: resize()"));
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
return Xmx_w;
|
return Xmx_w;
|
||||||
}
|
}
|
||||||
@ -830,9 +830,9 @@ Widget XmxMakeQuestionDialog (Widget parent, String question, String title,
|
|||||||
Xmx_w = XmCreateQuestionDialog (parent, "question", Xmx_wargs, Xmx_n);
|
Xmx_w = XmCreateQuestionDialog (parent, "question", Xmx_wargs, Xmx_n);
|
||||||
XtUnmanageChild (XmMessageBoxGetChild (Xmx_w, XmDIALOG_HELP_BUTTON));
|
XtUnmanageChild (XmMessageBoxGetChild (Xmx_w, XmDIALOG_HELP_BUTTON));
|
||||||
|
|
||||||
XtAddCallback (Xmx_w, XmNcancelCallback, cb,
|
XtAddCallback (Xmx_w, XmNcancelCallback, cb,
|
||||||
(XtPointer)_XmxMakeClientData (no_token));
|
(XtPointer)_XmxMakeClientData (no_token));
|
||||||
XtAddCallback (Xmx_w, XmNokCallback, cb,
|
XtAddCallback (Xmx_w, XmNokCallback, cb,
|
||||||
(XtPointer)_XmxMakeClientData (yes_token));
|
(XtPointer)_XmxMakeClientData (yes_token));
|
||||||
|
|
||||||
XmStringFree (message);
|
XmStringFree (message);
|
||||||
@ -921,21 +921,21 @@ Widget XmxMakeFileSBDialog (Widget parent, String title, String selection_txt,
|
|||||||
XmxSetArg (XmNdialogTitle, (XtArgVal)dialog_title);
|
XmxSetArg (XmNdialogTitle, (XtArgVal)dialog_title);
|
||||||
/* Can't set width of box with XmNwidth here... why not? */
|
/* Can't set width of box with XmNwidth here... why not? */
|
||||||
|
|
||||||
/* this will cause the dialog to only resize if needed. That
|
/* this will cause the dialog to only resize if needed. That
|
||||||
way it won't be growing and shrinking all the time... very annoying. - DXP */
|
way it won't be growing and shrinking all the time... very annoying. - DXP */
|
||||||
XmxSetArg (XmNresizePolicy, (XtArgVal)XmRESIZE_GROW);
|
XmxSetArg (XmNresizePolicy, (XtArgVal)XmRESIZE_GROW);
|
||||||
|
|
||||||
/* Create the FileSelectionBox with OK and Cancel buttons. */
|
/* Create the FileSelectionBox with OK and Cancel buttons. */
|
||||||
Xmx_w = XmCreateFileSelectionDialog (parent, "fsb", Xmx_wargs, Xmx_n);
|
Xmx_w = XmCreateFileSelectionDialog (parent, "fsb", Xmx_wargs, Xmx_n);
|
||||||
XtUnmanageChild (XmFileSelectionBoxGetChild (Xmx_w, XmDIALOG_HELP_BUTTON));
|
XtUnmanageChild (XmFileSelectionBoxGetChild (Xmx_w, XmDIALOG_HELP_BUTTON));
|
||||||
XtAddCallback (Xmx_w, XmNokCallback, cb,
|
XtAddCallback (Xmx_w, XmNokCallback, cb,
|
||||||
(XtPointer)_XmxMakeClientData (cb_data));
|
(XtPointer)_XmxMakeClientData (cb_data));
|
||||||
XtAddCallback (Xmx_w, XmNcancelCallback,
|
XtAddCallback (Xmx_w, XmNcancelCallback,
|
||||||
(XtCallbackProc)_XmxCancelCallback, 0);
|
(XtCallbackProc)_XmxCancelCallback, 0);
|
||||||
|
|
||||||
/* Set selection label to specified selection_txt. */
|
/* Set selection label to specified selection_txt. */
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
_selection_label =
|
_selection_label =
|
||||||
XmFileSelectionBoxGetChild (Xmx_w, XmDIALOG_SELECTION_LABEL);
|
XmFileSelectionBoxGetChild (Xmx_w, XmDIALOG_SELECTION_LABEL);
|
||||||
XmxSetArg (XmNlabelString, (XtArgVal)label);
|
XmxSetArg (XmNlabelString, (XtArgVal)label);
|
||||||
XtSetValues (_selection_label, Xmx_wargs, Xmx_n);
|
XtSetValues (_selection_label, Xmx_wargs, Xmx_n);
|
||||||
@ -977,7 +977,7 @@ XmxCallback(_XmxHelpTextCancelCallback)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* args work */
|
/* args work */
|
||||||
Widget XmxMakeHelpTextDialog
|
Widget XmxMakeHelpTextDialog
|
||||||
(Widget parent, String str, String title, Widget *text_w)
|
(Widget parent, String str, String title, Widget *text_w)
|
||||||
{
|
{
|
||||||
Widget _box, _outer_frame, _form;
|
Widget _box, _outer_frame, _form;
|
||||||
@ -1013,17 +1013,17 @@ Widget XmxMakeHelpTextDialog
|
|||||||
_sep = XmxMakeHorizontalSeparator (_form);
|
_sep = XmxMakeHorizontalSeparator (_form);
|
||||||
|
|
||||||
/* Make an OK button. */
|
/* Make an OK button. */
|
||||||
_buttons_form = XmxMakeFormAndOneButton
|
_buttons_form = XmxMakeFormAndOneButton
|
||||||
(_form, _XmxHelpTextCancelCallback, "OK", 0);
|
(_form, _XmxHelpTextCancelCallback, "OK", 0);
|
||||||
|
|
||||||
/* Constraints for _form. */
|
/* Constraints for _form. */
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(XtParent (_scr_text), XmATTACH_FORM, XmATTACH_WIDGET, XmATTACH_FORM,
|
(XtParent (_scr_text), XmATTACH_FORM, XmATTACH_WIDGET, XmATTACH_FORM,
|
||||||
XmATTACH_FORM, NULL, _sep, NULL, NULL);
|
XmATTACH_FORM, NULL, _sep, NULL, NULL);
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_sep, XmATTACH_NONE, XmATTACH_WIDGET, XmATTACH_FORM, XmATTACH_FORM,
|
(_sep, XmATTACH_NONE, XmATTACH_WIDGET, XmATTACH_FORM, XmATTACH_FORM,
|
||||||
NULL, _buttons_form, NULL, NULL);
|
NULL, _buttons_form, NULL, NULL);
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_buttons_form, XmATTACH_NONE, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_FORM,
|
(_buttons_form, XmATTACH_NONE, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_FORM,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
|
|
||||||
@ -1082,7 +1082,7 @@ Widget XmxMakeHorizontalSpacer (Widget parent)
|
|||||||
XmString label = XmStringCreateLtoR (" ", XmSTRING_DEFAULT_CHARSET);
|
XmString label = XmStringCreateLtoR (" ", XmSTRING_DEFAULT_CHARSET);
|
||||||
|
|
||||||
XmxSetArg (XmNlabelString, (XtArgVal)label);
|
XmxSetArg (XmNlabelString, (XtArgVal)label);
|
||||||
Xmx_w = XtCreateManagedWidget ("label", xmLabelGadgetClass, parent,
|
Xmx_w = XtCreateManagedWidget ("label", xmLabelGadgetClass, parent,
|
||||||
Xmx_wargs, Xmx_n);
|
Xmx_wargs, Xmx_n);
|
||||||
|
|
||||||
XmStringFree (label);
|
XmStringFree (label);
|
||||||
@ -1113,7 +1113,7 @@ Widget XmxMakeScrolledText (Widget parent)
|
|||||||
Xmx_wargs, Xmx_n);
|
Xmx_wargs, Xmx_n);
|
||||||
XtManageChild (Xmx_w);
|
XtManageChild (Xmx_w);
|
||||||
|
|
||||||
/* Remember this returns the Text Widget, NOT the ScrolledWindow Widget,
|
/* Remember this returns the Text Widget, NOT the ScrolledWindow Widget,
|
||||||
which is what needs to be tied into a form. Use XtParent to get the
|
which is what needs to be tied into a form. Use XtParent to get the
|
||||||
actual ScrolledWindow. */
|
actual ScrolledWindow. */
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
@ -1165,7 +1165,7 @@ String XmxTextGetString (Widget text)
|
|||||||
/* args do nothing */
|
/* args do nothing */
|
||||||
void XmxAddCallbackToText (Widget text, XtCallbackProc cb, int cb_data)
|
void XmxAddCallbackToText (Widget text, XtCallbackProc cb, int cb_data)
|
||||||
{
|
{
|
||||||
XtAddCallback (text, XmNactivateCallback, cb,
|
XtAddCallback (text, XmNactivateCallback, cb,
|
||||||
(XtPointer)_XmxMakeClientData (cb_data));
|
(XtPointer)_XmxMakeClientData (cb_data));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1178,7 +1178,7 @@ void XmxAddCallbackToText (Widget text, XtCallbackProc cb, int cb_data)
|
|||||||
#ifdef __sgi
|
#ifdef __sgi
|
||||||
/* args work */
|
/* args work */
|
||||||
Widget
|
Widget
|
||||||
XmxMakeDrawingVolume
|
XmxMakeDrawingVolume
|
||||||
(Widget parent, int width, int height,
|
(Widget parent, int width, int height,
|
||||||
GLXconfig *glxConfig,
|
GLXconfig *glxConfig,
|
||||||
XtCallbackProc redraw_cb, XtCallbackProc resize_cb,
|
XtCallbackProc redraw_cb, XtCallbackProc resize_cb,
|
||||||
@ -1191,11 +1191,11 @@ XmxMakeDrawingVolume
|
|||||||
Xmx_w = GlxCreateMDraw (parent, "drawingvolume", Xmx_wargs, Xmx_n);
|
Xmx_w = GlxCreateMDraw (parent, "drawingvolume", Xmx_wargs, Xmx_n);
|
||||||
XtManageChild (Xmx_w);
|
XtManageChild (Xmx_w);
|
||||||
|
|
||||||
XtAddCallback (Xmx_w, GlxNexposeCallback, redraw_cb,
|
XtAddCallback (Xmx_w, GlxNexposeCallback, redraw_cb,
|
||||||
(XtPointer)_XmxMakeClientData (0));
|
(XtPointer)_XmxMakeClientData (0));
|
||||||
XtAddCallback (Xmx_w, GlxNresizeCallback, resize_cb,
|
XtAddCallback (Xmx_w, GlxNresizeCallback, resize_cb,
|
||||||
(XtPointer)_XmxMakeClientData (0));
|
(XtPointer)_XmxMakeClientData (0));
|
||||||
XtAddCallback (Xmx_w, GlxNginitCallback, ginit_cb,
|
XtAddCallback (Xmx_w, GlxNginitCallback, ginit_cb,
|
||||||
(XtPointer)_XmxMakeClientData (0));
|
(XtPointer)_XmxMakeClientData (0));
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
@ -1219,7 +1219,7 @@ void XmxInstallColormapsWithOverlay (Widget toplevel, Widget glw)
|
|||||||
Window overlay, popup, underlay;
|
Window overlay, popup, underlay;
|
||||||
Arg args[5];
|
Arg args[5];
|
||||||
register int i=0;
|
register int i=0;
|
||||||
|
|
||||||
i=0;
|
i=0;
|
||||||
XtSetArg(args[i], GlxNoverlayWindow, &overlay); i++;
|
XtSetArg(args[i], GlxNoverlayWindow, &overlay); i++;
|
||||||
XtSetArg(args[i], GlxNpopupWindow, &popup); i++;
|
XtSetArg(args[i], GlxNpopupWindow, &popup); i++;
|
||||||
@ -1244,7 +1244,7 @@ void XmxInstallColormapsWithOverlay (Widget toplevel, Widget glw)
|
|||||||
windows[i] = XtWindow(glw); i++;
|
windows[i] = XtWindow(glw); i++;
|
||||||
windows[i] = XtWindow(toplevel); i++;
|
windows[i] = XtWindow(toplevel); i++;
|
||||||
XSetWMColormapWindows(XtDisplay(toplevel), XtWindow(toplevel), windows, i);
|
XSetWMColormapWindows(XtDisplay(toplevel), XtWindow(toplevel), windows, i);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1271,11 +1271,11 @@ XmxMakeDrawingVolume
|
|||||||
("drawingvolume", glibWidgetClass, parent, Xmx_wargs, Xmx_n);
|
("drawingvolume", glibWidgetClass, parent, Xmx_wargs, Xmx_n);
|
||||||
XtManageChild (Xmx_w);
|
XtManageChild (Xmx_w);
|
||||||
|
|
||||||
XtAddCallback (Xmx_w, XglNexposeCallback, redraw_cb,
|
XtAddCallback (Xmx_w, XglNexposeCallback, redraw_cb,
|
||||||
(XtPointer)_XmxMakeClientData (0));
|
(XtPointer)_XmxMakeClientData (0));
|
||||||
XtAddCallback (Xmx_w, XglNresizeCallback, resize_cb,
|
XtAddCallback (Xmx_w, XglNresizeCallback, resize_cb,
|
||||||
(XtPointer)_XmxMakeClientData (0));
|
(XtPointer)_XmxMakeClientData (0));
|
||||||
XtAddCallback (Xmx_w, XglNgconfigCallback, ginit_cb,
|
XtAddCallback (Xmx_w, XglNgconfigCallback, ginit_cb,
|
||||||
(XtPointer)_XmxMakeClientData (0));
|
(XtPointer)_XmxMakeClientData (0));
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
@ -1363,7 +1363,7 @@ void XmxApplyPixmapToLabelWidget
|
|||||||
/* ------------------------ DIALOG CONTROL BUTTONS ------------------------ */
|
/* ------------------------ DIALOG CONTROL BUTTONS ------------------------ */
|
||||||
|
|
||||||
/* args apply to form */
|
/* args apply to form */
|
||||||
Widget XmxMakeFormAndOneButton (Widget parent, XtCallbackProc cb,
|
Widget XmxMakeFormAndOneButton (Widget parent, XtCallbackProc cb,
|
||||||
String name1, int cb_data1)
|
String name1, int cb_data1)
|
||||||
{
|
{
|
||||||
Widget _form, _button1;
|
Widget _form, _button1;
|
||||||
@ -1374,19 +1374,19 @@ Widget XmxMakeFormAndOneButton (Widget parent, XtCallbackProc cb,
|
|||||||
|
|
||||||
_button1 = XmxMakePushButton (_form, name1, cb, cb_data1);
|
_button1 = XmxMakePushButton (_form, name1, cb, cb_data1);
|
||||||
|
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button1, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button1, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetPositions (_button1, XmxNoPosition, XmxNoPosition, 1, 2);
|
XmxSetPositions (_button1, XmxNoPosition, XmxNoPosition, 1, 2);
|
||||||
XmxSetOffsets (_button1, XmxNoOffset, XmxNoOffset, 8, 8);
|
XmxSetOffsets (_button1, XmxNoOffset, XmxNoOffset, 8, 8);
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
Xmx_w = _form;
|
Xmx_w = _form;
|
||||||
return Xmx_w;
|
return Xmx_w;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* args apply to form */
|
/* args apply to form */
|
||||||
Widget XmxMakeFormAndTwoButtons
|
Widget XmxMakeFormAndTwoButtons
|
||||||
(Widget parent, XtCallbackProc cb,
|
(Widget parent, XtCallbackProc cb,
|
||||||
String name1, String name2,
|
String name1, String name2,
|
||||||
int cb_data1, int cb_data2)
|
int cb_data1, int cb_data2)
|
||||||
@ -1400,17 +1400,17 @@ Widget XmxMakeFormAndTwoButtons
|
|||||||
_button1 = XmxMakePushButton (_form, name1, cb, cb_data1);
|
_button1 = XmxMakePushButton (_form, name1, cb, cb_data1);
|
||||||
_button2 = XmxMakePushButton (_form, name2, cb, cb_data2);
|
_button2 = XmxMakePushButton (_form, name2, cb, cb_data2);
|
||||||
|
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button1, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button1, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button2, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button2, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetPositions (_button1, XmxNoPosition, XmxNoPosition, 0, 1);
|
XmxSetPositions (_button1, XmxNoPosition, XmxNoPosition, 0, 1);
|
||||||
XmxSetPositions (_button2, XmxNoPosition, XmxNoPosition, 1, 2);
|
XmxSetPositions (_button2, XmxNoPosition, XmxNoPosition, 1, 2);
|
||||||
XmxSetOffsets (_button1, XmxNoOffset, XmxNoOffset, 8, 4);
|
XmxSetOffsets (_button1, XmxNoOffset, XmxNoOffset, 8, 4);
|
||||||
XmxSetOffsets (_button2, XmxNoOffset, XmxNoOffset, 4, 8);
|
XmxSetOffsets (_button2, XmxNoOffset, XmxNoOffset, 4, 8);
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
Xmx_w = _form;
|
Xmx_w = _form;
|
||||||
return Xmx_w;
|
return Xmx_w;
|
||||||
@ -1431,17 +1431,17 @@ Widget XmxMakeFormAndTwoButtonsSqueezed
|
|||||||
_button1 = XmxMakePushButton (_form, name1, cb, cb_data1);
|
_button1 = XmxMakePushButton (_form, name1, cb, cb_data1);
|
||||||
_button2 = XmxMakePushButton (_form, name2, cb, cb_data2);
|
_button2 = XmxMakePushButton (_form, name2, cb, cb_data2);
|
||||||
|
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button1, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button1, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button2, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button2, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetPositions (_button1, XmxNoPosition, XmxNoPosition, 1, 2);
|
XmxSetPositions (_button1, XmxNoPosition, XmxNoPosition, 1, 2);
|
||||||
XmxSetPositions (_button2, XmxNoPosition, XmxNoPosition, 3, 4);
|
XmxSetPositions (_button2, XmxNoPosition, XmxNoPosition, 3, 4);
|
||||||
XmxSetOffsets (_button1, XmxNoOffset, XmxNoOffset, 8, 4);
|
XmxSetOffsets (_button1, XmxNoOffset, XmxNoOffset, 8, 4);
|
||||||
XmxSetOffsets (_button2, XmxNoOffset, XmxNoOffset, 4, 8);
|
XmxSetOffsets (_button2, XmxNoOffset, XmxNoOffset, 4, 8);
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
Xmx_w = _form;
|
Xmx_w = _form;
|
||||||
return Xmx_w;
|
return Xmx_w;
|
||||||
@ -1463,13 +1463,13 @@ Widget XmxMakeFormAndThreeButtonsSqueezed
|
|||||||
_button2 = XmxMakePushButton (_form, name2, cb, cb_data2);
|
_button2 = XmxMakePushButton (_form, name2, cb, cb_data2);
|
||||||
_button3 = XmxMakePushButton (_form, name3, cb, cb_data3);
|
_button3 = XmxMakePushButton (_form, name3, cb, cb_data3);
|
||||||
|
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button1, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button1, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button2, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button2, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button3, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button3, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetPositions (_button1, XmxNoPosition, XmxNoPosition, 1, 2);
|
XmxSetPositions (_button1, XmxNoPosition, XmxNoPosition, 1, 2);
|
||||||
@ -1478,7 +1478,7 @@ Widget XmxMakeFormAndThreeButtonsSqueezed
|
|||||||
XmxSetOffsets (_button1, XmxNoOffset, XmxNoOffset, 8, 4);
|
XmxSetOffsets (_button1, XmxNoOffset, XmxNoOffset, 8, 4);
|
||||||
XmxSetOffsets (_button2, XmxNoOffset, XmxNoOffset, 4, 4);
|
XmxSetOffsets (_button2, XmxNoOffset, XmxNoOffset, 4, 4);
|
||||||
XmxSetOffsets (_button3, XmxNoOffset, XmxNoOffset, 4, 8);
|
XmxSetOffsets (_button3, XmxNoOffset, XmxNoOffset, 4, 8);
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
Xmx_w = _form;
|
Xmx_w = _form;
|
||||||
return Xmx_w;
|
return Xmx_w;
|
||||||
@ -1500,13 +1500,13 @@ Widget XmxMakeFormAndThreeButtons
|
|||||||
_button2 = XmxMakePushButton (_form, name2, cb, cb_data2);
|
_button2 = XmxMakePushButton (_form, name2, cb, cb_data2);
|
||||||
_button3 = XmxMakePushButton (_form, name3, cb, cb_data3);
|
_button3 = XmxMakePushButton (_form, name3, cb, cb_data3);
|
||||||
|
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button1, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button1, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button2, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button2, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button3, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button3, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetPositions (_button1, XmxNoPosition, XmxNoPosition, 0, 1);
|
XmxSetPositions (_button1, XmxNoPosition, XmxNoPosition, 0, 1);
|
||||||
@ -1515,14 +1515,14 @@ Widget XmxMakeFormAndThreeButtons
|
|||||||
XmxSetOffsets (_button1, XmxNoOffset, XmxNoOffset, 8, 4);
|
XmxSetOffsets (_button1, XmxNoOffset, XmxNoOffset, 8, 4);
|
||||||
XmxSetOffsets (_button2, XmxNoOffset, XmxNoOffset, 4, 4);
|
XmxSetOffsets (_button2, XmxNoOffset, XmxNoOffset, 4, 4);
|
||||||
XmxSetOffsets (_button3, XmxNoOffset, XmxNoOffset, 4, 8);
|
XmxSetOffsets (_button3, XmxNoOffset, XmxNoOffset, 4, 8);
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
Xmx_w = _form;
|
Xmx_w = _form;
|
||||||
return Xmx_w;
|
return Xmx_w;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* args apply to form */
|
/* args apply to form */
|
||||||
Widget XmxMakeFormAndFourButtons
|
Widget XmxMakeFormAndFourButtons
|
||||||
(Widget parent, XtCallbackProc cb,
|
(Widget parent, XtCallbackProc cb,
|
||||||
String name1, String name2, String name3, String name4,
|
String name1, String name2, String name3, String name4,
|
||||||
int cb_data1, int cb_data2, int cb_data3, int cb_data4)
|
int cb_data1, int cb_data2, int cb_data3, int cb_data4)
|
||||||
@ -1538,16 +1538,16 @@ Widget XmxMakeFormAndFourButtons
|
|||||||
_button3 = XmxMakePushButton (_form, name3, cb, cb_data3);
|
_button3 = XmxMakePushButton (_form, name3, cb, cb_data3);
|
||||||
_button4 = XmxMakePushButton (_form, name4, cb, cb_data4);
|
_button4 = XmxMakePushButton (_form, name4, cb, cb_data4);
|
||||||
|
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button1, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button1, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button2, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button2, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button3, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button3, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetConstraints
|
XmxSetConstraints
|
||||||
(_button4, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
(_button4, XmATTACH_FORM, XmATTACH_FORM, XmATTACH_NONE, XmATTACH_NONE,
|
||||||
NULL, NULL, NULL, NULL);
|
NULL, NULL, NULL, NULL);
|
||||||
XmxSetPositions (_button1, XmxNoPosition, XmxNoPosition, 0, 1);
|
XmxSetPositions (_button1, XmxNoPosition, XmxNoPosition, 0, 1);
|
||||||
@ -1558,14 +1558,14 @@ Widget XmxMakeFormAndFourButtons
|
|||||||
XmxSetOffsets (_button2, XmxNoOffset, XmxNoOffset, 4, 4);
|
XmxSetOffsets (_button2, XmxNoOffset, XmxNoOffset, 4, 4);
|
||||||
XmxSetOffsets (_button3, XmxNoOffset, XmxNoOffset, 4, 4);
|
XmxSetOffsets (_button3, XmxNoOffset, XmxNoOffset, 4, 4);
|
||||||
XmxSetOffsets (_button4, XmxNoOffset, XmxNoOffset, 4, 8);
|
XmxSetOffsets (_button4, XmxNoOffset, XmxNoOffset, 4, 8);
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
Xmx_w = _form;
|
Xmx_w = _form;
|
||||||
return Xmx_w;
|
return Xmx_w;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* args apply to form */
|
/* args apply to form */
|
||||||
Widget XmxMakeFormAndFiveButtons
|
Widget XmxMakeFormAndFiveButtons
|
||||||
(Widget parent, XtCallbackProc cb,
|
(Widget parent, XtCallbackProc cb,
|
||||||
String name1, String name2, String name3, String name4, String name5,
|
String name1, String name2, String name3, String name4, String name5,
|
||||||
int cb_data1, int cb_data2, int cb_data3, int cb_data4, int cb_data5)
|
int cb_data1, int cb_data2, int cb_data3, int cb_data4, int cb_data5)
|
||||||
@ -1607,7 +1607,7 @@ Widget XmxMakeFormAndFiveButtons
|
|||||||
XmxSetOffsets (_button3, XmxNoOffset, XmxNoOffset, 4, 4);
|
XmxSetOffsets (_button3, XmxNoOffset, XmxNoOffset, 4, 4);
|
||||||
XmxSetOffsets (_button4, XmxNoOffset, XmxNoOffset, 4, 4);
|
XmxSetOffsets (_button4, XmxNoOffset, XmxNoOffset, 4, 4);
|
||||||
XmxSetOffsets (_button5, XmxNoOffset, XmxNoOffset, 4, 8);
|
XmxSetOffsets (_button5, XmxNoOffset, XmxNoOffset, 4, 8);
|
||||||
|
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
Xmx_w = _form;
|
Xmx_w = _form;
|
||||||
return Xmx_w;
|
return Xmx_w;
|
||||||
@ -1621,7 +1621,7 @@ static void _XmxYesOrNoResponse (Widget w, int *answer, XmAnyCallbackStruct *cbs
|
|||||||
*answer = 0;
|
*answer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int XmxModalYesOrNo (Widget parent, XtAppContext app,
|
int XmxModalYesOrNo (Widget parent, XtAppContext app,
|
||||||
char *questionstr, char *yesstr, char *nostr)
|
char *questionstr, char *yesstr, char *nostr)
|
||||||
{
|
{
|
||||||
Widget dialog;
|
Widget dialog;
|
||||||
@ -1634,7 +1634,7 @@ int XmxModalYesOrNo (Widget parent, XtAppContext app,
|
|||||||
yes = XmStringCreateLtoR (yesstr, XmSTRING_DEFAULT_CHARSET);
|
yes = XmStringCreateLtoR (yesstr, XmSTRING_DEFAULT_CHARSET);
|
||||||
no = XmStringCreateLtoR (nostr, XmSTRING_DEFAULT_CHARSET);
|
no = XmStringCreateLtoR (nostr, XmSTRING_DEFAULT_CHARSET);
|
||||||
title = XmStringCreateLtoR ("Prompt", XmSTRING_DEFAULT_CHARSET);
|
title = XmStringCreateLtoR ("Prompt", XmSTRING_DEFAULT_CHARSET);
|
||||||
|
|
||||||
XmxSetArg (XmNdialogTitle, (XtArgVal)title);
|
XmxSetArg (XmNdialogTitle, (XtArgVal)title);
|
||||||
XmxSetArg (XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL);
|
XmxSetArg (XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL);
|
||||||
XmxSetArg (XmNmessageString, (XtArgVal)question);
|
XmxSetArg (XmNmessageString, (XtArgVal)question);
|
||||||
@ -1644,11 +1644,11 @@ int XmxModalYesOrNo (Widget parent, XtAppContext app,
|
|||||||
|
|
||||||
dialog = XmCreateQuestionDialog (parent, "question_dialog", Xmx_wargs, Xmx_n);
|
dialog = XmCreateQuestionDialog (parent, "question_dialog", Xmx_wargs, Xmx_n);
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
|
|
||||||
XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
|
XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
|
||||||
XtAddCallback (dialog, XmNokCallback,
|
XtAddCallback (dialog, XmNokCallback,
|
||||||
(XtCallbackProc)_XmxYesOrNoResponse, &answer);
|
(XtCallbackProc)_XmxYesOrNoResponse, &answer);
|
||||||
XtAddCallback (dialog, XmNcancelCallback,
|
XtAddCallback (dialog, XmNcancelCallback,
|
||||||
(XtCallbackProc)_XmxYesOrNoResponse, &answer);
|
(XtCallbackProc)_XmxYesOrNoResponse, &answer);
|
||||||
|
|
||||||
XtManageChild (dialog);
|
XtManageChild (dialog);
|
||||||
@ -1680,20 +1680,20 @@ int XmxModalYesOrNo (Widget parent, XtAppContext app,
|
|||||||
#define XMX_NO_ANSWER "-*-no answer, dammit, but Xmx rules, yo yo yo-*-"
|
#define XMX_NO_ANSWER "-*-no answer, dammit, but Xmx rules, yo yo yo-*-"
|
||||||
|
|
||||||
/*SWP -- 7/6/95*/
|
/*SWP -- 7/6/95*/
|
||||||
static void _XmxActivate (Widget w, char **answer,
|
static void _XmxActivate (Widget w, char **answer,
|
||||||
XmSelectionBoxCallbackStruct *cbs)
|
XmSelectionBoxCallbackStruct *cbs)
|
||||||
{
|
{
|
||||||
*answer = XMX_NO_ANSWER;
|
*answer = XMX_NO_ANSWER;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _XmxPromptForStringResponse (Widget w, char **answer,
|
static void _XmxPromptForStringResponse (Widget w, char **answer,
|
||||||
XmSelectionBoxCallbackStruct *cbs)
|
XmSelectionBoxCallbackStruct *cbs)
|
||||||
{
|
{
|
||||||
if (!XmStringGetLtoR (cbs->value, XmSTRING_DEFAULT_CHARSET, answer))
|
if (!XmStringGetLtoR (cbs->value, XmSTRING_DEFAULT_CHARSET, answer))
|
||||||
*answer = XMX_NO_ANSWER;
|
*answer = XMX_NO_ANSWER;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _XmxPromptForStringCancel (Widget w, char **answer,
|
static void _XmxPromptForStringCancel (Widget w, char **answer,
|
||||||
XmSelectionBoxCallbackStruct *cbs)
|
XmSelectionBoxCallbackStruct *cbs)
|
||||||
{
|
{
|
||||||
*answer = XMX_NO_ANSWER;
|
*answer = XMX_NO_ANSWER;
|
||||||
@ -1701,7 +1701,7 @@ static void _XmxPromptForStringCancel (Widget w, char **answer,
|
|||||||
|
|
||||||
|
|
||||||
/*SWP -- 7/4/95*/
|
/*SWP -- 7/4/95*/
|
||||||
void XmxMakeInfoDialogWait (Widget parent, XtAppContext app,
|
void XmxMakeInfoDialogWait (Widget parent, XtAppContext app,
|
||||||
char *infostr, char *titlestr, char *yesstr)
|
char *infostr, char *titlestr, char *yesstr)
|
||||||
{
|
{
|
||||||
Widget dialog;
|
Widget dialog;
|
||||||
@ -1711,7 +1711,7 @@ void XmxMakeInfoDialogWait (Widget parent, XtAppContext app,
|
|||||||
info = XmStringCreateLtoR (infostr, XmSTRING_DEFAULT_CHARSET);
|
info = XmStringCreateLtoR (infostr, XmSTRING_DEFAULT_CHARSET);
|
||||||
yes = XmStringCreateLtoR (yesstr, XmSTRING_DEFAULT_CHARSET);
|
yes = XmStringCreateLtoR (yesstr, XmSTRING_DEFAULT_CHARSET);
|
||||||
title = XmStringCreateLtoR (titlestr, XmSTRING_DEFAULT_CHARSET);
|
title = XmStringCreateLtoR (titlestr, XmSTRING_DEFAULT_CHARSET);
|
||||||
|
|
||||||
XmxSetArg (XmNdialogTitle, (XtArgVal)title);
|
XmxSetArg (XmNdialogTitle, (XtArgVal)title);
|
||||||
XmxSetArg (XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL);
|
XmxSetArg (XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL);
|
||||||
XmxSetArg (XmNmessageString, (XtArgVal)info);
|
XmxSetArg (XmNmessageString, (XtArgVal)info);
|
||||||
@ -1724,7 +1724,7 @@ void XmxMakeInfoDialogWait (Widget parent, XtAppContext app,
|
|||||||
XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
|
XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
|
||||||
XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_CANCEL_BUTTON));
|
XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_CANCEL_BUTTON));
|
||||||
|
|
||||||
XtAddCallback (dialog, XmNokCallback,
|
XtAddCallback (dialog, XmNokCallback,
|
||||||
(XtCallbackProc)_XmxActivate, &answer);
|
(XtCallbackProc)_XmxActivate, &answer);
|
||||||
|
|
||||||
XtManageChild (dialog);
|
XtManageChild (dialog);
|
||||||
@ -1750,7 +1750,7 @@ void XmxMakeInfoDialogWait (Widget parent, XtAppContext app,
|
|||||||
|
|
||||||
|
|
||||||
/*SWP -- 4/15/96*/
|
/*SWP -- 4/15/96*/
|
||||||
void XmxMakeErrorDialogWait (Widget parent, XtAppContext app,
|
void XmxMakeErrorDialogWait (Widget parent, XtAppContext app,
|
||||||
char *infostr, char *titlestr, char *yesstr)
|
char *infostr, char *titlestr, char *yesstr)
|
||||||
{
|
{
|
||||||
Widget dialog;
|
Widget dialog;
|
||||||
@ -1760,7 +1760,7 @@ void XmxMakeErrorDialogWait (Widget parent, XtAppContext app,
|
|||||||
info = XmStringCreateLtoR (infostr, XmSTRING_DEFAULT_CHARSET);
|
info = XmStringCreateLtoR (infostr, XmSTRING_DEFAULT_CHARSET);
|
||||||
yes = XmStringCreateLtoR (yesstr, XmSTRING_DEFAULT_CHARSET);
|
yes = XmStringCreateLtoR (yesstr, XmSTRING_DEFAULT_CHARSET);
|
||||||
title = XmStringCreateLtoR (titlestr, XmSTRING_DEFAULT_CHARSET);
|
title = XmStringCreateLtoR (titlestr, XmSTRING_DEFAULT_CHARSET);
|
||||||
|
|
||||||
XmxSetArg (XmNdialogTitle, (XtArgVal)title);
|
XmxSetArg (XmNdialogTitle, (XtArgVal)title);
|
||||||
XmxSetArg (XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL);
|
XmxSetArg (XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL);
|
||||||
XmxSetArg (XmNmessageString, (XtArgVal)info);
|
XmxSetArg (XmNmessageString, (XtArgVal)info);
|
||||||
@ -1773,7 +1773,7 @@ void XmxMakeErrorDialogWait (Widget parent, XtAppContext app,
|
|||||||
XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
|
XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
|
||||||
XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_CANCEL_BUTTON));
|
XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_CANCEL_BUTTON));
|
||||||
|
|
||||||
XtAddCallback (dialog, XmNokCallback,
|
XtAddCallback (dialog, XmNokCallback,
|
||||||
(XtCallbackProc)_XmxActivate, &answer);
|
(XtCallbackProc)_XmxActivate, &answer);
|
||||||
|
|
||||||
XtManageChild (dialog);
|
XtManageChild (dialog);
|
||||||
@ -1798,7 +1798,7 @@ void XmxMakeErrorDialogWait (Widget parent, XtAppContext app,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char *XmxModalPromptForString (Widget parent, XtAppContext app,
|
char *XmxModalPromptForString (Widget parent, XtAppContext app,
|
||||||
char *questionstr, char *yesstr, char *nostr)
|
char *questionstr, char *yesstr, char *nostr)
|
||||||
{
|
{
|
||||||
Widget dialog;
|
Widget dialog;
|
||||||
@ -1811,7 +1811,7 @@ char *XmxModalPromptForString (Widget parent, XtAppContext app,
|
|||||||
yes = XmStringCreateLtoR (yesstr, XmSTRING_DEFAULT_CHARSET);
|
yes = XmStringCreateLtoR (yesstr, XmSTRING_DEFAULT_CHARSET);
|
||||||
no = XmStringCreateLtoR (nostr, XmSTRING_DEFAULT_CHARSET);
|
no = XmStringCreateLtoR (nostr, XmSTRING_DEFAULT_CHARSET);
|
||||||
title = XmStringCreateLtoR ("Prompt", XmSTRING_DEFAULT_CHARSET);
|
title = XmStringCreateLtoR ("Prompt", XmSTRING_DEFAULT_CHARSET);
|
||||||
|
|
||||||
XmxSetArg (XmNdialogTitle, (XtArgVal)title);
|
XmxSetArg (XmNdialogTitle, (XtArgVal)title);
|
||||||
XmxSetArg (XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL);
|
XmxSetArg (XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL);
|
||||||
XmxSetArg (XmNselectionLabelString, (XtArgVal)question);
|
XmxSetArg (XmNselectionLabelString, (XtArgVal)question);
|
||||||
@ -1819,11 +1819,11 @@ char *XmxModalPromptForString (Widget parent, XtAppContext app,
|
|||||||
XmxSetArg (XmNcancelLabelString, (XtArgVal)no);
|
XmxSetArg (XmNcancelLabelString, (XtArgVal)no);
|
||||||
dialog = XmCreatePromptDialog (parent, "question_dialog", Xmx_wargs, Xmx_n);
|
dialog = XmCreatePromptDialog (parent, "question_dialog", Xmx_wargs, Xmx_n);
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
|
|
||||||
XtUnmanageChild (XmSelectionBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
|
XtUnmanageChild (XmSelectionBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
|
||||||
XtAddCallback (dialog, XmNokCallback,
|
XtAddCallback (dialog, XmNokCallback,
|
||||||
(XtCallbackProc)_XmxPromptForStringResponse, &answer);
|
(XtCallbackProc)_XmxPromptForStringResponse, &answer);
|
||||||
XtAddCallback (dialog, XmNcancelCallback,
|
XtAddCallback (dialog, XmNcancelCallback,
|
||||||
(XtCallbackProc)_XmxPromptForStringCancel, &answer);
|
(XtCallbackProc)_XmxPromptForStringCancel, &answer);
|
||||||
|
|
||||||
XtManageChild (dialog);
|
XtManageChild (dialog);
|
||||||
@ -1860,38 +1860,38 @@ char *XmxModalPromptForString (Widget parent, XtAppContext app,
|
|||||||
|
|
||||||
static char *_passwd = NULL;
|
static char *_passwd = NULL;
|
||||||
|
|
||||||
static void _XmxPromptForPasswordResponse (Widget w, char **answer,
|
static void _XmxPromptForPasswordResponse (Widget w, char **answer,
|
||||||
XmSelectionBoxCallbackStruct *cbs)
|
XmSelectionBoxCallbackStruct *cbs)
|
||||||
{
|
{
|
||||||
if (!XmStringGetLtoR (cbs->value, XmSTRING_DEFAULT_CHARSET, answer))
|
if (!XmStringGetLtoR (cbs->value, XmSTRING_DEFAULT_CHARSET, answer))
|
||||||
*answer = XMX_NO_ANSWER;
|
*answer = XMX_NO_ANSWER;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _XmxPromptForPasswordCancel (Widget w, char **answer,
|
static void _XmxPromptForPasswordCancel (Widget w, char **answer,
|
||||||
XmSelectionBoxCallbackStruct *cbs)
|
XmSelectionBoxCallbackStruct *cbs)
|
||||||
{
|
{
|
||||||
*answer = XMX_NO_ANSWER;
|
*answer = XMX_NO_ANSWER;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _XmxPromptForPasswordVerify (Widget text_w, XtPointer unused,
|
static void _XmxPromptForPasswordVerify (Widget text_w, XtPointer unused,
|
||||||
XmTextVerifyCallbackStruct *cbs)
|
XmTextVerifyCallbackStruct *cbs)
|
||||||
{
|
{
|
||||||
char *new;
|
char *new;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
if (cbs->reason != XmCR_MODIFYING_TEXT_VALUE)
|
if (cbs->reason != XmCR_MODIFYING_TEXT_VALUE)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cbs->text->ptr == NULL)
|
if (cbs->text->ptr == NULL)
|
||||||
{ /* backspace */
|
{ /* backspace */
|
||||||
cbs->doit = True;
|
cbs->doit = True;
|
||||||
if (_passwd && *_passwd)
|
if (_passwd && *_passwd)
|
||||||
{
|
{
|
||||||
int start;
|
int start;
|
||||||
char *tptr;
|
char *tptr;
|
||||||
|
|
||||||
len = strlen(_passwd);
|
len = strlen(_passwd);
|
||||||
/* Find the start of the delete */
|
/* Find the start of the delete */
|
||||||
if (cbs->startPos < len)
|
if (cbs->startPos < len)
|
||||||
@ -1915,7 +1915,7 @@ static void _XmxPromptForPasswordVerify (Widget text_w, XtPointer unused,
|
|||||||
strcat(_passwd, tptr);
|
strcat(_passwd, tptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (cbs->text->length >= 1)
|
else if (cbs->text->length >= 1)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -1962,7 +1962,7 @@ static void _XmxPromptForPasswordVerify (Widget text_w, XtPointer unused,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char *XmxModalPromptForPassword (Widget parent, XtAppContext app,
|
char *XmxModalPromptForPassword (Widget parent, XtAppContext app,
|
||||||
char *questionstr, char *yesstr, char *nostr)
|
char *questionstr, char *yesstr, char *nostr)
|
||||||
{
|
{
|
||||||
Widget dialog;
|
Widget dialog;
|
||||||
@ -1977,7 +1977,7 @@ char *XmxModalPromptForPassword (Widget parent, XtAppContext app,
|
|||||||
yes = XmStringCreateLtoR (yesstr, XmSTRING_DEFAULT_CHARSET);
|
yes = XmStringCreateLtoR (yesstr, XmSTRING_DEFAULT_CHARSET);
|
||||||
no = XmStringCreateLtoR (nostr, XmSTRING_DEFAULT_CHARSET);
|
no = XmStringCreateLtoR (nostr, XmSTRING_DEFAULT_CHARSET);
|
||||||
title = XmStringCreateLtoR ("Prompt", XmSTRING_DEFAULT_CHARSET);
|
title = XmStringCreateLtoR ("Prompt", XmSTRING_DEFAULT_CHARSET);
|
||||||
|
|
||||||
XmxSetArg (XmNdialogTitle, (XtArgVal)title);
|
XmxSetArg (XmNdialogTitle, (XtArgVal)title);
|
||||||
XmxSetArg (XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL);
|
XmxSetArg (XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL);
|
||||||
XmxSetArg (XmNselectionLabelString, (XtArgVal)question);
|
XmxSetArg (XmNselectionLabelString, (XtArgVal)question);
|
||||||
@ -1985,14 +1985,14 @@ char *XmxModalPromptForPassword (Widget parent, XtAppContext app,
|
|||||||
XmxSetArg (XmNcancelLabelString, (XtArgVal)no);
|
XmxSetArg (XmNcancelLabelString, (XtArgVal)no);
|
||||||
dialog = XmCreatePromptDialog (parent, "question_dialog", Xmx_wargs, Xmx_n);
|
dialog = XmCreatePromptDialog (parent, "question_dialog", Xmx_wargs, Xmx_n);
|
||||||
Xmx_n = 0;
|
Xmx_n = 0;
|
||||||
|
|
||||||
XtUnmanageChild (XmSelectionBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
|
XtUnmanageChild (XmSelectionBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
|
||||||
XtAddCallback
|
XtAddCallback
|
||||||
(XmSelectionBoxGetChild (dialog, XmDIALOG_TEXT),
|
(XmSelectionBoxGetChild (dialog, XmDIALOG_TEXT),
|
||||||
XmNmodifyVerifyCallback, (XtCallbackProc)_XmxPromptForPasswordVerify, 0);
|
XmNmodifyVerifyCallback, (XtCallbackProc)_XmxPromptForPasswordVerify, 0);
|
||||||
XtAddCallback (dialog, XmNokCallback,
|
XtAddCallback (dialog, XmNokCallback,
|
||||||
(XtCallbackProc)_XmxPromptForPasswordResponse, &answer);
|
(XtCallbackProc)_XmxPromptForPasswordResponse, &answer);
|
||||||
XtAddCallback (dialog, XmNcancelCallback,
|
XtAddCallback (dialog, XmNcancelCallback,
|
||||||
(XtCallbackProc)_XmxPromptForPasswordCancel, &answer);
|
(XtCallbackProc)_XmxPromptForPasswordCancel, &answer);
|
||||||
|
|
||||||
XtManageChild (dialog);
|
XtManageChild (dialog);
|
||||||
|
36
libXmx/Xmx.h
36
libXmx/Xmx.h
@ -248,14 +248,14 @@ extern Widget XmxMakeRadioBox (Widget);
|
|||||||
extern Widget XmxMakeOptionBox (Widget);
|
extern Widget XmxMakeOptionBox (Widget);
|
||||||
extern Widget XmxMakeToggleButton (Widget, String, XtCallbackProc, int);
|
extern Widget XmxMakeToggleButton (Widget, String, XtCallbackProc, int);
|
||||||
extern void XmxSetToggleButton (Widget button, int set_state);
|
extern void XmxSetToggleButton (Widget button, int set_state);
|
||||||
extern Widget XmxMakeScale (Widget, XtCallbackProc, int, String,
|
extern Widget XmxMakeScale (Widget, XtCallbackProc, int, String,
|
||||||
int, int, int, int);
|
int, int, int, int);
|
||||||
extern void XmxAdjustScale (Widget, int);
|
extern void XmxAdjustScale (Widget, int);
|
||||||
extern Widget XmxMakeFrame (Widget, int);
|
extern Widget XmxMakeFrame (Widget, int);
|
||||||
extern Widget XmxMakeForm (Widget);
|
extern Widget XmxMakeForm (Widget);
|
||||||
extern void XmxSetPositions (Widget, int, int, int, int);
|
extern void XmxSetPositions (Widget, int, int, int, int);
|
||||||
extern void XmxSetOffsets (Widget, int, int, int, int);
|
extern void XmxSetOffsets (Widget, int, int, int, int);
|
||||||
extern void XmxSetConstraints (Widget, int, int, int, int, Widget, Widget,
|
extern void XmxSetConstraints (Widget, int, int, int, int, Widget, Widget,
|
||||||
Widget, Widget);
|
Widget, Widget);
|
||||||
extern Widget XmxMakeVerticalRowColumn (Widget);
|
extern Widget XmxMakeVerticalRowColumn (Widget);
|
||||||
extern Widget XmxMakeHorizontalRowColumn (Widget);
|
extern Widget XmxMakeHorizontalRowColumn (Widget);
|
||||||
@ -272,13 +272,13 @@ extern Widget XmxMakeNamedLabel (Widget, String, String);
|
|||||||
extern Widget XmxMakeBlankLabel (Widget);
|
extern Widget XmxMakeBlankLabel (Widget);
|
||||||
extern Widget XmxMakeErrorDialog (Widget, String, String);
|
extern Widget XmxMakeErrorDialog (Widget, String, String);
|
||||||
extern Widget XmxMakeInfoDialog (Widget, String, String);
|
extern Widget XmxMakeInfoDialog (Widget, String, String);
|
||||||
extern Widget XmxMakeQuestionDialog (Widget, String, String, XtCallbackProc,
|
extern Widget XmxMakeQuestionDialog (Widget, String, String, XtCallbackProc,
|
||||||
int, int);
|
int, int);
|
||||||
extern XmString XmxMakeXmstrFromFile (String);
|
extern XmString XmxMakeXmstrFromFile (String);
|
||||||
extern XmString XmxMakeXmstrFromString (String);
|
extern XmString XmxMakeXmstrFromString (String);
|
||||||
extern Widget XmxMakeBboardDialog (Widget, String);
|
extern Widget XmxMakeBboardDialog (Widget, String);
|
||||||
extern Widget XmxMakeFormDialog (Widget, String);
|
extern Widget XmxMakeFormDialog (Widget, String);
|
||||||
extern Widget XmxMakeFileSBDialog (Widget, String, String, XtCallbackProc,
|
extern Widget XmxMakeFileSBDialog (Widget, String, String, XtCallbackProc,
|
||||||
int);
|
int);
|
||||||
extern Widget XmxMakeHelpDialog (Widget, XmString, String);
|
extern Widget XmxMakeHelpDialog (Widget, XmString, String);
|
||||||
extern Widget XmxMakeHelpTextDialog (Widget, String, String, Widget *);
|
extern Widget XmxMakeHelpTextDialog (Widget, String, String, Widget *);
|
||||||
@ -298,7 +298,7 @@ extern void XmxAddCallbackToText (Widget, XtCallbackProc, int);
|
|||||||
#if 0
|
#if 0
|
||||||
|
|
||||||
#ifdef __sgi
|
#ifdef __sgi
|
||||||
extern Widget XmxMakeDrawingVolume
|
extern Widget XmxMakeDrawingVolume
|
||||||
(Widget, int, int, GLXconfig *, XtCallbackProc, XtCallbackProc,
|
(Widget, int, int, GLXconfig *, XtCallbackProc, XtCallbackProc,
|
||||||
XtCallbackProc);
|
XtCallbackProc);
|
||||||
extern void XmxInstallColormaps (Widget, Widget);
|
extern void XmxInstallColormaps (Widget, Widget);
|
||||||
@ -307,7 +307,7 @@ extern void XmxWinset (Widget);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _IBMR2
|
#ifdef _IBMR2
|
||||||
extern Widget XmxMakeDrawingVolume
|
extern Widget XmxMakeDrawingVolume
|
||||||
(Widget, int, int, XtCallbackProc, XtCallbackProc,
|
(Widget, int, int, XtCallbackProc, XtCallbackProc,
|
||||||
XtCallbackProc);
|
XtCallbackProc);
|
||||||
extern void XmxInstallColormaps (Widget, Widget);
|
extern void XmxInstallColormaps (Widget, Widget);
|
||||||
@ -316,22 +316,22 @@ extern void XmxWinset (Widget);
|
|||||||
|
|
||||||
#endif /* if 0 */
|
#endif /* if 0 */
|
||||||
|
|
||||||
extern void XmxApplyBitmapToLabelWidget (Widget, String, unsigned int,
|
extern void XmxApplyBitmapToLabelWidget (Widget, String, unsigned int,
|
||||||
unsigned int);
|
unsigned int);
|
||||||
extern Pixmap XmxCreatePixmapFromBitmap (Widget, String, unsigned int,
|
extern Pixmap XmxCreatePixmapFromBitmap (Widget, String, unsigned int,
|
||||||
unsigned int);
|
unsigned int);
|
||||||
extern void XmxApplyPixmapToLabelWidget (Widget, Pixmap);
|
extern void XmxApplyPixmapToLabelWidget (Widget, Pixmap);
|
||||||
|
|
||||||
extern Widget XmxMakeFormAndOneButton (Widget, XtCallbackProc, String, int);
|
extern Widget XmxMakeFormAndOneButton (Widget, XtCallbackProc, String, int);
|
||||||
extern Widget XmxMakeFormAndTwoButtons (Widget, XtCallbackProc, String,
|
extern Widget XmxMakeFormAndTwoButtons (Widget, XtCallbackProc, String,
|
||||||
String, int, int);
|
String, int, int);
|
||||||
extern Widget XmxMakeFormAndTwoButtonsSqueezed (Widget, XtCallbackProc, String,
|
extern Widget XmxMakeFormAndTwoButtonsSqueezed (Widget, XtCallbackProc, String,
|
||||||
String, int, int);
|
String, int, int);
|
||||||
extern Widget XmxMakeFormAndThreeButtons (Widget, XtCallbackProc, String,
|
extern Widget XmxMakeFormAndThreeButtons (Widget, XtCallbackProc, String,
|
||||||
String, String, int, int, int);
|
String, String, int, int, int);
|
||||||
extern Widget XmxMakeFormAndThreeButtonsSqueezed (Widget, XtCallbackProc, String,
|
extern Widget XmxMakeFormAndThreeButtonsSqueezed (Widget, XtCallbackProc, String,
|
||||||
String, String, int, int, int);
|
String, String, int, int, int);
|
||||||
extern Widget XmxMakeFormAndFourButtons (Widget, XtCallbackProc, String,
|
extern Widget XmxMakeFormAndFourButtons (Widget, XtCallbackProc, String,
|
||||||
String, String, String, int, int, int, int);
|
String, String, String, int, int, int, int);
|
||||||
extern Widget XmxMakeFormAndFiveButtons (Widget, XtCallbackProc, String,
|
extern Widget XmxMakeFormAndFiveButtons (Widget, XtCallbackProc, String,
|
||||||
String, String, String, String,
|
String, String, String, String,
|
||||||
@ -340,11 +340,11 @@ extern Widget XmxMakeFormAndFiveButtons (Widget, XtCallbackProc, String,
|
|||||||
extern int XmxModalYesOrNo (Widget parent, XtAppContext app,
|
extern int XmxModalYesOrNo (Widget parent, XtAppContext app,
|
||||||
char *questionstr, char *yesstr,
|
char *questionstr, char *yesstr,
|
||||||
char *nostr);
|
char *nostr);
|
||||||
extern char *XmxModalPromptForString (Widget parent, XtAppContext app,
|
extern char *XmxModalPromptForString (Widget parent, XtAppContext app,
|
||||||
char *questionstr, char *yesstr,
|
char *questionstr, char *yesstr,
|
||||||
char *nostr);
|
char *nostr);
|
||||||
extern char *XmxModalPromptForPassword (Widget parent, XtAppContext app,
|
extern char *XmxModalPromptForPassword (Widget parent, XtAppContext app,
|
||||||
char *questionstr, char *yesstr,
|
char *questionstr, char *yesstr,
|
||||||
char *nostr);
|
char *nostr);
|
||||||
|
|
||||||
/* Xmx2.c */
|
/* Xmx2.c */
|
||||||
@ -355,9 +355,9 @@ extern void XmxRSetOptionMenuHistory (XmxMenuRecord *, int);
|
|||||||
extern void XmxRSetValues (XmxMenuRecord *, int);
|
extern void XmxRSetValues (XmxMenuRecord *, int);
|
||||||
extern Widget XmxRGetWidget (XmxMenuRecord *, int);
|
extern Widget XmxRGetWidget (XmxMenuRecord *, int);
|
||||||
|
|
||||||
extern XmxMenuRecord *XmxRMakeOptionMenu (Widget, String, XtCallbackProc,
|
extern XmxMenuRecord *XmxRMakeOptionMenu (Widget, String, XtCallbackProc,
|
||||||
XmxOptionMenuStruct *);
|
XmxOptionMenuStruct *);
|
||||||
extern XmxMenuRecord *XmxRMakeToggleMenu (Widget, int, XtCallbackProc,
|
extern XmxMenuRecord *XmxRMakeToggleMenu (Widget, int, XtCallbackProc,
|
||||||
XmxToggleMenuStruct *);
|
XmxToggleMenuStruct *);
|
||||||
extern XmxMenuRecord *XmxRMakeMenubar (Widget, XmxMenubarStruct *);
|
extern XmxMenuRecord *XmxRMakeMenubar (Widget, XmxMenubarStruct *);
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@
|
|||||||
/* ----------------------- _XmxMenuAddEntryToRecord ----------------------- */
|
/* ----------------------- _XmxMenuAddEntryToRecord ----------------------- */
|
||||||
|
|
||||||
/* Create a new MenuEntry and add it to the head of a MenuRecord list. */
|
/* Create a new MenuEntry and add it to the head of a MenuRecord list. */
|
||||||
private void
|
private void
|
||||||
_XmxMenuAddEntryToRecord (XmxMenuRecord *rec, Widget w, int token)
|
_XmxMenuAddEntryToRecord (XmxMenuRecord *rec, Widget w, int token)
|
||||||
{
|
{
|
||||||
XmxMenuEntry *_ent;
|
XmxMenuEntry *_ent;
|
||||||
@ -138,7 +138,7 @@ XmxRSetSensitive (XmxMenuRecord *rec, int token, int state)
|
|||||||
/* XtSetSensitive propagates down Widget hierarchy. */
|
/* XtSetSensitive propagates down Widget hierarchy. */
|
||||||
if (_entry)
|
if (_entry)
|
||||||
XtSetSensitive (_entry->w, (state == XmxSensitive) ? True : False);
|
XtSetSensitive (_entry->w, (state == XmxSensitive) ? True : False);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,9 +153,9 @@ XmxRSetToggleState (XmxMenuRecord *rec, int token, int state)
|
|||||||
assert (state == XmxSet || state == XmxUnset);
|
assert (state == XmxSet || state == XmxUnset);
|
||||||
_entry = _XmxMenuGetEntryFromRecord (rec, XmxExtractToken (token));
|
_entry = _XmxMenuGetEntryFromRecord (rec, XmxExtractToken (token));
|
||||||
if (_entry)
|
if (_entry)
|
||||||
XmToggleButtonGadgetSetState
|
XmToggleButtonGadgetSetState
|
||||||
(_entry->w, (state == XmxSet) ? True : False, False);
|
(_entry->w, (state == XmxSet) ? True : False, False);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -344,8 +344,8 @@ XmxRMakeToggleMenu (Widget parent, int behavior, XtCallbackProc cb,
|
|||||||
|
|
||||||
/* Possible deficiency: will not be able to grey out a submenu
|
/* Possible deficiency: will not be able to grey out a submenu
|
||||||
(cascade button). */
|
(cascade button). */
|
||||||
private void
|
private void
|
||||||
_XmxRCreateMenubar (Widget menu, XmxMenubarStruct *menulist,
|
_XmxRCreateMenubar (Widget menu, XmxMenubarStruct *menulist,
|
||||||
XmxMenuRecord *rec)
|
XmxMenuRecord *rec)
|
||||||
{
|
{
|
||||||
int _i;
|
int _i;
|
||||||
@ -396,16 +396,16 @@ _XmxRCreateMenubar (Widget menu, XmxMenubarStruct *menulist,
|
|||||||
|
|
||||||
XtAddCallback
|
XtAddCallback
|
||||||
(_buttons[_i - _separators], XmNvalueChangedCallback,
|
(_buttons[_i - _separators], XmNvalueChangedCallback,
|
||||||
menulist[_i].func,
|
menulist[_i].func,
|
||||||
(XtPointer)_XmxMakeClientData (menulist[_i].data));
|
(XtPointer)_XmxMakeClientData (menulist[_i].data));
|
||||||
|
|
||||||
/* Add thie button to the menu record. */
|
/* Add thie button to the menu record. */
|
||||||
_XmxMenuAddEntryToRecord
|
_XmxMenuAddEntryToRecord
|
||||||
(rec, _buttons[_i - _separators], menulist[_i].data);
|
(rec, _buttons[_i - _separators], menulist[_i].data);
|
||||||
}
|
}
|
||||||
else /* regular button */
|
else /* regular button */
|
||||||
{
|
{
|
||||||
XmString xmstr =
|
XmString xmstr =
|
||||||
XmStringCreateLtoR
|
XmStringCreateLtoR
|
||||||
(menulist[_i].namestr, XmSTRING_DEFAULT_CHARSET);
|
(menulist[_i].namestr, XmSTRING_DEFAULT_CHARSET);
|
||||||
XmxSetArg (XmNlabelString, (XtArgVal)xmstr);
|
XmxSetArg (XmNlabelString, (XtArgVal)xmstr);
|
||||||
@ -413,13 +413,13 @@ _XmxRCreateMenubar (Widget menu, XmxMenubarStruct *menulist,
|
|||||||
("pushbutton", xmPushButtonGadgetClass,
|
("pushbutton", xmPushButtonGadgetClass,
|
||||||
menu, Xmx_wargs, Xmx_n);
|
menu, Xmx_wargs, Xmx_n);
|
||||||
XmStringFree (xmstr);
|
XmStringFree (xmstr);
|
||||||
XtAddCallback
|
XtAddCallback
|
||||||
(_buttons[_i - _separators], XmNactivateCallback,
|
(_buttons[_i - _separators], XmNactivateCallback,
|
||||||
menulist[_i].func,
|
menulist[_i].func,
|
||||||
(XtPointer)_XmxMakeClientData (menulist[_i].data));
|
(XtPointer)_XmxMakeClientData (menulist[_i].data));
|
||||||
|
|
||||||
/* Add thie button to the menu record. */
|
/* Add thie button to the menu record. */
|
||||||
_XmxMenuAddEntryToRecord
|
_XmxMenuAddEntryToRecord
|
||||||
(rec, _buttons[_i - _separators], menulist[_i].data);
|
(rec, _buttons[_i - _separators], menulist[_i].data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,23 +49,23 @@ dtm_ ::
|
|||||||
@echo Either set up the ARCH environment or specify a machine type
|
@echo Either set up the ARCH environment or specify a machine type
|
||||||
@echo " ex: make sun"
|
@echo " ex: make sun"
|
||||||
|
|
||||||
solaris :
|
solaris :
|
||||||
make internal "CC=$(CC)" "CFLAGS = -DSUN -DSOLARIS" \
|
make internal "CC=$(CC)" "CFLAGS = -DSUN -DSOLARIS" \
|
||||||
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = /bin/true libdtm.a"
|
"RANLIB_CMD = /bin/true libdtm.a"
|
||||||
|
|
||||||
solarisx86 :
|
solarisx86 :
|
||||||
make internal "CC=$(CC)" "CFLAGS = -DSUN -DSOLARIS" \
|
make internal "CC=$(CC)" "CFLAGS = -DSUN -DSOLARIS" \
|
||||||
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = /bin/true libdtm.a"
|
"RANLIB_CMD = /bin/true libdtm.a"
|
||||||
|
|
||||||
alpha :
|
alpha :
|
||||||
make internal "CFLAGS = -DOSF1 -target $(TARGET_ARCH:-%=%)" \
|
make internal "CFLAGS = -DOSF1 -target $(TARGET_ARCH:-%=%)" \
|
||||||
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = ranlib libdtm.a"
|
"RANLIB_CMD = ranlib libdtm.a"
|
||||||
|
|
||||||
linux :
|
linux :
|
||||||
make internal "CFLAGS = -DLINUX" \
|
make internal "CFLAGS = -DLINUX" \
|
||||||
@ -74,7 +74,7 @@ linux :
|
|||||||
"RANLIB_CMD = ranlib libdtm.a"
|
"RANLIB_CMD = ranlib libdtm.a"
|
||||||
|
|
||||||
sun4 : sun
|
sun4 : sun
|
||||||
sun :
|
sun :
|
||||||
make internal "CFLAGS = -DSUN -target $(TARGET_ARCH:-%=%)" \
|
make internal "CFLAGS = -DSUN -target $(TARGET_ARCH:-%=%)" \
|
||||||
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
@ -84,7 +84,7 @@ sun :
|
|||||||
"OBJECTS = $(OBJ_SPEC) convert$(ARCH).o mdd$(ARCH).o" \
|
"OBJECTS = $(OBJ_SPEC) convert$(ARCH).o mdd$(ARCH).o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = ranlib libdtm$(ARCH).a"
|
"RANLIB_CMD = ranlib libdtm$(ARCH).a"
|
||||||
next :
|
next :
|
||||||
make internal "CFLAGS = -DNEXT " \
|
make internal "CFLAGS = -DNEXT " \
|
||||||
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
@ -105,19 +105,19 @@ indy: $(OBJ) convert.o
|
|||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = "
|
"RANLIB_CMD = "
|
||||||
|
|
||||||
cray :
|
cray :
|
||||||
make internal "CFLAGS = -DCRAY" "CFT = cft77" \
|
make internal "CFLAGS = -DCRAY" "CFT = cft77" \
|
||||||
"OBJECTS = $(OBJ) craycvt.o crayrtns.o" \
|
"OBJECTS = $(OBJ) craycvt.o crayrtns.o" \
|
||||||
"ARCHIVE = bld q" \
|
"ARCHIVE = bld q" \
|
||||||
"RANLIB_CMD = "
|
"RANLIB_CMD = "
|
||||||
make libdtmf77.a "CFLAGS = -DCRAY" "CFT = cft77" \
|
make libdtmf77.a "CFLAGS = -DCRAY" "CFT = cft77" \
|
||||||
"OBJECTS = $(OBJ) craycvt.o crayrtns.o sdsF.o" \
|
"OBJECTS = $(OBJ) craycvt.o crayrtns.o sdsF.o" \
|
||||||
"ARCHIVE = bld q"
|
"ARCHIVE = bld q"
|
||||||
convex :
|
convex :
|
||||||
make internal "CFLAGS = -DCONVEX -fi" \
|
make internal "CFLAGS = -DCONVEX -fi" \
|
||||||
"OBJECTS = $(OBJ) mdd.o convert.o" "ARCHIVE = ar rv" \
|
"OBJECTS = $(OBJ) mdd.o convert.o" "ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = ranlib libdtm.a"
|
"RANLIB_CMD = ranlib libdtm.a"
|
||||||
ibm :
|
ibm :
|
||||||
make internal "CFLAGS = -DRS6000" "OBJECTS = $(OBJ) mdd.o convert.o" \
|
make internal "CFLAGS = -DRS6000" "OBJECTS = $(OBJ) mdd.o convert.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = ranlib libdtm.a"
|
"RANLIB_CMD = ranlib libdtm.a"
|
||||||
@ -125,11 +125,11 @@ hp :
|
|||||||
make internal "CFLAGS = -Aa -D_HPUX_SOURCE" "OBJECTS = $(OBJ) mdd.o convert.o" \
|
make internal "CFLAGS = -Aa -D_HPUX_SOURCE" "OBJECTS = $(OBJ) mdd.o convert.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = "
|
"RANLIB_CMD = "
|
||||||
dec :
|
dec :
|
||||||
make internal "CFLAGS = -DDEC" "OBJECTS = $(OBJ) mdd.o deccvt.o" \
|
make internal "CFLAGS = -DDEC" "OBJECTS = $(OBJ) mdd.o deccvt.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = ar ts libdtm.a"
|
"RANLIB_CMD = ar ts libdtm.a"
|
||||||
vax :
|
vax :
|
||||||
make internal "CFLAGS = -DVAX" "OBJECTS = $(OBJ) mdd.o vaxcvt.o" \
|
make internal "CFLAGS = -DVAX" "OBJECTS = $(OBJ) mdd.o vaxcvt.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = "
|
"RANLIB_CMD = "
|
||||||
@ -160,12 +160,12 @@ clean::
|
|||||||
|
|
||||||
install::
|
install::
|
||||||
-mv $(DIR)/lib/libdtm.a $(DIR)/lib/libdtm.bak
|
-mv $(DIR)/lib/libdtm.a $(DIR)/lib/libdtm.bak
|
||||||
cp *.a $(DIR)/lib
|
cp *.a $(DIR)/lib
|
||||||
-ranlib $(DIR)/lib/libdtm.a
|
-ranlib $(DIR)/lib/libdtm.a
|
||||||
-rm -f $(DIR)/include/dtm.h $(DIR)/include/sds.h
|
-rm -f $(DIR)/include/dtm.h $(DIR)/include/sds.h
|
||||||
-rm -f $(DIR)/include/ris.h $(DIR)/include/db.h
|
-rm -f $(DIR)/include/ris.h $(DIR)/include/db.h
|
||||||
-rm -f $(DIR)/include/mdd.h $(DIR)/include/sdl.h
|
-rm -f $(DIR)/include/mdd.h $(DIR)/include/sdl.h
|
||||||
-rm -f $(DIR)/include/debug.h $(DIR)/include/arch.h
|
-rm -f $(DIR)/include/debug.h $(DIR)/include/arch.h
|
||||||
cp dtm.h debug.h sds.h ris.h db.h mdd.h sdl.h arch.h $(DIR)/include
|
cp dtm.h debug.h sds.h ris.h db.h mdd.h sdl.h arch.h $(DIR)/include
|
||||||
|
|
||||||
include $(DEPENDS)
|
include $(DEPENDS)
|
||||||
|
@ -49,23 +49,23 @@ dtm_ ::
|
|||||||
@echo Either set up the ARCH environment or specify a machine type
|
@echo Either set up the ARCH environment or specify a machine type
|
||||||
@echo " ex: make sun"
|
@echo " ex: make sun"
|
||||||
|
|
||||||
solaris :
|
solaris :
|
||||||
make internal "CC=$(CC)" "CFLAGS = -DSUN -DSOLARIS" \
|
make internal "CC=$(CC)" "CFLAGS = -DSUN -DSOLARIS" \
|
||||||
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = /bin/true libdtm.a"
|
"RANLIB_CMD = /bin/true libdtm.a"
|
||||||
|
|
||||||
solarisx86 :
|
solarisx86 :
|
||||||
make internal "CC=$(CC)" "CFLAGS = -DSUN -DSOLARIS" \
|
make internal "CC=$(CC)" "CFLAGS = -DSUN -DSOLARIS" \
|
||||||
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = /bin/true libdtm.a"
|
"RANLIB_CMD = /bin/true libdtm.a"
|
||||||
|
|
||||||
alpha :
|
alpha :
|
||||||
make internal "CFLAGS = -DOSF1 -target $(TARGET_ARCH:-%=%)" \
|
make internal "CFLAGS = -DOSF1 -target $(TARGET_ARCH:-%=%)" \
|
||||||
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = ranlib libdtm.a"
|
"RANLIB_CMD = ranlib libdtm.a"
|
||||||
|
|
||||||
linux :
|
linux :
|
||||||
make internal "CFLAGS = -DLINUX" \
|
make internal "CFLAGS = -DLINUX" \
|
||||||
@ -74,7 +74,7 @@ linux :
|
|||||||
"RANLIB_CMD = ranlib libdtm.a"
|
"RANLIB_CMD = ranlib libdtm.a"
|
||||||
|
|
||||||
sun4 : sun
|
sun4 : sun
|
||||||
sun :
|
sun :
|
||||||
make internal "CFLAGS = -DSUN -target $(TARGET_ARCH:-%=%)" \
|
make internal "CFLAGS = -DSUN -target $(TARGET_ARCH:-%=%)" \
|
||||||
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
@ -84,7 +84,7 @@ sun :
|
|||||||
"OBJECTS = $(OBJ_SPEC) convert$(ARCH).o mdd$(ARCH).o" \
|
"OBJECTS = $(OBJ_SPEC) convert$(ARCH).o mdd$(ARCH).o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = ranlib libdtm$(ARCH).a"
|
"RANLIB_CMD = ranlib libdtm$(ARCH).a"
|
||||||
next :
|
next :
|
||||||
make internal "CFLAGS = -DNEXT " \
|
make internal "CFLAGS = -DNEXT " \
|
||||||
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
"OBJECTS = $(OBJ) convert.o mdd.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
@ -105,19 +105,19 @@ indy: $(OBJ) convert.o
|
|||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = "
|
"RANLIB_CMD = "
|
||||||
|
|
||||||
cray :
|
cray :
|
||||||
make internal "CFLAGS = -DCRAY" "CFT = cft77" \
|
make internal "CFLAGS = -DCRAY" "CFT = cft77" \
|
||||||
"OBJECTS = $(OBJ) craycvt.o crayrtns.o" \
|
"OBJECTS = $(OBJ) craycvt.o crayrtns.o" \
|
||||||
"ARCHIVE = bld q" \
|
"ARCHIVE = bld q" \
|
||||||
"RANLIB_CMD = "
|
"RANLIB_CMD = "
|
||||||
make libdtmf77.a "CFLAGS = -DCRAY" "CFT = cft77" \
|
make libdtmf77.a "CFLAGS = -DCRAY" "CFT = cft77" \
|
||||||
"OBJECTS = $(OBJ) craycvt.o crayrtns.o sdsF.o" \
|
"OBJECTS = $(OBJ) craycvt.o crayrtns.o sdsF.o" \
|
||||||
"ARCHIVE = bld q"
|
"ARCHIVE = bld q"
|
||||||
convex :
|
convex :
|
||||||
make internal "CFLAGS = -DCONVEX -fi" \
|
make internal "CFLAGS = -DCONVEX -fi" \
|
||||||
"OBJECTS = $(OBJ) mdd.o convert.o" "ARCHIVE = ar rv" \
|
"OBJECTS = $(OBJ) mdd.o convert.o" "ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = ranlib libdtm.a"
|
"RANLIB_CMD = ranlib libdtm.a"
|
||||||
ibm :
|
ibm :
|
||||||
make internal "CFLAGS = -DRS6000" "OBJECTS = $(OBJ) mdd.o convert.o" \
|
make internal "CFLAGS = -DRS6000" "OBJECTS = $(OBJ) mdd.o convert.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = ranlib libdtm.a"
|
"RANLIB_CMD = ranlib libdtm.a"
|
||||||
@ -125,11 +125,11 @@ hp :
|
|||||||
make internal "CFLAGS = -Aa -D_HPUX_SOURCE" "OBJECTS = $(OBJ) mdd.o convert.o" \
|
make internal "CFLAGS = -Aa -D_HPUX_SOURCE" "OBJECTS = $(OBJ) mdd.o convert.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = "
|
"RANLIB_CMD = "
|
||||||
dec :
|
dec :
|
||||||
make internal "CFLAGS = -DDEC" "OBJECTS = $(OBJ) mdd.o deccvt.o" \
|
make internal "CFLAGS = -DDEC" "OBJECTS = $(OBJ) mdd.o deccvt.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = ar ts libdtm.a"
|
"RANLIB_CMD = ar ts libdtm.a"
|
||||||
vax :
|
vax :
|
||||||
make internal "CFLAGS = -DVAX" "OBJECTS = $(OBJ) mdd.o vaxcvt.o" \
|
make internal "CFLAGS = -DVAX" "OBJECTS = $(OBJ) mdd.o vaxcvt.o" \
|
||||||
"ARCHIVE = ar rv" \
|
"ARCHIVE = ar rv" \
|
||||||
"RANLIB_CMD = "
|
"RANLIB_CMD = "
|
||||||
@ -160,12 +160,12 @@ clean::
|
|||||||
|
|
||||||
install::
|
install::
|
||||||
-mv $(DIR)/lib/libdtm.a $(DIR)/lib/libdtm.bak
|
-mv $(DIR)/lib/libdtm.a $(DIR)/lib/libdtm.bak
|
||||||
cp *.a $(DIR)/lib
|
cp *.a $(DIR)/lib
|
||||||
-ranlib $(DIR)/lib/libdtm.a
|
-ranlib $(DIR)/lib/libdtm.a
|
||||||
-rm -f $(DIR)/include/dtm.h $(DIR)/include/sds.h
|
-rm -f $(DIR)/include/dtm.h $(DIR)/include/sds.h
|
||||||
-rm -f $(DIR)/include/ris.h $(DIR)/include/db.h
|
-rm -f $(DIR)/include/ris.h $(DIR)/include/db.h
|
||||||
-rm -f $(DIR)/include/mdd.h $(DIR)/include/sdl.h
|
-rm -f $(DIR)/include/mdd.h $(DIR)/include/sdl.h
|
||||||
-rm -f $(DIR)/include/debug.h $(DIR)/include/arch.h
|
-rm -f $(DIR)/include/debug.h $(DIR)/include/arch.h
|
||||||
cp dtm.h debug.h sds.h ris.h db.h mdd.h sdl.h arch.h $(DIR)/include
|
cp dtm.h debug.h sds.h ris.h db.h mdd.h sdl.h arch.h $(DIR)/include
|
||||||
|
|
||||||
include $(DEPENDS)
|
include $(DEPENDS)
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
**
|
**
|
||||||
** $Header: /X11/mosaic/cvsroot/xmosaic3/libdtm/arch.h,v 1.5 1996/06/06 19:47:12 spowers Exp $
|
** $Header: /X11/mosaic/cvsroot/xmosaic3/libdtm/arch.h,v 1.5 1996/06/06 19:47:12 spowers Exp $
|
||||||
**
|
**
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
|
||||||
@ -46,7 +46,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.7 92/04/30 20:27:05 jplevyak
|
* Revision 1.7 92/04/30 20:27:05 jplevyak
|
||||||
* Changed Version to 2.3
|
* Changed Version to 2.3
|
||||||
*
|
*
|
||||||
* Revision 1.6 1992/04/14 22:59:57 jefft
|
* Revision 1.6 1992/04/14 22:59:57 jefft
|
||||||
* included sys/limits.h instead of sys/limit.h
|
* included sys/limits.h instead of sys/limit.h
|
||||||
*
|
*
|
||||||
@ -56,7 +56,7 @@
|
|||||||
* Revision 1.4 92/03/10 22:07:10 jplevyak
|
* Revision 1.4 92/03/10 22:07:10 jplevyak
|
||||||
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
||||||
* with modification.
|
* with modification.
|
||||||
*
|
*
|
||||||
* Revision 1.3 1992/03/10 16:52:43 jefft
|
* Revision 1.3 1992/03/10 16:52:43 jefft
|
||||||
* modified convex define to __convex__
|
* modified convex define to __convex__
|
||||||
*
|
*
|
||||||
@ -70,8 +70,8 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
The intent of this file is to provide a standard set of
|
The intent of this file is to provide a standard set of
|
||||||
architecturally descriptive preprocessor definitions by
|
architecturally descriptive preprocessor definitions by
|
||||||
examining the preprocessor identifiers that are defined
|
examining the preprocessor identifiers that are defined
|
||||||
in the native compiler running in the default mode.
|
in the native compiler running in the default mode.
|
||||||
|
|
||||||
Please feel free to add to or correct this file.
|
Please feel free to add to or correct this file.
|
||||||
@ -87,21 +87,21 @@
|
|||||||
SUN - generally any machine by Sun Microsystems
|
SUN - generally any machine by Sun Microsystems
|
||||||
SGI - Silicon Graphics
|
SGI - Silicon Graphics
|
||||||
CRAY - Cray Research
|
CRAY - Cray Research
|
||||||
CONVEX - Convex
|
CONVEX - Convex
|
||||||
CM - Connection Machine
|
CM - Connection Machine
|
||||||
IBM
|
IBM
|
||||||
APPLE
|
APPLE
|
||||||
HP
|
HP
|
||||||
DEC
|
DEC
|
||||||
COMMODORE
|
COMMODORE
|
||||||
General OS
|
General OS
|
||||||
DOS
|
DOS
|
||||||
UNIX
|
UNIX
|
||||||
MACOS
|
MACOS
|
||||||
AMIGA
|
AMIGA
|
||||||
VMS
|
VMS
|
||||||
OS2
|
OS2
|
||||||
General Processor
|
General Processor
|
||||||
SPARC
|
SPARC
|
||||||
MIPS
|
MIPS
|
||||||
68000
|
68000
|
||||||
@ -110,8 +110,8 @@
|
|||||||
80386
|
80386
|
||||||
VAX
|
VAX
|
||||||
PA - HP Percision Architecture
|
PA - HP Percision Architecture
|
||||||
RS6000
|
RS6000
|
||||||
Specific Interesting Qualities
|
Specific Interesting Qualities
|
||||||
BIG_ENDIAN
|
BIG_ENDIAN
|
||||||
LITTLE_ENDIAN
|
LITTLE_ENDIAN
|
||||||
WORD_SIZE - values include 16, 32, 64 (bits)
|
WORD_SIZE - values include 16, 32, 64 (bits)
|
||||||
@ -121,12 +121,12 @@
|
|||||||
|
|
||||||
( possible interesting definitions )
|
( possible interesting definitions )
|
||||||
mc68k unix unixpc (hp 68k ?)
|
mc68k unix unixpc (hp 68k ?)
|
||||||
mc68000
|
mc68000
|
||||||
_I386 i386 AIX _AIX (PS2 running AIX)
|
_I386 i386 AIX _AIX (PS2 running AIX)
|
||||||
alliant (68000 unix)
|
alliant (68000 unix)
|
||||||
vax mc68k32 PORTAR (altos? 30068)
|
vax mc68k32 PORTAR (altos? 30068)
|
||||||
apollo aegis unix (??) (apollo)
|
apollo aegis unix (??) (apollo)
|
||||||
i80386 (compac?) BSD
|
i80386 (compac?) BSD
|
||||||
convex unix (32 bit)
|
convex unix (32 bit)
|
||||||
__convex_c1__
|
__convex_c1__
|
||||||
__convex_c2__
|
__convex_c2__
|
||||||
@ -196,7 +196,7 @@
|
|||||||
# else
|
# else
|
||||||
/* assume */
|
/* assume */
|
||||||
# define _ARCH_BIG_ENDIAN
|
# define _ARCH_BIG_ENDIAN
|
||||||
# define _ARCH_68000
|
# define _ARCH_68000
|
||||||
# endif
|
# endif
|
||||||
#elif defined( NEXT )
|
#elif defined( NEXT )
|
||||||
# define _ARCH_NEXT
|
# define _ARCH_NEXT
|
||||||
@ -209,7 +209,7 @@
|
|||||||
# define _ARCH_CRAY
|
# define _ARCH_CRAY
|
||||||
# define _ARCH_UNIX
|
# define _ARCH_UNIX
|
||||||
# define _ARCH_SYSV /* A rough approximation */
|
# define _ARCH_SYSV /* A rough approximation */
|
||||||
# define _ARCH_BIG_ENDIAN /* ?? */
|
# define _ARCH_BIG_ENDIAN /* ?? */
|
||||||
# define _ARCH_WORD_SIZE 64
|
# define _ARCH_WORD_SIZE 64
|
||||||
#elif defined(vax)
|
#elif defined(vax)
|
||||||
# define _ARCH_DEC
|
# define _ARCH_DEC
|
||||||
@ -230,7 +230,7 @@
|
|||||||
#define _ARCH_WORD_SIZE 32
|
#define _ARCH_WORD_SIZE 32
|
||||||
#define _ARCH_LITTLE_ENDIAN
|
#define _ARCH_LITTLE_ENDIAN
|
||||||
#define _ARCH_PROTO
|
#define _ARCH_PROTO
|
||||||
#elif defined( _IBMR2 )
|
#elif defined( _IBMR2 )
|
||||||
#define _ARCH_IBM
|
#define _ARCH_IBM
|
||||||
#define _ARCH_RS6000
|
#define _ARCH_RS6000
|
||||||
#elif defined( AMIGA )
|
#elif defined( AMIGA )
|
||||||
@ -238,7 +238,7 @@
|
|||||||
# define _ARCH_COMMODORE
|
# define _ARCH_COMMODORE
|
||||||
# define _ARCH_AMIGA
|
# define _ARCH_AMIGA
|
||||||
# define _ARCH_BIG_ENDIAN
|
# define _ARCH_BIG_ENDIAN
|
||||||
# define _ARCH_68000
|
# define _ARCH_68000
|
||||||
# define _ARCH_WORD_SIZE 32
|
# define _ARCH_WORD_SIZE 32
|
||||||
#elif defined ( MS_DOS ) || defined(__TURBOC__)
|
#elif defined ( MS_DOS ) || defined(__TURBOC__)
|
||||||
# define _ARCH_MSDOS
|
# define _ARCH_MSDOS
|
||||||
@ -256,14 +256,14 @@
|
|||||||
#elif defined ( THINK_C ) || defined( applec )
|
#elif defined ( THINK_C ) || defined( applec )
|
||||||
# define _ARCH_APPLE
|
# define _ARCH_APPLE
|
||||||
# define _ARCH_MACOS
|
# define _ARCH_MACOS
|
||||||
# define _ARCH_68000
|
# define _ARCH_68000
|
||||||
# define _ARCH_BIG_ENDIAN
|
# define _ARCH_BIG_ENDIAN
|
||||||
# define _ARCH_WORD_SIZE 32
|
# define _ARCH_WORD_SIZE 32
|
||||||
# define _ARCH_PROTO
|
# define _ARCH_PROTO
|
||||||
#elif defined( alliant )
|
#elif defined( alliant )
|
||||||
/* ?? */
|
/* ?? */
|
||||||
# define _ARCH_UNIX
|
# define _ARCH_UNIX
|
||||||
# define _ARCH_68000
|
# define _ARCH_68000
|
||||||
# define _ARCH_BIG_ENDIAN
|
# define _ARCH_BIG_ENDIAN
|
||||||
# define _ARCH_WORD_SIZE 32
|
# define _ARCH_WORD_SIZE 32
|
||||||
#elif defined( __convex__ ) || defined( __convex_c1__ ) || defined( __convex_c2__ )
|
#elif defined( __convex__ ) || defined( __convex_c1__ ) || defined( __convex_c2__ )
|
||||||
@ -278,13 +278,13 @@
|
|||||||
*/
|
*/
|
||||||
#if !defined( _ARCH_UNIX ) && !defined( _ARCH_MSDOS ) && !defined( _ARCH_VMS ) \
|
#if !defined( _ARCH_UNIX ) && !defined( _ARCH_MSDOS ) && !defined( _ARCH_VMS ) \
|
||||||
&& !defined( _ARCH_MACOS ) && !defined( _ARCH_AMIGA ) && !defined( _ARCH_OS2)
|
&& !defined( _ARCH_MACOS ) && !defined( _ARCH_AMIGA ) && !defined( _ARCH_OS2)
|
||||||
# if defined( unix )
|
# if defined( unix )
|
||||||
# define _ARCH_UNIX
|
# define _ARCH_UNIX
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined( _ARCH_BSD ) && !defined( _ARCH_SYSV ) && defined( _ARCH_UNIX )
|
#if !defined( _ARCH_BSD ) && !defined( _ARCH_SYSV ) && defined( _ARCH_UNIX )
|
||||||
# if defined( USG )
|
# if defined( USG )
|
||||||
# define _ARCH_SYSV
|
# define _ARCH_SYSV
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
@ -294,7 +294,7 @@
|
|||||||
|| defined( mc68020 ) || defined( mc68010 )
|
|| defined( mc68020 ) || defined( mc68010 )
|
||||||
# define _ARCH_68000
|
# define _ARCH_68000
|
||||||
# if !defined( _ARCH_BIG_ENDIAN )
|
# if !defined( _ARCH_BIG_ENDIAN )
|
||||||
# define _ARCH_BIG_ENDIAN
|
# define _ARCH_BIG_ENDIAN
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -51,7 +51,7 @@ static void DTMsigioHandler( sig, code, scp, addr )
|
|||||||
char *addr;
|
char *addr;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Unfortunately, not one of the parameters listed above
|
Unfortunately, not one of the parameters listed above
|
||||||
provides even the slightest help in determinine WHICH
|
provides even the slightest help in determinine WHICH
|
||||||
port is now ready for input, and any system calls
|
port is now ready for input, and any system calls
|
||||||
@ -68,7 +68,7 @@ static void DTMsigioHandler( sig, code, scp, addr )
|
|||||||
if ( !DTMpt[i]->callback ) continue;
|
if ( !DTMpt[i]->callback ) continue;
|
||||||
port = i;
|
port = i;
|
||||||
dtm_map_port_external(&port);
|
dtm_map_port_external(&port);
|
||||||
#if 0
|
#if 0
|
||||||
if ((ready = DTMavailRead( port ))== DTMERROR) continue;
|
if ((ready = DTMavailRead( port ))== DTMERROR) continue;
|
||||||
if ( ready == DTM_PORT_READY ) {
|
if ( ready == DTM_PORT_READY ) {
|
||||||
DBGMSG( "DTMsigioHandler calling user routine\n" );
|
DBGMSG( "DTMsigioHandler calling user routine\n" );
|
||||||
@ -99,7 +99,7 @@ int dtm_sigio( fd )
|
|||||||
#endif
|
#endif
|
||||||
DTMerrno = DTMSOCK;
|
DTMerrno = DTMSOCK;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
#ifdef __hpux
|
#ifdef __hpux
|
||||||
if (flags = ioctl( fd, FIOSSAIOSTAT, &sigio_on ) == -1 ) {
|
if (flags = ioctl( fd, FIOSSAIOSTAT, &sigio_on ) == -1 ) {
|
||||||
#else
|
#else
|
||||||
@ -107,7 +107,7 @@ int dtm_sigio( fd )
|
|||||||
#endif
|
#endif
|
||||||
DTMerrno = DTMSOCK;
|
DTMerrno = DTMSOCK;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
return DTM_OK;
|
return DTM_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ int DTMreadReady( int port, void (*pfn)() )
|
|||||||
int DTMreadReady( port, pfn )
|
int DTMreadReady( port, pfn )
|
||||||
int32 port;
|
int32 port;
|
||||||
void (*pfn)();
|
void (*pfn)();
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
DTMPORT * pp;
|
DTMPORT * pp;
|
||||||
|
|
||||||
@ -136,14 +136,14 @@ int DTMreadReady( port, pfn )
|
|||||||
if ( pp->porttype != INPORTTYPE ) {
|
if ( pp->porttype != INPORTTYPE ) {
|
||||||
DTMerrno = DTMBADPORT;
|
DTMerrno = DTMBADPORT;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
DBGMSG1( "DTMreadReady port has sockfd %d\n", pp->sockfd );
|
DBGMSG1( "DTMreadReady port has sockfd %d\n", pp->sockfd );
|
||||||
#ifndef _ARCH_MSDOS
|
#ifndef _ARCH_MSDOS
|
||||||
if ( (int)signal( SIGIO, DTMsigioHandler) == -1 ) {
|
if ( (int)signal( SIGIO, DTMsigioHandler) == -1 ) {
|
||||||
DBGMSG( "DTMreadReady signal failed\n" );
|
DBGMSG( "DTMreadReady signal failed\n" );
|
||||||
DTMerrno = DTMSOCK;
|
DTMerrno = DTMSOCK;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
pp->callback = pfn;
|
pp->callback = pfn;
|
||||||
{
|
{
|
||||||
@ -151,12 +151,12 @@ int DTMreadReady( port, pfn )
|
|||||||
if( dtm_sigio( pp->sockfd )== DTMERROR) {
|
if( dtm_sigio( pp->sockfd )== DTMERROR) {
|
||||||
DTMerrno = DTMSOCK;
|
DTMerrno = DTMSOCK;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
FOR_EACH_IN_PORT( inp, pp ) {
|
FOR_EACH_IN_PORT( inp, pp ) {
|
||||||
if (dtm_sigio( inp->fd )== DTMERROR) {
|
if (dtm_sigio( inp->fd )== DTMERROR) {
|
||||||
DTMerrno = DTMSOCK;
|
DTMerrno = DTMSOCK;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return DTM_OK;
|
return DTM_OK;
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.3 92/04/30 20:25:27 jplevyak
|
* Revision 1.3 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
* Revision 1.2 1991/06/11 15:21:13 sreedhar
|
* Revision 1.2 1991/06/11 15:21:13 sreedhar
|
||||||
* disclaimer added
|
* disclaimer added
|
||||||
*
|
*
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.4 92/04/30 20:25:27 jplevyak
|
* Revision 1.4 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
* Revision 1.3 1991/06/11 15:21:41 sreedhar
|
* Revision 1.3 1991/06/11 15:21:41 sreedhar
|
||||||
* disclaimer added
|
* disclaimer added
|
||||||
*
|
*
|
||||||
@ -55,7 +55,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.1 90/11/08 16:29:13 jefft
|
* Revision 1.1 90/11/08 16:29:13 jefft
|
||||||
* Initial revision
|
* Initial revision
|
||||||
*
|
*
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ c Plugging DTM in...
|
|||||||
c
|
c
|
||||||
c Revision 1.3 91/06/13 21:23:57 jefft
|
c Revision 1.3 91/06/13 21:23:57 jefft
|
||||||
c added type of function to prevent returning of a float
|
c added type of function to prevent returning of a float
|
||||||
c
|
c
|
||||||
c Revision 1.2 1991/06/11 15:21:54 sreedhar
|
c Revision 1.2 1991/06/11 15:21:54 sreedhar
|
||||||
c disclaimer added
|
c disclaimer added
|
||||||
c
|
c
|
||||||
|
@ -38,7 +38,7 @@ c Plugging DTM in...
|
|||||||
c
|
c
|
||||||
c Revision 1.4 91/06/11 15:21:47 sreedhar
|
c Revision 1.4 91/06/11 15:21:47 sreedhar
|
||||||
c disclaimer added
|
c disclaimer added
|
||||||
c
|
c
|
||||||
c Revision 1.3 1991/05/16 04:40:13 jefft
|
c Revision 1.3 1991/05/16 04:40:13 jefft
|
||||||
c Fixed bugs in TRIPLET conversion
|
c Fixed bugs in TRIPLET conversion
|
||||||
c
|
c
|
||||||
@ -47,7 +47,7 @@ c Fixed bug in Cray floating point conversion routines.
|
|||||||
c
|
c
|
||||||
c Revision 1.1 90/11/08 16:30:17 jefft
|
c Revision 1.1 90/11/08 16:30:17 jefft
|
||||||
c Initial revision
|
c Initial revision
|
||||||
c
|
c
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.8 92/04/30 20:27:05 jplevyak
|
* Revision 1.8 92/04/30 20:27:05 jplevyak
|
||||||
* Changed Version to 2.3
|
* Changed Version to 2.3
|
||||||
*
|
*
|
||||||
* Revision 1.7 1991/11/15 19:42:34 jplevyak
|
* Revision 1.7 1991/11/15 19:42:34 jplevyak
|
||||||
* Removed dependancy on dtmint.h
|
* Removed dependancy on dtmint.h
|
||||||
*
|
*
|
||||||
@ -52,10 +52,10 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.4 91/09/26 20:13:12 jplevyak
|
* Revision 1.4 91/09/26 20:13:12 jplevyak
|
||||||
* Changed to allow setting of debug flags at run time.
|
* Changed to allow setting of debug flags at run time.
|
||||||
*
|
*
|
||||||
* Revision 1.3 91/08/15 19:10:25 sreedhar
|
* Revision 1.3 91/08/15 19:10:25 sreedhar
|
||||||
* Changes for logical portname version
|
* Changes for logical portname version
|
||||||
*
|
*
|
||||||
* Revision 1.2 1991/06/11 15:22:30 sreedhar
|
* Revision 1.2 1991/06/11 15:22:30 sreedhar
|
||||||
* disclaimer added
|
* disclaimer added
|
||||||
*
|
*
|
||||||
@ -65,7 +65,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef DEBUG_INC
|
#ifndef DEBUG_INC
|
||||||
#define DEBUG_INC
|
#define DEBUG_INC
|
||||||
|
|
||||||
#define DBGFLOW(s) if (uDTMdbg & DTM_DBG_MSG) fprintf(stderr, s)
|
#define DBGFLOW(s) if (uDTMdbg & DTM_DBG_MSG) fprintf(stderr, s)
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.4 92/04/30 20:25:27 jplevyak
|
* Revision 1.4 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
* Revision 1.3 1992/04/03 18:25:50 jplevyak
|
* Revision 1.3 1992/04/03 18:25:50 jplevyak
|
||||||
* Fixed indice computation problem.
|
* Fixed indice computation problem.
|
||||||
*
|
*
|
||||||
@ -61,7 +61,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.1 90/11/08 16:40:06 jefft
|
* Revision 1.1 90/11/08 16:40:06 jefft
|
||||||
* Initial revision
|
* Initial revision
|
||||||
*
|
*
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -92,14 +92,14 @@ static int dtm_short(mode, buf, size)
|
|||||||
{
|
{
|
||||||
int nShorts, i;
|
int nShorts, i;
|
||||||
DBGFLOW("# dtm_short called.\n");
|
DBGFLOW("# dtm_short called.\n");
|
||||||
|
|
||||||
nShorts = (mode == DTMLOCAL) ? (size / 2) : size;
|
nShorts = (mode == DTMLOCAL) ? (size / 2) : size;
|
||||||
if (buf)
|
if (buf)
|
||||||
for ( i = 0; i < nShorts ; i++ ) {
|
for ( i = 0; i < nShorts ; i++ ) {
|
||||||
swap(*buf, *(buf+1));
|
swap(*buf, *(buf+1));
|
||||||
buf += 2;
|
buf += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ((mode == DTMLOCAL) ? (size / 2) : (size * 2));
|
return ((mode == DTMLOCAL) ? (size / 2) : (size * 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
282
libdtm/dtm.c
282
libdtm/dtm.c
@ -64,7 +64,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.46 92/05/05 22:27:50 jplevyak
|
* Revision 1.46 92/05/05 22:27:50 jplevyak
|
||||||
* Corrected X interface code.
|
* Corrected X interface code.
|
||||||
*
|
*
|
||||||
* Revision 1.45 1992/04/30 20:25:27 jplevyak
|
* Revision 1.45 1992/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
@ -81,7 +81,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.41 92/03/18 22:25:44 jplevyak
|
* Revision 1.41 92/03/18 22:25:44 jplevyak
|
||||||
* Fix DTMEOF bug with absolute addressed.
|
* Fix DTMEOF bug with absolute addressed.
|
||||||
*
|
*
|
||||||
* Revision 1.40 1992/03/16 20:38:36 creiman
|
* Revision 1.40 1992/03/16 20:38:36 creiman
|
||||||
* Added #include "arch.h"
|
* Added #include "arch.h"
|
||||||
*
|
*
|
||||||
@ -119,7 +119,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.29 92/01/25 14:44:04 jplevyak
|
* Revision 1.29 92/01/25 14:44:04 jplevyak
|
||||||
* Fixed minor bug with DTM_ASYNC and another in AvailWrite
|
* Fixed minor bug with DTM_ASYNC and another in AvailWrite
|
||||||
*
|
*
|
||||||
* Revision 1.28 1992/01/14 19:40:09 creiman
|
* Revision 1.28 1992/01/14 19:40:09 creiman
|
||||||
* #ifndef macintosh for accept_read_connections call to dtm_sigio
|
* #ifndef macintosh for accept_read_connections call to dtm_sigio
|
||||||
*
|
*
|
||||||
@ -170,7 +170,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.13 91/10/14 16:46:18 jplevyak
|
* Revision 1.13 91/10/14 16:46:18 jplevyak
|
||||||
* Added loop for detecting dropped connections during beginRead.
|
* Added loop for detecting dropped connections during beginRead.
|
||||||
*
|
*
|
||||||
* Revision 1.12 1991/10/11 20:21:50 jplevyak
|
* Revision 1.12 1991/10/11 20:21:50 jplevyak
|
||||||
* Fixed bug with multiple senders one receiver.
|
* Fixed bug with multiple senders one receiver.
|
||||||
* Added function DTMcheckRoute.
|
* Added function DTMcheckRoute.
|
||||||
@ -182,7 +182,7 @@
|
|||||||
* Revision 1.10 91/09/26 20:22:43 jplevyak
|
* Revision 1.10 91/09/26 20:22:43 jplevyak
|
||||||
* First stage of reorganization. Use external/internal port mapping.
|
* First stage of reorganization. Use external/internal port mapping.
|
||||||
* Use repackaged dtm_get_nlist and select_one. Fix bugs with availWrite.
|
* Use repackaged dtm_get_nlist and select_one. Fix bugs with availWrite.
|
||||||
*
|
*
|
||||||
* Revision 1.9 1991/09/13 17:34:10 sreedhar
|
* Revision 1.9 1991/09/13 17:34:10 sreedhar
|
||||||
* changes for DTMSYNC, DTMNOSYNC quality of service
|
* changes for DTMSYNC, DTMNOSYNC quality of service
|
||||||
*
|
*
|
||||||
@ -204,7 +204,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.1 90/11/08 16:12:20 jefft
|
* Revision 1.1 90/11/08 16:12:20 jefft
|
||||||
* Initial revision
|
* Initial revision
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -216,33 +216,33 @@
|
|||||||
|
|
||||||
3. Sender awaits "ack from seq start" from the receiver.
|
3. Sender awaits "ack from seq start" from the receiver.
|
||||||
Receipt of ack by sender guarantees the sender that
|
Receipt of ack by sender guarantees the sender that
|
||||||
receiver will definitely accept at least the first user message
|
receiver will definitely accept at least the first user message
|
||||||
sent by the sender. Sender can then send as many user messages
|
sent by the sender. Sender can then send as many user messages
|
||||||
as it wants to ( they would be accepted by receiver ).
|
as it wants to ( they would be accepted by receiver ).
|
||||||
|
|
||||||
4. Sender sends the user's header message and user data messages.
|
4. Sender sends the user's header message and user data messages.
|
||||||
|
|
||||||
3. Receiver will keep accepting user messages on current
|
3. Receiver will keep accepting user messages on current
|
||||||
connection unless a new connection request is received, which
|
connection unless a new connection request is received, which
|
||||||
would be accepted after bumping the current connection.
|
would be accepted after bumping the current connection.
|
||||||
|
|
||||||
4. Sender would send "Messages over" message after it sends all user
|
4. Sender would send "Messages over" message after it sends all user
|
||||||
messages. Receiver would accept same.
|
messages. Receiver would accept same.
|
||||||
|
|
||||||
Graphic picture
|
Graphic picture
|
||||||
|
|
||||||
Sender Receiver
|
Sender Receiver
|
||||||
|
|
||||||
Connect request
|
Connect request
|
||||||
-------------->
|
-------------->
|
||||||
|
|
||||||
Sequence starts |
|
Sequence starts |
|
||||||
--------------> |
|
--------------> |
|
||||||
|
|
|
|
||||||
Ack for seq start |
|
Ack for seq start |
|
||||||
<---------------- |
|
<---------------- |
|
||||||
|
|
|
|
||||||
User header |
|
User header |
|
||||||
--------------> |
|
--------------> |
|
||||||
| --> a sequence of
|
| --> a sequence of
|
||||||
| BEGINWRITE,
|
| BEGINWRITE,
|
||||||
@ -263,13 +263,13 @@
|
|||||||
...............
|
...............
|
||||||
|
|
||||||
|
|
||||||
A "sequence starts" message can be sent in availWrite or
|
A "sequence starts" message can be sent in availWrite or
|
||||||
beginWrite.
|
beginWrite.
|
||||||
|
|
||||||
When no "Ack for header" is received or a write fails.
|
When no "Ack for header" is received or a write fails.
|
||||||
|
|
||||||
Note that the "ack for header", "message over" and "sequence starts"
|
Note that the "ack for header", "message over" and "sequence starts"
|
||||||
messages are called called "ack" in DTM terminology ( send_ack,
|
messages are called called "ack" in DTM terminology ( send_ack,
|
||||||
recv_ack calls used for all these ).
|
recv_ack calls used for all these ).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -438,12 +438,12 @@ static int make_out_connections( pp )
|
|||||||
|
|
||||||
FOR_EACH_OUT_PORT( pcur, pp ) {
|
FOR_EACH_OUT_PORT( pcur, pp ) {
|
||||||
if( pcur->connfd == DTM_NO_CONNECTION) {
|
if( pcur->connfd == DTM_NO_CONNECTION) {
|
||||||
if( dtm_connect( &pcur->sockaddr, &pcur->connfd )
|
if( dtm_connect( &pcur->sockaddr, &pcur->connfd )
|
||||||
== DTMERROR ) {
|
== DTMERROR ) {
|
||||||
DBGFLOW( "make_out_connections: dtm_connect fails \n" );
|
DBGFLOW( "make_out_connections: dtm_connect fails \n" );
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return DTM_OK;
|
return DTM_OK;
|
||||||
}
|
}
|
||||||
@ -457,7 +457,7 @@ static int clear_write_flags(DTMPORT *pp )
|
|||||||
#else
|
#else
|
||||||
static int clear_write_flags( pp )
|
static int clear_write_flags( pp )
|
||||||
DTMPORT *pp;
|
DTMPORT *pp;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
Outport * pcur;
|
Outport * pcur;
|
||||||
|
|
||||||
@ -471,7 +471,7 @@ static int clear_write_flags( pp )
|
|||||||
/*
|
/*
|
||||||
verify_out_connections()
|
verify_out_connections()
|
||||||
Ensure that their is a connection on each out port.
|
Ensure that their is a connection on each out port.
|
||||||
*/
|
*/
|
||||||
#ifdef DTM_PROTOTYPES
|
#ifdef DTM_PROTOTYPES
|
||||||
static int verify_out_connections(DTMPORT *pp )
|
static int verify_out_connections(DTMPORT *pp )
|
||||||
#else
|
#else
|
||||||
@ -485,7 +485,7 @@ static int verify_out_connections( pp )
|
|||||||
if( pcur->connfd == DTM_NO_CONNECTION) {
|
if( pcur->connfd == DTM_NO_CONNECTION) {
|
||||||
DTMerrno = DTMPORTINIT;
|
DTMerrno = DTMPORTINIT;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return DTM_OK;
|
return DTM_OK;
|
||||||
}
|
}
|
||||||
@ -510,7 +510,7 @@ static int check_header_write_ack( pp )
|
|||||||
if ( pcur->connfd == DTM_NO_CONNECTION ) continue;
|
if ( pcur->connfd == DTM_NO_CONNECTION ) continue;
|
||||||
if( !( pcur->availwrite ) ) {
|
if( !( pcur->availwrite ) ) {
|
||||||
int32 tmp;
|
int32 tmp;
|
||||||
if( (pp->qservice == DTM_SYNC) || ((pp->qservice == DTM_ASYNC) &&
|
if( (pp->qservice == DTM_SYNC) || ((pp->qservice == DTM_ASYNC) &&
|
||||||
(dtm_select( pcur->connfd, &tmp, 0 ) == TRUE && tmp >= 4))) {
|
(dtm_select( pcur->connfd, &tmp, 0 ) == TRUE && tmp >= 4))) {
|
||||||
do {
|
do {
|
||||||
int temp;
|
int temp;
|
||||||
@ -524,7 +524,7 @@ static int check_header_write_ack( pp )
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
} while ( dtm_select( pcur->connfd, &tmp, 0 ) == TRUE &&
|
} while ( dtm_select( pcur->connfd, &tmp, 0 ) == TRUE &&
|
||||||
tmp >= 4);
|
tmp >= 4);
|
||||||
pcur->availwrite = TRUE;
|
pcur->availwrite = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -546,7 +546,7 @@ static int check_header_write_ack( pp )
|
|||||||
static void make_write_iov(IOV_BUF *iov,int fStartSeq,int fEndSeq,char *hdr,
|
static void make_write_iov(IOV_BUF *iov,int fStartSeq,int fEndSeq,char *hdr,
|
||||||
int hdrsize,VOIDPTR data,int datasize )
|
int hdrsize,VOIDPTR data,int datasize )
|
||||||
#else
|
#else
|
||||||
static void make_write_iov( iov, fStartSeq, fEndSeq, hdr, hdrsize,
|
static void make_write_iov( iov, fStartSeq, fEndSeq, hdr, hdrsize,
|
||||||
data, datasize )
|
data, datasize )
|
||||||
IOV_BUF *iov;
|
IOV_BUF *iov;
|
||||||
int fStartSeq;
|
int fStartSeq;
|
||||||
@ -567,7 +567,7 @@ static void make_write_iov( iov, fStartSeq, fEndSeq, hdr, hdrsize,
|
|||||||
|
|
||||||
if ( fStartSeq ) {
|
if ( fStartSeq ) {
|
||||||
DBGMSG( "make_write_iov: making start seq\n" );
|
DBGMSG( "make_write_iov: making start seq\n" );
|
||||||
iov->rts_data = DTM_RTS;
|
iov->rts_data = DTM_RTS;
|
||||||
STDINT( iov->rts_data );
|
STDINT( iov->rts_data );
|
||||||
iov->iovec[ i ].iov_base = (char *)&iov->rts_data ;
|
iov->iovec[ i ].iov_base = (char *)&iov->rts_data ;
|
||||||
#define SEQ_START_LEN 4
|
#define SEQ_START_LEN 4
|
||||||
@ -581,7 +581,7 @@ static void make_write_iov( iov, fStartSeq, fEndSeq, hdr, hdrsize,
|
|||||||
if ( hdrsize != 0 ) {
|
if ( hdrsize != 0 ) {
|
||||||
DBGMSG( "make_write_iov: making header\n" );
|
DBGMSG( "make_write_iov: making header\n" );
|
||||||
iov->hdr_size = hdrsize ;
|
iov->hdr_size = hdrsize ;
|
||||||
STDINT( iov->hdr_size );
|
STDINT( iov->hdr_size );
|
||||||
iov->iovec[ i ].iov_base = (char *)&iov->hdr_size ;
|
iov->iovec[ i ].iov_base = (char *)&iov->hdr_size ;
|
||||||
iov->iovec[ i ].iov_len = 4 ;
|
iov->iovec[ i ].iov_len = 4 ;
|
||||||
i += 1 ;
|
i += 1 ;
|
||||||
@ -612,8 +612,8 @@ static void make_write_iov( iov, fStartSeq, fEndSeq, hdr, hdrsize,
|
|||||||
DBGMSG( "make_write_iov: making endseq\n" );
|
DBGMSG( "make_write_iov: making endseq\n" );
|
||||||
iov->end_data = DTM_EOT ;
|
iov->end_data = DTM_EOT ;
|
||||||
STDINT( iov->end_data );
|
STDINT( iov->end_data );
|
||||||
iov->iovec[ i ].iov_base = (char *)&iov->end_data ;
|
iov->iovec[ i ].iov_base = (char *)&iov->end_data ;
|
||||||
iov->iovec[ i ].iov_len = 4 ;
|
iov->iovec[ i ].iov_len = 4 ;
|
||||||
i += 1 ;
|
i += 1 ;
|
||||||
iov->iovsize += 4;
|
iov->iovsize += 4;
|
||||||
}
|
}
|
||||||
@ -646,27 +646,27 @@ static int writev_buffer( pp, iov_buf, fStartSeq )
|
|||||||
|
|
||||||
if ( fStartSeq ) {
|
if ( fStartSeq ) {
|
||||||
if (pcur->availwrite || pcur->seqstart ) {
|
if (pcur->availwrite || pcur->seqstart ) {
|
||||||
DBGMSG1( "writev: dropping start seq = %x\n",
|
DBGMSG1( "writev: dropping start seq = %x\n",
|
||||||
(pcur->availwrite?1:0) | (pcur->seqstart?10:0));
|
(pcur->availwrite?1:0) | (pcur->seqstart?10:0));
|
||||||
/* we have already sent the sequence start, skip it */
|
/* we have already sent the sequence start, skip it */
|
||||||
iov++;
|
iov++;
|
||||||
iovsize -= SEQ_START_LEN;
|
iovsize -= SEQ_START_LEN;
|
||||||
iovlen -= 1;
|
iovlen -= 1;
|
||||||
}
|
}
|
||||||
pcur->seqstart = TRUE;
|
pcur->seqstart = TRUE;
|
||||||
}
|
}
|
||||||
DBGMSG1( "writev_buffer: iovlen = %d\n", iovlen );
|
DBGMSG1( "writev_buffer: iovlen = %d\n", iovlen );
|
||||||
DBGMSG1( "writev_buffer: iovsize = %d\n", iovsize );
|
DBGMSG1( "writev_buffer: iovsize = %d\n", iovsize );
|
||||||
DBGMSG1( "writev_buffer: ptr iov = %X\n", iov );
|
DBGMSG1( "writev_buffer: ptr iov = %X\n", iov );
|
||||||
DBGMSG1( "writev_buffer: first ptr word = %X\n", iov[0].iov_base );
|
DBGMSG1( "writev_buffer: first ptr word = %X\n", iov[0].iov_base );
|
||||||
DBGMSG1( "writev_buffer: first word = %d\n",
|
DBGMSG1( "writev_buffer: first word = %d\n",
|
||||||
*(int *)((iov[0]).iov_base));
|
*(int *)((iov[0]).iov_base));
|
||||||
status = dtm_writev_buffer( pcur->connfd, iov, iovlen, iovsize,
|
status = dtm_writev_buffer( pcur->connfd, iov, iovlen, iovsize,
|
||||||
NULL, 0);
|
NULL, 0);
|
||||||
|
|
||||||
DBGINT( "writev_buffer - status = %d\n", status);
|
DBGINT( "writev_buffer - status = %d\n", status);
|
||||||
|
|
||||||
if( status < 0 ) {
|
if( status < 0 ) {
|
||||||
DBGINT( "dtm_writev_buffer - errno = %d\n", errno );
|
DBGINT( "dtm_writev_buffer - errno = %d\n", errno );
|
||||||
if( DTMerrno == DTMEOF ) {
|
if( DTMerrno == DTMEOF ) {
|
||||||
CHECK_ERR( destroy_out_port( pp, &pcur ));
|
CHECK_ERR( destroy_out_port( pp, &pcur ));
|
||||||
@ -702,16 +702,16 @@ static int32 select_one( connfd )
|
|||||||
FD_SET( connfd, &readmask );
|
FD_SET( connfd, &readmask );
|
||||||
|
|
||||||
#ifdef __hpux
|
#ifdef __hpux
|
||||||
ret = select( FD_SETSIZE, (int *)&readmask, (int *)0, (int *)0,
|
ret = select( FD_SETSIZE, (int *)&readmask, (int *)0, (int *)0,
|
||||||
#else
|
#else
|
||||||
ret = select( FD_SETSIZE, &readmask, (fd_set *)0, (fd_set *)0,
|
ret = select( FD_SETSIZE, &readmask, (fd_set *)0, (fd_set *)0,
|
||||||
#endif
|
#endif
|
||||||
&timeout );
|
&timeout );
|
||||||
if ( ret > 0 ) {
|
if ( ret > 0 ) {
|
||||||
int32 count;
|
int32 count;
|
||||||
ioctl( connfd, FIONREAD, &count );
|
ioctl( connfd, FIONREAD, &count );
|
||||||
DBGMSG1( "select_one: got count = %d\n", count );
|
DBGMSG1( "select_one: got count = %d\n", count );
|
||||||
ret = count;
|
ret = count;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -735,11 +735,11 @@ static int select_one_connection( connfd )
|
|||||||
FD_SET( connfd, &readmask );
|
FD_SET( connfd, &readmask );
|
||||||
|
|
||||||
#ifdef __hpux
|
#ifdef __hpux
|
||||||
return select( FD_SETSIZE, (int *)&readmask, (int *)0, (int *)0,
|
return select( FD_SETSIZE, (int *)&readmask, (int *)0, (int *)0,
|
||||||
#else
|
#else
|
||||||
return select( FD_SETSIZE, &readmask, (fd_set *)0, (fd_set *)0,
|
return select( FD_SETSIZE, &readmask, (fd_set *)0, (fd_set *)0,
|
||||||
#endif
|
#endif
|
||||||
&timeout );
|
&timeout );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -749,15 +749,15 @@ static int select_one_connection( connfd )
|
|||||||
#ifdef DTM_PROTOTYPES
|
#ifdef DTM_PROTOTYPES
|
||||||
static Inport * new_in_port(DTMPORT *pp,int fd )
|
static Inport * new_in_port(DTMPORT *pp,int fd )
|
||||||
#else
|
#else
|
||||||
static Inport * new_in_port( pp, fd )
|
static Inport * new_in_port( pp, fd )
|
||||||
DTMPORT * pp;
|
DTMPORT * pp;
|
||||||
int fd;
|
int fd;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
Inport * inp;
|
Inport * inp;
|
||||||
|
|
||||||
if ( (inp = (Inport *) malloc( sizeof(Inport) )) == NULL ) {
|
if ( (inp = (Inport *) malloc( sizeof(Inport) )) == NULL ) {
|
||||||
DTMerrno = DTMMEM;
|
DTMerrno = DTMMEM;
|
||||||
return (Inport *) DTMERROR;
|
return (Inport *) DTMERROR;
|
||||||
}
|
}
|
||||||
memset(inp,0,sizeof(Inport));
|
memset(inp,0,sizeof(Inport));
|
||||||
@ -775,14 +775,14 @@ static Inport * new_in_port( pp, fd )
|
|||||||
#ifdef PUT_NEW_IN_PORTS_AT_END
|
#ifdef PUT_NEW_IN_PORTS_AT_END
|
||||||
{
|
{
|
||||||
Inport * endp;
|
Inport * endp;
|
||||||
endp = pp->in;
|
endp = pp->in;
|
||||||
if ( endp == NULL )
|
if ( endp == NULL )
|
||||||
pp->in = inp;
|
pp->in = inp;
|
||||||
else {
|
else {
|
||||||
while ( endp->next != NULL ) endp = endp->next;
|
while ( endp->next != NULL ) endp = endp->next;
|
||||||
endp->next = inp;
|
endp->next = inp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
inp->next = pp->in;
|
inp->next = pp->in;
|
||||||
pp->in = inp;
|
pp->in = inp;
|
||||||
@ -794,8 +794,8 @@ static Inport * new_in_port( pp, fd )
|
|||||||
void dtm_handle_in( caddr_t client_data, int * fd, void * id)
|
void dtm_handle_in( caddr_t client_data, int * fd, void * id)
|
||||||
#else
|
#else
|
||||||
void dtm_handle_in( client_data, fd, id )
|
void dtm_handle_in( client_data, fd, id )
|
||||||
caddr_t client_data;
|
caddr_t client_data;
|
||||||
int * fd;
|
int * fd;
|
||||||
void * id;
|
void * id;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
@ -812,10 +812,10 @@ void dtm_handle_in( client_data, fd, id )
|
|||||||
dtm_set_Xcallback
|
dtm_set_Xcallback
|
||||||
|
|
||||||
This function may seem a little strange, after all why have a variable
|
This function may seem a little strange, after all why have a variable
|
||||||
(pp->XaddInput) which has only one valid value (XtAddInput).
|
(pp->XaddInput) which has only one valid value (XtAddInput).
|
||||||
The problem is that we don't want to include the X libraries
|
The problem is that we don't want to include the X libraries
|
||||||
unless we have to. By using this variable which is only set
|
unless we have to. By using this variable which is only set
|
||||||
if the function that will cause this function to get called
|
if the function that will cause this function to get called
|
||||||
is included... which causes the inclusion of the X libraries, we
|
is included... which causes the inclusion of the X libraries, we
|
||||||
avoid the undefined external error.
|
avoid the undefined external error.
|
||||||
*/
|
*/
|
||||||
@ -835,7 +835,7 @@ void dtm_set_Xcallback( pp, inp )
|
|||||||
/* you didn't see this */
|
/* you didn't see this */
|
||||||
int p; for ( p = 0; p < DTMptCount ; p++ ) if ( pp == DTMpt[p] ) break;
|
int p; for ( p = 0; p < DTMptCount ; p++ ) if ( pp == DTMpt[p] ) break;
|
||||||
if ( pp->porttype == INPORTTYPE && pp->XaddInput ) {
|
if ( pp->porttype == INPORTTYPE && pp->XaddInput ) {
|
||||||
inp->XinputId = pp->XaddInput( inp->fd, XtInputReadMask,
|
inp->XinputId = pp->XaddInput( inp->fd, XtInputReadMask,
|
||||||
dtm_handle_in, (caddr_t) p);
|
dtm_handle_in, (caddr_t) p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -855,7 +855,7 @@ int dtm_accept_read_connections(DTMPORT *pp,int fWait )
|
|||||||
#else
|
#else
|
||||||
int dtm_accept_read_connections( pp, fWait )
|
int dtm_accept_read_connections( pp, fWait )
|
||||||
DTMPORT * pp;
|
DTMPORT * pp;
|
||||||
int fWait;
|
int fWait;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
struct timeval timeout ;
|
struct timeval timeout ;
|
||||||
@ -878,16 +878,16 @@ int dtm_accept_read_connections( pp, fWait )
|
|||||||
|
|
||||||
/* No connection yet, await one and accept */
|
/* No connection yet, await one and accept */
|
||||||
|
|
||||||
DBGINT( "dtm_accept_read_connection: pp -> sockfd = %d\n",
|
DBGINT( "dtm_accept_read_connection: pp -> sockfd = %d\n",
|
||||||
pp -> sockfd );
|
pp -> sockfd );
|
||||||
if( (fd = dtm_accept( pp->sockfd, &pp->sockaddr, fWait ? &timeout : 0))
|
if( (fd = dtm_accept( pp->sockfd, &pp->sockaddr, fWait ? &timeout : 0))
|
||||||
== DTMERROR ) {
|
== DTMERROR ) {
|
||||||
if ( !fWait ) return DTM_OK;
|
if ( !fWait ) return DTM_OK;
|
||||||
DTMerrno = DTMTIMEOUT ;
|
DTMerrno = DTMTIMEOUT ;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
DBGINT( "dtm_accept_read_connection: got fd = %d\n", fd );
|
DBGINT( "dtm_accept_read_connection: got fd = %d\n", fd );
|
||||||
CHECK_ERR( inp = new_in_port( pp, fd ));
|
CHECK_ERR( inp = new_in_port( pp, fd ));
|
||||||
#ifndef _ARCH_MACOS
|
#ifndef _ARCH_MACOS
|
||||||
if ( pp->callback ) dtm_sigio( fd );
|
if ( pp->callback ) dtm_sigio( fd );
|
||||||
if ( pp->Xcallback ) dtm_set_Xcallback( pp, inp );
|
if ( pp->Xcallback ) dtm_set_Xcallback( pp, inp );
|
||||||
@ -904,13 +904,13 @@ int dtm_accept_read_connections( pp, fWait )
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
DTMselectRead()
|
DTMselectRead()
|
||||||
Function to test
|
Function to test
|
||||||
a) for existence of a new connection or a new
|
a) for existence of a new connection or a new
|
||||||
message header to be read on a set of DTM ports OR
|
message header to be read on a set of DTM ports OR
|
||||||
b) for whether data is available to be read on a
|
b) for whether data is available to be read on a
|
||||||
set of sockets.
|
set of sockets.
|
||||||
|
|
||||||
Return values :
|
Return values :
|
||||||
DTM_PORT_READY if at least a DTM port or
|
DTM_PORT_READY if at least a DTM port or
|
||||||
socket has something to be
|
socket has something to be
|
||||||
read.
|
read.
|
||||||
@ -920,7 +920,7 @@ int dtm_accept_read_connections( pp, fWait )
|
|||||||
error.
|
error.
|
||||||
|
|
||||||
Each port has status field. Possible values
|
Each port has status field. Possible values
|
||||||
for status field are -
|
for status field are -
|
||||||
|
|
||||||
DTM_PORT_READY something available to be read.
|
DTM_PORT_READY something available to be read.
|
||||||
DTM_PORT_NOT_READY nothing available to be read.
|
DTM_PORT_NOT_READY nothing available to be read.
|
||||||
@ -963,14 +963,14 @@ int DTMselectRead( dtmset, dtmnum, sockset, socknum, period )
|
|||||||
/* Set up DTM ports to be selected on */
|
/* Set up DTM ports to be selected on */
|
||||||
|
|
||||||
for( p1 = dtmset, index = 0 ; index < dtmnum ; index++, p1++ ) {
|
for( p1 = dtmset, index = 0 ; index < dtmnum ; index++, p1++ ) {
|
||||||
reg DTMPORT *pp ;
|
reg DTMPORT *pp ;
|
||||||
int port_internal;
|
int port_internal;
|
||||||
reg Inport *inp;
|
reg Inport *inp;
|
||||||
|
|
||||||
/* Select status is error if port entry is
|
/* Select status is error if port entry is
|
||||||
not initialised.
|
not initialised.
|
||||||
*/
|
*/
|
||||||
if( (port_internal = dtm_map_port_internal( p1->port ))
|
if( (port_internal = dtm_map_port_internal( p1->port ))
|
||||||
== DTMERROR ) {
|
== DTMERROR ) {
|
||||||
p1->status = DTMERROR ;
|
p1->status = DTMERROR ;
|
||||||
continue ;
|
continue ;
|
||||||
@ -981,11 +981,11 @@ int DTMselectRead( dtmset, dtmnum, sockset, socknum, period )
|
|||||||
|
|
||||||
/* look for new connection request */
|
/* look for new connection request */
|
||||||
|
|
||||||
FD_SET( pp -> sockfd, fchk );
|
FD_SET( pp -> sockfd, fchk );
|
||||||
|
|
||||||
/* look for data in existing connection (if it exists) */
|
/* look for data in existing connection (if it exists) */
|
||||||
FOR_EACH_IN_PORT( inp, pp ) {
|
FOR_EACH_IN_PORT( inp, pp ) {
|
||||||
FD_SET( inp->fd, fchk );
|
FD_SET( inp->fd, fchk );
|
||||||
}
|
}
|
||||||
p1->status = DTM_PORT_NOT_READY ;
|
p1->status = DTM_PORT_NOT_READY ;
|
||||||
}
|
}
|
||||||
@ -994,21 +994,21 @@ int DTMselectRead( dtmset, dtmnum, sockset, socknum, period )
|
|||||||
|
|
||||||
for( p2 = sockset, index = 0 ; index < socknum ; index++, p2++ ) {
|
for( p2 = sockset, index = 0 ; index < socknum ; index++, p2++ ) {
|
||||||
FD_SET( p2 -> sockfd, fchk );
|
FD_SET( p2 -> sockfd, fchk );
|
||||||
p2 -> status = DTM_PORT_NOT_READY ;
|
p2 -> status = DTM_PORT_NOT_READY ;
|
||||||
}
|
}
|
||||||
#ifdef __hpux
|
#ifdef __hpux
|
||||||
nf = select( FD_SETSIZE, (int *)fchk, (int *)0, (int *)0,
|
nf = select( FD_SETSIZE, (int *)fchk, (int *)0, (int *)0,
|
||||||
#else
|
#else
|
||||||
nf = select( FD_SETSIZE, fchk, (fd_set *)0, (fd_set *)0,
|
nf = select( FD_SETSIZE, fchk, (fd_set *)0, (fd_set *)0,
|
||||||
#endif
|
#endif
|
||||||
period < 0 ? NULL : &timeout );
|
period < 0 ? NULL : &timeout );
|
||||||
|
|
||||||
/* Select returns error */
|
/* Select returns error */
|
||||||
|
|
||||||
if( nf < 0 ) {
|
if( nf < 0 ) {
|
||||||
DBGINT( "DTMselectRead: select error %d \n", errno );
|
DBGINT( "DTMselectRead: select error %d \n", errno );
|
||||||
DTMerrno = DTMSELECT ;
|
DTMerrno = DTMSELECT ;
|
||||||
return DTMERROR ;
|
return DTMERROR ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* None of the DTM ports or sockets have anything to be read */
|
/* None of the DTM ports or sockets have anything to be read */
|
||||||
@ -1016,7 +1016,7 @@ int DTMselectRead( dtmset, dtmnum, sockset, socknum, period )
|
|||||||
if( nf == 0 ) {
|
if( nf == 0 ) {
|
||||||
DBGFLOW( "DTMselectRead: Nothing to read\n" );
|
DBGFLOW( "DTMselectRead: Nothing to read\n" );
|
||||||
return DTM_PORT_NOT_READY ;
|
return DTM_PORT_NOT_READY ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check whether any DTM port has something to be read */
|
/* Check whether any DTM port has something to be read */
|
||||||
|
|
||||||
@ -1027,14 +1027,14 @@ int DTMselectRead( dtmset, dtmnum, sockset, socknum, period )
|
|||||||
|
|
||||||
if ((port_internal= dtm_map_port_internal( p1->port )) == DTMERROR)
|
if ((port_internal= dtm_map_port_internal( p1->port )) == DTMERROR)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
pp = DTMpt[ port_internal ];
|
pp = DTMpt[ port_internal ];
|
||||||
if (pp->porttype == INPORTTYPE) {
|
if (pp->porttype == INPORTTYPE) {
|
||||||
fNewConnections = fNewConnections ||
|
fNewConnections = fNewConnections ||
|
||||||
(select_one_connection( pp->sockfd ) > 0);
|
(select_one_connection( pp->sockfd ) > 0);
|
||||||
p1->status = DTM_PORT_NOT_READY;
|
p1->status = DTM_PORT_NOT_READY;
|
||||||
} else {
|
} else {
|
||||||
if (select_one_connection( pp->sockfd ) > 0)
|
if (select_one_connection( pp->sockfd ) > 0)
|
||||||
fReady = p1->status = DTM_PORT_READY;
|
fReady = p1->status = DTM_PORT_READY;
|
||||||
else p1->status = DTM_PORT_NOT_READY;
|
else p1->status = DTM_PORT_NOT_READY;
|
||||||
continue;
|
continue;
|
||||||
@ -1049,7 +1049,7 @@ int DTMselectRead( dtmset, dtmnum, sockset, socknum, period )
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
p1->status = DTM_PORT_READY;
|
p1->status = DTM_PORT_READY;
|
||||||
}
|
}
|
||||||
inp = inp->next;
|
inp = inp->next;
|
||||||
}
|
}
|
||||||
if ( p1->status == DTM_PORT_READY ) fReady = DTM_PORT_READY;
|
if ( p1->status == DTM_PORT_READY ) fReady = DTM_PORT_READY;
|
||||||
@ -1058,14 +1058,14 @@ int DTMselectRead( dtmset, dtmnum, sockset, socknum, period )
|
|||||||
/* Check whether any socket has something to be read */
|
/* Check whether any socket has something to be read */
|
||||||
|
|
||||||
for( p2 = sockset, index = 0 ; index < socknum ; index++, p2++ ) {
|
for( p2 = sockset, index = 0 ; index < socknum ; index++, p2++ ) {
|
||||||
p2 -> status = FD_ISSET( p2 -> sockfd, fchk ) ?
|
p2 -> status = FD_ISSET( p2 -> sockfd, fchk ) ?
|
||||||
DTM_PORT_READY : DTM_PORT_NOT_READY ;
|
DTM_PORT_READY : DTM_PORT_NOT_READY ;
|
||||||
if ( p2->status == DTM_PORT_READY ) fReady = DTM_PORT_READY;
|
if ( p2->status == DTM_PORT_READY ) fReady = DTM_PORT_READY;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGFLOW( "DTMselectRead done loop\n" );
|
DBGFLOW( "DTMselectRead done loop\n" );
|
||||||
|
|
||||||
} while (!fReady && (fNewConnections || fFalsePositive));
|
} while (!fReady && (fNewConnections || fFalsePositive));
|
||||||
|
|
||||||
return fReady ;
|
return fReady ;
|
||||||
}
|
}
|
||||||
@ -1076,7 +1076,7 @@ static Inport * inc_in_port(DTMPORT *pp,Inport *inp )
|
|||||||
static Inport * inc_in_port( pp, inp )
|
static Inport * inc_in_port( pp, inp )
|
||||||
DTMPORT * pp;
|
DTMPORT * pp;
|
||||||
Inport * inp;
|
Inport * inp;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if ( inp == NULL || inp->next == NULL )
|
if ( inp == NULL || inp->next == NULL )
|
||||||
return pp->in;
|
return pp->in;
|
||||||
@ -1089,7 +1089,7 @@ static void inc_nextToRead(DTMPORT *pp )
|
|||||||
static void inc_nextToRead( pp )
|
static void inc_nextToRead( pp )
|
||||||
DTMPORT * pp;
|
DTMPORT * pp;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
pp->nextToRead = inc_in_port( pp, pp->nextToRead );
|
pp->nextToRead = inc_in_port( pp, pp->nextToRead );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1106,7 +1106,7 @@ int dtm_destroy_in_port( inp, pp )
|
|||||||
if ( pp->Xcallback ) pp->XremoveInput( inp->XinputId );
|
if ( pp->Xcallback ) pp->XremoveInput( inp->XinputId );
|
||||||
|
|
||||||
close( inp->fd );
|
close( inp->fd );
|
||||||
|
|
||||||
if ( pp->nextToRead == inp )
|
if ( pp->nextToRead == inp )
|
||||||
inc_nextToRead( pp );
|
inc_nextToRead( pp );
|
||||||
if ( pp->nextToRead == inp )
|
if ( pp->nextToRead == inp )
|
||||||
@ -1136,7 +1136,7 @@ int dtm_destroy_in_port( inp, pp )
|
|||||||
return DTM_OK;
|
return DTM_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
send_cts()
|
send_cts()
|
||||||
@ -1148,7 +1148,7 @@ static int send_cts(DTMPORT *pp,int fWait )
|
|||||||
static int send_cts( pp, fWait )
|
static int send_cts( pp, fWait )
|
||||||
DTMPORT * pp;
|
DTMPORT * pp;
|
||||||
int fWait;
|
int fWait;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
Inport * inp = pp->nextToRead;
|
Inport * inp = pp->nextToRead;
|
||||||
Inport * endp;
|
Inport * endp;
|
||||||
@ -1157,7 +1157,7 @@ static int send_cts( pp, fWait )
|
|||||||
DBGMSG( "send_cts: <[\n" );
|
DBGMSG( "send_cts: <[\n" );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If we have no ports return OK
|
If we have no ports return OK
|
||||||
*/
|
*/
|
||||||
if ( inp == NULL ) inp = pp->in;
|
if ( inp == NULL ) inp = pp->in;
|
||||||
if ( inp == NULL ) return DTM_OK;
|
if ( inp == NULL ) return DTM_OK;
|
||||||
@ -1171,7 +1171,7 @@ static int send_cts( pp, fWait )
|
|||||||
if ( inp == endp ) {
|
if ( inp == endp ) {
|
||||||
if ( !fWait ) return DTM_OK;
|
if ( !fWait ) return DTM_OK;
|
||||||
else break;
|
else break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pp->nextToRead = inp;
|
pp->nextToRead = inp;
|
||||||
|
|
||||||
@ -1186,7 +1186,7 @@ static int send_cts( pp, fWait )
|
|||||||
if ( !inp->fCTSsent && ((fWait && (iSent == 1 )) ||
|
if ( !inp->fCTSsent && ((fWait && (iSent == 1 )) ||
|
||||||
(dtm_select( inp->fd, &tmp, 0 ) == TRUE && tmp >= 4))) {
|
(dtm_select( inp->fd, &tmp, 0 ) == TRUE && tmp >= 4))) {
|
||||||
if ( dtm_send_ack( inp->fd, DTM_CTS ) == DTMERROR) {
|
if ( dtm_send_ack( inp->fd, DTM_CTS ) == DTMERROR) {
|
||||||
CHECK_ERR( dtm_destroy_in_port( inp, pp ));
|
CHECK_ERR( dtm_destroy_in_port( inp, pp ));
|
||||||
/*
|
/*
|
||||||
Never hurts to start at the top.
|
Never hurts to start at the top.
|
||||||
*/
|
*/
|
||||||
@ -1202,9 +1202,9 @@ static int send_cts( pp, fWait )
|
|||||||
iSent = 0;
|
iSent = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
inp->fCTSsent = TRUE;
|
inp->fCTSsent = TRUE;
|
||||||
inp->blocklen = DTM_NEW_DATASET;
|
inp->blocklen = DTM_NEW_DATASET;
|
||||||
}
|
}
|
||||||
inp = inc_in_port( pp, inp );
|
inp = inc_in_port( pp, inp );
|
||||||
}
|
}
|
||||||
DBGMSG( "send_cts: ]>\n" );
|
DBGMSG( "send_cts: ]>\n" );
|
||||||
@ -1216,7 +1216,7 @@ static int accept_one_header(DTMPORT *pp,void *header,int size )
|
|||||||
#else
|
#else
|
||||||
static int accept_one_header( pp, header, size )
|
static int accept_one_header( pp, header, size )
|
||||||
DTMPORT * pp;
|
DTMPORT * pp;
|
||||||
void * header;
|
void * header;
|
||||||
int size;
|
int size;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
@ -1227,23 +1227,23 @@ static int accept_one_header( pp, header, size )
|
|||||||
if ( inp == NULL || !inp->fCTSsent || inp->fGotHeader ) {
|
if ( inp == NULL || !inp->fCTSsent || inp->fGotHeader ) {
|
||||||
DTMerrno = DTMCALL;
|
DTMerrno = DTMCALL;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
DBGMSG1( "Accepting RTS on %d\n", inp->fd );
|
DBGMSG1( "Accepting RTS on %d\n", inp->fd );
|
||||||
if (dtm_recv_ack( inp->fd, &ack ) == DTMERROR ) {
|
if (dtm_recv_ack( inp->fd, &ack ) == DTMERROR ) {
|
||||||
dtm_destroy_in_port( inp, pp );
|
dtm_destroy_in_port( inp, pp );
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
if( ack != DTM_RTS ) {
|
if( ack != DTM_RTS ) {
|
||||||
DTMerrno = DTMBADACK;
|
DTMerrno = DTMBADACK;
|
||||||
DBGMSG1( "Something other than RTS received %d\n", ack );
|
DBGMSG1( "Something other than RTS received %d\n", ack );
|
||||||
dtm_destroy_in_port( inp, pp );
|
dtm_destroy_in_port( inp, pp );
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
/* There are no header ack */
|
/* There are no header ack */
|
||||||
if ( dtm_send_ack( inp->fd, DTM_CTS ) == DTMERROR) {
|
if ( dtm_send_ack( inp->fd, DTM_CTS ) == DTMERROR) {
|
||||||
dtm_destroy_in_port( inp, pp );
|
dtm_destroy_in_port( inp, pp );
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1262,7 +1262,7 @@ static int accept_one_header( pp, header, size )
|
|||||||
/*
|
/*
|
||||||
DTMcheckRoute()
|
DTMcheckRoute()
|
||||||
Check whether new routing information has come in.
|
Check whether new routing information has come in.
|
||||||
Returns:
|
Returns:
|
||||||
*/
|
*/
|
||||||
#ifdef DTM_PROTOTYPES
|
#ifdef DTM_PROTOTYPES
|
||||||
int DTMcheckRoute(int port )
|
int DTMcheckRoute(int port )
|
||||||
@ -1289,16 +1289,16 @@ int DTMcheckRoute( port )
|
|||||||
Function to test for existence of a new connection or
|
Function to test for existence of a new connection or
|
||||||
a new message header to be read on a given DTM port.
|
a new message header to be read on a given DTM port.
|
||||||
|
|
||||||
Return values : TRUE if either new connection
|
Return values : TRUE if either new connection
|
||||||
request or something new
|
request or something new
|
||||||
to be read is available on
|
to be read is available on
|
||||||
given port.
|
given port.
|
||||||
DTMERROR on select error.
|
DTMERROR on select error.
|
||||||
FALSE otherwise.
|
FALSE otherwise.
|
||||||
|
|
||||||
Notes :
|
Notes :
|
||||||
|
|
||||||
DTMavailRead is basically call to DTMselectRead for
|
DTMavailRead is basically call to DTMselectRead for
|
||||||
given port with 0 timeout.
|
given port with 0 timeout.
|
||||||
*/
|
*/
|
||||||
#ifdef DTM_PROTOTYPES
|
#ifdef DTM_PROTOTYPES
|
||||||
@ -1318,7 +1318,7 @@ int DTMavailRead( p )
|
|||||||
DTMerrno = DTMNOERR;
|
DTMerrno = DTMNOERR;
|
||||||
|
|
||||||
/* Note: the port here is an external port since that
|
/* Note: the port here is an external port since that
|
||||||
is what selectRead expects
|
is what selectRead expects
|
||||||
*/
|
*/
|
||||||
dtmnum = 1 ;
|
dtmnum = 1 ;
|
||||||
dtmset.port = p ;
|
dtmset.port = p ;
|
||||||
@ -1331,7 +1331,7 @@ int DTMavailRead( p )
|
|||||||
DBGMSG1( "DTMavailRead send_cts returned error %d\n", DTMerrno );
|
DBGMSG1( "DTMavailRead send_cts returned error %d\n", DTMerrno );
|
||||||
if ( DTMerrno == DTMEOF ) fAnyReady = FALSE ;
|
if ( DTMerrno == DTMEOF ) fAnyReady = FALSE ;
|
||||||
else return DTMERROR;
|
else return DTMERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DBGMSG( "DTMavailRead done\n" );
|
DBGMSG( "DTMavailRead done\n" );
|
||||||
return fAnyReady;
|
return fAnyReady;
|
||||||
@ -1386,7 +1386,7 @@ int DTMgetConnectionCount(port, n_connections)
|
|||||||
message is read.
|
message is read.
|
||||||
|
|
||||||
Return values : >= 0 on success.
|
Return values : >= 0 on success.
|
||||||
DTMERROR on some error.
|
DTMERROR on some error.
|
||||||
*/
|
*/
|
||||||
#ifdef DTM_PROTOTYPES
|
#ifdef DTM_PROTOTYPES
|
||||||
int DTMbeginRead(int p,VOIDPTR header,int size )
|
int DTMbeginRead(int p,VOIDPTR header,int size )
|
||||||
@ -1406,8 +1406,8 @@ int DTMbeginRead( p, header, size )
|
|||||||
|
|
||||||
CHECK_ERR( p = dtm_map_port_internal( p ));
|
CHECK_ERR( p = dtm_map_port_internal( p ));
|
||||||
pp = DTMpt[p];
|
pp = DTMpt[p];
|
||||||
|
|
||||||
while ( TRUE ) {
|
while ( TRUE ) {
|
||||||
CHECK_ERR( dtm_accept_read_connections( pp, DTM_WAIT));
|
CHECK_ERR( dtm_accept_read_connections( pp, DTM_WAIT));
|
||||||
if ( send_cts( pp, DTM_WAIT ) == DTMERROR) {
|
if ( send_cts( pp, DTM_WAIT ) == DTMERROR) {
|
||||||
if ( DTMerrno == DTMEOF ) continue;
|
if ( DTMerrno == DTMEOF ) continue;
|
||||||
@ -1415,8 +1415,8 @@ int DTMbeginRead( p, header, size )
|
|||||||
}
|
}
|
||||||
if ( pp->nextToRead == NULL ) continue;
|
if ( pp->nextToRead == NULL ) continue;
|
||||||
DBGFLOW( "DTMbeginRead before accept_one_header.\n" );
|
DBGFLOW( "DTMbeginRead before accept_one_header.\n" );
|
||||||
if (( count = accept_one_header( pp, header, size )) == DTMERROR ) {
|
if (( count = accept_one_header( pp, header, size )) == DTMERROR ) {
|
||||||
if ( DTMerrno == DTMEOF ) continue;
|
if ( DTMerrno == DTMEOF ) continue;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1428,7 +1428,7 @@ int DTMbeginRead( p, header, size )
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
DTMreadDataset()
|
DTMreadDataset()
|
||||||
Function to read user messages.
|
Function to read user messages.
|
||||||
|
|
||||||
Return values : number of bytes read, on success
|
Return values : number of bytes read, on success
|
||||||
DTMERROR on error
|
DTMERROR on error
|
||||||
@ -1466,7 +1466,7 @@ int DTMreadDataset(p, ds, size, type)
|
|||||||
/* fill buffer from network */
|
/* fill buffer from network */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Assume that the caller has checked for EOT
|
Assume that the caller has checked for EOT
|
||||||
*/
|
*/
|
||||||
CHECK_ERR( size = dtm_read_buffer( inp->fd, &inp->blocklen, ds, size));
|
CHECK_ERR( size = dtm_read_buffer( inp->fd, &inp->blocklen, ds, size));
|
||||||
|
|
||||||
@ -1512,22 +1512,22 @@ int DTMendRead( p )
|
|||||||
dtm_discard, DISCARDSIZE) > 0 );
|
dtm_discard, DISCARDSIZE) > 0 );
|
||||||
inp->fCTSsent = FALSE;
|
inp->fCTSsent = FALSE;
|
||||||
inp->fGotHeader = FALSE;
|
inp->fGotHeader = FALSE;
|
||||||
return DTM_OK ;
|
return DTM_OK ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Function to combine reading of header/data.
|
Function to combine reading of header/data.
|
||||||
|
|
||||||
Return values : number of bytes read, on success
|
Return values : number of bytes read, on success
|
||||||
DTMERROR on error
|
DTMERROR on error
|
||||||
|
|
||||||
Notes : This function is really there for completeness
|
Notes : This function is really there for completeness
|
||||||
sake ( it complements DTMwriteMsg ). It is not
|
sake ( it complements DTMwriteMsg ). It is not
|
||||||
very clear how a user can use it effectively
|
very clear how a user can use it effectively
|
||||||
( since he has to know data size beforehand,
|
( since he has to know data size beforehand,
|
||||||
in which case he need not have a header ).
|
in which case he need not have a header ).
|
||||||
|
|
||||||
Hence, implementation of this function is to
|
Hence, implementation of this function is to
|
||||||
just call beginRead, readDataset and endRead
|
just call beginRead, readDataset and endRead
|
||||||
in that order.
|
in that order.
|
||||||
*/
|
*/
|
||||||
@ -1565,7 +1565,7 @@ int DTMreadMsg( p, hdr, hdrsize, data, datasize, datatype )
|
|||||||
|
|
||||||
Return values : TRUE if subsequent write will
|
Return values : TRUE if subsequent write will
|
||||||
succeed.
|
succeed.
|
||||||
FALSE subsequent write will wait/fail.
|
FALSE subsequent write will wait/fail.
|
||||||
DTMERROR if port is not initialised or
|
DTMERROR if port is not initialised or
|
||||||
server ( UDP/TCP ) port not
|
server ( UDP/TCP ) port not
|
||||||
yet acquired etc.
|
yet acquired etc.
|
||||||
@ -1603,12 +1603,12 @@ int DTMavailWrite( port )
|
|||||||
err_count = 0 ;
|
err_count = 0 ;
|
||||||
rstatus = DTM_PORT_READY ;
|
rstatus = DTM_PORT_READY ;
|
||||||
|
|
||||||
FOR_EACH_OUT_PORT( pcur, pp ) {
|
FOR_EACH_OUT_PORT( pcur, pp ) {
|
||||||
|
|
||||||
/* Connect to all new active sockets */
|
/* Connect to all new active sockets */
|
||||||
|
|
||||||
if( pcur->connfd == DTM_NO_CONNECTION ) {
|
if( pcur->connfd == DTM_NO_CONNECTION ) {
|
||||||
if( dtm_quick_connect( &pcur->sockaddr, &pcur->connfd )
|
if( dtm_quick_connect( &pcur->sockaddr, &pcur->connfd )
|
||||||
== DTMERROR ) {
|
== DTMERROR ) {
|
||||||
++err_count ;
|
++err_count ;
|
||||||
continue ;
|
continue ;
|
||||||
@ -1628,14 +1628,14 @@ int DTMavailWrite( port )
|
|||||||
/* send RTS to new sockets */
|
/* send RTS to new sockets */
|
||||||
|
|
||||||
if( dtm_send_ack( pcur->connfd, DTM_RTS ) == DTMERROR ) {
|
if( dtm_send_ack( pcur->connfd, DTM_RTS ) == DTMERROR ) {
|
||||||
if( DTMerrno == DTMEOF )
|
if( DTMerrno == DTMEOF )
|
||||||
CHECK_ERR( destroy_out_port( pp, &pcur ));
|
CHECK_ERR( destroy_out_port( pp, &pcur ));
|
||||||
++err_count ;
|
++err_count ;
|
||||||
continue ;
|
continue ;
|
||||||
}
|
}
|
||||||
pcur->seqstart = TRUE ;
|
pcur->seqstart = TRUE ;
|
||||||
}
|
}
|
||||||
|
|
||||||
nf = select_one( pcur->connfd );
|
nf = select_one( pcur->connfd );
|
||||||
|
|
||||||
if( nf < 0 ) {
|
if( nf < 0 ) {
|
||||||
@ -1648,10 +1648,10 @@ int DTMavailWrite( port )
|
|||||||
/* No ack yet */
|
/* No ack yet */
|
||||||
|
|
||||||
if( nf == 0 ) {
|
if( nf == 0 ) {
|
||||||
if( pp->qservice == DTM_SYNC )
|
if( pp->qservice == DTM_SYNC )
|
||||||
rstatus = DTM_PORT_NOT_READY ;
|
rstatus = DTM_PORT_NOT_READY ;
|
||||||
continue ;
|
continue ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Receive ack */
|
/* Receive ack */
|
||||||
|
|
||||||
@ -1661,7 +1661,7 @@ int DTMavailWrite( port )
|
|||||||
CHECK_ERR( destroy_out_port( pp, &pcur ));
|
CHECK_ERR( destroy_out_port( pp, &pcur ));
|
||||||
++err_count ;
|
++err_count ;
|
||||||
continue ;
|
continue ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* port is available for write */
|
/* port is available for write */
|
||||||
|
|
||||||
@ -1674,7 +1674,7 @@ int DTMavailWrite( port )
|
|||||||
At some future point we may want to send the status
|
At some future point we may want to send the status
|
||||||
of err_count to the server.
|
of err_count to the server.
|
||||||
*/
|
*/
|
||||||
pp->fLastWasSuccessfulAvailWrite = ( err_count == 0 )
|
pp->fLastWasSuccessfulAvailWrite = ( err_count == 0 )
|
||||||
&& ( rstatus == DTM_PORT_READY );
|
&& ( rstatus == DTM_PORT_READY );
|
||||||
return ( err_count != 0 ) ? DTM_PORT_NOT_READY : rstatus ;
|
return ( err_count != 0 ) ? DTM_PORT_NOT_READY : rstatus ;
|
||||||
}
|
}
|
||||||
@ -1688,7 +1688,7 @@ int DTMavailWrite( port )
|
|||||||
int DTMbeginWrite(int port,VOIDPTR header,int size )
|
int DTMbeginWrite(int port,VOIDPTR header,int size )
|
||||||
#else
|
#else
|
||||||
int DTMbeginWrite( port, header, size )
|
int DTMbeginWrite( port, header, size )
|
||||||
int port ;
|
int port ;
|
||||||
VOIDPTR header;
|
VOIDPTR header;
|
||||||
int size ;
|
int size ;
|
||||||
#endif
|
#endif
|
||||||
@ -1702,8 +1702,8 @@ int DTMbeginWrite( port, header, size )
|
|||||||
if ( pp->fDiscard ) {
|
if ( pp->fDiscard ) {
|
||||||
CHECK_ERR( dtm_check_server( pp, DTM_DONT_WAIT ));
|
CHECK_ERR( dtm_check_server( pp, DTM_DONT_WAIT ));
|
||||||
if ( pp->fDiscard ) return DTM_OK;
|
if ( pp->fDiscard ) return DTM_OK;
|
||||||
}
|
}
|
||||||
if ( !pp->fLastWasSuccessfulAvailWrite )
|
if ( !pp->fLastWasSuccessfulAvailWrite )
|
||||||
CHECK_ERR( dtm_check_server( pp, DTM_WAIT ));
|
CHECK_ERR( dtm_check_server( pp, DTM_WAIT ));
|
||||||
CHECK_ERR( make_out_connections( pp ));
|
CHECK_ERR( make_out_connections( pp ));
|
||||||
make_write_iov( &iov_buf, START_SEQ, NO_END_SEQ, header, size, NULL, 0 );
|
make_write_iov( &iov_buf, START_SEQ, NO_END_SEQ, header, size, NULL, 0 );
|
||||||
@ -1734,7 +1734,7 @@ int DTMwriteDataset(p, ds, size, type)
|
|||||||
IOV_BUF iov_buf;
|
IOV_BUF iov_buf;
|
||||||
|
|
||||||
CHECK_ERR( p = dtm_map_port_internal( p ));
|
CHECK_ERR( p = dtm_map_port_internal( p ));
|
||||||
pp = DTMpt[p];
|
pp = DTMpt[p];
|
||||||
if ( pp->fDiscard ) return DTM_OK;
|
if ( pp->fDiscard ) return DTM_OK;
|
||||||
CHECK_ERR( verify_out_connections( pp ));
|
CHECK_ERR( verify_out_connections( pp ));
|
||||||
size = (*DTMconvertRtns[(int)type]) ( DTMSTD, ds, size );
|
size = (*DTMconvertRtns[(int)type]) ( DTMSTD, ds, size );
|
||||||
@ -1760,12 +1760,12 @@ int DTMendWrite( port )
|
|||||||
reg Outport * pcur ;
|
reg Outport * pcur ;
|
||||||
|
|
||||||
CHECK_ERR( port = dtm_map_port_internal( port ));
|
CHECK_ERR( port = dtm_map_port_internal( port ));
|
||||||
pp = DTMpt[port];
|
pp = DTMpt[port];
|
||||||
/*
|
/*
|
||||||
Check for endWrite before begin
|
Check for endWrite before begin
|
||||||
*/
|
*/
|
||||||
FOR_EACH_OUT_PORT( pcur, pp ) {
|
FOR_EACH_OUT_PORT( pcur, pp ) {
|
||||||
if( pcur->connfd == DTM_NO_CONNECTION ) continue;
|
if( pcur->connfd == DTM_NO_CONNECTION ) continue;
|
||||||
if ((pp->qservice == DTM_SYNC && !pcur->availwrite) ||
|
if ((pp->qservice == DTM_SYNC && !pcur->availwrite) ||
|
||||||
!pcur->seqstart ) {
|
!pcur->seqstart ) {
|
||||||
DTMerrno = DTMCALL;
|
DTMerrno = DTMCALL;
|
||||||
@ -1774,7 +1774,7 @@ int DTMendWrite( port )
|
|||||||
}
|
}
|
||||||
if ( pp->fDiscard ) return DTM_OK;
|
if ( pp->fDiscard ) return DTM_OK;
|
||||||
CHECK_ERR( verify_out_connections( pp ));
|
CHECK_ERR( verify_out_connections( pp ));
|
||||||
make_write_iov( &iov_buf, NO_START_SEQ, END_SEQ, NULL, 0, NULL, 0 );
|
make_write_iov( &iov_buf, NO_START_SEQ, END_SEQ, NULL, 0, NULL, 0 );
|
||||||
CHECK_ERR( writev_buffer( pp, &iov_buf, NO_START_SEQ ));
|
CHECK_ERR( writev_buffer( pp, &iov_buf, NO_START_SEQ ));
|
||||||
CHECK_ERR( clear_write_flags( pp ));
|
CHECK_ERR( clear_write_flags( pp ));
|
||||||
return DTM_OK;
|
return DTM_OK;
|
||||||
@ -1820,8 +1820,8 @@ int DTMwriteMsg( p, hdr, hdrsize, data, datasize, datatype )
|
|||||||
if ( pp->fDiscard ) {
|
if ( pp->fDiscard ) {
|
||||||
CHECK_ERR( dtm_check_server( pp, DTM_DONT_WAIT ));
|
CHECK_ERR( dtm_check_server( pp, DTM_DONT_WAIT ));
|
||||||
if ( pp->fDiscard ) return DTM_OK;
|
if ( pp->fDiscard ) return DTM_OK;
|
||||||
}
|
}
|
||||||
if ( !pp->fLastWasSuccessfulAvailWrite )
|
if ( !pp->fLastWasSuccessfulAvailWrite )
|
||||||
CHECK_ERR( dtm_check_server( pp, DTM_WAIT ));
|
CHECK_ERR( dtm_check_server( pp, DTM_WAIT ));
|
||||||
CHECK_ERR( make_out_connections( pp ));
|
CHECK_ERR( make_out_connections( pp ));
|
||||||
CHECK_ERR( verify_out_connections( pp ));
|
CHECK_ERR( verify_out_connections( pp ));
|
||||||
|
38
libdtm/dtm.h
38
libdtm/dtm.h
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
**
|
**
|
||||||
** dtm.h -
|
** dtm.h -
|
||||||
**
|
**
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
@ -40,7 +40,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.32 92/05/06 16:40:17 jefft
|
* Revision 1.32 92/05/06 16:40:17 jefft
|
||||||
* Modified prototype on DTMaddInput
|
* Modified prototype on DTMaddInput
|
||||||
*
|
*
|
||||||
* Revision 1.31 1992/04/30 20:27:05 jplevyak
|
* Revision 1.31 1992/04/30 20:27:05 jplevyak
|
||||||
* Changed Version to 2.3
|
* Changed Version to 2.3
|
||||||
*
|
*
|
||||||
@ -50,7 +50,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.29 92/03/20 21:14:40 jplevyak
|
* Revision 1.29 92/03/20 21:14:40 jplevyak
|
||||||
* Add DTMgetPortAddr and remove DTMgetPortName
|
* Add DTMgetPortAddr and remove DTMgetPortName
|
||||||
*
|
*
|
||||||
* Revision 1.28 1992/03/13 18:20:31 jefft
|
* Revision 1.28 1992/03/13 18:20:31 jefft
|
||||||
* dtm.h depended on TRUE being defined before it was included. This word
|
* dtm.h depended on TRUE being defined before it was included. This word
|
||||||
* TRUE was changed to 1 and FALSE to 0
|
* TRUE was changed to 1 and FALSE to 0
|
||||||
@ -63,23 +63,23 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.25 92/02/18 14:02:36 jplevyak
|
* Revision 1.25 92/02/18 14:02:36 jplevyak
|
||||||
* Added prototype for DTMaddInPortSocket.
|
* Added prototype for DTMaddInPortSocket.
|
||||||
*
|
*
|
||||||
* Revision 1.24 92/01/30 19:28:24 jplevyak
|
* Revision 1.24 92/01/30 19:28:24 jplevyak
|
||||||
* add prototypes
|
* add prototypes
|
||||||
*
|
*
|
||||||
* Revision 1.23 1992/01/02 16:31:56 dweber
|
* Revision 1.23 1992/01/02 16:31:56 dweber
|
||||||
* Reorganized the DTM class and MSG class
|
* Reorganized the DTM class and MSG class
|
||||||
*
|
*
|
||||||
* Revision 1.22 91/12/13 22:34:48 jefft
|
* Revision 1.22 91/12/13 22:34:48 jefft
|
||||||
* Removed DTMtitle and DTMtype constants. Added dtm_(sg)et_address macros.
|
* Removed DTMtitle and DTMtype constants. Added dtm_(sg)et_address macros.
|
||||||
* Added MSG(sg)etString macros.
|
* Added MSG(sg)etString macros.
|
||||||
*
|
*
|
||||||
* Revision 1.21 91/12/13 15:37:55 dweber
|
* Revision 1.21 91/12/13 15:37:55 dweber
|
||||||
* Fixed DTMHL bugs and re-ordered some macros for clarification
|
* Fixed DTMHL bugs and re-ordered some macros for clarification
|
||||||
*
|
*
|
||||||
* Revision 1.20 91/12/12 22:55:27 jefft
|
* Revision 1.20 91/12/12 22:55:27 jefft
|
||||||
* Add numbers to the comments beside the DTM errors
|
* Add numbers to the comments beside the DTM errors
|
||||||
*
|
*
|
||||||
* Revision 1.19 1991/12/10 22:15:56 jefft
|
* Revision 1.19 1991/12/10 22:15:56 jefft
|
||||||
* fixed DTMgetAddress macro (it was calling dtm_set_char).
|
* fixed DTMgetAddress macro (it was calling dtm_set_char).
|
||||||
*
|
*
|
||||||
@ -96,7 +96,7 @@
|
|||||||
* Revision 1.15 91/10/11 20:23:31 jplevyak
|
* Revision 1.15 91/10/11 20:23:31 jplevyak
|
||||||
* Added prototype for DTMcheckRoute,
|
* Added prototype for DTMcheckRoute,
|
||||||
* Changed DTMSYNC, DTMNOSYNC to DTM_SYNC, DTM_ASYNC.
|
* Changed DTMSYNC, DTMNOSYNC to DTM_SYNC, DTM_ASYNC.
|
||||||
*
|
*
|
||||||
* Revision 1.14 1991/10/10 14:23:43 jplevyak
|
* Revision 1.14 1991/10/10 14:23:43 jplevyak
|
||||||
* All prototypes are now included and tested.
|
* All prototypes are now included and tested.
|
||||||
*
|
*
|
||||||
@ -105,10 +105,10 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.12 91/09/18 15:27:54 jplevyak
|
* Revision 1.12 91/09/18 15:27:54 jplevyak
|
||||||
* Added extern definition for DTMinit()
|
* Added extern definition for DTMinit()
|
||||||
*
|
*
|
||||||
* Revision 1.11 91/09/13 17:36:05 sreedhar
|
* Revision 1.11 91/09/13 17:36:05 sreedhar
|
||||||
* DTMSYNC, DTMNOSYNC added
|
* DTMSYNC, DTMNOSYNC added
|
||||||
*
|
*
|
||||||
* Revision 1.10 1991/09/13 15:31:45 jefft
|
* Revision 1.10 1991/09/13 15:31:45 jefft
|
||||||
* fixed DTMHL macro, it should not have taken an arguement.
|
* fixed DTMHL macro, it should not have taken an arguement.
|
||||||
*
|
*
|
||||||
@ -136,7 +136,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.1 90/11/08 16:31:19 jefft
|
* Revision 1.1 90/11/08 16:31:19 jefft
|
||||||
* Initial revision
|
* Initial revision
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -153,7 +153,7 @@
|
|||||||
#define DTM_PROTOTYPES
|
#define DTM_PROTOTYPES
|
||||||
#define DTM_PROTO(x) x
|
#define DTM_PROTO(x) x
|
||||||
#else
|
#else
|
||||||
#define DTM_PROTO(x) ()
|
#define DTM_PROTO(x) ()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* DTM constants */
|
/* DTM constants */
|
||||||
@ -220,7 +220,7 @@ typedef enum {
|
|||||||
NOTE: the strings that describe the errors in DTMerr
|
NOTE: the strings that describe the errors in DTMerr
|
||||||
are located in fatal.c. Any changes to this list
|
are located in fatal.c. Any changes to this list
|
||||||
must be accompanied by a corresponding change there.
|
must be accompanied by a corresponding change there.
|
||||||
*/
|
*/
|
||||||
#define DTMERROR -1
|
#define DTMERROR -1
|
||||||
#define DTM_OK DTMNOERR
|
#define DTM_OK DTMNOERR
|
||||||
|
|
||||||
@ -282,21 +282,21 @@ extern int DTMreadDataset DTM_PROTO(( int p, VOIDPTR ds, int size, DTMTYPE type)
|
|||||||
extern int DTMwriteDataset DTM_PROTO(( int p, VOIDPTR ds, int size, DTMTYPE type));
|
extern int DTMwriteDataset DTM_PROTO(( int p, VOIDPTR ds, int size, DTMTYPE type));
|
||||||
extern int DTMendRead DTM_PROTO(( int port ));
|
extern int DTMendRead DTM_PROTO(( int port ));
|
||||||
extern int DTMendWrite DTM_PROTO(( int port ));
|
extern int DTMendWrite DTM_PROTO(( int port ));
|
||||||
extern int DTMreadMsg DTM_PROTO(( int p, char *hdr, int hdrsize,
|
extern int DTMreadMsg DTM_PROTO(( int p, char *hdr, int hdrsize,
|
||||||
VOIDPTR data, int datasize, int datatype ));
|
VOIDPTR data, int datasize, int datatype ));
|
||||||
extern int DTMdestroyPort DTM_PROTO(( int port));
|
extern int DTMdestroyPort DTM_PROTO(( int port));
|
||||||
extern char *DTMerrmsg();
|
extern char *DTMerrmsg();
|
||||||
extern int DTMgetPortAddr DTM_PROTO(( int port, char * addr, int length ));
|
extern int DTMgetPortAddr DTM_PROTO(( int port, char * addr, int length ));
|
||||||
extern int DTMgetReturnPortName DTM_PROTO(( int port, char *** addrs,
|
extern int DTMgetReturnPortName DTM_PROTO(( int port, char *** addrs,
|
||||||
int * n_addrs));
|
int * n_addrs));
|
||||||
extern int DTMselectRead DTM_PROTO(( Dtm_set *dtmset, int dtmnum,
|
extern int DTMselectRead DTM_PROTO(( Dtm_set *dtmset, int dtmnum,
|
||||||
Sock_set *sockset, int socknum, int period ));
|
Sock_set *sockset, int socknum, int period ));
|
||||||
extern void DTMsetGroup DTM_PROTO(( char * header, DTMCMD cmd, char * parent,
|
extern void DTMsetGroup DTM_PROTO(( char * header, DTMCMD cmd, char * parent,
|
||||||
char * self ));
|
char * self ));
|
||||||
extern int DTMgetGroup DTM_PROTO(( char * header, DTMCMD cmd, char * parent,
|
extern int DTMgetGroup DTM_PROTO(( char * header, DTMCMD cmd, char * parent,
|
||||||
char * self ));
|
char * self ));
|
||||||
extern int DTMsendRoute DTM_PROTO(( int fd, char * sendto_addr, int addcount,
|
extern int DTMsendRoute DTM_PROTO(( int fd, char * sendto_addr, int addcount,
|
||||||
char **add_addresses, int delcount,
|
char **add_addresses, int delcount,
|
||||||
char **del_addresses ));
|
char **del_addresses ));
|
||||||
extern int DTMcheckRoute DTM_PROTO(( int port ));
|
extern int DTMcheckRoute DTM_PROTO(( int port ));
|
||||||
/* Not implemented Yet */
|
/* Not implemented Yet */
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.7 92/04/30 20:25:27 jplevyak
|
* Revision 1.7 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
* Revision 1.6 1992/03/10 22:07:10 jplevyak
|
* Revision 1.6 1992/03/10 22:07:10 jplevyak
|
||||||
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
||||||
* with modification.
|
* with modification.
|
||||||
@ -58,7 +58,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.1 90/11/08 16:31:46 jefft
|
* Revision 1.1 90/11/08 16:31:46 jefft
|
||||||
* Initial revision
|
* Initial revision
|
||||||
*
|
*
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ int DTMGPA(p, s, len)
|
|||||||
int *p, *len;
|
int *p, *len;
|
||||||
_fcd s;
|
_fcd s;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
char portaddr[128];
|
char portaddr[128];
|
||||||
|
|
||||||
|
|
||||||
@ -120,7 +120,7 @@ int DTMGPA(p, s, len)
|
|||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
|
|
||||||
if (strlen(portaddr) > *len) {
|
if (strlen(portaddr) > *len) {
|
||||||
strncpy(_fcdtocp(s), portaddr, *len);
|
strncpy(_fcdtocp(s), portaddr, *len);
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,7 +204,7 @@ int DTMBW(p, header, size)
|
|||||||
len = _fcdlen(header);
|
len = _fcdlen(header);
|
||||||
strncpy(buffer, _fcdtocp(header), len);
|
strncpy(buffer, _fcdtocp(header), len);
|
||||||
buffer[len] = '\0';
|
buffer[len] = '\0';
|
||||||
|
|
||||||
return DTMbeginWrite(*p, buffer, len+1);
|
return DTMbeginWrite(*p, buffer, len+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.33 92/05/05 22:27:50 jplevyak
|
* Revision 1.33 92/05/05 22:27:50 jplevyak
|
||||||
* Corrected X interface code.
|
* Corrected X interface code.
|
||||||
*
|
*
|
||||||
* Revision 1.32 1992/04/30 20:25:27 jplevyak
|
* Revision 1.32 1992/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
@ -71,7 +71,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.29 92/03/20 21:14:40 jplevyak
|
* Revision 1.29 92/03/20 21:14:40 jplevyak
|
||||||
* Remove comments about DTMgetPortName
|
* Remove comments about DTMgetPortName
|
||||||
*
|
*
|
||||||
* Revision 1.28 1992/03/16 20:38:36 creiman
|
* Revision 1.28 1992/03/16 20:38:36 creiman
|
||||||
* Added #include "arch.h"
|
* Added #include "arch.h"
|
||||||
*
|
*
|
||||||
@ -99,7 +99,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.20 91/11/22 21:31:00 jplevyak
|
* Revision 1.20 91/11/22 21:31:00 jplevyak
|
||||||
* Added initialization for fDiscard (fGotList and fLastWasSuccessfull...)
|
* Added initialization for fDiscard (fGotList and fLastWasSuccessfull...)
|
||||||
*
|
*
|
||||||
* Revision 1.19 1991/10/29 22:05:53 sreedhar
|
* Revision 1.19 1991/10/29 22:05:53 sreedhar
|
||||||
* <sys/malloc.h> for CONVEX
|
* <sys/malloc.h> for CONVEX
|
||||||
*
|
*
|
||||||
@ -120,17 +120,17 @@
|
|||||||
* Major reorganization. Dynamically allocate port table. Encode a
|
* Major reorganization. Dynamically allocate port table. Encode a
|
||||||
* key in the external ports to detect stale ports. Rename and
|
* key in the external ports to detect stale ports. Rename and
|
||||||
* comment functions.
|
* comment functions.
|
||||||
*
|
*
|
||||||
* Revision 1.13 91/09/18 15:28:11 jplevyak
|
* Revision 1.13 91/09/18 15:28:11 jplevyak
|
||||||
* Added some external definitions for shared functions.
|
* Added some external definitions for shared functions.
|
||||||
*
|
*
|
||||||
* Revision 1.12 91/09/16 11:25:37 jplevyak
|
* Revision 1.12 91/09/16 11:25:37 jplevyak
|
||||||
* Fix bug, use of uninitialized register variable in function
|
* Fix bug, use of uninitialized register variable in function
|
||||||
* DTMdestroyPort
|
* DTMdestroyPort
|
||||||
*
|
*
|
||||||
* Revision 1.11 91/09/13 20:09:31 sreedhar
|
* Revision 1.11 91/09/13 20:09:31 sreedhar
|
||||||
* supporting :9900, absence of env variable
|
* supporting :9900, absence of env variable
|
||||||
*
|
*
|
||||||
* Revision 1.10 1991/09/13 18:57:13 sreedhar
|
* Revision 1.10 1991/09/13 18:57:13 sreedhar
|
||||||
* removed DTMinit() fn., added qservice in some places
|
* removed DTMinit() fn., added qservice in some places
|
||||||
*
|
*
|
||||||
@ -151,13 +151,13 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.3 91/01/09 14:10:04 jefft
|
* Revision 1.3 91/01/09 14:10:04 jefft
|
||||||
* Now ignoring SIGPIPE signals.
|
* Now ignoring SIGPIPE signals.
|
||||||
*
|
*
|
||||||
* Revision 1.2 90/11/21 10:53:08 jefft
|
* Revision 1.2 90/11/21 10:53:08 jefft
|
||||||
* Modified DTMgetPortAddr to return IP address instead of hostname.
|
* Modified DTMgetPortAddr to return IP address instead of hostname.
|
||||||
*
|
*
|
||||||
* Revision 1.1 90/11/08 16:21:54 jefft
|
* Revision 1.1 90/11/08 16:21:54 jefft
|
||||||
* Initial revision
|
* Initial revision
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "arch.h"
|
#include "arch.h"
|
||||||
@ -185,11 +185,11 @@
|
|||||||
/*
|
/*
|
||||||
CONTENTS
|
CONTENTS
|
||||||
|
|
||||||
STATIC
|
STATIC
|
||||||
|
|
||||||
init_port() - initialize DTM port.
|
init_port() - initialize DTM port.
|
||||||
grow_ports() - enlarge the DTM port table
|
grow_ports() - enlarge the DTM port table
|
||||||
initialize() - initialize DTM library
|
initialize() - initialize DTM library
|
||||||
get_init_port() - find a new port and initialize it
|
get_init_port() - find a new port and initialize it
|
||||||
set_out_port_address() - set a physical out port adress
|
set_out_port_address() - set a physical out port adress
|
||||||
free_port() - free the internal port structure
|
free_port() - free the internal port structure
|
||||||
@ -205,7 +205,7 @@
|
|||||||
DTMmakeInPort() - make a DTM input port
|
DTMmakeInPort() - make a DTM input port
|
||||||
DTMmakeOutPort() - make a DTM output port
|
DTMmakeOutPort() - make a DTM output port
|
||||||
DTMdestroyPort() - close and free a DTM port
|
DTMdestroyPort() - close and free a DTM port
|
||||||
DTMgetPortAddr() - returns the main port address
|
DTMgetPortAddr() - returns the main port address
|
||||||
|
|
||||||
END CONTENTS */
|
END CONTENTS */
|
||||||
|
|
||||||
@ -273,7 +273,7 @@ static int init_port( port, porttype, qservice )
|
|||||||
|
|
||||||
/* Output port data init */
|
/* Output port data init */
|
||||||
|
|
||||||
pp->out = NULL ;
|
pp->out = NULL ;
|
||||||
pp->fLastWasSuccessfulAvailWrite = FALSE;
|
pp->fLastWasSuccessfulAvailWrite = FALSE;
|
||||||
pp->fGotList = FALSE;
|
pp->fGotList = FALSE;
|
||||||
pp->fDiscard = FALSE;
|
pp->fDiscard = FALSE;
|
||||||
@ -287,7 +287,7 @@ static int init_port( port, porttype, qservice )
|
|||||||
*/
|
*/
|
||||||
static int grow_ports( VOID )
|
static int grow_ports( VOID )
|
||||||
{
|
{
|
||||||
if ( ( DTMpt = (DTMPORT **) realloc( (void *) DTMpt, (DTMptCount +
|
if ( ( DTMpt = (DTMPORT **) realloc( (void *) DTMpt, (DTMptCount +
|
||||||
DTM_PORTS_GROW) * sizeof(DTMPORT))) == NULL ) {
|
DTM_PORTS_GROW) * sizeof(DTMPORT))) == NULL ) {
|
||||||
DTMerrno = DTMMEM;
|
DTMerrno = DTMMEM;
|
||||||
DTMERR("initialize: insufficient memory for port table.");
|
DTMERR("initialize: insufficient memory for port table.");
|
||||||
@ -310,7 +310,7 @@ static int grow_ports( VOID )
|
|||||||
Initailized DTM by allocating memory for dtm_discard
|
Initailized DTM by allocating memory for dtm_discard
|
||||||
and DTMpt ( the port table ).
|
and DTMpt ( the port table ).
|
||||||
*/
|
*/
|
||||||
static int initialize( VOID )
|
static int initialize( VOID )
|
||||||
{
|
{
|
||||||
/* get the debug option flag */
|
/* get the debug option flag */
|
||||||
if ( getenv( "DTMDEBUG" ) ) uDTMdbg = -1;
|
if ( getenv( "DTMDEBUG" ) ) uDTMdbg = -1;
|
||||||
@ -358,7 +358,7 @@ static int get_init_port( portname, porttype, qservice )
|
|||||||
|
|
||||||
/* check for library initialization */
|
/* check for library initialization */
|
||||||
if( !DTM_INITIALIZED ) CHECK_ERR( initialize());
|
if( !DTM_INITIALIZED ) CHECK_ERR( initialize());
|
||||||
|
|
||||||
/* find first open DTM port */
|
/* find first open DTM port */
|
||||||
while ( tries-- ) {
|
while ( tries-- ) {
|
||||||
for (port=0; port < DTMptCount; port+=1) {
|
for (port=0; port < DTMptCount; port+=1) {
|
||||||
@ -366,7 +366,7 @@ static int get_init_port( portname, porttype, qservice )
|
|||||||
CHECK_ERR(init_port( port, porttype, qservice ));
|
CHECK_ERR(init_port( port, porttype, qservice ));
|
||||||
strncpy( DTMpt[port]->portname, portname, (PNAMELEN - 1) );
|
strncpy( DTMpt[port]->portname, portname, (PNAMELEN - 1) );
|
||||||
DTMpt[ port ]->portname[ PNAMELEN - 1 ] = '\0' ;
|
DTMpt[ port ]->portname[ PNAMELEN - 1 ] = '\0' ;
|
||||||
DTMpt[ port ]->key = DTMportSequenceNumber++;
|
DTMpt[ port ]->key = DTMportSequenceNumber++;
|
||||||
return port;
|
return port;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -394,18 +394,18 @@ static int set_out_port_address( port, addr )
|
|||||||
Port aPort ;
|
Port aPort ;
|
||||||
Outport *outp ;
|
Outport *outp ;
|
||||||
|
|
||||||
DBGINT( "set_out_port_address: Physical TCP portname - %x ",
|
DBGINT( "set_out_port_address: Physical TCP portname - %x ",
|
||||||
ntohl( addr.sin_addr.s_addr ));
|
ntohl( addr.sin_addr.s_addr ));
|
||||||
DBGINT( "%d\n", ntohs( addr.sin_port ));
|
DBGINT( "%d\n", ntohs( addr.sin_port ));
|
||||||
|
|
||||||
aPort.portid = addr.sin_port ;
|
aPort.portid = addr.sin_port ;
|
||||||
aPort.nethostid = addr.sin_addr.s_addr ;
|
aPort.nethostid = addr.sin_addr.s_addr ;
|
||||||
CHECK_ERR( outp = dtm_new_out_port( &aPort ));
|
CHECK_ERR( outp = dtm_new_out_port( &aPort ));
|
||||||
|
|
||||||
DTMpt[port]->out = outp ;
|
DTMpt[port]->out = outp ;
|
||||||
|
|
||||||
return DTM_OK;
|
return DTM_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DTM_PROTOTYPES
|
#ifdef DTM_PROTOTYPES
|
||||||
static int free_port(int port )
|
static int free_port(int port )
|
||||||
@ -414,15 +414,15 @@ static int free_port( port )
|
|||||||
int port;
|
int port;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
Outport * outport = DTMpt[ port ]->out;
|
Outport * outport = DTMpt[ port ]->out;
|
||||||
Outport * tempPort;
|
Outport * tempPort;
|
||||||
int returnValue = DTM_OK;
|
int returnValue = DTM_OK;
|
||||||
|
|
||||||
while ( outport != NULL ) {
|
while ( outport != NULL ) {
|
||||||
tempPort = outport->next;
|
tempPort = outport->next;
|
||||||
#ifdef FREE_RETURNS_INT
|
#ifdef FREE_RETURNS_INT
|
||||||
if ( free( outport ) != 0 ) {
|
if ( free( outport ) != 0 ) {
|
||||||
DTMerrno = DTMCORPT;
|
DTMerrno = DTMCORPT;
|
||||||
returnValue = DTMERROR;
|
returnValue = DTMERROR;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -430,10 +430,10 @@ static int free_port( port )
|
|||||||
free( outport );
|
free( outport );
|
||||||
#endif
|
#endif
|
||||||
outport = tempPort;
|
outport = tempPort;
|
||||||
}
|
}
|
||||||
#ifdef FREE_RETURNS_INT
|
#ifdef FREE_RETURNS_INT
|
||||||
if ( free( DTMpt[ port ] ) != 0 ) {
|
if ( free( DTMpt[ port ] ) != 0 ) {
|
||||||
DTMerrno = DTMCORPT;
|
DTMerrno = DTMCORPT;
|
||||||
returnValue = DTMERROR;
|
returnValue = DTMERROR;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@ -455,14 +455,14 @@ static int register_port(int port )
|
|||||||
#else
|
#else
|
||||||
static int register_port( port )
|
static int register_port( port )
|
||||||
int port;
|
int port;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
int fd ;
|
int fd ;
|
||||||
S_ADDR addr ;
|
S_ADDR addr ;
|
||||||
char *naddr ;
|
char *naddr ;
|
||||||
|
|
||||||
CHECK_ERR( naddr = dtm_get_naddr( &addr, &fd ));
|
CHECK_ERR( naddr = dtm_get_naddr( &addr, &fd ));
|
||||||
if(dtm_nsend_sockaddr(fd, naddr, dtm_get_refname(), DTMpt[port]->portname,
|
if(dtm_nsend_sockaddr(fd, naddr, dtm_get_refname(), DTMpt[port]->portname,
|
||||||
&DTMpt[ port ]->sockaddr ) < 0 ) {
|
&DTMpt[ port ]->sockaddr ) < 0 ) {
|
||||||
DTMdestroyPort( DTMpt[port]->sockfd ) ;
|
DTMdestroyPort( DTMpt[port]->sockfd ) ;
|
||||||
DTMerrno = DTMTIMEOUT;
|
DTMerrno = DTMTIMEOUT;
|
||||||
@ -495,15 +495,15 @@ int dtm_map_port_internal( port )
|
|||||||
|
|
||||||
if ( ( thePort ) >= DTMptCount ) {
|
if ( ( thePort ) >= DTMptCount ) {
|
||||||
DTMerrno = DTMBADPORT;
|
DTMerrno = DTMBADPORT;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
if ( DTMpt[ thePort ] == NULL ) {
|
if ( DTMpt[ thePort ] == NULL ) {
|
||||||
DTMerrno = DTMBADPORT;
|
DTMerrno = DTMBADPORT;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
if ( ( port >> DTM_PORT_KEY_SHIFT ) != DTMpt[ thePort ]->key ) {
|
if ( ( port >> DTM_PORT_KEY_SHIFT ) != DTMpt[ thePort ]->key ) {
|
||||||
DTMerrno = DTMBADPORT;
|
DTMerrno = DTMBADPORT;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
return thePort;
|
return thePort;
|
||||||
}
|
}
|
||||||
@ -515,7 +515,7 @@ void dtm_map_port_external( port )
|
|||||||
int32 *port;
|
int32 *port;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
*port = *port | (DTMpt[ *port ]->key << DTM_PORT_KEY_SHIFT);
|
*port = *port | (DTMpt[ *port ]->key << DTM_PORT_KEY_SHIFT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -544,11 +544,11 @@ int DTMmakeInPort(portname, qservice )
|
|||||||
|
|
||||||
CHECK_ERR(port = get_init_port(portname, INPORTTYPE, qservice ));
|
CHECK_ERR(port = get_init_port(portname, INPORTTYPE, qservice ));
|
||||||
DBGMSG2("DTMmakeInPort port %d addr %X\n", port, DTMpt[port] );
|
DBGMSG2("DTMmakeInPort port %d addr %X\n", port, DTMpt[port] );
|
||||||
CHECK_ERR(dtm_init_sockaddr( &DTMpt[ port ]->sockaddr,
|
CHECK_ERR(dtm_init_sockaddr( &DTMpt[ port ]->sockaddr,
|
||||||
DTMpt[ port ]->portname, &fLogicalName ));
|
DTMpt[ port ]->portname, &fLogicalName ));
|
||||||
DTMpt[port]->fLogical = fLogicalName;
|
DTMpt[port]->fLogical = fLogicalName;
|
||||||
|
|
||||||
if ((DTMpt[port]->sockfd = dtm_socket_init( &DTMpt[port]->sockaddr,
|
if ((DTMpt[port]->sockfd = dtm_socket_init( &DTMpt[port]->sockaddr,
|
||||||
INPORTTYPE, fLogicalName )) == DTMERROR ) {
|
INPORTTYPE, fLogicalName )) == DTMERROR ) {
|
||||||
free_port(port);
|
free_port(port);
|
||||||
return DTMERROR ;
|
return DTMERROR ;
|
||||||
@ -564,7 +564,7 @@ int DTMmakeInPort(portname, qservice )
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
DTMmakeOutPort()
|
DTMmakeOutPort()
|
||||||
Create and initialze a new port.
|
Create and initialze a new port.
|
||||||
portname may be a logical or a physical port.
|
portname may be a logical or a physical port.
|
||||||
qservice is reserved for future use.
|
qservice is reserved for future use.
|
||||||
@ -576,7 +576,7 @@ int DTMmakeOutPort(char *portname,int qservice )
|
|||||||
int DTMmakeOutPort(portname, qservice )
|
int DTMmakeOutPort(portname, qservice )
|
||||||
char *portname;
|
char *portname;
|
||||||
int qservice ;
|
int qservice ;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
int port;
|
int port;
|
||||||
int fLogicalName = TRUE;
|
int fLogicalName = TRUE;
|
||||||
@ -585,10 +585,10 @@ int DTMmakeOutPort(portname, qservice )
|
|||||||
DBGFLOW("DTMmakeOutPort called.\n");
|
DBGFLOW("DTMmakeOutPort called.\n");
|
||||||
|
|
||||||
CHECK_ERR( (port = get_init_port( portname, OUTPORTTYPE, qservice)));
|
CHECK_ERR( (port = get_init_port( portname, OUTPORTTYPE, qservice)));
|
||||||
CHECK_ERR((dtm_init_sockaddr(&addr, DTMpt[port]->portname,&fLogicalName)));
|
CHECK_ERR((dtm_init_sockaddr(&addr, DTMpt[port]->portname,&fLogicalName)));
|
||||||
DTMpt[port]->fLogical = fLogicalName;
|
DTMpt[port]->fLogical = fLogicalName;
|
||||||
|
|
||||||
if( !fLogicalName ) CHECK_ERR( set_out_port_address( port, addr ));
|
if( !fLogicalName ) CHECK_ERR( set_out_port_address( port, addr ));
|
||||||
|
|
||||||
if( (DTMpt[port] -> sockfd = dtm_socket_init( &DTMpt[port] -> sockaddr,
|
if( (DTMpt[port] -> sockfd = dtm_socket_init( &DTMpt[port] -> sockaddr,
|
||||||
OUTPORTTYPE, fLogicalName )) == DTMERROR ) {
|
OUTPORTTYPE, fLogicalName )) == DTMERROR ) {
|
||||||
@ -614,7 +614,7 @@ int DTMdestroyPort(int port)
|
|||||||
#else
|
#else
|
||||||
int DTMdestroyPort(port)
|
int DTMdestroyPort(port)
|
||||||
int port;
|
int port;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
reg DTMPORT *pp ;
|
reg DTMPORT *pp ;
|
||||||
|
|
||||||
@ -634,7 +634,7 @@ int DTMdestroyPort(port)
|
|||||||
|
|
||||||
if( pp -> porttype == INPORTTYPE ) {
|
if( pp -> porttype == INPORTTYPE ) {
|
||||||
register Inport *pcur ;
|
register Inport *pcur ;
|
||||||
FOR_EACH_IN_PORT( pcur, pp ) {
|
FOR_EACH_IN_PORT( pcur, pp ) {
|
||||||
if( pcur->fd != DTM_NO_CONNECTION ) {
|
if( pcur->fd != DTM_NO_CONNECTION ) {
|
||||||
if ( pp->Xcallback ) pp->XremoveInput( pcur->XinputId );
|
if ( pp->Xcallback ) pp->XremoveInput( pcur->XinputId );
|
||||||
close( pcur->fd ) ;
|
close( pcur->fd ) ;
|
||||||
@ -643,11 +643,11 @@ int DTMdestroyPort(port)
|
|||||||
} else {
|
} else {
|
||||||
register Outport *pcur ;
|
register Outport *pcur ;
|
||||||
|
|
||||||
FOR_EACH_OUT_PORT( pcur, pp ) {
|
FOR_EACH_OUT_PORT( pcur, pp ) {
|
||||||
if( pcur->connfd != DTM_NO_CONNECTION ) close( pcur->connfd ) ;
|
if( pcur->connfd != DTM_NO_CONNECTION ) close( pcur->connfd ) ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* free space allocated for port */
|
/* free space allocated for port */
|
||||||
|
|
||||||
free_port( port );
|
free_port( port );
|
||||||
@ -686,7 +686,7 @@ int DTMgetPortAddr(port, addr, length)
|
|||||||
sprintf(pnum, ":%d", ntohs( DTMpt[port]->sockaddr.sin_port ) );
|
sprintf(pnum, ":%d", ntohs( DTMpt[port]->sockaddr.sin_port ) );
|
||||||
if ( strlen( pnum ) + strlen( addr ) + 1 > length ) {
|
if ( strlen( pnum ) + strlen( addr ) + 1 > length ) {
|
||||||
DTMerrno = DTMBUFOVR;
|
DTMerrno = DTMBUFOVR;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
strcat(addr, pnum);
|
strcat(addr, pnum);
|
||||||
|
|
||||||
@ -704,7 +704,7 @@ static char * dtm_addr_to_a( addr )
|
|||||||
uint32 hnum = addr.sin_addr.s_addr;
|
uint32 hnum = addr.sin_addr.s_addr;
|
||||||
unsigned char * p_hnum = (unsigned char *) &hnum;
|
unsigned char * p_hnum = (unsigned char *) &hnum;
|
||||||
|
|
||||||
sprintf(addr_buf, "%d.%d.%d.%d:%d",
|
sprintf(addr_buf, "%d.%d.%d.%d:%d",
|
||||||
p_hnum[0], p_hnum[1], p_hnum[2], p_hnum[3], ntohs( addr.sin_port ));
|
p_hnum[0], p_hnum[1], p_hnum[2], p_hnum[3], ntohs( addr.sin_port ));
|
||||||
return addr_buf;
|
return addr_buf;
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.28 92/05/05 22:27:50 jplevyak
|
* Revision 1.28 92/05/05 22:27:50 jplevyak
|
||||||
* Corrected X interface code.
|
* Corrected X interface code.
|
||||||
*
|
*
|
||||||
* Revision 1.27 1992/04/30 20:27:05 jplevyak
|
* Revision 1.27 1992/04/30 20:27:05 jplevyak
|
||||||
* Changed Version to 2.3
|
* Changed Version to 2.3
|
||||||
*
|
*
|
||||||
@ -62,13 +62,13 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.20 92/02/27 23:59:56 jplevyak
|
* Revision 1.20 92/02/27 23:59:56 jplevyak
|
||||||
* Fixup prototype problems.
|
* Fixup prototype problems.
|
||||||
*
|
*
|
||||||
* Revision 1.19 1992/01/30 19:28:50 jplevyak
|
* Revision 1.19 1992/01/30 19:28:50 jplevyak
|
||||||
* Add support for c++ type external definitions.
|
* Add support for c++ type external definitions.
|
||||||
*
|
*
|
||||||
* Revision 1.18 92/01/24 18:45:50 jefft
|
* Revision 1.18 92/01/24 18:45:50 jefft
|
||||||
* Removed prototypes for dtm_set_<type> and dtm_get_<type>, added them to dtm.h
|
* Removed prototypes for dtm_set_<type> and dtm_get_<type>, added them to dtm.h
|
||||||
*
|
*
|
||||||
* Revision 1.17 1991/12/16 19:44:04 jefft
|
* Revision 1.17 1991/12/16 19:44:04 jefft
|
||||||
* Fixed bug with defining of NULL macro
|
* Fixed bug with defining of NULL macro
|
||||||
*
|
*
|
||||||
@ -97,13 +97,13 @@
|
|||||||
* Major reorganization. Made this file compatible with dtm.h. Moved
|
* Major reorganization. Made this file compatible with dtm.h. Moved
|
||||||
* redundant out. Added several configuration parameters, added
|
* redundant out. Added several configuration parameters, added
|
||||||
* prototypes for internally global functions.
|
* prototypes for internally global functions.
|
||||||
*
|
*
|
||||||
* Revision 1.9 91/09/18 15:28:50 jplevyak
|
* Revision 1.9 91/09/18 15:28:50 jplevyak
|
||||||
* Added some external definitions for shared functions.
|
* Added some external definitions for shared functions.
|
||||||
*
|
*
|
||||||
* Revision 1.8 91/09/13 17:37:37 sreedhar
|
* Revision 1.8 91/09/13 17:37:37 sreedhar
|
||||||
* MAX132 instead of MAXBUFSIZE
|
* MAX132 instead of MAXBUFSIZE
|
||||||
*
|
*
|
||||||
* Revision 1.7 1991/08/15 19:10:53 sreedhar
|
* Revision 1.7 1991/08/15 19:10:53 sreedhar
|
||||||
* Changes for logical portname version
|
* Changes for logical portname version
|
||||||
*
|
*
|
||||||
@ -121,10 +121,10 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.2 90/11/21 12:35:44 jefft
|
* Revision 1.2 90/11/21 12:35:44 jefft
|
||||||
* Removed trailing comma from DTM error enum type.
|
* Removed trailing comma from DTM error enum type.
|
||||||
*
|
*
|
||||||
* Revision 1.1 90/11/08 16:32:03 jefft
|
* Revision 1.1 90/11/08 16:32:03 jefft
|
||||||
* Initial revision
|
* Initial revision
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -147,7 +147,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Added to shut up the SGI compiler which quotes ANSI regulations at
|
/* Added to shut up the SGI compiler which quotes ANSI regulations at
|
||||||
you.
|
you.
|
||||||
*/
|
*/
|
||||||
#ifdef DTM_PROTOTYPES
|
#ifdef DTM_PROTOTYPES
|
||||||
struct sockaddr;
|
struct sockaddr;
|
||||||
@ -163,7 +163,7 @@ struct iovec;
|
|||||||
#define INIT(x)
|
#define INIT(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define reg register
|
#define reg register
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -261,7 +261,7 @@ struct iovec;
|
|||||||
*/
|
*/
|
||||||
#define MAX132 132 /* max space of 132 */
|
#define MAX132 132 /* max space of 132 */
|
||||||
#define SEP " " /* blank as separator */
|
#define SEP " " /* blank as separator */
|
||||||
#define COLON ":" /* colon as separator */
|
#define COLON ":" /* colon as separator */
|
||||||
|
|
||||||
#ifndef NULL
|
#ifndef NULL
|
||||||
# if defined( _STDC_ ) || defined( __STDC__ )
|
# if defined( _STDC_ ) || defined( __STDC__ )
|
||||||
@ -272,33 +272,33 @@ struct iovec;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define FOR_EACH_OUT_PORT( pcur, pp ) \
|
#define FOR_EACH_OUT_PORT( pcur, pp ) \
|
||||||
for ( pcur = pp->out; pcur != NULL ; pcur = pcur->next )
|
for ( pcur = pp->out; pcur != NULL ; pcur = pcur->next )
|
||||||
#define FOR_EACH_IN_PORT( inp, pp ) \
|
#define FOR_EACH_IN_PORT( inp, pp ) \
|
||||||
for ( inp = pp->in; inp != NULL ; inp = inp->next )
|
for ( inp = pp->in; inp != NULL ; inp = inp->next )
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
PORT STRUCTURES
|
PORT STRUCTURES
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef struct sockaddr_in S_ADDR;
|
typedef struct sockaddr_in S_ADDR;
|
||||||
|
|
||||||
typedef struct Port
|
typedef struct Port
|
||||||
{
|
{
|
||||||
uint32 nethostid ;
|
uint32 nethostid ;
|
||||||
uint16 portid ;
|
uint16 portid ;
|
||||||
} Port ;
|
} Port ;
|
||||||
|
|
||||||
typedef struct Outport
|
typedef struct Outport
|
||||||
{
|
{
|
||||||
S_ADDR sockaddr ; /* Socket family, netid/hostid, portid */
|
S_ADDR sockaddr ; /* Socket family, netid/hostid, portid */
|
||||||
int32 connfd ; /* connection fd */
|
int32 connfd ; /* connection fd */
|
||||||
int availwrite ; /* port availability for write */
|
int availwrite ; /* port availability for write */
|
||||||
int seqstart ; /* "Sequence start" message sent or not */
|
int seqstart ; /* "Sequence start" message sent or not */
|
||||||
struct Outport * next; /* link to next outport */
|
struct Outport * next; /* link to next outport */
|
||||||
} Outport ;
|
} Outport ;
|
||||||
|
|
||||||
#define DTM_NEW_DATASET -1
|
#define DTM_NEW_DATASET -1
|
||||||
typedef struct Inport {
|
typedef struct Inport {
|
||||||
int32 fd; /* connection fds */
|
int32 fd; /* connection fds */
|
||||||
int32 blocklen; /* records no. of bytes read */
|
int32 blocklen; /* records no. of bytes read */
|
||||||
@ -315,27 +315,27 @@ typedef struct Inport {
|
|||||||
to restore the assertion
|
to restore the assertion
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
XtInputId XinputId;
|
XtInputId XinputId;
|
||||||
#else
|
#else
|
||||||
int XinputId;
|
int XinputId;
|
||||||
#endif
|
#endif
|
||||||
struct Inport * next;
|
struct Inport * next;
|
||||||
} Inport;
|
} Inport;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
S_ADDR sockaddr ;
|
S_ADDR sockaddr ;
|
||||||
/* Socket family, netid/hostid, portid */
|
/* Socket family, netid/hostid, portid */
|
||||||
int32 sockfd ; /* Main socket of port
|
int32 sockfd ; /* Main socket of port
|
||||||
Outport - UDP socket
|
Outport - UDP socket
|
||||||
Inport - TCP socket
|
Inport - TCP socket
|
||||||
*/
|
*/
|
||||||
#ifdef _XtIntrinsic_h
|
#ifdef _XtIntrinsic_h
|
||||||
XtInputId XinputId;
|
XtInputId XinputId;
|
||||||
#else
|
#else
|
||||||
int XinputId;
|
int XinputId;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int fLogical;
|
int fLogical;
|
||||||
char portname[ PNAMELEN ] ; /* Logical portname */
|
char portname[ PNAMELEN ] ; /* Logical portname */
|
||||||
|
|
||||||
@ -375,11 +375,11 @@ typedef struct
|
|||||||
GLOBAL VARIABLES
|
GLOBAL VARIABLES
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define DTM_INITIALIZED (DTMpt != NULL)
|
#define DTM_INITIALIZED (DTMpt != NULL)
|
||||||
#define DTM_PORTS_INITIAL 20
|
#define DTM_PORTS_INITIAL 20
|
||||||
#define DTM_PORTS_GROW 20
|
#define DTM_PORTS_GROW 20
|
||||||
global DTMPORT **DTMpt INIT( NULL );
|
global DTMPORT **DTMpt INIT( NULL );
|
||||||
global int32 DTMptCount INIT( 0 );
|
global int32 DTMptCount INIT( 0 );
|
||||||
global int32 DTMportSequenceNumber INIT( 1 );
|
global int32 DTMportSequenceNumber INIT( 1 );
|
||||||
|
|
||||||
#ifdef _ARCH_MSDOS
|
#ifdef _ARCH_MSDOS
|
||||||
@ -420,7 +420,7 @@ extern int dtm_nsend_sockaddr DTM_PROTO(( int fd, char * sendto_addr,
|
|||||||
char * refname, char * portname, S_ADDR * sockaddr ));
|
char * refname, char * portname, S_ADDR * sockaddr ));
|
||||||
extern Outport * dtm_new_out_port DTM_PROTO(( Port * port ));
|
extern Outport * dtm_new_out_port DTM_PROTO(( Port * port ));
|
||||||
#define DTM_PORT_MASK 0xFFFF
|
#define DTM_PORT_MASK 0xFFFF
|
||||||
#define DTM_PORT_KEY_SHIFT 16
|
#define DTM_PORT_KEY_SHIFT 16
|
||||||
extern int dtm_map_port_internal DTM_PROTO(( int32 port ));
|
extern int dtm_map_port_internal DTM_PROTO(( int32 port ));
|
||||||
extern void dtm_map_port_external DTM_PROTO(( int32 * port ));
|
extern void dtm_map_port_external DTM_PROTO(( int32 * port ));
|
||||||
#define DTM_WAIT TRUE
|
#define DTM_WAIT TRUE
|
||||||
@ -433,26 +433,26 @@ extern int dtm_destroy_in_port DTM_PROTO(( Inport * inp, DTMPORT * pp ));
|
|||||||
extern int dtm_writev_buffer DTM_PROTO(( int fd, struct iovec *iov,
|
extern int dtm_writev_buffer DTM_PROTO(( int fd, struct iovec *iov,
|
||||||
int32 iovlen, int32 iovsize,
|
int32 iovlen, int32 iovsize,
|
||||||
struct sockaddr * addr, int addrlen ));
|
struct sockaddr * addr, int addrlen ));
|
||||||
extern int dtm_read_buffer DTM_PROTO(( int d, int32 * blocklen,
|
extern int dtm_read_buffer DTM_PROTO(( int d, int32 * blocklen,
|
||||||
void * buffer, int length ));
|
void * buffer, int length ));
|
||||||
extern int dtm_recv_header DTM_PROTO((int fd , void * header,
|
extern int dtm_recv_header DTM_PROTO((int fd , void * header,
|
||||||
int length));
|
int length));
|
||||||
extern int dtm_read_header DTM_PROTO((int fd , void * header,
|
extern int dtm_read_header DTM_PROTO((int fd , void * header,
|
||||||
int length));
|
int length));
|
||||||
extern int dtm_parse_ipaddr DTM_PROTO(( char * source,
|
extern int dtm_parse_ipaddr DTM_PROTO(( char * source,
|
||||||
unsigned long * dest ));
|
unsigned long * dest ));
|
||||||
extern int dtm_quick_select DTM_PROTO(( int socket, int32 * count ));
|
extern int dtm_quick_select DTM_PROTO(( int socket, int32 * count ));
|
||||||
extern int dtm_select DTM_PROTO(( int fd, int32 * count,
|
extern int dtm_select DTM_PROTO(( int fd, int32 * count,
|
||||||
int32 time ));
|
int32 time ));
|
||||||
extern int dtm_accept DTM_PROTO(( int fd, S_ADDR * sn,
|
extern int dtm_accept DTM_PROTO(( int fd, S_ADDR * sn,
|
||||||
struct timeval * timeout ));
|
struct timeval * timeout ));
|
||||||
extern int dtm_connect DTM_PROTO(( S_ADDR * sn, int * sockret ));
|
extern int dtm_connect DTM_PROTO(( S_ADDR * sn, int * sockret ));
|
||||||
extern int dtm_quick_connect DTM_PROTO(( S_ADDR * sn, int * sockret ));
|
extern int dtm_quick_connect DTM_PROTO(( S_ADDR * sn, int * sockret ));
|
||||||
extern int dmt_end_connect DTM_PROTO(( int32 socket ));
|
extern int dmt_end_connect DTM_PROTO(( int32 socket ));
|
||||||
extern unsigned long dtm_get_ipaddr DTM_PROTO(( char * ipaddrstr ));
|
extern unsigned long dtm_get_ipaddr DTM_PROTO(( char * ipaddrstr ));
|
||||||
extern int dtm_socket_init DTM_PROTO(( S_ADDR * sockaddr, int porttype,
|
extern int dtm_socket_init DTM_PROTO(( S_ADDR * sockaddr, int porttype,
|
||||||
int fLogicalName ));
|
int fLogicalName ));
|
||||||
extern int dtm_init_sockaddr DTM_PROTO(( S_ADDR * sockaddr,
|
extern int dtm_init_sockaddr DTM_PROTO(( S_ADDR * sockaddr,
|
||||||
char * portname,
|
char * portname,
|
||||||
int * pfLogicalName ));
|
int * pfLogicalName ));
|
||||||
extern int dtm_ninit DTM_PROTO(( void ));
|
extern int dtm_ninit DTM_PROTO(( void ));
|
||||||
@ -463,13 +463,13 @@ extern char * dtm_find_tag DTM_PROTO(( char *, char *));
|
|||||||
extern int dtm_accept_read_connections DTM_PROTO(( DTMPORT *pp,int fWait ));
|
extern int dtm_accept_read_connections DTM_PROTO(( DTMPORT *pp,int fWait ));
|
||||||
extern void dtm_set_Xcallback DTM_PROTO(( DTMPORT *pp, Inport * inp ));
|
extern void dtm_set_Xcallback DTM_PROTO(( DTMPORT *pp, Inport * inp ));
|
||||||
#ifdef _XtIntrinsic_h
|
#ifdef _XtIntrinsic_h
|
||||||
extern void dtm_handle_in DTM_PROTO(( caddr_t client_data,
|
extern void dtm_handle_in DTM_PROTO(( caddr_t client_data,
|
||||||
int * fd, XtInputId * in ));
|
int * fd, XtInputId * in ));
|
||||||
#else
|
#else
|
||||||
extern void dtm_handle_in DTM_PROTO(( caddr_t client_data,
|
extern void dtm_handle_in DTM_PROTO(( caddr_t client_data,
|
||||||
int * fd, void * in ));
|
int * fd, void * in ));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.8 92/04/30 20:25:27 jplevyak
|
* Revision 1.8 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
* Revision 1.7 1992/03/10 22:07:10 jplevyak
|
* Revision 1.7 1992/03/10 22:07:10 jplevyak
|
||||||
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
||||||
* with modification.
|
* with modification.
|
||||||
@ -58,7 +58,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.5 91/09/26 20:24:21 jplevyak
|
* Revision 1.5 91/09/26 20:24:21 jplevyak
|
||||||
* Added debug.h as include file.
|
* Added debug.h as include file.
|
||||||
*
|
*
|
||||||
* Revision 1.4 1991/06/11 15:19:36 sreedhar
|
* Revision 1.4 1991/06/11 15:19:36 sreedhar
|
||||||
* disclaimer added
|
* disclaimer added
|
||||||
*
|
*
|
||||||
@ -70,7 +70,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.1 90/11/08 16:32:18 jefft
|
* Revision 1.1 90/11/08 16:32:18 jefft
|
||||||
* Initial revision
|
* Initial revision
|
||||||
*
|
*
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
@ -341,7 +341,7 @@ int DTMgetGroup(h, cmd, parent, self)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
*parent = '\0';
|
*parent = '\0';
|
||||||
|
|
||||||
h = strchr(h, ' ')+1;
|
h = strchr(h, ' ')+1;
|
||||||
|
|
||||||
/* get self name */
|
/* get self name */
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.19 92/04/30 20:25:27 jplevyak
|
* Revision 1.19 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
@ -76,7 +76,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined _ARCH_MACOS & !defined NEXT
|
#if !defined _ARCH_MACOS & !defined NEXT
|
||||||
# ifdef CONVEX
|
# ifdef CONVEX
|
||||||
# include <sys/malloc.h>
|
# include <sys/malloc.h>
|
||||||
# else
|
# else
|
||||||
# include <malloc.h>
|
# include <malloc.h>
|
||||||
@ -96,7 +96,7 @@ static void del_nlist DTM_PROTO(( DTMPORT *pp, int count ));
|
|||||||
static void add_nlist DTM_PROTO(( DTMPORT *pp, int count ));
|
static void add_nlist DTM_PROTO(( DTMPORT *pp, int count ));
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Function to initialise self's reference name from environment
|
Function to initialise self's reference name from environment
|
||||||
variable passed by nameserver.
|
variable passed by nameserver.
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ static void add_nlist DTM_PROTO(( DTMPORT *pp, int count ));
|
|||||||
|
|
||||||
Notes : Environment variable - DTM_REFNAME
|
Notes : Environment variable - DTM_REFNAME
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef DTM_PROTOTYPES
|
#ifdef DTM_PROTOTYPES
|
||||||
static int init_refname(char *refname,int len )
|
static int init_refname(char *refname,int len )
|
||||||
#else
|
#else
|
||||||
@ -163,11 +163,11 @@ void dtm_display_buf( outp, portname )
|
|||||||
DBGINT( "dtm_display_buf: Logical port %s\n", portname );
|
DBGINT( "dtm_display_buf: Logical port %s\n", portname );
|
||||||
while ( outp != NULL );
|
while ( outp != NULL );
|
||||||
{
|
{
|
||||||
DBGINT( "dtm_display_buf: Nethostid = %x\n",
|
DBGINT( "dtm_display_buf: Nethostid = %x\n",
|
||||||
ntohl( outp -> sockaddr.sin_addr.s_addr) );
|
ntohl( outp -> sockaddr.sin_addr.s_addr) );
|
||||||
DBGINT( "dtm_display_buf: Portid = %d\n",
|
DBGINT( "dtm_display_buf: Portid = %d\n",
|
||||||
ntohs( outp -> sockaddr.sin_port) );
|
ntohs( outp -> sockaddr.sin_port) );
|
||||||
outp = outp->next;
|
outp = outp->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,7 +182,7 @@ Outport * dtm_new_out_port(Port *port )
|
|||||||
Outport * dtm_new_out_port( port )
|
Outport * dtm_new_out_port( port )
|
||||||
Port * port;
|
Port * port;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
Outport * p;
|
Outport * p;
|
||||||
|
|
||||||
if ( (p = (Outport *) malloc( sizeof( Outport ))) == NULL ) {
|
if ( (p = (Outport *) malloc( sizeof( Outport ))) == NULL ) {
|
||||||
@ -226,8 +226,8 @@ static void del_nlist( pp, count )
|
|||||||
outpLast = NULL;
|
outpLast = NULL;
|
||||||
for ( outp = pp->out ; outp != NULL ; outp = outpNext ) {
|
for ( outp = pp->out ; outp != NULL ; outp = outpNext ) {
|
||||||
outpNext = outp->next;
|
outpNext = outp->next;
|
||||||
if ((outp->sockaddr.sin_port == port.portid ) &&
|
if ((outp->sockaddr.sin_port == port.portid ) &&
|
||||||
(outp-> sockaddr.sin_addr.s_addr == port.nethostid)) {
|
(outp-> sockaddr.sin_addr.s_addr == port.nethostid)) {
|
||||||
if ( outpLast==NULL ) pp->out = outp->next;
|
if ( outpLast==NULL ) pp->out = outp->next;
|
||||||
else outpLast->next = outp->next;
|
else outpLast->next = outp->next;
|
||||||
free( outp );
|
free( outp );
|
||||||
@ -276,9 +276,9 @@ int dtm_check_server( pp, fWait )
|
|||||||
int addcount;
|
int addcount;
|
||||||
|
|
||||||
/* If it is not a logical port is is not listed with the server */
|
/* If it is not a logical port is is not listed with the server */
|
||||||
|
|
||||||
if ( !pp->fLogical ) return DTM_OK;
|
if ( !pp->fLogical ) return DTM_OK;
|
||||||
|
|
||||||
/* Check for new or first routing list */
|
/* Check for new or first routing list */
|
||||||
|
|
||||||
fWait = fWait && (pp->out == NULL);
|
fWait = fWait && (pp->out == NULL);
|
||||||
@ -301,11 +301,11 @@ int dtm_check_server( pp, fWait )
|
|||||||
|
|
||||||
/* Ack the route message */
|
/* Ack the route message */
|
||||||
#if 0
|
#if 0
|
||||||
CHECK_ERR( dtm_nsend_ackroute( portname ));
|
CHECK_ERR( dtm_nsend_ackroute( portname ));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Process the routing message */
|
/* Process the routing message */
|
||||||
|
|
||||||
{
|
{
|
||||||
char * msg_type = strtok( mbuf, SEP );
|
char * msg_type = strtok( mbuf, SEP );
|
||||||
if (!strcmp( msg_type, MROUTEID)) {
|
if (!strcmp( msg_type, MROUTEID)) {
|
||||||
@ -318,7 +318,7 @@ int dtm_check_server( pp, fWait )
|
|||||||
return addcount;
|
return addcount;
|
||||||
} else if ( !strcmp( msg_type, MDISCARD ) ) {
|
} else if ( !strcmp( msg_type, MDISCARD ) ) {
|
||||||
pp->fDiscard = atoi( strtok( NULL, SEP));
|
pp->fDiscard = atoi( strtok( NULL, SEP));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -34,17 +34,17 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.5 92/04/30 20:27:05 jplevyak
|
* Revision 1.5 92/04/30 20:27:05 jplevyak
|
||||||
* Changed Version to 2.3
|
* Changed Version to 2.3
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Purpose : Header file for name server interaction
|
Purpose : Header file for name server interaction
|
||||||
Notes :
|
Notes :
|
||||||
|
|
||||||
Message format:
|
Message format:
|
||||||
|
|
||||||
Portid - nethostid:portid
|
Portid - nethostid:portid
|
||||||
Header - opcode
|
Header - opcode
|
||||||
|
|
||||||
DTM to nameserver
|
DTM to nameserver
|
||||||
@ -52,7 +52,7 @@
|
|||||||
Send message length.
|
Send message length.
|
||||||
|
|
||||||
Mreg - Header refname portname Portid
|
Mreg - Header refname portname Portid
|
||||||
Mackroute - Header refname portname
|
Mackroute - Header refname portname
|
||||||
|
|
||||||
Nameserver to DTM
|
Nameserver to DTM
|
||||||
|
|
||||||
@ -65,11 +65,11 @@
|
|||||||
Nethostid is in dotted decimal notation of internet.
|
Nethostid is in dotted decimal notation of internet.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MREGID "REGISTER"
|
#define MREGID "REGISTER"
|
||||||
#define MREG "%s %s %s %s:%d"
|
#define MREG "%s %s %s %s:%d"
|
||||||
#define MROUTEID "ROUTE"
|
#define MROUTEID "ROUTE"
|
||||||
#define MROUTE "%s %d %d" /* %s:%d %s:%d .... */
|
#define MROUTE "%s %d %d" /* %s:%d %s:%d .... */
|
||||||
#define MACKROUTEID "ROUTE_ACK"
|
#define MACKROUTEID "ROUTE_ACK"
|
||||||
#define MACKROUTE "%s %s %s"
|
#define MACKROUTE "%s %s %s"
|
||||||
#define MDISCARDID "DISCARD"
|
#define MDISCARDID "DISCARD"
|
||||||
#define MDISCARD "%s %d"
|
#define MDISCARD "%s %d"
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.8 92/04/30 20:25:27 jplevyak
|
* Revision 1.8 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
* Revision 1.7 1992/03/10 22:07:10 jplevyak
|
* Revision 1.7 1992/03/10 22:07:10 jplevyak
|
||||||
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
||||||
* with modification.
|
* with modification.
|
||||||
@ -64,10 +64,10 @@
|
|||||||
* Added several new errors, changed the DTMerrmsg function to detect
|
* Added several new errors, changed the DTMerrmsg function to detect
|
||||||
* and return 'unknown error:' errors. Generally encorporated the
|
* and return 'unknown error:' errors. Generally encorporated the
|
||||||
* good features of sherr (from the libtest directory).
|
* good features of sherr (from the libtest directory).
|
||||||
*
|
*
|
||||||
* Revision 1.3 91/06/25 20:13:28 creiman
|
* Revision 1.3 91/06/25 20:13:28 creiman
|
||||||
* Removed varargs and dtm_fatal.
|
* Removed varargs and dtm_fatal.
|
||||||
*
|
*
|
||||||
* Revision 1.2 1991/06/11 15:19:57 sreedhar
|
* Revision 1.2 1991/06/11 15:19:57 sreedhar
|
||||||
* disclaimer added
|
* disclaimer added
|
||||||
*
|
*
|
||||||
@ -133,11 +133,11 @@ char *DTMerrmsg(quiet)
|
|||||||
int quiet;
|
int quiet;
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
char * strUnknown = "unknown error: %d";
|
char * strUnknown = "unknown error: %d";
|
||||||
char strOut[60];
|
char strOut[60];
|
||||||
char * strErr;
|
char * strErr;
|
||||||
|
|
||||||
if ( DTMerrno < (sizeof(err_msg)/sizeof(char *)))
|
if ( DTMerrno < (sizeof(err_msg)/sizeof(char *)))
|
||||||
strErr = err_msg[(int)DTMerrno];
|
strErr = err_msg[(int)DTMerrno];
|
||||||
else {
|
else {
|
||||||
sprintf( strOut, strUnknown, DTMerrno);
|
sprintf( strOut, strUnknown, DTMerrno);
|
||||||
@ -145,7 +145,7 @@ char *DTMerrmsg(quiet)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!quiet)
|
if (!quiet)
|
||||||
fprintf(stderr, "\nDTMerrno = %d: %s\n", DTMerrno,
|
fprintf(stderr, "\nDTMerrno = %d: %s\n", DTMerrno,
|
||||||
strErr);
|
strErr);
|
||||||
return strErr;
|
return strErr;
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
**
|
**
|
||||||
** mdd.c - Multi-Dimensional Data set routines
|
** mdd.c - Multi-Dimensional Data set routines
|
||||||
**
|
**
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
@ -53,7 +53,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.5 92/04/30 20:25:27 jplevyak
|
* Revision 1.5 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
* Revision 1.4 1992/03/10 22:07:10 jplevyak
|
* Revision 1.4 1992/03/10 22:07:10 jplevyak
|
||||||
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
||||||
* with modification.
|
* with modification.
|
||||||
@ -185,7 +185,7 @@ int MDDgetMinMax(h, min, max)
|
|||||||
|
|
||||||
h = strchr(h, ' ') + 1;
|
h = strchr(h, ' ') + 1;
|
||||||
*max = (float)atof(h);
|
*max = (float)atof(h);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.4 92/04/30 20:27:05 jplevyak
|
* Revision 1.4 92/04/30 20:27:05 jplevyak
|
||||||
* Changed Version to 2.3
|
* Changed Version to 2.3
|
||||||
*
|
*
|
||||||
* Revision 1.3 1992/03/10 22:07:10 jplevyak
|
* Revision 1.3 1992/03/10 22:07:10 jplevyak
|
||||||
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
||||||
* with modification.
|
* with modification.
|
||||||
|
@ -47,14 +47,14 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.7 92/04/30 20:25:27 jplevyak
|
* Revision 1.7 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
|
|
||||||
Purpose : Functions to initialise name server address, fd and to
|
Purpose : Functions to initialise name server address, fd and to
|
||||||
to return it.
|
to return it.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -74,10 +74,10 @@
|
|||||||
|
|
||||||
static struct sockaddr_in nsaddr ; /* name server's address */
|
static struct sockaddr_in nsaddr ; /* name server's address */
|
||||||
static int nssockfd = -1 ; /* name server's socket */
|
static int nssockfd = -1 ; /* name server's socket */
|
||||||
static char nameserver[ MAX132 ] ;
|
static char nameserver[ MAX132 ] ;
|
||||||
/*
|
/*
|
||||||
name server address -
|
name server address -
|
||||||
dotted decimal: port number
|
dotted decimal: port number
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -87,10 +87,10 @@ static char nameserver[ MAX132 ] ;
|
|||||||
Return values : DTMERROR on error.
|
Return values : DTMERROR on error.
|
||||||
DTM_OK on success.
|
DTM_OK on success.
|
||||||
Notes :
|
Notes :
|
||||||
Environment variable format :
|
Environment variable format :
|
||||||
|
|
||||||
DTM_NAMESERVER=nethostid:portid
|
DTM_NAMESERVER=nethostid:portid
|
||||||
|
|
||||||
e.g. DTM_NAMESERVER=141.142.221.66:9900
|
e.g. DTM_NAMESERVER=141.142.221.66:9900
|
||||||
*/
|
*/
|
||||||
#ifdef DTM_PROTOTYPES
|
#ifdef DTM_PROTOTYPES
|
||||||
@ -107,10 +107,10 @@ int dtm_ninit()
|
|||||||
DTMERR( "dtm_ninit: Env not setup" );
|
DTMERR( "dtm_ninit: Env not setup" );
|
||||||
return DTMERROR ;
|
return DTMERROR ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialise name server's address, used in send() */
|
/* Initialise name server's address, used in send() */
|
||||||
|
|
||||||
strncpy( nameserver, p, MAX132 );
|
strncpy( nameserver, p, MAX132 );
|
||||||
|
|
||||||
DBGINT( "dtm_ninit: Nameserver is %s\n", nameserver );
|
DBGINT( "dtm_ninit: Nameserver is %s\n", nameserver );
|
||||||
|
|
||||||
@ -126,11 +126,11 @@ int dtm_ninit()
|
|||||||
|
|
||||||
*portstr++ = '\0';
|
*portstr++ = '\0';
|
||||||
|
|
||||||
nsaddr.sin_addr.s_addr = inet_addr( p ) ;
|
nsaddr.sin_addr.s_addr = inet_addr( p ) ;
|
||||||
nsaddr.sin_port = (unsigned short)atol( portstr ) ;
|
nsaddr.sin_port = (unsigned short)atol( portstr ) ;
|
||||||
|
|
||||||
DBGMSG1("dtm_ninit: Nethostid = %x\n", ntohl( nsaddr.sin_addr.s_addr) );
|
DBGMSG1("dtm_ninit: Nethostid = %x\n", ntohl( nsaddr.sin_addr.s_addr) );
|
||||||
DBGMSG1("dtm_ninit: Portid = %d\n", ntohs( nsaddr.sin_port) );
|
DBGMSG1("dtm_ninit: Portid = %d\n", ntohs( nsaddr.sin_port) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Acquire socket to be used for sending to name server */
|
/* Acquire socket to be used for sending to name server */
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.15 92/04/30 20:25:27 jplevyak
|
* Revision 1.15 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
@ -124,7 +124,7 @@ static int dtm_send_control( fd, msg, msize, sendto_addr )
|
|||||||
sendaddr[ MAX132 - 1 ] = '\0' ;
|
sendaddr[ MAX132 - 1 ] = '\0' ;
|
||||||
|
|
||||||
sockaddr.sin_family = AF_INET ;
|
sockaddr.sin_family = AF_INET ;
|
||||||
CHECK_ERR( dtm_init_sockaddr( &sockaddr, sendaddr, &fLogical));
|
CHECK_ERR( dtm_init_sockaddr( &sockaddr, sendaddr, &fLogical));
|
||||||
|
|
||||||
/* Prepare iovec and send message length */
|
/* Prepare iovec and send message length */
|
||||||
|
|
||||||
@ -138,10 +138,10 @@ static int dtm_send_control( fd, msg, msize, sendto_addr )
|
|||||||
{
|
{
|
||||||
DBGFLOW( "dtm_send_control: message length send error\n" );
|
DBGFLOW( "dtm_send_control: message length send error\n" );
|
||||||
return status ;
|
return status ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Prepare iovec and send message */
|
/* Prepare iovec and send message */
|
||||||
|
|
||||||
iov[ 0 ].iov_base = msg ;
|
iov[ 0 ].iov_base = msg ;
|
||||||
iov[ 0 ].iov_len = msize ;
|
iov[ 0 ].iov_len = msize ;
|
||||||
|
|
||||||
@ -168,10 +168,10 @@ int DTMsendDiscard( fd, sendto_addr, set_or_clear )
|
|||||||
|
|
||||||
sprintf( mbuf, MDISCARD, MROUTEID, set_or_clear );
|
sprintf( mbuf, MDISCARD, MROUTEID, set_or_clear );
|
||||||
|
|
||||||
DBGFLOW( "DTMsendDiscard: Message:- " );
|
DBGFLOW( "DTMsendDiscard: Message:- " );
|
||||||
DBGFLOW( mbuf ); DBGFLOW( "\n" );
|
DBGFLOW( mbuf ); DBGFLOW( "\n" );
|
||||||
|
|
||||||
return dtm_send_control( fd, mbuf, (strlen( mbuf ) + 1), sendto_addr );
|
return dtm_send_control( fd, mbuf, (strlen( mbuf ) + 1), sendto_addr );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -193,8 +193,8 @@ int DTMsendDiscard( fd, sendto_addr, set_or_clear )
|
|||||||
int DTMsendRoute(int fd,char *sendto_addr,int addcount,char **add_addresses,
|
int DTMsendRoute(int fd,char *sendto_addr,int addcount,char **add_addresses,
|
||||||
int delcount, char **del_addresses )
|
int delcount, char **del_addresses )
|
||||||
#else
|
#else
|
||||||
int DTMsendRoute( fd, sendto_addr, addcount, add_addresses,
|
int DTMsendRoute( fd, sendto_addr, addcount, add_addresses,
|
||||||
delcount, del_addresses )
|
delcount, del_addresses )
|
||||||
int fd; /* output socket */
|
int fd; /* output socket */
|
||||||
char *sendto_addr; /* destination address addr:port number */
|
char *sendto_addr; /* destination address addr:port number */
|
||||||
int addcount; /* number of addresses to connect to */
|
int addcount; /* number of addresses to connect to */
|
||||||
@ -212,18 +212,18 @@ int DTMsendRoute( fd, sendto_addr, addcount, add_addresses,
|
|||||||
sprintf( mbuf, MROUTE, MROUTEID, delcount, addcount ) ;
|
sprintf( mbuf, MROUTE, MROUTEID, delcount, addcount ) ;
|
||||||
while( delcount-- ) {
|
while( delcount-- ) {
|
||||||
strncat( mbuf, " ", (MAX132-1));
|
strncat( mbuf, " ", (MAX132-1));
|
||||||
strncat( mbuf, del_addresses[ delcount ], (MAX132 - 1));
|
strncat( mbuf, del_addresses[ delcount ], (MAX132 - 1));
|
||||||
}
|
}
|
||||||
while( addcount-- ) {
|
while( addcount-- ) {
|
||||||
strncat( mbuf, " ", (MAX132-1));
|
strncat( mbuf, " ", (MAX132-1));
|
||||||
strncat( mbuf, add_addresses[ addcount ], (MAX132 - 1));
|
strncat( mbuf, add_addresses[ addcount ], (MAX132 - 1));
|
||||||
}
|
}
|
||||||
mbuf[ MAX132 - 1 ] = '\0' ;
|
mbuf[ MAX132 - 1 ] = '\0' ;
|
||||||
|
|
||||||
DBGFLOW( "DTMsendRoute: Message:- " );
|
DBGFLOW( "DTMsendRoute: Message:- " );
|
||||||
DBGFLOW( mbuf ); DBGFLOW( "\n" );
|
DBGFLOW( mbuf ); DBGFLOW( "\n" );
|
||||||
|
|
||||||
return dtm_send_control( fd, mbuf, (strlen( mbuf ) + 1), sendto_addr );
|
return dtm_send_control( fd, mbuf, (strlen( mbuf ) + 1), sendto_addr );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -254,10 +254,10 @@ int dtm_nsend_ackroute( portname )
|
|||||||
sprintf( mbuf, MACKROUTE, MACKROUTEID, refname, portname );
|
sprintf( mbuf, MACKROUTE, MACKROUTEID, refname, portname );
|
||||||
mbuf[ MAX132 - 1 ] = '\0' ;
|
mbuf[ MAX132 - 1 ] = '\0' ;
|
||||||
|
|
||||||
DBGFLOW( "dtm_nsend_ackroute: Message:- " );
|
DBGFLOW( "dtm_nsend_ackroute: Message:- " );
|
||||||
DBGFLOW( mbuf ); DBGFLOW( "\n" );
|
DBGFLOW( mbuf ); DBGFLOW( "\n" );
|
||||||
|
|
||||||
return dtm_send_control( fd, mbuf, (strlen( mbuf ) + 1), sendto_addr );
|
return dtm_send_control( fd, mbuf, (strlen( mbuf ) + 1), sendto_addr );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -326,7 +326,7 @@ int DTMrecvRegistration(fd, buffer, len)
|
|||||||
messages and sending routing messages.
|
messages and sending routing messages.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef DTM_PROTOTYPES
|
#ifdef DTM_PROTOTYPES
|
||||||
int DTMmakeNameServerPort(char *portid)
|
int DTMmakeNameServerPort(char *portid)
|
||||||
#else
|
#else
|
||||||
@ -335,7 +335,7 @@ int DTMmakeNameServerPort(portid)
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
struct sockaddr_in saddr;
|
struct sockaddr_in saddr;
|
||||||
|
|
||||||
|
|
||||||
saddr.sin_family = AF_INET;
|
saddr.sin_family = AF_INET;
|
||||||
saddr.sin_addr.s_addr = htonl(0);
|
saddr.sin_addr.s_addr = htonl(0);
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.9 92/04/30 20:25:27 jplevyak
|
* Revision 1.9 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
* Revision 1.8 1992/03/10 22:07:10 jplevyak
|
* Revision 1.8 1992/03/10 22:07:10 jplevyak
|
||||||
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
||||||
* with modification.
|
* with modification.
|
||||||
@ -57,13 +57,13 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.6 92/01/24 19:12:55 dweber
|
* Revision 1.6 92/01/24 19:12:55 dweber
|
||||||
* *** empty log message ***
|
* *** empty log message ***
|
||||||
*
|
*
|
||||||
* Revision 1.5 91/11/04 12:57:55 dweber
|
* Revision 1.5 91/11/04 12:57:55 dweber
|
||||||
* Deleted (via comments) superfluous functions. Later to be removed.
|
* Deleted (via comments) superfluous functions. Later to be removed.
|
||||||
*
|
*
|
||||||
* Revision 1.4 91/09/26 20:26:11 jplevyak
|
* Revision 1.4 91/09/26 20:26:11 jplevyak
|
||||||
* Use dtminit.h for access to internally global functions.
|
* Use dtminit.h for access to internally global functions.
|
||||||
*
|
*
|
||||||
* Revision 1.3 1991/06/11 15:21:05 sreedhar
|
* Revision 1.3 1991/06/11 15:21:05 sreedhar
|
||||||
* disclaimer added
|
* disclaimer added
|
||||||
*
|
*
|
||||||
|
16
libdtm/ris.h
16
libdtm/ris.h
@ -34,29 +34,29 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.11 92/04/30 20:27:05 jplevyak
|
* Revision 1.11 92/04/30 20:27:05 jplevyak
|
||||||
* Changed Version to 2.3
|
* Changed Version to 2.3
|
||||||
*
|
*
|
||||||
* Revision 1.10 1992/02/21 13:48:04 dweber
|
* Revision 1.10 1992/02/21 13:48:04 dweber
|
||||||
* Fixed prototyping problem in RISgetType.
|
* Fixed prototyping problem in RISgetType.
|
||||||
*
|
*
|
||||||
* Revision 1.9 92/02/18 16:22:04 dweber
|
* Revision 1.9 92/02/18 16:22:04 dweber
|
||||||
* Added functions for setting/getting associated palette names.
|
* Added functions for setting/getting associated palette names.
|
||||||
* (RISsetPaletteName and RISgetPaletteName)
|
* (RISsetPaletteName and RISgetPaletteName)
|
||||||
*
|
*
|
||||||
* Revision 1.8 92/01/24 19:12:55 dweber
|
* Revision 1.8 92/01/24 19:12:55 dweber
|
||||||
* *** empty log message ***
|
* *** empty log message ***
|
||||||
*
|
*
|
||||||
* Revision 1.7 91/11/18 11:48:57 dweber
|
* Revision 1.7 91/11/18 11:48:57 dweber
|
||||||
* Returned the RISsize definition and changed PALsize to PALelements for same reason
|
* Returned the RISsize definition and changed PALsize to PALelements for same reason
|
||||||
*
|
*
|
||||||
* Revision 1.6 91/11/04 15:06:08 dweber
|
* Revision 1.6 91/11/04 15:06:08 dweber
|
||||||
* Added PAL size commands
|
* Added PAL size commands
|
||||||
*
|
*
|
||||||
* Revision 1.5 91/11/04 12:58:36 dweber
|
* Revision 1.5 91/11/04 12:58:36 dweber
|
||||||
* Added RIS types and removed 8/24 bit distinction from class level.
|
* Added RIS types and removed 8/24 bit distinction from class level.
|
||||||
*
|
*
|
||||||
* Revision 1.4 91/09/10 15:07:32 jefft
|
* Revision 1.4 91/09/10 15:07:32 jefft
|
||||||
* cleaned-up message class macros.
|
* cleaned-up message class macros.
|
||||||
*
|
*
|
||||||
* Revision 1.3 1991/06/11 15:23:04 sreedhar
|
* Revision 1.3 1991/06/11 15:23:04 sreedhar
|
||||||
* disclaimer added
|
* disclaimer added
|
||||||
*
|
*
|
||||||
@ -65,7 +65,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.1 90/11/08 16:38:04 jefft
|
* Revision 1.1 90/11/08 16:38:04 jefft
|
||||||
* Initial revision
|
* Initial revision
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.19 92/05/14 19:27:48 jefft
|
* Revision 1.19 92/05/14 19:27:48 jefft
|
||||||
* modified dtm_recv_reliable
|
* modified dtm_recv_reliable
|
||||||
*
|
*
|
||||||
* Revision 1.18 1992/04/30 20:25:27 jplevyak
|
* Revision 1.18 1992/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
@ -82,7 +82,7 @@
|
|||||||
* Revision 1.15 92/03/10 22:07:10 jplevyak
|
* Revision 1.15 92/03/10 22:07:10 jplevyak
|
||||||
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
||||||
* with modification.
|
* with modification.
|
||||||
*
|
*
|
||||||
* Revision 1.14 1992/03/02 18:29:41 jplevyak
|
* Revision 1.14 1992/03/02 18:29:41 jplevyak
|
||||||
* Fixed bug in EAGAIN handling.
|
* Fixed bug in EAGAIN handling.
|
||||||
*
|
*
|
||||||
@ -103,7 +103,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.7 91/08/20 15:56:06 sreedhar
|
* Revision 1.7 91/08/20 15:56:06 sreedhar
|
||||||
* Removed unused functions - dtm_write_buffer, dtm_send, dtm_recv
|
* Removed unused functions - dtm_write_buffer, dtm_send, dtm_recv
|
||||||
*
|
*
|
||||||
* Revision 1.6 1991/08/15 18:56:52 sreedhar
|
* Revision 1.6 1991/08/15 18:56:52 sreedhar
|
||||||
* Changes for logical portname version
|
* Changes for logical portname version
|
||||||
*
|
*
|
||||||
@ -159,8 +159,8 @@
|
|||||||
CONTENTS
|
CONTENTS
|
||||||
|
|
||||||
|
|
||||||
dtm_read_buffer() - attempts to fill the next dtm buffer.
|
dtm_read_buffer() - attempts to fill the next dtm buffer.
|
||||||
dtm_recv_header() - Function to read header and return size.
|
dtm_recv_header() - Function to read header and return size.
|
||||||
dtm_recv_ack() - receive message ackowledgement
|
dtm_recv_ack() - receive message ackowledgement
|
||||||
tm_send_ack() - send message acknowledgement
|
tm_send_ack() - send message acknowledgement
|
||||||
dtm_writev_buffer() - sends the buffers to receiving process.
|
dtm_writev_buffer() - sends the buffers to receiving process.
|
||||||
@ -200,7 +200,7 @@ static int ready_bytes( d, length )
|
|||||||
fd_set mask;
|
fd_set mask;
|
||||||
struct timeval timeout ;
|
struct timeval timeout ;
|
||||||
|
|
||||||
|
|
||||||
/* set the select timeout value */
|
/* set the select timeout value */
|
||||||
timeout.tv_sec = 2;
|
timeout.tv_sec = 2;
|
||||||
timeout.tv_usec = 0;
|
timeout.tv_usec = 0;
|
||||||
@ -235,7 +235,7 @@ static int ready_bytes( d, length )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Reliably read from a port in the face of signals and other
|
Reliably read from a port in the face of signals and other
|
||||||
@ -288,7 +288,7 @@ int dtm_recv_reliable( d, buffer, length )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dtm_read_buffer() - attempts to fill the next dtm buffer. The
|
* dtm_read_buffer() - attempts to fill the next dtm buffer. The
|
||||||
* blocklen variable must be set to DTM_NEW_DATASET after each dataset
|
* blocklen variable must be set to DTM_NEW_DATASET after each dataset
|
||||||
* to force recv_buffer to move the next dataset.
|
* to force recv_buffer to move the next dataset.
|
||||||
*/
|
*/
|
||||||
@ -307,8 +307,8 @@ int dtm_read_buffer(d, blocklen, buffer, length)
|
|||||||
DBGMSG1("dtm_recv_buffer: attempting to read %d bytes.\n", length);
|
DBGMSG1("dtm_recv_buffer: attempting to read %d bytes.\n", length);
|
||||||
DBGMSG1("dtm_recv_buffer: initial blocklen = %d\n", *blocklen);
|
DBGMSG1("dtm_recv_buffer: initial blocklen = %d\n", *blocklen);
|
||||||
|
|
||||||
/* if block length is DTM_NEW_DATASET this is a new dataset
|
/* if block length is DTM_NEW_DATASET this is a new dataset
|
||||||
* get initial block count
|
* get initial block count
|
||||||
*/
|
*/
|
||||||
if (*blocklen == DTM_NEW_DATASET) {
|
if (*blocklen == DTM_NEW_DATASET) {
|
||||||
CHECK_ERR(dtm_recv_reliable(d, (char *)blocklen, 4));
|
CHECK_ERR(dtm_recv_reliable(d, (char *)blocklen, 4));
|
||||||
@ -320,8 +320,8 @@ int dtm_read_buffer(d, blocklen, buffer, length)
|
|||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
|
|
||||||
/* if block length is 0, because last call to fill_buffer hit
|
/* if block length is 0, because last call to fill_buffer hit
|
||||||
* the EOS or because this dataset is zero length, return 0
|
* the EOS or because this dataset is zero length, return 0
|
||||||
* to indicate the end of dataset.
|
* to indicate the end of dataset.
|
||||||
*/
|
*/
|
||||||
if (*blocklen == 0)
|
if (*blocklen == 0)
|
||||||
return 0;
|
return 0;
|
||||||
@ -335,7 +335,7 @@ int dtm_read_buffer(d, blocklen, buffer, length)
|
|||||||
|
|
||||||
/* decrement block length, if 0 get next block length */
|
/* decrement block length, if 0 get next block length */
|
||||||
*blocklen -= (length - count);
|
*blocklen -= (length - count);
|
||||||
if (*blocklen == 0)
|
if (*blocklen == 0)
|
||||||
*blocklen = DTM_NEW_DATASET;
|
*blocklen = DTM_NEW_DATASET;
|
||||||
|
|
||||||
/* if block length is 0 now, the EOS will be returned on */
|
/* if block length is 0 now, the EOS will be returned on */
|
||||||
@ -362,7 +362,7 @@ int dtm_read_buffer(d, blocklen, buffer, length)
|
|||||||
DBGINT("blocklen = %d\n", *blocklen);
|
DBGINT("blocklen = %d\n", *blocklen);
|
||||||
|
|
||||||
/* if block length is 0 now, the correct count will be */
|
/* if block length is 0 now, the correct count will be */
|
||||||
/* returned now, and EOS on the next call to fill_buffer */
|
/* returned now, and EOS on the next call to fill_buffer */
|
||||||
if (*blocklen == 0)
|
if (*blocklen == 0)
|
||||||
return count;
|
return count;
|
||||||
|
|
||||||
@ -411,9 +411,9 @@ int dtm_read_header( fd, buf, buflen )
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
dtm_recv_header()
|
dtm_recv_header()
|
||||||
Function to read header and return size.
|
Function to read header and return size.
|
||||||
|
|
||||||
Notes : If buffer is too small, dump remainder of header
|
Notes : If buffer is too small, dump remainder of header
|
||||||
and return error.
|
and return error.
|
||||||
Actually, this is function to read length of data and
|
Actually, this is function to read length of data and
|
||||||
then to receive that much data - the data is called header
|
then to receive that much data - the data is called header
|
||||||
@ -437,7 +437,7 @@ int dtm_recv_header( d, header, length )
|
|||||||
DBGMSG1("dtm_recv_header: buf length = %d.\n", length);
|
DBGMSG1("dtm_recv_header: buf length = %d.\n", length);
|
||||||
|
|
||||||
/* get header length */
|
/* get header length */
|
||||||
|
|
||||||
if( (readcnt = recvfrom(d, (char *)&headerlen, 4, 0, ( struct sockaddr *)&from,
|
if( (readcnt = recvfrom(d, (char *)&headerlen, 4, 0, ( struct sockaddr *)&from,
|
||||||
( int *)&fromlen)) != 4) {
|
( int *)&fromlen)) != 4) {
|
||||||
/* somehow hit EOF, return DTMEOF instead */
|
/* somehow hit EOF, return DTMEOF instead */
|
||||||
@ -460,19 +460,19 @@ int dtm_recv_header( d, header, length )
|
|||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LOCALINT(headerlen);
|
LOCALINT(headerlen);
|
||||||
DBGMSG("dtm_recv_header: got length.\n");
|
DBGMSG("dtm_recv_header: got length.\n");
|
||||||
|
|
||||||
/* read the header */
|
/* read the header */
|
||||||
|
|
||||||
readcnt = (length > headerlen) ? headerlen : length ;
|
readcnt = (length > headerlen) ? headerlen : length ;
|
||||||
header = (void *) (((char *) header) + readcnt);
|
header = (void *) (((char *) header) + readcnt);
|
||||||
|
|
||||||
while(readcnt) {
|
while(readcnt) {
|
||||||
if( (tmp = recvfrom(d, ((char *)header) - readcnt, readcnt, 0,
|
if( (tmp = recvfrom(d, ((char *)header) - readcnt, readcnt, 0,
|
||||||
( struct sockaddr *)&from, ( int *)&fromlen)) > 0)
|
( struct sockaddr *)&from, ( int *)&fromlen)) > 0)
|
||||||
readcnt -= tmp;
|
readcnt -= tmp;
|
||||||
else {
|
else {
|
||||||
DTMerrno = DTMREAD;
|
DTMerrno = DTMREAD;
|
||||||
@ -480,24 +480,24 @@ int dtm_recv_header( d, header, length )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check for header greater than buffer size provided */
|
/* check for header greater than buffer size provided */
|
||||||
|
|
||||||
if( length >= headerlen )
|
if( length >= headerlen )
|
||||||
return headerlen;
|
return headerlen;
|
||||||
else {
|
else {
|
||||||
/* discard remaining header */
|
/* discard remaining header */
|
||||||
|
|
||||||
readcnt = headerlen - length;
|
readcnt = headerlen - length;
|
||||||
while (readcnt) {
|
while (readcnt) {
|
||||||
if ((tmp = recvfrom(d, dtm_discard, readcnt, 0,
|
if ((tmp = recvfrom(d, dtm_discard, readcnt, 0,
|
||||||
(struct sockaddr *)&from, (int *)&fromlen)) > 0)
|
(struct sockaddr *)&from, (int *)&fromlen)) > 0)
|
||||||
readcnt -= tmp;
|
readcnt -= tmp;
|
||||||
else {
|
else {
|
||||||
DTMerrno = DTMREAD;
|
DTMerrno = DTMREAD;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DTMerrno = DTMHEADER;
|
DTMerrno = DTMHEADER;
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
@ -508,7 +508,7 @@ int dtm_recv_header( d, header, length )
|
|||||||
|
|
||||||
Notes : Berkeley implementation returns 0 from recv
|
Notes : Berkeley implementation returns 0 from recv
|
||||||
if socket connection breaks while waiting in
|
if socket connection breaks while waiting in
|
||||||
recv system call. System V returns -1 and
|
recv system call. System V returns -1 and
|
||||||
ECONNRESET in errno for same error.
|
ECONNRESET in errno for same error.
|
||||||
|
|
||||||
For historical reasons, DTMEOF is returned when
|
For historical reasons, DTMEOF is returned when
|
||||||
@ -532,16 +532,16 @@ int dtm_recv_ack( d, ack )
|
|||||||
|
|
||||||
if( (tmp = recv( d, (char *)ack, 4, 0 )) != 4 ) {
|
if( (tmp = recv( d, (char *)ack, 4, 0 )) != 4 ) {
|
||||||
DBGINT( "Recv_ack errno = %d\n", errno ) ;
|
DBGINT( "Recv_ack errno = %d\n", errno ) ;
|
||||||
if( tmp == 0 )
|
if( tmp == 0 )
|
||||||
/* Courtesy Berkeley */
|
/* Courtesy Berkeley */
|
||||||
|
|
||||||
DTMerrno = DTMEOF ;
|
DTMerrno = DTMEOF ;
|
||||||
else {
|
else {
|
||||||
if( errno == ECONNRESET )
|
if( errno == ECONNRESET )
|
||||||
/* Courtesy system V */
|
/* Courtesy system V */
|
||||||
|
|
||||||
DTMerrno = DTMEOF;
|
DTMerrno = DTMEOF;
|
||||||
else
|
else
|
||||||
DTMerrno = DTMREAD;
|
DTMerrno = DTMREAD;
|
||||||
}
|
}
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
@ -636,7 +636,7 @@ int dtm_writev_failed( fd, msgbuf, tmp )
|
|||||||
for ( i = 0; i < msgbuf->msg_iovlen; i++ ) {
|
for ( i = 0; i < msgbuf->msg_iovlen; i++ ) {
|
||||||
done -= iov[i].iov_len;
|
done -= iov[i].iov_len;
|
||||||
if ( done > 0 ) continue;
|
if ( done > 0 ) continue;
|
||||||
if ( dtm_send_some( fd, iov[i].iov_base + done + iov[i].iov_len,
|
if ( dtm_send_some( fd, iov[i].iov_base + done + iov[i].iov_len,
|
||||||
(- done )) == DTMERROR )
|
(- done )) == DTMERROR )
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
done = 0;
|
done = 0;
|
||||||
@ -664,17 +664,17 @@ int dtm_writev_buffer( fd, iov, iovlen, iovsize, addr, addrlen )
|
|||||||
int todo;
|
int todo;
|
||||||
|
|
||||||
DBGINT("# dtm_writev_buffer called, fd %d.\n", fd );
|
DBGINT("# dtm_writev_buffer called, fd %d.\n", fd );
|
||||||
|
|
||||||
msgbuf.msg_name = (caddr_t)addr ;
|
msgbuf.msg_name = (caddr_t)addr ;
|
||||||
msgbuf.msg_namelen = addrlen ;
|
msgbuf.msg_namelen = addrlen ;
|
||||||
msgbuf.msg_iov = iov ;
|
msgbuf.msg_iov = iov ;
|
||||||
msgbuf.msg_iovlen = iovlen ;
|
msgbuf.msg_iovlen = iovlen ;
|
||||||
msgbuf.msg_accrights = 0 ;
|
msgbuf.msg_accrights = 0 ;
|
||||||
|
|
||||||
if( (tmp = sendmsg( fd, &msgbuf, 0 )) != iovsize )
|
if( (tmp = sendmsg( fd, &msgbuf, 0 )) != iovsize )
|
||||||
return dtm_writev_failed( fd, &msgbuf, tmp );
|
return dtm_writev_failed( fd, &msgbuf, tmp );
|
||||||
|
|
||||||
DBGINT( "dtm_writev_buffer tmp = %d\n", tmp );
|
DBGINT( "dtm_writev_buffer tmp = %d\n", tmp );
|
||||||
|
|
||||||
return DTM_OK ;
|
return DTM_OK ;
|
||||||
}
|
}
|
||||||
|
12
libdtm/sdl.c
12
libdtm/sdl.c
@ -22,7 +22,7 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
**
|
**
|
||||||
** sdl.c - Surface Description Language
|
** sdl.c - Surface Description Language
|
||||||
**
|
**
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -43,20 +43,20 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.9 92/04/30 20:25:27 jplevyak
|
* Revision 1.9 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
* Revision 1.8 1992/04/06 15:58:56 jplevyak
|
* Revision 1.8 1992/04/06 15:58:56 jplevyak
|
||||||
* Fixed levels of indirection on some arguments for non-prototype
|
* Fixed levels of indirection on some arguments for non-prototype
|
||||||
* machines.
|
* machines.
|
||||||
*
|
*
|
||||||
* Revision 1.7 92/04/03 12:39:33 dweber
|
* Revision 1.7 92/04/03 12:39:33 dweber
|
||||||
* Fixed SDLbounds bug.
|
* Fixed SDLbounds bug.
|
||||||
*
|
*
|
||||||
* Revision 1.6 92/04/03 12:33:10 dweber
|
* Revision 1.6 92/04/03 12:33:10 dweber
|
||||||
* Added bounding box functions.
|
* Added bounding box functions.
|
||||||
*
|
*
|
||||||
* Revision 1.5 91/09/10 15:09:00 jefft
|
* Revision 1.5 91/09/10 15:09:00 jefft
|
||||||
* I removed all functionality from this file, HA!
|
* I removed all functionality from this file, HA!
|
||||||
*
|
*
|
||||||
* Revision 1.4 1991/07/18 16:29:15 jefft
|
* Revision 1.4 1991/07/18 16:29:15 jefft
|
||||||
* corrected the spelling of "primitive"
|
* corrected the spelling of "primitive"
|
||||||
*
|
*
|
||||||
@ -68,7 +68,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.1 90/11/08 16:38:33 jefft
|
* Revision 1.1 90/11/08 16:38:33 jefft
|
||||||
* Initial revision
|
* Initial revision
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
12
libdtm/sdl.h
12
libdtm/sdl.h
@ -22,7 +22,7 @@
|
|||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
**
|
**
|
||||||
** Surface Description Language include file - contains constants used
|
** Surface Description Language include file - contains constants used
|
||||||
** with the SDL header type.
|
** with the SDL header type.
|
||||||
**
|
**
|
||||||
**
|
**
|
||||||
**
|
**
|
||||||
@ -46,13 +46,13 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.13 92/04/30 20:27:05 jplevyak
|
* Revision 1.13 92/04/30 20:27:05 jplevyak
|
||||||
* Changed Version to 2.3
|
* Changed Version to 2.3
|
||||||
*
|
*
|
||||||
* Revision 1.12 1992/04/03 12:39:42 dweber
|
* Revision 1.12 1992/04/03 12:39:42 dweber
|
||||||
* Fixed SDLbounds bug.
|
* Fixed SDLbounds bug.
|
||||||
*
|
*
|
||||||
* Revision 1.11 92/04/03 12:33:23 dweber
|
* Revision 1.11 92/04/03 12:33:23 dweber
|
||||||
* Added bounding box functions.
|
* Added bounding box functions.
|
||||||
*
|
*
|
||||||
* Revision 1.10 1992/02/25 20:36:35 dweber
|
* Revision 1.10 1992/02/25 20:36:35 dweber
|
||||||
* Fixed another prototyping clash, SDLgetPrimitive.
|
* Fixed another prototyping clash, SDLgetPrimitive.
|
||||||
*
|
*
|
||||||
@ -64,10 +64,10 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.7 91/11/01 10:10:28 dweber
|
* Revision 1.7 91/11/01 10:10:28 dweber
|
||||||
* Added SDLtristrip
|
* Added SDLtristrip
|
||||||
*
|
*
|
||||||
* Revision 1.6 91/09/10 15:07:55 jefft
|
* Revision 1.6 91/09/10 15:07:55 jefft
|
||||||
* cleaned-up message class macros.
|
* cleaned-up message class macros.
|
||||||
*
|
*
|
||||||
* Revision 1.5 1991/07/25 22:22:27 jefft
|
* Revision 1.5 1991/07/25 22:22:27 jefft
|
||||||
* Added transformation triplet enum types
|
* Added transformation triplet enum types
|
||||||
*
|
*
|
||||||
@ -83,7 +83,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.1 90/11/08 16:38:51 jefft
|
* Revision 1.1 90/11/08 16:38:51 jefft
|
||||||
* Initial revision
|
* Initial revision
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SDL_INC
|
#ifndef SDL_INC
|
||||||
|
16
libdtm/sds.c
16
libdtm/sds.c
@ -22,7 +22,7 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
**
|
**
|
||||||
** sds.c - Scientific Data Set utility routines.
|
** sds.c - Scientific Data Set utility routines.
|
||||||
**
|
**
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
/*
|
/*
|
||||||
#ifdef RCSLOG
|
#ifdef RCSLOG
|
||||||
@ -47,7 +47,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.12 92/04/30 20:25:27 jplevyak
|
* Revision 1.12 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
* Revision 1.11 1992/03/16 20:39:10 creiman
|
* Revision 1.11 1992/03/16 20:39:10 creiman
|
||||||
* Changed declaration of SDSgetMinMax to match prototype. (Changed doubles
|
* Changed declaration of SDSgetMinMax to match prototype. (Changed doubles
|
||||||
* to floats)
|
* to floats)
|
||||||
@ -67,22 +67,22 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.7 91/12/18 02:42:41 dweber
|
* Revision 1.7 91/12/18 02:42:41 dweber
|
||||||
* Oops. Guess I forgot to change getRanks name.
|
* Oops. Guess I forgot to change getRanks name.
|
||||||
*
|
*
|
||||||
* Revision 1.6 1991/12/18 02:41:53 dweber
|
* Revision 1.6 1991/12/18 02:41:53 dweber
|
||||||
* Added SDSgetRank
|
* Added SDSgetRank
|
||||||
*
|
*
|
||||||
* Revision 1.5 91/12/09 12:12:27 dweber
|
* Revision 1.5 91/12/09 12:12:27 dweber
|
||||||
* Deleted the function SDSconvert
|
* Deleted the function SDSconvert
|
||||||
*
|
*
|
||||||
* Revision 1.4 91/09/26 20:20:52 jplevyak
|
* Revision 1.4 91/09/26 20:20:52 jplevyak
|
||||||
* Minor header file reorganization.
|
* Minor header file reorganization.
|
||||||
*
|
*
|
||||||
* Revision 1.3 91/09/13 18:01:21 jplevyak
|
* Revision 1.3 91/09/13 18:01:21 jplevyak
|
||||||
* Fixed minor bug w/extra argument in call.
|
* Fixed minor bug w/extra argument in call.
|
||||||
*
|
*
|
||||||
* Revision 1.2 91/06/11 15:20:50 sreedhar
|
* Revision 1.2 91/06/11 15:20:50 sreedhar
|
||||||
* disclaimer added
|
* disclaimer added
|
||||||
*
|
*
|
||||||
* Revision 1.1 1990/11/08 16:39:09 jefft
|
* Revision 1.1 1990/11/08 16:39:09 jefft
|
||||||
* Initial revision
|
* Initial revision
|
||||||
*
|
*
|
||||||
@ -213,7 +213,7 @@ int SDSgetMinMax(h, min, max)
|
|||||||
|
|
||||||
h = strchr(h, ' ') + 1;
|
h = strchr(h, ' ') + 1;
|
||||||
*max = (float)atof(h);
|
*max = (float)atof(h);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.8 92/04/30 20:27:37 jplevyak
|
* Revision 1.8 92/04/30 20:27:37 jplevyak
|
||||||
* Changed Version to 2.3
|
* Changed Version to 2.3
|
||||||
*
|
*
|
||||||
* Revision 1.7 1992/03/16 21:03:18 creiman
|
* Revision 1.7 1992/03/16 21:03:18 creiman
|
||||||
* Changed SDSsetMinMax prototype to use floats. NOT related to the change in
|
* Changed SDSsetMinMax prototype to use floats. NOT related to the change in
|
||||||
* sds.c for SDSgetMinMax. This is getting confusing...
|
* sds.c for SDSgetMinMax. This is getting confusing...
|
||||||
@ -55,10 +55,10 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.4 92/01/24 19:13:51 dweber
|
* Revision 1.4 92/01/24 19:13:51 dweber
|
||||||
* Added header lenght macros
|
* Added header lenght macros
|
||||||
*
|
*
|
||||||
* Revision 1.3 91/09/10 15:07:10 jefft
|
* Revision 1.3 91/09/10 15:07:10 jefft
|
||||||
* cleaned-up message class macros.
|
* cleaned-up message class macros.
|
||||||
*
|
*
|
||||||
* Revision 1.2 1991/06/11 15:22:52 sreedhar
|
* Revision 1.2 1991/06/11 15:22:52 sreedhar
|
||||||
* disclaimer added
|
* disclaimer added
|
||||||
*
|
*
|
||||||
@ -97,7 +97,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void SDSsetDimensions DTM_PROTO(( char* h, int rank, int *dims ));
|
extern void SDSsetDimensions DTM_PROTO(( char* h, int rank, int *dims ));
|
||||||
extern int SDSgetDimensions DTM_PROTO(( char* h, int * rank, int* dims,
|
extern int SDSgetDimensions DTM_PROTO(( char* h, int * rank, int* dims,
|
||||||
int len ));
|
int len ));
|
||||||
extern int SDSgetRank DTM_PROTO(( char* h, int * rank ));
|
extern int SDSgetRank DTM_PROTO(( char* h, int * rank ));
|
||||||
extern int SDSnumElements DTM_PROTO(( int rank, int *dims ));
|
extern int SDSnumElements DTM_PROTO(( int rank, int *dims ));
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.5 92/04/30 20:25:27 jplevyak
|
* Revision 1.5 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -52,14 +52,14 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.28 92/04/30 20:25:27 jplevyak
|
* Revision 1.28 92/04/30 20:25:27 jplevyak
|
||||||
* Changed Version to 2.3.
|
* Changed Version to 2.3.
|
||||||
*
|
*
|
||||||
* Revision 1.27 1992/04/06 15:58:49 jplevyak
|
* Revision 1.27 1992/04/06 15:58:49 jplevyak
|
||||||
* Fixed minor problems for machines little Endian machines.
|
* Fixed minor problems for machines little Endian machines.
|
||||||
*
|
*
|
||||||
* Revision 1.26 92/03/10 22:07:10 jplevyak
|
* Revision 1.26 92/03/10 22:07:10 jplevyak
|
||||||
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
* Added changed for PC/MAC from Quincey Koziol (koziol@ncsa.uiuc.edu)
|
||||||
* with modification.
|
* with modification.
|
||||||
*
|
*
|
||||||
* Revision 1.25 1992/02/28 03:40:24 jplevyak
|
* Revision 1.25 1992/02/28 03:40:24 jplevyak
|
||||||
* int/long confict fix (no diff on workstations)
|
* int/long confict fix (no diff on workstations)
|
||||||
* ,
|
* ,
|
||||||
@ -100,13 +100,13 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.14 91/09/26 20:21:55 jplevyak
|
* Revision 1.14 91/09/26 20:21:55 jplevyak
|
||||||
* Cosmetics
|
* Cosmetics
|
||||||
*
|
*
|
||||||
* Revision 1.13 91/09/18 15:33:08 jplevyak
|
* Revision 1.13 91/09/18 15:33:08 jplevyak
|
||||||
* Added additional parameter to dtm_socket_init
|
* Added additional parameter to dtm_socket_init
|
||||||
*
|
*
|
||||||
* Revision 1.12 91/09/13 20:28:52 sreedhar
|
* Revision 1.12 91/09/13 20:28:52 sreedhar
|
||||||
* accept :9900 change
|
* accept :9900 change
|
||||||
*
|
*
|
||||||
* Revision 1.11 1991/09/13 20:13:35 sreedhar
|
* Revision 1.11 1991/09/13 20:13:35 sreedhar
|
||||||
* take current host as default
|
* take current host as default
|
||||||
*
|
*
|
||||||
@ -131,14 +131,14 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.3 90/11/21 12:43:15 jefft
|
* Revision 1.3 90/11/21 12:43:15 jefft
|
||||||
* Fixed portibility problem with dtm_get_ipaddr.
|
* Fixed portibility problem with dtm_get_ipaddr.
|
||||||
*
|
*
|
||||||
* Revision 1.2 90/11/21 10:54:18 jefft
|
* Revision 1.2 90/11/21 10:54:18 jefft
|
||||||
* Added new routine, dtm_get_ipaddr. It returns an ascii string of the
|
* Added new routine, dtm_get_ipaddr. It returns an ascii string of the
|
||||||
* current hosts IP address.
|
* current hosts IP address.
|
||||||
*
|
*
|
||||||
* Revision 1.1 90/11/08 16:39:40 jefft
|
* Revision 1.1 90/11/08 16:39:40 jefft
|
||||||
* Initial revision
|
* Initial revision
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -197,7 +197,7 @@ static int buf_size = DTM_BUFF_SIZE;
|
|||||||
/*
|
/*
|
||||||
dtm_parse_ipaddr()
|
dtm_parse_ipaddr()
|
||||||
Check whetherer given address string is in dotted
|
Check whetherer given address string is in dotted
|
||||||
decimal notation and if so, to return the address in network byte
|
decimal notation and if so, to return the address in network byte
|
||||||
order.
|
order.
|
||||||
|
|
||||||
Return values : TRUE, if in dotted decimal notation.
|
Return values : TRUE, if in dotted decimal notation.
|
||||||
@ -282,9 +282,9 @@ int dtm_select( s, count, time )
|
|||||||
FD_SET( s, &filedes );
|
FD_SET( s, &filedes );
|
||||||
|
|
||||||
#ifdef __hpux
|
#ifdef __hpux
|
||||||
if( (*count = select( 32, (int *)&filedes, (int *)NULL, (int *)NULL,
|
if( (*count = select( 32, (int *)&filedes, (int *)NULL, (int *)NULL,
|
||||||
#else
|
#else
|
||||||
if( (*count = select( 32, &filedes, (fd_set *)NULL, (fd_set *)NULL,
|
if( (*count = select( 32, &filedes, (fd_set *)NULL, (fd_set *)NULL,
|
||||||
#endif
|
#endif
|
||||||
&timeout ) )) {
|
&timeout ) )) {
|
||||||
ioctl( s, FIONREAD, count );
|
ioctl( s, FIONREAD, count );
|
||||||
@ -312,8 +312,8 @@ int dtm_accept( s, sn, timeout )
|
|||||||
DBGFLOW( "dtm_accept called.\n");
|
DBGFLOW( "dtm_accept called.\n");
|
||||||
DBGMSG1( "dtm_accept: sockfd = %d\n", s );
|
DBGMSG1( "dtm_accept: sockfd = %d\n", s );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Await connect for specified time period only.
|
Await connect for specified time period only.
|
||||||
|
|
||||||
if timeout == NULL, it means just goahead and accept,
|
if timeout == NULL, it means just goahead and accept,
|
||||||
else wait for specified period and accept only if
|
else wait for specified period and accept only if
|
||||||
@ -321,12 +321,12 @@ int dtm_accept( s, sn, timeout )
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if ( timeout ) {
|
if ( timeout ) {
|
||||||
fd_set readmask ;
|
fd_set readmask ;
|
||||||
fd_set *fchk = &readmask ;
|
fd_set *fchk = &readmask ;
|
||||||
int nf ;
|
int nf ;
|
||||||
|
|
||||||
FD_ZERO( fchk );
|
FD_ZERO( fchk );
|
||||||
FD_SET( s, fchk );
|
FD_SET( s, fchk );
|
||||||
|
|
||||||
#ifdef __hpux
|
#ifdef __hpux
|
||||||
nf = select( FD_SETSIZE, (int *)fchk, (int *)0, (int *)0, timeout );
|
nf = select( FD_SETSIZE, (int *)fchk, (int *)0, (int *)0, timeout );
|
||||||
@ -337,7 +337,7 @@ int dtm_accept( s, sn, timeout )
|
|||||||
DBGINT( "dtm_accept: select errno %d\n", errno );
|
DBGINT( "dtm_accept: select errno %d\n", errno );
|
||||||
DTMerrno = DTMSELECT ;
|
DTMerrno = DTMSELECT ;
|
||||||
return DTMERROR ;
|
return DTMERROR ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( nf == 0 ) {
|
if ( nf == 0 ) {
|
||||||
/* No connect request in specified time */
|
/* No connect request in specified time */
|
||||||
@ -376,9 +376,9 @@ int dtm_connect(sn, s)
|
|||||||
int refusedcount = 0;
|
int refusedcount = 0;
|
||||||
|
|
||||||
DBGFLOW("dtm_connect called.\n");
|
DBGFLOW("dtm_connect called.\n");
|
||||||
DBGINT( "dtm_connect: s_addr = %x\n",
|
DBGINT( "dtm_connect: s_addr = %x\n",
|
||||||
ntohl( sn -> sin_addr.s_addr ) );
|
ntohl( sn -> sin_addr.s_addr ) );
|
||||||
DBGINT( "dtm_connect: sin_port = %d\n",
|
DBGINT( "dtm_connect: sin_port = %d\n",
|
||||||
ntohs( sn -> sin_port ));
|
ntohs( sn -> sin_port ));
|
||||||
|
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
@ -411,7 +411,7 @@ int dtm_connect(sn, s)
|
|||||||
/* connect complete, set working socket to original socket */
|
/* connect complete, set working socket to original socket */
|
||||||
*s = d;
|
*s = d;
|
||||||
setsockopt(*s, IPPROTO_TCP, TCP_NODELAY, (char *)&d, sizeof d);
|
setsockopt(*s, IPPROTO_TCP, TCP_NODELAY, (char *)&d, sizeof d);
|
||||||
setsockopt(*s, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size,
|
setsockopt(*s, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size,
|
||||||
sizeof(int));
|
sizeof(int));
|
||||||
return DTM_OK;
|
return DTM_OK;
|
||||||
}
|
}
|
||||||
@ -492,11 +492,11 @@ int dtm_end_connect(s)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Return values :
|
Return values :
|
||||||
On success,
|
On success,
|
||||||
Direct - host address in network byte order.
|
Direct - host address in network byte order.
|
||||||
Indirect - *ipaddr has host address in dotted
|
Indirect - *ipaddr has host address in dotted
|
||||||
decimal notation.
|
decimal notation.
|
||||||
|
|
||||||
On error, 0.
|
On error, 0.
|
||||||
Notes:
|
Notes:
|
||||||
@ -553,7 +553,7 @@ unsigned long dtm_get_ipaddr( ipaddrstr )
|
|||||||
}
|
}
|
||||||
|
|
||||||
DBGINT( "dtm_get_ipaddr: dotted decimal address = '%s'\n", ipaddrstr );
|
DBGINT( "dtm_get_ipaddr: dotted decimal address = '%s'\n", ipaddrstr );
|
||||||
return inet_addr( ipaddrstr ) ;
|
return inet_addr( ipaddrstr ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -576,17 +576,17 @@ int dtm_socket_init( sockaddr, porttype, fLogicalName )
|
|||||||
int sockaddrsize = sizeof (struct sockaddr_in);
|
int sockaddrsize = sizeof (struct sockaddr_in);
|
||||||
char buf[128];
|
char buf[128];
|
||||||
|
|
||||||
DBGMSG1( "dtm_socket_init: sockaddr -> s_addr = %x\n",
|
DBGMSG1( "dtm_socket_init: sockaddr -> s_addr = %x\n",
|
||||||
ntohl( sockaddr -> sin_addr.s_addr) );
|
ntohl( sockaddr -> sin_addr.s_addr) );
|
||||||
DBGMSG1( "dtm_socket_init: sockaddr -> sin_port = %d\n",
|
DBGMSG1( "dtm_socket_init: sockaddr -> sin_port = %d\n",
|
||||||
ntohs( sockaddr -> sin_port) );
|
ntohs( sockaddr -> sin_port) );
|
||||||
|
|
||||||
sockaddr -> sin_family = AF_INET ;
|
sockaddr -> sin_family = AF_INET ;
|
||||||
if ( fLogicalName ) {
|
if ( fLogicalName ) {
|
||||||
/*
|
/*
|
||||||
Logical name had been supplied for makeport.
|
Logical name had been supplied for makeport.
|
||||||
Assign port from system ( sin_port = 0 ), and accept
|
Assign port from system ( sin_port = 0 ), and accept
|
||||||
from all network interfaces for multi-homed host
|
from all network interfaces for multi-homed host
|
||||||
( INADDR_ANY ).
|
( INADDR_ANY ).
|
||||||
*/
|
*/
|
||||||
sockaddr -> sin_addr.s_addr = htonl( INADDR_ANY );
|
sockaddr -> sin_addr.s_addr = htonl( INADDR_ANY );
|
||||||
@ -606,7 +606,7 @@ int dtm_socket_init( sockaddr, porttype, fLogicalName )
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( (sockfd = socket( sockaddr -> sin_family, type, protocol )) < 0 ) {
|
if( (sockfd = socket( sockaddr -> sin_family, type, protocol )) < 0 ) {
|
||||||
DTMerrno = DTMSOCK ;
|
DTMerrno = DTMSOCK ;
|
||||||
DBGINT( "dtm_socket_init: socket create error %d", errno );
|
DBGINT( "dtm_socket_init: socket create error %d", errno );
|
||||||
return DTMERROR ;
|
return DTMERROR ;
|
||||||
}
|
}
|
||||||
@ -623,27 +623,27 @@ int dtm_socket_init( sockaddr, porttype, fLogicalName )
|
|||||||
|
|
||||||
DBGFLOW( "dtm_socket_init: Before bind\n" );
|
DBGFLOW( "dtm_socket_init: Before bind\n" );
|
||||||
DBGINT( "dtm_socket_init: sockfd = %d\n", sockfd );
|
DBGINT( "dtm_socket_init: sockfd = %d\n", sockfd );
|
||||||
DBGINT( "dtm_socket_init: sockaddr -> family = %d\n",
|
DBGINT( "dtm_socket_init: sockaddr -> family = %d\n",
|
||||||
sockaddr -> sin_family );
|
sockaddr -> sin_family );
|
||||||
DBGINT( "dtm_socket_init: sockaddr -> s_addr = %x\n",
|
DBGINT( "dtm_socket_init: sockaddr -> s_addr = %x\n",
|
||||||
ntohl( sockaddr -> sin_addr.s_addr) );
|
ntohl( sockaddr -> sin_addr.s_addr) );
|
||||||
DBGINT( "dtm_socket_init: sockaddr -> sin_port = %d\n",
|
DBGINT( "dtm_socket_init: sockaddr -> sin_port = %d\n",
|
||||||
ntohs( sockaddr -> sin_port) );
|
ntohs( sockaddr -> sin_port) );
|
||||||
|
|
||||||
if( bind( sockfd, (struct sockaddr *)sockaddr,
|
if( bind( sockfd, (struct sockaddr *)sockaddr,
|
||||||
sizeof( struct sockaddr_in ) ) < 0 ) {
|
sizeof( struct sockaddr_in ) ) < 0 ) {
|
||||||
DTMerrno = DTMSOCK ;
|
DTMerrno = DTMSOCK ;
|
||||||
DBGMSG1( "dtm_socket_init: could not bind to sockaddr, errno = %d\n",
|
DBGMSG1( "dtm_socket_init: could not bind to sockaddr, errno = %d\n",
|
||||||
errno );
|
errno );
|
||||||
return DTMERROR;
|
return DTMERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Listen at socket for TCP port, buffer for 5 pending connections */
|
/* Listen at socket for TCP port, buffer for 5 pending connections */
|
||||||
|
|
||||||
if( porttype == INPORTTYPE )
|
if( porttype == INPORTTYPE )
|
||||||
listen( sockfd, 5 );
|
listen( sockfd, 5 );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Get the actual assigned (port) address ( netid/hostid/portid )
|
Get the actual assigned (port) address ( netid/hostid/portid )
|
||||||
- netid/hostid from dtm_get_ipaddr(),portid from getsockname().
|
- netid/hostid from dtm_get_ipaddr(),portid from getsockname().
|
||||||
|
|
||||||
@ -667,9 +667,9 @@ int dtm_socket_init( sockaddr, porttype, fLogicalName )
|
|||||||
}
|
}
|
||||||
|
|
||||||
DBGFLOW( "dtm_socket_init: Verify nethostid/portid\n" );
|
DBGFLOW( "dtm_socket_init: Verify nethostid/portid\n" );
|
||||||
DBGINT( "dtm_socket_init: Nethostid = %x\n",
|
DBGINT( "dtm_socket_init: Nethostid = %x\n",
|
||||||
ntohl( sockaddr -> sin_addr.s_addr ) );
|
ntohl( sockaddr -> sin_addr.s_addr ) );
|
||||||
DBGINT( "dtm_socket_init: Portid = %d \n",
|
DBGINT( "dtm_socket_init: Portid = %d \n",
|
||||||
ntohs( sockaddr -> sin_port ) );
|
ntohs( sockaddr -> sin_port ) );
|
||||||
|
|
||||||
DBGINT( "dtm_socket_init: exit sockfd = %d\n", sockfd );
|
DBGINT( "dtm_socket_init: exit sockfd = %d\n", sockfd );
|
||||||
@ -719,7 +719,7 @@ int dtm_init_sockaddr( sockaddr, portname, pfLogicalName )
|
|||||||
DBGFLOW( "dtm_init_sockaddr called\n" );
|
DBGFLOW( "dtm_init_sockaddr called\n" );
|
||||||
|
|
||||||
if( lportname[0] == ':' ) {
|
if( lportname[0] == ':' ) {
|
||||||
host = NULL ;
|
host = NULL ;
|
||||||
port = lportname + 1;
|
port = lportname + 1;
|
||||||
} else {
|
} else {
|
||||||
if( (port = strchr( lportname, ':' )) == NULL ) {
|
if( (port = strchr( lportname, ':' )) == NULL ) {
|
||||||
@ -728,7 +728,7 @@ int dtm_init_sockaddr( sockaddr, portname, pfLogicalName )
|
|||||||
sockaddr -> sin_port = htons( 0 );
|
sockaddr -> sin_port = htons( 0 );
|
||||||
sockaddr -> sin_addr.s_addr = htonl(0);
|
sockaddr -> sin_addr.s_addr = htonl(0);
|
||||||
*pfLogicalName = TRUE;
|
*pfLogicalName = TRUE;
|
||||||
DBGINT( "dtm_init_sockaddr: sin_port = %d\n",
|
DBGINT( "dtm_init_sockaddr: sin_port = %d\n",
|
||||||
ntohs( sockaddr->sin_port ));
|
ntohs( sockaddr->sin_port ));
|
||||||
return DTM_OK;
|
return DTM_OK;
|
||||||
}
|
}
|
||||||
@ -737,15 +737,15 @@ int dtm_init_sockaddr( sockaddr, portname, pfLogicalName )
|
|||||||
}
|
}
|
||||||
*pfLogicalName = FALSE;
|
*pfLogicalName = FALSE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Physical format - hostname is either in dotted decimal
|
Physical format - hostname is either in dotted decimal
|
||||||
notation ( call ipaddr() ) or direct or missing.
|
notation ( call ipaddr() ) or direct or missing.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if( host == NULL ) {
|
if( host == NULL ) {
|
||||||
gethostname( hostname, sizeof hostname );
|
gethostname( hostname, sizeof hostname );
|
||||||
host = hostname ;
|
host = hostname ;
|
||||||
}
|
}
|
||||||
DBGINT( "dtm_init_sockaddr: host %s\n", host );
|
DBGINT( "dtm_init_sockaddr: host %s\n", host );
|
||||||
DBGINT( "dtm_init_sockaddr: port %s\n", port );
|
DBGINT( "dtm_init_sockaddr: port %s\n", port );
|
||||||
|
|
||||||
@ -768,7 +768,7 @@ int dtm_init_sockaddr( sockaddr, portname, pfLogicalName )
|
|||||||
/* Fill in port id */
|
/* Fill in port id */
|
||||||
sockaddr -> sin_port = htons((unsigned short)atol( port ));
|
sockaddr -> sin_port = htons((unsigned short)atol( port ));
|
||||||
|
|
||||||
DBGINT( "dtm_init_sockaddr: nethostid = %x\n",
|
DBGINT( "dtm_init_sockaddr: nethostid = %x\n",
|
||||||
ntohl( sockaddr -> sin_addr.s_addr ));
|
ntohl( sockaddr -> sin_addr.s_addr ));
|
||||||
DBGINT( "dtm_init_sockaddr: portid = %d\n", ntohs( sockaddr -> sin_port) );
|
DBGINT( "dtm_init_sockaddr: portid = %d\n", ntohs( sockaddr -> sin_port) );
|
||||||
|
|
||||||
|
@ -17,11 +17,11 @@
|
|||||||
#define SRV_FUNC_LOCK_REQUEST 7
|
#define SRV_FUNC_LOCK_REQUEST 7
|
||||||
|
|
||||||
/**************************************************************
|
/**************************************************************
|
||||||
*
|
*
|
||||||
* for a connect message:
|
* for a connect message:
|
||||||
* SRVclass SRVid SRV_FUNC_CONNECT SRVInPort SRVVString SRVnumber
|
* SRVclass SRVid SRV_FUNC_CONNECT SRVInPort SRVVString SRVnumber
|
||||||
* for a disconnect message:
|
* for a disconnect message:
|
||||||
* SRVclass SRVid SRV_FUNC_DISCONNECT SRVInPort
|
* SRVclass SRVid SRV_FUNC_DISCONNECT SRVInPort
|
||||||
* for a lock:
|
* for a lock:
|
||||||
* SRVclass SRVid SRV_FUNC_LOCK SRVLock
|
* SRVclass SRVid SRV_FUNC_LOCK SRVLock
|
||||||
* for a lock:
|
* for a lock:
|
||||||
@ -31,7 +31,7 @@
|
|||||||
* for a user leaving:
|
* for a user leaving:
|
||||||
* SRVclass SRVid SRV_FUNC_REMOVE_USER SRVInPort
|
* SRVclass SRVid SRV_FUNC_REMOVE_USER SRVInPort
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* SRVsetClass(char *header,char *title) */
|
/* SRVsetClass(char *header,char *title) */
|
||||||
/* SRVcompareClass(char *header,char *title, int maxTitleLength) */
|
/* SRVcompareClass(char *header,char *title, int maxTitleLength) */
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
/* TXTsetReplaceAll(char *header) */
|
/* TXTsetReplaceAll(char *header) */
|
||||||
/* Boolean TXTshouldReplaceAll(char *header,int garbage) */
|
/* Boolean TXTshouldReplaceAll(char *header,int garbage) */
|
||||||
#define TXTsetReplaceAll(h) dtm_set_int(h,TXTra,1)
|
#define TXTsetReplaceAll(h) dtm_set_int(h,TXTra,1)
|
||||||
#define TXTshouldReplaceAll(h,i) (dtm_get_int(h,TXTra,&(i)) == -1)?0:1
|
#define TXTshouldReplaceAll(h,i) (dtm_get_int(h,TXTra,&(i)) == -1)?0:1
|
||||||
|
|
||||||
/* TXTsetDimension(char *header,int numBytes) */
|
/* TXTsetDimension(char *header,int numBytes) */
|
||||||
/* TXTgetDimension(char *header,int &numBytes) */
|
/* TXTgetDimension(char *header,int &numBytes) */
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
**
|
**
|
||||||
* $Header: /X11/mosaic/cvsroot/xmosaic3/libdtm/uio.h,v 1.3 1995/01/12 02:33:40 spowers Exp $
|
* $Header: /X11/mosaic/cvsroot/xmosaic3/libdtm/uio.h,v 1.3 1995/01/12 02:33:40 spowers Exp $
|
||||||
**
|
**
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
|
||||||
@ -34,7 +34,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.2 92/04/30 20:27:37 jplevyak
|
* Revision 1.2 92/04/30 20:27:37 jplevyak
|
||||||
* Changed Version to 2.3
|
* Changed Version to 2.3
|
||||||
*
|
*
|
||||||
* Revision 1.1 1992/03/06 22:51:22 jplevyak
|
* Revision 1.1 1992/03/06 22:51:22 jplevyak
|
||||||
* Initial revision
|
* Initial revision
|
||||||
*
|
*
|
||||||
|
@ -298,7 +298,7 @@ int size;
|
|||||||
}
|
}
|
||||||
else if (c1 & 0x60) { /* denormalized value */
|
else if (c1 & 0x60) { /* denormalized value */
|
||||||
register int shft;
|
register int shft;
|
||||||
|
|
||||||
shft = (c1 & 0x40) ? 1 : 2; /* shift needed to normalize */
|
shft = (c1 & 0x40) ? 1 : 2; /* shift needed to normalize */
|
||||||
/* shift mantissa */
|
/* shift mantissa */
|
||||||
/* note last bit of exp set to 1 implicitly */
|
/* note last bit of exp set to 1 implicitly */
|
||||||
@ -533,7 +533,7 @@ int size;
|
|||||||
}
|
}
|
||||||
else if (c1 & 0x0c) { /* denormalized value */
|
else if (c1 & 0x0c) { /* denormalized value */
|
||||||
register int shft;
|
register int shft;
|
||||||
|
|
||||||
shft = (c1 & 0x08) ? 1 : 2; /* shift needed to normalize */
|
shft = (c1 & 0x08) ? 1 : 2; /* shift needed to normalize */
|
||||||
/* shift mantissa */
|
/* shift mantissa */
|
||||||
/* note last bit of exp set to 1 implicitly */
|
/* note last bit of exp set to 1 implicitly */
|
||||||
|
12
libdtm/x.c
12
libdtm/x.c
@ -43,7 +43,7 @@
|
|||||||
*
|
*
|
||||||
* Revision 1.4 92/05/05 22:27:50 jplevyak
|
* Revision 1.4 92/05/05 22:27:50 jplevyak
|
||||||
* Corrected X interface code.
|
* Corrected X interface code.
|
||||||
*
|
*
|
||||||
* Revision 1.3 1992/05/04 22:05:55 jplevyak
|
* Revision 1.3 1992/05/04 22:05:55 jplevyak
|
||||||
* Declare DTMaddInput external
|
* Declare DTMaddInput external
|
||||||
*
|
*
|
||||||
@ -121,12 +121,12 @@ void dtm_handle_new_out( client_data, fd, id )
|
|||||||
automatically handled.
|
automatically handled.
|
||||||
*/
|
*/
|
||||||
#ifdef DTM_PROTOTYPES
|
#ifdef DTM_PROTOTYPES
|
||||||
int DTMaddInput( int p_ext, caddr_t condition,
|
int DTMaddInput( int p_ext, caddr_t condition,
|
||||||
XtInputCallbackProc proc, caddr_t client_data )
|
XtInputCallbackProc proc, caddr_t client_data )
|
||||||
#else
|
#else
|
||||||
int DTMaddInput( p_ext, condition, proc, client_data )
|
int DTMaddInput( p_ext, condition, proc, client_data )
|
||||||
int p_ext;
|
int p_ext;
|
||||||
caddr_t condition;
|
caddr_t condition;
|
||||||
XtInputCallbackProc proc;
|
XtInputCallbackProc proc;
|
||||||
caddr_t client_data;
|
caddr_t client_data;
|
||||||
#endif
|
#endif
|
||||||
@ -148,14 +148,14 @@ int DTMaddInput( p_ext, condition, proc, client_data )
|
|||||||
/*
|
/*
|
||||||
Set up callback for new connections
|
Set up callback for new connections
|
||||||
*/
|
*/
|
||||||
XtAddInput( pp->sockfd, XtInputReadMask, dtm_handle_new_in,
|
XtAddInput( pp->sockfd, XtInputReadMask, dtm_handle_new_in,
|
||||||
(caddr_t) p );
|
(caddr_t) p );
|
||||||
FOR_EACH_IN_PORT( inp, pp ) {
|
FOR_EACH_IN_PORT( inp, pp ) {
|
||||||
inp->XinputId = XtAddInput( inp->fd, XtInputReadMask,
|
inp->XinputId = XtAddInput( inp->fd, XtInputReadMask,
|
||||||
dtm_handle_in, (caddr_t) p );
|
dtm_handle_in, (caddr_t) p );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
XtAddInput( pp->sockfd, XtInputReadMask, dtm_handle_new_out,
|
XtAddInput( pp->sockfd, XtInputReadMask, dtm_handle_new_out,
|
||||||
(caddr_t) p );
|
(caddr_t) p );
|
||||||
}
|
}
|
||||||
return DTM_OK;
|
return DTM_OK;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* A minimalistic constraint widget
|
* A minimalistic constraint widget
|
||||||
*
|
*
|
||||||
* Sun Sep 12 20:03:49 GMT 1993 Gustaf Neumann
|
* Sun Sep 12 20:03:49 GMT 1993 Gustaf Neumann
|
||||||
*/
|
*/
|
||||||
#include "../config.h"
|
#include "../config.h"
|
||||||
#ifndef MOTIF
|
#ifndef MOTIF
|
||||||
@ -70,7 +70,7 @@ DrawingAreaClassRec drawingAreaClassRec = {
|
|||||||
{ /* constraint_class fields */
|
{ /* constraint_class fields */
|
||||||
/* subresourses */ NULL,
|
/* subresourses */ NULL,
|
||||||
/* subresource_count */ 0,
|
/* subresource_count */ 0,
|
||||||
/* constraint_size */ 0,
|
/* constraint_size */ 0,
|
||||||
/* initialize */ NULL, /*ConstraintInitialize,*/
|
/* initialize */ NULL, /*ConstraintInitialize,*/
|
||||||
/* destroy */ NULL,
|
/* destroy */ NULL,
|
||||||
/* set_values */ NULL, /*ConstraintSetValues,*/
|
/* set_values */ NULL, /*ConstraintSetValues,*/
|
||||||
@ -157,9 +157,9 @@ static Boolean ConstraintSetValues(current, request, new, args, num_args)
|
|||||||
Cardinal *num_args;
|
Cardinal *num_args;
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
register DrawingAreaConstraints cfc =
|
register DrawingAreaConstraints cfc =
|
||||||
(DrawingAreaConstraints) current->core.constraints;
|
(DrawingAreaConstraints) current->core.constraints;
|
||||||
register DrawingAreaConstraints nfc =
|
register DrawingAreaConstraints nfc =
|
||||||
(DrawingAreaConstraints) new->core.constraints;
|
(DrawingAreaConstraints) new->core.constraints;
|
||||||
*/
|
*/
|
||||||
return( FALSE );
|
return( FALSE );
|
||||||
@ -184,7 +184,7 @@ static XtGeometryResult PreferredGeometry( widget, request, reply )
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
DrawingAreaWidget w = (DrawingAreaWidget)widget;
|
DrawingAreaWidget w = (DrawingAreaWidget)widget;
|
||||||
*/
|
*/
|
||||||
return XtGeometryNo;
|
return XtGeometryNo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,5 +31,5 @@ typedef struct _DrawingAreaClassRec *DrawingAreaWidgetClass;
|
|||||||
typedef struct _DrawingAreaRec *DrawingAreaWidget;
|
typedef struct _DrawingAreaRec *DrawingAreaWidget;
|
||||||
|
|
||||||
extern WidgetClass drawingAreaWidgetClass;
|
extern WidgetClass drawingAreaWidgetClass;
|
||||||
|
|
||||||
#endif /* _XawDrawingArea_h */
|
#endif /* _XawDrawingArea_h */
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Purpose: to parse Hypertext widget contents into appropriate PostScript
|
* Purpose: to parse Hypertext widget contents into appropriate PostScript
|
||||||
*
|
*
|
||||||
* Author: Ameet A. Raval & Frans van Hoesel & Andrew Ford
|
* Author: Ameet A. Raval & Frans van Hoesel & Andrew Ford
|
||||||
* (aar@gfdl.gov & hoesel@chem.rug.nl).
|
* (aar@gfdl.gov & hoesel@chem.rug.nl).
|
||||||
* send bugreports to hoesel@chem.rug.nl
|
* send bugreports to hoesel@chem.rug.nl
|
||||||
*
|
*
|
||||||
* Institution: for Ameet A. Raval:
|
* Institution: for Ameet A. Raval:
|
||||||
@ -24,7 +24,7 @@
|
|||||||
* Montpelier, Bristol, BS6 5HR, GB
|
* Montpelier, Bristol, BS6 5HR, GB
|
||||||
* E-mail: andrew@icarus.demon.co.uk
|
* E-mail: andrew@icarus.demon.co.uk
|
||||||
*
|
*
|
||||||
* Date: 1 aug 1993
|
* Date: 1 aug 1993
|
||||||
* Modification: 8 nov 1993
|
* Modification: 8 nov 1993
|
||||||
* o added support for bold/italics courier
|
* o added support for bold/italics courier
|
||||||
* o removed unused or no longer needed stuff
|
* o removed unused or no longer needed stuff
|
||||||
@ -49,8 +49,8 @@
|
|||||||
* WE MAKE NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR
|
* WE MAKE NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR
|
||||||
* ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED
|
* ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED
|
||||||
* WARRANTY. WE SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY THE
|
* WARRANTY. WE SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY THE
|
||||||
* USERS OF THIS SOFTWARE.
|
* USERS OF THIS SOFTWARE.
|
||||||
*
|
*
|
||||||
* pieces of code are taken from xvps by kind
|
* pieces of code are taken from xvps by kind
|
||||||
* permission of John Bradley.
|
* permission of John Bradley.
|
||||||
*
|
*
|
||||||
@ -121,7 +121,7 @@ extern int SwapElements();
|
|||||||
PSprintf("%s\n", txt[i]) ; \
|
PSprintf("%s\n", txt[i]) ; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
/* STREQ tests whether two strings are equal. */
|
/* STREQ tests whether two strings are equal. */
|
||||||
#define STREQ(a, b) (strcmp((a), (b)) == 0)
|
#define STREQ(a, b) (strcmp((a), (b)) == 0)
|
||||||
|
|
||||||
@ -165,7 +165,7 @@ PAGE_DIMENS_T;
|
|||||||
PAGE_DIMENS_T page_dimens;
|
PAGE_DIMENS_T page_dimens;
|
||||||
PAGE_DIMENS_T a4_page_dimens = {
|
PAGE_DIMENS_T a4_page_dimens = {
|
||||||
297 * MM,
|
297 * MM,
|
||||||
210 * MM,
|
210 * MM,
|
||||||
20 * MM,
|
20 * MM,
|
||||||
20 * MM,
|
20 * MM,
|
||||||
20 * MM,
|
20 * MM,
|
||||||
@ -201,7 +201,7 @@ extern Colormap installed_cmap;
|
|||||||
* screen
|
* screen
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static float
|
static float
|
||||||
GetDpi(HTMLWidget hw)
|
GetDpi(HTMLWidget hw)
|
||||||
{
|
{
|
||||||
Screen *s = XtScreen(hw);
|
Screen *s = XtScreen(hw);
|
||||||
@ -228,17 +228,17 @@ GetDpi(HTMLWidget hw)
|
|||||||
* in this call, otherwise it returns EOF (just as printf does)
|
* in this call, otherwise it returns EOF (just as printf does)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
PSprintf(char *format, ...)
|
PSprintf(char *format, ...)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
char *s;
|
char *s;
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
if (PS_size - PS_len < 1024)
|
if (PS_size - PS_len < 1024)
|
||||||
{
|
{
|
||||||
PS_size += 1024;
|
PS_size += 1024;
|
||||||
if ((s = (char *) realloc(PS_string, PS_size)) == NULL)
|
if ((s = (char *) realloc(PS_string, PS_size)) == NULL)
|
||||||
{
|
{
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (htmlwTrace) {
|
if (htmlwTrace) {
|
||||||
@ -254,7 +254,7 @@ PSprintf(char *format, ...)
|
|||||||
/* this is a hack to make it work on systems were vsprintf(s,...)
|
/* this is a hack to make it work on systems were vsprintf(s,...)
|
||||||
* returns s, instead of the len.
|
* returns s, instead of the len.
|
||||||
*/
|
*/
|
||||||
if (len != EOF && len != 0)
|
if (len != EOF && len != 0)
|
||||||
PS_len += strlen(PS_string+PS_len);
|
PS_len += strlen(PS_string+PS_len);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
return(len);
|
return(len);
|
||||||
@ -270,13 +270,13 @@ PSprintf(char *format, ...)
|
|||||||
* PSprintf).
|
* PSprintf).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
PShex(unsigned char val, int flush)
|
PShex(unsigned char val, int flush)
|
||||||
{
|
{
|
||||||
static unsigned char hexline[80];
|
static unsigned char hexline[80];
|
||||||
static char digit[] = "0123456789abcdef";
|
static char digit[] = "0123456789abcdef";
|
||||||
|
|
||||||
if (!flush)
|
if (!flush)
|
||||||
{
|
{
|
||||||
hexline[PS_hexi++] = (char) digit[((unsigned) val >>
|
hexline[PS_hexi++] = (char) digit[((unsigned) val >>
|
||||||
(unsigned) 4) & (unsigned) 0x0f];
|
(unsigned) 4) & (unsigned) 0x0f];
|
||||||
@ -287,7 +287,7 @@ PShex(unsigned char val, int flush)
|
|||||||
/* Changed from ">78" to ">77" on advice of
|
/* Changed from ">78" to ">77" on advice of
|
||||||
debra@info.win.tue.nl (Paul De Bra). */
|
debra@info.win.tue.nl (Paul De Bra). */
|
||||||
|
|
||||||
if ((flush && PS_hexi) || (PS_hexi>77))
|
if ((flush && PS_hexi) || (PS_hexi>77))
|
||||||
{
|
{
|
||||||
hexline[PS_hexi] = '\0';
|
hexline[PS_hexi] = '\0';
|
||||||
PS_hexi=0;
|
PS_hexi=0;
|
||||||
@ -306,13 +306,13 @@ PShex(unsigned char val, int flush)
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSfont(HTMLWidget hw, XFontStruct *font, int fontfamily)
|
PSfont(HTMLWidget hw, XFontStruct *font, int fontfamily)
|
||||||
{
|
{
|
||||||
PS_fontstyle fn;
|
PS_fontstyle fn;
|
||||||
int style, size;
|
int style, size;
|
||||||
int fs;
|
int fs;
|
||||||
|
|
||||||
static PS_fontstyle fontstyle[17] =
|
static PS_fontstyle fontstyle[17] =
|
||||||
{
|
{
|
||||||
RF, IF, BF, FF, BF, BF, BF, BF, BF,
|
RF, IF, BF, FF, BF, BF, BF, BF, BF,
|
||||||
BF, IF, FF, FF, FB, FI, FB, FI
|
BF, IF, FF, FF, FB, FI, FB, FI
|
||||||
@ -323,7 +323,7 @@ PSfont(HTMLWidget hw, XFontStruct *font, int fontfamily)
|
|||||||
/* fontsizes as set in gui.c and in HTML.c (listing font is only
|
/* fontsizes as set in gui.c and in HTML.c (listing font is only
|
||||||
* defined in HTML.c)
|
* defined in HTML.c)
|
||||||
*/
|
*/
|
||||||
static int fontsizes[4][3][17] =
|
static int fontsizes[4][3][17] =
|
||||||
{
|
{
|
||||||
/* times font sizes */
|
/* times font sizes */
|
||||||
{
|
{
|
||||||
@ -351,7 +351,7 @@ PSfont(HTMLWidget hw, XFontStruct *font, int fontfamily)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* next is for each fontfamily the ascent value as given by the
|
/* next is for each fontfamily the ascent value as given by the
|
||||||
* medium sized bold x-font (the regular font has the same
|
* medium sized bold x-font (the regular font has the same
|
||||||
* ascent value for both the medium and the large size Century
|
* ascent value for both the medium and the large size Century
|
||||||
* font).
|
* font).
|
||||||
@ -446,12 +446,12 @@ PSfont(HTMLWidget hw, XFontStruct *font, int fontfamily)
|
|||||||
|
|
||||||
/* check size, by looking at the size of the regular font */
|
/* check size, by looking at the size of the regular font */
|
||||||
size = 1;
|
size = 1;
|
||||||
if (hw->html.bold_font->ascent > medium_fontascent[fontfamily])
|
if (hw->html.bold_font->ascent > medium_fontascent[fontfamily])
|
||||||
{
|
{
|
||||||
/* large font */
|
/* large font */
|
||||||
size = 2;
|
size = 2;
|
||||||
}
|
}
|
||||||
else if (hw->html.bold_font->ascent < medium_fontascent[fontfamily])
|
else if (hw->html.bold_font->ascent < medium_fontascent[fontfamily])
|
||||||
{
|
{
|
||||||
/* small font */
|
/* small font */
|
||||||
size = 0;
|
size = 0;
|
||||||
@ -460,7 +460,7 @@ PSfont(HTMLWidget hw, XFontStruct *font, int fontfamily)
|
|||||||
fs = fontsizes[fontfamily][size][style];
|
fs = fontsizes[fontfamily][size][style];
|
||||||
PS_fontascent = fontascent[fontfamily][size][style];
|
PS_fontascent = fontascent[fontfamily][size][style];
|
||||||
|
|
||||||
if (fn != PS_oldfn || fs != PS_oldfs)
|
if (fn != PS_oldfn || fs != PS_oldfs)
|
||||||
{
|
{
|
||||||
PSprintf( "%2s %d SF\n", fnchar[fn], fs);
|
PSprintf( "%2s %d SF\n", fnchar[fn], fs);
|
||||||
PS_oldfn=fn, PS_oldfs=fs;
|
PS_oldfn=fn, PS_oldfs=fs;
|
||||||
@ -475,26 +475,26 @@ PSfont(HTMLWidget hw, XFontStruct *font, int fontfamily)
|
|||||||
* Any accumulated footnotes are output and the outstanding footnote count
|
* Any accumulated footnotes are output and the outstanding footnote count
|
||||||
* reset to zero. Footnotes are preceded by a footnote rule and each footnote
|
* reset to zero. Footnotes are preceded by a footnote rule and each footnote
|
||||||
* is consists of a raised mark and the footnote text (i.e. the url). The mark
|
* is consists of a raised mark and the footnote text (i.e. the url). The mark
|
||||||
* is in a smaller font than the text. The ideas are filched from LaTeX.
|
* is in a smaller font than the text. The ideas are filched from LaTeX.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSshowpage(void)
|
PSshowpage(void)
|
||||||
{
|
{
|
||||||
PSprintf("restore\n");
|
PSprintf("restore\n");
|
||||||
if (n_saved_ftns > 0)
|
if (n_saved_ftns > 0)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
PSprintf("gsave 0.2 setlinewidth newpath %.2f %.2f M %.2f 0 RL stroke\n",
|
PSprintf("gsave 0.2 setlinewidth newpath %.2f %.2f M %.2f 0 RL stroke\n",
|
||||||
page_dimens.left_margin,
|
page_dimens.left_margin,
|
||||||
(page_dimens.bot_margin + (footnote_ptsize * n_saved_ftns) + 4),
|
(page_dimens.bot_margin + (footnote_ptsize * n_saved_ftns) + 4),
|
||||||
(page_dimens.text_width * 0.4));
|
(page_dimens.text_width * 0.4));
|
||||||
for (i = 0; n_saved_ftns; n_saved_ftns--, i++)
|
for (i = 0; n_saved_ftns; n_saved_ftns--, i++)
|
||||||
{
|
{
|
||||||
PSprintf("newpath %.2f %.2f M RF %.2f SF (%d) S 3 -2 R RF %d SF (%s) S\n",
|
PSprintf("newpath %.2f %.2f M RF %.2f SF (%d) S 3 -2 R RF %d SF (%s) S\n",
|
||||||
page_dimens.left_margin,
|
page_dimens.left_margin,
|
||||||
page_dimens.bot_margin + 5 + (n_saved_ftns - 1) * footnote_ptsize,
|
page_dimens.bot_margin + 5 + (n_saved_ftns - 1) * footnote_ptsize,
|
||||||
(0.7 * footnote_ptsize), cur_ftn_no - n_saved_ftns,
|
(0.7 * footnote_ptsize), cur_ftn_no - n_saved_ftns,
|
||||||
footnote_ptsize, footnotes[i]);
|
footnote_ptsize, footnotes[i]);
|
||||||
}
|
}
|
||||||
PSprintf("grestore\n");
|
PSprintf("grestore\n");
|
||||||
@ -512,10 +512,10 @@ PSshowpage(void)
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSnewpage(void)
|
PSnewpage(void)
|
||||||
{
|
{
|
||||||
PS_curr_page++;
|
PS_curr_page++;
|
||||||
|
|
||||||
/* the PostScript reference Manual states that the Page: Tag
|
/* the PostScript reference Manual states that the Page: Tag
|
||||||
should have a label and a ordinal; otherwise programs like
|
should have a label and a ordinal; otherwise programs like
|
||||||
psutils fail -gustaf */
|
psutils fail -gustaf */
|
||||||
@ -534,7 +534,7 @@ PSnewpage(void)
|
|||||||
* PSinit_latin1 - handle ISO encoding
|
* PSinit_latin1 - handle ISO encoding
|
||||||
*
|
*
|
||||||
* print out initializing PostScript text for ISO Latin1 font encoding
|
* print out initializing PostScript text for ISO Latin1 font encoding
|
||||||
* This code is copied from the Idraw program (from Stanford's InterViews
|
* This code is copied from the Idraw program (from Stanford's InterViews
|
||||||
* package), courtesy of Steinar Kjaernsr|d, steinar@ifi.uio.no
|
* package), courtesy of Steinar Kjaernsr|d, steinar@ifi.uio.no
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -595,7 +595,7 @@ PSinit_latin1(void)
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSinit(void)
|
PSinit(void)
|
||||||
{
|
{
|
||||||
PS_size = PS_len = PS_offset = PS_hexi = PS_page_offset = 0;
|
PS_size = PS_len = PS_offset = PS_hexi = PS_page_offset = 0;
|
||||||
PS_start_y = 0;
|
PS_start_y = 0;
|
||||||
@ -637,8 +637,8 @@ PSinit(void)
|
|||||||
* title title of document
|
* title title of document
|
||||||
* date date modified/printed
|
* date date modified/printed
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSheader(char *title, int font, char *url, char *time_str)
|
PSheader(char *title, int font, char *url, char *time_str)
|
||||||
{
|
{
|
||||||
static char *notitle="Untitled";
|
static char *notitle="Untitled";
|
||||||
int set_to_null=0;
|
int set_to_null=0;
|
||||||
@ -680,7 +680,7 @@ PSheader(char *title, int font, char *url, char *time_str)
|
|||||||
time_t clock = time(NULL);
|
time_t clock = time(NULL);
|
||||||
|
|
||||||
#if !defined(VMS) || defined (__DECC)
|
#if !defined(VMS) || defined (__DECC)
|
||||||
strftime(time_buf, sizeof(time_buf),
|
strftime(time_buf, sizeof(time_buf),
|
||||||
"Printed %a %b %e %T %Y", localtime(&clock));
|
"Printed %a %b %e %T %Y", localtime(&clock));
|
||||||
#else
|
#else
|
||||||
sprintf(time_buf,"Printed %s",asctime(localtime(&clock)));
|
sprintf(time_buf,"Printed %s",asctime(localtime(&clock)));
|
||||||
@ -732,16 +732,16 @@ PSheader(char *title, int font, char *url, char *time_str)
|
|||||||
PSprintf("/title (%s) D\n", title);
|
PSprintf("/title (%s) D\n", title);
|
||||||
PSprintf("/date (%s) D\n", time_str);
|
PSprintf("/date (%s) D\n", time_str);
|
||||||
PSconst_out(txt);
|
PSconst_out(txt);
|
||||||
|
|
||||||
/* Output the newpage definition. */
|
/* Output the newpage definition. */
|
||||||
|
|
||||||
PSprintf("/NP {");
|
PSprintf("/NP {");
|
||||||
if (HTML_Print_Headers)
|
if (HTML_Print_Headers)
|
||||||
{
|
{
|
||||||
PSprintf("gsave 0.4 setlinewidth\n");
|
PSprintf("gsave 0.4 setlinewidth\n");
|
||||||
PSprintf(" newpath %.2f %.2f M %.2f 0 RL stroke",
|
PSprintf(" newpath %.2f %.2f M %.2f 0 RL stroke",
|
||||||
page_dimens.left_margin,
|
page_dimens.left_margin,
|
||||||
(page_dimens.bot_margin + page_dimens.text_height),
|
(page_dimens.bot_margin + page_dimens.text_height),
|
||||||
page_dimens.text_width);
|
page_dimens.text_width);
|
||||||
PSprintf(" newpath %.2f %.2f M %.2f 0 RL stroke\n",
|
PSprintf(" newpath %.2f %.2f M %.2f 0 RL stroke\n",
|
||||||
page_dimens.left_margin, page_dimens.bot_margin,
|
page_dimens.left_margin, page_dimens.bot_margin,
|
||||||
@ -751,7 +751,7 @@ PSheader(char *title, int font, char *url, char *time_str)
|
|||||||
(page_dimens.bot_margin + page_dimens.text_height + 6), title);
|
(page_dimens.bot_margin + page_dimens.text_height + 6), title);
|
||||||
PSprintf(" nstr cvs dup stringwidth pop pgno stringwidth pop add\n");
|
PSprintf(" nstr cvs dup stringwidth pop pgno stringwidth pop add\n");
|
||||||
PSprintf(" %.2f E sub %.2f M pgno S S\n",
|
PSprintf(" %.2f E sub %.2f M pgno S S\n",
|
||||||
(page_dimens.left_margin + page_dimens.text_width),
|
(page_dimens.left_margin + page_dimens.text_width),
|
||||||
(page_dimens.bot_margin + page_dimens.text_height + 6));
|
(page_dimens.bot_margin + page_dimens.text_height + 6));
|
||||||
PSprintf(" BF 10 SF %.2f %.2f M (%s) S\n",
|
PSprintf(" BF 10 SF %.2f %.2f M (%s) S\n",
|
||||||
page_dimens.left_margin, page_dimens.bot_margin - 12, url);
|
page_dimens.left_margin, page_dimens.bot_margin - 12, url);
|
||||||
@ -760,11 +760,11 @@ PSheader(char *title, int font, char *url, char *time_str)
|
|||||||
page_dimens.bot_margin - 12);
|
page_dimens.bot_margin - 12);
|
||||||
}
|
}
|
||||||
PSprintf(" %.2f %.2f translate %.5f %.5f scale } D\n",
|
PSprintf(" %.2f %.2f translate %.5f %.5f scale } D\n",
|
||||||
page_dimens.left_margin,
|
page_dimens.left_margin,
|
||||||
page_dimens.bot_margin + page_dimens.text_height,
|
page_dimens.bot_margin + page_dimens.text_height,
|
||||||
Points_Pixel, Points_Pixel);
|
Points_Pixel, Points_Pixel);
|
||||||
PSinit_latin1();
|
PSinit_latin1();
|
||||||
|
|
||||||
PSprintf("%%%%EndProlog\n");
|
PSprintf("%%%%EndProlog\n");
|
||||||
|
|
||||||
if (set_to_null) {
|
if (set_to_null) {
|
||||||
@ -802,9 +802,9 @@ PStrailer(void)
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSmoveto(int x, int y)
|
PSmoveto(int x, int y)
|
||||||
{
|
{
|
||||||
if (y > PS_start_y + Pixels_Page)
|
if (y > PS_start_y + Pixels_Page)
|
||||||
{
|
{
|
||||||
PS_start_y = y;
|
PS_start_y = y;
|
||||||
PSshowpage();
|
PSshowpage();
|
||||||
@ -824,7 +824,7 @@ PSmoveto(int x, int y)
|
|||||||
static void
|
static void
|
||||||
PSmove_offset(int offset)
|
PSmove_offset(int offset)
|
||||||
{
|
{
|
||||||
if (offset != PS_offset)
|
if (offset != PS_offset)
|
||||||
{
|
{
|
||||||
PSprintf("0 %d R\n", PS_offset - offset );
|
PSprintf("0 %d R\n", PS_offset - offset );
|
||||||
PS_offset = offset;
|
PS_offset = offset;
|
||||||
@ -836,12 +836,12 @@ PSmove_offset(int offset)
|
|||||||
* Return an indication of whether or not the current element has a footnote.
|
* Return an indication of whether or not the current element has a footnote.
|
||||||
*
|
*
|
||||||
* an element has a footnote if it is text or an image and its anchorHRef is not null.
|
* an element has a footnote if it is text or an image and its anchorHRef is not null.
|
||||||
* If the element is a textual element with an anchorHRef, that has been split across
|
* If the element is a textual element with an anchorHRef, that has been split across
|
||||||
* lines then it should be followed by a linefeed element and a text element with the
|
* lines then it should be followed by a linefeed element and a text element with the
|
||||||
* same anchorHRef. In this case say that the element doesn't have a footnote so as
|
* same anchorHRef. In this case say that the element doesn't have a footnote so as
|
||||||
* to avoid duplicate footnotes.
|
* to avoid duplicate footnotes.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
has_footnote(struct ele_rec *el)
|
has_footnote(struct ele_rec *el)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
@ -904,10 +904,10 @@ has_footnote(struct ele_rec *el)
|
|||||||
static void
|
static void
|
||||||
PSfootnote(char *href, double height)
|
PSfootnote(char *href, double height)
|
||||||
{
|
{
|
||||||
PSprintf("gsave 0 %.2f R RF %d SF (%d) S grestore\n",
|
PSprintf("gsave 0 %.2f R RF %d SF (%d) S grestore\n",
|
||||||
height, footnote_ptsize, cur_ftn_no++);
|
height, footnote_ptsize, cur_ftn_no++);
|
||||||
|
|
||||||
if (n_saved_ftns == ftn_array_size)
|
if (n_saved_ftns == ftn_array_size)
|
||||||
{
|
{
|
||||||
ftn_array_size += 16;
|
ftn_array_size += 16;
|
||||||
if (!footnotes) {
|
if (!footnotes) {
|
||||||
@ -917,7 +917,7 @@ PSfootnote(char *href, double height)
|
|||||||
footnotes = (char **)realloc((void *)footnotes,
|
footnotes = (char **)realloc((void *)footnotes,
|
||||||
(ftn_array_size * sizeof(char *)));
|
(ftn_array_size * sizeof(char *)));
|
||||||
}
|
}
|
||||||
if (footnotes == NULL)
|
if (footnotes == NULL)
|
||||||
{
|
{
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (htmlwTrace) {
|
if (htmlwTrace) {
|
||||||
@ -948,9 +948,9 @@ PStext(HTMLWidget hw, struct ele_rec *eptr, int fontfamily, String s)
|
|||||||
unsigned char ch;
|
unsigned char ch;
|
||||||
int underline = eptr->underline_number;
|
int underline = eptr->underline_number;
|
||||||
int ascent;
|
int ascent;
|
||||||
|
|
||||||
PSfont(hw, eptr->font, fontfamily); /* set font */
|
PSfont(hw, eptr->font, fontfamily); /* set font */
|
||||||
if (PS_fontascent == 0)
|
if (PS_fontascent == 0)
|
||||||
ascent = eptr->font->ascent;
|
ascent = eptr->font->ascent;
|
||||||
else
|
else
|
||||||
ascent = PS_fontascent;
|
ascent = PS_fontascent;
|
||||||
@ -961,7 +961,7 @@ PStext(HTMLWidget hw, struct ele_rec *eptr, int fontfamily, String s)
|
|||||||
every character stored as an octal escape (worst case scenario). */
|
every character stored as an octal escape (worst case scenario). */
|
||||||
|
|
||||||
s2 = (String) malloc(strlen(s) * 4 + 1);
|
s2 = (String) malloc(strlen(s) * 4 + 1);
|
||||||
if (s2 == NULL)
|
if (s2 == NULL)
|
||||||
{
|
{
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (htmlwTrace) {
|
if (htmlwTrace) {
|
||||||
@ -982,14 +982,14 @@ PStext(HTMLWidget hw, struct ele_rec *eptr, int fontfamily, String s)
|
|||||||
*stmp++ = B_SLASH;
|
*stmp++ = B_SLASH;
|
||||||
*stmp++ = ch;
|
*stmp++ = ch;
|
||||||
}
|
}
|
||||||
else if (ch > (unsigned char) MAX_ASCII)
|
else if (ch > (unsigned char) MAX_ASCII)
|
||||||
{
|
{
|
||||||
/* convert to octal */
|
/* convert to octal */
|
||||||
*stmp++ = B_SLASH;
|
*stmp++ = B_SLASH;
|
||||||
*stmp++ = ((ch >> 6) & 007) + '0';
|
*stmp++ = ((ch >> 6) & 007) + '0';
|
||||||
*stmp++ = ((ch >> 3) & 007) + '0';
|
*stmp++ = ((ch >> 3) & 007) + '0';
|
||||||
*stmp++ = (ch & 007) + '0';
|
*stmp++ = (ch & 007) + '0';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*stmp++ = ch;
|
*stmp++ = ch;
|
||||||
@ -997,7 +997,7 @@ PStext(HTMLWidget hw, struct ele_rec *eptr, int fontfamily, String s)
|
|||||||
}
|
}
|
||||||
*(stmp) = '\0';
|
*(stmp) = '\0';
|
||||||
PSprintf("(%s)%c\n", s2, (underline)?'U':'S');
|
PSprintf("(%s)%c\n", s2, (underline)?'U':'S');
|
||||||
if (HTML_Print_Footers && has_footnote(eptr))
|
if (HTML_Print_Footers && has_footnote(eptr))
|
||||||
{
|
{
|
||||||
PSfootnote(eptr->anchorHRef, 0.7 * ascent);
|
PSfootnote(eptr->anchorHRef, 0.7 * ascent);
|
||||||
}
|
}
|
||||||
@ -1012,10 +1012,10 @@ PStext(HTMLWidget hw, struct ele_rec *eptr, int fontfamily, String s)
|
|||||||
* of two. The size of the higher level bullets is just somewhat smaller
|
* of two. The size of the higher level bullets is just somewhat smaller
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSbullet(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
PSbullet(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
||||||
{
|
{
|
||||||
int width = ( eptr->font->max_bounds.lbearing
|
int width = ( eptr->font->max_bounds.lbearing
|
||||||
+ eptr->font->max_bounds.rbearing);
|
+ eptr->font->max_bounds.rbearing);
|
||||||
int offset = eptr->y_offset + eptr->font->ascent;
|
int offset = eptr->y_offset + eptr->font->ascent;
|
||||||
int level = eptr->indent_level;
|
int level = eptr->indent_level;
|
||||||
@ -1123,7 +1123,7 @@ PSwidget(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
* does the run-length encoding. This is done to reduce the file size and
|
* does the run-length encoding. This is done to reduce the file size and
|
||||||
* therefore the time to send the file to the printer. You get longer
|
* therefore the time to send the file to the printer. You get longer
|
||||||
* processing time instead.
|
* processing time instead.
|
||||||
*
|
*
|
||||||
* rle is encoded as such:
|
* rle is encoded as such:
|
||||||
* <count> <value> # 'run' of count+1 equal pixels
|
* <count> <value> # 'run' of count+1 equal pixels
|
||||||
* <count | 0x80> <count+1 data bytes> # count+1 non-equal pixels
|
* <count | 0x80> <count+1 data bytes> # count+1 non-equal pixels
|
||||||
@ -1131,18 +1131,18 @@ PSwidget(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
*
|
*
|
||||||
* returns length of the rleline vector
|
* returns length of the rleline vector
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
PSrle_encode(unsigned char *scanline,
|
PSrle_encode(unsigned char *scanline,
|
||||||
unsigned char *rleline,
|
unsigned char *rleline,
|
||||||
int wide)
|
int wide)
|
||||||
{
|
{
|
||||||
int i, j, blocklen, isrun, rlen;
|
int i, j, blocklen, isrun, rlen;
|
||||||
unsigned char block[256], pix;
|
unsigned char block[256], pix;
|
||||||
|
|
||||||
blocklen = isrun = rlen = 0;
|
blocklen = isrun = rlen = 0;
|
||||||
|
|
||||||
for (i = 0; i < wide; i++)
|
for (i = 0; i < wide; i++)
|
||||||
{
|
{
|
||||||
/* there are 5 possible states:
|
/* there are 5 possible states:
|
||||||
* 0: block empty.
|
* 0: block empty.
|
||||||
@ -1154,23 +1154,23 @@ PSrle_encode(unsigned char *scanline,
|
|||||||
|
|
||||||
pix = scanline[i];
|
pix = scanline[i];
|
||||||
|
|
||||||
if (!blocklen)
|
if (!blocklen)
|
||||||
{
|
{
|
||||||
/* case 0: empty */
|
/* case 0: empty */
|
||||||
block[blocklen++] = pix;
|
block[blocklen++] = pix;
|
||||||
isrun = 1;
|
isrun = 1;
|
||||||
}
|
}
|
||||||
else if (isrun)
|
else if (isrun)
|
||||||
{
|
{
|
||||||
if (pix == block[blocklen-1])
|
if (pix == block[blocklen-1])
|
||||||
{
|
{
|
||||||
/* case 1: isrun, prev==cur */
|
/* case 1: isrun, prev==cur */
|
||||||
block[blocklen++] = pix;
|
block[blocklen++] = pix;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* case 2: isrun, prev!=cur */
|
/* case 2: isrun, prev!=cur */
|
||||||
if (blocklen>1)
|
if (blocklen>1)
|
||||||
{
|
{
|
||||||
/* we have a run block to flush */
|
/* we have a run block to flush */
|
||||||
rleline[rlen++] = blocklen-1;
|
rleline[rlen++] = blocklen-1;
|
||||||
@ -1188,12 +1188,12 @@ PSrle_encode(unsigned char *scanline,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* not a run */
|
/* not a run */
|
||||||
if (pix == block[blocklen-1])
|
if (pix == block[blocklen-1])
|
||||||
{
|
{
|
||||||
/* case 3: non-run, prev==cur */
|
/* case 3: non-run, prev==cur */
|
||||||
if (blocklen>1)
|
if (blocklen>1)
|
||||||
{
|
{
|
||||||
/* have a non-run block to flush */
|
/* have a non-run block to flush */
|
||||||
rleline[rlen++] = (blocklen-1) | 0x80;
|
rleline[rlen++] = (blocklen-1) | 0x80;
|
||||||
@ -1202,7 +1202,7 @@ PSrle_encode(unsigned char *scanline,
|
|||||||
/* start new run block with pix */
|
/* start new run block with pix */
|
||||||
block[0] = pix;
|
block[0] = pix;
|
||||||
blocklen = isrun = 1;
|
blocklen = isrun = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* blocklen<=1 turn into a run */
|
/* blocklen<=1 turn into a run */
|
||||||
@ -1210,17 +1210,17 @@ PSrle_encode(unsigned char *scanline,
|
|||||||
block[blocklen++] = pix;
|
block[blocklen++] = pix;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* case 4: non-run, prev!=cur */
|
/* case 4: non-run, prev!=cur */
|
||||||
block[blocklen++] = pix;
|
block[blocklen++] = pix;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* max block length. flush */
|
/* max block length. flush */
|
||||||
if (blocklen == 128)
|
if (blocklen == 128)
|
||||||
{
|
{
|
||||||
if (isrun)
|
if (isrun)
|
||||||
{
|
{
|
||||||
rleline[rlen++] = blocklen-1;
|
rleline[rlen++] = blocklen-1;
|
||||||
rleline[rlen++] = block[0];
|
rleline[rlen++] = block[0];
|
||||||
@ -1256,7 +1256,7 @@ PSrle_encode(unsigned char *scanline,
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PScolor_image - created postscript colorimage operator
|
* PScolor_image - created postscript colorimage operator
|
||||||
*
|
*
|
||||||
* spits out code that checks if the PostScript device in question
|
* spits out code that checks if the PostScript device in question
|
||||||
* knows about the 'colorimage' operator. If it doesn't, it defines
|
* knows about the 'colorimage' operator. If it doesn't, it defines
|
||||||
@ -1265,8 +1265,8 @@ PSrle_encode(unsigned char *scanline,
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
PScolor_image(void)
|
PScolor_image(void)
|
||||||
{
|
{
|
||||||
static char *txt[] = {
|
static char *txt[] = {
|
||||||
|
|
||||||
@ -1316,21 +1316,21 @@ PScolor_image(void)
|
|||||||
|
|
||||||
PSconst_out(txt);
|
PSconst_out(txt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PScolormap - write colormap
|
* PScolormap - write colormap
|
||||||
*
|
*
|
||||||
* spits out code for the colormap of the following image
|
* spits out code for the colormap of the following image
|
||||||
* if !color, it spits out a mono-ized graymap
|
* if !color, it spits out a mono-ized graymap
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PScolormap(int color,
|
PScolormap(int color,
|
||||||
int nc,
|
int nc,
|
||||||
int *rmap,
|
int *rmap,
|
||||||
int *gmap,
|
int *gmap,
|
||||||
int *bmap)
|
int *bmap)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -1340,12 +1340,12 @@ PScolormap(int color,
|
|||||||
/* load up the colormap */
|
/* load up the colormap */
|
||||||
PSprintf("currentfile cmap readhexstring\n");
|
PSprintf("currentfile cmap readhexstring\n");
|
||||||
|
|
||||||
for (i=0; i<nc; i++)
|
for (i=0; i<nc; i++)
|
||||||
{
|
{
|
||||||
if (color)
|
if (color)
|
||||||
PSprintf("%02x%02x%02x ", rmap[i]>>8,
|
PSprintf("%02x%02x%02x ", rmap[i]>>8,
|
||||||
gmap[i]>>8, bmap[i]>>8);
|
gmap[i]>>8, bmap[i]>>8);
|
||||||
else
|
else
|
||||||
PSprintf("%02x ", MONO(rmap[i], gmap[i], bmap[i]));
|
PSprintf("%02x ", MONO(rmap[i], gmap[i], bmap[i]));
|
||||||
if ((i%10) == 9)
|
if ((i%10) == 9)
|
||||||
PSprintf("\n");
|
PSprintf("\n");
|
||||||
@ -1357,10 +1357,10 @@ PScolormap(int color,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* PSrle_cmapimage - define rlecmapimage operator
|
* PSrle_cmapimage - define rlecmapimage operator
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSrle_cmapimage(int color)
|
PSrle_cmapimage(int color)
|
||||||
{
|
{
|
||||||
|
|
||||||
static char *txt[] = {
|
static char *txt[] = {
|
||||||
@ -1413,11 +1413,11 @@ PSrle_cmapimage(int color)
|
|||||||
};
|
};
|
||||||
|
|
||||||
PSconst_out(txt);
|
PSconst_out(txt);
|
||||||
if (color)
|
if (color)
|
||||||
{
|
{
|
||||||
PSconst_out(txt_color);
|
PSconst_out(txt_color);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PSconst_out(txt_gray);
|
PSconst_out(txt_gray);
|
||||||
}
|
}
|
||||||
@ -1439,14 +1439,14 @@ PSwrite_bw(unsigned char *pic, int w, int h, int flipbw)
|
|||||||
int i, j;
|
int i, j;
|
||||||
int err=0;
|
int err=0;
|
||||||
unsigned char outbyte, bitnum, bit;
|
unsigned char outbyte, bitnum, bit;
|
||||||
|
|
||||||
outbyte = bitnum = 0;
|
outbyte = bitnum = 0;
|
||||||
for (i=0; i<h && err != EOF; i++) {
|
for (i=0; i<h && err != EOF; i++) {
|
||||||
for (j=0; j<w && err != EOF; j++) {
|
for (j=0; j<w && err != EOF; j++) {
|
||||||
bit = *(pic++);
|
bit = *(pic++);
|
||||||
outbyte = (outbyte<<1) | ((bit)&0x01);
|
outbyte = (outbyte<<1) | ((bit)&0x01);
|
||||||
bitnum++;
|
bitnum++;
|
||||||
|
|
||||||
if (bitnum==8) {
|
if (bitnum==8) {
|
||||||
if (flipbw)
|
if (flipbw)
|
||||||
outbyte = ~outbyte & 0xff;
|
outbyte = ~outbyte & 0xff;
|
||||||
@ -1463,7 +1463,7 @@ PSwrite_bw(unsigned char *pic, int w, int h, int flipbw)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
err=PShex('\0', True); /* Flush the hex buffer if needed */
|
err=PShex('\0', True); /* Flush the hex buffer if needed */
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1475,15 +1475,15 @@ PSwrite_bw(unsigned char *pic, int w, int h, int flipbw)
|
|||||||
* rectangle is shown.
|
* rectangle is shown.
|
||||||
* If anchor is set, a black border is shown around the image.
|
* If anchor is set, a black border is shown around the image.
|
||||||
* Positioning is not exactly that of Xmosaic's screen, but close enough.
|
* Positioning is not exactly that of Xmosaic's screen, but close enough.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
||||||
{
|
{
|
||||||
ImageInfo *img = eptr->pic_data;
|
ImageInfo *img = eptr->pic_data;
|
||||||
unsigned char *imgp = img->image_data;
|
unsigned char *imgp = img->image_data;
|
||||||
int anchor = (eptr->anchorHRef != NULL);
|
int anchor = (eptr->anchorHRef != NULL);
|
||||||
int ncolors = img->num_colors;
|
int ncolors = img->num_colors;
|
||||||
int i, j;
|
int i, j;
|
||||||
int w = img->width;
|
int w = img->width;
|
||||||
@ -1504,7 +1504,7 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
|
|
||||||
|
|
||||||
PSmove_offset(eptr->y_offset);
|
PSmove_offset(eptr->y_offset);
|
||||||
if (anchor)
|
if (anchor)
|
||||||
{
|
{
|
||||||
/* draw an outline by drawing a slightly larger black square
|
/* draw an outline by drawing a slightly larger black square
|
||||||
* below the actual image
|
* below the actual image
|
||||||
@ -1515,8 +1515,8 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
PSprintf("grestore\n");
|
PSprintf("grestore\n");
|
||||||
extra = 4;
|
extra = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (imgp == NULL)
|
if (imgp == NULL)
|
||||||
{
|
{
|
||||||
/* image was not available... do something instead
|
/* image was not available... do something instead
|
||||||
* draw an empty square for example
|
* draw an empty square for example
|
||||||
@ -1534,20 +1534,20 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* this is a hack to see if the image is Black & White,
|
/* this is a hack to see if the image is Black & White,
|
||||||
* Greyscale or 8 bit color
|
* Greyscale or 8 bit color
|
||||||
* assume it's bw if it has only one or two colors, both some grey's
|
* assume it's bw if it has only one or two colors, both some grey's
|
||||||
* assume it's greyscale if all the colors (>2) are grey
|
* assume it's greyscale if all the colors (>2) are grey
|
||||||
* Images with only one color do occur too.
|
* Images with only one color do occur too.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ( ( (ncolors == 2)
|
if ( ( (ncolors == 2)
|
||||||
&& ( (Isgray(img,0) && Isgray(img,1))
|
&& ( (Isgray(img,0) && Isgray(img,1))
|
||||||
|| (Is_bg(img,0) && Is_fg(img,1))
|
|| (Is_bg(img,0) && Is_fg(img,1))
|
||||||
|| (Is_fg(img,0) && Is_bg(img,1)) ))
|
|| (Is_fg(img,0) && Is_bg(img,1)) ))
|
||||||
|| ( (ncolors == 1)
|
|| ( (ncolors == 1)
|
||||||
&& (Isgray(img,0)
|
&& (Isgray(img,0)
|
||||||
|| Is_bg(img,0)
|
|| Is_bg(img,0)
|
||||||
|| Is_fg(img,0))))
|
|| Is_fg(img,0))))
|
||||||
{
|
{
|
||||||
colortype = F_BWDITHER;
|
colortype = F_BWDITHER;
|
||||||
@ -1569,13 +1569,13 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* build a temporary dictionary */
|
/* build a temporary dictionary */
|
||||||
PSprintf("20 dict begin\n\n");
|
PSprintf("20 dict begin\n\n");
|
||||||
|
|
||||||
/* define string to hold a scanline's worth of data */
|
/* define string to hold a scanline's worth of data */
|
||||||
PSprintf("/pix %d string def\n\n", slen);
|
PSprintf("/pix %d string def\n\n", slen);
|
||||||
|
|
||||||
/* position and scaling */
|
/* position and scaling */
|
||||||
PSprintf("gsave currentpoint %d sub translate", h);
|
PSprintf("gsave currentpoint %d sub translate", h);
|
||||||
if (anchor)
|
if (anchor)
|
||||||
@ -1583,45 +1583,45 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
else
|
else
|
||||||
PSprintf(" 0 2 translate");
|
PSprintf(" 0 2 translate");
|
||||||
PSprintf(" %d %d scale\n", w, h);
|
PSprintf(" %d %d scale\n", w, h);
|
||||||
|
|
||||||
if (colortype == F_BWDITHER)
|
if (colortype == F_BWDITHER)
|
||||||
{
|
{
|
||||||
/* 1-bit dither code uses 'image' */
|
/* 1-bit dither code uses 'image' */
|
||||||
int flipbw = 0;
|
int flipbw = 0;
|
||||||
|
|
||||||
/* set if color#0 is 'white' */
|
/* set if color#0 is 'white' */
|
||||||
if ((ncolors == 2 &&
|
if ((ncolors == 2 &&
|
||||||
MONO(img->reds[0], img->greens[0],img->blues[0]) >
|
MONO(img->reds[0], img->greens[0],img->blues[0]) >
|
||||||
MONO(img->reds[1], img->greens[1], img->blues[1])) ||
|
MONO(img->reds[1], img->greens[1], img->blues[1])) ||
|
||||||
(ncolors == 1 &&
|
(ncolors == 1 &&
|
||||||
MONO(img->reds[0], img->greens[0],img->blues[0]) >
|
MONO(img->reds[0], img->greens[0],img->blues[0]) >
|
||||||
MONO(127, 127, 127) ))
|
MONO(127, 127, 127) ))
|
||||||
{
|
{
|
||||||
flipbw=1;
|
flipbw=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dimensions of data */
|
/* dimensions of data */
|
||||||
PSprintf("%d %d %d\n", w, h, bits);
|
PSprintf("%d %d %d\n", w, h, bits);
|
||||||
|
|
||||||
/* mapping matrix */
|
/* mapping matrix */
|
||||||
PSprintf("[%d 0 0 %d 0 %d]\n\n", w, -h, h);
|
PSprintf("[%d 0 0 %d 0 %d]\n\n", w, -h, h);
|
||||||
|
|
||||||
PSprintf("{currentfile pix readhexstring pop}\n");
|
PSprintf("{currentfile pix readhexstring pop}\n");
|
||||||
PSprintf("image\n");
|
PSprintf("image\n");
|
||||||
|
|
||||||
/* write the actual image data */
|
/* write the actual image data */
|
||||||
err = PSwrite_bw(imgp, w, h, flipbw);
|
err = PSwrite_bw(imgp, w, h, flipbw);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* all other formats */
|
/* all other formats */
|
||||||
unsigned char *rleline = (unsigned char *) NULL;
|
unsigned char *rleline = (unsigned char *) NULL;
|
||||||
int rlen;
|
int rlen;
|
||||||
|
|
||||||
/* if we're using color, make sure 'colorimage' is defined */
|
/* if we're using color, make sure 'colorimage' is defined */
|
||||||
if (colorps)
|
if (colorps)
|
||||||
PScolor_image();
|
PScolor_image();
|
||||||
|
|
||||||
PScolormap(colorps, ncolors, img->reds, img->greens, img->blues);
|
PScolormap(colorps, ncolors, img->reds, img->greens, img->blues);
|
||||||
PSrle_cmapimage(colorps);
|
PSrle_cmapimage(colorps);
|
||||||
|
|
||||||
@ -1630,9 +1630,9 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
/* mapping matrix */
|
/* mapping matrix */
|
||||||
PSprintf("[%d 0 0 %d 0 %d]\n", w, -h, h);
|
PSprintf("[%d 0 0 %d 0 %d]\n", w, -h, h);
|
||||||
PSprintf("rlecmapimage\n");
|
PSprintf("rlecmapimage\n");
|
||||||
|
|
||||||
rleline = (unsigned char *) malloc(w * 2);
|
rleline = (unsigned char *) malloc(w * 2);
|
||||||
if (!rleline)
|
if (!rleline)
|
||||||
{
|
{
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (htmlwTrace) {
|
if (htmlwTrace) {
|
||||||
@ -1643,7 +1643,7 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<h && err != EOF; i++)
|
for (i=0; i<h && err != EOF; i++)
|
||||||
{
|
{
|
||||||
rlen = PSrle_encode(imgp, rleline, w);
|
rlen = PSrle_encode(imgp, rleline, w);
|
||||||
imgp += w;
|
imgp += w;
|
||||||
@ -1653,14 +1653,14 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
}
|
}
|
||||||
free(rleline);
|
free(rleline);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* stop using temporary dictionary */
|
/* stop using temporary dictionary */
|
||||||
PSprintf("end\n");
|
PSprintf("end\n");
|
||||||
PSprintf("grestore\n");
|
PSprintf("grestore\n");
|
||||||
|
|
||||||
/* move currentpoint just right of image */
|
/* move currentpoint just right of image */
|
||||||
PSprintf("%d 0 R\n", w + extra);
|
PSprintf("%d 0 R\n", w + extra);
|
||||||
if (HTML_Print_Footers && has_footnote(eptr))
|
if (HTML_Print_Footers && has_footnote(eptr))
|
||||||
{
|
{
|
||||||
PSmove_offset(0);
|
PSmove_offset(0);
|
||||||
PSfootnote(eptr->anchorHRef, 2.0);
|
PSfootnote(eptr->anchorHRef, 2.0);
|
||||||
@ -1699,11 +1699,11 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
* 2: new century schoolbook
|
* 2: new century schoolbook
|
||||||
* 3: lucida
|
* 3: lucida
|
||||||
*/
|
*/
|
||||||
String ParseTextToPSString(HTMLWidget hw,
|
String ParseTextToPSString(HTMLWidget hw,
|
||||||
struct ele_rec *elist,
|
struct ele_rec *elist,
|
||||||
struct ele_rec *startp,
|
struct ele_rec *startp,
|
||||||
struct ele_rec *endp,
|
struct ele_rec *endp,
|
||||||
int start_pos,
|
int start_pos,
|
||||||
int end_pos,
|
int end_pos,
|
||||||
int space_width,
|
int space_width,
|
||||||
int lmargin,
|
int lmargin,
|
||||||
@ -1720,11 +1720,11 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
struct ele_rec *end;
|
struct ele_rec *end;
|
||||||
struct ele_rec *last;
|
struct ele_rec *last;
|
||||||
struct ele_rec *tmpptr;
|
struct ele_rec *tmpptr;
|
||||||
unsigned long fg_pixel, bg_pixel;
|
unsigned long fg_pixel, bg_pixel;
|
||||||
int footnotes_this_page = 0;
|
int footnotes_this_page = 0;
|
||||||
int footnotes_this_line;
|
int footnotes_this_line;
|
||||||
int reserved_space;
|
int reserved_space;
|
||||||
|
|
||||||
if (startp == NULL)
|
if (startp == NULL)
|
||||||
return(NULL);
|
return(NULL);
|
||||||
|
|
||||||
@ -1733,17 +1733,17 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
* Get the foreground and background colors so we can check later
|
* Get the foreground and background colors so we can check later
|
||||||
* for black&white documents
|
* for black&white documents
|
||||||
*/
|
*/
|
||||||
XtVaGetValues (hw->html.view,
|
XtVaGetValues (hw->html.view,
|
||||||
#ifdef MOTIF
|
#ifdef MOTIF
|
||||||
XtNforeground, &fg_pixel,
|
XtNforeground, &fg_pixel,
|
||||||
#endif
|
#endif
|
||||||
XtNbackground, &bg_pixel,
|
XtNbackground, &bg_pixel,
|
||||||
NULL);
|
NULL);
|
||||||
#ifndef MOTIF
|
#ifndef MOTIF
|
||||||
XtVaGetValues ((Widget)hw,
|
XtVaGetValues ((Widget)hw,
|
||||||
XtNforeground, &fg_pixel,
|
XtNforeground, &fg_pixel,
|
||||||
NULL);
|
NULL);
|
||||||
#endif
|
#endif
|
||||||
fg_color.pixel = fg_pixel;
|
fg_color.pixel = fg_pixel;
|
||||||
bg_color.pixel = bg_pixel;
|
bg_color.pixel = bg_pixel;
|
||||||
XQueryColor(XtDisplay(hw->html.view),
|
XQueryColor(XtDisplay(hw->html.view),
|
||||||
@ -1758,12 +1758,12 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
DefaultColormap(XtDisplay(hw->html.view),
|
DefaultColormap(XtDisplay(hw->html.view),
|
||||||
DefaultScreen(XtDisplay(hw->html.view)))),
|
DefaultScreen(XtDisplay(hw->html.view)))),
|
||||||
&bg_color);
|
&bg_color);
|
||||||
|
|
||||||
/* this piece of code is needed if the user selects a portion
|
/* this piece of code is needed if the user selects a portion
|
||||||
* of the document with the mouse.
|
* of the document with the mouse.
|
||||||
* I think it will never be used, but I left it in anyway. F.
|
* I think it will never be used, but I left it in anyway. F.
|
||||||
*/
|
*/
|
||||||
if (SwapElements(startp, endp, start_pos, end_pos))
|
if (SwapElements(startp, endp, start_pos, end_pos))
|
||||||
{
|
{
|
||||||
start = endp;
|
start = endp;
|
||||||
end = startp;
|
end = startp;
|
||||||
@ -1776,7 +1776,7 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
start = startp;
|
start = startp;
|
||||||
end = endp;
|
end = endp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Setup page size according to user preference. */
|
/* Setup page size according to user preference. */
|
||||||
|
|
||||||
if (HTML_Print_Paper_Size_A4)
|
if (HTML_Print_Paper_Size_A4)
|
||||||
@ -1785,10 +1785,10 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
page_dimens = us_letter_page_dimens;
|
page_dimens = us_letter_page_dimens;
|
||||||
|
|
||||||
page_dimens.text_height = ( page_dimens.page_height
|
page_dimens.text_height = ( page_dimens.page_height
|
||||||
- page_dimens.top_margin
|
- page_dimens.top_margin
|
||||||
- page_dimens.bot_margin);
|
- page_dimens.bot_margin);
|
||||||
page_dimens.text_width = ( page_dimens.page_width
|
page_dimens.text_width = ( page_dimens.page_width
|
||||||
- page_dimens.left_margin
|
- page_dimens.left_margin
|
||||||
- page_dimens.right_margin);
|
- page_dimens.right_margin);
|
||||||
|
|
||||||
/* Calculate the number of Postscript points per pixel of current
|
/* Calculate the number of Postscript points per pixel of current
|
||||||
@ -1808,10 +1808,10 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
* wide), but I guess that the hw->html.doc_width includes some
|
* wide), but I guess that the hw->html.doc_width includes some
|
||||||
* left and right margins, so it seems to work in practice.
|
* left and right margins, so it seems to work in practice.
|
||||||
*/
|
*/
|
||||||
if (pagewidth > page_dimens.text_width)
|
if (pagewidth > page_dimens.text_width)
|
||||||
Points_Pixel = Points_Pixel * page_dimens.text_width / pagewidth;
|
Points_Pixel = Points_Pixel * page_dimens.text_width / pagewidth;
|
||||||
Pixels_Page = (int) (page_dimens.text_height / Points_Pixel);
|
Pixels_Page = (int) (page_dimens.text_height / Points_Pixel);
|
||||||
|
|
||||||
PSinit();
|
PSinit();
|
||||||
PSheader(hw->html.title, fontfamily, url, time_str);
|
PSheader(hw->html.title, fontfamily, url, time_str);
|
||||||
PSnewpage();
|
PSnewpage();
|
||||||
@ -1819,14 +1819,14 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
last = start;
|
last = start;
|
||||||
eptr = start;
|
eptr = start;
|
||||||
|
|
||||||
while ((eptr != NULL) && (eptr != end))
|
while ((eptr != NULL) && (eptr != end))
|
||||||
{
|
{
|
||||||
/* Skip the special internal text added for multi-page
|
/* Skip the special internal text added for multi-page
|
||||||
* documents.
|
* documents.
|
||||||
*/
|
*/
|
||||||
if (eptr->internal == True)
|
if (eptr->internal == True)
|
||||||
{
|
{
|
||||||
if (eptr->type == E_LINEFEED)
|
if (eptr->type == E_LINEFEED)
|
||||||
{
|
{
|
||||||
PS_page_offset += eptr->line_height;
|
PS_page_offset += eptr->line_height;
|
||||||
}
|
}
|
||||||
@ -1835,14 +1835,14 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* check if this is a newline */
|
/* check if this is a newline */
|
||||||
if (line != eptr->line_number)
|
if (line != eptr->line_number)
|
||||||
{
|
{
|
||||||
/* calculate max height */
|
/* calculate max height */
|
||||||
height = 0;
|
height = 0;
|
||||||
footnotes_this_line = 0;
|
footnotes_this_line = 0;
|
||||||
line = eptr->line_number;
|
line = eptr->line_number;
|
||||||
tmpptr = eptr;
|
tmpptr = eptr;
|
||||||
while (tmpptr != NULL && tmpptr->line_number == line)
|
while (tmpptr != NULL && tmpptr->line_number == line)
|
||||||
{
|
{
|
||||||
if (tmpptr->line_height > height)
|
if (tmpptr->line_height > height)
|
||||||
height = tmpptr->line_height;
|
height = tmpptr->line_height;
|
||||||
@ -1856,18 +1856,18 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
xpos = 0;
|
xpos = 0;
|
||||||
|
|
||||||
/* check if line fits completly on page */
|
/* check if line fits completly on page */
|
||||||
|
|
||||||
reserved_space = 0;
|
reserved_space = 0;
|
||||||
if (footnotes_this_page || footnotes_this_line)
|
if (footnotes_this_page || footnotes_this_line)
|
||||||
{
|
{
|
||||||
reserved_space = ( ( footnote_space
|
reserved_space = ( ( footnote_space
|
||||||
+ ( footnote_ptsize
|
+ ( footnote_ptsize
|
||||||
* ( footnotes_this_page
|
* ( footnotes_this_page
|
||||||
+ footnotes_this_line)))
|
+ footnotes_this_line)))
|
||||||
/ Points_Pixel);
|
/ Points_Pixel);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ypos + height + reserved_space > PS_start_y + Pixels_Page)
|
if (ypos + height + reserved_space > PS_start_y + Pixels_Page)
|
||||||
{
|
{
|
||||||
PS_start_y = ypos;
|
PS_start_y = ypos;
|
||||||
PSshowpage();
|
PSshowpage();
|
||||||
@ -1877,24 +1877,24 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
footnotes_this_page += footnotes_this_line;
|
footnotes_this_page += footnotes_this_line;
|
||||||
PSmoveto( xpos, ypos);
|
PSmoveto( xpos, ypos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
switch (eptr->type)
|
|
||||||
|
switch (eptr->type)
|
||||||
{
|
{
|
||||||
case E_TEXT:
|
case E_TEXT:
|
||||||
PStext(hw, eptr, fontfamily,
|
PStext(hw, eptr, fontfamily,
|
||||||
(String)((eptr == start) ? (eptr->edata + start_pos) : eptr->edata));
|
(String)((eptr == start) ? (eptr->edata + start_pos) : eptr->edata));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case E_BULLET:
|
case E_BULLET:
|
||||||
PSbullet(hw, eptr, fontfamily);
|
PSbullet(hw, eptr, fontfamily);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case E_IMAGE:
|
case E_IMAGE:
|
||||||
PSimage(hw, eptr, fontfamily);
|
PSimage(hw, eptr, fontfamily);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case E_LINEFEED:
|
case E_LINEFEED:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case E_HRULE:
|
case E_HRULE:
|
||||||
@ -1913,7 +1913,7 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
last = eptr;
|
last = eptr;
|
||||||
eptr = eptr->next;
|
eptr = eptr->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
PSshowpage();
|
PSshowpage();
|
||||||
PStrailer();
|
PStrailer();
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Purpose: to parse Hypertext widget contents into appropriate PostScript
|
* Purpose: to parse Hypertext widget contents into appropriate PostScript
|
||||||
*
|
*
|
||||||
* Author: Ameet A. Raval & Frans van Hoesel & Andrew Ford
|
* Author: Ameet A. Raval & Frans van Hoesel & Andrew Ford
|
||||||
* (aar@gfdl.gov & hoesel@chem.rug.nl).
|
* (aar@gfdl.gov & hoesel@chem.rug.nl).
|
||||||
* send bugreports to hoesel@chem.rug.nl
|
* send bugreports to hoesel@chem.rug.nl
|
||||||
*
|
*
|
||||||
* Institution: for Ameet A. Raval:
|
* Institution: for Ameet A. Raval:
|
||||||
@ -24,7 +24,7 @@
|
|||||||
* Montpelier, Bristol, BS6 5HR, GB
|
* Montpelier, Bristol, BS6 5HR, GB
|
||||||
* E-mail: andrew@icarus.demon.co.uk
|
* E-mail: andrew@icarus.demon.co.uk
|
||||||
*
|
*
|
||||||
* Date: 1 aug 1993
|
* Date: 1 aug 1993
|
||||||
* Modification: 8 nov 1993
|
* Modification: 8 nov 1993
|
||||||
* o added support for bold/italics courier
|
* o added support for bold/italics courier
|
||||||
* o removed unused or no longer needed stuff
|
* o removed unused or no longer needed stuff
|
||||||
@ -49,8 +49,8 @@
|
|||||||
* WE MAKE NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR
|
* WE MAKE NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR
|
||||||
* ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED
|
* ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED
|
||||||
* WARRANTY. WE SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY THE
|
* WARRANTY. WE SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY THE
|
||||||
* USERS OF THIS SOFTWARE.
|
* USERS OF THIS SOFTWARE.
|
||||||
*
|
*
|
||||||
* pieces of code are taken from xvps by kind
|
* pieces of code are taken from xvps by kind
|
||||||
* permission of John Bradley.
|
* permission of John Bradley.
|
||||||
*
|
*
|
||||||
@ -121,7 +121,7 @@ extern int SwapElements();
|
|||||||
PSprintf("%s\n", txt[i]) ; \
|
PSprintf("%s\n", txt[i]) ; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
/* STREQ tests whether two strings are equal. */
|
/* STREQ tests whether two strings are equal. */
|
||||||
#define STREQ(a, b) (strcmp((a), (b)) == 0)
|
#define STREQ(a, b) (strcmp((a), (b)) == 0)
|
||||||
|
|
||||||
@ -165,7 +165,7 @@ PAGE_DIMENS_T;
|
|||||||
PAGE_DIMENS_T page_dimens;
|
PAGE_DIMENS_T page_dimens;
|
||||||
PAGE_DIMENS_T a4_page_dimens = {
|
PAGE_DIMENS_T a4_page_dimens = {
|
||||||
297 * MM,
|
297 * MM,
|
||||||
210 * MM,
|
210 * MM,
|
||||||
20 * MM,
|
20 * MM,
|
||||||
20 * MM,
|
20 * MM,
|
||||||
20 * MM,
|
20 * MM,
|
||||||
@ -201,7 +201,7 @@ extern Colormap installed_cmap;
|
|||||||
* screen
|
* screen
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static float
|
static float
|
||||||
GetDpi(HTMLWidget hw)
|
GetDpi(HTMLWidget hw)
|
||||||
{
|
{
|
||||||
Screen *s = XtScreen(hw);
|
Screen *s = XtScreen(hw);
|
||||||
@ -228,7 +228,7 @@ GetDpi(HTMLWidget hw)
|
|||||||
* in this call, otherwise it returns EOF (just as printf does)
|
* in this call, otherwise it returns EOF (just as printf does)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
PSprintf(format, va_alist)
|
PSprintf(format, va_alist)
|
||||||
char* format;
|
char* format;
|
||||||
va_dcl
|
va_dcl
|
||||||
@ -237,10 +237,10 @@ PSprintf(format, va_alist)
|
|||||||
char *s;
|
char *s;
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
if (PS_size - PS_len < 1024)
|
if (PS_size - PS_len < 1024)
|
||||||
{
|
{
|
||||||
PS_size += 1024;
|
PS_size += 1024;
|
||||||
if ((s = (char *) realloc(PS_string, PS_size)) == NULL)
|
if ((s = (char *) realloc(PS_string, PS_size)) == NULL)
|
||||||
{
|
{
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (htmlwTrace) {
|
if (htmlwTrace) {
|
||||||
@ -256,7 +256,7 @@ PSprintf(format, va_alist)
|
|||||||
/* this is a hack to make it work on systems were vsprintf(s,...)
|
/* this is a hack to make it work on systems were vsprintf(s,...)
|
||||||
* returns s, instead of the len.
|
* returns s, instead of the len.
|
||||||
*/
|
*/
|
||||||
if (len != EOF && len != 0)
|
if (len != EOF && len != 0)
|
||||||
PS_len += strlen(PS_string+PS_len);
|
PS_len += strlen(PS_string+PS_len);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
return(len);
|
return(len);
|
||||||
@ -272,13 +272,13 @@ PSprintf(format, va_alist)
|
|||||||
* PSprintf).
|
* PSprintf).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
PShex(unsigned char val, int flush)
|
PShex(unsigned char val, int flush)
|
||||||
{
|
{
|
||||||
static unsigned char hexline[80];
|
static unsigned char hexline[80];
|
||||||
static char digit[] = "0123456789abcdef";
|
static char digit[] = "0123456789abcdef";
|
||||||
|
|
||||||
if (!flush)
|
if (!flush)
|
||||||
{
|
{
|
||||||
hexline[PS_hexi++] = (char) digit[((unsigned) val >>
|
hexline[PS_hexi++] = (char) digit[((unsigned) val >>
|
||||||
(unsigned) 4) & (unsigned) 0x0f];
|
(unsigned) 4) & (unsigned) 0x0f];
|
||||||
@ -289,7 +289,7 @@ PShex(unsigned char val, int flush)
|
|||||||
/* Changed from ">78" to ">77" on advice of
|
/* Changed from ">78" to ">77" on advice of
|
||||||
debra@info.win.tue.nl (Paul De Bra). */
|
debra@info.win.tue.nl (Paul De Bra). */
|
||||||
|
|
||||||
if ((flush && PS_hexi) || (PS_hexi>77))
|
if ((flush && PS_hexi) || (PS_hexi>77))
|
||||||
{
|
{
|
||||||
hexline[PS_hexi] = '\0';
|
hexline[PS_hexi] = '\0';
|
||||||
PS_hexi=0;
|
PS_hexi=0;
|
||||||
@ -308,13 +308,13 @@ PShex(unsigned char val, int flush)
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSfont(HTMLWidget hw, XFontStruct *font, int fontfamily)
|
PSfont(HTMLWidget hw, XFontStruct *font, int fontfamily)
|
||||||
{
|
{
|
||||||
PS_fontstyle fn;
|
PS_fontstyle fn;
|
||||||
int style, size;
|
int style, size;
|
||||||
int fs;
|
int fs;
|
||||||
|
|
||||||
static PS_fontstyle fontstyle[17] =
|
static PS_fontstyle fontstyle[17] =
|
||||||
{
|
{
|
||||||
RF, IF, BF, FF, BF, BF, BF, BF, BF,
|
RF, IF, BF, FF, BF, BF, BF, BF, BF,
|
||||||
BF, IF, FF, FF, FB, FI, FB, FI
|
BF, IF, FF, FF, FB, FI, FB, FI
|
||||||
@ -325,7 +325,7 @@ PSfont(HTMLWidget hw, XFontStruct *font, int fontfamily)
|
|||||||
/* fontsizes as set in gui.c and in HTML.c (listing font is only
|
/* fontsizes as set in gui.c and in HTML.c (listing font is only
|
||||||
* defined in HTML.c)
|
* defined in HTML.c)
|
||||||
*/
|
*/
|
||||||
static int fontsizes[4][3][17] =
|
static int fontsizes[4][3][17] =
|
||||||
{
|
{
|
||||||
/* times font sizes */
|
/* times font sizes */
|
||||||
{
|
{
|
||||||
@ -353,7 +353,7 @@ PSfont(HTMLWidget hw, XFontStruct *font, int fontfamily)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* next is for each fontfamily the ascent value as given by the
|
/* next is for each fontfamily the ascent value as given by the
|
||||||
* medium sized bold x-font (the regular font has the same
|
* medium sized bold x-font (the regular font has the same
|
||||||
* ascent value for both the medium and the large size Century
|
* ascent value for both the medium and the large size Century
|
||||||
* font).
|
* font).
|
||||||
@ -448,12 +448,12 @@ PSfont(HTMLWidget hw, XFontStruct *font, int fontfamily)
|
|||||||
|
|
||||||
/* check size, by looking at the size of the regular font */
|
/* check size, by looking at the size of the regular font */
|
||||||
size = 1;
|
size = 1;
|
||||||
if (hw->html.bold_font->ascent > medium_fontascent[fontfamily])
|
if (hw->html.bold_font->ascent > medium_fontascent[fontfamily])
|
||||||
{
|
{
|
||||||
/* large font */
|
/* large font */
|
||||||
size = 2;
|
size = 2;
|
||||||
}
|
}
|
||||||
else if (hw->html.bold_font->ascent < medium_fontascent[fontfamily])
|
else if (hw->html.bold_font->ascent < medium_fontascent[fontfamily])
|
||||||
{
|
{
|
||||||
/* small font */
|
/* small font */
|
||||||
size = 0;
|
size = 0;
|
||||||
@ -462,7 +462,7 @@ PSfont(HTMLWidget hw, XFontStruct *font, int fontfamily)
|
|||||||
fs = fontsizes[fontfamily][size][style];
|
fs = fontsizes[fontfamily][size][style];
|
||||||
PS_fontascent = fontascent[fontfamily][size][style];
|
PS_fontascent = fontascent[fontfamily][size][style];
|
||||||
|
|
||||||
if (fn != PS_oldfn || fs != PS_oldfs)
|
if (fn != PS_oldfn || fs != PS_oldfs)
|
||||||
{
|
{
|
||||||
PSprintf( "%2s %d SF\n", fnchar[fn], fs);
|
PSprintf( "%2s %d SF\n", fnchar[fn], fs);
|
||||||
PS_oldfn=fn, PS_oldfs=fs;
|
PS_oldfn=fn, PS_oldfs=fs;
|
||||||
@ -477,26 +477,26 @@ PSfont(HTMLWidget hw, XFontStruct *font, int fontfamily)
|
|||||||
* Any accumulated footnotes are output and the outstanding footnote count
|
* Any accumulated footnotes are output and the outstanding footnote count
|
||||||
* reset to zero. Footnotes are preceded by a footnote rule and each footnote
|
* reset to zero. Footnotes are preceded by a footnote rule and each footnote
|
||||||
* is consists of a raised mark and the footnote text (i.e. the url). The mark
|
* is consists of a raised mark and the footnote text (i.e. the url). The mark
|
||||||
* is in a smaller font than the text. The ideas are filched from LaTeX.
|
* is in a smaller font than the text. The ideas are filched from LaTeX.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSshowpage(void)
|
PSshowpage(void)
|
||||||
{
|
{
|
||||||
PSprintf("restore\n");
|
PSprintf("restore\n");
|
||||||
if (n_saved_ftns > 0)
|
if (n_saved_ftns > 0)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
PSprintf("gsave 0.2 setlinewidth newpath %.2f %.2f M %.2f 0 RL stroke\n",
|
PSprintf("gsave 0.2 setlinewidth newpath %.2f %.2f M %.2f 0 RL stroke\n",
|
||||||
page_dimens.left_margin,
|
page_dimens.left_margin,
|
||||||
(page_dimens.bot_margin + (footnote_ptsize * n_saved_ftns) + 4),
|
(page_dimens.bot_margin + (footnote_ptsize * n_saved_ftns) + 4),
|
||||||
(page_dimens.text_width * 0.4));
|
(page_dimens.text_width * 0.4));
|
||||||
for (i = 0; n_saved_ftns; n_saved_ftns--, i++)
|
for (i = 0; n_saved_ftns; n_saved_ftns--, i++)
|
||||||
{
|
{
|
||||||
PSprintf("newpath %.2f %.2f M RF %.2f SF (%d) S 3 -2 R RF %d SF (%s) S\n",
|
PSprintf("newpath %.2f %.2f M RF %.2f SF (%d) S 3 -2 R RF %d SF (%s) S\n",
|
||||||
page_dimens.left_margin,
|
page_dimens.left_margin,
|
||||||
page_dimens.bot_margin + 5 + (n_saved_ftns - 1) * footnote_ptsize,
|
page_dimens.bot_margin + 5 + (n_saved_ftns - 1) * footnote_ptsize,
|
||||||
(0.7 * footnote_ptsize), cur_ftn_no - n_saved_ftns,
|
(0.7 * footnote_ptsize), cur_ftn_no - n_saved_ftns,
|
||||||
footnote_ptsize, footnotes[i]);
|
footnote_ptsize, footnotes[i]);
|
||||||
}
|
}
|
||||||
PSprintf("grestore\n");
|
PSprintf("grestore\n");
|
||||||
@ -514,10 +514,10 @@ PSshowpage(void)
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSnewpage(void)
|
PSnewpage(void)
|
||||||
{
|
{
|
||||||
PS_curr_page++;
|
PS_curr_page++;
|
||||||
|
|
||||||
/* the PostScript reference Manual states that the Page: Tag
|
/* the PostScript reference Manual states that the Page: Tag
|
||||||
should have a label and a ordinal; otherwise programs like
|
should have a label and a ordinal; otherwise programs like
|
||||||
psutils fail -gustaf */
|
psutils fail -gustaf */
|
||||||
@ -536,7 +536,7 @@ PSnewpage(void)
|
|||||||
* PSinit_latin1 - handle ISO encoding
|
* PSinit_latin1 - handle ISO encoding
|
||||||
*
|
*
|
||||||
* print out initializing PostScript text for ISO Latin1 font encoding
|
* print out initializing PostScript text for ISO Latin1 font encoding
|
||||||
* This code is copied from the Idraw program (from Stanford's InterViews
|
* This code is copied from the Idraw program (from Stanford's InterViews
|
||||||
* package), courtesy of Steinar Kjaernsr|d, steinar@ifi.uio.no
|
* package), courtesy of Steinar Kjaernsr|d, steinar@ifi.uio.no
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -597,7 +597,7 @@ PSinit_latin1(void)
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSinit(void)
|
PSinit(void)
|
||||||
{
|
{
|
||||||
PS_size = PS_len = PS_offset = PS_hexi = PS_page_offset = 0;
|
PS_size = PS_len = PS_offset = PS_hexi = PS_page_offset = 0;
|
||||||
PS_start_y = 0;
|
PS_start_y = 0;
|
||||||
@ -639,8 +639,8 @@ PSinit(void)
|
|||||||
* title title of document
|
* title title of document
|
||||||
* date date modified/printed
|
* date date modified/printed
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSheader(char *title, int font, char *url, char *time_str)
|
PSheader(char *title, int font, char *url, char *time_str)
|
||||||
{
|
{
|
||||||
static char *notitle="Untitled";
|
static char *notitle="Untitled";
|
||||||
int set_to_null=0;
|
int set_to_null=0;
|
||||||
@ -682,7 +682,7 @@ PSheader(char *title, int font, char *url, char *time_str)
|
|||||||
time_t clock = time(NULL);
|
time_t clock = time(NULL);
|
||||||
|
|
||||||
#if !defined(VMS) || defined (__DECC)
|
#if !defined(VMS) || defined (__DECC)
|
||||||
strftime(time_buf, sizeof(time_buf),
|
strftime(time_buf, sizeof(time_buf),
|
||||||
"Printed %a %b %e %T %Y", localtime(&clock));
|
"Printed %a %b %e %T %Y", localtime(&clock));
|
||||||
#else
|
#else
|
||||||
sprintf(time_buf,"Printed %s",asctime(localtime(&clock)));
|
sprintf(time_buf,"Printed %s",asctime(localtime(&clock)));
|
||||||
@ -734,16 +734,16 @@ PSheader(char *title, int font, char *url, char *time_str)
|
|||||||
PSprintf("/title (%s) D\n", title);
|
PSprintf("/title (%s) D\n", title);
|
||||||
PSprintf("/date (%s) D\n", time_str);
|
PSprintf("/date (%s) D\n", time_str);
|
||||||
PSconst_out(txt);
|
PSconst_out(txt);
|
||||||
|
|
||||||
/* Output the newpage definition. */
|
/* Output the newpage definition. */
|
||||||
|
|
||||||
PSprintf("/NP {");
|
PSprintf("/NP {");
|
||||||
if (HTML_Print_Headers)
|
if (HTML_Print_Headers)
|
||||||
{
|
{
|
||||||
PSprintf("gsave 0.4 setlinewidth\n");
|
PSprintf("gsave 0.4 setlinewidth\n");
|
||||||
PSprintf(" newpath %.2f %.2f M %.2f 0 RL stroke",
|
PSprintf(" newpath %.2f %.2f M %.2f 0 RL stroke",
|
||||||
page_dimens.left_margin,
|
page_dimens.left_margin,
|
||||||
(page_dimens.bot_margin + page_dimens.text_height),
|
(page_dimens.bot_margin + page_dimens.text_height),
|
||||||
page_dimens.text_width);
|
page_dimens.text_width);
|
||||||
PSprintf(" newpath %.2f %.2f M %.2f 0 RL stroke\n",
|
PSprintf(" newpath %.2f %.2f M %.2f 0 RL stroke\n",
|
||||||
page_dimens.left_margin, page_dimens.bot_margin,
|
page_dimens.left_margin, page_dimens.bot_margin,
|
||||||
@ -753,7 +753,7 @@ PSheader(char *title, int font, char *url, char *time_str)
|
|||||||
(page_dimens.bot_margin + page_dimens.text_height + 6), title);
|
(page_dimens.bot_margin + page_dimens.text_height + 6), title);
|
||||||
PSprintf(" nstr cvs dup stringwidth pop pgno stringwidth pop add\n");
|
PSprintf(" nstr cvs dup stringwidth pop pgno stringwidth pop add\n");
|
||||||
PSprintf(" %.2f E sub %.2f M pgno S S\n",
|
PSprintf(" %.2f E sub %.2f M pgno S S\n",
|
||||||
(page_dimens.left_margin + page_dimens.text_width),
|
(page_dimens.left_margin + page_dimens.text_width),
|
||||||
(page_dimens.bot_margin + page_dimens.text_height + 6));
|
(page_dimens.bot_margin + page_dimens.text_height + 6));
|
||||||
PSprintf(" BF 10 SF %.2f %.2f M (%s) S\n",
|
PSprintf(" BF 10 SF %.2f %.2f M (%s) S\n",
|
||||||
page_dimens.left_margin, page_dimens.bot_margin - 12, url);
|
page_dimens.left_margin, page_dimens.bot_margin - 12, url);
|
||||||
@ -762,11 +762,11 @@ PSheader(char *title, int font, char *url, char *time_str)
|
|||||||
page_dimens.bot_margin - 12);
|
page_dimens.bot_margin - 12);
|
||||||
}
|
}
|
||||||
PSprintf(" %.2f %.2f translate %.5f %.5f scale } D\n",
|
PSprintf(" %.2f %.2f translate %.5f %.5f scale } D\n",
|
||||||
page_dimens.left_margin,
|
page_dimens.left_margin,
|
||||||
page_dimens.bot_margin + page_dimens.text_height,
|
page_dimens.bot_margin + page_dimens.text_height,
|
||||||
Points_Pixel, Points_Pixel);
|
Points_Pixel, Points_Pixel);
|
||||||
PSinit_latin1();
|
PSinit_latin1();
|
||||||
|
|
||||||
PSprintf("%%%%EndProlog\n");
|
PSprintf("%%%%EndProlog\n");
|
||||||
|
|
||||||
if (set_to_null) {
|
if (set_to_null) {
|
||||||
@ -804,9 +804,9 @@ PStrailer(void)
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSmoveto(int x, int y)
|
PSmoveto(int x, int y)
|
||||||
{
|
{
|
||||||
if (y > PS_start_y + Pixels_Page)
|
if (y > PS_start_y + Pixels_Page)
|
||||||
{
|
{
|
||||||
PS_start_y = y;
|
PS_start_y = y;
|
||||||
PSshowpage();
|
PSshowpage();
|
||||||
@ -826,7 +826,7 @@ PSmoveto(int x, int y)
|
|||||||
static void
|
static void
|
||||||
PSmove_offset(int offset)
|
PSmove_offset(int offset)
|
||||||
{
|
{
|
||||||
if (offset != PS_offset)
|
if (offset != PS_offset)
|
||||||
{
|
{
|
||||||
PSprintf("0 %d R\n", PS_offset - offset );
|
PSprintf("0 %d R\n", PS_offset - offset );
|
||||||
PS_offset = offset;
|
PS_offset = offset;
|
||||||
@ -838,12 +838,12 @@ PSmove_offset(int offset)
|
|||||||
* Return an indication of whether or not the current element has a footnote.
|
* Return an indication of whether or not the current element has a footnote.
|
||||||
*
|
*
|
||||||
* an element has a footnote if it is text or an image and its anchorHRef is not null.
|
* an element has a footnote if it is text or an image and its anchorHRef is not null.
|
||||||
* If the element is a textual element with an anchorHRef, that has been split across
|
* If the element is a textual element with an anchorHRef, that has been split across
|
||||||
* lines then it should be followed by a linefeed element and a text element with the
|
* lines then it should be followed by a linefeed element and a text element with the
|
||||||
* same anchorHRef. In this case say that the element doesn't have a footnote so as
|
* same anchorHRef. In this case say that the element doesn't have a footnote so as
|
||||||
* to avoid duplicate footnotes.
|
* to avoid duplicate footnotes.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
has_footnote(struct ele_rec *el)
|
has_footnote(struct ele_rec *el)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
@ -906,10 +906,10 @@ has_footnote(struct ele_rec *el)
|
|||||||
static void
|
static void
|
||||||
PSfootnote(char *href, double height)
|
PSfootnote(char *href, double height)
|
||||||
{
|
{
|
||||||
PSprintf("gsave 0 %.2f R RF %d SF (%d) S grestore\n",
|
PSprintf("gsave 0 %.2f R RF %d SF (%d) S grestore\n",
|
||||||
height, footnote_ptsize, cur_ftn_no++);
|
height, footnote_ptsize, cur_ftn_no++);
|
||||||
|
|
||||||
if (n_saved_ftns == ftn_array_size)
|
if (n_saved_ftns == ftn_array_size)
|
||||||
{
|
{
|
||||||
ftn_array_size += 16;
|
ftn_array_size += 16;
|
||||||
if (!footnotes) {
|
if (!footnotes) {
|
||||||
@ -919,7 +919,7 @@ PSfootnote(char *href, double height)
|
|||||||
footnotes = (char **)realloc((void *)footnotes,
|
footnotes = (char **)realloc((void *)footnotes,
|
||||||
(ftn_array_size * sizeof(char *)));
|
(ftn_array_size * sizeof(char *)));
|
||||||
}
|
}
|
||||||
if (footnotes == NULL)
|
if (footnotes == NULL)
|
||||||
{
|
{
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (htmlwTrace) {
|
if (htmlwTrace) {
|
||||||
@ -950,9 +950,9 @@ PStext(HTMLWidget hw, struct ele_rec *eptr, int fontfamily, String s)
|
|||||||
unsigned char ch;
|
unsigned char ch;
|
||||||
int underline = eptr->underline_number;
|
int underline = eptr->underline_number;
|
||||||
int ascent;
|
int ascent;
|
||||||
|
|
||||||
PSfont(hw, eptr->font, fontfamily); /* set font */
|
PSfont(hw, eptr->font, fontfamily); /* set font */
|
||||||
if (PS_fontascent == 0)
|
if (PS_fontascent == 0)
|
||||||
ascent = eptr->font->ascent;
|
ascent = eptr->font->ascent;
|
||||||
else
|
else
|
||||||
ascent = PS_fontascent;
|
ascent = PS_fontascent;
|
||||||
@ -963,7 +963,7 @@ PStext(HTMLWidget hw, struct ele_rec *eptr, int fontfamily, String s)
|
|||||||
every character stored as an octal escape (worst case scenario). */
|
every character stored as an octal escape (worst case scenario). */
|
||||||
|
|
||||||
s2 = (String) malloc(strlen(s) * 4 + 1);
|
s2 = (String) malloc(strlen(s) * 4 + 1);
|
||||||
if (s2 == NULL)
|
if (s2 == NULL)
|
||||||
{
|
{
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (htmlwTrace) {
|
if (htmlwTrace) {
|
||||||
@ -984,14 +984,14 @@ PStext(HTMLWidget hw, struct ele_rec *eptr, int fontfamily, String s)
|
|||||||
*stmp++ = B_SLASH;
|
*stmp++ = B_SLASH;
|
||||||
*stmp++ = ch;
|
*stmp++ = ch;
|
||||||
}
|
}
|
||||||
else if (ch > (unsigned char) MAX_ASCII)
|
else if (ch > (unsigned char) MAX_ASCII)
|
||||||
{
|
{
|
||||||
/* convert to octal */
|
/* convert to octal */
|
||||||
*stmp++ = B_SLASH;
|
*stmp++ = B_SLASH;
|
||||||
*stmp++ = ((ch >> 6) & 007) + '0';
|
*stmp++ = ((ch >> 6) & 007) + '0';
|
||||||
*stmp++ = ((ch >> 3) & 007) + '0';
|
*stmp++ = ((ch >> 3) & 007) + '0';
|
||||||
*stmp++ = (ch & 007) + '0';
|
*stmp++ = (ch & 007) + '0';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*stmp++ = ch;
|
*stmp++ = ch;
|
||||||
@ -999,7 +999,7 @@ PStext(HTMLWidget hw, struct ele_rec *eptr, int fontfamily, String s)
|
|||||||
}
|
}
|
||||||
*(stmp) = '\0';
|
*(stmp) = '\0';
|
||||||
PSprintf("(%s)%c\n", s2, (underline)?'U':'S');
|
PSprintf("(%s)%c\n", s2, (underline)?'U':'S');
|
||||||
if (HTML_Print_Footers && has_footnote(eptr))
|
if (HTML_Print_Footers && has_footnote(eptr))
|
||||||
{
|
{
|
||||||
PSfootnote(eptr->anchorHRef, 0.7 * ascent);
|
PSfootnote(eptr->anchorHRef, 0.7 * ascent);
|
||||||
}
|
}
|
||||||
@ -1014,10 +1014,10 @@ PStext(HTMLWidget hw, struct ele_rec *eptr, int fontfamily, String s)
|
|||||||
* of two. The size of the higher level bullets is just somewhat smaller
|
* of two. The size of the higher level bullets is just somewhat smaller
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSbullet(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
PSbullet(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
||||||
{
|
{
|
||||||
int width = ( eptr->font->max_bounds.lbearing
|
int width = ( eptr->font->max_bounds.lbearing
|
||||||
+ eptr->font->max_bounds.rbearing);
|
+ eptr->font->max_bounds.rbearing);
|
||||||
int offset = eptr->y_offset + eptr->font->ascent;
|
int offset = eptr->y_offset + eptr->font->ascent;
|
||||||
int level = eptr->indent_level;
|
int level = eptr->indent_level;
|
||||||
@ -1125,7 +1125,7 @@ PSwidget(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
* does the run-length encoding. This is done to reduce the file size and
|
* does the run-length encoding. This is done to reduce the file size and
|
||||||
* therefore the time to send the file to the printer. You get longer
|
* therefore the time to send the file to the printer. You get longer
|
||||||
* processing time instead.
|
* processing time instead.
|
||||||
*
|
*
|
||||||
* rle is encoded as such:
|
* rle is encoded as such:
|
||||||
* <count> <value> # 'run' of count+1 equal pixels
|
* <count> <value> # 'run' of count+1 equal pixels
|
||||||
* <count | 0x80> <count+1 data bytes> # count+1 non-equal pixels
|
* <count | 0x80> <count+1 data bytes> # count+1 non-equal pixels
|
||||||
@ -1133,18 +1133,18 @@ PSwidget(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
*
|
*
|
||||||
* returns length of the rleline vector
|
* returns length of the rleline vector
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
PSrle_encode(unsigned char *scanline,
|
PSrle_encode(unsigned char *scanline,
|
||||||
unsigned char *rleline,
|
unsigned char *rleline,
|
||||||
int wide)
|
int wide)
|
||||||
{
|
{
|
||||||
int i, j, blocklen, isrun, rlen;
|
int i, j, blocklen, isrun, rlen;
|
||||||
unsigned char block[256], pix;
|
unsigned char block[256], pix;
|
||||||
|
|
||||||
blocklen = isrun = rlen = 0;
|
blocklen = isrun = rlen = 0;
|
||||||
|
|
||||||
for (i = 0; i < wide; i++)
|
for (i = 0; i < wide; i++)
|
||||||
{
|
{
|
||||||
/* there are 5 possible states:
|
/* there are 5 possible states:
|
||||||
* 0: block empty.
|
* 0: block empty.
|
||||||
@ -1156,23 +1156,23 @@ PSrle_encode(unsigned char *scanline,
|
|||||||
|
|
||||||
pix = scanline[i];
|
pix = scanline[i];
|
||||||
|
|
||||||
if (!blocklen)
|
if (!blocklen)
|
||||||
{
|
{
|
||||||
/* case 0: empty */
|
/* case 0: empty */
|
||||||
block[blocklen++] = pix;
|
block[blocklen++] = pix;
|
||||||
isrun = 1;
|
isrun = 1;
|
||||||
}
|
}
|
||||||
else if (isrun)
|
else if (isrun)
|
||||||
{
|
{
|
||||||
if (pix == block[blocklen-1])
|
if (pix == block[blocklen-1])
|
||||||
{
|
{
|
||||||
/* case 1: isrun, prev==cur */
|
/* case 1: isrun, prev==cur */
|
||||||
block[blocklen++] = pix;
|
block[blocklen++] = pix;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* case 2: isrun, prev!=cur */
|
/* case 2: isrun, prev!=cur */
|
||||||
if (blocklen>1)
|
if (blocklen>1)
|
||||||
{
|
{
|
||||||
/* we have a run block to flush */
|
/* we have a run block to flush */
|
||||||
rleline[rlen++] = blocklen-1;
|
rleline[rlen++] = blocklen-1;
|
||||||
@ -1190,12 +1190,12 @@ PSrle_encode(unsigned char *scanline,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* not a run */
|
/* not a run */
|
||||||
if (pix == block[blocklen-1])
|
if (pix == block[blocklen-1])
|
||||||
{
|
{
|
||||||
/* case 3: non-run, prev==cur */
|
/* case 3: non-run, prev==cur */
|
||||||
if (blocklen>1)
|
if (blocklen>1)
|
||||||
{
|
{
|
||||||
/* have a non-run block to flush */
|
/* have a non-run block to flush */
|
||||||
rleline[rlen++] = (blocklen-1) | 0x80;
|
rleline[rlen++] = (blocklen-1) | 0x80;
|
||||||
@ -1204,7 +1204,7 @@ PSrle_encode(unsigned char *scanline,
|
|||||||
/* start new run block with pix */
|
/* start new run block with pix */
|
||||||
block[0] = pix;
|
block[0] = pix;
|
||||||
blocklen = isrun = 1;
|
blocklen = isrun = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* blocklen<=1 turn into a run */
|
/* blocklen<=1 turn into a run */
|
||||||
@ -1212,17 +1212,17 @@ PSrle_encode(unsigned char *scanline,
|
|||||||
block[blocklen++] = pix;
|
block[blocklen++] = pix;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* case 4: non-run, prev!=cur */
|
/* case 4: non-run, prev!=cur */
|
||||||
block[blocklen++] = pix;
|
block[blocklen++] = pix;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* max block length. flush */
|
/* max block length. flush */
|
||||||
if (blocklen == 128)
|
if (blocklen == 128)
|
||||||
{
|
{
|
||||||
if (isrun)
|
if (isrun)
|
||||||
{
|
{
|
||||||
rleline[rlen++] = blocklen-1;
|
rleline[rlen++] = blocklen-1;
|
||||||
rleline[rlen++] = block[0];
|
rleline[rlen++] = block[0];
|
||||||
@ -1258,7 +1258,7 @@ PSrle_encode(unsigned char *scanline,
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PScolor_image - created postscript colorimage operator
|
* PScolor_image - created postscript colorimage operator
|
||||||
*
|
*
|
||||||
* spits out code that checks if the PostScript device in question
|
* spits out code that checks if the PostScript device in question
|
||||||
* knows about the 'colorimage' operator. If it doesn't, it defines
|
* knows about the 'colorimage' operator. If it doesn't, it defines
|
||||||
@ -1267,8 +1267,8 @@ PSrle_encode(unsigned char *scanline,
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
PScolor_image(void)
|
PScolor_image(void)
|
||||||
{
|
{
|
||||||
static char *txt[] = {
|
static char *txt[] = {
|
||||||
|
|
||||||
@ -1318,21 +1318,21 @@ PScolor_image(void)
|
|||||||
|
|
||||||
PSconst_out(txt);
|
PSconst_out(txt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PScolormap - write colormap
|
* PScolormap - write colormap
|
||||||
*
|
*
|
||||||
* spits out code for the colormap of the following image
|
* spits out code for the colormap of the following image
|
||||||
* if !color, it spits out a mono-ized graymap
|
* if !color, it spits out a mono-ized graymap
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PScolormap(int color,
|
PScolormap(int color,
|
||||||
int nc,
|
int nc,
|
||||||
int *rmap,
|
int *rmap,
|
||||||
int *gmap,
|
int *gmap,
|
||||||
int *bmap)
|
int *bmap)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -1342,12 +1342,12 @@ PScolormap(int color,
|
|||||||
/* load up the colormap */
|
/* load up the colormap */
|
||||||
PSprintf("currentfile cmap readhexstring\n");
|
PSprintf("currentfile cmap readhexstring\n");
|
||||||
|
|
||||||
for (i=0; i<nc; i++)
|
for (i=0; i<nc; i++)
|
||||||
{
|
{
|
||||||
if (color)
|
if (color)
|
||||||
PSprintf("%02x%02x%02x ", rmap[i]>>8,
|
PSprintf("%02x%02x%02x ", rmap[i]>>8,
|
||||||
gmap[i]>>8, bmap[i]>>8);
|
gmap[i]>>8, bmap[i]>>8);
|
||||||
else
|
else
|
||||||
PSprintf("%02x ", MONO(rmap[i], gmap[i], bmap[i]));
|
PSprintf("%02x ", MONO(rmap[i], gmap[i], bmap[i]));
|
||||||
if ((i%10) == 9)
|
if ((i%10) == 9)
|
||||||
PSprintf("\n");
|
PSprintf("\n");
|
||||||
@ -1359,10 +1359,10 @@ PScolormap(int color,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* PSrle_cmapimage - define rlecmapimage operator
|
* PSrle_cmapimage - define rlecmapimage operator
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
PSrle_cmapimage(int color)
|
PSrle_cmapimage(int color)
|
||||||
{
|
{
|
||||||
|
|
||||||
static char *txt[] = {
|
static char *txt[] = {
|
||||||
@ -1415,11 +1415,11 @@ PSrle_cmapimage(int color)
|
|||||||
};
|
};
|
||||||
|
|
||||||
PSconst_out(txt);
|
PSconst_out(txt);
|
||||||
if (color)
|
if (color)
|
||||||
{
|
{
|
||||||
PSconst_out(txt_color);
|
PSconst_out(txt_color);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PSconst_out(txt_gray);
|
PSconst_out(txt_gray);
|
||||||
}
|
}
|
||||||
@ -1441,14 +1441,14 @@ PSwrite_bw(unsigned char *pic, int w, int h, int flipbw)
|
|||||||
int i, j;
|
int i, j;
|
||||||
int err=0;
|
int err=0;
|
||||||
unsigned char outbyte, bitnum, bit;
|
unsigned char outbyte, bitnum, bit;
|
||||||
|
|
||||||
outbyte = bitnum = 0;
|
outbyte = bitnum = 0;
|
||||||
for (i=0; i<h && err != EOF; i++) {
|
for (i=0; i<h && err != EOF; i++) {
|
||||||
for (j=0; j<w && err != EOF; j++) {
|
for (j=0; j<w && err != EOF; j++) {
|
||||||
bit = *(pic++);
|
bit = *(pic++);
|
||||||
outbyte = (outbyte<<1) | ((bit)&0x01);
|
outbyte = (outbyte<<1) | ((bit)&0x01);
|
||||||
bitnum++;
|
bitnum++;
|
||||||
|
|
||||||
if (bitnum==8) {
|
if (bitnum==8) {
|
||||||
if (flipbw)
|
if (flipbw)
|
||||||
outbyte = ~outbyte & 0xff;
|
outbyte = ~outbyte & 0xff;
|
||||||
@ -1465,7 +1465,7 @@ PSwrite_bw(unsigned char *pic, int w, int h, int flipbw)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
err=PShex('\0', True); /* Flush the hex buffer if needed */
|
err=PShex('\0', True); /* Flush the hex buffer if needed */
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1477,15 +1477,15 @@ PSwrite_bw(unsigned char *pic, int w, int h, int flipbw)
|
|||||||
* rectangle is shown.
|
* rectangle is shown.
|
||||||
* If anchor is set, a black border is shown around the image.
|
* If anchor is set, a black border is shown around the image.
|
||||||
* Positioning is not exactly that of Xmosaic's screen, but close enough.
|
* Positioning is not exactly that of Xmosaic's screen, but close enough.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
||||||
{
|
{
|
||||||
ImageInfo *img = eptr->pic_data;
|
ImageInfo *img = eptr->pic_data;
|
||||||
unsigned char *imgp = img->image_data;
|
unsigned char *imgp = img->image_data;
|
||||||
int anchor = (eptr->anchorHRef != NULL);
|
int anchor = (eptr->anchorHRef != NULL);
|
||||||
int ncolors = img->num_colors;
|
int ncolors = img->num_colors;
|
||||||
int i, j;
|
int i, j;
|
||||||
int w = img->width;
|
int w = img->width;
|
||||||
@ -1506,7 +1506,7 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
|
|
||||||
|
|
||||||
PSmove_offset(eptr->y_offset);
|
PSmove_offset(eptr->y_offset);
|
||||||
if (anchor)
|
if (anchor)
|
||||||
{
|
{
|
||||||
/* draw an outline by drawing a slightly larger black square
|
/* draw an outline by drawing a slightly larger black square
|
||||||
* below the actual image
|
* below the actual image
|
||||||
@ -1517,8 +1517,8 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
PSprintf("grestore\n");
|
PSprintf("grestore\n");
|
||||||
extra = 4;
|
extra = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (imgp == NULL)
|
if (imgp == NULL)
|
||||||
{
|
{
|
||||||
/* image was not available... do something instead
|
/* image was not available... do something instead
|
||||||
* draw an empty square for example
|
* draw an empty square for example
|
||||||
@ -1536,20 +1536,20 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* this is a hack to see if the image is Black & White,
|
/* this is a hack to see if the image is Black & White,
|
||||||
* Greyscale or 8 bit color
|
* Greyscale or 8 bit color
|
||||||
* assume it's bw if it has only one or two colors, both some grey's
|
* assume it's bw if it has only one or two colors, both some grey's
|
||||||
* assume it's greyscale if all the colors (>2) are grey
|
* assume it's greyscale if all the colors (>2) are grey
|
||||||
* Images with only one color do occur too.
|
* Images with only one color do occur too.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ( ( (ncolors == 2)
|
if ( ( (ncolors == 2)
|
||||||
&& ( (Isgray(img,0) && Isgray(img,1))
|
&& ( (Isgray(img,0) && Isgray(img,1))
|
||||||
|| (Is_bg(img,0) && Is_fg(img,1))
|
|| (Is_bg(img,0) && Is_fg(img,1))
|
||||||
|| (Is_fg(img,0) && Is_bg(img,1)) ))
|
|| (Is_fg(img,0) && Is_bg(img,1)) ))
|
||||||
|| ( (ncolors == 1)
|
|| ( (ncolors == 1)
|
||||||
&& (Isgray(img,0)
|
&& (Isgray(img,0)
|
||||||
|| Is_bg(img,0)
|
|| Is_bg(img,0)
|
||||||
|| Is_fg(img,0))))
|
|| Is_fg(img,0))))
|
||||||
{
|
{
|
||||||
colortype = F_BWDITHER;
|
colortype = F_BWDITHER;
|
||||||
@ -1571,13 +1571,13 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* build a temporary dictionary */
|
/* build a temporary dictionary */
|
||||||
PSprintf("20 dict begin\n\n");
|
PSprintf("20 dict begin\n\n");
|
||||||
|
|
||||||
/* define string to hold a scanline's worth of data */
|
/* define string to hold a scanline's worth of data */
|
||||||
PSprintf("/pix %d string def\n\n", slen);
|
PSprintf("/pix %d string def\n\n", slen);
|
||||||
|
|
||||||
/* position and scaling */
|
/* position and scaling */
|
||||||
PSprintf("gsave currentpoint %d sub translate", h);
|
PSprintf("gsave currentpoint %d sub translate", h);
|
||||||
if (anchor)
|
if (anchor)
|
||||||
@ -1585,45 +1585,45 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
else
|
else
|
||||||
PSprintf(" 0 2 translate");
|
PSprintf(" 0 2 translate");
|
||||||
PSprintf(" %d %d scale\n", w, h);
|
PSprintf(" %d %d scale\n", w, h);
|
||||||
|
|
||||||
if (colortype == F_BWDITHER)
|
if (colortype == F_BWDITHER)
|
||||||
{
|
{
|
||||||
/* 1-bit dither code uses 'image' */
|
/* 1-bit dither code uses 'image' */
|
||||||
int flipbw = 0;
|
int flipbw = 0;
|
||||||
|
|
||||||
/* set if color#0 is 'white' */
|
/* set if color#0 is 'white' */
|
||||||
if ((ncolors == 2 &&
|
if ((ncolors == 2 &&
|
||||||
MONO(img->reds[0], img->greens[0],img->blues[0]) >
|
MONO(img->reds[0], img->greens[0],img->blues[0]) >
|
||||||
MONO(img->reds[1], img->greens[1], img->blues[1])) ||
|
MONO(img->reds[1], img->greens[1], img->blues[1])) ||
|
||||||
(ncolors == 1 &&
|
(ncolors == 1 &&
|
||||||
MONO(img->reds[0], img->greens[0],img->blues[0]) >
|
MONO(img->reds[0], img->greens[0],img->blues[0]) >
|
||||||
MONO(127, 127, 127) ))
|
MONO(127, 127, 127) ))
|
||||||
{
|
{
|
||||||
flipbw=1;
|
flipbw=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dimensions of data */
|
/* dimensions of data */
|
||||||
PSprintf("%d %d %d\n", w, h, bits);
|
PSprintf("%d %d %d\n", w, h, bits);
|
||||||
|
|
||||||
/* mapping matrix */
|
/* mapping matrix */
|
||||||
PSprintf("[%d 0 0 %d 0 %d]\n\n", w, -h, h);
|
PSprintf("[%d 0 0 %d 0 %d]\n\n", w, -h, h);
|
||||||
|
|
||||||
PSprintf("{currentfile pix readhexstring pop}\n");
|
PSprintf("{currentfile pix readhexstring pop}\n");
|
||||||
PSprintf("image\n");
|
PSprintf("image\n");
|
||||||
|
|
||||||
/* write the actual image data */
|
/* write the actual image data */
|
||||||
err = PSwrite_bw(imgp, w, h, flipbw);
|
err = PSwrite_bw(imgp, w, h, flipbw);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* all other formats */
|
/* all other formats */
|
||||||
unsigned char *rleline = (unsigned char *) NULL;
|
unsigned char *rleline = (unsigned char *) NULL;
|
||||||
int rlen;
|
int rlen;
|
||||||
|
|
||||||
/* if we're using color, make sure 'colorimage' is defined */
|
/* if we're using color, make sure 'colorimage' is defined */
|
||||||
if (colorps)
|
if (colorps)
|
||||||
PScolor_image();
|
PScolor_image();
|
||||||
|
|
||||||
PScolormap(colorps, ncolors, img->reds, img->greens, img->blues);
|
PScolormap(colorps, ncolors, img->reds, img->greens, img->blues);
|
||||||
PSrle_cmapimage(colorps);
|
PSrle_cmapimage(colorps);
|
||||||
|
|
||||||
@ -1632,9 +1632,9 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
/* mapping matrix */
|
/* mapping matrix */
|
||||||
PSprintf("[%d 0 0 %d 0 %d]\n", w, -h, h);
|
PSprintf("[%d 0 0 %d 0 %d]\n", w, -h, h);
|
||||||
PSprintf("rlecmapimage\n");
|
PSprintf("rlecmapimage\n");
|
||||||
|
|
||||||
rleline = (unsigned char *) malloc(w * 2);
|
rleline = (unsigned char *) malloc(w * 2);
|
||||||
if (!rleline)
|
if (!rleline)
|
||||||
{
|
{
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (htmlwTrace) {
|
if (htmlwTrace) {
|
||||||
@ -1645,7 +1645,7 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<h && err != EOF; i++)
|
for (i=0; i<h && err != EOF; i++)
|
||||||
{
|
{
|
||||||
rlen = PSrle_encode(imgp, rleline, w);
|
rlen = PSrle_encode(imgp, rleline, w);
|
||||||
imgp += w;
|
imgp += w;
|
||||||
@ -1655,14 +1655,14 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
}
|
}
|
||||||
free(rleline);
|
free(rleline);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* stop using temporary dictionary */
|
/* stop using temporary dictionary */
|
||||||
PSprintf("end\n");
|
PSprintf("end\n");
|
||||||
PSprintf("grestore\n");
|
PSprintf("grestore\n");
|
||||||
|
|
||||||
/* move currentpoint just right of image */
|
/* move currentpoint just right of image */
|
||||||
PSprintf("%d 0 R\n", w + extra);
|
PSprintf("%d 0 R\n", w + extra);
|
||||||
if (HTML_Print_Footers && has_footnote(eptr))
|
if (HTML_Print_Footers && has_footnote(eptr))
|
||||||
{
|
{
|
||||||
PSmove_offset(0);
|
PSmove_offset(0);
|
||||||
PSfootnote(eptr->anchorHRef, 2.0);
|
PSfootnote(eptr->anchorHRef, 2.0);
|
||||||
@ -1701,11 +1701,11 @@ PSimage(HTMLWidget hw, struct ele_rec *eptr, int fontfamily)
|
|||||||
* 2: new century schoolbook
|
* 2: new century schoolbook
|
||||||
* 3: lucida
|
* 3: lucida
|
||||||
*/
|
*/
|
||||||
String ParseTextToPSString(HTMLWidget hw,
|
String ParseTextToPSString(HTMLWidget hw,
|
||||||
struct ele_rec *elist,
|
struct ele_rec *elist,
|
||||||
struct ele_rec *startp,
|
struct ele_rec *startp,
|
||||||
struct ele_rec *endp,
|
struct ele_rec *endp,
|
||||||
int start_pos,
|
int start_pos,
|
||||||
int end_pos,
|
int end_pos,
|
||||||
int space_width,
|
int space_width,
|
||||||
int lmargin,
|
int lmargin,
|
||||||
@ -1722,11 +1722,11 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
struct ele_rec *end;
|
struct ele_rec *end;
|
||||||
struct ele_rec *last;
|
struct ele_rec *last;
|
||||||
struct ele_rec *tmpptr;
|
struct ele_rec *tmpptr;
|
||||||
unsigned long fg_pixel, bg_pixel;
|
unsigned long fg_pixel, bg_pixel;
|
||||||
int footnotes_this_page = 0;
|
int footnotes_this_page = 0;
|
||||||
int footnotes_this_line;
|
int footnotes_this_line;
|
||||||
int reserved_space;
|
int reserved_space;
|
||||||
|
|
||||||
if (startp == NULL)
|
if (startp == NULL)
|
||||||
return(NULL);
|
return(NULL);
|
||||||
|
|
||||||
@ -1735,17 +1735,17 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
* Get the foreground and background colors so we can check later
|
* Get the foreground and background colors so we can check later
|
||||||
* for black&white documents
|
* for black&white documents
|
||||||
*/
|
*/
|
||||||
XtVaGetValues (hw->html.view,
|
XtVaGetValues (hw->html.view,
|
||||||
#ifdef MOTIF
|
#ifdef MOTIF
|
||||||
XtNforeground, &fg_pixel,
|
XtNforeground, &fg_pixel,
|
||||||
#endif
|
#endif
|
||||||
XtNbackground, &bg_pixel,
|
XtNbackground, &bg_pixel,
|
||||||
NULL);
|
NULL);
|
||||||
#ifndef MOTIF
|
#ifndef MOTIF
|
||||||
XtVaGetValues ((Widget)hw,
|
XtVaGetValues ((Widget)hw,
|
||||||
XtNforeground, &fg_pixel,
|
XtNforeground, &fg_pixel,
|
||||||
NULL);
|
NULL);
|
||||||
#endif
|
#endif
|
||||||
fg_color.pixel = fg_pixel;
|
fg_color.pixel = fg_pixel;
|
||||||
bg_color.pixel = bg_pixel;
|
bg_color.pixel = bg_pixel;
|
||||||
XQueryColor(XtDisplay(hw->html.view),
|
XQueryColor(XtDisplay(hw->html.view),
|
||||||
@ -1760,12 +1760,12 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
DefaultColormap(XtDisplay(hw->html.view),
|
DefaultColormap(XtDisplay(hw->html.view),
|
||||||
DefaultScreen(XtDisplay(hw->html.view)))),
|
DefaultScreen(XtDisplay(hw->html.view)))),
|
||||||
&bg_color);
|
&bg_color);
|
||||||
|
|
||||||
/* this piece of code is needed if the user selects a portion
|
/* this piece of code is needed if the user selects a portion
|
||||||
* of the document with the mouse.
|
* of the document with the mouse.
|
||||||
* I think it will never be used, but I left it in anyway. F.
|
* I think it will never be used, but I left it in anyway. F.
|
||||||
*/
|
*/
|
||||||
if (SwapElements(startp, endp, start_pos, end_pos))
|
if (SwapElements(startp, endp, start_pos, end_pos))
|
||||||
{
|
{
|
||||||
start = endp;
|
start = endp;
|
||||||
end = startp;
|
end = startp;
|
||||||
@ -1778,7 +1778,7 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
start = startp;
|
start = startp;
|
||||||
end = endp;
|
end = endp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Setup page size according to user preference. */
|
/* Setup page size according to user preference. */
|
||||||
|
|
||||||
if (HTML_Print_Paper_Size_A4)
|
if (HTML_Print_Paper_Size_A4)
|
||||||
@ -1787,10 +1787,10 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
page_dimens = us_letter_page_dimens;
|
page_dimens = us_letter_page_dimens;
|
||||||
|
|
||||||
page_dimens.text_height = ( page_dimens.page_height
|
page_dimens.text_height = ( page_dimens.page_height
|
||||||
- page_dimens.top_margin
|
- page_dimens.top_margin
|
||||||
- page_dimens.bot_margin);
|
- page_dimens.bot_margin);
|
||||||
page_dimens.text_width = ( page_dimens.page_width
|
page_dimens.text_width = ( page_dimens.page_width
|
||||||
- page_dimens.left_margin
|
- page_dimens.left_margin
|
||||||
- page_dimens.right_margin);
|
- page_dimens.right_margin);
|
||||||
|
|
||||||
/* Calculate the number of Postscript points per pixel of current
|
/* Calculate the number of Postscript points per pixel of current
|
||||||
@ -1810,10 +1810,10 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
* wide), but I guess that the hw->html.doc_width includes some
|
* wide), but I guess that the hw->html.doc_width includes some
|
||||||
* left and right margins, so it seems to work in practice.
|
* left and right margins, so it seems to work in practice.
|
||||||
*/
|
*/
|
||||||
if (pagewidth > page_dimens.text_width)
|
if (pagewidth > page_dimens.text_width)
|
||||||
Points_Pixel = Points_Pixel * page_dimens.text_width / pagewidth;
|
Points_Pixel = Points_Pixel * page_dimens.text_width / pagewidth;
|
||||||
Pixels_Page = (int) (page_dimens.text_height / Points_Pixel);
|
Pixels_Page = (int) (page_dimens.text_height / Points_Pixel);
|
||||||
|
|
||||||
PSinit();
|
PSinit();
|
||||||
PSheader(hw->html.title, fontfamily, url, time_str);
|
PSheader(hw->html.title, fontfamily, url, time_str);
|
||||||
PSnewpage();
|
PSnewpage();
|
||||||
@ -1821,14 +1821,14 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
last = start;
|
last = start;
|
||||||
eptr = start;
|
eptr = start;
|
||||||
|
|
||||||
while ((eptr != NULL) && (eptr != end))
|
while ((eptr != NULL) && (eptr != end))
|
||||||
{
|
{
|
||||||
/* Skip the special internal text added for multi-page
|
/* Skip the special internal text added for multi-page
|
||||||
* documents.
|
* documents.
|
||||||
*/
|
*/
|
||||||
if (eptr->internal == True)
|
if (eptr->internal == True)
|
||||||
{
|
{
|
||||||
if (eptr->type == E_LINEFEED)
|
if (eptr->type == E_LINEFEED)
|
||||||
{
|
{
|
||||||
PS_page_offset += eptr->line_height;
|
PS_page_offset += eptr->line_height;
|
||||||
}
|
}
|
||||||
@ -1837,14 +1837,14 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* check if this is a newline */
|
/* check if this is a newline */
|
||||||
if (line != eptr->line_number)
|
if (line != eptr->line_number)
|
||||||
{
|
{
|
||||||
/* calculate max height */
|
/* calculate max height */
|
||||||
height = 0;
|
height = 0;
|
||||||
footnotes_this_line = 0;
|
footnotes_this_line = 0;
|
||||||
line = eptr->line_number;
|
line = eptr->line_number;
|
||||||
tmpptr = eptr;
|
tmpptr = eptr;
|
||||||
while (tmpptr != NULL && tmpptr->line_number == line)
|
while (tmpptr != NULL && tmpptr->line_number == line)
|
||||||
{
|
{
|
||||||
if (tmpptr->line_height > height)
|
if (tmpptr->line_height > height)
|
||||||
height = tmpptr->line_height;
|
height = tmpptr->line_height;
|
||||||
@ -1858,18 +1858,18 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
xpos = 0;
|
xpos = 0;
|
||||||
|
|
||||||
/* check if line fits completly on page */
|
/* check if line fits completly on page */
|
||||||
|
|
||||||
reserved_space = 0;
|
reserved_space = 0;
|
||||||
if (footnotes_this_page || footnotes_this_line)
|
if (footnotes_this_page || footnotes_this_line)
|
||||||
{
|
{
|
||||||
reserved_space = ( ( footnote_space
|
reserved_space = ( ( footnote_space
|
||||||
+ ( footnote_ptsize
|
+ ( footnote_ptsize
|
||||||
* ( footnotes_this_page
|
* ( footnotes_this_page
|
||||||
+ footnotes_this_line)))
|
+ footnotes_this_line)))
|
||||||
/ Points_Pixel);
|
/ Points_Pixel);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ypos + height + reserved_space > PS_start_y + Pixels_Page)
|
if (ypos + height + reserved_space > PS_start_y + Pixels_Page)
|
||||||
{
|
{
|
||||||
PS_start_y = ypos;
|
PS_start_y = ypos;
|
||||||
PSshowpage();
|
PSshowpage();
|
||||||
@ -1879,24 +1879,24 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
footnotes_this_page += footnotes_this_line;
|
footnotes_this_page += footnotes_this_line;
|
||||||
PSmoveto( xpos, ypos);
|
PSmoveto( xpos, ypos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
switch (eptr->type)
|
|
||||||
|
switch (eptr->type)
|
||||||
{
|
{
|
||||||
case E_TEXT:
|
case E_TEXT:
|
||||||
PStext(hw, eptr, fontfamily,
|
PStext(hw, eptr, fontfamily,
|
||||||
(String)((eptr == start) ? (eptr->edata + start_pos) : eptr->edata));
|
(String)((eptr == start) ? (eptr->edata + start_pos) : eptr->edata));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case E_BULLET:
|
case E_BULLET:
|
||||||
PSbullet(hw, eptr, fontfamily);
|
PSbullet(hw, eptr, fontfamily);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case E_IMAGE:
|
case E_IMAGE:
|
||||||
PSimage(hw, eptr, fontfamily);
|
PSimage(hw, eptr, fontfamily);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case E_LINEFEED:
|
case E_LINEFEED:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case E_HRULE:
|
case E_HRULE:
|
||||||
@ -1915,7 +1915,7 @@ String ParseTextToPSString(HTMLWidget hw,
|
|||||||
last = eptr;
|
last = eptr;
|
||||||
eptr = eptr->next;
|
eptr = eptr->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
PSshowpage();
|
PSshowpage();
|
||||||
PStrailer();
|
PStrailer();
|
||||||
|
|
||||||
|
212
libhtmlw/HTML.c
212
libhtmlw/HTML.c
@ -337,7 +337,7 @@ static XtResource resources[] =
|
|||||||
{ WbNtitleText,
|
{ WbNtitleText,
|
||||||
WbCTitleText, XtRString, sizeof (char *),
|
WbCTitleText, XtRString, sizeof (char *),
|
||||||
XtOffset (HTMLWidget, html.title),
|
XtOffset (HTMLWidget, html.title),
|
||||||
XtRString, (char *) NULL
|
XtRString, (char *) NULL
|
||||||
},
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -593,21 +593,21 @@ static XtResource resources[] =
|
|||||||
},
|
},
|
||||||
/* end amb */
|
/* end amb */
|
||||||
{ WbNpreviouslyVisitedTestFunction,
|
{ WbNpreviouslyVisitedTestFunction,
|
||||||
WbCPreviouslyVisitedTestFunction, XtRPointer,
|
WbCPreviouslyVisitedTestFunction, XtRPointer,
|
||||||
sizeof (XtPointer),
|
sizeof (XtPointer),
|
||||||
XtOffset (HTMLWidget, html.previously_visited_test),
|
XtOffset (HTMLWidget, html.previously_visited_test),
|
||||||
XtRImmediate, (caddr_t) NULL
|
XtRImmediate, (caddr_t) NULL
|
||||||
},
|
},
|
||||||
|
|
||||||
{ WbNresolveImageFunction,
|
{ WbNresolveImageFunction,
|
||||||
WbCResolveImageFunction, XtRPointer,
|
WbCResolveImageFunction, XtRPointer,
|
||||||
sizeof (XtPointer),
|
sizeof (XtPointer),
|
||||||
XtOffset (HTMLWidget, html.resolveImage),
|
XtOffset (HTMLWidget, html.resolveImage),
|
||||||
XtRImmediate, (caddr_t) NULL
|
XtRImmediate, (caddr_t) NULL
|
||||||
},
|
},
|
||||||
|
|
||||||
{ WbNresolveDelayedImage,
|
{ WbNresolveDelayedImage,
|
||||||
WbCResolveDelayedImage, XtRPointer,
|
WbCResolveDelayedImage, XtRPointer,
|
||||||
sizeof (XtPointer),
|
sizeof (XtPointer),
|
||||||
XtOffset (HTMLWidget, html.resolveDelayedImage),
|
XtOffset (HTMLWidget, html.resolveDelayedImage),
|
||||||
XtRImmediate, (caddr_t) NULL
|
XtRImmediate, (caddr_t) NULL
|
||||||
@ -615,12 +615,12 @@ static XtResource resources[] =
|
|||||||
|
|
||||||
{
|
{
|
||||||
WbNpointerMotionCallback,
|
WbNpointerMotionCallback,
|
||||||
WbCPointerMotionCallback, XtRPointer,
|
WbCPointerMotionCallback, XtRPointer,
|
||||||
sizeof (XtPointer),
|
sizeof (XtPointer),
|
||||||
XtOffset (HTMLWidget, html.pointer_motion_callback),
|
XtOffset (HTMLWidget, html.pointer_motion_callback),
|
||||||
XtRImmediate, (caddr_t) NULL
|
XtRImmediate, (caddr_t) NULL
|
||||||
},
|
},
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -674,12 +674,12 @@ HTMLClassRec htmlClassRec = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
{ /* constraint_class fields */
|
{ /* constraint_class fields */
|
||||||
NULL, /* resource list */
|
NULL, /* resource list */
|
||||||
0, /* num resources */
|
0, /* num resources */
|
||||||
0, /* constraint size */
|
0, /* constraint size */
|
||||||
NULL, /* init proc */
|
NULL, /* init proc */
|
||||||
NULL, /* destroy proc */
|
NULL, /* destroy proc */
|
||||||
NULL, /* set values proc */
|
NULL, /* set values proc */
|
||||||
NULL, /* extension */
|
NULL, /* extension */
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -691,13 +691,13 @@ HTMLClassRec htmlClassRec = {
|
|||||||
NULL, /* syn_cont_resources */
|
NULL, /* syn_cont_resources */
|
||||||
0, /* num_syn_cont_resources */
|
0, /* num_syn_cont_resources */
|
||||||
XmInheritParentProcess, /* parent_process */
|
XmInheritParentProcess, /* parent_process */
|
||||||
NULL, /* extension */
|
NULL, /* extension */
|
||||||
},
|
},
|
||||||
#endif /* MOTIF */
|
#endif /* MOTIF */
|
||||||
|
|
||||||
{ /* html_class fields */
|
{ /* html_class fields */
|
||||||
0 /* none */
|
0 /* none */
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -710,7 +710,7 @@ extern int hacked_y;
|
|||||||
WidgetClass htmlWidgetClass = (WidgetClass)&htmlClassRec;
|
WidgetClass htmlWidgetClass = (WidgetClass)&htmlClassRec;
|
||||||
|
|
||||||
static Cursor in_anchor_cursor = (Cursor)NULL;
|
static Cursor in_anchor_cursor = (Cursor)NULL;
|
||||||
static char *mailToKludgeSubject = NULL;
|
static char *mailToKludgeSubject = NULL;
|
||||||
static char *mailToKludgeURL = NULL;
|
static char *mailToKludgeURL = NULL;
|
||||||
|
|
||||||
char *cattrs[]={"text","bgcolor","alink","vlink","link",NULL};
|
char *cattrs[]={"text","bgcolor","alink","vlink","link",NULL};
|
||||||
@ -836,7 +836,7 @@ hw_do_color(Widget w, char *att, char *cname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cmap = hw->core.colormap;
|
cmap = hw->core.colormap;
|
||||||
|
|
||||||
val=cname;
|
val=cname;
|
||||||
if (*val!='#') {
|
if (*val!='#') {
|
||||||
if (XAllocNamedColor(XtDisplay(w),cmap,cname,&col,&ecol)) {
|
if (XAllocNamedColor(XtDisplay(w),cmap,cname,&col,&ecol)) {
|
||||||
@ -868,22 +868,22 @@ hw_do_color(Widget w, char *att, char *cname)
|
|||||||
t[0]=val[4];
|
t[0]=val[4];
|
||||||
t[1]=val[5];
|
t[1]=val[5];
|
||||||
sscanf(t,"%x",&b);
|
sscanf(t,"%x",&b);
|
||||||
|
|
||||||
col.red = ((unsigned) r) << 8;
|
col.red = ((unsigned) r) << 8;
|
||||||
col.green = ((unsigned) g) << 8;
|
col.green = ((unsigned) g) << 8;
|
||||||
col.blue = ((unsigned) b) << 8;
|
col.blue = ((unsigned) b) << 8;
|
||||||
col.flags = DoRed | DoGreen | DoBlue;
|
col.flags = DoRed | DoGreen | DoBlue;
|
||||||
|
|
||||||
if (!XAllocColor(XtDisplay(w),cmap,&col)) {
|
if (!XAllocColor(XtDisplay(w),cmap,&col)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!my_strcasecmp(att,"text")) {
|
if (!my_strcasecmp(att,"text")) {
|
||||||
hw->manager.foreground = col.pixel;
|
hw->manager.foreground = col.pixel;
|
||||||
}
|
}
|
||||||
@ -891,11 +891,11 @@ hw_do_color(Widget w, char *att, char *cname)
|
|||||||
/* calculate shadow colors */
|
/* calculate shadow colors */
|
||||||
calc = XmGetColorCalculation();
|
calc = XmGetColorCalculation();
|
||||||
calc(&col, &fg, &sel, &ts, &bs);
|
calc(&col, &fg, &sel, &ts, &bs);
|
||||||
if (XAllocColor(XtDisplay(w),cmap,&ts))
|
if (XAllocColor(XtDisplay(w),cmap,&ts))
|
||||||
hw->manager.top_shadow_color = ts.pixel;
|
hw->manager.top_shadow_color = ts.pixel;
|
||||||
if (XAllocColor(XtDisplay(w),cmap,&bs))
|
if (XAllocColor(XtDisplay(w),cmap,&bs))
|
||||||
hw->manager.bottom_shadow_color = bs.pixel;
|
hw->manager.bottom_shadow_color = bs.pixel;
|
||||||
|
|
||||||
hw->core.background_pixel = col.pixel;
|
hw->core.background_pixel = col.pixel;
|
||||||
hw->html.view->core.background_pixel = col.pixel ;
|
hw->html.view->core.background_pixel = col.pixel ;
|
||||||
hw->html.activeAnchor_bg = col.pixel;
|
hw->html.activeAnchor_bg = col.pixel;
|
||||||
@ -909,7 +909,7 @@ hw_do_color(Widget w, char *att, char *cname)
|
|||||||
if (!my_strcasecmp(att,"alink")) {
|
if (!my_strcasecmp(att,"alink")) {
|
||||||
hw->html.activeAnchor_fg = col.pixel;
|
hw->html.activeAnchor_fg = col.pixel;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -951,7 +951,7 @@ XGCValues values;
|
|||||||
#define MAX_Y_EXP_DIFF 10 /*pixels between exposes to make one expose area*/
|
#define MAX_Y_EXP_DIFF 10 /*pixels between exposes to make one expose area*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Process an expose event in the View (or drawing area). This
|
* Process an expose event in the View (or drawing area). This
|
||||||
* Can be a regular expose event, or perhaps a GraphicsExpose Event.
|
* Can be a regular expose event, or perhaps a GraphicsExpose Event.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
@ -1100,7 +1100,7 @@ goto single_expose;
|
|||||||
x1 = nx + nwidth;
|
x1 = nx + nwidth;
|
||||||
changed=1;
|
changed=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (y1 < (ny + nheight)) {
|
if (y1 < (ny + nheight)) {
|
||||||
y1 = ny + nheight;
|
y1 = ny + nheight;
|
||||||
changed=1;
|
changed=1;
|
||||||
@ -1190,7 +1190,7 @@ ScrollWidgets(hw)
|
|||||||
((y+wptr->height)>0 &&
|
((y+wptr->height)>0 &&
|
||||||
(y+wptr->height)<=hw->html.view_height)) &&
|
(y+wptr->height)<=hw->html.view_height)) &&
|
||||||
((x>0 &&
|
((x>0 &&
|
||||||
x<=hw->html.view_width) ||
|
x<=hw->html.view_width) ||
|
||||||
((x+wptr->width)>0 &&
|
((x+wptr->width)>0 &&
|
||||||
(x+wptr->width)<=hw->html.view_width))) {
|
(x+wptr->width)<=hw->html.view_width))) {
|
||||||
wptr->seeable=1;
|
wptr->seeable=1;
|
||||||
@ -1271,7 +1271,7 @@ ScrollToPos(w, hw, value)
|
|||||||
if (value > hw->html.scroll_y)
|
if (value > hw->html.scroll_y)
|
||||||
{
|
{
|
||||||
int dy;
|
int dy;
|
||||||
|
|
||||||
dy = value - hw->html.scroll_y;
|
dy = value - hw->html.scroll_y;
|
||||||
if (dy > hw->html.view_height)
|
if (dy > hw->html.view_height)
|
||||||
{
|
{
|
||||||
@ -1314,7 +1314,7 @@ ScrollToPos(w, hw, value)
|
|||||||
else if (value < hw->html.scroll_y)
|
else if (value < hw->html.scroll_y)
|
||||||
{
|
{
|
||||||
int dy;
|
int dy;
|
||||||
|
|
||||||
dy = hw->html.scroll_y - value;
|
dy = hw->html.scroll_y - value;
|
||||||
if (dy > hw->html.view_height)
|
if (dy > hw->html.view_height)
|
||||||
{
|
{
|
||||||
@ -1347,7 +1347,7 @@ ScrollToPos(w, hw, value)
|
|||||||
ViewRedisplay(hw,
|
ViewRedisplay(hw,
|
||||||
0, 0,
|
0, 0,
|
||||||
hw->html.view_width, dy);
|
hw->html.view_width, dy);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1364,7 +1364,7 @@ ScrollToPos(w, hw, value)
|
|||||||
if (value > hw->html.scroll_x)
|
if (value > hw->html.scroll_x)
|
||||||
{
|
{
|
||||||
int dx;
|
int dx;
|
||||||
|
|
||||||
dx = value - hw->html.scroll_x;
|
dx = value - hw->html.scroll_x;
|
||||||
if (dx > hw->html.view_width)
|
if (dx > hw->html.view_width)
|
||||||
{
|
{
|
||||||
@ -1407,7 +1407,7 @@ ScrollToPos(w, hw, value)
|
|||||||
else if (value < hw->html.scroll_x)
|
else if (value < hw->html.scroll_x)
|
||||||
{
|
{
|
||||||
int dx;
|
int dx;
|
||||||
|
|
||||||
dx = hw->html.scroll_x - value;
|
dx = hw->html.scroll_x - value;
|
||||||
if (dx > hw->html.view_width)
|
if (dx > hw->html.view_width)
|
||||||
{
|
{
|
||||||
@ -1484,7 +1484,7 @@ ScrollMove(w, client_data, call_data)
|
|||||||
currentLength = hw->html.view_height;
|
currentLength = hw->html.view_height;
|
||||||
value = hw->html.scroll_y + scrollDir * currentLength;
|
value = hw->html.scroll_y + scrollDir * currentLength;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
totalLength = hw->html.doc_width;
|
totalLength = hw->html.doc_width;
|
||||||
currentLength = hw->html.view_width;
|
currentLength = hw->html.view_width;
|
||||||
@ -1493,7 +1493,7 @@ ScrollMove(w, client_data, call_data)
|
|||||||
|
|
||||||
if (value > (int)totalLength) value = totalLength;
|
if (value > (int)totalLength) value = totalLength;
|
||||||
if (value < 0) value = 0;
|
if (value < 0) value = 0;
|
||||||
|
|
||||||
setScrollBar(w, value, totalLength, currentLength);
|
setScrollBar(w, value, totalLength, currentLength);
|
||||||
ScrollToPos(w, hw, value);
|
ScrollToPos(w, hw, value);
|
||||||
#endif
|
#endif
|
||||||
@ -1508,14 +1508,14 @@ JumpMove(w, client_data, call_data)
|
|||||||
caddr_t call_data;
|
caddr_t call_data;
|
||||||
{
|
{
|
||||||
HTMLWidget hw = (HTMLWidget)client_data;
|
HTMLWidget hw = (HTMLWidget)client_data;
|
||||||
int value = (int)(*(float *)call_data *
|
int value = (int)(*(float *)call_data *
|
||||||
(w == hw->html.vbar ?
|
(w == hw->html.vbar ?
|
||||||
hw->html.doc_height :
|
hw->html.doc_height :
|
||||||
hw->html.doc_width));
|
hw->html.doc_width));
|
||||||
ScrollToPos(w, hw, value);
|
ScrollToPos(w, hw, value);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create the horizontal and vertical scroll bars.
|
* Create the horizontal and vertical scroll bars.
|
||||||
@ -1544,10 +1544,10 @@ CreateScrollbars(
|
|||||||
XtSetArg(arg[argcnt], XxNwidth, 10); argcnt++;
|
XtSetArg(arg[argcnt], XxNwidth, 10); argcnt++;
|
||||||
XtSetArg(arg[argcnt], XxNheight, 10); argcnt++;
|
XtSetArg(arg[argcnt], XxNheight, 10); argcnt++;
|
||||||
hw->html.view = XtCreateWidget("View",
|
hw->html.view = XtCreateWidget("View",
|
||||||
#ifdef MOTIF
|
#ifdef MOTIF
|
||||||
xmDrawingAreaWidgetClass,
|
xmDrawingAreaWidgetClass,
|
||||||
#else
|
#else
|
||||||
drawingAreaWidgetClass,
|
drawingAreaWidgetClass,
|
||||||
#endif
|
#endif
|
||||||
(Widget)hw, arg, argcnt);
|
(Widget)hw, arg, argcnt);
|
||||||
XtManageChild(hw->html.view);
|
XtManageChild(hw->html.view);
|
||||||
@ -1728,7 +1728,7 @@ ConfigScrollBars(
|
|||||||
*/
|
*/
|
||||||
#ifdef MOTIF
|
#ifdef MOTIF
|
||||||
vx = hw->manager.shadow_thickness;
|
vx = hw->manager.shadow_thickness;
|
||||||
vy = hw->manager.shadow_thickness;
|
vy = hw->manager.shadow_thickness;
|
||||||
#else
|
#else
|
||||||
vx = vy = 0;
|
vx = vy = 0;
|
||||||
#endif
|
#endif
|
||||||
@ -1741,7 +1741,7 @@ ConfigScrollBars(
|
|||||||
vy += HbarHeight(hw);
|
vy += HbarHeight(hw);
|
||||||
}
|
}
|
||||||
XtMoveWidget(hw->html.view, vx, vy);
|
XtMoveWidget(hw->html.view, vx, vy);
|
||||||
XtResizeWidget(hw->html.view, hw->html.view_width,
|
XtResizeWidget(hw->html.view, hw->html.view_width,
|
||||||
hw->html.view_height,
|
hw->html.view_height,
|
||||||
hw->html.view->core.border_width);
|
hw->html.view->core.border_width);
|
||||||
/*
|
/*
|
||||||
@ -1757,7 +1757,7 @@ ConfigScrollBars(
|
|||||||
* the viewing area
|
* the viewing area
|
||||||
*/
|
*/
|
||||||
XtResizeWidget(hw->html.vbar, hw->html.vbar->core.width,
|
XtResizeWidget(hw->html.vbar, hw->html.vbar->core.width,
|
||||||
hw->html.view_height + (2 *
|
hw->html.view_height + (2 *
|
||||||
#ifdef MOTIF
|
#ifdef MOTIF
|
||||||
hw->manager.shadow_thickness
|
hw->manager.shadow_thickness
|
||||||
#else
|
#else
|
||||||
@ -1779,16 +1779,16 @@ ConfigScrollBars(
|
|||||||
{
|
{
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (htmlwTrace) {
|
if (htmlwTrace) {
|
||||||
fprintf (stderr, "view_height %d, doc_height %d\n",
|
fprintf (stderr, "view_height %d, doc_height %d\n",
|
||||||
hw->html.view_height, hw->html.doc_height);
|
hw->html.view_height, hw->html.doc_height);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef NOT_RIGHT
|
#ifdef NOT_RIGHT
|
||||||
/* Eric -- your previous equation wasn't doing it.
|
/* Eric -- your previous equation wasn't doing it.
|
||||||
This isn't either... */
|
This isn't either... */
|
||||||
ss =
|
ss =
|
||||||
(int)((float)hw->html.view_height *
|
(int)((float)hw->html.view_height *
|
||||||
((float)hw->html.view_height /
|
((float)hw->html.view_height /
|
||||||
(float)(hw->html.doc_height - (int)hw->html.view_height)));
|
(float)(hw->html.doc_height - (int)hw->html.view_height)));
|
||||||
if (ss > hw->html.view_height)
|
if (ss > hw->html.view_height)
|
||||||
{
|
{
|
||||||
@ -1855,14 +1855,14 @@ ConfigScrollBars(
|
|||||||
XtSetArg(arg[argcnt], XmNvalue, hw->html.scroll_y); argcnt++;
|
XtSetArg(arg[argcnt], XmNvalue, hw->html.scroll_y); argcnt++;
|
||||||
XtSetArg(arg[argcnt], XmNsliderSize, ss); argcnt++;
|
XtSetArg(arg[argcnt], XmNsliderSize, ss); argcnt++;
|
||||||
XtSetArg(arg[argcnt], XmNincrement, DEFAULT_INCREMENT); argcnt++;
|
XtSetArg(arg[argcnt], XmNincrement, DEFAULT_INCREMENT); argcnt++;
|
||||||
XtSetArg(arg[argcnt], XmNpageIncrement,
|
XtSetArg(arg[argcnt], XmNpageIncrement,
|
||||||
hw->html.view_height > DEFAULT_INCREMENT ?
|
hw->html.view_height > DEFAULT_INCREMENT ?
|
||||||
hw->html.view_height - DEFAULT_INCREMENT : 1); argcnt++;
|
hw->html.view_height - DEFAULT_INCREMENT : 1); argcnt++;
|
||||||
XtSetValues(hw->html.vbar, arg, argcnt);
|
XtSetValues(hw->html.vbar, arg, argcnt);
|
||||||
#else
|
#else
|
||||||
setScrollBar(hw->html.vbar,
|
setScrollBar(hw->html.vbar,
|
||||||
hw->html.scroll_y,
|
hw->html.scroll_y,
|
||||||
hw->html.doc_height,
|
hw->html.doc_height,
|
||||||
hw->html.view_height);
|
hw->html.view_height);
|
||||||
#endif /* MOTIF */
|
#endif /* MOTIF */
|
||||||
|
|
||||||
@ -1970,14 +1970,14 @@ ConfigScrollBars(
|
|||||||
XtSetArg(arg[argcnt], XmNvalue, hw->html.scroll_x); argcnt++;
|
XtSetArg(arg[argcnt], XmNvalue, hw->html.scroll_x); argcnt++;
|
||||||
XtSetArg(arg[argcnt], XmNsliderSize, ss); argcnt++;
|
XtSetArg(arg[argcnt], XmNsliderSize, ss); argcnt++;
|
||||||
XtSetArg(arg[argcnt], XmNincrement, DEFAULT_INCREMENT); argcnt++;
|
XtSetArg(arg[argcnt], XmNincrement, DEFAULT_INCREMENT); argcnt++;
|
||||||
XtSetArg(arg[argcnt], XmNpageIncrement,
|
XtSetArg(arg[argcnt], XmNpageIncrement,
|
||||||
hw->html.view_width > DEFAULT_INCREMENT ?
|
hw->html.view_width > DEFAULT_INCREMENT ?
|
||||||
hw->html.view_width - DEFAULT_INCREMENT : 1); argcnt++;
|
hw->html.view_width - DEFAULT_INCREMENT : 1); argcnt++;
|
||||||
XtSetValues(hw->html.hbar, arg, argcnt);
|
XtSetValues(hw->html.hbar, arg, argcnt);
|
||||||
#else
|
#else
|
||||||
setScrollBar(hw->html.hbar,
|
setScrollBar(hw->html.hbar,
|
||||||
hw->html.scroll_x,
|
hw->html.scroll_x,
|
||||||
hw->html.doc_width,
|
hw->html.doc_width,
|
||||||
hw->html.view_width);
|
hw->html.view_width);
|
||||||
#endif /* MOTIF */
|
#endif /* MOTIF */
|
||||||
}
|
}
|
||||||
@ -2026,7 +2026,7 @@ ReformatWindow(
|
|||||||
if (hw->core.width <= swidth)
|
if (hw->core.width <= swidth)
|
||||||
{
|
{
|
||||||
hw->core.width = swidth + 10;
|
hw->core.width = swidth + 10;
|
||||||
}
|
}
|
||||||
new_width = hw->core.width - swidth - (2 * st);
|
new_width = hw->core.width - swidth - (2 * st);
|
||||||
temp = FormatAll(hw, &new_width);
|
temp = FormatAll(hw, &new_width);
|
||||||
|
|
||||||
@ -2216,19 +2216,19 @@ Initialize(
|
|||||||
if (new->core.width == 0)
|
if (new->core.width == 0)
|
||||||
{
|
{
|
||||||
new->core.width = new->html.margin_width << 1 ;
|
new->core.width = new->html.margin_width << 1 ;
|
||||||
}
|
}
|
||||||
if (new->core.width == 0)
|
if (new->core.width == 0)
|
||||||
{
|
{
|
||||||
new->core.width = 10 ;
|
new->core.width = 10 ;
|
||||||
}
|
}
|
||||||
if (new->core.height == 0)
|
if (new->core.height == 0)
|
||||||
{
|
{
|
||||||
new->core.height = new->html.margin_height << 1 ;
|
new->core.height = new->html.margin_height << 1 ;
|
||||||
}
|
}
|
||||||
if (new->core.height == 0)
|
if (new->core.height == 0)
|
||||||
{
|
{
|
||||||
new->core.height = 10 ;
|
new->core.height = 10 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure the underline numbers are within bounds.
|
* Make sure the underline numbers are within bounds.
|
||||||
@ -2236,22 +2236,22 @@ Initialize(
|
|||||||
if (new->html.num_anchor_underlines < 0)
|
if (new->html.num_anchor_underlines < 0)
|
||||||
{
|
{
|
||||||
new->html.num_anchor_underlines = 0;
|
new->html.num_anchor_underlines = 0;
|
||||||
}
|
}
|
||||||
if (new->html.num_anchor_underlines > MAX_UNDERLINES)
|
if (new->html.num_anchor_underlines > MAX_UNDERLINES)
|
||||||
{
|
{
|
||||||
new->html.num_anchor_underlines = MAX_UNDERLINES;
|
new->html.num_anchor_underlines = MAX_UNDERLINES;
|
||||||
}
|
}
|
||||||
if (new->html.num_visitedAnchor_underlines < 0)
|
if (new->html.num_visitedAnchor_underlines < 0)
|
||||||
{
|
{
|
||||||
new->html.num_visitedAnchor_underlines = 0;
|
new->html.num_visitedAnchor_underlines = 0;
|
||||||
}
|
}
|
||||||
if (new->html.num_visitedAnchor_underlines > MAX_UNDERLINES)
|
if (new->html.num_visitedAnchor_underlines > MAX_UNDERLINES)
|
||||||
{
|
{
|
||||||
new->html.num_visitedAnchor_underlines = MAX_UNDERLINES;
|
new->html.num_visitedAnchor_underlines = MAX_UNDERLINES;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Parse the raw text with the HTML parser. And set the formatted
|
* Parse the raw text with the HTML parser. And set the formatted
|
||||||
* element list to NULL.
|
* element list to NULL.
|
||||||
*/
|
*/
|
||||||
new->html.html_objects = HTMLParse(NULL, request->html.raw_text,new);
|
new->html.html_objects = HTMLParse(NULL, request->html.raw_text,new);
|
||||||
@ -2463,7 +2463,7 @@ ViewClearAndRefresh(
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
int r,b;
|
int r,b;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Only refresh if we have a window already.
|
* Only refresh if we have a window already.
|
||||||
* (if we have a GC we have a window)
|
* (if we have a GC we have a window)
|
||||||
@ -2482,7 +2482,7 @@ ViewClearAndRefresh(
|
|||||||
hw->manager.top_shadow_color ? 0 : 1;
|
hw->manager.top_shadow_color ? 0 : 1;
|
||||||
hw->manager.bottom_shadow_color =
|
hw->manager.bottom_shadow_color =
|
||||||
hw->manager.bottom_shadow_color ? 0 : 1;
|
hw->manager.bottom_shadow_color ? 0 : 1;
|
||||||
|
|
||||||
XtVaSetValues(hw->html.view,
|
XtVaSetValues(hw->html.view,
|
||||||
XmNbackground, hw->core.background_pixel,
|
XmNbackground, hw->core.background_pixel,
|
||||||
XmNtopShadowColor, r,
|
XmNtopShadowColor, r,
|
||||||
@ -2494,7 +2494,7 @@ ViewClearAndRefresh(
|
|||||||
XmNtopShadowColor, r,
|
XmNtopShadowColor, r,
|
||||||
XmNbottomShadowColor, b,
|
XmNbottomShadowColor, b,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
XClearArea(XtDisplay(hw), XtWindow(hw->html.view),
|
XClearArea(XtDisplay(hw), XtWindow(hw->html.view),
|
||||||
0, 0, 0, 0, False);
|
0, 0, 0, 0, False);
|
||||||
ViewRedisplay(hw, 0, 0,
|
ViewRedisplay(hw, 0, 0,
|
||||||
@ -2612,7 +2612,7 @@ Resize(
|
|||||||
if (hw->core.width <= swidth)
|
if (hw->core.width <= swidth)
|
||||||
{
|
{
|
||||||
hw->core.width = swidth + 10 ;
|
hw->core.width = swidth + 10 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hw->html.use_vbar == True)
|
if (hw->html.use_vbar == True)
|
||||||
{
|
{
|
||||||
@ -3989,7 +3989,7 @@ TrackMotion(w, event, params, num_params)
|
|||||||
}
|
}
|
||||||
|
|
||||||
eptr = LocateElement(hw, x, y, &epos);
|
eptr = LocateElement(hw, x, y, &epos);
|
||||||
|
|
||||||
/* We're hitting a new anchor if eptr exists and
|
/* We're hitting a new anchor if eptr exists and
|
||||||
eptr != cached tracked element and anchorHRef != NULL. */
|
eptr != cached tracked element and anchorHRef != NULL. */
|
||||||
if (eptr != NULL && eptr != hw->html.cached_tracked_ele &&
|
if (eptr != NULL && eptr != hw->html.cached_tracked_ele &&
|
||||||
@ -4002,7 +4002,7 @@ TrackMotion(w, event, params, num_params)
|
|||||||
}
|
}
|
||||||
/* We're leaving an anchor if eptr exists and
|
/* We're leaving an anchor if eptr exists and
|
||||||
a cached ele exists and we're not entering a new anchor. */
|
a cached ele exists and we're not entering a new anchor. */
|
||||||
else if (eptr != NULL && hw->html.cached_tracked_ele != NULL &&
|
else if (eptr != NULL && hw->html.cached_tracked_ele != NULL &&
|
||||||
eptr->anchorHRef == NULL)
|
eptr->anchorHRef == NULL)
|
||||||
{
|
{
|
||||||
LEAVING_ANCHOR (hw);
|
LEAVING_ANCHOR (hw);
|
||||||
@ -4014,13 +4014,13 @@ TrackMotion(w, event, params, num_params)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* We're adding a subject attribute to the anchor tag
|
/* We're adding a subject attribute to the anchor tag
|
||||||
of course this subject attribute is dependent on that the HREF attribute
|
of course this subject attribute is dependent on that the HREF attribute
|
||||||
is set to a mailto URL. I think this is a kludge. libwww is not set up
|
is set to a mailto URL. I think this is a kludge. libwww is not set up
|
||||||
for this, so to minimize modifications, this routine exists for
|
for this, so to minimize modifications, this routine exists for
|
||||||
libwww:HTSendMaitlTo() to call to get the subject for the mailto URL.
|
libwww:HTSendMaitlTo() to call to get the subject for the mailto URL.
|
||||||
The static globals mailToKludgeSubject, etc are set in HTMLInput when
|
The static globals mailToKludgeSubject, etc are set in HTMLInput when
|
||||||
an anchor is clicked.
|
an anchor is clicked.
|
||||||
*/
|
*/
|
||||||
GetMailtoKludgeInfo(url,subject)
|
GetMailtoKludgeInfo(url,subject)
|
||||||
char **url;
|
char **url;
|
||||||
@ -4051,7 +4051,7 @@ _HTMLInput(
|
|||||||
String *params, /* unused */
|
String *params, /* unused */
|
||||||
Cardinal *num_params) /* unused */
|
Cardinal *num_params) /* unused */
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
HTMLWidget hw = (HTMLWidget)XtParent(w);
|
HTMLWidget hw = (HTMLWidget)XtParent(w);
|
||||||
struct ele_rec *eptr;
|
struct ele_rec *eptr;
|
||||||
WbAnchorCallbackData cbdata;
|
WbAnchorCallbackData cbdata;
|
||||||
@ -4353,16 +4353,16 @@ _HTMLpwdInput(
|
|||||||
char *keySymString;
|
char *keySymString;
|
||||||
char *star = "*";
|
char *star = "*";
|
||||||
int length, passwdLength, i, insertPos, maxLength;
|
int length, passwdLength, i, insertPos, maxLength;
|
||||||
Boolean stringInPlace;
|
Boolean stringInPlace;
|
||||||
|
|
||||||
if (event->type == KeyPress)
|
if (event->type == KeyPress)
|
||||||
{
|
{
|
||||||
HTMLWidget hw = (HTMLWidget)XtParent(w);
|
HTMLWidget hw = (HTMLWidget)XtParent(w);
|
||||||
WidgetInfo *wptr;
|
WidgetInfo *wptr;
|
||||||
|
|
||||||
if (XtClass((Widget)hw) != htmlWidgetClass)
|
if (XtClass((Widget)hw) != htmlWidgetClass)
|
||||||
return; /* it was not for us */
|
return; /* it was not for us */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* find the structure for this widget
|
* find the structure for this widget
|
||||||
*/
|
*/
|
||||||
@ -4378,7 +4378,7 @@ _HTMLpwdInput(
|
|||||||
|
|
||||||
passwdLength = wptr->password ? strlen(wptr->password) : 0;
|
passwdLength = wptr->password ? strlen(wptr->password) : 0;
|
||||||
|
|
||||||
length = XLookupString((XKeyEvent *)event,
|
length = XLookupString((XKeyEvent *)event,
|
||||||
buffer, 50, &ks, NULL);
|
buffer, 50, &ks, NULL);
|
||||||
keySymString = XKeysymToString(ks);
|
keySymString = XKeysymToString(ks);
|
||||||
XtVaGetValues(w,
|
XtVaGetValues(w,
|
||||||
@ -4404,7 +4404,7 @@ _HTMLpwdInput(
|
|||||||
|
|
||||||
if ((!strcmp("BackSpace",keySymString))
|
if ((!strcmp("BackSpace",keySymString))
|
||||||
|| (!strcmp("Backspace",keySymString))
|
|| (!strcmp("Backspace",keySymString))
|
||||||
|| (!strcmp("Delete",keySymString)) )
|
|| (!strcmp("Delete",keySymString)) )
|
||||||
{
|
{
|
||||||
insertPos --;
|
insertPos --;
|
||||||
|
|
||||||
@ -4421,7 +4421,7 @@ _HTMLpwdInput(
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
XtCallActionProc(w,
|
XtCallActionProc(w,
|
||||||
insertPos>-1 ? "delete-previous-character" :
|
insertPos>-1 ? "delete-previous-character" :
|
||||||
"delete-next-character",
|
"delete-next-character",
|
||||||
event, NULL,0);
|
event, NULL,0);
|
||||||
@ -4440,15 +4440,15 @@ _HTMLpwdInput(
|
|||||||
if (passwdLength < maxLength)
|
if (passwdLength < maxLength)
|
||||||
{
|
{
|
||||||
char *pwd = wptr->password =
|
char *pwd = wptr->password =
|
||||||
(char *)realloc(wptr->password,
|
(char *)realloc(wptr->password,
|
||||||
sizeof(char)*(passwdLength+2));
|
sizeof(char)*(passwdLength+2));
|
||||||
for (i=passwdLength+1; i>insertPos; i--)
|
for (i=passwdLength+1; i>insertPos; i--)
|
||||||
pwd[i] = pwd[i-1];
|
pwd[i] = pwd[i-1];
|
||||||
|
|
||||||
pwd[insertPos] = buffer[0];
|
pwd[insertPos] = buffer[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (wptr->password == NULL)
|
if (wptr->password == NULL)
|
||||||
wptr->password = (char *)malloc(sizeof(char)*2);
|
wptr->password = (char *)malloc(sizeof(char)*2);
|
||||||
@ -4508,19 +4508,19 @@ SetValues(
|
|||||||
if (request->html.num_anchor_underlines < 0)
|
if (request->html.num_anchor_underlines < 0)
|
||||||
{
|
{
|
||||||
new->html.num_anchor_underlines = 0;
|
new->html.num_anchor_underlines = 0;
|
||||||
}
|
}
|
||||||
if (request->html.num_anchor_underlines > MAX_UNDERLINES)
|
if (request->html.num_anchor_underlines > MAX_UNDERLINES)
|
||||||
{
|
{
|
||||||
new->html.num_anchor_underlines = MAX_UNDERLINES;
|
new->html.num_anchor_underlines = MAX_UNDERLINES;
|
||||||
}
|
}
|
||||||
if (request->html.num_visitedAnchor_underlines < 0)
|
if (request->html.num_visitedAnchor_underlines < 0)
|
||||||
{
|
{
|
||||||
new->html.num_visitedAnchor_underlines = 0;
|
new->html.num_visitedAnchor_underlines = 0;
|
||||||
}
|
}
|
||||||
if (request->html.num_visitedAnchor_underlines > MAX_UNDERLINES)
|
if (request->html.num_visitedAnchor_underlines > MAX_UNDERLINES)
|
||||||
{
|
{
|
||||||
new->html.num_visitedAnchor_underlines = MAX_UNDERLINES;
|
new->html.num_visitedAnchor_underlines = MAX_UNDERLINES;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*reformatted = 0;*/
|
/*reformatted = 0;*/
|
||||||
if ((request->html.raw_text != current->html.raw_text)||
|
if ((request->html.raw_text != current->html.raw_text)||
|
||||||
@ -4778,7 +4778,7 @@ ConvertSelection(w, selection, target, type, value, length, format)
|
|||||||
bcopy((char*)std_targets, (char*)targetP,
|
bcopy((char*)std_targets, (char*)targetP,
|
||||||
sizeof(Atom)*std_length);
|
sizeof(Atom)*std_length);
|
||||||
*/
|
*/
|
||||||
memcpy((char*)targetP, (char*)std_targets,
|
memcpy((char*)targetP, (char*)std_targets,
|
||||||
sizeof(Atom)*std_length);
|
sizeof(Atom)*std_length);
|
||||||
XtFree((char*)std_targets);
|
XtFree((char*)std_targets);
|
||||||
*type = XA_ATOM;
|
*type = XA_ATOM;
|
||||||
@ -5209,7 +5209,7 @@ HTMLGotoId(Widget w, int element_id, int correction)
|
|||||||
#else
|
#else
|
||||||
ScrollToPos(hw->html.vbar, hw, newy);
|
ScrollToPos(hw->html.vbar, hw, newy);
|
||||||
ScrollToPos(hw->html.hbar, hw, 0);
|
ScrollToPos(hw->html.hbar, hw, 0);
|
||||||
setScrollBar(hw->html.vbar, newy,
|
setScrollBar(hw->html.vbar, newy,
|
||||||
hw->html.doc_height,
|
hw->html.doc_height,
|
||||||
hw->html.view_height);
|
hw->html.view_height);
|
||||||
#endif
|
#endif
|
||||||
@ -6104,7 +6104,7 @@ HTMLSetText(Widget w, char *text, char *header_text, char *footer_text, int elem
|
|||||||
InitBody((Widget)hw);
|
InitBody((Widget)hw);
|
||||||
|
|
||||||
/* restore default colors as required */
|
/* restore default colors as required */
|
||||||
|
|
||||||
if(hw->manager.foreground != hw->html.foreground_SAVE) {
|
if(hw->manager.foreground != hw->html.foreground_SAVE) {
|
||||||
XFreeColors(XtDisplay(hw),hw->core.colormap,
|
XFreeColors(XtDisplay(hw),hw->core.colormap,
|
||||||
&hw->manager.foreground,1,0);
|
&hw->manager.foreground,1,0);
|
||||||
@ -6115,12 +6115,12 @@ HTMLSetText(Widget w, char *text, char *header_text, char *footer_text, int elem
|
|||||||
&hw->html.anchor_fg,1,0);
|
&hw->html.anchor_fg,1,0);
|
||||||
hw->html.anchor_fg = hw->html.anchor_fg_SAVE;
|
hw->html.anchor_fg = hw->html.anchor_fg_SAVE;
|
||||||
}
|
}
|
||||||
if(hw->html.visitedAnchor_fg != hw->html.visitedAnchor_fg_SAVE){
|
if(hw->html.visitedAnchor_fg != hw->html.visitedAnchor_fg_SAVE){
|
||||||
XFreeColors(XtDisplay(hw),hw->core.colormap,
|
XFreeColors(XtDisplay(hw),hw->core.colormap,
|
||||||
&hw->html.visitedAnchor_fg,1,0);
|
&hw->html.visitedAnchor_fg,1,0);
|
||||||
hw->html.visitedAnchor_fg = hw->html.visitedAnchor_fg_SAVE;
|
hw->html.visitedAnchor_fg = hw->html.visitedAnchor_fg_SAVE;
|
||||||
}
|
}
|
||||||
if(hw->html.activeAnchor_fg != hw->html.activeAnchor_fg_SAVE){
|
if(hw->html.activeAnchor_fg != hw->html.activeAnchor_fg_SAVE){
|
||||||
XFreeColors(XtDisplay(hw),hw->core.colormap,
|
XFreeColors(XtDisplay(hw),hw->core.colormap,
|
||||||
&hw->html.activeAnchor_fg,1,0);
|
&hw->html.activeAnchor_fg,1,0);
|
||||||
hw->html.activeAnchor_fg = hw->html.activeAnchor_fg_SAVE;
|
hw->html.activeAnchor_fg = hw->html.activeAnchor_fg_SAVE;
|
||||||
@ -6129,13 +6129,13 @@ HTMLSetText(Widget w, char *text, char *header_text, char *footer_text, int elem
|
|||||||
XFreeColors(XtDisplay(hw),hw->core.colormap,
|
XFreeColors(XtDisplay(hw),hw->core.colormap,
|
||||||
&hw->manager.top_shadow_color,1,0);
|
&hw->manager.top_shadow_color,1,0);
|
||||||
hw->manager.top_shadow_color = hw->html.top_color_SAVE;
|
hw->manager.top_shadow_color = hw->html.top_color_SAVE;
|
||||||
}
|
}
|
||||||
if(hw->html.bottom_color_SAVE != hw->manager.bottom_shadow_color){
|
if(hw->html.bottom_color_SAVE != hw->manager.bottom_shadow_color){
|
||||||
XFreeColors(XtDisplay(hw),hw->core.colormap,
|
XFreeColors(XtDisplay(hw),hw->core.colormap,
|
||||||
&hw->manager.bottom_shadow_color,1,0);
|
&hw->manager.bottom_shadow_color,1,0);
|
||||||
hw->manager.bottom_shadow_color = hw->html.bottom_color_SAVE;
|
hw->manager.bottom_shadow_color = hw->html.bottom_color_SAVE;
|
||||||
}
|
}
|
||||||
if(hw->core.background_pixel != hw->html.background_SAVE){
|
if(hw->core.background_pixel != hw->html.background_SAVE){
|
||||||
XFreeColors(XtDisplay(hw),hw->core.colormap,
|
XFreeColors(XtDisplay(hw),hw->core.colormap,
|
||||||
&hw->core.background_pixel,1,0);
|
&hw->core.background_pixel,1,0);
|
||||||
hw->html.activeAnchor_bg = hw->html.activeAnchor_bg_SAVE;
|
hw->html.activeAnchor_bg = hw->html.activeAnchor_bg_SAVE;
|
||||||
@ -6277,7 +6277,7 @@ HTMLSetText(Widget w, char *text, char *header_text, char *footer_text, int elem
|
|||||||
/*
|
/*
|
||||||
* Display the new text
|
* Display the new text
|
||||||
*/
|
*/
|
||||||
ViewClearAndRefresh(hw);
|
ViewClearAndRefresh(hw);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear any previous selection
|
* Clear any previous selection
|
||||||
@ -6897,7 +6897,7 @@ HTMLSearchText (Widget w, char *pattern, ElementRef *m_start, ElementRef *m_end,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* the following is a hack to make the html widget not acknowledge
|
/* the following is a hack to make the html widget not acknowledge
|
||||||
any button events while it is busy so that the rbm will not grab the
|
any button events while it is busy so that the rbm will not grab the
|
||||||
server. Hopefully this will be removed when the application is re-written
|
server. Hopefully this will be removed when the application is re-written
|
||||||
to pay more attention to the event loop - TPR 2/9/96 */
|
to pay more attention to the event loop - TPR 2/9/96 */
|
||||||
|
|
||||||
@ -6913,8 +6913,8 @@ void HTMLSetAppInsensitive(Widget hw)
|
|||||||
height = hw->core.height;
|
height = hw->core.height;
|
||||||
|
|
||||||
/* ???? Should this be cast to a HTMLWidget and XtWindow changed to html.view*/
|
/* ???? Should this be cast to a HTMLWidget and XtWindow changed to html.view*/
|
||||||
sens_win = XCreateWindow(XtDisplay((Widget) hw), XtWindow(hw), x,
|
sens_win = XCreateWindow(XtDisplay((Widget) hw), XtWindow(hw), x,
|
||||||
y, width, height, 0,CopyFromParent, InputOnly,
|
y, width, height, 0,CopyFromParent, InputOnly,
|
||||||
CopyFromParent, 0, NULL);
|
CopyFromParent, 0, NULL);
|
||||||
XMapRaised(XtDisplay((Widget) hw), sens_win);
|
XMapRaised(XtDisplay((Widget) hw), sens_win);
|
||||||
}
|
}
|
||||||
@ -6931,7 +6931,7 @@ void HTMLSetAppSensitive(Widget hw)
|
|||||||
*
|
*
|
||||||
* Fixed up and rewritten by SWP...
|
* Fixed up and rewritten by SWP...
|
||||||
*/
|
*/
|
||||||
void HTMLDrawBackgroundImage(Widget wid, int x, int y, int width,
|
void HTMLDrawBackgroundImage(Widget wid, int x, int y, int width,
|
||||||
int height) {
|
int height) {
|
||||||
|
|
||||||
int w_whole=0, h_whole=0,
|
int w_whole=0, h_whole=0,
|
||||||
@ -6966,7 +6966,7 @@ HTMLWidget hw = (HTMLWidget) wid;
|
|||||||
* Figure out the height of the area to draw.
|
* Figure out the height of the area to draw.
|
||||||
* If there is a height offset, index the number of height tiles.
|
* If there is a height offset, index the number of height tiles.
|
||||||
*/
|
*/
|
||||||
w_start_offset = (x+hw->html.scroll_x) % hw->html.bg_width;
|
w_start_offset = (x+hw->html.scroll_x) % hw->html.bg_width;
|
||||||
if (w_start_offset || (!w_start_offset && width<hw->html.bg_width)) {
|
if (w_start_offset || (!w_start_offset && width<hw->html.bg_width)) {
|
||||||
w_whole++;
|
w_whole++;
|
||||||
start_width=hw->html.bg_width-w_start_offset;
|
start_width=hw->html.bg_width-w_start_offset;
|
||||||
@ -7129,7 +7129,7 @@ void HTMLSetFocusPolicy(Widget w, int to)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
XtVaSetValues(shell, XmNkeyboardFocusPolicy, XmEXPLICIT, NULL);
|
XtVaSetValues(shell, XmNkeyboardFocusPolicy, XmEXPLICIT, NULL);
|
||||||
/* when we have preference dialog this will have to
|
/* when we have preference dialog this will have to
|
||||||
undo all the translations that are currently installed
|
undo all the translations that are currently installed
|
||||||
in the widgets and set the keyboardFocus policy of the
|
in the widgets and set the keyboardFocus policy of the
|
||||||
toplevel shell to pointer */
|
toplevel shell to pointer */
|
||||||
|
@ -134,7 +134,7 @@ extern int HTMLSearchText (Widget w, char *pattern,
|
|||||||
extern void HTMLSetAppInsensitive(Widget hw);
|
extern void HTMLSetAppInsensitive(Widget hw);
|
||||||
extern void HTMLSetAppSensitive(Widget hw);
|
extern void HTMLSetAppSensitive(Widget hw);
|
||||||
extern void HTMLTraverseTabGroups();
|
extern void HTMLTraverseTabGroups();
|
||||||
extern void HTMLDrawBackgroundImage(Widget w, int x, int y, int width,
|
extern void HTMLDrawBackgroundImage(Widget w, int x, int y, int width,
|
||||||
int height);
|
int height);
|
||||||
extern void HTMLSetFocusPolicy(Widget w, int to);
|
extern void HTMLSetFocusPolicy(Widget w, int to);
|
||||||
#endif /* _NO_PROTO */
|
#endif /* _NO_PROTO */
|
||||||
@ -259,7 +259,7 @@ typedef struct table_field {
|
|||||||
int colWidth; /* uniform width for all element in this col*/
|
int colWidth; /* uniform width for all element in this col*/
|
||||||
int rowHeight; /* uniform hieght for all element in the row*/
|
int rowHeight; /* uniform hieght for all element in the row*/
|
||||||
Boolean header; /* is this field created with <TH> or <TD> */
|
Boolean header; /* is this field created with <TH> or <TD> */
|
||||||
|
|
||||||
/* contents */
|
/* contents */
|
||||||
FieldType type;
|
FieldType type;
|
||||||
char *text;
|
char *text;
|
||||||
@ -429,9 +429,9 @@ struct delay_rec {
|
|||||||
#define M_TABLE_HEADER 47
|
#define M_TABLE_HEADER 47
|
||||||
#define M_TABLE_ROW 48
|
#define M_TABLE_ROW 48
|
||||||
#define M_TABLE_DATA 49
|
#define M_TABLE_DATA 49
|
||||||
#define M_SUP 50
|
#define M_SUP 50
|
||||||
#define M_SUB 51
|
#define M_SUB 51
|
||||||
#define M_FIGURE 52
|
#define M_FIGURE 52
|
||||||
#define M_COMMENT 53
|
#define M_COMMENT 53
|
||||||
#define M_DOC_HEAD 54 /* amb 2 */
|
#define M_DOC_HEAD 54 /* amb 2 */
|
||||||
#define M_UNDERLINED 55 /* amb 2 */
|
#define M_UNDERLINED 55 /* amb 2 */
|
||||||
|
@ -144,7 +144,7 @@ typedef struct _HTMLPart
|
|||||||
Pixmap bgmap_SAVE;
|
Pixmap bgmap_SAVE;
|
||||||
Pixmap bgclip_SAVE;
|
Pixmap bgclip_SAVE;
|
||||||
int bg_height;
|
int bg_height;
|
||||||
int bg_width;
|
int bg_width;
|
||||||
|
|
||||||
Pixel foreground_SAVE;
|
Pixel foreground_SAVE;
|
||||||
Pixel anchor_fg_SAVE;
|
Pixel anchor_fg_SAVE;
|
||||||
@ -152,9 +152,9 @@ typedef struct _HTMLPart
|
|||||||
Pixel activeAnchor_fg_SAVE;
|
Pixel activeAnchor_fg_SAVE;
|
||||||
Pixel activeAnchor_bg_SAVE;
|
Pixel activeAnchor_bg_SAVE;
|
||||||
Pixel top_color_SAVE;
|
Pixel top_color_SAVE;
|
||||||
Pixel bottom_color_SAVE;
|
Pixel bottom_color_SAVE;
|
||||||
Pixel background_SAVE;
|
Pixel background_SAVE;
|
||||||
|
|
||||||
int num_anchor_underlines;
|
int num_anchor_underlines;
|
||||||
int num_visitedAnchor_underlines;
|
int num_visitedAnchor_underlines;
|
||||||
Boolean dashed_anchor_lines;
|
Boolean dashed_anchor_lines;
|
||||||
@ -191,7 +191,7 @@ typedef struct _HTMLPart
|
|||||||
XtPointer previously_visited_test;
|
XtPointer previously_visited_test;
|
||||||
XtPointer resolveImage;
|
XtPointer resolveImage;
|
||||||
XtPointer resolveDelayedImage;
|
XtPointer resolveDelayedImage;
|
||||||
|
|
||||||
XtPointer pointer_motion_callback;
|
XtPointer pointer_motion_callback;
|
||||||
|
|
||||||
/* PRIVATE */
|
/* PRIVATE */
|
||||||
|
@ -564,7 +564,7 @@ CreateElement(hw, type, fp, x, y, edata, w, h, bw)
|
|||||||
eptr->anchorSubject = ParseMarkTag(AnchorText,
|
eptr->anchorSubject = ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_SUBJECT);
|
MT_ANCHOR, AT_SUBJECT);
|
||||||
if (!eptr->anchorSubject) {
|
if (!eptr->anchorSubject) {
|
||||||
eptr->anchorSubject =
|
eptr->anchorSubject =
|
||||||
ParseMarkTag(AnchorText,
|
ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_TITLE);
|
MT_ANCHOR, AT_TITLE);
|
||||||
}
|
}
|
||||||
@ -691,7 +691,7 @@ CreateElement(hw, type, fp, x, y, edata, w, h, bw)
|
|||||||
eptr->underline_number = 0;
|
eptr->underline_number = 0;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (eptr->edata != NULL)
|
if (eptr->edata != NULL)
|
||||||
{
|
{
|
||||||
free((char *)eptr->edata);
|
free((char *)eptr->edata);
|
||||||
@ -728,7 +728,7 @@ CreateElement(hw, type, fp, x, y, edata, w, h, bw)
|
|||||||
eptr->anchorSubject= ParseMarkTag(AnchorText,
|
eptr->anchorSubject= ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_SUBJECT);
|
MT_ANCHOR, AT_SUBJECT);
|
||||||
if (!eptr->anchorSubject) {
|
if (!eptr->anchorSubject) {
|
||||||
eptr->anchorSubject =
|
eptr->anchorSubject =
|
||||||
ParseMarkTag(AnchorText,
|
ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_TITLE);
|
MT_ANCHOR, AT_TITLE);
|
||||||
}
|
}
|
||||||
@ -773,7 +773,7 @@ CreateElement(hw, type, fp, x, y, edata, w, h, bw)
|
|||||||
eptr->anchorSubject = ParseMarkTag(AnchorText,
|
eptr->anchorSubject = ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_SUBJECT);
|
MT_ANCHOR, AT_SUBJECT);
|
||||||
if (!eptr->anchorSubject) {
|
if (!eptr->anchorSubject) {
|
||||||
eptr->anchorSubject =
|
eptr->anchorSubject =
|
||||||
ParseMarkTag(AnchorText,
|
ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_TITLE);
|
MT_ANCHOR, AT_TITLE);
|
||||||
}
|
}
|
||||||
@ -963,7 +963,7 @@ SetElement(hw, type, fp, x, y, edata, w, h, bw)
|
|||||||
eptr->anchorSubject= ParseMarkTag(AnchorText,
|
eptr->anchorSubject= ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_SUBJECT);
|
MT_ANCHOR, AT_SUBJECT);
|
||||||
if (!eptr->anchorSubject) {
|
if (!eptr->anchorSubject) {
|
||||||
eptr->anchorSubject =
|
eptr->anchorSubject =
|
||||||
ParseMarkTag(AnchorText,
|
ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_TITLE);
|
MT_ANCHOR, AT_TITLE);
|
||||||
}
|
}
|
||||||
@ -1226,7 +1226,7 @@ SetElement(hw, type, fp, x, y, edata, w, h, bw)
|
|||||||
ParseMarkTag(AnchorText,
|
ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_SUBJECT);
|
MT_ANCHOR, AT_SUBJECT);
|
||||||
if (!eptr->anchorSubject) {
|
if (!eptr->anchorSubject) {
|
||||||
eptr->anchorSubject =
|
eptr->anchorSubject =
|
||||||
ParseMarkTag(AnchorText,
|
ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_TITLE);
|
MT_ANCHOR, AT_TITLE);
|
||||||
}
|
}
|
||||||
@ -1307,7 +1307,7 @@ SetElement(hw, type, fp, x, y, edata, w, h, bw)
|
|||||||
eptr->anchorSubject = ParseMarkTag(AnchorText,
|
eptr->anchorSubject = ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_SUBJECT);
|
MT_ANCHOR, AT_SUBJECT);
|
||||||
if (!eptr->anchorSubject) {
|
if (!eptr->anchorSubject) {
|
||||||
eptr->anchorSubject =
|
eptr->anchorSubject =
|
||||||
ParseMarkTag(AnchorText,
|
ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_TITLE);
|
MT_ANCHOR, AT_TITLE);
|
||||||
}
|
}
|
||||||
@ -1466,7 +1466,7 @@ SetElement(hw, type, fp, x, y, edata, w, h, bw)
|
|||||||
eptr->anchorSubject= ParseMarkTag(AnchorText,
|
eptr->anchorSubject= ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_SUBJECT);
|
MT_ANCHOR, AT_SUBJECT);
|
||||||
if (!eptr->anchorSubject) {
|
if (!eptr->anchorSubject) {
|
||||||
eptr->anchorSubject =
|
eptr->anchorSubject =
|
||||||
ParseMarkTag(AnchorText,
|
ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_TITLE);
|
MT_ANCHOR, AT_TITLE);
|
||||||
}
|
}
|
||||||
@ -1527,7 +1527,7 @@ SetElement(hw, type, fp, x, y, edata, w, h, bw)
|
|||||||
eptr->anchorSubject= ParseMarkTag(AnchorText,
|
eptr->anchorSubject= ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_SUBJECT);
|
MT_ANCHOR, AT_SUBJECT);
|
||||||
if (!eptr->anchorSubject) {
|
if (!eptr->anchorSubject) {
|
||||||
eptr->anchorSubject =
|
eptr->anchorSubject =
|
||||||
ParseMarkTag(AnchorText,
|
ParseMarkTag(AnchorText,
|
||||||
MT_ANCHOR, AT_TITLE);
|
MT_ANCHOR, AT_TITLE);
|
||||||
}
|
}
|
||||||
@ -1591,7 +1591,7 @@ SetElement(hw, type, fp, x, y, edata, w, h, bw)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Change our drawing font
|
* Change our drawing font
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
NewFont(fp)
|
NewFont(fp)
|
||||||
@ -2206,7 +2206,7 @@ PreformatPlace(hw, mptr, x, y, width)
|
|||||||
SetElement(hw, E_TEXT, currentFont,
|
SetElement(hw, E_TEXT, currentFont,
|
||||||
line_x, *y, line, NULL, NULL, IMAGE_DEFAULT_BORDER);
|
line_x, *y, line, NULL, NULL, IMAGE_DEFAULT_BORDER);
|
||||||
/*
|
/*
|
||||||
* Save width here to avoid an
|
* Save width here to avoid an
|
||||||
* XTextExtents call later.
|
* XTextExtents call later.
|
||||||
*/
|
*/
|
||||||
Current->width = *x - line_x + 1;
|
Current->width = *x - line_x + 1;
|
||||||
@ -2270,7 +2270,7 @@ PreformatPlace(hw, mptr, x, y, width)
|
|||||||
SetElement(hw, E_TEXT, currentFont,
|
SetElement(hw, E_TEXT, currentFont,
|
||||||
line_x, *y, line, NULL, NULL, IMAGE_DEFAULT_BORDER);
|
line_x, *y, line, NULL, NULL, IMAGE_DEFAULT_BORDER);
|
||||||
/*
|
/*
|
||||||
* Save width here to avoid an
|
* Save width here to avoid an
|
||||||
* XTextExtents call later.
|
* XTextExtents call later.
|
||||||
*/
|
*/
|
||||||
Current->width = *x - line_x + 1;
|
Current->width = *x - line_x + 1;
|
||||||
@ -2498,7 +2498,7 @@ FormatPlace(hw, mptr, x, y, width)
|
|||||||
SetElement(hw, E_TEXT, currentFont,
|
SetElement(hw, E_TEXT, currentFont,
|
||||||
line_x, *y, line, NULL, NULL, IMAGE_DEFAULT_BORDER);
|
line_x, *y, line, NULL, NULL, IMAGE_DEFAULT_BORDER);
|
||||||
/*
|
/*
|
||||||
* Save width here to avoid an
|
* Save width here to avoid an
|
||||||
* XTextExtents call later.
|
* XTextExtents call later.
|
||||||
*/
|
*/
|
||||||
Current->width = *x - line_x + 1;
|
Current->width = *x - line_x + 1;
|
||||||
@ -2651,7 +2651,7 @@ FormatPlace(hw, mptr, x, y, width)
|
|||||||
SetElement(hw, E_TEXT, currentFont,
|
SetElement(hw, E_TEXT, currentFont,
|
||||||
line_x, *y, line, NULL, NULL, IMAGE_DEFAULT_BORDER);
|
line_x, *y, line, NULL, NULL, IMAGE_DEFAULT_BORDER);
|
||||||
/*
|
/*
|
||||||
* Save width here to avoid an
|
* Save width here to avoid an
|
||||||
* XTextExtents call later.
|
* XTextExtents call later.
|
||||||
*/
|
*/
|
||||||
Current->width = *x - line_x + 1;
|
Current->width = *x - line_x + 1;
|
||||||
@ -2679,7 +2679,7 @@ FormatPlace(hw, mptr, x, y, width)
|
|||||||
SetElement(hw, E_TEXT, currentFont,
|
SetElement(hw, E_TEXT, currentFont,
|
||||||
line_x, *y, line, NULL, NULL, IMAGE_DEFAULT_BORDER);
|
line_x, *y, line, NULL, NULL, IMAGE_DEFAULT_BORDER);
|
||||||
/*
|
/*
|
||||||
* Save width here to avoid an
|
* Save width here to avoid an
|
||||||
* XTextExtents call later.
|
* XTextExtents call later.
|
||||||
*/
|
*/
|
||||||
Current->width = *x - line_x + 1;
|
Current->width = *x - line_x + 1;
|
||||||
@ -2711,8 +2711,8 @@ int extra;
|
|||||||
|
|
||||||
extra = 10;
|
extra = 10;
|
||||||
|
|
||||||
LineFeed(hw, x, y);
|
LineFeed(hw, x, y);
|
||||||
SetElement(hw, E_TABLE, currentFont, *x, *y, (char *) mptr, NULL, NULL, IMAGE_DEFAULT_BORDER);
|
SetElement(hw, E_TABLE, currentFont, *x, *y, (char *) mptr, NULL, NULL, IMAGE_DEFAULT_BORDER);
|
||||||
if (!Current->table_data) {
|
if (!Current->table_data) {
|
||||||
/* no table */
|
/* no table */
|
||||||
return 0;
|
return 0;
|
||||||
@ -2724,7 +2724,7 @@ int extra;
|
|||||||
BaseLine = Current->table_data->height;
|
BaseLine = Current->table_data->height;
|
||||||
|
|
||||||
*x += Current->width + 1;
|
*x += Current->width + 1;
|
||||||
LineFeed(hw, x, y);
|
LineFeed(hw, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2769,7 +2769,7 @@ ImagePlace(hw, mptr, x, y, width)
|
|||||||
SetElement(hw, E_TEXT, currentFont,
|
SetElement(hw, E_TEXT, currentFont,
|
||||||
*x, *y, tptr, NULL, NULL, IMAGE_DEFAULT_BORDER);
|
*x, *y, tptr, NULL, NULL, IMAGE_DEFAULT_BORDER);
|
||||||
/*
|
/*
|
||||||
* Save width here to avoid an
|
* Save width here to avoid an
|
||||||
* XTextExtents call later.
|
* XTextExtents call later.
|
||||||
*/
|
*/
|
||||||
Current->width = all.width;
|
Current->width = all.width;
|
||||||
@ -2877,7 +2877,7 @@ ImagePlace(hw, mptr, x, y, width)
|
|||||||
* Yank out the name field, and stick it in text.
|
* Yank out the name field, and stick it in text.
|
||||||
* We may use this for ALT to at some later date.
|
* We may use this for ALT to at some later date.
|
||||||
*/
|
*/
|
||||||
if (Current->pic_data != NULL)
|
if (Current->pic_data != NULL)
|
||||||
{
|
{
|
||||||
tptr = ParseMarkTag(mptr->start, MT_IMAGE, "NAME");
|
tptr = ParseMarkTag(mptr->start, MT_IMAGE, "NAME");
|
||||||
/*temp******/
|
/*temp******/
|
||||||
@ -2895,7 +2895,7 @@ ImagePlace(hw, mptr, x, y, width)
|
|||||||
* change the size, or anchor status of the image, thus we MUST
|
* change the size, or anchor status of the image, thus we MUST
|
||||||
* doit before we muck with the Baseline and stuff.
|
* doit before we muck with the Baseline and stuff.
|
||||||
*/
|
*/
|
||||||
if (Current->pic_data != NULL)
|
if (Current->pic_data != NULL)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Handle the USEMAP attribute of IMG tags. This is used for
|
* Handle the USEMAP attribute of IMG tags. This is used for
|
||||||
@ -2949,7 +2949,7 @@ ImagePlace(hw, mptr, x, y, width)
|
|||||||
*/
|
*/
|
||||||
tptr = ParseMarkTag(mptr->start, MT_IMAGE, "ALIGN");
|
tptr = ParseMarkTag(mptr->start, MT_IMAGE, "ALIGN");
|
||||||
/*temp******/
|
/*temp******/
|
||||||
if (!tptr)
|
if (!tptr)
|
||||||
{
|
{
|
||||||
tptr = ParseMarkTag(mptr->start, MT_FIGURE, "ALIGN");
|
tptr = ParseMarkTag(mptr->start, MT_FIGURE, "ALIGN");
|
||||||
}
|
}
|
||||||
@ -4865,7 +4865,7 @@ FormatChunk(hw, x, y)
|
|||||||
* Format all objects
|
* Format all objects
|
||||||
*/
|
*/
|
||||||
mptr = hw->html.html_objects;
|
mptr = hw->html.html_objects;
|
||||||
Last = NULL;
|
Last = NULL;
|
||||||
while (mptr != NULL)
|
while (mptr != NULL)
|
||||||
{
|
{
|
||||||
TriggerMarkChanges(hw, &mptr, x, y);
|
TriggerMarkChanges(hw, &mptr, x, y);
|
||||||
@ -5781,7 +5781,7 @@ XGCValues values;
|
|||||||
eptr->pic_data, 0);
|
eptr->pic_data, 0);
|
||||||
if (eptr->pic_data->transparent &&
|
if (eptr->pic_data->transparent &&
|
||||||
eptr->pic_data->clip==None) {
|
eptr->pic_data->clip==None) {
|
||||||
eptr->pic_data->clip =
|
eptr->pic_data->clip =
|
||||||
XCreatePixmapFromBitmapData
|
XCreatePixmapFromBitmapData
|
||||||
(XtDisplay(hw),
|
(XtDisplay(hw),
|
||||||
XtWindow(hw->html.view),
|
XtWindow(hw->html.view),
|
||||||
@ -5881,7 +5881,7 @@ XGCValues values;
|
|||||||
values.clip_x_origin=x+extra;
|
values.clip_x_origin=x+extra;
|
||||||
values.clip_y_origin=y+extra;
|
values.clip_y_origin=y+extra;
|
||||||
valuemask=GCClipMask|GCClipXOrigin|GCClipYOrigin;
|
valuemask=GCClipMask|GCClipXOrigin|GCClipYOrigin;
|
||||||
XChangeGC(XtDisplay(hw),
|
XChangeGC(XtDisplay(hw),
|
||||||
hw->html.drawGC,
|
hw->html.drawGC,
|
||||||
valuemask, &values);
|
valuemask, &values);
|
||||||
|
|
||||||
@ -6004,7 +6004,7 @@ PlaceLine(hw, line)
|
|||||||
break;
|
break;
|
||||||
case E_LINEFEED:
|
case E_LINEFEED:
|
||||||
if(!hw->html.bg_image)
|
if(!hw->html.bg_image)
|
||||||
LinefeedRefresh(hw, eptr);
|
LinefeedRefresh(hw, eptr);
|
||||||
break;
|
break;
|
||||||
case E_IMAGE:
|
case E_IMAGE:
|
||||||
ImageRefresh(hw, eptr);
|
ImageRefresh(hw, eptr);
|
||||||
|
@ -465,20 +465,20 @@ MakeImage(dsp, data, width, height, depth, img_info, clip)
|
|||||||
bit_data = (unsigned char *)malloc(width * height * 2);
|
bit_data = (unsigned char *)malloc(width * height * 2);
|
||||||
bitp = bit_data;
|
bitp = bit_data;
|
||||||
datap = data;
|
datap = data;
|
||||||
|
|
||||||
theVisual = DefaultVisual(dsp, DefaultScreen(dsp));
|
theVisual = DefaultVisual(dsp, DefaultScreen(dsp));
|
||||||
rshift = 15 - highbit(theVisual->red_mask);
|
rshift = 15 - highbit(theVisual->red_mask);
|
||||||
gshift = 15 - highbit(theVisual->green_mask);
|
gshift = 15 - highbit(theVisual->green_mask);
|
||||||
bshift = 15 - highbit(theVisual->blue_mask);
|
bshift = 15 - highbit(theVisual->blue_mask);
|
||||||
bmap_order = BitmapBitOrder(dsp);
|
bmap_order = BitmapBitOrder(dsp);
|
||||||
|
|
||||||
for (w = (width * height); w > 0; w--)
|
for (w = (width * height); w > 0; w--)
|
||||||
{
|
{
|
||||||
temp = (((img_info->reds[(int)*datap] >> rshift) &
|
temp = (((img_info->reds[(int)*datap] >> rshift) &
|
||||||
theVisual->red_mask) |
|
theVisual->red_mask) |
|
||||||
((img_info->greens[(int)*datap] >> gshift) &
|
((img_info->greens[(int)*datap] >> gshift) &
|
||||||
theVisual->green_mask) |
|
theVisual->green_mask) |
|
||||||
((img_info->blues[(int)*datap] >> bshift) &
|
((img_info->blues[(int)*datap] >> bshift) &
|
||||||
theVisual->blue_mask));
|
theVisual->blue_mask));
|
||||||
if (bmap_order == MSBFirst)
|
if (bmap_order == MSBFirst)
|
||||||
{
|
{
|
||||||
|
@ -241,7 +241,7 @@ ClearJot(hw, w, width, height)
|
|||||||
|
|
||||||
jptr = GetJot(w);
|
jptr = GetJot(w);
|
||||||
if (jptr == NULL)
|
if (jptr == NULL)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -253,7 +253,7 @@ ClearJot(hw, w, width, height)
|
|||||||
hw->html.drawGC,
|
hw->html.drawGC,
|
||||||
0, 0, jptr->width, jptr->height);
|
0, 0, jptr->width, jptr->height);
|
||||||
}
|
}
|
||||||
|
|
||||||
FreeStrokes(jptr->strokes);
|
FreeStrokes(jptr->strokes);
|
||||||
jptr->strokes = NULL;
|
jptr->strokes = NULL;
|
||||||
jptr->last_stroke = NULL;
|
jptr->last_stroke = NULL;
|
||||||
@ -319,7 +319,7 @@ EVJotExpose(w, data, event)
|
|||||||
|
|
||||||
jptr = GetJot(w);
|
jptr = GetJot(w);
|
||||||
if (jptr == NULL)
|
if (jptr == NULL)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -360,7 +360,7 @@ EVJotPress(w, data, event)
|
|||||||
|
|
||||||
jptr = GetJot(w);
|
jptr = GetJot(w);
|
||||||
if (jptr == NULL)
|
if (jptr == NULL)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -409,12 +409,12 @@ EVJotMove(w, data, event)
|
|||||||
|
|
||||||
jptr = GetJot(w);
|
jptr = GetJot(w);
|
||||||
if (jptr == NULL)
|
if (jptr == NULL)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jptr->drawing == False)
|
if (jptr->drawing == False)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -463,12 +463,12 @@ EVJotRelease(w, data, event)
|
|||||||
|
|
||||||
jptr = GetJot(w);
|
jptr = GetJot(w);
|
||||||
if (jptr == NULL)
|
if (jptr == NULL)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jptr->drawing == False)
|
if (jptr->drawing == False)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -521,7 +521,7 @@ EJB_JOTfromJot(w)
|
|||||||
|
|
||||||
jptr = GetJot(w);
|
jptr = GetJot(w);
|
||||||
if (jptr == NULL)
|
if (jptr == NULL)
|
||||||
{
|
{
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -648,12 +648,12 @@ JOTfromJot(w, buffer_len)
|
|||||||
|
|
||||||
jptr = GetJot(w);
|
jptr = GetJot(w);
|
||||||
if (jptr == NULL)
|
if (jptr == NULL)
|
||||||
{
|
{
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
dlen = sizeof(MY_INK_POINT) * jptr->stroke_cnt;
|
dlen = sizeof(MY_INK_POINT) * jptr->stroke_cnt;
|
||||||
|
|
||||||
dataArray = (MY_INK_POINT *)malloc(dlen);
|
dataArray = (MY_INK_POINT *)malloc(dlen);
|
||||||
cnt = 0;
|
cnt = 0;
|
||||||
sptr = jptr->strokes;
|
sptr = jptr->strokes;
|
||||||
@ -692,7 +692,7 @@ JOTfromJot(w, buffer_len)
|
|||||||
pptr = (INK_PENDATA_RECORD *)malloc(inkRecordPenDataSize(dlen));
|
pptr = (INK_PENDATA_RECORD *)malloc(inkRecordPenDataSize(dlen));
|
||||||
pptr->header.recordType = inkRecordPenData;
|
pptr->header.recordType = inkRecordPenData;
|
||||||
pptr->header.recordLength = inkRecordPenDataSize(dlen);
|
pptr->header.recordLength = inkRecordPenDataSize(dlen);
|
||||||
pptr->bounds.origin.x = jptr->min_x;
|
pptr->bounds.origin.x = jptr->min_x;
|
||||||
pptr->bounds.origin.y = jptr->min_y;
|
pptr->bounds.origin.y = jptr->min_y;
|
||||||
pptr->bounds.size.w = jptr->max_x - jptr->min_x + 1;
|
pptr->bounds.size.w = jptr->max_x - jptr->min_x + 1;
|
||||||
pptr->bounds.size.h = jptr->max_y - jptr->min_y + 1;
|
pptr->bounds.size.h = jptr->max_y - jptr->min_y + 1;
|
||||||
@ -719,7 +719,7 @@ JOTfromJot(w, buffer_len)
|
|||||||
bcopy((char *)pptr, (char *)(buffer + inkRecordBundleSize),
|
bcopy((char *)pptr, (char *)(buffer + inkRecordBundleSize),
|
||||||
inkRecordPenDataSize(dlen));
|
inkRecordPenDataSize(dlen));
|
||||||
*/
|
*/
|
||||||
memcpy((char *)(buffer + inkRecordBundleSize), (char *)pptr,
|
memcpy((char *)(buffer + inkRecordBundleSize), (char *)pptr,
|
||||||
inkRecordPenDataSize(dlen));
|
inkRecordPenDataSize(dlen));
|
||||||
/*
|
/*
|
||||||
bcopy((char *)eptr, (char *)(buffer + inkRecordBundleSize +
|
bcopy((char *)eptr, (char *)(buffer + inkRecordBundleSize +
|
||||||
|
@ -245,7 +245,7 @@ clean_white_space(txt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If there are more words, insert a space and if space was
|
* If there are more words, insert a space and if space was
|
||||||
* removed move up remaining text.
|
* removed move up remaining text.
|
||||||
*/
|
*/
|
||||||
*start++ = ' ';
|
*start++ = ' ';
|
||||||
@ -323,7 +323,7 @@ ExpandEscapes(esc, endp, termination)
|
|||||||
{
|
{
|
||||||
int escLen, ampLen;
|
int escLen, ampLen;
|
||||||
cnt = 0;
|
cnt = 0;
|
||||||
escLen = strlen(esc);
|
escLen = strlen(esc);
|
||||||
while (AmpEscapes[cnt].tag != NULL)
|
while (AmpEscapes[cnt].tag != NULL)
|
||||||
{
|
{
|
||||||
ampLen = strlen(AmpEscapes[cnt].tag);
|
ampLen = strlen(AmpEscapes[cnt].tag);
|
||||||
@ -657,7 +657,7 @@ get_mark(start, endp)
|
|||||||
ptr += 2;
|
ptr += 2;
|
||||||
while ((*ptr != '\0') && ((*ptr == ' ') || (*ptr == '\n')
|
while ((*ptr != '\0') && ((*ptr == ' ') || (*ptr == '\n')
|
||||||
|| (*ptr == '-') ))
|
|| (*ptr == '-') ))
|
||||||
ptr++; /* skip spaces and newlines */
|
ptr++; /* skip spaces and newlines */
|
||||||
if (*ptr == '>') /* completed end comment */
|
if (*ptr == '>') /* completed end comment */
|
||||||
{
|
{
|
||||||
*endp = ptr;
|
*endp = ptr;
|
||||||
@ -1048,13 +1048,13 @@ HTMLParse(old_list, str, hw)
|
|||||||
tmp_bgname=NULL;
|
tmp_bgname=NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mark->next = NULL;
|
mark->next = NULL;
|
||||||
current = AddObj(&list, current, mark, preformat);
|
current = AddObj(&list, current, mark, preformat);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
start = (char *)(end + 1);
|
start = (char *)(end + 1);
|
||||||
|
|
||||||
@ -1483,7 +1483,7 @@ AnchorTag(ptrp, startp, endp)
|
|||||||
ptr++;
|
ptr++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For a tag with no value, this is a boolean flag.
|
* For a tag with no value, this is a boolean flag.
|
||||||
* Return the string "1" so we know the tag is there.
|
* Return the string "1" so we know the tag is there.
|
||||||
|
@ -22,8 +22,8 @@ extern char *ParseMarkTag();
|
|||||||
extern int htmlwTrace;
|
extern int htmlwTrace;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Allocate a TableField and initialize to default values
|
/* Allocate a TableField and initialize to default values
|
||||||
* return 0 on failure
|
* return 0 on failure
|
||||||
*/
|
*/
|
||||||
static TableField *NewTableField()
|
static TableField *NewTableField()
|
||||||
{
|
{
|
||||||
@ -39,7 +39,7 @@ TableField *tf;
|
|||||||
tf->contHoriz = False;
|
tf->contHoriz = False;
|
||||||
tf->maxWidth = DEFAULT_FIELD_WIDTH;
|
tf->maxWidth = DEFAULT_FIELD_WIDTH;
|
||||||
tf->minWidth = DEFAULT_FIELD_WIDTH;
|
tf->minWidth = DEFAULT_FIELD_WIDTH;
|
||||||
tf->maxHeight = DEFAULT_FIELD_HEIGHT;
|
tf->maxHeight = DEFAULT_FIELD_HEIGHT;
|
||||||
tf->minHeight = DEFAULT_FIELD_HEIGHT;
|
tf->minHeight = DEFAULT_FIELD_HEIGHT;
|
||||||
tf->header = False;
|
tf->header = False;
|
||||||
|
|
||||||
@ -87,11 +87,11 @@ char *end;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* PourText() this routine pours a text string of a particular font into a
|
/* PourText() this routine pours a text string of a particular font into a
|
||||||
rectangular area of specified dimensions. The return value is a list of
|
rectangular area of specified dimensions. The return value is a list of
|
||||||
text lines that will fit within the given width.
|
text lines that will fit within the given width.
|
||||||
If a height is specified, then text will be truncated if necessary to fit.
|
If a height is specified, then text will be truncated if necessary to fit.
|
||||||
If height is 0, then all of the text is in the list.
|
If height is 0, then all of the text is in the list.
|
||||||
The actual pixel height of the text is returned in variable height.
|
The actual pixel height of the text is returned in variable height.
|
||||||
*/
|
*/
|
||||||
int PourText(text,font,width,height,percentVertSpace,formattedText,numberOfLines)
|
int PourText(text,font,width,height,percentVertSpace,formattedText,numberOfLines)
|
||||||
@ -131,7 +131,7 @@ int y;
|
|||||||
*numberOfLines = 0;
|
*numberOfLines = 0;
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
textList = ListCreate();
|
textList = ListCreate();
|
||||||
stringWidth = XTextWidth(font,text,strlen(text));
|
stringWidth = XTextWidth(font,text,strlen(text));
|
||||||
if (stringWidth < width) {
|
if (stringWidth < width) {
|
||||||
@ -154,7 +154,7 @@ int y;
|
|||||||
GetWord(textPtr,&wordStart,&wordEnd);
|
GetWord(textPtr,&wordStart,&wordEnd);
|
||||||
wordLength = (int) (wordEnd - wordStart);
|
wordLength = (int) (wordEnd - wordStart);
|
||||||
wordWidth = XTextWidth(font,wordStart, wordLength);
|
wordWidth = XTextWidth(font,wordStart, wordLength);
|
||||||
if ((builtWidth + spaceWidth + wordWidth) < width) {
|
if ((builtWidth + spaceWidth + wordWidth) < width) {
|
||||||
/* then add to line */
|
/* then add to line */
|
||||||
if (builtWidth) {
|
if (builtWidth) {
|
||||||
/* only add space if something on line already*/
|
/* only add space if something on line already*/
|
||||||
@ -164,7 +164,7 @@ int y;
|
|||||||
strncat(tmpBuff, wordStart, wordLength);
|
strncat(tmpBuff, wordStart, wordLength);
|
||||||
builtWidth += wordWidth;
|
builtWidth += wordWidth;
|
||||||
}
|
}
|
||||||
else if (wordWidth < width) {
|
else if (wordWidth < width) {
|
||||||
/* start new line */
|
/* start new line */
|
||||||
ListAddEntry(textList, strdup(tmpBuff));
|
ListAddEntry(textList, strdup(tmpBuff));
|
||||||
*tmpBuff = '\0';
|
*tmpBuff = '\0';
|
||||||
@ -174,10 +174,10 @@ int y;
|
|||||||
strncat(tmpBuff, wordStart, wordLength);
|
strncat(tmpBuff, wordStart, wordLength);
|
||||||
builtWidth += wordWidth;
|
builtWidth += wordWidth;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* word is too big to fit on a line */
|
/* word is too big to fit on a line */
|
||||||
/* so break up word */
|
/* so break up word */
|
||||||
|
|
||||||
/* start new line */
|
/* start new line */
|
||||||
ListAddEntry(textList, strdup(tmpBuff));
|
ListAddEntry(textList, strdup(tmpBuff));
|
||||||
*tmpBuff = '\0';
|
*tmpBuff = '\0';
|
||||||
@ -190,10 +190,10 @@ int y;
|
|||||||
while ((*wordEnd) && (width > wordWidth)) {
|
while ((*wordEnd) && (width > wordWidth)) {
|
||||||
wordEnd++;
|
wordEnd++;
|
||||||
wordLength = (int) (wordEnd - wordStart);
|
wordLength = (int) (wordEnd - wordStart);
|
||||||
wordWidth = XTextWidth(font,wordStart,
|
wordWidth = XTextWidth(font,wordStart,
|
||||||
wordLength);
|
wordLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
strncat(tmpBuff, wordStart, wordLength);
|
strncat(tmpBuff, wordStart, wordLength);
|
||||||
builtWidth += wordWidth;
|
builtWidth += wordWidth;
|
||||||
|
|
||||||
@ -244,7 +244,7 @@ int y;
|
|||||||
*numberOfLines = numLines;
|
*numberOfLines = numLines;
|
||||||
|
|
||||||
return(numLines);
|
return(numLines);
|
||||||
|
|
||||||
} /* PourText() */
|
} /* PourText() */
|
||||||
|
|
||||||
|
|
||||||
@ -331,7 +331,7 @@ int x,y;
|
|||||||
|
|
||||||
|
|
||||||
/* move 2D link list table to an array for speed */
|
/* move 2D link list table to an array for speed */
|
||||||
if (!(t->table = (TableField *) malloc(sizeof(TableField)
|
if (!(t->table = (TableField *) malloc(sizeof(TableField)
|
||||||
* t->numColumns * t->numRows))) {
|
* t->numColumns * t->numRows))) {
|
||||||
return(0); /* out of memory */
|
return(0); /* out of memory */
|
||||||
}
|
}
|
||||||
@ -341,7 +341,7 @@ int x,y;
|
|||||||
x = 0;
|
x = 0;
|
||||||
field = (TableField *) ListHead(rowList);
|
field = (TableField *) ListHead(rowList);
|
||||||
while (field) {
|
while (field) {
|
||||||
memcpy(&(t->table[y * t->numColumns + x]), field,
|
memcpy(&(t->table[y * t->numColumns + x]), field,
|
||||||
sizeof(TableField));
|
sizeof(TableField));
|
||||||
x++;
|
x++;
|
||||||
field = (TableField *) ListNext(rowList);
|
field = (TableField *) ListNext(rowList);
|
||||||
@ -349,10 +349,10 @@ int x,y;
|
|||||||
y++;
|
y++;
|
||||||
rowList = (List) ListNext(tableList);
|
rowList = (List) ListNext(tableList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return(1);
|
return(1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return the number of connected fields */
|
/* return the number of connected fields */
|
||||||
@ -422,7 +422,7 @@ int maxWidthOfColumn;
|
|||||||
int maxHeightOfRow;
|
int maxHeightOfRow;
|
||||||
int sumMinWidth; /* summation of max widths */
|
int sumMinWidth; /* summation of max widths */
|
||||||
int maxWidthOfRow;
|
int maxWidthOfRow;
|
||||||
int minWidthOfRow;
|
int minWidthOfRow;
|
||||||
int numAdjacent;
|
int numAdjacent;
|
||||||
float percentToShrink;
|
float percentToShrink;
|
||||||
int accumulateColWidth;
|
int accumulateColWidth;
|
||||||
@ -455,9 +455,9 @@ int accumulateColWidth;
|
|||||||
minWidthOfRow += field->minWidth;
|
minWidthOfRow += field->minWidth;
|
||||||
}
|
}
|
||||||
/* save the length of the longest and shortest row */
|
/* save the length of the longest and shortest row */
|
||||||
sumMaxWidth = (sumMaxWidth > maxWidthOfRow) ?
|
sumMaxWidth = (sumMaxWidth > maxWidthOfRow) ?
|
||||||
sumMaxWidth : maxWidthOfRow;
|
sumMaxWidth : maxWidthOfRow;
|
||||||
sumMinWidth = (sumMinWidth > minWidthOfRow) ?
|
sumMinWidth = (sumMinWidth > minWidthOfRow) ?
|
||||||
sumMinWidth : minWidthOfRow;
|
sumMinWidth : minWidthOfRow;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -508,15 +508,15 @@ int accumulateColWidth;
|
|||||||
/* find widest field in column */
|
/* find widest field in column */
|
||||||
maxWidthOfColumn = 0;
|
maxWidthOfColumn = 0;
|
||||||
for (y = 0; y < t->numRows; y++ ) {
|
for (y = 0; y < t->numRows; y++ ) {
|
||||||
maxWidthOfColumn =
|
maxWidthOfColumn =
|
||||||
(maxWidthOfColumn >
|
(maxWidthOfColumn >
|
||||||
t->table[y * t->numColumns + x].maxWidth)?
|
t->table[y * t->numColumns + x].maxWidth)?
|
||||||
maxWidthOfColumn :
|
maxWidthOfColumn :
|
||||||
t->table[y * t->numColumns+x].maxWidth;
|
t->table[y * t->numColumns+x].maxWidth;
|
||||||
}
|
}
|
||||||
/* assign uniform width to column */
|
/* assign uniform width to column */
|
||||||
for (y = 0; y < t->numRows; y++) {
|
for (y = 0; y < t->numRows; y++) {
|
||||||
t->table[y*t->numColumns + x].colWidth
|
t->table[y*t->numColumns + x].colWidth
|
||||||
= maxWidthOfColumn
|
= maxWidthOfColumn
|
||||||
+ 2 * FIELD_BORDER_SPACE;
|
+ 2 * FIELD_BORDER_SPACE;
|
||||||
}
|
}
|
||||||
@ -525,10 +525,10 @@ int accumulateColWidth;
|
|||||||
/* find highest of minimum heights */
|
/* find highest of minimum heights */
|
||||||
maxHeightOfRow = 0;
|
maxHeightOfRow = 0;
|
||||||
for (x=0; x < t->numColumns; x++) {
|
for (x=0; x < t->numColumns; x++) {
|
||||||
maxHeightOfRow =
|
maxHeightOfRow =
|
||||||
(maxHeightOfRow >
|
(maxHeightOfRow >
|
||||||
t->table[y * t->numColumns + x].minHeight)?
|
t->table[y * t->numColumns + x].minHeight)?
|
||||||
maxHeightOfRow:
|
maxHeightOfRow:
|
||||||
t->table[y * t->numColumns+x].minHeight;
|
t->table[y * t->numColumns+x].minHeight;
|
||||||
}
|
}
|
||||||
/* assign uniform height to row */
|
/* assign uniform height to row */
|
||||||
@ -575,7 +575,7 @@ int accumulateColWidth;
|
|||||||
/* format it */
|
/* format it */
|
||||||
for (y = 0; y < t->numRows; y++) {
|
for (y = 0; y < t->numRows; y++) {
|
||||||
field = &(t->table[y*t->numColumns+x]);
|
field = &(t->table[y*t->numColumns+x]);
|
||||||
field->colWidth = (int) (percentToShrink *
|
field->colWidth = (int) (percentToShrink *
|
||||||
((float) CalculateMaxWidthOfColumn(t,x)));
|
((float) CalculateMaxWidthOfColumn(t,x)));
|
||||||
field->rowHeight = 0;
|
field->rowHeight = 0;
|
||||||
numAdjacent = TableHowManyConnectedHorizFields
|
numAdjacent = TableHowManyConnectedHorizFields
|
||||||
@ -587,7 +587,7 @@ int accumulateColWidth;
|
|||||||
(percentToShrink *
|
(percentToShrink *
|
||||||
((float) CalculateMaxWidthOfColumn(t,xx))));
|
((float) CalculateMaxWidthOfColumn(t,xx))));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (htmlwTrace) {
|
if (htmlwTrace) {
|
||||||
fprintf(stderr,"About to call PourText\n");
|
fprintf(stderr,"About to call PourText\n");
|
||||||
@ -653,17 +653,17 @@ int accumulateColWidth;
|
|||||||
}
|
}
|
||||||
/* assign height */
|
/* assign height */
|
||||||
for (x = 0; x < t->numColumns; x++) {
|
for (x = 0; x < t->numColumns; x++) {
|
||||||
t->table[y * t->numColumns + x].rowHeight =
|
t->table[y * t->numColumns + x].rowHeight =
|
||||||
maxHeightOfRow;
|
maxHeightOfRow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* make sure all widths in a column are the same size */
|
/* make sure all widths in a column are the same size */
|
||||||
for (x = 0; x < t->numColumns; x++) {
|
for (x = 0; x < t->numColumns; x++) {
|
||||||
maxWidthOfColumn = 0;
|
maxWidthOfColumn = 0;
|
||||||
/* find biggest Width for this column */
|
/* find biggest Width for this column */
|
||||||
for (y = 0; y < t->numRows; y++) {
|
for (y = 0; y < t->numRows; y++) {
|
||||||
maxWidthOfColumn = (maxWidthOfColumn >
|
maxWidthOfColumn = (maxWidthOfColumn >
|
||||||
t->table[y*t->numColumns+x].colWidth)?
|
t->table[y*t->numColumns+x].colWidth)?
|
||||||
maxWidthOfColumn:
|
maxWidthOfColumn:
|
||||||
t->table[y*t->numColumns+x].colWidth;
|
t->table[y*t->numColumns+x].colWidth;
|
||||||
@ -673,7 +673,7 @@ int accumulateColWidth;
|
|||||||
t->table[y*t->numColumns+x].colWidth = maxWidthOfColumn;
|
t->table[y*t->numColumns+x].colWidth = maxWidthOfColumn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -740,7 +740,7 @@ Boolean expandedSomething;
|
|||||||
/* check for and take care of previous rowspans */
|
/* check for and take care of previous rowspans */
|
||||||
if (rowCount > 1) {
|
if (rowCount > 1) {
|
||||||
/* get field above this one */
|
/* get field above this one */
|
||||||
previousRow = (List) ListGetIndexedEntry(tableList,
|
previousRow = (List) ListGetIndexedEntry(tableList,
|
||||||
rowCount - 2);/*zero indexed*/
|
rowCount - 2);/*zero indexed*/
|
||||||
aboveField =(TableField *)ListGetIndexedEntry(previousRow,
|
aboveField =(TableField *)ListGetIndexedEntry(previousRow,
|
||||||
*columnCount);
|
*columnCount);
|
||||||
@ -837,7 +837,7 @@ Boolean fixed;
|
|||||||
}
|
}
|
||||||
m = m->next;
|
m = m->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (field->header) {
|
if (field->header) {
|
||||||
field->font = hw->html.plainbold_font;
|
field->font = hw->html.plainbold_font;
|
||||||
}
|
}
|
||||||
@ -904,7 +904,7 @@ char *tptr;
|
|||||||
while(TableExpandFields(tableList, rowList,
|
while(TableExpandFields(tableList, rowList,
|
||||||
rowCount, &columnCount));
|
rowCount, &columnCount));
|
||||||
|
|
||||||
/* if: is this the first container <tr> or the
|
/* if: is this the first container <tr> or the
|
||||||
separator */
|
separator */
|
||||||
if (ListHead(ListHead(tableList))) {
|
if (ListHead(ListHead(tableList))) {
|
||||||
rowList = ListCreate();
|
rowList = ListCreate();
|
||||||
@ -1111,8 +1111,8 @@ int yy;
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
placeY = y + height/2 +
|
placeY = y + height/2 +
|
||||||
(field->font->max_bounds.ascent
|
(field->font->max_bounds.ascent
|
||||||
- field->font->max_bounds.descent)/2;
|
- field->font->max_bounds.descent)/2;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -1158,7 +1158,7 @@ int x,y;
|
|||||||
x++;
|
x++;
|
||||||
if (x < t->numColumns) {
|
if (x < t->numColumns) {
|
||||||
/* do width */
|
/* do width */
|
||||||
while ((x < t->numColumns) &&
|
while ((x < t->numColumns) &&
|
||||||
t->table[y * t->numColumns + x].contHoriz) {
|
t->table[y * t->numColumns + x].contHoriz) {
|
||||||
(*expandWidth) += t->table[y * t->numColumns + x].colWidth;
|
(*expandWidth) += t->table[y * t->numColumns + x].colWidth;
|
||||||
x++;
|
x++;
|
||||||
@ -1169,14 +1169,14 @@ int x,y;
|
|||||||
y++;
|
y++;
|
||||||
if (y < t->numRows) {
|
if (y < t->numRows) {
|
||||||
/* do height */
|
/* do height */
|
||||||
while ((y < t->numRows) &&
|
while ((y < t->numRows) &&
|
||||||
t->table[y * t->numColumns + x].contVert) {
|
t->table[y * t->numColumns + x].contVert) {
|
||||||
(*expandHeight) += t->table[y * t->numColumns+x].rowHeight;
|
(*expandHeight) += t->table[y * t->numColumns+x].rowHeight;
|
||||||
y++;
|
y++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1216,7 +1216,7 @@ int expandedWidth,expandedHeight;
|
|||||||
if (eptr->table_data->borders){
|
if (eptr->table_data->borders){
|
||||||
/*
|
/*
|
||||||
XDrawRectangle(XtDisplay(hw), XtWindow(hw->html.view),
|
XDrawRectangle(XtDisplay(hw), XtWindow(hw->html.view),
|
||||||
hw->html.drawGC,
|
hw->html.drawGC,
|
||||||
x+(eptr->table_data->borders/2),y+eptr->table_data->borders,
|
x+(eptr->table_data->borders/2),y+eptr->table_data->borders,
|
||||||
eptr->table_data->bwidth,
|
eptr->table_data->bwidth,
|
||||||
eptr->table_data->bheight);
|
eptr->table_data->bheight);
|
||||||
@ -1237,14 +1237,14 @@ int expandedWidth,expandedHeight;
|
|||||||
/* draw field borders */
|
/* draw field borders */
|
||||||
if (eptr->table_data->borders){
|
if (eptr->table_data->borders){
|
||||||
if (!field->contVert) { /* draw above line */
|
if (!field->contVert) { /* draw above line */
|
||||||
XDrawLine(XtDisplay(hw),
|
XDrawLine(XtDisplay(hw),
|
||||||
XtWindow(hw->html.view),
|
XtWindow(hw->html.view),
|
||||||
hw->html.drawGC,
|
hw->html.drawGC,
|
||||||
/*hw->manager.bottom_shadow_GC,*/
|
/*hw->manager.bottom_shadow_GC,*/
|
||||||
vertMarker, horizMarker,
|
vertMarker, horizMarker,
|
||||||
vertMarker + colWidth, horizMarker);
|
vertMarker + colWidth, horizMarker);
|
||||||
/*
|
/*
|
||||||
XDrawLine(XtDisplay(hw),
|
XDrawLine(XtDisplay(hw),
|
||||||
XtWindow(hw->html.view),
|
XtWindow(hw->html.view),
|
||||||
hw->manager.top_shadow_GC,
|
hw->manager.top_shadow_GC,
|
||||||
vertMarker, horizMarker+1,
|
vertMarker, horizMarker+1,
|
||||||
@ -1252,7 +1252,7 @@ int expandedWidth,expandedHeight;
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
if (!field->contHoriz) { /* draw left side*/
|
if (!field->contHoriz) { /* draw left side*/
|
||||||
XDrawLine(XtDisplay(hw),
|
XDrawLine(XtDisplay(hw),
|
||||||
XtWindow(hw->html.view),
|
XtWindow(hw->html.view),
|
||||||
hw->html.drawGC,
|
hw->html.drawGC,
|
||||||
vertMarker, horizMarker,
|
vertMarker, horizMarker,
|
||||||
@ -1272,10 +1272,10 @@ int expandedWidth,expandedHeight;
|
|||||||
|
|
||||||
vertMarker += colWidth;
|
vertMarker += colWidth;
|
||||||
field++;
|
field++;
|
||||||
}
|
}
|
||||||
|
|
||||||
horizMarker += rowHeight;
|
horizMarker += rowHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
XSetLineAttributes(XtDisplay(hw),
|
XSetLineAttributes(XtDisplay(hw),
|
||||||
hw->html.drawGC,
|
hw->html.drawGC,
|
||||||
|
@ -118,7 +118,7 @@ char **ParseCommaList();
|
|||||||
void FreeCommaList();
|
void FreeCommaList();
|
||||||
char *MapOptionReturn();
|
char *MapOptionReturn();
|
||||||
|
|
||||||
static char traversal_table[] =
|
static char traversal_table[] =
|
||||||
"\
|
"\
|
||||||
~Shift ~Meta ~Ctrl <Key> Tab: traversal_forward()\n\
|
~Shift ~Meta ~Ctrl <Key> Tab: traversal_forward()\n\
|
||||||
Shift ~Meta ~Ctrl <Key> Tab: traversal_back()\n\
|
Shift ~Meta ~Ctrl <Key> Tab: traversal_back()\n\
|
||||||
@ -524,7 +524,7 @@ CollectSubmitInfo(fptr, name_list, value_list)
|
|||||||
cbdata.attribute_count--;
|
cbdata.attribute_count--;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*** cvarela@ncsa.uiuc.edu: August 17, 1994
|
/*** cvarela@ncsa.uiuc.edu: August 17, 1994
|
||||||
Adding multiple submit buttons support ***/
|
Adding multiple submit buttons support ***/
|
||||||
/* mods 3/11/95 -- amb */
|
/* mods 3/11/95 -- amb */
|
||||||
@ -1478,7 +1478,7 @@ PrepareFormEnd(hw, w, fptr)
|
|||||||
FormInfo *fptr;
|
FormInfo *fptr;
|
||||||
{
|
{
|
||||||
#ifdef MOTIF
|
#ifdef MOTIF
|
||||||
XtAddCallback(w, XmNactivateCallback,
|
XtAddCallback(w, XmNactivateCallback,
|
||||||
(XtCallbackProc)CBSubmitForm, (caddr_t)fptr);
|
(XtCallbackProc)CBSubmitForm, (caddr_t)fptr);
|
||||||
#else
|
#else
|
||||||
XtAddCallback(w, XtNcallback,
|
XtAddCallback(w, XtNcallback,
|
||||||
@ -1494,7 +1494,7 @@ PrepareFormReset(hw, w, fptr)
|
|||||||
FormInfo *fptr;
|
FormInfo *fptr;
|
||||||
{
|
{
|
||||||
#ifdef MOTIF
|
#ifdef MOTIF
|
||||||
XtAddCallback(w, XmNactivateCallback,
|
XtAddCallback(w, XmNactivateCallback,
|
||||||
(XtCallbackProc)CBResetForm, (caddr_t)fptr);
|
(XtCallbackProc)CBResetForm, (caddr_t)fptr);
|
||||||
#else
|
#else
|
||||||
XtAddCallback(w, XtNcallback,
|
XtAddCallback(w, XtNcallback,
|
||||||
@ -2256,9 +2256,9 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
|
|
||||||
if(!hw->html.focus_follows_mouse)
|
if(!hw->html.focus_follows_mouse)
|
||||||
{
|
{
|
||||||
XtOverrideTranslations(w,
|
XtOverrideTranslations(w,
|
||||||
XtParseTranslationTable(traversal_table));
|
XtParseTranslationTable(traversal_table));
|
||||||
XtOverrideTranslations(w,
|
XtOverrideTranslations(w,
|
||||||
XtParseTranslationTable("<Btn1Down>: Arm() traversal_current()"));
|
XtParseTranslationTable("<Btn1Down>: Arm() traversal_current()"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2324,7 +2324,7 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
w = XmCreateToggleButton(hw->html.view, widget_name,
|
w = XmCreateToggleButton(hw->html.view, widget_name,
|
||||||
arg, argcnt);
|
arg, argcnt);
|
||||||
if(!hw->html.focus_follows_mouse)
|
if(!hw->html.focus_follows_mouse)
|
||||||
XtOverrideTranslations(w,
|
XtOverrideTranslations(w,
|
||||||
XtParseTranslationTable(traversal_table));
|
XtParseTranslationTable(traversal_table));
|
||||||
|
|
||||||
XtSetMappedWhenManaged(w, False);
|
XtSetMappedWhenManaged(w, False);
|
||||||
@ -2362,7 +2362,7 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
w = XmCreatePushButton(hw->html.view, widget_name,
|
w = XmCreatePushButton(hw->html.view, widget_name,
|
||||||
arg, argcnt);
|
arg, argcnt);
|
||||||
if(!hw->html.focus_follows_mouse)
|
if(!hw->html.focus_follows_mouse)
|
||||||
XtOverrideTranslations(w,
|
XtOverrideTranslations(w,
|
||||||
XtParseTranslationTable(traversal_table));
|
XtParseTranslationTable(traversal_table));
|
||||||
XtSetMappedWhenManaged(w, False);
|
XtSetMappedWhenManaged(w, False);
|
||||||
XtManageChild(w);
|
XtManageChild(w);
|
||||||
@ -2400,7 +2400,7 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
w = XmCreatePushButton(hw->html.view, widget_name,
|
w = XmCreatePushButton(hw->html.view, widget_name,
|
||||||
arg, argcnt);
|
arg, argcnt);
|
||||||
if(!hw->html.focus_follows_mouse)
|
if(!hw->html.focus_follows_mouse)
|
||||||
XtOverrideTranslations(w,
|
XtOverrideTranslations(w,
|
||||||
XtParseTranslationTable(traversal_table));
|
XtParseTranslationTable(traversal_table));
|
||||||
XtSetMappedWhenManaged(w, False);
|
XtSetMappedWhenManaged(w, False);
|
||||||
XtManageChild(w);
|
XtManageChild(w);
|
||||||
@ -2432,7 +2432,7 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
w = XmCreatePushButton(hw->html.view, widget_name,
|
w = XmCreatePushButton(hw->html.view, widget_name,
|
||||||
arg, argcnt);
|
arg, argcnt);
|
||||||
if(!hw->html.focus_follows_mouse)
|
if(!hw->html.focus_follows_mouse)
|
||||||
XtOverrideTranslations(w,
|
XtOverrideTranslations(w,
|
||||||
XtParseTranslationTable(traversal_table));
|
XtParseTranslationTable(traversal_table));
|
||||||
XtSetMappedWhenManaged(w, False);
|
XtSetMappedWhenManaged(w, False);
|
||||||
XtManageChild(w);
|
XtManageChild(w);
|
||||||
@ -2655,7 +2655,7 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
XtManageChild(button);
|
XtManageChild(button);
|
||||||
XmStringFree(label);
|
XmStringFree(label);
|
||||||
if(!hw->html.focus_follows_mouse)
|
if(!hw->html.focus_follows_mouse)
|
||||||
XtOverrideTranslations(button,
|
XtOverrideTranslations(button,
|
||||||
XtParseTranslationTable(traversal_table));
|
XtParseTranslationTable(traversal_table));
|
||||||
if ((vlist_cnt > 0)&&
|
if ((vlist_cnt > 0)&&
|
||||||
(vlist[0] != NULL)&&
|
(vlist[0] != NULL)&&
|
||||||
@ -2688,9 +2688,9 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
XtSetArg(arg[argcnt], XmNx, x); argcnt++;
|
XtSetArg(arg[argcnt], XmNx, x); argcnt++;
|
||||||
XtSetArg(arg[argcnt], XmNy, y); argcnt++;
|
XtSetArg(arg[argcnt], XmNy, y); argcnt++;
|
||||||
/* kill margins */
|
/* kill margins */
|
||||||
XtSetArg(arg[argcnt], XmNmarginWidth, 0);
|
XtSetArg(arg[argcnt], XmNmarginWidth, 0);
|
||||||
argcnt++;
|
argcnt++;
|
||||||
XtSetArg(arg[argcnt], XmNmarginHeight, 0);
|
XtSetArg(arg[argcnt], XmNmarginHeight, 0);
|
||||||
argcnt++;
|
argcnt++;
|
||||||
XtSetArg(arg[argcnt], XmNsubMenuId, pulldown);
|
XtSetArg(arg[argcnt], XmNsubMenuId, pulldown);
|
||||||
argcnt++;
|
argcnt++;
|
||||||
@ -2714,12 +2714,12 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
widget_name, arg, argcnt);
|
widget_name, arg, argcnt);
|
||||||
if(!hw->html.focus_follows_mouse)
|
if(!hw->html.focus_follows_mouse)
|
||||||
{
|
{
|
||||||
XtOverrideTranslations(w,
|
XtOverrideTranslations(w,
|
||||||
XtParseTranslationTable(traversal_table));
|
XtParseTranslationTable(traversal_table));
|
||||||
XtOverrideTranslations(pulldown,
|
XtOverrideTranslations(pulldown,
|
||||||
XtParseTranslationTable(traversal_table));
|
XtParseTranslationTable(traversal_table));
|
||||||
}
|
}
|
||||||
|
|
||||||
argcnt = 0;
|
argcnt = 0;
|
||||||
|
|
||||||
xmstr = XmStringCreateSimple ("");
|
xmstr = XmStringCreateSimple ("");
|
||||||
@ -2822,10 +2822,10 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
w = XmCreateList(scroll, widget_name,
|
w = XmCreateList(scroll, widget_name,
|
||||||
arg, argcnt);
|
arg, argcnt);
|
||||||
if(!hw->html.focus_follows_mouse)
|
if(!hw->html.focus_follows_mouse)
|
||||||
XtOverrideTranslations(w,
|
XtOverrideTranslations(w,
|
||||||
XtParseTranslationTable(traversal_table));
|
XtParseTranslationTable(traversal_table));
|
||||||
XtManageChild(w);
|
XtManageChild(w);
|
||||||
|
|
||||||
w = scroll;
|
w = scroll;
|
||||||
|
|
||||||
for (i=0; i<list_cnt; i++)
|
for (i=0; i<list_cnt; i++)
|
||||||
@ -2903,10 +2903,10 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
w = XmCreateTextField(hw->html.view, widget_name,
|
w = XmCreateTextField(hw->html.view, widget_name,
|
||||||
arg, argcnt);
|
arg, argcnt);
|
||||||
XtOverrideTranslations(w, XtParseTranslationTable(text_translations));
|
XtOverrideTranslations(w, XtParseTranslationTable(text_translations));
|
||||||
|
|
||||||
|
|
||||||
if(!hw->html.focus_follows_mouse)
|
if(!hw->html.focus_follows_mouse)
|
||||||
XtOverrideTranslations(w,
|
XtOverrideTranslations(w,
|
||||||
XtParseTranslationTable(traversal_table));
|
XtParseTranslationTable(traversal_table));
|
||||||
/*
|
/*
|
||||||
* The proper order here is XtSetMappedWhenManaged, XtManageChild. But a bug
|
* The proper order here is XtSetMappedWhenManaged, XtManageChild. But a bug
|
||||||
@ -3012,9 +3012,9 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
XtOverrideTranslations(w, XtParseTranslationTable(text_translations));
|
XtOverrideTranslations(w, XtParseTranslationTable(text_translations));
|
||||||
|
|
||||||
if(!hw->html.focus_follows_mouse)
|
if(!hw->html.focus_follows_mouse)
|
||||||
XtOverrideTranslations(w,
|
XtOverrideTranslations(w,
|
||||||
XtParseTranslationTable(traversal_table));
|
XtParseTranslationTable(traversal_table));
|
||||||
|
|
||||||
|
|
||||||
w = scroll;
|
w = scroll;
|
||||||
|
|
||||||
@ -3061,7 +3061,7 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
type = W_TEXTAREA;
|
type = W_TEXTAREA;
|
||||||
cols = atoi(list[0]);
|
cols = atoi(list[0]);
|
||||||
rows = atoi(list[1]);
|
rows = atoi(list[1]);
|
||||||
|
|
||||||
/* be a textfield if only one row */
|
/* be a textfield if only one row */
|
||||||
if(rows==1)
|
if(rows==1)
|
||||||
type=W_TEXTFIELD;
|
type=W_TEXTFIELD;
|
||||||
@ -3117,7 +3117,7 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
widget_name, arg, argcnt);
|
widget_name, arg, argcnt);
|
||||||
XtOverrideTranslations(w, XtParseTranslationTable(text_translations));
|
XtOverrideTranslations(w, XtParseTranslationTable(text_translations));
|
||||||
if(!hw->html.focus_follows_mouse)
|
if(!hw->html.focus_follows_mouse)
|
||||||
XtOverrideTranslations(w,
|
XtOverrideTranslations(w,
|
||||||
XtParseTranslationTable(traversal_table));
|
XtParseTranslationTable(traversal_table));
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@ -3158,7 +3158,7 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
XtManageChild(w);
|
XtManageChild(w);
|
||||||
XtOverrideTranslations(w, XtParseTranslationTable(text_translations));
|
XtOverrideTranslations(w, XtParseTranslationTable(text_translations));
|
||||||
if(!hw->html.focus_follows_mouse)
|
if(!hw->html.focus_follows_mouse)
|
||||||
XtOverrideTranslations(w,
|
XtOverrideTranslations(w,
|
||||||
XtParseTranslationTable(traversal_table));
|
XtParseTranslationTable(traversal_table));
|
||||||
|
|
||||||
|
|
||||||
@ -3216,7 +3216,7 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
height = 0;
|
height = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
wptr = AddNewWidget(hw, fptr, w, type, id, x, y, width,
|
wptr = AddNewWidget(hw, fptr, w, type, id, x, y, width,
|
||||||
height, name, value, mapping, checked);
|
height, name, value, mapping, checked);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -3280,7 +3280,7 @@ MakeWidget(hw, text, x, y, id, fptr)
|
|||||||
WidgetInfo *wptr;
|
WidgetInfo *wptr;
|
||||||
Dimension width, height;
|
Dimension width, height;
|
||||||
|
|
||||||
|
|
||||||
wlist = hw->html.widget_list;
|
wlist = hw->html.widget_list;
|
||||||
while (wlist != NULL)
|
while (wlist != NULL)
|
||||||
{
|
{
|
||||||
@ -4148,13 +4148,13 @@ unsigned long bp=BlackPixel(XtDisplay(hw),DefaultScreen(XtDisplay(hw)));
|
|||||||
|
|
||||||
void traversal_forward(Widget w, XEvent *event,
|
void traversal_forward(Widget w, XEvent *event,
|
||||||
String *params, Cardinal *num_params)
|
String *params, Cardinal *num_params)
|
||||||
{
|
{
|
||||||
HTMLTraverseTabGroups(w, XmTRAVERSE_NEXT_TAB_GROUP);
|
HTMLTraverseTabGroups(w, XmTRAVERSE_NEXT_TAB_GROUP);
|
||||||
}
|
}
|
||||||
|
|
||||||
void traversal_back(Widget w, XEvent *event,
|
void traversal_back(Widget w, XEvent *event,
|
||||||
String *params, Cardinal *num_params)
|
String *params, Cardinal *num_params)
|
||||||
{
|
{
|
||||||
HTMLTraverseTabGroups(w, XmTRAVERSE_PREV_TAB_GROUP);
|
HTMLTraverseTabGroups(w, XmTRAVERSE_PREV_TAB_GROUP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4227,7 +4227,7 @@ void HTMLTraverseTabGroups(Widget w, int how)
|
|||||||
top = (Widget) hw;
|
top = (Widget) hw;
|
||||||
while(!XtIsTopLevelShell(top))
|
while(!XtIsTopLevelShell(top))
|
||||||
top = XtParent(top);
|
top = XtParent(top);
|
||||||
|
|
||||||
switch(how)
|
switch(how)
|
||||||
{
|
{
|
||||||
case XmTRAVERSE_NEXT_TAB_GROUP:
|
case XmTRAVERSE_NEXT_TAB_GROUP:
|
||||||
@ -4251,7 +4251,7 @@ void HTMLTraverseTabGroups(Widget w, int how)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* automagickly scroll */
|
/* automagickly scroll */
|
||||||
if(XtIsManaged(hw->html.vbar) &&
|
if(XtIsManaged(hw->html.vbar) &&
|
||||||
(lptr->y > (hw->html.view_height+hw->html.scroll_y-10)))
|
(lptr->y > (hw->html.view_height+hw->html.scroll_y-10)))
|
||||||
{
|
{
|
||||||
int val, ss, in, pg_in, amount;
|
int val, ss, in, pg_in, amount;
|
||||||
@ -4273,7 +4273,7 @@ void HTMLTraverseTabGroups(Widget w, int how)
|
|||||||
Widget text;
|
Widget text;
|
||||||
XtVaGetValues(lptr->w, XmNworkWindow, &text, NULL);
|
XtVaGetValues(lptr->w, XmNworkWindow, &text, NULL);
|
||||||
XtSetKeyboardFocus(top, text);
|
XtSetKeyboardFocus(top, text);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
XtSetKeyboardFocus(top, lptr->w);
|
XtSetKeyboardFocus(top, lptr->w);
|
||||||
break;
|
break;
|
||||||
@ -4298,7 +4298,7 @@ void HTMLTraverseTabGroups(Widget w, int how)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* automagickly scroll */
|
/* automagickly scroll */
|
||||||
if(XtIsManaged(hw->html.vbar) &&
|
if(XtIsManaged(hw->html.vbar) &&
|
||||||
(lptr->y < hw->html.scroll_y+10))
|
(lptr->y < hw->html.scroll_y+10))
|
||||||
{
|
{
|
||||||
int val, ss, in, pg_in, amount;
|
int val, ss, in, pg_in, amount;
|
||||||
@ -4329,9 +4329,9 @@ void HTMLTraverseTabGroups(Widget w, int how)
|
|||||||
break;
|
break;
|
||||||
case XmTRAVERSE_CURRENT:
|
case XmTRAVERSE_CURRENT:
|
||||||
lptr = hw->html.widget_list;
|
lptr = hw->html.widget_list;
|
||||||
|
|
||||||
/* check parent to allow for text areas (lptr->w would be scroll) */
|
/* check parent to allow for text areas (lptr->w would be scroll) */
|
||||||
while(lptr!=NULL)
|
while(lptr!=NULL)
|
||||||
{
|
{
|
||||||
if((lptr->w == w) || (lptr->w == XtParent(w)))
|
if((lptr->w == w) || (lptr->w == XtParent(w)))
|
||||||
break;
|
break;
|
||||||
|
@ -2,7 +2,7 @@ LIBTARGET = libhtmlw.a
|
|||||||
|
|
||||||
all: $(LIBTARGET)
|
all: $(LIBTARGET)
|
||||||
|
|
||||||
CFILES = HTML.c HTMLlists.c HTMLformat.c HTMLparse.c HTMLimages.c HTMLwidgets.c HTML-PSformat.c DrawingArea.c HTMLjot.c HTMLtable.c list.c
|
CFILES = HTML.c HTMLlists.c HTMLformat.c HTMLparse.c HTMLimages.c HTMLwidgets.c HTML-PSformat.c DrawingArea.c HTMLjot.c HTMLtable.c list.c
|
||||||
|
|
||||||
OBJS = $(CFILES:.c=.o)
|
OBJS = $(CFILES:.c=.o)
|
||||||
$(OBJS): HTML.h HTMLP.h
|
$(OBJS): HTML.h HTMLP.h
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# @configure_output@
|
# @configure_output@
|
||||||
# This file is used by Autoconf to make the real Makefile.
|
# This file is used by Autoconf to make the real Makefile.
|
||||||
# DO NOT EDIT THIS FILE!
|
# DO NOT EDIT THIS FILE!
|
||||||
# If you want to change something do it to the Makefile autoconf
|
# If you want to change something do it to the Makefile autoconf
|
||||||
# creates. You should never have to edit this file.
|
# creates. You should never have to edit this file.
|
||||||
|
|
||||||
CC= @CC@
|
CC= @CC@
|
||||||
@ -14,7 +14,7 @@ LIBTARGET = libhtmlw.a
|
|||||||
|
|
||||||
all: $(LIBTARGET)
|
all: $(LIBTARGET)
|
||||||
|
|
||||||
CFILES = HTML.c HTMLlists.c HTMLformat.c HTMLparse.c HTMLimages.c HTMLwidgets.c HTML-PSformat.c DrawingArea.c HTMLjot.c HTMLtable.c list.c
|
CFILES = HTML.c HTMLlists.c HTMLformat.c HTMLparse.c HTMLimages.c HTMLwidgets.c HTML-PSformat.c DrawingArea.c HTMLjot.c HTMLtable.c list.c
|
||||||
|
|
||||||
OBJS = $(CFILES:.c=.o)
|
OBJS = $(CFILES:.c=.o)
|
||||||
$(OBJS): HTML.h HTMLP.h
|
$(OBJS): HTML.h HTMLP.h
|
||||||
|
@ -2,7 +2,7 @@ LIBTARGET = libhtmlw.a
|
|||||||
|
|
||||||
all: $(LIBTARGET)
|
all: $(LIBTARGET)
|
||||||
|
|
||||||
CFILES = HTML.c HTMLlists.c HTMLformat.c HTMLparse.c HTMLimages.c HTMLwidgets.c HTML-PSformat.c DrawingArea.c HTMLjot.c HTMLtable.c list.c
|
CFILES = HTML.c HTMLlists.c HTMLformat.c HTMLparse.c HTMLimages.c HTMLwidgets.c HTML-PSformat.c DrawingArea.c HTMLjot.c HTMLtable.c list.c
|
||||||
|
|
||||||
OBJS = $(CFILES:.c=.o)
|
OBJS = $(CFILES:.c=.o)
|
||||||
$(OBJS): HTML.h HTMLP.h
|
$(OBJS): HTML.h HTMLP.h
|
||||||
|
@ -8,18 +8,18 @@
|
|||||||
** of representatives of Slate Corporation, Lotus Development Corporation,
|
** of representatives of Slate Corporation, Lotus Development Corporation,
|
||||||
** GO, Microsoft, Apple, General Magic, and others.
|
** GO, Microsoft, Apple, General Magic, and others.
|
||||||
**
|
**
|
||||||
** This document and the accompanying code samples on disk comprise Version
|
** This document and the accompanying code samples on disk comprise Version
|
||||||
** 1.0 of the Jot specification for the storage and interchange of electronic
|
** 1.0 of the Jot specification for the storage and interchange of electronic
|
||||||
** ink data. Permission is granted to incorporate and otherwise use any
|
** ink data. Permission is granted to incorporate and otherwise use any
|
||||||
** portion of the specification. You may make copies of the specification
|
** portion of the specification. You may make copies of the specification
|
||||||
** for distribution to others, provided you include the notice "Copyright
|
** for distribution to others, provided you include the notice "Copyright
|
||||||
** 1993, Slate Corporation. All Rights Reserved" on both the document and
|
** 1993, Slate Corporation. All Rights Reserved" on both the document and
|
||||||
** the disk label. You may not modify this specification without written
|
** the disk label. You may not modify this specification without written
|
||||||
** permission from Slate Corporation.
|
** permission from Slate Corporation.
|
||||||
**
|
**
|
||||||
** The specification is provided "as is" without warranty of any kind. Slate
|
** The specification is provided "as is" without warranty of any kind. Slate
|
||||||
** further disclaims all implied warranties of merchantability or of fitness
|
** further disclaims all implied warranties of merchantability or of fitness
|
||||||
** for a particular purpose. The entire risk arising out of the use or
|
** for a particular purpose. The entire risk arising out of the use or
|
||||||
** performance of the specification remains with you.
|
** performance of the specification remains with you.
|
||||||
**
|
**
|
||||||
**--------------------------------------------------------------------------
|
**--------------------------------------------------------------------------
|
||||||
@ -54,10 +54,10 @@
|
|||||||
** electronic ink data interchange, and neither assumes nor dictates the
|
** electronic ink data interchange, and neither assumes nor dictates the
|
||||||
** nature of how the application deals with ink data internally. The format
|
** nature of how the application deals with ink data internally. The format
|
||||||
** is not intended to be the "internal" ink format of an application, though
|
** is not intended to be the "internal" ink format of an application, though
|
||||||
** there is no reason why it could not serve such a purpose.
|
** there is no reason why it could not serve such a purpose.
|
||||||
**
|
**
|
||||||
** The scope and goals of this format design are limited to the represent-
|
** The scope and goals of this format design are limited to the represent-
|
||||||
** ation of electronic ink data embedded in some other electronic document,
|
** ation of electronic ink data embedded in some other electronic document,
|
||||||
** not to the larger document itself (such as an e-mail or enhanced word-
|
** not to the larger document itself (such as an e-mail or enhanced word-
|
||||||
** processing data file).
|
** processing data file).
|
||||||
**
|
**
|
||||||
@ -70,28 +70,28 @@
|
|||||||
** or sub-strokes, and then storing a list of encodings of these sub-strokes.
|
** or sub-strokes, and then storing a list of encodings of these sub-strokes.
|
||||||
** In other words, Jot preserves all information about the original input as
|
** In other words, Jot preserves all information about the original input as
|
||||||
** opposed attempting any sort of abstract characterization of the input.
|
** opposed attempting any sort of abstract characterization of the input.
|
||||||
**
|
**
|
||||||
** The storage format has a number of properties:
|
** The storage format has a number of properties:
|
||||||
**
|
**
|
||||||
** * Simple. Typical operations on the ink data are easy. If you only wish
|
** * Simple. Typical operations on the ink data are easy. If you only wish
|
||||||
** to read stroke coordinates and bounding information from the data,
|
** to read stroke coordinates and bounding information from the data,
|
||||||
** complex information that might be present will not hinder the process.
|
** complex information that might be present will not hinder the process.
|
||||||
** Likewise, it is easy to write out just simple information. The
|
** Likewise, it is easy to write out just simple information. The
|
||||||
** complex information is all optional.
|
** complex information is all optional.
|
||||||
**
|
**
|
||||||
** * Compact. The storage format is intended to be as compact as possible
|
** * Compact. The storage format is intended to be as compact as possible
|
||||||
** without sacrificing simplicity or fidelity. Optional information such
|
** without sacrificing simplicity or fidelity. Optional information such
|
||||||
** as time stamps or color specifications occupy space only when they are
|
** as time stamps or color specifications occupy space only when they are
|
||||||
** present. Specifications that apply to many strokes (such as line width
|
** present. Specifications that apply to many strokes (such as line width
|
||||||
** or color) are represented just once.
|
** or color) are represented just once.
|
||||||
**
|
**
|
||||||
** * Compression. The stroke information that describes the ink can
|
** * Compression. The stroke information that describes the ink can
|
||||||
** optionally be represented in a compressed format. Compression
|
** optionally be represented in a compressed format. Compression
|
||||||
** techniques include both compression and reduction of the ink data.
|
** techniques include both compression and reduction of the ink data.
|
||||||
**
|
**
|
||||||
** * Inclusive. The format is capable of storing every property of ink
|
** * Inclusive. The format is capable of storing every property of ink
|
||||||
** conceivable as of today.
|
** conceivable as of today.
|
||||||
**
|
**
|
||||||
** * Expandable and Compatible. The format is expandable, so as developers
|
** * Expandable and Compatible. The format is expandable, so as developers
|
||||||
** discover new information that should be recorded in an ink storage
|
** discover new information that should be recorded in an ink storage
|
||||||
** format, these new features can be added without changing the behavior of
|
** format, these new features can be added without changing the behavior of
|
||||||
@ -100,21 +100,21 @@
|
|||||||
** applications reading older versions of the format. Likewise, new
|
** applications reading older versions of the format. Likewise, new
|
||||||
** application programs can handle previous versions of the format without
|
** application programs can handle previous versions of the format without
|
||||||
** special work.
|
** special work.
|
||||||
**
|
**
|
||||||
** The format is not designed to easily support lots of in-memory
|
** The format is not designed to easily support lots of in-memory
|
||||||
** manipulation of the ink data, such as deleting strokes, changing line
|
** manipulation of the ink data, such as deleting strokes, changing line
|
||||||
** widths, and so on. A format supporting these types of manipulations would
|
** widths, and so on. A format supporting these types of manipulations would
|
||||||
** be at odds with the above goals. All the information needed to perform
|
** be at odds with the above goals. All the information needed to perform
|
||||||
** these manipulations is present in this data format, so an application
|
** these manipulations is present in this data format, so an application
|
||||||
** might augment this format to facilitate manipulation of the ink data.
|
** might augment this format to facilitate manipulation of the ink data.
|
||||||
**
|
**
|
||||||
** Applications are likely to use some other format internally for real-time
|
** Applications are likely to use some other format internally for real-time
|
||||||
** ink manipulation. Many operating environments provide some internal means
|
** ink manipulation. Many operating environments provide some internal means
|
||||||
** for storing and manipulating ink data, the details of which may be hidden
|
** for storing and manipulating ink data, the details of which may be hidden
|
||||||
** to some extent from the application designer. Many such real-time data
|
** to some extent from the application designer. Many such real-time data
|
||||||
** structures store fewer types of and/or less information (such as not
|
** structures store fewer types of and/or less information (such as not
|
||||||
** preserving information about the tablet point data rate) than are covered
|
** preserving information about the tablet point data rate) than are covered
|
||||||
** in this definition.
|
** in this definition.
|
||||||
**
|
**
|
||||||
**------------------------------------------------------------------------*/
|
**------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@ -141,15 +141,15 @@
|
|||||||
** April 12, 1993 - Release of version 0.99 of the specification. Moved
|
** April 12, 1993 - Release of version 0.99 of the specification. Moved
|
||||||
** reference sections 28 and 29 to a separate file called
|
** reference sections 28 and 29 to a separate file called
|
||||||
** sample.h
|
** sample.h
|
||||||
** May 01, 1993 - Release of version 1.00 of the specification.
|
** May 01, 1993 - Release of version 1.00 of the specification.
|
||||||
** Changed INK_OFFSET_RECORD units from twips to pen
|
** Changed INK_OFFSET_RECORD units from twips to pen
|
||||||
** units for consistency and ease of implementation.
|
** units for consistency and ease of implementation.
|
||||||
** Fixed a typo in reference section 26.0 in the diagram.
|
** Fixed a typo in reference section 26.0 in the diagram.
|
||||||
** The text accompanying the diagram was correct.
|
** The text accompanying the diagram was correct.
|
||||||
** Fixed a typo in reference section 27.0. The old text
|
** Fixed a typo in reference section 27.0. The old text
|
||||||
** "delta-X == 0 or 1" was replaced with the correct text
|
** "delta-X == 0 or 1" was replaced with the correct text
|
||||||
** "delta-X == 2". The accompanying diagram was correct.
|
** "delta-X == 2". The accompanying diagram was correct.
|
||||||
** Removed all sizeof() constructs and replaced with
|
** Removed all sizeof() constructs and replaced with
|
||||||
** appropriate #defines to reduce compiler dependencies.
|
** appropriate #defines to reduce compiler dependencies.
|
||||||
** Tagged all struct definitions with tag_ prefix.
|
** Tagged all struct definitions with tag_ prefix.
|
||||||
** Added comments and reordered some existing comments.
|
** Added comments and reordered some existing comments.
|
||||||
@ -171,12 +171,12 @@
|
|||||||
** storage of point data in "standard compression" format. Sign bits are
|
** storage of point data in "standard compression" format. Sign bits are
|
||||||
** used to indicate item types, so the bytes are stored high-order to low-
|
** used to indicate item types, so the bytes are stored high-order to low-
|
||||||
** order (exactly opposite). See the sample code and reference section 23.0
|
** order (exactly opposite). See the sample code and reference section 23.0
|
||||||
** for more information on the compressed format. Uncompressed data is
|
** for more information on the compressed format. Uncompressed data is
|
||||||
** written in Intel order.
|
** written in Intel order.
|
||||||
**
|
**
|
||||||
** All structures are packed for the purposes of writing to a stream.
|
** All structures are packed for the purposes of writing to a stream.
|
||||||
**
|
**
|
||||||
** Signed integer values are two's-complement. Rectangles are stored
|
** Signed integer values are two's-complement. Rectangles are stored
|
||||||
** x,y,w,h.
|
** x,y,w,h.
|
||||||
**
|
**
|
||||||
** These definitions are intended to insulate the sample ink compaction and
|
** These definitions are intended to insulate the sample ink compaction and
|
||||||
@ -193,13 +193,13 @@
|
|||||||
** Record Sequence
|
** Record Sequence
|
||||||
** ---------------
|
** ---------------
|
||||||
**
|
**
|
||||||
** In this document, one piece of ink data is called an ink bundle.
|
** In this document, one piece of ink data is called an ink bundle.
|
||||||
** Typically this might correspond to the strokes that make up the ink from
|
** Typically this might correspond to the strokes that make up the ink from
|
||||||
** the time when the pen touches down until the user finishes writing
|
** the time when the pen touches down until the user finishes writing
|
||||||
** (usually determined by a timeout or the pen leaving proximity). Thus an
|
** (usually determined by a timeout or the pen leaving proximity). Thus an
|
||||||
** ink bundle usually contains many ink strokes, and the strokes do not have
|
** ink bundle usually contains many ink strokes, and the strokes do not have
|
||||||
** to describe a continuous line of ink.
|
** to describe a continuous line of ink.
|
||||||
**
|
**
|
||||||
** As stated in reference section 5.0, all data conforming to this
|
** As stated in reference section 5.0, all data conforming to this
|
||||||
** specification appears as a stream of ink bundles each of which must begin
|
** specification appears as a stream of ink bundles each of which must begin
|
||||||
** with an INK_BUNDLE_RECORD and end with an INK_END_RECORD. There may be
|
** with an INK_BUNDLE_RECORD and end with an INK_END_RECORD. There may be
|
||||||
@ -215,7 +215,7 @@
|
|||||||
** INK_GROUP_RECORD optional // tags the following PENDATA
|
** INK_GROUP_RECORD optional // tags the following PENDATA
|
||||||
** INK_PENDATA_RECORD recommended // actual points
|
** INK_PENDATA_RECORD recommended // actual points
|
||||||
** INK_GROUP_RECORD optional // tags the following PENDATA
|
** INK_GROUP_RECORD optional // tags the following PENDATA
|
||||||
** INK_PENDATA_RECORD recommended // actual points
|
** INK_PENDATA_RECORD recommended // actual points
|
||||||
** INK_PENDATA_RECORD recommended // more points in same group
|
** INK_PENDATA_RECORD recommended // more points in same group
|
||||||
** INK_SCALE_RESET_RECORD optional // resets to default scaling/offset
|
** INK_SCALE_RESET_RECORD optional // resets to default scaling/offset
|
||||||
** INK_PENDATA_RECORD recommended // actual points
|
** INK_PENDATA_RECORD recommended // actual points
|
||||||
@ -223,32 +223,32 @@
|
|||||||
** INK_END_RECORD required // end of bundle number one
|
** INK_END_RECORD required // end of bundle number one
|
||||||
**
|
**
|
||||||
** It is perfectly reasonable to write out only the following (though doing
|
** It is perfectly reasonable to write out only the following (though doing
|
||||||
** so will cause the ink to be rendered in a completely default manner --
|
** so will cause the ink to be rendered in a completely default manner --
|
||||||
** black hairline width at 1:1 scaling with offset 0):
|
** black hairline width at 1:1 scaling with offset 0):
|
||||||
**
|
**
|
||||||
** INK_BUNDLE_RECORD
|
** INK_BUNDLE_RECORD
|
||||||
** INK_PENDATA_RECORD
|
** INK_PENDATA_RECORD
|
||||||
** INK_END_RECORD
|
** INK_END_RECORD
|
||||||
**
|
**
|
||||||
**
|
**
|
||||||
** Specification Revisions
|
** Specification Revisions
|
||||||
** -----------------------
|
** -----------------------
|
||||||
**
|
|
||||||
** Future enhancements to this specification may modify certain record types.
|
|
||||||
** It is guaranteed that any record modified in a subsequent revision of the
|
|
||||||
** specification will be a strict superset of that record's definition in any
|
|
||||||
** previous revision of the specification. That is, modified record types
|
|
||||||
** will only be lengthened, not shortened. If a particular record type must
|
|
||||||
** be extended such that it would not be a superset of the original, a new
|
|
||||||
** record type would be added to cover that particular extension.
|
|
||||||
**
|
|
||||||
** This extension strategy has two important ramifications:
|
|
||||||
**
|
**
|
||||||
** 1) A reading application should *ALWAYS* use the size of a record as
|
** Future enhancements to this specification may modify certain record types.
|
||||||
|
** It is guaranteed that any record modified in a subsequent revision of the
|
||||||
|
** specification will be a strict superset of that record's definition in any
|
||||||
|
** previous revision of the specification. That is, modified record types
|
||||||
|
** will only be lengthened, not shortened. If a particular record type must
|
||||||
|
** be extended such that it would not be a superset of the original, a new
|
||||||
|
** record type would be added to cover that particular extension.
|
||||||
|
**
|
||||||
|
** This extension strategy has two important ramifications:
|
||||||
|
**
|
||||||
|
** 1) A reading application should *ALWAYS* use the size of a record as
|
||||||
** recorded in the record structure itself (i.e., the recordLength field
|
** recorded in the record structure itself (i.e., the recordLength field
|
||||||
** of the INK_RECORD_HEADERx structure) rather than the sizeof() or any
|
** of the INK_RECORD_HEADERx structure) rather than the sizeof() or any
|
||||||
** other size determined at compile time to determine how may bytes to
|
** other size determined at compile time to determine how may bytes to
|
||||||
** read as the data structures are parsed. This is due to the fact that
|
** read as the data structures are parsed. This is due to the fact that
|
||||||
** a record may grow in a future revision of the standard. The only
|
** a record may grow in a future revision of the standard. The only
|
||||||
** exception to this rule is the INK_BUNDLE_RECORD which contains a
|
** exception to this rule is the INK_BUNDLE_RECORD which contains a
|
||||||
** version number that will be modified with each change to that record.
|
** version number that will be modified with each change to that record.
|
||||||
@ -256,17 +256,17 @@
|
|||||||
** version used at compile time, the size of the record should exactly
|
** version used at compile time, the size of the record should exactly
|
||||||
** match the #define of inkRecordBundleSize.
|
** match the #define of inkRecordBundleSize.
|
||||||
**
|
**
|
||||||
** 2) Any particular record may be read into a target data structure up to
|
** 2) Any particular record may be read into a target data structure up to
|
||||||
** the size of the target data structure and the rest may be ignored.
|
** the size of the target data structure and the rest may be ignored.
|
||||||
** This is due to the 'strict superset' rule which means that any
|
** This is due to the 'strict superset' rule which means that any
|
||||||
** extension of any record type must leave the meaning, content, and size
|
** extension of any record type must leave the meaning, content, and size
|
||||||
** of any existing fields as is. So, for example, if an INK_SCALE_RECORD
|
** of any existing fields as is. So, for example, if an INK_SCALE_RECORD
|
||||||
** was modified by adding 2 bytes, the reading application can safely read
|
** was modified by adding 2 bytes, the reading application can safely read
|
||||||
** the data into the INK_SCALE_RECORD known at compile time and throw
|
** the data into the INK_SCALE_RECORD known at compile time and throw
|
||||||
** away the extra two bytes: the header, x, and y will be in the same
|
** away the extra two bytes: the header, x, and y will be in the same
|
||||||
** place and will have the same meaning.
|
** place and will have the same meaning.
|
||||||
**
|
**
|
||||||
**
|
**
|
||||||
** Files of Ink
|
** Files of Ink
|
||||||
** ------------
|
** ------------
|
||||||
**
|
**
|
||||||
@ -386,14 +386,14 @@ typedef struct tag_XY16 {
|
|||||||
} XY16, FAR *P_XY16;
|
} XY16, FAR *P_XY16;
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
** Note:
|
** Note:
|
||||||
** Angles from vertical can exceed +-90 degrees: in this case, the "back" end
|
** Angles from vertical can exceed +-90 degrees: in this case, the "back" end
|
||||||
** of the stylus is nearer the tablet surface than the "front" end.
|
** of the stylus is nearer the tablet surface than the "front" end.
|
||||||
**-------------------------------------------------------------------------*/
|
**-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
** Note:
|
** Note:
|
||||||
** Standard compaction will normally store angles in nibbles, or single
|
** Standard compaction will normally store angles in nibbles, or single
|
||||||
** bytes, rather than in four-byte records.
|
** bytes, rather than in four-byte records.
|
||||||
**-------------------------------------------------------------------------*/
|
**-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@ -505,7 +505,7 @@ typedef U16 INK_RECORD_TYPE, FAR *P_INK_RECORD_TYPE;
|
|||||||
)
|
)
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
** Note: most compilers will not generate code for the above macro but will
|
** Note: most compilers will not generate code for the above macro but will
|
||||||
** determine the proper value at compile time.
|
** determine the proper value at compile time.
|
||||||
**-------------------------------------------------------------------------*/
|
**-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@ -598,7 +598,7 @@ typedef struct tag_INK_RECORD_HEADER32 {
|
|||||||
** the following minimum requirements:
|
** the following minimum requirements:
|
||||||
**
|
**
|
||||||
** 1) header.recordType == INK_RECORD_BUNDLE
|
** 1) header.recordType == INK_RECORD_BUNDLE
|
||||||
** 2) header.recordLength >= inkRecordBundleSize (See general notes in
|
** 2) header.recordLength >= inkRecordBundleSize (See general notes in
|
||||||
** reference section 1.0 for important information about record sizes.)
|
** reference section 1.0 for important information about record sizes.)
|
||||||
** 3) compactionType is an expected and supported value
|
** 3) compactionType is an expected and supported value
|
||||||
** 4) penUnitsPerX and penUnitsPerY seem reasonable and expected:
|
** 4) penUnitsPerX and penUnitsPerY seem reasonable and expected:
|
||||||
@ -628,7 +628,7 @@ typedef struct tag_INK_END_RECORD {
|
|||||||
** data, while smaller, is still whole. That is, compression under Jot is
|
** data, while smaller, is still whole. That is, compression under Jot is
|
||||||
** loss-less. Compaction refers to a process where certain pieces of less
|
** loss-less. Compaction refers to a process where certain pieces of less
|
||||||
** important data are actually omitted from the stream and are possibly
|
** important data are actually omitted from the stream and are possibly
|
||||||
** reconstructed by the reader of the data.
|
** reconstructed by the reader of the data.
|
||||||
**
|
**
|
||||||
** Using Jot, a writing application may choose to compress only, compact only
|
** Using Jot, a writing application may choose to compress only, compact only
|
||||||
** or use some combination. The standard compression mechanism defined here
|
** or use some combination. The standard compression mechanism defined here
|
||||||
@ -654,13 +654,13 @@ typedef U8 INK_COMPACTION_TYPE, FAR *P_INK_COMPACTION_TYPE;
|
|||||||
/*************************/
|
/*************************/
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
** The INK_BUNDLE_FLAGS contain some flags that apply to an entire bundle.
|
** The INK_BUNDLE_FLAGS contain some flags that apply to an entire bundle.
|
||||||
** If you wanted to store several pieces of ink that had different
|
** If you wanted to store several pieces of ink that had different
|
||||||
** INK_BUNDLE_FLAGS, you would do it by storing several different bundles.
|
** INK_BUNDLE_FLAGS, you would do it by storing several different bundles.
|
||||||
**
|
**
|
||||||
** Advisory flags:
|
** Advisory flags:
|
||||||
**
|
**
|
||||||
** inkPointsRemoved
|
** inkPointsRemoved
|
||||||
** Indicates whether all original points are still present or whether
|
** Indicates whether all original points are still present or whether
|
||||||
** some points were removed to save space. For applications that are
|
** some points were removed to save space. For applications that are
|
||||||
** only interested in the visual aspects of ink, many points can be
|
** only interested in the visual aspects of ink, many points can be
|
||||||
@ -677,12 +677,12 @@ typedef U8 INK_COMPACTION_TYPE, FAR *P_INK_COMPACTION_TYPE;
|
|||||||
** replacing individual points with an "elided point" item does not
|
** replacing individual points with an "elided point" item does not
|
||||||
** constitute removing points. ("Elided" means omitted or skipped).
|
** constitute removing points. ("Elided" means omitted or skipped).
|
||||||
**
|
**
|
||||||
** inkProxDataRemoved
|
** inkProxDataRemoved
|
||||||
** Indicates that the original points between strokes (proximity) were
|
** Indicates that the original points between strokes (proximity) were
|
||||||
** removed to save space. An out-of-prox point should be stored between
|
** removed to save space. An out-of-prox point should be stored between
|
||||||
** strokes to delimit them. Some applications depend on knowing the
|
** strokes to delimit them. Some applications depend on knowing the
|
||||||
** time between strokes or at the ends of strokes for certain
|
** time between strokes or at the ends of strokes for certain
|
||||||
** functions.
|
** functions.
|
||||||
**
|
**
|
||||||
** Note:
|
** Note:
|
||||||
** "Proximity" is defined as the stylus being close enough to the tablet
|
** "Proximity" is defined as the stylus being close enough to the tablet
|
||||||
@ -691,17 +691,17 @@ typedef U8 INK_COMPACTION_TYPE, FAR *P_INK_COMPACTION_TYPE;
|
|||||||
** recommended practice is to include "out of proximity" points in the
|
** recommended practice is to include "out of proximity" points in the
|
||||||
** recorded ink data when they are used as part of determining the
|
** recorded ink data when they are used as part of determining the
|
||||||
** amount of time a stylus was out of contact with the tablet, or for
|
** amount of time a stylus was out of contact with the tablet, or for
|
||||||
** triggering the completion of an action such as a "gesture".
|
** triggering the completion of an action such as a "gesture".
|
||||||
**
|
**
|
||||||
** inkStrokeLimitsPresent
|
** inkStrokeLimitsPresent
|
||||||
** Indicates that INK_BUTTONS items are also present, and that they
|
** Indicates that INK_BUTTONS items are also present, and that they
|
||||||
** indicate what the storing app decided the stroke start/end points
|
** indicate what the storing app decided the stroke start/end points
|
||||||
** were. (Note: the reading application may otherwise use a different
|
** were. (Note: the reading application may otherwise use a different
|
||||||
** algorithm for using tip force values to delimit strokes.)
|
** algorithm for using tip force values to delimit strokes.)
|
||||||
**
|
**
|
||||||
** Note:
|
** Note:
|
||||||
** If inkStrokeLimitsPresent is set, then inkButtonDataPresent must also
|
** If inkStrokeLimitsPresent is set, then inkButtonDataPresent must also
|
||||||
** be set.
|
** be set.
|
||||||
**
|
**
|
||||||
** Data flags:
|
** Data flags:
|
||||||
**
|
**
|
||||||
@ -716,7 +716,7 @@ typedef U8 INK_COMPACTION_TYPE, FAR *P_INK_COMPACTION_TYPE;
|
|||||||
** the offset value is added ("pre-multiply")
|
** the offset value is added ("pre-multiply")
|
||||||
** rather than after ("post-multiply")
|
** rather than after ("post-multiply")
|
||||||
**
|
**
|
||||||
** Note:
|
** Note:
|
||||||
** A previous draft version included a provision for compacting data to an
|
** A previous draft version included a provision for compacting data to an
|
||||||
** approximation based on Bezier curves. Initial results did not show
|
** approximation based on Bezier curves. Initial results did not show
|
||||||
** promise in terms of efficiency and performance.
|
** promise in terms of efficiency and performance.
|
||||||
@ -728,7 +728,7 @@ typedef U8 INK_COMPACTION_TYPE, FAR *P_INK_COMPACTION_TYPE;
|
|||||||
** not be used directly to render the data. The definition of these anchor
|
** not be used directly to render the data. The definition of these anchor
|
||||||
** and control points, and the example code for the approximation and
|
** and control points, and the example code for the approximation and
|
||||||
** regeneration of the "true" coordinates could not be worked out at this
|
** regeneration of the "true" coordinates could not be worked out at this
|
||||||
** time.
|
** time.
|
||||||
**
|
**
|
||||||
** Some standard values for pen units per meter follow:
|
** Some standard values for pen units per meter follow:
|
||||||
**
|
**
|
||||||
@ -742,7 +742,7 @@ typedef U8 INK_COMPACTION_TYPE, FAR *P_INK_COMPACTION_TYPE;
|
|||||||
**
|
**
|
||||||
** The specific format for each of these types of data is described in the
|
** The specific format for each of these types of data is described in the
|
||||||
** INK_PENDATA_RECORD documentation (reference section 8.0).
|
** INK_PENDATA_RECORD documentation (reference section 8.0).
|
||||||
**
|
**
|
||||||
** Note:
|
** Note:
|
||||||
** The order in which these flags are defined has nothing to do with the
|
** The order in which these flags are defined has nothing to do with the
|
||||||
** order in which the data appears in the INK_POINT structure when reading
|
** order in which the data appears in the INK_POINT structure when reading
|
||||||
@ -798,7 +798,7 @@ typedef struct tag_INK_BUNDLE_RECORD {
|
|||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
** A penData record contains the actual pen data for one or more pen strokes.
|
** A penData record contains the actual pen data for one or more pen strokes.
|
||||||
** The bounds applies to all the strokes contained within this record.
|
** The bounds applies to all the strokes contained within this record.
|
||||||
** Multiple strokes are typically grouped into one record to increase the
|
** Multiple strokes are typically grouped into one record to increase the
|
||||||
** efficiency of the compression algorithm, though strokes may be stored
|
** efficiency of the compression algorithm, though strokes may be stored
|
||||||
** individually, if desired.
|
** individually, if desired.
|
||||||
@ -823,7 +823,7 @@ typedef struct tag_INK_BUNDLE_RECORD {
|
|||||||
** written by other applications that might group multiple strokes
|
** written by other applications that might group multiple strokes
|
||||||
** into a single INK_PENDATA_RECORD.
|
** into a single INK_PENDATA_RECORD.
|
||||||
**
|
**
|
||||||
** Note:
|
** Note:
|
||||||
** In practice, our experience is that unpacking the data in order to compute
|
** In practice, our experience is that unpacking the data in order to compute
|
||||||
** the bounds for each stroke to check for strokes that intrude into a given
|
** the bounds for each stroke to check for strokes that intrude into a given
|
||||||
** region is not an excessive burden. The checks that would have been done
|
** region is not an excessive burden. The checks that would have been done
|
||||||
@ -860,31 +860,31 @@ typedef struct tag_INK_PENDATA_RECORD {
|
|||||||
** of one) is represented as 0x00010000, a scale of 0.5 as 0x00008000.
|
** of one) is represented as 0x00010000, a scale of 0.5 as 0x00008000.
|
||||||
**
|
**
|
||||||
** Note:
|
** Note:
|
||||||
** All ink is located relative to the lower-left (0,0) corner of a logical
|
** All ink is located relative to the lower-left (0,0) corner of a logical
|
||||||
** page or window. Scale and offset operations are cumulative, much in the
|
** page or window. Scale and offset operations are cumulative, much in the
|
||||||
** same way as in PostScript. One begins with a normalized graphics state
|
** same way as in PostScript. One begins with a normalized graphics state
|
||||||
** and sequentially applies the scale and offset operations to that matrix.
|
** and sequentially applies the scale and offset operations to that matrix.
|
||||||
** The INK_SCALE_RESET record returns the graphics state to its default state
|
** The INK_SCALE_RESET record returns the graphics state to its default state
|
||||||
** (i.e., the transformation matrix is set to an identity matrix and the
|
** (i.e., the transformation matrix is set to an identity matrix and the
|
||||||
** offset is reset to the default of 0). By default, scaling is applied
|
** offset is reset to the default of 0). By default, scaling is applied
|
||||||
** after adding in any offset specified in an INK_OFFSET_RECORD. If the ink
|
** after adding in any offset specified in an INK_OFFSET_RECORD. If the ink
|
||||||
** bundle has the inkPreMultiplyScale bit set, for all ink in that bundle
|
** bundle has the inkPreMultiplyScale bit set, for all ink in that bundle
|
||||||
** scaling is applied before adding in any offset.
|
** scaling is applied before adding in any offset.
|
||||||
**
|
**
|
||||||
** As used in this format, ink scale and offset values are set by the storing
|
** As used in this format, ink scale and offset values are set by the storing
|
||||||
** application, to be applied by the rendering application. If the storing
|
** application, to be applied by the rendering application. If the storing
|
||||||
** application collected the ink at scales of (2.0,2.0), the storing
|
** application collected the ink at scales of (2.0,2.0), the storing
|
||||||
** application should insert an INK_SCALE_RECORD with a scale of (0.5,0.5)
|
** application should insert an INK_SCALE_RECORD with a scale of (0.5,0.5)
|
||||||
** for the rendering application to multiply all ink X and Y coordinates by.
|
** for the rendering application to multiply all ink X and Y coordinates by.
|
||||||
**
|
**
|
||||||
** It is the responsibility of the storing application to deal with any
|
** It is the responsibility of the storing application to deal with any
|
||||||
** effects from round-off or truncation error due to the limits of precision
|
** effects from round-off or truncation error due to the limits of precision
|
||||||
** in the FIXED_FRACTION values used in INK_SCALE_RECORDs.
|
** in the FIXED_FRACTION values used in INK_SCALE_RECORDs.
|
||||||
**
|
**
|
||||||
** An ink scale record indicates a scale change that stays in effect until
|
** An ink scale record indicates a scale change that stays in effect until
|
||||||
** another ink scale record is encountered. Ink scale values compound: if
|
** another ink scale record is encountered. Ink scale values compound: if
|
||||||
** the current scale is (2.0,2.0) and an INK_SCALE_RECORD is encountered with
|
** the current scale is (2.0,2.0) and an INK_SCALE_RECORD is encountered with
|
||||||
** scale of (2.0,3.0), the scale to be applied to ink then becomes(4.0,6.0).
|
** scale of (2.0,3.0), the scale to be applied to ink then becomes(4.0,6.0).
|
||||||
** In absence of any ink scale record, the default ink scale is unity. In
|
** In absence of any ink scale record, the default ink scale is unity. In
|
||||||
** general, a typical usage pattern for an application that supports drawing
|
** general, a typical usage pattern for an application that supports drawing
|
||||||
** ink while zoomed at scale is to record a number of strokes at a given
|
** ink while zoomed at scale is to record a number of strokes at a given
|
||||||
@ -940,10 +940,10 @@ typedef struct tag_INK_SCALE_RECORD {
|
|||||||
** would have an offset position, markup ink over an entire form would not
|
** would have an offset position, markup ink over an entire form would not
|
||||||
** have a offset position (or would have an offset position of (0,0) and a
|
** have a offset position (or would have an offset position of (0,0) and a
|
||||||
** scale of (1,1)) because it is relative to the entire form coordinate
|
** scale of (1,1)) because it is relative to the entire form coordinate
|
||||||
** system, not relative to some piece in the form.
|
** system, not relative to some piece in the form.
|
||||||
**
|
**
|
||||||
** Note:
|
** Note:
|
||||||
** This approach allows a reader to "blindly" apply the scale and offset
|
** This approach allows a reader to "blindly" apply the scale and offset
|
||||||
** values specified to ink data, and puts the burden for computing
|
** values specified to ink data, and puts the burden for computing
|
||||||
** compounding of multiple zoom levels, etc., on the writing application.
|
** compounding of multiple zoom levels, etc., on the writing application.
|
||||||
**
|
**
|
||||||
@ -993,10 +993,10 @@ typedef struct tag_INK_SCALE_RESET_RECORD {
|
|||||||
** "erase" function, such as the ability to erase annotation ink on an
|
** "erase" function, such as the ability to erase annotation ink on an
|
||||||
** "original" document (perhaps a FAX image) the "erase" color restores the
|
** "original" document (perhaps a FAX image) the "erase" color restores the
|
||||||
** background image where painted. The "background image" is defined by the
|
** background image where painted. The "background image" is defined by the
|
||||||
** rendering application.
|
** rendering application.
|
||||||
**
|
**
|
||||||
** Applications which do not support a true "erase" function may interpret
|
** Applications which do not support a true "erase" function may interpret
|
||||||
** this as some other drawing function, such as drawing the "background"
|
** this as some other drawing function, such as drawing the "background"
|
||||||
** color.
|
** color.
|
||||||
**
|
**
|
||||||
**------------------------------------------------------------------------*/
|
**------------------------------------------------------------------------*/
|
||||||
@ -1022,8 +1022,8 @@ typedef struct tag_INK_COLOR_RECORD {
|
|||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
** Standardized opacity values:
|
** Standardized opacity values:
|
||||||
** A recommended practice is that an opacity value of 128 (midway between
|
** A recommended practice is that an opacity value of 128 (midway between
|
||||||
** 0 and 255) be used for "highlighter" colors. A recommended practice is
|
** 0 and 255) be used for "highlighter" colors. A recommended practice is
|
||||||
** that grey values as defined below be used for "standard grey"
|
** that grey values as defined below be used for "standard grey"
|
||||||
** highlighters.
|
** highlighters.
|
||||||
**-------------------------------------------------------------------------*/
|
**-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@ -1055,7 +1055,7 @@ typedef struct tag_INK_COLOR_RECORD {
|
|||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
** Time is measured in milliseconds.
|
** Time is measured in milliseconds.
|
||||||
**
|
**
|
||||||
** Note:
|
** Note:
|
||||||
** Because of the difficulty synchronizing clocks on different machines
|
** Because of the difficulty synchronizing clocks on different machines
|
||||||
** at the time granularity of digitizing tablets, and because the "editing"
|
** at the time granularity of digitizing tablets, and because the "editing"
|
||||||
@ -1069,12 +1069,12 @@ typedef struct tag_INK_COLOR_RECORD {
|
|||||||
** End time records are not required. The interpretation of an end time
|
** End time records are not required. The interpretation of an end time
|
||||||
** which is in conflict with the end time inferred from the assumed data rate
|
** which is in conflict with the end time inferred from the assumed data rate
|
||||||
** of points and the number of points (including elided points) is not
|
** of points and the number of points (including elided points) is not
|
||||||
** defined.
|
** defined.
|
||||||
**
|
**
|
||||||
** Start time is the time for the first point in the following penData record
|
** Start time is the time for the first point in the following penData record
|
||||||
** and end time is the time of the last point in the following penData
|
** and end time is the time of the last point in the following penData
|
||||||
** record, because if you are recording tip force, the exact definition of
|
** record, because if you are recording tip force, the exact definition of
|
||||||
** pen up and pen down may be fuzzy and/or application dependent.
|
** pen up and pen down may be fuzzy and/or application dependent.
|
||||||
**
|
**
|
||||||
**------------------------------------------------------------------------*/
|
**------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@ -1107,7 +1107,7 @@ typedef struct tag_INK_END_TIME_RECORD {
|
|||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
** INK_PENDATA_RECORDs can be grouped. If they are grouped, each
|
** INK_PENDATA_RECORDs can be grouped. If they are grouped, each
|
||||||
** INK_PENDATA_RECORD can be assigned a group number. All
|
** INK_PENDATA_RECORD can be assigned a group number. All
|
||||||
** INK_PENDATA_RECORDs with the same group number belong to the same group.
|
** INK_PENDATA_RECORDs with the same group number belong to the same group.
|
||||||
**
|
**
|
||||||
** The exact interpretation of grouping is up the applications involved.
|
** The exact interpretation of grouping is up the applications involved.
|
||||||
** Writing applications may group ink data, but not all reading applications
|
** Writing applications may group ink data, but not all reading applications
|
||||||
@ -1156,7 +1156,7 @@ typedef struct tag_INK_GROUP_RECORD {
|
|||||||
/**************************/
|
/**************************/
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
** Some applications may support the idea of rendering ink as if it were
|
** Some applications may support the idea of rendering ink as if it were
|
||||||
** drawn by a certain shaped pen tip. The most common pen tips would be
|
** drawn by a certain shaped pen tip. The most common pen tips would be
|
||||||
** round or rectangular. The exact details of how to render a given pen
|
** round or rectangular. The exact details of how to render a given pen
|
||||||
** tip will be application specific, but this record states what pen tip
|
** tip will be application specific, but this record states what pen tip
|
||||||
@ -1169,15 +1169,15 @@ typedef struct tag_INK_GROUP_RECORD {
|
|||||||
** at the end of the structure.
|
** at the end of the structure.
|
||||||
**
|
**
|
||||||
** The writing application should be aware that the reading application will
|
** The writing application should be aware that the reading application will
|
||||||
** only do "the best possible" job of rendering and that fully compliant
|
** only do "the best possible" job of rendering and that fully compliant
|
||||||
** reading applications may not be able to render certain nib types and/or
|
** reading applications may not be able to render certain nib types and/or
|
||||||
** colors. Both reading and writing applications should pay particular
|
** colors. Both reading and writing applications should pay particular
|
||||||
** attention to the following notes regarding defaults and ink drawn at a
|
** attention to the following notes regarding defaults and ink drawn at a
|
||||||
** width of zero.
|
** width of zero.
|
||||||
**
|
**
|
||||||
** A pen tip which is drawing ink in zero width renders at the minimum
|
** A pen tip which is drawing ink in zero width renders at the minimum
|
||||||
** visible width the reading application will support.
|
** visible width the reading application will support.
|
||||||
**
|
**
|
||||||
** A recommended practice is that ink which should not render (should this
|
** A recommended practice is that ink which should not render (should this
|
||||||
** be called for) be drawn with a color value of (0,0,0, 0), i.e., black,
|
** be called for) be drawn with a color value of (0,0,0, 0), i.e., black,
|
||||||
** completely transparent.
|
** completely transparent.
|
||||||
@ -1185,14 +1185,14 @@ typedef struct tag_INK_GROUP_RECORD {
|
|||||||
** Pen tip size should scale when an INK_SCALE_RECORD is encountered. The
|
** Pen tip size should scale when an INK_SCALE_RECORD is encountered. The
|
||||||
** writing application should write a new INK_PENTIP_RECORD after an
|
** writing application should write a new INK_PENTIP_RECORD after an
|
||||||
** INK_SCALE_RECORD if the writing application does not want the pen tip
|
** INK_SCALE_RECORD if the writing application does not want the pen tip
|
||||||
** size to scale along with the ink. If the pen tip scales to zero width,
|
** size to scale along with the ink. If the pen tip scales to zero width,
|
||||||
** it should be rendered by the reading application according to the comment
|
** it should be rendered by the reading application according to the comment
|
||||||
** above.
|
** above.
|
||||||
**
|
**
|
||||||
** The default pen tip if no pentip record exists is INK_PENTIP_ROUND, with a
|
** The default pen tip if no pentip record exists is INK_PENTIP_ROUND, with a
|
||||||
** width of one twip. The dimensions of a round nib specify diameter, not
|
** width of one twip. The dimensions of a round nib specify diameter, not
|
||||||
** radius: the X/Y coordinate is the center of this diameter. Similarly, for
|
** radius: the X/Y coordinate is the center of this diameter. Similarly, for
|
||||||
** for rectangular nibs, the X/Y coordinate is the center of the rectangle.
|
** for rectangular nibs, the X/Y coordinate is the center of the rectangle.
|
||||||
**
|
**
|
||||||
** Note:
|
** Note:
|
||||||
** This specification does not specify information for an algorithmic
|
** This specification does not specify information for an algorithmic
|
||||||
@ -1201,7 +1201,7 @@ typedef struct tag_INK_GROUP_RECORD {
|
|||||||
** application to draw wider ink as the user presses down harder with the
|
** application to draw wider ink as the user presses down harder with the
|
||||||
** stylus. Applications wishing to implement such features may do so using
|
** stylus. Applications wishing to implement such features may do so using
|
||||||
** application-specific record types for this revision of the specification.
|
** application-specific record types for this revision of the specification.
|
||||||
**
|
**
|
||||||
**------------------------------------------------------------------------*/
|
**------------------------------------------------------------------------*/
|
||||||
|
|
||||||
typedef S16 INK_PENTIP, FAR *P_INK_PENTIP;
|
typedef S16 INK_PENTIP, FAR *P_INK_PENTIP;
|
||||||
@ -1248,7 +1248,7 @@ typedef struct tag_INK_PENTIP_RECORD {
|
|||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
** For some applications, it will be important to know the sampling rate of
|
** For some applications, it will be important to know the sampling rate of
|
||||||
** the pen digitizer.
|
** the pen digitizer.
|
||||||
**
|
**
|
||||||
** This record would likely be present once in a bundle and would typically
|
** This record would likely be present once in a bundle and would typically
|
||||||
** be after the INK_BUNDLE_RECORD, but before the first pen data.
|
** be after the INK_BUNDLE_RECORD, but before the first pen data.
|
||||||
@ -1259,7 +1259,7 @@ typedef struct tag_INK_PENTIP_RECORD {
|
|||||||
** ink at the specified rate. It is likely that most types of rendering
|
** ink at the specified rate. It is likely that most types of rendering
|
||||||
** applications will render ink as rapidly as possible to construct a display
|
** applications will render ink as rapidly as possible to construct a display
|
||||||
** in minimum time, and that some types of animation applications will
|
** in minimum time, and that some types of animation applications will
|
||||||
** intentionally set an arbitrary sampling rate to vary the display rate.
|
** intentionally set an arbitrary sampling rate to vary the display rate.
|
||||||
**
|
**
|
||||||
** Note:
|
** Note:
|
||||||
** For hardware which supports a highly variable sampling rate, the writing
|
** For hardware which supports a highly variable sampling rate, the writing
|
||||||
@ -1328,15 +1328,15 @@ typedef struct tag_INK_UNITS_PER_Z_RECORD {
|
|||||||
** start and end are likely to differ, a recommended practice for writing
|
** start and end are likely to differ, a recommended practice for writing
|
||||||
** applications that use the tip force value to determine the "touch" points
|
** applications that use the tip force value to determine the "touch" points
|
||||||
** in a stroke is to mark those points using the touch bit in the INK_BUTTONS
|
** in a stroke is to mark those points using the touch bit in the INK_BUTTONS
|
||||||
** structure.
|
** structure.
|
||||||
**
|
**
|
||||||
** It is also recommended that vendors supporting tip force sensing in their
|
** It is also recommended that vendors supporting tip force sensing in their
|
||||||
** hardware linearize their transducers to the greatest extent possible.
|
** hardware linearize their transducers to the greatest extent possible.
|
||||||
**
|
**
|
||||||
** Because of the likelihood that tip force transducers may not be accurately
|
** Because of the likelihood that tip force transducers may not be accurately
|
||||||
** linearized, negative tip force values, while perhaps somewhat absurd
|
** linearized, negative tip force values, while perhaps somewhat absurd
|
||||||
** are possible and are permitted in this specification.
|
** are possible and are permitted in this specification.
|
||||||
**
|
**
|
||||||
**------------------------------------------------------------------------*/
|
**------------------------------------------------------------------------*/
|
||||||
|
|
||||||
typedef struct tag_INK_UNITS_PER_FORCE_RECORD {
|
typedef struct tag_INK_UNITS_PER_FORCE_RECORD {
|
||||||
@ -1366,8 +1366,8 @@ typedef struct tag_INK_UNITS_PER_FORCE_RECORD {
|
|||||||
** subRecordTypes that they wish to use. Then, using these subRecordTypes
|
** subRecordTypes that they wish to use. Then, using these subRecordTypes
|
||||||
** they can put a wide variety of information into the file. By examining
|
** they can put a wide variety of information into the file. By examining
|
||||||
** the appData signature and comparing it to theirs, an application can
|
** the appData signature and comparing it to theirs, an application can
|
||||||
** decide whether it knows how to interpret the various subRecordtypes.
|
** decide whether it knows how to interpret the various subRecordtypes.
|
||||||
**
|
**
|
||||||
**------------------------------------------------------------------------*/
|
**------------------------------------------------------------------------*/
|
||||||
|
|
||||||
typedef struct tag_INK_APP_RECORD {
|
typedef struct tag_INK_APP_RECORD {
|
||||||
@ -1393,16 +1393,16 @@ typedef struct tag_INK_APP_RECORD {
|
|||||||
** Uncompacted point format:
|
** Uncompacted point format:
|
||||||
** -------------------------
|
** -------------------------
|
||||||
**
|
**
|
||||||
** This structure immediately follows the rest of the INK_PENDATA_RECORD.
|
** This structure immediately follows the rest of the INK_PENDATA_RECORD.
|
||||||
** The structure has several optional components, present or not present as
|
** The structure has several optional components, present or not present as
|
||||||
** indicated by the INK_BUNDLE_FLAGS in the INK_BUNDLE_RECORD. The format is
|
** indicated by the INK_BUNDLE_FLAGS in the INK_BUNDLE_RECORD. The format is
|
||||||
** a sequence of "point values", each containing all the scalar data for each
|
** a sequence of "point values", each containing all the scalar data for each
|
||||||
** sampled tablet point.
|
** sampled tablet point.
|
||||||
**
|
**
|
||||||
** In the uncompacted format, there is a single structure that contains all
|
** In the uncompacted format, there is a single structure that contains all
|
||||||
** of the state information for each point from the tablet. Components not
|
** of the state information for each point from the tablet. Components not
|
||||||
** present (as indicated by the INK_BUNDLE_FLAGS) are just that: not present,
|
** present (as indicated by the INK_BUNDLE_FLAGS) are just that: not present,
|
||||||
** do not exist, do not occupy space.
|
** do not exist, do not occupy space.
|
||||||
**
|
**
|
||||||
** Compacted point format:
|
** Compacted point format:
|
||||||
** -----------------------
|
** -----------------------
|
||||||
@ -1416,7 +1416,7 @@ typedef struct tag_INK_APP_RECORD {
|
|||||||
** force data, and explicit starts and ends of strokes: the starts and ends
|
** force data, and explicit starts and ends of strokes: the starts and ends
|
||||||
** of the strokes are then points that were considered to be such by the
|
** of the strokes are then points that were considered to be such by the
|
||||||
** original application storing the data. The INK_BUTTONS record reflects
|
** original application storing the data. The INK_BUTTONS record reflects
|
||||||
** the state of the next X/Y point following.
|
** the state of the next X/Y point following.
|
||||||
**
|
**
|
||||||
**------------------------------------------------------------------------*/
|
**------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@ -1493,12 +1493,12 @@ typedef U32 INK_BUTTONS, FAR * P_INK_BUTTONS;
|
|||||||
/**************************/
|
/**************************/
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
** INK_POINT data. The INK_POINT structure varies in size depending on
|
** INK_POINT data. The INK_POINT structure varies in size depending on
|
||||||
** flags set in the bundle header. The XY32 position is always present, but
|
** flags set in the bundle header. The XY32 position is always present, but
|
||||||
** the force, rho, height, angle, and buttons members are only present when
|
** the force, rho, height, angle, and buttons members are only present when
|
||||||
** indicated by the corresponding flag in the bundle header. When optional
|
** indicated by the corresponding flag in the bundle header. When optional
|
||||||
** data is present, it is present in the order defined by this structure;
|
** data is present, it is present in the order defined by this structure;
|
||||||
** that is, position, force, height, rho, angle, and finally buttons.
|
** that is, position, force, height, rho, angle, and finally buttons.
|
||||||
**
|
**
|
||||||
** The INK_POINT structure has the following elements:
|
** The INK_POINT structure has the following elements:
|
||||||
**
|
**
|
||||||
@ -1511,20 +1511,20 @@ typedef U32 INK_BUTTONS, FAR * P_INK_BUTTONS;
|
|||||||
** height - optional, present if inkHeightDataPresent is asserted
|
** height - optional, present if inkHeightDataPresent is asserted
|
||||||
** Units are in pen unitsPerZ as specified by inkPointDefaultUnitsPerZ or
|
** Units are in pen unitsPerZ as specified by inkPointDefaultUnitsPerZ or
|
||||||
** by an INK_UNITS_PER_Z_RECORD, whichever is appropriate. Units increase
|
** by an INK_UNITS_PER_Z_RECORD, whichever is appropriate. Units increase
|
||||||
** as the stylus is taken away from the tablet. Zero means "just in
|
** as the stylus is taken away from the tablet. Zero means "just in
|
||||||
** contact". Negative values could possibly result from spring action if
|
** contact". Negative values could possibly result from spring action if
|
||||||
** the stylus is pressed hard, or if the tablet is not perfectly accurate.
|
** the stylus is pressed hard, or if the tablet is not perfectly accurate.
|
||||||
** rho - optional, present if inkRotationDataPresent is asserted
|
** rho - optional, present if inkRotationDataPresent is asserted
|
||||||
** Angles are measured in degrees from some nominal orientation of
|
** Angles are measured in degrees from some nominal orientation of
|
||||||
** "stylus button on top" (somewhat arbitrary). Angles increase with
|
** "stylus button on top" (somewhat arbitrary). Angles increase with
|
||||||
** clockwise rotation as seen from the rear end of the stylus.
|
** clockwise rotation as seen from the rear end of the stylus.
|
||||||
** angle - optional, present if inkAngleDataPresent is asserted
|
** angle - optional, present if inkAngleDataPresent is asserted
|
||||||
** Angles are measured in pen angle units from the vertical. Theta
|
** Angles are measured in pen angle units from the vertical. Theta
|
||||||
** increases in the positive-X direction, phi in the positive-Y.
|
** increases in the positive-X direction, phi in the positive-Y.
|
||||||
** buttons - optional, present if inkButtonDataPresent is asserted
|
** buttons - optional, present if inkButtonDataPresent is asserted
|
||||||
**
|
**
|
||||||
** When the INK_BUNDLE_RECORD member compactionType is inkStdCompression,
|
** When the INK_BUNDLE_RECORD member compactionType is inkStdCompression,
|
||||||
** all data in this structure is compressed according to the methods
|
** all data in this structure is compressed according to the methods
|
||||||
** described in reference section 23.0. For more details on how to interpret
|
** described in reference section 23.0. For more details on how to interpret
|
||||||
** the compressed data stream, see the sample code. The bundle flags which
|
** the compressed data stream, see the sample code. The bundle flags which
|
||||||
** indicate whether a particular piece of data is present are used regardless
|
** indicate whether a particular piece of data is present are used regardless
|
||||||
@ -1532,12 +1532,12 @@ typedef U32 INK_BUTTONS, FAR * P_INK_BUTTONS;
|
|||||||
** in compressed format, it is NOT written in Intel order but rather most
|
** in compressed format, it is NOT written in Intel order but rather most
|
||||||
** significant byte first. In compressed form, some of the eight bit delta
|
** significant byte first. In compressed form, some of the eight bit delta
|
||||||
** values are reserved for button data and elided (skipped) point counts.
|
** values are reserved for button data and elided (skipped) point counts.
|
||||||
** This has two important ramifications. 1) When expecting a point,
|
** This has two important ramifications. 1) When expecting a point,
|
||||||
** compacted button data or elided point data may be encountered instead, and
|
** compacted button data or elided point data may be encountered instead, and
|
||||||
** 2) when the inkButtonDataPresent flag is asserted in the bundle header,
|
** 2) when the inkButtonDataPresent flag is asserted in the bundle header,
|
||||||
** button data will appear in the place of a point and not in addition to a
|
** button data will appear in the place of a point and not in addition to a
|
||||||
** point. If inkButtonDataPresent is not asserted, the reader need not check
|
** point. If inkButtonDataPresent is not asserted, the reader need not check
|
||||||
** the point data for the special case of button data; however, the point
|
** the point data for the special case of button data; however, the point
|
||||||
** data must still be checked to see if it is a count of elided points rather
|
** data must still be checked to see if it is a count of elided points rather
|
||||||
** than an actual point.
|
** than an actual point.
|
||||||
**
|
**
|
||||||
@ -1561,7 +1561,7 @@ typedef struct tag_INK_POINT {
|
|||||||
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------
|
/*-------------------------------------------------------------------------
|
||||||
** The following default values are assumed before the start of any
|
** The following default values are assumed before the start of any
|
||||||
** INK_BUNDLE:
|
** INK_BUNDLE:
|
||||||
**
|
**
|
||||||
**------------------------------------------------------------------------*/
|
**------------------------------------------------------------------------*/
|
||||||
@ -1587,7 +1587,7 @@ typedef struct tag_INK_POINT {
|
|||||||
**
|
**
|
||||||
** A recommended practice is always to use the compacted point format, not
|
** A recommended practice is always to use the compacted point format, not
|
||||||
** the uncompacted point format. Sample code for reading and writing the
|
** the uncompacted point format. Sample code for reading and writing the
|
||||||
** compacted format is included in an appendix.
|
** compacted format is included in an appendix.
|
||||||
**
|
**
|
||||||
** This structure also immediately follows the rest of the
|
** This structure also immediately follows the rest of the
|
||||||
** INK_PENDATA_RECORD.
|
** INK_PENDATA_RECORD.
|
||||||
@ -1601,10 +1601,10 @@ typedef struct tag_INK_POINT {
|
|||||||
** The storing application, as an alternative to eliminating points, can
|
** The storing application, as an alternative to eliminating points, can
|
||||||
** specify a "skip" record for elided points. The skipRecord indicates that
|
** specify a "skip" record for elided points. The skipRecord indicates that
|
||||||
** a number of points were skipped, and the reading application is free to
|
** a number of points were skipped, and the reading application is free to
|
||||||
** insert values for the elided points (interpolating where appropriate).
|
** insert values for the elided points (interpolating where appropriate).
|
||||||
** The intent is to allow for accurate time information to be maintained
|
** The intent is to allow for accurate time information to be maintained
|
||||||
** between time stamps for synchronization with recorded voice, press-hold
|
** between time stamps for synchronization with recorded voice, press-hold
|
||||||
** gesture recognition, etc.
|
** gesture recognition, etc.
|
||||||
**
|
**
|
||||||
** Compacted data is written most significant byte first so that reading
|
** Compacted data is written most significant byte first so that reading
|
||||||
** applications can read the first byte and determine (from the top two bits)
|
** applications can read the first byte and determine (from the top two bits)
|
||||||
@ -1618,9 +1618,9 @@ typedef struct tag_INK_POINT {
|
|||||||
** and MAX_S7. Similarly, the reserved encoding for 8 bit deltas are all 8
|
** and MAX_S7. Similarly, the reserved encoding for 8 bit deltas are all 8
|
||||||
** bit delta pairs where both X and Y are within the inclusive range MIN_S3
|
** bit delta pairs where both X and Y are within the inclusive range MIN_S3
|
||||||
** and MAX_S3. In revision 1.0 of Jot, three of the reserved encodings for 8
|
** and MAX_S3. In revision 1.0 of Jot, three of the reserved encodings for 8
|
||||||
** bit deltas are used for special cases: skip counts (reference section
|
** bit deltas are used for special cases: skip counts (reference section
|
||||||
** 27.0) and button changes (reference section 26.0).
|
** 27.0) and button changes (reference section 26.0).
|
||||||
**
|
**
|
||||||
** x/y position:
|
** x/y position:
|
||||||
** ------------
|
** ------------
|
||||||
**
|
**
|
||||||
@ -1744,7 +1744,7 @@ typedef struct tag_INK_POINT {
|
|||||||
** |1|0|(S3 delta-theta)|(S3 delta-phi)|
|
** |1|0|(S3 delta-theta)|(S3 delta-phi)|
|
||||||
** -------------------------------------
|
** -------------------------------------
|
||||||
**
|
**
|
||||||
** Note:
|
** Note:
|
||||||
** Leading bit values of |1|1| are reserved
|
** Leading bit values of |1|1| are reserved
|
||||||
**
|
**
|
||||||
**------------------------------------------------------------------------*/
|
**------------------------------------------------------------------------*/
|
||||||
@ -1760,16 +1760,16 @@ typedef struct tag_INK_POINT {
|
|||||||
** Since the X/Y data is always present, we use some of the reserved delta
|
** Since the X/Y data is always present, we use some of the reserved delta
|
||||||
** encodings to encode button states and elided (skipped) points. We use the
|
** encodings to encode button states and elided (skipped) points. We use the
|
||||||
** 8-bit delta encodings that are unused: the values that can fit into the
|
** 8-bit delta encodings that are unused: the values that can fit into the
|
||||||
** smaller 4-bit delta encodings.
|
** smaller 4-bit delta encodings.
|
||||||
**
|
**
|
||||||
** Button/tip records:
|
** Button/tip records:
|
||||||
** ------------------
|
** ------------------
|
||||||
**
|
**
|
||||||
** It is assumed that the state of barrel buttons and the touching sensor on
|
** It is assumed that the state of barrel buttons and the touching sensor on
|
||||||
** the stylus change infrequently. A compacted button/tip record is only
|
** the stylus change infrequently. A compacted button/tip record is only
|
||||||
** included when the state changes in one of the switches. The button state
|
** included when the state changes in one of the switches. The button state
|
||||||
** value applies to the X/Y point immediately following the button state
|
** value applies to the X/Y point immediately following the button state
|
||||||
** record.
|
** record.
|
||||||
**
|
**
|
||||||
**
|
**
|
||||||
** (Taken from 8-bit byte delta X/Y: two bytes total)
|
** (Taken from 8-bit byte delta X/Y: two bytes total)
|
||||||
@ -1779,7 +1779,7 @@ typedef struct tag_INK_POINT {
|
|||||||
** (delta-X) (delta-Y)
|
** (delta-X) (delta-Y)
|
||||||
**
|
**
|
||||||
** An eight-bit delta with delta-X == 0 or 1, and delta-Y in the range
|
** An eight-bit delta with delta-X == 0 or 1, and delta-Y in the range
|
||||||
** (-4..3) indicates a button state encoding.
|
** (-4..3) indicates a button state encoding.
|
||||||
**
|
**
|
||||||
** It is likely to be the case that many hardware platforms have only one
|
** It is likely to be the case that many hardware platforms have only one
|
||||||
** barrel button.
|
** barrel button.
|
||||||
@ -1794,10 +1794,10 @@ typedef struct tag_INK_POINT {
|
|||||||
**
|
**
|
||||||
** The lowest order bit of the delta-X bits is used to indicate that
|
** The lowest order bit of the delta-X bits is used to indicate that
|
||||||
** additional bytes follow: "1" indicates that the next byte is used for the
|
** additional bytes follow: "1" indicates that the next byte is used for the
|
||||||
** next 7 barrel buttons with state. The high order bit of each sequential
|
** next 7 barrel buttons with state. The high order bit of each sequential
|
||||||
** byte in the series is "1" if an additional byte must be fetched, "0"
|
** byte in the series is "1" if an additional byte must be fetched, "0"
|
||||||
** otherwise. In these additional bytes, the additional buttons are
|
** otherwise. In these additional bytes, the additional buttons are
|
||||||
** associated in order starting with the low-order bit.
|
** associated in order starting with the low-order bit.
|
||||||
**
|
**
|
||||||
**------------------------------------------------------------------------*/
|
**------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@ -1825,10 +1825,10 @@ typedef struct tag_INK_POINT {
|
|||||||
** skip count value.
|
** skip count value.
|
||||||
**
|
**
|
||||||
** The elided points are points removed between the point immediately prior
|
** The elided points are points removed between the point immediately prior
|
||||||
** to the skipped-point record and the point immediately afterward. This
|
** to the skipped-point record and the point immediately afterward. This
|
||||||
** implies that at least one point must follow every skip record (though
|
** implies that at least one point must follow every skip record (though
|
||||||
** the point may not appear next in the stream if there are intervening
|
** the point may not appear next in the stream if there are intervening
|
||||||
** button state transitions). Reading applications that are interested in
|
** button state transitions). Reading applications that are interested in
|
||||||
** recovering elided points will typically interpolate. Skip counts of zero
|
** recovering elided points will typically interpolate. Skip counts of zero
|
||||||
** are meaningless and not permitted.
|
** are meaningless and not permitted.
|
||||||
**
|
**
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
* Permission is granted to copy and distribute source with out fee.
|
* Permission is granted to copy and distribute source with out fee.
|
||||||
* Commercialization of this product requires prior licensing
|
* Commercialization of this product requires prior licensing
|
||||||
* from the National Center for Supercomputing Applications of the
|
* from the National Center for Supercomputing Applications of the
|
||||||
* University of Illinois. Commercialization includes the integration of this
|
* University of Illinois. Commercialization includes the integration of this
|
||||||
* code in part or whole into a product for resale. Free distribution of
|
* code in part or whole into a product for resale. Free distribution of
|
||||||
* unmodified source and use of NCSA software is not considered
|
* unmodified source and use of NCSA software is not considered
|
||||||
* commercialization.
|
* commercialization.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -18,7 +18,7 @@
|
|||||||
* list contains pointers to the head, tail, and current list position.
|
* list contains pointers to the head, tail, and current list position.
|
||||||
* the list itsself is doubly linked with both next and previous pointers.
|
* the list itsself is doubly linked with both next and previous pointers.
|
||||||
*
|
*
|
||||||
* ddt
|
* ddt
|
||||||
*/
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "listP.h"
|
#include "listP.h"
|
||||||
@ -166,7 +166,7 @@ struct LISTINSTANCE *m;
|
|||||||
FREE(m);
|
FREE(m);
|
||||||
}
|
}
|
||||||
FREE(theList);
|
FREE(theList);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ struct LISTINSTANCE *l;
|
|||||||
theList->current = l;
|
theList->current = l;
|
||||||
|
|
||||||
theList->listCount++;
|
theList->listCount++;
|
||||||
|
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,7 +230,7 @@ struct LISTINSTANCE *l;
|
|||||||
theList->current = l;
|
theList->current = l;
|
||||||
|
|
||||||
return(NIL);
|
return(NIL);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -297,7 +297,7 @@ List theList;
|
|||||||
char *entry;
|
char *entry;
|
||||||
int count;
|
int count;
|
||||||
struct LISTINSTANCE *saveCurrent;
|
struct LISTINSTANCE *saveCurrent;
|
||||||
*/
|
*/
|
||||||
if (theList) {
|
if (theList) {
|
||||||
return(theList->listCount);
|
return(theList->listCount);
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
* Permission is granted to copy and distribute source with out fee.
|
* Permission is granted to copy and distribute source with out fee.
|
||||||
* Commercialization of this product requires prior licensing
|
* Commercialization of this product requires prior licensing
|
||||||
* from the National Center for Supercomputing Applications of the
|
* from the National Center for Supercomputing Applications of the
|
||||||
* University of Illinois. Commercialization includes the integration of this
|
* University of Illinois. Commercialization includes the integration of this
|
||||||
* code in part or whole into a product for resale. Free distribution of
|
* code in part or whole into a product for resale. Free distribution of
|
||||||
* unmodified source and use of NCSA software is not considered
|
* unmodified source and use of NCSA software is not considered
|
||||||
* commercialization.
|
* commercialization.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
* Permission is granted to copy and distribute source with out fee.
|
* Permission is granted to copy and distribute source with out fee.
|
||||||
* Commercialization of this product requires prior licensing
|
* Commercialization of this product requires prior licensing
|
||||||
* from the National Center for Supercomputing Applications of the
|
* from the National Center for Supercomputing Applications of the
|
||||||
* University of Illinois. Commercialization includes the integration of this
|
* University of Illinois. Commercialization includes the integration of this
|
||||||
* code in part or whole into a product for resale. Free distribution of
|
* code in part or whole into a product for resale. Free distribution of
|
||||||
* unmodified source and use of NCSA software is not considered
|
* unmodified source and use of NCSA software is not considered
|
||||||
* commercialization.
|
* commercialization.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -27,7 +27,7 @@ struct LISTINSTANCE {
|
|||||||
struct LISTSTRUCT {
|
struct LISTSTRUCT {
|
||||||
struct LISTINSTANCE *head;
|
struct LISTINSTANCE *head;
|
||||||
struct LISTINSTANCE *tail;
|
struct LISTINSTANCE *tail;
|
||||||
struct LISTINSTANCE *current;
|
struct LISTINSTANCE *current;
|
||||||
int listCount;
|
int listCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
* Permission is granted to copy and distribute source with out fee.
|
* Permission is granted to copy and distribute source with out fee.
|
||||||
* Commercialization of this product requires prior licensing
|
* Commercialization of this product requires prior licensing
|
||||||
* from the National Center for Supercomputing Applications of the
|
* from the National Center for Supercomputing Applications of the
|
||||||
* University of Illinois. Commercialization includes the integration of this
|
* University of Illinois. Commercialization includes the integration of this
|
||||||
* code in part or whole into a product for resale. Free distribution of
|
* code in part or whole into a product for resale. Free distribution of
|
||||||
* unmodified source and use of NCSA software is not considered
|
* unmodified source and use of NCSA software is not considered
|
||||||
* commercialization.
|
* commercialization.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
* Permission is granted to copy and distribute source with out fee.
|
* Permission is granted to copy and distribute source with out fee.
|
||||||
* Commercialization of this product requires prior licensing
|
* Commercialization of this product requires prior licensing
|
||||||
* from the National Center for Supercomputing Applications of the
|
* from the National Center for Supercomputing Applications of the
|
||||||
* University of Illinois. Commercialization includes the integration of this
|
* University of Illinois. Commercialization includes the integration of this
|
||||||
* code in part or whole into a product for resale. Free distribution of
|
* code in part or whole into a product for resale. Free distribution of
|
||||||
* unmodified source and use of NCSA software is not considered
|
* unmodified source and use of NCSA software is not considered
|
||||||
* commercialization.
|
* commercialization.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
* Permission is granted to copy and distribute source with out fee.
|
* Permission is granted to copy and distribute source with out fee.
|
||||||
* Commercialization of this product requires prior licensing
|
* Commercialization of this product requires prior licensing
|
||||||
* from the National Center for Supercomputing Applications of the
|
* from the National Center for Supercomputing Applications of the
|
||||||
* University of Illinois. Commercialization includes the integration of this
|
* University of Illinois. Commercialization includes the integration of this
|
||||||
* code in part or whole into a product for resale. Free distribution of
|
* code in part or whole into a product for resale. Free distribution of
|
||||||
* unmodified source and use of NCSA software is not considered
|
* unmodified source and use of NCSA software is not considered
|
||||||
* commercialization.
|
* commercialization.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -152,7 +152,7 @@ struct LISTINSTANCE *m;
|
|||||||
FREE(m);
|
FREE(m);
|
||||||
}
|
}
|
||||||
FREE(theList);
|
FREE(theList);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -186,7 +186,7 @@ struct LISTINSTANCE *l;
|
|||||||
}
|
}
|
||||||
|
|
||||||
theList->current = l;
|
theList->current = l;
|
||||||
|
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,7 +214,7 @@ struct LISTINSTANCE *l;
|
|||||||
theList->current = l;
|
theList->current = l;
|
||||||
|
|
||||||
return(NIL);
|
return(NIL);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
* Permission is granted to copy and distribute source with out fee.
|
* Permission is granted to copy and distribute source with out fee.
|
||||||
* Commercialization of this product requires prior licensing
|
* Commercialization of this product requires prior licensing
|
||||||
* from the National Center for Supercomputing Applications of the
|
* from the National Center for Supercomputing Applications of the
|
||||||
* University of Illinois. Commercialization includes the integration of this
|
* University of Illinois. Commercialization includes the integration of this
|
||||||
* code in part or whole into a product for resale. Free distribution of
|
* code in part or whole into a product for resale. Free distribution of
|
||||||
* unmodified source and use of NCSA software is not considered
|
* unmodified source and use of NCSA software is not considered
|
||||||
* commercialization.
|
* commercialization.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
* Permission is granted to copy and distribute source with out fee.
|
* Permission is granted to copy and distribute source with out fee.
|
||||||
* Commercialization of this product requires prior licensing
|
* Commercialization of this product requires prior licensing
|
||||||
* from the National Center for Supercomputing Applications of the
|
* from the National Center for Supercomputing Applications of the
|
||||||
* University of Illinois. Commercialization includes the integration of this
|
* University of Illinois. Commercialization includes the integration of this
|
||||||
* code in part or whole into a product for resale. Free distribution of
|
* code in part or whole into a product for resale. Free distribution of
|
||||||
* unmodified source and use of NCSA software is not considered
|
* unmodified source and use of NCSA software is not considered
|
||||||
* commercialization.
|
* commercialization.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -27,7 +27,7 @@ struct LISTINSTANCE {
|
|||||||
struct LISTSTRUCT {
|
struct LISTSTRUCT {
|
||||||
struct LISTINSTANCE *head;
|
struct LISTINSTANCE *head;
|
||||||
struct LISTINSTANCE *tail;
|
struct LISTINSTANCE *tail;
|
||||||
struct LISTINSTANCE *current;
|
struct LISTINSTANCE *current;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
* Permission is granted to copy and distribute source with out fee.
|
* Permission is granted to copy and distribute source with out fee.
|
||||||
* Commercialization of this product requires prior licensing
|
* Commercialization of this product requires prior licensing
|
||||||
* from the National Center for Supercomputing Applications of the
|
* from the National Center for Supercomputing Applications of the
|
||||||
* University of Illinois. Commercialization includes the integration of this
|
* University of Illinois. Commercialization includes the integration of this
|
||||||
* code in part or whole into a product for resale. Free distribution of
|
* code in part or whole into a product for resale. Free distribution of
|
||||||
* unmodified source and use of NCSA software is not considered
|
* unmodified source and use of NCSA software is not considered
|
||||||
* commercialization.
|
* commercialization.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
142
libnet/net.c
142
libnet/net.c
@ -4,9 +4,9 @@
|
|||||||
* Permission is granted to copy and distribute source with out fee.
|
* Permission is granted to copy and distribute source with out fee.
|
||||||
* Commercialization of this product requires prior licensing
|
* Commercialization of this product requires prior licensing
|
||||||
* from the National Center for Supercomputing Applications of the
|
* from the National Center for Supercomputing Applications of the
|
||||||
* University of Illinois. Commercialization includes the integration of this
|
* University of Illinois. Commercialization includes the integration of this
|
||||||
* code in part or whole into a product for resale. Free distribution of
|
* code in part or whole into a product for resale. Free distribution of
|
||||||
* unmodified source and use of NCSA software is not considered
|
* unmodified source and use of NCSA software is not considered
|
||||||
* commercialization.
|
* commercialization.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -62,8 +62,8 @@ static char rcs_id[] = "$Id: net.c,v 1.4 1995/10/15 18:48:57 spowers Exp $";
|
|||||||
* most case.
|
* most case.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* mods:
|
* mods:
|
||||||
* 2/22/93 (ddt) print out message if user has loaded unsupported
|
* 2/22/93 (ddt) print out message if user has loaded unsupported
|
||||||
* dimensional array
|
* dimensional array
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ SQueue *sq;
|
|||||||
while(sq) {
|
while(sq) {
|
||||||
if (sq->netPort == netPort) {
|
if (sq->netPort == netPort) {
|
||||||
ListDeleteEntry(sendQueue,sq);
|
ListDeleteEntry(sendQueue,sq);
|
||||||
if (sq->failCB)
|
if (sq->failCB)
|
||||||
sq->failCB(sq->data,sq->failCBData);
|
sq->failCB(sq->data,sq->failCBData);
|
||||||
FREE(sq->header);
|
FREE(sq->header);
|
||||||
FREE(sq);
|
FREE(sq);
|
||||||
@ -278,7 +278,7 @@ static int NetUserListAdd(name)
|
|||||||
char *name;
|
char *name;
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
if ((!name) || (!strlen(name)))
|
if ((!name) || (!strlen(name)))
|
||||||
return(-1);
|
return(-1);
|
||||||
p = (char *) ListHead(userList);
|
p = (char *) ListHead(userList);
|
||||||
@ -341,7 +341,7 @@ void DEFUN(NetSetUserID,(user), char *user)
|
|||||||
else if (!user && userID)
|
else if (!user && userID)
|
||||||
userID = NULL;
|
userID = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static DOCB *NetSearchByName(name,list)
|
static DOCB *NetSearchByName(name,list)
|
||||||
char *name;
|
char *name;
|
||||||
@ -357,7 +357,7 @@ DOCB *docb;
|
|||||||
docb = (DOCB *) ListNext(list);
|
docb = (DOCB *) ListNext(list);
|
||||||
}
|
}
|
||||||
return((DOCB *) 0);
|
return((DOCB *) 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -372,11 +372,11 @@ caddr_t changeData;
|
|||||||
void (*destroy)(); /* Data object destroyed callback */
|
void (*destroy)(); /* Data object destroyed callback */
|
||||||
caddr_t destroyData;
|
caddr_t destroyData;
|
||||||
{
|
{
|
||||||
DOCB *docb;
|
DOCB *docb;
|
||||||
char itsNew;
|
char itsNew;
|
||||||
|
|
||||||
/*Yeah this is huge,repetitive and could easily be condensed, but it
|
/*Yeah this is huge,repetitive and could easily be condensed, but it
|
||||||
wasn't when I started, and I don't feel like changing it now
|
wasn't when I started, and I don't feel like changing it now
|
||||||
condensed on Feb 93 by gbourhis */
|
condensed on Feb 93 by gbourhis */
|
||||||
#define REGISTERMODULE(list) \
|
#define REGISTERMODULE(list) \
|
||||||
do { \
|
do { \
|
||||||
@ -455,13 +455,13 @@ caddr_t destroyData;
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int DimensionsEqual(dim1,rank1,dim2,rank2)
|
static int DimensionsEqual(dim1,rank1,dim2,rank2)
|
||||||
int *dim1,rank1,*dim2,rank2;
|
int *dim1,rank1,*dim2,rank2;
|
||||||
{
|
{
|
||||||
register int x;
|
register int x;
|
||||||
@ -475,7 +475,7 @@ register int x;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void CopyDimensions(dim1,rank1,dim2,rank2)
|
static void CopyDimensions(dim1,rank1,dim2,rank2)
|
||||||
/* copies dim2 to dim1 */
|
/* copies dim2 to dim1 */
|
||||||
int *dim1,*rank1;
|
int *dim1,*rank1;
|
||||||
int *dim2,rank2;
|
int *dim2,rank2;
|
||||||
@ -653,7 +653,7 @@ int numPortNames;
|
|||||||
else if (dtmFlowControl == DTM_SYNC) {
|
else if (dtmFlowControl == DTM_SYNC) {
|
||||||
printf("Just made an SYNC out netPort=%x port %x (%s)\n",
|
printf("Just made an SYNC out netPort=%x port %x (%s)\n",
|
||||||
n,n->port,n->portName);
|
n,n->port,n->portName);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
printf("********Just made an *UNKOWN* out port %s (%d)\n",
|
printf("********Just made an *UNKOWN* out port %s (%d)\n",
|
||||||
n->portName,n->port);
|
n->portName,n->port);
|
||||||
@ -676,7 +676,7 @@ char *outPortAddr;
|
|||||||
return(NetInternalCreateOutPort(outPortAddr,TRUE));
|
return(NetInternalCreateOutPort(outPortAddr,TRUE));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void NetChangeOutPort(address,oldOut)
|
static void NetChangeOutPort(address,oldOut)
|
||||||
char *address;
|
char *address;
|
||||||
NetPort *oldOut;
|
NetPort *oldOut;
|
||||||
{
|
{
|
||||||
@ -781,8 +781,8 @@ int num;
|
|||||||
strcpy(d->label,title);
|
strcpy(d->label,title);
|
||||||
d->dot = DOT_SDL;
|
d->dot = DOT_SDL;
|
||||||
SDLgetPrimitive(header,&(d->dost));
|
SDLgetPrimitive(header,&(d->dost));
|
||||||
|
|
||||||
if ((num = DTMreadDataset(n->port, primbuff,
|
if ((num = DTMreadDataset(n->port, primbuff,
|
||||||
MAX_SDL_VERTICES, DTM_TRIPLET)) == DTMERROR){
|
MAX_SDL_VERTICES, DTM_TRIPLET)) == DTMERROR){
|
||||||
ErrMesg("Error reading DTM SDL");
|
ErrMesg("Error reading DTM SDL");
|
||||||
NetReject(n->port,header);
|
NetReject(n->port,header);
|
||||||
@ -800,7 +800,7 @@ int num;
|
|||||||
d->entity = ENT_Network;
|
d->entity = ENT_Network;
|
||||||
|
|
||||||
return(d);
|
return(d);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static Com *NetReadCOM(n,header)
|
static Com *NetReadCOM(n,header)
|
||||||
@ -882,7 +882,7 @@ int size;
|
|||||||
d->dost = DOST_Double;
|
d->dost = DOST_Double;
|
||||||
elementSize = sizeof(double);
|
elementSize = sizeof(double);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
d->dost = DOST_Char;
|
d->dost = DOST_Char;
|
||||||
elementSize = 1;
|
elementSize = 1;
|
||||||
printf(
|
printf(
|
||||||
@ -892,8 +892,8 @@ int size;
|
|||||||
VDATAgetNumRecords(header,&(d->dim[1]));
|
VDATAgetNumRecords(header,&(d->dim[1]));
|
||||||
d->rank = 2;
|
d->rank = 2;
|
||||||
VDATAgetPathLength(header,&(d->pathLength));
|
VDATAgetPathLength(header,&(d->pathLength));
|
||||||
if (!(d->magicPath = (VdataPathElement **)
|
if (!(d->magicPath = (VdataPathElement **)
|
||||||
MALLOC(sizeof(VdataPathElement *)
|
MALLOC(sizeof(VdataPathElement *)
|
||||||
* d->pathLength))){
|
* d->pathLength))){
|
||||||
ErrMesg("Out of Memory reading VDATA path\n");
|
ErrMesg("Out of Memory reading VDATA path\n");
|
||||||
DTMendRead(n->port);
|
DTMendRead(n->port);
|
||||||
@ -937,7 +937,7 @@ int size;
|
|||||||
}
|
}
|
||||||
DTMendRead(n->port);
|
DTMendRead(n->port);
|
||||||
return(d);
|
return(d);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -972,7 +972,7 @@ int stat;
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(x = 0, size = 1; x < rank; x++)
|
for(x = 0, size = 1; x < rank; x++)
|
||||||
size *= dims[x];
|
size *= dims[x];
|
||||||
|
|
||||||
ANIMgetID(header,id,DTM_STRING_SIZE);
|
ANIMgetID(header,id,DTM_STRING_SIZE);
|
||||||
@ -1003,7 +1003,7 @@ int stat;
|
|||||||
case DTM_DOUBLE:
|
case DTM_DOUBLE:
|
||||||
dostType = DOST_Double;
|
dostType = DOST_Double;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dostType = DOST_Char;
|
dostType = DOST_Char;
|
||||||
printf(
|
printf(
|
||||||
"SDS of unknown type just received casting to char\n");
|
"SDS of unknown type just received casting to char\n");
|
||||||
@ -1261,7 +1261,7 @@ char id[DTM_STRING_SIZE];
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DTMreadDataset(n->port,d->data,xdim*ydim,DTM_CHAR) ==
|
if (DTMreadDataset(n->port,d->data,xdim*ydim,DTM_CHAR) ==
|
||||||
DTMERROR) {
|
DTMERROR) {
|
||||||
ErrMesg("Error reading RIS dataset");
|
ErrMesg("Error reading RIS dataset");
|
||||||
NetReject(n->port,header);
|
NetReject(n->port,header);
|
||||||
@ -1339,7 +1339,7 @@ static char title[DTM_STRING_SIZE];
|
|||||||
DTMendRead(n->port);
|
DTMendRead(n->port);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
t.textString[t.dim] = '\0';
|
t.textString[t.dim] = '\0';
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("NetReadText(): *t.textString = %c dim = %d\n",
|
printf("NetReadText(): *t.textString = %c dim = %d\n",
|
||||||
@ -1490,7 +1490,7 @@ List *list;
|
|||||||
char *portName;
|
char *portName;
|
||||||
{
|
{
|
||||||
NetPort *netPort;
|
NetPort *netPort;
|
||||||
|
|
||||||
netPort = (NetPort *) ListHead(list);
|
netPort = (NetPort *) ListHead(list);
|
||||||
while (netPort) {
|
while (netPort) {
|
||||||
if (!strcmp(portName,netPort->portName)) {
|
if (!strcmp(portName,netPort->portName)) {
|
||||||
@ -1541,7 +1541,7 @@ char buff[256];
|
|||||||
#endif
|
#endif
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(buff,
|
sprintf(buff,
|
||||||
"Just established a connection with\n%s (%s)\n",
|
"Just established a connection with\n%s (%s)\n",
|
||||||
s.id,s.inPort);
|
s.id,s.inPort);
|
||||||
@ -1585,7 +1585,7 @@ char buff[256];
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/***** this assumes only one out port **********/
|
/***** this assumes only one out port **********/
|
||||||
ListDeleteEntry(netOutList,ListHead(netOutList));
|
ListDeleteEntry(netOutList,ListHead(netOutList));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1640,7 +1640,7 @@ char buff[256];
|
|||||||
}
|
}
|
||||||
strcpy(s.inPort,s.netPort->portName);
|
strcpy(s.inPort,s.netPort->portName);
|
||||||
return(&s);
|
return(&s);
|
||||||
|
|
||||||
} /* NetReadDTM() */
|
} /* NetReadDTM() */
|
||||||
|
|
||||||
|
|
||||||
@ -1712,7 +1712,7 @@ int runType;
|
|||||||
ANIMgetID(header,id,80);
|
ANIMgetID(header,id,80);
|
||||||
a.id = id;
|
a.id = id;
|
||||||
ANIMgetFrame(header,&(a.frameNumber));
|
ANIMgetFrame(header,&(a.frameNumber));
|
||||||
if (-1 == ANIMgetFunc(header,(&func)))
|
if (-1 == ANIMgetFunc(header,(&func)))
|
||||||
a.func = AF_NO_FUNC;
|
a.func = AF_NO_FUNC;
|
||||||
else {
|
else {
|
||||||
switch(func) {
|
switch(func) {
|
||||||
@ -1727,7 +1727,7 @@ int runType;
|
|||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
if (-1 == ANIMgetRunType(header,(&runType)))
|
if (-1 == ANIMgetRunType(header,(&runType)))
|
||||||
a.runType= ART_NONE;
|
a.runType= ART_NONE;
|
||||||
else {
|
else {
|
||||||
switch (runType) {
|
switch (runType) {
|
||||||
@ -1742,7 +1742,7 @@ int runType;
|
|||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
a.data = 0;
|
a.data = 0;
|
||||||
return(&a);
|
return(&a);
|
||||||
#endif
|
#endif
|
||||||
@ -1822,7 +1822,7 @@ static Col col;
|
|||||||
col.title = title;
|
col.title = title;
|
||||||
col.id = UserID;
|
col.id = UserID;
|
||||||
col.func = "DOODLE";
|
col.func = "DOODLE";
|
||||||
if (sendDiscrete)
|
if (sendDiscrete)
|
||||||
col.selType = COL_DOODLE_DISC;
|
col.selType = COL_DOODLE_DISC;
|
||||||
else
|
else
|
||||||
col.selType = COL_DOODLE_CONT;
|
col.selType = COL_DOODLE_CONT;
|
||||||
@ -1831,7 +1831,7 @@ static Col col;
|
|||||||
return(&col);
|
return(&col);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void NetCallDestroyCallback(list,d)
|
static void NetCallDestroyCallback(list,d)
|
||||||
List list;
|
List list;
|
||||||
Data *d;
|
Data *d;
|
||||||
@ -1894,7 +1894,7 @@ static AnimMesg a;
|
|||||||
a.func = AF_NO_FUNC;
|
a.func = AF_NO_FUNC;
|
||||||
a.runType = ART_NONE;
|
a.runType = ART_NONE;
|
||||||
a.data = d;
|
a.data = d;
|
||||||
|
|
||||||
/* distribute data */
|
/* distribute data */
|
||||||
if (!DataInList(d)) {
|
if (!DataInList(d)) {
|
||||||
DataAddEntry(d);
|
DataAddEntry(d);
|
||||||
@ -2016,7 +2016,7 @@ char *ExceptModuleName;
|
|||||||
else {
|
else {
|
||||||
d = *dSend;
|
d = *dSend;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* distribute data */
|
/* distribute data */
|
||||||
if (!DataInList(d)) {
|
if (!DataInList(d)) {
|
||||||
DataAddEntry(d);
|
DataAddEntry(d);
|
||||||
@ -2052,7 +2052,7 @@ register char *p;
|
|||||||
if (!(docb = (DOCB *) ListNext(PALList)))
|
if (!(docb = (DOCB *) ListNext(PALList)))
|
||||||
return(0); /* none to distribute to */
|
return(0); /* none to distribute to */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get data field make a new one if doesn't exist */
|
/* get data field make a new one if doesn't exist */
|
||||||
if (!(d = DataSearchByLabelAndDOT(title,DOT_Palette8))) {
|
if (!(d = DataSearchByLabelAndDOT(title,DOT_Palette8))) {
|
||||||
if (!(d = DataNew())) {
|
if (!(d = DataNew())) {
|
||||||
@ -2099,7 +2099,7 @@ register char *p;
|
|||||||
return(1);
|
return(1);
|
||||||
#endif
|
#endif
|
||||||
} /* NetPALDistribute() */
|
} /* NetPALDistribute() */
|
||||||
|
|
||||||
#undef CALLCB
|
#undef CALLCB
|
||||||
#define CALLCB(List, CallB, CallData, ClientData) \
|
#define CALLCB(List, CallB, CallData, ClientData) \
|
||||||
do { \
|
do { \
|
||||||
@ -2204,7 +2204,7 @@ int i;
|
|||||||
|
|
||||||
else if (PALcompareClass(header)) {
|
else if (PALcompareClass(header)) {
|
||||||
if (!(docb = (DOCB *) ListHead(PALList))) {
|
if (!(docb = (DOCB *) ListHead(PALList))) {
|
||||||
NetReject(n->port,header);
|
NetReject(n->port,header);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
if (d = NetReadPal(n,header)) {
|
if (d = NetReadPal(n,header)) {
|
||||||
@ -2216,12 +2216,12 @@ int i;
|
|||||||
CALLCB(PALList, changeCB, d, changeData);
|
CALLCB(PALList, changeCB, d, changeData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}/* PAL */
|
}/* PAL */
|
||||||
|
|
||||||
else if (RIScompareClass(header)) {
|
else if (RIScompareClass(header)) {
|
||||||
if (!(docb = (DOCB *) ListHead(RIS8List))) {
|
if (!(docb = (DOCB *) ListHead(RIS8List))) {
|
||||||
NetReject(n->port,header);
|
NetReject(n->port,header);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
if (d = NetReadRIS8(n,header)) {
|
if (d = NetReadRIS8(n,header)) {
|
||||||
@ -2233,11 +2233,11 @@ int i;
|
|||||||
CALLCB(RIS8List, changeCB, d, changeData);
|
CALLCB(RIS8List, changeCB, d, changeData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}/* RIS */
|
}/* RIS */
|
||||||
else if (TXTcompareClass(header)) {
|
else if (TXTcompareClass(header)) {
|
||||||
if (!(docb = (DOCB *) ListHead(TXTList))) {
|
if (!(docb = (DOCB *) ListHead(TXTList))) {
|
||||||
NetReject(n->port,header);
|
NetReject(n->port,header);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
if (t = NetReadText(n,header)) {
|
if (t = NetReadText(n,header)) {
|
||||||
@ -2254,7 +2254,7 @@ int i;
|
|||||||
} /*SRV*/
|
} /*SRV*/
|
||||||
else if (COLcompareClass(header)) {
|
else if (COLcompareClass(header)) {
|
||||||
if (!(docb = (DOCB *) ListHead(COLList))) {
|
if (!(docb = (DOCB *) ListHead(COLList))) {
|
||||||
NetReject(n->port,header);
|
NetReject(n->port,header);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
if (c = NetReadCOL(n,header)) {
|
if (c = NetReadCOL(n,header)) {
|
||||||
@ -2298,7 +2298,7 @@ int i;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
NetReject(n->port,header);
|
NetReject(n->port,header);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(d);
|
return(d);
|
||||||
@ -2311,7 +2311,7 @@ List netPortList;
|
|||||||
int port;
|
int port;
|
||||||
{
|
{
|
||||||
NetPort *netPort;
|
NetPort *netPort;
|
||||||
|
|
||||||
netPort = (NetPort *) ListHead(netPortList);
|
netPort = (NetPort *) ListHead(netPortList);
|
||||||
while (netPort) {
|
while (netPort) {
|
||||||
if (netPort->port == port) {
|
if (netPort->port == port) {
|
||||||
@ -2368,7 +2368,7 @@ NetPort *n;
|
|||||||
|
|
||||||
/* printf("NetClientPollAndRead(): I've been called\n");*/
|
/* printf("NetClientPollAndRead(): I've been called\n");*/
|
||||||
#endif
|
#endif
|
||||||
n = (NetPort *) ListHead(netInList);
|
n = (NetPort *) ListHead(netInList);
|
||||||
while (n) {
|
while (n) {
|
||||||
while (DTMavailRead(n->port)) {
|
while (DTMavailRead(n->port)) {
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
@ -2432,9 +2432,9 @@ int status;
|
|||||||
#ifdef USE_WRITEMSG
|
#ifdef USE_WRITEMSG
|
||||||
if (DTMERROR == DTMwriteMsg(netPort->port,
|
if (DTMERROR == DTMwriteMsg(netPort->port,
|
||||||
header,strlen(header)+1,
|
header,strlen(header)+1,
|
||||||
data,num,type))
|
data,num,type))
|
||||||
#else
|
#else
|
||||||
status = DTMbeginWrite(netPort->port,header,strlen(header)+1);
|
status = DTMbeginWrite(netPort->port,header,strlen(header)+1);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("NetSend():sent header \"%s\" to %s\n",header,netPort->portName);
|
printf("NetSend():sent header \"%s\" to %s\n",header,netPort->portName);
|
||||||
#endif
|
#endif
|
||||||
@ -2489,7 +2489,7 @@ long num AND
|
|||||||
DTMTYPE type AND
|
DTMTYPE type AND
|
||||||
void (*cb) PARAMS((GenericPtr data, caddr_t cbData)) AND
|
void (*cb) PARAMS((GenericPtr data, caddr_t cbData)) AND
|
||||||
caddr_t cbData AND
|
caddr_t cbData AND
|
||||||
void (*failCB) PARAMS((GenericPtr data, caddr_t failCBData)) AND
|
void (*failCB) PARAMS((GenericPtr data, caddr_t failCBData)) AND
|
||||||
caddr_t failCBData AND
|
caddr_t failCBData AND
|
||||||
int doQueue) /* TRUE -> Save and resend; FALSE -> let client resend*/
|
int doQueue) /* TRUE -> Save and resend; FALSE -> let client resend*/
|
||||||
|
|
||||||
@ -2502,7 +2502,7 @@ int status;
|
|||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
printf("no out port: discarding %s\n",header);
|
printf("no out port: discarding %s\n",header);
|
||||||
#endif
|
#endif
|
||||||
if (failCB)
|
if (failCB)
|
||||||
failCB(data,failCBData);
|
failCB(data,failCBData);
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
@ -2547,7 +2547,7 @@ int status;
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (cb)
|
if (cb)
|
||||||
cb(data,cbData);
|
cb(data,cbData);
|
||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
@ -2588,13 +2588,13 @@ int status;
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* couldn't send now and no queuing, so call failCB()*/
|
/* couldn't send now and no queuing, so call failCB()*/
|
||||||
if (failCB)
|
if (failCB)
|
||||||
failCB(data,failCBData);
|
failCB(data,failCBData);
|
||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
else if (status == 1) {
|
else if (status == 1) {
|
||||||
if (cb)
|
if (cb)
|
||||||
cb(data,cbData);
|
cb(data,cbData);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
@ -2604,7 +2604,7 @@ int status;
|
|||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
return(-1);
|
return(-1);
|
||||||
|
|
||||||
} /* NetClientSendMessage() */
|
} /* NetClientSendMessage() */
|
||||||
|
|
||||||
|
|
||||||
@ -2630,7 +2630,7 @@ time_t t;
|
|||||||
port->portName,
|
port->portName,
|
||||||
sq->netPort,
|
sq->netPort,
|
||||||
sq->netPort->portName);
|
sq->netPort->portName);
|
||||||
fprintf(stderr,"*");
|
fprintf(stderr,"*");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
while (sq) {
|
while (sq) {
|
||||||
@ -2807,7 +2807,7 @@ register long i;
|
|||||||
NetMakeCOLFromDoodle(title,a,length+1,sendDiscrete),
|
NetMakeCOLFromDoodle(title,a,length+1,sendDiscrete),
|
||||||
moduleName);
|
moduleName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status = NetClientSendMessage(netPort,header,a,(length + 1),
|
status = NetClientSendMessage(netPort,header,a,(length + 1),
|
||||||
COL_TRIPLET, NetFreeDataCB, 0,0,0,doQueue);
|
COL_TRIPLET, NetFreeDataCB, 0,0,0,doQueue);
|
||||||
@ -3367,7 +3367,7 @@ DEFUN(_NetSendRaster8,(netPort,d,shouldCopy,
|
|||||||
else
|
else
|
||||||
NetRISDistribute(&d, moduleName);
|
NetRISDistribute(&d, moduleName);
|
||||||
|
|
||||||
|
|
||||||
if (shouldCopy) {
|
if (shouldCopy) {
|
||||||
int buffSize = d->dim[0] * d->dim[1] * sizeof(char);
|
int buffSize = d->dim[0] * d->dim[1] * sizeof(char);
|
||||||
register int x;
|
register int x;
|
||||||
@ -3432,7 +3432,7 @@ int status;
|
|||||||
ANIMsetClass(header);
|
ANIMsetClass(header);
|
||||||
ANIMsetTitle(header,title);
|
ANIMsetTitle(header,title);
|
||||||
ANIMsetID(header,userID);
|
ANIMsetID(header,userID);
|
||||||
|
|
||||||
switch (command) {
|
switch (command) {
|
||||||
case AF_STOP:
|
case AF_STOP:
|
||||||
ANIMsetFunc(header,ANIM_FUNC_STOP);
|
ANIMsetFunc(header,ANIM_FUNC_STOP);
|
||||||
@ -3475,7 +3475,7 @@ NetPort *netPort;
|
|||||||
Data *d;
|
Data *d;
|
||||||
int shouldCopy; /* should this data be copied before returning? */
|
int shouldCopy; /* should this data be copied before returning? */
|
||||||
/* if not, charData and palette8 must not be freed or */
|
/* if not, charData and palette8 must not be freed or */
|
||||||
/* changed until data is sent */
|
/* changed until data is sent */
|
||||||
int distributeInternally; /* boolean */
|
int distributeInternally; /* boolean */
|
||||||
char *moduleName; /* Send internally to all DOCB except this one */
|
char *moduleName; /* Send internally to all DOCB except this one */
|
||||||
/* in most cases this would be the calling module's name*/
|
/* in most cases this would be the calling module's name*/
|
||||||
@ -3542,10 +3542,10 @@ char *nodeName;
|
|||||||
char *field;
|
char *field;
|
||||||
int numRecords;
|
int numRecords;
|
||||||
int numElements;
|
int numElements;
|
||||||
int type;
|
int type;
|
||||||
char *vdata;
|
char *vdata;
|
||||||
int shouldCopy; /* copy Vdata before returning in case of delayed send */
|
int shouldCopy; /* copy Vdata before returning in case of delayed send */
|
||||||
int distributeInternally;
|
int distributeInternally;
|
||||||
char *moduleName; /* distribute Internally to all except */
|
char *moduleName; /* distribute Internally to all except */
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
@ -3612,7 +3612,7 @@ int size;
|
|||||||
numRecords * numElements,
|
numRecords * numElements,
|
||||||
dtmType,0,0,0,0,1);
|
dtmType,0,0,0,0,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(status);
|
return(status);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -3654,7 +3654,7 @@ Data *nextD;
|
|||||||
moduleName,FALSE);
|
moduleName,FALSE);
|
||||||
break;
|
break;
|
||||||
case DOT_Image:
|
case DOT_Image:
|
||||||
if ( (nextD)
|
if ( (nextD)
|
||||||
&& (nextD->dot == DOT_Palette8)
|
&& (nextD->dot == DOT_Palette8)
|
||||||
&& !nextD->associated )
|
&& !nextD->associated )
|
||||||
nextD->associated = d->label;
|
nextD->associated = d->label;
|
||||||
@ -3690,7 +3690,7 @@ Data *nextD;
|
|||||||
#endif
|
#endif
|
||||||
status = -1;
|
status = -1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
};
|
};
|
||||||
d = nextD;
|
d = nextD;
|
||||||
}
|
}
|
||||||
@ -3711,9 +3711,9 @@ char header[DTM_MAX_HEADER];
|
|||||||
COMsetID(header,userID);
|
COMsetID(header,userID);
|
||||||
COMsetDomain(header,domain);
|
COMsetDomain(header,domain);
|
||||||
COMsetMesg(header,message);
|
COMsetMesg(header,message);
|
||||||
|
|
||||||
return(NetClientSendMessage(netPort,header,0,0,0,cb,0,failCB,0,1));
|
return(NetClientSendMessage(netPort,header,0,0,0,cb,0,failCB,0,1));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0 /* not used */
|
#if 0 /* not used */
|
||||||
@ -3786,7 +3786,7 @@ time_t now;
|
|||||||
ecbd->cbData = cbData;
|
ecbd->cbData = cbData;
|
||||||
ecbd->failCB = failCB;
|
ecbd->failCB = failCB;
|
||||||
ecbd->failCBData = failCBData;
|
ecbd->failCBData = failCBData;
|
||||||
|
|
||||||
|
|
||||||
EXECsetClass(header);
|
EXECsetClass(header);
|
||||||
EXECsetID(header,userID);
|
EXECsetID(header,userID);
|
||||||
@ -3879,7 +3879,7 @@ caddr_t failCBData;
|
|||||||
{
|
{
|
||||||
char header[DTM_MAX_HEADER];
|
char header[DTM_MAX_HEADER];
|
||||||
char tmp[DTM_STRING_SIZE];
|
char tmp[DTM_STRING_SIZE];
|
||||||
|
|
||||||
MSGsetClass(header);
|
MSGsetClass(header);
|
||||||
COLsetID(header, userID);
|
COLsetID(header, userID);
|
||||||
strncpy(tmp, message, DTM_STRING_SIZE - 1);
|
strncpy(tmp, message, DTM_STRING_SIZE - 1);
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
* Permission is granted to copy and distribute source with out fee.
|
* Permission is granted to copy and distribute source with out fee.
|
||||||
* Commercialization of this product requires prior licensing
|
* Commercialization of this product requires prior licensing
|
||||||
* from the National Center for Supercomputing Applications of the
|
* from the National Center for Supercomputing Applications of the
|
||||||
* University of Illinois. Commercialization includes the integration of this
|
* University of Illinois. Commercialization includes the integration of this
|
||||||
* code in part or whole into a product for resale. Free distribution of
|
* code in part or whole into a product for resale. Free distribution of
|
||||||
* unmodified source and use of NCSA software is not considered
|
* unmodified source and use of NCSA software is not considered
|
||||||
* commercialization.
|
* commercialization.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -68,7 +68,7 @@ typedef struct {
|
|||||||
short int *data;
|
short int *data;
|
||||||
} Dol;
|
} Dol;
|
||||||
|
|
||||||
typedef enum { AF_NO_FUNC, AF_STOP, AF_FPLAY, AF_RPLAY
|
typedef enum { AF_NO_FUNC, AF_STOP, AF_FPLAY, AF_RPLAY
|
||||||
} AnimFunc;
|
} AnimFunc;
|
||||||
|
|
||||||
typedef enum { ART_NONE, ART_SINGLE, ART_CONT, ART_BOUNCE
|
typedef enum { ART_NONE, ART_SINGLE, ART_CONT, ART_BOUNCE
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
* Permission is granted to copy and distribute source with out fee.
|
* Permission is granted to copy and distribute source with out fee.
|
||||||
* Commercialization of this product requires prior licensing
|
* Commercialization of this product requires prior licensing
|
||||||
* from the National Center for Supercomputing Applications of the
|
* from the National Center for Supercomputing Applications of the
|
||||||
* University of Illinois. Commercialization includes the integration of this
|
* University of Illinois. Commercialization includes the integration of this
|
||||||
* code in part or whole into a product for resale. Free distribution of
|
* code in part or whole into a product for resale. Free distribution of
|
||||||
* unmodified source and use of NCSA software is not considered
|
* unmodified source and use of NCSA software is not considered
|
||||||
* commercialization.
|
* commercialization.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -25,7 +25,7 @@ typedef struct {
|
|||||||
} ExecHostStatusReturn;
|
} ExecHostStatusReturn;
|
||||||
|
|
||||||
typedef union {
|
typedef union {
|
||||||
ExecHostStatusReturn hsReturn;
|
ExecHostStatusReturn hsReturn;
|
||||||
} ExecRetInfo;
|
} ExecRetInfo;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
* Permission is granted to copy and distribute source with out fee.
|
* Permission is granted to copy and distribute source with out fee.
|
||||||
* Commercialization of this product requires prior licensing
|
* Commercialization of this product requires prior licensing
|
||||||
* from the National Center for Supercomputing Applications of the
|
* from the National Center for Supercomputing Applications of the
|
||||||
* University of Illinois. Commercialization includes the integration of this
|
* University of Illinois. Commercialization includes the integration of this
|
||||||
* code in part or whole into a product for resale. Free distribution of
|
* code in part or whole into a product for resale. Free distribution of
|
||||||
* unmodified source and use of NCSA software is not considered
|
* unmodified source and use of NCSA software is not considered
|
||||||
* commercialization.
|
* commercialization.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -47,7 +47,7 @@ Data *DataNew()
|
|||||||
|
|
||||||
d->expandX = d->expandY = 1.0;
|
d->expandX = d->expandY = 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(d);
|
return(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,9 +55,9 @@ void DataDestroy(d)
|
|||||||
Data *d;
|
Data *d;
|
||||||
{
|
{
|
||||||
(void)ListDeleteEntry(dataList,d);
|
(void)ListDeleteEntry(dataList,d);
|
||||||
if (d->label)
|
if (d->label)
|
||||||
FREE(d->label);
|
FREE(d->label);
|
||||||
if (d->data)
|
if (d->data)
|
||||||
FREE(d->data);
|
FREE(d->data);
|
||||||
FREE(d);
|
FREE(d);
|
||||||
}
|
}
|
||||||
@ -109,7 +109,7 @@ Data *d;
|
|||||||
|
|
||||||
d = (Data *) ListHead(dataList);
|
d = (Data *) ListHead(dataList);
|
||||||
while (d) {
|
while (d) {
|
||||||
if ((d->label)&&((!strcmp(s,d->label)) && (d->dot == dot)
|
if ((d->label)&&((!strcmp(s,d->label)) && (d->dot == dot)
|
||||||
&& (d->dost == dost))) {
|
&& (d->dost == dost))) {
|
||||||
return(d);
|
return(d);
|
||||||
}
|
}
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
* Permission is granted to copy and distribute source with out fee.
|
* Permission is granted to copy and distribute source with out fee.
|
||||||
* Commercialization of this product requires prior licensing
|
* Commercialization of this product requires prior licensing
|
||||||
* from the National Center for Supercomputing Applications of the
|
* from the National Center for Supercomputing Applications of the
|
||||||
* University of Illinois. Commercialization includes the integration of this
|
* University of Illinois. Commercialization includes the integration of this
|
||||||
* code in part or whole into a product for resale. Free distribution of
|
* code in part or whole into a product for resale. Free distribution of
|
||||||
* unmodified source and use of NCSA software is not considered
|
* unmodified source and use of NCSA software is not considered
|
||||||
* commercialization.
|
* commercialization.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -88,4 +88,4 @@ extern Data *DataSearchByLabelAndDOTAndDOST
|
|||||||
PARAMS((char *s, int dot, int dost));
|
PARAMS((char *s, int dot, int dost));
|
||||||
extern int DataInList PARAMS((Data *d));
|
extern int DataInList PARAMS((Data *d));
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# @configure_output@
|
# @configure_output@
|
||||||
# This file is used by Autoconf to make the real Makefile.
|
# This file is used by Autoconf to make the real Makefile.
|
||||||
# DO NOT EDIT THIS FILE!
|
# DO NOT EDIT THIS FILE!
|
||||||
# If you want to change something do it to the Makefile autoconf
|
# If you want to change something do it to the Makefile autoconf
|
||||||
# creates. You should never have to edit this file.
|
# creates. You should never have to edit this file.
|
||||||
|
|
||||||
CC= @CC@
|
CC= @CC@
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#ifdef ELLIPSIS_TEST
|
#ifdef ELLIPSIS_TEST
|
||||||
void usage_statement(void);
|
void usage_statement(void);
|
||||||
#endif
|
#endif
|
||||||
int compact_string(char *main_string, char *ellipsis_string,
|
int compact_string(char *main_string, char *ellipsis_string,
|
||||||
int num_chars, int mode, int eLength);
|
int num_chars, int mode, int eLength);
|
||||||
|
|
||||||
#ifdef ELLIPSIS_TEST
|
#ifdef ELLIPSIS_TEST
|
||||||
@ -54,7 +54,7 @@ int main(int argc, char *argv[]) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
int compact_string(char *main_string, char *ellipsis_string,
|
int compact_string(char *main_string, char *ellipsis_string,
|
||||||
int num_chars, int mode, int eLength) {
|
int num_chars, int mode, int eLength) {
|
||||||
|
|
||||||
int string_len;
|
int string_len;
|
||||||
@ -71,7 +71,7 @@ int compact_string(char *main_string, char *ellipsis_string,
|
|||||||
switch(mode) {
|
switch(mode) {
|
||||||
|
|
||||||
case 1: {
|
case 1: {
|
||||||
|
|
||||||
puff = num_chars - eLength;
|
puff = num_chars - eLength;
|
||||||
feem = string_len - puff;
|
feem = string_len - puff;
|
||||||
|
|
||||||
@ -130,9 +130,9 @@ int compact_string(char *main_string, char *ellipsis_string,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case 3: {
|
case 3: {
|
||||||
|
|
||||||
puff = num_chars - eLength;
|
puff = num_chars - eLength;
|
||||||
feem = string_len - puff;
|
feem = string_len - puff;
|
||||||
|
|
||||||
@ -151,9 +151,9 @@ int compact_string(char *main_string, char *ellipsis_string,
|
|||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
#ifdef ELLIPSIS_TEST
|
#ifdef ELLIPSIS_TEST
|
||||||
usage_statement();
|
usage_statement();
|
||||||
@ -162,7 +162,7 @@ int compact_string(char *main_string, char *ellipsis_string,
|
|||||||
return(-1);
|
return(-1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ellipsis_string[num_chars]='\0';
|
ellipsis_string[num_chars]='\0';
|
||||||
|
@ -447,7 +447,7 @@ int my_strncasecmp(char *str1, char *str2, int n)
|
|||||||
return -1;
|
return -1;
|
||||||
if(str1[i]+offset1>str2[i]+offset2)
|
if(str1[i]+offset1>str2[i]+offset2)
|
||||||
return 1;
|
return 1;
|
||||||
/*
|
/*
|
||||||
if (toupper(str1[i])<toupper(str2[i])) {
|
if (toupper(str1[i])<toupper(str2[i])) {
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
@ -757,9 +757,9 @@ $NEW_DESCRIPTOR (string_interval);
|
|||||||
/*
|
/*
|
||||||
* Written by: Tommy Reilly
|
* Written by: Tommy Reilly
|
||||||
*
|
*
|
||||||
* Simple function that stat's a file to see if it exists.
|
* Simple function that stat's a file to see if it exists.
|
||||||
*
|
*
|
||||||
* Simple returns 1 or 0.
|
* Simple returns 1 or 0.
|
||||||
*/
|
*/
|
||||||
int file_exists(char* name)
|
int file_exists(char* name)
|
||||||
{
|
{
|
||||||
@ -783,7 +783,7 @@ int file_exists(char* name)
|
|||||||
* Written by: Tommy Reilly (with major code snarfing from Scott Powers)
|
* Written by: Tommy Reilly (with major code snarfing from Scott Powers)
|
||||||
*
|
*
|
||||||
* This is essentially Scott's my_move function re-written without rename
|
* This is essentially Scott's my_move function re-written without rename
|
||||||
* and without erasing the source file.
|
* and without erasing the source file.
|
||||||
*
|
*
|
||||||
* If "overwrite" is true, the destination file will automatically be
|
* If "overwrite" is true, the destination file will automatically be
|
||||||
* overwritten. If it is false and the file exists, my_move will return
|
* overwritten. If it is false and the file exists, my_move will return
|
||||||
@ -810,32 +810,32 @@ int my_copy(char *src, char *dest, char *retBuf, int bufsize, int overwrite)
|
|||||||
char *cmd;
|
char *cmd;
|
||||||
int ret;
|
int ret;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!retBuf)
|
if (!retBuf)
|
||||||
{
|
{
|
||||||
return(SYS_NO_RETBUF);
|
return(SYS_NO_RETBUF);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!src || !*src)
|
if (!src || !*src)
|
||||||
{
|
{
|
||||||
strcpy(retBuf,"There was no source file specified.\n");
|
strcpy(retBuf,"There was no source file specified.\n");
|
||||||
return(SYS_NO_SRC_FILE);
|
return(SYS_NO_SRC_FILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dest || !*dest)
|
if (!dest || !*dest)
|
||||||
{
|
{
|
||||||
strcpy(retBuf,"There was no destination file specified.\n");
|
strcpy(retBuf,"There was no destination file specified.\n");
|
||||||
return(SYS_NO_DEST_FILE);
|
return(SYS_NO_DEST_FILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
*retBuf='\0';
|
*retBuf='\0';
|
||||||
|
|
||||||
if (!overwrite)
|
if (!overwrite)
|
||||||
{
|
{
|
||||||
#if defined(MULTINET) && defined(__alpha)
|
#if defined(MULTINET) && defined(__alpha)
|
||||||
if (decc$stat(dest,&dest_stat))
|
if (decc$stat(dest,&dest_stat))
|
||||||
#else
|
#else
|
||||||
if (stat(dest,&dest_stat))
|
if (stat(dest,&dest_stat))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
sprintf(retBuf,"Stat [%s] error:\n File already exists.\n",dest);
|
sprintf(retBuf,"Stat [%s] error:\n File already exists.\n",dest);
|
||||||
@ -843,64 +843,64 @@ int my_copy(char *src, char *dest, char *retBuf, int bufsize, int overwrite)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef VMS /* Must copy file header as well as contents. PGE */
|
#ifndef VMS /* Must copy file header as well as contents. PGE */
|
||||||
if ((fd_src=open(src,O_RDONLY))==(-1))
|
if ((fd_src=open(src,O_RDONLY))==(-1))
|
||||||
{
|
{
|
||||||
copy_error=strdup(my_strerror(errno));
|
copy_error=strdup(my_strerror(errno));
|
||||||
|
|
||||||
if (!copy_error)
|
if (!copy_error)
|
||||||
{
|
{
|
||||||
strcpy(retBuf,"There was not enough memory allocate.\n");
|
strcpy(retBuf,"There was not enough memory allocate.\n");
|
||||||
return(SYS_NO_MEMORY);
|
return(SYS_NO_MEMORY);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(copy_error)>(bufsize-strlen(retBuf)))
|
if (strlen(copy_error)>(bufsize-strlen(retBuf)))
|
||||||
{
|
{
|
||||||
fprintf(stderr,"%s\n",copy_error);
|
fprintf(stderr,"%s\n",copy_error);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprintf(retBuf,"%sCopy([%s] to [%s]) error:\n %s\n\n",retBuf,src,dest,copy_error);
|
sprintf(retBuf,"%sCopy([%s] to [%s]) error:\n %s\n\n",retBuf,src,dest,copy_error);
|
||||||
}
|
}
|
||||||
free(copy_error);
|
free(copy_error);
|
||||||
|
|
||||||
return(SYS_SRC_OPEN_FAIL);
|
return(SYS_SRC_OPEN_FAIL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((fd_dest=open(dest,O_WRONLY|O_CREAT,0644))==(-1))
|
if ((fd_dest=open(dest,O_WRONLY|O_CREAT,0644))==(-1))
|
||||||
{
|
{
|
||||||
copy_error=strdup(my_strerror(errno));
|
copy_error=strdup(my_strerror(errno));
|
||||||
|
|
||||||
if (!copy_error)
|
if (!copy_error)
|
||||||
{
|
{
|
||||||
strcpy(retBuf,"There was not enough memory allocate.\n");
|
strcpy(retBuf,"There was not enough memory allocate.\n");
|
||||||
return(SYS_NO_MEMORY);
|
return(SYS_NO_MEMORY);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(copy_error)>(bufsize-strlen(retBuf)))
|
if (strlen(copy_error)>(bufsize-strlen(retBuf)))
|
||||||
{
|
{
|
||||||
fprintf(stderr,"%s\n",copy_error);
|
fprintf(stderr,"%s\n",copy_error);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprintf(retBuf,"%sCopy([%s] to [%s]) error:\n %s\n\n",retBuf,src,dest,copy_error);
|
sprintf(retBuf,"%sCopy([%s] to [%s]) error:\n %s\n\n",retBuf,src,dest,copy_error);
|
||||||
}
|
}
|
||||||
free(copy_error);
|
free(copy_error);
|
||||||
|
|
||||||
close(fd_src);
|
close(fd_src);
|
||||||
|
|
||||||
return(SYS_DEST_OPEN_FAIL);
|
return(SYS_DEST_OPEN_FAIL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*both files open and ready*/
|
/*both files open and ready*/
|
||||||
while (n_src>0)
|
while (n_src>0)
|
||||||
{
|
{
|
||||||
n_src=read(fd_src,buf,BUFSIZ-1);
|
n_src=read(fd_src,buf,BUFSIZ-1);
|
||||||
if (n_src>0)
|
if (n_src>0)
|
||||||
{
|
{
|
||||||
n_dest=write(fd_dest,buf,n_src);
|
n_dest=write(fd_dest,buf,n_src);
|
||||||
if (n_dest>0)
|
if (n_dest>0)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -909,7 +909,7 @@ int my_copy(char *src, char *dest, char *retBuf, int bufsize, int overwrite)
|
|||||||
sprintf(retBuf,"Write([%s]) error:\n %s\n\n",dest,my_strerror(errno));
|
sprintf(retBuf,"Write([%s]) error:\n %s\n\n",dest,my_strerror(errno));
|
||||||
return(SYS_WRITE_FAIL);
|
return(SYS_WRITE_FAIL);
|
||||||
}
|
}
|
||||||
if (!n_src)
|
if (!n_src)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -918,10 +918,10 @@ int my_copy(char *src, char *dest, char *retBuf, int bufsize, int overwrite)
|
|||||||
sprintf(retBuf,"Read([%s]) error:\n %s\n\n",src,my_strerror(errno));
|
sprintf(retBuf,"Read([%s]) error:\n %s\n\n",src,my_strerror(errno));
|
||||||
return(SYS_READ_FAIL);
|
return(SYS_READ_FAIL);
|
||||||
}
|
}
|
||||||
|
|
||||||
close(fd_src);
|
close(fd_src);
|
||||||
close(fd_dest);
|
close(fd_dest);
|
||||||
|
|
||||||
#else /* VMS, PGE */
|
#else /* VMS, PGE */
|
||||||
cmd = malloc(sizeof(char) * (20 + strlen(src) + strlen(dest)));
|
cmd = malloc(sizeof(char) * (20 + strlen(src) + strlen(dest)));
|
||||||
if(!cmd)
|
if(!cmd)
|
||||||
@ -935,13 +935,13 @@ int my_copy(char *src, char *dest, char *retBuf, int bufsize, int overwrite)
|
|||||||
#endif /* VMS, PGE */
|
#endif /* VMS, PGE */
|
||||||
|
|
||||||
return(SYS_SUCCESS);
|
return(SYS_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Written by: Tommy Reilly (originally by Scott Powers I think)
|
* Written by: Tommy Reilly (originally by Scott Powers I think)
|
||||||
*
|
*
|
||||||
* This is a function that finds the users home directory.
|
* This is a function that finds the users home directory.
|
||||||
*
|
*
|
||||||
* Return Values:
|
* Return Values:
|
||||||
* SYS_NO_MEMORY -- No memory to allocate with.
|
* SYS_NO_MEMORY -- No memory to allocate with.
|
||||||
@ -953,7 +953,7 @@ int get_home(char **ret)
|
|||||||
#ifndef VMS /* PGE */
|
#ifndef VMS /* PGE */
|
||||||
char *home = NULL;
|
char *home = NULL;
|
||||||
struct passwd *pwdent;
|
struct passwd *pwdent;
|
||||||
|
|
||||||
if(!(home = getenv("HOME")))
|
if(!(home = getenv("HOME")))
|
||||||
{
|
{
|
||||||
if (!(pwdent=getpwuid(getuid())))
|
if (!(pwdent=getpwuid(getuid())))
|
||||||
@ -962,7 +962,7 @@ int get_home(char **ret)
|
|||||||
*ret=NULL;
|
*ret=NULL;
|
||||||
return(SYS_INTERNAL_FAIL);
|
return(SYS_INTERNAL_FAIL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
home = malloc(sizeof(char) * (strlen(pwdent->pw_dir) + 1));
|
home = malloc(sizeof(char) * (strlen(pwdent->pw_dir) + 1));
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* Ben Fried deserves credit for writing the code that upon which
|
/* Ben Fried deserves credit for writing the code that upon which
|
||||||
* this source is based. ADC
|
* this source is based. ADC
|
||||||
*/
|
*/
|
||||||
#include "../config.h"
|
#include "../config.h"
|
||||||
|
|
||||||
#if defined(KRB4) || defined(KRB5)
|
#if defined(KRB4) || defined(KRB5)
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ int scheme_login(scheme)
|
|||||||
* Returns 1 if pipe open fails
|
* Returns 1 if pipe open fails
|
||||||
* Returns 0 otherwise (even if klog fails!)
|
* Returns 0 otherwise (even if klog fails!)
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
int AFSgetTGT(username, password, err_string)
|
int AFSgetTGT(username, password, err_string)
|
||||||
char *err_string, *username, *password;
|
char *err_string, *username, *password;
|
||||||
{
|
{
|
||||||
char reason[256];
|
char reason[256];
|
||||||
@ -222,7 +222,7 @@ int k4getTGT(username, password, err_string)
|
|||||||
#endif /* KRB4 */
|
#endif /* KRB4 */
|
||||||
#ifdef KRB5
|
#ifdef KRB5
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* k5getTGT() -- calls K5 libraries to get TGT (non-AFS)
|
* k5getTGT() -- calls K5 libraries to get TGT (non-AFS)
|
||||||
* most of this was copied from the Krb5 kinit.c
|
* most of this was copied from the Krb5 kinit.c
|
||||||
*
|
*
|
||||||
* Returns 0 on success (err_string = "")
|
* Returns 0 on success (err_string = "")
|
||||||
@ -279,7 +279,7 @@ int k5getTGT(username, password, err_string)
|
|||||||
}
|
}
|
||||||
|
|
||||||
my_creds.server = server;
|
my_creds.server = server;
|
||||||
my_creds.times.starttime = 0;
|
my_creds.times.starttime = 0;
|
||||||
my_creds.times.endtime = 0; /* now + KRB5_DEFAULT_LIFE; */
|
my_creds.times.endtime = 0; /* now + KRB5_DEFAULT_LIFE; */
|
||||||
my_creds.times.renew_till = 0;
|
my_creds.times.renew_till = 0;
|
||||||
|
|
||||||
@ -292,9 +292,9 @@ int k5getTGT(username, password, err_string)
|
|||||||
if (code) {
|
if (code) {
|
||||||
sprintf(err_string,"krb5_get_in_tkt error: %s", error_message(code));
|
sprintf(err_string,"krb5_get_in_tkt error: %s", error_message(code));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -354,7 +354,7 @@ int str_to_kdata(in_str, out_str)
|
|||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* compose_kerberos_auth_string
|
* compose_kerberos_auth_string
|
||||||
*
|
*
|
||||||
* Accepts: scheme (one of the HTAA_KERBEROS values)
|
* Accepts: scheme (one of the HTAA_KERBEROS values)
|
||||||
* hostname
|
* hostname
|
||||||
@ -426,7 +426,7 @@ char *compose_kerberos_auth_string(scheme, hostname)
|
|||||||
if (!k5context) {
|
if (!k5context) {
|
||||||
krb5_init_context(&k5context);
|
krb5_init_context(&k5context);
|
||||||
if (code) {
|
if (code) {
|
||||||
sprintf(krb_err_str,"Error initializing Kerb5 context: %s\n",error_message(code));
|
sprintf(krb_err_str,"Error initializing Kerb5 context: %s\n",error_message(code));
|
||||||
application_user_info_wait(krb_err_str);
|
application_user_info_wait(krb_err_str);
|
||||||
return (char *) NULL;
|
return (char *) NULL;
|
||||||
}
|
}
|
||||||
@ -441,11 +441,11 @@ char *compose_kerberos_auth_string(scheme, hostname)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
code = krb5_mk_req(k5context, &k5auth_context, AP_OPTS_USE_SESSION_KEY,
|
code = krb5_mk_req(k5context, &k5auth_context, AP_OPTS_USE_SESSION_KEY,
|
||||||
"khttp", hostname, NULL, k5ccache, &k5ap_req);
|
"khttp", hostname, NULL, k5ccache, &k5ap_req);
|
||||||
|
|
||||||
if (!code) {
|
if (!code) {
|
||||||
|
|
||||||
/* get username from credentials cache */
|
/* get username from credentials cache */
|
||||||
|
|
||||||
@ -467,7 +467,7 @@ char *compose_kerberos_auth_string(scheme, hostname)
|
|||||||
return (char *) NULL;
|
return (char *) NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_sname_to_principal(k5context, hostname, "khttp",
|
krb5_sname_to_principal(k5context, hostname, "khttp",
|
||||||
KRB5_NT_SRV_HST, &k5serverp);
|
KRB5_NT_SRV_HST, &k5serverp);
|
||||||
|
|
||||||
memset((char *)&k5in_creds, 0, sizeof(k5in_creds));
|
memset((char *)&k5in_creds, 0, sizeof(k5in_creds));
|
||||||
@ -480,7 +480,7 @@ char *compose_kerberos_auth_string(scheme, hostname)
|
|||||||
|
|
||||||
code = krb5_get_credentials(k5context,KRB5_GC_CACHED,k5ccache,&k5in_creds,&k5out_creds);
|
code = krb5_get_credentials(k5context,KRB5_GC_CACHED,k5ccache,&k5in_creds,&k5out_creds);
|
||||||
|
|
||||||
if ((code == KRB5_CC_NOTFOUND) || (now >= k5out_creds->times.endtime)) {
|
if ((code == KRB5_CC_NOTFOUND) || (now >= k5out_creds->times.endtime)) {
|
||||||
/* replace "Matching creds not found" */
|
/* replace "Matching creds not found" */
|
||||||
sprintf(krb_err_str,"Kerberos ticket expired\n");
|
sprintf(krb_err_str,"Kerberos ticket expired\n");
|
||||||
code = 666;
|
code = 666;
|
||||||
@ -497,7 +497,7 @@ char *compose_kerberos_auth_string(scheme, hostname)
|
|||||||
sprintf(krb_err_str,"krb5_mk_req: %s\n",error_message(code));
|
sprintf(krb_err_str,"krb5_mk_req: %s\n",error_message(code));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
pass = kdata_to_str(k5ap_req.data, k5ap_req.length);
|
pass = kdata_to_str(k5ap_req.data, k5ap_req.length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -548,7 +548,7 @@ char *compose_kerberos_auth_string(scheme, hostname)
|
|||||||
* validate_kerberos_server_auth
|
* validate_kerberos_server_auth
|
||||||
* Accepts: scheme (one of the HTAA_KERBEROS values)
|
* Accepts: scheme (one of the HTAA_KERBEROS values)
|
||||||
* the Authorization line from the request
|
* the Authorization line from the request
|
||||||
* Returns: NIL on success, T on failure
|
* Returns: NIL on success, T on failure
|
||||||
(currently return value not used)
|
(currently return value not used)
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
int validate_kerberos_server_auth(scheme, str)
|
int validate_kerberos_server_auth(scheme, str)
|
||||||
@ -587,7 +587,7 @@ int validate_kerberos_server_auth(scheme, str)
|
|||||||
else if (scheme == HTAA_KERBEROS_V4) {
|
else if (scheme == HTAA_KERBEROS_V4) {
|
||||||
retval = k4validate_kerberos_server_auth(str);
|
retval = k4validate_kerberos_server_auth(str);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef KRB5
|
#ifdef KRB5
|
||||||
else if (scheme == HTAA_KERBEROS_V5) {
|
else if (scheme == HTAA_KERBEROS_V5) {
|
||||||
retval = k5validate_kerberos_server_auth(str);
|
retval = k5validate_kerberos_server_auth(str);
|
||||||
@ -644,9 +644,9 @@ int k4validate_kerberos_server_auth(str)
|
|||||||
|
|
||||||
if (ntohl(*(long *)k4authent.dat) != k4checksum + 1) {
|
if (ntohl(*(long *)k4authent.dat) != k4checksum + 1) {
|
||||||
fprintf(stderr,"\n\nchecksum just doesn't check out\n\n");
|
fprintf(stderr,"\n\nchecksum just doesn't check out\n\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -663,7 +663,7 @@ int k5validate_kerberos_server_auth(instr)
|
|||||||
|
|
||||||
k5ap_rep.length = str_to_kdata(instr, tmpstr);
|
k5ap_rep.length = str_to_kdata(instr, tmpstr);
|
||||||
|
|
||||||
if (k5ap_rep.length == 0)
|
if (k5ap_rep.length == 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
k5ap_rep.data = tmpstr;
|
k5ap_rep.data = tmpstr;
|
||||||
@ -672,7 +672,7 @@ int k5validate_kerberos_server_auth(instr)
|
|||||||
|
|
||||||
krb5_free_ap_rep_enc_part(k5context, k5ap_rep_result);
|
krb5_free_ap_rep_enc_part(k5context, k5ap_rep_result);
|
||||||
|
|
||||||
if (code)
|
if (code)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -167,20 +167,20 @@ PUBLIC void HTAASetup_clearall (HTList *s)
|
|||||||
** On Exit: password information is gone.
|
** On Exit: password information is gone.
|
||||||
**
|
**
|
||||||
** May 1996 PLB Created.
|
** May 1996 PLB Created.
|
||||||
**
|
**
|
||||||
*/
|
*/
|
||||||
PUBLIC void HTAAServer_clear ()
|
PUBLIC void HTAAServer_clear ()
|
||||||
{
|
{
|
||||||
HTList *n, *nn;
|
HTList *n, *nn;
|
||||||
HTAAServer *s;
|
HTAAServer *s;
|
||||||
|
|
||||||
n = server_table;
|
n = server_table;
|
||||||
while (n) {
|
while (n) {
|
||||||
nn = n->next;
|
nn = n->next;
|
||||||
s = (HTAAServer *)n->object;
|
s = (HTAAServer *)n->object;
|
||||||
if (s) {
|
if (s) {
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (www2Trace)
|
if (www2Trace)
|
||||||
fprintf(stderr, "Clearing passwd info for %s\n", s->hostname?s->hostname:"NULL");
|
fprintf(stderr, "Clearing passwd info for %s\n", s->hostname?s->hostname:"NULL");
|
||||||
#endif
|
#endif
|
||||||
HTAARealm_clearall (s->realms);
|
HTAARealm_clearall (s->realms);
|
||||||
@ -192,9 +192,9 @@ PUBLIC void HTAAServer_clear ()
|
|||||||
n = nn;
|
n = nn;
|
||||||
}
|
}
|
||||||
server_table = NULL;
|
server_table = NULL;
|
||||||
secret_key = NULL;
|
secret_key = NULL;
|
||||||
current_setup = NULL;
|
current_setup = NULL;
|
||||||
current_hostname = NULL;
|
current_hostname = NULL;
|
||||||
current_docname = NULL;
|
current_docname = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,7 +231,7 @@ PRIVATE HTAAServer *HTAAServer_new ARGS2(WWW_CONST char*, hostname,
|
|||||||
if (hostname) StrAllocCopy(server->hostname, hostname);
|
if (hostname) StrAllocCopy(server->hostname, hostname);
|
||||||
|
|
||||||
if (!server_table) server_table = HTList_new();
|
if (!server_table) server_table = HTList_new();
|
||||||
|
|
||||||
HTList_addObject(server_table, (void*)server);
|
HTList_addObject(server_table, (void*)server);
|
||||||
|
|
||||||
return server;
|
return server;
|
||||||
@ -284,7 +284,7 @@ PRIVATE HTAAServer *HTAAServer_lookup ARGS2(WWW_CONST char *, hostname,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************** HTAASetup *******************************/
|
/*************************** HTAASetup *******************************/
|
||||||
|
|
||||||
|
|
||||||
/* PRIVATE HTAASetup_lookup()
|
/* PRIVATE HTAASetup_lookup()
|
||||||
@ -306,7 +306,7 @@ PRIVATE HTAAServer *HTAAServer_lookup ARGS2(WWW_CONST char *, hostname,
|
|||||||
** Otherwise, a HTAASetup structure representing
|
** Otherwise, a HTAASetup structure representing
|
||||||
** the protected server setup on the corresponding
|
** the protected server setup on the corresponding
|
||||||
** document tree.
|
** document tree.
|
||||||
**
|
**
|
||||||
*/
|
*/
|
||||||
PRIVATE HTAASetup *HTAASetup_lookup ARGS3(WWW_CONST char *, hostname,
|
PRIVATE HTAASetup *HTAASetup_lookup ARGS3(WWW_CONST char *, hostname,
|
||||||
int, portnumber,
|
int, portnumber,
|
||||||
@ -453,7 +453,7 @@ PRIVATE void HTAASetup_updateSpecifics ARGS2(HTAASetup *, setup,
|
|||||||
** On Entry:
|
** On Entry:
|
||||||
** realm_table a list of realm objects
|
** realm_table a list of realm objects
|
||||||
**
|
**
|
||||||
** On Exit:
|
** On Exit:
|
||||||
** returns: Nothing. realm_table is no longer valid.
|
** returns: Nothing. realm_table is no longer valid.
|
||||||
*/
|
*/
|
||||||
PUBLIC void HTAARealm_clearall ARGS1(HTList *, realm_table)
|
PUBLIC void HTAARealm_clearall ARGS1(HTList *, realm_table)
|
||||||
@ -468,10 +468,10 @@ PUBLIC void HTAARealm_clearall ARGS1(HTList *, realm_table)
|
|||||||
if (r) {
|
if (r) {
|
||||||
|
|
||||||
#ifdef PAUL_IS_A_GIMP
|
#ifdef PAUL_IS_A_GIMP
|
||||||
if (www2Trace)
|
if (www2Trace)
|
||||||
fprintf(stderr, "Clearing %s %s:%s\n",
|
fprintf(stderr, "Clearing %s %s:%s\n",
|
||||||
r->realmname?r->realmname:"NULL",
|
r->realmname?r->realmname:"NULL",
|
||||||
r->realmname?r->username:"NULL",
|
r->realmname?r->username:"NULL",
|
||||||
r->realmname?r->password:"NULL");
|
r->realmname?r->password:"NULL");
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -504,7 +504,7 @@ PRIVATE HTAARealm *HTAARealm_lookup ARGS2(HTList *, realm_table,
|
|||||||
if (realm_table && realmname) {
|
if (realm_table && realmname) {
|
||||||
HTList *cur = realm_table;
|
HTList *cur = realm_table;
|
||||||
HTAARealm *realm;
|
HTAARealm *realm;
|
||||||
|
|
||||||
while (NULL != (realm = (HTAARealm*)HTList_nextObject(cur))) {
|
while (NULL != (realm = (HTAARealm*)HTList_nextObject(cur))) {
|
||||||
if (0==strcmp(realm->realmname, realmname))
|
if (0==strcmp(realm->realmname, realmname))
|
||||||
return realm;
|
return realm;
|
||||||
@ -624,11 +624,11 @@ PRIVATE char *compose_auth_string ARGS2(HTAAScheme, scheme,
|
|||||||
/* for MD5 -- DXP */
|
/* for MD5 -- DXP */
|
||||||
char * nonce; /* Server specified integer value */
|
char * nonce; /* Server specified integer value */
|
||||||
char * opaque; /* more random MD5 junk... */
|
char * opaque; /* more random MD5 junk... */
|
||||||
|
|
||||||
|
|
||||||
FREE(result); /* From previous call */
|
FREE(result); /* From previous call */
|
||||||
|
|
||||||
if ((scheme != HTAA_BASIC && scheme != HTAA_PUBKEY && scheme != HTAA_MD5)
|
if ((scheme != HTAA_BASIC && scheme != HTAA_PUBKEY && scheme != HTAA_MD5)
|
||||||
|| !setup ||
|
|| !setup ||
|
||||||
!setup->scheme_specifics || !setup->scheme_specifics[scheme] ||
|
!setup->scheme_specifics || !setup->scheme_specifics[scheme] ||
|
||||||
!setup->server || !setup->server->realms)
|
!setup->server || !setup->server->realms)
|
||||||
@ -675,7 +675,7 @@ PRIVATE char *compose_auth_string ARGS2(HTAAScheme, scheme,
|
|||||||
if (!realm->password)
|
if (!realm->password)
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
len = strlen(realm->username ? realm->username : "") +
|
len = strlen(realm->username ? realm->username : "") +
|
||||||
strlen(realm->password ? realm->password : "") + 3;
|
strlen(realm->password ? realm->password : "") + 3;
|
||||||
|
|
||||||
@ -740,13 +740,13 @@ PRIVATE char *compose_auth_string ARGS2(HTAAScheme, scheme,
|
|||||||
if (!opaque)
|
if (!opaque)
|
||||||
return "";
|
return "";
|
||||||
|
|
||||||
if (!(A1 = (unsigned char*)malloc(strlen(realm->username) +
|
if (!(A1 = (unsigned char*)malloc(strlen(realm->username) +
|
||||||
strlen(realm->realmname) +
|
strlen(realm->realmname) +
|
||||||
strlen(realm->password) + 3 + 1)))
|
strlen(realm->password) + 3 + 1)))
|
||||||
outofmem(__FILE__, "compose_auth_string");
|
outofmem(__FILE__, "compose_auth_string");
|
||||||
|
|
||||||
if (!(A2 = (unsigned char*)malloc(4 + strlen(current_docname) + 1 + 1 )))
|
if (!(A2 = (unsigned char*)malloc(4 + strlen(current_docname) + 1 + 1 )))
|
||||||
outofmem(__FILE__, "compose_auth_string");
|
outofmem(__FILE__, "compose_auth_string");
|
||||||
|
|
||||||
/* make A1 */
|
/* make A1 */
|
||||||
*A1 = (unsigned char)0;
|
*A1 = (unsigned char)0;
|
||||||
@ -768,18 +768,18 @@ PRIVATE char *compose_auth_string ARGS2(HTAAScheme, scheme,
|
|||||||
strcat((char*)A2, "\0");
|
strcat((char*)A2, "\0");
|
||||||
|
|
||||||
if (!(md5_cleartext = (unsigned char*)malloc(100 + 1)))
|
if (!(md5_cleartext = (unsigned char*)malloc(100 + 1)))
|
||||||
outofmem(__FILE__, "compose_auth_string");
|
outofmem(__FILE__, "compose_auth_string");
|
||||||
if (!(md5_ciphertext = (unsigned char*)malloc(100 + 1)))
|
if (!(md5_ciphertext = (unsigned char*)malloc(100 + 1)))
|
||||||
outofmem(__FILE__, "compose_auth_string");
|
outofmem(__FILE__, "compose_auth_string");
|
||||||
if (!(hex1 = (unsigned char*)malloc(32 + 1)))
|
if (!(hex1 = (unsigned char*)malloc(32 + 1)))
|
||||||
outofmem(__FILE__, "compose_auth_string");
|
outofmem(__FILE__, "compose_auth_string");
|
||||||
if (!(hex2 = (unsigned char*)malloc(32 + 1)))
|
if (!(hex2 = (unsigned char*)malloc(32 + 1)))
|
||||||
outofmem(__FILE__, "compose_auth_string");
|
outofmem(__FILE__, "compose_auth_string");
|
||||||
if (!(digest1 = (unsigned char*)malloc(16)))
|
if (!(digest1 = (unsigned char*)malloc(16)))
|
||||||
outofmem(__FILE__, "compose_auth_string");
|
outofmem(__FILE__, "compose_auth_string");
|
||||||
if (!(digest2 = (unsigned char*)malloc(16)))
|
if (!(digest2 = (unsigned char*)malloc(16)))
|
||||||
outofmem(__FILE__, "compose_auth_string");
|
outofmem(__FILE__, "compose_auth_string");
|
||||||
|
|
||||||
MD5Mem(A1, strlen((char*)A1), digest1);
|
MD5Mem(A1, strlen((char*)A1), digest1);
|
||||||
MD5Mem(A2, strlen((char*)A2), digest2);
|
MD5Mem(A2, strlen((char*)A2), digest2);
|
||||||
|
|
||||||
@ -886,7 +886,7 @@ PUBLIC char *HTAA_composeAuth ARGS3(WWW_CONST char *, hostname,
|
|||||||
|
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (www2Trace)
|
if (www2Trace)
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Composing Authorization for %s:%d/%s\n",
|
"Composing Authorization for %s:%d/%s\n",
|
||||||
hostname, portnumber, docname);
|
hostname, portnumber, docname);
|
||||||
#endif
|
#endif
|
||||||
@ -900,7 +900,7 @@ PUBLIC char *HTAA_composeAuth ARGS3(WWW_CONST char *, hostname,
|
|||||||
retry = NO;
|
retry = NO;
|
||||||
|
|
||||||
current_portnumber = portnumber;
|
current_portnumber = portnumber;
|
||||||
|
|
||||||
if (hostname) StrAllocCopy(current_hostname, hostname);
|
if (hostname) StrAllocCopy(current_hostname, hostname);
|
||||||
else FREE(current_hostname);
|
else FREE(current_hostname);
|
||||||
|
|
||||||
@ -908,7 +908,7 @@ PUBLIC char *HTAA_composeAuth ARGS3(WWW_CONST char *, hostname,
|
|||||||
else FREE(current_docname);
|
else FREE(current_docname);
|
||||||
}
|
}
|
||||||
else retry = YES;
|
else retry = YES;
|
||||||
|
|
||||||
if (!current_setup || !retry)
|
if (!current_setup || !retry)
|
||||||
current_setup = HTAASetup_lookup(hostname, portnumber, docname);
|
current_setup = HTAASetup_lookup(hostname, portnumber, docname);
|
||||||
|
|
||||||
@ -974,7 +974,7 @@ PUBLIC char *HTAA_composeAuth ARGS3(WWW_CONST char *, hostname,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* BROWSER PUBLIC HTAA_shouldRetryWithAuth()
|
/* BROWSER PUBLIC HTAA_shouldRetryWithAuth()
|
||||||
**
|
**
|
||||||
** DETERMINES IF WE SHOULD RETRY THE SERVER
|
** DETERMINES IF WE SHOULD RETRY THE SERVER
|
||||||
@ -1034,7 +1034,7 @@ PUBLIC BOOL HTAA_shouldRetryWithAuth ARGS3(char *, start_of_headers,
|
|||||||
char *fieldname = HTNextField(&p);
|
char *fieldname = HTNextField(&p);
|
||||||
char *arg1 = HTNextField(&p);
|
char *arg1 = HTNextField(&p);
|
||||||
char *args = p;
|
char *args = p;
|
||||||
|
|
||||||
if (0==my_strcasecmp(fieldname, "WWW-Authenticate:")) {
|
if (0==my_strcasecmp(fieldname, "WWW-Authenticate:")) {
|
||||||
if (HTAA_UNKNOWN != (scheme = HTAAScheme_enum(arg1))) {
|
if (HTAA_UNKNOWN != (scheme = HTAAScheme_enum(arg1))) {
|
||||||
HTList_addObject(valid_schemes, (void*)scheme);
|
HTList_addObject(valid_schemes, (void*)scheme);
|
||||||
@ -1087,7 +1087,7 @@ PUBLIC BOOL HTAA_shouldRetryWithAuth ARGS3(char *, start_of_headers,
|
|||||||
/* So we have already tried with authorization. */
|
/* So we have already tried with authorization. */
|
||||||
/* Either we don't have access or username or */
|
/* Either we don't have access or username or */
|
||||||
/* password was misspelled. */
|
/* password was misspelled. */
|
||||||
|
|
||||||
/* Update scheme-specific parameters */
|
/* Update scheme-specific parameters */
|
||||||
/* (in case they have expired by chance). */
|
/* (in case they have expired by chance). */
|
||||||
HTAASetup_updateSpecifics(current_setup, scheme_specifics);
|
HTAASetup_updateSpecifics(current_setup, scheme_specifics);
|
||||||
@ -1115,7 +1115,7 @@ PUBLIC BOOL HTAA_shouldRetryWithAuth ARGS3(char *, start_of_headers,
|
|||||||
}
|
}
|
||||||
if (!template)
|
if (!template)
|
||||||
template = HTAA_makeProtectionTemplate(current_docname);
|
template = HTAA_makeProtectionTemplate(current_docname);
|
||||||
current_setup = HTAASetup_new(server,
|
current_setup = HTAASetup_new(server,
|
||||||
template,
|
template,
|
||||||
valid_schemes,
|
valid_schemes,
|
||||||
scheme_specifics);
|
scheme_specifics);
|
||||||
|
@ -1,31 +1,31 @@
|
|||||||
/* BROWSER SIDE ACCESS AUTHORIZATION MODULE
|
/* BROWSER SIDE ACCESS AUTHORIZATION MODULE
|
||||||
|
|
||||||
This module is the browser side interface to Access Authorization (AA) package. It
|
This module is the browser side interface to Access Authorization (AA) package. It
|
||||||
contains code only for browser.
|
contains code only for browser.
|
||||||
|
|
||||||
Important to know about memory allocation:
|
Important to know about memory allocation:
|
||||||
|
|
||||||
Routines in this module use dynamic allocation, but free automatically all the memory
|
Routines in this module use dynamic allocation, but free automatically all the memory
|
||||||
reserved by them.
|
reserved by them.
|
||||||
|
|
||||||
Therefore the caller never has to (and never should) free() any object returned by
|
Therefore the caller never has to (and never should) free() any object returned by
|
||||||
these functions.
|
these functions.
|
||||||
|
|
||||||
Therefore also all the strings returned by this package are only valid until the next
|
Therefore also all the strings returned by this package are only valid until the next
|
||||||
call to the same function is made. This approach is selected, because of the nature of
|
call to the same function is made. This approach is selected, because of the nature of
|
||||||
access authorization: no string returned by the package needs to be valid longer than
|
access authorization: no string returned by the package needs to be valid longer than
|
||||||
until the next call.
|
until the next call.
|
||||||
|
|
||||||
This also makes it easy to plug the AA package in: you don't have to ponder whether to
|
This also makes it easy to plug the AA package in: you don't have to ponder whether to
|
||||||
free()something here or is it done somewhere else (because it is always done somewhere
|
free()something here or is it done somewhere else (because it is always done somewhere
|
||||||
else).
|
else).
|
||||||
|
|
||||||
The strings that the package needs to store are copied so the original strings given as
|
The strings that the package needs to store are copied so the original strings given as
|
||||||
parameters to AA functions may be freed or modified with no side effects.
|
parameters to AA functions may be freed or modified with no side effects.
|
||||||
|
|
||||||
Also note:The AA package does not free() anything else than what it has itself
|
Also note:The AA package does not free() anything else than what it has itself
|
||||||
allocated.
|
allocated.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef HTAABROW_H
|
#ifndef HTAABROW_H
|
||||||
@ -48,19 +48,19 @@ Routines for Browser Side Recording of AA Info
|
|||||||
Most of the browser-side AA is done by the following two functions (which are called
|
Most of the browser-side AA is done by the following two functions (which are called
|
||||||
from file HTTP.c so the browsers using libwww only need to be linked with the new
|
from file HTTP.c so the browsers using libwww only need to be linked with the new
|
||||||
library and not be changed at all):
|
library and not be changed at all):
|
||||||
|
|
||||||
HTAA_composeAuth() composes the Authorization: line contents, if the AA package
|
HTAA_composeAuth() composes the Authorization: line contents, if the AA package
|
||||||
thinks that the given document is protected. Otherwise this function returns NULL.
|
thinks that the given document is protected. Otherwise this function returns NULL.
|
||||||
This function also calls the functions HTPrompt(),HTPromptPassword() and HTConfirm()
|
This function also calls the functions HTPrompt(),HTPromptPassword() and HTConfirm()
|
||||||
to get the username, password and some confirmation from the user.
|
to get the username, password and some confirmation from the user.
|
||||||
|
|
||||||
HTAA_shouldRetryWithAuth() determines whether to retry the request with AA or with a
|
HTAA_shouldRetryWithAuth() determines whether to retry the request with AA or with a
|
||||||
new AA (in case username or password was misspelled).
|
new AA (in case username or password was misspelled).
|
||||||
|
|
||||||
HTAA_TryWithAuth() sets up everything for an automatic first try with authentication.
|
HTAA_TryWithAuth() sets up everything for an automatic first try with authentication.
|
||||||
|
|
||||||
HTAA_ClearAuth() clears the currently allocated authentication record.
|
HTAA_ClearAuth() clears the currently allocated authentication record.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* PUBLIC HTAA_composeAuth()
|
/* PUBLIC HTAA_composeAuth()
|
||||||
@ -156,19 +156,19 @@ PUBLIC void HTAA_ClearAuth NOPARAMS;
|
|||||||
#ifdef PEM_AUTH
|
#ifdef PEM_AUTH
|
||||||
/*
|
/*
|
||||||
* PUBLIC HTAA_makecommand()
|
* PUBLIC HTAA_makecommand()
|
||||||
*
|
*
|
||||||
* ENCRYPT AN HTTP REQUEST, AND ENCAPSULATE IT IN
|
* ENCRYPT AN HTTP REQUEST, AND ENCAPSULATE IT IN
|
||||||
* A NEW HTTP PEM AUTHORIZED REQUEST
|
* A NEW HTTP PEM AUTHORIZED REQUEST
|
||||||
*
|
*
|
||||||
* ON ENTRY:
|
* ON ENTRY:
|
||||||
* command the HTTP request
|
* command the HTTP request
|
||||||
*
|
*
|
||||||
* ON EXIT:
|
* ON EXIT:
|
||||||
* returns the new HTTP request with PEM
|
* returns the new HTTP request with PEM
|
||||||
*
|
*
|
||||||
* Do not free this string. This function *requires* that the
|
* Do not free this string. This function *requires* that the
|
||||||
* HTAA_composeAuth function has been called prior to it.
|
* HTAA_composeAuth function has been called prior to it.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
PUBLIC char *HTAA_makecommand PARAMS((char * command, char **body, int *bl));
|
PUBLIC char *HTAA_makecommand PARAMS((char * command, char **body, int *bl));
|
||||||
#endif /* PEM_AUTH */
|
#endif /* PEM_AUTH */
|
||||||
|
@ -129,7 +129,7 @@ PRIVATE int read_item ARGS4(FILE *, fp,
|
|||||||
** READ A FIELD FROM A PASSWORD, GROUP
|
** READ A FIELD FROM A PASSWORD, GROUP
|
||||||
** OR ACCESS CONTROL LIST FILE
|
** OR ACCESS CONTROL LIST FILE
|
||||||
** i.e. an item terminated by colon,
|
** i.e. an item terminated by colon,
|
||||||
** end-of-line, or end-of-file.
|
** end-of-line, or end-of-file.
|
||||||
** ON ENTRY:
|
** ON ENTRY:
|
||||||
** fp is the file to read the characters from
|
** fp is the file to read the characters from
|
||||||
** contents is the character array to put the characters
|
** contents is the character array to put the characters
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
/* FILE ROUTINES FOR ACCESS AUTHORIZATION PACKAGE
|
/* FILE ROUTINES FOR ACCESS AUTHORIZATION PACKAGE
|
||||||
|
|
||||||
This module implements the routines used for accessing (and parsing) the files used in
|
This module implements the routines used for accessing (and parsing) the files used in
|
||||||
the access authorization:
|
the access authorization:
|
||||||
|
|
||||||
password file
|
password file
|
||||||
|
|
||||||
group file
|
group file
|
||||||
|
|
||||||
access control list (ACL) file
|
access control list (ACL) file
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -37,23 +37,23 @@
|
|||||||
Naming conventions
|
Naming conventions
|
||||||
|
|
||||||
Record is an entire line in file.
|
Record is an entire line in file.
|
||||||
|
|
||||||
Field is an entity separated by colons and/or by end-of-line.
|
Field is an entity separated by colons and/or by end-of-line.
|
||||||
|
|
||||||
List is a field in which there are items separated by commas.
|
List is a field in which there are items separated by commas.
|
||||||
|
|
||||||
Record-oriented Read Routines
|
Record-oriented Read Routines
|
||||||
|
|
||||||
Password, group and ACL are internally read in by the following functions:
|
Password, group and ACL are internally read in by the following functions:
|
||||||
|
|
||||||
HTAAFile_nextRec() skips to the beginning of the next record (must be called even
|
HTAAFile_nextRec() skips to the beginning of the next record (must be called even
|
||||||
after the last field of a record is read to proceed to the next
|
after the last field of a record is read to proceed to the next
|
||||||
record).
|
record).
|
||||||
|
|
||||||
HTAAFile_readField() reads a field (separated by colons).
|
HTAAFile_readField() reads a field (separated by colons).
|
||||||
|
|
||||||
HTAAFile_readList() reads a field containing a comma-separated list of items.
|
HTAAFile_readList() reads a field containing a comma-separated list of items.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* PUBLIC HTAAFile_nextRec()
|
/* PUBLIC HTAAFile_nextRec()
|
||||||
|
@ -81,14 +81,14 @@ PUBLIC int HTAA_getUid NOARGS
|
|||||||
if (isNumber(current_prot->uid_name)) {
|
if (isNumber(current_prot->uid_name)) {
|
||||||
if (NULL != (pw = getpwuid(atoi(current_prot->uid_name)))) {
|
if (NULL != (pw = getpwuid(atoi(current_prot->uid_name)))) {
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (www2Trace) fprintf(stderr,
|
if (www2Trace) fprintf(stderr,
|
||||||
"%s(%s) returned (%s:%s:%d:%d:...)\n",
|
"%s(%s) returned (%s:%s:%d:%d:...)\n",
|
||||||
"HTAA_getUid: getpwuid",
|
"HTAA_getUid: getpwuid",
|
||||||
current_prot->uid_name,
|
current_prot->uid_name,
|
||||||
pw->pw_name, pw->pw_passwd,
|
pw->pw_name, pw->pw_passwd,
|
||||||
pw->pw_uid, pw->pw_gid);
|
pw->pw_uid, pw->pw_gid);
|
||||||
#endif
|
#endif
|
||||||
return pw->pw_uid;
|
return pw->pw_uid;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { /* User name (not a number) */
|
else { /* User name (not a number) */
|
||||||
@ -118,9 +118,9 @@ PUBLIC int HTAA_getUid NOARGS
|
|||||||
** Default is 65534 (nogroup).
|
** Default is 65534 (nogroup).
|
||||||
*/
|
*/
|
||||||
PUBLIC int HTAA_getGid NOARGS
|
PUBLIC int HTAA_getGid NOARGS
|
||||||
{
|
{
|
||||||
struct group *gr = NULL;
|
struct group *gr = NULL;
|
||||||
|
|
||||||
if (current_prot && current_prot->gid_name) {
|
if (current_prot && current_prot->gid_name) {
|
||||||
if (isNumber(current_prot->gid_name)) {
|
if (isNumber(current_prot->gid_name)) {
|
||||||
if (NULL != (gr = getgrgid(atoi(current_prot->gid_name)))) {
|
if (NULL != (gr = getgrgid(atoi(current_prot->gid_name)))) {
|
||||||
@ -137,7 +137,7 @@ PUBLIC int HTAA_getGid NOARGS
|
|||||||
else { /* Group name (not number) */
|
else { /* Group name (not number) */
|
||||||
if (NULL != (gr = getgrnam(current_prot->gid_name))) {
|
if (NULL != (gr = getgrnam(current_prot->gid_name))) {
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (www2Trace) fprintf(stderr,
|
if (www2Trace) fprintf(stderr,
|
||||||
"%s(\"%s\") returned (%s:%s:%d:...)\n",
|
"%s(\"%s\") returned (%s:%s:%d:...)\n",
|
||||||
"HTAA_getGid: getgrnam",
|
"HTAA_getGid: getgrnam",
|
||||||
current_prot->gid_name,
|
current_prot->gid_name,
|
||||||
@ -216,9 +216,9 @@ PRIVATE void HTAA_parseProtFile ARGS2(HTAAProt *, prot,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
if (lex_item == LEX_ALPH_STR) { /* Valid setup record */
|
if (lex_item == LEX_ALPH_STR) { /* Valid setup record */
|
||||||
|
|
||||||
StrAllocCopy(fieldname, lex_buffer);
|
StrAllocCopy(fieldname, lex_buffer);
|
||||||
|
|
||||||
if (LEX_FIELD_SEP != (lex_item = lex(fp)))
|
if (LEX_FIELD_SEP != (lex_item = lex(fp)))
|
||||||
unlex(lex_item); /* If someone wants to use colon */
|
unlex(lex_item); /* If someone wants to use colon */
|
||||||
/* after field name it's ok, but */
|
/* after field name it's ok, but */
|
||||||
@ -245,7 +245,7 @@ PRIVATE void HTAA_parseProtFile ARGS2(HTAAProt *, prot,
|
|||||||
"authentication scheme:",
|
"authentication scheme:",
|
||||||
lex_buffer);
|
lex_buffer);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (LEX_ITEM_SEP != (lex_item = lex(fp)))
|
if (LEX_ITEM_SEP != (lex_item = lex(fp)))
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
@ -282,7 +282,7 @@ PRIVATE void HTAA_parseProtFile ARGS2(HTAAProt *, prot,
|
|||||||
HTAssocList_add(prot->values, fieldname, lex_buffer);
|
HTAssocList_add(prot->values, fieldname, lex_buffer);
|
||||||
lex_item = lex(fp); /* Read record separator */
|
lex_item = lex(fp); /* Read record separator */
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (www2Trace) fprintf(stderr,
|
if (www2Trace) fprintf(stderr,
|
||||||
"%s `%s' bound to value `%s'\n",
|
"%s `%s' bound to value `%s'\n",
|
||||||
"HTAA_parseProtFile: Name",
|
"HTAA_parseProtFile: Name",
|
||||||
fieldname, lex_buffer);
|
fieldname, lex_buffer);
|
||||||
@ -347,7 +347,7 @@ PRIVATE HTAAProt *HTAAProt_new ARGS3(WWW_CONST char *, cur_docname,
|
|||||||
|
|
||||||
if (!prot_cache)
|
if (!prot_cache)
|
||||||
prot_cache = HTList_new();
|
prot_cache = HTList_new();
|
||||||
|
|
||||||
while (NULL != (cache_item = (HTAAProtCache*)HTList_nextObject(cur))) {
|
while (NULL != (cache_item = (HTAAProtCache*)HTList_nextObject(cur))) {
|
||||||
if (!strcmp(cache_item->prot_filename, prot_filename))
|
if (!strcmp(cache_item->prot_filename, prot_filename))
|
||||||
break;
|
break;
|
||||||
@ -536,7 +536,7 @@ PUBLIC HTAAProt *HTAA_getDefaultProtection NOARGS
|
|||||||
if (!current_prot) {
|
if (!current_prot) {
|
||||||
current_prot = default_prot;
|
current_prot = default_prot;
|
||||||
default_prot = NULL;
|
default_prot = NULL;
|
||||||
}
|
}
|
||||||
return current_prot;
|
return current_prot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* PROTECTION SETUP FILE
|
/* PROTECTION SETUP FILE
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef HTAAPROT_H
|
#ifndef HTAAPROT_H
|
||||||
@ -39,15 +39,15 @@ typedef struct {
|
|||||||
Callbacks for rule system
|
Callbacks for rule system
|
||||||
|
|
||||||
The following three functioncs are called by the rule system:
|
The following three functioncs are called by the rule system:
|
||||||
|
|
||||||
HTAA_clearProtections() when starting to translate a filename
|
HTAA_clearProtections() when starting to translate a filename
|
||||||
|
|
||||||
HTAA_setDefaultProtection() when "defprot" rule is matched
|
HTAA_setDefaultProtection() when "defprot" rule is matched
|
||||||
|
|
||||||
HTAA_setCurrentProtection() when "protect" rule is matched
|
HTAA_setCurrentProtection() when "protect" rule is matched
|
||||||
|
|
||||||
Protection setup files are cached by these functions.
|
Protection setup files are cached by these functions.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* PUBLIC HTAA_setDefaultProtection()
|
/* PUBLIC HTAA_setDefaultProtection()
|
||||||
@ -117,11 +117,11 @@ Getting Protection Settings
|
|||||||
|
|
||||||
HTAA_getCurrentProtection() returns the current protection mode (if there was a
|
HTAA_getCurrentProtection() returns the current protection mode (if there was a
|
||||||
"protect" rule). NULL, if no "protect" rule has been matched.
|
"protect" rule). NULL, if no "protect" rule has been matched.
|
||||||
|
|
||||||
HTAA_getDefaultProtection() sets the current protection mode to what it was set to
|
HTAA_getDefaultProtection() sets the current protection mode to what it was set to
|
||||||
by "defprot" rule and also returns it (therefore after this call also
|
by "defprot" rule and also returns it (therefore after this call also
|
||||||
HTAA_getCurrentProtection() returns the same structure.
|
HTAA_getCurrentProtection() returns the same structure.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* PUBLIC HTAA_getCurrentProtection()
|
/* PUBLIC HTAA_getCurrentProtection()
|
||||||
|
@ -119,7 +119,7 @@ PUBLIC char *HTAA_statusMessage NOARGS
|
|||||||
|
|
||||||
/* Success */
|
/* Success */
|
||||||
case HTAA_OK:
|
case HTAA_OK:
|
||||||
return "AA: Access should be ok but something went wrong";
|
return "AA: Access should be ok but something went wrong";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Others */
|
/* Others */
|
||||||
@ -176,7 +176,7 @@ PRIVATE char *status_name ARGS1(HTAAFailReasonType, reason)
|
|||||||
} /* switch */
|
} /* switch */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -272,7 +272,7 @@ PRIVATE HTAAFailReasonType check_authorization ARGS4(WWW_CONST char *, pathname
|
|||||||
"host", HTClientHost);
|
"host", HTClientHost);
|
||||||
else fprintf(stderr, "%s %s %s %s\n",
|
else fprintf(stderr, "%s %s %s %s\n",
|
||||||
"HTAA_checkAuthorization: request from",
|
"HTAA_checkAuthorization: request from",
|
||||||
HTClientHost,
|
HTClientHost,
|
||||||
"accepted by only mask match (no ACL, only",
|
"accepted by only mask match (no ACL, only",
|
||||||
"Protect rule, and only mask enabled)");
|
"Protect rule, and only mask enabled)");
|
||||||
}
|
}
|
||||||
@ -338,7 +338,7 @@ PRIVATE HTAAFailReasonType check_authorization ARGS4(WWW_CONST char *, pathname
|
|||||||
? htaa_user->username : "NOT-AUTHENTICATED"));
|
? htaa_user->username : "NOT-AUTHENTICATED"));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
** Check mask group
|
** Check mask group
|
||||||
*/
|
*/
|
||||||
if (prot->mask_group) {
|
if (prot->mask_group) {
|
||||||
@ -358,7 +358,7 @@ PRIVATE HTAAFailReasonType check_authorization ARGS4(WWW_CONST char *, pathname
|
|||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
else if (www2Trace) fprintf(stderr, "%s %s %s %s %s\n",
|
else if (www2Trace) fprintf(stderr, "%s %s %s %s %s\n",
|
||||||
"HTAA_checkAuthorization: request from",
|
"HTAA_checkAuthorization: request from",
|
||||||
HTClientHost,
|
HTClientHost,
|
||||||
"accepted by just mask group match",
|
"accepted by just mask group match",
|
||||||
"(no ACL, only Protect rule, and only",
|
"(no ACL, only Protect rule, and only",
|
||||||
"mask enabled)");
|
"mask enabled)");
|
||||||
@ -436,7 +436,7 @@ PUBLIC int HTAA_checkAuthorization ARGS4(WWW_CONST char *, url,
|
|||||||
char *local_copy = NULL;
|
char *local_copy = NULL;
|
||||||
HTAAMethod method = HTAAMethod_enum(method_name);
|
HTAAMethod method = HTAAMethod_enum(method_name);
|
||||||
HTAAScheme scheme = HTAAScheme_enum(scheme_name);
|
HTAAScheme scheme = HTAAScheme_enum(scheme_name);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Translate into absolute pathname, and
|
** Translate into absolute pathname, and
|
||||||
** check for "protect" and "defprot" rules.
|
** check for "protect" and "defprot" rules.
|
||||||
@ -453,7 +453,7 @@ PUBLIC int HTAA_checkAuthorization ARGS4(WWW_CONST char *, url,
|
|||||||
char *localname = HTLocalName(pathname);
|
char *localname = HTLocalName(pathname);
|
||||||
free(pathname);
|
free(pathname);
|
||||||
pathname = localname;
|
pathname = localname;
|
||||||
}
|
}
|
||||||
FREE(local_copy);
|
FREE(local_copy);
|
||||||
|
|
||||||
HTAAFailReason = check_authorization(pathname, method,
|
HTAAFailReason = check_authorization(pathname, method,
|
||||||
@ -621,7 +621,7 @@ PUBLIC char *HTAA_composeAuthHeaders NOARGS
|
|||||||
#endif
|
#endif
|
||||||
} /* scheme valid for requested document */
|
} /* scheme valid for requested document */
|
||||||
} /* for every scheme */
|
} /* for every scheme */
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,31 +1,31 @@
|
|||||||
/* SERVER SIDE ACCESS AUTHORIZATION MODULE
|
/* SERVER SIDE ACCESS AUTHORIZATION MODULE
|
||||||
|
|
||||||
This module is the server side interface to Access Authorization (AA) package. It
|
This module is the server side interface to Access Authorization (AA) package. It
|
||||||
contains code only for server.
|
contains code only for server.
|
||||||
|
|
||||||
Important to know about memory allocation:
|
Important to know about memory allocation:
|
||||||
|
|
||||||
Routines in this module use dynamic allocation, but free automatically all the memory
|
Routines in this module use dynamic allocation, but free automatically all the memory
|
||||||
reserved by them.
|
reserved by them.
|
||||||
|
|
||||||
Therefore the caller never has to (and never should) free() any object returned by
|
Therefore the caller never has to (and never should) free() any object returned by
|
||||||
these functions.
|
these functions.
|
||||||
|
|
||||||
Therefore also all the strings returned by this package are only valid until the next
|
Therefore also all the strings returned by this package are only valid until the next
|
||||||
call to the same function is made. This approach is selected, because of the nature of
|
call to the same function is made. This approach is selected, because of the nature of
|
||||||
access authorization: no string returned by the package needs to be valid longer than
|
access authorization: no string returned by the package needs to be valid longer than
|
||||||
until the next call.
|
until the next call.
|
||||||
|
|
||||||
This also makes it easy to plug the AA package in: you don't have to ponder whether to
|
This also makes it easy to plug the AA package in: you don't have to ponder whether to
|
||||||
free()something here or is it done somewhere else (because it is always done somewhere
|
free()something here or is it done somewhere else (because it is always done somewhere
|
||||||
else).
|
else).
|
||||||
|
|
||||||
The strings that the package needs to store are copied so the original strings given as
|
The strings that the package needs to store are copied so the original strings given as
|
||||||
parameters to AA functions may be freed or modified with no side effects.
|
parameters to AA functions may be freed or modified with no side effects.
|
||||||
|
|
||||||
Also note:The AA package does not free() anything else than what it has itself
|
Also note:The AA package does not free() anything else than what it has itself
|
||||||
allocated.
|
allocated.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef HTAASERV_H
|
#ifndef HTAASERV_H
|
||||||
@ -50,7 +50,7 @@
|
|||||||
Check Access Authorization
|
Check Access Authorization
|
||||||
|
|
||||||
HTAA_checkAuthorization() is the main access authorization function.
|
HTAA_checkAuthorization() is the main access authorization function.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* PUBLIC HTAA_checkAuthorization()
|
/* PUBLIC HTAA_checkAuthorization()
|
||||||
|
@ -76,7 +76,7 @@ PUBLIC HTAAScheme HTAAScheme_enum ARGS1(WWW_CONST char*, name)
|
|||||||
*cur = TOUPPER(*cur);
|
*cur = TOUPPER(*cur);
|
||||||
cur++;
|
cur++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strncmp(upcased, "NONE", 4))
|
if (!strncmp(upcased, "NONE", 4))
|
||||||
return HTAA_NONE;
|
return HTAA_NONE;
|
||||||
else if (!strncmp(upcased, "BASIC", 5))
|
else if (!strncmp(upcased, "BASIC", 5))
|
||||||
@ -112,7 +112,7 @@ PUBLIC char *HTAAScheme_name ARGS1(HTAAScheme, scheme)
|
|||||||
case HTAA_PUBKEY: return "Pubkey"; break;
|
case HTAA_PUBKEY: return "Pubkey"; break;
|
||||||
case HTAA_KERBEROS_V4: return "KerberosV4"; break;
|
case HTAA_KERBEROS_V4: return "KerberosV4"; break;
|
||||||
case HTAA_KERBEROS_V5: return "KerberosV5"; break;
|
case HTAA_KERBEROS_V5: return "KerberosV5"; break;
|
||||||
case HTAA_MD5: return "Digest"; break;
|
case HTAA_MD5: return "Digest"; break;
|
||||||
case HTAA_UNKNOWN: return "UNKNOWN"; break;
|
case HTAA_UNKNOWN: return "UNKNOWN"; break;
|
||||||
default: return "THIS-IS-A-BUG";
|
default: return "THIS-IS-A-BUG";
|
||||||
}
|
}
|
||||||
@ -227,7 +227,7 @@ PUBLIC BOOL HTAAMethod_inList ARGS2(HTAAMethod, method,
|
|||||||
** returns YES, if filename matches the template.
|
** returns YES, if filename matches the template.
|
||||||
** NO, otherwise.
|
** NO, otherwise.
|
||||||
*/
|
*/
|
||||||
PUBLIC BOOL HTAA_templateMatch ARGS2(WWW_CONST char *, template,
|
PUBLIC BOOL HTAA_templateMatch ARGS2(WWW_CONST char *, template,
|
||||||
WWW_CONST char *, filename)
|
WWW_CONST char *, filename)
|
||||||
{
|
{
|
||||||
WWW_CONST char *p = template;
|
WWW_CONST char *p = template;
|
||||||
@ -236,7 +236,7 @@ PUBLIC BOOL HTAA_templateMatch ARGS2(WWW_CONST char *, template,
|
|||||||
|
|
||||||
for( ; *p && *q && *p == *q; p++, q++) /* Find first mismatch */
|
for( ; *p && *q && *p == *q; p++, q++) /* Find first mismatch */
|
||||||
; /* do nothing else */
|
; /* do nothing else */
|
||||||
|
|
||||||
if (!*p && !*q) return YES; /* Equally long equal strings */
|
if (!*p && !*q) return YES; /* Equally long equal strings */
|
||||||
else if ('*' == *p) { /* Wildcard */
|
else if ('*' == *p) { /* Wildcard */
|
||||||
p++; /* Skip wildcard character */
|
p++; /* Skip wildcard character */
|
||||||
@ -376,7 +376,7 @@ PUBLIC HTAssocList *HTAA_parseArgList ARGS1(char *, str)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { /* No name, just a value */
|
else { /* No name, just a value */
|
||||||
if (*cur == ',')
|
if (*cur == ',')
|
||||||
*(cur++) = (char)0; /* Terminate value */
|
*(cur++) = (char)0; /* Terminate value */
|
||||||
/* else last value on line (already terminated by NULL) */
|
/* else last value on line (already terminated by NULL) */
|
||||||
StrAllocCopy(name, "nnn"); /* Room for item order number */
|
StrAllocCopy(name, "nnn"); /* Room for item order number */
|
||||||
@ -497,7 +497,7 @@ PUBLIC char *HTAA_getUnfoldedLine NOARGS
|
|||||||
|
|
||||||
|
|
||||||
/* Unfolding */
|
/* Unfolding */
|
||||||
|
|
||||||
if (peek_for_folding) {
|
if (peek_for_folding) {
|
||||||
if (*cur != ' ' && *cur != '\t')
|
if (*cur != ' ' && *cur != '\t')
|
||||||
return line; /* Ok, no continuation line */
|
return line; /* Ok, no continuation line */
|
||||||
@ -511,7 +511,7 @@ PUBLIC char *HTAA_getUnfoldedLine NOARGS
|
|||||||
while (cur < end_pointer && *cur != '\n') /* Find the end-of-line */
|
while (cur < end_pointer && *cur != '\n') /* Find the end-of-line */
|
||||||
cur++; /* (or end-of-buffer). */
|
cur++; /* (or end-of-buffer). */
|
||||||
|
|
||||||
|
|
||||||
/* Terminating line */
|
/* Terminating line */
|
||||||
|
|
||||||
if (cur < end_pointer) { /* So *cur==LF, terminate line */
|
if (cur < end_pointer) { /* So *cur==LF, terminate line */
|
||||||
|
@ -1,30 +1,30 @@
|
|||||||
/* Utilities for the Authorization parts of libwww
|
/* Utilities for the Authorization parts of libwww
|
||||||
COMMON PARTS OF AUTHORIZATION MODULE TO BOTH SERVER AND BROWSER
|
COMMON PARTS OF AUTHORIZATION MODULE TO BOTH SERVER AND BROWSER
|
||||||
|
|
||||||
This module is the interface to the common parts of Access Authorization (AA) package
|
This module is the interface to the common parts of Access Authorization (AA) package
|
||||||
for both server and browser. Important to know about memory allocation:
|
for both server and browser. Important to know about memory allocation:
|
||||||
|
|
||||||
Routines in this module use dynamic allocation, but free automatically all the memory
|
Routines in this module use dynamic allocation, but free automatically all the memory
|
||||||
reserved by them.
|
reserved by them.
|
||||||
|
|
||||||
Therefore the caller never has to (and never should) free() any object returned by
|
Therefore the caller never has to (and never should) free() any object returned by
|
||||||
these functions.
|
these functions.
|
||||||
|
|
||||||
Therefore also all the strings returned by this package are only valid until the next
|
Therefore also all the strings returned by this package are only valid until the next
|
||||||
call to the same function is made. This approach is selected, because of the nature of
|
call to the same function is made. This approach is selected, because of the nature of
|
||||||
access authorization: no string returned by the package needs to be valid longer than
|
access authorization: no string returned by the package needs to be valid longer than
|
||||||
until the next call.
|
until the next call.
|
||||||
|
|
||||||
This also makes it easy to plug the AA package in: you don't have to ponder whether to
|
This also makes it easy to plug the AA package in: you don't have to ponder whether to
|
||||||
free() something here or is it done somewhere else (because it is always done somewhere
|
free() something here or is it done somewhere else (because it is always done somewhere
|
||||||
else).
|
else).
|
||||||
|
|
||||||
The strings that the package needs to store are copied so the original strings given as
|
The strings that the package needs to store are copied so the original strings given as
|
||||||
parameters to AA functions may be freed or modified with no side effects.
|
parameters to AA functions may be freed or modified with no side effects.
|
||||||
|
|
||||||
Also note: The AA package does not free() anything else than what it has itself
|
Also note: The AA package does not free() anything else than what it has itself
|
||||||
allocated.
|
allocated.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef HTAAUTIL_H
|
#ifndef HTAAUTIL_H
|
||||||
@ -88,10 +88,10 @@ Default filenames
|
|||||||
Datatype definitions
|
Datatype definitions
|
||||||
|
|
||||||
HTAASCHEME
|
HTAASCHEME
|
||||||
|
|
||||||
The enumeration HTAAScheme represents the possible authentication schemes used by the
|
The enumeration HTAAScheme represents the possible authentication schemes used by the
|
||||||
WWW Access Authorization.
|
WWW Access Authorization.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@ -110,7 +110,7 @@ typedef enum {
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
ENUMERATION TO REPRESENT HTTP METHODS
|
ENUMERATION TO REPRESENT HTTP METHODS
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -61,7 +61,7 @@ PUBLIC char *HTAA_getAclFilename ARGS1(WWW_CONST char *, pathname)
|
|||||||
*filename = '\0'; /* Truncate filename off from directory path */
|
*filename = '\0'; /* Truncate filename off from directory path */
|
||||||
filename++; /* and the filename begins from the next character */
|
filename++; /* and the filename begins from the next character */
|
||||||
}
|
}
|
||||||
|
|
||||||
StrAllocCopy(acl_path, directory); /* Also frees acl_path */
|
StrAllocCopy(acl_path, directory); /* Also frees acl_path */
|
||||||
/* from previous call. */
|
/* from previous call. */
|
||||||
StrAllocCat(acl_path, "/");
|
StrAllocCat(acl_path, "/");
|
||||||
@ -156,7 +156,7 @@ PUBLIC GroupDef *HTAA_getAclEntry ARGS3(FILE *, acl_file,
|
|||||||
char *buf;
|
char *buf;
|
||||||
|
|
||||||
if (!acl_file) return NULL; /* ACL doesn't exist */
|
if (!acl_file) return NULL; /* ACL doesn't exist */
|
||||||
|
|
||||||
if (group_def) {
|
if (group_def) {
|
||||||
GroupDef_delete(group_def); /* From previous call */
|
GroupDef_delete(group_def); /* From previous call */
|
||||||
group_def = NULL;
|
group_def = NULL;
|
||||||
@ -170,7 +170,7 @@ PUBLIC GroupDef *HTAA_getAclEntry ARGS3(FILE *, acl_file,
|
|||||||
|
|
||||||
if (!(buf = (char*)malloc((strlen(filename)+2)*sizeof(char))))
|
if (!(buf = (char*)malloc((strlen(filename)+2)*sizeof(char))))
|
||||||
outofmem(__FILE__, "HTAA_getAuthorizedGroups");
|
outofmem(__FILE__, "HTAA_getAuthorizedGroups");
|
||||||
|
|
||||||
while (EOF != HTAAFile_readField(acl_file, buf, len+1)) {
|
while (EOF != HTAAFile_readField(acl_file, buf, len+1)) {
|
||||||
if (HTAA_templateMatch(buf, filename)) {
|
if (HTAA_templateMatch(buf, filename)) {
|
||||||
HTList *methods = HTList_new();
|
HTList *methods = HTList_new();
|
||||||
@ -180,7 +180,7 @@ PUBLIC GroupDef *HTAA_getAclEntry ARGS3(FILE *, acl_file,
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Filename '%s' matched template '%s', allowed methods:",
|
"Filename '%s' matched template '%s', allowed methods:",
|
||||||
filename, buf);
|
filename, buf);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (HTAAMethod_inList(method, methods)) { /* right method? */
|
if (HTAAMethod_inList(method, methods)) { /* right method? */
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* ACCESS CONTROL LIST ROUTINES
|
/* ACCESS CONTROL LIST ROUTINES
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef HTACL_H
|
#ifndef HTACL_H
|
||||||
|
@ -66,7 +66,7 @@ PUBLIC char * HTClientHost = 0; /* Name of remote login host if any */
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
PUBLIC HTFormat HTOutputFormat = NULL;
|
PUBLIC HTFormat HTOutputFormat = NULL;
|
||||||
PUBLIC HTStream* HTOutputStream = NULL; /* For non-interactive, set this */
|
PUBLIC HTStream* HTOutputStream = NULL; /* For non-interactive, set this */
|
||||||
|
|
||||||
PUBLIC BOOL using_gateway = NO; /* are we using a gateway? */
|
PUBLIC BOOL using_gateway = NO; /* are we using a gateway? */
|
||||||
PUBLIC BOOL using_proxy = NO; /* are we using a proxy gateway? */
|
PUBLIC BOOL using_proxy = NO; /* are we using a proxy gateway? */
|
||||||
@ -142,7 +142,7 @@ PRIVATE int get_physical ARGS3(
|
|||||||
char * host = NULL;
|
char * host = NULL;
|
||||||
struct Proxy *GetNoProxy();
|
struct Proxy *GetNoProxy();
|
||||||
extern int useKeepAlive;
|
extern int useKeepAlive;
|
||||||
|
|
||||||
HTAnchor_setPhysical(anchor, addr);
|
HTAnchor_setPhysical(anchor, addr);
|
||||||
|
|
||||||
access = HTParse(HTAnchor_physical(anchor),
|
access = HTParse(HTAnchor_physical(anchor),
|
||||||
@ -348,7 +348,7 @@ PRIVATE int HTLoad ARGS4(
|
|||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
if (status < 0) return status; /* Can't resolve or forbidden */
|
if (status < 0) return status; /* Can't resolve or forbidden */
|
||||||
|
|
||||||
retry=5;
|
retry=5;
|
||||||
|
|
||||||
retry_proxy:
|
retry_proxy:
|
||||||
@ -428,9 +428,9 @@ PUBLIC HTStream *HTSaveStream ARGS1(HTParentAnchor *, anchor)
|
|||||||
{
|
{
|
||||||
HTProtocol * p = HTAnchor_protocol(anchor);
|
HTProtocol * p = HTAnchor_protocol(anchor);
|
||||||
if (!p) return NULL;
|
if (!p) return NULL;
|
||||||
|
|
||||||
return (*p->saveStream)(anchor);
|
return (*p->saveStream)(anchor);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -449,7 +449,7 @@ PUBLIC HTStream *HTSaveStream ARGS1(HTParentAnchor *, anchor)
|
|||||||
**
|
**
|
||||||
** On Exit,
|
** On Exit,
|
||||||
** returns 1 Success in opening document
|
** returns 1 Success in opening document
|
||||||
** 0 Failure
|
** 0 Failure
|
||||||
** -1 Interrupted
|
** -1 Interrupted
|
||||||
**
|
**
|
||||||
*/
|
*/
|
||||||
@ -468,7 +468,7 @@ PRIVATE int HTLoadDocument ARGS4(
|
|||||||
|
|
||||||
use_this_url_instead = NULL;
|
use_this_url_instead = NULL;
|
||||||
|
|
||||||
/* We LOVE goto's!
|
/* We LOVE goto's!
|
||||||
*
|
*
|
||||||
* Let's rephrase this..._You_ love goto's...we _abhore_ goto's. People who
|
* Let's rephrase this..._You_ love goto's...we _abhore_ goto's. People who
|
||||||
* LOVE goto's should be shot.
|
* LOVE goto's should be shot.
|
||||||
@ -480,7 +480,7 @@ PRIVATE int HTLoadDocument ARGS4(
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
status = HTLoad(full_address, anchor, format_out, sink);
|
status = HTLoad(full_address, anchor, format_out, sink);
|
||||||
|
|
||||||
if (status == HT_LOADED) {
|
if (status == HT_LOADED) {
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (www2Trace) {
|
if (www2Trace) {
|
||||||
@ -498,9 +498,9 @@ PRIVATE int HTLoadDocument ARGS4(
|
|||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (www2Trace)
|
if (www2Trace)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "HTAccess: '%s' is a redirection URL.\n",
|
fprintf (stderr, "HTAccess: '%s' is a redirection URL.\n",
|
||||||
full_address);
|
full_address);
|
||||||
fprintf (stderr, "HTAccess: Redirecting to '%s'\n",
|
fprintf (stderr, "HTAccess: Redirecting to '%s'\n",
|
||||||
redirecting_url);
|
redirecting_url);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -518,26 +518,26 @@ PRIVATE int HTLoadDocument ARGS4(
|
|||||||
#endif
|
#endif
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status == HT_NO_DATA) {
|
if (status == HT_NO_DATA) {
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (www2Trace) {
|
if (www2Trace) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"HTAccess: `%s' has been accessed, No data left.\n",
|
"HTAccess: `%s' has been accessed, No data left.\n",
|
||||||
full_address);
|
full_address);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status<0) { /* Failure in accessing a document */
|
if (status<0) { /* Failure in accessing a document */
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
if (www2Trace) fprintf(stderr,
|
if (www2Trace) fprintf(stderr,
|
||||||
"HTAccess: Can't access `%s'\n", full_address);
|
"HTAccess: Can't access `%s'\n", full_address);
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If you get this, then please find which routine is returning
|
/* If you get this, then please find which routine is returning
|
||||||
a positive unrecognised error code! */
|
a positive unrecognised error code! */
|
||||||
|
|
||||||
@ -561,7 +561,7 @@ PRIVATE int HTLoadDocument ARGS4(
|
|||||||
**
|
**
|
||||||
** On Exit,
|
** On Exit,
|
||||||
** returns 1 Success in opening document
|
** returns 1 Success in opening document
|
||||||
** 0 Failure
|
** 0 Failure
|
||||||
** -1 Interrupted
|
** -1 Interrupted
|
||||||
**
|
**
|
||||||
**
|
**
|
||||||
@ -591,7 +591,7 @@ PUBLIC int HTLoadAbsolute ARGS1(WWW_CONST char *,addr)
|
|||||||
**
|
**
|
||||||
** On Exit,
|
** On Exit,
|
||||||
** returns YES Success in opening document
|
** returns YES Success in opening document
|
||||||
** NO Failure
|
** NO Failure
|
||||||
**
|
**
|
||||||
**
|
**
|
||||||
*/
|
*/
|
||||||
@ -619,7 +619,7 @@ PUBLIC BOOL HTLoadToStream ARGS3(
|
|||||||
**
|
**
|
||||||
** On Exit,
|
** On Exit,
|
||||||
** returns YES Success in opening document
|
** returns YES Success in opening document
|
||||||
** NO Failure
|
** NO Failure
|
||||||
**
|
**
|
||||||
**
|
**
|
||||||
*/
|
*/
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
/* HTAccess: Access manager for libwww
|
/* HTAccess: Access manager for libwww
|
||||||
ACCESS MANAGER
|
ACCESS MANAGER
|
||||||
|
|
||||||
This module keeps a list of valid protocol (naming scheme)
|
This module keeps a list of valid protocol (naming scheme)
|
||||||
specifiers with associated access code. It allows documents to be
|
specifiers with associated access code. It allows documents to be
|
||||||
loaded given various combinations of parameters. New access
|
loaded given various combinations of parameters. New access
|
||||||
protocols may be registered at any time.
|
protocols may be registered at any time.
|
||||||
|
|
||||||
Part of the libwww library .
|
Part of the libwww library .
|
||||||
|
|
||||||
*/
|
*/
|
||||||
#ifndef HTACCESS_H
|
#ifndef HTACCESS_H
|
||||||
#define HTACCESS_H
|
#define HTACCESS_H
|
||||||
@ -54,17 +54,17 @@ extern HTFormat HTOutputFormat; /* To convert on load, set this */
|
|||||||
Load a document from relative name
|
Load a document from relative name
|
||||||
|
|
||||||
ON ENTRY,
|
ON ENTRY,
|
||||||
|
|
||||||
relative_name The relative address of the file to be accessed.
|
relative_name The relative address of the file to be accessed.
|
||||||
|
|
||||||
here The anchor of the object being searched
|
here The anchor of the object being searched
|
||||||
|
|
||||||
ON EXIT,
|
ON EXIT,
|
||||||
|
|
||||||
returns YES Success in opening file
|
returns YES Success in opening file
|
||||||
|
|
||||||
NO Failure
|
NO Failure
|
||||||
|
|
||||||
*/
|
*/
|
||||||
extern BOOL HTLoadRelative PARAMS((
|
extern BOOL HTLoadRelative PARAMS((
|
||||||
WWW_CONST char * relative_name,
|
WWW_CONST char * relative_name,
|
||||||
@ -76,25 +76,25 @@ extern BOOL HTLoadRelative PARAMS((
|
|||||||
Load a document from absolute name
|
Load a document from absolute name
|
||||||
|
|
||||||
ON ENTRY,
|
ON ENTRY,
|
||||||
|
|
||||||
addr The absolute address of the document to be accessed.
|
addr The absolute address of the document to be accessed.
|
||||||
|
|
||||||
filter if YES, treat document as HTML
|
filter if YES, treat document as HTML
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
ON EXIT,
|
ON EXIT,
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
returns YES Success in opening document
|
returns YES Success in opening document
|
||||||
|
|
||||||
NO Failure
|
NO Failure
|
||||||
|
|
||||||
*/
|
*/
|
||||||
extern int HTLoadAbsolute PARAMS((WWW_CONST char * addr));
|
extern int HTLoadAbsolute PARAMS((WWW_CONST char * addr));
|
||||||
|
|
||||||
@ -104,19 +104,19 @@ extern int HTLoadAbsolute PARAMS((WWW_CONST char * addr));
|
|||||||
Load a document from absolute name to a stream
|
Load a document from absolute name to a stream
|
||||||
|
|
||||||
ON ENTRY,
|
ON ENTRY,
|
||||||
|
|
||||||
addr The absolute address of the document to be accessed.
|
addr The absolute address of the document to be accessed.
|
||||||
|
|
||||||
filter if YES, treat document as HTML
|
filter if YES, treat document as HTML
|
||||||
|
|
||||||
ON EXIT,
|
ON EXIT,
|
||||||
|
|
||||||
returns YES Success in opening document
|
returns YES Success in opening document
|
||||||
|
|
||||||
NO Failure
|
NO Failure
|
||||||
|
|
||||||
Note: This is equivalent to HTLoadDocument
|
Note: This is equivalent to HTLoadDocument
|
||||||
|
|
||||||
*/
|
*/
|
||||||
extern BOOL HTLoadToStream PARAMS((WWW_CONST char * addr, BOOL filter,
|
extern BOOL HTLoadToStream PARAMS((WWW_CONST char * addr, BOOL filter,
|
||||||
HTStream * sink));
|
HTStream * sink));
|
||||||
@ -127,13 +127,13 @@ extern BOOL HTLoadToStream PARAMS((WWW_CONST char * addr, BOOL filter,
|
|||||||
Make a stream for Saving object back
|
Make a stream for Saving object back
|
||||||
|
|
||||||
ON ENTRY,
|
ON ENTRY,
|
||||||
|
|
||||||
anchor is valid anchor which has previously beeing loaded
|
anchor is valid anchor which has previously beeing loaded
|
||||||
|
|
||||||
ON EXIT,
|
ON EXIT,
|
||||||
|
|
||||||
returns 0 if error else a stream to save the object to.
|
returns 0 if error else a stream to save the object to.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -148,13 +148,13 @@ Register an access method
|
|||||||
|
|
||||||
typedef struct _HTProtocol {
|
typedef struct _HTProtocol {
|
||||||
char * name;
|
char * name;
|
||||||
|
|
||||||
int (*load)PARAMS((
|
int (*load)PARAMS((
|
||||||
WWW_CONST char * full_address,
|
WWW_CONST char * full_address,
|
||||||
HTParentAnchor * anchor,
|
HTParentAnchor * anchor,
|
||||||
HTFormat format_out,
|
HTFormat format_out,
|
||||||
HTStream* sink));
|
HTStream* sink));
|
||||||
|
|
||||||
HTStream* (*saveStream)PARAMS((HTParentAnchor * anchor));
|
HTStream* (*saveStream)PARAMS((HTParentAnchor * anchor));
|
||||||
|
|
||||||
} HTProtocol;
|
} HTProtocol;
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
** History
|
** History
|
||||||
**
|
**
|
||||||
** Nov 1990 Written in Objective-C for the NeXT browser (TBL)
|
** Nov 1990 Written in Objective-C for the NeXT browser (TBL)
|
||||||
** 24-Oct-1991 (JFG), written in C, browser-independant
|
** 24-Oct-1991 (JFG), written in C, browser-independant
|
||||||
** 21-Nov-1991 (JFG), first complete version
|
** 21-Nov-1991 (JFG), first complete version
|
||||||
**
|
**
|
||||||
** (c) Copyright CERN 1991 - See Copyright.html
|
** (c) Copyright CERN 1991 - See Copyright.html
|
||||||
@ -40,7 +40,7 @@ PRIVATE HTList **adult_table=0; /* Point to table of lists of all parents */
|
|||||||
PRIVATE HTParentAnchor * HTParentAnchor_new
|
PRIVATE HTParentAnchor * HTParentAnchor_new
|
||||||
NOARGS
|
NOARGS
|
||||||
{
|
{
|
||||||
HTParentAnchor *newAnchor =
|
HTParentAnchor *newAnchor =
|
||||||
(HTParentAnchor *) calloc (1, sizeof (HTParentAnchor)); /* zero-filled */
|
(HTParentAnchor *) calloc (1, sizeof (HTParentAnchor)); /* zero-filled */
|
||||||
newAnchor->parent = newAnchor;
|
newAnchor->parent = newAnchor;
|
||||||
return newAnchor;
|
return newAnchor;
|
||||||
@ -168,7 +168,7 @@ HTAnchor * HTAnchor_findAddress
|
|||||||
|
|
||||||
/* If the address represents a sub-anchor, we recursively load its parent,
|
/* If the address represents a sub-anchor, we recursively load its parent,
|
||||||
then we create a child anchor within that document. */
|
then we create a child anchor within that document. */
|
||||||
if (tag && *tag)
|
if (tag && *tag)
|
||||||
{
|
{
|
||||||
char *docAddress = HTParse(address, "", PARSE_ACCESS | PARSE_HOST |
|
char *docAddress = HTParse(address, "", PARSE_ACCESS | PARSE_HOST |
|
||||||
PARSE_PATH | PARSE_PUNCTUATION);
|
PARSE_PATH | PARSE_PUNCTUATION);
|
||||||
@ -179,8 +179,8 @@ HTAnchor * HTAnchor_findAddress
|
|||||||
free (tag);
|
free (tag);
|
||||||
return (HTAnchor *) foundAnchor;
|
return (HTAnchor *) foundAnchor;
|
||||||
}
|
}
|
||||||
|
|
||||||
else { /* If the address has no anchor tag,
|
else { /* If the address has no anchor tag,
|
||||||
check whether we have this node */
|
check whether we have this node */
|
||||||
int hash;
|
int hash;
|
||||||
WWW_CONST char *p;
|
WWW_CONST char *p;
|
||||||
@ -189,7 +189,7 @@ HTAnchor * HTAnchor_findAddress
|
|||||||
HTParentAnchor * foundAnchor;
|
HTParentAnchor * foundAnchor;
|
||||||
|
|
||||||
free (tag);
|
free (tag);
|
||||||
|
|
||||||
/* Select list from hash table */
|
/* Select list from hash table */
|
||||||
for(p=address, hash=0; *p; p++)
|
for(p=address, hash=0; *p; p++)
|
||||||
hash = (hash * 3 + (*(unsigned char*)p))
|
hash = (hash * 3 + (*(unsigned char*)p))
|
||||||
@ -210,7 +210,7 @@ HTAnchor * HTAnchor_findAddress
|
|||||||
return (HTAnchor *) foundAnchor;
|
return (HTAnchor *) foundAnchor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Node not found : create new anchor */
|
/* Node not found : create new anchor */
|
||||||
foundAnchor = HTParentAnchor_new ();
|
foundAnchor = HTParentAnchor_new ();
|
||||||
#ifndef DISABLE_TRACE
|
#ifndef DISABLE_TRACE
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* ASSOCIATION LIST FOR STORING NAME-VALUE PAIRS
|
/* ASSOCIATION LIST FOR STORING NAME-VALUE PAIRS
|
||||||
|
|
||||||
Lookups from assosiation list are not case-sensitive.
|
Lookups from assosiation list are not case-sensitive.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef HTASSOC_H
|
#ifndef HTASSOC_H
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user