 /* DCREADME.TXT */  ' 			dcc version 2.1h, November 6th, 1998    Introduction ------------  O dcc is a C checker program, described in the December 1995 issue of ACM SIGPLAN I Notices (see also 'dccarticle.ps' and 'dccarticle.ascii' included files).     	 Copyright 	 ---------   ; //  Copyright Ecole Superieure d'Electricite, France, 1995.  //  All Rights Reserved.    	 Agreement 	 ---------   N // TITLE.  Title, ownership rights, and intellectual property rights in and toM // the Software shall remain in Supelec and/or its suppliers. The Software is 1 // protected by international copyright treaties.  //  N // DISCLAIMER OF WARRANTY.  Since the Software is provided free of charge, theJ // Software is provided on an "AS IS" basis, without warranty of any kind,N // including without limitation the warranties of merchantability, fitness forO // a particular purpose and non-infringement. The entire risk as to the quality M // and performance of the Software is borne by you. Should the Software prove K // defective, you and not Supelec assume the entire cost of any service and K // repair. This disclaimer of warranty constitutes an essential part of the N // agreement. SOME STATES/COUNTRIES DO NOT ALLOW EXCLUSIONS OF AN IMPLIED WAR-O // RANTY, SO THIS DISCLAIMER  MAY NOT APPLY TO YOU AND YOU MAY HAVE OTHER LEGAL K // RIGHTS THAT VARY FROM STATE/COUNTRY TO STATE/COUNTRY OR BY JURISDICTION.  //  N // LIMITATION OF LIABILITY.  UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY,L // TORT, CONTRACT, OR OTHERWISE, SHALL SUPELEC OR ITS SUPPLIERS OR RESELLERSN // BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL,K // OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, L // DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNC-H // TION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES. SOME STATES/M // COUNTRIES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSE- K // QUENTIAL DAMAGES, SO THIS LIMITATION AND EXCLUSION MAY NOT APPLY TO YOU.      Bugs ----  N No guarantee is given that this version of dcc is free of bugs, although every- efforts are made to chase and eliminate them.   J If you uncover one (or more...), please let me know (at e-mail dccsupport@K supelec.fr); a bug report should include a description of the problem and a J short source file causing it, along with the version/release number of dccL (see below, 'dcc options' paragraph) and the platform (machine/system) used.     Files  -----    There are five sets of files:    - program files:    dccFiles.mng     configdc.th    dc.th    dcblk.c/h/ph     dcdecl.c/h/ph    dcdir.c/h/ph     dcexp.c/h/ph     dcext.c/h/ph     dcfmt.c/h    dcinst.c/h/ph
    dcmsg.txt*     dcmain.c/h/ph    dcprag.c/h/ph    dcrec.c/h/ph     dcrecdir.c/ph/th     dctxttok.c/h    - installation files:     makefile		(UNIX) I    makefile.win32	(WINDOWS) (courtesy of C. Enache, UPB student, Romania)     createlocalexec	(UNIX)     installfile		(UNIX)    descrip.mms		(VMS)     installdccvms.com	(VMS)   - execution files:+    adjFiles.dcc		(list of adjustment files) #    *.adj	        (adjustment files) /    dynarray.h		(header file for dynamic arrays)     starter.dccvmsvax    starter.dccvmsalpha    starter.dccgccmips     starter.dccgccalpha8    starter.dcccchp715   (courtesy of F. Mullet, alumnus);    starter.dccgcclinux  (courtesy of Ch. Duverger, alumnus) ;    starter.dccgccsunos  (courtesy of Ch. Duverger, alumnus) <    starter.dccxlcaix	(courtesy of W. Briscoe, freelance, UK)=    starter.dccclwin32	(courtesy of E. Bezine, junior student)   
 - test files: 	    tstdcc     tstdccvms.com   - files describing dcc:     dccarticle.psJ    dccarticle.ascii (to be able to obtain 'diff' with previous version(s))  H FILES FROM OLD DISTRIBUTIONS SHOULD BE DISCARDED BEFORE INSTALLING A NEWD VERSION (except possibly 'adjFiles.dcc' and local adjustment files).    2 Configuration, compilation and installation of dcc2 --------------------------------------------------  J The configuration phase means possible adaptations of files 'configdc.th',I 'dccFiles.mng', and 'dcmsg.txt' (see also 'starter.dcc', next paragraph).   K File 'configdc.th' serves to configurate dcc (buffer sizes and so on); most M settings should be valid on any machine (except perhaps smaller memory machi- L nes); comments are supposed to be meaningful enough to make clear the use of each defined symbol.O The symbol LONGLONG should only be defined on platforms having a larger integer A size than 'long'; its value is then the naming of that type (e.g.  #define LONGLONG long long or #define LONGLONG __int64N In the latter case, a "#define __int64 long long" should be put in the starter file (see later)).J If LONGLONG is not defined, the syntax for 'long long' numerical constants ("LL") is not recognized. K EBCDIC character coding could be supported by changing the 'charInfo' array  (file 'dcrec.c'). M The macro IsVisibleChar governs what is an 'invisible character'; it is to be 0 adapted to locally used character set extension.O The SignedChar/SignedIntField symbols may have to be adapted from their default  value.O Input/output is done entirely via fopen/fread/feof/fflush/fputs/fclose/getchar/ O setvbuf. The only other system functions used are: malloc/realloc/free, setjmp/ L longjmp, exit/abort, system (to pass control to the local compiler), fileno/ isatty, and getenv.   J File 'dccFiles.mng' is to be adapted to local conditions; it indicates theK directory where the adjustment files list file (see next paragraph) and the M starter file are to be found, and the system header files directory. The con- O tent of environment variable DCCFILES, if defined, supersedes these values; its O format is: <adjFilesListDir> or <adjFilesListDir> <space> <sysHdrInclFilesDir>.   E Files 'dcmsg.###' contain the text of all messages (including errors/ J warnings); since these messages are C string literals, they can be changedN at will. ### indicates the language used for messages; at present, there existN "eng"lish and "fre"nch versions. The file corresponding to the chosen language= should be copied to file 'dcmsg.txt' (default option: "eng"). L The character sequence '@x', where x is a digit in the range '1'-'9', is not; outputted as such, but replaced by a text generated by dcc. P The character sequence '@0' toggles a flip-flop telling whether or not to outputN by default the '@0' parenthesized message chunk (output if in interactive mode7 with 'e'/'E' command, or with options '+zve', '+zvve').   N On an UNIX system, once these files set, compilation is done by typing 'make'.O Then test dcc on itself (type 'tstdcc'): this should generate no error nor war- N ning. The 'make install' command installs dcc into the system (first edit fileO 'installfile' to define where you want it to be; unmodified, this file installs L dcc in /usr/local/bin/, adjustment files (see next paragraph) in /usr/local/O include/DccAdj/, and the remaining 'execution' files in /usr/local/lib/DccExec- K Files/ (see the DccDir symbol in file 'dccFiles.mng', or the first value in ! DCCFILES environment variable)).    N On a VMS system, use 'installdccvms.com' file. The following DCL logical names has to be defined beforehand:   B - dccdir		directory where dcc execution files (see next paragraph) 			are installed, I - dccsysincldir		directory where system header files ('stdio.h' etc.) can  			be found.  5 Also, 'dcc' has to be defined as a "foreign" command.   O On Windows95/WindowsNT, with Microsoft VisualC++4.0, use 'makefile.win32' file. M Do not forget to set the INCLUDE, LIB, and PATH environment variables, e.g. : 1 set INCLUDE=C:\Program Files\DevStudio\VC\include ) set LIB=C:\Program Files\DevStudio\VC\lib O set PATH=C:\Program Files\DevStudio\VC\bin;C:\Program Files\DevStudio\SharedIDE  									    \bin ( On other systems, you are on your own...  N Note 1: each dcc source file begins with an /* <fileName> */ comment, and endsN         with an /* End <fileName> */ comment, to make it easy to check that it(         has not been truncated by error.K Note 2: possible local compiler warnings while compiling dcc can be ignored -         (provided the compiler is mature...).      'Execution' files  -----------------   5 Several files are needed by dcc to execute correctly:   ! - a starter file ('starter.dcc'), + - a number of adjustment files ('xxx.adj'), 1 - an adjustment files list file ('adjFiles.dcc').      Starter file  G Its purpose is to define those symbols that are predefined by the local L compiler. It also gives the name of the compiler (via a string literal, thatI must be the value of the '__dcc' symbol), and can override local 'exotic' B features (such as the "globalvalue" specifier of VMS C compilers).O Starter files for VMS C compilers (both VAXs and ALPHAs), the ULTRIX gcc compi- K ler, the OSF1 gcc compiler, the HP cc compiler, the LINUX gcc compiler, the N SUNOS gcc compiler, the AIX xlc compiler and the Windows VisualC++ cl compilerJ are included. For SUNOS, the system header files directory must be the gcc header files directory. ? A copy (named 'starter.dcc') of the chosen file has to be made.   K Note: the compiler called can be changed from the default by redefining the 7 '__dcc' symbol in dcc command line (-D or /DEF option).      Adjustment files  M Their purpose is to amend system header files, so that their declarations are M acceptable to dcc. Conceptually, an adjustment file is appended to the end of  the corresponding header file.  M An adjustment file should not declare/define anything not declared/defined by L the corresponding header file (except if something is missing in it, such asM the prototype for the "sbrk" function in stdlib.h), but they can redeclare at M will function prototypes, external objects, typedefs (even already used ones)  and macros.   N Any preprocessor feature can be used in them. The 'cdefined' function (similarN to the 'defined' preprocessor function, but answering True if its parameter isN an identifier defined in the compiled program, not in the preprocessor) can beP used to adjust, in a portable manner, common (but non-ANSI imposed, that is, notG compulsory) functions/objects that are locally defined (see for example % 'isascii' management in 'ctype.adj').   M Should any header file reveal to be unamendable, it can be purely replaced by P the corresponding adjustment file. The corresponding line in file 'adjFiles.dcc'0 must then begin with an exclamation point ('!').  H By convention, for a system header file named 'xxx.h', the corresponding# adjustment file is named 'xxx.adj'.   O Adjustment files for assert.h, ctype.h, curses.h (courtesy of W. Briscoe, free- N lance, UK), limits.h, math.h, setjmp.h, stdarg.h, stddef.h, stdio.h, stdlib.h,M string.h, time.h and unistd.h are included; adjustment files for the X-Window 2 library are available, but only partially checked.     Adjustment files list file  L It gives the path to the adjustment file corresponding to each system header file needing adaptation.    
 Test files
 ----------  M These command files just check dcc on its own source files; this check should # not generate any error nor warning.   J There are many more non-regression check files, but they are not included.     Article  -------   N Unfortunatly, the wrong version of the paper was published in SIGPLAN Notices;N so the right version (in fact updated and somewhat more detailed) is included,G in Postscript form, along with a pure ASCII form (for 'diff' purposes).     ! Implemented d-pragmas (as of now) ! ---------------------------------   K For the following, a "file identifier" is defined to be composed of a "file L access path" (machine name, directories...), followed first by a "file name"L and then by a "file suffix" that begins on the first dot '.' seen when scan-, ning the file identifier from right to left.M A "header" file is a source file whose file suffix contains the letter 'h' at I least once, and which is included via the '#include' directive; a "system O header" file is a header file whose '#include' directive uses the '<...>' form. I A "body" file is a source file which is neither a header file, nor a file  included by a header file.  3 /*~BackBranch*/	avoids warning on backward branchs: % 			goto alrdDefLabel /*~BackBranch*/;   N /*~CastTo <type> */ allows pseudo-cast between parallel types; also to be usedA 		    to avoid warning on comparison of difference(s) of unsigned 
 		    int:- 			typedef struct {int x;}Ts; typedef Ts Ts1; ' 			Ts s; Ts1 s1; unsigned int ui1, ui2;  			... 			s1 = /*~CastTo Ts1*/ s;5 			if (/*~CastTo unsigned int */ (ui2 - ui1) > 1) ...   N /*~ComposingHdr*/ tells that the whole service provided by the included header> 		  file is to be part of the service offered by the including 		  header file:& 			#include <math.h> /*~ComposingHdr*/  P /*~DccCompliant*/ in a system header file, indicates that the (remaining portionB 		  of the) file conforms to dcc requirements, and that 'typedefs'A 		  will create parallel types if applicable; usable anywhere (in  		  a system header file),  E /*~DollarSign*/	at beginning of module; autorizes '$' in identifiers,   G /*~DynInit*/	avoids warning on dynamic initialization (by constants) of  		composite objects:. 			[auto] struct _s toto = {...} /*~DynInit*/;  K /*~ExactCmp*/	avoids warning on floating point comparison for (in)equality: % 			if (fltVar == 0 /*~ExactCmp*/) ...   M /*~FullEnum*/	asks dcc to warn if not all constants of the (enum) switch type B 		has been used as case values; only useful if a 'default' case is> 		used (for example to catch possible 'strange' values of enum 		expression): 			default: /*~FullEnum*/ ...   I /*~Generic*/	tells dcc that the returned type of a function is compatible = 		with any descendant of this type (subtyping) or, in case of 0 		'void *' returning function, with any pointer:' 			int atoi(const char *) /*~Generic*/; # 			double sin(double) /*~Generic*/; % 			void *malloc(size_t) /*~Generic*/;   J /*~IndexType <type> */ specifies type of index values usable for an array,< 		       either statically or dynamically allocated (default? 		       index type for static arrays: type of bound, except if = 		       bound given by a plain arithmetic constant; then any = 		       integral arithmetic type), or that can be added to a : 		       pointer. To be used in array/pointer declaration:- 			  arr[ArrSiz /*~IndexType TcolorIndex */]; 5 			  bool * /*~IndexType Trow*/ * /*~IndexType Tcol*/  							      twoDimSwitchArray;  		       or pointer creation:  			  & /*~IndexType Tcol*/ col  N /*~Init <var>*/	tells the initialization-checking algorithm that, from now on,? 		<var> can be considered as initialized. Very specific (see X- @ 		Window applications, or adjustment files). Usable anywhere (in 		the scope of the variable): 3 			XtSetArg(arg[0], XmNchildren, /*~Init children*/  								     &children);  L /*~LiteralCst*/ tells that expressions of a so qualified type accept unnamed$ 	        constants without warnings:# 			typedef int Int /*~LiteralCst*/;   K /*~LocalAdr*/	marks a local address so that no warning on returning it from ; 		a function, or assigning it to a global/external pointer: - 			gblPtr = &localObject + 1 /*~ LocalAdr */;   G /*~Masking*/	avoids warning if a macro name is the same than an already  		existing identifier:+ 			#define /*~Masking*/ macroName macroBody   K /*~MayModify */	indicates that modifications may occur through a supposedly A 		const-pointing pointer (via casting), or through a struct/union   		containing non-const pointers:- 			void fct1601(struct _tag x /*~MayModify*/)   G /*~NeverReturns*/ specifies that a void function never returns control: . 			static void errExit(...) /*~NeverReturns*/;  M /*~NoBreak*/	avoids warning if falling through the end of a 'case' statement: ! 			case C1 : i = 1;  /*~NoBreak*/  			case C2 : i++;  break;   O /*~NoDefault*/	avoids warning if no 'default' case at end of 'switch' statement A 		(not to be used if type of switch driving expression is an enum = 		type of which all constants have been used as case values):  			case Cn : i = ... ; 			/*~NoDefault*/   K /*~NonConstExp*/ makes dcc believe that a (parenthesized) expression is not  		 constant:$ 			if ((~0==-1)/*~NonConstExp*/) ...A 		 (notice that the Pascalian form "while (TRUE)" can be advanta-r3 		  geously replaced by the C idiom "for (;;)"...),A  E /*~NotUsed*/	indicates that an object or an enum constant or a formale, 		parameter (function or macro) is not used:( 			enum {Ce1, Ce2 /*~NotUsed*/, Ce3 ...}: 			static void shift (Tstring x, TtypeElt y /*~NotUsed*/);! 			#define Sink(x /*~ NotUsed */)i9 			static const char *bof = "Version 3.3.1" /*~NotUsed*/;f  L /*~NoWarn*/	to be used in front of sections of code not (yet) dcc-compliant A 		(see also /*~Warn*/, /*~PopWarn*/ d-pragmas; warnings are auto-RB 		matically disabled inside system header files); usable anywhere,  7 /*~OddCast*/	to make dcc swallow a cast it frowns upon:y+ 			ptrInt = (int * /*~OddCast*/) ptrStruct;a  K /*~PopWarn*/	goes back to previous Warn/NoWarn state (see /*~Warn*/, /*~No-n> 		Warn*/ d-pragmas); at least 16 levels kept; usable anywhere,  M /*~PortableQM*/ to make dcc swallow a cast it has good reasons to believe not  		portable:s. 			ptrFloat = (float * /*~PortableQM*/)ptrDbl;  L /*~PrivateTo "<fileName>" [, "<fileName>"]* */   indicates that struct/union: 		members, or enum constants, declared thereafter are only? 		visible from the indicated file(s), or from macros defined inD? 		the indicated files or called by such macros; usable anywhereY9 		(in a header file). Scope: until next /*~PrivateTo*/ or > 		/*~Public*/ d-pragma; an '#include' of (another) header file? 		creates a hole in the scope, for the duration of the include. - 	 	File names may contain joker character(s):P% 			/*~PrivateTo "dc*.c", "dcrec.h" */N  H /*~PseudoVoid*/	authorizes a non void-returning function to be used as a 		statement:8 			char *strcpy(char *x, const char *y) /*~PseudoVoid*/;  K /*~Public*/	indicates end of last /*~PrivateTo*/ scope; usable anywhere (inS 		a header file),S  L /*~ResultPtr*/	for (pointer) parameters that are returned as result; implies@ 		/*~ResultType*/, plus allows "should be 'const'" pointer chec- 		king propagation:g3 			char *strchr(const char * /*~ResultPtr*/, char);   O /*~ResultType*/	indicates that the type of the result of a function call is thev? 		type (or the highest type) of the current actual parameter(s)u8 		corresponding to the so qualified formal parameter(s):9 			void *realloc(void *old /*~ResultType*/, size_t size);t, 			Window mergeWindow(Window/*~ResultType*/, 							 Window/*~ResultType*/);p  L /*~RootType*/	renders invisible from its hierarchy the subtree headed by the 		so qualified (parallel) type:i, 			typedef unsigned int Talgn /*~RootType*/;  M /*~SameValue*/	must qualify enum constants having the same value that a prev- # 		ious constant (of the same enum):gA 		     enum _colors {BegColors, InfraRed=BegColors /*~SameValue*/r: 			/* ~SameValue optional here, because 'BegColor' is last 			defined constant */,m  				   Red, Orange, Yellow, ...,+ 				   BegVisibleColors=Red /*~SameValue*/}t  G /*~SideEffectOK*/ tells that a side effect via a macro parameter is OK:a; 			#define DangerousMin(x, y/*~SideEffectOK*/) (x<y)? x : yi! 			DangerousMin(oldMin, tab[i++])   M /*~SizeOfMemBlk*/ allows to check, for 'malloc'-like functions using 'sizeof's> 		as parameter, whether the type of the sizeof argument is the( 		type pointed by the receiving pointer:* 			void *malloc(size_t /*~SizeOfMemBlk*/);  G /*~SizeOK*/	avoids warning when no width limit is specified ('sscanf'):c5 			(void)sscanf(charPtr1, "%s", charPtr2/*~SizeOK*/);r  O /*~TypeCombination <listComb>*/ indicates allowed combinations between indepen- A 		dant parallel types. The possible operators are: +, -, *, /, %,tA 		~+ (non-commutative add) and ~* (non-commutative multiply). Be-i5 		sides, some combinations are automatically deduced:r, 		- for '+', from Ta + Tb -> Tc are deduced: 			Tb + Ta -> Tc	(1) 			Ta - Tb -> Tc	(2)A 		  Line 1 is not deduced in case '~+'; line 2 is deduced only if  		  Tc = Ta., 		- for '*', from Ta * Tb -> Tc are deduced: `			Tb * Ta -> Tc	(3)- 			Tc / Ta -> Tb	(4) 			Tc % Ta -> Tc	(5) 			Tc / Tb -> Ta	(6) 			Tc % Tb -> Tc	(7)> 		  Lines 5, 7 are not deduced if either Ta or Tb is floating./ 		  Lines 3, 6, 7 are not deduced in case '~*'.e> 		If necessary, type hierarchy is searched to find an applying 		type combination. ? 		Usable only outside of any block. Once given, a type combina-e 		tion cannot be desactivated.& 			typedef float Volt, Amp, Watt, Ohm;) 			typedef int Tgen /* 'generic' type */;e 			typedef Tgen Tspe;a% 			/*~TypeCombination Volt*Amp->Watt,' 					   Amp*Ohm->Volt, 					   Tspe~+Tgen->Tspe */d 			typedef int Tfruit;  			typedef Tfruit Tapple, Tpear;1 			/*~TypeCombination Tapple + Tpear -> Tfruit */u 			{2 			  Volt v;Amp i;Watt p;Ohm r; Tspe spe;Tgen gen; 			  typedef Tapple MacIntosh;3 			  MacIntosh macIntosh; Tfruit fruit; Tpear pear;z 			  p = r * i * i;  /* OK */o 			  p = v * (v / r);  /* OK */'4 			  spe -= gen;  /* OK; illegal by default, because4 				     contrary to dcc default hierarchy rules. */+ 			  fruit = pear + macIntosh;}  /* idem */e  P /*~Undef <listIdent>*/     terminates (for dcc) the scope of all indicated iden-O /*~UndefTag <listIdent>*/  tifiers ('general' or 'tag' name space); usable any-t 			   where (at block level 0):o 				/*~Undef obj3, type22 */  J /*~Utility*/	to be used for functions returning a representation type that 		has no reason to be named:- 			int scanf(const char *, ...) /*~Utility*/;m  P /*~VoidToOther*/ autorizes automatic conversion from (non-generic) 'void *' typeB 		 to any other pointer type, or to read, via scanf, into a 'void  		 *' variable:n' 			objPtr = /*~VoidToOther*/ ptrOnVoid;c+ 			scanf("%i", /*~VoidToOther*/ ptrOnVoid);i  J /*~Warn*/	to be used in front of dcc-compliant code (default state at beg-B 		inning of program, except if '-znw' option used); usable anywhe-3 		re; see also /*~PopWarn*/, /*~NoWarn*/ d-pragmas,a  L /*~zif <boolExp> <stringCst> */   causes emission on stderr (at dcc checking< 		time) of <stringCst> if <boolExp> is true; can make use ofA 		special 'zif' functions (see "Software engineering tool" in the ; 		paper on dcc), and be used anywhere (also inside macros):(3 			/*~ zif (sizeof(typArray)/sizeof(typArray[0]) !=,: 			         __extent(TtypName)+1) "Array 'typArray': bad " 								     "length" */  N Notes:	- For dcc, a d-pragma is made up of tokens, perfectly macro-substituta-F 	  ble; for instance, the /*~LocalAdr*/ d-pragma consists of the three 	  following tokens:   			/*~         (pseudo-token)  			LocalAdr    (identifier)e 			*/          (normal token)   A 	- An empty d-pragma name is legal; the d-pragma is then ignored. 0 	- D-pragmas are visible with the '+zlt' option.     Indentation rules  -----------------c  O Indentation is checked only on lines beginning by a declaration or a statement.   O - general case:  indentation level is increased on entering a block (just aftereA 		 its opening brace), for the duration of the block, or on ente-t= 		 ring a substatement (statement controlled by 'if', 'else',e? 		 'do', 'while', 'for'), for the duration of the substatement.l  O - special cases: . no change of indentation level for construct "else if", botho& 						      tokens being on same line;? 		 . indentation level increased only once if substatement is a & 						  block (outside of macro body);; 		 . 'case/default's can be lined up with the correspondingd 								       'switch'.     dcc options. -----------c  N Their list can be obtained by executing a dcc command alone (no argument); theN version/release number is also given. If the prefix '+' is replaced by '-', or* vice versa, the option effect is reversed.  L dcc also interprets -I/-D/-U cc options (or their VMS counterparts), besides passing them to the compiler.\  M For VMS, only one macro can be defined by a given /DEF, and /DEF,/INCL,/UNDEF ) options have to be separated by space(s).w  O The environment variable DCCDFLTS can contain any part of the command line; itsnO content is logically added (just after 'dcc') to the beginning of all followingt dcc command lines.  K A given option is valid for all following files met in command line, unlessgE reverted; options given after last file name apply only to last file.      Exit statuse ------------  O dcc provides six different exit statuses, whose values depend on local platformiO (see file 'configdc.th'): EXIT_SUCCESS, two EXIT_WARNINGS, two EXIT_ERRORS, andn8 EXIT_FAILURE (returned when dcc has to stop before end).    & Badly implemented features (as of now)& --------------------------------------  N - floating constants are recognized lexically, but ill converted if fractionalM   part or non-null exponent (only noticeable in array declaration, e.g. "char (   arr[(int)(2.5+6.5)]" => [4], not [9]),6 - 'sizeof' does not take into account alignment holes,H - commas in macro body not correctly interpreted if dynamically created,' - portability not checked in all cases.O    " Unimplemented features (as of now)" ----------------------------------  M - check for lack of 'volatile' qualifier in the reach of a setjmp()/longjmp()r 									   pair, 2 - check for non-ambiguity of external identifiers,, - size of objects not given ('+zsy' option),5 - computation of floating-point constant expressions, , - propagation of /*~MayModify*/ information.     Known bug(s) ------------  N Macro are sometimes badly expanded in convoluted cases involving concatenation (##) and quotation (#).,    ) Main changes with respect to version 2.0: ) -----------------------------------------m  < - several compilation units checkable with same dcc command,> - introduction of DCCDFLTS and DCCFILES environment variables, - new exit statuses.   '16 bits int' platformsf -----------------------    Portage in progress.     /* End DCREADME.TXT */