ProBas Technical Notes ProBas is a collection of 232 routines, 226 of which are written in assembly language, and the remaining 6 in BASIC. ProBas works with all versions of the Microsoft QuickBASIC compiler, the Microsoft Business Basic compiler, and the IBM BASIC compiler. ProBas is shipped with the .OBJ files for all assembler routines, and the source code to the BASIC routines. Assembly language source code is not included. All ProBas routines are designed to be stored in a library and invoked using the CALL statement. A selection of batch files is included to create the proper type of library (.LIB link library, .EXE user library, or .QLB quick library) for your particular compiler. This allows you to easily manage what is in your library or libraries. ProBas comes with a 600-page manual which is divided into three sections: Introduction, Tutorial, and Reference. The Introduction section covers installation, setup, an overview of ProBas, and chapters on using BASIC, Programming in BASIC, Top-Down BASIC, and The BASIC Numbers Game. The Tutorial section provides an in-depth look at using various ProBas routines to perform day-to-day chores. For example, there is a 46-page chapter on using the various ProBas screen snapshot routines that not only examines each routine in clear English, but also presents real-life situations and tips on handling them. The Reference section, arranged in alphabetical order, devotes at least a page, often more, to each routine. Each listing includes the routine's compatibility level, (BIOS, CLONE, DOS, ANY) type, (input, video, etc.) a detailed description, calling syntax, and a BASIC example using the routine. Any compiler limitations, such as QuickBASIC 4.0-only, are also listed in boldface italics. You'll also receive a ready-to-run DEMO program that uses many of the ProBas routines-- with over 300k of fully narrated source code. The source was designed to be read like a book and shows in great detail how to take maximum advantage of the ProBas routines to do things like design bar and pull-down menus with full mouse support, or create a window the user can "drag" on the screen using the mouse or cursor keys. ProBas contains a number of routines that work with what we call virtual screens. How it works is simple: you DIM(2000) a dynamic array for use as a virtual screen and treat it just as if it were the display screen. Rather than use XQPRINT to display a string, you use DXQPRINT. Similarly, you use DWindowManager in place of WindowManager to draw windows. The DPUTSCREEN routine is used to display all or part of the virtual screen to the display screen in the blink of an eye. Displaying is a memory to memory block move at assembly language speeds. You just can't get any faster. Virtual screens are not limited to 25x80, or 43x80 screens. Using the CALCSIZE, VGETSCREEN and VPUTSCREEN routines, you can cut and paste a portion of a screen to its own array, DIMed to just the size necessary. In the ProBas demo, we examine this technique in great detail. For example, we used a FOR/NEXT loop to write seven pull-down menus, complete with text (read in via a READ/DATA statement) to a full-sized virtual screen. As each menu was finished, it was moved to its own virtual screen array. When the loop is done, the full-sized array is ERASEd and the seven menu arrays take up less memory than a single 25x80 screen. The entire process takes just 23 lines of code and less than one 18th of a second to execute. With all seven menus in memory, a single call to DPUTSCREEN displays any menu instantly. Because such virtual screens are stored in dynamic numeric arrays, you can use all available base memory, and optionally EMS memory, to store literally hundreds of screens in memory at a time, all ready for display at assembly speeds. And that's not even using the SCRUNCH routine to compress the screens. SCRUNCH uses run-length encoding to compress screens by 75 to 90%. In the ProRef package, we used the ProScreen screen editor to draw 49 pull-down menus. The 49 files took up a little over 200k. After running them through SCRUNCH, the 49 files were compressed to a single file of just 16,114 bytes. ProRef reads this file into a single dynamic array so that all 49 menus are in memory and instantly available. ProBas allows you to have virtual screens that are far larger than the physical display screen. You can create a virtual screen of up to 255 rows and 132 columns and then treat the display screen as a "window" that "moves" over the larger virtual screen. Any ProBas routine that ends in the letters "SS" works with this type of sizable-screens. But screens handling routines make up just a fraction of the ProBas library.... BASIC is notoriously slow in the area of file I/O. ProBas includes a complete set of assembly language disk read and write routines that are optimized for speed. You can create or open a file, (using DOS or network access and locking) and perform reads or writes in any of three ways (to or from a buffer, to or from an array, and to or from a string). You can even mix and match techniques as desired. To read 300 records of 100 bytes each into memory in BASIC, you OPEN a file, field it, and do 300 GETs, storing each field in its own string or numeric array. Obviously you would either run out of string space or patience long before reaching the end of the file. With ProBas, you DIM a dynamic numeric array to 15,000 elements (1 integer = 2 bytes), call DFREAD specifying 30,000 bytes, and in slightly over one 18th of a second (on an 8Mhz 1 Wait State AT) the data is in memory. With ProBas, you can read in a megabyte of data and store it in EMS in less than one half second. Even though you are storing mixed string and numeric data in a numeric array, the DGETREC and DPUTREC routines handle the conversion to strings invisibly. Keeping track of where you are in the file is easy with a wide variety of record, byte, and offset file pointers that allow you to work with files up to 2 gigabytes in size. For smaller files, up to available string space, use the SFREAD/SFWRITE routines that work with strings. For the occasional access of small amounts of data, the FREAD/FWRITE routines work with a buffer. ProBas includes dozens of routines that just make life a bit easier, such as parsing filespecs into drive, path and file, computing elapsed times, stripping/rotating/extracting strings, compacting or converting dates and times, and general disk I/O routines for directory functions. The savings in programmer man-hours pays for ProBas in just a few days. So why re-invent the wheel? The precursor to ProBas, the shareware ADVBAS library, has been used by thousands of programmers since 1985 and is available on most BBS systems throughout the nation. If you are still not convinced that ProBas is a boon, please feel free to download a copy of ADVBAS and "test drive" it. We are confident that once you try ADVBAS, you'll want the much larger, more comprehensive ProBas library. ProBas was designed for the professional programmer. You may link ProBas routines with your commercial programs without paying any royalty or including a Hammerly Computer Services copyright notice. Routine List ADDMATI..........Add an integer to the first x elements in an array ANY2DEC..........Convert a number in any base to base 10 (decimal) BICKEL...........Check how closely two strings match using Bickels algorithm BIGPRINT.........Display (print) big characters to the screen BKSCROLL.........Scroll a portion of the screen backwards (down) BKSPACE..........Move the cursor back one space (destructive backspace) BLINK............Disable blink to allow 16 fore and 16 background colors BLOCKMOVE........Copy a block of data from one memory location to another BSQ..............Compress or squeeze a string BUSQ.............Decompress or unsqueeze a BSQ'd string BUSQLEN..........The new length of a BSQ'd (compressed) string CALCATTR.........Set the color attributes for direct screen writes CALCSIZE.........Calculate the size to DIM an array to hold a partial screen CARRIER..........Detect if carrier is present on the comm port CHECKKEY.........Check keyboard/mouse for input without waiting CHECKSUM.........Calculate the checksum for XMODEM-type protocolos CIPHER...........Encrypt a string CIPHERP..........Encrypt a string using graphic characters for serial files CLRCOLS..........Clear a given column(s) CLREOL...........Clear to end of line CLREOP...........Clear to end of page (screen) CLRKBD...........Clear keyboard buffer of any pending keystrokes CLRSOL...........Clear from start of line to cursor CLRSOP...........Clear from start of page (screen) to cursor COPYFILE.........Copy a file -- faster than SHELLing to DOS and running COPY CRC..............Compute a Cyclic Redundancy Check for a record using formula CRC2.............Compute a CRC using tables for improved speed CRUNCH...........Crunch successive occurrences of a character within a string DATASEG..........Returns the value of BASIC's data segment DATE2INT.........Convert three integers (MONTH,DAY,YR) to a single integer DATEN2S..........Convert three integers (MONTH,DAY,YR) to a string (mm/dd/yy) DATES2N..........Converts a string (mm/dd/yy-yyyy) to 3 integers (MONTH,DAY,YR) DBIGPRINT........Version of BIGPRINT for use with virtual screens DCLEAR...........Do a "CLS" of a virtual screen array DCLEARSS........."CLS" a virtual screen array of up to 255 rows and 132 cols DDOSTASKS........Turn DoubleDos task switching on or off DEC2ANY..........Convert a number in base 10 (decimal) to any base (2-35) DELAY............Delay for n seconds using the clock (independent of CPU speed) DELAY18TH........Delay for n 18ths of a second using the clock DELCHR...........Delete a character from the screen DELFILE..........Delete a disk file. Returns error code to eliminate ON ERROR DELLINE..........Delete a line (row) on the screen DELSUB...........Delete subdirectory. Returns error code to eliminate ON ERROR DFREAD...........Read from a file to an array. Much faster than BASIC's GET DFWRITE..........Write to a file from an array. Much faster than BASIC's PUT DGETREC..........Get a string record that was stored in a numeric array DGETSCREEN.......Take snapshot of all or part of a screen and store in an array DGETSCREENSS.....Same as DGETSCREEN for screens of up to 255 rows by 132 cols DGQPRINT.........Print strings to a graphic screen in an array DGXQPRINT........Print strings to a graphic screen in an array w/ color choice DISKSTAT.........Disk stats-- free/total clusters, bytes/sector, sector/cluster DISSOLVE.........Clear a screen using a "dissolve" DMPRINT..........Display string with DOS calls-- supports drivers like ANSI.SYS DOSINKEY.........Get a key from the standard input device-- allows redirection DOUB2LONG........Convert a double precision value to a simulated long integer DPUTREC..........Opposite of DGETREC-- stores a string in a numeric array DPUTSCREEN.......Restore a full or partial snapshot, stored in an array DPUTSCREENSS.....Same as DPUTSCREEN for screens of up to 255 rows by 132 cols DRVSPACE.........Returns the amount of free disk space on a given drive DRVSPACEL........Returns free disk space on a given drive in long integer DSORT............Sort strings stored in a numeric array DSORTB...........Sort strings stored in a numeric array backwards DTR..............Tell if Data Terminal Ready (DTR) is detected DWindowManager...Version of windowing routine for virtual screen arrays DXQPRINT.........Display a string to a virtual screen array DYNPTR...........Returns segment and offset of an array Elapsed..........Computes the elapsed time between start/stop times (strings) EMSCLOSE.........Close (ERASE) an EMS array EMSGET...........Get data from an EMS array and put it in a BASIC variable EMSOPEN..........Open (DIM) an EMS array EMSPUT...........Put data from a BASIC variable to an EMS array EQUIPMENT........Equipment info-- RAM in k, # of parallel, serial, game ports EXIST............Check if a file exists-- supports network and multi-tasking EXTRACT..........Extract a delimited string from within a larger string FADEOUT..........Clear the screen using a fadeout to a specified color FCLOSE...........Close a file opened with FOPEN or FCREATE FCREATE..........Create a file for access with ProBas assembly routines FGETLOC..........Get the current location of the file pointer FINDFIRSTF.......Find the first file that matches a filespec-- wildcards ok FINDNEXTF........Find the next file after a FINDFIRSTF FOPEN............Open a file for access with ProBas assembly routines FREAD............Read data from a file into a buffer FSETEND..........Set file pointer to the end of the file for an append FSETLOC..........Set file pointer to a given byte location within the file FSETOFS..........Set file pointer to a offset from the current location FSETREC..........Set file pointer to the next record in a random acccess file FSIZE............Returns the size of a file in bytes FWRITE...........Writes data to a file opened with FOPEN or FCREATE GETATTRF.........Returns attribute of a file found with FINDFIRSTF/FINDNEXTF GETCRT...........Returns zero if a monochrome or nonzero if a color display GETDATEF.........Returns date stamp of a file found with FINDFIRSTF/FINDNEXTF GETDDOS..........Tells if the program is running under DoubleDos GETDOSV..........Returns the version of DOS (2.1, 3.3 etc) GETDRV...........Returns the current logged drive GETEGA...........Tells if an EGA adapter is installed and how much RAM it has GETEXTM..........Returns the amount of extended (AT) memory is installed GETFATTR.........Returns the file attribute of a given file GETFDATE.........Returns the date stamp of a given file GETFTIME.........Returns the time stamp of a given file GETKBD...........Returns status of keyboard toggles-- Caps Lock, Num Lock, etc GETKEY...........Check keyboard/mouse for input and wait until key or click GETLIMM..........Returns the amount of total and free EMS memory, if any GETLIMV..........Returns the current EMS version number GETLINE..........Reads a line from the screen and puts it in a string array GETMOUSELOC......Returns the current mouse cursor location (25x80 text mode) GETNAMEF.........Returns the name of the file found with FINDFIRSTF/FINDNEXTF GETROWS..........Returns the mode (25 or 43 rows) GETSCREEN........Take snapshot of a full or partial screen-- store in an array GETSIZEF.........Return the size of a file found with FINDFIRSTF/FINDNEXTF GETSIZEFL........Same as GETSIZEFL but returns a long integer GETSUB...........Returns the current subdirectory GETSWITCH........Returns the DOS switch character GETTIME..........Returns the current time to hundredths of a second GETTIMEF.........Returns time stamp of a file found with FINDFIRSTF/FINDNEXTF GETTVIEW.........Tells if program is running under TopView/DesqView/TaskView GETVALIDKEY......Waits until one of a list of valid keys is pressed GETVERIFY........Returns the status of the DOS VERIFY switch (off or on) GETVIDMODE.......Returns the current video mode (0-16) GLOAD............A faster BLOAD GQPRINT..........Display a string to the screen in the default color attribute GRAFPRINT........Display a string to a graphics screen in any size of type GRAFREST.........Restore a snapshot of a graphics screen taken with GRAFSAVE GRAFSAVE.........Take a snapshot of a CGA graphics screen GXQPRINT.........Display text in the selected color to a graphics screen INSCHR...........Insert a character, moving all to the right one position INSLINE..........Insert a line (row) on the screen INT2DATE.........Restore a date integer saved with DATE2INT back to 3 integers INT2TIME.........Restore a time saved with TIME2INT back to three integers IPTRSORT.........Integer pointer sort KEYPRESS.........Tell if a key is waiting in the keyboard buffer LCLOSE...........Close an EMS "file" opened with LOPEN-- treats EMS as a file LGET.............Read (GET) a record from an EMS file opened with LOPEN LOCASE...........Converts a string to all lower case characters Long2Doub........Converts simulated long to double precision for pre-QB4.0 LOPEN............Open an area of EMS memory as if it were a "file" LPRTSORT.........Long Integer Pointer Sort LPUT.............Write (PUT) a record to an EMS file opened with LOPEN LROTATE..........Rotate the characters in a string left LSCROLL..........Scroll a selected portion of the screen to the left MAKESUB..........Create a DOS subdirectory (MKDIR) MDELCHR..........Delete a character in a window MINSCHR..........Insert a character in a window MMBUTTON.........Returns which mouse button, if any, is currently pressed MMCHECK..........Returns if a mouse in installed, and if so, how many buttons MMCLICK..........Tells how many times a mouse button was clicked since last MMCURSOROFF......Turn the mouse cursor off MMCURSORON.......Turn the mouse cursor on MMGETLOC.........Returns the current location of mouse cursor in any video mode MMSETLOC.........Sets the location of mouse cursor in any video mode MMSETRANGE.......Sets the range on the screen where the mouse cursor may go MONTH............Returns the month (January, February, etc.) of a number 1-12 MPRINT...........Display a string using DOS/BIOS in the window set by MWINDOW MULTIAND.........Characters in a given string are ANDed with a given value MULTIOR..........Characters in a given string are ORed with a given value MULTIXOR.........Characters in a given string are XORed with a given value MWINDOW..........Sets up a scrolling region for MPRINT, MINSCHR and MDELCHR NumFormat........Like "PRINT USING", except the output goes to a string NUMPROC..........Returns the type of coprocessor (8087, 80287, 80387) if any PARSEFSPEC.......Parses a filespec into strings for drive, path, and filename PCTYPE...........Returns the machine code to tell if on a PC, XT, AT, etc PRINTSCREEN......The same as pressing Shift-PrtSc PROCESSOR........Returns the type of processor (8088, 80186, 80286, 80386) PRTCHECK.........Checks the printer to see if it's ready to avoid ON ERROR PRTSWAP..........Swaps the parallel ports associated with two printers PUTSCREEN........Restores a full or partial screen snapshot from a static array QPRINT...........Displays a string to the screen in the default color READBITF.........Read numbers of a custom bit length for compact storage RECOLOR..........Change everything on a screen of one color to another color RECOLORAREA......Change a portion of a screen from one color to another color RENAME...........Rename a disk file-- eliminates ON ERROR trapping REPLACE..........Replace every occurrence of a char in a string to another char RESETPOINT.......Reset a point on the screen for 80x50 text mode graphics REVERSE..........Reverse the order of characters in a string REVERSEPTR.......Reverses the order of arrays sorted with pointer sorts RROTATE..........Rotate the characters in a string right RSCROLL..........Scroll a selected portion of the screen to the right SCR2FILE.........Store 25x80 text screen snapshot(s) to a disk file SCR2FILESS.......Store screen snapshots (up to 255x132) to a disk file SCROLL...........Scroll a selected portion of the screen SCRREST..........Save a full screen snapshot to a static array SCRSAVE..........Restore a full screen snapshot to the screen SCRUNCH..........Uses run-length encoding to compress snapshots by 75-90% SETCOMM..........Set baud rate, parity, etc of a comm port without closing it SETDRV...........Set the default drive SETERROR.........Set the DOS error level upon exit for use in batch files SETFATTR.........Set a given file's attribute SETFTD...........Set a given file's date/time stamp SETKBD...........Set status of the keyboard toggles (Caps Lock, Num Lock, etc) SETMATI..........Set the first n values of an integer array to a given value SETMOUSELOC......Set the mouse cursor location (25x80 mode only) SETMOUSERANGE....Set the mouse range (25x80 mode only) SETPIXEL.........Plots a graphics point-- like PSET and PRESET, but much faster SETPOINT.........Sets a point on a text screen for 80x50 text mode graphics SETROWS..........Set the number of rows on the screen (25 or 43 if EGA) SETSUB...........Move to the specified subdirectory SETVERIFY........Turn the DOS VERIFY switch on or off SFREAD...........Read a string from a file opened with FOPEN/FCREATE SFWRITE..........Write a string to a file opened with FOPEN/FCREATE SHIFTL...........Shifts all bits in an integer left n times SHIFTLL..........Shifts all bits in a long integer left n times SHIFTR...........Shifts all bits in an integer right n times SHIFTRL..........Shifts all bits in a long integer right n times SINPUT...........Fielded input using DOS and WordStar editing commands SINPUTSET........Set/modify SINPUT options SOUNDEX..........Get the SOUNDEX code of a given string SPEAKER..........Turn the speaker on or off without affecting timing routines SPTRSORT.........String Pointer Sort SSRCH............Similar to INSTR but not case sensitive Strip............Strips all leading and trailing blanks from a string STRIPBLANKS......Strips leading, trailing or both blanks and control characters STRIPCHR.........Strips all occurrences of a given character from a string STRIPRANGE.......Strips all characters in a given range from a string SUBEXIST.........Tells if a given subdirectory exists TESTPIXEL........Tests a graphics point-- like BASIC's POINT but much faster TESTPOINT........Tests a point on 50x80 text mode graphics TIME2INT.........Convert three integers (HOUR,MIN,SEC) to a single integer TIMEN2S..........Convert three integers (HOUR,MIN,SEC) to a string (hh:mm:ss) TIMES2N..........Converts a string (hh:mm:ss) to three integers (HOUR,MIN,SEC) TINSTR...........Search for a given char type (alpha,numeric, etc.) in a string UNSCRUNCH........Decompress a screen snapshot compressed with SCRUNCH UPCASE...........Converts a string to all upper case characters VGETSCREEN.......Move a partial-screen snapshot to its own array VGETSCREENSS.....Same as VGETSCREEN for screens of up to 255 rows and 132 cols VPUTSCREEN.......Move a partial screen back to a full-sized screen array VPUTSCREENSS.....Same as VPUTSCREEN for screens of up to 255 rows and 132 cols WEEKDAY..........Returns the day of the week as an integer (1-7) WindowManager....Draw windows on screen with options like shadow and exploding WRITEBITF........Allows compact storage of numbers using custom bit lengths XLATE............Translate a string using a translation table that you supply XMPRINT..........Combines the MPRINT and XLATE functions into a single routine XQPRINT..........Display a string directly to the screen in the color specified Routines in upper case are written in assembly language. Routines in mixed upper/lower case are written in BASIC. Routines ending in "SS" are for sizable virtual screens. ProBas ToolKit Technical Notes The philosophy behind the ProBas Professional BASIC Programming Library is to provide powerful, proven, low-level routines that afford the programmer the most capability with the least encumbrance. In other words, no arbitrary limitations or preconceptions. If you want to design a bar menu on the 25th row, with pull-up menus rather than the more traditional pull-down menus, there's nothing to hinder you. Use the XQPRINT, WindowManager, RECOLORAREA and mouse routines, and code it any way you like. The idea behind the ProBas ToolKit is to provide higher-level routines that utilize the low-level routines in ProBas and work as "plug-in" modules. For example, if you don't want to take the time to code that bar menu with the unusual pull-up menus, use the ToolKit and save yourself a lot of work. Or maybe you want to display a text file in a window, complete with scrolling and paging functions. Wouldn't you rather just specify the filename and call WindowText rather than writing and debugging it yourself? The ToolKit has menu generators to suit almost every need. You may select a menu that writes directly to the screen or writes to a virtual screen array, with or without mouse support, with or without a scrolling light bar, so that only the code that is needed is linked with the program and unnecessary code is not there to waste memory or slow things down. The ProBas ToolKit contains dozens of routines like sizeable mini word processors with word wrap and time/date/calendar routines that make life easier and help keep you from constantly having to re-invent the wheel. The ToolKit comes with a complete assembly language Btree indexing system that allows you to create, find, add, edit, delete, insert and sort keys in an index. Use these routines with the lightning-fast ProBas assembly file I/O routines and you can access and manipulate large data bases hundreds of times faster than BASIC would allow. Then there are routines that allow you to patch .EXE files to write self- modifying code. Why use cumbersome data files to hold filespecs, passwords, or even user-defined menu choices when you can just write the information directly to the .EXE file itself? Or perhaps you would like to pass large amounts of data between programs compiled with BCOMxx.LIB or even programs written in different languages. The ToolKit provides a complete system of protected memory-resident data areas and assembly routines that "peek" and "poke" large chunks of data at a clip. At HCSI we have not forgotten our shareware roots. Not only does our staff regularly add new routines to the ToolKit, but programmers who use ProBas frequently contribute routines and allow us to incorporate them in the product. It is our intention to make these additions available to registered users at minimal cost, usually $10 per disk. Every four to six months a new updated manual is available for a nominal charge. Beginning in May 1988, these routines will be available to registered users in the ProBas ToolKit area of our multi-user BBS so that you can download them for just the cost of the phone call. For years C and Pascal programmers have relied on tools like these to increase their productivity and ease their work load. Isn't it time BASIC programmers got the same attention? ProBas TeleComm ToolKit Technical Notes The ProBas TeleComm ToolKit is a collection of communication-related tools that you $INCLUDE in your programs to provide such features as: o Xmodem Single File Transfer Protocol (CRC & Checksum) o Modem7 Batch File Transfer Protocol (CRC & Checksum) o Ymodem Single File Transfer Protocol (CRC & Checksum) o Ymodem Batch File Transfer Protocol (CRC & Checksum) o VT52 Terminal Emulation o VT100 Terminal Emulation o ANSI BBS Terminal Emulation o Baud rates of 300 bps to 57,600 bps o Powerful Keyboard Command Processor/Command Center o Script file language for automated modem sessions o Dialing directory with advanced editing o Auto-dialing via keyboard, database, script file, etc o Plus many other help features and conveniences Each module is added to your code via the $INCLUDE statement and then accessed by a GOSUB. You need only include the modules that you use. The ProBas TeleComm ToolKit comes with full BASIC source code and each module is heavily documented with comments on almost every line of code. You also get a detailed manual, sample script files, and source code for a working terminal program that uses all of the TeleComm ToolKit modules and routines. Working with the TeleComm ToolKit is easy. To initiate file transfer for example, you just set a few variables and "GOSUB XmodemSend" or "GOSUB YmodemRecv" as desired. The transfer will then take place, with or without a window showing the progress. When done, the routine returns a full status report. The powerful command center works with both keyboard and script file input for hassle-free control. The command center supports the popular ProComm(TM) command set. Adding your own command set can be done with a minimum of effort. The ProBas TeleComm ToolKit requires ProBas and QuickBASIC version 3.0 or higher. You may include these tools in your commercial programs without paying any royalty or including a Hammerly Computer Services copyright notice. ProRef Technical Notes ProRef is actually three products in one. It is a Terminate and Stay Resident (TSR) online help system for ProBas, a TSR online help system for your help, and an extension to the QuickBASIC programming environment. The 232 routines in ProBas are just too much for anyone to remember, and even though we are proud of the ProBas documentation, at 600 pages, it's just so *big*. ProRef allows you to press a hot-key and quickly find the calling syntax and up to six lines of text on each routine. When the hot-key is pressed, the ProRef bar menu replaces QuickBASIC's bar menu with choices for Screen, sTring, File, Input, Memory, Numeric, Equipment and Other. ProRef works just like QuickBASIC, including the mouse, so you already know how to use it. For example, to get help for (say) the routines to treat EMS memory as an array, just move the mouse to the Memory choice, click the mouse, and move the highlight down to the EMS choice. A second menu will appear with each of the routine names. Click on any choice, and the calling syntax and help for that routine appears. Press the ESC key or click the right mouse button to return to QuickBASIC. Adding your own help information, such as notes and the calling syntax for your own routines and subprograms, is easy. Just use your favorite text editor and put character delimiters in the beginning and end. Accessing the help is just pressing the hot-key and selecting the help from a two-line-per-entry index. Online help is not exactly front page news, but the most powerful features of ProRef are in the area of extending the programming environment. ProRef comes with a number of handy pop-up productivity tools that were especially designed for the BASIC programmer: o Pop-up full-screen ASCII chart o Pop-up BOX chart to show what graphics characters make up boxes o Pop-up multi-mode, dual memory calculator o Pop-up SCAN code module tells the codes for any key pressed o Pop-up listing of all DOS/ProBas file I/O error codes o Pop-up listing of file attributes Each productivity tool is available from the Other menu, or via a hot-key. Nice, but not exactly earth-shattering. But ProRef takes this a good bit farther: You may add up to 10 additional programs to your own menu within ProBas and access almost any DOS program from within QuickBASIC, or any other program for that matter. Now here's the real kicker: you can make almost any DOS program, including the ones you write in BASIC, available via a hot-key. Now you can pop up great programs like your favorite text editor, modem program, or third-party software like The Norton Utilities via hot-key. In fact, you can even use your editor as your environment and run QuickBASIC as a pop-up! So why use a plethora of TSRs, many of which are only subsets of better programs, when you can have the real thing available? Unlike some other task-switchers, ProRef doesn't force you to live with an unwelcome user interface, use .PIF files, or define every last detail about the program to be run. Just select a hot-key and specify the drive:\path\filename of the program to run. ProRef put all of this together in a single package that is super fast, seamless, and easy to use. ProRef was written in QuickBASIC, using the routines in ProBas and the ProBas ToolKit. TSR capabilities were accomplished using the Weiner Shell Memory Resident Programming Utility and Language, which is also available from HCSI. ProScreen Technical Notes ProScreen is a state-of-the-art screen generator/editor system that allows you to create and edit 25x80 or 43x80 text mode screens. ProScreen does with screens what word-processors do for text. To create a screen, you set the foreground and background colors and begin with a blank screen. Pressing the F1 key puts you in Line Draw Mode. You may then draw single and double lines anywhere on the screen by pressing a Shift-Arrow key combination. Drawing boxes is just as easy. Press F2 for Box Draw Mode, position the cursor where you want the upper right corner to be and press Enter. A blinking phantom box outlines the box as you move the cursor to the lower right corner and press Enter again. You can use any of the standard single/double line character configurations for the frame, or you may select any of the 256 ASCII characters instead. Once a box is drawn, you may set a four-sided margin, similar to that of a word processor, within the box for text and other graphics in any color. Advanced ProScreen features include automatic center of one or all rows within margins, text margins, block move, block copy, copy row, copy column and character painting. Color control is a ProScreen forte. With just a few keystrokes, you can change the colors on the entire screen, or just within the margins. You can replace one color with another, and you can even have 16 foreground colors over 16 background colors on any CGA, EGA, or VGA adapter. You can finally have color combinations like cyan (3) over high intensity cyan (11) or black (0) over yellow (14). In fact, you can control the colors for each character on the screen. ProScreen gives you three complete screen buffers so that you can edit three different screens at the same time, copy or cut and paste between the buffers, merge screens inside or outside windows, and much more. You can even use the UnDo key as a fourth buffer to see pop-up windows appear and disappear, because the UnDo will undo an UnDo! Each ProScreen function takes only a few keystrokes, and an entire indexed manual is available by pressing the Shift-F8 key. With just 3 or 4 keystrokes, you can jump into help, view an Index, and get up to 17 pages of help for any command or function. We use ProScreen as a tool to help prototype our software. We use the editor to design complex screens with overlying menus and pop-up windows in just a few minutes, setting the colors the way we want, and using ProScreen's rich set of features to handle things like centering. Once the screen is designed, all of the row/column, color and screen formatting information is displayed and can easily be inserted into the code. Just read the data, write the code, and run it. No more tedious writing, compiling, viewing, changing your mind, rewriting, and recompiling over and over again to get screens right. Once a screen is designed, it can be incorporated into your BASIC programs with the routines in ProBas or with either the BASIC or assembly modules provided with ProScreen. We used ProScreen to design 49 pull-down menus in our ProRef product. This made designing the menus a snap and modifying menus down the road a breeze. The 49 ProRef screen files take up over 200k of disk space and any file can be loaded from disk in less than one 18th of a second using the ProBas DFREAD routine. But that wasn't good enough. We used the ProBas SCRUNCH routine to put all 49 menus in a single 16,114-byte file and read the entire file, all 49 screens, to a 16k array so that any menu can be instantly displayed anywhere on the screen, with the fast memory-to-memory screen routines in ProBas. But designing and displaying cute screens is only a fraction of ProScreen's abilities. You may specify up to 130 input/output fields per screen. The powerful fielding features include 19 pre-defined input masks, 2 user-defined input masks, options like mandatory fill, numeric input only, accept input only within a predetermined range, and much more. Not only can you design the fields in the ProScreen editor, you can test them as well, tweaking things until they are just right. Rather than a clumsy attempt at generating inefficient BASIC code, the field information is stored in the screen file, and you get optimized BASIC source code to $INCLUDE or MERGE into your program (ProScreen supports the interpreter) which you access via a GOSUB, passing data via arrays. This is much more efficient and has the added benefit of allowing you to alter screens and field information without recompiling the program. ProScreen is a must for designing real-time demos of software. The resident PSMPHOTO module stays in memory and allows you to take snapshots of any text- mode screen and import it into the ProScreen editor. Since ProScreen screens are BLOAD compatible, you can use ProScreen with any of the popular demo packages like Dan Bricklin's DEMO or Microsoft's Show Partner. Or you can write your own demo program in BASIC. One of the more powerful features of ProScreen is that you can save windows to file just as easily as you can save entire screens. With the PSMPHOTO program and the cut and paste capabilties in the ProScreen editor, you can take snapshots of each screen in your program, and separate windows and menus into their own files. Using the ProBas system of virtual screens, you can create dazzling demos or emulate your programs in real time. Just using the example code in the ProBas demo, you could pop-up a window generated in your program or the ProScreen editor, and allow the user to move it anywhere on the screen in real-time, using either a mouse or the arrow keys. ProScreen comes with a 288-page manual with Introduction, Tutorial, and Reference sections that not only show you how to use ProScreen, but also has helpful tips and effective techniques on using ProScreen alone, or ProScreen and ProBas together for even more power. We even explain in detail how we did the trick of compressing 49 screens of over 200k to a single 16k file, and how to use it once it has been compressed. ProScreen was formerly marketed by DNA Systems under the name SMS Screen Management System and over 3,000 have been sold throughout the world. We think you'll agree that it is the best screen generator/editor on the market. Copyright 1988 Hammerly Computer Services, Inc. The information presented herein may not be reproduced without permission. Trademarks: ProBas, The ProBas ToolKit, The ProBas TeleComm ToolKit, ProScreen, ProRef: Hammerly Computer Services, Inc. The Weiner Shell: Gryphon Microproducts Inc. QuickBASIC, BASCOM: Microsoft Inc. IBM: International Business Machines Corp. ProComm: DataQuest Inc: Norton Utilities: Peter Norton Computing Inc.