                   Creating or Modifying Integration Modules
                        with SoftSolutions SSAPPINT.DLL

_____________________________________________________________________________

               Defining Applications DLLs and Integration Macros
_____________________________________________________________________________

DLLs allow code to be shared among applications without that code actually
existing in each application's .EXE file.  For those applications which
have a macro language capable of making DLL calls, tighter integration is
provided.  This integration is achieved through the use of application-
specific macros which make DLL calls to the SoftSolutions Applications
Integration modules.  When these integration macros are installed,
SoftSolutions will take control and perform the appropriate actions
whenever the user chooses the File|Open, File|Close, File|New, File|Save As
or one of the other integrated menu options from within the application. 
(See the "General Applications Integration" section for additional
information.)

SoftSolutions also provides two DLLs, SSAPPINT.DLL and SSINT.DLL, which can 
be called by those applications for which integration macros are not 
provided.  SSAPPINT.DLL provides application-level services such as FILE|OPEN
and FILE|NEW.  The primary difference between the two DLLs is that SSINT.DLL
provides a lower-level interface that requires more integration work but
provides greater control.  SSAPPINT.DLL provides a much higher-level 
interface and is much easier to use.  (See the SDK documentation for 
additional information on the SSINT.DLL).

Each application with integration macros installed needs to include
"%WIN:INT" in its Command line.  It cannot be embedded in a file or
environment variable included with ^ or ^% as most other application
parameters can.  This informs SoftSolutions that the integration macros are
installed for that application.  Anything included with the %WIN parameter
will be ignored by SoftSolutions for DOS and SoftSolutions for Unix, so
this will not cause problems if the same application definition is used for
other operating systems.

If the name of the application's main executable is not included elsewhere
on the Command line, it needs to be included with the %WIN parameter.  This
is especially important when using WordPerfect for Windows because the
start up executable (WPWIN.EXE) is different from the main executable
(WPWINFIL.EXE).  For example, the Command line for WordPerfect might be:

     H:\WPWIN\WPWIN.EXE /U=%UA %WIN:INT:WPWINFIL.EXE

In general, if an application is integrated with SoftSolutions then the
%P%F that would normally appear on a command line should not be used in
this case.  SSAPPINT.DLL provides functions for obtaining the names of all
retrieved documents.  If a complete, tight integration is done with an
application, then %P%F should not be used on the command line.

SoftSolutions makes calls to DLLs based on application definitions in the
APPLICATIONS screen.  In the Command line, simply place the name of the DLL
followed by a colon and the name of the function in the DLL that is to be
called.  The function will receive one argument which will be a far pointer
to a character array containing the rest of the Command line.  For example,
if the Command line is "ABC.DLL:PREVIEW %P%F," SoftSolutions would load
ABC.DLL and call the function "PREVIEW" in that DLL, passing it a far
pointer to the expansion of "%P%F."  If no path is specified for the DLL,
SoftSolutions will look in the Windows directory, the Windows SYSTEM
directory, and down the path.  Calling DLL functions from SoftSolutions is
useful if a DLL needs to be created to work better with an application.

_____________________________________________________________________________

                Using SSAPPINT.DLL to Create Custom Integrations
_____________________________________________________________________________

SSAPPINT.DLL works by communicating between SoftSolutions and specific
applications.  It does this by retrieving documents and/or creating
Profiles for new documents while remaining in the application.  SSAPPINT.DLL
allows for each application to specify they number of documents that may be 
active at one time.  The user may have up to 50 active documents open at one
time.  All of the information about each document is stored in
a Document Information Array.  For each document the following information
is stored:

     1)   The document's Profile number
     2)   The document's Version number
     3)   The document's Dataset Id
     4)   An application identifier that indicates which application has
          opened the document. 
     5)   A unique identifier from the application that indicates where the
          document is in the application.
     6)   A status flag indicating whether or not a document's Profile has 
          been completed.

Information is passed between the different integrations tools as follows:

     An application's menu option is selected causing that
     application's macro language to be called.  This macro in turn
     calls a function in SSAPPINT.DLL.  With the information passed 
     from the application to SSAPPINT.DLL, SoftSolutions performs the 
     function that was requested.  Pertinent document information is 
     then passed back to SSAPPINT.DLL.  SSAPPINT.DLL takes this 
     information, stores it, and passes back information that was 
     requested from the application's macro language.  The application 
     macro then processes this information.

Anytime that a document is retrieved from SoftSolutions (such as during a
SIFileOpen, SIFileNew, SIActivateSS, or SIFileSaveAs call), the information
for fields 1, 2, 3, 4, and 6 above is put into a temporary storage area.  It 
waits there until SISetFileID can be called with the file identifier for 
field 5 above.  This function also stores the now complete information into 
a permanent spot in the Document Information Array.  When the document is 
closed, SIFileClose will tell SoftSolutions that the document is being closed 
and will move the document information back to a temporary storage area.  
Then, if the application closes the document correctly, the function SIClosed 
or SIEndRet is called which will then delete the reference to the document
from the Document Information Array.  
_____________________________________________________________________________

                            SSAPPINT.DLL Functions
_____________________________________________________________________________

For those who wish to create their own integrations using SSAPPINT.DLL 
or to modify the sample integrations that we have sent, we have included 
the following information:

    1)    SSAPPINT.DLL function calls.
    2)    Explanation of parameters passed to SSAPPINT.DLL function calls. 
    3)    List of possible return codes from SSAPPINT.DLL function calls.
    4)    Pseudo Code examples for selected SSAPPINT.DLL functions.

An explanation of the possible return codes to SSAPPINT.DLL are provided
at the end of this document.

_____________________________________________________________________________
                               CHANGEINUSEFLAG
int PASCAL _export ChangeInUseFlag( long DocNum, int SetInUse )

This function allows the user, from an application, to set the In-Use flag 
on a specified profile.  

Parameters
     DocNum    The number that specifies which profile flag is to be toggled.

     SetInUse  Specifies if the profile flag should be set to yes or no.
                    1 - Change in use flag to Yes
                    2 - Change in use flag to No

Possible Return Values      
     SI_SUCCESS     
     SI_ERROR 

_____________________________________________________________________________
                                   FORMAT
int PASCAL Format( int Type, int Default )

This function is called to display a list of format types available for a 
specified application.  If called before a document is opened, it prompts 
the user to indicate the format type of the document that is being opened.  
If a new profile is being created for a document, this function may be called 
to give the user a choice of formats for the document being associated with 
the profile.  Also, if a document or a block of information is being saved to 
disk, this function may be called to allow the user to specify a format for 
the saved information.  This function will return a number representing the 
format that the user selected from this dialog box.

Parameters
     Type      This parameter indicates the action that this function should
	       take, so that the correct prompt can be displayed on the 
               dialog box.  The possible options are:
                    OPEN      (1)
                    PROFILE   (2)
                    SAVE      (4)
                    BLOCK     (8)
                    WPFMT     (4096)
                    WORDFMT   (8192)
        
               Currently this function can only be used with WordPerfect and 
               Word for Windows.  One of the application types (WPFMT or 
               WORDFMT) should be added together with one of the display 
               types (OPEN, PROFILE, SAVE, or BLOCK).      

     Default   This parameter is used to specify the default format type that
               should be displayed as the dialog box is displayed.      

Possible Return Values
     A positive number representing the format type selected or a -1 if an 
     error or cancel occurs.

Pseudo Code Example

The following is an example of how Format can be used in a macro.

     1    Type=OPEN+WPFMT
     2    Default=3  
     3    ErrorCode=Format( Type, Default )
     4    If ErrorCode > 0 Then
     5         Open document with the format specified by ErrorCode
     6    End If

    1.    Set the Type parameter so that the Format dialog box will display 
          the correct information.  In this example, it will list the format 
          types for WordPerfect and will display the OPEN prompt: "Convert 
          file from:".  

     2.   Specify the default format type that is to be displayed when the 
          dialog box is opened.  In this example, 3 is the format number 
          that represents WordPerfect 5.1/5.2 documents.  See the 
          WordPerfect and Word for Windows reference manuals for more 
          information on the format types that each application has available 
          and the numbers used to represent those types.

     3.   Call the Format function.  If the function succeeds, then the format
          selected by the user will be returned in the ErrorCode variable.

     4.   Check the value of ErrorCode to determine if the Format function 
          succeeded or not.

     5.   Use the information returned by Format to format the current 
          document.

_____________________________________________________________________________
                                  PASSBOX
int PASCAL PassBox( char far *Password )

This function will display a dialog box that will prompt the user for a 
password, then ask the user to re-enter the password to confirm that the
first one entered is correct.  When complete, it returns the password entered.

Parameters
     Password  This parameter will contain the password entered by the user
               if this function returns successfully.     

Possible Return Values
     SI_SUCCESS
     SI_ERROR

_____________________________________________________________________________
                                SIACTIVATESS
int PASCAL SIActivateSS(char far *AppID, char far *FileID, 
                        char far *FileName, int MaxDoc)

This will activate SoftSolutions and will position the user on the Profile
associated with the document identified with the FileID parameter.  The
user can then return to the application after viewing the Profile
information or can choose a new SoftSolutions' document to retrieve.  In
the case that SIActivateSS returns SI_SUCCESS then a new document has been
chosen and the FileName parameter will contain the name of the document to
be retrieved.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the 
               application that is calling the function.  For example, 
               WordPerfect for Windows could use "WPWIN" as an AppID each 
               time that SIActivateSS is called.

     FileID    A value that uniquely identifies the SoftSolutions document 
               inside the application.  This can be the Window number of the 
               application or the full name of the document if necessary.

     FileName  This will be a full path name of the document retrieved 
               from SoftSolutions.

     MaxDoc    This parameter indicates the maximum number of documents
               that may be open in the application at one time.

