347 Commits

Author SHA1 Message Date
keie
3172abf70d Re-introduced the possibility of a Varying EM_BSIZE
this to be able to use the latest STABLE m68k2 backend.
All this until the newest m68k2 version has been tested.
1985-01-24 16:59:06 +00:00
cvs2hg
b35b5b0c11 fixup commit for branch 'unlabeled-2.8.1' 1984-11-30 11:14:19 +00:00
ceriel
e8d88ed790 Increased MAXPATLEN to 8000. 1984-11-30 11:14:18 +00:00
bal
2d40a4fa61 Macros for B_DIST, B_USECNT and B_MARK removed, as these fields are
no longer used.
Declarations of nrinstrs and instrmap marked "extern" to satisfy ack compiler.
1984-11-30 10:52:05 +00:00
bal
0f77c7fb9f Declaration of items[] made static to avoid name conflict with ra_items.c
Core allocation macros added.
1984-11-30 10:50:27 +00:00
bal
83c3f45a29 Declaration of items[] made static to avoid name conflict with ra.c 1984-11-30 10:49:09 +00:00
bal
f84e129361 routines getcall(), get_text() and getcc() move from get.c to this file
routines putactuals(), putcall(), and putcc() move from put.c to this file
get.h, put.h, stdio.h, em_mnem.h and em_pseu.h included
1984-11-30 10:30:22 +00:00
bal
bf86a0f8ef several data structures added (moved from types.h).
core allocation macros added.
1984-11-30 10:28:35 +00:00
bal
e7cbb5780b Declarations for iv and code_info added (moved from types.h).
core allocation macros added.
1984-11-30 10:27:05 +00:00
bal
4a4b1ae156 core allocation macros added 1984-11-30 10:25:21 +00:00
bal
63e97ee535 declaration for sym,num and prc added (moved from types.h) 1984-11-30 10:24:21 +00:00
bal
b8817780f3 ic.h included before ic_lookup.h 1984-11-30 10:23:34 +00:00
bal
530c4d4c63 Lots of procedures removed (turned into macro in alloc.h or
moved to one specific phase).
1984-11-30 10:15:24 +00:00
bal
6a1b482c86 Lots of data structures removed and made local to one specific phase. 1984-11-30 10:14:30 +00:00
bal
d530ba1126 Lots of procedure newxxx() and oldxxx() turned into macros.
Lots of such procedures removed and made local to one specific phase.
1984-11-30 10:12:37 +00:00
bal
bcaecff14d As getbblocks() was moved to cf.c, em_flag.h need no longer
be included.; also, the declaration for em_flag[] was removed.
1984-11-30 10:10:41 +00:00
em
d568a6aca5 The routine salloc crashed on a 2/4 system.
Malloc was nor declared as "char *", but by default as int.
1984-11-30 00:16:29 +00:00
em
77fda75841 I removed the unused integer deftype.
Its name collided with an array in symbols.c.
1984-11-29 17:27:00 +00:00
em
92587276da The definitions of lastline, currline and firstline are made
extern in graph.h. The space reserving declaration is made in
graph.c.
1984-11-29 17:26:44 +00:00
bal
b2dfaa494e -O flag removed 1984-11-29 16:25:08 +00:00
bal
b231200eb7 macros newlvbx and oldlvbx added. 1984-11-29 15:10:11 +00:00
em
4c1ac6ad54 The first line should contain the distribution library name. 1984-11-29 15:03:41 +00:00
bal
d345f87d53 macros newlocal() and oldlocal() moved to alloc.h 1984-11-29 14:40:31 +00:00
em
3ef854719d *** empty log message *** 1984-11-29 14:22:02 +00:00
bal
17cd5516a1 -O flag removed from CFLAGS 1984-11-29 13:33:33 +00:00
bal
a117b57ec9 -O removed from CFLAGS 1984-11-29 13:31:22 +00:00
bal
925f0be202 il_aux.h included (which now contains getcall(),putcall() etc.
routines that were peviously in get.c and put.c).
1984-11-29 11:08:15 +00:00
bal
9ffcf24477 stdio.h included (required by new interface to get.h). 1984-11-29 11:06:23 +00:00
bal
bef1b25962 routines getcall(), get_text() and getcc() move from get.c to this file
routines putactuals(), putcall(), and putcc() move from put.c to this file
get.h, put.h, stdio.h, em_mnem.h and em_pseu.h included
1984-11-29 11:03:19 +00:00
bal
05de05abe7 routine getbblocks (plus its auxiliary routines) moved from get.c
to this file; core allocation macros newcfbx() and oldcfbx() added.
1984-11-29 10:51:16 +00:00
bal
54e3b3db4f newnametable() move from alloc.c to this file,
get_ca_lines moved from get.c to this file,
em_pseu.h and em_mes.h included (needed by get_ca_lines).
1984-11-29 10:31:44 +00:00
bal
21c2208de6 stdio.h included (required by new get.h interface),
macros's newlocal() and oldlocal() added, replacing routines in
alloc.c with same name.
1984-11-29 10:25:21 +00:00
bal
41cd4c15fd getbblocks(), getcall(), getcc() and get_text() removed,
get_ca_lines() removed,
curinp,lastbid,lastlabid exported
getbyte(),getshort(),getoff(),read_line and getlines() exported.
1984-11-29 10:18:53 +00:00
bal
714b50f54b getbblocks() removed (now local to CF phase),
getcall(),getcc() and get_text removed (now local to IL),
get_ca_lines() removed (now local to CA),
current input file "f" renamed "curinp" and exported,
getbyte (macro), getshort() and getoff() exported
read_line() and getlines() exported,
lastbid and lastlabid exported.
1984-11-29 10:15:23 +00:00
bal
2ac28f401c putcall an putcc removed,
curoutp, outbyte,outshort and outoff exported.
1984-11-29 10:11:37 +00:00
bal
ba5ae63e87 putcall and putcc removed (make local to IL phase)
current output file renamed "curoutp" and exported
outbyte, outshort and outoff exported.
1984-11-29 10:09:15 +00:00
bal
2e1928a4eb cleaned up 1984-11-28 09:26:44 +00:00
em
9a02327a2d Installed basic compiler in ACK tree. 1984-11-27 23:59:28 +00:00
em
8c0394eea8 1 - Added RCS identification.
2 - Changed the file name parseparams.c into parsepar.c, the original
    name was too long for RCS under BSD4.1
3 - Adapted to ACK standard Makefile format(cmp,install,...)
4 - Included more dependencies.
1984-11-27 23:53:31 +00:00
em
085069e600 Added basic.doc. 1984-11-27 23:51:07 +00:00
em
e30901a8c4 Added RCS identification. 1984-11-27 23:48:38 +00:00
em
5d2434ce92 *** empty log message *** 1984-11-27 23:46:32 +00:00
em
398a848925 Removed conflict between rcs_id in basic.yacc and lex.c. 1984-11-27 23:41:46 +00:00
em
dee952edfa Now using ACK default tmp directory from em_path.h. 1984-11-27 23:21:41 +00:00
em
1ada89da2a Added RCS identification. 1984-11-27 23:13:28 +00:00
em
02d10bc877 The version of basic copied from Martin Kerstens directory. 1984-11-27 22:23:55 +00:00
em
1046fc1eea The version of basic copied from Martin Kerstens directory. 1984-11-27 22:11:59 +00:00
bal
b5e86c2482 Initial revision 1984-11-27 16:16:36 +00:00
bal
2ab7549af6 cleaned up 1984-11-27 15:52:23 +00:00
bal
85435303c8 stack_change was renamed stack_chg 1984-11-27 15:43:14 +00:00
bal
51eccf208f Initial revision 1984-11-27 15:40:13 +00:00
bal
b27463bccd "ivars" was renamed "ivvars" to avoid name conflict with sr_expr.c 1984-11-27 15:30:34 +00:00
bal
1d613c24af cleaned up 1984-11-27 15:04:04 +00:00
bal
cc22bb4175 cleaned up; dependecies added. 1984-11-27 14:53:00 +00:00
bal
6a084edba7 cleaned up. 1984-11-27 14:25:02 +00:00
bal
e9b3f54f7c cleaned up. use CC. 1984-11-27 14:23:20 +00:00
bal
ee4b1850bb getoff() moved to front (was called before being defined)
declaration char *pseudo[] changed to char *pseudo[5] to suppress warining
1984-11-27 14:21:55 +00:00
bal
49a0e9c414 "cc" replaced by $(CC) 1984-11-27 12:59:18 +00:00
keie
56ba46b2bc Treatment of -R flag is altered.
1 - if recognized by mapflag and not by Ack internally no
    complaint is given.
