How I have joined …

How I have joined HMG Family – A Story

It was in the year 1990, I had seen a computer, first time in my life.

I was a commerce student, studying in a 100+ years old school in my home town Sivakasi (famous for fireworks ), Tamilnadu, Southern part of India. I was studying +2 (12th and final year in school). Once, the exams were over, it was time to join a College. Not to waste the exam holidays, one of my friends had asked me to accompany him for a part time computer course in a near by Polytechnic College. I told him, “Ok”. We joined that course which was for six months, conducted on Saturdays and Sundays. I studied some basics about computers and languages like BASIC, Pascal, COBOL and an introduction to Lotus 1-2-3, Wordstar and dBase III Plus.

After that I had joined a college and my main subject was Commerce. After finishing my Under Graduation degree in the year 1993, I had joined Chartered Accountancy Course. And, once I had finished this course in the year 1996, I joined my brother to manage our family business.

Even though there was a computer in our office, I was not allowed to touch that.  The reason was, at that time, computers (AT 386) were costlier and one cannot take the risk of losing precious data and computers were operated only by computer professionals.

In the year 1997, I had purchased a computer on my own, and started implementing something which I had studied some seven years back.

I had studied under the DOS environment and I had got Windows ’95 in my new system as my operating environment. Even though it was easy to operate, I could not do any programming. I had so much of works before hand and I was involved in them for about 1 year. It was a Costing project in Excel with about 150 sheets, everything interlinked. It was a nice experience. I had done some macro programming in Excel for introducing thousand’s comma according to Indian tradition.

In the year 1998, the computer professional who had programmed for the accounting, invoice processing and payroll processing for our business firm had gone for a better job. We could not create new reports according to the requirements and we had to play only with the old options. Only at that time, I had realized about the importance of Database programming. Having the knowledge of DBase III+ programming, I had started to write small utilities to take self configured reports from the existing tables. I had the reference of the source codes for the existing software. It was done in Clipper Summer ’87 version.

There is a saying, ‘Necessity is the mother of invention’. Yes. Necessity had driven me to do more and more programming. Actually, I had started staring huge prg files with various do while .not. eof() loops and virtually indefinite nested if … endif conditions. Once understood, I had the confidence of creating bigger software too. So, in addition to the accounting software, I had created order processing and inventory maintenance and integrated the same with the existing project.

It was in the mid, 1998, I could get an internet connection with a dial up modem. In the mean time, I had a dream of using GUI in my programming. I had tried Visual Basic. I could not link with my existing dbf tables and dropped. In the beginning, I misunderstood about OOPS and GUI. Actually I had an allergy over this OOPS, I don’t know why even now.  So, I had abandoned my dream  of GUI because of OOPS.

In the year 1999, while searching the net, I had come across a site called Oasis, a site which had shared source code/libraries for Clipper and many utilities. From that site, I had got an excellent library called Super. It had some assembly language routines too to capture mouse gestures and enabled Clipper code to be ‘RAT’ified. Apart from this mouse functionality, the library had so many small utilities like sorting multiple arrays, finding out Day of the week like that. Actually I had realized about the advantages of Open Source on seeing that library source codes. I had studied in depth, and I had known about optimization of codes, effective memory management, different routes to a same destination in programming etc.

With the SuperLib, I had changed all my projects to be mouse enabled, there by satisfying half of my dreams. However, I could not stop dreaming about creating a full fledged Windows program eliminating the dark DOS command box. As new versions of Windows came in the market, I was afraid that, one day there won’t be this DOS Command Box and all my programs would not be useful at all.

I was, why was? even now am, very fond of Open Source. In my system I don’t use any copyright protected software except the Windows Operating System. I would list all the open source software I use in a separate thread for all my requirements.

I had found out Harbour from the Oasis site I had already mentioned. I had tested a lot but could not use it because of SuperLib, as it could not be linked with Harbour.

I was in a confused state. I liked Harbour a lot because of its open nature. I could not abandon SuperLib too, since all of my projects were linked with this library. So, I was desperately searching for a GUI library (at least mouse enabled for Harbour).

On one fine day in my life, my search was fruitful.

I could even remember the date. It was 4th of October, 2002, I had downloaded Harbour MiniGUI and could create a window with my limited xBase programming knowledge. Hurray! I could not describe my feelings in words!

Immediately on compiling my hello world prg, I had commented in the yahoo group from where I had downloaded the 0.40 version of the library with the following words,

Dear Roberto,