Possible Return Values
     SI_SUCCESS
     SI_ERROR
     SI_CANCEL

Pseudo Code Example

The following is an example of how SIActivateSS can be used in a macro.

     1    AppCode=<Unique Application Identifier>
     2    FileID=<Unique Window Identifier>
     3    ErrCode=SIActivateSS( AppCode, FileID, FileName, 9 )
     4    If ErrCode=SI_SUCCESS Then
     5         Open the FileName document.
     6         FileID=<Unique Window Identifier>
     7         ErrCode=SISetFileID( AppCode, FileID )
     8    End If

     1.   AppCode must be defined so that it can be passed to SIActivateSS.  
          The code is an eight letter or less code that will be unique for 
          each application used.  It does not have to be the same as the 
          application code for this application in SoftSolutions, but may be 
          if the user so desires.  An example of AppCode may be "WPWN" for 
          WordPerfect for Windows or "WW20" for Word for Windows version 2.0.

     2.   The FileID is a unique window identifier for the currently open
          document.  This will allow SSAPPINT.DLL to search the Document 
          Information Array for the current document.  If it is not found 
          then an error will be returned indicating that SSAPPINT.DLL could 
          not find the document.

     3.   At this point SIActivateSS can be called.  This function will 
          position the user on the Profile specified by the FileID.  After 
          viewing the Profile information the user can use the escape key 
          to return to the  application or can find a new document and 
          retrieve it.  If a new document is retrieved then FileName will 
          contain the name of the document to be opened by the application 
          and ErrCode will be set to 20 or SI_SUCCESS.

     4.   Check ErrCode to see if 20 or SI_SUCCESS was returned.

     5.   At this point each application must open the document specified 
          by the FileName variable.  Most macro languages provide an Open 
          function that will allow a user to open a specified document.

     6.   Set a new FileID because it may have changed if the FileID is the
          complete name of the document in the window.

     7.   This function stores information about the document just retrieved 
          in the Document Information Array.  See below for a more complete
          explanation of this function.

_____________________________________________________________________________
                                SICHECKBUSY
int PASCAL SICheckBusy( void )

This function will determine if SoftSolutions is at a profile screen or if
it is "busy" on another screen.

Possible Return Values
     1    SoftSolutions is busy and cannot be accessed by SSAPPINT.DLL.
     0    SoftSolutions is not busy.
    -1    SoftSolutions is not running at this time and cannot be accessed by
          any SSAPPINT.DLL functions.

_____________________________________________________________________________
                                SICHECKINUSE
int PASCAL SICheckInUse( long DocNum, char far *Dataset )

This function will determine if the profile for the document specified 
currently has the "In Use" field set to "Y" for yes, "N" for No or "C" for 
checked out.  It will return SI_SUCCESS if the file is NOT in use and 
SI_CANCEL if it is in use or checked out.

Parameters
     DocNum    Document number of the profile that is to be checked.

     Dataset   The name of the data set in which the document can be found.

Possible Return Values
     SI_SUCCESS
     SI_CANCEL
     SI_ERROR

_____________________________________________________________________________
                                SICHECKNONPRO
int PASCAL SICheckNonPro( char far *AppID, char far *FileID )

This function will check the Document Information Array to determine if
a particular document already has a profile associated with it or not.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SICheckNonPro is called.

     FileID    A value that uniquely identifies the SoftSolutions document
               inside the application.  This can be the Window number of the
               application or the full name of the document if necessary.

Possible Return Values
     1 or 0    If the document is a Non-Profiled document.
    -1         If the document already has a profile.
     SI_ERROR  If the document does not exist in the Document Information 
               Array.

_____________________________________________________________________________
                             SICHECKREADRIGHTS
int PASCAL SICheckReadRights( char far *FileName )

This function checks a file, at the DOS file level, to determine if the 
document has the Read-Only attribute set or not.

Parameters
     FileName  The full name of the file to be examined.

Possible Return Values
     0    if the file is NOT read only
     1    if the file is read only

_____________________________________________________________________________
                               SICLEARDOCINFO
int PASCAL SIClearDocInfo(char far *AppID, char far *FileID)

This function allows the user to clear an entry from the Document
Information Array of SSAPPINT.DLL.  If it succeeds, SI_SUCCESS is returned,
otherwise SI_ERROR is returned.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIClearDocInfo is called.

     FileID    A value that uniquely identifies the SoftSolutions document
               inside the application.  This can be the Window number of the
               application or the full name of the document if necessary.

Possible Return Values
     SI_SUCCESS
     SI_ERROR

____________________________________________________________________________
                                  SICLOSED
int PASCAL SIClosed( char far *AppID, char far *FileID, int duration,
                     int pages, long amount, long user1, long user2, 
                     int Action )

Whenever SIFILECLOSE returns SI_DELETE or SI_DOCLOSE, then this function
MUST be called after closing the document in the application.  This will
finish closing the document that SIFileClose was unable to do because the
current document did not have a complete Profile.  In this case, the
document must first be closed before the Profile can be completed. 
SI_Closed allows the macro to pick up where SIFileClose had to leave off so
that the application could close the document.  See the SIFileClose pseudo
code example to see how this function may be implemented.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIClosed is called.

     FileID    A value that uniquely identifies the SoftSolutions document
               inside the application.  This can be the Window number of the
               application or the full name of the document if necessary.

     duration  The amount of time spent in the document.  If the Windows
               application has a way to track such a value then the user
               may specify a value here.  If zero is used then
               SoftSolutions will provide a value based on the time that
               the document was marked as In Use.  If billing is not turned
               on in the SoftSolutions control file then any value can be
               used.

     pages     The number of pages printed while in the document.

     amount    The amount to bill for the document that was retrieved.  If
               billing is turned off then any value can be used.

     user1     A field that can be displayed when a billing report is done
               with the SoftSolutions' Report Writer.  This can be any
               value that the user wishes to display for this document in
               the billing record.

     user2     The same as the user1 parameter above.

     Action    If SIFileClose returned SI_DELETE then this parameter must
               be a 1, if it returned SI_DOCLOSE then this parameter must
               be a 2.

Possible Return Values
     SI_SUCCESS
     SI_ERROR
     SI_ERR_UNKNOWN

_____________________________________________________________________________
                             SICOMPAREVERSIONS
int PASCAL SICompareVersions( char far *AppID, char far *FileID, 
                              char far *Filename, int ButtonID )

This function allows the user to retrieve a document from SoftSolutions to
be compared to a previously opened document.  It will display a dialog box
with all of the FileOpen dialog box options specified by the ButtonID 
parameter along with an additional option to display a list of versions 
for the current document. Upon a successful return of this function the 
function SIEndRet needs to be called.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SICompareVersions is called.  This code does NOT 
               have to be the same as the Application Code specified in the 
               SoftSolutions Dataset.

     FileID    A value that uniquely identifies the SoftSolutions document
               inside the application.  This can be the Window number of the
               application or the full name of the document if necessary.

     FileName  This will be a full path name of the document retrieved from
               SoftSolutions.  If using drive mappings, this will be a 
               mapped path.

     ButtonID  This number tells SSAPPINT.DLL which retrieval options should 
               be available in the dialog box that is displayed when 
               SICompareVersions is called.  Each option listed below has a 
               number associated with it.  By adding together the numbers of 
               the desired options the user can determine a unique number 
               that will only display the options requested.  For example, 
               if the user wished to display only the "Full-Text Search" and
               "Worklist" options then the numbers 8 and 4 would be added
               together and 12 would be used as the ButtonID value.
	             3 - Profile Search (QBE)
                     4 - Full-Text Search
                     8 - Worklist
                    16 - Previous Search Results
                    32 - Load Non-Profiled Document
                    64 - Document Number

               NOTE:  if a user does not have Screen Access Rights to a 
               specific option, then that option will NOT be displayed, 
               regardless of the number specified by the ButtonID parameter. 

Possible Return Values
     SI_SUCCESS
     SI_VERRET
     SI_ERROR
     SI_CANCEL

Pseudo Code Example

