6CB Looker Version 1.10 for Foxpro 2.x 01/05/1991 Shareware Distribution Copy. Looker is copyrighted by Creative Concepts Software. All rights are reserved world-wide. Unauthorized users of Looker are subject to prosecution. A formal licence can be found at the end of this document. Information on registering Looker may be found at the end of this document or by leaving me a message on this board (70162,1545) If you like, you may also leave me a message by phone (305) 864-7738. About Looker: ************* For years, the idea of the perfect lookup/help system has been waiting in the rafters. Mainly technology under Foxbase and Foxpro 1.x have been the key issues in preventing this idea from springing to life. Finally, Foxpro 2.x comes to the rescue! With the advent of the structural compound index as well as other major achievements from Fox, the "Looker" system is made possible! "Looker" is my idea of a complete, self contained, user definable lookup/help system with complete data validation. The user is able to define either a memo table type popup or an indexed database pop-up on any key field. The lookup is based off of a program-variable key reference. The help system utilizes the same keys but internally links the foxpro help facility. The help system allows for the same function as Foxpro's help. "See also", "Topics", "Previous" and "Next" keys are all available to the user. To call this routine only the following lines need be inserted somewhere at the top of one's application: If you need a lookup on any character or numeric field: on key label F2 do looker with program(),varread(); ,"'CHANGE'"|"'NOCHANGE'","'F2'","LOOK" If you need user definable help on any key field: on key label F1 do looker with program(),varread(); ,"'CHANGE'"|"'NOCHANGE'","'F1'","HELP" A recent enhancement now allows data validation at the GET level! To validate on a field for which a lookup has been defined, simply use the valid clause after your GET statement: valid looker(program(),varread(); ,"'CHANGE'"|"'NOCHANGE'","'F2'","VALIDATE") If a data validation was called for a variable/field with no prior lookup definition, the following will occur: If the "CHANGE" option was passed with the validation, the user will be given a warning message and allowed to define a lookup. If the "NOCHANGE" option was passed, the user is simply given a warning and returned back the GET. The "F2" parameter signifies the hot key used to call up the lookup definition utility. Ex. 1. To allow any user to do a lookup on F5 as well as define one if none exists, the following line of code could be added to the application: on key label f5 do looker with program(),varread(); ,"'CHANGE'","'f5'","LOOK" Note: Notice the 'CHANGE' and 'f5' enclosed within double quotes. Ex. 2. To allow any user to do a lookup on F5 but do not allow him the option to define a new lookup, the following line of code could be added to the application: on key label f5 do looker with program(),varread(); ,"'NOCHANGE'","'f5'","LOOK" Note: Notice the 'NOCHANGE' and 'f5' enclosed within double quotes. Ex. 3. To allow any user to do a help call on F1 as well as define help if none exists, the following line of code could be added to the application: on key label f1 do looker with program(),varread(); ,"'CHANGE'","'f1'","HELP" Note: Notice the 'CHANGE' and 'f1' enclosed within double quotes. Ex. 4. To allow any user to do a help call on F1 but do not allow him the option to define new help, the following line of code could be added to the application: on key label f1 do looker with program(),varread(); ,"'NOCHANGE'","'f1'","HELP" Note: Notice the 'NOCHANGE' and 'f1' enclosed within double quotes. Ex. 5. To set up a data validation for a fictitious field called ZIP, Your get statement might look like the following: @ 5,5 say 'Zip:' get zzip valid looker(program(); ,varread(),"'CHANGE'","'f5'","VALIDATE") Note: "CHANGE" will allow the definition of a lookup on a validated field with no previous lookup defined. "NOCHANGE" will simply return to the validated field with an "INVALID INPUT" message if no lookup was previously defined. If this happens, a lookup may then be define with the standard lookup hot key sequence. That is, assuming the "CHANGE" option was specified. Of course, as a developer, you should have made sure a lookup was already defined for a validated field. In addition, the validated field must be a key in the lookup index for the validation to function properly. Remember !!! A. The lookup index must be keyed off of the field to be validated. This is so a quick validation can occur. B. The field to return from a data base lookup must represent the validated field. In Actuality, any hot key could call a lookup or help! Once the pop-up has been brought to the screen, providing the user has the authority, a maintenance routine could be brought fourth by pressing the same hot key. Creating lookups: ***************** The table maintenance routine is the core of looker. Say for example, you are in an edit screen within your application. On any field you want a lookup or help, simply press the appropriate hot key. If you have proper rights ("CHANGE" is specified in your call line) a window is brought up and you can specify whether this is a database lookup, a fixed options table (Similar to a pop-up) or a call to help. If you specify an options list, you will be asked to key in your list into a memo type area. If you specify a call to help, you will be asked to key in your help in a similar area. If you specify a database lookup you will be taken through a list of steps which will create a structural index on the database file for purposes of the lookup. This list will determine and save the following information for future lookups: 1. The database to be used for the lookup. 2. The structural index tag to be used. You will have the option to create a new structural index tag and define it unique if you like. 3. The fields and column titles to display for the pop-up list selection. 4. The field(s) to return upon selection. 5. The table name for this particular lookup. Once a options list table, help or database lookup has been defined, the table name will be available for all future definitions. Any time a user with the proper rights calls Looker, he will be able to define a new options list, call to help, database lookup or tie into an already existing lookup table or help document. If he chooses to tie into an already existing database lookup, he is only asked to specify the database field(s) to return from the lookup. Maintenance system: ******************* In addition to defining a new lookup, there is also a maintenance option. This option will bring fourth a maintenance view screen which will display all lookup tables and ties to selected databases. While in this screen pressing "M" will bring up a maintenance menu which has the following options: 1. Delete a lookup program key variable or a lookup table. 2. Reindex the Looker system files. 3. Reindex all associated structural index defined through Looker. 4. Set additional filters to view only certain information. Associated programs with this application: ****************************************** LOOKER.APP: The main application. Associated databases with this application: ******************************************* LOOKUP1.DBF Structural CDX file: LOOKUP1.CDX LOOKUP2.DBF : Structural CDX file: LOOKUP2.CDX Setup instructions: ******************* I designed Looker as a easy installation utility which could be tacked onto any Foxpro2 application with only the addition of one or two lines of code. As always, just when you think it's perfect your bounced back into the harsh reality of programming. I am working towards perfection. But in the meantime, here are a few things I have found which may cause some problems for the unsuspecting programmer: 1. When using this routine, make sure all calls to your application index (.idx) files are of the form "use xyz index xyz.idx". This must be done this way because if you say use customer index customer meaning customer.idx, customer.cdx will be active if there is a structural index on the file. Specifying the IDX extension ensures you are using the correct index. Of course, if you only use the structural compound index type, there is no need to specify the IDX extension. Many applications I design are carried over from foxbase. These systems have .idx files of the same name as the database. When I started defining .cdx files this problem came to light. Then again, why continue to use the .idx format when the structural compounds do so much more? Well, sometimes you just may want to avoid having an index open during a massive update. Wouldn't it be great if you could shut off the structural compound index from being updated until a later time. Shareware and Registration: *************************** The shareware version of Looker is limited to 15 available lookup key definitions. This means you will only be able to define a lookup on 15 fields. By registering your copy of Looker, you will receive the unlimited version along with a serial number. Furthermore, I will be available and grateful for any comments, suggestions, and problems you encounter while using this utility. Since this is a first release, please play with it and try to break it. I am always available for messages on this board (70162,1545) or message by phone at (305) 864-7738. Let me know what you think, or if you experience any problems. Any help returns my sincere gratitude. Licence and Registration: ************************* FORMAL LICENSE AGREEMENT Details concerning the cost of registration can be found at the end of this licence agreement. NON-EXCLUSIVE END USER SOFTWARE LICENSE FOR LOOKER VER. 1.1 THIS AGREEMENT IS BOUND TO VERSION 1.0 OF THE LOOKER UTILITY AND SHALL BE CONSIDERED THE EFFECTIVE AGREEMENT FOR ALL RELEASES OF THIS VERSION. EFFECTIVE DATE: 01/01/1991 This Agreement is between "Creative Concepts Software" hereinafter referred to as "Vendor", and the "end user of this software", hereinafter referred to as "Company". The agreement concerns the use of "Looker version 1.1", hereinafter referred to as "Software" as a utility which enhances a Foxpro 2.x program designed by the Company. The program is hereinafter referred to as "Application". Please read this License carefully BEFORE using the software. Any use of the Software, AT ALL, by the Company indicates that the Company has agreed to be bound by this agreement. This includes BOTH registered use, and use of the 'shareware' version which is distributed via public and private bulletin board services and shareware access services. LICENSE TO USE VENDOR'S PROGRAM Vendor, for the consideration named, hereby grants to Company and its corporate affiliates, a non-exclusive license to use the proprietary computer program called Looker Ver. 1.1 ("Software") in accordance with all aspects of this license agreement. If company is evaluating the shareware version of the Software, the Software should be registered within 30 days of beginning it's use. The Software may be licensed for use in one of three ways. A license may be obtained for use with a single internal company application (site licence). In this fashion the application using the Software may not be distributed in any fashion. If another internal application needs reference the software another licence must be obtained. A license may be obtained which would allow the Software to be distributed along with the application for purposes of resale. Each application distribution would warrant a fee be paid to the vendor. Finally, a license may be obtained for unlimited distribution of the software along with the application for purposes of resale. With this licence no additional fee need be paid to the vendor. TITLE TO SOFTWARE Title to the Software and all related material is with Creative Concepts Software. Except as expressly provided in this License, Company may not use, copy, disseminate, modify, lend, sell, distribute,sub-license, rent, lease, give or in any other way transfer, by any means or in any medium, the licensed Software. Company understands and agrees that the Software is the valuable property of Creative Concepts Software and is protected by the laws of copyright, trade secret, and contract. Company agrees to use its best efforts to prevent any and all unauthorized persons from acquiring the Software, and will exercise the same care and diligence to protect the Vendor's proprietary property as it does to protect its own. TERMS OF AGREEMENT The term of this Agreement shall begin on the date at the beginning of this agreement and shall continue in perpetuity unless replaced by a new Agreement OR terminated upon failure of Company to comply with any of the terms of this agreement. This Agreement is FINAL. This means that there will be NO refunds of money paid for registered use once the registered version is mailed, UNLESS the package is returned within thirty (30) days of registration, AND the seal on the diskette pouch is unbroken AND the seal has not been tampered with. The Vendor shall not publish any information about the Company's use of the software or software documentation without prior written approval of the Company, nor shall the Vendor use the Company's name in any advertisement or promotion or other solicitation for business without written approval from the Company. Company which Purchases an Agreement for 'internal' use of the software (site license) will be furnished with the source code for the program IF and ONLY IF Vendor can no longer provide Maintenance to keep the program operational. This applies to the source code for version 1.0 ONLY, not future releases. Company AND Vendor must both agree to this release of source code. If source code is obtained by the above method, Company agrees to use the source code for maintenance of the program used internally by Company ONLY. Company must NEVER redistribute the program, or any part of the program, in ANY form, for ANY reason. Once the source code is released to Company, Vendor is relieved of ALL maintenance responsibilities to Company for this program. LIMITATIONS OF LIABILITY Vendor makes NO warranties with respect to the licensed program or the 'shareware' version. The obligations of Vendor shall be: To make a reasonable effort to fix any operations / execution problems that are found by the Company which prevent the registered program from performing the functions described in Vendor-supplied documentation. To make available to the Company, as a replacement to the program initially supplied under this Agreement, any maintenance upgrades which solve operational problems with the software published by or on behalf of Vendor at no charge to Company. The Vendor warrants that it is the legal owner of the software described herein, and that it has the full right, title and interest in said software; and that the software has been developed by Vendor or that the Vendor currently has any and all necessary authority to enter into this license agreement. The Vendor shall defend, indemnify, and hold harmless the Company, it's officers, agents, employees, assigns and successors in interest from and against any and all liability or claims and costs including attorney's fees arising from third party claims regarding ownership of the software. Company makes no warranties with respect to the distribution of the software other than those covered elsewhere in this Agreement. Vendor agrees that the Company shall not be liable for any lost profits for the unauthorized use or distribution of the program so long as the other terms of this Agreement are complied to. The foregoing warranties are in lieu of all other warranties expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. Company further agrees that Vendor shall not be liable for any lost profits, or lost resources, or for any claim or demand against Company by any other party, except as provided herein. In no event shall Vendor be liable for ANY consequential damages, even if Vendor has been advised of the possibility of such damages. LAWS GOVERNING Regardless of the place of contracting, place of performance, or otherwise, this Contract, and all amendments, modifications, alterations, or supplements thereto, shall be governed by the laws of the State of Florida, as to the nature, validity, and interpretation thereof. Looker Registration : ************************* If you find Looker to be of value, please register. To register and order the unlimited version of Looker leave me a message on this form (70162,1545) or leave me a message at (305) 864-7738. Pricing: ******** Please call for latest pricing information. ************************************** Thank You for taking a look at Looker. **************************************