2 - If recognized by both mapflag and internally:
       -R....-.... : effectuate only mapflag command
       otherwise   : effectuate both.
3 - If not recognized at all, give a warning message and
    pass the flag to the linker.
1984-11-26 17:14:17 +00:00
keie
cf20acf289 This manual page was not included in the first distribution.
This version is hacked from the VU-Pascal distribution.
1984-11-26 15:56:57 +00:00
bal
64ff1da3e4 Initial revision 1984-11-26 15:15:07 +00:00
bal
8e4156532d Initial revision 1984-11-26 15:04:22 +00:00
bal
6e32042c52 Initial revision 1984-11-26 14:51:59 +00:00
bal
e551fa234e Initial revision 1984-11-26 14:35:32 +00:00
bal
15aec67505 Initial revision 1984-11-26 14:14:55 +00:00
bal
03409fb772 Initial revision 1984-11-26 14:07:17 +00:00
bal
7fab127af3 Initial revision 1984-11-26 13:58:05 +00:00
bal
b4b66ce74f Initial revision 1984-11-26 13:43:22 +00:00
sater
fff0d30a9a added documentation for the fmt_id and fmt_ilb macros 1984-11-26 11:09:11 +00:00
sater
2c0619a13a Added support for the fmt_id and fmt_ilb macros 1984-11-26 10:50:46 +00:00
sater
2601187207 In the RREMOVE section of this file, the field e_con of the
expression union was used in stead of e_reg.
Fixed. Checked all other occurrances, are correct.
1984-11-20 16:56:26 +00:00
sater
8d7aa4baad The constant 512 slipped in instead of BUFSIZ.
Changed.
1984-11-20 10:22:12 +00:00
keie
6eaf938a14 Added a check for non-ascii characters in the description files. 1984-11-15 14:24:35 +00:00
ceriel
6d42bab835 Forgotten to close a file. This is corrected. 1984-11-12 18:05:20 +00:00
keie
2cd5f2033e Added rcs identification. 1984-11-08 12:08:31 +00:00
keie
068dee8a06 Added a P for a specification of lal on line 51.
This missing letter caused lal -1 to be mapped on the opcode
for lal 0.
1984-11-08 11:11:31 +00:00
keie
85b1c8b043 Added a check. Minis & shorties need an N or P argument. 1984-11-08 11:09:56 +00:00
bal
a955307239 The routine con_float now generates a dummy floating point constant
and gives a warning, instead of generating a fatal error + abort.
1984-11-06 12:50:21 +00:00
bal
dea117397b Patterns for floating point instruction and for LFR 8 and RET 8 added.
Each such instruction now results in a call to a library routine.
At present, all these routines generate an Illegal EM Instruction trap,
but anyone wishing to implement floating point for the 6502 can
do so without changing the back end table.
1984-11-06 12:47:26 +00:00
em
ac8dee35d0 The line with the user message for failure missed the call to echo. 1984-11-06 10:02:25 +00:00
bal
46a5c99978 make install also make a tail_mon now. 1984-11-05 15:58:11 +00:00
bal
77d2cc5222 arguments for asld changed. several libraries added. 1984-11-05 15:29:48 +00:00
bal
c4dee9c081 program for be is {LIB}/cg instead of {LIB}/be 1984-11-05 15:13:20 +00:00
keie
4a2029781a *** empty log message *** 1984-11-05 15:11:19 +00:00
bal
6cde876c44 em_head renamed head_em; em_tail renamed tail_em
installs tail_em rather than comparing it
1984-11-05 15:06:49 +00:00
em
9adb899d09 Added an example with segment prefixes. 1984-11-05 15:02:32 +00:00
em
8c2dd5a6b5 Adapted to new tree shape for libraries and binaries. 1984-11-05 14:42:17 +00:00
em
73af9ae6cf *** empty log message *** 1984-11-05 12:05:46 +00:00
em
783f95590f *** empty log message *** 1984-11-05 11:55:15 +00:00
keie
d5399de251 The flag -LIB was missing in the call to the shell-procedure
compmodule. Thus the generated libraries could not be effectively
used by our assembler/linker.
1984-11-05 11:37:23 +00:00
bal
b94907a1fa Negation of negative operand with inc/dec added in certain cases.
Don't know effect for sure, author has left.
Added rcsid.
1984-11-02 11:09:46 +00:00
bal
40fcf103bd Initial revision 1984-11-02 10:13:29 +00:00
sater
7f230788d0 Name of error file was wrong, it was the runtime error file instead
of the compile time error file.
1984-11-01 09:30:36 +00:00
ceriel
f0445587cf The input routine used to skip space. This "feature" has been removed
because it is also used to read strings, in which space is significant.
1984-10-31 15:26:09 +00:00
keie
a089216ae7 Adapted to make use of ../../compare and ../../install. 1984-10-26 12:58:15 +00:00
keie
150d744512 Initial revision 1984-10-26 12:54:35 +00:00
keie
e25887d5ca Adapted to make use of ../../compare and ../../install. 1984-10-26 11:48:51 +00:00
keie
c0e66dc8d3 Initial revision 1984-10-26 11:48:13 +00:00
keie
61ab763c07 *** empty log message *** 1984-10-26 11:47:56 +00:00
keie
86f29918c8 Adapted to make use of ../../compare and ../../install. 1984-10-26 11:04:10 +00:00
keie
af335c7be5 *** empty log message *** 1984-10-26 11:01:40 +00:00
keie
2d11c4b2fe Initial revision 1984-10-26 11:00:08 +00:00
ceriel
6fd15f62dc Running makedepend again gave a difference. 1984-10-26 10:31:22 +00:00
ceriel
ca787ba372 removed the "depend" emtry, added a "distr" entry, which should be used
before a distribution is made.
Also added the -DNORCSID flag to the lint-options.
1984-10-26 10:25:55 +00:00
keie
aa65dc9fbd Adapted to use ../../install and ../../compare and hide knowledge
about final destination of libraries.
1984-10-26 10:25:32 +00:00
ceriel
ff47f2ee43 Added a "distr" entry, which will be propagated to the src directory. 1984-10-26 10:24:48 +00:00
keie
5be59d3ade Adapted to make use of ../../compare. 1984-10-26 10:21:18 +00:00
keie
aa74e86069 Adapted to make use of ../../install and ../../compare. 1984-10-26 10:20:29 +00:00
keie
a915561735 Initial revision 1984-10-26 10:20:28 +00:00
keie
9f1edee15f *** empty log message *** 1984-10-26 10:19:56 +00:00
keie
a17a987cb8 *** empty log message *** 1984-10-26 10:12:57 +00:00
keie
db9268bb08 Adapted to use install in ../.. 1984-10-25 14:28:56 +00:00
keie
f064ac567e Now using the compare script in ../.. 1984-10-25 14:28:19 +00:00
keie
17504bb39a Initial revision 1984-10-25 14:28:18 +00:00
keie
ad77d9eb14 *** empty log message *** 1984-10-25 14:24:43 +00:00
keie
558e2166ba Altered the installation procedure.
The libraries etc. are now installed in lib/m68k2 using install in ../..
1984-10-25 14:22:53 +00:00
keie
c71656ab19 Altered to make use of ../../install and ../../compare. 1984-10-25 14:19:58 +00:00
keie
23cf9b8443 Initial revision 1984-10-25 14:19:57 +00:00
keie
44b78ad38d *** empty log message *** 1984-10-25 14:15:27 +00:00
keie
386c0d6e1a Now making use of ../../install and ../../compare. 1984-10-25 14:10:00 +00:00
keie
046ee8050f Adapted to make use of compare in ../.. 1984-10-25 11:40:16 +00:00
keie
1154d87f41 Adapted to make use of install and compare in ../.. 1984-10-25 11:39:39 +00:00
keie
0c16a79a37 *** empty log message *** 1984-10-25 11:39:38 +00:00
keie
f177d69279 Adapted to make use of install and compare in ../.. 1984-10-25 11:27:08 +00:00
keie
a4368ea2d1 *** empty log message *** 1984-10-25 11:25:22 +00:00
keie
675d30712d Removed the definition of LIBDIR, it is superfluous. 1984-10-25 11:16:31 +00:00
keie
209801cac1 Adapted to make use of install and compare in ../.. 1984-10-25 11:16:30 +00:00
keie
9c57272ef9 Initial revision 1984-10-25 11:15:20 +00:00
keie
01f22b3870 Moved the include directory from mach/ibm/include to lib/ibm/include. 1984-10-25 11:00:06 +00:00
keie
6ade85f76e Adapted to use compare in ../.. 1984-10-25 10:46:32 +00:00
keie
0349b620cd Adapted to compare in ../.. 1984-10-25 10:45:22 +00:00
keie
6001a4462e Initial revision 1984-10-25 10:45:21 +00:00
keie
0d853f8c4b *** empty log message *** 1984-10-23 15:29:53 +00:00
keie
e5277be072 Initial revision 1984-10-23 15:29:30 +00:00
keie
cc246efa46 We have only one copy of the script for compare and install now
they are present in ../..
1984-10-23 15:14:17 +00:00
sater
2fe95a276d changed EM_WSIZE to TEM_WSIZE 1984-10-23 15:10:15 +00:00
sater
628d3da626 changed references to EM_?SIZE to TEM_?SIZE 1984-10-23 15:04:24 +00:00
sater
a5c07a52b4 changed EM_WSIZE to TEM_WSIZE 1984-10-23 15:02:03 +00:00
sater
43c97f0d41 added -h and -c flags, to change names of tables.h and tables.c respectively
now also takes an argument instead of stdin.
EM_BSIZE is now compulsory again.
Constants EM_?SIZE are passed on to cg with a T prepended (T for target)
1984-10-23 13:39:15 +00:00
sater
24eeca9474 Changed to use -h flag to cgg and better way of preserving old tables.h
if not changed. Nice huh, Andy?
1984-10-23 13:29:41 +00:00
sater
7eef0e0b59 added rcsid(again). Who took that away? 1984-10-16 13:45:16 +00:00
sater
9d03cb68c7 added code to generate code for ACK assembler.
Works if ACK_ASS is defined.
1984-10-16 13:31:44 +00:00
ceriel
d89d5770b1 Had forgotten to initialise the line number on which a nonterminal
symbol occurred first.
1984-10-12 14:19:34 +00:00
ceriel
f6d9a497eb No changes 1984-10-11 21:35:58 +00:00
ceriel
bac12b0c46 The former version gave a fatal error message at the first undefined
nonterminal. The new version checks all nonterminals
1984-10-11 10:35:01 +00:00
ceriel
e13ebaad9e The routine findpath did not work. It used the same static buffer for
several calls. Now it uses alloc.
1984-10-09 11:43:19 +00:00
em
315806b282 Initial revision 1984-10-09 10:36:29 +00:00
ceriel
43de6c3b78 added "#ifdef NORCSID" 1984-10-09 10:16:33 +00:00
ceriel
0ec009bde2 Added some comments and removed some Lint complaints 1984-10-09 10:13:46 +00:00
ceriel
0f8a2d3a39 Initial revision 1984-10-09 09:47:14 +00:00
ceriel
b5402db333 The routine LLmessage did not insert tokens properly.
This is corrected now.
1984-10-09 09:33:37 +00:00
ceriel
4f5c40c608 Changed RCSid 1984-10-08 17:11:03 +00:00
ceriel
2055a65cae Added RCSid. 1984-10-08 16:21:03 +00:00
ceriel
ed6a7245bd Adapted the libpath routine to use EM_DIR from ../../../h/em_path.h 1984-10-08 15:58:23 +00:00
ceriel
2cd6c03840 Added entry for LLgen. 1984-10-08 15:20:54 +00:00
ceriel
c38d1013cb Initial revision 1984-10-08 15:19:18 +00:00
ceriel
6da013b55a Added entry for LLgen documentation. 1984-10-08 15:00:23 +00:00
ceriel
e3eae54592 Initial revision 1984-10-08 14:51:38 +00:00
ceriel
7cc3184392 Initial revision 1984-10-08 14:24:19 +00:00
ceriel
952ba464cc Initial revision 1984-10-08 14:14:53 +00:00
keie
08b7ec6600 Initial revision 1984-10-08 14:11:42 +00:00
keie
f918aa20fe New installation procedure:
1 - New place for binaries and libraries in the ACK tree.
2 - The ranlib action is moved to ../../install which tries it at
    every action.
