Updated May, 2007 - skip to downloads
This is the temporary home page for the PC Checkout System (until the author puts together something more substantial). The PC Checkout System is a group of programs designed to mange the checkout & usage of public access computers in a library (or similar) setting. It allows for varying types of stations, manages a reservation queue, and automatically logs patrons off when their time is up. Numerous options can be customized - even the display colors! If you've worked with Public Web Browser's INI file, you'll be able to configure the PC Checkout System to your liking.
Recommended configuration: It is recommended that your public computers be set up to log on automatically. The PC Checkout System is intended to be used in conjunction with security software and/or group policies / registry tweaks in order to secure your public computers and the sign-up system.
This software is currently being distributed as a test version, even though it has been in-use in a small but modern public library for over a year, because licensing issues are still being discussed. It is anticipated that the software will be available at a yearly site licensing fee of $25 or less. In the meantime, you may request a free trial license to determine if this software will work for your library, and if you think it will, your feedback may help to speed along the process.
To request a free trial license, or, if you have any problems or questions regarding the software, please email PCC@spragers.com and include your organization's contact information along with any other relevant information, such as a brief description of your computer setup (number of stations, types of computers, circulation system software, etc.).
(right-click and save as)
[Download] PC Checkout System documentation / user's guide (covers versions of all components up to version 3.07)This ZIP file includes all of the necessary files to run the PCC sign-up station, RCM remote management module, and Sentinel access controller on a test station, or to copy and set up these modules on other computer stations.
' 3.10b - added Tracker feature that displays, in a console window behind the main form, the Dump state
' - replaced all socket WriteLine calls that used string literals or ""+"" code to use a dummy string var instead
'
' 3.10 06/2007
' - reduced network response delays; reduced RCM and Sentinel scan cycle delay to .1 seconds;
' - patron interaction no longer blocks incoming RCM data, so staff can now view reserves, close /
' reboot / check-in stations / etc. / etc. while patrons are using the sign-up station WOOT!
' (finally realized that patrons can't affect result of incoming RCM or Sentinel messages just by
' checking out or placing a reserve)
' - voice announcement for stations going on hold is now made AFTER the Sentinel reconnects (great!)
' - "Hold Pending" status has now been properly implemented *
' - replaced two time remaining warnings with configurable 0-5 warning messages
' - added up to five optional and adjustable time-left warning message triggers (this replaces the
' previous non-adjustable "time's almost up" warnings, excluding the daily limit warning)
' - fixed(?) issue with Sentinels hanging PCC station: any pending Sentinel connection will cause
' Socket "IsReady" query to return true for ALL connections on that socket! PCC then tries to read
' incoming message and blocks because there's nothing there; Sentinels now send Dummy messages every
' 15 seconds, resulting in an average "worst case scenario" delay of 15 sec. / # of stations connected
' (in testing, observed hang-up followed by automatic clearing shortly therafter)
' - re-wording some time-related Sentinel messages so that they make more (accurate) sense
' - utilize CreateProcess API when doing the voice announce routine (code moved from LMADDON.BAS)
' - added NoKioskMode (Main) option that, when set to True, will display the main PCC scree in 800x600 mode
' with a minimizeable and sizeable border, and it will close (bypassing ShutDown) when closed
' - actually made use of ShutdownTimer option (only used in ShutDown SUB)
' 06/12/2007
' - fixing NoKioskMode and true minimize functionality (problems with NT and SetWindowLong)
' - fixed logic error where, when a patron claimed their reservation, a blank card number was sent to
' PutPatronOnStation, causing an error and aborting the checkout process, and consequently leaving the station
' in "on hold" mode until it timed out; caused by fix of PutPatronOnStation resetting current value of
' CardNumber$ when a station went on hold while someone was involved in the checkout process at the
' checkout station (noted, fixed 6/12/2007)
' - minor wording changes in LogUpdates
' - * fixed issue where Sentinel would stay at "Hold Pending" when PowerOff was not used between users
' - 06/27/2007: removed QTIMERs and replaced with a DO/SCAN/EVENTS/SLEEP/LOOP, seems to have eliminated the
' frivilous craches seen before the R&UG meeting on Tuesday
'
' 3.09 - added receipt printer option: if a receipt printer is available, patrons can now elect to have
' their station name and access code / reservation code print out for them at the time of
' checkout; also provided for a message file that, when not blank, will be added to the header
' of each receipt in order to publicize (library) events (text stored in CONTROL\RCTMSG.TXT)
' - added a new status _HOLDPENDING which indicates a station that has begun the 5-minute countdown,
' but is not yet ready for the next patron; should reduce confusion when "computer X is on hold
' for me but there's someone else sitting there!"
' - adding an external flag for use with RPL's "express email station" computers using XML calls (PWB only)
' - self-repair: added default values for CheckoutLimit and CheckoutExpire in case no value is specified
' - pseudo-web integration: a value is written to an external file, stored on a local web server, that indicates whether or not
' all of the in-service stations are are being used; if so, separately coded ASP web page allows or disallows access to webmail site list
' - request: added ReceiptBlankLines to act as line feeds at end of receipt (default is 0)
'
' 3.08 - re-adding Daily Limit option, which will bump patrons off if they've been on longer than the
' daily use limit, and new users sign up for a computer (reserve) (minimum 10 minute checkout)
' - fixed numerous bugs in lmaddon (WorkFlows version)
' - fixed resultant bugs in FReserveQWaitingTime SUB that ocurred when trying to check patron daily
' limit conditions without a card number having already been entered; fixed other logic errors
' - fixed more leftover bugs from replacing global "x" counter with local "xx" counters
' - added CatchUp call in check times to keep up with possible LiveMon keep-alive data
' - removed tracking feature, replaced with Dump array of sub/func states when block times-out
' - changed some message and button text and added hints for user-friendliness
' - added INI file options for main screen button text
' - fixed errors in several PowerOff calls that would reboot a computer even when logoff was specified
' - still need to re-evaluate reservation waiting time code
' - added RCM Scan fail-safes to handle bad station numbers
' - fixed (I think) daily time limit code...then it crashed
' - more message & test box tweaks, wording changes, etc.
' - added daily timer totals for statistical purposes
' - changed Reserve Code wording to Access Code to avoid confusing patrons
' - added a shut down loop to re-try poweroff on stations not currently connected
' - slight change to shutdown poweroff message text
' - tweaked shut down loop (logic error?)
' 3.07 - removed Live Monitor code from main program and put it in lmaddon.bas
' - fixed problem when checking cards for overdue status
' - changed the way the PIN form displays (order, flashing buttons when keys are pressed)
' - modified the display to fill the entire screen based on resolution, and to expand the
' available status grid area to proportionally fit the maximum number of computers
' (up to 42 stations at 1600x1280 resolution)
' - re-added option UseValidation: if set to False, FValCard will always return True
' - fixed bug when specifying /path option
' 3.06 - added time-up option of reboot (1) or logoff (2) (request)
' - replaced FYN call with a 2-button form in Place Reserve (scheduled reserve option) (request)
' - added a Patron Privacy option that does *not* record patron info w/ check-in/out (request)
' - fixed logic error where patrons were asked if they wanted to check out an Internet-only
' station, after their card had been found NOT validated
' 3.05 - added option to cache OK status cards to speed up checkout process, and to
' automatically remove invalid card numbers from the VALIDATE.DAT file
' - fixed leftovers (disable timers before running update)
' - added "hidden" RCM shut down & reboot features (mostly for debugging, also for updating)
' - added 20 second cleanup timer to end of ShutDown, program was ending with events pending
' and leaving the LiveMonitor station connected
' - added reconnect option to WeeklyCache routine, if LiveMon disconnects it will wait
' two minutes, then run SentinelScan again, then repeat, if it does this more than three times
' in a row, it will abort the WeeklyCache
' - added (then fixed) a daily checkout total for stat keeping
' - fixed logic bug in registry read section (changed to "<> False" instead of "= True")
' 3.04 - INI file is now a "real" INI file for easier configuration
' - program settings can now be read from the registry as well (duplicate of INI)
' - fixed potential bug in INI read function, now matches using UCASE
' - insurance: replaced Admin SUB SubTarget common variable names with unique names
' - I think I fixed the problem where the timer file was not getting updated at all
' - bug fix: all timers are now re-enabled if a block times out (incident where
' Sentinel Scan block timed-out, and timer was never re-enabled)
' - Voice Announce is temporarily disabled when calling CheckTimes from PlaceReserve
' so that it doesn't announce when the person is standing right there
' - daily limits are now only enforced at the time of checkout - they will not force a user off
' if their station is not overdue and/or there are no holds
' - changed order of forced Sentinel disconnects when rebooting a station to be put on hold
' - added force-close of Sentinel in AdminClearStation
' - added keep-alive sends in Sentinel Scan, once every 7 scans - first actual instance
' recorded on: 11/19/04 - station H recovered from a lost Sentinel connection!
' - changed voice-announce to still play chime sound even if voice announce is disabled
' - bug fix: GetPatronInfo caused invalid PIN message but didn't ask for PIN
' - bug fix: data types in Reserve set time routine caused no negative number triggers, went from
' 0 to 65535, also changed some wording in the PlaceReserve SUB
3.03 - added encrypted license and username information
- added banned user list, with matching updates to RCM
- added messages for patrons which display one time during checkout then are removed
along with matching updates to RCM
- fixed bug where [] parameter referenced [] without a field / record notation,
hanging the system when all stations were in use
3.02 - recompiling with patched RapidQ libraries that (supposedly) fix memory leaks
- modified card entry form to display target station during checkout
- added PowerOff port # to INI file
- added 24hr time conversion function to eliminate redundant code
3.01 - re-wrote reservation estimated waiting time routines (so that they actually work)
- changed Sentinel Scan routine so that even if the checkout station is busy, it will still accept
new connections, and send out initial status information
- fixed loop exit condition in [] (socket errors did not cause the loop to end)
- added redundant Sentinel status sends to catch stations that crash & don't
properly close the socket
- removed Sentinel quit commands for now, since the stations reboot automagically
- removed the redundant message sends from Sign-Up to Sentinel, caused 2 minute delay for
each minute that a Sentinel sat idle (oops)
- Sentinel connections are cleared when a station is rebooted without waiting for a
"disconnect" signal
- re-added delayed reboot when station is being put on hold (oops)
- modified PPOS routine to hopefully avoid future empty checkouts
- added multi-pass scanning in Sentinel scan sub to catch up on backlogged Sentinel status msg's
- fixed bug where overdue stations would not log off or reboot after sending finished command
- fixed bug where reserves with validated cards would not have Internet access after hold was filled
3.00 - major upgrades, hence the new version number
- replaced individual reserves with Reserve Q and a COMPLETELY redesigned reservation system:
- reservations can be placed by priority (reserves in the Q are sorted by the amount of time
a patron has already been on the computer today)
- reservation system gives patrons an estimate as to how long their wait will be
- reservations can be scheduled to take effect at a time later in the day
- patrons now claim their reservations at their station with the Sentinel program, instead of
having to come back to the sign-up station a second time
- RCM clients are updated when any station status change
- new network Live Monitor module
- duplicate Sentinel connections are ignored
- removed administrator button and related "SwitchAdminMode" functionality
- moved remote poweroff calls to be the responsibility of the sentinel program [later removed]
- added "hidden" remote option to un-authorize a card number
- colors!!!
- Live Monitor will now automatically try to reconnect every time a card is validated
- fixed an error with the Live Monitor Logic
- reserves can be scheduled to become active only after a certain time
- fixed numerous bad logic bugs
- other numerous and extensive tweaks and bug fixes
2.10 - completely reworking sign-up / client station interaction, no more FLG and CHK files
everything is done over the network with sockets & Sentinel clients (this update was
merged with 3.00 above)
2.01 - added a new blocker function; any function that wants to run without interruption
first calls the [] function; if the returned value is True, the other code runs,
and a block is set; if it returns false, the code is skipped
- renamed FDelChk to FLiveChk (makes more sense that way)
- bug fix: gave card, name, Y/N, and MsgBox forms a parent form so they stay on top
2.00 - incorporated add temp card, authorize new card, and reset timer into main checkout
program to avoid file access problems (RCM no longer writes to any files)
- changed remote control interface from flag files to direct network connection, allows
for multiple remote client connections
- changed the look a bit (no more green buttons on the main screen)
- added self-timer to name and number input routines, and added a custom yes/no entry
form, all of which will time-out automatically if the patron takes too long to
enter their information (60 seconds should be plenty?)
- bug checks: new version seems prone to "crashes" - i.e. patrons click on the SG,
but nothing happens - what's getting blocked? [fixed]
1.22 - added checkout module self blocker, so that if the checkout main routine has
already started, it can't be started a second time - hopefully, this will help
to eliminate the "quick-click" situation, when someone gets a happy mouse
trigger finger and tries to do too many things at once
1.21 - debugging: changed timers to not get disabled - instead, the various SUB's will
block each other - otherwise, certain timers were never running if their
timer limit was shorter than another one that turned it off
- added "EXPIRED" result to Live Monitor, and reworked remote Live Monitor script
to use a pseudo-INI file, since AutoIt can't write a variable to a file - but it
*can* write a value to an INI file... go figure!
- fixed a "hidden" bug in a call to []; it returns 0 if no other holds
are found, but the calling line was looking for a return value > 1 - so, if the
earliest hold found in the [] function was station #1, the calling
routine would count it as a return of False (oops)
- fixed bug in expired card test (MID$ lines were using wrong characters)
- changing logfile setup - will now open, seek to end, write, and close for every
entry, otherwise, the log file disappears on a hard reboot
- adding extra log entries for better reserve tracking
1.20 - added remote control module scanner that will automatically perform a number of
administrator functions without having to be at the sign-up station, entering a
password in front of spying eyes; supported remote actions include check-in,
extend time, clear, delete reserve, and close for service (this is being
considered by the author as a fairly important update, hence the move to 1.20,
even though the remote control module is a separate program)
1.11 - code change: to integrate PC Checkout with our new WorkFlows software,
the built-in Live Monitor routine has been replaced with a "retro" remote
Live Monitor script that will momentarily take over one of the desk stations,
cleverly determine a patron's account status, and report back to the sign-up
station (slightly intrusive, but it works) [no longer relevant]
1.10 - bug fix: daily use limit triggering shutdown without warning, added separate
indicator for daily limit warnings
- added additional log file entries for when messages are sent
- slight rewordings on Poweroff messages
1.09 - tweak: added MoveHold check to AdminDeleteReserve (when deleting a reserve
in Admin mode, other holds were not being moved to the open station)
- added log record for claiming a reservation (then fixed formatting)
- added condition for short shutdown timer if station is avaialable at closing
1.08 - Remote file station numbers are now read from the CONTROL file, remain static
so that stations can be removed without changing the PCNum.TXT local files
- minor bug fix (Instant Checkouts did not trigger Reservation counter)
- logic fix - re-set flag file if scan shows station is DONE < 10 minutes
1.07 - added Instant Checkout - if a patron reserves an overdue station, it gets
checked out to them immediately
- cleared system state data on clean startup
- bulked up TIMER.DAT file routines (cleaned up remote scripts as well)
1.06 - changed SaveSystemState triggers (reduced frequency)
- made log file entries clearer
- tweaked LiveMonitor time out settings
1.05 - making file opens more robust - if file open fails, skip file read -
this is needed to avoid failures like the one that occurred 10/31/03 -
the flag file for station D got frozen in use, and PC Checkout froze
internally when trying to reset the flag file for that station
1.04 - fixed bugs in [] (not recording new times) and in []
(not transferring WaitResCode - code lost if a hold was transferred)
and a glitch where the CHK files were deleted if the program recovered
from a crash / restart and a bug where LMConnectionLost was never
getting turned back off after a reconnect attempt
2.03 - added missing condition to the Live Monitor add-in: Previous ID [DRA version]
- reworded some of the status message boxes
- added extra condition to the Live Monitor add-in: card expired -
notifies user to update their account information at the front desk
- modifying Live Monitor time-out to (hopefully) lower DRA connection failure rate
1.02 - fixed code bug that failed to turn off LiveCheck if DRA connection failed
1.01 - adjusted the way PC Checkout scans the log file after a crash
- added additional FlagScan call after each user action (checkout or reserve)
- fixed phantom MsgBox problems (i.e. only half of a message displayed)
1.0a - first "official release" - all currently known bugs have been fixed
0.97b - incorporated LiveMonitor add-on into the PC Checkout program using QSockets
- LiveMonitor settings added to INI file (server address, username & password)
- fixed bugs regarding orders of operation with system state backup
- fixed major "mystery bug" that disabled CONST settings (don't remember how)
- added automatic archiving of log files
0.96b - replaced MessageBox() with custom MsgBox(A,B,C) function for message dialogs
that displays message A with caption B and closes after C seconds
0.95b - bug fixes (invalid card checks, hold card not transferring to checkout)
- fixed minor bugs in time formatting routines (fixed in "M" version ONLY)
0.94b - converting to use 2-digit access codes and reservation confirmation codes
note: further updates will only apply to the access code version
0.93b - bug-checking and testing for staff evaluation
- added extra admin function, did some bug fixing
- fixed major issues with CheckTimes sub
0.92b - added system-state data backup functionality (crash-recovery)
0.91b - added warning messages five minutes before timers expire
- added policy display before checkout
0.9b - adding a few "special situation" handler routines and more debugging
0.8b - major testing & debugging stage
0.7b - converting to GUI format using Rapid-Q (this took a long time! really!)
0.6 - this and previous versions were written in QBASIC