Добавил:
svmaksat
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:На сортировку / 4 / 2 / Математика 3 / Ез / turboc30 / DOC / UTIL
.DOCCONTENTS ___________________________________________________________________________ Linker response files . . . . 28 HOW TO USE THIS FILE . . . . . . . 1 Sample OBJXREF reports . . . . 28 BGIOBJ: Converting graphics drivers Report by public names and fonts . . . . . . . . . . . . 2 (/RP) . . . . . . . . . . . . 29 Adding the new .OBJ files to Report by module (/RM) . . . 29 GRAPHICS.LIB . . . . . . . . . . 3 Report by reference (/RR) . . 30 Registering the drivers and Report by external references fonts . . . . . . . . . . . . . 3 (/RX) . . . . . . . . . . . . 30 An example . . . . . . . . . . 4 Report of module sizes The /F option . . . . . . . . . 5 (/RS) . . . . . . . . . . . . 31 Advanced features . . . . . . . 6 Report by class type (/RC) . 31 CPP: The preprocessor . . . . . 10 Report of unreferenced symbol CPP as a macro preprocessor . 11 names (/RU) . . . . . . . . . 32 An example . . . . . . . . . . 11 Verbose reporting (/RV) . . . 32 GREP: A text-search utility . . 12 Examples of how to use Command-line syntax . . . . . 13 OBJXREF . . . . . . . . . . . . 32 GREP options . . . . . . . . . 13 Example 1 . . . . . . . . . . 32 Order of precedence . . . . 16 Example 2 . . . . . . . . . . 33 The search string . . . . . . 16 Example 3 . . . . . . . . . . 33 Operators in regular Example 4 . . . . . . . . . . 33 expressions . . . . . . . . 17 OBJXREF error messages and File specifications . . . . . 18 warnings . . . . . . . . . . . 34 Some GREP examples . . . . . . 18 Error messages . . . . . . . 34 Example 1 . . . . . . . . . 18 Warnings . . . . . . . . . . 34 Example 2 . . . . . . . . . 19 PRJCFG: Configuration file Example 3 . . . . . . . . . 19 utility . . . . . . . . . . . . . 35 Example 4 . . . . . . . . . 20 PRJCNVT: Old projects for new . . 35 Example 5 . . . . . . . . . 20 PRJ2MAK: From project file to MAKE Example 6 . . . . . . . . . 21 file . . . . . . . . . . . . . . 36 Example 7 . . . . . . . . . 21 THELP: The Turbo Help utility . . 37 Example 8 . . . . . . . . . 22 Loading and invoking THELP . . 37 OBJXREF: The object module cross- Navigating THELP . . . . . . . 38 reference utility . . . . . . . 22 THELP options . . . . . . . . . 39 The OBJXREF command line . . . 23 /C#xx (select color) . . . . 40 The OBJXREF command-line /Fname (full path and name for options . . . . . . . . . . 24 help file) . . . . . . . . . 41 Control options . . . . . 24 /H, /?, and ? (display help Report options . . . . . . 25 screen) . . . . . . . . . . . 42 Response files . . . . . . . . 27 /Kxxyy (reassign hot key) . . 42 Free-form response files . . 27 /U (remove THELP from Project files . . . . . . . 27 memory) . . . . . . . . . . . 43 i /Wx,y,w,h (set the window size TRANCOPY: A project transfer item and location) . . . . . . . 43 utility . . . . . . . . . . . . . 52 TLIB . . . . . . . . . . . . . . 43 TRIGRAPH: A character-conversion Why use object module utility . . . . . . . . . . . . . 53 libraries? . . . . . . . . . . 44 Transfer macros . . . . . . . . . 54 The TLIB command line . . . . 44 State macros . . . . . . . 54 The operation list . . . . . 46 File name macros . . . . . 54 File and module names . . 46 Instruction macros . . . . 55 TLIB operations . . . . . 46 Running DOS commands . . . . . 59 Using response files . . . . . 48 Transfer memory settings . . . 59 Creating an extended dictionary: Turbo Editor macros . . . . . . . 60 The /E option . . . . . . . . 49 TEMC command line . . . . . . . . 60 Setting the page size: The /P Syntax . . . . . . . . . . . . . 61 option . . . . . . . . . . . . 49 Key codes . . . . . . . . . . . . 62 Advanced operation: The /C Named keys . . . . . . . . . . 63 option . . . . . . . . . . . . 50 Predefined editor commands . . . 64 Examples . . . . . . . . . . . 51 TOUCH . . . . . . . . . . . . . 51 Index 77 ii TABLES ___________________________________________________________________________ 1.1: Summary of THELP command-line 1.3: TLIB action symbols . . . . 47 options . . . . . . . . . . .39 1.4: TEMC editor commands . . . . 64 1.2: TLIB options . . . . . . . .45 iii Online document ___________________________________________________________________________ Other utilities =========================================================================== HOW TO USE THIS FILE =========================================================================== This file has a table of contents and an index that refer to "pages" in this file. If your editor has a search facility, you can use it to search for the page numbers listed in either the table of contents or in the index. The text "- n -" (where n represents the actual page number) appears at the bottom left of the "page" it refers to. Thus, at the bottom of page 1, you'll find "- 1 -" as the last item on that "page." Turbo C++ comes with a host of standalone utilities that you can use with your Turbo C++ files or other modules. Several are documented in the User's Guide; others are documented here. ------------------------------------------------------- Name Description ------------------------------------------------------- Documented in the User's Guide MAKE Standalone program manager TLINK Turbo Linker Documented in this file BGIOBJ Conversion utility for graphics drivers and fonts - 1 - CPP Preprocessor GREP File-search utility OBJXREF Object module cross-referencer PRJCFG Updates options in a project file from a configuration file, or converts a project file to a configuration file PRJCNVT Converts Turbo C project files to the Turbo C++ format PRJ2MAK Converts Turbo C++ project files to MAKE files THELP Turbo Help utility TLIB Turbo Librarian TOUCH Updates file date and time TRANCOPY Copies transfer items from one project to another TRIGRAPH Character-conversion utility TEML/TEMC Turbo Editor Macro Language and Compiler ------------------------------------------------------- This file explains what each utility is and illustrates, with code and command-line examples, how to use them. =========================================================================== BGIOBJ: Converting graphics drivers and fonts =========================================================================== You can use BGIOBJ to convert graphics driver files and character sets (stroked font files) to object (.OBJ) files. Once they're converted, you can link them into your program, making them part of the executable file. This is in addition to the graphics package's dynamic loading scheme, in which your program loads graphics drivers and character sets (stroked fonts) from disk at run time. Linking drivers and fonts directly into your program is advantageous because the executable file contains all (or most) of the drivers and/or fonts it might need, and doesn't need to access the driver and font files on disk when running. However, linking the drivers and fonts into your executable file increases its size. - 2 - To convert a driver or font file to a linkable object file, use the BGIOBJ.EXE utility. This is the simplified syntax: BGIOBJ source_file where source_file is the driver or font file to be converted to an object file. The object file created has the same file name as the source file, with the extension .OBJ; for example, EGAVGA.BGI yields EGAVGA.OBJ, SANS.CHR gives SANS.OBJ, and so on. Adding the new ======================================================= .OBJ files to GRAPHICS.LIB You should add the driver and font object modules to GRAPHICS.LIB, so the linker can locate them when it links in the graphics routines. If you don't add these new object modules to GRAPHICS.LIB, you'll have to add them to the list of files in the project (.PRJ) file, on the TCC command line, or on the TLINK command line. To add these object modules to GRAPHICS.LIB, invoke TLIB with the following command line: tlib graphics + object_file_name [+ object_file_name ...] where object_file_name is the name of the object file created by BGIOBJ.EXE (such as CGA, EGAVGA, GOTH, and so forth). The .OBJ extension is implied, so you don't need to include it. You can add several files with one command line to save time; see the example in the following section. Registering the ======================================================= drivers and fonts After adding driver and font object modules to GRAPHICS.LIB, you have to register all the drivers and fonts that you want linked in; you do this by calling registerbgidriver and registerbgifont in your program (before calling initgraph). This informs the graphics system of the presence of those files, and ensures that they will be linked in when the executable file is created by the linker. The registering routines each take one parameter; a symbolic name defined in graphics.h. Each registering - 3 - routine returns a nonnegative value if the driver or font is successfully registered. The following table shows the names to be used with registerbgidriver and registerbgifont. It is a complete list of drivers and fonts included with Turbo C++. --------------------------------------------------------------------------- Driver file registerbgidriver Font file registerbgifont (*.BGI) symbolic name (*.CHR) symbolic name --------------------------------------------------------------------------- CGA CGA_driver TRIP triplex_font EGAVGA EGAVGA_driver LITT small_font HERC Herc_driver SANS sansserif_font ATT ATT_driver GOTH gothic_font PC3270 PC3270_driver IBM8514 IBM8514_driver --------------------------------------------------------------------------- ------------------ Suppose you want to convert the files for the CGA An example graphics driver, the gothic font, and the triplex font ------------------ to object modules, then link them into your program. Here's what you do: 1. Convert the binary files to object files using BGIOBJ.EXE, as shown in the following separate com- mand lines: bgiobj cga bgiobj trip bgiobj goth This creates three files: CGA.OBJ, TRIP.OBJ, and GOTH.OBJ. 2. You can add these object files to GRAPHICS.LIB with this TLIB command line: tlib graphics +cga +trip +goth 3. If you don't add the object files to GRAPHICS.LIB, you must add the object file names CGA.OBJ, TRIP.OBJ, and GOTH.OBJ to your project list (if you are using Turbo C++'s integrated environment), or to - 4 - the TCC command line. For example, the TCC command line would look like this: TCC niftgraf graphics.lib cga.obj trip.obj goth.obj 4. You register these files in your graphics program like this: If you ever get a /* Header file declares CGA_driver, triplex_font & linker error gothic_font */ Segment exceeds #include <graphics.h> 64K after linking in some drivers /* Register and check for errors (one never and/or fonts, knows...) */ refer to the following section. if (registerbgidriver(CGA_driver) < 0) exit(1); if (registerbgifont(triplex_font) < 0) exit(1); if (registerbgifont(gothic_font) < 0) exit(1); /* ... */ initgraph(....); /* initgraph should be called after registering */ /* ... */ The /F option ======================================================= This section explains what steps to take if you get the linker error Segment exceeds 64K (or a similar error) after linking in several driver and/or font files (especially with small- and compact-model programs). By default, the files created by BGIOBJ.EXE all use the same segment (called _TEXT). This can cause problems if your program links in many drivers and/or fonts, or when you're using the small or compact memory model. To solve this problem, you can convert one or more of the drivers or fonts with the BGIOBJ /F option. This option directs BGIOBJ to use a segment name of the form filename_TEXT, so that the default segment is not overburdened by all the linked-in drivers and fonts (and, in small and compact model programs, all the pro- gram code). For example, the following two BGIOBJ com- - 5 - mand lines direct BGIOBJ to use segment names of the form EGAVGA_TEXT and SANS_TEXT. bgiobj /F egavga bgiobj /F sans When you select /F, BGIOBJ also appends F to the target object file name (EGAVGAF.OBJ, SANSF.OBJ, and so forth), and appends _far to the name that will be used with registerfarbgidriver and registerfarbgifont. (For example, EGAVGA_driver becomes EGAVGA_driver_far.) For files created with /F, you must use these far registering routines instead of the regular registerbgidriver and registerbgifont. For example, if (registerfarbgidriver(EGAVGA_driver_far) < 0) exit(1); if (registerfarbgifont(sansserif_font_far) < 0) exit(1); Advanced features ======================================================= This section explains some of BGIOBJ's advanced features, and the routines registerfarbgidriver and registerfarbgifont. Only experienced users should use these features. This is the full syntax of the BGIOBJ.EXE command line: BGIOBJ [/F] source destination public-name seg-name seg-class This table describes each component of the BGIOBJ com- mand line. ------------------------------------------------------- Component Description ------------------------------------------------------- /F or -F This option instructs BGIOBJ.EXE to use a segment name other than _TEXT (the default), and to change the public name and destination file name. (See page - 6 - 5 for a detailed discussion of /F.) source This is the driver or font file to be converted. If the file is not one of the driver/font files shipped with Turbo C++, you should specify a full file name (including extension). destination This is the name of the object file to be produced. The default destination file name is source.OBJ, or sourceF.OBJ if you use the /F option. public-name This is the name that will be used in the program in a call to registerbgidriver or registerbgifont (or their respective far versions) to link in the object module. The public name is the external name used by the linker, so it should be the name used in the program, prefixed with an underscore. If your program uses Pascal calling conventions, use only uppercase letters, and do not add an underscore. seg-name This is an optional segment name; the default is _TEXT (or filename_TEXT if /F is specified) seg-class This is an optional segment class; the default is CODE. ------------------------------------------------------- All parameters except source are optional. However, if you need to specify an optional parameter, all the parameters preceding it must also be specified. - 7 - If you choose to use your own public name(s), you have to add declaration(s) to your program, using one of the following forms: void public_name(void); /* if /F not used, */ /* default segment name used */ extern int far public_name[]; /* if /F used, or */ /* segment name not _TEXT */ In these declarations, public_name matches the public- name you used when converting with BGIOBJ. The graphics.h header file contains declarations of the default driver and font public names; if you use those default public names you don't have to declare them as just described. After these declarations, you have to register all the drivers and fonts in your program. If you don't use the /F option and don't change the default segment name, you should register drivers and fonts through registerbgidriver and registerbgifont; otherwise, use registerfarbgidriver and registerfarbgifont. Here is an example of a program that loads a font file into memory: /* Example of loading a font file into memory */ #include <graphics.h> #include <io.h> #include <fcntl.h> #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <process.h> #include <alloc.h> main() { void *gothic_fontp; /* points to font buffer in memory */ int handle; /* file handle used for I/O */ unsigned fsize; /* size of file (and buffer) */ - 8 - int errorcode; int graphdriver; int graphmode; /* open font file */ handle = open("GOTH.CHR", O_RDONLY|O_BINARY); if (handle == -1) { printf("unable to open font file 'GOTH.CHR'\n"); exit(1); } /* find out size of the file */ fsize = filelength(handle); /* allocate buffer */ gothic_fontp = malloc(fsize); if (gothic_fontp == NULL) { printf("unable to allocate memory for font file 'GOTH.CHR'\n"); exit(1); } /* read font into memory */ if (read(handle, gothic_fontp, fsize) != fsize) { printf("unable to read font file 'GOTH.CHR'\n"); exit(1); } /* close font file */ close(handle); /* register font */ if (registerfarbgifont(gothic_fontp) != GOTHIC_FONT) { printf("unable to register font file 'GOTH.CHR'\n"); exit(1); } /* detect and initialize graphix */ graphdriver = DETECT; initgraph(&graphdriver, &graphmode, ".."); errorcode = graphresult(); if (errorcode != grOk) { printf("graphics error: %s\n",grapherrormsg(errorcode)); exit(1); } settextjustify(CENTER_TEXT, CENTER_TEXT); - 9 - settextstyle(GOTHIC_FONT, HORIZ_DIR, 4); outtextxy(getmaxx()/2,getmaxy()/2, "Borland Graphics Interface (BGI)"); /* press a key to terminate */ getch(); /* shut down graphics system */ closegraph(); return(0); } =========================================================================== CPP: The preprocessor =========================================================================== CPP produces a Often, when the compiler reports an error inside a list (in a file) macro or an include file, you can get more information of a C source about what the error is if you can see the include program in which files or the results of the macro expansions. In many include files and multi-pass compilers, a separate pass performs this #define macros work, and the results of the pass can be examined. have been Since Turbo C++ uses an integrated single-pass compil- expanded. It is er, we provided CPP to supply the first-pass not needed for functionality found in other compilers. normal compil- ations of C You use CPP just as you would use TCC, the standalone programs. compiler. CPP reads the same TURBOC.CFG file for default options, and accepts the same command-line options as TCC. The TCC options that don't pertain to CPP are simply ignored by CPP. To see the list of arguments handled by CPP, type cpp at the DOS prompt. To see how those arguments work, see Chapter 5 in the Programmer's Guide. With one exception, the file names listed on the CPP command line are treated like they are in TCC, with wildcards allowed. The exception to this is that all files are treated as C source files. There is no special treatment for .OBJ, .LIB, or .ASM files. For each file processed by CPP, the output is written to a file in the current directory (or the output directory named by the -n option) with the same name as the source name but with an extension of .I. - 10 - This output file is a text file containing each line of the source file and any include files. Any preproces- sing directive lines have been removed, along with any conditional text lines excluded from the compile. Unless you use a command-line option to specify other- wise, text lines are prefixed with the file name and line number of the source or include file the line came from. Within a text line, any macros are replaced with their expansion text. Important! The resulting output of CPP cannot be compiled because of the file name and line number prefix attached to each source line. CPP as a macro ======================================================= preprocessor The -P option to CPP tells it to prefix each line with the source file name and line number. If you give it - P- (turning this option off), CPP omits this line number information. With this option turned off, CPP can be used as a macro preprocessor; the resulting .I file can then be compiled with TC or TCC. An example ======================================================= The following simple program illustrates how CPP preprocesses a file, first with -P selected, then with -P-. Source file: HELLOAJ.C #define NAME "H.R. Floyd" #define BEGIN { #define END } main() BEGIN printf("%s\n", NAME); END Command line used to invoke CPP as a preprocessor: CPP HELLOAJ.C Output: HELLOAJ.c 1: HELLOAJ.c 2: HELLOAJ.c 3: - 11 - HELLOAJ.c 4: HELLOAJ.c 5: main() HELLOAJ.c 6: { HELLOAJ.c 7: printf("%s\n","H.R. Floyd"); HELLOAJ.c 8: } Command line used to invoke CPP as a macro preprocessor: CPP -P- HELLOAJ.C Output: main() { printf("%s\n","H.R. Floyd"); } =========================================================================== GREP: A text-search utility =========================================================================== GREP (Global Regular Expression Print) is a powerful text-search program derived from the UNIX utility of the same name. GREP searches for a text pattern in one or more files or in its standard input stream. Here's a quick example of a situation where you might want to use GREP. Suppose you wanted to find out which text files in your current directory contained the string "Bob". You would issue the command grep Bob *.txt and GREP would respond with a list of the lines in each file (if any) that contained the string "Bob". Because the default for GREP is to ignore case, the strings "bob" and "BoB" would also be considered matches. You can use options to make your search case sensitive. GREP can do a lot more than match a single, fixed string. In the section that follows, you'll see how to make GREP search for any string that matches a particular pattern. - 12 - Command-line ======================================================= syntax The general command-line syntax for GREP is grep [options] searchstring [file(s) ... ] options consist of one or more letters, preceded by a hyphen (-), that let you change various aspects of GREP's behavior. searchstring gives the pattern to search for. file(s) tells GREP which files to search. (If you don't specify a file, GREP searches its standard input; this lets you use GREP with pipes and redirection.) If you find that the results of your GREP are longer than one screen, you can redirect the output to a file. For example, you could use this command GREP "Bob" *.txt >gfile which searches all files in the current directory that end with .TXT, then places the results in a file called GFILE. (You can name this file anything you like.) Then, use your word processor (or Turbo C++'s editor) to access GFILE to read the results of the search. The command GREP ? prints a brief help screen showing GREP's command-line options, special characters, and defaults. (See the description of the -u command-line option for information on how to change GREP's defaults.) GREP options ======================================================= In the command line, options are one or more single characters preceded by a hyphen (-). Each individual character is a switch that you can turn on or off: A plus symbol (+) after a character turns the option on; a hyphen (-) after the character turns the option off. The + sign is optional; for example, -r means the same thing as -r+. You can list multiple options - 13 - individually (like this: -i -d -l), or you can combine them (like this: -ild or -il, -d, and so on); it's all the same to GREP. Here are the GREP option characters and their meanings: ------------------------------------------------------------------------------ Option Meaning ------------------------------------------------------------------------------ -c Match Count only: Prints only a count of matching lines. For each file that contains at least one matching line, GREP prints the file name and a count of the number of matching lines. Matching lines are not printed. This option is off by default. -d Search subdirectories: For each file specified on the command line, GREP searches for all files that match the file specification, both in the directory specified and in all subdirectories below the specified directory. If you give a file without a path, GREP assumes the files are in the current directory. This option is off by default. -i Ignore case: GREP ignores upper/lowercase differences (case folding). When this option is on, GREP treats all letters a to z as identical to the corresponding letters A to Z in all situations. This option is on by default. -l List file names only: Prints only the name of each file containing a match. After GREP finds a match, it prints the file name and processing immediately moves on to the next file. This option is off by default. -n Line Numbers: Each matching line that GREP prints is preceded by its line number. This option is off by default. -o UNIX output format: Changes the output format of matching lines to support more easily the UNIX style of command-line piping. All lines of output are preceded by the name of the file that contained the matching line. This option is off by default. -r Regular expression search: The text defined by searchstring is treated as a regular expression instead of as a literal string. This option is on by default. This option is on by default. A regular expression is one or more occurrences of one or more characters optionally enclosed in quotes. The following symbols are treated specially: ^ start of line $ end of line - 14 - . any character \ quote next character * match zero or more + match one or more [aeiou0-9] match a, e, i, o, u, and 0 thru 9 [^aeiou0-9] match anything but a, e, i, o, u, and 0 thru 9 -u Update options: GREP will combine the options given on the command line with its default options and write these to the GREP.COM file as the new defaults. (In other words, GREP is self-configuring.) This option allows you to tailor the default option settings to your own taste. If you want to see what the defaults are in a particular copy of GREP.COM, type GREP ? at the DOS prompt. Each option on the help screen will be followed by a + or a - depending on its default setting. This option is off by default. -v Nonmatch: Prints only nonmatching lines. Only lines that do not contain the search string are considered to be nonmatching lines. This option is off by default. -w Word search: Text found that matches the regular expression is considered a match only if the character immediately preceding and following cannot be part of a word. The default word character set includes A to Z, 0 to 9, and the underscore ( _ ). This option is off by default. An alternate form of this option lets you specify the set of legal word characters. Its form is -w[set], where set is any valid regular expression set definition. If you define the set with alphabetic characters, it is automatically defined to contain both the uppercase and lowercase values for each letter in the set (regardless of how it is typed), even if the search is case-sensitive. If you use the -w option in combination with the -u option, the new set of legal characters is saved as the default set. -z Verbose: GREP prints the file name of every file searched. Each matching line is preceded by its line number. A count of matching lines in each file is given, even if the count is zero. This option is off by default. ------------------------------------------------------------------------------ - 15 - ------------------ Remember that each of GREP's options is a switch: Its Order of state reflects the way you last set it. At any given time, precedence each option can only be on or off. Each occurrence of a ------------------ given option on the command line overrides its previous definition. Given this command line, grep -r -i - -d -i -r - main( my*.c GREP runs with the -d option on, the -i option on, and the -r option off. You can install your preferred default setting for each option in GREP.COM with the -u option. For example, if you want GREP to always do a verbose search (-z on), you can install it with the following command: grep -u -z The search string ========================================================== To use GREP well, you'll need to become proficient at writing search strings. The value of searchstring defines the pattern GREP searches for. A search string can be either a regular expression or a literal string. o In a regular expression, certain characters have special meanings: They are operators that govern the search. o In a literal string, there are no operators: Each character is treated literally. You can enclose the search string in quotation marks to prevent spaces and tabs from being treated as delimiters. The text matched by the search string cannot cross line boundaries; that is, all the text necessary to match the pattern must be on a single line. A regular expression is either a single character or a set of characters enclosed in brackets. A concatenation of regular expressions is a regular expression. - 16 - ------------------ When you use the -r option (on by default), the search Operators in string is treated as a regular expression (not a literal regular expression). The following characters take on special expressions meanings: ------------------ --------------------------------------------------------------------------- Option Meaning --------------------------------------------------------------------------- ^ A circumflex at the start of the expression matches the start of a line. $ A dollar sign at the end of the expression matches the end of a line. . A period matches any character. * An expression followed by an asterisk wildcard matches zero or more occurrences of that expression. For example, in to*, the * operates on the expression o; it matches t, to, too, etc. (t followed by zero or more os), but doesn't match ta. + An expression followed by a plus sign matches one or more occurrences of that expression: to+ matches to, too, etc., but not t. [ ] A string enclosed in brackets matches any character in that string, but no others. If the first character in the string is a circumflex (^), the expression matches any character except the characters in the string. For example, [xyz] matches x, y, or z, while [^xyz] matches a and b, but not x, y, or z. You can specify a range of characters with two characters separated by a hyphen (-). These can be combined to form expressions (like [a-bd-z?], which matches the ? character and any lowercase letter except c). \ The backslash escape character tells GREP to search for the literal character that follows it. For example, \. matches a period instead of "any character." The backslash can be used to quote itself; that is, you can use \\ to indicate a literal backslash character in a GREP expression. --------------------------------------------------------------------------- - 17 - Note Four of the "special" characters ($, ., *, and +) don't have any special meaning when used within a bracketed set. In addition, the character ^ is only treated specially if it immediately follows the beginning of the set definition (immediately after the [ delimiter). Any ordinary character not mentioned in the preceding list matches that character. For example, the greater than sign, >, matches the greater than sign (>), # matches #, and so on. File ======================================================= specifications file(s) tells GREP which files (or groups of files) to search. file(s) can be an explicit file name, or a "generic" file name incorporating the DOS ? and * wildcards. In addition, you can enter a path (drive and directory information) as part of file(s). If you give file(s) without a path, GREP searches the current directory. If you don't specify any files, input to GREP must come from redirection (<) or a vertical bar (|). Some GREP examples ======================================================= The following examples show how to combine GREP's features to do different kinds of searches. They assume GREP's default settings are unchanged. ------------------ The search string here tells GREP to search for the Example 1 word main with no preceding lowercase letters ([^a-z]), ------------------ followed by zero or more occurrences of blank spaces (\ *), then a left parenthesis. Since spaces and tabs are normally considered to be command-line delimiters, you must quote them if you want to include them as part of a regular expression. In this case, the space after main is quoted with the backslash escape character. You could also accomplish this by placing the space in double quotes. Command line: grep -r [^a-z]main\ *( *.c - 18 - Matches: main(i:integer) main(i,j:integer) if (main ()) halt; if (MAIN ()) halt; Does not match: mymain() Files searched: *.C in current directory. ------------------ Because the backslash (\) and period (.) characters Example 2 usually have special meaning in path and file names, ------------------ you must place the backslash escape character immedi- ately in front of them if you want to search for them. The -i option is used here, so the search is not case sensitive. Command line: grep -ri [a-c]:\\data\.fil *.c *.inc Matches: A:\data.fil c:\Data.Fil B:\DATA.FIL Does not match: d:\data.fil a:data.fil Files searched: *.C and *.INC in current directory. ------------------ This format defines how to search for a given word. Example 3 ------------------ Command line: grep -ri [^a-z]word[^a-z] *.doc Matches: every new word must be on a new line. MY WORD! word--smallest unit of speech. In the beginning there was the WORD, and the WORD Does not match: Each file has at least 2000 words. He misspells toward as toword. - 19 - Files searched: *.DOC in the current directory. ------------------ This format defines another, even more basic single- Example 4 word search. ------------------ Command line: grep -iw word *.doc Matches: every new word must be on a new line However, MY WORD! word: smallest unit of speech which conveys In the beginning there was the WORD, and Does not match: each document contains at least 2000 words! He seems to continually misspell "toward" as "toword." Files searched: *.DOC in the current directory. ------------------ This is an example of how to search for a string with Example 5 embedded spaces. ------------------ Command line: grep "search string with spaces" *.doc *.c a:\work\myfile.* Matches: This is a search string with spaces in it. Does not match: This search string has spaces in it. Files searched: *.DOC and *.C in the current directory, and MYFILE.* in a directory called \WORK on drive A. - 20 - ------------------ This example searches for any one of the characters Example 6 " . : ? ' and , at the end of a line. ------------------ The double quote within the range is preceded by an escape character so it is treated as a normal character instead of as the ending quote for the string. Also, the $ character appears outside of the quoted string. This demonstrates how regular expressions can be concatenated to form a longer expression. Command line: grep -rd "[ ,.:?'\"]"$ \*.doc Matches: He said hi to me. Where are you going? In anticipation of a unique situation, Examples include the following: "Many men smoke, but fu man chu." Does not match: He said "Hi" to me Where are you going? I'm headed to the Files searched: *.DOC in the root directory and all its subdirectories on the current drive. ------------------ This example ignores case and just prints the names of Example 7 any files that contain at least one match. The three ------------------ command-line examples show different ways of specifying multiple options. Command line: grep -ild " the " \*.doc or grep -i -l -d " the " \*.doc or grep -il -d " the " \*.doc Matches: Anyway, this is the time we have do you think? The main reason we are Does not match: He said "Hi" to me just when I Where are you going? I'll bet you're headed - 21 - Files searched: *.DOC in the root directory and all its subdirectories on the current drive. ------------------ This example redefines the current set of legal Example 8 characters for a word as the assignment operator (=) ------------------ only, then does a word search. It matches C assignment statements, which use a single equal sign (=), but not equality tests, which use a double equal sign (==). Command line: grep -w[=] = *.c Matches: i = 5; j=5; i += j; Does not match: if (i == t) j++; /* ======================= */ Files searched: *.C in the current directory. =========================================================================== OBJXREF: The object module cross-reference utility =========================================================================== OBJXREF examines a list of object files and library files and produces reports on their contents. One type of report lists definitions of public names and references to them. The other type lists the segment sizes defined by object modules. There are two categories of public names: global variables and function names. The TEST1.C and TEST2.C files in the section "Sample OBJXREF reports" (page 28) illustrate definitions of public names and external references to them. Object modules are object (.OBJ) files produced by TC, TCC or TASM. A library (.LIB) file contains multiple object modules. An object module generated by TC is given the same name as the .C source file it was com- piled from. This is also true for TCC, unless a - 22 - different output file name is specifically indicated with the -o TCC command-line option. The OBJXREF com- ======================================================= mand line The OBJXREF command line consists of the word OBJXREF followed by a series of command-line options and a list of object and library file names, separated by a space or tab character. The syntax is as follows: OBJXREF options filename filename ... The command-line options determine the kind of reports that OBJXREF will generate and the amount of detail that OBJXREF will provide. They are discussed in more detail in the next section. Each option begins with a forward slash (/) followed by a one- or two-character option name. Object files and library files may be specified either on the command line or in a response file. On the com- mand line, file names are separated by a space or a tab. All object modules specified as .OBJ files are included in reports. Like TLINK, however, OBJXREF includes only those modules from .LIB files which contain a public name referenced by an .OBJ file or by a previously included module from a .LIB file. As a general rule, you should list all the .OBJ and .LIB files that are needed if the program is to link correctly, including the startup .OBJ file and one or more C libraries. File names may include a drive and directory path. The DOS ? and * wildcard characters may be used to identify more than one file. File names may refer to .OBJ object files or to .LIB library files. (If you don't give a file extension, the .OBJ extension is assumed.) Options and file names may occur in any order in the command line. OBJXREF reports are written to the DOS standard output. The default is the screen. The reports can be sent to a printer (as with >LPT1:) or to a file (as with >lstfile) with the DOS redirection character (>). - 23 - Entering OBJXREF with no file names or options produces a summary of available options. ------------------ OBJXREF command-line options fall into two categories: The OBJXREF control options and report options. command-line options ------------------ Control options ======================================================= Control options modify the default behavior of OBJXREF (the default is that none of these options are enabled). ------------------------------------------------------- Option Meaning ------------------------------------------------------- /I Ignore case differences in public names. Use this option if you use TLINK without the /C option (which makes case differences significant). /D Look for .OBJ files in another directory. If you want OBJXREF to look for .OBJ files in a directory other than the current one, include the directory name on the command line, prefixed with /D: OBJXREF /Ddir1 [; dir2 [; dir3]] or OBJXREF /Ddir1 [/Ddir2] [/Ddir3] OBJXREF will search each of the directories in the specified order for all object and library files. Important! If you don't use a /D option, OBJXREF will search only the current directory. If you do use a /D option, however, the current directory will not be searched unless it is included in the directory list. For example, if you wanted OBJXREF to search first the BORLAND directory - 24 - and then the current directory for files, you would enter OBJXREF /Dborland;. The period denotes the current directory. /F Include full library. All object modules in specified .LIB files are included even if they do not contain public names that are referenced by an object module being processed by OBJXREF. This provides information on the entire contents of a library file. (See example 4 in the section "OBJXREF examples.") /O Allows you to specify an output file where OBJXREF will send any reports generated. Its syntax is as follows: OBJXREF filename.obj /report option /Ooutputfilename.ext By default all output is sent to the screen. /V Verbose output. Lists names of files read and displays totals of public names, modules, segments, and classes. /Z Include zero-length segment definitions. Object modules may define a segment without allocating any space in it. Listing these zero length segment definitions normally makes the module size reports harder to use but it can be valuable if you are trying to remove all defini- tions of a segment. ------------------------------------------------------- Report options ======================================================= Report options govern what sort of report is generated, and the amount of detail that OBJXREF provides. - 25 - ------------------------------------------------------- Option Report generated -------------------------------------------------- /RC Report by class type: Module sizes ordered by class type of segment. /RM Report by module: Public names ordered by defining module. /RP Report by public names: Public names in order with defining module name. This is the /RR Report by reference: Public name defini- default. tions and references ordered by name. /RS Report of module sizes: Module sizes ordered by segment name. /RU Report of unreferenced symbol names: Unreferenced public names ordered by defining module. /RV Verbose reporting: OBJXREF produces a report of every type. /RX Report by external reference: External references ordered by referencing module name. -------------------------------------------------- Public names defined in .C files appear in reports with a leading underscore in the reports unless the -U- option was specified when the file was compiled (main appears as _main). You can limit the modules, segments, classes, or public names that OBJXREF reports on by entering the appropriate name on the command line prefixed with the /N option. For example, OBJXREF filelist /RM /NC0 tells OBJXREF to generate a report listing information only for the module named C0. - 26 - Response files ======================================================= The command line is limited by DOS to a maximum of 128 characters. If your list of options and file names will exceed this limit, you must place your file names in a response file. A response file is a text file that you make with a text editor. Since you may already have prepared a list of the files that make up your program for other Turbo C++ programs, OBJXREF recognizes several response file types. Response files are called from the command line using one of the following options. The response file name must follow the option without an intervening space (so, for example, you would type /Lresp, not /L resp). You can specify more than one response file on the com- mand line; additional .OBJ and .LIB file names can precede or follow them. ------------------ You can create a free-form response file with a text Free-form response editor. Just list the names of all .OBJ and .LIB files files needed to make your .EXE file. ------------------ Any file name To use free-form files with OBJXREF, type in each listed in the response file name on the command line, preceded by an response file @, and separate it from other command-line entries with without an exten- a space or tab: sion is assumed to be an .OBJ file. @filename @filename ... ------------------ You can also use project files of the type generated by Project files Turbo C++'s integrated environment as response files. ------------------ In the command line, precede the project file name with /P, like this: /Pfilename If the file name does not include an explicit exten- sion, a .PRJ extension is assumed. - 27 - File names in the project file with a .C extension or no extension are interpreted as specifying the corresponding .OBJ file. You need not remove file dependencies specified inside parentheses; they are ignored by OBJXREF. Note By itself, the list of files in a .PRJ file does not specify a complete program--you must also specify a startup file (C0x.OBJ) and one or more Turbo C++ library files (MATHX.LIB, EMU.LIB, and CX.LIB, for example). In addition, you may need to use the /D option to specify the directory where OBJXREF should look for your .OBJ files. ------------------ Files in TLINK response-file format can also be used by Linker response OBJXREF. A linker response file called from the command files line is preceded by /L, like so: ------------------ /Lfilename To see how to use one of these files, refer to Example 2 in the section "Examples of how to use OBJXREF." Sample OBJXREF ======================================================= reports Suppose you have two source files in your Turbo C++ directory, and want to generate OBJXREF reports on the object files compiled from them. The source files are called TEST1.C and TEST2.C, and they look like this: /* test1.c */ int i1; /* defines i1 */ extern int i2; /* refers to i2 */ static int i3; /* not a public name */ extern void look(void); /* refers to look */ void main(void) /* defines main */ { int i4; /* not a public name */ look(); /* refers to look */ } /* test2.c */ #include <process.h> extern int i1; /* refers to i1 */ - 28 - int i2; /* defines i2 */ void look(void) /* defines look */ { exit(i1); /* refers to exit... */ } /* and to i1 */ The object modules compiled from these source files are TEST1.OBJ and TEST2.OBJ. You can tell OBJXREF what kind of report to generate about these .OBJ files by entering the file names on the command line, followed by a /R and a second letter denoting report type. Note The following examples show only useful parts of the output. ------------------ A report by public names lists each of the public names Report by public defined in the object modules being reported on, names (/RP) followed by the name of the module in which it is ------------------ defined. If you enter this on the command line: OBJXREF /RP test1 test2 OBJXREF generates a report that looks like this: SYMBOL DEFINED IN _i1 TEST1 _i2 TEST2 _look TEST2 _main TEST1 ------------------ A report by module lists each object module being Report by module reported on, followed by a list of the public names (/RM) defined in it. ------------------ If you enter this on the command line: OBJXREF /RM test1 test2 OBJXREF generates a report that looks like this: MODULE: TEST1 defines the following symbols: public: _i1 public: _main - 29 - MODULE: TEST2 defines the following symbols: public: _i2 public: _look ------------------ A report by reference lists each public name with the Report by defining module in parentheses on the same line. reference (/RR) Modules that refer to this public name are listed on ------------------ following lines indented from the left margin. This is the If you enter this on the command line: default if no report option is OBJXREF /RR C0 test1 test2 CS.LIB specified. OBJXREF generates a report that looks like this: _exit (EXIT) C0 TEST2 _i1 (TEST1) TEST2 _i2 (TEST2) _look (TEST2) TEST1 _main (TEST1) C0 ------------------ A report by external references lists each module Report by external followed by a list of external references it contains. references (/RX) ------------------ If you enter this on the command line: OBJXREF /RX C0 test1 test2 CS.LIB OBJXREF generates a report that looks like this: MODULE: C0 references the following symbols: _main MODULE: TEST1 references the following symbols: _i2 _look MODULE: TEST2 references the following symbols: _exit _i1 - 30 - ------------------ A report by sizes lists segment names followed by a Report of module list of modules that define the segment. Sizes in bytes sizes (/RS) are given in decimal and hexadecimal notation. The word ------------------ uninitialized appears where no initial values are assigned to any of the symbols defined in the segment. Segments defined at absolute addresses in a .ASM file are flagged Abs to the left of the segment size. If you enter this on the command line: OBJXREF /RS test1 test2 OBJXREF generates a report that looks like this: These files were TEST1_TEXT compiled using the 6 (00006h) TEST1 large memory 6 (00006h) total model. TEST2_TEXT 10 (0000Ah) TEST2 10 (0000Ah) total _BSS 4 (00004h) TEST1, uninitialized 2 (00002h) TEST2, uninitialized 6 (00006h) total ------------------ A report by class type lists segment size definitions Report by class by segment class. The CODE class contains instructions, type (/RC) DATA class contains initialized data and BSS class ------------------ contains uninitialized data. Segments which do not have a class type will be listed under the notation No class type. If you enter this on the command line: OBJXREF /RC C0 test1 test2 CS.LIB OBJXREF generates a report that looks like this: BSS 4 (00004h) TEST1 2 (00002h) TEST2 ... 132 (00084h) total CODE 6 (00006h) TEST1 - 31 - 10 (0000Ah) TEST2 16 (00010h) total DATA 143 (0008Fh) C0 143 (0008Fh) total ------------------ A report of unreferenced symbol names lists modules Report of that define public names not referenced in other unreferenced modules. Such a symbol is either: symbol names (/RU) ------------------ o referenced only from within the defining module and does not need to be defined as a public symbol (in that case, if the module is in C, the keyword static should be added to the definition; if the module is in TASM, just remove the public definition). o never used (therefore, it can be deleted to save code or data space). If you enter this on the command line: OBJXREF /RU test1 test2 OBJXREF generates a report that looks like this: MODULE: TEST2 defines the unreferenced symbol _i2. ------------------ If you enter /RV on the command line, OBJXREF generates Verbose reporting one report of each type. (/RV) ------------------ Examples of how to ======================================================= use OBJXREF These examples assume that the application files are in the current directory of the default drive and that the Turbo C++ startup files (C0x.OBJ) and the library files are in the \TC\LIB directory. ------------------ C>OBJXREF \TC\lib\c0l test1 test2 \TC\lib\cl.lib Example 1 ------------------ In this example, the TEST1.OBJ and TEST2.OBJ files and the Turbo C++ startup file \TC\LIB\C0L.OBJ and the library file \TC\LIB\CL.LIB are specified. Since no report type is specified, the resulting report is the - 32 - default report by reference, listing public names and the modules that reference them. ------------------ C>OBJXREF /RV /Ltest1.arf Example 2 ------------------ The TLINK response file TEST1.ARF contains the same list of files as the command line in Example 1. The /RV option is specified, so a report of every type will be generated. TEST1.ARF contains \TC\lib\c0l test1 test2 test1.exe test1.map \TC\lib\cl ------------------ C>OBJXREF /RC B:c0s /Ptest1 @libs Example 3 ------------------ The Turbo C++ project file TEST1.PRJ specifies TEST1.OBJ and TEST2.OBJ. The response file @libs specifies libraries on a disk in the B drive. TEST1.PRJ contains test1 test2.c The file LIBS contains b:maths.lib b:emu.lib b:cs.lib The startup and library files specified depend on the memory model and floating point options used in compil- ation. The /RC causes a report of class type to be output. ------------------ C>OBJXREF /F /RV \TC\lib\cs.lib Example 4 ------------------ This example reports on all the modules in the Turbo C++ library file CS.LIB; OBJXREF can produce useful reports even when the files specified do not make a complete program. The /F causes all modules in CS.LIB file to be included in the report. - 33 - OBJXREF error ======================================================= messages and warnings OBJXREF generates two sorts of diagnostic messages: error messages and warnings. ------------------ Out of memory Error messages OBJXREF performs its cross referencing in RAM memory ------------------ and may run out of memory even if TLINK is able to link the same list of files successfully. When this happens, OBJXREF aborts. Remove memory resident programs to get more space, or add more RAM. ------------------ WARNING: Unable to open input file <filename> Warnings The input file filename could not be located or opened. ------------------ OBJXREF proceeds to the next file. WARNING: Unknown option - <option> The option name option is not recognized by OBJXREF. OBJXREF ignores the option. WARNING: Unresolved symbol <symbol> in module <module> The public name symbol referenced in module module is not defined in any of the .OBJ or .LIB files specified. OBJXREF flags the symbol in any reports it generates as being referenced but not defined. WARNING: Invalid file specification <filename> Some part of the file name filename is invalid. OBJXREF proceeds to the next file. WARNING: No files matching <filename> The file named filename listed on the command line or in a response file could not be located or opened. OBJXREF skips to the next file. WARNING: Symbol <symbol> defined in <module1> duplicated in <module2> Public name symbol is defined in modules module1 and module2. OBJXREF ignores the second definition. - 34 - =========================================================================== PRJCFG: Configuration file utility =========================================================================== Creates the command-line configuration file from a project file. You can also use it to create or update a project file from a configuration file. The command-line compiler looks for a default configuration file named TURBOC.CFG, but you can specify a different file with +pathname option. To use PRJCFG to create a TCC configuration file from a project file, you would type the following: PRJCFG ProjFile.PRJ ConfigFile.CFG To make a project file from a configuration file, type PRJCFG ConfigFile.CFG ProjFile.PRJ =========================================================================== PRJCNVT: Old projects for new =========================================================================== This utility converts Turbo C 1.0, 1.5, and 2.0 project files to Turbo C++ project files. The syntax for it is PRJCNVT infile[.PRJ] [outfile[.PRJ]] or PRJCNVT infile[.TC] [outfile[.PRJ]] If you specify a configuration file as input, it must have a project file defined. The compiler options in the .CFG file and the dependencies in the Turbo C 2.0 .PRJ file will be placed into the corresponding Turbo C++ .PRJ file. If you specify a project file as input, only dependencies information will be placed into the Turbo C++ .PRJ file. All compiler options will remain default. - 35 - If you don't provide an extension, .TC is assumed. If PRJCVNT can't find a .TC file, it looks for a .PRJ file. The default name of the output file is the base name of the input file with the extension .PRJ. For example, STARS.TC will turn into STARS.PRJ. If the input and the output name are the same, the old file will be renamed to a .BAK file. =========================================================================== PRJ2MAK: From project file to MAKE file =========================================================================== This utility converts a .PRJ file to a .MAK file (containing all relevant switches and settings) for use with the MAKE utility. These files can be re-used without accessing the IDE. The syntax for PRJ2MAK is PRJ2MAK projectfile[.PRJ] [makefile[.MAK] [config[.CFG]]] The extension for the project file name is assumed to be .PRJ unless you specify otherwise. The default name for the new MAKE file is the base file name of the .PRJ file with the extension .MAK. The default name for the new .CFG file is the base file name of the .MAK file with the extension .CFG. To change the names of the makefile and configuration files, just specify different names on the command line. Examples of valid execution: PRJ2MAK MYPROJ.PRJ MAKEFILE.MAK TURBOC.CFG This execution creates a makefile called MAKEFILE.MAK with a configuration file called TURBOC.CFG. PRJ2MAK MYPROJ.PRJ MAKEFILE.MAK This execution creates a makefile called MAKEFILE.MAK with a configuration file called MYPROJ.CFG. PRJ2MAK MYPROJ - 36 - This execution creates a makefile called MYPROJ.MAK and a configuration file called MYPROJ.CFG. The makefile that PRJ2MAK creates will set up a redirection file for the linker response file and for the .CFG file. They will be created when you run the makefile that was generated. The linker response file is a temporary file and will be deleted. The .CFG file will be left as a file on disk. PRJ2MAK places options that meet the following requirements into the .CFG file: Those that are not default to the Turbo C++ command-line compiler and have been selected in the project file. PRJ2MAK will use the library search path as a command link option to TLINK, so that TLINK can search that path for the startup module and for libraries. =========================================================================== THELP: The Turbo Help utility =========================================================================== THELP.COM is a RAM-resident (TSR) utility that accesses Turbo C++'s online Help information for you when you aren't using the IDE (that is, if you are using an editor other than the one in the IDE, or you are using the command-line version of Turbo C++, or if you are using another product, such as Turbo Debugger). THELP requires about 21K bytes of memory. Loading and ======================================================= invoking THELP - 37 - You need to first load THELP in order to use it from within another program (or from the command line). Make sure that TCHELP.TCH, the text file containing the Turbo C++ online help information, is in the current Warning! If you directory. (If you want to keep TCHELP.TCH in another are going to have directory, THELP has a special /F command-line option THELP resident in that will enable THELP to find it; the INSTALL program memory at the same inserts the correct path information into THELP.) time as SideKick 1.x or SideKick To load THELP, just type Plus, make sure you load THELP THELP [options] before you load SideKick. at the DOS command line before you go into your application. This needs to be done only once, when you first boot up. Once you are in the other application, you can activate THELP at any time. Just position the cursor under the item you want information on, then press the THELP hot key. The default hot key is 5 on the numeric keypad (scan code 4ch, shift state 00h). Navigating THELP ======================================================= Use the following keys to navigate through the Help screens that THELP displays on your monitor: ---------------------------------------------------------------------- Key What it does ---------------------------------------------------------------------- Up Down Left Right Move the highlight from keyword to keyword within the current Help screen. Shift-Arrow Moves the cursor while marking a block. Home and End Move to the beginning and end of a line, respectively. Tab and Shift-Tab Moves to the next or previous keyword. - 38 - PgUp/PgDn Moves from screen to screen if additional screens are available. Enter Selects a Help entry for the item highlighted in the current Help screen. Esc Ends Help session. F1 Displays the Help Table of Contents screen. Shift-F1 Displays the Help Index. You can search for a specific keyword incrementally. For example, you can find printf by typing p r i. With each letter you type, the list jumps to the keyword that starts with p, then to pr, then to pri, and so on. Alt-F1 Pressing Alt-F1 repeatedly takes you in reverse order through the last 20 screens you have reviewed. Alt-F Selects a new Help file (if you have specified more than one help file in the THELP.CFG file or on the command-line). Ctrl-P Pastes the marked block or example text into your current application. ---------------------------------------------------------------------- THELP options ======================================================= Here is a summary of the THELP command-line options. If you use more than one option, you must separate them with spaces. The command-line options can be placed in a configuration file (called THELP.CFG) for convenience. THELP.CFG must be located in the same directory as THELP.COM and each option in the configuration file must be placed on its own line and begin in the leftmost column. ------------------------------------------------------- Summary of THELP Option Specifies command-line ------------------------------------------------------- options - 39 - Table 1.1: Summary of THELP command-line options (continued)____________________________________________ /C#xx Select color: # = color number xx = hex color values /Fname Full path and file name of Help file /H, /?, ? Display help screen /Kxxyy Change hot key: xx = shift state (hex) yy = scan code (hex) /U Remove THELP from memory /Wx,y,w,h Sets the window size and location. ------------------------------------------------------- ------------------ This option lets you customize the background and /C#xx (select foreground colors of various elements in a help screen. color) The /C option is followed by the number of the color ------------------ you want and the hex color values for background and foreground, respectively. There are twelve possible colors, numbered as follows: ------------------------------------------------------- Number Element ------------------------------------------------------- 0 Color border attribute 1 Monochrome border attribute 2 Color text attribute 3 Monochrome text attribute 4 Color keyword attribute 5 Monochrome keyword attribute 6 Color selected keyword word attribute 7 Monochrome selected keyword word attribute 8 Color example text attribute 9 Monochrome example text attribute A Color marked block attribute B Monochrome marked block attribute - 40 - ------------------------------------------------------- The color values for a standard IBM-compatible color display are as follows: ------------------------------------------------------- First digit (background) Second digit (foreground) ------------------------------------------------------- 0 Black 0 Black 1 Blue 1 Blue 2 Green 2 Green 3 Cyan 3 Cyan 4 Red 4 Red 5 Magenta 5 Magenta 6 Brown 6 Brown 7 Gray 7 Gray 8 Intense black ORing the color value 9 Intense blue with 0x80 produces a A Intense green blinking color unless B Intense cyan blinking has been C Intense red disabled. D Intense magenta E Intense brown (yellow) F Intense gray (white) ------------------------------------------------------- On monochrome monitors, the attribute values can differ widely, so you may need to experiment. ------------------ The name that follows the /F option should be the full /Fname (full path drive/directory path name of the help file to use; for and name for help example, file) ------------------ THELP /FC:\TC\OWLHELP.TCH THELP /FC:\TC\TCHELP.TCH You can specify multiple help files on the command-line or in the THELP.CFG file. THELP supports up to eight help files. - 41 - ------------------ Any of these options displays a summary of THELP's com- /H, /?, and ? mand-line options. (display help screen) ------------------ This option allows you to reassign a function to a new /Kxxyy (reassign hot key. The option must be followed by the shift state hot key) (xx) and the scan code (yy) of the new key. Virtually ------------------ any shift state/scan code combination may be selected. Here's a quick summary of some common shift states and scan codes: ------------------------------------------------------- Shift states (can be OR'ed together): Right Shift 01h Left Shift 02h Ctrl 04h Alt 08h Scan codes: A 1eh N 31h 0 0bh F1 3bh B 30h O 18h 1 02h F2 3ch C 2eh P 19h 2 03h F3 3dh D 20h Q 10h 3 04h F4 3eh E 12h R 13h 4 05h F5 3fh F 21h S 1fh 5 06h F6 40h G 22h T 14h 6 07h F7 41h H 23h U 16h 7 08h F8 42h I 17h V 2fh 8 09h F9 43h J 24h W 11h 9 0ah F10 44h K 25h X 2dh L 26h Y 15h M 32h Z 2ch Enhanced keyboards only (may not work with all computers or keyboards): F11 57h F12 58h ------------------------------------------------------- - 42 - ------------------ This option removes THELP from memory. If other TSRs /U (remove THELP have been loaded after THELP, make sure to remove them from memory) before removing THELP. ------------------ ------------------ Where: /Wx,y,w,h (set the x = window column location (zero based) window size and y = window row location location) w = window width ------------------ h = window height For example, to create a full-screen help window use: /W0,0,80,25 =========================================================================== TLIB =========================================================================== TLIB is a utility that manages libraries of individual .OBJ (object module) files. A library is a convenient tool for dealing with a collection of object modules as a single unit. When it modifies The libraries included with Turbo C++ were built with an existing TLIB. You can use TLIB to build your own libraries, or library, TLIB to modify the Turbo C++ libraries, your own libraries, always creates a libraries furnished by other programmers, or commercial copy of the libraries you've purchased. You can use TLIB to original library with a .BAK exten- o create a new library from a group of object modules sion. Better safe than sorry! o add object modules or other libraries to an existing library o remove object modules from an existing library o replace object modules from an existing library o extract object modules from an existing library o list the contents of a new or existing library - 43 - See the section on TLIB can also create (and include in the library file) the /E option an Extended Dictionary, which may be used to speed up (page 49) for linking. details. Although TLIB is not essential for creating executable programs with Turbo C++, it is a useful programming productivity tool. You will find TLIB indispensable for large development projects. If you work with object module libraries developed by others, you can use TLIB to maintain those libraries when necessary. Why use object ======================================================= module libraries? When you program in C and C++, you often create a collection of useful functions and classes. Because of C and C++'s modularity, you are likely to split those functions into many separately compiled source files. You use only a subset of functions from the entire collection in any particular program. It can become quite tedious, however, to figure out exactly which files you are using. On the other hand, if you always include all the source files, your program becomes extremely large and unwieldy. An object module library solves the problem of managing a collection of functions and classes. When you link your program with a library, the linker scans the library and automatically selects only those modules needed for the current program. The TLIB command ======================================================= line To get a summary The TLIB command line takes the following general form, of TLIB's usage, where items listed in square brackets ([like this]) are just type TLIB and optional: press Enter. tlib [/C] [/E] [/Psize] libname [operations] [, listfile] - 44 - Table 1.2: TLIB options --------------------------------------------------------------------------- Option Description --------------------------------------------------------------------------- libname The DOS path name of the library you want to create or manage. Every TLIB command must be given a libname. Wildcards are not allowed. TLIB assumes an extension of .LIB if none is given. We recommend that you do not use an exten- sion other than .LIB, since both TCC and TC's project-make facility require the .LIB extension in order to recognize library files. Note: If the named library does not exist and there are add operations, TLIB creates the library. /C The case-sensitive flag. This option is not normally used; see page 50 for a detailed explanation. /E Creates Extended Dictionary; see page 49 for a detailed explanation. /Psize Sets the library page size to size; see page 49 for a detailed explanation. operations The list of operations TLIB performs. Operations may appear in any order. If you only want to examine the contents of the library, don't give any operations. listfile The name of the file listing library contents. The listfile name (if given) must be preceded by a comma. No listing is produced if you don't give a file name. The listing is an alphabetical list of each module. The entry for each module contains an alphabetical list of each public symbol defined in that module. The default extension for the listfile is .LST. You can direct the listing to the screen by using the listfile name CON, or to the printer by using the name PRN. --------------------------------------------------------------------------- This section summarizes each of these command-line com- ponents; the following sections provide details about using TLIB. For TLIB examples, refer to the "Examples" section on page 51. - 45 - ------------------ The operation list describes what actions you want TLIB The operation list to do. It consists of a sequence of operations given ------------------ one after the other. Each operation consists of a one- or two-character action symbol followed by a file or module name. You can put whitespace around either the action symbol or the file or module name, but not in the middle of a two-character action or in a name. You can put as many operations as you like on the com- mand line, up to DOS's COMMAND.COM-imposed line-length limit of 127 characters. The order of the operations is not important. TLIB always applies the operations in a specific order: 1. All extract operations are done first. 2. All remove operations are done next. 3. All add operations are done last. You can replace a module by first removing it, then adding the replacement module. File and module names ======================================================= TLIB finds the name of a module by taking the given file name and stripping any drive, path, and extension information from it. (Typically, drive, path, and extension are not given.) Note that TLIB always assumes reasonable defaults. For example, to add a module that has an .OBJ extension from the current directory, you only need to supply the module name, not the path and .OBJ extension. Wildcards are never allowed in file or module names. TLIB operations ======================================================= TLIB recognizes three action symbols (*, +, *), which you can use singly or combined in pairs for a total of five distinct operations. The order of the characters - 46 - is not important for operations that use a pair of characters. The action symbols and what they do are listed here: ------------------------------------------------------- TLIB action Action symbols symbol Name Description ------------------------------------------------------- To create a + Add TLIB adds the named file to library, add the library. If the file has modules to a no extension given, TLIB library that does assumes an extension of .OBJ. not yet exist. If the file is itself a library (with a .LIB exten- sion), then the operation adds all of the modules in the named library to the target library. If a module being added already exists, TLIB displays a message and does not add the new module. - Remove TLIB removes the named module from the library. If the module does not exist in the library, TLIB displays a message. A remove operation only needs a module name. TLIB allows you to enter a full path name with drive and extension included, but ignores everything except the module name. * Extract TLIB creates the named file by copying the corresponding module from the library to the file. If the module does not exist, TLIB displays a message and does not create a file. If the named file already exists, it is overwritten. - 47 - Table 1.3: TLIB action symbols (continued)_____________ You can't directly -* Extract & TLIB copies the named module rename modules in *- Remove to the corresponding file name a library. To and then removes it from the rename a module, library. This is just extract and remove shorthand for an extract it, rename the followed by a remove file just created, operation. then add it back into the library. -+ Replace TLIB replaces the named module +- with the corresponding file. This is just shorthand for a remove followed by an add operation. ------------------------------------------------------- Using response ======================================================= files When you are dealing with a large number of operations, or if you find yourself repeating certain sets of operations over and over, you will probably want to start using response files. A response file is simply an ASCII text file (which can be created with the Turbo C++ editor) that contains all or part of a TLIB com- mand. Using response files, you can build TLIB commands larger than would fit on one DOS command line. See "Examples" for To use a response file pathname, specify @pathname at a sample response any position on the TLIB command line. file and a TLIB command line o More than one line of text can make up a response incorporating it. file; you use the "and" character (&) at the end of a line to indicate that another line follows. o You don't need to put the entire TLIB command in the response file; the file can provide a portion of the TLIB command line, and you can type in the rest. o You can use more than one response file in a single TLIB command line. - 48 - Creating an ======================================================= extended dictionary: The /E To speed up linking with large library files (such as option the standard Cx.LIB library), you can direct TLIB to create an extended dictionary and append it to the library file. This dictionary contains, in a very compact form, information that is not included in the standard library dictionary. This information enables TLINK to process library files faster. To create an extended dictionary for a library that is being modified, use the /E option when you invoke TLIB to add, remove, or replace modules in the library. To create an extended dictionary for an existing library that you don't want to modify, use the /E option and ask TLIB to remove a nonexistent module from the library. TLIB will display a warning that the specified module was not found in the library, but it will also create an extended dictionary for the specified library. For example, if you enter tlib /E mylib -bogus TLINK will ignore the debugging information in a library that has an extended dictionary, unless the /e option is used on the TLINK command line. Setting the page ======================================================= size: The /P option Every DOS library file contains a dictionary (which appears at the end of the .LIB file, following all of the object modules). For each module in the library, this dictionary contains a 16-bit address of that particular module within the .LIB file; this address is given in terms of the library page size (it defaults to 16 bytes). The library page size determines the maximum combined size of all object modules in the library--it cannot exceed 65,536 pages. The default (and minimum) page size of 16 bytes allows a library of about 1 MB in size. To create a larger library, the page size must be increased using the /P option; the page size must be a - 49 - power of 2, and it may not be smaller than 16 or larger than 32,768. All modules in the library must start on a page boundary. For example, in a library with a page size of 32 (the lowest possible page size higher than the default 16), on the average 16 bytes will be lost per object module in padding. If you attempt to create a library that is too large for the given page size, TLIB will issue an error message and suggest that you use /P with the next available higher page size. Advanced ======================================================= operation: The /C option When you add a module to a library, TLIB maintains a dictionary of all public symbols defined in the modules of the library. All symbols in the library must be distinct. If you try to add a module to the library that would cause a duplicate symbol, TLIB displays a message and won't add the module. Normally, when TLIB checks for duplicate symbols in the library, uppercase and lowercase letters are not considered as distinct. For example, the symbols lookup and LOOKUP are treated as duplicates. Since C and C++ do treat uppercase and lowercase letters as distinct, use the /C option to add a module to a library that includes a symbol differing only in case from one already in the library. The /C option tells TLIB to accept a module with symbols in it that differ only in case from symbols already in the library. If you want to use It may seem odd that, without the /C option, TLIB the library with rejects symbols that differ only in case, especially other linkers (or since C and C++ are case-sensitive languages. The allow other people reason is that some linkers fail to distinguish between to use the library symbols in a library that differ only in case. Such with other linkers, for example, will treat stars, Stars, and linkers), for your STARS as the same identifier. TLINK, on the other hand, own protection you has no problem distinguishing uppercase and lowercase should not use the symbols, and it will properly accept a library contain- /C option. ing symbols that differ only in case. In this example, then, Turbo C++ would treat stars, Stars, and STARS as three separate identifiers. As long as you use the library only with TLINK, you can use the TLIB /C option without any problems. - 50 - Examples ======================================================= Here are some simple examples demonstrating the different things you can do with TLIB. 1. To create a library named MYLIB.LIB with modules X.OBJ, Y.OBJ, and Z.OBJ, type tlib mylib +x +y +z 2. To create a library as in #1 and get a listing in MYLIB.LST too, type tlib mylib +x +y +z, mylib.lst 3. To get a listing in CS.LST of an existing library CS.LIB, type tlib cs, cs.lst 4. To replace module X.OBJ with a new copy, add A.OBJ and delete Z.OBJ from MYLIB.LIB, type tlib mylib -+x +a -z 5. To extract module Y.OBJ from MYLIB.LIB and get a listing in MYLIB.LST, type tlib mylib *y, mylib.lst 6. To create a new library named ALPHA, with modules A.OBJ, B.OBJ, ..., G.OBJ using a response file: First create a text file, ALPHA.RSP, with +a.obj +b.obj +c.obj & +d.obj +e.obj +f.obj & +g.obj Then use the TLIB command, which produces a listing file named ALPHA.LST: tlib alpha @alpha.rsp, alpha.lst =========================================================================== TOUCH =========================================================================== There are times when you want to force a particular target file to be recompiled or rebuilt, even though no changes have been made to its sources. One way to do - 51 - this is to use the TOUCH utility. TOUCH changes the date and time of one or more files to the current date and time, making it "newer" than the files that depend on it. You can force MAKE to rebuild a target file by touching one of the files that target depends on. To touch a file (or files), type You can use the touch filename [filename ...] DOS wildcards * and ? with TOUCH. at the DOS prompt. TOUCH will then update the file's creation date(s). Once you do this, you can invoke MAKE to rebuild the touched target file(s). Important! Before you use the TOUCH utility, it's vitally important to set your system's internal clock to the proper date and time. If you're using an IBM PC, XT, or compatible that doesn't have a battery-powered clock, don't forget to set the time and date using the DOS TIME and DATE commands. Failing to do this will keep both TOUCH and MAKE from working properly. =========================================================================== TRANCOPY: A project transfer item utility =========================================================================== TRANCOPY copies transfer items from one project to another. The syntax is TRANCOPY [-r] Source[.PRJ] Dest[.PRJ] TRANCOPY merges the transfer items in Source with the transfer in Dest; Dest gets the new transfer items. If the -r option is used, the set of the transfer items in Dest is replaced by the set of transfer items in Source. - 52 - =========================================================================== TRIGRAPH: A character-conversion utility =========================================================================== Trigraphs are three-character sequences that replace certain characters used in the C language that are not available on some keyboards. Translating trigraphs in the compiler would slow compilation down considerably, so Turbo C++ provides a filter named TRIGRAPH.EXE to handle trigraph sequences when you need to. The syntax for invoking this program is as follows: TRIGRAPH [-u] file(s) [file(s) ...] The following table shows the trigraph sequences that TRIGRAPH.EXE recognizes: ------------------------------------------------------- Trigraph Character ------------------------------------------------------- ??= # ??( [ ??/ \ ??) ] ??' ^ ??< { ??! | ??> } ??- ~ ------------------------------------------------------- TRIGRAPH.EXE works in two directions: It can convert all trigraphs to their single-character representation, and it can convert single characters to their trigraph representation. Ordinarily, TRIGRAPH.EXE converts trigraphs to single characters. You can specify the inverse conversion with the -u (UNDO) command-line option, which must come before any file names on the command line. TRIGRAPH.EXE takes any number of file specifiers, including wildcards, on the command line. For each file specified, it creates a backup copy of the file with the original file name and an extension of .BAK, and - 53 - creates a new file with the original file name and the appropriate conversions performed. For example, trigraph test.c test1.c removes all trigraphs from the two files TEST.C and TEST1.C, creating backup files TEST.BAK and TEST1.BAK. As another example, the following command inserts trigraphs into all the files with the extension .C, and makes backup copies of all those files, giving them the extension .BAK. trigraph -u *.c =========================================================================== Transfer macros =========================================================================== The IDE recognizes certain strings of characters called transfer macros in the parameter string of the Modify/New Transfer Item dialog box. There are three kinds of macros: state, file name, and instruction. The transfer State macros macros are listed ======================================================= alphabetically and described in more State macros are expanded according to the state of the detail starting on IDE. The state macros are page 55. $COL $ERRNAME $CONFIG $INC $DEF $LIB $ERRCOL $LINE $ERRLINE $PRJNAME File name macros ======================================================= File name macros are actually functions that take file names as arguments and return various parts of the file name. They allow you to build up new file name specifications from existing file names. For example, you can pass TDUMP a macro like this: - 54 - $DIR($EXENAME)$NAME($EDNAME).OBJ This macro gives you the output directory path, the file name only in the active Edit window, and an explicit extension. If your current directory is C:\WORK, your output directory is TEST, and the active editor contains MYPROG.C, then TDUMP receives the parameter C:\WORK\TEST\MYPROG.OBJ The file name macros are $DIR $EXT() $DRIVE() $NAME() $EDNAME $OUTNAME $EXENAME Instruction macros ======================================================= Instruction macros tell the IDE to perform some action or make some setting. The instruction macros are $CAP EDIT $PROMPT $CAP MSG(filter) $SAVE ALL $DEP() $SAVE CUR $MEM(kb to reserve) $SAVE PROMPT $NOSWAP $TASM $CAP EDIT: This macro tells the IDE to redirect program output into a standard file. After the transfer program is completed, a new editor window is created, and the captured output is displayed. The captured output resides in a special Edit window titled Transfer Output. For $CAP EDIT to work correctly, the transfer program must write to DOS standard output. - 55 - You can use any $CAP MSG(filter): Captures program output into the program that has Message window, using filter as a DOS filter for line-oriented converting program output into Message window format. messages output (file and line We've provided several filters for this macro: number) with this GREP2MSG.EXE for GREP and TASM2MSG.EXE for Turbo macro. Assembler (TASM). We've included the source code for these filters so you can write your own filters for other transfer programs you install. $COL: Column number of current editor. If the active window is not an editor, then the string is set to 0. $CONFIG: Complete file name of the current configuration file. This is a null string if no configuration file is defined. This macro is intended for use by programs that access or modify the configuration file. Besides providing the name of the file, this macro causes the current configuration to be saved (if modified) and reloaded when control returns to the IDE. TEML is a Pascal- Use this macro with the Turbo Editor Macro Language like language that (TEML) compiler. With it, you can edit the TEML script has many built-in file in an editor and then invoke the Turbo Editor primitive editor Macro Compiler (TEMC) to process the script. When the commands. Its use configuration file is reloaded, your new or modified is documented in editor commands will be in effect. When installing TEMC this file. as a transfer item, use the following command line: $EDNAME $CONFIG This assumes the current Edit window contains the TEML script file to be processed. $DEF: Pulls in the contents of the Options|Compiler| Code Generation "Defines" type-in box. Use this macro to specify define directives to an external translator. This macro is only $DEP(): This macro provides the ability to used by the automatically rebuild resources as part of a project project manager. make if one of the resource components has been modified. $DIR(): Directory of the file argument, full path. $DRIVE(): Drive of the file argument, in the form D:. - 56 - $EDNAME: Complete file name of file in active editor. This is a null string if the active window is not an editor. $ERRCOL: Column number of current error in file $ERRNAME. If there are no messages, then string is expanded to null string. $ERRLINE: Line number of current error in file $ERRNAME. If there are no messages, then string is expanded to null string. $ERRNAME: Complete file name of file referred to by the selected messages in the Message window. This is a null string if there are no messages or the currently selected message does not refer to a file. $EXENAME: Program's file name (including output path), based on the project name or, if there is no project defined, then the name of the .EXE that would be produced from the active editor window. $EXT(): Extension of the file argument; this includes the dot (for example, .CPP). $INC: Pulls in the contents of the Options|Directories| Include Directories type-in box. $LIB: Pulls in the contents of the Options|Directories| Library Directories type-in box. $LINE: Line number of current editor. If the active window is not an editor, then the string is set to 0. $MEM(Kb to reserve): This macro tells the IDE how much memory to try to give the transfer program. The IDE gives up as much memory as possible, to either the amount specified or the maximum available, whichever is smaller. You'll get an error if no memory is specified. $NAME(): Name part of the file argument; does not include the dot. $NOSWAP: This macro tells the IDE not to swap to the User Screen when running the program. It pops up a box that indicates which transfer program is running. Use this macro in conjunction with $CAP. - 57 - $OUTNAME: This macro expands to the path and file name that appear in the Project|Local Options Output Path type-in box (in the active edit window). For example, if the project contains STARS.C, the default Output Path type-in is STARS.OBJ. So if STARS.C is in the active edit window, $OUTNAME expands to STARS.OBJ. If you've edited the type-in box so it says ..\MOON.XYZ, $OUTNAME will expand to ..\MOON.XYZ. This macro is useful when you are specifying modules for your user- defined translators. For example, you could define a TLIB translator and set the command line to TLIB MYLIB +$OUTNAME which adds the object module of the file in the active edit window to the library MYLIB. $PRJNAME: The current project file. Null string if no project is defined. $PROMPT: This macro tells the IDE to display the expanded parameter string before calling the transfer program. The command line that will be passed is displayed in a dialog box. This allows you to change or add to the string before it is passed.The position of $PROMPT command in the command line determines what is shown in the dialog prompt box. You can place constant parameters in the command line by placing them before $PROMPT. For example, the /c in /c $PROMPT dir is constant and doesn't show in the dialog box, but dir can be edited before the command is run. $SAVE ALL: This macro tells the IDE to save all modified files in all Edit windows that have been modified, without prompting. $SAVE CUR: This macro tells the IDE to save the file in the current editor if it has been modified. This ensures that the invoked program will use the latest version of the source file. $SAVE PROMPT: This macro tells the IDE to prompt when there are unsaved files in editor windows. You will be asked if you want to save any unsaved files. - 58 - $TASM: This macro is predefined for use with Turbo Assembler. It uses the TASM2MSG filter to trap TASM messages. $TASM is essentially shorthand for this: $NOSWAP $SAVE CUR $CAP MSG(TASM2MSG) $EDNAME,$OUTNAME $WRITEMSG(filename): This macro copies the contents of the Message window to the specified ASCII file. The translator can parse the file and act on the messages so desired. For example, $WRITEMSG(C:\MESSAGES.TXT) writes to the file MESSAGES.TXT on your root directory. Running DOS ======================================================= commands If you want to run DOS commands from within the integrated environment, you can set up a simple transfer macro that will let you do so. Just add this transfer item: command /c $MEM(128) $PROMPT When you invoke this transfer item, a dialog box appears and prompts you for DOS input. Since the $PROMPT command appears later in the string, the text command /c won't show up in the dialog's input box. This lets you just type dir, chkdsk, del *.*, or whatever DOS command you want to run. Transfer memory ======================================================= settings Different programs have different memory needs. For example, GREP can run in very little memory, where many popular editors require 200-300K to work well. If you use the $MEM() macro, you can specify (on a program-by-program basis) how much memory the IDE should give to the transfer programs. The less memory you devote to a transfer program, the quicker the transfer to and from the program occurs. There may be some cases where the IDE cannot give up as much memory as you requested. When this happens, the IDE gives up as much as it can. There are certain states in the IDE that require more memory than others; for example, while debugging a program, the IDE will - 59 - tie up more resources than when not debugging. Use Program Reset (Ctrl-F2) to free up debugging memory. In those cases where you want the IDE to give up all its memory, give it a large number, like 640K. How much memory is actually given up is dependent on how much you have when you start Turbo C++. =========================================================================== Turbo Editor macros =========================================================================== TEMC.EXE is an editor macro compiler for the IDE. It processes a script file that defines editor macros and key bindings, and produces a configuration file that is read by the IDE to define the effects of keyboard commands in the editor. The file DEFAULTS.TEM contains the default macro definitions and key bindings built into the IDE editor. It serves as an example script, as well as a base from which to customize the editor. =========================================================================== TEMC command line =========================================================================== TEMC is invoked from the DOS command line. Type temc [-c] [-u] <script file> <config file> The script file extension is .TEM if not specified otherwise. The configuration file extensions is assumed to be .TC. The configuration file need not exist. If it does not exist, it is created. The optional -c switch can also be specified as /c, and can appear in any argument position on the command line. If you use this option, any existing command table in your configuration file is thrown away before TEMC processes the script file. When -c is not used, the key bindings in the script file are merged with those already defined in the configuration file. - 60 - TEMC by default modifies the commands used by the IDE when the Alternate command set is specified in Options| Environment|Preferences. The optional -u switch, which can also be specified as /u, causes TEMC to modify the CUA command set instead. You can use DEFAULTS.TEM to re-create exactly the default settings of the Alternate command set. This file is included as both a sample script file and as the default command table. You can copy it and modify it for your own use. A file named CMACROS.TEM is provided with Turbo C++; this file contains many useful enhancements to the IDE for C and C++ programming that you may wish to install. =========================================================================== Syntax =========================================================================== The syntax to define a macro is MACRO <macroname> <command1>; [ <command2>; ... ] END; <macroname> can consist of anything that is a legal C symbol, and <command> can be either the name of another predefined macro or a predefined TEMC editor command. A list of editor commands and what they do follows. When you define your macro, the following points are valid: 1. A statement defines either a named macro or a key binding. 2. Spaces and new lines are optional. 3. Comments are in C-style /* ... */ pairs. 4. Unlike C, TEMC's language is case insensitive. 5. Some of the predefined editor commands have a syntax that looks like a C function call with one argument. For example, - 61 - SetMark(5); Depending on the command, the argumment is either a decimal integer constant, a character constant, or a string literal. All are specified using C syntax. Here's an example of a macro definition from DEFAULTS.TEM: MACRO MacScrollUp ScrollScreenUp; FixCursorPos; END; The syntax to define a key binding is <key-sequence>: <command>; or <key-sequence>: BEGIN <command1>; [ <command2>; ... ] END; The <key-sequence> is either a key (a character optionally preceded by Ctrl or Alt), or a series of keys separated by a plus sign (+). Note that the specification of the key characters themselves is case sensitive. For example, Ctrl-k+B is different than Ctrl-k+b, even though the latter is the same as CTRL- K+b. Whitespace is allowed between the key-sequence and the colon, and each <command> can be either the name of a previously defined macro, or one of the predefined editor commands listed in Table 1.1. =========================================================================== Key codes =========================================================================== The IDE editor makes use of an extended character set that includes key combinations not normally available to DOS programs. Key codes can be specified in a script through any combination of the symbols "Ctrl-", "Shift-" "Alt-" and a character. - 62 - Some keys cannot be entered directly into a TEMC script. Those keys can be referred to by their names, as described in the following table. Any key in a sequence--except the first key--can be preceded by one of the characters ^ or @. The caret (^) indicates that any combination of case and "Ctrl" can be used to type the key; that is, lowercase, uppercase, or control characters. The @ sign is used to indicate that case is insignificant for the following character, although "Ctrl" is not accepted. For example, o Ctrl-k+b specifies a Ctrl-K followed by a lowercase b. o Ctrl-k+^b specifies a Ctrl-K followed by any of b, B, or Ctrl-B. o Ctrl-k+@B specifies Ctrl-K followed by either b or B. Named keys ======================================================= Key are specified as letters, numbers, or characters, optionally preceded by one or more of Ctrl-, Alt- or Shift-. The following names specify keys that cannot be typed as themselves in the TEMC syntax. ------------------------------------------------------- Key name Notes ------------------------------------------------------- Home End PgUp PgDn LfAr Left arrow RgAr Right arrow UpAr Up arrow DnAr Down arrow Ins Del Enter Return Same as Enter BkSp Backspace Tab BkTab No longer available, use Shift-Tab - 63 - Esc Star * key on the numeric keypad Minus - key on the numeric keypad Plus + key on the numeric keypad Space Spacebar PrtSc F1 to F10 Function keys ------------------------------------------------------- =========================================================================== Predefined editor commands =========================================================================== TEMC lets you use built-in editor commands and user- defined macros as commands within macros interchangeably, as long as you don't create any loops by having two macros calling each other, even via intermediate macros. Note that some commands cause an escape from the editor to the surrounding IDE, for example, by bringing up a dialog box. Your macro will "pause" until control returns to the editor. A list of all predefined TEMC editor commands is shown next. Commands that cause an escape from the editor follow. ------------------------------------------------------- TEMC editor Command name What the editor does commands ------------------------------------------------------- BackspaceDelete Deletes character before the cursor. BottomOfScreen Moves cursor to the bottom line of the current window, leaving column unchanged. CenterFixScreenPos Adjusts the screen display to ensure the cursor is visible. If any adjustment is necessary, adjust the display so the cursor is - 64 - Table 1.4: TEMC editor commands (continued)____________ close to being centered in the window. CopyBlock If there is a valid and highlighted (selected) text block, then at the cursor location, inserts a copy of the characters that are selected and makes that the new selected text location. CursorCharLeft Moves cursor left over one character. This command will skip over tab characters and move to the end of the previous line. CursorCharRight Moves cursor right over one character. This command will skip over tab characters and advance to the beginning of the next line. CursorDown Moves cursor down one row. CursorLeft Moves cursor left one screen column. CursorRight Moves cursor right one screen column. CursorSwitchedLeft Like CursorLeft, but pays attention to cursor through tab option setting (see SetCursorThroughTabMode). CursorSwitchedRight Like CursorRight, but pays attention to cursor through tab option setting (see SetCursorThroughTabMode). CursorUp Moves cursor up one row. - 65 - Table 1.4: TEMC editor commands (continued)____________ DeleteBlock If there is a valid and highlighted (selected) text block, deletes the characters that are in it. DeleteChar Deletes the character at the current cursor location. DeleteLine Deletes the current line. DeleteToEOL Deletes all characters in the current line, leaving a zero-length line. DeleteWord Deletes from cursor to beginning of next word. EndCursor Moves cursor to end of file buffer. ExtendBlockBeg Initiates a series of commands that will select a block of text between the initial and ending positions of the cursor. ExtendBlockEnd Ends a series of commands begun by ExtendBlockBeg. FixCursorPos Ensures that the cursor value specifies a row between 1 and the number of lines in the buffer, a column greater than 0. If the cursor through tab option is not set, the cursor is not placed in the middle of a tab character (see SetCursorThroughTabMode). FixScreenPos Adjusts the screen display to ensure the cursor is visible. - 66 - Table 1.4: TEMC editor commands (continued)____________ FullPaintScreen Redraws the entire window, making no assumptions about what is onscreen. HideBlock Sets a flag indicating that the selected text should not be highlighted. HighlightBlock Sets a flag indicating that if the beginning and end selected text markers are valid, the selected text should be highlighted. HomeCursor Moves cursor to beginning of the file buffer. IndentBlock Inserts a space at the beginning of each line in the highlighted (selected) text. InsertText Inserts the literal "string" in the buffer at the current cursor location. Use the syntax InsertText(string) to call this command. LeftOfLine Moves cursor to beginning of the current line. LiteralChar Inserts the character at the current cursor location, without doing any special processing for newline, tab characters, etc. Use the syntax LiteralChar(c), where c is a character or integer value. MarkBufModified Sets a flag indicating that the contents of the buffer are different than what is - 67 - Table 1.4: TEMC editor commands (continued)____________ in the corresponding disk file. MarkBufUnModified Clears a flag, thus indicating that the contents of the buffer can be assumed to be identical to what is in the disk file. MatchPairBackward Same as MatchPairForward except if the cursor is on a ' or ", searches backward for the matching character. MatchPairForward If the cursor is on one of the characters (, ), {, }, [, ], or on the first character of one of the pairs /* or */, searches in the appropriate direction for the closest instance of the matching delimiter. If the cursor is on the character ' or ", searches forward for the matching character. If a match is found, places the cursor there. MoveBlock Like CopyBlock, but also deletes the original selected text. MoveToBlockBeg Moves cursor to the location marked as the beginning of the selected text. MoveToBlockEnd Moves cursor to the location marked as the end of the selected text. MoveToMark Moves the cursor to the location saved with SetMark(n) command. Use the - 68 - Table 1.4: TEMC editor commands (continued)____________ syntax MoveToMark(n), where n is a one-digit number, 0-9. MoveToPrevPos Moves the cursor to the location specified by the "previous position marker." MoveToTempPos Moves the cursor to the saved temporary marker. NullCmd No operation. Calls the editor, but performs no function. Can be used to cause a keystroke to have no effect. OutdentBlock Deletes a leading space, if any, from the beginning of each line in the highlighted (selected) text. PageDown Moves cursor down by number of lines in the window. PageScreenDown Scrolls screen down by numer of lines in the window, leaving cursor position unchanged. PageScreenUp Scrolls screen up by numer of lines in the window, leaving cursor position unchanged. PageUp Moves cursor up by number of lines in the window. PaintScreen Redraws the entire window, assuming that the screen still correctly displays what the editor last drew on it. - 69 - Table 1.4: TEMC editor commands (continued)____________ ReDo Performs an Redo operation. Exactly what happens depends on the option settings. RightOfLine Moves cursor to end of current line. RightOfWord Moves cursor to the next column that follows the end of a word. ScrollScreenDown Scrolls screen down one line, leaving cursor position unchanged. ScrollScreenUp Scrolls screen up one line, leaving cursor position unchanged. SetAutoIndent Sets the Auto Indent option On. SetAutoOutdent Sets the Backspace Unindents option On. SetBlockBeg Sets the beginning of the selected text to be the character at the current cursor location. SetBlockEnd Sets the end of the selected text to be the character at the current cursor location. SetCursorThroughTabMode Sets the Cursor Through Tabs option On. SetInsertMode Sets Insert/Overwrite option to Insert. SetMark Sets a marker to point to the character at the current cursor location, so a later MoveToMark(n) - 70 - Table 1.4: TEMC editor commands (continued)____________ comand can restore the cursor. Use the syntax SetMark(n), where n is a one digit number, 0-9. SetOptimalFillMode Sets Optimal Fill option On. SetPrevPos Sets a marker (the previous position marker) to point to the character at the current cursor location. This marker location changes only by a call to SetPrevPos or SwapPrevPos. SetTabbingMode Sets Use Tab Char option On. SetTempPos Saves the cursor location in a temporary marker that can be used by some internal editor commands. This is not a practical application in user-defined macros. Use SetMark instead. SmartRefreshScreen Redraws the window, skipping any portions that the editor is sure are unmodified since the last redraw. SmartTab Inserts space or tab characters in accordance with the current settings of the Use Tab Char option, Tab Width. SwapPrevPos Exchanges the values of the cursor and the "previous position marker." ToggleAutoIndent Toggles the state of the Auto Indent option. - 71 - Table 1.4: TEMC editor commands (continued)____________ ToggleAutoOutdent Toggles the state of the Backspace Unindents option. ToggleCursorThroughTabMode Toggles the state of the Cursor Through Tabs option. ToggleHideBlock Toggles the state of the highlight (selected) text flag (see HighlightBlock). ToggleInsert Toggles state of Insert/Overwrite option. ToggleOptimalFillMode Toggles state of Optimal Fill option. ToggleTabbingMode Toggles state of Use Tab Char option. TopOfScreen Moves cursor to the top line currently displayed in the window, leaving column unchanged. UnDo Performs an Undo operation. Exactly what happens depends on the option settings. WordLeft Moves cursor to beginning of previous word, or to end of previous line, whichever is first. WordRight Moves cursor to beginning of next word, or to the end of a line, whichever is first. ------------------------------------------------------- The following commands cause an exit from the editor, for example, by bringing up a dialog box. The macro resumes when the editor window regains the focus. - 72 - The keys listed next to some of the commands below are the ones used by default when the Alternate mode of the IDE is selected. AddWatch Adds a watch item (Ctrl-F7). ChangeDirectory Opens a dialog box for changing the current directory. ChangeModeFlags Used after a command such as ToggleInsert which changes the state of an editor option switch. Causes the IDE to update various menu items and/or icons. ClipCopy Copys selected text to Clipboard (Ctrl-Ins). ClipCut Cuts selected text to Clipboard (Shift-Del). ClipPaste Pastes Clipboard into buffer at cursor (Shift-Ins). ClipShow Shows Clipboard (no hot key defined). CloseWindow Closes editor window (Alt-F3). CompileFile Compiles current buffer (Alt-F9). CompileMenu Selects Compile menu (Alt-C). CompilerOptions Selects the Options Compiler menu DebugMenu Selects Debug menu (Alt-D). EditMenu elects Edit menu (Alt-E). FileMenu Selects File menu (Alt-F). GetFindString Opens a dialog box for the Search operation. (Alt-S F) GotoWindow1 Selects window #1 (Alt-1). GotoWindow2 Selects window #2 (Alt-2). GotoWindow3 Selects window #3 (Alt-3). GotoWindow4 Selects window #4 (Alt-4). GotoWindow5 Selects window #5 (Alt-5). GotoWindow6 Selects window #6 (Alt-6). GotoWindow7 Selects window #7 (Alt-7). GotoWindow8 Selects window #8 (Alt-8). GotoWindow9 Selects window #9 (Alt-9). Help Opens the Help window (F1). HelpMenu Selects Help menu (Alt-H). HelpIndex Display the Help system't index (Shift-F1) Inspect Inspects item (Alt-F4). LastHelp Opens previous help window (Alt- F1). MakeProject Makes project (F9). Menu Highlights top menu bar. - 73 - Modify Evaluates expression/modify variable (Ctrl-F4). NextError Moves to next item in message window (Alt-F8). NextWindow Selects next window in IDE (F6). OpenFile Opens dialog box for File Open (F3). OptionsMenu Selects Options menu (Alt-O). PrevError Moves to previous item in message window (Alt-F7). PrintBlock Writes selected text to the printer. ProjectMenu Selects Project menu (Alt-P). Quit Exits the IDE (Alt-X). ReadBlock Opens dialog box requesting a file name to be read into the buffer at the cursor location and marked as selected text. RepeatSearch Searches again, using previous parameters. Replace Opens an dialog box for the Replace operation. ResetProgram Resets program being debugged (Ctrl-F2). RunMenu Selects Run menu (Alt-R). RunProgram Makes and runs current executable (Ctrl-F9). RunToHere Runs program until statement at cursor (F4). SaveFile Saves current editor buffer (F2). SaveFileAs Opens dialog for File SaveAs. SearchMenu Selects Search menu (Alt-S). Step Step over (F8). SystemMenu Selects Sytem menu (Alt-Spacebar). ToggleBreakpoint Sets/Clears a breakpoint at the cursor location Trace Trace into (F7). Transfer0 Selects nth item from transfer menu Transfer1 . Transfer2 . Transfer3 . Transfer4 . Transfer5 . Transfer6 . Transfer7 . Transfer8 . Transfer9 . ViewCallStack Views Call Stack (Ctrl-F3). - 74 - ViewUserScreen Displays User Screen (Alt-F5). WindowList Displays window list (Alt-0). WindowMenu Selects Window menu (Alt-W). WindowCascade WindowTile WordHelp Context sensitive help (Ctrl-F1). WriteBlock Opens dialog box requesting a file name to which the selected text will be written. ZoomWindow Zooms/unzoomd current window (F5). - 75 - - 76 - INDEX ___________________________________________________________________________ - + and + - (TLIB action symbols) /C THELP option (select color) 39, 48 40 [ ] GREP operator 17 /C TLIB option (case sensitivity) /? THELP help option 40, 42 45, 50 -* and ** (TLIB action symbols) 47 $CAP EDIT transfer macro 55 * (TLIB action symbol) 47 $CAP MSG transfer macro 55 + (TLIB action symbol) 47 case sensitivity - (TLIB action symbol) 47 GREP option 14 $ GREP operator 17 TLIB option 45, 50 * GREP operator 17 characters + GREP operator 17 trigraph . GREP operator 17 converting 53 \ GREP operator 17 $COL transfer macro 56 ^ GREP operator 17 columns ? THELP option 40, 42 numbers 56 command line syntax A CPP 10 add (TLIB action symbol) 47 compilers Turbo editor macro 56 $CONFIG transfer macro 56 B configuration files 56 BGIOBJ 2-10 TCC file 10 advanced features 6 CPP and 10 command-line syntax 3, 6 conversion components 6 trigraphs 53 example 4 CPP 10-12 graphics.h and 8 command-line options and syntax options 10 destination file 7 directory 10 /F 6 example of use 11 file name 6 files file name (/F) 5 compiling 11 public name 7 -P option (source file names and segment class 7 line numbers) 11 segment name 7 wildcards and 10 source file 7 D C -d GREP option (directories) 14 -c GREP option (count only) 14 /D OBJXREF option (directory) 24 Index 77 debugging extended dictionary include files 10 TLIB and 45, 49 macros 10 extract and remove (TLIB action) 47 $DEF transfer macro 56 Defines option transfer macro 56 F $DEP transfer macro 56 /F BGIOBJ option 6 dependencies /F BGIOBJ option (far routines) 5 explicit 56 /F OBJXREF option (include full $DIR transfer macro 56 library) 25 directories /F THELP option 41 CPP 10 /F THELP option (Help file path and GREP option 14 name) 40 include files files transfer macro 57 dates libraries changing 51 transfer macro 57 destination .OBJ files 24 BGIOBJ 7 transfer macro 56 extensions 57 DLLs linker response, used by OBJXREF creating 57 28, 33 DOS macros commands expanded 10 running from the IDE 59 matching $DRIVE transfer macro 56 GREP option 14 names macros E transfer 54 /E TLIB option (extended printing (GREP) 15 dictionary) 45, 49 output, generated by OBJXREF 25 editor path macro language (TEML) macros 56 using 56 saving $EDNAME transfer macro 56 all 58 $ERRCOL transfer macro 57 searching 12-22 $ERRLINE transfer macro 57 source $ERRNAME transfer macro 57 BGIOBJ 7 errors filters 55 linker GREP 56 graphics drivers and fonts 5 Resource Compiler 56 OBJXREF (list) 34 TASM 56 examples fonts OBJXREF 28-33 adding to graphics library 3 .EXE files files, converting to .OBJ files 2 file name transfer macro 57 included with Turbo C++ 4 $EXENAME transfer macro 57 linker errors and 5 $EXT transfer macro 57 linking 2-10 registering 3, 8 - 78 - stroked 2-10 white space in 18 linking 2 using 13 wildcards and 18 GREP.COM 16 G GREP2MSG.EXE 56 graphics drivers adding to graphics library 3 converting to .OBJ files 2, 2-10 H included with Turbo C++ 4 /H THELP option (help) 40, 42 linker header files errors and 5 graphics.h 8 linking 2 help registering 3, 8 GREP (file searcher) 13 graphics.h (header file) OBJXREF 23 BGIOBJ and 8 THELP 40, 42 GRAPHICS.LIB hot keys adding to 3 scan codes 42 GREP (file searcher) 12-22 capturing messages 56 examples 18 I files to search 18 -i GREP option (case sensitivity) help 13 14 literal character 17 /I OBJXREF option (case matches 17 sensitivity) 24 operators 17 $INC transfer macro 57 optimizing use of 16 include files options debugging 10 case sensitivity (-i) 14 directories count only (-c) 14 transfer macro 57 default 15, 16 integrated environment discussion 13 DOS commands and 59 file names (printing) 15 memory needs 59 -i (case sensitivity) 14 line numbers (-n) 14 lines, nonmatching (-v) 15 K list matching files (-l) 14 /K THELP option (change hot key) -n (line numbers) 14 40, 42 -o (UNIX output format) 14 keyboard precedence 16 trigraph program 53 regular expression search (-r) 14 UNIX format (-o) 14 L updating (-u) 15 -l GREP option (list matching -v 15 files) 14 -v (nonmatching lines) 15 /L OBJXREF command (linker response verbose 15 file) 28 word search (-w) 15 $LIB transfer macro 57 search strings 16 libname (TLIB option) 45 Index 79 libraries column number 57 directories file name 57 transfer macro 57 line number 57 files 22 module names, TLIB 46 contents of 22 graphics adding driver and font files to N 3 -n command-line compiler option object files 43, 44 CPP and 10 creating 47 -n GREP option (line numbers) 14 OBJXREF /N OBJXREF option (limit reports) including all 25 26 page size 49 $NAME transfer macro 57 $LINE transfer macro 57 $NOSWAP transfer macro 57 lines numbers numbering 57 column 56 printing (GREP) 14 line 57 linker error: segment exceeds 64K 5 response files O used by OBJXREF 28, 33 -o GREP option (UNIX format output) linking 14 graphics drivers 2 /O OBJXREF option (output file for listfile (TLIB option) 45 reports) 25 .OBJ files converting font files into 2 M converting graphics drivers files macros into 2 CPP and 11 defined 22 debugging 10 directories 24 editor 56 libraries expanded advantages of using 44 list of 10 creating 47 preprocessing 11 TLIB and 43 preprocessor 10 names 22 MAKE (program manager) response files and 27 modifying 51 object modules project files and 36 defined 22 $MEM transfer macro 57, 59 names 22 memory OBJXREF 22-34 requirements directories 24 IDE 59 error messages 34 transfer programs 57, 59 examples of reports 29, 30, 31, Message window 32 capturing output into 55 help 23 copying text from 59 /L command (linker response messages files) 28 capturing from programs 55 - 80 - linker files wildcards and 23 as response files 28 operations (TLIB option) 45 options 23 operators /N (limit information) 26 GREP 17 /RV 26 $OUTNAME transfer macro 57 /RC 31 output control 24 capturing 55 directories (/D) 24 output file /F (include full library) 25 generated by OBJXREF 25 ignore case (/I) 24 include full library (/F) 25 include zero-length segment P definitions (/Z) 25 -P CPP option (source file names list file names (/V) 25 and line numbers) 11 modified reports 26 /P OBJXREF command (project files) /O (output file) 25 27 reports 25 /P TLIB option (page size) 49 by class type page size (libraries) 49 example 33 path by class type (/RC) 26, 31 transfer macro 57 by external reference (/RX) precedence 26, 30 GREP options 16 by module (/RM) 26, 29 TLIB commands 46 by public names (/RP) 26, 29 PRJ2MAK (project file converter) 36 by reference (/RR) 26, 30, 33 PRJCNVT (project file converter) 35 default type 33 $PRJNAME transfer macro 58 of all types (/RV) 26 programs of module sizes (/RS) 26, 31 capturing output 55 of unreferenced symbol names file name 57 (/RU) 26, 32 memory assignments 59 output file (/O) 25 project files verbose OBJXREF and 27 example 33 used by OBJXREF 33 verbose (/RV) 26, 32 projects /V (verbose output) 25 files verbose report (/RV) 32 converting from old versions 35 /Z (include zero-length segment converting to MAKE files 36 definitions) 25 file name transfer macro 58 project files $PROMPT transfer macro 58 as response files 27 public names project files (/P) 27 defined 22 reports 23 modifying 26 output file for (/O) 25 R response files 23, 27 -r GREP option (regular expression example 33 search) 14 linker 28 /RC OBJXREF option (report) 31 warnings 34 /RC OBJXREF option (reports) 26 Index 81 redirecting program output 55 in text files 12-22 registerbgidriver (function) swapping BGIOBJ and 3, 8 to User Screen 57 registerbgifont (function) syntax BGIOBJ and 3, 8 CPP 10 registerfarbgidriver (function) TLIB 44 BGIOBJ and 6, 8 registerfarbgifont (function) BGIOBJ and 6, 8 T remove (TLIB action) 47 TASM2MSG.EXE 56 replace (TLIB action) 48 $TASM transfer macro 58 Resource Compiler text capturing messages 56 Message window 59 resources text files rebuilding automatically 56 searching 12-22 response files THELP (Turbo Help utility) 37-43 file-name extensions and 27 additional Help on highlighted formats 27 word 39 free-form 27 cursor keys 38 example 33 index 39 linker files and 28 invoking 37 OBJXREF and 23, 27, 28 keywords 38 example 33 loading 37 project files and 27 options 39-43 TLIB 48 colors (/C) 40 TLINK, OBJXREF and 33 colors (/C) 39 /RM OBJXREF option (reports) 26 Help file path (/F) 40 /RP OBJXREF option (reports) 26 help file path (/F) 41 /RR OBJXREF option (reports) 26 help on (/? /RS OBJXREF option (reports) 26 /H /RU OBJXREF option (reports) 26 ?) 40, 42 /RV OBJXREF option (reports) 26 Help screen colors (/C) 39 /RX OBJXREF option (reports) 26 help screen colors (/C) 40 hot keys (/K) 40, 42 reassign hot keys (/K) 40, 42 S removing THELP (/U) 40, 43 $SAVE ALL transfer macro 58 screen colors (/C) 39, 40 $SAVE CUR transfer macro 58 /U (removing THELP) 40, 43 $SAVE PROMPT transfer macro 58 /W (window options) 40 scan codes 42 window options 43 searches window options (/W) 40 text files 12-22 paging through 38 source files paste page 39 separately compiled 44 previous screens 39 standalone utilities 1 quitting 39 strings removing from memory 40, 43 searching for scan codes 42 as expressions (GREP) 14 using 38 - 82 - TLIB (librarian) 43-51 $INC 57 action symbols 46-48 instruction 55 capabilities 43 $LIB 57 examples 51 $LINE 57 extended dictionary (/e) $MEM 57 TLINK and 49 $NAME 57 module names 46 $NOSWAP 57 operations 46 $OUTNAME 57 precedence 46 $PRJNAME 58 options $PROMPT 58 case sensitivity (/c) 45, 50 $SAVE ALL 58 /E 45, 49 $SAVE CUR 58 extended dictionary (/e) 45, 49 $SAVE PROMPT 58 libname 45 $TASM 58 listfile 45 $WRITEMSG 59 operations 45 trigraphs page size (/P) 49 translating 53 using 44 undo option (-u) 53 response files Turbo Assembler using 48 capturing messages 56 syntax 44 $TASM macro 58 TLIB (Turbo librarian) 43-51 TURBOC.CFG 10 options 39-51 TLINK (linker) response files U OBJXREF and 28 -u GREP option (updating) 15 TLIB extended dictionary and 49 /U THELP option 43 TOUCH 51, 52 /U THELP option (remove THELP) 40 transfer macros UNIX $CAP EDIT 55 format (GREP) 14 $CAP MSG 55 User Screen 57 $COL 56 utilities $CONFIG 56 standalone 1 $DEF 56 TLIB 43-51 defined 54 TOUCH 51 $DEP 56 $DIR 56 DOS commands 59 V $DRIVE 56 -v GREP option (nonmatching lines) $EDNAME 56 15 $ERRCOL 57 /V OBJXREF option (verbose output) $ERRLINE 57 25 $ERRNAME 57 $EXENAME 57 $EXT 57 W file names 54 -w GREP option (word search) 15 glossary of 55 /W THELP option (ser window how expanded 54 size/location) 40 Index 83 /W THELP option (window options) 43 Z wildcards -z GREP option (verbose) 15 CPP and 10 /Z OBJXREF option (include zero- OBJXREF and 23 length segment definitions) 25 TOUCH and 52 $WRITEMSG transfer macro 59 - 84 -