1984-10-08 14:09:28 +00:00
bal
54bac1caaf bug fixed: generate "add.l #65536,a1" rather than "lea 65536(a1),a1".
The latter form is only generated for constants that fit in a word.
1984-10-08 12:45:38 +00:00
keie
504da3a54d Altered the test path lib/n_ack into the normal path ACK_PATH. 1984-10-05 15:07:47 +00:00
keie
36cca2b9c7 Added a priority associated with each phase. Paths with the highest
total priority have preference.
1984-10-05 13:34:38 +00:00
keie
6f8a00ee5c 1 - Added some debugging for linker flags.
2 - Setting of NEEDS and RTS is moved to main.c.
3 - Added recognition of -Rphase:[-]number for dynamic priority setting.
1984-10-05 13:31:40 +00:00
keie
ca275f5d22 1 - Most flags used by ack itself are now also passed to the phases
for recognition with mapflag.
2 - A few bugs are removed in connection with argument passing to the
    linker (unrecognized flags and libraries).
3 - The setting of RTS, HEAD and TAIL is done directly after the
    path determination for each file.
1984-10-05 13:28:56 +00:00
keie
150c8164af Removed the defines needed by util/ack/em_pc.c.
These defaults are now provided in lib/ack/fe.
1984-10-04 11:11:30 +00:00
keie
70975146a1 1 - Added RCS identification.
2 - Removed the default for compiler and error file pathname.
    These are now always supplied by the callee.
1984-10-04 11:08:42 +00:00
keie
962cc80686 Corrected a small bug in the pc mapflags. 1984-10-04 10:54:11 +00:00
keie
f6ecbec936 1- Added RCS identification.
2- The pathnames of the Pascal compiler and Compile time-error file
   are now always explicitly passed to em_pc.
