#set TITLE = "FAQ"
#include top

.SH Frequently asked questions


.LP
\fBHow can I tell what QUISP version I am running?\fR
.IP \0
Use \fCquisputil -ver\fR.  Within a script the \fC@@QUISP_VERSION\fR variable contains the version number.
SHSQL and QUISP use the same version number.
If you're using \fCquisp_pl\fR, \fC@@PLVERSION\fR contains the ploticus version number
(after the \fC#endgraphic\fR statement).

#include space2
.LP
\fBWhat about installation instructions, troubleshooting tips, and support?\fR
.IP \0
#set FILE = "support.html"
#set TAG = "Check here."
#include link


#include space2
.LP
\fBIs it possible to use QUISP as a standalone (ie. without SHSQL)?  I just need a cgi interface
that can append entries to a couple of flat files.\fR
.IP \0
Yes.  The quisp \fCMakefile\fR can be set to build without SHSQL.

#include space2
.LP
\fBIs it possible to use SHSQLas a standalone API (ie. without QUISP)?\fR
.IP \0
Yes.  Just go into the \fC./sqlsrc\fR and do a \fCmake\fR, and \fClibshsql.a\fR
only will be built.

#include space2
.LP
\fBIs there a way to connect QUISP page scripts with another SQL database such as MySQL?\fR
.IP \0
This is discussed
#set FILE = "otherdb.html"
#set TAG = "here."
#include link

#include space2
.LP
\fBQUISP seems like a nice package, but I'm concerned that eventually I'll run into something
that I'm unable to do, a crippling bug, or some other limitation.\fR
.IP \0
QUISP is certainly a simpler package than mainstream fullblown systems and the inevitable trade-off
is in functionality and performance.  But why expect a single program to do everything including
the kitchen sink? When I run into something QUISP can't do by itself the first thing I consider is 
invoking an external program that can do the desired work, capturing the results using \fC#shell\fR
(the performance hit is minimal, unless this is done many times repeatedly).
Another option is writing a custom function in C (this is fairly easy to do).  As for other limitations, 
this must be decided based on individual project parameters.  Some working limitations are summarized
#set FILE = "specs.html"
#set TAG = "here."
#include link
In my own experience the existing parameters are generally sufficient; where they're not,
limits can sometimes be raised by modifying a parameter in a source code header file and rebuilding.
It seems likely that large, performance-critical or enterprise-critical projects will likely not
consider QUISP anyway for other reasons, such as IT standards compliance.
With regard to bugs, QUISP/SHSQL has been powering a medium-duty production system which I maintain,
for several years now and things are working smoothly.  I intend to do what I can to address problems 
that are reported to me.

#include space2
.LP
\fBHow difficult would it be to port a QUISP/SHSQL web site to PHP/MySQL or similar?\fR
.IP \0
This would involve a thorough review and some rewriting.
While flow-of-control logic would likely be similar between PHP and QUISP page scripts,
the syntaxes and function libraries are quite different.  QUISP includes SHSQL, which 
resembles standard SQL for basic constructs... but all embedded SQL would need to be reviewed
with some revision likely.  The QUISP/SHSQL data is in whitespace-delimited ascii form,
which can be easily moved into other databases if necessary (convert spaces to tabs, and
convert embedded underscores to spaces).

#include space2
.LP
\fBAre there security issues involved when updating a database using a CGI-based system such as QUISP?\fR
.IP \0
Known security issues are discussed
#set FILE = "security.html"
#set TAG = "here."
#include link

#include space2
.LP
\fBCan QUISP be used with javascript, XML, or other client-side languages instead of, or embedded with, HTML?
.IP \0
Yes, QUISP markup can be used with any content.  The QUISP markup determines what content will be sent to the 
browser client.


#include space2
.LP
\fBHow can I get uniform font and background color on all my pages?\fR
.IP \0
All pages in a project can \fC#include\fR
a common header file.  This allows style, layout, etc. to be standardized
across all pages, and also facilitates usage logging, and setting of
"global" variables that are to be available to all pages.

#include space2
.LP
\fBHow can I set some variables that will be available to all pages?\fR
.IP \0
By having all pages include a common preliminary or header file.  Another way is to use \fCvarvalue\fR
in your config file.

#include space2
.LP
\fBHow can I keep a log of all web hits?\fR
.IP \0
There's no automatic logging feature, however you can easily write log
entries from your header file.  The
#set FILE = "io.html"
#set TAG = "#write"
#include link
manual page includes an example that does this.


#include space2
.LP
\fBI have some QUISP script code that needs to be shared by several different pages.
There doesn't seem to be a way to organize script code into procedures so that it can be
shared.
.IP \0
There is no provision for creating procedures containing QUISP script code (you can
write your own built-in functions in C, see below).
You can, however, use \fC#include\fR to share template code between pages, and pass parameters
by way of variables (which are always global).

#include space2
.LP
\fBI need some math functions that aren't listed in the QUISP functions manual page.\fR
.IP \0
You can add in your own "C" functions by modifying \fCcustom.c\fR and rebuilding.


#include space2
.LP
\fBWhat's the best way to work with dates?\fR
.IP \0
The most flexible and compact way to store dates is to convert user input to julian values
for storage, as done in the \fCpeople3\fR demo.  Another option is to use a date
notation that sorts naturally, such as \fCyyyy/mm/dd\fR.  QUISP includes a number of
#set FILE = "functions.html#dates"
#set TAG = "functions"
#include link
for working with dates.

#include space2
.LP
\fBHow can I set up user access control?  I want only certain users to be able to update data.\fR
.IP \0
With QUISP, all user access control is enforced by the page scripts (the middleware).
SHSQL does not use logins/password, although it does have the \fCIDENTITY\fR command
for setting user identity for purposes of record locking and transaction identification. 
#set FILE = "restricting.html"
#set TAG = "More discussion."
#include link


#include space2
.LP
\fBHow do I set up to do dynamic data displays and plots?\fR
.IP \0
Use \fBquisp_pl\fR, which is quisp with embedded ploticus graphics.  The
#set FILE = "graphic.html#setup"
#set TAG = "graphics man page"
#include link
describes the process.

#include space2
.LP
\fBWhy should I keep two separate QUISP versions, one graphics-enabled and one not?\fR
.IP \0
Mainly because the graphics-enabled executable is more than twice the size of the other,
so you may get faster performance by using the small standard one for pages that don't 
contain graphics.


#include bottom