The following is an example of how SICompareVersions can be used in a macro. 

     1    AppCode=<Unique Application Identifier>
     2    FileID=<Unique Window Identifier>
     3    ErrCode=SICompareVersions( AppCode, FileID,  FileName, 127 )
     4    If ErrCode=SI_SUCCESS Then
     5         Do the document comparison.
     6         ErrCode=SIEndRet( AppCode )    
     7    End If

     1.   AppCode must be defined so that it can be passed to 
          SICompareVersions.  The code is an eight letter or less code that 
          will be unique for each application used.  It does not have to be 
          the same as the application code for this application in 
          SoftSolutions, but may be if the user so desires.  An example of 
          AppCode may be "WPWN" for WordPerfect for Windows or "WW20" for 
          Word for Windows version 2.0.

     2.   The FileID is a unique window identifier for the currently open
          document.  This will allow SSAPPINT.DLL to search the Document 
          Information Array for the current document.  If it is not found 
          then an error will be returned indicating that SSAPPINT.DLL could 
          find it.

     3.   Once AppCode has been defined, SICompareVersions can be called.  
          This will display a dialog box giving the user several ways to 
          retrieve a document from SoftSolutions and also to list the versions 
          of the current document.  If the function executes successfully 
          then the FileName variable will contain the full path and file name 
          of the document that was selected by the user in SoftSolutions and 
          now needs to be used by the application in doing the document 
          comparison.  The FileName variable should be an empty string with 
          room for at least 160 characters when it is passed into 
          SICompareVersions.  ErrCode is a return variable that will store 
          a code passed back by SICompareVersions.  The value of this code 
          will be checked later to determine if SICompareVersions completed 
          its task successfully or not.  

     4.   Check to see if SICompareVersions returned successfully.  A return 
          code of 20 or SI_SUCCESS indicates a successful return.  A return 
          code of 90 or SI_VERRET indicates that the user wants to compare 
          a version.  The name of the version to be compared is passed back in 
          the FileName parameter.  The user will have to find this document 
          in the directory of the current document that is being compared.  
          FileName will NOT, in this case, contain the full path and file 
          name, it will only contain the file name.  It is up to the user to 
          determine the path based on the currently open version.

     5.   At this point each application must compare the document specified 
          by the FileName variable with the document desired.  

     6.   Call SIEndRet to return the document to SoftSolutions.

_____________________________________________________________________________
                                  SIENDRET
int PASCAL SIEndRet( char far *AppID )

This function is used in two different places. The first is with
SIFileClose.  This function should be called any time that SIFileClose
returns an ErrCode of SI_SUCCESS, SI_ABANDON, or SI_NEWNAME.  It tells 
SoftSolutions that the application is now finished with the document and 
that document should be made accessible to other users.

Some functions may return a SI_DOEND code.  In this case, the macro should 
also call this function after opening the document returned by SoftSolutions.
This scenario occurs when a macro receives only the file name of the document 
but SoftSolutions did not perform a full retrieve on it.  This function must
be called to indicate to SoftSolutions that it has now received the info that 
it wanted about the document so that any drives mapped can be unmapped, etc.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIEndRet is called.

Possible Return Values
     SI_SUCCESS
     SI_ERROR

Pseudo Code Example
The following is an example of how SIEndRet can be used in a macro with the
SIFileOpen function. (See the SIFileClose pseudo code for more examples of
how SIEndRet may be used.)

     1    AppCode=<Unique Application Identifier>
     2    ErrCode=SIFileOpen( AppCode, FileName, 95, 2, 9 )
     3    If ErrCode=SI_DOEND Then
     4         Retrieve or insert the FileName document into the current
               document.
     5         SIEndRet( AppCode )
     6    End If

     1.   AppCode must be defined so that it can be passed to SIFileOpen.  
          The code is an eight letter or less code that will be unique for 
          each application used.  It does not have to be the same as the 
          application code for this application in SoftSolutions, but may be 
          is the user so desires.  An example of AppCode may be "WPWN" for 
          WordPerfect for Windows or "WW20" for Word for Windows version 2.0.

     2.   SIFileOpen will be called but will only pass back the name of the
          document.  SoftSolutions will not consider the document to be 
          retrieved thus leaving it open for others to retrieve.  The purpose 
          in doing this is to allow a user to retrieve one document into the 
          middle of another for editing purposes.  The 2 in the fourth 
          parameter gives the function this effect.

     3.   Check to see if SIFileOpen returned a 60 or SI_DOEND.

     4.   Insert the desired document into the current document at the 
          current cursor position.

     5.   Call SIEndRet to tell SoftSolutions to unmap any drives that may 
          have be set to give the user access to this document.

_____________________________________________________________________________
                                SIFILECLOSE
int PASCAL SIFileClose( char far *AppID, char far *FileID, 
                   int duration, int pages, long amount,
                   long user1, long user2, char far* Format,
                   int Action )

This function will tell SoftSolutions to prompt the user to save changes that
might have been made in the document.  If a profile does not exist for the
document, it will prompt the user to create one. This function should be used
when a user closes or exits a document and is usually associated with the 
File|Close menu option.  Depending on the return value, it will also be 
necessary to call either SIClosed or SIEndRet.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIFileClose is called.

     FileID    A value that uniquely identifies the SoftSolutions document
               inside the application.  This can be the Window number of the
               application or the full name of the document if necessary.

     duration  The amount of time spent in the document.  If the Windows
               application has a way to track such a value then the user
               may specify a value here.  If zero is used then
               SoftSolutions will provide a value based on the time that
               the document was marked as In Use.  If billing is not turned
               on in the SoftSolutions control file then any value can be
               used.

     pages     The number of pages printed while in the document.

     amount    The amount to bill for the document that was retrieved.  If
               billing is turned off then any value can be used.

     user1     A field that can be displayed when a billing report is done
               with the SoftSolutions' Report Writer.  This can be any
               value that the user wishes to display for this document in
               the billing record.

     user2     The same as the user1 parameter above.

     Format    This parameter specifies the format type of the current
               document and will be displayed for WordPerfect, Word for
               Windows or other applications as the integrations evolve to
               allow that.  If SIFileClose returns successfully, the
               parameter will contain the format that the document is to be
               saved in before being closed.

     Action    This parameter will determine which options will be
               displayed in the dialog box.  The options are as follows:
                     0   Display the prompt to ask the user if the most
                         recent changes to the document should be saved
                         before the document is closed.
                     1   No Display.  This will cause SoftSolutions to
                         perform the close automatically without displaying
                         a dialog box.  This should be used when the
                         current document has not been modified since it
                         was last saved.
                    64   Document being closed is Read-Only.
                  4096   WordPerfect format types are to be displayed.
                  8192   Word for Windows format types are to be displayed.      
                        

Possible Return Values
     SI_SUCCESS
     SI_ABANDON
     SI_DELETE
     SI_DOCLOSE
     SI_NEWNAME
     SI_ERR_UNKNOWN
     SI_ERROR

Pseudo Code Example

The following is an example of how SIFileClose can be used in a macro that
is called when the File|Close menu command is chosen:

     1    Check to see if the current document has been modified since it
          was last opened or saved.  Set a variable, for example MOD, to 
          True if the document has been modified otherwise set MOD to False.
     2    AppCode=<Unique Application Identifier>
     3    FileID=<Unique Window Identifier>
     4    If MOD = TRUE Then
     5         ActionVar=4096
     6    Else
     7         ActionVar=4096+1
     8    End If
     9    ErrCode=SIFileClose( AppCode, FileID, duration, pages,
                            amount, user1, user2, "3", ActionVar )
     10   If ErrCode=SI_SUCCESS Then
     11        If MOD = TRUE Then  
     12             Save the current document
     13          End If  
     14        Close the current document
     15        SIEndRet( AppCode )
     16   Else If ErrCode=SI_ABANDON Then
     17        Close the current document without saving changes
     18        SIEndRet( AppCode )
     19   Else If ErrCode=SI_DELETE Then
     20        Close the current document without saving changes
     21        SIClosed( AppCode, FileID, duration, pages, amount, user1,
                        user2, 1 )
     22   Else If ErrCode=SI_DOCLOSE Then
     23        If MOD = TRUE Then     
     24             Save the current document
     25        End If
     26        Close the current document
     27        SIClosed( AppCode, FileID, duration, pages, amount, user1,
                        user2, 2 )
     28   Else If ErrCode=SI_NEWNAME Then
     29        Save the current document as the FileID name
     30        Close the current document
     31        SIEndRet( AppCode )
     32   End If
     
     1.   The macro should check to see if the document has been modified.  
          This is important because if it has not been modified then 
          SIFileClose should not prompt the user to save changes.  See 
          comment 4 below for an explanation of how to call SIFileClose 
          so that it does not prompt to save changes.

     2.   AppCode must be defined so that it can be passed to SIFileClose.  
          The code is an eight letter or less code that will be unique for 
          each application used.  It does not have to be the same as the 
          application code for this application in SoftSolutions, but may 
          be if the user so desires.  An example of AppCode may be "WPWN"  
          for WordPerfect for Windows or "WW20" for Word for Windows 
          version 2.0.

     3.   The FileID is a unique window identifier for the currently open
          document.  This will allow SSAPPINT.DLL to search the Document 
          Information Array for the current document.  If it is not found 
          then an error will be returned indicating that SSAPPINT.DLL could 
          not close the document because it could not find it.

     4.   Check to see if MOD is set to True.  If it is, plan on calling
          SIFileClose with the last parameter set to a number that uses the 1
          (Display) bit.  This tells the function to prompt the user to save 
          the changes that have been made.  If this parameter is set to a 
          number that does not have the 1 bit set, then SIFileClose will 
          close the document without prompting the user.

     5.   If MOD was set to TRUE then do NOT set the display bit.  In the 
          example above, the WordPerfect format type is being specified.  

     7.   If MOD was set to FALSE then add 1 to the value that will be passed 
          to SIFileClose.  This will tell SSAPPINT.DLL to not display the 
          dialog box that prompts the user to save changes.  
 
     9.   SIFileClose should now be called.  Many things could happen at this
          point depending on the state of the document and the Profile
          associated with it.  Basically, if the document already has a 
          profile, this function will ask the user if the changes made to the 
          document should be saved or not.  If a profile does not exist for 
          the document, then this function will ask the user if the changes 
          made should be saved and if a new profile should be added.  If the 
          document has been modified, the last parameter should have bit 
          1 set.

     11.  Check to see if ErrCode was returned as 20 or SI_SUCCESS.

     12.  Check to see if the document has be modified.

     13.  If the document was modified, execute a save command from the macro 
          language.  This is done because most applications, when closing a 
          document that has been modified, display their own question about 
          saving the changes made in a document.  Since SIFileClose has 
          already asked this question, the macro should save the document to 
          avoid the application close from asking it again.

     15.  Close the current document.  Because the document will appear
          unmodified since the last save, the application should close without
          any kind of prompt.  See the comment made in 13 above.

     16.  Call SIEndRet to return the document to SoftSolutions.

     17.  Check to see if ErrCode was returned as 30 or SI_ABANDON.

     18.  Close the current document without saving changes.  Therefore, no
	  changes made during this edit session will be saved out to disk.

     19.  Call SIEndRet to return the document to SoftSolutions.

     20.  Check to see if ErrCode was returned as 40 or SI_DELETE.

     21.  Close the current document without saving changes.

     22.  Call the function SIClosed and pass a 1 as the last parameter.  
          See the description for SIClosed below for a more complete 
          explanation of this function.

     23.  Check to see if ErrCode was returned as 50 or SI_DOCLOSE.

     24.  Check to see if the document has been modified.

     25.  If the document has been modified, execute a save command from the 
          macro language on the current document.

     27.  Close the current document.

     28.  Call the function SIClosed and pass a 2 as the last parameter.  See
          the description for SIClosed below for a more complete explanation 
          of this function.

     29.  Check to see if ErrCode was returned as 70 or SI_NEWNAME.

     30.  Execute a save as command from the macro language on the current
          document and use the name passed back in the FileID parameter as 
          the new name of the document.  This is necessary because the 
          current document does not have a name and must be assigned one 
          before it is closed.

     31.  Close the current document.

     32.  Call SIEndRet to return the document to SoftSolutions.