1984-10-04 10:47:03 +00:00
keie
8128e3d82d Altered to reflect the changes in em_path.h.
Now dynamically concatenes EM_DIR and error path.
1984-10-04 10:42:13 +00:00
keie
ea86ccd217 Altered the description of EM_HOME in em_path.h to that of
EM_DIR.
1984-10-02 16:24:59 +00:00
sater
045ccfaeba added missing cast at call to regsave, in ms_gto case 1984-10-02 11:17:57 +00:00
sater
a6b69be622 changed definition of myalloc to extern 1984-10-02 10:31:06 +00:00
sater
50d77d903a added external definition for myalloc() 1984-10-02 10:30:44 +00:00
keie
cbf6d06de2 Bug removed: the trailing zero at the end of a growstring was not
explicitly written in doassign(trans.c).
Only luck kept the program together.
1984-10-01 17:42:56 +00:00
keie
bb0ff814f6 Nill pointers are not allowed in CSA descriptors any more. 1984-10-01 16:05:17 +00:00
keie
f80b30bdbb Null pointer are not allowed any more for in-bound indeces in the CSA
table.
1984-10-01 14:54:09 +00:00
keie
7f6105c294 Initial revision 1984-09-25 16:33:15 +00:00
keie
1f59bd7223 Added National semiconductor assembler. 1984-09-25 16:32:45 +00:00
em
8f7669b247 1 - A few minor syntactic changes.
2 - Altered the description of strings as initializers. (sequence of U1's).
1984-09-25 11:06:29 +00:00
keie
f950163854 Made the buffer long enough for the machine state on most machines. 1984-09-24 15:18:20 +00:00
keie
38b8391594 Initial revision 1984-09-24 15:18:07 +00:00
keie
e88fe13466 Initial revision 1984-09-24 14:10:23 +00:00
em
e29ef2395a Compile-time option GLOBAL_OPT defined. If set, the resulting
peephole optimizer will be suitable for optimizing the output of
the global optimizer. In particular, it doesn't change the register
messages.
1984-09-14 10:25:07 +00:00
keie
546bcee023 1 - The prop keyword with is flags is now obsolete. Its function is
taken over by several other keywords: stdin, stdout, prep, optimizer,
    combiner and linker.
2 - The search order is changed. First {EM}/lib/{M}/descr, then
    {EM}/lib/ack/{M}, finally {M}.
1984-09-13 14:40:09 +00:00
keie
a9beb24998 The t_do bits are not set by this module. The t_next entry is used
to see whether the scan for this phase is already done.
t_do is now set in add_inputs(files.c).
1984-09-13 14:35:02 +00:00
keie
96da898a4a 1 - The t_do flags is now set by add_inputs(files.c).
2 - Recognize the fact that it is possible to start a combiner without
    input files.
3 - Removed -d flag. Overflow for -v (>2) now ends up in debug.
    -v may be followed by a number indicating the increment.
1984-09-13 11:07:46 +00:00
keie
a69b503ad0 1 - The outfile entry is only used when the output file must not be thrown
away.
2 - If a combiner has no named input file (only libs+flags) then issue
    a warning message and make up a name.
1984-09-13 11:04:00 +00:00
bal
5fd55904ec pem did not generate a register message for var-parameters of
array- or record type. The routine "treewalk" is modified.
It generates a register message for every var-parameter, even
if it has its noreg-flag set.
1984-09-12 13:21:43 +00:00
bal
195c808f88 unlk a6 added to restr(). 1984-09-11 15:44:14 +00:00
keie
50e3b4fe4a Added ego, basic and callname conventions. 1984-09-10 17:34:04 +00:00
keie
f366afdae1 No comment. 1984-09-10 16:51:02 +00:00
keie
c08fe56b97 Combiners (ego, linkers) now use a list of path's(ack.h) to indicate
their input files.
Unmatched flags are now sent to the linker.
1984-09-10 16:48:57 +00:00
keie
ed3db93f56 1 - A transformation is succesfull when
a - a stopsuffix is indicated and met,
    b - the last transformation is included in the transformation path.
2 - Maintains a 'cash' of best paths for all transformation to be executed.
1984-09-10 16:46:13 +00:00
keie
71dc6af5a8 The input file names of the linker are to be found in a different place. 1984-09-10 16:45:12 +00:00
keie
cfdc2ce05f 1 - added keywords callname and outfile. See manual.
2 - multiple combiners are allowed now.
3 - A different search mechanism is used for finding descriptor files.
1984-09-10 16:42:55 +00:00
keie
845c92825a 1 - callname recognition is moved to rmach.c.
2 - The overall scheme is altered.
	first, all input files are processed until a combining phase is met.
	then, all the combining phases are executed, the resulting files
	are again processed until a combiner (or final) phase is met.
3 - The EM_DIR shell variable can be used to set ack's idea of the EM
    home directory.
1984-09-10 16:37:11 +00:00
keie
3adba1b759 1 - The names of temporary files are now Ack'hex''unique'.'suffix'.
'hex' is the pid of the current invocation of ack in hex.
    'unique' is a tail unique to this invocation.
2 - The outfile field is used to indicate default naming, can be ovrrriden
    by the -o flag.
3 - Added handling for phases with multiple inputs (ego, linker).
1984-09-10 16:33:03 +00:00
keie
ea6c20f5d1 The role of the combiner is -partially- assumed by the linker.
Linker arguments are now part of the transformation structure.
Temp file nameing is changed.
1984-09-10 16:30:47 +00:00
keie
d99b36abf8 Naming of the tempname is changed (see files.c). 1984-09-10 16:29:37 +00:00
keie
93693877be Initial revision 1984-09-03 13:49:40 +00:00
sater
2aa5c6b7d9 Variable nregvars had a name clash with the array nregvar[] in the
file tables.c. That was different in the 8'th character (!"#$%&'()_).
These variables should actually be static.
1984-08-23 17:07:53 +00:00
keie
bbc3cb33cc We do not use the missing " trick anymore.
The root directory of the EM tree is in the name EM_DIR, the
root directory for tempfiles is in TMP_DIR.
All other path's are relative to EM_DIR.
1984-08-23 13:33:11 +00:00
keie
77ebfceac5 The ACK tree on the vax has as default machine 'vax2'. 1984-08-23 13:27:14 +00:00
keie
3d10bd6e59 The missing trailing " trick is now also used for TMP_DIR. 1984-08-23 13:26:44 +00:00
keie
03a31cf3fc The ms_gto is added. This is a trick used to indicate procedures
jumped to with gto.
1984-08-23 13:25:44 +00:00
keie
81267df9ad *** empty log message *** 1984-08-23 13:20:59 +00:00
keie
113cf23e0f Initial revision 1984-08-23 13:18:14 +00:00
keie
3154365fff Initial revision 1984-08-23 13:00:32 +00:00
sater
e006f1ec29 increased MAXNODES in small memory mode 1984-08-23 12:25:24 +00:00
sater
1c36c470db Increased the amount of information passed through error routines
to printf. The routine badassert, running on a 2/4 machine lost it's
last argument on the way.
Anyone know of a better way to solve this problem?
1984-08-17 15:35:28 +00:00
keie
1da13e49e1 Added comment. 1984-08-17 14:57:31 +00:00
keie
f077a39568 Added RCS identification. 1984-08-17 14:44:24 +00:00
sater
6474db065f Revised to include rcsid of pattern file in binary opt 1984-08-16 16:08:39 +00:00
sater
10b16f7c76 enlarged string table in big memory case 1984-08-16 13:34:59 +00:00
sater
1ff6c3236f added patterns to prevent stacking in *p++ cases 1984-08-15 16:05:54 +00:00
sater
19b13e8e4f added patterns to remove some more dup's 1984-08-15 16:04:19 +00:00
sater
e5d1aebbae added patterns for inc/dec/adp of local and external offsetted
This makes the getc() macro from C very efficient, among others
1984-08-15 14:31:54 +00:00
sater
b23de46c3a added patterns to remove as many dup's as possible. 1984-08-15 14:23:42 +00:00
sater
9bdd1abf9a added definition of malloc().
Program crashed on 2/4 machines
1984-08-08 10:54:04 +00:00
sater
6180399964 reworked patterns for autoincrement stores, now that peephole optimizer
rearranged it.
1984-08-07 10:22:49 +00:00
sater
db0822fa37 added patterns for *p++ local and external p
added pattern to remove some badly placed dups
1984-08-03 16:37:15 +00:00
sater
11026ace27 added setcc calls to some incrementing ops
added patterns for indirect local and external increments
added patterns for loe ine and such
1984-08-03 16:33:40 +00:00
sater
76281fa307 removed some superfluous patterns.
Were special cases not needed with the general case.
1984-08-03 13:16:59 +00:00
sater
dbcebe6e4c A move from a nonreg to a reg did not have the effect that all
registers clashing with the destination were erased. Erase added.
1984-08-02 16:31:25 +00:00
keie
8a4d834bc6 The name "unix" is now predefined for preprocessor usage. 1984-08-02 14:13:04 +00:00
sater
925701dc62 When building the parameter list for a pf-call, the line number
for the exchanges war remembered at the wrong time.
This caused:
	foo(3,'string')