It is wonderful to use your Harbour Minigui Library, an open
source library for Harbour.

Thank you very much for your sincere efforts.

I would like to make a small suggestion regarding text boxes.

Shall you please make provision for right aligning the text boxes
for numeric fields?

Thank you once again.

srgiri

From that day, Harbour MiniGUI page was literally my home page.  I read all the messages from various users of the library. It helped me a lot to understand programming, inside out of the library, even about calling C API.

I had happily started to convert all of my projects to HMG. As the product matured, all my projects were fully converted to HMG and I had seen my dream come true.

Most of my programs are used in-house. However, I had created software for many of my friends. I had earned some money from my programs too. As you know, my income is not based on programming, since basically I am a Chartered Accountant and managing business.

I wish to list some of my major HMG projects,

  1. PyroERP (an ERP software for manufacturing companies with accounting, inventory, order processing,payroll)
  2. PyroBase (a License maintenance software given to Explosives department, Government of India)
  3. FACE (Financial Accounting under Computer Environment)
  4. Interest(ing) Calculator (Calculate interesting part of interest for loans and deposits) – An open source product, hosted in Sourceforge.net.
  5. FBT Reference (Fringe Benefit Tax referencer)
  6. Phataka (A Cultural Event maintenance software used by local Rotary Club)
  7. DBU
  8. GSM Calculator

There are many tiny projects too. I am not listing them to show my talents. It shows the simplicity of HMG and my craze on HMG.

It is my nature, to escape from any politics. I wish to be good for all. During July 2005, when Roberto had decided to move on MingW and introduced HMG, MiniGUI Extended product had also born. I didn’t tell a word about anything in the group. I believe in Karma and thought, “if this happens, this is also for the good”.

I had actively participated in the yahoo group up to April, 2006 and kept silence after that.

However, I used HMG in a full fledged manner and I liked MingW version as Roberto distributed them. This is mainly because of the single installation of the whole thing (ie., MiniGUI library + Harbour Compiler + C Compiler) and full utilization of Open Source Software.

All the software projects listed above where developed by me during the period from 2004 till now. I too had contributed some parts like drawing pie graph, alternative syntax (with the valuable guidance of Roberto) (now Roberto had revamped in a better way!), Grid2Print which Roberto has accepted kindly.

Can you believe that this forum had been created in just 2 days time? On 29th of July 2008, I had asked Roberto, breaking my long silence, by an email about the need for a forum exclusively for HMG. Roberto also liked and generously accepted to guide and participate in the forum. On that day itself, I registered this domain hmgforum.com and installed PHPBB forum software and on 1st of August 2008, the forum was officially opened.

I am so HAPPY and PROUD to be part of the HMG family.

Thus, this story has a happy ending.

Sri Rathinagiri
Sivakasi, India

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Courtesy of author, this article borrowed from here.

SP Array Functions

 ASORTMULTR()   Sort multiple arrays based on sort of primary array
                (descending)
 ASORTMULT()    Sort multiple arrays based on sort of primary array
 ASTDDEV()      Determines the standard deviation of an array with
                optional conditional set
 ASUM()         Determines the sum of an array with optional
                conditional set
 AMSUM()        Sum on a given element of multi-dim array
 ARRAY2DBF()    Replaces the current record with the values in an array
 AMVARIANCE()   Variance on a given element of multi-dim array
 AMSTDDEV()     Standard Deviation on a given element of multi-dim array
 DELARRAY()     Deletes all elements of an array
 DBF2ARRAY()    Returns an array of values for the current record
 FILLARR()      Fill type, length, decimal arrays
 AUPDATED()     Determines if an array contains updated values for the
                current record
 AVARIANCE()    Determines the variance of an array with optional
                conditional set
 BLDARR()       Builds an array from a delimited string
 BIGELEM()      Returns length of longest string in an array
 A2TOSING()     Copies a given element from an array of arrays
 AFTYPESX()     Returns an array of field types for current dbf
 AFLENSX()      Returns an array of field LENGTHS for current dbf
 AKOUNT()       Counts exact matches of value in array
 AASKIP()       Use for skipblock for arrays in Tbrowse
 AFDECIX()      Returns an array of field DECIMALS for current dbf
 AFIELDSX()     Returns an array of field names for current dbf
 AEXTRACT()     Extract and return a conditional set from an array
 AFIELDSTYPE()  Returns an array of field names of particular type
 AMATCHES()     Counts the matches of an array with optional
                conditional set
 AAVERAGE()     Determines the average of an array with optional
                conditional set
 AMAVERAGE()    Average on a given element of multi-dim array
 ALENG()        Actual length of an array, less trailing nil elements

