Xref The C language cross reference utility. (c) 1991-1996 by David Archibald. Users Manual Version 3.3 _______ ____|__ | (R) --| | |------------------- | ____|__ | Association of | | |_| Shareware |__| o | Professionals -----| | |--------------------- |___|___| MEMBER Xref - C language cross-reference utility. v3.3 Table of Contents Introduction: What Xref does.......................101 Registration benefits................102 Registration and licensing information............... 103 System requirements................. 104 Installing Xref..................... 105 Program output: Global variables and constants...... 201 Summary list of functions........... 202 Verbose list of functions........... 203 Function tree....................... 204 Running Xref: Command line syntax................. 301 Module names........................ 302 x command. Suppress function tree... 303 t command. Suppress all but function tree..................... 304 s command. Suppress all but function summary.................. 305 w command. Output line length....... 306 l command. Add identifiers.......... 307 i command. Xref <...> include files. 308 n command. Do not xref "..." include files..................... 309 f command. Format verbose output.... 310 p command. Source and header search paths.......................311 o command. Functions without line-of-origins................... 312 m command. Xrefing Windows programs. 313 c command. Command file............. 314 d and e commands. Section delimit characters.........................315 r command. Read module names from a MAKE file........................316 Command line examples.................... 317 The reserved word files: RES_WORD.TXT and WIN_RES.TXT.............................. 401 What Xref ignores........................ 501 Technical support........................ 601 Page 1 of 19 Xref - C language cross-reference utility. v3.3 101 What it does. Xref is a cross-reference utility program for the C programming language. It will read any number of your C text modules and send the following to standard output: o A list of the module's global variables and constants, along with the line numbers they appear on. o A summary listing of the module's functions. o A verbose list of all the module's functions that includes: - The name of the module in which it originates. - Line of origin. - What line numbers the function is referenced on, and by which modules. - What functions, and the modules they are in, it references. - What local and global variables appear in the function. o A tree that displays all of the functions calling hierarchy. --------------------------------------------------------------- Note: To send the output to your printer or to a file, use DOS redirection (i.e. xref filename >LPT1, would send output to your printer). --------------------------------------------------------------- A cross-reference listing can be helpful for: o Debugging. For example, it can tell you: - Which functions reference another. - What global variables are used in a function. - What functions use a certain variable. o Documenting your programs. It gives you a complete listing of your variables and functions, and where they are used. o Program maintenance and modification. A cross- reference listing makes following a program's flow easier, and will show which parts of a program will be affected by, for example, changing a "define" statement. This means less time wasted deciphering a program, and fewer bugs. Xref is not C++ compatible at this time, but it will ignore C++ keywords and comments (i.e. "//"). Page 2 of 19 Xref - C language cross-reference utility. v3.3 102 Registration benefits. Registered users will receive: o The latest version of Xref (with the registration reminders removed). o The listing output limit is removed. o The printed manual. o A free Source file listing program. This Xref compatible program lists your files with line numbers, etc. o Free telephone support for three months. o Future updates, as they become available. 103 Registration and licensing information. Xref is a Shareware program, and copies of this program and it's documentation may be freely distributed. Xref and this document are copyrighted and may not be modified in any manner. You are licensed to use Xref for a thirty (30) day evaluation period. Unregistered use of Xref after this trial period is a violation of federal copyright laws. Individual copies may be licensed for $34.95 (see the REGISTER.TXT file). You may access Xref through a network, provided that site licenses have been obtained for all workstations that will be using the software (see the SITELICE.TXT file). This program is produced by a member of the Association of Shareware Professionals (ASP). ASP wants to make sure that the shareware principle works for you. If you are unable to resolve a shareware-related problem with an ASP member by contacting the member directly, ASP may be able to help. The ASP Ombudsman can help you resolve a dispute or problem with an ASP member, but does not provide technical support for members' products. Please write to the ASP Ombudsman at 545 Grover Road, Muskegon, MI 49442 or send a CompuServe message via CompuServe Mail to ASP Ombudsman 70007,3536. Page 3 of 19 Xref - C language cross-reference utility. v3.3 Invoice/Registration Form For Xref Individual Registration fee $ 34.95 Name:________________________________________________ Company:________________________________________________ Address:________________________________________________ City:________________________________________________ State, Zip:________________________________________________ E-mail address:___________________________________________ Telephone number:___________________________________________ Disk size: 5 1/4:_____ 3 1/2:_____ Either size:_____ Ordering by check: Send this form and a check to: DA Software 3717 Aldon Lane Flint, MI 48506 Ordering with CompuServe's Software Registration Service: Enter GO SWREG at the ! prompt and follow the menus. Xref's registration ID is 1394. Credit card orders only: You can order with MC, Visa, Amex, or Discover from Public (software) Library by calling 800-2424-PsL or 713-524-6394 or by FAX to 713-524-6398 or by CIS Email to 71355,470. Please refer to product number: 11372. You can also mail credit card orders to PsL at P.O.Box 35705, Houston, TX 77235-5705. THE ABOVE NUMBERS ARE FOR ORDERS ONLY. Any questions about the status of the shipment of the order, refunds, registration options, product details, technical support, volume discounts, dealer pricing, site licenses, etc, must be directed to DA Software 3717 Aldon Lane Flint, MI 48506. To insure that you get the latest version, PsL will notify us the day of your order and we will ship the product directly to you. Page 4 of 19 Xref - C language cross-reference utility. v3.3 104 System requirements. Config.sys file: Xref can use up to 60 file handles. The recommended minimum number of handles is 20. You can change the number of available handles by modifying the "files" statement in your config.sys file yourself, or allow the Xref's install program do it for you. To make the change yourself, use EDIT, or another ASCII text editor, and change the "files" statement to read "files=xx" ("xx" being the number of file handles). Memory limits: There is no minimum memory, but the number of modules you can cross-reference is dependent on the amount of memory you have. (Xref uses a DOS memory extender that can access up to four gigibytes of memory [a 80386 or higher is required].) The majority of program data is stored in a temporary file created by Xref, but some data remains in memory (mostly global variables and function names). If Xref runs out of memory it will output an error message to this effect, and terminate. (The registered version of Xref was tested by cross-referencing over 425 modules, which totaled 3.5 megabytes of C code, on a computer system with 8 megabytes of memory. No out-of-memory error was encountered.) If you do run out of memory, and you are using the "i" command (which cross-references the standard header files along with your modules), try running Xref without this command. Standard header files have a large number of global defines and variables which are not stored in the temporary file, and remain in memory. 105 Installing Xref. To install Xref, follow these steps: 1.At the DOS prompt, change to the drive on which you have the Xref package. 2.Type install and press ENTER. 3.Follow the online instructions to complete the installation. For a description of the installed files, see PACKING.LST. Page 5 of 19 Xref - C language cross-reference utility. v3.3 201 Global variables and constants. Xref assumes that anything declared outside a function's boundaries (from the function name to the function's closing brace) is a global variable or constant. The global variable and constant cross-reference section has the following format: variable name [type] {module name} what line numbers the variable appears on in this the module. Sample output: char_pnt [char] {example.c } *1 {explfile.c } 10 *11 16 28 35 42 cnt [int] {example.c } 4 11 *32 {explfile.c } *8 14 An "*" appearing before a line number indicates that the variable is to the left of an assignment operator (i.e. "=" or "\=", etc.) on that line. --------------------------------------------------------------- Note: a variable, constant, or a function is tagged as [unknown] when it's data type is not known. --------------------------------------------------------------- 202 Summary list of functions. The summary list section has the following format: {module name} : line-of-origin : function name() [type] --------------------------------------------------------------- Note: a line-of-origin of [NONE] indicates that the function was reference, but it did not appear in any of the modules cross- referenced. --------------------------------------------------------------- Sample output: {example.c } : [NONE] : getch() [int] {explfile.c } : 32 : is_it_a_comma() [int] {example.c } : 7 : main() [void] {explfile.c } : 39 : not_comma() [char] {example.c } : 25 : open_file() [FILE] Page 6 of 19 Xref - C language cross-reference utility. v3.3 203 Verbose list of functions. The verbose list of functions has the following format: --------------------------------------------------------------- Note: only those functions that have a line-of-origin are listed. --------------------------------------------------------------- ================================================================= function name [type] : {module name} : line-of-origin ================================================================= USERS: {module name} what line numbers in this module reference this function. ----------------------------------------------------------------- CALLS: {module name} function name() {module} function() ----------------------------------------------------------------- LOCAL VARIABLES: variable name [type] what line numbers in this function it appears on. ----------------------------------------------------------------- GLOBAL VARIABLES: variable name [type] what line numbers in this function it appears on. USERS are a list of the line numbers in a module that reference this function. CALLS are other functions that this function references. --------------------------------------------------------------- Note: A function name is truncated if it's length exceeds 20 characters. When this occurs, the truncated name will be followed by an ellipsis of three periods. [i.e. {filename.c }Very_very_long_na...()] --------------------------------------------------------------- LOCAL VARIABLES are any variable or constant that falls between a function's name and it's closing brace. Page 7 of 19 Xref - C language cross-reference utility. v3.3 --------------------------------------------------------------- Note: As with your C compiler, when a local and global variable have the same name, the global variable is hidden, and all line numbers that it appears on are assigned to the local variable. Also, if the local variable is declared with an unknown specifier type (for example, a typedef from a header file that was not cross-referenced) it will be processed as a global variable. --------------------------------------------------------------- GLOBAL VARIABLES are a list of any global variables or constants that appear in this function. (This section is suppressed when a function does not use any global variables.) Page 8 of 19 Xref - C language cross-reference utility. v3.3 Sample verbose output: ================================================================= main() [void] : {example.c} : 7 ================================================================= USERS: [NONE] ----------------------------------------------------------------- CALLS: {example.c } close_file() {explfile.c } not_comma() {example.c } get_input() {example.c } open_file() ----------------------------------------------------------------- LOCAL VARIABLES: argc [int] 7 *10 column [int] *13 19 file_name [char] 12 *17 file_pnt [FILE] *14 18 21 ----------------------------------------------------------------- GLOBAL VARIABLES: cnt [int] 11 ================================================================= not_comma() [char] : {explfile.c} : 39 ================================================================= USERS: {explfile.c } 13 ----------------------------------------------------------------- CALLS: [NONE] ----------------------------------------------------------------- LOCAL VARIABLES: [NONE] ----------------------------------------------------------------- GLOBAL VARIABLES: char_pnt [char] *42 --------------------------------------------------------------- Note: As with the global variables, an "*" appearing before a line number indicates that the variable is to the left of an assignment operator (i.e. "=" or "\=", etc.) on that line. --------------------------------------------------------------- Page 9 of 19 Xref - C language cross-reference utility. v3.3 204 Function tree. The function tree option generates a tree representation of all of the module's function calls (or more simply stated: who's calling who). The following is a sample tree for two modules: example.c :main example.c :|_close_file example.c :|_output_char example.c :|_get_input explfile.c :| |_not_comma explfile.c :| |_is_it_a_comma explfile.c :| |_is_it_a_comma* :| example.c :|_open_file --------------------------------------------------------------- Note: An "*" following a function name indicates that this is a recursive function call. --------------------------------------------------------------- Page 10 of 19 Xref - C language cross-reference utility. v3.3 301 The command line syntax. xref [-c filename -d -e -f \... -i -l -m -n -o -p path;path... -s -t -w -x] sourcefilespec1 [sourcefilespec2...] --------------------------------------------------------------- Note: A space must separate each command and source file name. Also, Xref is not case sensitive, so commands can be entered as upper or lower case letters. --------------------------------------------------------------- 302 Module names. Xref will accept any legal DOS file name. Standard DOS pattern checking is supported ("?" and "*"). The file names must be the last entries on the command line. --------------------------------------------------------------- Note: Also, your text modules must be free of syntax errors, otherwise the resulting output can be unpredictable. --------------------------------------------------------------- 303 x command. Suppress function tree. The "x" command suppresses output of the function tree. 304 t command. Suppress all but function tree. The "t" command suppresses output of everything except the function tree. 305 s command. Suppress all but function summary. The "s" command suppresses all output except the function summary. 306 w command. Output line length. The default line width for output is 80 characters, but with the "w" command you can set the line width to 132 characters (useful if you have a wide carriage printer). Page 11 of 19 Xref - C language cross-reference utility. v3.3 307 l command. Add identifiers. The "l" command gives you an easy way to add identifiers from your cross-referenced modules to the RES_WORD.TXT file (Xref ignores anything in a module that appears in this file. See section 401). The cross-reference listing is suppressed when this command is entered. The identifiers--function names, global variables, and defines--are displayed one at a time, and you can choose one of three options: o Press "a" to add the item to the RES_WORD.TXT file. o Press "q" to quit and stop adding to the file. o Press any other key to skip the item. 308 i command. Xref <...> include files. By default, Xref does not cross-reference the include files enclosed by "<>"s (i.e. #include ). The "i" command lets you include these files in the cross-reference. Xref keeps track of the include file names so that each file is cross-referenced only once. It will cross-reference nested include files up to 60 files deep, or to the limit of file handles in your config.sys file. 309 n command. Do not xref "..." include files. By default, Xref cross-references the include files enclosed in double quotes (i.e. #include "mydef.h"). You can prevent these files being read and cross-referenced with the "n" command. Like the "i" command, Xref keeps track of the include file names so that they are cross-referenced only once. --------------------------------------------------------------- Note: Xref can not cross-reference include files when identifiers are used in place of filenames (it does not preprocess define statements). For example: #define F_NAME "mydef.h" #include F_NAME /* won't cross-reference! */ --------------------------------------------------------------- Page 12 of 19 Xref - C language cross-reference utility. v3.3 310 f command. Format verbose output. This command allows you to format the output of the verbose function section with linefeeds and formfeeds. The format line uses C's standard newline and formfeed commands. For example: -f \n\n\n and -f \f The first example would output three newlines between each function's cross-reference listing. The second example would output a formfeed after each function, placing each function's cross-reference listing on a separate page. The only formatting commands that are recognized are the newline and formfeed commands, and there must be a space between the "f" command and the format string. No spaces may appear in the formatting string. 311 p command. Source and header search paths. Xref searches the file paths for source and header files in the following order: o The path entered with the file names or included with the header files (i.e. "c:\text\myprog.c" or "#include "). o The default directory of the default drive. o The root directory of the default drive. o The paths entered with the "p" command. The "p" command has the following syntax: -p c:\dos\;c:\prg\text\ Each path name must be separate by a ";" (no spaces). You can specify up to 20 alternate path names. 312 o command. Functions without line-of-origins. By default, Xref does not produce a listing in the verbose function section for functions that do not have a line-of- origin. The "o" command will cause all functions to be listed in the verbose section, whether they have a line-of- origin or not. Page 13 of 19 Xref - C language cross-reference utility. v3.3 313 m command. Xrefing Windows programs. This command is useful when you are cross-referencing Windows programs. The "m" command causes, Xref to load the reserved word file WIN_RES.TXT in addition to RES_WORD.TXT. Like RES_WORD.TXT, this file contains reserved and special words, but these are distinct to Windows programs. Xref will ignore these words. The "m" command also changes the output in the function tree section. Instead of starting the tree output with "main," it will begin with "WinMain" (there being no "main" in Windows' programs). Xref also keeps track of all WNDCLASS assignments to xxx.lpfnWndProc's, and treats the procedures that follow as if they were also "main"s. For example: wnd.lpfnWndProc = WinProc; "WinProc" would begin a function tree heading the same as if it were "main." Xref will do this--treat each as a "main," and begin a new tree heading--for all lpfnWndProc assignments that appear in the module(s). 314 c command. Command file. Because of DOS's command line length limit, you may have a hard time fitting all of the commands, paths, and filenames on the command line. It can also be time consuming (not to mention annoying) typing the same command line again and again. To get around these limitations, Xref will read a text file and process the commands found there as if they were typed on the command line. The command file has a limit of 200 items, and each item has a maximum length of 80 characters (Each entry separated by a space is an item. For example: "-f \f" are two items). You can pack a line by having more than one command on a line, for example: -f \f\f -x -m... or put each command on a separate line to make it more readable: -f \f\f -x -m... Xref will output an error message if a command file cannot be opened, or it exceeds 200 items. One of the advantages of putting commands in a text file, is that it allows you to have multiple command files. Multiple Page 14 of 19 Xref - C language cross-reference utility. v3.3 command files gives you the ability to have a variety of different and easy to run cross-reference configurations. For example, you could have a number of command files with different paths following the "p" command (if your include files are in one path, then use that command file. If they are in another path, then use that command file...). Or you might have another command file that outputs only the verbose listing with a formfeed after each function's listing. You can build a basic set of command files into a more complex file by chaining them together. Say you have three command files: paths1.txt, paths2.txt and ver_only.txt. You can use each of these command files by themselves, or you can combine them on the command line. For example: -c paths1.txt -c paths2.txt -c ver_only.txt You can also combine commands and command files on the command line. For example: xref -f \f -c paths1.txt -i *.c --------------------------------------------------------------- Note: Whether you are using command files or command line input, no commands may follow the module name(s). --------------------------------------------------------------- Command files can also evoke other command files. This feature lets you chain multiple command files, and get around a file's 200 item limit. Need more than 200 items? Put the commands in two files, and as the last command in the first file, have it evoke the second. For example: . . . -c paths2.txt (this is the last command in the first file, and it will evoke the second.) (When chaining files, I suggest that you always make this the last command in the file, since it is possible to exceed the 200 item limit otherwise.) Page 15 of 19 Xref - C language cross-reference utility. v3.3 315 e and d commands. Section delimit characters. By default, Xref uses a string of "=" and "-" characters to divide the cross-reference listing's different sections from one another. If, on the other hand, you would like to use different characters than these, you can change them with the "d" and "e" commands. For example: -d + will replace the "-"s in the cross-reference listing with "+"s and: -e # will replace the "="s with "#"s where ever "="s would normally appear. 316 r command. Read module names from a MAKE file. Command syntax: -r MakeFileName If you use MAKE files, Xref can read the names of the module and header files directly from them. Xref will cross- reference any file that appears in the MAKE file that has the following extensions: C, CPP or H. You can have Xref read multiple MAKE files by entering the r command more than once. For example: -r file1.mak -r file2.mak... Additional module names can also be entered at the end of the command line as before. For example: -r file.mak source1.c source2.c... 317 Command line examples. xref -i -p c:\dos\;c:\prg\text\ -w mod??.c This command line will: o Outputs a complete cross-reference listing. o -i: Cross-reference all include files. o -p: Also look for the C modules and include files in the "c:\dos\" and "c:\prg\text\" directories. o -w: Output in 132 column width. o Cross-reference any file that matches the file name pattern "mod??.c". xref -t -e * -f \f c:\prg\*.c a:\text\bigprg?.* This command line will: Page 16 of 19 Xref - C language cross-reference utility. v3.3 o -t: Only output a function tree. o -e *: Replaces all "="s with "*"s. o -f: Output a formfeed after each function in the verbose listing. o Cross-reference all files in the paths "c:\prg\*.c" and "a:\text\bigprg?.*" that match the name patterns "*.c" and "bigprg?.*". --------------------------------------------------------------- Note: running Xref with an empty command line (i.e. xref ) you will get a short description of the command switches. --------------------------------------------------------------- Page 17 of 19 Xref - C language cross-reference utility. v3.3 401 The reserved word files: RES_WORD.TXT and WIN_RES.TXT If Xref included references to C's function calls (printf, etc.) and reserved words, the output would soon become pretty long and messy. To prevent this, Xref reads two files (RES_WORD.TXT and WIN_RES.TXT), that contain a list of words it will ignore when cross-referencing the C modules. RES_WORD.TXT and WIN_RES.TXT are ASCII files that you can customize with the following limitations: o Each entry must be separated by a newline. o line length is limited to 80 characters. Comments can be added or an entry "rem"ed out by inserting an "*" in the first column (the "*" MUST be in the first column). Xref also accepts the asterisk as a wildcard character in the entries. The asterisk is used the same way with the entries, as it is used with DOS file names. Using the asterisk in this manner, you can specify entire groups of words to ignored. For example with the entries: foo* global_* any word that begins with "foo" or "global_" are ignored. The RES_WORD.TXT file included with Xref has all of C's and C++'s reserved words and function calls. It also includes the function calls and defines from Borland C++. WIN_RES.TXT contains the reserved words from WINDOWS.H and WINDOWSX.H. RES_WORD.TXT is always loaded, but the loading of WIN_RES.TXT is optional (see section 313).(The Windows' entries use about 30K of program memory, so to save memory when not cross-referencing Windows programs they were split in to their own separate file. Another added benefit is that execution time is improved by reducing the number of reserved words through which Xref has to search.) The RES_WORD.TXT and WIN_RES.TXT files must be in the same directory as Xref. --------------------------------------------------------------- Note: with the unregistered version of Xref, the RES_WORD.TXT file must be on a non-write protected disk. Xref modifies this file and it will not run if the file is write protected. --------------------------------------------------------------- Page 18 of 19 Xref - C language cross-reference utility. v3.3 501 What Xref ignores. Xref ignores: o Anything enclosed by single or double quotes. o All comments (both "/*...*/" and "//"). o Anything that matches the contents of the RES_WORD.TXT and WIN_RES.TXT files (when loaded). 601 Technical support. Telephone support will be provided to registered users for three months following registration. Unlimited support is available by e-mail and US mail. Bugs will be fixed for free for one year following registration, if possible. If not, a full refund will be offered. A written description of the bug, and a copy of your program file are essential to enable me to duplicate the problem. Support will be provided to non-registered users and users beyond the free support period on a time and materials basis. Question, problems or bug reports may be addressed to: By US mail: David Archibald DA Software 3717 Aldon Lane Flint, MI 48506 U.S.A. By telephone: 810-736-0239 By e-mail: CompuServe: 71573,616 Internet: 71573.616@compuserve.com If you have any questions please do not hesitate to contact me. The quickest response will be had in the following order: Telephone, e-mail, and US mail. If you contact me by e-mail or US mail, please include a telephone number where you can be reached in case I need further information. Page 19 of 19