Home of the original IBM PC emulator for browsers.
[PCjs Machine "ibm5170"]
Waiting for machine "ibm5170" to load....
The BASIC CROSS REFERENCE UTILITY is for the serious BASIC programmer. It helps in the programming and debugging of BASIC source language programs by building a complete cross-reference of all variables. The utility provides list of the the following: all line numbers, showing all references by other statements; an alphabetic listing of all reserved words and line numbers where they appear; an alphabetic listing of all variables that are not reserved; and a listing of the BASIC source which might include both numbered and un-numbered statements. You can remove unreferenced statement numbers from compiled programs, remove REM statements from the source code, and unprotect source programs saved as protected programs.
BASICREF BASIC CROSS REFERENCE UTILITY Version 1.05 (C)Copyright Excelsior Software, Inc. 1985, 1986 All Rights Reserved A "User Supported" Program A PROGRAMMING AID FOR THE IBM PC EXCELSIOR SOFTWARE, INC. P. O. BOX 226 NEW MILFORD, NJ 07646 (201) 384-1848 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . This User's Manual has been generated from the documentation . . file BASICREF.DOC on the diskette supplied with the . . BASIC Cross Reference Utility. A copy of this User's Manual . . may be produced on your line printer under DOS (when the . . prompt A> appears) from the program diskette by entering . . the command: COPY BASICREF.DOC LPT1: . A listing . . of this User's Manual may also be produced on the screen . . under DOS by entering the command: TYPE BASICREF.DOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . NOTES ON BASICREF VERSIONS SPECIAL NOTE ON ALL BASICREF VERSIONS: BASICREF does not recog- nize path filenames, since the backslash character will be inter- preted as a delimiter preceding program option characters. Therefore, all files referenced by BASICREF should reside in the root directory. Sub-directories will be treated in the future. Version 1.05 of BASICREF incorporates correction of all known program bugs as of October 1986. i FOREWORD This disk contains BASICREF, our BASIC Cross Reference Utility program. We invite you to use the program and copy it freely for your friends, acquaintances and co-workers so that they may try it too and, hopefully, pass it on to others. If you like this program, and find it useful, we request you send a ten dollar contribution to further the "User Supported" concept under which this program is made available. In return, we'll keep you informed of any corrections we make to program bugs that we become aware of. On page 26 of this documentation you will find a description of an enhanced version of the program. Please take the time to read it. If you like this version of the program, we think you will like the enhanced version even more so. The enhanced version is priced at the nominal sum of twenty five dollars (thirty five if you haven't yet made a ten dollar contribution for the standard version of the program). If you do order the enhanced version, you will get: 1. A disk containing the enhanced program and accompanying documentation. 2. Updates, corrections, modifications, etc. to the program any time after purchase at nominal cost. 3. Free consultation by mail or phone on any aspect of the program. Take the time to read the description of the enhanced version of BASICREF and, if you are interested, you will find an order form on page 29 for your convenience. If you try it, we think you'll be quite pleased. We are also contemplating rewriting BASICREF for the Microsoft QuickBASIC compiler. We would like to know how much interest there would be in such a product, and we would appreciate hearing from anyone who would be inclined to purchase it if if were available. The order form includes a space for indicating interest in a cross reference utility for Microsoft QuickBASIC. There's no obligation, of course, but it would help in our deciding whether to go ahead with the effort. In any event, we would like to hear from you regardless of whether or not you make a contribution or a purchase. Let us know what you like or dislike about the program, what you would like to see added or changed, and any other suggestions you might care to make or comments you have to offer. You can reach us at Excelsior Software, Inc., Box 226, New Milford, NJ 07646. ii TABLE OF CONTENTS NOTES ON BASICREF VERSIONS . . . . . . . . . . . . . . i FOREWORD . . . . . . . . . . . . . . . . . . . . . . . ii INTRODUCTION . . . . . . . . . . . . . . . . . . . . . 1 PROGRAM OPERATION SUMMARY . . . . . . . . . . . . . . 2 SYSTEM REQUIREMENTS . . . . . . . . . . . . . . . . . 3 DISK PREPARATION . . . . . . . . . . . . . . . . . . . 3 PRELIMINARY PREPARATION . . . . . . . . . . . . . . . 3 BASIC Source Program . . . . . . . . . . . . . . . . 3 Cross Reference File . . . . . . . . . . . . . . . . 4 Cross Reference Program Disk . . . . . . . . . . . . 5 Temporary Data File . . . . . . . . . . . . . . . . 6 RUNNING THE CROSS REFERENCE PROGRAM . . . . . . . . . 6 Program Loading and Initiation . . . . . . . . . . . 6 Selection of Choice of Action . . . . . . . . . . . 6 Specification of BASIC Program File Name . . . . . . 7 Input File Options . . . . . . . . . . . . . . . . . 8 BASIC Version . . . . . . . . . . . . . . . . . . . 8 Statement Numbers . . . . . . . . . . . . . . . . . 9 BASIC Program Listing . . . . . . . . . . . . . . . 10 Example of Input File Option Specification . . . . . 10 Specification of Cross Reference File Name . . . . . 10 Cross Reference Printout Options . . . . . . . . . . 12 Example of Cross Reference File Specification . . . 13 PROGRAM OPERATION FOR EACH ACTION SELECTED . . . . . . 13 F1 - Processing of BASIC Source Program . . . . . . 13 F2 - Printout of BASIC Source Program . . . . . . . 15 F3 - List Cross Reference Output on the Screen . . . 17 F4 - List Cross Reference Output on the Printer . . 17 Statement Number References . . . . . . . . . . . 18 Reserved Word References . . . . . . . . . . . . . 20 Program Variable References . . . . . . . . . . . 20 I/O Related Variable References . . . . . . . . . 21 COMMENTS REGARDING COMPILED BASIC PROGRAMS . . . . . . 22 SOME FINAL WORDS . . . . . . . . . . . . . . . . . . . 26 ENHANCED CROSS REFERENCE UTILITY . . . . . . . . . . . 26 DISCLAIMER . . . . . . . . . . . . . . . . . . . . . . 28 PROGRAM ORDER FORM . . . . . . . . . . . . . . . . . . 29 iii INTRODUCTION The BASIC CROSS REFERENCE UTILITY is a programming aid for the serious programmer using the BASIC language on the IBM PC. Its use will facilitate the programming and debugging of BASIC source language programs. The utility provides the following output listings... 1. A complete listing of all program line numbers, showing all references by other statements in the program. Any references to non-existent line numbers are given, as well as any references to invalid line numbers. 2. An alphabetic listing of all reserved words showing the line numbers in which they appear. Reserved words are combined when the result provides greater significance than the individual words would provide as, for example, in LINE INPUT , ON ERROR , or PRINT USING . 3. An alphabetic listing of all program variables showing the line numbers in which they appear. Array variables are shown with their dimensions as defined in the DIM statement. For a variable whose type differs from its default value, as a result of a DEFtype statement, the variable type is shown. 4. An alphabetic listing of all I/O related variables that are neither reserved words nor program variables. This includes file names, device names, and descriptors or delimiters found in I/O statements, such as APPEND or OUTPUT . 5. A listing of the BASIC source program may be produced, with top and bottom page margins, page headings, and formatting of program statements for improvement in program readability. Major features of the Cross Reference Utility include... 1. The BASIC source program may include both numbered and un-numbered statements. The latter is of particular significance in processing programs to be run under compiled BASIC. 2. The BASIC program may be processed as either BASIC Version 1.1, 2.0 or 3.0, for proper differentiation between reserved words and program variables in each version. 3. Cross reference output is stored on a disk file, for listing to the screen and/or printer when desired. On listing, selected report sections may be suppressed. 4. Last, but certainly not least, this utility will produce a cross reference listing for any size BASIC program, without exception. Therefore, your program is limited only by restrictions of the BASIC system and the BASIC interpreter or compiler, and not by our utility. 1 PROGRAM OPERATION SUMMARY The material on this page cuts through all the chaff and gives the very basic information needed to run the Cross Reference Utility. This page will get you started; succeeding pages will provide more detail and may be read at your leisure. Your BASIC source program should be saved in ASCII format prior to loading the Cross Reference Utility. The program is loaded and executed under DOS (prompt A> on the screen) by typing BASICREF and pressing the Enter key. Select the actions desired when the main menu is displayed, using function keys F1 through F4 as toggle switches to activate or deactivate the selections. Depress function key F10 when desired selections have been established, to start processing. Respond with BASIC source program input file name and/or cross reference output file name when prompted by the program. Desired options may be selected by immediately following the file name with a / or \ , followed by appropriate one-character option codes, as follows: BASIC Source Program Input File 1 - Reserved word assignments correspond only to BASIC version 1.1 3 - Reserved word assignments correspond to BASIC version 3.0 - Default (neither 1 nor 3) corresponds to BASIC version 2.0 reserved word assignments N - Statement numbers in BASIC statements are optional S - Suppress formatting of BASIC statements in printout of BASIC source program. Cross Reference Output File S - Suppress printout of statement number references R - Suppress printout of reserved word references V - Suppress printout of program variable references I - Suppress printout of I/O related variable references Processing will start following specification of input and/or output file names. Actions selected will be executed in numerical order corresponding to the function key numbers selected in the main menu. Processing may be terminated at any time by depressing the F10 key to return to the main menu. A cross reference output file may be listed in the run in which it was generated, or in a subsequent run. Options to suppress sections of the printout may be changed from one listing to the next. Generated cross reference output files will remain on the disk until deleted or replaced by another file with the same name. Contents of the cross reference output listings, as well as details on the material presented above, are discussed in the pages that follow. 2 SYSTEM REQUIREMENTS The Cross Reference Utility is a programming aid for programs run on the IBM PC or compatibles under interpreter or compiler BASIC. The minimum system configuration required is: 128K RAM One Disk Drive Monochrome or Color Monitor Printer (Optional) This standard version of BASICREF runs under PC DOS versions 1.1 and later. The disk supplied has been formatted and written under DOS 2.1 as a double sided disk. The Cross Reference Utility is written in BASIC, and runs as a compiled program. Your DOS system is the only addi- tional software required to run the program. DISK PREPARATION Before you proceed, it is strongly recommended that you make one or more copies of the diskette for backup purposes. This can be done under DOS using the DISKCOPY command to copy the complete contents of the diskette, followed by the DISKCOMP command to verify that the source and duplicate diskettes are identical. The programs can be copied individually from a disk in drive A onto a formatted blank diskette in drive B with the commands: COPY BASICREF.EXE B:/V COPY BASICRF1.EXE B:/V COPY BASICREF.DOC B:/V COPY TESTPROG.BAS B:/V Programs BASICREF.EXE and BASICRF1.EXE are necessary to execute BASICREF; BASICREF.DOC is this documentation file; TESTPROG.BAS is a sample BASIC program. Once the disk contents have been copied successfully the original disk should be stored in a safe place. PRELIMINARY PREPARATION BASIC Source Program The BASIC program to be processed by the Cross Reference Utility must be stored in ASCII format. For a BASIC program run under interpreter BASIC, the program may be stored on disk when in memory under BASICA by entering the command ... SAVE filespec,A where filespec is a string expression for the file speci- fication. Note that if the ,A option is omitted, the program will be saved in a tokenized binary format, which will not be acceptable to the Cross Reference Utility. 3 A BASIC program file generated through the use of the DOS Line Editor (EDLIN) program will also be in ASCII format and may be processed by the Cross Reference Utility. This will be of particular value in the development of programs to be run under the BASIC compiler, where the use of line numbers is optional. (More about this later). Cross Reference File When a BASIC program is processed by the Cross Reference Utility, a disk file is generated containing the information necessary to produce subsequent cross reference listings. This cross reference file will be stored on whichever disk drive the user specifies, and sufficient space must exist on the selected disk to store the cross reference file. The exact size of a cross reference file is dependent upon the size and complexity of the specific BASIC program being referenced and cannot be easily determined in advance. However, as a general rule of thumb, the cross reference file will be less than half the length of the BASIC source program file, and that criteria can be used to determine if there is sufficient space on the selected disk to store the cross reference file that will be generated. If you do not know whether there is sufficient space on the disk on which you plan to store the cross reference file that will be generated, you should proceed as follows: 1. Load DOS from your DOS diskette until the prompt A> appears. 2. Execute the Directory (DIR) command on the disk that contains the BASIC source file. (See the DOS manual for information on applying the DIR command). The space on the disk occupied by the BASIC source program, in bytes, will be shown on the line next to the BASIC program file name. Assume for example, that the program to be processed by the Cross Reference Utility is stored on a disk with a file name of TESTFILE.BAS . Assume that a portion of the listing produced by the DIR command shows... FILE1 BAS 12800 8-07-84 9:56a FILE2 3200 1-11-80 10:04p TESTFILE BAS 25600 2-03-83 4:13p PROG EXE 12612 9-04-83 12:12p In this case, program TESTFILE.BAS occupies 25600 bytes on the disk, and half this amount, approximately, or at least 12800 bytes must be available on the disk on which the cross reference file will be stored. 4 3. To determine how much space is available on the disk on which the cross reference file will be stored, execute the Check Disk (CHKDSK) command for the selected disk. (See the DOS manual for information on applying the CHKDSK command). The status report produced will show how much free space is available on the disk. Assume, for example, that execution of the CHKDSK command produces the following report... 322560 bytes total disk space 9216 bytes in 2 hidden files 204800 bytes in 49 user files 108544 bytes available on disk 262144 bytes total memory 29744 bytes free In this case, there are 108544 bytes of unused space available on the disk, far in excess of the 12800 bytes required, and this disk can be used to store the cross reference file with room to spare. Should CHKDSK indicate insufficient space on the selected disk, repeat step 3 above until a disk with sufficient space is found. As will be discussed later, the only limitation on the size of the BASIC program that can be processed by the Cross Reference Utility is the disk space available to store the cross reference output file. Therefore, it is possible to process a BASIC program that is too large to run under the BASIC interpreter, or too complex to be compiled by the BASIC compiler. Consequently, it should be kept in mind that the successful processing of a BASIC program by the Cross Reference Utility does not necessarily mean that the program will be executionable. Cross Reference Program Disk The disk containing the Cross Reference Utility programs should be inserted in the default drive. For a two disk drive system, it is immaterial in which drive the disks containing the BASIC program file and the cross reference file are located. For a single disk drive system, the cross reference programs, the BASIC program file, and the cross reference file should all reside on the same disk, for most efficient processing. If not, it may be necessary to change disks from time to time, as processing proceeds. If this situation does occur, the program will prompt for the proper file, as required. While results will be correct, processing will be inefficient, and this mode of operation is not recommended. Therefore, once again, you should see to it that all required files, including the Cross Reference Utility programs, reside on the same disk if you are using a system with a single disk drive. 5 Temporary Data File The Cross Reference Utility is comprised of the two programs BASICREF.EXE and BASICRF1.EXE . During the course of execution of the programs, each program may chain the other. Because of the compiler options used to generate the .EXE modules, data cannot be passed between programs through the use of COMMON statements. Therefore, a temporary data file is used during the chaining of programs to pass data from one program to the other. This data file, named BA$ICREF.101 , requires about 128 bytes, and only exists while a BASICREF program is being loaded. This file will, therefore, normally not be apparent to the user, and is mentioned here only for information purposes. RUNNING THE CROSS REFERENCE PROGRAM Program Loading and Initiation The Cross Reference Utility can be loaded and run by ... 1. Loading DOS from your DOS diskette until the prompt A> appears. 2. Inserting the cross reference program diskette in drive A. 3. Typing the word: BASICREF . 4. Depressing the Enter key. The BASICREF.EXE module will be loaded and executed. Selection of Choice of Action Once the cross reference program is loaded, a title page will be printed on the screen, and the following menu will appear on the screen ... . . . . SELECT CHOICE OF ACTION(S) AS FOLLOWS . . . . FUNCTION KEY ACTION ------------ --------------------------------- F1 PROCESS BASIC SOURCE PROGRAM F2 PRINTOUT OF BASIC SOURCE PROGRAM F3 LIST CROSS REFERENCE OUTPUT ON THE SCREEN F4 LIST CROSS REFERENCE OUTPUT ON THE PRINTER F10 PERFORM SELECTED ACTION(S) OR EXIT PROGRAM 6 Function keys F1 through F4 are used to select the desired actions. Pressing any one of these keys will turn the selected action on by highlighting the function key, shown in the left hand column, with a reversed background. Pressing the function key again will turn off the selected action. An action can be alternately turned on and off by continued depression of the function key. Pressing any keys other than function keys F1 through F4 or F10 will have no effect at this point. When the desired functions have been selected, pressing the F10 function key will begin program execution, if any of the function selections F1 through F4 are activated. If none of the function selections F1 through F4 are activated when function key F10 is depressed, program execution will end and the computer will return to the DOS command mode. If any of the function selections F1 through F4 are activated, the program will ask for the name of the BASIC source program file and/or the cross reference file, and will then execute each of the selected functions in turn. The program functions are explained very briefly in the ACTION column in the menu above, and will be described at length subsequently. Before doing that, however, we will discuss the specification of BASIC program and cross reference file names. Specification of BASIC Program File Name If either action F1, processing of the BASIC source program to generate a cross reference file, or action F2, printout of the BASIC source program to obtain a a printed listing, have been selected, the program will ask for the name of the BASIC source program file. The name of the BASIC source program file may be input in upper case, lower case, or a combination of both, since the program will convert any lower case letters to upper case. The filename that is input in response to the program prompt will be treated in the same manner as BASIC would treat it. If the filename extension is omitted, the program will assume an extension of .BAS , so that a response of TESTFILE would be interpreted as TESTFILE.BAS . If there is no extension associated with the filename, the name should be entered with only the period following the name as, for example, TESTFILE. . When typing of the filename is complete, press the enter key. If no characters have been typed, the program will ask for the file name once again. The disk on the default drive, or on the drive specified in the filename, will be searched for the specified BASIC program file. If the file is not found, or if the file is null, an appropriate message will be printed on the screen, and the program will ask for the input file name once again. 7 If the file is found, the program will check to verify that the input file is an ASCII file. If the "N" option has not been selected (see discussion below on input file options) the first record will be checked to see if it starts with a number in the range of 0 to 65529. If it does not, a message will be printed on the screen that the file is not an ASCII file, and the program will return to ask for the input file name once again. If the "N" option has been selected (see discussion below on input file options) the first record will be checked to see if it starts with a number, an alphabetic character (A-Z or a-z) or a blank. If it does not, a message will be printed on the screen that the file is not an ASCII file, and the program will return to ask for the input file name once again. If the selected input file is found to be in the proper format, the program will ask for the cross reference file name (as discussed below) and/or proceed with processing. It should be noted that here, and throughout program execution, pressing the F10 key will cancel all processing and return to the main menu for reselection of program options. Input File Options There are three options available relating to the processing of the BASIC program input file. The options are invoked by entering as part of the input file name, immediately following the filename specification, a slash / or backslash \ , followed by the one-character option code or codes. The option codes may be entered in either lower or upper case, in any order, with intermediate characters if desired to separate the option codes. Only valid option codes will be processed; any invalid option codes will be ignored. The input file options are as follows... BASIC Version Option: 1 or 3 . Default value (blank): 2 The BASIC version option specifies which version of BASIC applies, for proper differentiation between reserved words and program variables. If no option is given, the default value of 2 is applicable, i.e., BASIC 2.0 reserved words are assumed. Options 1 and 3 specify BASIC versions 1.1 and 3.0, respectively. The choice of options determines whether certain variables are classified as reserved words or program variables in the cross reference listing. Assume, for example, that a BASIC program contains the following variables, among others: VALUE INPUT WINDOW ENVIRON Regardless of the option, in all versions VALUE will be considered to be a program variable while INPUT will be considered to be a reserved word. 8 If option 1 has been selected, for BASIC version 1.1, both WINDOW and ENVIRON will be considered to be program variables. If no option has been selected, so that BASIC version 2.0 applies by default, or if option 3 has been selected, for BASIC version 3.0, both WINDOW and ENVIRON will be considered to be reserved words. (It should be noted that the BASIC Version 3.0 reserved words ENVIRON , ENVIRON$ , ERDEV , ERDEV$ , IOCTL , IOCTL$ , AND SHELL are also reserved words in BASIC Version 2.0, although undocumented. Therefore, BASICREF will consider them to be reserved words in either case, and the default option and /3 option output will be identical). Similar differentiation will exist for other reserved words that exist in one version of BASIC and not in another. Obviously, if all reserved words in a program exist in all versions of BASIC, it is immaterial which option is chosen. The BASIC version option selected will apply to any listing of the cross reference file. To change options, a new cross reference file must be generated for the source program. Statement Numbers Option: N : Statement numbers optional Default value (blank): Statement numbers required Interpreter BASIC requires each statement to have a statement number, and this condition will apply if the default option is invoked. In this case, the program will generate a message that the input file is not an ASCII file if the first statement in a BASIC program is un-numbered, or a message that there is a direct statement in the file if the first statement is numbered but a subsequent statement in un-numbered. In either case, processing will terminate and the program will return to the main menu. In compiler BASIC, the statement numbers are optional, being required only for branching. If the N option is selected (the same parameter as used to invoke the option with the BASIC Compiler), the program will accept statements with or without statement numbers. In this case, the program will generate a message that the input file is not an ASCII file, and will return to the main menu, if the first character of the first statement in a BASIC program is not a number, letter or blank, but no checking for statement numbers will be done. Selection of the N option will apply to the specific run during which the option is invoked. In subsequent runs, when either listing the BASIC program or generating the cross reference file, the N option must be respecified, if applicable. This option is of particular value for large programs that may be taxing the capabilities of the BASIC compiler, and more will be said about this subsequently. 9 BASIC Program Listing Option: Default value (blank) : Formatted listing S : Unformatted listing The BASIC source program may be listed by selecting the F2 option in the main menu. All listings will be generated with top and bottom margins, page numbering and page headings. Additionally, as discussed subsequently, unless otherwise specified, some formatting of statements will be done to improve program readability. This formatting can be suppressed by the S option. In this case, each program statement will be printed as it would appear if printed with an LLIST command with an 80 column page width. Selection of the S option will only apply to the run in which it is evoked. If subsequent listings are desired with suppression of formatting, the S option must be reinvoked at that time. Details of the program listing will be discussed subsequently. Example of Input File Option Specification The following specifications will all invoke the same input file options for a BASIC program named TESTFILE.BAS , for example, in response to a program prompt for the input file name: TESTFILE.BAS/1NS TESTFILE\1/S/N TESTFILE/ N S 1 X TESTFILE.BAS//3\\s//n\\1 In the third case, the parameter X has no meaning, and will be ignored. In the fourth case, both BASIC versions 1.1 and 3.0 are specified. Where this redundancy occurs, the rightmost specification will govern, and in this case BASIC version 1.1 will apply. Specification of Cross Reference File Name If either action F1, processing of the BASIC source program to generate a cross reference file, or action F3, printing the cross reference listing on the screen, or action F4, printing the cross reference listing on the printer, have been selected, the program will ask for the name of the cross reference file. The cross reference file name may be input in upper case, lower case, or a combination of both, since the program will convert any lower case letters to upper case. 10 If action F1, processing of the BASIC source program to generate a cross reference file, has been selected, regardless of whether actions F3 or F4 have been selected, a new cross reference file will be produced, and the file name input will be the name of the new file. If action F1 has not been selected, a listing will be made of a previously produced cross reference file, and the file name input must be the name of a cross reference file that already exists on the disk. In responding to the prompt for the cross reference file name, if the filename extension is omitted, the program will assume an extension of .REF , so that a response of TESTFILE would be interpreted as TESTFILE.REF . If there is no extension associated with the filename, the name should be entered with only the period following the name as, for example, TESTFILE. . If a BASIC source program input file was specified previously in the run, as a result of choosing either the F1 or F2 options in the main menu, the program will assign a default name to the cross reference file if you do not specify a filename at this point. In this case, the extension will be changed from what it is in the BASIC source program input file (usually, but not necessarily, .BAS ) to .REF . For example, an input file named TESTFILE.BAS would result in a cross reference file named TESTFILE.REF . When typing of the filename is complete, press the enter key. If no characters have been typed, the program will either ask for the cross reference file name once again, until one is supplied, or assume a name as specified in the paragraph above. If a BASIC source program input file was specified previously in the run, as a result of choosing either the F1 or F2 options in the main menu, the program will first check to see if the cross reference filename is different from the BASIC source program filename. If the names are the same, a message will be produced to inform you that the names must be different, and the program will request the cross reference filename once again. (Note that the same name will occur if the program generates the cross reference filename and the input file is named with an extension of .REF ). The disk on the default drive, or on the drive specified in the filename, will be searched for the specified filename. If a new cross reference file is to be generated, because the F1 option was selected in the main menu, and the specified filename does not exist on the disk, the program will assign this name to the new cross reference file, and processing will proceed. However, if a new cross reference file is to be generated and a file with the specified filename already exists on the disk, the program will inform you of that fact and give you an opportunity to change the name of the cross reference file that will be generated. You should note that if you give the cross reference file the same name as that of a file already on the disk, the contents of the original file will be lost. 11 If a new cross reference file will not be generated, because the F1 option was not selected in the main menu, the named file must exist on the disk. If the file is not found, an error message will inform you of that fact, a request will be made for the cross reference filename, and the disk will be searched again until the file is found. When the file is found, the program will check to determine if the file is a complete cross reference data file. If the file is either not a cross reference data file, i.e., the file was not generated by the Cross Reference Utility, or the file is not complete, i.e., a run was aborted before the complete file was generated, an appropriate error message will be printed on the screen and the program will ask for the cross reference file name once again. When an acceptable cross reference file is found, the program will proceed with subsequent processing. As was mentioned earlier, it should be noted that here and throughout program execution, pressing the F10 key (and the enter key if the program is asking for a filename) will cancel all processing and return to the main menu for reselection of program options. Cross Reference Printout Options There are four options available relating to the printout of the cross reference listing. The options are invoked by entering as part of the cross reference file name, immediately following the filename specification, a slash / or back- slash \ , followed by the one-character option code or codes. The option codes may be entered in either lower or upper case, in any order, with intermediate characters if desired to separate the option codes. Only valid option codes will be processed; any invalid option codes will be ignored. The option codes provide for the suppression of sections of the cross reference listing printout. This may be of interest in large programs where you may not be concerned with the complete information that could be listed. The options will only be in effect during the run in which they are invoked; sections may be suppressed in one run and then printed in a subsequent run by omitting the particular option code. The cross reference printout options are as follows... S Suppress printout of statement number references R Suppress printout of reserved word references V Suppress printout of program variable references I Suppress printout of I/O related variable references The default for each is equivalent to omitting the option code, i.e., each section will be printed unless specified otherwise by the option code. Any options selected will apply to listings produced on both the screen and the printer. 12 Example of Cross Reference File Output Specification The following specifications will all invoke the same cross reference listing suppressions for a cross reference output file named TESTFILE.REF , for example, in response to a program prompt for the cross reference file name: TESTFILE.REF/RI TESTFILE\I/R TESTFILE/ R I Z TESTFILE.REF//r\\i// In all four cases, TESTFILE.REF is the cross reference output file, and the reserved word and I/O related listings are to be suppressed. In the third case, the parameter Z has no meaning, and will be ignored. If the F1 option had been selected in the main menu, to process a BASIC source program file, and neither option F3, to list the cross reference output on the screen, or option F4, to print the cross reference output on the printer, had been selected, all the parameters in the four specifications above would be ignored since cross reference listings would not be produced in that run. PROGRAM OPERATION FOR EACH ACTION SELECTED F1 - Processing of BASIC Source Program If the F1 option had been selected in the main menu, to process the BASIC source program, i.e., to generate a cross reference file for the BASIC program, processing will begin immediately after the input and output file names have been specified. Each statement in the BASIC source program will be processed in sequence. The first 79 characters of the BASIC statement will be shown at the bottom of the screen in reversed image as the statement is being processed. Since the Cross Reference Utility is not a preprocessor, the BASIC statements are not checked for errors. However, in the course of classifying variables as to type, errors involving useage of reserved words may be found and, if so, an error message will be printed on the screen. The following conditions will result in an error message being printed: 1. A reserved word appearing in a COMMON statement. 2. A reserved word appearing in a DIM statement. 3. A variable name that is a reserved word with a type declaration character ($,%,!,#) at the end. In each case, the error message will be: SYNTAX ERROR IN STATEMENT XXXXX 13 where XXXXX is the number of the BASIC statement in which the error appears. If the /N option is in effect and the statement with the error is un-numbered, the value of XXXXX will be that of the most recent statement number. If there was no previously numbered statement in the program, the value of XXXXX will be 0. While the improper use of a reserved word name will be flagged, the variable used in this way will appear in the Variable References listing output discussed subsequently. The program will also print a warning message if command type statements are encountered under certain circumstances. The warning message will be: ** CAUTION ** - STATEMENT NO. XXXXX CONTAINS A COMMAND... YYYY where XXXXX is the number of the BASIC statement in which the command type statement appears, and YYYY is the command type statement. This caution will not be printed if the command type statement is anticipated, such as the commands MERGE or DELETE in a CHAIN statement, or if the command type statement is encountered in a DATA statement. Regardless of whether a caution is issued, the command will appear in the Reserved Word References listing output discussed subsequently. Processing of the BASIC program will continue until all state- ments have been processed, or until the single-step capacity of the Cross Reference Utility has been reached. When this occurs variable references and statement number references will be sorted internally by the utility, and the data will be written onto the cross reference file. Comments at the bottom of the screen will inform you as to the program status. In most cases, the end of your BASIC program will occur before the capacity of the Cross Reference Utility is reached. In practice, BASIC programs in excess of 1000 lines of coding have been within the capacity of the Cross Reference Utility to process in one pass. However, the size of your program need not be of concern during processing. If the capacity of the utility is reached, the sorting and writing to the disk will be done in stages, with appropriate merging of the data between stages. As before, comments at the bottom of the screen will inform you as to the program status. Processing of the BASIC program in stages, if necessary, is done automatically by the Cross Reference Utility and will require no action on your part. Although messages at the bottom of the screen will show when intermediate sorting or merging is being done, at the conclusion of processing there will be no differ- ence between a cross reference file generated in a single pass and one generated in more than one pass. As mentioned earlier, programs in the order of 1000 statements may be processed in one pass. In practice, a maximum of two 14 stages has been necessary to process very large BASIC programs. In actuality, the Cross Reference Utility can process any size BASIC program, ad infinitum, in any number of stages necessary. Typically, however, the utility will process a BASIC program in one stage most of the time, and will not exceed two stages in just about any conceivable case. At the conclusion of processing of the BASIC program, the cross reference file will be written with information including the date and time. The date and time will correspond to that when processing of the BASIC program was initiated. The date and time will be established on the cross reference file, and this date and time will appear whenever the established cross refer- ence file is listed. As with anytime during the running of the cross reference utility, processing of the BASIC program may be terminated by depressing the F10 key, in which case the program will return to the main menu. If this is done during processing of the BASIC program before any data were written to the disk, the cross reference file will be null, i.e., the file will have a length of 0. If this is done after some data have been written to the disk, but before all data are written to the disk, the file will be incomplete. In either case, a subsequent attempt to list the cross reference file will result in an error message that the file is not complete. An incomplete cross reference file will also result if there is insufficient disk space for the complete file. This will not occur if sufficient space is assured on the disk, as discussed earlier. At the conclusion of normal processing of the BASIC program, the Cross Reference Utility will list the source program or the cross reference output, if the appropriate options were selected, or else return directly to the main menu. F2 - Printout of BASIC Source Program If the F2 option had been selected in the main menu, to print the BASIC source program on the printer, printout of the program will be done following the processing of the BASIC source program, if applicable. All printer output will be made assuming 8-1/2 x 11 page size with 80 column printout and 6 lines to the inch. Printing will start at the line where the print head is positioned, so that the top margin will be determined by the setting of the paper in the printer. The top and bottom margins will total 6 lines, approximately. (A BASIC statement that runs for more than one line will always have all lines appearing on the same page. The bottom margin may vary, therefore, to prevent a statement from being split between two pages). All pages will be headed with the BASIC program file name, the date and time, and the page number, in the following format (spacing is reduced here, for illustrative purposes)... 15 BASIC Program file: TESTPROG.BAS 11-07-84 01:12:23 PAGE 1 If both the F1 and F2 options were selected in the run, the date and time shown in the program listing will be the same as the date and time established in the cross reference file. If the F1 option was not selected, the date and time shown in the program listing will be the date and time the program listing was started. If formatting of the BASIC program is being suppressed, by the use of the /S option in the BASIC program input file name, each statement will be printed as it would be printed by the LLIST command. In the sample BASIC program on this disk, TESTPROG.BAS , statement number 110, for example, would be printed with the /S option as: 110 IF A < 0 THEN 60 ELSE IF A=0 THEN CLOSE:END ELSE PRINT A If the /S option has not been invoked, some formatting will be done to improve program readability. In this case, statement number 110 would appear as: 110 IF A < 0 THEN 60_ ELSE IF A=0 THEN CLOSE:END_ ELSE PRINT A An underscore at the beginning or end of a line indicates that that position was blank in the unformatted statement. Additional formatting will be performed on statements that extend over more than one eighty column line. This may be observed in any such statements that exist in a program. If the /N option was invoked, each BASIC statement will be preceded by a line number, which will correspond to the EDLIN line number for that statement. (Column headings in this case will show that this is a line number). Statement 110 above would then appear as: 11 110 IF A < 0 THEN 60_ ELSE IF A=0 THEN CLOSE:END_ ELSE PRINT A The sample (although trivial) BASIC program TESTPROG.BAS on this disk may be listed with various options to observe the differences in output. Listings produced with the F2 option in the main menu will only be generated on the printer. If a program listing on the screen is desired, the BASIC program should be loaded under BASICA and the LIST command executed, or a listing may be produced under DOS using the TYPE command or EDLIN. At the completion of the BASIC program listing, the cross reference program will return to the main menu if no other processing options have been specified, or else will perform the next program step in turn. 16 F3 - List Cross Reference Output on the Screen and F4 - List Cross Reference Output on the Printer The two options will be discussed together because they are quite similar in appearance. A listing will be produced on the screen if option F3 had been selected, and on the printer if option F4 had been selected. If both options were selected, a screen listing and a printer listing will be produced essentially simultaneously. If option F1 had been selected in the same run, then the cross reference listing produced will correspond to the BASIC source program previously processed in that run. It should be noted that if option F2 had been selected in the run, but option F1 had not been selected, the BASIC source program listed under option F2 will not necessarily correspond to the cross reference listing that is being produced. All printer output will be made assuming 8-1/2 x 11 page size with 80 column printout and 6 lines to the inch. Screen output will be 80 columns wide. All output will be listed with the same page headings that were shown under the F1 option. Individual column headings describe the contents of each output section. Since the page length is different for the screen and printer, page numbers will differ on the two output media for the same program, except for the first page. If listing is being made on the printer only, printout will be continuous, and will end only when the report is completed. If listing is being made on the screen, the listing will pause at the end of each screen page. If listing is being made on the screen and printer simultaneously, the printer listing will pause while the screen listing is in a pause state. When the screen is in a pause state, pressing the space bar once will continue the listing until the end of the next page is reached, and so on. If the space bar is pressed twice, within a period of 1/2 second, subsequent printing will be continuous, without a pause at the end of a screen page. When printing continuously, depressing the space bar once will cause the resumption of the pause at the end of a screen page. This cycle may be repeated as often as desired during the report printout. Each of the four sections of the cross reference report may be suppressed individually, as was discussed earlier, by selection of control characters in the cross reference file specification. A section suppressed in a run may be subsequently printed out by omitting the appropriate control character. Assuming the sections have not been suppressed, they will be printed in the order discussed in the sections following... 17 Listing of Statement Number References Each statement number in the program will be listed, along with the numbers of any statements that reference each. If any statement is un-numbered, it will assigned the most recent prior statement number. If there is no prior numbered statement, the un-numbered statement will be assigned a statement number of 0. The statement number reference section for the sample program of TESTPROG.BAS will be as follows... Statement Reference 10 20 30 40 50 55 55 55 60 110 70 80 90 100 110 120 130 140 150 170 160 50 170 180* 160 160 190* 160 ***** 160 *Statement number does not exist *Reference to invalid statement number If no entry appears alongside a statement number, that statement is unreferenced. As in statement number 55, a statement may reference itself. If a given statement references another more than once, the statement number is repeated under References, as is the case for references to statements 55 and 180. 18 For any references to statements that do not exist, the non- existent statement is listed followed by an asterisk, as are statements 180 and 190. A note that the statement does not exist is printed on the page on which the non-existent statement appears. For a program containing the statement RESUME 0 that does not have a statement numbered 0, the non-existent statement number message will be produced. Although the RESUME 0 statement is valid, this treatment is consistent with that of the BASIC interpreter, which would give an "Undefined line number" error if you try to renumber a program under these conditions. An ON ERROR GOTO 0 statement will be treated the same way by the program, although the BASIC interpreter would treat it differently. For any references to invalid statement numbers, such as the reference to statement number 78000 in statement 160, the last entry in the list of statement numbers will be ***** , with the referencing statement numbers being shown. A note that there is a reference to an invalid statement number is printed on the last page of the statement reference report. Programs generated with the BASIC interpreter cannot have any duplication of statement numbers, since the BASIC system will replace a statement with a subsequent statement that has the same statement number. However, a program to run under the BASIC compiler may have been generated through the use of the EDLIN utility and, conceivably, could have erroneous duplication of statement numbers. In this case, the Reference field would show the duplication of statement numbers. For example, a line that read... 75 35 DUPL 110 120 would mean that statement number 75 is referenced in statements 35, 110 and 120 and, in addition, there is another statement number 75 in the program. Statement numbers appearing in a CHAIN statement will be referenced here if the statement numbers apply to the current program, but not if they apply to the chained-to program. For example, in the statement: CHAIN MERGE "A:PROG1",1000,DELETE 2000-3000 statements 2000 and 3000 will be referenced because they apply to the current program, but statement number 1000 will not be referenced because it specifies a line in the chained-to program. Following the printout of the statement number references, a listing of reserved word references is made. 19 Listing of Reserved Word References The next section printed is a listing of all reserved words in the BASIC program and the statement numbers in which they appear. For the sample program of TESTPROG.BAS a section of this listing (not consecutive) would be... Reserved Word Reference BEEP 160 CLOSE 110 150 ERR 160 160 160 160 160 ON ERROR 50 PRINT USING 100 PRINT# 160 A word appearing more than once in a statement will have the same reference repeated, as is the case for ERR above. Reserved words that have more significance as compound words rather than as individual words are shown in the compound form, as, for example, ON ERROR and PRINT USING above. For a reference to a function, as in DEF FNXXX , the entry in the reserved word listing will be DEF FN and in the program variable listing will be FNXXX . Reserved words will be listed in this section regardless of how they are used. For example, the reserved word FOR is used differently in statement 60 than in statement 120, 130 or 140, but all four references will be listed together. Reserved words that differ from one version of BASIC to another will be classified in accordance with the applicable version of BASIC that was specified with the BASIC source program filename when the cross reference file was originally generated. The listing of reserved word references will be followed by a listing of the program variable references. Listing of Program Variable References A listing of program variable references will follow, unless the listing is suppressed. For the sample program of TESTPROG.BAS , the variable reference listing will be.. Variable Reference A 90 100 110 110 110 A(20) 40 70 70 B(2,5) 40 C(100) [$] 40 G$ 55 55 55 I 60 70 70 70 80 The first variable A is different from the second variable, which is a subscripted variable. This second variable was dimensioned as 20 in a DIM statement. Similarly B was dimensioned as 2,5 in a DIM statement and C was dimensioned as 100 in a DIM statement. A variable appearing, for example, as D() would have been dimensioned from use as a subscripted variable in a statement without a corresponding DIM statement. 20 A bracket following a variable name means that the variable is defined as other than its default type. C(100) [$] means, for example, that dimensioned variable C is defined (through the use of a DEFtype statement) as a string variable, rather than its normal default type of a single precision variable. The variable types that may appear within the brackets are: [I] Integer [D] Double precision [$] String variable Note that a single precision variable does not appear within brackets, since a variable that is not shown with a bracketed type and does not have a rightmost character that is a type delimiter (!,#,%,$), must be a single precision variable. In a similar vein, any variable that has a rightmost character that is a type delimiter will never be shown with a bracketed type, since a type delimiter always takes precedence over a DEFtype statement. A variable shown in a DEF FNXXX statement will be listed here with a variable name of FNXXX . The listing of program variable references will be followed by a listing of I/O related variable references, if any. Listing of I/O Related Variable References The last section of the cross reference listing will show I/O related variable references, if any. For the sample program of TESTPROG.BAS , for example, the listing is... I/O Related Reference "KYBD:" 140 "LPT1:" 130 "SCRN:" 120 AS 120 130 140 OUTPUT 120 130 Any device name or file name will appear here. Similarly the descriptors AS and OUTPUT , when used in an OPEN statement, will appear here. Differentiation should be noted between the names appearing above and similar names that may be reserved words or program variables. For example, KYBD: is a device name while KYBD used in a statement would be a program variable. The words AS and OUTPUT as used in an OPEN statement are neither reserved words nor variable names; the same words used in a different context would be program variables and would appear in the program variable reference section. 21 As an extreme case, consider the following line of coding: 1000 OPEN "OUTPUT" FOR OUTPUT AS #1:OUTPUT=12 This would generate three entries for OUTPUT , each with a different meaning... "OUTPUT" as a filename in the I/O Related Variable References OUTPUT as a descriptor in the I/O Related Variable References OUTPUT as a variable name in the Program Variable References Note that the word INPUT in statement 140 does not appear here. Since it is a reserved word, it appears in the reserved word reference section. The listing of I/O related variable references concludes the output of the cross reference listing. Following the end of the cross reference listing, the utility will return to the main menu. Additional processing may then be done, or an exit back to DOS may be made. COMMENTS REGARDING COMPILED BASIC PROGRAMS Having made mention of compiled BASIC programs several times, it behooves us to make some comments in this regard. This would seem to be an appropriate point. Anyone who has worked with BASIC for any period of time must surely be aware that interpreted BASIC can be excrutiatingly slow. For programs of any substance, execution time can be a severe impediment. In many cases, serious consideration should be given to converting programs from interpreted BASIC to compiled BASIC. The increase in speed can vary from a small factor to a very major improvement. As an example of the speed advantage of compiled BASIC over interpreter BASIC, we refer you to the article "Four FORTH's" in the April 1984 issue (Vol.2, No. 5) of PC World magazine, and our letter on page 26 of the September 1984 issue (Vol 2, No. 10) of the same magazine. We pointed out that the timing for a program to calculate prime numbers (The Sieve of Eratosthenes) decreased from 539 seconds under interpreted BASIC as reported in the article on FORTH, to 11 seconds when run with compiled BASIC. This difference is, admittedly, extreme but is indicative of what can happen. The discussion that follows was written when we were using the IBM BASIC compiler and EDLIN. Like many others, we have gone on to bigger and better things. We now use Microsoft's QuickBASIC exclusively, and have graduated to a full screen editor. So take what follows with a grain of salt. (Along this line, we would appreciate your letting us know if you would be interested in a cross reference utility for the QuickBASIC compiler. Please see the order form at the end of this documentation)..... 22 We typically develop a program in interpreted BASIC for its greater ease in testing and debugging. We maintain a version of the program with appropriate changes for compiler BASIC as we go along. This allows us to develop the compiled version in parallel with the interpreted version. Eventually, with a program of any substance, we run into a problem with the compiled version of the program. We start getting nasty TC messages during compilation, telling us that the program is too complex. The problem invariably is a result of too many statement numbers exceeding the capacity of the compiler. The excess of statement numbers is a carry- over from the fact that interpreter BASIC requires every BASIC program statement to be numbered. Since compiled BASIC only requires statement numbers for transfer purposes, the program can be modified to fit within compiler limitations by removing unnecessary statement numbers. An additional benefit of removal of unneeded statement numbers is that the compiler can then produce a more efficient code. We therefore have two very good reasons for doing this - the question is how? Once we remove any statement number from a line of coding we will no longer be able to read the program as a BASIC program file. However, if we save the interpreter BASIC program in ASCII format we will be able to modify the program using the Line Editor (EDLIN) under DOS. And if you refer to the statement number references listing you will see that any statement in the listing that does not have any references shown next to it can be removed as a statement number. The enhanced version of our cross reference utility has the capability to take a BASIC source program file and the corresponding cross reference file, and to automatically generate a new source program file that has all the unreferenced statement numbers removed. The enhanced version is described at the end of this documentation, and we invite you to give it a try. Until you do, we offer the following method to accomplish this. It probably seems tedious, and it is, but remember you only have to do this once for a program and you're finished. So here goes... 1. Load the BASIC program into memory with the BASIC interpreter and save the program on disk (as you have to do to run the Cross Reference Utility) with the command: SAVE "FILENAME",A . 2. Run the Cross Reference Utility for the BASIC program saved above, and obtain a printout of the statement number references. 3. List the BASIC program with the Cross Reference Utility using the /N control parameter. This will list the line number for each BASIC statement in the program. 23 4. Load the program into memory under DOS using EDLIN. (See the DOS manual for complete information on using EDLIN). This can be accomplished by the command EDLIN filespec . 5. Each statement in the statement number reference listing that does not have a reference shown can have its statement number removed. The program listing will give the line number corresponding to the EDLIN line number for each statement. These two documents can be used in combination to accomplish the statement number removal, as follows. 6. For illustrative purposes, we'll use the sample program TESTPROG.BAS on this disk. Use the cross reference utility to get the listings you need. 7. The first statement number that can be removed is statement number 10, which has no references listed. From the program listing, this statement is line number 1. 8. EDLIN displays the prompt * . Type the number 1 , following the asterisk, for line number 1, and press the enter key. 9. EDLIN will display the prompt and line number followed by contents of that line. Under it will be the prompt and line number repeated with the rest of the line blank. 10. Press the space bar twice. This will blank out the statement number in the replacement line. 11. Press the F3 key. This will duplicate the rest of the line. The new line should be identical to the original line except that the statement number will have been blanked out. 12. Press the enter key. The line will be changed in memory, and EDLIN will return to the asterisk prompt. 13. Repeat steps 8 through 12 for each additional statement number to be deleted. For the sample program, statement numbers 20 through 50, 70 through 140, and 170, corresponding to line numbers 2 through 5, 8 through 15, and 18, respectively, remain to be processed. 14. When all changes have been made, follow the asterisk prompt with the letter E and press the enter key. 15. When EDLIN is finished updating the files, the original file will be renamed with an extension of .BAK and the new file will have the filename and extension that was specified in the EDLIN command. 16. This new file may now be used as input to the BASIC compiler and to the Cross Reference Utility, in both cases with a /N parameter. 17. Subsequent changes to this new file will have to be made using EDLIN since the BASIC interpreter will no longer accept the program with missing statement numbers. 24 18. One final fly in the ointment. Your BASIC source program may be too large for EDLIN to load into memory completely. If the file is loaded completely, EDLIN will display the message End of input file *_ If only the asterisk prompt appears, the file has not been fully loaded. In that case, eventually when you enter a line number nothing will happen, and EDLIN will simply repeat the asterisk prompt on the next line. At this point you are past the end of the file in memory. Not to worry... 19. Follow the asterisk prompt with the letter W and press the enter key. This will write the changed file onto disk. 20. Follow the next asterisk prompt with the letter A and press the enter key. This will append more of the file into memory. You will then be able to continue as before, with one adjustment. 21. The line numbers for the statements in memory will, for the moment, no longer correspond to what you have in the program listing. This is because the first line in memory is now a program statement from somewhere in the middle of your program. Once more, not to worry... 22. Follow the asterisk prompt with the numeral 1 and press the enter key. Line 1 will now be displayed. (Pressing the enter key at this point will get you back to the asterisk prompt without making a change in line 1). 23. Now find the BASIC program statement in your program listing corresponding to the statement shown in line 1. This will provide you with the offset from the statement numbers in your listing, and the requested line number can be adjusted accordingly. 24. Assume, for example, that line number 1 shown by EDLIN is line number 855 in your program listing. Then to find a line number XXX in your program listing, subtract 854 (855-1) from XXX and use the result as the line number requested of EDLIN. 25. In the example above, program listing line number 855 would be requested as line number 855-854 = 1 to EDLIN, program listing line number 1000 would be requested as line number 1000-854 = 146 to EDLIN, etc. 26. Steps 19 through 25 may have to be repeated in the unlikely event that the complete program was still not processed. The procedure is complete when EDLIN displays the End of input file message. 27. At the completion of these changes, follow the asterisk prompt with the letter E and press the enter key to update the file, as mentioned above. 25 If all this seems tedious, remember... 1. You only have to do this once for a particular program. 2. You don't have to do the whole thing at one sitting. You can do part of it with EDLIN, end the session with the *E entry, and continue at another time. 3. Once you get the knack of it, it will proceed very fast since the actual procedure is quite simple. 4. It will be well worth the effort in terms of what you will be able to accomplish with the BASIC compiler. 5. You can eliminate all the tedium by purchasing the enhanced version of our cross reference utility. SOME FINAL WORDS Although some people might argue otherwise, nobody's perfect. We've tested our Cross Reference Utility thoroughly and there are no bugs that we know about. But things being what they are, there undoubtedly will be bugs showing up as the program finds more and more use. We`d appreciate it if you would let us know if you encounter any problems with the program. We promise to consider all correspondence and we'll do our best to fix any bugs that may occur. Along the same tack, we'd appreciate any comments you have regarding changes, improvements, enhancements, etc. that you would like to see in the program. Again, we'll give thorough consideration to all suggestions, and we'll try to incorporate those that appear to be of most potential interest. ENHANCED CROSS REFERENCE UTILITY We invite you to try our enhanced Cross Reference Utility. Following are the features that will probably be of greatest interest. 1. The enhanced version produces a cross reference for compiled BASIC programs in terms of line numbers, rather than statement numbers. This is of particular benefit in typical compiled programs that have mostly un-numbered statements. If you run a cross reference for a compiled program with this version of BASICREF, you will see many references to the same statement number for blocks of coding, if the program does not have many statement numbers. In the enhanced version, each line will have a unique reference. The difference is appreciable, making it much easier to locate items in a listing produced by the enhanced version. 2. The enhanced version has a routine to automatically remove unreferenced statement numbers from a BASIC program, to increase the benefit from compiled BASIC programs as discussed earlier. 26 3. The enhanced version of BASICREF can automatically remove REM statements from a source program. This will free additional memory in interpreter BASIC programs where program size is straining available memory. 4. The enhanced version of BASICREF provides a simplified procedure for unprotecting interpreter BASIC programs that have been saved to disk with the P option. If you find this version of the Cross Reference Utility useful we think you will find the enhanced version of the program even more useful. You can order the enhanced version for twenty five dollars (thirty five if you haven't sent the ten dollar contribution for the standard version), and for your money you will get ... 1. A disk containing the enhanced program. 2. Free updates, corrections, modifications, etc. to the program any time after purchase. (You'll just have to supply a blank disk, mailer and postage). 3. Free consultation by mail or phone on any aspect of the program. An order form appears on page 29 for your convenience. *** And as a special bonus, so that you won't have to pay for BASICREF twice, if you purchased this standard version from any of the several user groups and other sources (as opposed to obtaining a copy free from a friend) you can deduct five dollars from the price of the enhanced version. See the order form for details. *** 27 DISCLAIMER This program is provided "as is" without warranty of any kind, either express or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. In no event will the Author be liable for any damages, including any lost profits, lost savings or other incidental or consequential damages arising out of the use or inability to use this program, even if the Author has been advised of such damages, or for any claim by any other party. Despite this necessary legality, it should be obvious by now that we have corrected bugs in the program, and we assure you that we will continue to do so. Just let us know of any you find and we will do our best to maintain the program in an error-free condition. 28 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PROGRAM ORDER/CONTRIBUTION/INFORMATION FORM To: Excelsior Software, Inc. P. O. Box 226 New Milford, NJ 07646 Please send a copy of the enhanced version of the BASIC Cross Reference Utility. I understand that this version of BASICREF is copyrighted, and I agree not to distribute any unauthorized copies of the enhanced version. ___ BASIC Cross Reference Utility - @ $25.00 ______ Enhanced Version ___ Contribution for the standard - $10.00 ______ version of BASICREF if not previously submitted. Subtotal ______ ___ I obtained the standard version of BASICREF from the following paid source: ______________________________ I am deducting $5.00 from the purchase price ______ Total Enclosed ______ Ship To: __________________________________________ __________________________________________ __________________________________________ __________________________________________ Please pay by check or money order. For orders to New Jersey please add 6% sales tax. BASICREF requires DOS 2.0 or later. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _____ I'm not ready to order the enhanced version just now, but I do want to further the "User Supported" concept. Enclosed find a contribution of ten dollars in support of the standard version of BASICREF. I understand you will keep me informed of any corrections you make to the standard version of the program. _____ I would be interested in a version of BASICREF for the Microsoft QuickBASIC compiler. Please let me know when you have a version available. I understand that this does not obligate me in any way. Name & address: _________________________________________ _________________________________________ _________________________________________ _________________________________________ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 29
----------------------------------------------------------------------- Disk No. 358 BASICREF v1.05 ----------------------------------------------------------------------- BASICREF EXE Program to generate BASIC Cross Reference file BASICRF1 EXE Program to produce printer and/or screen listings BASICREF DOC Documentation file BASICREF TXT Documentation TESTPROG BAS Sample BASIC source file -----------------------------------------------------------------------
---------------------------------------------------------------------------- Disk No 358 BASIC Xref 1.05 v1.1 ---------------------------------------------------------------------------- This disk contains a BASIC cross reference utility. BASICREF EXE Program to generate BASIC Cross Reference file BASICRF1 EXE Program to produce printer and/or screen listings BASICREF DOC Documentation file BASICREF TXT Documentation TESTPROG BAS Sample BASIC source file PC-SIG 1030D E Duane Avenue Sunnyvale, CA 94086 Ph# (408) 730-9291 (c) Copyright 1987 PC-SIG
10 REM SAMPLE PROGRAM FOR PROCESSING BY CROSS REFERENCE UTILITY 20 ' PROGRAM DOESN'T DO MUCH OF ANYTHING 30 DEFSTR C-G 40 DIM A(20),B(2,5),C(100) 50 ON ERROR GOTO 160 55 G$=INKEY$:IF G$=" " THEN 55 ELSE IF G$="-" THEN 55 60 FOR I=1 TO 5 70 A(I)=2*I:PRINT A(I) 80 NEXT I 90 A=12! 100 PRINT USING "A=####";A 110 IF A < 0 THEN 60 ELSE IF A=0 THEN CLOSE:END ELSE PRINT A 112 IF ERL = 90 THEN 115 115 IF 100=ERL THEN 112 ELSE IF ERL <> 60 THEN END 120 OPEN "SCRN:" FOR OUTPUT AS #1 130 OPEN "LPT1:" FOR OUTPUT AS #2 140 OPEN "KYBD:" FOR INPUT AS #3 150 CLOSE:END 160 BEEP:IF ERR=12 THEN 180 ELSE IF ERR=13 THEN 190 ELSE IF ERR=14 THEN 180 ELSE IF ERR=15 THEN 78000 ELSE PRINT #1,"ERROR= ";ERR 170 GOTO 150
Volume in drive A has no label Directory of A:\ BASICREF DOC 87493 1-15-87 11:03p BASICREF EXE 74880 3-05-86 10:28p BASICREF TXT 533 1-20-87 1:44p BASICRF1 EXE 41728 1-01-80 12:14a FILES358 TXT 619 1-28-87 11:33a GO BAT 369 1-04-80 1:16a TESTPROG BAS 724 1-01-80 12:30a 7 file(s) 206346 bytes 112640 bytes free