26-Jan-90 Ceriel Jacobs (ceriel) at ceriel Fixed so that two consecutive SIG's have no effect. 8-Dec-89 Ceriel Jacobs (ceriel) at ceriel Bug fix: one of the many ZRL encodings was decoded wrong. 22-Nov-89 Ceriel Jacobs (ceriel) at ceriel Some more speed-up changes, resulting in another 5%. 13-Nov-89 Ceriel Jacobs (ceriel) at ceriel Many changes for speed-up (resulting speed-up: 20-25%). Also fixed serious problem in floating point handling: the existing code assumed that the low order 4 bytes of a double could be used as a float (4 bytes). This is NOT true for most floating point implementations, notably IEEE ones. 3-Oct-88 Dick Grune (dick) at dick Since the definitions of VERSION and MAGIC are now available from standard include files, e.out.h can be simplified. 27-May-88 Dick Grune (dick) at dick Testing with the UNIX system call tester by Leonie van der Voort revealed a few errors: when length was negative in a call of read or write, funny values were passed to Malloc; the size of the elements in the mtime/atime array passed to a call of utime was wsize rather than INT4SIZE, as it probably should have been. 25-May-88 Dick Grune (dick) at dick It is just too much of a drag to be able to unstack even the last RSB, the one that contains the initial setting of the machine. newLB has to be patched, and now it seems that also newPC has to make an exeception for this case. We now don't unstack the original RSB. 19-May-88 Dick Grune (dick) at dick We now also dump the Function Return Area, when giving a stack dump. 17-May-88 Dick Grune (dick) at dick Segment checking for pointers should also be done for subtraction, and give a different warning. 16-May-88 Dick Grune (dick) at dick The implementation of the MON call 'exec' was sloppy about the buffers used: all strings were assumed to have a maximum length of 128, and the maximum number of args or environ entries was built in. We now scan the whole works to determine the size. 16-May-88 Dick Grune (dick) at dick A stack dump with given size would look funny if the size was large than the original stack, or when the dump happened to start in the middle of a RSB. 14-May-88 Dick Grune (dick) at dick Rethinking the start-up procedure has resulted in the removal of the flag LB_def and the RSB is now stacked and unstacked in one blow. LB = ML + 1 is now a special case. 11-May-88 Dick Grune (dick) at dick Code handling the Function Return Area was spread over a number of files; since there was already an include file fra.h, I made a file fra.c. Likewise for alloc.[ch] 10-May-88 Dick Grune (dick) at dick The whole segment-checking stuff is now concentrated in segment.c (and made correct!) 9-May-88 Dick Grune (dick) at dick Things would be a lot simpler if LB and AB and SP could start from ML+1, but they cannot because ML+1 gives overflow. So we now set ML to the highest word boundary minus 1. 8-May-88 Dick Grune (dick) at dick The whole business of deriving AB from LB every time you need it is unnatural: it is a separate register in its own right and recalculation is only possible since we happen to have a linear stack implementation. -> a normal register in the EM machine, set in newLB(). 7-May-88 Dick Grune (dick) at dick In the non-checking version it did not even check for bad proc idfs, actions on double words with wsize == 4, etc., in text.h. It now checks. 7-May-88 Dick Grune (dick) at dick When a trap occurs it is often not at all clear why it happened; e.g., the trap ESTACK may have several causes except stack overflow: setting SP to an odd value, setting LB to a place where there is no RSB, and so on. Now all such traps are preceded by a warning; the combined action is written as wtrap(W..., E...) with W... the warning number and E... the trap number. 6-May-88 Dick Grune (dick) at dick The offsets in the RSB and its size were recalculated every time; this was especially ridiculous in accessing a formal parameter based on AB; they are now precalculated as soon as psize and wsize are known. 6-May-88 Dick Grune (dick) at dick The one-bit register HaltOnTrap is not powerful enough; it has to have a special value during loading the EM file (for floating overflow in calculations). We now have OnTrap with three values. 3-May-88 Dick Grune (dick) at dick If we want to check that PC does not jump from procedure to procedure, we have to know which procedure is running. Introduced an EM register PI for Procedure Identifier. We also need the limits for each procedure; for this purpose, the procedure descriptor table is now preprocessed on start-up. New files: proctab.[ch]. 3-May-88 Dick Grune (dick) at dick There was still a considerable confusion between ignorable and non-ignorable traps. All ignorable traps are now handled on the spot and the procedure trap() is not called if the trap is ignored. This means that arm_trap() has disappeared. 2-May-88 Dick Grune (dick) at dick The GTO was done by a rude store in LB, SP and PC; now it properly unwinds the stack. 25-Apr-88 Dick Grune (dick) at dick With the advent of the Sun 4 RISC machine, the use of variable length argument lists has become a liability. The answer is the include file . It appears that _doprnt() is sufficiently universal, fortunately. 24-Apr-88 Dick Grune (dick) at dick There are two levels to stack dumping, the RSB list and the whole contents; we now control the first by d1 and the rest by d2. 24-Apr-88 Dick Grune (dick) at dick Dumping the GDA and heap is under control of the GDA= and HEAP= parameters rather than under d3 or d4. Changed their id-s to +1 and *1, so they can be set in the program but not from the LOGMASK=. 24-Apr-88 Dick Grune (dick) at dick Now that the Logging Machine has been baptized, time has come to call the controlling define LOGGING again. Sorry for the confusion. 24-Apr-88 Dick Grune (dick) at dick Trying to have the interpreter interpret itself has given rise to many small improvements, and a considerable correction to npush() and st_lds(). We are again trying. 15-Apr-88 Dick Grune (dick) at dick The tallying does in no way belong to the logging machine, so I removed the dependency on the flag CHECKING (see 15-Feb-88). 15-Apr-88 Dick Grune (dick) at dick The instruction counter inr is properly speaking no part of the EM machine, but belongs to the logging machine. 15-Apr-88 Dick Grune (dick) at dick It is unnatural for the logging machine to derive the values of its variables from shell variables. Shell variables are very global and represent a setting in which the user wishes to work. The values of the logging variables change from moment to moment. They are now derived from make-like assignments in the command line. 14-Apr-88 Dick Grune (dick) at dick To allow testing routines that handle heap and stack overflow, two command line parameters have been added, -hN and -sN, that limit the heap and stack size. 14-Apr-88 Dick Grune (dick) at dick The EM Manual provides two traps for undefined integers and floats. Since the interpreter does not have special values for undefined; since it relies on the shadow bytes to give a warning; and in view of the frequent occurrence of such undefined values, the interpreter just gives a warning. It would be nice if the interpreter could also, on request, exhibit the formally correct behaviour of giving a trap. This is, however, impossible, since such a trap would have to rely on the shadow bits and the shadow bits are only present in the checking version. The conclusion is that we do not give a trap on use of undefined, ever. 2-Apr-88 Dick Grune (dick) at dick The warnings about type T expected left one in the dark as to what *was* there. Now it prints a continued warning telling about the type found. To this end, warningcont() prints a chained warning. 1-Apr-88 Dick Grune (dick) at dick When a pointer is needed and it turns out to be an integer, a test is done to see if it happens to be zero, in which case all is well. This was, however, a rather weird test; it is much simpler, when storing a zero value, to switch on both the SH_INT bit and the SH_DATAP bit. 31-Mar-88 Dick Grune (dick) at dick The logging machine has now been separated from the EM machine as much as is reasonably possible. Weak points are still forking and the handling of the abbreviations AT= and L= . 29-Mar-88 Dick Grune (dick) at dick On many systems it is inappropriate to grab file descriptors 19 and 18 for messages and logging. It now finds the highest ones (with a limit of 99, for systems that have an unlimited supply of them). 29-Mar-88 Dick Grune (dick) at dick There were some terminological inaccuracies about the difference between a procedure identifier and a procedure descriptor. 29-Mar-88 Dick Grune (dick) at dick Since the disassembler is in no way involved in the logging machine, it seems inappropriate to use LOG(()) to produce the text. Just using printf() is much cleaner. 28-Mar-88 Dick Grune (dick) at dick Although trap handling had a file for itself, trap.c, warning handling was still done inside io.c. Introduced a new file, warn.c, to handle the warnings. 26-Mar-88 Dick Grune (dick) at dick Providing a good dump of a 2/4 machine is not easy; it is not clear where a pointer may be found. This was solved by just printing words everywhere, which was unsatisfactory. Now pointers are printed wherever the shadow bits indicate that there might be a pointer there, i.e. when the address is a word multiple and the 4 bytes all have the pointer bit on. This is less unsatisfactory, though not good. 23-Mar-88 Dick Grune (dick) at dick Adapted to the new u flag in ip_spec.t; this cleared up the text segment access in text.h. 21-Mar-88 Dick Grune (dick) at dick Implemented the requirement that, when doing an RET or RTT, the stack pointer must be back where it started. This required the proc. idf to be recorded in the Return Status Block. 20-Mar-88 Dick Grune (dick) at dick Likewise (see below) for the text of the trap messages. 20-Mar-88 Dick Grune (dick) at dick Having the text, defines and numerical values in three different files is kind of inconvenient. They are now centralized in ../doc/appA (Appendix A of the manual) where they appear with explanations. The files warn_msg (with texts) and warn.h (with defines) are generated from it through M.warn_msg and M.warn_h, resp. 20-Mar-88 Dick Grune (dick) at dick Introduced the use of $(EM)/h/em_abs.h to include the trap numbers and the positions of LIN and FIL (although this seems a funny place to find them). 20-Mar-88 Dick Grune (dick) at dick Concentrated all e.out.h defines in e.out.h; this should probably go into $(EM)/h one of these days. 20-Mar-88 Dick Grune (dick) at dick The interpreter in the EM Manual does not use EBADLIN; we now decide that it is raised if the line number is larger than that mentioned in the EM header, part 2. 19-Mar-88 Dick Grune (dick) at dick The EM Manual states that a number of overflow tests need not be done if the FB_TEST bit in the second header word is not on. Experimental implementation of this shows a speed-up of 16%, so it is probably worth while. 18-Mar-88 Dick Grune (dick) at dick Reading the opcode and the argument bytes from the text segment was done by a procedure call, but the procedure call (newPC()) did not test for running out of the text segment. Replaced by a macro + a number of other similar speed-ups. 18-Mar-88 Dick Grune (dick) at dick Reraising the signal is not really useful; it is more useful never to catch a synchronous trap. UNIX then automatically does what it has to do. 17-Mar-88 Dick Grune (dick) at dick Redoing the trap mechanism lead to looking at the RTT vs RET instruction; it is nice to know where a Return Status Block originated: start-up, call, trap, non-restartable trap. We now push this info as topmost item on the stack. Values etc. in rsb.h 15-Mar-88 Dick Grune (dick) at dick I finally found out why the interpreter was spending 30% of its time in the system: it did a setjmp for each and every EM instruction, and IT does a call of signal(). Redoing this lead to considerable hacking in the trap handling mechanism. See the chapter in the documentation. 11-Mar-88 Dick Grune (dick) at dick Not all C compilers provide floating point operations. Installed a file nofloat.h with a flag NOFLOAT, which, if defined, suppresses the use of fp operations. The resulting interpreter will load EM files with floats in the GDA (but ignore them) but will give a fatal error upon attempt to execute a fp instruction. 10-Mar-88 Dick Grune (dick) at dick Added procedure identifier indications in the disassembly output, which helps in reading it. 8-Mar-88 Dick Grune (dick) at dick Implemented the other half of the type checking on ptr; this involved a macro i2p() to convert from index to pointer. 6-Mar-88 Dick Grune (dick) at dick Officially C does not have a type 'unsigned long', but the interpreter uses it heavily. Now it would be nice if we could make a version that does not use unsigned long. The main difficulty is the file do_unsar.c for doing unsigned arithmetic; for the rest it is possible and partway done. Most sizes are now of the type size. 4-Mar-88 Dick Grune (dick) at dick The list of warnings was fixed and contiguous, which was a nuisance when adding warnings. Now there is a mapping from warning numbers to the corresponding strings through a routine which does the lookup. 3-Mar-88 Dick Grune (dick) at dick The whole address testing for system calls in MON was shaky; most of them just produced traps. Corrected; they now return -1 and set errno to 14 (EFAULT). 1-Mar-88 Dick Grune (dick) at dick Some compilers use V7 ioctl request codes, some use the local codes. To accommodate both, we have a compile-time flag, V7IOCTL, which, if defined, causes the ioctl requests to be interpreted as V7 requests (of the form 't'<<8 | x) 1-Mar-88 Dick Grune (dick) at dick String arguments to system calls were, for the most part, just picked up, without any serious testing. Corrected in moncalls.c; violation results in errno == 14 (EFAULT) as it should. 29-Feb-88 Dick Grune (dick) at dick Concentrates all exits in a function close_down() which does calls to fclose() on the opened files, may reraise a caught signal and exits with the given return code. 26-Feb-88 Dick Grune (dick) at dick The type ptr was used very loosely; tightened up the code in many, many places. Introduced a macro p2i(p) which converts a "pointer" (EM address) to an index in the machine array. This modification necessitated a great many small changes and allowed some considerable simplifications. 22-Feb-88 Dick Grune (dick) at dick The format of a procedure identifier was a pointer in places and a long in others. It is now a psize unsigned integer. 16-Feb-88 Dick Grune (dick) at dick The code for calculating the sizes of the environ strings and the argument strings was unreadable. Rewritten in init.c. 15-Feb-88 Dick Grune (dick) at dick The tallying is not likely to be used by a user of the non-logging version, so it may as well be absent then, to save space. Made all tallying dependent on CHECKING. 15-Feb-88 Dick Grune (dick) at dick When allocating space for the stack and the global data area, the shadow bytes were not set to SH_UNDEF. Since the undef-ing of the shadow bytes occurs in several places, I introduced two routines, st_clear_area() and dt_clear_area() for the purpose. 12-Feb-88 Dick Grune (dick) at dick The dumping format of the text segment (just bytes in decimal) was unsatisfactory. It turned out quite easy to use the mkswitch from the switch directory to hack together a simple disassembler, which produced readable EM instructions. Moreover, text does not change while the program runs, so dumping it at a given instruction is quite meaningless. We now dump it right at the beginning, when the -T option is given. 4-Feb-88 Dick Grune (dick) at dick The whole idea of a driver (int.c) is superfluous now. Moreover there were naming problems all the time. Removed references to the driver. 1-Feb-88 Dick Grune (dick) at dick Measurements have shown that a checking but not logging interpreter is only a few percents faster that one that does both, at the expense of considerably lower functionality. So I merged logging and checking in the file checking.h. Made testing for logging more efficient by having a single variable logging which is set as soon as must_log && inr >= log_start is true. This is faster and much leaner code. Exit the function interesting(). 1-Feb-88 Dick Grune (dick) at dick Removed the warning about switched-off warnings and traps; they were a nuisance. 29-Jan-88 Dick Grune (dick) at dick The zero pointer arithmetic check was implemented incorrectly. While correcting this, I cleaned up all the checking and warning mechanisms, up to a point. There is much more one can do. Unfortunately this involved renumbering the warnings, so we hack the manual to match. 27-Jan-88 Dick Grune (dick) at dick Line number and file name also in last line of stack dump, for uniformity with RSB descriptions. 25-Jan-88 Dick Grune (dick) at dick The default log mask is better at A-Z9d4twx9 than at A-Z9d1twx9. 23-Jan-88 Dick Grune (dick) at dick Warnings are now tallied not only by warning number, but also by file name and line number. Used simple linked lists in io.c. 23-Jan-88 Dick Grune (dick) at dick Having an address space of 2**32 is absurd; it will have to be 2**31 to implement uninitialized pointers. Just to be able to give a good example in "How To Use the Interpreter", I changed MAX_ADR4 to I_MAXS4 (was I_MAXU4). 22-Jan-88 Dick Grune (dick) at dick The grammar of a float in the manual, the grammar of an UnsignedReal in the Pascal manual and the implementation in read.c were all slightly different. I made a clear distinction between the Pascal version (OK), the more loose implementation of "acceptable float" (with warning) and just garbage (with fatal error). ".e3" is an acceptable float. 21-Jan-88 Dick Grune (dick) at dick The interpreter did not catch stores at location 0. Changed this by making the LIN and FIL locations ROM. Introduced macros for protecting the data space (analogous to protecting the RSB in the stack). Moved all shadow byte handling to shadow.h. LIN, LNI and FIL are implemented by first lifting the write ban by dt_unprot, writing and then restoring it by dt_prot. 8-Jan-88 Dick Grune (dick) at dick The AT shell variable stopped one instruction too late. Corrected in main.c. 8-Dec-87 Dick Grune (dick) at dick I was explained that there is a subtle difference between the trap routine address being 0 and the default action upon trap. It says in the beginning of chapter 9 (Traps and Interrupts) of IR-81: Initially the pointer used is zero and all traps halt the program with ... The meaning of the SIG instruction is stated as: Trap errors to proc identifier on top of stack, -2 resets default. This means, I am told, that SIG with -2 restores the "pointer used" to zero and "directs all traps to halt the program ...", and that SIG with 0 just registers proc 0 as the trap routine. Although I think this raises more questions than it answers (how can I see if the previous trap routine was 0 or default?) I implemented it by adding an EM machine register HaltOnTrap, which is set in the non-default case. 1-Dec-87 Dick Grune (dick) at dick When debugging with the interpreter one often uses a call like LOG=123455 STOP=123457 int ..... Added a shell variable AT which effects the above: AT=123456 int ... 27-Nov-87 Dick Grune (dick) at dick The shift distance in shifts and rotates must be in the range 0 to object size in bits - 1, as it says in IR-81. This introduced a lot of inline code in DoSLI .. DoROR that should maybe go into subroutines. 23-Nov-87 Dick Grune (dick) at dick It turned out that LOG(("@S was a prefix both in do_store.c and in do_sets.c. Changed to @Y in the latter. 23-Nov-87 Dick Grune (dick) at dick SLI (shift left int) did an incorrect overflow test (failed on negative shift argument). 22-Nov-87 Dick Grune (dick) at dick Reformatted the output of the dump of the text and of the procedure descriptors. The latter is now more or less readable. 22-Nov-87 Dick Grune (dick) at dick Took all the direct memory access actions together in memdirect.h. This allows more readable code in dump.c and in a few other places. 10-Nov-87 Dick Grune (dick) at dick The stack dump is too unstructured and does not give enough information. Moreover, the position reporting in the various dump lines is erratic. Changed the routine do_log() to have two variants, one in which the format starts with @, which causes the position to be reported, and one in which the format starts with a blank, which is printed as is. Added two routines st_raw() and st_rsb() to print the raw and Return Status Block portions of the stack, resp., and displ_fil(), to print the name of the file, if at all possible. The stack parsing can be switched off with the -r option. 9-Nov-87 Dick Grune (dick) at dick Redressed the treatment of the Return Status Block, to give a better dump. 1-Nov-87 Dick Grune (dick) at dick The present segment checking is not very informative and produces complaints about intermediate results, which is annoying. This is not easily corrected. For each pointer, one should keep track where it originated, and when it is dereferenced a check should be made to see if it is applied to the original segment. This is kind of stiff to implement. For the time being, I have made the whole segment checking subject to a compile-time flag, SEGCHECK, to be kept in segcheck.h. The flag will normally be off, which saves time, space and inappropriate warnings. 28-Oct-87 Dick Grune (dick) at dick Small changes: - put Malloc etc in a header file: alloc.h - removed dt_ldf() (unused) - make static routines and data PRIVATE, to allow both static and extern 25-Oct-87 Dick Grune (dick) at dick arg_lae() should not check against HB but against max_addr, for funny address calculations as performed by e.g. lex. 14-Oct-87 Dick Grune (dick) at dick Exece in moncalls.c cannot succeed (if it succeeds, it's gone!) Corresponding code removed and rest straightened out. 13-Oct-87 Dick Grune (dick) at dick Brought the interpreter under RCS and CVS. 12-Oct-87 Dick Grune (dick) at dick Added a -t option in main.c to switch the tallying on. 11-Oct-87 Dick Grune (dick) at dick Added two routines, tally() and out_tally() for (you guessed it) tallying. out_tally() produces a readable file with for each source file the name followed by a number of lines, each containing a line number, the number of times that line was entered and the number of instructions executed on that line. Somebody should write a program to merge this with the original files. 3-Oct-87 Dick Grune (dick) at dick Added routines for fabs(), pow() and floor() to avoid having to invoke -lm. 2-Oct-87 Dick Grune (dick) at dick Floating point constants that started with a . were read incorrectly, as the mantissa was not initialized in that case. 25-Sep-87 Dick Grune (dick) at tjalk All access to the LIN and FIL information has been brought together in a header file linfil.h, which contains #defines for putLIN(), getLIN(), putFIL() and getFIL(). 20-Sep-87 Dick Grune (dick) at tjalk Added a routine core_dump() which dumps core after a fatal error. The core image consists of the values of the EM parameters and registers, by name; ie. wsize=4 psize=4 ML=4294967295 HB=816 etc., one to a line, followed by fwrite(text, 1, DB, core_file); fwrite(FRA, 1, FRALimit, core_file); fwrite(data, 1, HL, core_file); fwrite(stack, 1, ML+1-SL, core_file); possibly followed by fwrite(FRA_sh, 1, FRALimit, core_file); fwrite(data_sh, 1, HL, core_file); fwrite(stack_sh, 1, ML+1-SL, core_file); so somebody could write a formatter for it. 18-Sep-87 Dick Grune (dick) at tjalk The function return area was a fixed-size array. Now it is allocated through Malloc(), like the other memory constituents of the EM machine. This introduced the -R-option, to set the size of the return area (default is 8). 13-Sep-87 Dick Grune (dick) at tjalk Restructured global.h to better reflect what are EM registers and what are implementation variables. This introduced read.h to concentrate the EM header quantities. 10-Sep-87 Dick Grune (dick) at tjalk Implemented a shell-variable STOP= more or less analogous to LOG= such that a call of the interpreter STOP=321456 int ... will stop the interpreter after an instruction count of 321456, to avoid run-away interpreters. 27-Aug-87 Dick Grune (dick) at tjalk The idea has been raised to let int read the default values of LOG, LOGMASK, etc., for a file in the working directory, e.g. .em_intrc or so. I have not done so since only for the LOGMASK a reasonable default can be given; the others are case-specific. So I gave LOGMASK the default value "A-Z9d1twx9" instead. 25-Aug-87 Dick Grune (dick) at tjalk Changed the name of the instruction counter from ino to inr, to avoid confusion with "inode numbers". 20-Aug-87 Dick Grune (dick) at tjalk The EM report specifies a list of UNIX Version 7 -like system calls, not full access to the system calls on the underlying machine. Therefore an attempt has been made to use or emulate the Version 7 system calls on the various machines. 18-Aug-87 Dick Grune (dick) at tjalk Introduced a file sysidf.h which holds the #define for the present system: BSD4_1, BSD4_2 or SYS_V0. Based on these, it defines generic #defines: BSD_X and SYS_V . Added various #ifdefs for the various systems, guided by cc, acc and lint. 16-Aug-87 Dick Grune (dick) at tjalk There were some portability problems with dup2 . Since dup2 is not available on all UNIX systems, and since it was a kludge in the first place, I implemented a routine move_file_descriptor, again with slightly different semantics: it closes the original file descriptor. (io.c) 13-Aug-87 Dick Grune (dick) at tjalk Renamed set_log to set_lmask and set_log_file to set_lfile, all in the name of System V compatibility. Perhaps we should rename everything, to SetLogMask, SetLogFile, etc., Modula-2 style. 13-Aug-87 Dick Grune (dick) at tjalk And changed names like do_LAEl4 to DoLAEl4, to get them through the assembler in System V. 11-Aug-87 Dick Grune (dick) at tjalk Changed names like do_LAEl4 to do_lae_l4, to keep within 8 characters. 10-Jul-87 Dick Grune (dick) at tjalk Introduced monstruct.h and monstruct.c, to contain the code for copying UNIX system call structures to and from EM MON call structures. 9-Jul-87 Dick Grune (dick) at tjalk Made -W option always available. 8-Jul-87 Dick Grune (dick) at tjalk Why is the -W option available only when CHECKING is on? What am I missing? 6-Jul-87 Dick Grune (dick) at tjalk It turned out that emsig.h is included in m_sigtrp.c only and contains only definitions of functions from same m_sigtrp.c. Eliminated emsig.h. Better identification of the position from where a message is given, through the new routine position(). 3-Jul-87 Dick Grune (dick) at tjalk Did the rest of dump.c (and found an error in the administration of the undefineds in hp_dump). Changed LOG to LOGGING, and log(( to LOG((, just for readability and uniformity. 2-Jul-87 Dick Grune (dick) at tjalk Changed switch.c to be a normal file in this directory; it now includes the cases in the switch from ../switch/cases , which allows greater freedom in programming the rest of switch.c. 1-Jul-87 Dick Grune (dick) at tjalk Read.c nested to excessive length. Isolated a function rd_descr() which reads one descriptor. There were many almost similar #defines for setting bits in 'trapped'. Concentrated them in arm_trap(ENUMBER). 30-Jun-87 Dick Grune (dick) at tjalk Handling of failure of ftime (moncalls.c) was wrong. Corrected. Corrected many lint gripes. 28-Jun-87 Dick Grune (dick) at tjalk The routine st_dump in dump.c does nothing but testing whether or not to log at level d1. Why not test so right at the beginning? So I did: the same test now runs in 7 sec. See macro interesting() in dump.c. 25-Jun-87 Dick Grune (dick) at tjalk Restructured the file dump.c, because of excessive nesting depth. The result, however, was an efficiency loss of 50 % (from 65 sec. to 96 sec.!). The restructuring will have to be rethought! 24-Jun-87 Dick Grune (dick) at tjalk The shadow-byte checking macro's are used only in data.c, dump.c and stack.c. They are brought into a new header file, shadow.h, which reduces the weight of mem.h. 22-Jun-87 Dick Grune (dick) at tjalk Removed or changed macros that assign to their parameters; these introduce a parameter mechanism that is alien to C and is misleading. Made testing calls of malloc and realloc into functions Malloc and Realloc in init.c. 21-Jun-87 Dick Grune (dick) at tjalk Created global.c to contain the actual definitions from global.h. The declarations stay behind in global.h , thus avoiding multiple definitions. Removed io.h altogether. All handling of the EM object file is now concentrated in read.c (fopen was in io.c, fclose in init.c). 21-Jun-87 Dick Grune (dick) at tjalk Renamed def.h global.h (in anticipation of global.c ). Removed test if (warnmark) from init.c. Here warnmark is an array, an error not caught by the VAX C compiler. 20-Jun-87 Dick Grune (dick) at tjalk Removed initializations from .h files. This resulted in the complete removal of trapmess.h and warnmess.h. Concentrated data about the return area in return.h. Slimmed down io.h considerably. 19-Jun-87 Dick Grune (dick) at tjalk Moved contents of ../include to here (src) since a separate include directory is only meaningful if it is referenced in other places as well. Updated Makefile and all #include's. Replaced SECUNDAIR by SECONDARY and TERTIAIR by TERTIARY. All files included log.h and nocheck.h , which contain compile time flags. This is not logical; only the files that use LOG and NOCHECK should have any business of knowing about them. Reorganized the files in this sense. Dependencies recalculated by $(EM)/bin/mkdep. 18-Jun-87 Dick Grune (dick) at tjalk More reformatting, especially the complicated #define's. Established a small test environment. 17-Jun-87 Dick Grune (dick) at tjalk Made all indentation conform to tabulation scheme. Replaced register by register int where appropriate. 16-Jun-87 Dick Grune (dick) at tjalk Received the directory from Eddo de Groot and Leo van den Berge. $Header$