_____________________________________________________________________________
                                SIFILEDELETE
int FAR PASCAL SIFileDelete( void )

This function will display a dialog box allowing the user to specify the
dataset id and document number of a SoftSolutions document to be deleted. 
If the document is not active and the information entered by the user is
valid then the SoftSolutions document, Profile, and all versions will be
deleted from the dataset.

Possible Return Values
     SI_SUCCESS
     SI_ERROR
     SI_CANCEL

_________________________________________________________________
                                  SIFILENEW
int PASCAL SIFileNew( char far *AppID, char far *FileName, 
                      int ButtonID, int MaxDoc )

This function causes a new Profile to be created in the SoftSolutions
dataset.  It then returns the name of the file to be created by the
application.  In the case of a back-end Profile creation, the document is
placed in the user's temporary directory indicated on the WORKSTATION screen. 
When the Profile for the document is completed the document will be moved
to the correct location as specified by the Profile.  After a successful
return of this function the function SISetFileID needs to be called.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIFileNew is called.

     FileName  This will be a full path name of the document retrieved from
               SoftSolutions.

     ButtonID  This number tells SSAPPINT.DLL which options should be given 
               in the dialogue box that is displayed when SIFileNew is called. 
               Each option listed below has a number associated with it. 
               By adding together the numbers of the desired options the
               user can determine a unique number that will display only
               the options requested.  For example, if the user wished to
               display both the "Now" and "Later" options then the numbers
               3 and 4 would be added together and 7 would be used as the
               ButtonID value.  If the user would like one of the options to 
               be performed with no dialog box being displayed then a 16
               should be added to either 3 or 4.  For example, to create a 
               new document, without displaying the SSAPPINT.DLL dialog 
               box, this parameter would be given a value of 20.
	            3    Complete Profile Later
                    4    Complete Profile Now
                    8    Copy Existing Profile
                   16    No Display

     MaxDoc    This parameter indicates the maximum number of documents that
               the application can have open at one time. 

Possible Return Values
     SI_SUCCESS
     SI_ERROR
     SI_CANCEL

Pseudo Code Example

The following is an example of how SIFileNew can be used in a macro that is
called when the File|New menu command is chosen:

     1    AppCode=<Unique Application Identifier>
     2    ErrCode=SIFileNew( AppCode, FileName, 7, 9 )
     3    If ErrCode=SI_SUCCESS Then
     4         Open a new window in the application
     5         Do a Saveas to associate the FileName with the new window
     6         FileID=<Unique Window Identifier>
     7         ErrCode=SISetFileID( AppCode, FileID )
     8    End If

     1.   AppCode must be defined so that it can be passed to SIFileNew.  The
          code is an eight letter or less code that will be unique for each
          application used.  It does not have to be that same as the 
          application code for this application in SoftSolutions, but may be 
          if the user so desires.  An example of AppCode may be "WPWN" for 
          WordPerfect for Windows or "WW20" for Word for Windows version 2.0.
          
     2.   Once AppCode has been defined, SIFileNew can be called.  This will
          display a dialog box giving the user two ways to create a new 
          Profile in SoftSolutions.  If the function executes successfully 
          then the FileName variable will contain the full path and file name 
          of the document for the Profile that was just created by the user 
          in SoftSolutions and now needs to be opened by the application.  
          The FileName variable should be an empty string with room for at 
          least 160 characters when it is passed into SIFileNew.  ErrCode is 
          a return variable that will store a code passed back by SIFileNew.  
          The value of this code will be checked later to determine if 
          SIFileNew completed its task successfully or not.  The third 
          parameter in SIFileNew determines how the dialog box for this 
          function will appear.  This number, in this case 7, indicates which 
          buttons will be displayed. For the number 7 the NOW and LATER 
          buttons will be displayed allowing the user to create and complete 
          a new Profile now or later when the document is closed.  The number 
          7 was determined by adding together the numeric values, described 
          above, for the desired buttons or 3+4=7.  The user may wish to 
          display only one of the buttons described above.  Using a 3 as the 
          third parameter will display only the LATER button while using the 
          4 will display only the NOW button.  

     3.   Check to see if SIFileNew returned successfully.  A return code 
          of 20 or SI_SUCCESS indicates a successful return.

     4.   At this point each application must create a new window.  This is
          equivalent to choosing the File|New command from the menu.

     5.   Once a new window has been created, the macro needs to associate 
          it with the FileName returned by SIFileNew with this new window.  
          This can be done using a Saveas command.  This will cause the new 
          window to be saved with the FileName as the new name of the window.

     6.    Now that the requested document has been opened a unique window
           identifier must be associated with that document.  The FileID is a
           variable that will hold this unique identifier for the document.  
           This id could be a window number or the full path and file name of 
           the document.

     7.    This function stores information about the document just retrieved 
           in the Document Information Array.  See below for a more complete
           explanation of this function.

_____________________________________________________________________________
                                 SIFILEOPEN
int PASCAL SIFileOpen( char far *AppID, char far *Filename, int ButtonID,
                       int Action, int MaxDoc )

This function allows the user to retrieve a document from SoftSolutions. 
This action sets the In Use flag on the Profile to YES, and returns a 
mapped DOS path and file name of the document to be opened by the 
application.  This function is usually assigned to the menu command 
File|Open.  Upon a successful return of this function the function 
SISetFileID needs to be called.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIFileOpen is called.  This code does NOT have to 
               be the same as the Application Code specified in the 
               SoftSolutions Dataset.

     FileName  This will be a full path name of the document retrieved from
               SoftSolutions.  If using drive mappings, this will be a 
               mapped path and file name.

     ButtonID  This number tells SSAPPINT.DLL which retrieval options should 
               be available in the dialog box that is displayed when 
               SIFileOpen is called.  Each option listed below has a number 
               associated with it.  By adding together the numbers of the 
               desired options the user can determine a unique number that 
               will only display the options requested.  For example, if the
               user wished to display only the "Full-Text Search" and
               "Worklist" options then the numbers 8 and 4 would be added
               together and 12 would be used as the ButtonID value.

                     3 - Profile Search (QBE)
                     4 - Full-Text Search
                     8 - Worklist
                    16 - Previous Search Results
                    32 - Load Non-Profiled Document
                    64 - Document Number
                   128 - Prompt for Move on Load Non-Profile

               NOTE: If a user does not have Screen Access Rights to a 
               specific option, then that option will NOT be displayed, 
               regardless of the number specified by the ButtonID parameter. 

     Action    This parameter serves several different purposes.  It is used
               to determine if a dialog box will be displayed or not, and
               to indicate any special buttons that the dialog box should
               display.  

                    0 - Do not display the dialog box, but perform
                        the retrieve type specified by the ButtonID.
                    1 - Display the Dialog Box with all options specified
                        by ButtonID.
                    2 - Display the Dialog Box will all options specified
                        by ButtonID, but do a "Read-Only" retrieve of
                        the document (i.e. return the full path and file
                        name of the document, but do not mark the profile
                        in use).  The file must NOT be modified and as soon
                        as the application is done with it, the function 
                        SIEndRet must be called.
                    3 - Display a dialog box with an additional "Create 
                        Data File" button.  This is a special dialog box
                        developed to work with Word for Windows and its 
                        Merge Data Files.
                    4 - Display a dialog box with an additional "Create
                        Header File" button.  This is a special dialog box
                        developed to work with Word for Windows and its 
                        Merge Header files.
                    5 - Display a dialog box with a check box that will 
                        allow the user to specify that the file name being
                        returned should be linked to the current document.  
                        This is a special dialog box developed to work with 
                        Word for Windows and its Insert Picture Menu Option.
                    6 - Display a dialog box with an additional "Compare 
                        Versions" button.  This is a special dialog box 
                        developed to work with Word for Windows and its 
                        Compare Versions Feature.

     MaxDoc    This parameter indicates the maximum number of documents that
               the application can have open at one time. 

