SWAGADD.EXE v1.0 (SWAG snipet ADDER) (c) GDSOFT May 1995 INTRODUCTION ------------ Since the inception of SWAG over two years ago, it has become a standard library used by PASCAL programmers all over the world. I often receive mail from users wanting to create their own SWAG packets. Therefore, I'm releasing SWAGADD which is the program that I use to create the new snipets every 90 days. SWAG (.SWG) files are actually highly compressed LZH archive files with extensions to the header and a double splayed sliding dictionary compressed buffer. The SWAG file headers have this structure : TYPE SwagHeader = RECORD HeadSize : BYTE; {size of header} HeadChk : BYTE; {checksum for header} HeadID : ARRAY [1..5] OF CHAR; {compression type tag} NewSize : LONGINT; {compressed size} OrigSize : LONGINT; {original size} Time : WORD; {packed time} Date : WORD; {packed date} Attr : WORD; {file attributes and flags} BufCRC : LONGINT; {32-CRC of the Buffer } Swag : STRING[12]; {stored SWAG filename} Subject : STRING[40]; {snipet subject} Contrib : STRING[35]; {contributor} Keys : STRING[70]; {search keys, comma deliminated} FName : PathStr; {filename (variable length)} CRC : WORD; {16-bit CRC (immediately follows FName)} END; Following each header is a highly compressed buffer optimized for space and extraction speed. This makes the extraction or viewing of snipets VERY VERY FAST. Unfortunately, you WILL NOT be able to use standard LZH code to decompress this buffer, however, you'll find code in the SWAG distribution to read the headers. Maybe someday, I'll release the decompression code to the public domain, but for now, it's copyrighted, and unavailable. GETTING STARTED ---------------- The program SWAGADD.EXE is a executable program that will allow you to read a directory of files and add them selectively to .SWG files somewhere on your disk. Any files can be added to any .SWG file. The only limitations are that the file must be an ASCII file and less than 64K is size. Actually, you could save ANY thing in a SWAG file. Recipes, Assembler code, "C" code or any type of ASCII files. I have a friend who keeps his favorite recipes in .SWG format. You wil find that you'll get compression ratios almost as good as PKWARES PKZIP. The main feature is that once data is added, you'll find that the extraction ratio is MUCH faster than PKZIP. USING SWAGADD ------------- Using the program is really very simple. Just execute it, and you will be presented with a directory of all of the .files in the directory that you started from. You'll be able to navigate by simply selecting one of the directory entries instead of one of the actual files. You'll notice that some files in the directory will NOT be listed; EXE, COM, ZIP, ARJ, LZH etc. Use the HOME, END and the arrow keys to maneuver around. ALSO, The directory window is search key sensitive. This means that directory box, you can just type the name of the file you want. For example, pressing 'A' will place you at the first entry starting with 'A'. Press 'N', and you will jump the the entry with 'AN...' if you have one. If NOT, you will jump the first file starting with the letter 'N'. At the bottom of the screen you will notice a menu indicating some cursor and function keys : F1 - HELP F3 - OPTIONS AltM - Mask - Read ESC - QUIT F1 shows you a little help screen for both the file selection window and the snipet window. F3 let's you set some options that are available. AltM permits you to enter a specific path and mask. opens up the snipet window, and all for some additional command keys: ALT[N], CTRL[ENTER] - View the NEXT snipet ALT[V] - View PREVIOUS snipet ALT[S] - Save Snipet This is the main function of SWAGADD. You'll be able to enter the subject, from, and keys that you want included in the packet. You'll be prompted for the .SWG file where you want to put the snipet, and also you will be given the opportunity to enter the packet description. If the .SWG files does not already exist, it will be created. AUTOMATIC HEADERS ----------------- You can include the following on the FIRST line of you snipet file, {SWAG=SWAGFNAME,FROM,SUBJECT,KEYS} SWAGADD will parse this string if found, and default the SWAG filename, from, subject and keys for you automatically. This makes adding a directory of files very easy and fast. ALT[F] - SWAG File ------------------ Allows you enter the SWAG files that the snipet will be included in. ALT[C] - Check for Duplicate ---------------------------- This activates a function that attempts to insure that this snipet is an original. EVERY snipet in every .SWG files is checked against the snipet to be added for duplication. The technique is not fool-proof, and used two methods to do the analysis. First, every PROCEDURE and FUNCTION is checked to a percentage of matches. Greater than 50% indicates a possible match. Next, the entire text is checked line by line. If we get 66% or better matches, then we can assume that we probably have a duplicate snipet. At least it is very very close. As the process runs, you'll notice at the bottom of the screen : SOMEFILE.PAS in ANSI.SWG 0009 01/01 11/68 16% ^ ^ ^ ^ ^ ^ File Name SWAG File No. Procs Text Pct This shows the possible "finds" as it checks each snipet. If the screen turns dark blue, then you probably have a duplicate, and a box will pop on the screen and allow to mark the file, view the snipet involved or skip and proceed. You'll have to make the decision as to whether you want to add it or not. ALT[G] - GREP ------------- The GREP function is another tool designed to help you decide if you have a duplicate snipet or not. Enter a string to search for. You may search for a multiple occurrence of substrings using BOOLEAN operators AND (&) OR (|). For example, a search for THIS&THAT|THEM&THOSE would return all snipets containing both ORed phrases THIS&THAT OR THEM&THOSE. In BOOLEAN Algebra, the AND operator takes precedence over the OR operator (except when using parentheses). This is NOT the case with the GREP function. You can use the PARENTHESES () to dictate which portion of the search string is to be processed first. If multiple levels of parentheses are used, the order is RIGHT to LEFT, starting with the innermost set of parentheses, wherever they occur. As an example, in the phrase ((this|that)&(them&those)), (them&those) would be processed before (this|that)) innermost to outermost. In other words, all snipets will be returned containing THIS or THAT AND they also will contain (THEM and THOSE). Within a set of parentheses, order will be left to right. Construction of the search string itself requires combining the desired substrings together with the desired BOOLEAN operators. Without the parentheses, the search string will be processed logically. THIS|THAT&THEM&THOSE will return all of the snipets that contain THIS plus the ones that contain THAT & THEM & THOSE. You can see that this is totally different than what you'll get by using the parentheses. The program will search ALL of the SWAG packet HEADERS in the CURRENT directory for matches based on your criteria. A processing box will appear, and all occurrences of your search string(s) or date matches will be written to a NEW SWAG file. Initially, this file is named GREPSWAG.SWG, and will be in the current directory. Upon completion of this GREP process, you will be asked for the file name. Enter any name AND directory you choose, and the file will be RENAMED and moved to that directory. Pressing ESCAPE WILL NOT save a file at all. This process allows you to create SWAG files containing ANY combination of material that you please. You can ALSO search the ENTIRE SWAG snipet buffer for data. Just enter a tilde (~) character as the FIRST character on the search line. For instance to find all snipets containing CRT, you would enter ~CRT on the search line. ONLY the header of snipets is searched for matches. This a way you can look at all snipets by a certain contributor. You can also use multiple search criteria here. For instance, ~GAYLE DAVIS|GUY MCLOUGHLIN|JOE BLOW would bring back everything for each of these persons. This search method is VERY fast as on the headers have to be read. By the way, the same rules about AND/OR searching apply when search just the headers. THE SWAG ENVIRONMENT VARIABLE ----------------------------- Some users reported a considerable delay while SWAG programs looked for the .SWG files on their disks. This problem has been eliminated by adding the environment variable SWAG to allow total override of the SWAGDIR= switch in the READER.INI. Use the command : SET SWAG=yourpath at the DOS prompt to set this. This then become the ABSOLUTE location that READER and other programs use to as the beginning path for SWAG files and WILL OVERRIDE you setting in the READER.INI file. We hope that you find this program easy to use, and the SWAG material valuable in development of your PASCAL programs. ENJOY !!!!! and GOOD PROGRAMMING !!! Gayle Davis