Superlib Read Me

This is the final released version of SuperLib.

It includes a library for Clipper 5.2d, complete source code,  Norton Guides, examples and an .RMK file.

The author no longer does any Clipper work of any kind, and hopes to stop recieving calls and e-mail from people wanting to purchase  Superlib.

This file may be redistributed to FTPs or other archives as long as this README.TXT file is included. Files included:

README.TXT : This file
LIB52.ZIP : Clipper 5.2 compiled .LIB file
SOURCE.ZIP : All the source code
SAMPLES.ZIP : Source and data files for all of the example programs
NG.ZIP : Norton Guides help file
SUP52.RMK : Rmake file for 5.2. You will almost certainly need to modify it

This product is now free, but still copyrighted by Garry A Prefontaine.

You may not charge for any part of this software.

You may use it without charge as long as you:

1. DOWNLOAD IT ON YOUR OWN DIME

2. DO NOT EXPECT ANY TECHNICAL SUPPORT OF ANY KIND

3. DO NOT EXPECT ANY UPGRADES OF ANY KIND (i.e. to 5.3 or VO)

4. AGREE TO THE FOLLOWING TERMS:

SuperLib is provided on an “AS IS” basis, with no implied warranty regarding merchantability or fitness for any particular purpose. Functional Software Inc. and the author Garry A Prefontaine, make no representations or warranties with respect to the contents hereof, and specifically disclaim any implied warranties. By using this software you agree that Functional Software Inc. and the author Garry A Prefontaine, will not be liable to you or any third party for any use of (or inability to use) this software, or for any damages (direct or indirect) whatsoever, even Functional Software Inc or the author Garry A Prefontaine, are apprised of the possibility of such damages occurring. In no event shall Functional Software Inc or the author Garry A Prefontaine be liable for any loss of profit or any other commercial damage, including but not limited to special,
incidental, consequential or other damages. The entire risk related to the quality and performance of the program is on you.
 

What is Superlib ?

Superlib Description by Oasis 

The final version of SuperLib, and now it’s FREEWARE, and it comes with 100% SOURCE CODE and extensive norton guide.

SuperLib is a library of functions for Clipper 5.x.

What makes SuperLib different than other libraries on the marketplace is that is contains a large collection of METAFUNCTIONS. A metafunction is like a pre-packaged mini application, ready to link and run. For instance, SuperLib’s report writer is as simple to use as:

USE
REPORTER()

All of the metafunctions are menu-driven and ready to use without modifications. All SuperLib functions are data independant. All that is required is an open DBF file. SuperLib will determine the field structure and use the current DBF. SuperLib requires no special setup or way of doing things. It works with you, not against you. SuperLib functions will do their best to save/restore all settings as they found them. (such as colors, cursor, screens, etc.)

There are over 300 functions in SuperLib, ranging from the metafunctions down to the granular common component functions such as events and popups. (see the function list below, or the .NG file). This version of SuperLib is 100% mouse aware! All SuperLib functions
are automatically aware of the mouse and respond to the mouse.

SuperLib even contains replacements for Clipper’s READ, MENU TO, ACHOICE and MEMOEDIT functions that are mouse aware. Several functions are provided to help you build mouse awareness into your own functions.

SuperLib is Blinker 3.x, 4.x and Exospace compatible for protected mode programs. SuperLib is 99.9 % pure Clipper code, and uses no Clipper internals, which makes for painless upgrading to future versions of Clipper and the various linkers.

SuperLib is network ready, with all locking already built in. (works fine for single-user too)

There is no registration of SuperLib, since it is now freeware. The author, Gary Prefontaine, is no longer supporting the product. If you need help with this library, please ask on comp.lang.clipper

Thanks, Gary.

http://www.the-oasis.net/files/library/supfree.zip

http://www.the-oasis.net/supfree.htm

SP Functions