to cause an external identifier for the string. Fixed.
1984-07-31 09:39:35 +00:00
keie
385d7ffbd8 String initializer handling is changed.
Strings are now considered to be sequences of xU1's.
No alignment is done before or after the string other than the
alignment done for names and segment type switches.
1984-07-30 14:42:33 +00:00
bal
e1c24cb475 bug fixed: added "fprintf(codefile,""rts\n");" to restr() 1984-07-30 12:47:54 +00:00
bal
964976ff0b bugs fixed (syntax errors, patterns moved to front,
"ldl ldl adp sdl sti" requires DATAREG instead of ANY1 on
fakestack)
1984-07-30 11:16:41 +00:00
bal
4eea24fe69 patterns added to generate autoincrement and to generate
a "move X,d0" instead of a "move X,-(sp)" before storing into X
1984-07-27 16:53:19 +00:00
sater
811bc78f04 added rcsid 1984-07-27 10:28:48 +00:00
sater
b07af506d6 added PR* routines 1984-07-26 13:15:21 +00:00
sater
5e97bff353 Changed procedure prolog to use PR* routines. 1984-07-26 13:05:22 +00:00
keie
c001aa20d7 *** empty log message *** 1984-07-23 11:49:00 +00:00
sater
61da47ea52 removed all calls to blm~ from table
duplicated some patterns for in[lc] to deal with de[lc]
extra rule for adi 2 to deal with source1 cleverly
1984-07-23 11:29:59 +00:00
sater
d6a3a26314 removed blm.s, not used by table anymore 1984-07-20 16:20:54 +00:00
sater
eca6c1f306 edited to make reentrant, no more globals in use 1984-07-20 16:20:28 +00:00
sater
189e577315 added copyright notice 1984-07-20 13:54:36 +00:00
sater
8b9ebd989f added rcsid
adapted to new archive updating style, with LIST and march and all that
1984-07-20 11:32:47 +00:00
sater
182f3ee338 Initial revision 1984-07-20 11:25:31 +00:00
sater
8707eb1715 added rcsid 1984-07-20 11:25:18 +00:00
sater
9935b1fc88 added copyright notice 1984-07-20 11:20:12 +00:00
sater
06249087bd removed copyright notice, wasn't really *written* by us. 1984-07-20 11:07:12 +00:00
sater
5e3c08728c added rcsid 1984-07-20 11:03:31 +00:00
sater
f54556ac0f Initial revision 1984-07-20 10:44:57 +00:00
sater
1a0102783f A sti 8 of a regdef8 token went into panic mode. Fixed. 1984-07-20 10:32:48 +00:00
sater
1e5056bcc0 to check long >= 0 or long < 0 it is enough to test high order word. Added.
anding and oring of long constants is much better now
dvu 2 and rmu 2 by positive constants is now done inline.
1984-07-19 16:50:27 +00:00
sater
96e8152f11 added rcsid 1984-07-19 15:03:30 +00:00
sater
7683ff7d03 Initial revision 1984-07-19 15:01:43 +00:00
sater
309ed81674 Archive made with archiver in environment ASAR if set, arch otherwise 1984-07-19 14:55:12 +00:00
sater
badfdeb5db removed #ifdef UNTESTED around logical instructions without arguments,
seems they were used ( which implicitly means tested ) after all
1984-07-19 14:03:49 +00:00
sater
ea793ccff5 Initial revision 1984-07-19 13:52:18 +00:00
sater
3c037725e9 added rcsid 1984-07-19 13:34:12 +00:00
sater
b28024573a changed name from comparchentry to compmodule 1984-07-19 13:22:36 +00:00
sater
320c575b54 Initial revision 1984-07-19 13:20:15 +00:00
sater
1e806d2a28 old code put back, now register handling is different again
actually old code never was removed, due to a misunderstanding
about comment conventions.
1984-07-19 13:12:03 +00:00
sater
18d72ffde3 makefile adapted to new style archive handling, RCS and all that 1984-07-19 13:11:36 +00:00
sater
53c19368d5 a setl instruction was changed to a setd
setl was just plain wrong
1984-07-19 13:09:53 +00:00
sater
fa6f4b86e3 Initial revision 1984-07-19 12:51:00 +00:00
bal
0f199294ae rcsid added 1984-07-19 11:50:29 +00:00
bal
ff6056a6b6 Initial revision 1984-07-19 11:50:28 +00:00
sater
92c1e38b42 Initial revision 1984-07-19 11:50:18 +00:00
bal
8bbb3ddca7 New implementation of GTO (without register save masks)
several optimizations added
1984-07-19 11:15:28 +00:00
bal
8fef858ce8 New implementation of GTO (without register save masks) 1984-07-19 11:07:15 +00:00
bal
39428d2028 rcsid added
several optimizations added
1984-07-19 11:02:06 +00:00
bal
e5895a2768 rcsid added
clr.w -(sp) generated in prolog if register save mask is 0
1984-07-19 10:57:19 +00:00
bal
250f0df7f7 Initial revision 1984-07-19 10:03:10 +00:00
bal
85c15fca29 Initial revision 1984-07-19 09:37:24 +00:00
sater
3422e2338c added patterns for ldc adi/ldc sbi with zero high order word
added patterns for *--p with p register
added patterns to generate cmpb to compare two bytes.
added patterns to use regvar to index global array
added patterns for lol inl
added patterns for external pointer increment/decrement
1984-07-18 16:47:24 +00:00
sater
e92ac2c6d3 The patterns to change a cii to cuu when dealing with a known positive
quantity was technically wrong. Changed to generate a cui.
1984-07-18 15:54:25 +00:00
sater
35fbddd030 added definition of index, to keep compiler happy 1984-07-18 14:14:46 +00:00
sater
c65b0f7044 removed recursive comments
removed NC with sti rules
added rule to reverse operands of adi 2
added rule to convert loc sbi to loc adi
added loc slu -> loc sli rule
added local++ rule
added rule for asping xsource2
added rule for csb when nothing on stack
1984-07-18 13:39:24 +00:00
sater
84fca60378 added rcsid
changed instruction label format to allow more than 256 procedures
1984-07-18 13:32:11 +00:00
sater
7c5508ddbd changed instruction label format to allow more than 256 procedures 1984-07-18 13:28:01 +00:00
sater
d33e4ac474 added rcsid
converted to recognize and generate new 0%o format
1984-07-18 13:14:18 +00:00
sater
0a4d372056 added patterns for unsigned shifting
added patterns to delay additive operations until after multiplicative,
  this can be useful for some register machines
