These are notes made while altering the Alcyon compiler for CP/M. 1. It would really be nice if you confined your filenames to 8 letters, all lower case, with a 2 letter extension. This will enable you to put them on any O/S without translating them. (More of a convenience than anything else). 2. I corrected a number of "#if... MC68000" which should have been "#if... REGULUS". CP/M also requires MC68000, and you could conceivably run the compiler on someone else's (obviously inferior) 68000 UNIX system. Similarly, you have a number of "VAX11" conditionals which really should be "DECC". 3. How can you not allow nested include files on some O/S's when your own software requires this feature? Including multiple input buffers in the "filestack" structure fixes this problem (at the expense of extra memory). There is no signifigant performance penalty, since the memory is in BSS. 4. Command line switches MUST be case-insensitive. 5. In the preprocessor, you have a lot of "versaxxxx" func- tions. Why not define a run-time library (similar to our "klib") which will enable you to take out most of the conditional compilation? This would have a positive effect on your reliability and testing time. 6. I changed the name for the Whitesmith's compiler to WHITESM, to eliminate conflicts. 7. Under CP/M or with our cross tools, users have been accustomed to having the preprocessor "-i" switch take the next argument as the drive / directory for "#include " constructs. I conditionally compiled this. In any event, your standard include logic in "macro.c" was faulty for systems with a colon (":") as device name delimiter. 8. Jeez, why the "printf((char *)STDERR" stuff? Couldn't you write a function "fprintf" for V6 and not make the rest of the world suffer? 9. The "C268" pass of the compiler produced a file that the assembler wouldn't assemble (using a very large ".c" file). There were more than 20 labels which needed to be grouped together. Increasing the size of the structures in "optim.h" fixed the problem. You really ought to range Page 2 check your index variables, and print a message if there are too many labels for you to handle. 10. The assembler will definitely NOT work under the Whitesmith's compiler, since you rely on being able to open a file twice (pass1a) and on being able to rewind a text file with "lseek" (pass2). 11. There is some dependency in the assembler on getting storage from sbrk() which is initialized to zeros. I took out the code from our C runtime which zeros the area between the BSS and the stack, and the assembler wouldn't initialize. 12. The assembler had a bug where assembling an odd length byte string into the text segment caused alignment problems. We fixed this problem over a year ago. Why wasn't the fix incorporated?? We have not encountered any further bugs since the two for which we gave you source code.