A2TOSING()       Copies a given element from an array of arrays
AASKIP()         Use for skipblock for arrays in Tbrowse
AAVERAGE()       Determines average of an array with condition
ABORT()          Pops up dialog box asking: Abort  Don't Abort
ADDSPACE()       Pads right of string with spaces
AEXTRACT()       Extract and return a conditional set from an array
AFDECIX()        Returns an array of field DECIMALS for current dbf
AFIELDSTYPE()    Returns an array of field names of particular type
AFIELDSX()       Returns an array of field names for current dbf
AFLENSX()        Returns an array of field LENGTHS for current dbf
AFTYPESX()       Returns an array of field types for current dbf
AKOUNT()         Counts exact matches of value in array
ALENG()          Actual length of an array, less trailing nil elements
ALLBUT()         Returns all but last x characters
AMATCHES()       Counts the matches of an array with condition
AMAVERAGE()      Average on a given element of multi-dim array
AMSG()           Pop up message box for an array of messages
AMSTDDEV()       Standard Deviation on a given element of
AMSUM()          Sum on a given element of multi-dim array
AMVARIANCE()     Variance on a given element of multi-dim array
APPENDIT()       Intelligent APPEND FROM replacement
ARRANGE()        Rearranges text in a string
ARRAY2DBF()      Replaces current record with values in an array
ASCIITABLE()     Pops up an ASCII table for character selection
ASORTMULT()      Sort multiple arrays on order of single array
ASORTMULTR()     Reverse sort multiple arrays on order of single array
ASTDDEV()        Standard deviation of an array with condition
ASUM()           Determines the sum of an array with condition
AT2CHAR()        Returns the String color equivalent of a color number
ATT()            Colors a section of the screen, leaving the text intact
AUPDATED()       Determines if array contains updated values for record
AVARIANCE()      Determines the variance of an array with condition
BEGEND()         Determines beginning or end of week,month or quarter
BIGELEM()        Returns length of longest string in an array
BLANKFIELD()     Returns a blank value corresponding to a field
BLANKREC()       Blanks out a record
BLDARR()         Builds an array from a delimited string
BLDDBF()         Create a DBF from a delimited string or an array
BLDNDX()         Interactively create a new index
BOM()            Calculates beginning of the month date
BOYEAR()         Determine beginning of year a date falls in
BROWSE2D()       Popup  tbrowse of 2 dimension array (array of arrays)
BROWSEDELIM()    Tbrowse a delimited file
BROWSESDF()      Tbrowse an SDF file
BUILDEX()        Interactively builds and returns an expression string
BUNGDROP()       Causes dropdown during BUNGEE() menu def sequence
BUNGEE()         Mouseable, multi-level dropdown menu with triggers
BUNGEEQUIT()     BUNGEEQUIT( ) is how a Bungee menu is terminated. You would normally
BUNGEETOP()      Sends the current menu back to the top level box (not all
BUNGEND()        Ends a BUNGEE() menu array definition sequence
BUNGOPTION()     Adds option during a BUNGEE() menu definition sequence
BUNGREDRAW()     Redraws the current menu, with optional change of colors
BUNGSTART()      Starts a BUNGEE() menu array definition sequence
BUNGUNDROP()     Ends dropdown during BUNGEE() menu def sequence
BXX()            Draws a box on the screen of a given color
CALCKCLR()       Clears hot keys set by CALCKSET()
CALCKSET()       Allows use of GETCALC() calculator in GETS
CALCVALID()      Uses GETCALC() calculator function as a GET VALID
CALCWHEN()       Uses GETCALC() calculator function as a GET WHEN
CALENDKCLR()     Clears hot keys set up by CALENDKSET()
CALENDKSET()     Allows use of GETDATE() calendar in GETS
CALENDVALID()    Uses GETDATE() popup calendar function as a GET
CALENDWHEN()     Uses GETDATE() function as a GET WHEN clause
CENTR()          Centers a string in x spaces
CDIR()           Change Directory
CLABEL()         Menu driven module for label management
CLS()            Clear the screen with optional color,character
COLPIK()         Allows selection of colors from a list
COPYFIELDS()     Copies selected fields of selected records to new dbf
COPYITOUT()      Copies records to a new DBF
CRUNCH()         Moves spaces in a string to end of string
CTRLW()          Sends chr(23) (Control-W) to the keyboard
CURD()           Return current drive letter
DATECALC()       Adds/subtracts days,weeks,months,years to a date
DAYSIN()         Calculates number of days in a month
DBF2ARRAY()      Returns an array of values for the current record
DBSTATS()        Statistical report on dbf, including
DELARRAY()       Deletes all elements of an array
DELREC()         Dialog box to delete/undelete current record
DOYEAR()         Calculates day of the year from date
DTDIFF()         Returns difference between dates
DTOW()           Converts date to words
DUPHANDLE()      Duplicate record finder with delete/copy options
DUPLOOK()        Locates possible duplicates based on user criteria
EDITDB()         Customized database browser with edit/add/search
EDITMEMO()       Performs a windowed memoedit() on a memo field
EDITMEMOV()      Performs a windowed memoedit() on a string
ED_G_PIC()       Returns appropriate picture for getting a field
ENDSWITH()       Determines if a string ends with another string
ENHANCED()       Returns color integer for ENHANCED setting
EVALQ()          Evaluates a logical condition in a string
EXPBLOCK()       Returns a codeblock to evaluate an expresson
FADEAWAY()       Fades screen away , alternative to restscreen()
FASTFORM()       Prints a selected formletter for current record
FIELDDECX()      Returns decimals of field
FIELDLENX()      Returns length of field
FIELDPOSX()      Returns position of field named in expression
FIELDTYPEX()     Returns type of field
FILEINFO()       Returns file date,time,size
FILEREAD()       Lists a text file of unlimited size
FILLARR()        Fill type, length, decimal arrays
FMOVE2NEXT()     Move to beginning of next line in a text file
FMOVE2PRIOR()    Moves to beginning of previous CRLF delimited
FORMLETR()       Interactive formletter and mailmerge utility
FORMULATE()      Builds a free-form formula or User Defined Field
FREQANAL()       Performs a frequency analysis on a DBF
FULLDIR()        Interactively navigate directories
GENED()          Generic dbf editing screen
GENREADER()      Creates specialized user defined get reader block
GENVAL()         Generic VALID clause validation with message
GETAKEY()        Gets intent of last keystroke
GETCALC()        Pops up a quick 'solar' calculator
GETDATE()        Point and shoot calendar
GETDFP()         Gets SET DEFAULT path
GETJUMP2()       Determines if mouse clicked on a get
GLOBREP()        Performs global selective replace of a field
HARDCOPY()       Prints current record or memo fields to printer
HELP()           Provides context sensitive popup help
HELPMOD()        Interactively build and modify help screens
IFMOUSEHD()      Checks if mouse held down,evals codeblock while it is
INITSUP()        Sets SuperLib system interface vars for MONO or COLOR
ISBLANKREC()     Determines if a record is blank
ISFIELD()        Determines if an expression is the name of a field
ISINLOOK()       Checks for existence of a value in a lookup dbf
ISLOADED()       Determines  function is loaded or not
ISMOUSEAT()      Checks for mouse click within passed coordinates
ISNOTDUP()       Checks for a duplicate field
ISPART()         Determines if a value is part of a set 
ISPRN()          Detects printer ready (or not) on LPT1, 2 or 3
ISTHISAREA()     Determines if expression is the name of a field
ISVALFILE()      Checks a file name for validity
KBDESC()         Keyboards character 27 (escape) when key pressed
LISTER()         Build, format,print SIMPLE lists to
LJUST()          Left justifies a string
MAKEBOX()        Draws a box on the screen and returns saved screen
MBRZCLICK()      Checks for mouse click on current Tbrowse row/col
MBRZMOVE()       Checks for mouse click at and moves to Tbrowse row/col
MCHOICE()        Does a boxed, achoice() style popup on an array
MENU_V()         Vertical popup menu from variable # parameters
MESSYN()         Popup YesNo prompt box
MFIELDS()        Pops up a selection box for current dbf fields
MFIELDSTYPE()    Pops up a list of fields of given type(s)
MODIFY()         Create or modify DBF structures
MOUSEHOTAT()     Checks for mouse click from array of hot coordinates
MSG()            Displays up to a 9 line message in a window
MULTIMSGYN()     Multi-line popup message - yes -no
NBR2STR()        Correctly orders numerics where negative
NKEY()           Gets key of an index file
NOZDIV()         Prevents divide-by-zero
OLD()            On Line Documentation - TOPIC oriented help system
ONE_READ()       Pop-up window with 1-4 Say/Get combinations
OPENIND()        Opens an array of indexes
PARSALIAS()      Extracts the name of the alias from an expression
PARSFIELD()      Extracts the name of the field from an expression
PICKNDX()        Allows user to select indexes to open
PICKREADER()     Creates specialized picklist reader block
PLSWAIT()        Pops up a 'Please Wait' window or removes it
PMREADER()       Creates specialized PLUS/MINUS get reader block
POPCOLSEL()      Popup color grid for selecting a single color
POPEX()          Pops up an achoice for a certain filespec
POPMONTH()       Popup month selection
POPREAD()        Pops up a box with 1-5 say-get combinations
POPUPDIR()       Popup of a given directory for file selection
POPUPKCLR()      Clears GET hotkey popups set up with POPUPKSET()
POPUPKSET()      Set a popup for hotkey access from a GET
POPUPVALID()     Allows use of a popup for a GET VALID clause
POPUPWHEN()      Allows use of a popup for a GET WHEN clause
POPVDATE()       Pops up a picklist of virtual dates
POPVYEAR()       Pops up a picklist of virtual years
PRNPORT()        Determine Printer Port to use
PRNT()           Writes a string of a given color at row, column
PRNTFRML()       Prints a formletter created by formletr()
PROGCOUNT()      Perform a count with a progress box
PROGDISP()       Displays progress bar in box created with PROGON()
PROGEVAL()       Perform a Database DBEVAL() with a progress box
PROGINDEX()      Perform an index with a progress box
PROGOFF()        Removes a progress bar box created by PROGON()
PROGON()         Initialize and display a progress bar box
PROPER()         Capitalizes first letters of string, lowers rest
PSTABMENU()      Popup tabular (grid style) )menu
PULLDN()         Pulldown menu creator, handler
PURGEM()         Deletes records
P_RDYDELAY()     Sets/returns p_ready() 'seconds' variable
P_READY()        Determines if printer is ready, prompts user
QFLDSTYPE()      Count # of fields of a given type or types
QUERY()          Popup Interactive query by example condition
QUIKREPORT()     Runtime pre-defined report printing module
RAT_AREA()       Limits the mouse to a rectangular area of the screen
RAT_COL()        Current mouse column
RAT_COLL()       Returns mouse column at the last left button press
RAT_COLR()       Returns mouse column at the last right button press 
RAT_ELBHD()      Determines if left mouse button is held down
RAT_EXIST()      Determines if a mouse is available
RAT_FORCE()      This forces a mouse present status, regardless
RAT_LBHD()       Determines if the mouse left button is currently depressed
RAT_LEFTB()      Determines if the left mouse button has been pressed
RAT_NOMOUSE()    This forces a no mouse status, regardless
RAT_OFF()        Sets the mouse cursor off
RAT_ON()         Sets the mouse cursor on
RAT_POSIT()      Positions the mouse cursor at row,column
RAT_RBHD()       Determines if the mouse right button is currently depressed
RAT_RESET()      Resets the mouse to its default values
RAT_RIGHTB()     Determines if the right mouse button has been pressed
RAT_ROW()        Current mouse row
RAT_ROWL()       Returns mouse row at the last left button press
RAT_ROWR()       Returns mouse row at the last right button press

