1       Introduction.

1.1     Origin and history of C--

1.2     What is C--?

1.3     Installing

 

2       Control of compilation

2.1     Command-line options of C--

2.1.1   /ON - optimize numeric expressions

2.1.2   /DE - temporarily increase variable bit-size

2.1.3   /ARGC - use alternate command-line handler

2.1.4   /OST -  merge duplicate string constants

2.1.5   /D - predefine identifier as TRUE from command line

2.1.6   /IA - use simplified assembler input

2.1.7   /CRI - skip file included more than once

2.1.8   /IND - import function names from DLL

2.1.9   /WS - specify name of stub file for Windows programs

2.1.10  /WBSS - locate uninitialized data in a separate segment

2.1.11  /DBG - create debugging information

2.1.12  /J0 /J1 /J2

2.1.13  /LST - create assembler listing

2.1.14  /ENV - save address of environment variables

2.1.15  /CPA - clear post-area data

2.1.16  /W - output warnings

2.1.17  /NW - selectively switch off types of warnings

2.1.18  /WSI - short table import

2.2     Preprocessor directives

2.2.1   ?ifdef/?ifndef

2.2.2   ?initallvar

2.2.3   ?usestartup

2.2.4   ?startusevar

2.2.5   ?atexit

2.2.6   ?startuptomain

2.2.7   ?undef

2.2.8   ?align and ?aligncode

2.2.9   ?pragma

 

3       Constants

3.1     Numeric constants

3.2     Character constants

3.3     String constants

3.4     Constant expressions

 

4       Expressions

4.1     Types of expressions

4.2     Expressions of type EAX/AX/AL

4.3     Expressions using destination address of expression

4.4     Non-EAX/AX/AL expressions

4.5     Conditional expressions

4.5.1   Simple conditional expressions

4.5.2   Complex conditional expressions

4.6     Modification of expression type during assignment

4.7     Calculation in EAX/AX/AL register with a sign

 

5       Identifiers

5.1     Identifier format

5.2     Reserved identifiers

5.3     Universal registers for 16-bit and 32-bit modes

5.4     Predefined identifiers

 

6       Variables

6.1     Variable types

6.2     Variable declaration

6.3     Global variables

6.4     Local variables

6.5     Dynamic variables and structures

6.6     Assigning one value to several variables

6.7     Floating point variables

6.7.1   Format of floating point variables

6.7.2   Floating point constants

6.7.3   Range of permissible values

6.7.4   Mathematical operations

6.7.5   Transformations of types

6.7.6   Comparison operators

6.7.7   Comparing variables of type float with a 32-bit register

6.8     Pointers

 

7       Addressing

7.1     Relative addressing

7.2     Absolute addressing

 

8       Working with data blocks

8.1     Structures

8.1.1   What is a structure?

8.1.2   Syntax

8.1.3   Initializing structures at compilation

8.1.4   Initializing structures at run time

8.1.5   Operations on structure members

8.1.6   Embedded structures

8.1.7   Mapping a structure tag to a memory block

8.1.8   Bit fields in structures

8.2     Unions

8.3     Commands 'FROM' and 'EXTRACT'

 

9       Statements

9.1     Conditional statements

9.2     'do{} while' loop

9.3     'loop', 'LOOPNZ', 'loopnz' loops

9.4     'while', 'WHILE' loops

9.5     'for', 'FOR' loops

9.6     'switch/SWITCH' statement

9.7     'goto/GOTO' statement

9.8     'break/BREAK' statement

9.9     'continue/CONTINUE' statement

9.10    Logically combine conditions

9.11    Skip over loops

9.12    The logical negation operator

9.13    Calculate expression then check condition

9.14    Check bits during comparison operation

9.15    Transposition operator

9.16    Arithmetic negation operator

9.17    The bitwise negation operator

9.18    Special conditional expressions

9.19    Symbol '$' - inserts current address of program

9.20    Keyword 'static' and operator '::'

9.21    'sizeof' operator

9.22    Labels

 

10      Assembler

10.1    Assembler command support

10.2    Keyword 'asm'

10.3    Prefix 'dup' - repeat instructions DB/DW/DD

10.4    Pentium III instructions

 

11      Functions

11.1    Types of functions and macros

11.2    Stack call functions

11.3    Register call functions

11.4    Dynamic functions

11.4.1  Loading a dynamic function at a specific address in memory

11.5    Inline functions

11.5.1  Another use of 'inline'

11.6    Interrupt functions

11.7    Changing 'return' to 'goto'

11.8    Return values

11.9    Declaring options for register call functions

11.10   Declaring options for stack call functions

11.11   Use of macros

11.12   Transferring options to stack call functions via registers

11.13   Calling functions with an address in the register

11.14   Inline functions in the compiler

11.14.1 'ABORT', 'ATEXIT', 'EXIT' inline functions

11.14.2 inp/inportb, inport, inportd, outp/outportb, outport and

        outportd inline functions

11.14.3 Floating point inline functions

11.15   Classes

11.15.1 Declaring functions in structures

11.15.2 Inheritance

11.15.3 Function inheritance

 

12      Types of output files

12.1    Output files of type .com

12.2    Output files of type .exe

12.3    .exe output files with 'tiny' memory model

12.4    .obj output files

12.5    .com file symbiosis

12.5.1  What is symbiosis?

12.5.2  How to do it

12.5.3  Uses

12.5.4  Abuses

12.6    SYS - Device drivers

12.7    Compiling ROM-BIOS extender code

12.8    32-bit files

12.8.1  32-bit code under DOS

12.8.2  32-bit code under Windows

12.8.3  Calling API functions by number

12.8.4  Creating DLL's under Windows

12.8.5  Initializing DLL's while loading

12.8.6  Compiling resources

12.9    Output files for MeOS (MenuetOS)

 

13      Applications

13.1    Searching for includ files

13.2    Registers which must be saved

13.3    c--.ini

13.4    startup.h--

13.5    mainlib.ldp

13.6    C-- symbols

14      Thanks