Possible Return Values
     SI_SUCCESS
     SI_DOEND
     SI_DOLOCK
     SI_VERRET
     SI_ERROR
     SI_CANCEL

Pseudo Code Example

The following is an example of how SIFileOpen can be used in a macro that
is called when the File|Open menu command is chosen.

     1    AppCode=<Unique Application Identifier>
     2    ErrCode=SIFileOpen( AppCode, FileName, 95, 1, 9 )
     3    If ErrCode=SI_SUCCESS Then
     4         Open the FileName document.
     5         FileID=<Unique Window Identifier>
     6         ErrCode=SISetFileID( AppCode, FileID )
     7    End If

     1.   AppCode must be defined so that it can be passed to SIFileOpen.  
          The code is an eight letter or less code that will be unique for 
          each application used.  It does not have to be the same as the 
          application code for this application in SoftSolutions, but may be 
          if the user so desires.  An example of AppCode may be "WPWN" for 
          WordPerfect for Windows or "WW20" for Word for Windows version 2.0.

     2.   Once AppCode has been defined, SIFileOpen can be called.  This will
          display a dialog box giving the user several ways to retrieve a
          document from SoftSolutions.  If the function executes successfully
          then the FileName variable will contain the full path and file name 
          of the document that was selected by the user in SoftSolutions and 
          now needs to be opened by the application.  The FileName variable 
          should be an empty string with room for at least 160 characters 
          when it is passed into SIFileOpen.  ErrCode is a return variable 
          that will store a code passed back by SIFileOpen.  The value of this
          code will be checked later to determine if SIFileOpen completed its
          task successfully or not.  The third and fourth parameters in 
          SIFileOpen determine how the dialog box for this function will 
          appear.  The first number, in this case 95, indicates which buttons
          will be displayed.  For the number 95 the Document Number button, 
          the Profile Search button, the Full-Text search button, the 
          Worklist button and the Previous Search Results button will all be 
          displayed.  The number 95 was determined by adding together the 
          numeric values, described above, for the desired buttons or 
          3+4+8+16+64=95. The fourth parameter, 1 in our example, tells
          SIFileOpen whether or not to display the dialog box or retrieve the
          selected document, or if a special dialog box type should be shown.  
          The number 1 indicates that the dialog box should be displayed. See 
          below for other examples of how the third and fourth parameters can 
          be used.  The last parameter tells SSAPPINT.DLL how many documents 
          can be opened in the application at one time.  Each time a document 
          is opened, SSAPPINT.DLL will check to see how many previous 
          documents have been opened and once the maximum number has been 
          reached, it will not allow any more documents to be opened until 
          some of the previously opened documents have been closed.  

     3.   Check to see if SIFileOpen returned successfully.  A return code of  
          20 or SI_SUCCESS indicates a successful return.

     4.   At this point each application must open the document specified by 
          the FileName variable.  Most macro languages provide an Open 
          function that will allow a user to open a specified document.

     5.   Now that the requested document has been opened a unique window
          identifier must be associated with that document.  The FileID is a
          variable that will hold this unique identifier for the document.  
          This id could be a window number or the full path and file name of 
          the document.  A unique FileID is very important because there could 
          be two documents, each from a different dataset, that have the same
          SoftSolutions Profile number.  Without the FileID identifier 
          SSAPPINT.DLL would not be able to distinguish one document from the 
          other.  Therefore, because two documents cannot occupy the same 
          window, if SSAPPINT.DLL has a window identifier associated with 
          each document it tracks, it will be assured that the proper document 
          will be closed at the proper time.

     6.   This function stores information about the document just retrieved 
          in the Document Information Array.  See below for a more complete
          explanation of this function.

More Examples of How SIFileOpen can be Called:
_________________________________________________________________
SIFileOpen( AppCode, FileName, 8, 1, 9 )

     In this case the user has defined that only one option will be
     available in the dialog box.  The 8 indicates that the Worklist button
     will be displayed.  The 1 as the fourth parameter indicates to
     SIFileOpen to display the dialog box.

_________________________________________________________________
SIFileOpen( AppCode, FileName, 8, 0, 9 )

     In this case the user has chosen to allow just one option to be
     available to the end user.  The 8 specifies the Worklist option. 
     However, the 0 used in the fourth parameter tells SIFileOpen to take the
     user directly to the Worklist in SoftSolutions without displaying a
     dialog box.  The 0 option may be used when only one button has been
     specified by the ButtonID parameter.  In other words, SIFileOpen(
     AppCode, FileName, 7, 0, 9) is an invalid call to SIFileOpen because two
     different buttons have been designated to be displayed.

_________________________________________________________________
SIFileOpen( AppCode, FileName, 95, 2, 9 )

     In this case the user will have a dialog box displayed.  The buttons
     that will be displayed will again be determined by the third 
     parameter.  The 2 in the fourth parameter, however, indicates that the
     document chosen in SoftSolutions will only have its name returned.  In
     other words, the Profile's In Use flag will not be set to YES.  SIEndRet
     must be called after retrieving a document in this manner.  See the
     SIEndRet explanation for more details.  This option is useful in
     applications that allow you to retrieve one document into another,
     e.g., WordPerfect's File|Retrieve option.  Also note, in this case the 
     last parameter is ignored because the document is not expected to be
     opened as another document in the application.

_____________________________________________________________________________
                                 SIFILESAVE
int PASCAL SIFileSave(char far *AppID, char far *FileID, char far *Filename, 
                      char far *Format, int ButtonID)

This function, which should be associated with the File|Save menu option,
will prompt the user to create a profile for the current document if it
does not already have one. If WordPerfect or Word for Windows are being
used, it will also display a list of available formats in which the
document could be saved, if the document is not in the default format
for that application. If a profile does exist, then this macro will just
instruct the macro to save the current document. Upon a successful
execution of this function and a return code of SI_NEWNAME, SISetFileID
needs to be called.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIFileSave is called.

     FileID    A value that uniquely identifies the SoftSolutions document
               inside the application.  This can be the Window number of the
               application or the full name of the document if necessary.

     FileName  This will be a full path name of the document retrieved from
               SoftSolutions if a new profile is created.  

     Format    This parameter specifies the format type of the current
               document and will be displayed for WordPerfect, Word for
               Windows or other applications as the integrations evolve to
               allow that.  If SIFileSave returns successfully, the
               parameter will contain the format that the document is to be
               saved in.

     ButtonID  This parameter will determine which options will be
               displayed in the dialog box.  The options are as follows:

                  4096 - WordPerfect format types are to be displayed.
                  8192 - Word for Windows format types are to be displayed. 
                              

Possible Return Values
     SI_SUCCESS
     SI_NEWNAME
     SI_CANCEL

Pseudo Code Example

The following is an example of how SIFileSave can be used in a macro that
is called when the File|Save menu command is chosen:

     1    AppCode=<Unique Application Identifier>
     2    FileID=<Unique Window Identifier>
     3    ErrCode=SIFileSave(AppCode,FileID,FileName,"3",4096)
     4    If ErrCode=SI_SUCCESS Then
     5         Do a Save of the current document
     6    Else If ErrCode=SI_NEWNAME Then
     7         Do a Save As with FileName as the new name.
     8         FileID=<Unique Window Identifier>
     9         ErrCode=SISetFileID( AppCode, FileID )
     10   End If

     1.   AppCode must be defined so that it can be passed to SIFileSaveAs.  
          The code is an eight letter or less code that will be unique for 
          each application used.  It does not have to be that same as the 
          application code for this application in SoftSolutions, but may 
          be is the user so desires.  An example of AppCode may be "WPWN" 
          for WordPerfect for Windows or "WW20" for Word for Windows 
          version 2.0.

     2.   The FileID is a unique window identifier for the currently open
          document.  This will allow SSAPPINT.DLL to search the Document 
          Information Array for the current document.  If it is not found 
          then a new Profile will be added for the document because it is 
          assumed to not have one currently.

     3.   Once AppCode and FileID have been defined, SIFileSave can be called. 
          This function will display a dialog box if the current document 
          does not have a profile, asking if a profile should be created. If 
          the ButtonID parameter is not zero, it will also display a list of 
          file formats for either WordPerfect or Word. If SIFileSave returns 
          an ErrCode of 70 (SI_NEWNAME) then the FileName variable will 
          contain a new path and file name for the document.  The user should 
          then save the current document as the new FileName.  The FileName 
          variable should be an empty string with room for at least 160 
          characters when it is passed into SIFileSave.  ErrCode is a return 
          variable that will store a code passed back by SIFileSave.  The 
          value of this code will be checked later to determine if SIFileSave 
          completed its task successfully or not.  The last two parameters in 
          SIFileSave determine how the dialog box for this function will 
          appear.  The first is a string, in this case "3", which indicates 
          the default format type that will be displayed. The string "3" is 
          used by WordPerfect to indicate the WP 5.1/5.2 document format.  
          The second number shown above, 4096 in our example, tells 
          SIFileSave to display a list of WordPerfect file formats.

     4.   Check to see if SIFileSave returned successfully.  A return code of 
          20 or SI_SUCCESS indicates a successful return.  It indicates that 
          the macro should save all changes made to the current document.

     5.   At this point each application must save the current document.

     6.   Check to see if SIFileSave returned an ErrCode of 70 or SI_NEWNAME. 

     7.   At this point each application must save the current document with 
          the FileName variable as its new name.  Most macro languages 
          provide a "Save As" function that allows the renaming of the 
          current document.

     8.   Now that document has a new name, a unique window identifier must 
          be associated with that document because it may be different now 
          that the name has changed.  The FileID is a variable that will hold
          this unique identifier for the document.  This id could be a window 
          number or the full path and file name of the document.

     9.   This function stores information about the document just retrieved 
          in the Document Information Array.  See below for a more complete
          explanation of this function.