RAT_EQMCOL() Returns mouse column at last press 

RAT_EQMROW()     Returns mouse row at last press 
RAT_ERBHD()      Determines if right mouse button is held down 
RAT_EVENT()      Event handler - inkey() with mouse awareness 
RAT_ISMOUSE()    Determines mouse usage by RAT_EVENT() 
RAT_LASTEV()     Returns the last event recorded by RAT_EVENT() 
RAT_MENU2()      Mouseable MENU TO emulation 
RAT_READ()       Mouseable read 
REPORTER()       Create, modify, execute reports 
RESTSETKEYS()    Restores set keys saved with SAVESETKEYS() 
RJUST()          Right justifies a string RRJUMP2() Jump to a new get in a RAT_READ() 
RRLASTKEY()      Retrieve the last key handled by ratapplykey() 
R_ISRATREAD()    Determines if RAT_READ() is current get system 
S1LABEL()        Prints a single label 
SACHOICE()       Achoice replacement, uses TBROWSE, codeblock 
SADD_REC()       Attempts to append a blank record 
SAPPOINT()       Appointments manager - uses popup calendar. 
SATTCOLOR()      Sets up color vars for color monitor 
SATTDIRECT()     Sets up the the color vars directly 
SATTGET()        Sets up SuperLib color vars from COLORS.DBF 
SATTGETMEM()     Sets up SuperLib color vars from old COLORS.MEM 
SATTMONO()       Sets up color vars for mono monitor 
SATTPICK()       Sets up SuperLib color vars by selecting from DBF 
SATTPICKDEL()    Picklist deletion of stored color var sets 
SATTPICKPUT()    Stores SuperLib color vars to selected record 
SATTPOP()        Pops previously pushed SuperLib color vars 
SATTPUSH()       Pushes the current SuperLib color vars 
SATTPUT()        Stores current SuperLib color vars to COLORS.DBF 
SAVESETKEYS()    Saves active set keys to an array 
SBCENTER()       Centers box coordinates 
SBCOLS()         Determine number of columns in a box 
SBREADER()       Creates specialized spacebar spinner get reader 
SBROWS()         Determine number of rows in a box 
SBSHADOW()       Draw a shadow around a box 
SBUNSHADOW()     Removes shadow drawn with SBSHADOW() 
SCMOD()          Maintains scroller.dbf - see scroller() 
SCONVDELIM()     Convert a delimited file to a DBF 
SCROLLER()       Hotkey lookup tables with dbf storage 
SEARCHME()       Search a DBF with user-specified criteria 
SEARCHMFND()     Set/return last found() status from SEARCHME() 
SEARCHMRS()      Resets all SEARCHME() settings 
SETCENT()        Determines if century is on/off 
SETCOLORS()      Interactive color setting interface 
SETEXACT()       Determines if exact is on/off 
SET_DATE()       Sets and restores date format 
SEXPORT()        Export DBF to delimited or SDF files 
SFIL_LOCK()      Attempts to lock a file 
SFREADLINE()     Reads in text up to the next CRLF in a text file 
SFRR_HCODE()     Output report definition to .PRG code 
SGETMANY()       Virtual (scrolling) gets in a popup box 
SHIFTY()         Determines shift key settings
SLOTUSMENU()     1-2-3 style menu 
SLSF_APPT()      Sets and retrieves the file name and path for the 
                 SAPPOINT() DBF files 
