1 <hmtl> <head> <title> EiC's Change log </title>
\r
3 <body bgcolor="white"> <font size=2>
\r
4 <!--Navigation Panel-->
\r
6 <h1>EiC's Change Log.</h1> <br>
\r
8 Significance of Changes
\r
10 * minor change or bug fix
\r
11 *** a new feature or function
\r
12 ****** major change or addition
\r
18 <b> Changes from 4.3.0 to 4.3.1 (next_release) </b>
\r
21 * fixed bug as reported by Steve Marthouse from vrml3d.com,
\r
22 that EiC's float conversion mechanism fails to execute
\r
28 * fixed bug as reported by Victor Eruhimov, that during
\r
29 error recovery EiC would on occassions aborting due to
\r
30 some bad memory addressing
\r
35 <b> Changes from 4.2.8 to 4.3.0 </b>
\r
38 ***** With the help of Al Amzeen, EiC compiles using DJGPP
\r
39 under win32. This provides fairly complete EiC
\r
40 installation, under win32.
\r
42 *** Added `void EiC_setMessageDisplay(void (*)(char*))'
\r
43 function. The purpose of this function is to allow
\r
44 an embedding system to control how EiC's error and
\r
45 warning messages are displayed. This is done by passing
\r
46 EiC_setMessageDisplay the function it wants used for
\r
47 displaying EiC's error and warning messages. The
\r
48 replacement function returns void and must accept a C
\r
49 style string. The strings passed are stack based and
\r
50 therefore, should either be displayed straight away or
\r
51 copied into a buffer space.
\r
53 *** added the `getcwd' function to unistd.h.
\r
56 *** added SVR4 and 4.3+BSD macro extensions to termios.h
\r
58 *** the win32 port of EiC now stores its include files in
\r
59 EiC\include. The environment variable HOMEofEiC
\r
60 doesn't need to be set if EiC is installed in
\r
63 *** Matt Minnis has added a `:quit' command to EiC and
\r
64 is simply an alias to `:exit'.
\r
66 *** More externally visible identifiers prefixed with
\r
69 * fixed problem with EiC not detecting HOMEofEiC
\r
70 environment variable under DJGPP and probably also
\r
73 * brought EiC/main/examples/embedEiC.c up todate:
\r
74 changed the call to init_EiC to EiC_init_EiC and
\r
75 the include path under win32.
\r
77 * fixed compile problems with the FreeBSD port of EiC.
\r
79 * fixed one cause of segmentation violation due to certain
\r
80 types of errors during declaration parsing.
\r
82 * fixed bug with EiC's scanf function as reported by
\r
84 while(scanf("%d", &num)==1)
\r
87 getting caught in a infinite loop when illegal input is
\r
90 * fixed problem with :gen command outputting the
\r
91 function call to add_builtinfunc rather than to
\r
92 EiC_add_builtinfunc.
\r
96 <b> Changes from 4.2.7 to 4.2.8 (Jun 12 2000) </b>
\r
99 *** The win32 makefile systems has had some modifications
\r
100 (still needs more).
\r
101 The EiC\config\genstdio.c is now incorporated into the make system
\r
102 and is used to generate standard header files. And EiC\main\main.c
\r
103 is used rather than EiC\src\main.c, bringing inline more closely
\r
104 with the Unix version.
\r
106 *** The `:clear' command now takes multiple file names delimited
\r
107 by commas as its arguments:
\r
109 :clear file[,<file>]*
\r
111 *** More name space tweaking. Most, if not all, externally visible variables
\r
112 and functions, are now prefixed by EiC_. This is to reduce
\r
113 the possibility of name conflicts between EiC source code
\r
114 and any embedding system.
\r
116 *** EiC now supports ISO-C signal.h and the signals (SIGXXXX) defined
\r
117 for POSIX.1 signal.h. See EiC's library documentation
\r
120 *** EiC's interface to the standard C library functions fgets()
\r
121 and gets() have been made safe against buffer overflows
\r
122 when used with safe pointers.
\r
124 *** Added to unistd.h the functions pause and alarm
\r
125 compliance: SVr4, SVID, POSIX, X/OPEN, BSD 4.3
\r
127 *** Added the standard ISO-C header iso646.h
\r
129 * removed limits.h and signal.h as they are now completely
\r
130 generated via EiC/config/genstdio
\r
132 * fixed EiC failure to apply the address operator to functions:
\r
134 EiC 1> int foo(int x) { return x;}
\r
135 EiC 2> foo == &foo;
\r
138 * fixed typo in EiC's online :help info for the :gen command
\r
140 * fixed access violation problem, as reported by Eroukhimov,
\r
141 Victor, caused sometimes by an error occuring with the operational
\r
142 type with in a selection statement.
\r
144 * included missing file EiC/test/EiCtests/teststatic3.aux
\r
145 within EiC's CVS repository.
\r
149 <b> Changes from 4.2.6 to 4.2.7 (May 16 2000) </b>
\r
152 *** A reset operator has been added. It is used to set EiC
\r
153 to a default internal state. All memory is freed, the
\r
154 contents of include files and global variables, allocated,
\r
155 included and declared, after the reset point, are removed. Any
\r
156 global scalar variables declared prior to the reset point will have
\r
157 their previous values restored. The default reset point is equivalent
\r
158 to starting EiC with the -N command line switch:
\r
160 EiC > :reset // regain a previous state
\r
162 It is also possible for the user to define the `reset point'
\r
163 by using the `:reset here' command:
\r
166 EiC 2> :reset here // set reset state
\r
173 see EiC's documentation for further details and gotchas.
\r
176 * documentation updated to reflect the `:reset' command.
\r
178 * termio and termios.h files have been updated on the Linux
\r
179 platform to conform with libc6.
\r
181 * fixed problem as reported Eroukhimov, Victor that
\r
182 EiC's source file src/assertp.h fails to define
\r
183 assertp when NDEBUG is defined.
\r
185 * Applied Ken Settle's patch that corrected EiC's
\r
186 failure to diagnose:
\r
188 EiC 1> 0 (15); //Function names cannot be constants
\r
190 * Applied Kaz Kylheku's patch to rid EiC's source code
\r
191 of many externally visible variables, by converting all
\r
192 object and function declarations, where possible, to static.
\r
193 This is important as it reduces the possibility of name
\r
194 conflicts between EiC source code and any embedding
\r
195 system. It also removed several dead function and variable
\r
198 * Further refinement to prevent name clashes between
\r
199 private and public object and function definitions
\r
200 between EiC functions.
\r
203 <b> Changes from 4.2.1 to 4.2.6 (Mar 25 2000) </b>
\r
207 *** The module termios.h has been interfaced to EiC.
\r
208 This allows for serial port programming under Unix.
\r
210 *** The :gen command has now an extra option, `num', which
\r
211 controls the number of multiplex callbacks generated:
\r
213 :gen <include_file> [num] ["<output_file>"]
\r
215 both num and output_file are optional. the
\r
216 default value for num is 1.
\r
218 * Fixed problem reported by Sreeni R. Nair
\r
219 with a typedef clash between SunOS header file
\r
222 * Fixed the following bugs as reported by
\r
225 1, EiC fails to diagnose:
\r
227 2, That char a[3][] = {"abc", "def"}; causes
\r
229 3, That EiC was not initialising char pointers correctly
\r
230 during declaration:
\r
231 EiC > char a[] = "adsf"; char *b = a;
\r
234 * documentation update and corrections.
\r
236 * Fixed bug associated with EiC's :show command
\r
237 causing illegal storage access when display
\r
238 struct, union or enum tag specifiers.
\r
240 * Fixed the following bugs as reported by
\r
243 1, that EiC at times fails to parse character
\r
244 literals correctly:
\r
246 EiC > assert(x == '\'');
\r
247 2, that EiC failed to assign pointers to builtin
\r
249 EiC > int (*p)(const char *fmt, ...) = printf;
\r
250 where printf is a builtin function.
\r
251 3, that ULONG_MAX definition on the win32 was
\r
253 4, that static variables declared in a file not
\r
254 always being hidden from clashes with other objects
\r
255 declared with the same name but within other
\r
257 5, function runEIC in starteic.c has a little transgression related
\r
258 to the use of the setjmp macro:
\r
259 if ((E = setjmp(env)) == 0) {
\r
261 } else if (E == _Err_) {
\r
264 * Applied David Ell's patch that removed
\r
265 hard coded directory
\r
266 reference in the EiC/src/Makefile.
\r
270 <b> Changes from 4.2.0 to 4.2.1 (Jan 14 2000) </b>
\r
273 ****** EiC now supports setjmp.h
\r
275 ****** EiC now supports gotos and labels as specified by ANSI-C.
\r
277 ****** EiC's parser can now handle LL(N) grammar, Previously it was
\r
278 only able to parse an LL(1) type grammar. This change in
\r
279 principle enables more easily language enhancements and
\r
280 extentions. N is specified via the definition of MAX_TOKENS
\r
281 in EiC/src/lexer.h and is currently set to 3.
\r
284 *** added the function `putenv' to stdlib.h
\r
285 Compliance: SVID 3, POSIX, BSD 4.3
\r
287 *** added the function `strdup' to string.h
\r
288 Compliance: SVID 3, BSD 4.3.
\r
290 *** Documentation updated to reflect the addition of setjmp.h,
\r
291 gotos, putenv and strdup.
\r
293 * for the win32 port, added missing file sys/time.h
\r
295 * fixed bug as reported by Victor that EiC doesn't handle error
\r
296 recovery correctly with respect to the removal of
\r
297 prototypes to builtin functions.
\r
299 * Incorporated Ken Settle's patch enabling EiC to handle correctly:
\r
301 EiC 1> #define FOO int
\r
302 EiC 2> FOO (*a)(FOO x);
\r
305 * Fixed bug with EiC_parseString, as reported by Kester McKinney,
\r
306 failing to allocate on occassions sufficient buffer space for
\r
307 passing the format string.
\r
309 * Fixed bug with EiC failing to diagnose correctly:
\r
310 passing indirectly an unsafe pointer to a function
\r
311 expecting indirectly a safe pointer or vice versa:
\r
314 EiC 2> char * *unsafe q;
\r
315 EiC 3> void f1(char * * p) {1;}
\r
316 EiC 4> void f2(char * *unsafe q) {1;}
\r
317 EiC 5> f1(p); // okay
\r
318 EiC 6> f1(q); // error
\r
319 EiC 7> f2(p); // error
\r
320 EiC 8> f2(q); // okay
\r
322 For more information see EiC's documentation covering
\r
323 pointers: www.pobox.com/~eic/EiC
\r
325 * Fixed bug with EiC's address, `@', operator failing to
\r
326 handle more compilcated data types properly:
\r
328 char *vec[] = {"hello", "world"};
\r
331 * Fixed problem related to David Binette's report of a
\r
332 security concern with respect to EiC's demo cgi program
\r
333 `uploadfile.eic.cgi'
\r
335 * Fixed bug with the definition of CLOCKS_PER_SEC on the
\r
336 Linux platform as reported by Derek Simkowiak.
\r
338 * Fixed several causes of EiC reporting memory violations
\r
339 when compiling C code with errors coinciding with
\r
340 implicit or explicit variable casts.
\r
343 <b>Changes from 4.1.2 to 4.2.0 (Aug 2 1999)</b>
\r
346 ****** Jean-Bruno Richard has modified EiC's `:gen' command so
\r
347 that it now automatically handles multiplexed callbacks.
\r
349 *** The WIN32 binary distribution of EiC also includes eic.lib
\r
350 to enable embedding eic, see file c:\eic\examples\embedEiC.c
\r
352 *** EiC/config/genstdio now also generates limit.h
\r
355 *** EiC's builtin function popen and pclose have been ported to
\r
358 * several unused files have been removed from the distribution:
\r
360 EiC/module/stdClib/src/fopen.c
\r
361 EiC/module/stdClib/src/scanf.c
\r
363 the following files were removed as they are automatically
\r
364 generated at compile time.
\r
366 EiC/module/stdClib/src/_PLATFORM/stdio.h
\r
367 EiC/module/stdClib/src/_PLATFORM/stdlib.h
\r
368 EiC/module/stdClib/src/_PLATFORM/errno.h
\r
369 EiC/module/stdClib/src/_PLATFORM/stdtypes.h
\r
370 EiC/module/stdClib/src/_PLATFORM/limits.h
\r
371 EiC/module/stdClib/src/_PLATFORM/float.h
\r
374 * fixed bug with EiC failing to cast result of bitwise
\r
375 negation `~' to `unsigned int' if operand is `unsigned int' or
\r
376 to `unsigned long' if operand is `unsigned long'
\r
378 * fixed bug with lexical analyzer failing to handle ULONG_MAX
\r
381 * corrected definition of LONG_MAX for the WIN32 platform.
\r
383 * fixed bug with EiC/main/example/embedEiC.c
\r
384 being platform dependent.
\r
386 * fixed Jean-Bruno Richard's report that EiC
\r
387 was failing to implicitly dereference pointers
\r
388 to functions when declared as structure members
\r
389 during function calls:
\r
391 EiC 1> void foo() { printf("hello\n"); }
\r
392 EiC 2> typedef struct { void (*f)(); } Test;
\r
394 EiC 4> x = &y; x->f = foo;
\r
395 EiC 5> (*x->f)(); // explicit dereference old C style
\r
396 EiC 5> x->f(); // implicit dereference new C style
\r
397 EiC 6> y.f(); // implicit dereference new C style
\r
400 <b>Changes from 4.1.1 to 4.1.2 (Jul 18 1999)</b>
\r
403 *** Igloo, a port of EiC to WIN32 with opengl support, with
\r
404 the NT4 glu/glut/opengl DLLs by Jean-Bruno Richard, has
\r
405 been added to EiC/contribute directory:
\r
407 www.pobox.com/~eic/EiCdist/contribute
\r
409 *** the WIN32 port now looks for the environmental variable
\r
412 *** readline has been ported so it works also under WIN32 using MSVC++.
\r
415 <b>Changes from 4.1.0 to 4.1.1</b>
\r
418 * Fixed problems with EiC binary install procedure
\r
421 <b>Changes from 4.0.1 to 4.1.0 (Jun 26 1999)</b>
\r
424 *** An EiC module to interface to the C-API of MySQL
\r
425 (3.22.22-2) is available from:
\r
427 http://www.datagrid.com/~eic/modules
\r
429 ****** EiC now supports long longs:
\r
431 EiC > long long a; unsigned long long b;
\r
433 NOTE at this stage `unsigned long long' is simply
\r
434 mapped to `long long'; that is, `unsigned long long'
\r
435 is not yet properly supported and is handled as
\r
438 ****** an alien of port of EiC to the WIN32 platform has been
\r
439 contributed by Jean-Bruno Richard.
\r
441 ***** Ported EiC to FreeBSD.
\r
444 *** The reliance on the use of the `ksh' shell in EiC's make
\r
445 system has been removed.
\r
447 * fixed bug with redeclarations of reference variables
\r
448 causing any immediately and previously declared
\r
449 variable in the same translation unit to get corrupted;
\r
452 EiC 1> int a; int b @ &a;
\r
453 EiC 2> double c; extern int b;
\r
455 `c' will now be of type `int'.
\r
457 * the platform dependent bug with `:gen' and
\r
458 printf's %p conversion character used for
\r
459 interfacing with shared variables has been fixed,
\r
462 * fixed bug with EiC's automatic interface generation
\r
463 failing to handle enumeration constants properly.
\r
465 * fixed bug with EiC's automatic interface generation
\r
466 failing to handle the return of unsafe pointers
\r
471 <b>Changes from 4.0 to 4.0.1 (May 23 1999)</b>
\r
475 *** Debian `deb' and RedHat `rpm' packages for EiC's
\r
476 binary distribution are now available from home
\r
479 *** updated EiC's binary installation procedure -- corrected
\r
480 some inconsistencies.
\r
482 *** changed the names of several files in
\r
483 EiC/module/cgihtml/cgi-bin to reflect a more
\r
484 consistent nomenclature.
\r
486 * fixed 3 bugs as reported by Larry Battraw:
\r
487 (1) setting HOMEofEiC in EiC/main/Makefile line 13,
\r
488 via $(PWD)/.. fails when using bash. Changed to:
\r
490 HOMEofEiC := $(shell pwd)/..
\r
492 (2) Under linux the file dirent.c tries to include
\r
493 "direntry.h" when it really wants dirent.h:
\r
495 removed inclusion of direntry.h
\r
497 (3) In the stdClib directory, the
\r
498 file stdio.c defines the following on line 66:
\r
499 static FILE * book2[FOPEN_MAX] = {stdin,stdout,stderr};
\r
500 Gcc complains about stdin, stdout, etc. not being
\r
501 constants. corrected initialisation problem.
\r
503 * fixed bugs with EiC's binary distribution installation
\r
506 * fixed bug with EiC's automatic interface generation
\r
507 returning pointers from builtin code properly.
\r
509 * fixed bug with EiC'c automatic interface generation not
\r
510 handling typedefs correctly.
\r
514 <b>Changes from 3.9 to 4.0 Fri (May 17 1999)</b>
\r
517 ****** EiC now supports callbacks. That is, it is possible for
\r
518 compiled code to call EiC interpreter functions. The
\r
519 compiled code doesn't need to be altered. It is all
\r
520 handled through EiC's interface to builtin code. The
\r
521 basic design was developed and contributed to EiC by
\r
522 Jean-Bruno Richard.
\r
524 The same builtin code can make callbacks to different
\r
525 functions, which take different number and different
\r
526 types of arguments, but not to functions that take a
\r
527 variable number of arguments.
\r
529 At this stage all the basic scalar types and arrays of
\r
530 scalars are supported through the callback
\r
531 mechanism. Updates and patches will be made available as
\r
532 support for more data types are added.
\r
535 ****** Jean-Bruno Richard also initiated EiC's
\r
536 command `:gen', which is used for automating
\r
537 the generation of EiC interface code to
\r
538 compiled library code:
\r
540 EiC 1> #include foo.h
\r
543 The interface routines will be printed
\r
544 to stdout, unless the optional string argument
\r
545 is used to redirect the output to a file:
\r
547 EiC 3> :gen foo.h "foo.c"
\r
550 ****** Mesa/Opengl has been interfaced to EiC via glut. Its
\r
551 interface module can be found in:
\r
553 www.pobox.com/~eic/modules
\r
555 Example code is also given in the module distribution (GL).
\r
557 ******* Jochen Pohl has ported EiC to NETBSD and
\r
558 Solaris/i386. In doing so Jochen Pohl made the following
\r
559 changes to EiC's distribution:
\r
562 - under NetBSD, ksh is installed as /bin/ksh, not /usr/bin/ksh.
\r
564 ./config/alignment.c
\r
566 ./src/ppc403/include/metric.h
\r
567 - renamed LITTLE_ENDIAN in EIC_LITTLE_ENDIAN to avoid conflict
\r
568 with system header file
\r
569 - for i386 and sparc, use hardware name instead of operating
\r
570 system to define data size and alignment
\r
571 ./config/makeconfig
\r
572 - if shell variable PWD not set or empty, set it to `pwd`
\r
573 - use cp -f to overwrite read only files
\r
575 - define __LITTLE_ENDIAN__ as 1 or 0, depending on whether
\r
576 the machine is littel endian or not. Needed on some tests
\r
577 to get them running on both little endian and big endian
\r
579 - define __LP64__ or __ILP32__, depending on whether the machine
\r
580 has 64 or 32 bit longs and pointers. Needed in in NetBSD
\r
581 header files to add (untested) support for alpha CPU.
\r
582 ./module/stdClib/src/dirent.c:
\r
583 - telldir() and seekdir() use long, not off_t. would make a
\r
584 difference on NetBSD, where off_t is long long.
\r
586 - on NetBSD, use long instead of off_t for offval (because
\r
587 off_t is long long)
\r
589 - use either echo -n foo or echo foo\c
\r
590 ./test/EiCtests/teststdio.c
\r
591 - fixed assertions (STDC requires that the return value of
\r
592 fputs() is EOF on error and a nonnegative value otherwise)
\r
593 ./test/eicScripts/Driver.c.def
\r
594 ./test/eicScripts/script1.eic
\r
595 ./test/eicScripts/script2.eic
\r
596 ./test/eicScripts/www_eic.eic
\r
597 - change path to eic binary to some standard value
\r
598 ./test/posix.1/tstfilelock.c
\r
599 - use memset() to initialize struct flock to zero.
\r
600 necessary because under NetBSD the l_start and
\r
601 l_len values are 64 bit, but only 32 bit can be
\r
603 - before F_GETLK, set lock type to F_WRLCK. necessary
\r
604 because F_GETLK returns the first lock that blocks
\r
605 the lock description pointed to by the third argument.
\r
606 if this lock description has lock type F_UNLCK,
\r
607 probably no lock will be returned.
\r
608 ./test/sniptests/bitcnt_4.c
\r
609 ./test/sniptests/bitops.h
\r
610 - use unsigned long instead of long to avoid infinite
\r
611 recursion if a negative long is passed to either
\r
612 ntbl_bitcnt() or btbl_bitcnt().
\r
613 - fixed btbl_bitcnt() to work on big endian machines too.
\r
614 ./test/sniptests/dbl2long.c
\r
615 - make this test work on big endian machines (and, hopefully,
\r
618 *** There is now an Advanced section
\r
619 in EiC's documentation explaining how
\r
620 to build an EiC module, and how to perform
\r
623 www.pobox.com/~eic/EiC
\r
625 *** EiC web page now contains a separate section
\r
628 www.pobox.com/~eic/modules
\r
630 *** The parse_form_encoded function of
\r
631 the EiC's cgihtml library module has been modified
\r
632 to do buffered IO rather than just single byte
\r
633 IO. This improves the speed of this
\r
634 function for http file uploads by 2 to 3 fold.
\r
636 *** Several changes and additions have been made to
\r
637 EiC's module MathStats.
\r
639 *** The infinite loop that one runs into by running
\r
640 "eic < infile" if there is no `:exit' at the end
\r
641 of the infile has been fixed -- kindof. EiC now
\r
642 recognises the EOF for this purpose iff the
\r
643 Non-interactive flag `A' is used:
\r
647 Otherwise `:exit' must still be present.
\r
650 * fixed bug with the address operator
\r
651 not working with pointers:
\r
653 EiC 1> int b = 22; int *a = &b;
\r
654 EiC 2> int *c @ &a;
\r
655 EiC 3> assert(*c == 22);
\r
657 * fixed bug with redeclaration
\r
658 error being reported for extern
\r
659 definitions of variables declared
\r
660 previously as reference variables
\r
661 via the address `@' operator
\r
663 EiC 1> int a; int b @ &a;
\r
664 EiC 2> extern int b;
\r
666 * fixed bug with EiC not being reentrant
\r
667 with respect to callback code.
\r
669 * fixed bug with EiC_parseString failing
\r
670 if called from a translation unit,
\r
671 which have strings that gets gabbage collected.
\r
674 EiC > while(i++<5) printf("%d\n",func());
\r
676 where func is a builtin function that
\r
677 calls EiC_parseString. The string
\r
678 "%d\n", would be gabbage collected after
\r
679 the first call to EiC_parseString, and
\r
680 before the calling translation is finished.
\r
683 * fixed bug with EiC reporting a redeclaration error
\r
684 for macros with null token sequence when seen more
\r
690 * Fixed Jean-Bruno Richard's report of EiC
\r
691 failing with the unary opertor `+' when
\r
692 applied to constants:
\r
697 * Incorporated Tim Baker's bug fixes with respect
\r
698 to handling declared const types within
\r
699 unary operations properly and EiC failing to
\r
700 parse if-statements, if the type of the expression
\r
701 evaluates to unsigned short int:
\r
703 unsigned short a[1] = {1};
\r
708 <b>Changes from 3.8 to 3.9 Fri (Apr 2 1999)</b>
\r
711 ****** Eugene Brooks has helped modify EiC so it
\r
712 builds without using its own headers, and
\r
713 no longer defines its own version of the
\r
714 stdio functions. This is designed to eliminate
\r
715 conflicts between system code and EiC when
\r
716 embedding EiC into other systems
\r
717 ****** EiC no longer compiles out-of-the-box
\r
718 under SUNOS 4.1 or less -- unless your C
\r
719 implementation is ISO/ANSI C compliant
\r
720 ** EiC now also parses `\r\n' line endings rather
\r
721 than just the Unix style `\n'
\r
722 ** Matt Minnis has modified EiC's show
\r
723 routine so that it also displays a variables
\r
724 value along with its type
\r
725 * fixed bug with EiC becoming unstable
\r
726 when an error occurs during the parsing of a translation
\r
727 unit with a prototype to a builtin function.
\r
728 This is a fix to one of EiC's most outstanding
\r
730 * re-fixed bug with EiC not allowing for the
\r
731 re-declaration of enumeration types
\r
732 * fixed bug with EiC's restart mechanism sometimes reporting
\r
733 an illegal operation when initiated via
\r
735 * fixed bug with EiC not handling global scalar const
\r
739 <b>Changes from 3.7.5 to 3.8 (Feb 6 1999)</b>
\r
742 ****** added the address specifier operator `@':
\r
746 defines `a' to be an integer whose value
\r
747 is at address dddd. dddd must be a constant
\r
748 integral express. This will then, among other things,
\r
749 allow the following type of call to be setup from
\r
753 EiC_parseString("double d @ %ld",(long)&d);
\r
755 At this stage the address specifier can be applied to
\r
756 objects or to functions that accept void arguments
\r
757 and which return void:
\r
759 void foo(void) { puts("Hello world!\n");}
\r
760 EiC_parseString("void foo(void) @ %ld",(long)foo);
\r
762 *** Bret Deck and Eugene Brooks have improved
\r
763 EiC error detection mechanism for identifying array bound
\r
764 and memory address violations.
\r
765 *** technical document EiC/doc/tech_docs/typesets.doc
\r
766 explains how object types and operators are (can be)
\r
768 *** I have rationalised/cleaned-up EiC stdClib interface.
\r
769 However, a major revision of how EiC's implements the
\r
770 standard C library is under development.
\r
771 * fixed bug with EiC's interpreter not being
\r
773 * fixed bug with EiC not handling typedef types correctly
\r
774 with respect to scope such as:
\r
775 typedef struct { char a; } c;
\r
776 typedef struct { short c; } scs;
\r
777 * fixed bug with EiC not determining the sizeof
\r
778 enumeration types; that is:
\r
779 sizeof(<enumeration_type>)
\r
780 * fixed bug with the use of enumeration types
\r
781 as structure/union members
\r
782 * fixed bug with EiC not handling pointers to
\r
783 enumeration variables correctly.
\r
784 * fixed bug with EiC not allowing for the
\r
785 re declaration of enumeration types.
\r
786 * Massaged EiC's tex documents so as LaTeX2html
\r
787 would do a better job in building EiC's
\r
788 online documentation.
\r
792 <b>Changes from 3.7.2 to 3.7.5 (Nov 23 1998)</b>
\r
795 ****** added the pointer type qualifiers `safe' and
\r
796 `unsafe' to the EiC language. For example:
\r
800 defines `p' to be an `unsafe' pointer or a normal C type
\r
805 defines `p' to be a `safe' pointer, which is the normal
\r
807 Rationale: to make it easier to interface EiC to builtin
\r
808 library functions, which use `unsafe' pointers and take
\r
809 argument types such as: arrays of pointers or structures
\r
810 with pointer members.
\r
811 ****** to control the default pointer type, three pragma
\r
812 directives have been added to the EiC language and which work
\r
813 on a stack principle:
\r
815 #pragma push_safeptr /* default pointer type is safe */
\r
816 #pragma push_unsafeptr /* default pointer type is unsafe */
\r
817 #pragma pop_ptr /* return to previous ptr type. */
\r
819 *** the EiC_parseString function now accepts variable
\r
822 EiC_parseString(char *fmt, ...);
\r
824 *** the howto documentation for adding builtin
\r
825 functions to EiC has been upgraded to reflect
\r
826 the usage of safe and unsafe pointer, see:
\r
827 .../EiC/doc/tech_doc/builtin.doc
\r
828 *** the `p' conversion character in printf now
\r
829 prints out in hexidecimal format.
\r
830 *** the `p' conversion character in scanf now
\r
831 matches a hexidecimal input sequence corresponding
\r
832 to the output style of printf.
\r
833 * fixed EiC's Linux definitons of various system
\r
834 types not being libc6 compatible; such as
\r
835 `struct stat', `struct dirent' and `struct tm'
\r
836 * fixed bug with the casting of integer constants
\r
838 int *p = (int*)dddd;
\r
839 where dddd is a numeric integer constant.
\r
840 * fixed bug with EiC's `:rm' facility
\r
841 failing to remove properly typedef definitions
\r
845 <b>Changes from 3.7.1 to 3.7.2 (Aug 23 1998)</b>
\r
848 * fixed bug with internal signal code not being
\r
849 GNU libc6 compatible
\r
850 *** The PowerPC 403 port of EiC has
\r
851 been incorporated into the main distribution
\r
853 *** EiC now considers it illegal for the
\r
854 function `main' not to return type `int'
\r
855 *** In script mode, control is now passed
\r
856 to a main function if it exists. This
\r
857 makes it easier to run C programs via
\r
859 * fixed bug with EiC failing to recognise
\r
860 the ISO C additional escape-code '\?'
\r
863 <b>Changes from 3.7 to 3.7.1 </b>
\r
866 * fixed bug with sys/stat.h for
\r
867 SOLARIS and IRIX platforms
\r
868 * fixed bug in readdir on the SOLARIS
\r
869 and IRIX platforms due to safeptrs
\r
872 <b>Changes from 3.6 to 3.7</b>
\r
875 * added the unistd.h function chdir
\r
876 *** added facilities to interface with EiC
\r
877 from other programs.
\r
878 See the EiC/main/README file in the source
\r
879 distribution for more details.
\r
880 * fixed bug with printf handling:
\r
881 printf("%s\n",NULL);
\r
882 * fixed bug with strtok due to
\r
884 *** EiC can now be compiled on a HPUX
\r
885 platform thanks to Alf Clement.
\r
886 *** The main distribution now has a contribution
\r
887 section, that includes a port of EiC for the PowerPC
\r
888 403 thanks to Larry Battraw.
\r
889 *** Eugene Kim's upgrade of cgihtml (1.69)
\r
890 has been incorporated
\r
893 <b>Changes from 3.5 to 3.6 </b>
\r
896 *** added module `xv', which
\r
897 provides a primative interface
\r
899 * Fixed bug in EiC's test-module
\r
900 EiC/test/EiCtests/testinclude.c
\r
901 * Documentation updated to reflect
\r
902 EiC's internet programming facility.
\r
903 * if EiC is installed in /usr/local
\r
904 then the environmental variable
\r
905 HOMEofEiC does not need to be
\r
907 *** added the command line switch '-e'.
\r
908 It is used for debugging CGI scripts.
\r
909 See documentation for details.
\r
910 * fixed bug with fgetc not returning
\r
911 the next character as an unsigned char
\r
912 converted to an int
\r
913 * fixed bug with EiC core dumping when
\r
914 the environmental variable HOMEofEiC is
\r
918 <b>Changes from 3.4 to 3.5</b>
\r
921 *** added module `cgihtml'
\r
922 ****** all global variables and functions declared
\r
923 static within an include file are now private to
\r
924 that file, and are only visible within the scope of
\r
925 the include file. Therefore, in general, their
\r
926 names will not clash with the names of any global
\r
927 variable visible from the EiC prompt or within any other
\r
929 * fixed bug with EiC becoming internally
\r
930 unstable after passing structures/unions
\r
931 by value to functions from scope level
\r
933 EiC > struct {int a, b;} ab_t;
\r
935 EiC > foo(ab_t); // eic is now unstable
\r
936 * fixed bug with type conflicts generated by
\r
937 declarations of the type:
\r
939 and definitions of the type:
\r
940 int ss(int ss) { return ss;}
\r
941 * fixed bug caused by safe pointers
\r
942 when passing structures by value
\r
944 * rationalised slightly the header
\r
948 <b>Changes from 3.3 to 3.4 </b>
\r
951 *** added modules `tools' and `examples'
\r
952 * documentation updated
\r
953 *** most of the example code given in
\r
954 EiC's documentation is now included
\r
956 ../EiC/module/examples
\r
957 *** the installation procedure has
\r
958 changed; this is because `eicc' no
\r
960 ****** EiC can run its own shell scripts of the form:
\r
961 #!/usr/local/bin/eic -f
\r
963 printf("Hello, world.\n");
\r
964 * fixed bug with enum being declared extern:
\r
965 enum rgb {RED,GREEN, BLUE};
\r
966 extern enum rgb colour;
\r
967 enum rgb colour = RED;
\r
968 * fixed bug with the comma operator processing
\r
969 syntax of the form:
\r
971 * fixed bug with boundary affects, due to
\r
972 safe pointers, in `memmove' and `strncpy'
\r
973 * fixed bug with eic failing to cast
\r
974 `unsigned int' to `long' properly
\r
975 on platforms where sizeof(int) == sizeof(long)
\r
976 * fixed bug with eic to pass command line
\r
977 arguments in double quotes properly:
\r
978 % eic main2.c " hello world "
\r
979 * fixed bugs with safe pointers when dealing with:
\r
980 int a, b; memcpy(&a,&b,sizeof(b));
\r
981 * fixed bug with using casts with type qualifiers:
\r
983 * fixed bug with the incrementing or deincrementing
\r
984 of arrays passed to functions:
\r
985 void foo(char *argv[])
\r
987 *++argv; //bug here
\r
988 * fixed bug with the initialisation of char arrays
\r
990 char buf[13] = "\0""1234456789";
\r
991 * fixed bug with pp directives of the type:
\r
993 * for main, argv[argc] is now set to NULL on setup.
\r
994 * fixed bug with the formation of a new macro during
\r
995 an expansion that extends across multiple lines.
\r
998 <b>Changes from 3.2 to 3.3 </b>
\r
1001 *** improved array bound checking functionality
\r
1002 * update of EiC's documentation (still needs some work though)
\r
1003 *** implemented the <stdlib.h> function `atexit'
\r
1004 * fixed bug with rename not removing the oldfile
\r
1005 * fixed bug with gets setting the wrong flag, preventing
\r
1006 it from working correctly with the rest of the <stdio.h>
\r
1008 *** added the <stdio.h> function freopen
\r
1009 * fixed several bugs with EiC's <stdio.h> functions
\r
1012 <b>Changes from 3.1 to 3.2</b>
\r
1015 * fixed several bugs in EiC's <string.h>
\r
1017 *** added the switch -N to stop eic from using
\r
1018 any startup.h file when started.
\r
1019 ****** MADE EiC POINTER SAFE (alpha stage)
\r
1020 * fixed bug with EiC repeatedly catching
\r
1021 the same SIGNAL violation
\r
1022 * fixed bug with the initialising of
\r
1026 <b>Changes from 3.0 to 3.1</b>
\r
1029 * fixed defect with showMacro.
\r
1030 * corrected NULL pointer definition.
\r
1031 * fixed typo in "unsigned char"
\r
1032 * fixed checking of function return type
\r
1033 *** added POSIX.1 functions `access' and `fcntl'
\r
1034 * convert to unsigned int for `%b'; i.e.
\r
1035 printf("%b",15) -> binary numbers are unsigned.
\r
1036 * fixed bug with indexing arrays of pointers with
\r
1037 the assign operator.
\r
1038 * prevented interpreter functions from masking
\r
1039 builtin functions.
\r
1040 * fixed problem with the initialisation of a global
\r
1041 char NULL pointer:
\r
1043 *** added the interpreter command ":clear"
\r
1047 <b>Changes from 0 to 3.0</b>
\r
1057 <!-- ADDRESS field used for automatic insertion of links -->
\r