_____________________________________________________________________________
                                SIFILESAVEAS        
int PASCAL SIFileSaveAs(char far *AppID, char far *FileID, char far *Filename, 
                        char far *Format, int ButtonID )

This function, which will be associated with the File|Save As menu option,
will prompt the user to save the current document as a New Version or a New
Document or to modify the current document is some way. If WordPerfect or 
Word for Windows are being used, it will also display a list of available 
formats in which the document could be saved.  In the case that a Non-
Profiled document has been opened in the application then the user would 
only be prompted to save the current document as a New Document which would 
then allow the user to create a new Profile for the document.  Upon a 
successful execution of this function SISetFileID needs to be called.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIFileSaveAs is called.

     FileID    A value that uniquely identifies the SoftSolutions document
               inside the application.  This can be the Window number of the
               application or the full name of the document if necessary.

     FileName  This will be a full path name of the document retrieved from
               SoftSolutions.  If this string is "NewFor" upon returning
               from SIFileSaveAs, then the current document should be saved
               with the format passed back in the Format parameter.

     Format    This parameter specifies the format type of the current
               document and will be displayed for WordPerfect, Word for
               Windows or other applications as the integrations evolve to
               allow that.  If SIFileSaveAs returns successfully, the
               parameter will contain the format that the document is to be
               saved in.

     ButtonID  This parameter will determine which options will be
               displayed in the dialog box.  The options are as follows:

                     1 - No Display.  Can be used with one of the possible
                         options 2,4,8, or 32.  This will cause
                         SoftSolutions to perform the action automatically
                         without displaying a dialog box.
                     2 - Display the New Document (New Profile) option.
                     4 - Display the New Version option.
                     8 - Display the Current Document option.
                    16 - Display the File Sharing button.  This button,
                         when pressed, will allow the user to password the
                         document and lock the document for annotation.
                    32 - Display the New Document (Copy Profile) option.
                    64 - Read Only document.  To be used when the current
                         document has read-only attributes set.
                  4096 - WordPerfect format types are to be displayed.
                  8192 - Word for Windows format types are to be displayed. 
                              

Possible Return Values
     SI_SUCCESS
     SI_DOLOCK
     SI_ERROR
     SI_ERR_UNKNOWN
     SI_CANCEL

Pseudo Code Example

The following is an example of how SIFileSaveAs can be used in a macro that
is called when the File|Saveas menu command is chosen:

     1    AppCode=<Unique Application Identifier>
     2    FileID=<Unique Window Identifier>
     3    ErrCode=SIFileSaveAs(AppCode,FileID,FileName,"3",4110)
     4    If ErrCode=SI_SUCCESS Then
     5         Do a Save As with FileName as the new name and in the format
               indicated by the Format parameter.
     6         FileID=<Unique Window Identifier>
     7         ErrCode=SISetFileID( AppCode, FileID )
     8    End If

     1.   AppCode must be defined so that it can be passed to SIFileSaveAs.  
          The code is an eight letter or less code that will be unique for 
          each application used.  It does not have to be that same as the 
          application code for this application in SoftSolutions, but may be 
          if the user so desires.  An example of AppCode may be "WPWN" for 
          WordPerfect for Windows or "WW20" for Word for Windows version 2.0.

     2.   The FileID is a unique window identifier for the currently open
          document.  This will allow SSAPPINT.DLL to search the Document 
          Information Array for the current document.  If it is not found 
          then a new Profile will be added for the document because it is 
          assumed to not have one currently.

     3.   Once AppCode and FileID have been defined, SIFileSaveAs can be 
          called.  This function will display a dialog box with different 
          options for the user to choose, based on the value passed in the 
          ButtonID parameter.  If SIFileSaveAs executes successfully then the 
          FileName variable will contain a new path and file name for the 
          current document.  The user should then save the current document 
          as the new FileName.  If the string "NewFor" is returned in the 
          FileName parameter, the user should save the current document with 
          the new format indicated in the Format parameter.  The FileName 
          variable should be an empty string with room for at least 160 
          characters when it is passed into SIFileSaveAs.  ErrCode is a 
          return variable that will store a code passed back by SIFileSaveAs.  
          The value of this code will be checked later to determine if 
          SIFileSaveAs completed its task successfully or not.  The last two 
          parameters in SIFileSaveAs determine how the dialog box for this 
          function will appear.  The first is a string, in this case "3",
          which indicates the default format type that will be displayed.  
          The string "3" is used by WordPerfect to indicate the WP 5.1/5.2 
          document format.  The second number shown above, 4110 in our 
          example, tells SIFileSaveAs which options are to be displayed 
          in the dialog box.  The number 4110 was determined by adding 
          together the numeric values, described above, for the desired 
          buttons or 2+4+8+4096=4110.  It is possible to not display the 
          dialog box and perform immediately one of the options above.  To do
          so, the number 4110 would be replaced by a 3 to automatically put 
          the user in profile add mode in SoftSolutions without displaying 
          the dialog box.

     4.   Check to see if SIFileSaveAs returned successfully.  A return 
          code of 20 or SI_SUCCESS indicates a successful return.  SI_DOLOCK 
          also indicates a successful return and tells the user to lock the 
          current or new document for annotation.  Also, if the FileID 
          parameter has changed, then this value will hold the new Password 
          for the document passed back by SIFileSaveAs.

     5.   At this point each application must save the current document with 
          the FileName variable as its new name.  Most macro languages 
          provide a "Save As" function that allows the renaming of the 
          current document.  If the FileName parameter contains the value: 
          "NewFor" then the current document should be saved in the format 
          returned by the Format parameter.  

     6.   Now that the document has a new name, a unique window identifier 
          must be associated with that document because it may be different 
          now that the name has changed.  The FileID is a variable that will 
          hold this unique identifier for the document.  This id could be a 
          window number or the full path and file name of the document.

     7.   This function stores information about the document just retrieved 
          in the Document Information Array.  See below for a more complete
          explanation of this function.

_____________________________________________________________________________
                                SIGETDDEINFO
int PASCAL SIGetDDEInfo( char far *AppID, char far *FileID, 
                         char far *DDEInfo )

This function will return information about the current document necessary
to create a DDE link in an application.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIGetDDEInfo is called.

     FileID    A value that uniquely identifies the SoftSolutions document
               inside the application.  This can be the Window number of the
               application or the full name of the document if necessary.

     DDEInfo   If SIGetDDEInfo executes successfully then this string will
               contain the DDE link information for the current document. 
               The format will be "dataset id\document #."  This is the
               format required by applications when creating a DDE link.

Possible Return Values
     SI_SUCCESS
     SI_ERROR
     SI_ERR_UNKNOWN

_____________________________________________________________________________
                                SIGETFILEID
int PASCAL SIGetFileId( char far *AppID, long DocNum, char far *Dataset, 
                        char far *FileId )

This function will return the File Identifier for a document that was set 
with the SISetFileId call.  

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIGetFileId is called.

     DocNum    The document number of the profile for which the File 
               Identifier is to be found.

     Dataset   The data set id of the profile for which the File Identifier
               is to be found.

     FileId    This parameter will contain the File Identifier if this 
               function returns successfully.         

Possible Return Values
     SI_SUCCESS
     SI_CANCEL
     SI_ERROR

_____________________________________________________________________________
                                SIGETINFO
int PASCAL SIGetInfo( char far *AppID, char far *FileID, char far *SrchStr )

This function allows the user to get the values of specified fields from a
SoftSolutions Profile.  When the user specifies one of the currently 
retrieved documents and the field(s) of the Profile for which information
is to be returned, SIGetInfo will return the information requested in the 
SrchStr string.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIFileSaveAs is called.

     FileID    A value that uniquely identifies the SoftSolutions document
               inside the application.  This can be the Window number of the
               application or the full name of the document if necessary.

     SrchStr   When calling SIGetInfo, this string will contain the field 
               values that are to be returned by SIGetInfo.  It can contain
               one or more of the field codes SoftSolutions supports, such
               as %a for the author or %n for the document number.  If
               SIGetInfo executes successfully, then this string will
               contain the values asked for when the function was called. 
               For example, if SrchStr is set to "%n" when calling
               SIGetInfo, a value of "250" could be returned from
               SoftSolutions if the current document is number 250.
               Possible as %a for the author or %n for the document number.  If
               SIGetInfo executes successfully, then this string will
               contain the values asked for when the function was called. 
               For example, if SrchStr is set to "%n" when calling
               SIGetInfo, a value of "250" could be returned from
               SoftSolutions if the current document is number 250.

Possible Return Values
     SI_SUCCESS
     SI_ERROR
     SI_ERR_UNKNOWN

Pseudo Code Example

