You are on page 1of 88

CONTENTS ___________________________________________________________________________

HOW TO USE THIS FILE . . . . . . . 1 BGIOBJ: Converting graphics drivers and fonts . . . . . . . . . . . . 2 Adding the new .OBJ files to GRAPHICS.LIB . . . . . . . . . . 3 Registering the drivers and fonts . . . . . . . . . . . . . 3 An example . . . . . . . . . . 4 The /F option . . . . . . . . . 5 Advanced features . . . . . . . 6 CPP: The preprocessor . . . . . 10 CPP as a macro preprocessor . 11 An example . . . . . . . . . . 11 GREP: A text-search utility . . 12 Command-line syntax . . . . . 13 GREP options . . . . . . . . . 13 Order of precedence . . . . 16 The search string . . . . . . 16 Operators in regular expressions . . . . . . . . 17 File specifications . . . . . 18 Some GREP examples . . . . . . 18 Example 1 . . . . . . . . . 18 Example 2 . . . . . . . . . 19 Example 3 . . . . . . . . . 19 Example 4 . . . . . . . . . 20 Example 5 . . . . . . . . . 20 Example 6 . . . . . . . . . 21 Example 7 . . . . . . . . . 21 Example 8 . . . . . . . . . 22 OBJXREF: The object module crossreference utility . . . . . . . 22 The OBJXREF command line . . . 23 The OBJXREF command-line options . . . . . . . . . . 24 Control options . . . . . 24 Report options . . . . . . 25 Response files . . . . . . . . 27 Free-form response files . . 27 Project files . . . . . . . 27

Linker response files . . . . 28 Sample OBJXREF reports . . . . 28 Report by public names (/RP) . . . . . . . . . . . . 29 Report by module (/RM) . . . 29 Report by reference (/RR) . . 30 Report by external references (/RX) . . . . . . . . . . . . 30 Report of module sizes (/RS) . . . . . . . . . . . . 31 Report by class type (/RC) . 31 Report of unreferenced symbol names (/RU) . . . . . . . . . 32 Verbose reporting (/RV) . . . 32 Examples of how to use OBJXREF . . . . . . . . . . . . 32 Example 1 . . . . . . . . . . 32 Example 2 . . . . . . . . . . 33 Example 3 . . . . . . . . . . 33 Example 4 . . . . . . . . . . 33 OBJXREF error messages and warnings . . . . . . . . . . . 34 Error messages . . . . . . . 34 Warnings . . . . . . . . . . 34 PRJCFG: Configuration file utility . . . . . . . . . . . . . 35 PRJCNVT: Old projects for new . . 35 PRJ2MAK: From project file to MAKE file . . . . . . . . . . . . . . 36 THELP: The Turbo Help utility . . 37 Loading and invoking THELP . . 37 Navigating THELP . . . . . . . 38 THELP options . . . . . . . . . 39 /C#xx (select color) . . . . 40 /Fname (full path and name for help file) . . . . . . . . . 41 /H, /?, and ? (display help screen) . . . . . . . . . . . 42 /Kxxyy (reassign hot key) . . 42 /U (remove THELP from memory) . . . . . . . . . . . 43

/Wx,y,w,h (set the window size and location) . . . . . . . 43 TLIB . . . . . . . . . . . . . . 43 Why use object module libraries? . . . . . . . . . . 44 The TLIB command line . . . . 44 The operation list . . . . . 46 File and module names . . 46 TLIB operations . . . . . 46 Using response files . . . . . 48 Creating an extended dictionary: The /E option . . . . . . . . 49 Setting the page size: The /P option . . . . . . . . . . . . 49 Advanced operation: The /C option . . . . . . . . . . . . 50 Examples . . . . . . . . . . . 51 TOUCH . . . . . . . . . . . . . 51

TRANCOPY: A project transfer item utility . . . . . . . . . . . . . TRIGRAPH: A character-conversion utility . . . . . . . . . . . . . Transfer macros . . . . . . . . . State macros . . . . . . . File name macros . . . . . Instruction macros . . . . Running DOS commands . . . . . Transfer memory settings . . . Turbo Editor macros . . . . . . . TEMC command line . . . . . . . . Syntax . . . . . . . . . . . . . Key codes . . . . . . . . . . . . Named keys . . . . . . . . . . Predefined editor commands . . . Index

52 53 54 54 54 55 59 59 60 60 61 62 63 64 77

ii

TABLES ___________________________________________________________________________

1.1: Summary of THELP command-line options . . . . . . . . . . .39 1.2: TLIB options . . . . . . . .45

1.3: TLIB action symbols . . . . 47 1.4: TEMC editor commands . . . . 64

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 TLINK Standalone program manager Turbo Linker

Documented in this file BGIOBJ Conversion utility for graphics drivers and fonts

- 1 -

CPP GREP OBJXREF PRJCFG