1984-07-18 11:05:28 +00:00
sater
f98fe503a0 Improved error handling on unterminated strings 1984-07-18 11:04:58 +00:00
sater
4410480e32 added -f flags to all calls to rm 1984-07-16 15:29:48 +00:00
sater
97b50be407 added special patterns for:
1) long compared to constant ( ldc cms 4 zxx )
2) long increments ( ld? ldc adi 4 sd? )
3) autoincrement loads and stores ( lol lol adp stl loi/sti )
1984-07-16 14:39:21 +00:00
keie
f3d3393af3 *** empty log message *** 1984-07-16 09:36:12 +00:00
keie
32f55c5462 Added z8000 assembler manual. 1984-07-16 09:32:22 +00:00
sater
42c556cc1f added missing #endif
added two patterns, big improvement
added patterns for ciu and cui
some cosmetic change
1984-07-13 16:13:56 +00:00
keie
edcf39e999 *** empty log message *** 1984-07-13 15:20:58 +00:00
keie
ac940fe687 Added lines for DECUS cpp manual. 1984-07-13 15:19:19 +00:00
keie
a618660635 The check for a too high offset in a hol is repaired. 1984-07-13 15:03:05 +00:00
keie
965a2fa352 A bug in the exchange was repaired.
Exchanges across pseudo-instructions didn't work properly.
1984-07-13 15:01:23 +00:00
sater
d8238383ca Removed some patterns that have never been tested.
Now if someone uses them he will hear that it doesn't work.
That must be better then giving him code that probably won't work.
All these patterns had to do with things like adf without an argument
and things like that.
1984-07-13 14:55:37 +00:00
sater
f33edd402e Initial revision 1984-07-13 11:25:46 +00:00
sater
a4f3d3c503 Initial revision 1984-07-13 11:12:23 +00:00
sater
d1994a651b changed format of rcsid message 1984-07-12 15:18:13 +00:00
sater
ba79fb2a37 Initial revision 1984-07-12 15:16:23 +00:00
sater
743bbb551f added rcsid 1984-07-12 14:55:49 +00:00
sater
df7b70c37e changed explanation of .base pseudo
added rcsid
1984-07-12 14:55:22 +00:00
sater
58170d17d2 added rcsid
added lines for formatting new manuals
1984-07-12 14:53:30 +00:00
sater
b758fc47aa *** empty log message *** 1984-07-12 14:51:48 +00:00
sater
d608d58ad1 Initial revision 1984-07-12 14:14:54 +00:00
sater
cb1d7f7e96 *** empty log message *** 1984-07-12 14:08:27 +00:00
sater
0ae1957f80 added rcsid 1984-07-12 14:07:14 +00:00
sater
3671970cc5 added rcsid
added compilation of tstgto.p
1984-07-12 14:05:03 +00:00
sater
463090c3a4 Initial revision 1984-07-12 13:50:44 +00:00
keie
e1666e49b0 asprint is removed at cleanup time. 1984-07-12 13:24:02 +00:00
keie
3d2f1d3690 1 - Dump has a parameter.
2 - Dump are enabled.
1984-07-12 13:23:03 +00:00
keie
06a8899eec 1 - A header is treated as an unsigned number.
2 - The low order word of the size in archives is fetched as unsigned.
3 - Sizes are unsigned.
1984-07-12 13:20:48 +00:00
keie
3565805b63 Parameter added to dump preprocessor variable. 1984-07-12 12:58:18 +00:00
keie
207bd9dcf7 1 - Header fetch was changed to unsigned.
2 - Extra parentheses are needed by some compilers.
1984-07-12 12:57:36 +00:00
keie
e2482166f7 Initial revision 1984-07-12 12:48:33 +00:00
sater
af88eafe02 removed REGPATCH define 1984-07-12 11:03:18 +00:00
sater
8f9fb0ad77 added definition of newplb()
removed a tab from some string
1984-07-12 11:02:44 +00:00
sater
8a6604f224 Removed unbalanced quotes in comments, needed for new cpp 1984-07-12 10:50:47 +00:00
sater
6c021a0800 reworked to use ack instead of npc.
made more user-friendly (ha ha)
1984-07-12 10:42:33 +00:00
sater
2eeeba3225 Now lexical analyzer skips lines starting with #
to kill off remnants of some preprocessor.
1984-07-12 10:18:19 +00:00
sater
c79d077c3f added description of newplb macro.
Enlarged an example.
1984-07-12 10:13:56 +00:00
sater
6a1228a5cd The sequence:
lin 100
  cal $foo
  lin 101
used to have it's second lin lni'ed. This is obviously wrong.
A check is now made for procedure calls.
1984-07-12 09:29:49 +00:00
sater
b2d4b9d42d Replaced call to newilb after pro pseudo to call to newplb,
including retrofit for existing mach.h files
1984-07-12 09:26:24 +00:00
sater
60b6d9c00d Increased MAXINSTANCE in big memory model 1984-07-12 09:23:38 +00:00
keie
00a6b2f4c6 Added the entries for instructions with 32-bit arguments. 1984-07-02 16:04:26 +00:00
keie
0a797a2688 1 - added routines to read unsigned 16-bit numbers
2 - cleanup of writing of ABS block, was in error for wordsize>4.
3 - strings are now padded up to a multiple of the wordsize.
4 - the padding algorithm for alignment was in error for wordsize>2.
1984-07-02 16:01:50 +00:00
keie
2e3eb2f103 Not in the initial distribution. 1984-07-02 15:46:59 +00:00
keie
5ce6138a58 Added asprint to list of files to remove with 'clean'. 1984-07-02 15:46:06 +00:00
keie
82d0bd9091 1 - Altered an incorrect dependency for assrl.o
2 - Added asprint
1984-07-02 15:42:37 +00:00
keie
e1466b3e09 Initial revision 1984-07-02 15:35:56 +00:00
sater
51243ce443 Initial revision 1984-07-02 11:26:53 +00:00
sater
c6790d4142 Initial revision 1984-07-02 10:45:13 +00:00
sater
9a91288da9 Added missing .DE macro 1984-06-29 14:51:23 +00:00
sater
79d76cf153 Changed all occurrences of -ms into a macro $(MS) 1984-06-29 14:50:23 +00:00
sater
2a026953ff Initial revision 1984-06-29 14:46:39 +00:00
sater
fb9cd1ed17 Initial revision 1984-06-29 11:29:28 +00:00
sater
3efa053ae7 Initial revision 1984-06-29 11:21:50 +00:00
sater
f5b641009b Initial revision 1984-06-29 11:00:55 +00:00
sater
f3f3069f54 Fixed bug: after BRA instruction was optimized away the variable lastbra
pointed to the instruction following. This could lead to anything,
including bus errors. Lastbra is now reset to 0.
Bug discovered at Philips PMDS by Hans de Vries. The fix is also his.
Actually the function cleaninstr should be rewritten.
1984-06-28 10:40:09 +00:00
sater
ef3aa6fa57 added rcsid 1984-06-26 10:08:37 +00:00
sater
380aa1515e Initial revision 1984-06-26 10:03:31 +00:00
sater
2af94af5c6 Initial revision 1984-06-25 16:22:03 +00:00
sater
af55840493 Initial revision 1984-06-25 11:02:34 +00:00
em
3afc39c1ea The name cpp.new for the alternative C-preprocessor is
no longer needed.
1984-06-21 13:16:26 +00:00
keie
abde37e1fc artificial commit to compensate for changes in 93f3093f2b7e from a CVS
vendor branch
1984-06-21 13:13:10 +00:00
keie
6a279822dc Some ad-hoc stuff for searching in the new tree shape. 1984-06-21 13:13:10 +00:00
em
a8ee954405 Assembler peephole optimizer added. 1984-06-21 13:09:51 +00:00
keie
dc3874ad9d Ack assumed that files resulting from transformations
would not need to be fed through a pre-processor.
This assumption proved false. Ack was altered and allows
use of a pre-processor on files produced by other passes.
1984-06-21 11:29:22 +00:00
keie
c74da38c3d Adapted to use the new backend. 1984-06-21 11:26:10 +00:00
keie
f13d0d6c3e Adapted to the new C preprocessor that does NOT have
ANY default include directories like /usr/include.
1984-06-21 11:25:05 +00:00
keie
0c1ac8e7dd Initial revision 1984-06-21 11:24:08 +00:00
em
580b5f5d7f Added warning about forthcoming shift/reduce conflict 1984-06-21 11:13:28 +00:00
cvs2hg
2019296d74 fixup commit for branch 'unlabeled-1.1.1' 1984-06-21 10:58:00 +00:00
2 changed files with 2341 additions and 690 deletions

