home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / S / SMC21SRC.LZH / INTRO.DOC < prev    next >
Text File  |  2000-06-30  |  5KB  |  113 lines

  1.                        Small-C Version 2.1
  2.  
  3.                Documentation File of 15 March 1985
  4.  
  5.                           W. E. Boebert
  6.  
  7. Disclaimer:  This compiler has been verified to the extent that
  8. it correctly compiles itself and the subset of the library that
  9. it uses.  Based on the dismaying number of typos I found in
  10. getting it to that state, I am not willing to guarantee that
  11. there may not be more in there somewhere.  Such are the vagaries
  12. of the ten-digit interface, and I apologize in advance for any
  13. difficulties anybody may encounter in using this thing.
  14.  
  15. Overview:  These files contain the Small-C compiler first written
  16. by Ron Cain and upgraded by James E. Hendrix, and the library of
  17. functions written by James E. Hendrix and Ernest Payne.  I have
  18. entered them, debugged them to the degree described above, and
  19. made some trivial changes to correct typos, get them to work
  20. together, and to fix problems in two of the library functions.
  21. The compiler is documented in The Small-C Handbook by James E.
  22. Hendrix (Reston, 1984, ISBN 0-8539-7012-4) and the library
  23. appeared in Dr. Dobbs for May and June 1984.
  24.  
  25. Required Support:  The compiler translates a useful subset of the
  26. C language into assembly code for a linking CP/M assembler (not
  27. included).  The assembler must follow the naming of conventions
  28. of MAC-80 or M80. External names are denoted by means of an
  29. external declaration (e.g., EXT FOO) or by having "##" as the
  30. last two characters (e.g., CALL FOO##).  Public names are denoted
  31. by "::" (e.g., FOO:: CALL FEE).  The assembler must be able to
  32. handle names that start with an underscore (e.g., "_read").
  33.  
  34. Use of the Compiler: Full details on I/O redirection and command
  35. line entries appear in the Handbook, and will not be repeated
  36. here.  Once you have compiled PROG.C into PROG.MAC and then
  37. assembled it into PROG.REL, link it into the library using the
  38. command
  39.  
  40. L80 PROG, CLIB/S, PROG/N/E
  41.  
  42. to get PROG.COM.
  43.  
  44. Mods and Fixes: Certain mods were made to make the linkage
  45. process work properly.  The code for program initiation and
  46. termination, described in Dr. Dobbs,  was added to CALL.MAC; this
  47. code does not appear in the Handbook.  The function "trailer()"
  48. in file cc41.c was changed to search the symbol table for a
  49. function named "main;" if it finds one, it knows it has compiled
  50. a main program and it appends the external reference (described
  51. in Dr. Dobbs) which forces the loading of the CSYSLIB module.
  52.  
  53. The order of the functions in CLIB.REL was changed from Dr. Dobbs
  54. to accomodate the L80 "feature" that names are searched for only
  55. in a forward direction; this means that any name defined as
  56. external in one module must be defined as public in a later
  57. module in the file.  You should use the /L option of LIB80 to
  58. list the library and make sure you relink it in this order if you
  59. make any changes.
  60.  
  61. The .DEF files in Dr. Dobbs and the Handbook differed in the
  62. definition of NEWLINE; the library and the compiler now both use
  63. CR (13) instead of LF (10).
  64.  
  65. The library function fclose() was modified to insure that an EOF
  66. character is always appended to the end of the data.  This was
  67. not a problem within library functions, which recognize either an
  68. EOF or physical end of file as logical EOF; however, certain
  69. non-Small-C applications expect the EOF character and are now
  70. sure to get it.
  71.  
  72. The function auxbuf() and associated references to it have been
  73. deleted from the library.  The listing in Dr. Dobbs indicates
  74. that early versions of the compiler have bugs which would cause
  75. bad code to be generated for this function, but that the
  76. situation was fixed in Version 2.1.  Well, either I mistyped the
  77. fix or they are mistaken, because references to auxbuf() would
  78. intermittently crash.  I view the function as being of marginal
  79. utility, so rather than chase the problem down I just deleted it.
  80.  
  81. A couple of pasteup errors and one declaration error were
  82. discovered and the fixes noted in comments.
  83.  
  84. Modifying the Compiler: The most likely mod you will want to make
  85. is to automatically output some assembly header or trailer
  86. information.  To do this you change the functions "header()" or
  87. "trailer()" in cc41.c.  The function "ol(string)" is used to
  88. output a line.  
  89.  
  90. For example, my version of M80 is the one in Microsoft's Assembly
  91. Language Development System for the Apple; it defaults to the Z80
  92. opcodes and requires a ".8080" pseudo-op to assemble in that
  93. mode.  To avoid cluttering up my C programs with spurious "#asm"
  94. clauses, I modified "header()" to read:
  95.  
  96. header() {
  97.   beglab=getlabel();
  98.   ol(".8080");
  99.   }
  100.  
  101. and get it automatically.  The compiler is currently #define'd
  102. for separate compilation; you will have to recompile cc1.c,
  103. cc2.c, cc3.c, and cc4.c, and relink the corresponding .REL files
  104. with the command
  105.  
  106. L80 CC1, CC2, CC3, CC4, CLIB/S, CC/N/E
  107.  
  108. as the compiler uses the I/O library.  Enjoy.
  109.  
  110. -- Earl Boebert
  111.  
  112. ration error were
  113. dis