Preprocessor File-search utility Object module cross-referencer 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 EGAVGA HERC ATT PC3270 IBM8514 CGA_driver EGAVGA_driver Herc_driver ATT_driver PC3270_driver IBM8514_driver TRIP LITT SANS GOTH triplex_font small_font sansserif_font gothic_font

-------------------------------------------------------------------------------------------- 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 command 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 linker error Segment exceeds 64K after linking in some drivers and/or fonts, refer to the following section. /* Header file declares CGA_driver, triplex_font & gothic_font */ #include <graphics.h> /* Register and check for errors (one never knows...) */ if (registerbgidriver(CGA_driver) < 0) exit(1); if (registerbgifont(triplex_font) < 0) exit(1); if (registerbgifont(gothic_font) < 0) exit(1); /* ... */ initgraph(....); /* ... */ 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 program code). For example, the following two BGIOBJ com/* initgraph should be called after registering */

- 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 command 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). 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. 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) This is an optional segment class; the default is CODE.

destination

public-name

seg-class

------------------------------------------------------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); used */ extern int far public_name[]; /* if /F used, or */ /* segment name not _TEXT */ In these declarations, public_name matches the publicname 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 #include #include #include #include #include #include #include <graphics.h> <io.h> <fcntl.h> <stdio.h> <conio.h> <stdlib.h> <process.h> <alloc.h> /* if /F not used, */ /* default segment name

main() { void *gothic_fontp; in memory */ int handle; I/O */ unsigned fsize; buffer) */

/* points to font buffer /* file handle used for /* size of file (and

- 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 list (in a file) of a C source program in which include files and #define macros have been expanded. It is not needed for normal compilations of C programs. Often, when the compiler reports an error inside a macro or an include file, you can get more information about what the error is if you can see the include files or the results of the macro expansions. In many multi-pass compilers, a separate pass performs this work, and the results of the pass can be examined. Since Turbo C++ uses an integrated single-pass compiler, we provided CPP to supply the first-pass functionality found in other compilers. You use CPP just as you would use TCC, the standalone 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 preprocessing directive lines have been removed, along with any conditional text lines excluded from the compile. Unless you use a command-line option to specify otherwise, 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 HELLOAJ.c HELLOAJ.c HELLOAJ.c HELLOAJ.c

4: 5: main() 6: { 7: printf("%s\n","H.R. Floyd"); 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. 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. 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. 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. Line Numbers: Each matching line that GREP prints is preceded by its line number. This option is off by default. 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. 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

-d

-i

-l

-n -o

-r

- 14 -

. any character \ quote next character * match zero or more + match one or more [aeiou0-9] [^aeiou0-9] -u match a, e, i, o, u, and 0 thru 9 match anything but a, e, i, o, u, and 0 thru 9

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. 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.

-w

-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 -

-----------------Order of precedence ------------------

Remember that each of GREP's options is a switch: Its state reflects the way you last set it. At any given time, 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 -

-----------------Operators in regular expressions ------------------

When you use the -r option (on by default), the search string is treated as a regular expression (not a literal expression). The following characters take on special 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 immediately 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 singleExample 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 compiled 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 command 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). 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

/D

- 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.") 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. 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 definitions of a segment.

/O

/Z

------------------------------------------------------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 default. /RR Report by reference: Public name definitions 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 -Uoption 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 command line; additional .OBJ and .LIB file names can precede or follow them. -----------------Free-form response files -----------------Any file name listed in the response file without an extension is assumed to be an .OBJ file. You can create a free-form response file with a text editor. Just list the names of all .OBJ and .LIB files needed to make your .EXE file. To use free-form files with OBJXREF, type in each response file name on the command line, preceded by an @, and separate it from other command-line entries with a space or tab: @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 extension, 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; extern int i2; static int i3; extern void look(void); void main(void) { int i4; look(); } /* test2.c */ #include <process.h> extern int i1; /* /* /* /* defines i1 */ refers to i2 */ not a public name */ refers to look */

/* defines main */ /* not a public name */ /* refers to look */

/* refers to i1 */

- 28 -

int i2; void look(void) { exit(i1); }