The following is an example of how SIGetInfo can be used in a macro.

     1    AppCode=<Unique Application Identifier>
     2    FileID=<Unique Window Identifier>
     3    SrchStr="%N - %D"
     4    ErrCode=SIGetInfo( AppCode, FileID, SrchStr )
     5    If ErrCode=SI_SUCCESS Then
     6         Use the information requested 
     7    End If

     1.   AppCode must be defined so that it can be passed to SIGetInfo.  
          The code is an eight letter or less code that will be unique for 
          each application used.  It does not have to be the same as the 
          application code for this application in SoftSolutions, but may be 
          if the user so desires.  An example of AppCode may be "WPWN" for 
          WordPerfect for Windows or "WW20" for Word for Windows version 2.0.

     2.   The FileID is a unique window identifier for the currently open
          document.  This will allow SSAPPINT.DLL to search the Document 
          Information Array for the current document.  If it is not found 
          then an error will be returned indicating that SSAPPINT.DLL could 
          not find the document.

     3.   Define the field values that SIGetInfo should find.

     4.   Call SIGetInfo.  If it returns successfully then the last parameter
          passed in will contain the information requested expanded in the 
          location of the field values.			

_____________________________________________________________________________
                               SIGETPROFILEID
int PASCAL SIGetProfileId( char far *AppID, char far *ProInfo )

After a call has been made to retrieve a document (like SIFileOpen, or
SIRetPro) and before the SISetFileID function has been called, this function
can be called to return the document number and dataset id for the newly 
retrieved document.  If this function returns successfully, it will return
the information in the format:  DOCNUM/DATASET.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIGetProfileId is called.

     ProInfo   If this function returns successfully, this parameter will
               contain the profile information for the document requested 
               in the format: DOCNUM/DATASET. 

Possible Return Values
     SI_SUCCESS
     SI_ERROR
           
_____________________________________________________________________________
                                SIGETSTRING
int PASCAL SIGetString( int StringNum, char far *StringVal )

This function will return a string from the SSAPPINT.CTX strings
file.

Parameters
     StringNum The number of the string to be returned.  The value of this 
               string can be determined from the file SSAPPINT.DES.

     StringVal The string requested from the strings file will be returned
               in this parameter.

Possible Return Values
     SI_SUCCESS

_____________________________________________________________________________
                               SIHANDLEBACKUP
int PASCAL SIHandleBackup( char far *AppID, char far *FileName, long DocNum,
                           char far *Dataset )

This function may be called if the application creates automatic timed 
backups.  When the application starts, if it detects any backup files, then
this function can be called to help the user decided what will be done
with the file.  

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIHandleBackup is called.

     FileName  The name of the backup file detected by the application.  If 
               the user decides to rename the backup then this parameter 
               will have the new name of the document.  

     DocNum    The document number of the backup file.  This must be stored
               with the backup file in some manner so that it can be 
               obtained from the backup file and passed in here.

     Dataset   The dataset id of the backup file.  This must be stored with 
               the backup file in some manner so that it can be obtained from
               the backup file and passed in here.

Possible Return Values
     SI_SUCCESS
     SI_DOOPEN
     SI_DOOPENNONP
     SI_CANCEL
     SI_ERROR 

_____________________________________________________________________________
                               SIREADDOCINFO
int PASCAL SIReadDocInfo( char far *AppID, char far *FileID )

This function allows the user to determine if the document specified by the
parameters is in the Document Information Array of SSAPPINT.DLL.  If it 
exists, it returns TRUE, otherwise it returns FALSE.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIReadDocInfo is called.

     FileID    A value that uniquely identifies the SoftSolutions document
               inside the application.  This can be the Window number of the
               application or the full name of the document if necessary.

Possible Return Values
     SI_SUCCESS
     SI_CANCEL
_____________________________________________________________________________
                                  SIRETPRO
int PASCAL SIRetPro( char far *FileName, char far *AppID, long Docnum,
                     char far *DataSet, int Action, int MaxDoc )

With this function a macro can specify the document number and dataset id
of a profile and retrieve that document non-interactively from SoftSolutions. 
If this function succeeds, the name of the document to be opened will be
passed back in the FileName parameter.

Parameters
     FileName  This will be a full path name of the document retrieved from
               SoftSolutions.

     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SIRetPro is called.

     Docnum    The document number of the profile to be retrieved.

     Dataset   The dataset in which the document being retrieved resides.

     Action    This parameter determines if SIRetPro is going to actually 
               retrieve the profile, or if this will be a "Read-Only" 
               retrieve in which the document is only going to be looked at
               and not be modified.
                    1    Retrieve the document specified.
                    2    Read-only retrieve of the document specified.          

               NOTE:  If a 1 is used in this parameter, the function
               SISetFileID must be called if the function returns 
               successfully.  If a 2 is used and this function succeeds then 
               the function SIEndRet must be called after using the document.
  
     MaxDoc    This parameter indicates the maximum number of documents that
               the application can have open at one time. 

Possible Return Values
     SI_SUCCESS
     SI_DOEND
     SI_ERROR

Pseudo Code Example

The following is an example of how SIRetPro can be used in a macro.

     1    AppCode=<Unique Application Identifier>
     2    ErrorCode=SIRetPro( FileName, AppCode, 500, "TEST", 1, 9 )
     3    If ErrorCode = SI_SUCCESS Then
     4         Open the FileName document
     5         FileID=<Unique Window Identifier>
     6         ErrorCode=SISetFileID( AppID, FileID )          
     7    End If

     1.   AppCode must be defined so that it can be passed to WPDocCheck.  
          The code is an eight letter or less code that will be unique for 
          each application used.  It does not have to be the same as the 
          application code for this application in SoftSolutions, but may be 
          if the user so desires.  An example of AppCode may be "WPWN" for 
          WordPerfect for Windows or "WW20" for Word for Windows version 2.0.

     2.   Call the function SIRetPro.  In this example, the function should 
          retrieve document number 500 from the "TEST" dataset.  

     3.   Check to determine if SIRetPro returned successfully or not.

     4.   Open the document specified by the FileName parameter.

     5.   Now that the requested document has been opened a unique window  
          identifier must be associated with that document.  The FileID is a
          variable that will hold this unique identifier for the document.  
          This id could be a window number or the full path and file name of 
          the document.  A unique FileID is very important because there could 
          be two documents, each from a different dataset, that have the same
   	  SoftSolutions Profile number.  Without the FileID identifier 
          SSAPPINT.DLL would not be able to distinguish one document from 
          the other.  Therefore, because two documents cannot occupy the same
          window, if SSAPPINT.DLL has a window identifier associated with 
          each document it tracks, it will be assured that the proper 
          document will be closed at the proper time.

     6.   This function stores information about the document just retrieved 
          in the Document Information Array.  See below for a more complete
          explanation of this function.           

_____________________________________________________________________________
                                SISETFILEID
int PASCAL SISetFileID( char far *AppID, char far *FileID )

Set the ID of a document that has just been Retrieved.  This MUST be called
after any function that successfully returns a file name for the application 
to open.  The FileID must be something that uniquely identifies the document 
just Opened and will be passed to SIFileClose() when the user is done with 
that document.  This function will move the document information from a 
temporary storage area to a permanent place in the Document Information Array.  
See the pseudo code example in SIFileOpen to see how this function is 
implemented.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID each
               time that SISetFileID is called.

     FileID    A value that uniquely identifies the SoftSolutions document
               inside the application.  This can be the Window number of the
               application or the full name of the document if necessary.

Possible Return Values
     SI_SUCCESS
     SI_ERROR
     SI_ERR_DUP

_____________________________________________________________________________
                                  SIVIEWPRO
int PASCAL SIViewPro( long DocNum, char far *Dataset )

This function will preview the document specified using the previewer 
specified on the application's Previewer Command Line in the application 
record.

Parameters
     DocNum    The document number of the profile to be previewed.

     Dataset   The dataset id of the profile to be previewed.

Possible Return Values
     SI_SUCCESS
     SI_ERROR

_____________________________________________________________________________
                                 WPDOCCHECK
int PASCAL WPDocCheck( char far *AppID, char far *FileName )

Each time an application is started, this function should be called to 
determine is SoftSolutions has a document that is ready to be retrieved.  
This scenario happens when SoftSolutions is running, but the application is
not.  The user retrieves a document and SoftSolutions puts the document to 
be retrieved in to a special queue and starts the application. At this point,
the application should call WPDocCheck to determine there is a document in 
the queue that needs to be opened.  If this function succeeds, the function
SISetFileID must be called after the application opens the document.

Parameters
     AppID     A code, 8 characters or less, that uniquely identifies the
               application that is calling the function.  For example,
               WordPerfect for Windows could use "WPWIN" as an AppID.

     FileName  If this function returns successful, this parameter will 
               contain the full path name of the document retrieved from
               SoftSolutions.  

Possible Return Values
     SI_SUCCESS
     SI_ERROR

Pseudo Code Example