SLSF_COLOR()     Sets and retrieves the file name and path for the 
                 COLOR SET DBF file 
SLSF_FORM()      Sets and retrieves the file name and path for the 
                 FORMLETR() DBF file 
SLSF_HELP()      Sets and retrieves the file name and path for the 
                 HELP() DBF file 
SLSF_LABEL()     Sets and retrieves the file name and path for the 
                 LISTER() DBF file 
SLSF_LIST()      Sets and retrieves the file name and path for the 
                 LISTER() DBF file 
SLSF_OLD()       Sets and retrieves the file name and path for the 
                 OLD() help files 
SLSF_QUERY()     Sets and retrieves the file name and path for the 
                 QUERY() DBF file 
SLSF_REPORT()    Sets and retrieves the file name and path for the 
                 REPORTER() DBF file 
SLSF_SCROLL()    Sets and retrieves the file name and path for the 
                 SCROLLER() DBF file 
SLSF_TODO()      Sets and retrieves the file name and path for the 
                 TODOLIST() DBF files 
SLS_BQUERY()     Sets SuperLib global query block 
SLS_BQZAP()      Resets SuperLib's global query block 
SLS_FRAME()      A Superlib box setting function 
SLS_ISCOLOR()    Tells SuperLib if this is a color monitor 
SLS_NORMCOL()    A Superlib color setting function 
SLS_NORMMENU()   A Superlib color setting function 
SLS_POPCOL()     A Superlib color setting function 
SLS_POPMENU()    A Superlib menu setting function 
SLS_PRN()        A Superlib printer setting function 
SLS_PRNC()       A Superlib printer setting function 
SLS_QUERY()      Sets SuperLib global query string 
SLS_SHADATT()    A Superlib color setting function 
SLS_SHADPOS()    A Superlib color setting function 
SLS_XPLODE()     A Superlib box setting function 
SL_BOLD()        Sets font stroke weight to BOLD (ultra black) 
SL_BOX()         Draws a box line from row,col to endrow,endcol 
SL_COPIES()      Sets the laserjet to print n copies of each page 
SL_DOWNROW()     Move the printer cursor up/down by # rows, 
SL_EJECT()       Ejects the current page 
SL_FILL()        Fills a rectangle with shading or a pattern. 
SL_GOTO()        Move the printer cursor to row/col 
SL_HLINE()       Draws a horizontal line from row,col to row,endcol 
SL_ITALIC()      Sets font style to italic 
SL_ITALICOFF()   Sets font style to upright (non italic) 
SL_LANDS()       Sets laserjet orientation to LANDSCAPE 
SL_LEFTMARG()    Sets the left margin to the left edge of the 
SL_NORMAL()      Sets font stroke weight to NORMAL (non bold) 
SL_OVERCOL()     Move the printer cursor right/left # columns 
SL_PAGESIZE()    Sets the page size on the laserjet 
SL_POPCURS()     Pops the printer cursor position for later popping 
SL_PORT()        Sets the laserjet orientation to PORTRAIT 
SL_PUSHCURS()    Pushes the printer cursor position for later 
SL_RESET()       Resets the printer to user defaults 
SL_RIGHTMARG()   Sets the right margin to the right edge of the 
SL_SETCPI()      Sets characters per inch 
SL_SETLPI()      Sets the lines per inch for the laserjet 
SL_TOPMARG()     Designates the number of lines of top margin 
SL_UNDER()       Sets automatic text underlining on 
SL_UNDEROFF()    Sets automatic text underlining off 
SL_VLINE()       Draws a vertical line from row,col to endrow,col 
SL_WRAP()        Sets line wrapping on or off 
SMAILMERGE()     Creates mailmerge files for WordPerfect & MS Word 
SMALLKCLR()      Clears get lookup combinations set up with SMALLKSET() 
SMALLKSET()      Sets up GET-HOTKEY lookup combinations using smalls() 
SMALLS()         Lookup tables on dbf with optional hotkeys, code block 
SMALLVALID()     Uses SMALLS() lookups in a VALID condition for a GET 
SMALLWHEN()      Uses SMALLS() in a WHEN condition for a GET 
SNET_USE()       Attempts to open a DBF 
SPOPORDER()      Popup allows user to change viewing (index) order 
SPOPSEEK()       Popup seek based on present index keys 
SREC_LOCK()      Attempts to lock a record 
SS_CLOSEH()      Restores screen in a horizontal close fashion. 
SS_CLOSEV()      Restores screen in a vertical close fashion. 
SS_FADE()        Restores screen in a fadeaway fashion. 
SS_FALL()        Restores screen in a fall from top fashion. 
SS_FOLD()        Restores screen in a fold to middle fashion. 
SS_HBLINDS()     Restores screen in a horizontal blind fashion. 
SS_IMPLODE()     Restores screen in an imploding fashion. 
SS_RISE()        Restores screen in a rise from bottom fashion. 
SS_SLICE()       Restores screen in a slicing fashion. Alternative 
SS_SLIDELEFT()   Restores screen in a slide left fashion. 
SS_SPLIT()       Restores screen in a split from middle fashion. 
SS_VBLINDS()     Restores screen in a vertical blind fashion. 
SS_WIPEH()       Restores screen in a wipe from left fashion. 
SS_WIPEV()       Restores screen in a wipe from top fashion. 
STABMENU()       Tabular (grid style) menu 
STAGFIELDS()     Tag fields 
STANDARD()       Returns color integer for standard setting 
STARTSW()        Determines if a string starts with another string 
STOD()           Returns date from string in the form YYYYMMDD 
STRETCH()        Imbeds characters in a string 
STRIP_PATH()     Strip path and optionally extension from a 
STRPULL()        Extract text between 2 characters in a string 
SUBPLUS()        Returns multiple substrings 
SUM_AVE()        Interactive sum or average on a dbf field 
TAGARRAY()       Tag selected elements of an array 
TAGIT()          Tag records in a dbf for later action 
TAGMARRAY()      Tag elements in muti-dimensioned array 
TAKEOUT()        Extract a portion of a string between delimiters
TIMEPER()        Time Period (date sensitive) DBF analysis 
TODOLIST()       Simple todo list manager 
TRUEVAL()        Returns val of ALL numerics in a string 
UNBOX()          Removes a box created by makebox() 
UNIQFNAME()      Creates a unique file name 
UNSELECTED()     Returns color integer for UNSELECTED setting 
VAR2CHAR()       Converts any type variable to character type 
VARLEN()         Returns length of a variable of any type 
VERTVIEW()       Pops up a vertical view of the current record 
VIEWMEMOS()      Popup viewing (non-edit mode) of memos 
VIEWPORT()       Multi-optional data entry engine 
WGT_MEAS()       A Weights and Measures conversion metafunction 
WOMONTH()        Calculates week of the month (# of 7 day periods) 
WORKBLOCK()      Returns a set-get block for field named in an 
WOYEAR()         Calculates week of the year (# of 7 day periods) 
WRITEFILE()      Writes a line or lines to a text file 
XBXX()           Draws an exploding box on the screen of a given color 
YNREADER()       Creates specialized Yes/No get reader block 
_WILDCARD()      Wild Card String Compare