/* defines i2 */ /* defines look */ /* 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. -----------------Report by public names (/RP) -----------------A report by public names lists each of the public names defined in the object modules being reported on, 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 _i1 _i2 _look _main DEFINED IN TEST1 TEST2 TEST2 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 -----------------Report by reference (/RR) -----------------A report by reference lists each public name with the defining module in parentheses on the same line. 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 -

-----------------Report of module sizes (/RS) ------------------

A report by sizes lists segment names followed by a list of modules that define the segment. Sizes in bytes 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 compiled using the large memory model.

TEST1_TEXT 6 (00006h) 6 (00006h) TEST2_TEXT 10 (0000Ah) 10 (0000Ah) _BSS 4 (00004h) 2 (00002h) 6 (00006h)

TEST1 total TEST2 total TEST1, uninitialized TEST2, uninitialized total

-----------------Report by class type (/RC) ------------------

A report by class type lists segment size definitions by segment class. The CODE class contains instructions, 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) 2 (00002h) ... 132 (00084h) CODE 6 (00006h) TEST1 TEST1 TEST2 total

- 31 -

10 (0000Ah) 16 (00010h) DATA 143 (0008Fh) 143 (0008Fh) -----------------Report of unreferenced symbol names (/RU) ------------------

TEST2 total C0 total

A report of unreferenced symbol names lists modules that define public names not referenced in other modules. Such a symbol is either: 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 compilation. 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 name of the .PRJ default name for name of the .MAK for the new MAKE file is the base file file with the extension .MAK. The the new .CFG file is the base file 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 -

Warning! If you are going to have THELP resident in memory at the same 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.

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 directory. (If you want to keep TCHELP.TCH in another directory, THELP has a special /F command-line option that will enable THELP to find it; the INSTALL program inserts the correct path information into THELP.)

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 Esc F1 Selects a Help entry for the item highlighted in the current Help screen. Ends Help session. 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 Alt-F Pressing Alt-F1 repeatedly takes you in reverse order through the last 20 screens you have reviewed. Selects a new Help file (if you have specified more than one help file in the THELP.CFG file or on the command-line). Pastes the marked block or example text into your current application.

Ctrl-P

---------------------------------------------------------------------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. ------------------------------------------------------Option Specifies -------------------------------------------------------

Summary of THELP command-line options

- 39 -

Table 1.1: Summary of THELP command-line options (continued)____________________________________________ /C#xx Select color: # = color number xx = hex color values Full path and file name of Help file Display help screen Change hot key: xx = shift state (hex) yy = scan code (hex) Remove THELP from memory Sets the window size and location.

/Fname /H, /?, ? /Kxxyy

/U /Wx,y,w,h

-----------------------------------------------------------------------/C#xx (select color) -----------------This option lets you customize the background and foreground colors of various elements in a help screen. 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 1 2 3 4 5 6 7 8 9 A B Color border attribute Monochrome border attribute Color text attribute Monochrome text attribute Color keyword attribute Monochrome keyword attribute Color selected keyword word attribute Monochrome selected keyword word attribute Color example text attribute Monochrome example text attribute Color marked block attribute 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 1 2 3 4 5 6 7 Black Blue Green Cyan Red Magenta Brown Gray 0 1 2 3 4 5 6 7 8 9 A B C D E F Black Blue Green Cyan Red Magenta Brown Gray Intense Intense Intense Intense Intense Intense Intense Intense

ORing the color value with 0x80 produces a blinking color unless blinking has been disabled.

black blue green cyan red magenta brown (yellow) 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 -

-----------------/H, /?, and ? (display help screen) -----------------/Kxxyy (reassign hot key) ------------------

Any of these options displays a summary of THELP's command-line options. This option allows you to reassign a function to a new hot key. The option must be followed by the shift state (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 Left Shift Ctrl Alt Scan codes: A B C D E F G H I J K L M 1eh 30h 2eh 20h 12h 21h 22h 23h 17h 24h 25h 26h 32h N O P Q R S T U V W X Y Z 31h 18h 19h 10h 13h 1fh 14h 16h 2fh 11h 2dh 15h 2ch 0 1 2 3 4 5 6 7 8 9 0bh 02h 03h 04h 05h 06h 07h 08h 09h 0ah F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 3bh 3ch 3dh 3eh 3fh 40h 41h 42h 43h 44h 01h 02h 04h 08h

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 an existing library, TLIB always creates a copy of the original library with a .BAK extension. Better safe than sorry! The libraries included with Turbo C++ were built with TLIB. You can use TLIB to build your own libraries, or to modify the Turbo C++ libraries, your own libraries, libraries furnished by other programmers, or commercial libraries you've purchased. You can use TLIB to o create a new library from a group of object modules 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 of TLIB's usage, just type TLIB and press Enter. ======================================================= The TLIB command line takes the following general form, where items listed in square brackets ([like this]) are optional: 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 extension 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. The case-sensitive flag. This option is not normally used; see page 50 for a detailed explanation. Creates Extended Dictionary; see page 49 for a detailed explanation. Sets the library page size to size; see page 49 for a detailed explanation. 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. 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.

/C /E /Psize operations

listfile

--------------------------------------------------------------------------This section summarizes each of these command-line components; 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 oneor 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 command 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: ------------------------------------------------------Action symbol Name Description ------------------------------------------------------+ Add TLIB adds the named file to the library. If the file has no extension given, TLIB assumes an extension of .OBJ. If the file is itself a library (with a .LIB extension), 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.

TLIB action symbols To create a library, add modules to a library that does not yet exist.

- 47 -

Table 1.3: TLIB action symbols (continued)_____________ You can't directly rename modules in a library. To rename a module, extract and remove it, rename the file just created, then add it back into the library. -* *Extract & Remove TLIB copies the named module to the corresponding file name and then removes it from the library. This is just shorthand for an extract followed by a remove operation. TLIB replaces the named module with the corresponding file. This is just shorthand for a remove followed by an add operation.

-+ +-

Replace

------------------------------------------------------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 command. 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 the library with other linkers (or allow other people to use the library with other linkers), for your own protection you should not use the /C option. It may seem odd that, without the /C option, TLIB rejects symbols that differ only in case, especially since C and C++ are case-sensitive languages. The reason is that some linkers fail to distinguish between symbols in a library that differ only in case. Such linkers, for example, will treat stars, Stars, and STARS as the same identifier. TLINK, on the other hand, has no problem distinguishing uppercase and lowercase symbols, and it will properly accept a library containing 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 macros are listed alphabetically and described in more detail starting on page 55. State macros ======================================================= State macros are expanded according to the state of the IDE. The state macros are $COL $CONFIG $DEF $ERRCOL $ERRLINE $ERRNAME $INC $LIB $LINE $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 $DRIVE() $EDNAME $EXENAME $EXT() $NAME() $OUTNAME

Instruction macros ======================================================= Instruction macros tell the IDE to perform some action or make some setting. The instruction macros are $CAP EDIT $CAP MSG(filter) $DEP() $MEM(kb to reserve) $NOSWAP $PROMPT $SAVE ALL $SAVE CUR $SAVE PROMPT $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 program that has line-oriented messages output (file and line number) with this macro.

$CAP MSG(filter): Captures program output into the Message window, using filter as a DOS filter for converting program output into Message window format. We've provided several filters for this macro: GREP2MSG.EXE for GREP and TASM2MSG.EXE for Turbo 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 Pascallike language that has many built-in primitive editor commands. Its use is documented in this file.

Use this macro with the Turbo Editor Macro Language (TEML) compiler. With it, you can edit the TEML script file in an editor and then invoke the Turbo Editor Macro Compiler (TEMC) to process the script. When the configuration file is reloaded, your new or modified editor commands will be in effect. When installing TEMC 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 userdefined 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 CTRLK+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 RgAr UpAr DnAr Ins Del Enter Return BkSp Tab BkTab

Left arrow Right arrow Up arrow Down arrow

Same as Enter Backspace No longer available, use Shift-Tab

- 63 -

Esc Star Minus Plus Space PrtSc F1 to F10

* key on the numeric keypad - key on the numeric keypad + key on the numeric keypad Spacebar Function keys

-------------------------------------------------------

=========================================================================== Predefined editor commands =========================================================================== TEMC lets you use built-in editor commands and userdefined 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 commands

------------------------------------------------------Command name What the editor does ------------------------------------------------------BackspaceDelete BottomOfScreen Deletes character before the cursor. Moves cursor to the bottom line of the current window, leaving column unchanged. Adjusts the screen display to ensure the cursor is visible. If any adjustment is necessary, adjust the display so the cursor is

CenterFixScreenPos

- 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. Moves cursor left over one character. This command will skip over tab characters and move to the end of the previous line. Moves cursor right over one character. This command will skip over tab characters and advance to the beginning of the next line. Moves cursor down one row. Moves cursor left one screen column. Moves cursor right one screen column. Like CursorLeft, but pays attention to cursor through tab option setting (see SetCursorThroughTabMode). Like CursorRight, but pays attention to cursor through tab option setting (see SetCursorThroughTabMode). Moves cursor up one row.

CursorCharLeft

CursorCharRight

CursorDown CursorLeft CursorRight CursorSwitchedLeft

CursorSwitchedRight

CursorUp

- 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. Deletes the character at the current cursor location. Deletes the current line. Deletes all characters in the current line, leaving a zero-length line. Deletes from cursor to beginning of next word. Moves cursor to end of file buffer. Initiates a series of commands that will select a block of text between the initial and ending positions of the cursor. Ends a series of commands begun by ExtendBlockBeg. 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). Adjusts the screen display to ensure the cursor is visible.

DeleteChar

DeleteLine DeleteToEOL

DeleteWord EndCursor ExtendBlockBeg

ExtendBlockEnd FixCursorPos

FixScreenPos

- 66 -

Table 1.4: TEMC editor commands (continued)____________ FullPaintScreen Redraws the entire window, making no assumptions about what is onscreen. Sets a flag indicating that the selected text should not be highlighted. Sets a flag indicating that if the beginning and end selected text markers are valid, the selected text should be highlighted. Moves cursor to beginning of the file buffer. Inserts a space at the beginning of each line in the highlighted (selected) text. Inserts the literal "string" in the buffer at the current cursor location. Use the syntax InsertText(string) to call this command. Moves cursor to beginning of the current line. 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. Sets a flag indicating that the contents of the buffer are different than what is

HideBlock

HighlightBlock

HomeCursor IndentBlock

InsertText

LeftOfLine LiteralChar

MarkBufModified

- 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. Same as MatchPairForward except if the cursor is on a ' or ", searches backward for the matching character. 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. Like CopyBlock, but also deletes the original selected text. Moves cursor to the location marked as the beginning of the selected text. Moves cursor to the location marked as the end of the selected text. Moves the cursor to the location saved with SetMark(n) command. Use the

MatchPairBackward

MatchPairForward

MoveBlock

MoveToBlockBeg

MoveToBlockEnd

MoveToMark

- 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." Moves the cursor to the saved temporary marker. No operation. Calls the editor, but performs no function. Can be used to cause a keystroke to have no effect. Deletes a leading space, if any, from the beginning of each line in the highlighted (selected) text. Moves cursor down by number of lines in the window. Scrolls screen down by numer of lines in the window, leaving cursor position unchanged. Scrolls screen up by numer of lines in the window, leaving cursor position unchanged. Moves cursor up by number of lines in the window. Redraws the entire window, assuming that the screen still correctly displays what the editor last drew on it.

MoveToTempPos NullCmd

OutdentBlock

PageDown PageScreenDown

PageScreenUp

PageUp PaintScreen

- 69 -

Table 1.4: TEMC editor commands (continued)____________ ReDo Performs an Redo operation. Exactly what happens depends on the option settings. Moves cursor to end of current line. Moves cursor to the next column that follows the end of a word. Scrolls screen down one line, leaving cursor position unchanged. Scrolls screen up one line, leaving cursor position unchanged. Sets the Auto Indent option On. Sets the Backspace Unindents option On. Sets the beginning of the selected text to be the character at the current cursor location. Sets the end of the selected text to be the character at the current cursor location. Sets the Cursor Through Tabs option On. Sets Insert/Overwrite option to Insert. Sets a marker to point to the character at the current cursor location, so a later MoveToMark(n)

RightOfLine RightOfWord

ScrollScreenDown

ScrollScreenUp

SetAutoIndent SetAutoOutdent SetBlockBeg

SetBlockEnd

SetCursorThroughTabMode SetInsertMode SetMark

- 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 SetPrevPos Sets Optimal Fill option On. 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. Sets Use Tab Char option On. 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. Redraws the window, skipping any portions that the editor is sure are unmodified since the last redraw. Inserts space or tab characters in accordance with the current settings of the Use Tab Char option, Tab Width. Exchanges the values of the cursor and the "previous position marker." Toggles the state of the Auto Indent option.

SetTabbingMode SetTempPos

SmartRefreshScreen

SmartTab

SwapPrevPos

ToggleAutoIndent

- 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). Toggles state of Insert/Overwrite option. Toggles state of Optimal Fill option. Toggles state of Use Tab Char option. Moves cursor to the top line currently displayed in the window, leaving column unchanged. Performs an Undo operation. Exactly what happens depends on the option settings. Moves cursor to beginning of previous word, or to end of previous line, whichever is first. Moves cursor to beginning of next word, or to the end of a line, whichever is first.

ToggleInsert ToggleOptimalFillMode ToggleTabbingMode TopOfScreen

UnDo

WordLeft

WordRight

------------------------------------------------------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 ChangeDirectory ChangeModeFlags Adds a watch item (Ctrl-F7). Opens a dialog box for changing the current directory. 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. Copys selected text to Clipboard (Ctrl-Ins). Cuts selected text to Clipboard (Shift-Del). Pastes Clipboard into buffer at cursor (Shift-Ins). Shows Clipboard (no hot key defined). Closes editor window (Alt-F3). Compiles current buffer (Alt-F9). Selects Compile menu (Alt-C). Selects the Options Compiler menu Selects Debug menu (Alt-D). elects Edit menu (Alt-E). Selects File menu (Alt-F). Opens a dialog box for the Search operation. (Alt-S F) Selects window #1 (Alt-1). Selects window #2 (Alt-2). Selects window #3 (Alt-3). Selects window #4 (Alt-4). Selects window #5 (Alt-5). Selects window #6 (Alt-6). Selects window #7 (Alt-7). Selects window #8 (Alt-8). Selects window #9 (Alt-9). Opens the Help window (F1). Selects Help menu (Alt-H). Display the Help system't index (Shift-F1) Inspects item (Alt-F4). Opens previous help window (AltF1). Makes project (F9). Highlights top menu bar.

ClipCopy ClipCut ClipPaste ClipShow CloseWindow CompileFile CompileMenu CompilerOptions DebugMenu EditMenu FileMenu GetFindString GotoWindow1 GotoWindow2 GotoWindow3 GotoWindow4 GotoWindow5 GotoWindow6 GotoWindow7 GotoWindow8 GotoWindow9 Help HelpMenu HelpIndex Inspect LastHelp MakeProject Menu

- 73 -

Modify NextError NextWindow OpenFile OptionsMenu PrevError PrintBlock ProjectMenu Quit ReadBlock

RepeatSearch Replace ResetProgram RunMenu RunProgram RunToHere SaveFile SaveFileAs SearchMenu Step SystemMenu ToggleBreakpoint Trace Transfer0 Transfer1 Transfer2 Transfer3 Transfer4 Transfer5 Transfer6 Transfer7 Transfer8 Transfer9 ViewCallStack

Evaluates expression/modify variable (Ctrl-F4). Moves to next item in message window (Alt-F8). Selects next window in IDE (F6). Opens dialog box for File Open (F3). Selects Options menu (Alt-O). Moves to previous item in message window (Alt-F7). Writes selected text to the printer. Selects Project menu (Alt-P). Exits the IDE (Alt-X). Opens dialog box requesting a file name to be read into the buffer at the cursor location and marked as selected text. Searches again, using previous parameters. Opens an dialog box for the Replace operation. Resets program being debugged (Ctrl-F2). Selects Run menu (Alt-R). Makes and runs current executable (Ctrl-F9). Runs program until statement at cursor (F4). Saves current editor buffer (F2). Opens dialog for File SaveAs. Selects Search menu (Alt-S). Step over (F8). Selects Sytem menu (Alt-Spacebar). Sets/Clears a breakpoint at the cursor location Trace into (F7). Selects nth item from transfer menu . . . . . . . . . Views Call Stack (Ctrl-F3).

- 74 -

ViewUserScreen WindowList WindowMenu WindowCascade WindowTile WordHelp WriteBlock ZoomWindow

Displays User Screen (Alt-F5). Displays window list (Alt-0). Selects Window menu (Alt-W). Context sensitive help (Ctrl-F1). Opens dialog box requesting a file name to which the selected text will be written. Zooms/unzoomd current window (F5).

- 75 -

- 76 -

INDEX ___________________________________________________________________________

- + and + - (TLIB action symbols) 48 [ ] GREP operator 17 /? THELP help option 40, 42 -* and ** (TLIB action symbols) 47 * (TLIB action symbol) 47 + (TLIB action symbol) 47 - (TLIB action symbol) 47 $ GREP operator 17 * GREP operator 17 + GREP operator 17 . GREP operator 17 \ GREP operator 17 ^ GREP operator 17 ? THELP option 40, 42 A add (TLIB action symbol) 47 B BGIOBJ 2-10 advanced features 6 command-line syntax 3, 6 components 6 example 4 graphics.h and 8 options destination file 7 /F 6 file name 6 file name (/F) 5 public name 7 segment class 7 segment name 7 source file 7 C -c GREP option (count only) 14

/C THELP option (select color) 39, 40 /C TLIB option (case sensitivity) 45, 50 $CAP EDIT transfer macro 55 $CAP MSG transfer macro 55 case sensitivity GREP option 14 TLIB option 45, 50 characters trigraph converting 53 $COL transfer macro 56 columns numbers 56 command line syntax CPP 10 compilers Turbo editor macro 56 $CONFIG transfer macro 56 configuration files 56 TCC file 10 CPP and 10 conversion trigraphs 53 CPP 10-12 command-line options and syntax 10 directory 10 example of use 11 files compiling 11 -P option (source file names and line numbers) 11 wildcards and 10 D -d GREP option (directories) 14 /D OBJXREF option (directory) 24

Index

77

debugging include files 10 macros 10 $DEF transfer macro 56 Defines option transfer macro 56 $DEP transfer macro 56 dependencies explicit 56 $DIR transfer macro 56 directories CPP 10 GREP option 14 include files transfer macro 57 libraries transfer macro 57 .OBJ files 24 transfer macro 56 DLLs creating 57 DOS commands running from the IDE 59 $DRIVE transfer macro 56 E /E TLIB option (extended dictionary) 45, 49 editor macro language (TEML) using 56 $EDNAME transfer macro 56 $ERRCOL transfer macro 57 $ERRLINE transfer macro 57 $ERRNAME transfer macro 57 errors linker graphics drivers and fonts 5 OBJXREF (list) 34 examples OBJXREF 28-33 .EXE files file name transfer macro 57 $EXENAME transfer macro 57 $EXT transfer macro 57

extended dictionary TLIB and 45, 49 extract and remove (TLIB action) 47 F /F BGIOBJ option 6 /F BGIOBJ option (far routines) 5 /F OBJXREF option (include full library) 25 /F THELP option 41 /F THELP option (Help file path and name) 40 files dates changing 51 destination BGIOBJ 7 extensions 57 linker response, used by OBJXREF 28, 33 macros expanded 10 matching GREP option 14 names macros transfer 54 printing (GREP) 15 output, generated by OBJXREF 25 path macros 56 saving all 58 searching 12-22 source BGIOBJ 7 filters 55 GREP 56 Resource Compiler 56 TASM 56 fonts adding to graphics library 3 files, converting to .OBJ files 2 included with Turbo C++ 4 linker errors and 5 linking 2-10 registering 3, 8

- 78 -

stroked 2-10 linking 2 G graphics drivers adding to graphics library 3 converting to .OBJ files 2, 2-10 included with Turbo C++ 4 linker errors and 5 linking 2 registering 3, 8 graphics.h (header file) BGIOBJ and 8 GRAPHICS.LIB adding to 3 GREP (file searcher) 12-22 capturing messages 56 examples 18 files to search 18 help 13 literal character 17 matches 17 operators 17 optimizing use of 16 options case sensitivity (-i) 14 count only (-c) 14 default 15, 16 discussion 13 file names (printing) 15 -i (case sensitivity) 14 line numbers (-n) 14 lines, nonmatching (-v) 15 list matching files (-l) 14 -n (line numbers) 14 -o (UNIX output format) 14 precedence 16 regular expression search (-r) 14 UNIX format (-o) 14 updating (-u) 15 -v 15 -v (nonmatching lines) 15 verbose 15 word search (-w) 15 search strings 16

white space in 18 using 13 wildcards and 18 GREP.COM 16 GREP2MSG.EXE 56 H /H THELP option (help) 40, 42 header files graphics.h 8 help GREP (file searcher) 13 OBJXREF 23 THELP 40, 42 hot keys scan codes 42 I -i GREP option (case sensitivity) 14 /I OBJXREF option (case sensitivity) 24 $INC transfer macro 57 include files debugging 10 directories transfer macro 57 integrated environment DOS commands and 59 memory needs 59 K /K THELP option (change hot key) 40, 42 keyboard trigraph program 53 L -l GREP option (list matching files) 14 /L OBJXREF command (linker response file) 28 $LIB transfer macro 57 libname (TLIB option) 45

Index

79

libraries directories transfer macro 57 files 22 contents of 22 graphics adding driver and font files to 3 object files 43, 44 creating 47 OBJXREF including all 25 page size 49 $LINE transfer macro 57 lines numbering 57 printing (GREP) 14 linker error: segment exceeds 64K 5 response files used by OBJXREF 28, 33 linking graphics drivers 2 listfile (TLIB option) 45 M macros CPP and 11 debugging 10 editor 56 expanded list of 10 preprocessing 11 preprocessor 10 MAKE (program manager) modifying 51 project files and 36 $MEM transfer macro 57, 59 memory requirements IDE 59 transfer programs 57, 59 Message window capturing output into 55 copying text from 59 messages capturing from programs 55

column number 57 file name 57 line number 57 module names, TLIB 46 N -n command-line compiler option CPP and 10 -n GREP option (line numbers) 14 /N OBJXREF option (limit reports) 26 $NAME transfer macro 57 $NOSWAP transfer macro 57 numbers column 56 line 57 O -o GREP option (UNIX format output) 14 /O OBJXREF option (output file for reports) 25 .OBJ files converting font files into 2 converting graphics drivers files into 2 defined 22 directories 24 libraries advantages of using 44 creating 47 TLIB and 43 names 22 response files and 27 object modules defined 22 names 22 OBJXREF 22-34 directories 24 error messages 34 examples of reports 29, 30, 31, 32 help 23 /L command (linker response files) 28

- 80 -

linker files as response files 28 options 23 /N (limit information) 26 /RV 26 /RC 31 control 24 directories (/D) 24 /F (include full library) 25 ignore case (/I) 24 include full library (/F) 25 include zero-length segment definitions (/Z) 25 list file names (/V) 25 modified reports 26 /O (output file) 25 reports 25 by class type example 33 by class type (/RC) 26, 31 by external reference (/RX) 26, 30 by module (/RM) 26, 29 by public names (/RP) 26, 29 by reference (/RR) 26, 30, 33 default type 33 of all types (/RV) 26 of module sizes (/RS) 26, 31 of unreferenced symbol names (/RU) 26, 32 output file (/O) 25 verbose example 33 verbose (/RV) 26, 32 /V (verbose output) 25 verbose report (/RV) 32 /Z (include zero-length segment definitions) 25 project files as response files 27 project files (/P) 27 reports 23 modifying 26 output file for (/O) 25 response files 23, 27 example 33 linker 28 warnings 34

wildcards and 23 operations (TLIB option) 45 operators GREP 17 $OUTNAME transfer macro 57 output capturing 55 output file generated by OBJXREF 25 P -P CPP option (source file names and line numbers) 11 /P OBJXREF command (project files) 27 /P TLIB option (page size) 49 page size (libraries) 49 path transfer macro 57 precedence GREP options 16 TLIB commands 46 PRJ2MAK (project file converter) 36 PRJCNVT (project file converter) 35 $PRJNAME transfer macro 58 programs capturing output 55 file name 57 memory assignments 59 project files OBJXREF and 27 used by OBJXREF 33 projects files converting from old versions 35 converting to MAKE files 36 file name transfer macro 58 $PROMPT transfer macro 58 public names defined 22 R -r GREP option (regular expression search) 14 /RC OBJXREF option (report) 31 /RC OBJXREF option (reports) 26

Index

81

redirecting program output 55 registerbgidriver (function) BGIOBJ and 3, 8 registerbgifont (function) BGIOBJ and 3, 8 registerfarbgidriver (function) BGIOBJ and 6, 8 registerfarbgifont (function) BGIOBJ and 6, 8 remove (TLIB action) 47 replace (TLIB action) 48 Resource Compiler capturing messages 56 resources rebuilding automatically 56 response files file-name extensions and 27 formats 27 free-form 27 example 33 linker files and 28 OBJXREF and 23, 27, 28 example 33 project files and 27 TLIB 48 TLINK, OBJXREF and 33 /RM OBJXREF option (reports) 26 /RP OBJXREF option (reports) 26 /RR OBJXREF option (reports) 26 /RS OBJXREF option (reports) 26 /RU OBJXREF option (reports) 26 /RV OBJXREF option (reports) 26 /RX OBJXREF option (reports) 26 S $SAVE ALL transfer macro 58 $SAVE CUR transfer macro 58 $SAVE PROMPT transfer macro 58 scan codes 42 searches text files 12-22 source files separately compiled 44 standalone utilities 1 strings searching for as expressions (GREP) 14

in text files 12-22 swapping to User Screen 57 syntax CPP 10 TLIB 44 T TASM2MSG.EXE 56 $TASM transfer macro 58 text Message window 59 text files searching 12-22 THELP (Turbo Help utility) 37-43 additional Help on highlighted word 39 cursor keys 38 index 39 invoking 37 keywords 38 loading 37 options 39-43 colors (/C) 40 colors (/C) 39 Help file path (/F) 40 help file path (/F) 41 help on (/? /H ?) 40, 42 Help screen colors (/C) 39 help screen colors (/C) 40 hot keys (/K) 40, 42 reassign hot keys (/K) 40, 42 removing THELP (/U) 40, 43 screen colors (/C) 39, 40 /U (removing THELP) 40, 43 /W (window options) 40 window options 43 window options (/W) 40 paging through 38 paste page 39 previous screens 39 quitting 39 removing from memory 40, 43 scan codes 42 using 38

- 82 -

TLIB (librarian) 43-51 action symbols 46-48 capabilities 43 examples 51 extended dictionary (/e) TLINK and 49 module names 46 operations 46 precedence 46 options case sensitivity (/c) 45, 50 /E 45, 49 extended dictionary (/e) 45, 49 libname 45 listfile 45 operations 45 page size (/P) 49 using 44 response files using 48 syntax 44 TLIB (Turbo librarian) 43-51 options 39-51 TLINK (linker) response files OBJXREF and 28 TLIB extended dictionary and 49 TOUCH 51, 52 transfer macros $CAP EDIT 55 $CAP MSG 55 $COL 56 $CONFIG 56 $DEF 56 defined 54 $DEP 56 $DIR 56 DOS commands 59 $DRIVE 56 $EDNAME 56 $ERRCOL 57 $ERRLINE 57 $ERRNAME 57 $EXENAME 57 $EXT 57 file names 54 glossary of 55 how expanded 54

$INC 57 instruction 55 $LIB 57 $LINE 57 $MEM 57 $NAME 57 $NOSWAP 57 $OUTNAME 57 $PRJNAME 58 $PROMPT 58 $SAVE ALL 58 $SAVE CUR 58 $SAVE PROMPT 58 $TASM 58 $WRITEMSG 59 trigraphs translating 53 undo option (-u) 53 Turbo Assembler capturing messages 56 $TASM macro 58 TURBOC.CFG 10 U -u GREP option (updating) 15 /U THELP option 43 /U THELP option (remove THELP) 40 UNIX format (GREP) 14 User Screen 57 utilities standalone 1 TLIB 43-51 TOUCH 51 V -v GREP option (nonmatching lines) 15 /V OBJXREF option (verbose output) 25 W -w GREP option (word search) 15 /W THELP option (ser window size/location) 40

Index

83

/W THELP option (window options) 43 wildcards CPP and 10 OBJXREF and 23 TOUCH and 52 $WRITEMSG transfer macro 59

Z -z GREP option (verbose) 15 /Z OBJXREF option (include zerolength segment definitions) 25

- 84 -

You might also like