View File

@@ -1,690 +0,0 @@
/*
* (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
*
* This product is part of the Amsterdam Compiler Kit.
*
* Permission to use, sell, duplicate or disclose this software must be
* obtained in writing. Requests for such permissions may be sent to
*
* Dr. Andrew S. Tanenbaum
* Wiskundig Seminarium
* Vrije Universiteit
* Postbox 7161
* 1007 MC Amsterdam
* The Netherlands
*
*/
/*
* put all the pieces of the pascal part of the EM project together
* original author: Johan Stevenson, Vrije Universiteit, Amsterdam
* heavily modified by: Ed Keizer, Vrije Universiteit, Amsterdam
*/
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/dir.h>
#include <em_path.h>
#include <pc_size.h>
#include <local.h>
#define MAX_FLAG 40 /* The Max. no of '{' flags allowed */
#define void int
char def_pc_path[200] ;
char def_err_path[200] ;
char *pc_path = def_pc_path ;
char *err_path = def_err_path ;
int toterr;
int parent;
char *eeflag;
char *vvflag = "-V";
int no_pemflag = 0 ;
char *pemflag[MAX_FLAG];
char *eflag;
char *wflag;
int sizes[sz_last+1] = {
2, /* sz_addr */
8, /* sz_real */
0, /* sz_head */
512, /* sz_buff */
4096, /* sz_mset */
2, /* sz_iset */
};
#define CALLSIZE 60
char *callvector[CALLSIZE];
char **av;
int ac;
int fileargs; /* number of recognized, processed args */
int flagargs;
char *progname;
char *source;
#define CHARSIZE 2500
#define CHARMARG 50
char charbuf[CHARSIZE];
char *charp = charbuf;
char *tmp_dir = TMP_DIR;
char *unique = "pcXXXXXX";
char sigs[] = {
SIGHUP,
SIGINT,
SIGTERM,
0
};
/*
* forward function declarations
*/
void finish();
void pem();
int list();
char *flag();
char *tempfile();
char **initvector();
char *basename();
/*
* used library routines and data
*/
extern char *sys_errlist[];
extern int errno;
int atoi();
void exit();
void sleep();
void execv();
char *sbrk();
int chdir();
int fork();
int wait();
int getpid();
int open();
int close();
int read();
main(argc,argv) char **argv; {
register char *p;
char *files[3] ;
for (p = sigs; *p; p++)
if (signal(*p,finish) == SIG_IGN)
signal(*p,SIG_IGN);
ac = argc;
av = argv;
progname = *av++;
init();
while ( --ac>0 ) {
p = *av++;
if (*p == '-') {
flagargs++;
p = flag(p);
} else {
if ( fileargs>=3 ) fatal("Too many file arguments") ;
files[fileargs++]= p;
}
}
if ( fileargs!=3 ) fatal("Not enough arguments") ;
source=files[2] ;
pem(files[0],files[1]) ;
finish();
}
char *flag(f) char *f; {
register char *p;
p = f+1;
switch (*p++) {
case 'e':
eflag = f;
break;
case 'E':
eeflag = f;
break;
case 'w':
wflag = f;
break;
case 'V':
vvflag = f;
return(0);
case '{':
if ( no_pemflag>=MAX_FLAG ) {
ermess("too many flags, ignored %s",f) ;
} else {
pemflag[no_pemflag++] = p;
}
return(0);
case 'R':
pc_path= p ;
return 0 ;
case 'r' :
err_path= p ;
return 0 ;
default:
return(f);
}
if (*p)
fatal("bad flag %s",f);
return(0);
}
initsizes(f) FILE *f; {
register c, i;
register char *p;
p = vvflag + 2;
while (c = *p++) {
i = atoi(p);
while (*p >= '0' && *p <= '9')
p++;
switch (c) {
case 'p': sz_addr = i; continue;
case 'f': sz_real = i; continue;
case 'h': sz_head = i; continue;
case 'b': sz_buff = i; continue;
case 'm': sz_mset = i; continue;
case 'j': sz_iset = i; continue;
case 'w':
case 'i': if (i == 2) continue; break;
case 'l': if (i == 4) continue; break;
}
fatal("bad V-flag %s",vvflag);
}
if (sz_head == 0)
sz_head = 6*sz_word + 2*sz_addr;
for (i = 0; i <= sz_last; i++)
fprintf(f, "%d\n",sizes[i]);
}
/* ------------------ calling sequences -------------------- */
pem(p,q) char *p,*q; {
register char **v,*d;
int i;
FILE *erfil;
v = initvector(pc_path);
d = tempfile('d');
if ((erfil = fopen(d,"w")) == NULL)
syserr(d);
initsizes(erfil);
fprintf(erfil,"%s\n",basename(source));
for ( i=0 ; i<no_pemflag ; i++ ) fprintf(erfil,"%s\n",pemflag[i]);
fclose(erfil);
*v++ = q;
*v++ = d;
call(v,p,(char *)0);
if (toterr == 0)
if (list(p,d) < 0)
toterr++;
donewith(d);
}
/* ------------------- miscellaneous routines --------------- */
char *basename(p) char *p; {
register char *q;
q = p;
while (*q)
if (*q++ == '/')
p = q;
return(p);
}
char *tempfile(suf) {
register char *p,*q;
register i;
p = charp; q = tmp_dir;
while (*p = *q++)
p++;
*p++ = '/';
q = unique;
while (*p = *q++)
p++;
i = fileargs;
do
*p++ = i % 10 + '0';
while (i /= 10);
*p++ = '.'; *p++ = suf; *p++ = '\0';
q = charp; charp = p;
return(q);
}
call(v,in,out) char **v,*in,*out; {
register pid;
int status;
while ((parent = fork()) < 0)
sleep(1);
if (parent == 0) {
if (in) {
close(0);
if (open(in,0) != 0)
syserr(in);
}
if (out) {
close(1);
if (creat(out,0666) != 1)
syserr(out);
}
*v = 0;
execv(callvector[0],callvector+1);
syserr(callvector[0]);
}
while ((pid = wait(&status)) != parent) {
if (pid == -1)
fatal("process %d disappeared",parent);
fatal("unknown child %d died",pid);
}
if ((status & 0177) > 3) {
/*
if ((status & 0200) && tflag==0)
unlink("core");
*/
fatal("signal %d in %s. Ask an expert for help",
status&0177,callvector[0]);
}
if (status & 0177400)
toterr++;
}
char **initvector(path) char *path; {
register char *p,**v;
v = callvector;
p = path;
*v++ = p;
*v++ = basename(p);
return(v);
}
finish() {
register char *p,*q;
register fd;
struct direct dir;
signal(SIGINT,SIG_IGN);
if (parent != 0) {
chdir(tmp_dir);
fd = open(".",0);
while (read(fd,(char *) &dir,sizeof dir) == sizeof dir) {
if (dir.d_ino == 0)
continue;
p = unique;
q = dir.d_name;
while (*p++ == *q++)
if (*p == '\0') {
unlink(dir.d_name);
break;
}
}
close(fd);
}
exit(toterr ? -1 : 0);
}
donewith(p) char *p; {
if (p >= charbuf && p < &charbuf[CHARSIZE])
unlink(p);
}
init() {
register char *p,*s ;
register i,fd;
if ((fd = open(tmp_dir,0)) < 0)
tmp_dir = ".";
close(fd);
p= def_pc_path ;
s= EM_DIR ; while ( *p++ = *s++ ) ; *p='/' ;
s= PEM_PATH ; while ( *p++ = *s++ ) ;
p= def_err_path ;
s= EM_DIR ; while ( *p++ = *s++ ) ; *p='/' ;
s= ERR_PATH ; while ( *p++ = *s++ ) ;
p = unique+2;
parent = i = getpid();
do
*p++ = i % 10 + '0';
while (i /= 10);
*p++ = '.'; *p = '\0';
}
/* ------------------- pascal listing ----------------------- */
#define MAXERNO 300
#define MAXERRLIST 10
#define IDMAX 8
struct errec {
int erno;
char mess[IDMAX+1];
int mesi;
int chno;
int lino;
};
struct errec curr;
struct errec next;
int *index = 0;
int maxerno;
int errerr;
int errfat;
int listlino;
int listorig;
int listrela;
char *listfnam;
FILE *inpfil;
FILE *mesfil;
FILE *errfil;
int errorline();
int geterrec();
int nexterror();
int list(p,q) char *p,*q; {
if ((errfil = fopen(q,"r")) == NULL)
syserr(q);
if (geterrec() == 0)
if (eeflag==0) {
fclose(errfil);
return(0);
}
if (index == 0) {
index = (int *) sbrk(MAXERNO * sizeof index[0]);
fillindex();
}
if ((inpfil = fopen(p,"r")) == NULL)
syserr(p);
errerr = 0;
errfat = 0;
listlino = 0;
listorig = 0;
listrela = 0;
listfnam = source;
if (eeflag)
listfull();
else if (eflag)
listpartial();
else
listshort();
fclose(errfil);
fclose(inpfil);
fflush(stdout);
return(errfat ? -1 : 1);
}
listshort() {
while (nexterror()) {
while (listlino < curr.lino)
nextline(0);
printf("%s, line %d: ",listfnam,listrela);
string(&curr);
}
}
listfull() {
if (nexterror())
do {
do {
nextline(1);
} while (listlino < curr.lino);
} while (errorline());
while (nextline(1))
;
}
listpartial() {
if (nexterror())
do {
do {
nextline(listlino >= curr.lino-2);
} while (listlino < curr.lino);
} while (errorline());
}
int nextline(printing) {
register ch;
listlino++;
ch = getc(inpfil);
if (ch == '#') {
if (lineline(printing) == 0)
fatal("bad line directive");
return(1);
}
listrela++;
if (listfnam == source)
listorig++;
if (ch != EOF) {
if (printing)
printf("%5d\t",listorig);
do {
if (printing)
putchar(ch);
if (ch == '\n')
return(1);
} while ((ch = getc(inpfil)) != EOF);
}
return(0);
}
lineline(printing) {
register ch;
register char *p,*q;
static char line[100];
p = line;
while ((ch = getc(inpfil)) != '\n') {
if (ch == EOF || p == &line[100-1])
return(0);
*p++ = ch;
}
*p = '\0'; p = line;
if (printing)
printf("\t#%s\n",p);
if ((listrela = atoi(p)-1) < 0)
return(0);
while ((ch = *p++) != '"')
if (ch == '\0')
return(0);
q = p;
while (ch = *p++) {
if (ch == '"') {
*--p = '\0';
if ( source ) {
listfnam = strcmp(q,source)==0 ? source : q;
return(1);
}
source=q ; listfnam=q ;
return 1 ;
}
if (ch == '/')
q = p;
}
return(0);
}
int errorline() {
register c;
register struct errec *p,*q;
struct errec lerr[MAXERRLIST];
int goon;
printf("*** ***");
p = lerr;
c = 0;
do {
if (c < curr.chno) {
printf("%*c",curr.chno-c,'^');
c = curr.chno;
}
if (p < &lerr[MAXERRLIST])
*p++ = curr;
goon = nexterror();
} while (goon && curr.lino==listlino);
putchar('\n');
for (q = lerr; q < p; q++)
string(q);
putchar('\n');
return(goon);
}
int geterrec() {
register ch;
register char *p;
ch = getc(errfil);
next.erno = 0;
next.mesi = -1;
next.mess[0] = '\0';
if (ch == EOF)
return(0);
if (ch >= '0' && ch <= '9') {
ch = getnum(ch,&next.mesi);
} else if (ch == '\'') {
p = next.mess;
while ((ch = getc(errfil)) != ' ' && ch != EOF)
if (p < &next.mess[IDMAX])
*p++ = ch;
*p = '\0';
}
ch = getnum(ch, &next.erno);
ch = getnum(ch, &next.lino);
ch = getnum(ch, &next.chno);
if (ch != '\n')
fatal("bad error line");
return(1);
}
int getnum(ch, ip) register ch; register *ip; {
register neg;
*ip = 0;
while (ch == ' ')
ch = getc(errfil);
if (neg = ch=='-')
ch = getc(errfil);
while (ch >= '0' && ch <= '9') {
*ip = *ip * 10 - '0' + ch;
ch = getc(errfil);
}
if (neg)
*ip = -(*ip);
return(ch);
}
int nexterror() {
do { /* skip warnings if wflag */
curr = next;
if (curr.erno == 0)
return(0);
for (;;) {
if (geterrec() == 0)
break;
if (next.lino != curr.lino || next.chno != curr.chno)
break;
if (curr.erno < 0 && next.erno > 0)
/* promote warnings if they cause fatals */
curr.erno = -curr.erno;
if (next.mess[0] != '\0' || next.mesi != -1)
/* give all parameterized errors */
break;
if (curr.mess[0] != '\0' || curr.mesi != -1)
/* and at least a non-parameterized one */
break;
}
} while (curr.erno < 0 && wflag != 0);
return(1);
}
fillindex() {
register *ip,n,c;
if ((mesfil = fopen(err_path,"r")) == NULL)
syserr(err_path);
ip = index;
*ip++ = 0;
n = 0;
while ((c = getc(mesfil)) != EOF) {
n++;
if (c == '\n') {
*ip++ = n;
if (ip > &index[MAXERNO])
fatal("too many errors on %s",err_path);
}
}
maxerno = ip - index;
}
string(ep) register struct errec *ep; {
register i,n;
errerr++;
if ((i = ep->erno) < 0) {
i = -i;
printf("Warning: ");
} else
errfat++;
if (i == 0 || i >= maxerno)
fatal("bad error number %d",i);
n = index[i] - index[i-1];
fseek(mesfil,(long)index[i-1],0);
while (--n >= 0) {
i = getc(mesfil);
if (i == '%' && --n>=0) {
i = getc(mesfil);
if (i == 'i')
printf("%d", ep->mesi);
else if (i == 's')
printf("%s", ep->mess);
else
putchar(i);
} else
putchar(i);
}
}
/* ------------------- error routines -------------------------- */
/* VARARGS1 */
void ermess(s,a1,a2,a3,a4) char *s; {
fprintf(stderr,"%s: ",progname);
fprintf(stderr,s,a1,a2,a3,a4);
fprintf(stderr,"\n");
}
syserr(s) char *s; {
fatal("%s: %s",s,sys_errlist[errno]);
}
/* VARARGS1 */
void fatal(s,a1,a2,a3,a4) char *s; {
ermess(s,a1,a2,a3,a4);
toterr++;
finish();
}

2341
util/cgg/bootgram.y Normal file

File diff suppressed because it is too large Load Diff