The following is an example of how WPDocCheck can be used in a macro.

     1    AppCode=<Unique Application Identifier>
     2    ErrorCode=WPDocCheck( AppCode, FileName )
     3    If ErrorCode = SI_SUCCESS Then
     4         Open the FileName document
     5         FileID=<Unique Window Identifier>
     6         ErrorCode=SISetFileID( AppID, FileID )          
     7    End If
                 
     1.   AppCode must be defined so that it can be passed to WPDocCheck.  
          The code is an eight letter or less code that will be unique for 
          each application used.  It does not have to be the same as the 
          application code for this application in SoftSolutions, but may be 
          if the user so desires.  An example of AppCode may be "WPWN" for 
          WordPerfect for Windows or "WW20" for Word for Windows version 2.0.

     2.   Once AppCode has been defined, WPDocCheck can be called.  This 
          function will query SoftSolutions to determine if there is a 
          document that needs to be opened.

     3.   Check to see if WPDocCheck returned successfully.  A return code of
          20 or SI_SUCCESS indicates a successful return.

     4.   At this point each application must open the document specified by 
          the FileName variable.  Most macro languages provide an Open 
          function that will allow a user to open a specified document.

     5.   Now that the requested document has been opened a unique window
          identifier must be associated with that document.  The FileID is a
          variable that will hold this unique identifier for the document.  
          This id could be a window number or the full path and file name of 
          the document.  A unique FileID is very important because there 
          could be two documents, each from a different dataset, that have 
          the same SoftSolutions Profile number.  Without the FileID 
          identifier SSAPPINT.DLL would not be able to distinguish one 
          document from the other.  Therefore, because two documents cannot 
          occupy the same window, if SSAPPINT.DLL has a window identifier 
          associated with each document it tracks, it will be assured that 
          the proper document will be closed at the proper time.

     6.   This function stores information about the document just retrieved 
          in the Document Information Array.  See above for a more complete
          explanation of this function.

_____________________________________________________________________________

                     Functions Used with Excel Integration
_____________________________________________________________________________

The following functions were written exclusively to work with the Excel for
Windows integration.  Excel can only return one value per cell but several
functions detailed above have a return value and also send back a file name
in one of the parameters.  Because Excel cannot do this, special calls were
made to use the first parameter as the return value or the file name if the
function completed successfully.  All other functionality remains the same
in the following functions as their counterparts described above.

_____________________________________________________________________________
                               SIFILECLOSEXL
void PASCAL SIFileCloseXL( char far *AppID, char far *FileID, 
                           char far *RetVar, int duration, int pages, 
                           long amount, long user1, long user2, int Flag )

If the user creates a document that does not have a Profile and tries to
close it, a prompt will be given asking if a Profile should be created for
the document.  If the user selects "OK" and creates a new Profile then the
SoftSolutions path and file name will be passed back to Excel through the
RetVar parameter.  See the SIFileClose function described above for an
explanation of how this function works.

_____________________________________________________________________________
                                SIFILENEWXL
void PASCAL SIFileNewXL( char far *FileName, char far *AppID, int ButtonID )

See the SIFileNew function described above for an explanation of how this
function works.

_____________________________________________________________________________
                                SIFILEOPENXL
void PASCAL SIFileOpenXL( char far *Filename, char far *AppID, int ButtonID, 
                          int Action )

See the SIFileOpen function described above for an explanation of how this
function works.  If the ButtonID parameter is set to zero, then this function
will access the WPDocCheck function to determine if SoftSolutions has a 
document that needs to be opened immediately.

_____________________________________________________________________________
                               SIFILESAVEASXL
void PASCAL SIFileSaveAsXL( char far *Filename, char far *AppID, 
                            char far *FileID, int ButtonID, int Display )

See the SIFileSaveAs function described above for an explanation of how
this function works.  If the Display parameter is zero, then the dialog 
box will not be displayed.  

_____________________________________________________________________________
                                SIFILESAVEXL
void PASCAL SIFileSaveXL( char far *Filename, char far * AppID, 
                          char far *FileID, char far *Format, int ButtonID )

See the SIFileSave function described above for an explanation of how this
function works.

_____________________________________________________________________________
                                SIGETINFOXL
void PASCAL SIGetInfoXL( char far *SrchStr, char far * AppID, 
                         char far *FileID )

See the SIGetInfo function described above for an explanation of how this
function works.

_____________________________________________________________________________

                      SSAPPINT.DLL Error Code Explanation
_____________________________________________________________________________

SI_CANCEL      (10)      The user canceled the operation, terminate the 
                         current routine immediately.

SI_SUCCESS     (20)      The function finished execution without problems. 
                         Continue execution of the rest of the routine.

SI_ABANDON     (30)      A return value from SIFileClose which indicates that
                         the current document should be closed without saving
                         the changes made to it.

SI_DELETE      (40)      A return value from SIFileClose which indicates that
                         the current document should be saved without changes
                         and then closed.  This occurs when a user creates a
                         back-end Profile and closes with out saving the
                         changes.  The back-end Profile will also be deleted 
                         at this point.  SIClosed must be called after the 
                         document is closed with a 1 passed in as the last 
                         parameter.

SI_DOCLOSE     (50)      A return value from SIFileClose which indicated that
                         the current document should be saved and then closed. 
                         SIClosed must be called after the document is closed
                         with a 2 passed as the last parameter.

SI_DOEND       (60)      A possible return value from SIFIleOpen when the
                         parameter Flag2 equals 2.  It indicates that the
                         application calling SIFileOpen should open the 
                         document returned from SSAPPINT.DLL and then 
                         immediately call SIEndRet.

SI_NEWNAME     (70)      A possible return value to SIFileClose.  It 
                         indicates that the macro should save the current 
                         file with the file name returned in the FileID 
                         parameter.  The file should then be closed.

SI_DOLOCK      (80)      A possible return value to SIFileSaveAs.  It 
                         indicates that the macro should save the document 
                         and lock that file for annotation.  If a new name 
                         was passed back by SIFileSaveAs, then the document 
                         should also be saved with that new name.

SI_VERRET      (90)      A possible return value to the function 
                         SICompareVersions.  It indicates that a version name
                         was returned and a full path and file name for
                         the version should be determined from the currently
                         opened version.

SI_DOOPEN      (100)     A possible return value from the function 
                         SIHandleBackup.  It indicates that the file 
                         indicated by the FileName parameter should be opened 
                         by the application.

SI_DOOPENNONP  (110)     A possible return value from the function 
                         SIHandleBackup.  It indicates that the file indicated
                         by the FileName parameter should be opened by
                         the application.  This indicates the document to be
                         opened does not currently have a profile.

SI_ERR_DUP     (-10)     The document specified by the FileName and FileID
                         has already been retrieved from SoftSolutions. 
                         The current routine must terminate immediately.

SI_ERR_UNKNOWN (-20)     The user gave an unknown AppID code to SSAPPINT.DLL. 
                         The current routine must terminate immediately.
               
SI_ERROR       (-30)     A general error occurred during the execution of
                         this function and the current routine must be
                         terminated immediately.

SI_EACCESS     (-40)     The user does not have screen access rights to 
                         the option requested.    

_____________________________________________________________________________

                     Additional Miscellaneous Information
_____________________________________________________________________________
Customizing WordPerfect for Windows

CUSTOMWP.WCM is a new macro which can be used to assign a macro to
each of the following WordPerfect functions.  These macros will not
replace SoftSolutions integrations.  They are run in addition to
the integrations.  This information is placed in the SOFTSOLW.INI
file.  For each function, the point at which the macro is run is
specified.

File|Open                The macro is run after the document is opened.
File|New                 The macro is run after the document is opened.
File|File Manager        The macro is run after the document is opened.
File|Find                The macro is run after the document is opened.
File|Close               The macro is run before the document is closed.
File|Exit                The macro is run before WordPerfect is exited
                         and after all documents are closed.
File|Retrieve (New)      The macro is run after the document is opened.
File|Retrieve (Insert)   The macro is run after the text is inserted
                         into the document.
File|SaveAs (Close)      The macro is run before the document is renamed.
File|SaveAs (Open)       The macro is run after the document is renamed.
File|Save Block          The macro is run after the block of text is saved.
File|Save Document       The macro is run after the document is saved.

SoftSolutions now checks to see if CUSTOMWP.WCM has been run.  If
it has been run, SoftSolutions will use the macros specified by
CUSTOMWP.  If CUSTOMWP.WCM has not been run, SoftSolutions will
look in the WordPerfect programs directory for OPENMAC.WCM and
NEWMAC.WCM.

By choosing the Dialog option in CUSTOMWP.WCM, you can also
determine which buttons are to be displayed in the WordPerfect
Open, New, Retrieve, and Save As dialog boxes.  By default, all
buttons are displayed.  Once changes have been made, you must exit
and reenter WordPerfect.


OLE Link

In addition to creating a link with a SoftSolutions DOCUMENT
PROFILE field, a link can now be created with the entire
SoftSolutions Profile.  When such a link is created, the
SoftSolutions logo containing the Dataset ID and Document Number
are displayed.


OLE Verbs

SoftSolutions for Windows now supports three OLE verbs:  Retrieve,
Preview, and Profile.  When an OLE link to a SoftSolutions Profile
is highlighted in an OLE client application, the client application
will add a new option to its Edit menu called SoftSolutions
Document Profile Object.  This option will have three suboptions,
Retrieve, Preview, and Profile.  Choosing Retrieve will cause
SoftSolutions to retrieve the selected document.  Choosing Preview
will cause SoftSolutions to display the selected document in the
SoftSolutions PREVIEW window.  Profile simply takes the user to the
SoftSolutions DOCUMENT PROFILE screen.  The default verb is
Retrieve.  When double-clicking on the link object, the selected
document is automatically retrieved.

NOTE:  In some OLE client applications, the Edit menu may not be
built properly.

