Browse Source

Merge deletion of many undead files.

George Koehler 11 years ago
parent
commit
7ef9b79c11
100 changed files with 0 additions and 14890 deletions
  1. 0 3
      DistrAction
  2. 0 35
      Makefile
  3. 0 1
      bin/em.pascal
  4. 0 3
      distr/Action
  5. 0 16
      distr/Action1
  6. 0 26
      distr/f.attf
  7. 0 1
      distr/mks
  8. 0 6
      doc/ceg/Makefile
  9. 0 284
      doc/ceg/proposal.tr
  10. 0 276
      doc/ceg/prototype.tr
  11. 0 323
      doc/cref.doc
  12. 0 55
      doc/ego/Makefile
  13. 0 37
      doc/em/Makefile
  14. 0 1122
      doc/em/addend.n
  15. 0 11
      doc/em/app.int.nr
  16. 0 488
      doc/em/app.nr
  17. 0 32
      doc/em/int/Makefile
  18. 0 376
      doc/em/iotrap.nr
  19. 0 2922
      doc/em/itables
  20. 0 5
      doc/em/print
  21. 0 4
      doc/em/show
  22. 0 9
      doc/lint/Makefile
  23. 0 18
      doc/occam/Makefile
  24. 0 10
      doc/sparc/Makefile
  25. 0 8
      doc/top/Makefile
  26. 0 1
      emtest/last
  27. 0 28
      emtest/test.e
  28. 0 289
      etc/pc_errors
  29. 0 107
      etc/pc_rt_errors
  30. 0 70
      first/cc.xenix.src
  31. 0 67
      first/ckpath
  32. 0 7
      first/did_first
  33. 0 75
      first/fixlexlib
  34. 0 0
      first/hash
  35. 0 21
      first/myecho.c
  36. 0 26
      h/pc_size.h
  37. 0 28
      include/_tail_cc/termio.h
  38. 0 64
      lang/basic/src/Makefile
  39. 0 143
      lang/cem/cemcom.ansi/LintPars
  40. 0 718
      lang/cem/cemcom.ansi/Makefile.erik
  41. 0 67
      lang/cem/cemcom.ansi/Resolve
  42. 0 8
      lang/cem/cemcom.ansi/Version.c
  43. 0 16
      lang/cem/cemcom.ansi/asm.c
  44. 0 230
      lang/cem/cemcom.ansi/cem.1
  45. 0 764
      lang/cem/cemcom.ansi/cem.c
  46. 0 104
      lang/cem/cemcom.ansi/cemcom.1
  47. 0 641
      lang/cem/cemcom.ansi/ch7.c
  48. 0 352
      lang/cem/cemcom.ansi/ch7bin.c
  49. 0 168
      lang/cem/cemcom.ansi/ch7mon.c
  50. 0 21
      lang/cem/cemcom.ansi/decspecs.str
  51. 0 74
      lang/cem/cemcom.ansi/l_dummy.c
  52. 0 246
      lang/cem/cemcom.ansi/mcomm.c
  53. 0 9
      lang/cem/cemcom.ansi/nmclash.c
  54. 0 237
      lang/cem/cemcom.ansi/scan.c
  55. 0 88
      lang/cem/cemcom/Files
  56. 0 146
      lang/cem/cemcom/LintPars
  57. 0 139
      lang/cem/cemcom/Parameters
  58. 0 67
      lang/cem/cemcom/Resolve
  59. 0 8
      lang/cem/cemcom/Version.c
  60. 0 159
      lang/cem/cemcom/alloc.c
  61. 0 16
      lang/cem/cemcom/alloc.h
  62. 0 23
      lang/cem/cemcom/code.h
  63. 0 45
      lang/cem/cemcom/declarator.h
  64. 0 23
      lang/cem/cemcom/decspecs.h
  65. 0 37
      lang/cem/cemcom/def.h
  66. 0 144
      lang/cem/cemcom/doprnt.c
  67. 0 201
      lang/cem/cemcom/em.c
  68. 0 42
      lang/cem/cemcom/em.h
  69. 0 71
      lang/cem/cemcom/em_lint.h
  70. 0 136
      lang/cem/cemcom/emcode.def
  71. 0 102
      lang/cem/cemcom/expr.h
  72. 0 9
      lang/cem/cemcom/faulty.h
  73. 0 20
      lang/cem/cemcom/field.h
  74. 0 68
      lang/cem/cemcom/idf.h
  75. 0 624
      lang/cem/cemcom/ival.c
  76. 0 70
      lang/cem/cemcom/l_dummy.c
  77. 0 52
      lang/cem/cemcom/macro.h
  78. 0 19
      lang/cem/cemcom/make.emfun
  79. 0 10
      lang/cem/cemcom/make.emmac
  80. 0 9
      lang/cem/cemcom/nmclash.c
  81. 0 46
      lang/cem/cemcom/stack.h
  82. 0 67
      lang/cem/cemcom/storage.c
  83. 0 23
      lang/cem/cemcom/storage.h
  84. 0 277
      lang/cem/cemcom/string.c
  85. 0 13
      lang/cem/cemcom/string.h
  86. 0 44
      lang/cem/cemcom/struct.h
  87. 0 40
      lang/cem/cemcom/switch.h
  88. 0 72
      lang/cem/cemcom/system.c
  89. 0 34
      lang/cem/cemcom/system.h
  90. 0 300
      lang/cem/cemcom/tab.c
  91. 0 52
      lang/cem/cemcom/type.h
  92. 0 266
      lang/cem/cpp.ansi/Makefile
  93. 0 74
      lang/cem/cpp.ansi/nccp.6
  94. 0 152
      lang/cem/ctest/ctstruct/str.pcc.r
  95. 0 53
      lang/cem/ctest/makefile
  96. 0 54
      lang/cem/ctest/makefile.i86
  97. 0 53
      lang/cem/ctest/makefile.int
  98. 0 174
      lang/cem/ctest/out.std
  99. 0 66
      lang/cem/libcc.ansi/MakeArch
  100. 0 50
      lang/cem/libcc.ansi/Makefile

+ 0 - 3
DistrAction

@@ -1,3 +0,0 @@
-p=/proj/em/Work
-sh TakeAction 'make distr' $p/distr/Action
-sh TakeAction 'make distr' $p/distr/Action1

+ 0 - 35
Makefile

@@ -1,35 +0,0 @@
-cmp:           # compile everything and compare
-	(cd etc  ; make cmp )
-	(cd util ; make cmp )
-	(cd lang ; make cmp )
-	(cd mach ; make cmp )
-
-install:         # compile everything to machine code
-	(cd etc  ; make install )
-	(cd util ; make install )
-	(cd lang/cem ; make install )
-	(cd mach ; make install )
-	(cd lang/pc ; make install )
-
-clean:        # remove all non-sources, except boot-files
-	(cd doc ; make clean )
-	(cd man ; make clean )
-	(cd h   ; make clean )
-	(cd etc  ; make clean )
-	(cd util ; make clean )
-	(cd lang ; make clean )
-	(cd mach ; make clean )
-
-opr:            # print all sources
-	make pr | opr
-
-pr:             # print all sources
-	@( pr Makefile ; \
-	  (cd doc ; make pr ) ; \
-	  (cd man ; make pr ) ; \
-	  (cd h ; make pr ) ; \
-	  (cd etc  ; make pr ) ; \
-	  (cd lang ; make pr ) ; \
-	  (cd util ; make pr ) ; \
-	  (cd mach ; make pr ) \
-	)

+ 0 - 1
bin/em.pascal

@@ -1 +0,0 @@
-exec /usr/em/doc/em/int/em /usr/em/doc/em/int/tables ${1-e.out} core

+ 0 - 3
distr/Action

@@ -1,3 +0,0 @@
-name "EM tables"
-dir etc
-end

+ 0 - 16
distr/Action1

@@ -1,16 +0,0 @@
-name "m68k2/cg bootstrap files"
-dir mach/m68k2/cg
-action "make EMHOME=/proj/em/Work distr"
-end
-name "vax4/cg bootstrap files"
-dir mach/vax4/cg
-action "make EMHOME=/proj/em/Work distr"
-end
-name "m68020/ncg bootstrap files"
-dir mach/m68020/ncg
-action "make EMHOME=/proj/em/Work distr"
-end
-name "m68k4/cg bootstrap files"
-dir mach/m68k4/cg
-action "make EMHOME=/proj/em/Work distr"
-end

+ 0 - 26
distr/f.attf

@@ -1,26 +0,0 @@
--- ./doc/install.pr no RCS file
--- ./h/em_mnem.h no RCS file
--- ./h/em_pseu.h no RCS file
--- ./h/em_spec.h no RCS file
--- ./lang/basic/src/y.tab.c no RCS file
--- ./lang/basic/src/y.tab.h no RCS file
--- ./lang/pc/pem/pem22.m no RCS file
--- ./lang/pc/pem/pem24.m no RCS file
--- ./lang/pc/pem/pem44.m no RCS file
--- ./lib/LLgen/incl no RCS file
--- ./lib/LLgen/rec no RCS file
--- ./mach/m68k2/cg/tables1.c no RCS file
--- ./mach/m68k2/cg/tables1.h no RCS file
--- ./mach/m68020/ncg/tables1.c no RCS file
--- ./mach/m68020/ncg/tables1.h no RCS file
--- ./mach/vax4/cg/tables1.c no RCS file
--- ./mach/vax4/cg/tables1.h no RCS file
--- ./util/LLgen/src/parser no RCS file
--- ./util/LLgen/src/LLgen.c no RCS file
--- ./util/LLgen/src/Lpars.c no RCS file
--- ./util/LLgen/src/Lpars.h no RCS file
--- ./util/LLgen/src/tokens.c no RCS file
--- ./util/data/em_flag.c no RCS file
--- ./util/data/em_mnem.c no RCS file
--- ./util/data/em_pseu.c no RCS file
--- ./util/ego/share/pop_push.h no RCS file

+ 0 - 1
distr/mks

@@ -1 +0,0 @@
-cp .distr $DESTDIR/$1

+ 0 - 6
doc/ceg/Makefile

@@ -1,6 +0,0 @@
-PIC=pic
-TBL=tbl
-REFER=refer
-
-../ceg.doc:	ceg.tr ceg.ref
-	$(PIC) ceg.tr | $(REFER) -e -p ceg.ref | $(TBL) > $@

+ 0 - 284
doc/ceg/proposal.tr

@@ -1,284 +0,0 @@
-.TL
-
-Code Expander
-.br
-(proposal)
-
-.SH
-Introduction
-.LP
-The \fBcode expander\fR, \fBce\fR, is a program that translates EM-code to
-objectcode. The main goal is to translate very fast. \fBce\fR is an instance
-of the EM_CODE(3L)-interface. During execution of \fBce\fR, \fBce\fR will build
-in core a machine independent objectfile ( NEW A.OUT(5L)). With \fBcv\fR or 
-with routines supplied by the user the machine independent objectcode will
-be converted to a machine dependent object code. \fBce\fR needs 
-information about the targetmachine (e.g. the opcode's). We divide the
-information into two parts:
-.IP
-- The description in assembly instructions of EM-code instructions.
-.IP
-- The description in objectcode of assembly instructions.
-.LP
-With these two tables we can make a \fBcode expander generator\fR which
-generates a \fBce\fR. It is possible to put the information in one table
-but that will probably introduce (propable) more bugs in the table. So we 
-divide and conquer.  With this approach it is also possible to generate 
-assembly code ( rather yhan objectcode), wich is useful for debugging.
-There is of course a link between the two tables, the link 
-consist of a restriction on the assembly format. Every assembly
-instruction must have the following format:
-.sp
-	INSTR ::= LABEL : MNEMONIC  [ OPERAND ( "," OPERAND)* ]
-.sp
-.LP
-\fBCeg\fR uses the following algorithm:
-.IP \0\0a)
-The assembly table will be converted to a (C-)routine assemble().
-assemble() gets as argument a string, the assembler instruction,
-and can use the MNEMONIC to execute the corresponding action in the 
-assembly table.
-.IP \0\0b)
-The routine assemble() can now be used to convert the EM-code table to
-a set of C-routines, wich together form an instance of the
-EM_CODE(3L).
-.SH
-The EM-instruction table
-.LP
-We use the following grammar:
-.sp
-.TS
-center box ;
-l.
-TABLE ::= (ROW)*
-ROW   ::= C_instr ( SPECIAL | SIMPLE)
-SPECIAL ::= ( CONDITION SIMPLE)+  'default'  SIMPLE
-SIMPLE ::= '==>' ACTIONLIST | '::=' ACTIONLIST
-ACTIONLIST ::= [ ACTION ( ';' ACTION)* ] '.'
-ACTION ::= function-call | assembly-instruction
-.TE
-.LP
-An example for the 8086:
-.LP
-.DS
-C_lxl
-	$arg1 == 0  ==>  "push bp".
-	$arg1 == 1  ==>  "push EM_BSIZE(bp)".
-        default     ==>  "mov cx, $arg1";
-		         "mov si, bp";
-		         "1: mov si, EM_BSIZE(si);
-		         "loop 1b"
-		         "push si".
-.DE
-.sp
-Some remarks:
-.sp
-* The C_instr is a function indentifier in the EM_CODE(3L)-interface.
-.LP
-* CONDITION is a "boolean" C-expression. 
-.LP
-* The arguments of an EM-instruction can be used in CONDITION and in assembly
-instructions. They are referred by $arg\fIi\fR. \fBceg\fR modifies the 
-arguments as follows:
-.IP \0\0-
-For local variables at positive offsets it increases this offset by EM_BSIZE
-.IP \0\0-
-It makes names en labels unique. The user must supply the formats (see mach.h).
-.LP
-* function-call is allowed to implement e.g. push/pop optimization.
-For example:
-.LP
-.DS
-C_adi   
-	$arg1 == 2   ==> combine( "pop ax");
-		 	 combine( "pop bx");
-		 	 "add ax, bx";
-                         save( "push ax").
-        default      ==> arg_error( "C_adi", $arg1).
-.DE
-.LP
-* The C-functions called in the EM-instructions table have to use the routine
-assemble()/gen?(). "assembler-instr" is in fact assemble( "assembler-instr").
-.LP
-* \fBceg\fR takes care not only about the conversions of arguments but also 
-about
-changes between segments. There are situation when one doesn't want 
-conversion of arguments. This can be done by using ::= in stead of ==>.
-This is usefull when two C_instr are equivalent. For example:
-.IP
-C_slu  ::=  C_sli( $arg1)
-.LP
-* There are EM-CODE instructions wich are machine independent (e.g. C_open()).
-For these EM_CODE instructions \fBceg\fR will generate \fIdefault\fR-
-instructions. There is one exception: in the case of C_pro() the tablewriter 
-has to supply a function prolog().
-.LP
-* Also the EM-pseudoinstructions C_bss_\fIcstp\fR(), C_hol_\fIcstp\fR(),
-C_con_\fIcstp\fR() and C_rom_\fIcstp\fR can be translated automaticly.
-\fBceg\fR only has to know how to interpretate string-constants: 
-.DS
-\&..icon  $arg2 == 1  ==>  gen1( (char) atoi( $arg1))
-          $arg2 == 2  ==>  gen2( atoi( $arg1))
-          $arg2 == 4  ==>  gen4( atol( $arg1))
-\&..ucon  $arg2 == 1  ==>  gen1( (char) atoi( $arg1))
-	  $arg2 == 2  ==>  gen2( atoi( $arg1))
-    	  $arg2 == 4  ==>  gen4( atol( $arg1))
-\&..fcon  ::=  not_implemented( "..fcon")
-.DE
-.LP
-* Still, life can be made easier for the tablewriter; For the routines wich 
-he/she didn't implement \fBceg\fR will generate a default instruction wich
-generates an error-message. \fBceg\fR seems to generate :
-.IP
-C_xxx  ::=  not_implemented( "C_xxx")
-.SH
-The assembly table
-.LP
-How to map assembly on objectcode.
-.LP
-Each row in the table consists of two fields, one field for the assembly
-instruction, the other field for the corresponding objectcode. The tablewriter
-can use the following primitives to generate code for the machine
-instructions :
-.IP "\0\0gen1( b)\0\0:" 17
-generates one byte in de machine independent objectfile.
-.IP "\0\0gen2( w)\0\0:" 17
-generates one word ( = two bytes), the table writer can change the byte
-order by setting the flag BYTES_REVERSED.
-.IP "\0\0gen4( l)\0\0:" 17
-generates two words ( = four bytes), the table writer can change the word
-order by setting the flag WORDS_REVERSED.
-.IP "\0\0reloc( n, o, r)\0\0:" 17
-generates relocation information for a label ( = name + offset +
-relocationtype).
-.LP
-Besides these primitives the table writer may use his self written
-C-functions. This allows the table writer e.g. to write functions to set
-bitfields within a byte.
-.LP
-There are more or less two methods to encode the assembly instructions:
-.IP \0\0a)
-MNEMONIC and OPERAND('s) are encoded independently of each other. This can be
-done when the target machine has an orthogonal instruction set (e.g. pdp-11).
-.IP \0\0b)
-MNEMONIC and OPERAND('s) together determine the opcode. In this case the
-assembler often uses overloading: one MNEMONIC is used for several
-different machine-instructions. For example : (8086)
-.br
-	mov ax, bx
-.br
-	mov ax, variable
-.br
-These instructions have different opcodes.
-.LP
-As the transformation MNEMONIC-OPCODE is not one to
-one the table writer must be allowed to put restrictions on the operands.
-This can be done with type declarations. For example:
-.LP
-.DS
-	mov  dst:REG, src:MEM  ==>
-		gen1( 0x8b);
-		modRM( op2.reg, op1);
-.DE
-.DS
-	mov  dst:REG, src:REG  ==>
-		gen1( 0x89);
-		modRM( op2.reg, op1);
-.DE
-.LP
-modRM() is a function written by the tablewriter and is used to encode
-the operands. This frees the table writer of endless typing.
-.LP
-The table writer has to do the "typechecking" by himself. But typechecking
-is almost the same as operand decoding. So it's more efficient to do this
-in one function. We now have all the tools to describe the function
-assemble(). 
-.IP
-assemble() first calls the function
-decode_operand() ( by the table writer written), with two arguments: a 
-string ( the operand) and a
-pointer to a struct. The struct is declared by the table writer and must
-consist of at least a field called type. ( the other fields in the struct can
-be used to remember information about the decoded operand.) Now assemble()
-fires a row wich is selected by mapping the MNEMONIC and the type of the 
-operands. 
-.br
-In the second field of a row there may be references to other
-fields in the struct (e.g. op2.reg in the example above).
-.LP
-We ignored one problem. It's possible when the operands are encoded, that
-not everything is known. For example $arg\fIi\fR arguments in the
-EM-instruction table get their value at runtime. This problem is solved by
-introducing a function eval(). eval() has a string as argument and returns
-an arith. The string consists of constants and/or $arg\fIi\fR's and the value
-returned by eval() is the value of the string. To encode the $arg\fIi\fR's
-in as few bytes as possible the table writer can use the statements %if,
-%else and %endif. They can be used in the same manner as #if, #else and
-#endif in C and result in a runtime test. An example : 
-.LP
-.DS
- -- Some rows of the assembly table
- 
- mov dst:REG, src:DATA  ==>
-        %if  sfit( eval( src), 8)   /* does the immediate-data fit in 1 byte? */
- 		R53( 0x16 , op1.reg);
- 	     	gen1( eval( src));
-        %else
- 	      	R53( 0x17 , op1.reg);
- 	      	gen2( eval( src));
-        %endif
-.LD
- 
- mov dst:REG, src:REG  ==>
-        gen1( 0x8b);
-        modRM( op1.reg, op2);
- 
-.DE 
-.DS
- -- The corresponding part in the function assemble() :
- 
- case MNEM_mov : 
- 		decode_operand( arg1, &op1);
- 		decode_operand( arg2, &op2);
- 		if ( REG( op1.type) && DATA( op2.type)) {
- 			printf( "if ( sfit( %s, 8)) {\\\\n", eval( src));
- 			R53( 0x16 , op1.reg);
- 			printf( "gen1( %s)\\\\n", eval( arg2));
- 			printf( "}\\\\nelse {\\\\n");
- 			R53( 0x17 , op1.reg);
- 			printf( "gen2( %s)\\\\n", eval( arg2));
- 			printf( "}\\\\n");
- 		}
- 		else if ( REG( op1.type) && REG( op2.type)) {
- 			gen1( 0x8b);
- 			modRM( op1.reg, op2);
- 		}
- 
- 
-.DE
-.DS
- -- Some rows of the right part of the EM-instruction table are translated
- -- in the following C-functions.
-
- "mov ax, $arg1" ==>
- 	if ( sfit( w, 8)) {	/* w is the actual argument of C_xxx( w) */
- 		gen1( 176);	/* R53() */
- 		gen1( w);
- 	}
- 	else {
- 		gen1( 184);
- 		gen2( w);
- 	}
-.LD 
-
- "mov ax, bx"    ==> 
- 	gen1( 138);
-  	gen1( 99);		/* modRM() */
-.DE
-.SH
-Restrictions
-.LP
-.IP \0\01)
-The EM-instructions  C_exc() is not implemented.
-.IP \0\03)
-All messages are ignored.

+ 0 - 276
doc/ceg/prototype.tr

@@ -1,276 +0,0 @@
-.TL 
-A prototype Code expander
-.NH
-Introduction
-.PP
-A program to be compiled with ACK is first fed into the preprocessor.
-The output of the preprocessor goes into the appropiate front end,
-whose job it is to produce EM. The EM code generated is
-fed into the peephole optimizer, wich scans it with a window of few 
-instructions, replacing certain inefficient code sequences by better
-ones. Following the peephole optimizer follows a backend wich produces
-good assembly code. The assembly code goes into the assembler and the objectcode
-then goes into the loader/linker, the final component in the pipeline.
-.PP
-For various applications this scheme is too slow. For example for testing
-programs; In this case the program has to be translated fast and the 
-runtime of the objectcode may be slower. A solution is to build a code
-expander ( \fBce\fR) wich translates EM code to objectcode. Of course this 
-has to
-be done automaticly by a code expander generator, but to get some feeling
-for the problem we started out to build prototypes. 
-We built two types of ce's. One wich tranlated EM to assembly, one
-wich translated EM to objectcode.
-.NH
-EM to assembly
-.PP
-We made one for the 8086 and one for the vax4. These ce's are instances of the
-EM_CODE(3L)-interface and produce for a single EM instruction a set 
-of assembly instruction wich are semantic equivalent.
-We implemented in the 8086-ce push/pop-optimalization.
-.NH
-EM to objectcode
-.PP
-Instead of producing assembly code we tried to produce vax4-objectcode.
-During execution of ce, ce builds in core a machine independent
-objectfile ( NEW A.OUT(5L)) and just before dumping the tables this
-objectfile is converted to a Berkly 4.2BSD a.out-file. We build two versions;
-One with static memory allocation and one with dynamic memory allocation.
-If the first one runs out of memory it will give an error message and stop,
-the second one will allocate more memory and proceed with producing 
-objectcode.
-.PP
-The C-frontend calls the EM_CODE-interface. So after linking the frontend
-and the ce we have a pipeline in a program saving a lot of i/o.
-It is interesting to compare this C-compiler ( called fcemcom) with "cc -c". 
-fcemcom1 (the dynamic variant of fcemcom) is tuned in such a way, that
-alloc() won't be called.
-.NH 2
-Compile time
-.PP
-fac.c is a small program that produces n! ( see below). foo.c is small program
-that loops a lot.
-.TS
-center, box, tab(:);
-c | c | c | c | c | c
-c | c | n | n | n | n.
-compiler : program : real : user : sys : object size
-=
-fcemcom : sort.c : 31.0 : 17.5 : 1.8 : 23824
-fcemcom1 : : 59.0 : 21.2 : 3.3 : 
-cc -c : : 50.0 : 38.0 : 3.5 : 6788
-_
-fcemcom : ed.c : 37.0 : 23.6 : 2.3 : 41744
-fcemcom1 : : 1.16.0 : 28.3 : 4.6 : 
-cc -c : : 1.19.0 : 54.8 : 4.3 : 11108
-_
-fcemcom : cp.c :  4.0 : 2.4 : 0.8 : 4652
-fcemcom1 : : 9.0 : 3.0 : 1.0 : 
-cc -c : :  8.0 : 5.2 : 1.6 : 1048
-_
-fcemcom : uniq.c : 5.0 : 2.5 : 0.8 : 5568
-fcemcom1 : : 9.0 : 2.9 : 0.8 : 
-cc -c : : 13.0 : 5.4 : 2.0 : 3008
-_
-fcemcom : btlgrep.c : 24.0 : 7.2 : 1.4 : 12968
-fcemcom1 : : 23.0 : 8.1 : 1.2 : 
-cc -c : : 1.20.0 : 15.3 : 3.8 : 2392
-_
-fcemcom : fac.c : 1.0 : 0.1 : 0.5 : 216
-fecmcom1 : : 2.0 : 0.2 : 0.5 : 
-cc -c : : 3.0 : 0.7 : 1.3 : 92
-_
-fcemcom : foo.c : 4.0 : 0.2 : 0.5 : 272
-fcemcom1 : : 11.0 : 0.3 : 0.5 : 
-cc -c : : 7.0 : 0.8 : 1.6 : 108
-.TE
-.NH 2
-Run time
-.LP
-Is the runtime very bad?
-.TS
-tab(:), box, center;
-c | c | c | c | c
-c | c | n | n | n.
-compiler : program : real : user : system
-=
-fcem : sort.c : 22.0 : 17.5 : 1.5
-cc : : 5.0 : 2.4 : 1.1
-_
-fcem : btlgrep.c : 1.58.0 : 27.2 : 4.2
-cc : : 12.0 : 3.6 : 1.1
-_
-fcem : foo.c : 1.0 : 0.7 : 0.1
-cc : : 1.0 : 0.4 : 0.1
-_
-fcem : uniq.c : 2.0 : 0.5 : 0.3
-cc : : 1.0 : 0.1 : 0.2
-.TE
-.NH 2
-quality object code
-.LP
-The runtime is very bad so its interesting to have look at the code which is
-produced by fcemcom and by cc -c. I took a program which computes recursively
-n!.
-.DS
-long fac();
-
-main()
-{
-	int n;
-
-	scanf( "%D", &n); 
-	printf( "fac is %D\\\\n", fac( n));
-}
-
-long fac( n)
-int n;
-{
-	if ( n == 0)
-		return( 1);
-	else
-		return( n * fac( n-1));
-}
-.DE
-.br
-.br
-.br
-.br
-.LP
-"cc -c fac.c" produces :
-.DS 
-fac:	tstl 4(ap)
-	bnequ 7f
-	movl $1, r0
-	ret
-7f:	subl3 $1, 4(ap), r0
-	pushl r0
-	call $1, fac
-	movl r0, -4(fp)
-	mull3 -4(fp), 4(ap), r0
-	ret
-.DE
-.br
-.br
-.LP
-"fcem fac.c fac.o" produces :
-.DS 
-_fac:		0
-42:		jmp	be
-48:		pushl	4(ap)
-4e:		pushl	$0
-54:		subl2	(sp)+,(sp)
-57:		tstl	(sp)+
-59:		bnequ	61
-5b:		jmp	67
-61:		jmp	79
-67:		pushl	$1
-6d:		jmp	ba
-73:		jmp	b9
-79:		pushl	4(ap)
-7f:		pushl	$1
-85:		subl2	(sp)+,(sp)
-88:		calls	$0,_fac
-8f:		addl2	$4,sp
-96:		pushl	r0
-98:		pushl	4(ap)
-9e:		pushl	$4
-a4:		pushl	$4
-aa:		jsb	.cii
-b0:		mull2	(sp)+,(sp)
-b3:		jmp	ba
-b9:		ret
-ba:		movl	(sp)+,r0
-bd:		ret
-be:		jmp	48
-.DE
-.NH 1
-Conclusions
-.PP
-comparing "cc -c" with "fcemcom"
-.LP
-.TS
-center, box, tab(:);
-c | c  s | c | c  s
-^ | c  s | ^ | c  s
-^ | c | c | ^ | c | c
-l | n | n | n | n | n.
-program : compile time : object size : runtime
-:_::_
-: user : sys :: user : sys
-=
-sort.c : 0.47 : 0.5 : 3.5 : 7.3 : 1.4
-_
-ed.c : 0.46 : 0.5 : 3.8 : : :
-_
-cp.c : 0.46 : 0.5 : 4.4 : : :
-_
-uniq.c : 0.46 : 0.4 : 1.8 : : :
-_
-btlgrep.c : 0.47 : 0.3 : 5.4 : 7.5 : 3.8
-_
-fac.c : 0.14 : 0.4 : 2.3 : 1.8 : 1.0
-_
-foo.c : 0.25 : 0.3 : 2.5 : 5.0 : 1.5
-.TE
-.PP
-The results for fcemcom1 are almost identical; The only thing that changes
-is that fcemcom1 is 1.2 slower than fcemcom. ( compile time) This is due to
-to an another datastructure . In the static version we use huge array's for 
-the text- and 
-data-segment, the relocation information, the symboltable and stringarea.
-In the dynamic version we use linked lists, wich makes it expensive to get
-and to put a byte on a abritrary memory location. So it is probably better
-to use realloc(), because in the most cases there will be enough memory. 
-.PP
-The quality of the objectcode is very bad. The reason is that the frontend
-generates bad code and expects the peephole-optimizer to improve the code.
-This is also one of the main reasons that the runtime is very bad.
-(e.g. the expensive "cii" with arguments 4 and 4 could be deleted.) 
-So its seems a good
-idea to put a new peephole-optimizer between the frontend and the ce.
-.PP
-Using the peephole optimizer the ce would produce :
-.DS
-_fac:	0
-	pushl	4(ap)
-	tstl	(sp)+
-	beqlu	1f
-	jmp	3f
- 1 :	pushl	$1
-	jmp	2f
- 3 :	pushl	4(ap)
-	decl	(sp)
-	calls	$0,_fac
-	addl2	$4,sp
-	pushl	r0
-	pushl	4(ap)
-	mull2	(sp)+,(sp)
-	movl	(sp)+,r0
-  2 :   ret
-.DE
-.PP
-Bruce McKenzy already implemented it and made some improvements in the
-source code of the ce. The compile-time is two to two and a half times better 
-and the
-size of the objectcode is two to three times bigger.(comparing with "cc -c")
-Still we could do better.
-.PP
-Using peephole- and push/pop-optimization ce could produce :
-.DS 
-_fac:		0
-	tstl	4(ap)
-	beqlu	1f
-	jmp	2f
-  1 :	pushl	$1
-	jmp	3f
-  2 :	decl	4(ap)
-	calls	$0,_fac
-	addl2	$4,sp
-	mull3	4(ap), r0, -(sp)
-	movl 	(sp)+, r0
-  3 : 	ret
-.DE
-.PP
-prof doesn't cooperate, so no profile information.
-.PP

+ 0 - 323
doc/cref.doc

@@ -1,323 +0,0 @@
-.\" $Header$
-.nr ID 4
-.de hd
-'sp 2
-'tl ''-%-''
-'sp 3
-..
-.de fo
-'bp
-..
-.tr ~
-.               TITLE
-.de TL
-.sp 15
-.ce
-\\fB\\$1\\fR
-..
-.               AUTHOR
-.de AU
-.sp 15
-.ce
-by
-.sp 2
-.ce
-\\$1
-..
-.               DATE
-.de DA
-.sp 3
-.ce
-( Dated \\$1 )
-..
-.               INSTITUTE
-.de VU
-.sp 3
-.ce 4
-Wiskundig Seminarium
-Vrije Universteit
-De Boelelaan 1081
-Amsterdam
-..
-.               PARAGRAPH
-.de PP
-.sp
-.ti +\n(ID
-..
-.nr CH 0 1
-.               CHAPTER
-.de CH
-.nr SH 0 1
-.bp
-.in 0
-\\fB\\n+(CH.~\\$1\\fR
-.PP
-..
-.               SUBCHAPTER
-.de SH
-.sp 3
-.in 0
-\\fB\\n(CH.\\n+(SH.~\\$1\\fR
-.PP
-..
-.               INDENT START
-.de IS
-.sp
-.in +\n(ID
-..
-.               INDENT END
-.de IE
-.in -\n(ID
-.sp
-..
-.de PT
-.ti -\n(ID
-.ta \n(ID
-.fc " @
-"\\$1@"\c
-.fc
-..
-.               DOUBLE INDENT START
-.de DS
-.sp
-.in +\n(ID
-.ll -\n(ID
-..
-.               DOUBLE INDENT END
-.de DE
-.ll +\n(ID
-.in -\n(ID
-.sp
-..
-.               EQUATION START
-.de EQ
-.sp
-.nf
-..
-.               EQUATION END
-.de EN
-.fi
-.sp
-..
-.               ITEM
-.de IT
-.sp
-.in 0
-\\fB~\\$1\\fR
-.ti +5
-..
-.de CS
-.br
-~-~\\
-..
-.br
-.fi
-.TL "Ack-C reference manual"
-.AU "Ed Keizer"
-.DA "September 12, 1983"
-.VU
-.wh 0 hd
-.wh 60 fo
-.CH "Introduction"
-The C frontend included in the Amsterdam Compiler Kit
-translates UNIX-V7 C into compact EM code [1].
-The language accepted is described in [2] and [3].
-This document describes which implementation dependent choices were
-made in the Ack-C frontend and
-some restrictions and additions.
-.CH "The language"
-.PP
-Under the same heading as used in [2] we describe the
-properties of the Ack-C frontend.
-.IT "2.2 Identifiers"
-External identifiers are unique up to 7 characters and allow
-both upper and lower case.
-.IT "2.3 Keywords"
-The word \fBvoid\fP is also reserved as a keyword.
-.IT "2.4.3 Character constants"
-The ASCII-mapping is used when a character is converted to an
-integer.
-.IT "2.4.4 Floating constants"
-To prevent loss of precision the compiler does not perform
-floating point constant folding.
-.IT "2.6 Hardware characteristics"
-The size of objects of the several arithmetic types and 
-pointers depend on the EM-implementation used.
-The ranges of the arithmetic types depend on the size used,
-the C-frontend assumes two's complement representation for the
-integral types.
-All sizes are multiples of bytes.
-The calling program \fIack\fP[4] passes information about the
-size of the types to the compiler proper.
-.br
-However, a few general remarks must be made:
-.sp 1
-.IS
-.PT (a)
-The size of pointers is a multiple of
-(or equal to) the size of an \fIint\fP.
-.PT (b)
-The following relations exist for the sizes of the types
-mentioned:
-.br
-.ti +5
-\fIchar<=short<=int<=long\fP
-.PT (c)
-Objects of type \fIchar\fP use one 8-bit byte of storage,
-although several bytes are allocated sometimes.
-.PT (d)
-All sizes are in multiples of bytes.
-.PT (e)
-Most EM implementations use 4 bytes for floats and 8 bytes
-for doubles, but exceptions to this rule occur.
-.IE
-.IT "4 What's in a name"
-The type \fIvoid\fP is added.
-Objects of type void do not exist.
-Functions declared as returning void, do not return a value at all.
-.IT "6.1 Characters and integers"
-Objects of type \fIchar\fP are unsigned and do not cause
-sign-extension when converted to \fIint\fP.
-The range of characters values is from 0 to 255.
-.IT "6.3 Floating and integral"
-Floating point numbers are truncated towards zero when
-converted to the integral types.
-.IT "6.4 Pointers and integers"
-When a \fIlong\fP is added to or subtracted from a pointer and
-longs are larger then pointers the \fIlong\fP is converted to an
-\fIint\fP before the operation is performed.
-.IT "7.2 Unary operators"
-It is allowed to cast any expression to the type \fIvoid\fP.
-.IT "8.2 Type specifiers"
-One type is added to the type-specifiers:
-.br
-.IS
-void
-.IE
-.IT "8.5 Structure and union declarations"
-The only type allowed for fields is \fIint\fP.
-Fields with exactly the size of \fIint\fP are signed,
-all other fields are unsigned.
-.br
-The size of any single structure must be less then 4096 bytes.
-.IT "8.6 Initialization"
-Initialization of structures containing bit fields is not
-allowed.
-There is one restriction when using an 'address expression' to initialize
-an integral variable.
-The integral variable must have the same size as a pointer.
-Conversions altering the size of the address expression are not allowed.
-.IT "9.10 Return statement"
-Return statements of the form:
-.IS
-	return ;
-.IE
-are the only form of return statement allowed in a function of type
-function returning void.
-.IT "10.1 External function definitions"
-The total amount for storage used for parameters
-in any function must be less then 4096 bytes.
-The same holds for the total amount of storage occupied by the
-automatic variables declared inside any function.
-.sp
-Using formal parameters whose size is smaller the the size of an int
-is less efficient on several machines.
-At procedure entry these parameters are converted from integer to the
-declared type, because the compiler doesn't know where the least
-significant bytes are stored in the int.
-.IT "11.2 Scope of externals"
-Most C compilers are rather lax in enforcing the restriction
-that only one external definition without the keyword
-\fIextern\fP is allowed in a program.
-The Ack-C frontend is very strict in this.
-The only exception is that declarations of arrays with a
-missing first array bounds expression are regarded to have an
-explicit keyword \fIextern\fP.
-.IT "14.4 Explicit pointer conversions"
-Pointers may be larger the ints, thus assigning a pointer to an
-int and back will not always result in the same pointer.
-The process mentioned above works with integrals
-of the same size or larger as pointers in all EM implementations
-having such integrals.
-When converting pointers to an integral type or vice-versa,
-the pointers is seen as an unsigned int.
-.br
-EM guarantees that any object can be placed at a word boundary,
-this allows the C-programs to use \fIint\fP pointers
-as pointers to objects of any type not smaller than an \fIint\fP.
-.CH "Frontend options"
-The C-frontend has a few options, these are controlled
-by flags:
-.IS
-.PT -V
-This flag is followed by a sequence of letters each followed by
-positive integers. Each letter indicates a
-certain type, the integer following it specifies the size of
-objects of that type. One letter indicates the wordsize used.
-.IS
-.sp 1
-.TS
-center tab(:);
-l l16 l l.
-letter:type:letter:type
-
-w:wordsize:i:int
-s:short:l:long
-f:float:d:double
-p:pointer::
-.TE
-.sp 1
-All existing implementations use an integer size equal to the
-wordsize.
-.IE
-The calling program \fIack\fP[4] provides the frontend with
-this flag, with values depending on the machine used.
-.sp 1
-.PT -l
-The frontend normally generates code to keep track of the line
-number and source file name at runtime for debugging purposes.
-Currently a pointer to a
-string containing the filename is stored at a fixed place in
-memory at each function
-entry and the line number at the start of every expression.
-At the return from a function these memory locations are not reset to
-the values they had before the call.
-Most library routines do not use this feature and thus do not
-ruin the current line number and filename when called.
-However, you are really unlucky when your program crashes due
-to a bug in such a library function, because the line number
-and filename do not indicate that something went wrong inside
-the library function.
-.br
-Providing the flag -l to the frontend tells it not to generate
-the code updating line number and file name.
-This is, for example, used when translating the stdio library.
-.br
-When the \fIack\fP[4] is called with the -L flag it provides
-the frontend with this flag.
-.sp 1
-.PT -Xp
-When this flag is present the frontend generates a call to
-the function \fBprocentry\fP at each function entry and a
-call to \fBprocexit\fP at each function exit.
-Both functions are provided with one parameter,
-a pointer to a string containing the function name.
-.br
-When \fIack\fP is called with the -p flag it provides the
-frontend with this flag.
-.IE
-.CH References
-.IS
-.PT [1]
-A.S. Tanenbaum, Hans van Staveren, Ed Keizer and Johan
-Stevenson \fIDescription of a machine architecture for use with
-block structured languages\fP Informatica report IR-81.
-.sp 1
-.PT [2]
-B.W. Kernighan and D.M. Ritchie, \fIThe C Programming
-language\fP, Prentice-Hall, 1978
-.PT [3]
-D.M. Ritchie, \fIC Reference Manual\fP
-.sp
-.PT [4]
-UNIX manual ack(I).

+ 0 - 55
doc/ego/Makefile

@@ -1,55 +0,0 @@
-REFS=-p refs.opt -p refs.stat -p refs.gen
-INTRO=intro/intro?
-OV=ov/ov?
-IC=ic/ic?
-CF=cf/cf?
-IL=il/il?
-SR=sr/sr?
-CS=cs/cs?
-SP=sp/sp?
-UD=ud/ud?
-LV=lv/lv?
-CJ=cj/cj?
-BO=bo/bo?
-RA=ra/ra?
-CA=ca/ca?
-EGO=$(INTRO) $(OV) $(IC) $(CF) $(IL) $(SR) $(CS) $(SP) $(CJ) $(BO) \
-    $(UD) $(LV) $(RA) $(CA)
-REFER=refer
-TROFF=troff
-TBL=tbl
-TARGET=-Tlp
-
-../ego.doc:	refs.opt refs.stat refs.gen intro/head intro/tail $(EGO)
-	 $(REFER) -sA+T -l4,2 $(REFS) intro/head $(EGO) intro/tail | $(TBL) > ../ego.doc
-
-ego.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(EGO)
-	 $(REFER)  -sA+T -l4,2 $(REFS) intro/head $(EGO) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > ego.f
-intro.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(INTRO)
-	 $(REFER)  -sA+T -l4,2 $(REFS) intro/head $(INTRO) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > intro.f
-ov.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(OV)
-	 $(REFER)  -sA+T -l4,2 $(REFS) intro/head $(OV) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > ov.f
-ic.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(IC)
-	 $(REFER)  -sA+T -l4,2 $(REFS) intro/head $(IC) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > ic.f
-cf.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(CF)
-	 $(REFER)  -sA+T -l4,2 $(REFS) intro/head $(CF) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > cf.f
-il.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(IL)
-	 $(REFER)  -sA+T -l4,2 $(REFS) intro/head $(IL) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > il.f
-sr.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(SR)
-	 $(REFER)  -sA+T -l4,2 $(REFS) intro/head $(SR) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > sr.f
-cs.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(CS)
-	 $(REFER)	-sA+T -l4,2 $(REFS) intro/head $(CS) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > cs.f
-sp.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(SP)
-	 $(REFER)  -sA+T -l4,2 $(REFS) intro/head $(SP) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > sp.f
-cj.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(CJ)
-	 $(REFER)  -sA+T -l4,2 $(REFS) intro/head $(CJ) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > cj.f
-bo.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(BO)
-	 $(REFER)  -sA+T -l4,2 $(REFS) intro/head $(BO) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > bo.f
-ud.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(UD)
-	 $(REFER)  -sA+T -l4,2 $(REFS) intro/head $(UD) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > ud.f
-lv.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(LV)
-	 $(REFER)  -sA+T -l4,2 $(REFS) intro/head $(LV) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > lv.f
-ra.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(RA)
-	 $(REFER)  -sA+T -l4,2 $(REFS) intro/head $(RA) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > ra.f
-ca.f:	refs.opt refs.stat refs.gen intro/head intro/tail $(CA)
-	 $(REFER)  -sA+T -l4,2 $(REFS) intro/head $(CA) intro/tail | $(TBL) | $(TROFF) $(TARGET) -ms > ca.f

+ 0 - 37
doc/em/Makefile

@@ -1,37 +0,0 @@
-HOME=../..
-
-TBL=tbl
-NROFF=nroff
-SUF=pr
-TARGET=-Tlp
-
-head:   ../em.$(SUF)
-
-FILES = macr.nr title.nr intro.nr mem.nr ispace.nr dspace.nr mapping.nr \
-	types.nr descr.nr env.nr traps.nr mach.nr assem.nr \
-	app.int.nr app.codes.nr app.exam.nr cont.nr
-
-IOP=$(HOME)/etc/ip_spec.t#			# to construct itables from
-
-../em.$(SUF):	$(FILES) itables dispatdummy em.i Makefile
-		$(TBL) $(FILES) | $(NROFF) -mkun $(TARGET) > ../em.$(SUF)
-
-app.codes.pr: app.codes.nr itables dispatdummy
-
-itables: $(IOP) ip.awk
-	awk -f ip.awk $(IOP) | sed 's/-/\\-/g' | $(TBL) >itables
-
-dispatdummy:	$(IOP) mkdispatch
-	mkdispatch < $(IOP) > dispatdummy
-	sed -f dispat1.sed < dispatdummy | $(TBL) > dispat1
-	sed -f dispat2.sed < dispatdummy | $(TBL) > dispat2
-	sed -f dispat3.sed < dispatdummy | $(TBL) > dispat3
-
-mkdispatch:	mkdispatch.c
-	$(CC) -I$(HOME)/h -o mkdispatch mkdispatch.c $(HOME)/lib.bin/em_data.a
-
-.SUFFIXES : .pr .nr
-.nr.pr: ; $(TBL) macr.nr $*.nr | $(NROFF) -mkun >$@
-
-clean:
-	rm -f *.pr itables *.out dispatdummy dispat? *.o mkdispatch

+ 0 - 1122
doc/em/addend.n

@@ -1,1122 +0,0 @@
-.lg 0
-.ta 8 16 24 32 40 48 56 64 72 80
-.hw iden-ti-fi-er
-.nr a 0 1
-.nr f 1 1
-.de x1
-'sp 2
-'tl '''%'
-'sp 2
-.ns
-..
-.wh 0 x1
-.de fo
-'bp
-..
-.wh 60 fo
-.ll 79
-.lt 79
-.de HT
-.ti -4
-..
-.de PP
-.sp
-.ne 2
-.ti +5
-..
-.de SE
-.bp
-\fB\\n+a. \\$1\fR
-.nr b 0 1
-..
-.de SB
-.br
-.ne 10
-.sp 5
-\fB\\na.\\n+b. \\$1\fR
-..
-.de DC
-.ti -14
-DECISION~\\$1:
-..
-.de IN
-.in +6
-..
-.de OU
-.in -6
-..
-.tr ~
-.sp 5
-.rs
-.sp 10
-.ce 3
-Changes in EM-1
-
-Addendum to Informatica Rapport IR-54
-.sp 5
-.PP
-This document describes a revision of EM-1.
-A list of differences is presented roughly in the order IR-54
-describes the original architecture.
-A complete list of EM-1 pseudo's and instructions is also included.
-.SE Introduction
-.PP
-EM is a family of intermediate languages, resembling assembly
-language for a stack machine.
-EM defines the layout of data memory and a partitioning
-of instruction memory.
-EM has can do operations on five basic types:
-pointers, signed integers, unsigned integers, floating point numbers
-and sets of bits.
-The size of pointers is fixed in each member,
-in contrast to the sizes of the other types.
-Each member has one more fixed size: the word size.
-This is the mimimum size of any object on the stack.
-The sizes of all objects on the stack are assumed to
-multiples of the word size.
-We assume that pointer and word-sizes are both powers of two.
-.PP
-It is possible to load objects smaller then the word size from memory.
-These objects are converted to objects of the word size by
-clearing the most significant bytes.
-(A separate conversion instruction can do sign extension).
-While storing objects smaller then the word size are stored in memory,
-the most significant bytes are ignored.
-The size of such objects has to be a divisor of the word size.
-.PP
-Put in other terms, instructions such as LOC, LOL, LOE, STF, etc.
-manipulate WORDS.  Up until now, a word was defined as 16 bits.
-It is now possible to define a word size other than 16 bits.  For
-example, MES 2,1,2 defines a word to be 8 bits and a pointer to be
-16 bits.  As another example, MES 2,4,4 defines a word to be 32 bits
-and a pointer to be 32 bits.
-.PP
-If a compiler receives flags telling it to use 32 bit integers, it now
-has a choice of setting the word length to 16 bits and using LDL etc
-for dealing with integers, or setting the word length to 32 bits and using
-LOL etc for integers.
-For example, x:=a+b for 32-bit integers would become:
-
-  MES 2,2,4                          MES 2,4,4
-  LDL a                              LOL a
-  LDL b                              LOL b
-  ADI 4                              ADI 4
-  SDL x                              STL x
-
-In many cases, the target machine code that is finally produced from either
-of the above sequences will not show any traces of the stack machine, however
-for some instructions actual pushes and pops at run time will be necessary.
-Choosing a wider EM word will usually produce fewer stack operations than
-a narrower word, but it eliminates the possibility of doing arithmetic on
-quantities smaller than a word.  If, for example, a compiler chooses a 32-bit
-EM word, it will be difficult to add two 16 bit integers with ADI, since
-the argument must be multiple of the word size.
-(The operation can be done by converting the operands to 32 bits using CII,
-adding the 32-bit numbers, and reconverting the result.)
-On the other hand, choosing a 16-bit EM word makes it possible to do both
-16-bit adds (ADI 2) and 32-bit adds (ADI 4), 
-but the price paid is that 32-bit operations will be viewed as double
-precision, and may be slightly less efficient on target machines with a
-32-bit word, i.e. the EM to target translator may not take full advantage
-of the 32 bit facilities.
-.PP
-Note that since LOC pushes a WORD on the stack, the argument of LOC
-must fit ina word.  LOC 256 on an EM machine with a 1-byte word length
-is not allowed.  LDC 256 is allowed, however.
-.PP
-A general rule of thumb is that the compiler should choose an EM word
-length equal to the width of a single precision integer.
-Obviously, compilers should be well parameterized to allow the integer
-size(s) and word size(s) to be changed by just changing a few constants.
-.PP
-The size of a instruction space pointer in is the same
-as the size of a data space pointer.
-.PP
-EM assumes two's complement arithmetic on signed integers,
-but does not define an ordering of the bytes in a integer.
-The lowest numbered byte of a two-byte object can contain
-either the most or the least significant part.
-.SE Memory
-.PP
-EM has two separate addressing spaces, instruction and data.
-The sizes of these spaces are not specified.
-The layout of instruction space in not defined.
-Any interpreter or translator may assume a layout fitting his/her needs.
-The layout of data memory is specified by EM.
-EM data memory consists of a sequence of 8-bit bytes each separately
-addressable.
-Certain alignment restrictions exist for object consisting of multiple bytes.
-Objects smaller then the word size can only be addressed
-at multiples of the object size.
-For example: in a member with a four-byte word size, two-byte integers
-can only be accessed from even addresses.
-Objects larger then the word size can only be placed at multiples
-of the word size.
-For example: in a member with a four-byte word size,
-eight-byte floating point numbers can be fetched at addresses
-0, 4, 8, 12, etc.
-.SB "Procedure identifiers"
-.PP
-Procedure identifiers in EM have the same size
-as pointers.
-Any implementation of EM is free to use any method of identifying procedures.
-Common methods are indices into tables containing further information
-and addresses of the first instructions of procedures.
-.SB "Heap and Stack in global data"
-.PP
-The stack grows downward, the heap grows upward.
-The stack pointer points to the lowest occupied word on the stack.
-The heap pointer marks the first free word in the heap area.
-.br
-.ne 39
-.sp 1
-.nf
-       65534 -> |-------------------------------|
-                |///////////////////////////////|
-		|//// unimplemented memory /////|
-                |///////////////////////////////|
-          SB -> |-------------------------------|
-		|				|
-		|     stack and local area      | <- LB
-                |                               |
-		|				|
-                |-------------------------------| <- SP
-		|///////////////////////////////|
-		|// implementation dependent  //|
-		|///////////////////////////////|
-                |-------------------------------| <- HP
-		|				|
-		|           heap area           |
-		|				|
-		|                               |
-                |-------------------------------|
-		|				|
-		|          global area          |
-		|				|
-          EB -> |-------------------------------|
-		|				|
-		|				|
-                |         program text          | <- PC
-		|				|
-		|				|
-          PB -> |-------------------------------|
-		|///////////////////////////////|
-		|////////// undefined //////////|
-		|///////////////////////////////|
-           0 -> |-------------------------------|
-
-	   Fig. \nf.  Example of memory layout showing typical register
-           positions during execution of an EM program.
-.fi
-.SB "Data addresses as arguments"
-.PP
-Anywhere previous versions of the EM assembly language
-allowed identifiers of objects in
-data space,
-it is also possible to use 'identifier+constant' or 'identifier-constant'.
-For example, both "CON LABEL+4" and "LAE SAVED+3" are allowed.
-More complicated expressions are illegal.
-.SB "Local data area"
-.PP
-The mark block has been banished.
-When calling a procedure,
-the calling routine first has to push the actual parameters.
-All language implementations currently push their arguments
-in reverse order, to be compatible with C.
-Then the procedure is called using a CAL or CAI instruction.
-Either the call or the procedure prolog somehow has to save
-the return address and dynamic link.
-The prolog allocates the space needed for locals and is free to
-surround this space with saved registers and other information it
-deems necessary.
-.PP
-The locals are now accessed using negative offsets in LOL, LDL, SDL, LAL,
-LIL, SIL and STL instructions.
-The parameters are accessed using positive offsets in LOL, LDL, SDL, LAL,
-LIL, STL and
-STL instructions.
-The prolog might have stored information in the area between parameters and
-locals.
-As a consequence there are two bases, AB(virtual) and LB.
-AB stands for Argument Base and LB stands for Local Base.
-Positive arguments to LOL etc ... are interpreted as offsets from AB,
-negative arguments as offsets from LB.
-.PP
-The BEG instruction is not needed to allocate the locals because
-storage for locals is set aside in the prolog.
-The instruction still exists under the name ASP (Adjust Stack Pointer).
-.PP
-Procedures return using the RET instruction.
-The RET pops the function result from the stack and
-brings the stack pointer and other relevant registers to the state
-they had just before the procedure was called.
-The RET instruction expects that - aside from possible function results -
-the stack pointer has the value it had after execution of the prolog.
-RET finally returns control to the calling routine.
-The actual parameters have to be removed from the stack by the calling routine,
-and not by the called procedure.
-.sp 1
-.ne 38
-.nf
-
-
-
-		|===============================|
-                |     actual argument  n        |
-		|-------------------------------|
-                |              .                |
-                |              .                |
-                |              .                |
-		|-------------------------------|
-                |     actual argument  1        | ( <- AB )
-		|===============================|
-		|///////////////////////////////|
-		|// implementation dependent  //|
-		|///////////////////////////////|   <- LB
-                |===============================|
-                |                               |
-                |       local variables         |
-                |                               |
-		|-------------------------------|
-                |                               |
-                |      compiler temporaries     |
-                |                               |
-		|===============================|
-		|///////////////////////////////|
-		|// implementation dependent  //|
-		|///////////////////////////////|
-                |===============================|
-                |                               |
-                |   dynamic local generators    |
-                |                               |
-		|===============================|
-                |           operand             |
-		|-------------------------------|
-                |           operand             | <- SP
-		|===============================|
-
-                A sample procedure frame.
-
-.fi
-.sp 1
-This scheme allows procedures to be called with a variable number
-of parameters.
-The parameters have to be pushed in reverse order,
-because the called procedure has to be able to locate the first one.
-.PP
-.PP
-Since the mark block has disappeared, a new mechanism for static
-links had to be created.
-All compilers use the convention that EM procedures needing
-a static link will find a link in their zero'th parameter,
-i.e. the last one pushed on the stack.
-This parameter should be invisible to users of the compiler.
-The link needs to be in a fixed place because the lexical instructions
-have to locate it.
-The LEX instruction is replaced by two instructions: LXL and LXA.
-\&"LXL~n" finds the LB of a procedure n static levels removed.
-\&"LXA~n" finds the (virtual) AB.
-The value used for static link is LB.
-.PP
-When a procedure needing a static link is called, first the actual
-parameters are pushed, then the static link is pushed using LXL
-and finally the procedure is called with a CAL with the procedure's
-name as argument.
-.br
-.ne 40
-.nf
-
-
-
-		|===============================|
-                |     actual argument  n        |
-		|-------------------------------|
-                |              .                |
-                |              .                |
-                |              .                |
-		|-------------------------------|
-                |     actual argument  1        |
-		|-------------------------------|
-                |        static link            | ( <- AB )
-		|===============================|
-		|///////////////////////////////|
-		|// implementation dependent  //|
-		|///////////////////////////////|   <- LB
-                |===============================|
-                |                               |
-                |       local variables         |
-                |                               |
-		|-------------------------------|
-                |                               |
-                |      compiler temporaries     |
-                |                               |
-		|===============================|
-		|///////////////////////////////|
-		|// implementation dependent  //|
-		|///////////////////////////////|
-                |===============================|
-                |                               |
-                |   dynamic local generators    |
-                |                               |
-		|===============================|
-                |           operand             |
-		|-------------------------------|
-                |           operand             | <- SP
-		|===============================|
-
-                A procedure frame with static link.
-
-.fi
-.sp 1
-.sp 1
-.PP
-Pascal and other languages have to use procedure
-instance identifiers containing
-the procedure identifier
-'ul
-and
-the static link the procedure has to be called with.
-A static link having a value of zero signals
-that the called procedure does not need a static link.
-C uses the same convention for pointers to C-routines.
-In pointers to C-routines the static link is set to zero.
-.PP
-Note: The distance from LB to AB must be known for each procedure, otherwise
-LXA can not be implemented.
-Most implementations will have a fixed size area between
-the parameter and local storage.
-The zone between the compiler temporaries and the dynamic
-local generators can be used
-to save a variable number of registers.
-.PP
-.ne 11
-Prolog examples:
-.sp 2
-.nf
-
-	       proc1                       proc2
-	   
-	   mov lb,-(sp)                mov lb,-(sp)
-	   mov sp,lb                   mov sp,lb
-	   sub $loc_size,sp            sub $loc_size,sp
-	   mov r2,-(sp) ; save r2      mov r2,-(sp)
-	   mov r4,-(sp) ; save r4
-
-.fi
-.SB "Return values"
-.PP
-The return value popped by RET is stored in an unnamed 'function return area'.
-This area can be different for different sized objects returned,
-e.g. one register for two byte objects,
-two registers for four byte objects,
-memory for larger objects.
-The area is available for 'READ-ONCE' access using the LFR instruction.
-The result of a LFR is only defined if the sizes used to store and
-fetch are identical.
-The only instructions guaranteed not to destroy the contents of
-any 'function return area' are ASP and BRA.
-Thus parameters can be popped before fetching the function result.
-The maximum size of all function return areas is
-implementation dependant,
-but allows procedure instance identifiers and all
-implemented objects of type integer, unsigned, float
-and pointer to be returned.
-
-.SE "EM Assembly Language"
-.nr b 0 1
-.SB "Object types and instructions"
-.PP
-EM knows five basic object types:
-pointers,
-signed integers,
-unsigned integers,
-floating point numbers and
-sets of bits.
-Operations on objects of the last four types do not assume
-a specific size.
-Pointers (including procedure identifiers) have a fixed size in each
-implementation.
-Instructions acting on one or more objects of the last four types need
-explicit size information.
-This information can be given either as the argument of the
-instruction or on top of the stack.
-.sp 1
-For example:
-.nf
-addition of integers         LOL a, LOL b, ADI 2
-subtraction of two floats    LDL a, LDL b, SBF 4
-integer to float             LOL a, LOC 2, LOC 4, CIF, SDL b
-.fi
-.sp
-Note that conversion instructions always expect size
-before and size after conversion on the stack.
-.sp
-No obligation exists to implement all operations on all possible sizes.
-.PP
-The EM assembly language
-allows constants as instruction arguments up to a size of four bytes.
-In all EM's it is possible to initialize any type and size object.
-BSS, HOL, CON and ROM allow type and size indication in initializers.
-.SB "Conversion instructions"
-.PP
-The conversion operators can convert from any type and size to any
-type and size.
-The types are specified by the instruction,
-the sizes should be in words on top of the stack.
-Normally the sizes are multiples of the word size,
-There is one exception: the CII instructions sign-extends if the
-size of the source is a divisor of the word size.
-.SB "CSA and CSB"
-.PP
-The tables used by these instructions do not contain the procedure
-identifier any more.
-See also "Descriptors".
-.SB EXG
-.PP
-The EXG instruction is deleted from the EM instruction set.
-If future applications show any need for this instruction,
-it will be added again.
-.SB "FIL"
-.PP
-A FIL instruction has been introduced.
-When using separate compilation,
-the LIN feature of EM was insufficient.
-FIL expects as argument an address in global data.
-This address is stored in a fixed place in memory,
-where it can be used by any implementation for diagnostics etc.
-Like LIN, it provides access to the ABS fragment at the start
-of external data.
-.SB "LAI and SAI"
-.PP
-LAI and SAI have been dropped, they thwarted register optimization.
-.SB LNC
-.PP
-The LNC instruction is deleted from the instruction set.
-LOC -n wil do what it is supposed to.
-.SB "Branch instructions"
-.PP
-The branch instructions are allowed to branch both forward and backward.
-Consequently BRF and BRB are deleted and a BRA instruction is added.
-BRA branches unconditionally in any direction.
-.SB LDC
-.PP
-Loads a double word constant on the stack.
-.SB LEX
-.PP
-LXA and LXL replace LEX.
-.SB LFR
-.PP
-LFR loads the function result stored by RET.
-.SB "LIL and SIL"
-.PP
-They replace LOP and STP. (Name change only)
-.SB "Traps and Interrupts"
-.PP
-The numbers used for distinguishing the various types
-of traps and interrupts have been reassigned.
-The new instructions LIM and SIM
-allow setting and clearing of bits in a mask.
-The bits in the mask control the action taken upon encountering certain
-errors at runtime.
-A 1 bit causes the corresponding error to be ignored,
-a 0 bit causes the run-time system to trap.
-.SB LPI
-.PP
-Loads a procedure identifier on the stack.
-LOC cannot be used to do this anymore.
-.SB "ZER and ZRF"
-.PP
-ZER loads S zero bytes on the stack.
-ZRF loads a floating point zero of size S.
-.SB "Descriptors"
-.PP
-All instructions using descriptors have the size of the integer used
-in the descriptor as argument.
-The descriptors are: case descriptors (CSA and CSB),
-range check descriptors (RCK) and
-array descriptors ( LAR, SAR, AAR).
-.SB "Case descriptors"
-.PP
-The value used in a case descriptor to indicate the absence of a label
-is zero instead of -1.
-.SE "EM assembly language"
-.SB "Instruction arguments"
-.PP
-The previous EM had different instructions for distinguishing
-between operand on the stack and explicit argument in the instruction.
-For example, LOI and LOS.
-This distinction has been removed.
-Several instructions have two possible forms:
-with explicit argument and with implicit argument on top of the stack.
-The size of the implicit argument is the word size.
-The implicit argument is always popped before all other operands.
-Appendix 1 shows what is allowed for each instruction.
-.SB Notation
-.PP
-First the notation used for the arguments of
-instructions and pseudo instructions.
-.in +12
-.ti -11
-<num>~~=~~an integer number in the range -32768..32767
-.ti -11
-<off>~~=~~an offset -2**31..2**31~-~1
-.ti -11
-<sym>~~=~~an identifier
-.ti -11
-<arg>~~=~~<off> or <sym> or <sym>+<off> or <sym>-<off>
-.ti -11
-<con>~~=~~integer constant,
-unsigned constant,
-floating point constant
-.ti -11
-<str>~~=~~string constant (surrounded by double quotes),
-.ti -11
-<lab>~~=~~instruction label ('*' followed by an integer in the range
-0..32767).
-.ti -11
-<pro>~~=~~procedure number ('$' followed by a procedure name)
-.ti -11
-<val>~~=~~<arg>,
-<con>,
-<pro> or
-<lab>.
-.ti -11
-<...>*~=~~zero or more of <...>
-.ti -11
-<...>+~=~~one or more of <...>
-.ti -11
-[...]~~=~~optional ...
-.in -12
-.SB Labels
-.PP
-No label, instruction or data, can have a (pseudo) instruction
-on the same line.
-.SB Constants
-.PP
-All constants in EM are interpreted in the decimal base.
-.PP
-In BSS, HOL, CON and ROM pseudo-instructions
-numbers must be followed by I, U or F
-indicating Integer, Unsigned or Float.
-If no character is present I is assumed.
-This character can be followed by an even positive number or a 1.
-The number indicates the size in bytes of the object to be initialized,
-up to 32766.
-Double precision integers can no longer be indicated by a trailing L.
-As said before CON and ROM also allow expressions of the form:
-\&"LABEL+offset" and "LABEL-offset".
-The offset must be an unsigned decimal number.
-The 'IUF' indicators cannot be used with the offsets.
-.PP
-Areas reserved in the global data area by HOL or BSS can be
-initialized.
-BSS and HOL have a third parameter indicating whether the initialization
-is mandatory or optional.
-.PP
-Since EM needs aligment of objects, this alignment is enforced by the
-pseudo instructions.
-All objects are aligned on a multiple of their size or the word size
-whichever is smaller.
-Switching to another type of fragment or placing a label forces word-alignment.
-There are three types of fragments in global data space: CON, ROM and BSS-HOL.
-.sp
-.SB "Pseudo instructions"
-.PP
-The LET, IMC and FWC pseudo's have disappeared.
-The only application of these pseudo's was in postponing the
-specification of the size of the local storage to just before
-the END of the procedure.
-A new mechanism has been introduced to handle this problem.
-.ti +5
-The pseudos involved in separate compilation and linking have
-been reorganized.
-.ti +5
-PRO and END are altered and reflect the new calling sequence.
-EOF has disappeared.
-.ti +5
-BSS and HOL allow initialization of the requested data areas.
-.sp 2
-Four pseudo instructions request global data:
-.sp 2
-  BSS <off>,<val>,<num>
-.IN
-Reserve <off> bytes.
-<val> is the value used to initialize the area.
-<off> must be a multiple of the size of <val>.
-<num> is 0 if the initialization is not strictly necessary,
-1 otherwise.
-.OU
-.sp
-  HOL <off>,<val>,<num> 
-.IN
-Idem, but all following absolute global data references will
-refer to this block.
-Only one HOL is allowed per procedure,
-it has to be placed before the first instruction.
-.OU
-.sp
-  CON <val>+ 
-.IN
-Assemble global data words initialized with the <val> constants.
-.OU
-.sp
-  ROM <val>+ 
-.IN
-Idem, but the initialized data will never be changed by the program.
-.OU
-.sp 2
-Two pseudo instructions partition the input into procedures:
-.sp 2
-  PRO <sym>[,<off>] 
-.IN
-Start of procedure.
-<sym> is the procedure name.
-<off> is the number of bytes for locals.
-The number of bytes for locals must be specified in the PRO or
-END pseudo-instruction.
-When specified in both, they must be identical.
-.OU
-.sp
-  END  [<off>]
-.IN
-End of Procedure.
-<off> is the number of bytes for locals.
-The number of bytes for locals must be specified in either the PRO or
-END pseudo-instruction or both.
-.OU
-.PP
-Names of data and procedures in a EM module can either be
-internal or external.
-External names are known outside the module and are used to link
-several pieces of a program.
-Internal names are not known outside the modules they are used in.
-Other modules will not 'see' an internal name.
-.ti +5
-In order to reduce the number of passes needed,
-it must be known at the first occurrence whether
-a name is internal or external.
-If the first occurrence of a name is in a definition,
-the name is considered to be internal.
-If the first occurrence of a name is a reference,
-the name is considered to be external.
-If the first occurrence is in one of the following pseudo instructions,
-the effect of the pseudo has precedence.
-.sp 2
-  EXA <sym> 
-.IN
-External name.
-<sym> is external to this module.
-Note that <sym> may be defined in the same module.
-.OU
-.sp
-  EXP <pro>
-.IN
-External procedure identifier.
-Note that <sym> may be defined in the same module.
-.OU
-.sp
-  INA <sym>
-.IN
-Internal name.
-<sym> is internal to this module and must be defined in this module.
-.OU
-.sp
-  INP <pro> 
-.IN
-Internal procedure.
-<sym> is internal to this module and must be defined in this module.
-.OU
-.sp 2
-Two other pseudo instructions provide miscellaneous features:
-.sp 2
-  EXC <num1>,<num2> 
-.IN
-Two blocks of instructions preceding this one are
-interchanged before being processed.
-<num1> gives the number of lines of the first block.
-<num2> gives the number of lines of the second one.
-Blank and pure comment lines do not count.
-This instruction is obsolete. Its use is strongly discouraged.
-.OU
-.sp
-  MES <num>,<val>* 
-.IN
-A special type of comment.  Used by compilers to communicate with the
-optimizer, assembler, etc. as follows:
-.br
-  MES 0 -
-.IN
-An error has occurred, stop further processing.
-.OU
-.br
-  MES 1 -
-.IN
-Suppress optimization
-.OU
-.br
-  MES 2,<num1>,<num2>
-.IN
-Use word-size <num1> and pointer size <num2>.
-.OU
-.br
-  MES 3,<off>,<num1>,<num2> -
-.IN
-Indicates that a local variable is never referenced indirectly.
-<off> is offset in bytes from LB if positive
-and offset from AB if negative.
-<num1> gives the size of the variable.
-<num2> indicates the class of the variable.
-.OU
-.br
-  MES 4,<num>,<str>
-.IN
-Number of source lines in file <str> (for profiler).
-.OU
-.br
-  MES 5 -
-.IN
-Floating point used.
-.OU
-.br
-  MES 6,<val>* -
-.IN
-Comment.  Used to provide comments in compact assembly language (see below).
-.OU
-.sp 1
-Each back end is free to skip irrelevant MES pseudos.
-.OU
-.SB "The Compact Assembly Language"
-.PP
-The assembler accepts input in a highly encoded form.  This
-form is intended to reduce the amount of file transport between the compiler
-and assembler, and also reduce the amount of storage required for storing
-libraries.
-Libraries are stored as archived compact assembly language, not machine language.
-.PP
-When beginning to read the input, the assembler is in neutral state, and
-expects either a label or an instruction (including the pseudoinstructions).
-The meaning of the next byte(s) when in neutral state is as follows, where b1, b2 
-etc. represent the succeeding bytes.
-.sp
-       0   Reserved for future use
-   1-129   Machine instructions, see Appendix 2, alphabetical list
- 130-149   Reserved for future use
- 150-161   BSS,CON,END,EXC,EXA,EXP,HOL,INA,INP,MES,PRO,ROM
- 162-179   Reserved for future pseudoinstructions
- 180-239   Instruction labels 0 - 59  (180 is local label 0 etc.)
- 240-244   See the Common Table below
- 245-255   Not used
-
-After a label, the assembler is back in neutral state; it can immediately
-accept another label or an instruction in the very next byte.  There are
-no linefeeds used to separate lines.
-.PP
-If an opcode expects no arguments,
-the assembler is back in neutral state after
-reading the one byte containing the instruction number.  If it has one or
-more arguments (only pseudos have more than 1), the arguments follow directly,
-encoded as follows:
-.sp
-   0-239     Offsets from -120 to 119
-.br
- 240-255     See the Common Table below
-.sp 2
-If an opcode has one optional argument,
-a special byte is used to announce that the argument is not present.
-.ce 1
-Common Table for Neutral State and Arguments
-.sp
-.nf
-<lab>   240 b1                Instruction label b1  (Not used for branches)
-<lab>   241 b1 b2             16 bit instruction label  (256*b2 + b1)
-<sym>   242 b1                Global label .0-.255, with b1 being the label
-<sym>   243 b1 b2             Global label .0-.32767
-			      with 256*b2+b1 being the label
-<sym>   244 <string>          Global symbol not of the form .nnn
-. \" Only the previous can occur in neutral state.
-<num>   245 b1 b2             (16 bit constant) 256*b2+b1
-<off>   246 b1 b2 b3 b4       (32 bit constant) (256*(256*(256*b4)+b3)+b2)+b1
-<arg>   247 <sym><off>        Global label + (possibly negative) constant
-<pro>   248 <string>          Procedure name  (not including $)
-<str>   249 <string>          String used in CON or ROM (no quotes)
-<con>   250 <num><string>     Integer constant, size <num> bytes
-<con>   251 <num><string>     Unsigned constant, size <num> bytes
-<con>   252 <num><string>     Floating constant, size <num> bytes
-<end>   255                   Delimiter for argument lists or
-			      indicates absence of optional argument
-
-.fi
-.PP
-The notation <string> consists first of a length field, and then an
-arbitrary string of bytes.
-The length is specified by a <num>.
-.PP
-.ne 8
-The pseudoinstructions fall into several categories, depending on their
-arguments:
-.sp
- Group 1 -- EXC, BSS, HOL have a known number of arguments
- Group 2 -- EXA, EXP, INA, INP start with a string
- Group 3 -- CON, MES, ROM have a variable number of various things
- Group 4 -- END, PRO have a trailing optional argument.
-
-Groups 1 and 2
-use the encoding described above.
-Group 3 also uses the encoding listed above, with a <end> byte after the
-last argument to indicate the end of the list.  
-Group 4 uses
-a <end> byte if the trailing argument is not present.
-
-.ad
-.fi
-.sp 2
-.ne 12
-.nf
-Example  ASCII			Example compact
-(LOC = 66, BRA = 18 here):
-
-  2				182
-  1				181
-   LOC 10			66 130
-   LOC -10			66 110
-   LOC 300			66 245 44 1
-   BRA 19			18 139
-  300				241 44 1
-  .3				242 3 
-   CON 4,9,*2,$foo		151 124 130 240 2 248 3 102 111 111 255
-   LOC .35			66 242 35
-.fi
-.nr a 0 1
-.SE "ASSEMBLY LANGUAGE INSTRUCTION LIST"
-.PP
-For each instruction in the list the range of operand values
-in the assembly language is given.
-All constants, offsets and sizes are in the range -2**31~..~2**31-1.
-The column headed \fIassem\fP contains the mnemonics defined
-in 4.1.
-The following column indicates restrictions in the range of the operand.
-Addresses have to obey the restrictions mentioned in chapter 2 - Memory -.
-The size parameter of most instructions has to be a multiple
-of the word size.
-The classes of operands
-are indicated by letters:
-.ds b \fBb\fP
-.ds c \fBc\fP
-.ds d \fBd\fP
-.ds g \fBg\fP
-.ds f \fBf\fP
-.ds l \fBl\fP
-.ds n \fBn\fP
-.ds i \fBi\fP
-.ds p \fBp\fP
-.ds r \fBr\fP
-.ds s \fBs\fP
-.ds z \fBz\fP
-.ds - \fB-\fP
-.nf
-
-  \fIassem\fP       constraints            rationale
-
-\&\*c  off                                 1-word constant
-\&\*d  off                                 2-word constant
-\&\*l  off                                 local offset
-\&\*g  arg          >= 0                   global offset
-\&\*f  off                                 fragment offset
-\&\*n  num          >= 0                   counter
-\&\*s  off          > 0                    object size
-\&\*z  off          >= 0                   object size
-\&\*i  off          > 0                    object size *
-\&\*p  pro                                 pro identifier
-\&\*b  lab          >= 0                   label number
-\&\*r  num          0,1,2                  register number
-\&\*-                                      no operand
-
-.fi
-.PP
-The * at the rationale for \*i indicates that the operand
-can either be given as argument or on top of the stack.
-If the operand has to be fetched from the stack,
-it is assumed to be a word-sized unsigned integer.
-.PP
-Instructions that check for undefined operands and underflow or overflow
-are indicated by (*).
-.nf
-
-GROUP 1 - LOAD
-
-  LOC \*c : Load constant (i.e. push one word onto the stack)
-  LDC \*d : Load double constant ( push two words )
-  LOL \*l : Load word at \*l-th local (l<0) or parameter (l>=0)
-  LOE \*g : Load external word \*g
-  LIL \*l : Load word pointed to by \*l-th local or parameter
-  LOF \*f : Load offsetted. (top of stack + \*f yield address)
-  LAL \*l : Load address of local or parameter
-  LAE \*g : Load address of external
-  LXL \*n : Load lexical. (address of LB \*n static levels back)
-  LXA \*n : Load lexical. (address of AB \*n static levels back)
-  LOI \*s : Load indirect \*s bytes (address is popped from the stack)
-  LOS \*i : Load indirect. \*i-byte integer on top of stack gives object size
-  LDL \*l : Load double local or parameter (two consecutive words are stacked)
-  LDE \*g : Load double external (two consecutive externals are stacked)
-  LDF \*f : Load double offsetted (top of stack + \*f yield address)
-  LPI \*p : Load procedure identifier
-
-GROUP 2 - STORE
-
-  STL \*l : Store local or parameter
-  STE \*g : Store external
-  SIL \*l : Store into word pointed to by \*l-th local or parameter
-  STF \*f : Store offsetted
-  STI \*s : Store indirect \*s bytes (pop address, then data)
-  STS \*i : Store indirect. \*i-byte integer on top of stack gives object size
-  SDL \*l : Store double local or parameter
-  SDE \*g : Store double external
-  SDF \*f : Store double offsetted
-
-GROUP 3 - INTEGER ARITHMETIC
-
-  ADI \*i : Addition (*)
-  SBI \*i : Subtraction (*)
-  MLI \*i : Multiplication (*)
-  DVI \*i : Division (*)
-  RMI \*i : Remainder (*)
-  NGI \*i : Negate (two's complement) (*)
-  SLI \*i : Shift left (*)
-  SRI \*i : Shift right (*)
-
-GROUP 4 - UNSIGNED ARITHMETIC
-
-  ADU \*i : Addition
-  SBU \*i : Subtraction
-  MLU \*i : Multiplication
-  DVU \*i : Division
-  RMU \*i : Remainder
-  SLU \*i : Shift left
-  SRU \*i : Shift right
-
-GROUP 5 - FLOATING POINT ARITHMETIC   (Format not defined)
-
-  ADF \*i : Floating add (*)
-  SBF \*i : Floating subtract (*)
-  MLF \*i : Floating multiply (*)
-  DVF \*i : Floating divide (*)
-  NGF \*i : Floating negate (*)
-  FIF \*i : Floating multiply and split integer and fraction part (*)
-  FEF \*i : Split floating number in exponent and fraction part (*)
-
-GROUP 6 - POINTER ARITHMETIC
-
-  ADP \*f : Add \*c to pointer on top of stack
-  ADS \*i : Add \*i-byte value and pointer
-  SBS \*i : Subtract pointers in same fragment and push diff as size \*i integer
-
-GROUP 7 - INCREMENT/DECREMENT/ZERO
-
-  INC \*- : Increment top of stack by 1 (*)
-  INL \*l : Increment local or parameter (*)
-  INE \*g : Increment external (*)
-  DEC \*- : Decrement top of stack by 1 (*)
-  DEL \*l : Decrement local or parameter (*)
-  DEE \*g : Decrement external (*)
-  ZRL \*l : Zero local or parameter
-  ZRE \*g : Zero external
-  ZRF \*i : Load a floating zero of size \*i
-  ZER \*i : Load \*i zero bytes
-
-GROUP 8 - CONVERT    ( stack: source, source size, dest. size (top) )
-
-  CII \*- : Convert integer to integer (*)
-  CUI \*- : Convert unsigned to integer (*)
-  CFI \*- : Convert floating to integer (*)
-  CIF \*- : Convert integer to floating (*)
-  CUF \*- : Convert unsigned to floating (*)
-  CFF \*- : Convert floating to floating (*)
-  CIU \*- : Convert integer to unsigned
-  CUU \*- : Convert unsigned to unsigned
-  CFU \*- : Convert floating to unsigned
-
-GROUP 9 - LOGICAL
-
-  AND \*i : Boolean and on two groups of \*i bytes
-  IOR \*i : Boolean inclusive or on two groups of \*i bytes
-  XOR \*i : Boolean exclusive or on two groups of \*i bytes
-  COM \*i : Complement (one's complement of top \*i bytes)
-  ROL \*i : Rotate left a group of \*i bytes
-  ROR \*i : Rotate right a group of \*i bytes
-
-GROUP 10 - SETS
-
-  INN \*i : Bit test on \*i byte set (bit number on top of stack)
-  SET \*i : Create singleton \*i byte set with bit n on (n is top of stack)
-
-GROUP 11 - ARRAY
- 
-  LAR \*i : Load array element, descriptor contains integers of size \*i
-  SAR \*i : Store array element
-  AAR \*i : Load address of array element
-
-GROUP 12 - COMPARE
-
-  CMI \*i : Compare \*i byte integers. Push negative, zero, positive for <, = or >
-  CMF \*i : Compare \*i byte reals
-  CMU \*i : Compare \*i byte unsigneds
-  CMS \*i : Compare \*i byte sets. can only be used for equality test.
-  CMP \*- : Compare pointers
-
-  TLT \*- : True if less, i.e. iff top of stack < 0
-  TLE \*- : True if less or equal, i.e. iff top of stack <= 0
-  TEQ \*- : True if equal, i.e. iff top of stack = 0
-  TNE \*- : True if not equal, i.e. iff top of stack non zero
-  TGE \*- : True if greater or equal, i.e. iff top of stack >= 0
-  TGT \*- : True if greater, i.e. iff top of stack > 0
-
-GROUP 13 - BRANCH
-
-  BRA \*b : Branch unconditionally to label \*b
-
-  BLT \*b : Branch less (pop 2 words, branch if top > second)
-  BLE \*b : Branch less or equal
-  BEQ \*b : Branch equal
-  BNE \*b : Branch not equal
-  BGE \*b : Branch greater or equal
-  BGT \*b : Branch greater
-
-  ZLT \*b : Branch less than zero (pop 1 word, branch negative)
-  ZLE \*b : Branch less or equal to zero
-  ZEQ \*b : Branch equal zero
-  ZNE \*b : Branch not zero
-  ZGE \*b : Branch greater or equal zero
-  ZGT \*b : Branch greater than zero
-
-GROUP 14 - PROCEDURE CALL
-
-  CAI \*- : Call procedure (procedure instance identifier on stack)
-  CAL \*p : Call procedure (with name \*p)
-  LFR \*s : Load function result
-  RET \*z : Return (function result consists of top \*z bytes)
-
-GROUP 15 - MISCELLANEOUS
-
-  ASP \*f : Adjust the stack pointer by \*f
-  ASS \*i : Adjust the stack pointer by \*i-byte integer
-  BLM \*z : Block move \*z bytes; first pop destination addr, then source addr
-  BLS \*i : Block move, size is in \*i-byte integer on top of stack
-  CSA \*i : Case jump; address of jump table at top of stack
-  CSB \*i : Table lookup jump; address of jump table at top of stack
-  DUP \*s : Duplicate top \*s bytes
-  DUS \*i : Duplicate top \*i bytes
-  FIL \*g : File name (external 4 := \*g)
-  LIM \*- : Load 16 bit ignore mask
-  LIN \*n : Line number (external 0 := \*n)
-  LNI \*- : Line number increment
-  LOR \*r : Load register (0=LB, 1=SP, 2=HP)
-  MON \*- : Monitor call
-  NOP \*- : No operation
-  RCK \*i : Range check; trap on error
-  RTT \*- : Return from trap
-  SIG \*- : Trap errors to proc nr on top of stack (-2 resets default).  Static
-          link of procedure is below procedure number. Old values returned
-  SIM \*- : Store 16 bit ignore mask
-  STR \*r : Store register (0=LB, 1=SP, 2=HP)
-  TRP \*- : Cause trap to occur (Error number on stack)
-.fi

+ 0 - 11
doc/em/app.int.nr

@@ -1,11 +0,0 @@
-.BP
-.AP "EM INTERPRETER"
-.nf
-.ft CW
-.lg 0
-.nr x \w'        '
-.ta \nxu +\nxu +\nxu +\nxu +\nxu +\nxu +\nxu +\nxu +\nxu +\nxu
-.so em.i
-.ft P
-.lg 1
-.fi

+ 0 - 488
doc/em/app.nr

@@ -1,488 +0,0 @@
-.BP
-.AP "EM INTERPRETER"
-.nf
-.ta 8 16 24 32 40 48 56 64 72 80
-.so em.i
-.fi
-.BP
-.AP "EM CODE TABLES"
-The following table is used by the assembler for EM machine
-language.
-It specifies the opcodes used for each instruction and
-how arguments are mapped to machine language arguments.
-The table is presented in three columns,
-each line in each column contains three or four fields.
-Each line describes a range of interpreter opcodes by
-specifying for which instruction the range is used, the type of the
-opcodes (mini, shortie, etc..) and range for the instruction
-argument.
-.A
-The first field on each line gives the EM instruction mnemonic,
-the second field gives some flags.
-If the opcodes are minis or shorties the third field specifies
-how many minis/shorties are used.
-The last field gives the number of the (first) interpreter
-opcode.
-.N 1
-Flags :
-.IS 3
-.N 1
-Opcode type, only one of the following may be specified.
-.PS - 5 "  "
-.PT -
-opcode without argument
-.PT m
-mini
-.PT s
-shortie
-.PT 2
-opcode with 2-byte signed argument
-.PT 4
-opcode with 4-byte signed argument
-.PT 8
-opcode with 8-byte signed argument
-.PE
-Secondary (escaped) opcodes.
-.PS - 5 "  "
-.PT e
-The opcode thus marked is in the secondary opcode group instead
-of the primary
-.PE
-restrictions on arguments
-.PS - 5 "  "
-.PT N
-Negative arguments only
-.PT P
-Positive and zero arguments only
-.PE
-mapping of arguments
-.PS - 5 "  "
-.PT w
-argument must be divisible by the wordsize and is divided by the
-wordsize before use as opcode argument.
-.PT o
-argument ( possibly after division ) must be >= 1 and is
-decremented before use as opcode argument
-.PE
-.IE
-If the opcode type is 2,4 or 8 the resulting argument is used as
-opcode argument (least significant byte first).
-.N
-If the opcode type is mini, the argument is added
-to the first opcode - if in range - .
-If the argument is negative, the absolute value minus one is
-used in the algorithm above.
-.N
-For shorties with positive arguments the first opcode is used
-for arguments in the range 0..255, the second for the range
-256..511, etc..
-For shorties with negative arguments the first opcode is used
-for arguments in the range -1..-256, the second for the range
--257..-512, etc..
-The byte following the opcode contains the least significant
-byte of the argument.
-First some examples of these specifications.
-.PS - 5
-.PT "aar mwPo 1 34"
-Indicates that opcode 34 is used as a mini for Positive
-instruction arguments only.
-The w and o indicate division and decrementing of the
-instruction argument.
-Because the resulting argument must be zero ( only opcode 34 may be used
-), this mini can only be used for instruction argument 2.
-Conclusion: opcode 34 is for "AAR 2".
-.PT "adp sP 1 41"
-Opcode 41 is used as shortie for ADP with arguments in the range
-0..255.
-.PT "bra sN 2 60"
-Opcode 60 is used as shortie for BRA with arguments -1..-256,
-61 is used for arguments -257..-512.
-.PT "zer e- 145"
-Escaped opcode 145 is used for ZER.
-.PE
-The interpreter opcode table:
-.N 1
-.IS 3
-.DS B
-.so itables
-.DE 0
-.IE
-.P
-The table above results in the following dispatch tables.
-Dispatch tables are used by interpreters to jump to the
-routines implementing the EM instructions, indexed by the next opcode.
-Each line of the dispatch tables gives the routine names
-of eight consecutive opcodes, preceded by the first opcode number
-on that line.
-Routine names consist of an EM mnemonic followed by a suffix.
-The suffices show the encoding used for each opcode.
-.N
-The following suffices exist:
-.N 1
-.VS 1 0
-.IS 4
-.PS - 11
-.PT .z
-no arguments
-.PT .l
-16-bit argument
-.PT .lw
-16-bit argument divided by the wordsize
-.PT .p
-positive 16-bit argument
-.PT .pw
-positive 16-bit argument divided by the wordsize
-.PT .n
-negative 16-bit argument
-.PT .nw
-negative 16-bit argument divided by the wordsize
-.PT .s<num>
-shortie with <num> as high order argument byte
-.PT .sw<num>
-shortie with argument divided by the wordsize
-.PT .<num>
-mini with <num> as argument
-.PT .<num>W
-mini with <num>*wordsize as argument
-.PE 3
-<num> is a possibly negative integer.
-.VS 1 1
-.IE
-The dispatch table for the 256 primary opcodes:
-.DS B
-   0   loc.0    loc.1    loc.2    loc.3    loc.4    loc.5    loc.6    loc.7
-   8   loc.8    loc.9    loc.10   loc.11   loc.12   loc.13   loc.14   loc.15
-  16   loc.16   loc.17   loc.18   loc.19   loc.20   loc.21   loc.22   loc.23
-  24   loc.24   loc.25   loc.26   loc.27   loc.28   loc.29   loc.30   loc.31
-  32   loc.32   loc.33   aar.1W   adf.s0   adi.1W   adi.2W   adp.l    adp.1
-  40   adp.2    adp.s0   adp.s-1  ads.1W   and.1W   asp.1W   asp.2W   asp.3W
-  48   asp.4W   asp.5W   asp.w0   beq.l    beq.s0   bge.s0   bgt.s0   ble.s0
-  56   blm.s0   blt.s0   bne.s0   bra.l    bra.s-1  bra.s-2  bra.s0   bra.s1
-  64   cal.1    cal.2    cal.3    cal.4    cal.5    cal.6    cal.7    cal.8
-  72   cal.9    cal.10   cal.11   cal.12   cal.13   cal.14   cal.15   cal.16
-  80   cal.17   cal.18   cal.19   cal.20   cal.21   cal.22   cal.23   cal.24
-  88   cal.25   cal.26   cal.27   cal.28   cal.s0   cff.z    cif.z    cii.z
-  96   cmf.s0   cmi.1W   cmi.2W   cmp.z    cms.s0   csa.1W   csb.1W   dec.z
- 104   dee.w0   del.w-1  dup.1W   dvf.s0   dvi.1W   fil.l    inc.z    ine.lw
- 112   ine.w0   inl.-1W  inl.-2W  inl.-3W  inl.w-1  inn.s0   ior.1W   ior.s0
- 120   lae.l    lae.w0   lae.w1   lae.w2   lae.w3   lae.w4   lae.w5   lae.w6
- 128   lal.p    lal.n    lal.0    lal.-1   lal.w0   lal.w-1  lal.w-2  lar.W
- 136   ldc.0    lde.lw   lde.w0   ldl.0    ldl.w-1  lfr.1W   lfr.2W   lfr.s0
- 144   lil.w-1  lil.w0   lil.0    lil.1W   lin.l    lin.s0   lni.z    loc.l
- 152   loc.-1   loc.s0   loc.s-1  loe.lw   loe.w0   loe.w1   loe.w2   loe.w3
- 160   loe.w4   lof.l    lof.1W   lof.2W   lof.3W   lof.4W   lof.s0   loi.l
- 168   loi.1    loi.1W   loi.2W   loi.3W   loi.4W   loi.s0   lol.pw   lol.nw
- 176   lol.0    lol.1W   lol.2W   lol.3W   lol.-1W  lol.-2W  lol.-3W  lol.-4W
- 184   lol.-5W  lol.-6W  lol.-7W  lol.-8W  lol.w0   lol.w-1  lxa.1    lxl.1
- 192   lxl.2    mlf.s0   mli.1W   mli.2W   rck.1W   ret.0    ret.1W   ret.s0
- 200   rmi.1W   sar.1W   sbf.s0   sbi.1W   sbi.2W   sdl.w-1  set.s0   sil.w-1
- 208   sil.w0   sli.1W   ste.lw   ste.w0   ste.w1   ste.w2   stf.l    stf.W
- 216   stf.2W   stf.s0   sti.1    sti.1W   sti.2W   sti.3W   sti.4W   sti.s0
- 224   stl.pw   stl.nw   stl.0    stl.1W   stl.-1W  stl.-2W  stl.-3W  stl.-4W
- 232   stl.-5W  stl.w-1  teq.z    tgt.z    tlt.z    tne.z    zeq.l    zeq.s0
- 240   zeq.s1   zer.s0   zge.s0   zgt.s0   zle.s0   zlt.s0   zne.s0   zne.s-1
- 248   zre.lw   zre.w0   zrl.-1W  zrl.-2W  zrl.w-1  zrl.nw   escape1  escape2
-.DE 2
-The list of secondary opcodes (escape1):
-.N  1
-.DS  B
-   0   aar.l    aar.z    adf.l    adf.z    adi.l    adi.z    ads.l    ads.z
-   8   adu.l    adu.z    and.l    and.z    asp.lw   ass.l    ass.z    bge.l
-  16   bgt.l    ble.l    blm.l    bls.l    bls.z    blt.l    bne.l    cai.z
-  24   cal.l    cfi.z    cfu.z    ciu.z    cmf.l    cmf.z    cmi.l    cmi.z
-  32   cms.l    cms.z    cmu.l    cmu.z    com.l    com.z    csa.l    csa.z
-  40   csb.l    csb.z    cuf.z    cui.z    cuu.z    dee.lw   del.pw   del.nw
-  48   dup.l    dus.l    dus.z    dvf.l    dvf.z    dvi.l    dvi.z    dvu.l
-  56   dvu.z    fef.l    fef.z    fif.l    fif.z    inl.pw   inl.nw   inn.l
-  64   inn.z    ior.l    ior.z    lar.l    lar.z    ldc.l    ldf.l    ldl.pw
-  72   ldl.nw   lfr.l    lil.pw   lil.nw   lim.z    los.l    los.z    lor.s0
-  80   lpi.l    lxa.l    lxl.l    mlf.l    mlf.z    mli.l    mli.z    mlu.l
-  88   mlu.z    mon.z    ngf.l    ngf.z    ngi.l    ngi.z    nop.z    rck.l
-  96   rck.z    ret.l    rmi.l    rmi.z    rmu.l    rmu.z    rol.l    rol.z
- 104   ror.l    ror.z    rtt.z    sar.l    sar.z    sbf.l    sbf.z    sbi.l
- 112   sbi.z    sbs.l    sbs.z    sbu.l    sbu.z    sde.l    sdf.l    sdl.pw
- 120   sdl.nw   set.l    set.z    sig.z    sil.pw   sil.nw   sim.z    sli.l
- 128   sli.z    slu.l    slu.z    sri.l    sri.z    sru.l    sru.z    sti.l
- 136   sts.l    sts.z    str.s0   tge.z    tle.z    trp.z    xor.l    xor.z
- 144   zer.l    zer.z    zge.l    zgt.l    zle.l    zlt.l    zne.l    zrf.l
- 152   zrf.z    zrl.pw   dch.z    exg.s0   exg.l    exg.z    lpb.z    gto.l
-.DE 2
-Finally, the list of opcodes with four byte arguments (escape2).
-.DS
-
-   0  loc
-.DE 0
-.BP
-.AP "AN EXAMPLE PROGRAM"
-.DS B
- 1      program example(output);
- 2      {This program just demonstrates typical EM code.}
- 3      type rec = record r1: integer; r2:real; r3: boolean end;
- 4      var mi: integer;  mx:real;  r:rec;
- 5
- 6      function sum(a,b:integer):integer;
- 7      begin
- 8        sum := a + b
- 9      end;
-10
-11      procedure test(var r: rec);
-12      label 1;
-13      var i,j: integer;
-14          x,y: real;
-15          b: boolean;
-16          c: char;
-17          a: array[1..100] of integer;
-18
-19      begin
-20              j := 1;
-21              i := 3 * j + 6;
-22              x := 4.8;
-23              y := x/0.5;
-24              b := true;
-25              c := 'z';
-26              for i:= 1 to 100 do a[i] := i * i;
-27              r.r1 := j+27;
-28              r.r3 := b;
-29              r.r2 := x+y;
-30              i := sum(r.r1, a[j]);
-31              while i > 0 do begin j := j + r.r1; i := i - 1 end;
-32              with r do begin r3 := b;  r2 := x+y;  r1 := 0 end;
-33              goto 1;
-34      1:      writeln(j, i:6, x:9:3, b)
-35      end; {test}
-36      begin {main program}
-37        mx := 15.96;
-38        mi := 99;
-39        test(r)
-40      end.
-.DE 0
-.BP
-The EM code as produced by the Pascal-VU compiler is given below. Comments
-have been added manually.  Note that this code has already been  optimized.
-.DS B
-  mes 2,2,2              ; wordsize 2, pointersize 2
- .1
-  rom 't.p\e000'         ; the name of the source file
-  hol 552,-32768,0       ; externals and buf occupy 552 bytes
-  exp $sum               ; sum can be called from other modules
-  pro $sum,2             ; procedure sum; 2 bytes local storage
-  lin 8                  ; code from source line 8
-  ldl 0                  ; load two locals ( a and b )
-  adi 2                  ; add them
-  ret 2                  ; return the result
-  end 2                  ; end of procedure ( still two bytes local storage )
- .2
-  rom 1,99,2             ; descriptor of array a[]
-  exp $test              ; the compiler exports all level 0 procedures
-  pro $test,226          ; procedure test, 226 bytes local storage
- .3
-  rom 4.8F8              ; assemble Floating point 4.8 (8 bytes) in
- .4                              ; global storage
-  rom 0.5F8              ; same for 0.5
-  mes 3,-226,2,2         ; compiler temporary not referenced by address
-  mes 3,-24,2,0          ; the same is true for i, j, b and c in test
-  mes 3,-22,2,0
-  mes 3,-4,2,0
-  mes 3,-2,2,0
-  mes 3,-20,8,0          ; and for x and y
-  mes 3,-12,8,0
-  lin 20                 ; maintain source line number
-  loc 1
-  stl -4                 ; j := 1
-  lni                    ; lin 21 prior to optimization
-  lol -4
-  loc 3
-  mli 2
-  loc 6
-  adi 2
-  stl -2                 ; i := 3 * j + 6
-  lni                    ; lin 22 prior to optimization
-  lae .3
-  loi 8
-  lal -12
-  sti 8                  ; x := 4.8
-  lni                    ; lin 23 prior to optimization
-  lal -12
-  loi 8
-  lae .4
-  loi 8
-  dvf 8
-  lal -20
-  sti 8                  ; y := x / 0.5
-  lni                    ; lin 24 prior to optimization
-  loc 1
-  stl -22                ; b := true
-  lni                    ; lin 25 prior to optimization
-  loc 122
-  stl -24                ; c := 'z'
-  lni                    ; lin 26 prior to optimization
-  loc 1
-  stl -2                 ; for i:= 1
- 2
-  lol -2
-  dup 2
-  mli 2                  ; i*i
-  lal -224
-  lol -2
-  lae .2
-  sar 2                  ; a[i] :=
-  lol -2
-  loc 100
-  beq *3                 ; to 100 do
-  inl -2                 ; increment i and loop
-  bra *2
- 3
-  lin 27
-  lol -4
-  loc 27
-  adi 2                  ; j + 27
-  sil 0                  ; r.r1 :=
-  lni                    ; lin 28 prior to optimization
-  lol -22                ; b
-  lol 0
-  stf 10                 ; r.r3 :=
-  lni                    ; lin 29 prior to optimization
-  lal -20
-  loi 16
-  adf 8                  ; x + y
-  lol 0
-  adp 2
-  sti 8                  ; r.r2 :=
-  lni                    ; lin 23 prior to optimization
-  lal -224
-  lol -4
-  lae .2
-  lar 2                  ; a[j]
-  lil 0                  ; r.r1
-  cal $sum               ; call now
-  asp 4                  ; remove parameters from stack
-  lfr 2                  ; get function result
-  stl -2                 ; i :=
- 4
-  lin 31
-  lol -2
-  zle *5                 ; while i > 0 do
-  lol -4
-  lil 0
-  adi 2
-  stl -4                 ; j := j + r.r1
-  del -2                 ; i := i - 1
-  bra *4                 ; loop
- 5
-  lin 32
-  lol 0
-  stl -226               ; make copy of address of r
-  lol -22
-  lol -226
-  stf 10                 ; r3 := b
-  lal -20
-  loi 16
-  adf 8
-  lol -226
-  adp 2
-  sti 8                  ; r2 := x + y
-  loc 0
-  sil -226               ; r1 := 0
-  lin 34                 ; note the abscence of the unnecesary jump
-  lae 22                 ; address of output structure
-  lol -4
-  cal $_wri              ; write integer with default width
-  asp 4                  ; pop parameters
-  lae 22
-  lol -2
-  loc 6
-  cal $_wsi              ; write integer width 6
-  asp 6
-  lae 22
-  lal -12
-  loi 8
-  loc 9
-  loc 3
-  cal $_wrf              ; write fixed format real, width 9, precision 3
-  asp 14
-  lae 22
-  lol -22
-  cal $_wrb              ; write boolean, default width
-  asp 4
-  lae 22
-  cal $_wln              ; writeln
-  asp 2
-  ret 0                  ; return, no result
-  end 226
-  exp $_main
-  pro $_main,0           ; main program
- .6
-  con 2,-1,22            ; description of external files
- .5
-  rom 15.96F8
-  fil .1                 ; maintain source file name
-  lae .6                 ; description of external files
-  lae 0                  ; base of hol area to relocate buffer addresses
-  cal $_ini              ; initialize files, etc...
-  asp 4
-  lin 37
-  lae .5
-  loi 8
-  lae 2
-  sti 8                  ; mx := 15.96
-  lni                    ; lin 38 prior to optimization
-  loc 99
-  ste 0                  ; mi := 99
-  lni                    ; lin 39 prior to optimization
-  lae 10                 ; address of r
-  cal $test
-  asp 2
-  loc 0                  ; normal exit
-  cal $_hlt              ; cleanup and finish
-  asp 2
-  end 0
-  mes 5                  ; reals were used
-.DE 0
-The compact code corresponding to the above program is listed below.
-Read it horizontally, line by line, not column by column.
-Each number represents a byte of compact code, printed in decimal.
-The first two bytes form the magic word.
-.N 1
-.IS 3
-.DS B
-173   0 159 122 122 122 255 242   1 161 250 124 116  46 112   0
-255 156 245  40   2 245   0 128 120 155 249 123 115 117 109 160
-249 123 115 117 109 122  67 128  63 120   3 122  88 122 152 122
-242   2 161 121 219 122 255 155 249 124 116 101 115 116 160 249
-124 116 101 115 116 245 226   0 242   3 161 253 128 123  52  46
- 56 255 242   4 161 253 128 123  48  46  53 255 159 123 245  30
-255 122 122 255 159 123  96 122 120 255 159 123  98 122 120 255
-159 123 116 122 120 255 159 123 118 122 120 255 159 123 100 128
-120 255 159 123 108 128 120 255  67 140  69 121 113 116  68  73
-116  69 123  81 122  69 126   3 122 113 118  68  57 242   3  72
-128  58 108 112 128  68  58 108  72 128  57 242   4  72 128  44
-128  58 100 112 128  68  69 121 113  98  68  69 245 122   0 113
- 96  68  69 121 113 118 182  73 118  42 122  81 122  58 245  32
-255  73 118  57 242   2  94 122  73 118  69 220  10 123  54 118
- 18 122 183  67 147  73 116  69 147   3 122 104 120  68  73  98
- 73 120 111 130  68  58 100  72 136   2 128  73 120   4 122 112
-128  68  58 245  32 255  73 116  57 242   2  59 122  65 120  20
-249 123 115 117 109   8 124  64 122 113 118 184  67 151  73 118
-128 125  73 116  65 120   3 122 113 116  41 118  18 124 185  67
-152  73 120 113 245  30 255  73  98  73 245  30 255 111 130  58
-100  72 136   2 128  73 245  30 255   4 122 112 128  69 120 104
-245  30 255  67 154  57 142  73 116  20 249 124  95 119 114 105
-  8 124  57 142  73 118  69 126  20 249 124  95 119 115 105   8
-126  57 142  58 108  72 128  69 129  69 123  20 249 124  95 119
-114 102   8 134  57 142  73  98  20 249 124  95 119 114  98   8
-124  57 142  20 249 124  95 119 108 110   8 122  88 120 152 245
-226   0 155 249 125  95 109  97 105 110 160 249 125  95 109  97
-105 110 120 242   6 151 122 119 142 255 242   5 161 253 128 125
- 49  53  46  57  54 255  50 242   1  57 242   6  57 120  20 249
-124  95 105 110 105   8 124  67 157  57 242   5  72 128  57 122
-112 128  68  69 219 110 120  68  57 130  20 249 124 116 101 115
-116   8 122  69 120  20 249 124  95 104 108 116   8 122 152 120
-159 124 160 255 159 125 255
-.DE 0
-.IE
-.MS T A 0
-.ME
-.BP
-.MS B A 0
-.ME
-.CT

+ 0 - 32
doc/em/int/Makefile

@@ -1,32 +0,0 @@
-CFLAGS=-O
-HOME=../../..
-
-install \
-all:            em emdmp tables
-
-tables:         mktables $(HOME)/etc/ip_spec.t
-		mktables $(HOME)/etc/ip_spec.t tables
-
-mktables:       mktables.c $(HOME)/h/em_spec.h $(HOME)/h/em_flag.h \
-		$(HOME)/lib.bin/em_data.a $(HOME)/h/ip_spec.h
-		$(CC) -I$(HOME)/h -O -o mktables mktables.c $(HOME)/lib.bin/em_data.a
-
-em.out:         em.p
-		apc -mint -O em.p >emerrs ; mv e.out em.out
-
-em:             em.p
-		apc -O -i em.p >emerrs ; mv a.out em
-
-nem.p:          em.p
-		sed -e '/maxadr  = t16/s//maxadr  =t15/' -e '/maxdata = 8191; /s//maxdata = 14335;/' -e '/ adr=.*long/s// adr=    0..maxadr/' <em.p >nem.p
-
-nem:            nem.p
-		apc -O -i nem.p >emerrs ; mv a.out nem
-
-emdmp:          emdmp.c
-		$(CC) -I$(HOME)/h -I$(HOME)/config -o emdmp -O emdmp.c
-
-cmp:
-
-pr:		
-		@pr em.p mktables.c emdmp.c

+ 0 - 376
doc/em/iotrap.nr

@@ -1,376 +0,0 @@
-.SN 8
-.VS 1 0
-.BP
-.S1 "ENVIRONMENT INTERACTIONS"
-EM programs can interact with their environment in three ways.
-Two, starting/stopping and monitor calls, are dealt with in this chapter.
-The remaining way to interact, interrupts, will be treated
-together with traps in chapter 9.
-.S2 "Program starting and stopping"
-EM user programs start with a call to a procedure called
-m_a_i_n.
-The assembler and backends look for the definition of a procedure
-with this name in their input.
-The call passes three parameters to the procedure.
-The parameters are similar to the parameters supplied by the
-UNIX
-.FS
-UNIX is a Trademark of Bell Laboratories.
-.FE
-operating system to C programs.
-These parameters are often called
-.BW argc ,
-.B argv
-and
-.BW envp .
-Argc is the parameter nearest to LB and is a wordsized integer.
-The other two are pointers to the first element of an array of
-string pointers.
-.N
-The
-.B argv
-array contains
-.B argc
-strings, the first of which contains the program call name.
-The other strings in the
-.B argv
-array are the program parameters.
-.P
-The
-.B envp
-array contains strings in the form "name=string", where 'name'
-is the name of an environment variable and string its value.
-The
-.B envp
-is terminated by a zero pointer.
-.P
-An EM user program stops if the program returns from the first
-invocation of m_a_i_n.
-The contents of the function return area are used to procure a
-wordsized program return code.
-EM programs also stop when traps and interrupts occur that are
-not caught and when the exit monitor call is executed.
-.S2 "Input/Output and other monitor calls"
-EM differs from most conventional machines in that it has high level i/o
-instructions.
-Typical instructions are OPEN FILE and READ FROM FILE instead
-of low level instructions such as setting and clearing
-bits in device registers.
-By providing such high level i/o primitives, the task of implementing
-EM on various non EM machines is made considerably easier.
-.P
-I/O is initiated by the MON instruction, which expects an iocode on top
-of the stack.
-Often there are also parameters which are pushed on the
-stack in reverse order, that is: last
-parameter first.
-Some i/o functions also provide results, which are returned on the stack.
-In the list of monitor calls we use several types of parameters and results,
-these types consist of integers and unsigneds of varying sizes, but never
-smaller than the wordsize, and the two pointer types.
-.N 1
-The names of the types used are:
-.IS 4
-.PS - 10
-.PT int
-an integer of wordsize
-.PT int2
-an integer whose size is the maximum of the wordsize and 2
-bytes
-.PT int4
-an integer whose size is the maximum of the wordsize and 4
-bytes
-.PT intp
-an integer with the size of a pointer
-.PT uns2
-an unsigned integer whose size is the maximum of the wordsize and 2
-.PT unsp
-an unsigned integer with the size of a pointer
-.PT ptr
-a pointer into data space
-.PE 1
-.IE 0
-The table below lists the i/o codes with their results and
-parameters.
-This list is similar to the system calls of the UNIX Version 7
-operating system.
-.BP
-.A
-To execute a monitor call, proceed as follows:
-.IS 2
-.N 1
-.PS a 4 "" )
-.PT
-Stack the parameters, in reverse order, last parameter first.
-.PT
-Push the monitor call number (iocode) onto the stack.
-.PT
-Execute the MON instruction.
-.PE 1
-.IE
-An error code is present on the top of the stack after
-execution of most monitor calls.
-If this error code is zero, the call performed the action
-requested and the results are available on top of the stack.
-Non-zero error codes indicate a failure, in this case no
-results are available and the error code has been pushed twice.
-This construction enables programs to test for failure with a
-single instruction (~TEQ or TNE~) and still find out the cause of
-the failure.
-The result name 'e' is reserved for the error code.
-.N 1
-List of monitor calls.
-.DS B
-number name    parameters      results           function
-
-   1   Exit    status:int                        Terminate this process
-   2   Fork                    e,flag,pid:int    Spawn new process
-   3   Read    fildes:int;buf:ptr;nbytes:unsp
-                               e:int;rbytes:unsp Read from file
-   4   Write   fildes:int;buf:ptr;nbytes:unsp
-                               e:int;wbytes:unsp Write on a file
-   5   Open    string:ptr;flag:int
-                               e,fildes:int      Open file for read and/or write
-   6   Close   fildes:int      e:int             Close a file
-   7   Wait                    e:int;status,pid:int2
-                                                 Wait for child
-   8   Creat   string:ptr;mode:int
-                               e,fildes:int      Create a new file
-   9   Link    string1,string2:ptr
-                               e:int             Link to a file
-  10   Unlink  string:ptr      e:int             Remove directory entry
-  12   Chdir   string:ptr      e:int             Change default directory
-  14   Mknod   string:ptr;mode,addr:int2
-                               e:int             Make a special file
-  15   Chmod   string:ptr;mode:int2
-                               e:int             Change mode of file
-  16   Chown   string:ptr;owner,group:int2
-                               e:int             Change owner/group of a file
-  18   Stat    string,statbuf:ptr
-                               e:int             Get file status
-  19   Lseek   fildes:int;off:int4;whence:int
-                               e:int;oldoff:int4 Move read/write pointer
-  20   Getpid                  pid:int2          Get process identification
-  21   Mount   special,string:ptr;rwflag:int
-                               e:int             Mount file system
-  22   Umount  special:ptr     e:int             Unmount file system
-  23   Setuid  userid:int2     e:int             Set user ID
-  24   Getuid                  e_uid,r_uid:int2  Get user ID
-  25   Stime   time:int4       e:int             Set time and date
-  26   Ptrace  request:int;pid:int2;addr:ptr;data:int
-                               e,value:int       Process trace
-  27   Alarm   seconds:uns2    previous:uns2     Schedule signal
-  28   Fstat   fildes:int;statbuf:ptr
-                               e:int             Get file status
-  29   Pause                                     Stop until signal
-  30   Utime   string,timep:ptr
-                               e:int             Set file times
-  33   Access  string,mode:int e:int             Determine file accessibility
-  34   Nice    incr:int                          Set program priority
-  35   Ftime   bufp:ptr        e:int             Get date and time
-  36   Sync                                      Update filesystem
-  37   Kill    pid:int2;sig:int
-                               e:int             Send signal to a process
-  41   Dup     fildes,newfildes:int
-                               e,fildes:int      Duplicate a file descriptor
-  42   Pipe                    e,w_des,r_des:int Create a pipe
-  43   Times   buffer:ptr                        Get process times
-  44   Profil  buff:ptr;bufsiz,offset,scale:intp Execution time profile
-  46   Setgid  gid:int2        e:int             Set group ID
-  47   Getgid                  e_gid,r_gid:int   Get group ID
-  48   Sigtrp  trapno,signo:int
-                               e,prevtrap:int    See below
-  51   Acct    file:ptr        e:int             Turn accounting on or off
-  53   Lock    flag:int        e:int             Lock a process
-  54   Ioctl   fildes,request:int;argp:ptr
-                               e:int             Control device
-  56   Mpxcall cmd:int;vec:ptr e:int             Multiplexed file handling
-  59   Exece   name,argv,envp:ptr
-                               e:int             Execute a file
-  60   Umask   complmode:int2  oldmask:int2      Set file creation mode mask
-  61   Chroot  string:ptr      e:int             Change root directory
-.DE 1
-Codes 0, 11, 13, 17, 31, 32, 38, 39, 40, 45, 49, 50, 52,
-55, 57, 58, 62, and 63 are
-not used.
-.P
-All monitor calls, except fork and sigtrp
-are the same as the UNIX version 7 system calls.
-.P
-The sigtrp entry maps UNIX signals onto EM interrupts.
-Normally, trapno is in the range 0 to 252.
-In that case it requests that signal signo
-will cause trap trapno to occur.
-When given trap number -2, default signal handling is reset, and when given
-trap number -3, the signal is ignored.
-.P
-The flag returned by fork is 1 in the child process and 0 in
-the parent.
-The pid returned is the process-id of the other process.
-.BP
-.S1 "TRAPS AND INTERRUPTS"
-EM provides a means for the user program to catch all traps
-generated by the program itself, the hardware, or external conditions.
-This mechanism uses five instructions: LIM, SIM, SIG, TRP and RTT.
-This section of the manual may be omitted on the first reading since it
-presupposes knowledge of the EM instruction set.
-.P
-The action taken when a trap occures is determined by the value
-of an internal EM trap register.
-This register contains a pointer to a procedure.
-Initially the pointer used is zero and all traps halt the
-program with, hopefully, a useful message to the outside world.
-The SIG instruction can be used to alter the trap register,
-it pops a procedure pointer from the
-stack into the trap register.
-When a trap occurs after storing a nonzero value in the trap
-register, the procedure pointed to by the trap register
-is called with the trap number
-as the only parameter (see below).
-SIG returns the previous value of the trap register on the
-stack.
-Two consecutive SIGs are a no-op.
-When a trap occurs, the trap register is reset to its initial
-condition, to prevent recursive traps from hanging the machine up,
-e.g. stack overflow in the stack overflow handling procedure.
-.P
-The runtime systems for some languages need to ignore some EM
-traps.
-EM offers a feature called the ignore mask.
-It contains one bit for each of the lowest 16 trap numbers.
-The bits are numbered 0 to 15, with the least significant bit
-having number 0.
-If a certain bit is 1 the corresponding trap never
-occurs and processing simply continues.
-The actions performed by the offending instruction are
-described by the Pascal program in appendix A.
-.N
-If the bit is 0, traps are not ignored.
-The instructions LIM and SIM allow copying and replacement of
-the ignore mask.~
-.P
-The TRP instruction generates a trap, the trap number being found on the
-stack.
-This is, among other things,
-useful for library procedures and runtime systems.
-It can also be used by a low level trap procedure to pass the trap to a
-higher level one (see example below).
-.P
-The RTT instruction returns from the trap procedure and continues after the
-trap.
-In the list below all traps marked with an asterisk ('*') are
-considered to be fatal and it is explicitly undefined what happens if
-you try to restart after the trap.
-.P
-The way a trap procedure is called is completely compatible
-with normal calling conventions. The only way a trap procedure
-differs from normal procedures is the return. It has to use RTT instead
-of RET. This is necessary because the complete runtime status is saved on the
-stack before calling the procedure and all this status has to be reloaded.
-Error numbers are in the range 0 to 252.
-The trap numbers are divided into three categories:
-.IS 4
-.N 1
-.PS - 10
-.PT ~~0-~63
-EM machine errors, e.g. illegal instruction.
-.PS - 8
-.PT ~0-15
-maskable
-.PT 16-63
-not maskable
-.PE
-.PT ~64-127
-Reserved for use by compilers, run time systems, etc.
-.PT 128-252
-Available for user programs.
-.PE 1
-.IE
-EM machine errors are numbered as follows:
-.DS I 5
-.TS
-tab(@);
-n l l.
-0@EARRAY@Array bound error
-1@ERANGE@Range bound error
-2@ESET@Set bound error
-3@EIOVFL@Integer overflow
-4@EFOVFL@Floating overflow
-5@EFUNFL@Floating underflow
-6@EIDIVZ@Divide by 0
-7@EFDIVZ@Divide by 0.0
-8@EIUND@Undefined integer
-9@EFUND@Undefined float
-10@ECONV@Conversion error
-16*@ESTACK@Stack overflow
-17*@EHEAP@Heap overflow
-18*@EILLINS@Illegal instruction
-19*@EODDZ@Illegal size argument
-20*@ECASE@Case error
-21*@EMEMFLT@Addressing non existent memory
-22*@EBADPTR@Bad pointer used
-23*@EBADPC@Program counter out of range
-24@EBADLAE@Bad argument of LAE
-25@EBADMON@Bad monitor call
-26@EBADLIN@Argument of LIN too high
-27@EBADGTO@GTO descriptor error
-.TE
-.DE 0
-.P
-As an example,
-suppose a subprocedure has to be written to do a numeric
-calculation.
-When an overflow occurs the computation has to be stopped and
-the higher level procedure must be resumed.
-This can be programmed as follows using the mechanism described above:
-.DS B
- mes 2,2,2              ; set sizes
-ersave
- bss 2,0,0              ; Room to save previous value of trap procedure
-msave
- bss 2,0,0              ; Room to save previous value of trap mask
-
- pro calcule,0          ; entry point
- lxl 0                  ; fill in non-local goto descriptor with LB
- ste jmpbuf+4
- lor 1                  ; and SP
- ste jmpbuf+2
- lim                    ; get current ignore mask
- ste msave              ; save it
- lim
- loc 16                  ; bit for EFOVFL
- ior 2                  ; set in mask
- sim                    ; ignore EFOVFL from now on
- lpi $catch             ; load procedure identifier
- sig                    ; catch wil get all traps now
- ste ersave             ; save previous trap procedure identifier
-; perform calculation now, possibly generating overflow
-1                       ; label jumped to by catch procedure
- loe ersave             ; get old trap procedure
- sig                    ; refer all following trap to old procedure
- asp 2                  ; remove result of sig
- loe msave              ; restore previous mask
- sim                    ; done now
-; load result of calculation
- ret 2                  ; return result
-jmpbuf
- con *1,0,0
- end
-.DE 0
-.VS 1 1
-.DS
-Example of catch procedure
- pro catch,0            ; Local procedure that must catch the overflow trap
- lol 2                  ; Load trap number
- loc 4                  ; check for overflow
- bne *1                 ; if other trap, call higher trap procedure
- gto jmpbuf             ; return to procedure calcule
-1                       ; other trap has occurred
- loe ersave             ; previous trap procedure
- sig                    ; other procedure will get the traps now
- asp 2                  ; remove the result of sig
- lol 2                  ; stack trap number
- trp                    ; call other trap procedure
- rtt                    ; if other procedure returns, do the same
- end
-.DE

+ 0 - 2922
doc/em/itables

@@ -1,2922 +0,0 @@
-.TS
-.if \n+(b.=1 .nr d. \n(.c-\n(c.-1
-.de 35
-.ps \n(.s
-.vs \n(.vu
-.in \n(.iu
-.if \n(.u .fi
-.if \n(.j .ad
-.if \n(.j=0 .na
-..
-.nf
-.nr #~ 0
-.if \n(.T .if n .nr #~ 0.6n
-.ds #d .d
-.if \(ts\n(.z\(ts\(ts .ds #d nl
-.fc
-.nr 33 \n(.s
-.rm 66 67 68 69 70 71 72 73 74 75 76 77
-.nr 66 0
-.nr 38 \waar
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wadp
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wadp
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wasp
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wbeq
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wble
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wbne
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wbra
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wcff
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wcmf
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wcms
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wdec
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wdup
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wfil
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wine
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \winn
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlae
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlal
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlal
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wldc
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wldl
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlfr
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlil
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlni
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wloc
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wloe
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlof
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wloi
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlol
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlol
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlxa
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wmli
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wret
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wsbf
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wset
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wsli
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wstf
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wsti
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wstl
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wstl
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wtgt
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wzeq
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wzge
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wzlt
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wzre
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wzrl
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \waar
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wadi
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wads
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wand
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wass
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wbgt
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wbls
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wbne
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wcfi
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wcmf
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wcmi
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wcmu
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wcom
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wcsb
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wcui
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wdel
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wdus
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wdvf
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wdvu
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wfef
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \winl
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \winn
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlar
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wldf
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlfr
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlim
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlor
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlxl
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wmli
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wmlu
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wngf
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wnop
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wret
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wrmu
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wrol
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wrtt
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wsbf
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wsbi
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wsbu
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wsdf
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wset
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wsil
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wsli
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wslu
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wsru
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wsts
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wtge
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wxor
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wzer
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wzle
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wzrf
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wdch
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wexg
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wldc
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlal
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wldl
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlil
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlof
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wlpi
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wbeq
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wble
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wbne
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wdee
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wfil
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \winl
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wsde
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wsdl
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wste
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wstl
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wzgt
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wzne
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 38 \wzrl
-.if \n(66<\n(38 .nr 66 \n(38
-.66
-.rm 66
-.nr 38 4n
-.if \n(66<\n(38 .nr 66 \n(38
-.nr 67 0
-.nr 38 \wmwPo
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsN
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wmwPo
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wmwPo
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsw
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wN2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wswP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wmP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wmP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wmwP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wmN
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \ww2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wmwPo
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wmPo
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wwP2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wmwN
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wmPo
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wmwPo
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wmwPo
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wmPo
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wwP2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wmwN
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wsP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \ww2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wswN
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wewP2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wewP2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wesP
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wewP2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we2
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \we-
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wN4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wwP4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wwN4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \ww4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wwP4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wwN4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \ww4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wwN4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \w4
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 38 \wwN4
-.if \n(67<\n(38 .nr 67 \n(38
-.67
-.rm 67
-.nr 38 6n
-.if \n(67<\n(38 .nr 67 \n(38
-.nr 68 0
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w5
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w2
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w2
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w4
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w8
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w2
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w5
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 38 \w1
-.if \n(68<\n(38 .nr 68 \n(38
-.68
-.rm 68
-.nr 38 2n
-.if \n(68<\n(38 .nr 68 \n(38
-.nr 69 0
-.nr 38 \w34
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w38
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w42
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w45
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w52
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w55
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w58
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w62
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w93
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w96
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w100
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w103
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w106
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w109
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w112
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w117
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w120
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w129
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w132
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w136
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w139
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w143
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w146
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w150
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w152
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w155
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w162
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w168
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w174
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w180
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w190
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w194
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w199
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w202
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w206
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w209
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w214
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w218
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w224
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w228
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w235
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w238
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w242
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w245
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w248
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w252
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w1
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w4
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w7
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w10
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w13
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w16
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w19
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w22
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w25
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w28
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w31
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w34
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w37
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w40
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w43
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w46
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w49
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w52
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w55
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w58
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w61
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w64
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w67
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w70
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w73
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w76
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w79
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w82
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w85
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w88
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w91
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w94
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w97
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w100
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w103
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w106
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w109
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w112
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w115
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w118
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w121
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w124
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w127
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w130
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w133
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w136
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w139
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w142
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w145
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w148
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w151
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w154
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w157
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w0
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w3
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w6
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w9
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w12
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w15
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w18
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w21
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w24
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w27
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w30
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w33
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w36
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w39
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w42
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w45
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w48
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w51
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 38 \w54
-.if \n(69<\n(38 .nr 69 \n(38
-.69
-.rm 69
-.nr 38 5n
-.if \n(69<\n(38 .nr 69 \n(38
-.nr 70 0
-.nr 38 \wadf
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wadp
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wads
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wasp
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wbge
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wblm
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wbra
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wcal
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wcif
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wcmi
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wcsa
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wdee
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wdvf
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \winc
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \winl
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wior
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlae
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlal
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlal
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlde
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wldl
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlil
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlin
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wloc
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wloc
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wloe
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlof
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wloi
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlol
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlol
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlxl
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wrck
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wrmi
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsbi
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsil
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wste
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wstf
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsti
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wstl
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wstl
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wtlt
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wzeq
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wzgt
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wzne
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wzre
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wzrl
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wadf
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wadi
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wadu
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wand
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wass
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wble
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wbls
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wcai
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wcfu
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wcmf
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wcms
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wcmu
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wcsa
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wcsb
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wcuu
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wdel
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wdus
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wdvi
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wdvu
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wfif
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \winl
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wior
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlar
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wldl
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlil
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlos
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlpi
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wmlf
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wmli
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wmon
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wngi
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wrck
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wrmi
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wrmu
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wror
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsar
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsbf
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsbs
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsbu
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsdl
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wset
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsil
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsli
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsri
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsru
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsts
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wtle
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wxor
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wzge
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wzlt
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wzrf
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wexg
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlpb
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlae
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlde
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wldl
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wloc
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wlol
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wadp
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wbge
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wblm
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wbra
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wdel
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wgto
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \winl
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsdf
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wsil
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wstf
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wzeq
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wzle
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 38 \wzre
-.if \n(70<\n(38 .nr 70 \n(38
-.70
-.rm 70
-.nr 38 4n
-.if \n(70<\n(38 .nr 70 \n(38
-.nr 71 0
-.nr 38 \wsP
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmPo
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmwPo
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wswP
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wsP
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wsP
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmPo
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmwPo
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmwPo
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wsw
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wsP
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmwN
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmwPo
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wsw
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmP
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wswN
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \ww2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wswN
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wswN
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wsP
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wsw
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wsP
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmwPo
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wwN2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wswP
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmPo
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmwPo
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmwPo
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmwPo
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wswN
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \ww2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmwPo
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wmwPo
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wwN2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wswN
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wsP
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wsP
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wsP
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wsw
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wwN2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wewN2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wewN2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wewP2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wewP2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wewP2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wewN2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we2
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wesP
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \we-
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \ww4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wwN4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wwP4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wwP4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wwN4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \wwP4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \w4
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 38 \ww4
-.if \n(71<\n(38 .nr 71 \n(38
-.71
-.rm 71
-.nr 38 6n
-.if \n(71<\n(38 .nr 71 \n(38
-.nr 72 0
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w2
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w28
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w2
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w3
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w7
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w2
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w5
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w4
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w2
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w2
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w2
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w4
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w2
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 38 \w1
-.if \n(72<\n(38 .nr 72 \n(38
-.72
-.rm 72
-.nr 38 2n
-.if \n(72<\n(38 .nr 72 \n(38
-.nr 73 0
-.nr 38 \w35
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w39
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w43
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w50
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w53
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w56
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w59
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w64
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w94
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w97
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w101
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w104
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w107
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w110
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w113
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w118
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w121
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w130
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w133
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w137
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w140
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w144
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w148
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w151
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w153
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w156
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w166
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w169
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w175
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w188
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w191
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w196
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w200
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w203
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w207
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w210
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w215
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w219
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w225
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w233
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w236
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w239
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w243
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w246
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w249
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w253
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w2
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w5
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w8
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w11
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w14
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w17
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w20
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w23
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w26
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w29
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w32
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w35
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w38
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w41
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w44
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w47
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w50
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w53
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w56
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w59
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w62
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w65
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w68
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w71
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w74
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w77
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w80
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w83
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w86
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w89
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w92
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w95
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w98
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w101
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w104
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w107
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w110
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w113
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w116
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w119
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w122
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w125
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w128
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w131
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w134
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w137
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w140
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w143
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w146
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w149
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w152
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w155
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w158
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w1
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w4
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w7
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w10
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w13
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w16
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w19
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w22
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w25
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w28
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w31
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w34
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w37
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w40
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w43
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w46
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w49
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 38 \w52
-.if \n(73<\n(38 .nr 73 \n(38
-.73
-.rm 73
-.nr 38 5n
-.if \n(73<\n(38 .nr 73 \n(38
-.nr 74 0
-.nr 38 \wadi
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wadp
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wand
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wbeq
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wbgt
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wblt
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wbra
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wcal
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wcii
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wcmp
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wcsb
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wdel
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wdvi
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wine
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \winl
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wior
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlal
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlal
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlar
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlde
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlfr
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlil
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlin
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wloc
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wloc
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlof
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wloi
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wloi
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlol
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlol
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wmlf
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wret
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsar
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsdl
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsil
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wste
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wstf
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsti
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wstl
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wteq
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wtne
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wzer
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wzle
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wzne
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wzrl
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \waar
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wadf
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wads
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wadu
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wasp
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wbge
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wblm
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wblt
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wcal
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wciu
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wcmi
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wcms
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wcom
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wcsa
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wcuf
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wdee
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wdup
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wdvf
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wdvi
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wfef
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wfif
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \winn
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wior
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wldc
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wldl
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlil
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlos
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlxa
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wmlf
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wmlu
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wngf
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wngi
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wrck
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wrmi
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wrol
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wror
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsar
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsbi
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsbs
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsde
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsdl
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsig
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsim
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wslu
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsri
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsti
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wstr
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wtrp
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wzer
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wzgt
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wzne
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wzrl
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wexg
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wgto
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlal
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wldf
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlil
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wloe
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlol
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wasp
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wbgt
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wblt
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wcal
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wdel
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wine
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wlin
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsdl
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wsil
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wstl
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wzge
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wzlt
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 38 \wzrl
-.if \n(74<\n(38 .nr 74 \n(38
-.74
-.rm 74
-.nr 38 4n
-.if \n(74<\n(38 .nr 74 \n(38
-.nr 75 0
-.nr 38 \wmwPo
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wmwPo
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \w2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsN
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \w-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \w-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wmwPo
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wswN
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wmwPo
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \ww2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wswN
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wP2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wmN
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wmwPo
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsw
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wmwPo
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wswP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wmP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsN
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \w2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \w2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wmwP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wswN
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wmwP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wmwPo
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wswN
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wswP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsw
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wmwP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \w-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \w-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wsN
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wmwN
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wew2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wew2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wewN2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wewN2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wewN2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wesP
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we-
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wewP2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \we2
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wP4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \w4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wwP4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \ww4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wwN4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \ww4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \w4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \w4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \w4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wwN4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \ww4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \w4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wwP4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wwN4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wwP4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \w4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \w4
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 38 \wwP4
-.if \n(75<\n(38 .nr 75 \n(38
-.75
-.rm 75
-.nr 38 6n
-.if \n(75<\n(38 .nr 75 \n(38
-.nr 76 0
-.nr 38 \w2
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w2
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w2
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w34
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w4
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w2
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w3
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w2
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w2
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 38 \w1
-.if \n(76<\n(38 .nr 76 \n(38
-.76
-.rm 76
-.nr 38 2n
-.if \n(76<\n(38 .nr 76 \n(38
-.nr 77 0
-.nr 38 \w36
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w41
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w44
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w51
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w54
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w57
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w60
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w92
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w95
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w99
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w102
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w105
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w108
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w111
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w116
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w119
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w128
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w131
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w135
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w138
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w141
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w145
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w149
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w0
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w154
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w161
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w167
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w173
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w176
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w189
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w193
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w197
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w201
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w205
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w208
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w211
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w217
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w223
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w226
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w234
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w237
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w241
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w244
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w247
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w250
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w0
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w3
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w6
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w9
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w12
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w15
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w18
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w21
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w24
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w27
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w30
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w33
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w36
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w39
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w42
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w45
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w48
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w51
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w54
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w57
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w60
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w63
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w66
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w69
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w72
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w75
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w78
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w81
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w84
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w87
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w90
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w93
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w96
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w99
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w102
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w105
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w108
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w111
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w114
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w117
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w120
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w123
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w126
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w129
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w132
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w135
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w138
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w141
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w144
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w147
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w150
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w153
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w156
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w159
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w2
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w5
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w8
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w11
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w14
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w17
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w20
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w23
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w26
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w29
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w32
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w35
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w38
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w41
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w44
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w47
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w50
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 \w53
-.if \n(77<\n(38 .nr 77 \n(38
-.77
-.rm 77
-.nr 38 5n
-.if \n(77<\n(38 .nr 77 \n(38
-.nr 38 1n
-.nr 65 0
-.nr 40 \n(65+((0*\n(38)/2)
-.nr 66 +\n(40
-.nr 41 \n(66+((0*\n(38)/2)
-.nr 67 +\n(41
-.nr 42 \n(67+((0*\n(38)/2)
-.nr 68 +\n(42
-.nr 43 \n(68+((0*\n(38)/2)
-.nr 69 +\n(43
-.nr 44 \n(69+((16*\n(38)/2)
-.nr 70 +\n(44
-.nr 45 \n(70+((0*\n(38)/2)
-.nr 71 +\n(45
-.nr 46 \n(71+((0*\n(38)/2)
-.nr 72 +\n(46
-.nr 47 \n(72+((0*\n(38)/2)
-.nr 73 +\n(47
-.nr 48 \n(73+((16*\n(38)/2)
-.nr 74 +\n(48
-.nr 49 \n(74+((0*\n(38)/2)
-.nr 75 +\n(49
-.nr 50 \n(75+((0*\n(38)/2)
-.nr 76 +\n(50
-.nr 51 \n(76+((0*\n(38)/2)
-.nr 77 +\n(51
-.nr TW \n(77
-.if t .if (\n(TW+\n(.o)>7.65i .tm Table at line 121 file Input is too wide - \n(TW units
-.fc  
-.nr #T 0-1
-.nr #a 0-1
-.eo
-.de T#
-.nr 35 1m
-.ds #d .d
-.if \(ts\n(.z\(ts\(ts .ds #d nl
-.mk ##
-.nr ## -1v
-.ls 1
-.ls
-..
-.ec
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'aar\h'|\n(41u'mwPo\h'|\n(42u'1\h'|\n(43u'34\h'|\n(44u'adf\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'35\h'|\n(48u'adi\h'|\n(49u'mwPo\h'|\n(50u'2\h'|\n(51u'36
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'adp\h'|\n(41u'2\h'|\n(42u'\h'|\n(43u'38\h'|\n(44u'adp\h'|\n(45u'mPo\h'|\n(46u'2\h'|\n(47u'39\h'|\n(48u'adp\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'41
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'adp\h'|\n(41u'sN\h'|\n(42u'1\h'|\n(43u'42\h'|\n(44u'ads\h'|\n(45u'mwPo\h'|\n(46u'1\h'|\n(47u'43\h'|\n(48u'and\h'|\n(49u'mwPo\h'|\n(50u'1\h'|\n(51u'44
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'asp\h'|\n(41u'mwPo\h'|\n(42u'5\h'|\n(43u'45\h'|\n(44u'asp\h'|\n(45u'swP\h'|\n(46u'1\h'|\n(47u'50\h'|\n(48u'beq\h'|\n(49u'2\h'|\n(50u'\h'|\n(51u'51
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'beq\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'52\h'|\n(44u'bge\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'53\h'|\n(48u'bgt\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'54
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'ble\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'55\h'|\n(44u'blm\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'56\h'|\n(48u'blt\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'57
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'bne\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'58\h'|\n(44u'bra\h'|\n(45u'2\h'|\n(46u'\h'|\n(47u'59\h'|\n(48u'bra\h'|\n(49u'sN\h'|\n(50u'2\h'|\n(51u'60
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'bra\h'|\n(41u'sP\h'|\n(42u'2\h'|\n(43u'62\h'|\n(44u'cal\h'|\n(45u'mPo\h'|\n(46u'28\h'|\n(47u'64\h'|\n(48u'cal\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'92
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'cff\h'|\n(41u'-\h'|\n(42u'\h'|\n(43u'93\h'|\n(44u'cif\h'|\n(45u'-\h'|\n(46u'\h'|\n(47u'94\h'|\n(48u'cii\h'|\n(49u'-\h'|\n(50u'\h'|\n(51u'95
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'cmf\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'96\h'|\n(44u'cmi\h'|\n(45u'mwPo\h'|\n(46u'2\h'|\n(47u'97\h'|\n(48u'cmp\h'|\n(49u'-\h'|\n(50u'\h'|\n(51u'99
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'cms\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'100\h'|\n(44u'csa\h'|\n(45u'mwPo\h'|\n(46u'1\h'|\n(47u'101\h'|\n(48u'csb\h'|\n(49u'mwPo\h'|\n(50u'1\h'|\n(51u'102
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'dec\h'|\n(41u'-\h'|\n(42u'\h'|\n(43u'103\h'|\n(44u'dee\h'|\n(45u'sw\h'|\n(46u'1\h'|\n(47u'104\h'|\n(48u'del\h'|\n(49u'swN\h'|\n(50u'1\h'|\n(51u'105
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'dup\h'|\n(41u'mwPo\h'|\n(42u'1\h'|\n(43u'106\h'|\n(44u'dvf\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'107\h'|\n(48u'dvi\h'|\n(49u'mwPo\h'|\n(50u'1\h'|\n(51u'108
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'fil\h'|\n(41u'2\h'|\n(42u'\h'|\n(43u'109\h'|\n(44u'inc\h'|\n(45u'-\h'|\n(46u'\h'|\n(47u'110\h'|\n(48u'ine\h'|\n(49u'w2\h'|\n(50u'\h'|\n(51u'111
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'ine\h'|\n(41u'sw\h'|\n(42u'1\h'|\n(43u'112\h'|\n(44u'inl\h'|\n(45u'mwN\h'|\n(46u'3\h'|\n(47u'113\h'|\n(48u'inl\h'|\n(49u'swN\h'|\n(50u'1\h'|\n(51u'116
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'inn\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'117\h'|\n(44u'ior\h'|\n(45u'mwPo\h'|\n(46u'1\h'|\n(47u'118\h'|\n(48u'ior\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'119
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lae\h'|\n(41u'2\h'|\n(42u'\h'|\n(43u'120\h'|\n(44u'lae\h'|\n(45u'sw\h'|\n(46u'7\h'|\n(47u'121\h'|\n(48u'lal\h'|\n(49u'P2\h'|\n(50u'\h'|\n(51u'128
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lal\h'|\n(41u'N2\h'|\n(42u'\h'|\n(43u'129\h'|\n(44u'lal\h'|\n(45u'mP\h'|\n(46u'1\h'|\n(47u'130\h'|\n(48u'lal\h'|\n(49u'mN\h'|\n(50u'1\h'|\n(51u'131
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lal\h'|\n(41u'swP\h'|\n(42u'1\h'|\n(43u'132\h'|\n(44u'lal\h'|\n(45u'swN\h'|\n(46u'2\h'|\n(47u'133\h'|\n(48u'lar\h'|\n(49u'mwPo\h'|\n(50u'1\h'|\n(51u'135
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'ldc\h'|\n(41u'mP\h'|\n(42u'1\h'|\n(43u'136\h'|\n(44u'lde\h'|\n(45u'w2\h'|\n(46u'\h'|\n(47u'137\h'|\n(48u'lde\h'|\n(49u'sw\h'|\n(50u'1\h'|\n(51u'138
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'ldl\h'|\n(41u'mP\h'|\n(42u'1\h'|\n(43u'139\h'|\n(44u'ldl\h'|\n(45u'swN\h'|\n(46u'1\h'|\n(47u'140\h'|\n(48u'lfr\h'|\n(49u'mwPo\h'|\n(50u'2\h'|\n(51u'141
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lfr\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'143\h'|\n(44u'lil\h'|\n(45u'swN\h'|\n(46u'1\h'|\n(47u'144\h'|\n(48u'lil\h'|\n(49u'swP\h'|\n(50u'1\h'|\n(51u'145
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lil\h'|\n(41u'mwP\h'|\n(42u'2\h'|\n(43u'146\h'|\n(44u'lin\h'|\n(45u'2\h'|\n(46u'\h'|\n(47u'148\h'|\n(48u'lin\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'149
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lni\h'|\n(41u'-\h'|\n(42u'\h'|\n(43u'150\h'|\n(44u'loc\h'|\n(45u'2\h'|\n(46u'\h'|\n(47u'151\h'|\n(48u'loc\h'|\n(49u'mP\h'|\n(50u'34\h'|\n(51u'0
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'loc\h'|\n(41u'mN\h'|\n(42u'1\h'|\n(43u'152\h'|\n(44u'loc\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'153\h'|\n(48u'loc\h'|\n(49u'sN\h'|\n(50u'1\h'|\n(51u'154
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'loe\h'|\n(41u'w2\h'|\n(42u'\h'|\n(43u'155\h'|\n(44u'loe\h'|\n(45u'sw\h'|\n(46u'5\h'|\n(47u'156\h'|\n(48u'lof\h'|\n(49u'2\h'|\n(50u'\h'|\n(51u'161
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lof\h'|\n(41u'mwPo\h'|\n(42u'4\h'|\n(43u'162\h'|\n(44u'lof\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'166\h'|\n(48u'loi\h'|\n(49u'2\h'|\n(50u'\h'|\n(51u'167
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'loi\h'|\n(41u'mPo\h'|\n(42u'1\h'|\n(43u'168\h'|\n(44u'loi\h'|\n(45u'mwPo\h'|\n(46u'4\h'|\n(47u'169\h'|\n(48u'loi\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'173
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lol\h'|\n(41u'wP2\h'|\n(42u'\h'|\n(43u'174\h'|\n(44u'lol\h'|\n(45u'wN2\h'|\n(46u'\h'|\n(47u'175\h'|\n(48u'lol\h'|\n(49u'mwP\h'|\n(50u'4\h'|\n(51u'176
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lol\h'|\n(41u'mwN\h'|\n(42u'8\h'|\n(43u'180\h'|\n(44u'lol\h'|\n(45u'swP\h'|\n(46u'1\h'|\n(47u'188\h'|\n(48u'lol\h'|\n(49u'swN\h'|\n(50u'1\h'|\n(51u'189
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lxa\h'|\n(41u'mPo\h'|\n(42u'1\h'|\n(43u'190\h'|\n(44u'lxl\h'|\n(45u'mPo\h'|\n(46u'2\h'|\n(47u'191\h'|\n(48u'mlf\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'193
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'mli\h'|\n(41u'mwPo\h'|\n(42u'2\h'|\n(43u'194\h'|\n(44u'rck\h'|\n(45u'mwPo\h'|\n(46u'1\h'|\n(47u'196\h'|\n(48u'ret\h'|\n(49u'mwP\h'|\n(50u'2\h'|\n(51u'197
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'ret\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'199\h'|\n(44u'rmi\h'|\n(45u'mwPo\h'|\n(46u'1\h'|\n(47u'200\h'|\n(48u'sar\h'|\n(49u'mwPo\h'|\n(50u'1\h'|\n(51u'201
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'sbf\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'202\h'|\n(44u'sbi\h'|\n(45u'mwPo\h'|\n(46u'2\h'|\n(47u'203\h'|\n(48u'sdl\h'|\n(49u'swN\h'|\n(50u'1\h'|\n(51u'205
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'set\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'206\h'|\n(44u'sil\h'|\n(45u'swN\h'|\n(46u'1\h'|\n(47u'207\h'|\n(48u'sil\h'|\n(49u'swP\h'|\n(50u'1\h'|\n(51u'208
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'sli\h'|\n(41u'mwPo\h'|\n(42u'1\h'|\n(43u'209\h'|\n(44u'ste\h'|\n(45u'w2\h'|\n(46u'\h'|\n(47u'210\h'|\n(48u'ste\h'|\n(49u'sw\h'|\n(50u'3\h'|\n(51u'211
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'stf\h'|\n(41u'2\h'|\n(42u'\h'|\n(43u'214\h'|\n(44u'stf\h'|\n(45u'mwPo\h'|\n(46u'2\h'|\n(47u'215\h'|\n(48u'stf\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'217
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'sti\h'|\n(41u'mPo\h'|\n(42u'1\h'|\n(43u'218\h'|\n(44u'sti\h'|\n(45u'mwPo\h'|\n(46u'4\h'|\n(47u'219\h'|\n(48u'sti\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'223
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'stl\h'|\n(41u'wP2\h'|\n(42u'\h'|\n(43u'224\h'|\n(44u'stl\h'|\n(45u'wN2\h'|\n(46u'\h'|\n(47u'225\h'|\n(48u'stl\h'|\n(49u'mwP\h'|\n(50u'2\h'|\n(51u'226
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'stl\h'|\n(41u'mwN\h'|\n(42u'5\h'|\n(43u'228\h'|\n(44u'stl\h'|\n(45u'swN\h'|\n(46u'1\h'|\n(47u'233\h'|\n(48u'teq\h'|\n(49u'-\h'|\n(50u'\h'|\n(51u'234
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'tgt\h'|\n(41u'-\h'|\n(42u'\h'|\n(43u'235\h'|\n(44u'tlt\h'|\n(45u'-\h'|\n(46u'\h'|\n(47u'236\h'|\n(48u'tne\h'|\n(49u'-\h'|\n(50u'\h'|\n(51u'237
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'zeq\h'|\n(41u'2\h'|\n(42u'\h'|\n(43u'238\h'|\n(44u'zeq\h'|\n(45u'sP\h'|\n(46u'2\h'|\n(47u'239\h'|\n(48u'zer\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'241
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'zge\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'242\h'|\n(44u'zgt\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'243\h'|\n(48u'zle\h'|\n(49u'sP\h'|\n(50u'1\h'|\n(51u'244
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'zlt\h'|\n(41u'sP\h'|\n(42u'1\h'|\n(43u'245\h'|\n(44u'zne\h'|\n(45u'sP\h'|\n(46u'1\h'|\n(47u'246\h'|\n(48u'zne\h'|\n(49u'sN\h'|\n(50u'1\h'|\n(51u'247
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'zre\h'|\n(41u'w2\h'|\n(42u'\h'|\n(43u'248\h'|\n(44u'zre\h'|\n(45u'sw\h'|\n(46u'1\h'|\n(47u'249\h'|\n(48u'zrl\h'|\n(49u'mwN\h'|\n(50u'2\h'|\n(51u'250
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'zrl\h'|\n(41u'swN\h'|\n(42u'1\h'|\n(43u'252\h'|\n(44u'zrl\h'|\n(45u'wN2\h'|\n(46u'\h'|\n(47u'253\h'|\n(48u'aar\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'0
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'aar\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'1\h'|\n(44u'adf\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'2\h'|\n(48u'adf\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'3
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'adi\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'4\h'|\n(44u'adi\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'5\h'|\n(48u'ads\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'6
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'ads\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'7\h'|\n(44u'adu\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'8\h'|\n(48u'adu\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'9
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'and\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'10\h'|\n(44u'and\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'11\h'|\n(48u'asp\h'|\n(49u'ew2\h'|\n(50u'\h'|\n(51u'12
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'ass\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'13\h'|\n(44u'ass\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'14\h'|\n(48u'bge\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'15
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'bgt\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'16\h'|\n(44u'ble\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'17\h'|\n(48u'blm\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'18
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'bls\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'19\h'|\n(44u'bls\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'20\h'|\n(48u'blt\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'21
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'bne\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'22\h'|\n(44u'cai\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'23\h'|\n(48u'cal\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'24
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'cfi\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'25\h'|\n(44u'cfu\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'26\h'|\n(48u'ciu\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'27
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'cmf\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'28\h'|\n(44u'cmf\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'29\h'|\n(48u'cmi\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'30
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'cmi\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'31\h'|\n(44u'cms\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'32\h'|\n(48u'cms\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'33
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'cmu\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'34\h'|\n(44u'cmu\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'35\h'|\n(48u'com\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'36
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'com\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'37\h'|\n(44u'csa\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'38\h'|\n(48u'csa\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'39
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'csb\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'40\h'|\n(44u'csb\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'41\h'|\n(48u'cuf\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'42
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'cui\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'43\h'|\n(44u'cuu\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'44\h'|\n(48u'dee\h'|\n(49u'ew2\h'|\n(50u'\h'|\n(51u'45
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'del\h'|\n(41u'ewP2\h'|\n(42u'\h'|\n(43u'46\h'|\n(44u'del\h'|\n(45u'ewN2\h'|\n(46u'\h'|\n(47u'47\h'|\n(48u'dup\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'48
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'dus\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'49\h'|\n(44u'dus\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'50\h'|\n(48u'dvf\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'51
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'dvf\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'52\h'|\n(44u'dvi\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'53\h'|\n(48u'dvi\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'54
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'dvu\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'55\h'|\n(44u'dvu\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'56\h'|\n(48u'fef\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'57
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'fef\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'58\h'|\n(44u'fif\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'59\h'|\n(48u'fif\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'60
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'inl\h'|\n(41u'ewP2\h'|\n(42u'\h'|\n(43u'61\h'|\n(44u'inl\h'|\n(45u'ewN2\h'|\n(46u'\h'|\n(47u'62\h'|\n(48u'inn\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'63
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'inn\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'64\h'|\n(44u'ior\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'65\h'|\n(48u'ior\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'66
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lar\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'67\h'|\n(44u'lar\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'68\h'|\n(48u'ldc\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'69
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'ldf\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'70\h'|\n(44u'ldl\h'|\n(45u'ewP2\h'|\n(46u'\h'|\n(47u'71\h'|\n(48u'ldl\h'|\n(49u'ewN2\h'|\n(50u'\h'|\n(51u'72
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lfr\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'73\h'|\n(44u'lil\h'|\n(45u'ewP2\h'|\n(46u'\h'|\n(47u'74\h'|\n(48u'lil\h'|\n(49u'ewN2\h'|\n(50u'\h'|\n(51u'75
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lim\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'76\h'|\n(44u'los\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'77\h'|\n(48u'los\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'78
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lor\h'|\n(41u'esP\h'|\n(42u'1\h'|\n(43u'79\h'|\n(44u'lpi\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'80\h'|\n(48u'lxa\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'81
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lxl\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'82\h'|\n(44u'mlf\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'83\h'|\n(48u'mlf\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'84
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'mli\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'85\h'|\n(44u'mli\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'86\h'|\n(48u'mlu\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'87
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'mlu\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'88\h'|\n(44u'mon\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'89\h'|\n(48u'ngf\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'90
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'ngf\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'91\h'|\n(44u'ngi\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'92\h'|\n(48u'ngi\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'93
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'nop\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'94\h'|\n(44u'rck\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'95\h'|\n(48u'rck\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'96
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'ret\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'97\h'|\n(44u'rmi\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'98\h'|\n(48u'rmi\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'99
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'rmu\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'100\h'|\n(44u'rmu\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'101\h'|\n(48u'rol\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'102
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'rol\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'103\h'|\n(44u'ror\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'104\h'|\n(48u'ror\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'105
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'rtt\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'106\h'|\n(44u'sar\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'107\h'|\n(48u'sar\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'108
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'sbf\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'109\h'|\n(44u'sbf\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'110\h'|\n(48u'sbi\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'111
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'sbi\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'112\h'|\n(44u'sbs\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'113\h'|\n(48u'sbs\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'114
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'sbu\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'115\h'|\n(44u'sbu\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'116\h'|\n(48u'sde\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'117
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'sdf\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'118\h'|\n(44u'sdl\h'|\n(45u'ewP2\h'|\n(46u'\h'|\n(47u'119\h'|\n(48u'sdl\h'|\n(49u'ewN2\h'|\n(50u'\h'|\n(51u'120
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'set\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'121\h'|\n(44u'set\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'122\h'|\n(48u'sig\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'123
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'sil\h'|\n(41u'ewP2\h'|\n(42u'\h'|\n(43u'124\h'|\n(44u'sil\h'|\n(45u'ewN2\h'|\n(46u'\h'|\n(47u'125\h'|\n(48u'sim\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'126
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'sli\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'127\h'|\n(44u'sli\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'128\h'|\n(48u'slu\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'129
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'slu\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'130\h'|\n(44u'sri\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'131\h'|\n(48u'sri\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'132
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'sru\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'133\h'|\n(44u'sru\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'134\h'|\n(48u'sti\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'135
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'sts\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'136\h'|\n(44u'sts\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'137\h'|\n(48u'str\h'|\n(49u'esP\h'|\n(50u'1\h'|\n(51u'138
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'tge\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'139\h'|\n(44u'tle\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'140\h'|\n(48u'trp\h'|\n(49u'e-\h'|\n(50u'\h'|\n(51u'141
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'xor\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'142\h'|\n(44u'xor\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'143\h'|\n(48u'zer\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'144
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'zer\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'145\h'|\n(44u'zge\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'146\h'|\n(48u'zgt\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'147
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'zle\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'148\h'|\n(44u'zlt\h'|\n(45u'e2\h'|\n(46u'\h'|\n(47u'149\h'|\n(48u'zne\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'150
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'zrf\h'|\n(41u'e2\h'|\n(42u'\h'|\n(43u'151\h'|\n(44u'zrf\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'152\h'|\n(48u'zrl\h'|\n(49u'ewP2\h'|\n(50u'\h'|\n(51u'153
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'dch\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'154\h'|\n(44u'exg\h'|\n(45u'esP\h'|\n(46u'1\h'|\n(47u'155\h'|\n(48u'exg\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'156
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'exg\h'|\n(41u'e-\h'|\n(42u'\h'|\n(43u'157\h'|\n(44u'lpb\h'|\n(45u'e-\h'|\n(46u'\h'|\n(47u'158\h'|\n(48u'gto\h'|\n(49u'e2\h'|\n(50u'\h'|\n(51u'159
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'ldc\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'0\h'|\n(44u'lae\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'1\h'|\n(48u'lal\h'|\n(49u'P4\h'|\n(50u'\h'|\n(51u'2
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lal\h'|\n(41u'N4\h'|\n(42u'\h'|\n(43u'3\h'|\n(44u'lde\h'|\n(45u'w4\h'|\n(46u'\h'|\n(47u'4\h'|\n(48u'ldf\h'|\n(49u'4\h'|\n(50u'\h'|\n(51u'5
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'ldl\h'|\n(41u'wP4\h'|\n(42u'\h'|\n(43u'6\h'|\n(44u'ldl\h'|\n(45u'wN4\h'|\n(46u'\h'|\n(47u'7\h'|\n(48u'lil\h'|\n(49u'wP4\h'|\n(50u'\h'|\n(51u'8
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lil\h'|\n(41u'wN4\h'|\n(42u'\h'|\n(43u'9\h'|\n(44u'loc\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'10\h'|\n(48u'loe\h'|\n(49u'w4\h'|\n(50u'\h'|\n(51u'11
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lof\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'12\h'|\n(44u'lol\h'|\n(45u'wP4\h'|\n(46u'\h'|\n(47u'13\h'|\n(48u'lol\h'|\n(49u'wN4\h'|\n(50u'\h'|\n(51u'14
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'lpi\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'15\h'|\n(44u'adp\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'16\h'|\n(48u'asp\h'|\n(49u'w4\h'|\n(50u'\h'|\n(51u'17
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'beq\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'18\h'|\n(44u'bge\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'19\h'|\n(48u'bgt\h'|\n(49u'4\h'|\n(50u'\h'|\n(51u'20
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'ble\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'21\h'|\n(44u'blm\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'22\h'|\n(48u'blt\h'|\n(49u'4\h'|\n(50u'\h'|\n(51u'23
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'bne\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'24\h'|\n(44u'bra\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'25\h'|\n(48u'cal\h'|\n(49u'4\h'|\n(50u'\h'|\n(51u'26
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'dee\h'|\n(41u'w4\h'|\n(42u'\h'|\n(43u'27\h'|\n(44u'del\h'|\n(45u'wP4\h'|\n(46u'\h'|\n(47u'28\h'|\n(48u'del\h'|\n(49u'wN4\h'|\n(50u'\h'|\n(51u'29
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'fil\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'30\h'|\n(44u'gto\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'31\h'|\n(48u'ine\h'|\n(49u'w4\h'|\n(50u'\h'|\n(51u'32
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'inl\h'|\n(41u'wP4\h'|\n(42u'\h'|\n(43u'33\h'|\n(44u'inl\h'|\n(45u'wN4\h'|\n(46u'\h'|\n(47u'34\h'|\n(48u'lin\h'|\n(49u'4\h'|\n(50u'\h'|\n(51u'35
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'sde\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'36\h'|\n(44u'sdf\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'37\h'|\n(48u'sdl\h'|\n(49u'wP4\h'|\n(50u'\h'|\n(51u'38
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'sdl\h'|\n(41u'wN4\h'|\n(42u'\h'|\n(43u'39\h'|\n(44u'sil\h'|\n(45u'wP4\h'|\n(46u'\h'|\n(47u'40\h'|\n(48u'sil\h'|\n(49u'wN4\h'|\n(50u'\h'|\n(51u'41
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'ste\h'|\n(41u'w4\h'|\n(42u'\h'|\n(43u'42\h'|\n(44u'stf\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'43\h'|\n(48u'stl\h'|\n(49u'wP4\h'|\n(50u'\h'|\n(51u'44
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'stl\h'|\n(41u'wN4\h'|\n(42u'\h'|\n(43u'45\h'|\n(44u'zeq\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'46\h'|\n(48u'zge\h'|\n(49u'4\h'|\n(50u'\h'|\n(51u'47
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'zgt\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'48\h'|\n(44u'zle\h'|\n(45u'4\h'|\n(46u'\h'|\n(47u'49\h'|\n(48u'zlt\h'|\n(49u'4\h'|\n(50u'\h'|\n(51u'50
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'zne\h'|\n(41u'4\h'|\n(42u'\h'|\n(43u'51\h'|\n(44u'zre\h'|\n(45u'w4\h'|\n(46u'\h'|\n(47u'52\h'|\n(48u'zrl\h'|\n(49u'wP4\h'|\n(50u'\h'|\n(51u'53
-.ta \n(66u \n(67u \n(68u \n(69u \n(70u \n(71u \n(72u \n(73u \n(74u \n(75u \n(76u \n(77u 
-.nr 35 1m
-.nr 31 \n(.f
-\&\h'|\n(40u'zrl\h'|\n(41u'wN4\h'|\n(42u'\h'|\n(43u'54\h'|\n(44u'\h'|\n(45u'\h'|\n(46u'\h'|\n(47u'\h'|\n(48u'\h'|\n(49u'\h'|\n(50u'\h'|\n(51u'
-.fc
-.nr T. 1
-.T# 1
-.35
-.TE
-.if \n-(b.=0 .nr c. \n(.c-\n(d.-120

+ 0 - 5
doc/em/print

@@ -1,5 +0,0 @@
-
-case $# in
-1)      make "$1".t ; ntlp "$1".t^lpr ;;
-*)      echo $0 heeft een argument nodig ;;
-esac

+ 0 - 4
doc/em/show

@@ -1,4 +0,0 @@
-case $# in
-1)      make $1.t ; ntout $1.t ;;
-*)      echo $0 heeft een argument nodig ;;
-esac

+ 0 - 9
doc/lint/Makefile

@@ -1,9 +0,0 @@
-# $Header$
-
-FP =	frontpage
-
-DOC =	abstract contents chap1 chap2 chap3 chap4 chap5 chap6 chap7\
-	chap8 chap9 appendix_A appendix_B
-
-../lint.doc:	$(FP) $(DOC)
-	cat $(FP) $(DOC) > ../lint.doc

+ 0 - 18
doc/occam/Makefile

@@ -1,18 +0,0 @@
-EMHOME=../..
-FILES= p0 p1 p2 p3 p4 p5 p6 p7 p8 p9
-
-PIC=pic
-EQN=eqn
-TBL=tbl
-TARGET=-Tlp
-../occam.doc:	p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 channel.h.t channel.c.t
-	soelim $(FILES) | $(PIC) $(TARGET) | $(TBL) | $(EQN) $(TARGET) > $@
-
-channel.h.t:	$(EMHOME)/h/ocm_chan.h
-	ctot <$(EMHOME)/h/ocm_chan.h >channel.h.t
-
-channel.c.t:	channel.c
-	ctot <channel.c >channel.c.t
-
-channel.c:	$(EMHOME)/lang/occam/lib/tail_ocm.a
-		arch x $(EMHOME)/lang/occam/lib/tail_ocm.a channel.c

+ 0 - 10
doc/sparc/Makefile

@@ -1,10 +0,0 @@
-# $Header$
-
-REFER=refer
-TBL=tbl
-TARGET=-Tlp
-PIC=pic
-GRAP=grap
-
-../sparc.doc:	refs title intro 1 2 3 4 5 A B init
-		$(REFER) -sA+T '-l\", ' -p refs title intro 1 2 3 4 5 A B | $(GRAP) | $(PIC) | $(TBL) | soelim > $@

+ 0 - 8
doc/top/Makefile

@@ -1,8 +0,0 @@
-# $Header$
-
-REFER=refer
-TBL=tbl
-TARGET=-Tlp
-
-../top.doc:	top.n refs.top
-		$(REFER) -sA+T -l4,2 -p refs.top top.n | $(TBL) > $@

+ 0 - 1
emtest/last

@@ -1 +0,0 @@
-0

+ 0 - 28
emtest/test.e

@@ -1,28 +0,0 @@
-#define WS EM_WSIZE
-#define PS EM_PSIZE
-#include "test.h"
- mes 2,WS,PS
- mes 1
- mes 4,300
-.000
- con "tst000"
- exp $m_a_i_n
- pro $m_a_i_n,0
- loc 123
- loc -98
-; TEST 000: empty
- fil .000
- loc -98
- bne *1
- loc 123
- bne *1
- lin 0
- nop
- loc 0
- ret WS
-1
- lin 1
- nop
- loc 1
- ret WS
- end

+ 0 - 289
etc/pc_errors

@@ -1,289 +0,0 @@
-non-standard feature used
-identifier '%s' declared twice
-end of file encountered
-bad line directive
-unsigned real: digit of fraction expected
-unsigned real: digit of exponent expected
-unsigned real: too many digits (>72)
-unsigned integer: too many digits (>72)
-unsigned integer: overflow (>32767)
-string constant: must not exceed one line
-string constant: at least one character expected
-string constant: double quotes not allowed (see c option)
-string constant: too long (>72 chars)
-bad character
-identifier '%s' not declared
-location counter overflow: arrays too big
-location counter overflow: arrays too big
-arraysize too big
-variable '%s' never used
-variable '%s' never assigned
-the files contained in '%s' are not closed automatically
-constant expected
-constant: only integers and reals may be signed
-constant: out of bounds
-simple type expected
-enumerated type: element identifier expected
-enumerated type: ',' or ')' expected
-enumerated type: ',' expected
-enumerated type: ')' expected
-subrange type: type must be scalar, but not real
-subrange type: '..' expected
-subrange type: type of lower and upper bound incompatible
-subrange type: lower bound exceeds upper bound
-array type: '[' expected
-conformant array: low bound identifier expected
-conformant array: '..' expected
-conformant array: high bound identifier expected
-conformant array: ':' expected
-conformant array: index type identifier expected
-array type: index type not bounded
-array type: index separator or ']' expected
-array type: index separator expected
-array type: ']' expected
-array type: 'of' expected
-record variant part: tag type identifier expected
-record variant part: tag type identifier expected
-record variant part: type must be bounded
-record variant part: 'of' expected
-record variant: type of case label and tag incompatible
-record variant: multiple defined case label
-record variant: ',' or ':' expected
-record variant: ',' expected
-record variant: ':' expected
-record variant: '(' expected
-record variant: ')' expected
-record variant part: ';' or end of variant list expected
-record variant part: ';' expected
-record variant part: end of variant list expected
-record variant part: there must be a variant for each tag value
-field list: record section expected
-record section: field identifier expected
-record section: ',' or ':' expected
-record section: ',' expected
-record section: ':' expected
-field list: ';' or end of record section list expected
-field list: ';' expected
-field list: end of record section list expected
-type expected
-type: simple and pointer type may not be packed
-pointer type: type identifier expected
-pointer type: type identifier expected
-record type: 'end' expected
-set type: 'of' expected
-set type: too many elements in set
-set type: bad subrange of integer
-set of integer: the i option dictates the number of bits (default 16)
-set type: base type not bounded
-file type: 'of' expected
-file type: files within files not allowed
-var parameter: type identifier or conformant array expected
-var parameter: type identifier expected
-label declaration: unsigned integer expected
-label declaration: label '%i' multiple declared
-label declaration: ',' or ';' expected
-label declaration: ',' expected
-label declaration: ';' expected
-const declaration: constant identifier expected
-const declaration: '=' expected
-const declaration: ';' expected
-const declaration: constant identifier or 'type', 'var', 'procedure', 'function' or 'begin' expected
-type declaration: type identifier expected
-type declaration: '=' expected
-type declaration: ';' expected
-type declaration: type identifier or 'var', 'procedure', 'function' or 'begin' expected
-var declaration: var identifier expected
-var declaration: ',' or ':' expected
-var declaration: ',' expected
-var declaration: ':' expected
-var declaration: ';' expected
-var declaration: var identifier or 'procedure', 'function' or 'begin' expected
-parameter list: 'var','procedure','function' or identifier expected
-parameter list: parameter identifier expected
-parameter list: ',' or ':' expected
-parameter list: ',' expected
-parameter list: ':' expected
-parameter list: type identifier expected
-parameter list: ';' or ')' expected
-parameter list: ';' expected
-proc/func declaration: proc/func identifier expected
-proc/func declaration: previous declaration of '%s' was not forward
-proc/func declaration: parameter list expected
-parameterlist: ')' expected
-func declaration: ':' expected
-func declaration: result type identifier expected
-func declaration: result type must be scalar, subrange or pointer
-proc/func declaration: ';' expected
-proc/func declaration: block or directive expected
-proc/func declaration: '%s' unknown directive
-proc/func declaration: '%s' again forward declared
-proc/func declaration: ';' expected
-indexed variable: '[' only allowed following array variables
-indexed variable: index type not compatible with declaration
-indexed variable: ',' or ']' expected
-indexed variable: ',' expected
-assignment: standard function not allowed as destination
-assignment: cannot store the function result
-assignment: formal parameter function not allowed as destination
-assignment: function identifier may not be de-referenced
-variable: '[', '.', '^' or end of variable expected
-indexed variable: ']' expected
-field designator: field identifier expected
-field designator: '.' only allowed following record variables
-field designator: no field '%s' in this record
-referenced variable: '^' not allowed following zero-terminated strings
-referenced variable: '^' only allowed following pointer or file variables
-variable: var or field identifier expected
-call: too many actual parameters supplied
-call: proc/func identifier expected
-call: standard proc/func may not be used as parameter
-call: parameter lists of actual and formal proc/func incompatible
-call: type of actual and formal value parameter not compatible
-call: array parameter not conformable
-call: type of actual and formal variable parameter not similar
-call: packed elements not allowed as variable parameter
-call: ',' or ')' expected
-call: too few actual parameters supplied
-read(ln): type must be integer, char or real
-write(ln): type must be integer, char, real, string or boolean
-write(ln): ':', ',' or ')' expected
-write(ln): field width must be integer
-write(ln): ':', ',' or ')' expected
-write(ln): precision must be integer
-write(ln): precision may only be specified for reals
-read/write: too few actual parameters supplied
-read/write: standard input/output not mentioned in program heading
-read/write: ',' or ')' expected
-read/write: type of parameter not the same as that of the file elements
-read/write: parameter list expected
-readln/writeln: standard input/output not mentioned in program heading
-readln/writeln: only allowed on text files
-new/dispose: C-type strings not allowed here
-new/dispose: ',' or ')' expected
-new/dispose: too many actual parameters supplied
-new/dispose: type of tagfield value is incompatible with declaration
-call: '(' or end of call expected
-standard proc/func: parameter list expected
-standard input/output not mentioned in program heading
-file variable expected
-pointer variable expected
-pack: ',' expected
-pack: ',' expected
-unpack: ',' expected
-unpack: ',' expected
-standard proc/func: parameter type incompatible with specification
-eoln/page: text file variable expected
-pack/unpack: array types are incompatible
-pack/unpack: only for arrays
-abs: integer or real expected
-sqr: integer or real expected
-ord: type must be scalar or subrange, but not real
-pred/succ: type must be scalar or subrange, but not real
-trunc/round: real argument required
-call: ')' expected
-expression: left and right operand are incompatible
-set: incompatible elements
-set: base type must be bounded or of type integer
-set: base type upper bound exceeds maximum set element number
-set: element out of range
-set: ']' or element list expected
-set: '..', ',' or ']' expected
-set: ',' or ']' expected
-set: ',' expected
-factor expected
-factor: ')' expected
-factor: type of factor must be boolean
-set: ']' expected
-term: multiplying operator or end of term expected
-term: '*' only defined for integers, reals and sets
-term: '/' only defined for integers and reals
-term: 'div' only defined for integers
-term: 'mod' only defined for integers
-term: 'and' only defined for booleans
-simple expression: only integers and reals may be signed
-simple expression: adding operator or end of simple expression expected
-simple expression: '+' only defined for integers, reals and sets
-simple expression: '-' only defined for integers, reals and sets
-simple expression: 'or' only defined for booleans
-expression: relational operator or end of expression expected
-expression: set expected
-expression: left operand of 'in' not compatible with base type of right operand
-expression: only '=' and '<>' allowed on pointers
-expression: '<' and '>' not allowed on sets
-expression: comparison of arrays only allowed for strings
-expression: comparison of records not allowed
-expression: comparison of files not allowed
-assignment: ':=' expected
-assignment: left and right hand side incompatible
-goto statement: unsigned integer expected
-goto statement: label '%i' not declared
-if statement: type of expression must be boolean
-if statement: 'then' expected
-if statement: 'else' or end of if statement expected
-case statement: type must be scalar or subrange, but not real
-case statement: 'of' expected
-case statement: incompatible case label
-case statement: multiple defined case label
-case statement: ',' or ':' expected
-case statement: ',' expected
-case statement: ':' expected
-case statement: ';' or 'end' expected
-case statement: ';' expected
-case statement: 'end' expected
-repeat statement: ';' or 'until' expected
-repeat statement: ';' expected
-repeat statement: 'until' expected
-repeat statement: type of expression must be boolean
-while statement: type of expression must be boolean
-while statement: 'do' expected
-for statement: type of bound and control variable incompatible
-for statement: control variable expected
-for statement: control variable must be local
-for statement: type must be scalar or subrange, but not real
-for statement: ':=' expected
-for statement: 'to' or 'downto' expected
-for statement: upper bound not assignment compatible
-for statement: 'do' expected
-with statement: record variable expected
-with statement: ',' or 'do' expected
-with statement: ',' expected
-with statement: 'do' expected
-assertion: type of expression must be boolean
-statement expected
-label '%i' not declared
-label '%i' multiple defined
-statement: ':' expected
-unlabeled statement expected
-compound statement: ';' or 'end' expected
-compound statement: ';' expected
-compound statement: 'end' expected
-case statement: 'end' expected
-body: ';' or 'end' expected
-body: ';' expected
-body: label '%i' declared, but never defined
-program parameter '%s' not declared
-function '%s' never assigned
-block: declaration or body expected
-block: 'const', 'type', 'var', 'procedure', 'function' or 'begin' expected
-block: 'type', 'var', 'procedure', 'function' or 'begin' expected
-block: 'var', 'procedure', 'function' or 'begin' expected
-block: 'procedure', 'function' or 'begin' expected
-block: unsatisfied forward proc/func declaration(s)
-block: 'begin' expected
-block: 'end' expected
-program heading: 'program' expected
-program heading: program identifier expected
-program heading: file identifier list expected
-program heading: file identifier expected
-program heading: ',' or ')' expected
-program heading: ',' expected
-program heading: maximum number of file arguments exceeded (12)
-program heading: ')' expected
-program heading: ';' expected
-program: '.' expected
-'program' expected
-module: 'const', 'type', 'var', 'procedure' or 'function' expected
-module: 'type', 'var', 'procedure' or 'function' expected
-module: 'var', 'procedure' or 'function' expected
-module: 'procedure' or 'function' expected
-garbage at end of program

+ 0 - 107
etc/pc_rt_errors

@@ -1,107 +0,0 @@
-array bound error
-range bound error
-set bound error
-integer overflow
-real overflow
-real underflow
-divide by 0
-divide by 0.0
-undefined integer
-real undefined
-conversion error
-error 11
-error 12
-error 13
-error 14
-error 15
-stack overflow
-heap error
-illegal instruction
-odd or zero byte count
-case error
-memory fault
-bad pointer
-bad program counter
-bad external address
-bad monitor call
-bad line number
-error 27
-error 28
-error 29
-error 30
-error 31
-error 32
-error 33
-error 34
-error 35
-error 36
-error 37
-error 38
-error 39
-error 40
-error 41
-error 42
-error 43
-error 44
-error 45
-error 46
-error 47
-error 48
-error 49
-error 50
-error 51
-error 52
-error 53
-error 54
-error 55
-error 56
-error 57
-error 58
-error 59
-error 60
-error 61
-error 62
-error 63
-more args expected
-error in exp
-error in ln
-error in sqrt
-assertion failed
-array bound error in pack
-array bound error in unpack
-only positive j in 'i mod j'
-file not yet open
-dispose error
-error 74
-error 75
-error 76
-error 77
-error 78
-error 79
-error 80
-error 81
-error 82
-error 83
-error 84
-error 85
-error 86
-error 87
-error 88
-error 89
-error 90
-error 91
-error 92
-error 93
-error 94
-error 95
-not writable
-not readable
-end of file
-truncated
-reset error
-rewrite error
-close error
-read error
-write error
-digit expected
-non-ASCII char read

+ 0 - 70
first/cc.xenix.src

@@ -1,70 +0,0 @@
-trap "rm -f x$$.c" 0 1 2 3 15
-EMHOME=/usr/em
-CFLAG=0
-TARGET=a.out
-while :
-do
-	case $# in
-	0)	break;;
-	esac
-	case $1 in
-	-I*|-D*|-U*)
-		PREP=$PREP" "$1
-		;;
-	-c)	CFLAG=1
-		;;
-	-o)	shift
-		TARGET=$1
-		;;
-	-F)	shift
-		LFLAG="-F $1"
-		;;
-	-*)	FLAGS=$FLAGS" "$1
-		;;
-	*)	ARG=$ARG" "$1
-		;;
-	esac
-	shift
-done
-for i in $ARG
-do
-	case $i in
-	*.c)
-		nm=`basename $i .c`
-		if [ -x $EMHOME/lib/cpp ]
-		then
-			cpp=$EMHOME/lib/cpp
-			cppf=-P
-		else
-			cpp=/bin/cc
-			cppf=-E
-		fi
-		if $cpp $cppf $PREP $i > x$$.c && /bin/cc $FLAGS -c x$$.c
-		then
-			mv x$$.o $nm.o
-			LDARG=$LDARG" "$nm.o
-		else
-			rm -f x$$.c
-			exit 1
-		fi
-		rm -f x$$.c
-		;;
-	*.s)
-		if /bin/cc $FLAGS -c $i
-		then
-			LDARG=$LDARG" "`basename $i .s`.o
-		else	exit 1
-		fi
-		;;
-	*)	LDARG=$LDARG" "$i
-		;;
-	esac
-done
-case $CFLAG in
-1)	;;
-*)	if /bin/cc $FLAGS $LFLAG $LDARG -o $TARGET
-	then :
-	else exit 1
-	fi
-	;;
-esac

+ 0 - 67
first/ckpath

@@ -1,67 +0,0 @@
-rm -f ../bin/x_tpath x_tpath
-echo 'Checking out your $PATH; . and $ACK/bin should be in front ...'
-echo "echo $$" >../bin/x_tpath
-rm -f x_tpath
-chmod +x ../bin/x_tpath
-case x`(x_tpath) 2>/dev/null`
-in
-x$$)	
-	STAT=0 ;;
-x)
-	(cd ../bin ; echo Sorry, `pwd` is not in your shell PATH" ($PATH)")
-	STAT=1 ;;
-*)
-	echo "Sorry, there is something wrong with your PATH ($PATH)" ;;
-esac
-echo "echo t_$$" > X_Y_Z_
-chmod +x X_Y_Z_
-case x`X_Y_Z_`
-in
-xt_$$)
-	;;
-x)
-	(cd ../bin ; echo Sorry, . is not in your shell PATH" ($PATH)")
-	STAT=2 ;;
-*)
-	echo "Sorry, there is something wrong with your PATH ($PATH)" ;;
-esac
-rm -f X_Y_Z_
-case $STAT
-in
-2)
-	;;
-*)
-	hash -r ;;
-esac
-echo "echo l_$$" >x_tpath
-chmod +x x_tpath
-case x`(x_tpath) 2>/dev/null`
-in
-xl_$$)
-	;;
-x)
-	(cd ../bin ; echo Sorry, . is not in your shell PATH" ($PATH)")
-	STAT=2 ;;
-x$$)	
-	echo Sorry, . is not in your PATH" ($PATH)" or after the ACK bin directory
-	STAT=3 ;;
-*)
-	echo "Sorry, there is something wrong with your PATH ($PATH)"
-	STAT=4 ;;
-esac
-rm -f ../bin/x_tpath x_tpath
-echo "echo 93" > ../bin/cat
-chmod +x ../bin/cat
-hash -r
-case x`cat < /dev/null 2>/dev/null`
-in
-x93)
-	rm -f ../bin/cat
-	;;
-*)
-	rm -f ../bin/cat
-	(cd ../bin ; echo Sorry, `pwd` comes too late in your PATH" ($PATH)" )
-	STAT=13
-	;;
-esac
-exit $STAT

+ 0 - 7
first/did_first

@@ -1,7 +0,0 @@
-if (ack_sys ) >/dev/null 2>&1
-then
-	exit 0
-else
-	echo "You need to run 'first' first"
-	exit 1
-fi

+ 0 - 75
first/fixlexlib

@@ -1,75 +0,0 @@
-FL=succes
-TRIES=
-case X$# in
-X0)
-	if (.Xlex) > /dev/null 2>&1
-	then
-		TRY=`.Xlex`
-	else	TRY=-lln
-	fi
-	echo "trying to find your lex library ..."
-	cat > x.l <<'EOF'
-%%
-[A-Z]	putchar(yytext[0]+'a'-'A');
-EOF
-	if lex x.l > /dev/null 2>&1 && cc -c lex.yy.c > /dev/null 2>&1
-	then :
-	else echo "Sorry, your lex does not seem to work"
-	     exit 2
-	fi
-	cat > trylib <<'EOF'
-if cc lex.yy.o $1 > /dev/null 2>&1
-then
-	rm -f lex.yy.* a.out
-	exit 0
-else
-	exit 1
-fi
-EOF
-	if sh trylib $TRY
-	then
-		LEX=$TRY
-	else
-		exec $0 -ll $TRY
-	fi
-	;;
-*)	if sh trylib $1
-	then
-		LEX=$1
-	else
-		TRIES="$2 and $1"
-		FL=fail
-	fi
-	;;
-esac
-case X$FL in
-Xfail)	echo 'What option do I have to give to cc to get the LEX library?'
-	echo "I tried " $TRIES "but these don't seem to work."
-	echo -n 'LEX library option: '
-	if read ANSWER
-	then :
-	else echo "Sorry, got EOF while reading your answer"
-	     exit 9
-	fi
-	exec $0 $ANSWER "$TRIES"
-	;;
-Xsucces)
-	for i in ../util/opt ../util/cgg ../util/ncgg ../lang/occam/comp ../modules/src/em_opt ../util/ceg/as_parser
-	do
-	    (	cd $i
-		cp Makefile makefile
-		ed - makefile << EOF
-/^LEXLIB/c
-LEXLIB = $LEX
-.
-w
-q
-EOF
-	    )
-	done
-	;;
-esac
-rm -f x.l trylib lex.yy.*
-echo echo "$LEX" > .Xlex
-chmod +x .Xlex
-echo "apparently, \"cc ... $LEX\" works"

+ 0 - 0
first/hash


+ 0 - 21
first/myecho.c

@@ -1,21 +0,0 @@
-#include <stdio.h>
-
-main(argc, argv)
-	int argc;
-	char *argv[];
-{
-	int nflag = 0;
-
-	if(argc > 1 && ! strncmp(argv[1], "-n", 2)) {
-		nflag++;
-		argc--;
-		argv++;
-	}
-	while (--argc > 0) {
-		fputs(argv[1], stdout);
-		argv++;
-		if (argc > 1) putchar(' ');
-	}
-	if (!nflag) putchar('\n');
-	exit(0);
-}

+ 0 - 26
h/pc_size.h

@@ -1,26 +0,0 @@
-/* $Header$ */
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-
-/*fundamental */
-#define	sz_byte	1
-#define	sz_bool	1
-#define	sz_char	1
-
-/* target machine characteristics */
-/* variable (see pc.c) */
-#define	sz_addr	sizes[0]
-#define	sz_real	sizes[1]
-#define	sz_head	sizes[2]
-#define	sz_buff	sizes[3]
-#define	sz_mset	sizes[4]
-#define	sz_iset	sizes[5]
-#define	sz_word	sizes[6]
-#define	sz_int	sizes[7]
-#define	sz_long	sizes[8]
-
-#define	sz_last	8
-
-#define	sz_proc	2*sz_addr

+ 0 - 28
include/_tail_cc/termio.h

@@ -1,28 +0,0 @@
-#ifdef __CHANNEL__
-#define	NCC	8
-
-#define	VMIN	4
-#define	VTIME	5
-
-#define	ICRNL	0000400
-
-#define	ONLCR	0000004
-
-#define	ICANON	0000002
-#define	ECHO	0000010
-
-struct termio {
-	unsigned short	c_iflag;
-	unsigned short	c_oflag;
-	unsigned short	c_cflag;
-	unsigned short	c_lflag;
-	char	c_line;
-	unsigned char	c_cc[NCC];
-};
-
-#define	TIOC	('T'<<8)
-#define	TCGETA	(TIOC|1)
-#define	TCSETA	(TIOC|2)
-#else
-#include "/usr/include/termio.h"
-#endif

+ 0 - 64
lang/basic/src/Makefile

@@ -1,64 +0,0 @@
-# $Header$
-
-EMHOME=../../..
-h=$(EMHOME)/h
-m=$(EMHOME)/modules/h
-LIBDIR= $(EMHOME)/modules/lib
-LIBDIR2= $(EMHOME)/lib
-CFLAGS = -I$h -I$m -O
-
-FILES= bem.o symbols.o initialize.o compile.o \
-	parsepar.o gencode.o util.o graph.o \
-	eval.o func.o basic.o Lpars.o
-
-CSRCFILES= bem.c symbols.c initialize.c compile.c \
-	parsepar.c gencode.c util.c graph.c \
-	eval.c func.c
-CGENFILES= basic.c Lpars.c
-CFILES=$(CSRCFILES) $(CGENFILES)
-
-LIBFILES= $(LIBDIR)/libem_mes.a $(LIBDIR)/libemk.a \
-	  $(LIBDIR2)/em_data.a $(LIBDIR)/libprint.a \
-	  $(LIBDIR)/liballoc.a \
-	  $(LIBDIR)/libsystem.a $(LIBDIR)/libstring.a
-
-LINTLIBFILES= $(LIBDIR)/llib-lem_mes.ln $(LIBDIR)/llib-lemk.ln \
-	  $(LIBDIR)/llib-lprint.ln \
-	  $(LIBDIR)/llib-lalloc.ln \
-	  $(LIBDIR)/llib-lsystem.ln $(LIBDIR)/llib-lstring.ln
-
-all:		dummy bem
-
-dummy:		basic.g
-		LLgen basic.g
-		touch dummy
-
-install:	all
-		cp bem $(EMHOME)/lib/em_bem
-
-cmp:		all
-		cmp bem $(EMHOME)/lib/em_bem
-
-pr:
-		@pr Makefile maketokentab bem.h symbols.h graph.h basic.g basic.lex $(CSRCFILES)
-
-opr:
-		make pr | opr
-
-bem:		$(FILES) $(LIBFILES)
-		$(CC) -o bem $(FILES) $(LIBFILES)
-
-basic.o : 	basic.c basic.lex Lpars.h llmess.c tokentab.h
-		$(CC) $(CFLAGS) -c basic.c
-
-$(FILES): 	bem.h symbols.h graph.h 
-
-tokentab.h:	Lpars.h
-		maketokentab
-
-lint:		dummy $(CFILES) tokentab.h	
-		lint -b $(CFLAGS) $(CFILES) $(LINTLIBFILES)
-
-clean:
-		rm -f *.o
-		rm -f basic.c Lpars.h Lpars.c dummy tokentab.h bem

+ 0 - 143
lang/cem/cemcom.ansi/LintPars

@@ -1,143 +0,0 @@
-!File: lint.h
-#define	LINT		1	/* if defined, 'lint' is produced	*/
-#define	ANSI		1	/* tell l_* files it's ANSI		*/
-
-
-!File: pathlength.h
-#define PATHLENGTH	1024	/* max. length of path to file		*/
-
-
-!File: errout.h
-#define	ERROUT		STDERR	/* file pointer for writing messages	*/
-#define	ERR_SHADOW	0	/* a syntax error overshadows error messages
-					until ERR_SHADOW symbols have been
-					accepted without syntax error */
-
-
-!File: idfsize.h
-#define	IDFSIZE	64	/* maximum significant length of an identifier	*/
-
-
-!File: numsize.h
-#define	NUMSIZE	256	/* maximum length of a numeric constant		*/
-
-
-!File: nparams.h
-#define	NPARAMS 32	/* maximum number of parameters			*/
-#define	STDC_NPARAMS 31	/* ANSI limit on number of parameters		*/
-
-
-!File: ifdepth.h
-#define	IFDEPTH	256	/* maximum number of nested if-constructions	*/
-
-
-!File: density.h
-#define	DENSITY	2	/* see switch.[ch] for an explanation		*/
-
-
-!File: macbuf.h
-#define	LAPBUF	128	/* initial size of macro replacement buffer	*/
-#define ARGBUF	128	/* initial size of macro parameter buffer(s)	*/
-
-
-!File: strsize.h
-#define ISTRSIZE	32	/* minimum number of bytes allocated for
-					storing a string		*/
-#define RSTRSIZE	16	/* step size in enlarging the memory for
-					the storage of a string		*/
-
-
-!File: trgt_sizes.h
-#define MAXSIZE		8	/* the maximum of the SZ_* constants	*/
-
-/* target machine sizes	*/
-#define	SZ_CHAR		1
-#define	SZ_SHORT	2
-#define SZ_WORD		4
-#define	SZ_INT		4
-#define	SZ_LONG		4
-#define	SZ_FLOAT	4
-#define	SZ_DOUBLE	8
-#define	SZ_POINTER	4
-#define	SZ_LNGDBL	8	/* for now */
-
-/* target machine alignment requirements	*/
-#define	AL_CHAR		1
-#define	AL_SHORT	SZ_SHORT
-#define AL_WORD		SZ_WORD
-#define	AL_INT		SZ_WORD
-#define	AL_LONG		SZ_WORD
-#define	AL_FLOAT	SZ_WORD
-#define	AL_DOUBLE	SZ_WORD
-#define	AL_LNGDBL	SZ_WORD
-#define	AL_POINTER	SZ_WORD
-#define AL_STRUCT	1
-#define AL_UNION	1
-
-
-!File: botch_free.h
-#undef BOTCH_FREE	1	/* when defined, botch freed memory, as a check	*/
-
-
-!File: dataflow.h
-#undef	DATAFLOW	1	/* produce some compile-time xref	*/
-
-
-!File: debug.h
-#undef DEBUG		1	/* perform various self-tests		*/
-
-
-!File: use_tmp.h
-#undef PREPEND_SCOPES	1	/* collect exa, exp, ina and inp commands
-					and if USE_TMP is defined let them
-					precede the rest of the generated
-					compact code	*/
-#undef USE_TMP		1	/* use C_insertpart, C_endpart mechanism
-					to generate EM-code in the order needed
-					for the code-generators. If not defined,
-					the old-style peephole optimizer is
-					needed.	*/
-
-
-!File: parbufsize.h
-#define PARBUFSIZE	1024
-
-
-!File: textsize.h
-#define ITEXTSIZE	 32	/* 1st piece of memory for repl. text	*/
-
-
-!File: inputtype.h
-#define INP_READ_IN_ONE	1	/* read input file in one	*/
-
-
-!File: nopp.h
-#undef NOPP		1	/* if NOT defined, use built-int preprocessor */
-
-
-!File: nobitfield.h
-#undef NOBITFIELD	1	/* if NOT defined, implement bitfields	*/
-
-
-!File: spec_arith.h
-/* describes internal compiler arithmetics */
-#undef	SPECIAL_ARITHMETICS	/* something different from native long */
-#undef UNSIGNED_ARITH	unsigned arith
-
-
-!File: static.h
-#define GSTATIC			/* for large global "static" arrays */
-
-
-!File: nocross.h
-#undef NOCROSS		1	/* if NOT defined, cross compiler */
-
-
-!File: regcount.h
-#undef REGCOUNT		1	/* count occurrences for register messages */
-
-
-!File: dbsymtab.h
-#undef DBSYMTAB	1	/* ability to produce symbol table for debugger */
-
-

+ 0 - 718
lang/cem/cemcom.ansi/Makefile.erik

@@ -1,718 +0,0 @@
-# $Header$
-#	M A K E F I L E   F O R   A C K   C - C O M P I L E R
-
-# Machine and environ dependent definitions
-EMHOME =	/usr/em#			# ACK tree on this machine
-DESTINATION =	/user1/$$USER/bin#		# where to put the stuff
-MKDEP =		$(EMHOME)/bin/mkdep#		# dependency generator
-MAP =
-#MAP = -DInsertFile=ins_file -DInsertText=ins_text# bug in m68k2 back end
-SIM =		/user1/dick/bin/sim#		# Dicks sim program
-LINT =		/usr/new/lint
-
-# Libraries and EM interface definitions
-SYSLIB =	$(EMHOME)/modules/lib/libsystem.a
-EMKLIB =	$(EMHOME)/modules/lib/libemk.a
-EMELIB =	$(EMHOME)/modules/lib/libeme.a $(EMHOME)/lib/em_data.a
-STRLIB =	$(EMHOME)/modules/lib/libstring.a
-PRTLIB =	$(EMHOME)/modules/lib/libprint.a
-EMMESLIB =	$(EMHOME)/modules/lib/libem_mes.a
-INPLIB =	$(EMHOME)/modules/lib/libinput.a
-ALLOCLIB =	$(EMHOME)/modules/lib/liballoc.a
-MALLOC =	$(EMHOME)/modules/lib/malloc.o
-#CH3LIB =	$(EMHOME)/modules/lib/libch3.a
-CH3LIB =
-LIBS =		$(INPLIB) $(CH3LIB) $(EMMESLIB) $(EMKLIB) \
-		$(PRTLIB) $(STRLIB) $(ALLOCLIB) $(MALLOC) $(SYSLIB)
-ELIBS =		$(INPLIB) $(CH3LIB) $(EMMESLIB) $(EMELIB) \
-		$(PRTLIB) $(STRLIB) $(ALLOCLIB) $(MALLOC) $(SYSLIB)
-LIB_INCLUDES =	-I$(EMHOME)/modules/h -I$(EMHOME)/modules/pkg
-EM_INCLUDES =	-I$(EMHOME)/h
-SYSLLIB =	$(EMHOME)/modules/lib/llib-lsys.ln
-EMKLLIB =	$(EMHOME)/modules/lib/llib-lemk.ln
-EMELLIB =	$(EMHOME)/modules/lib/llib-leme.ln
-STRLLIB =	$(EMHOME)/modules/lib/llib-lstr.ln
-PRTLLIB =	$(EMHOME)/modules/lib/llib-lprint.ln
-EMMESLLIB =	$(EMHOME)/modules/lib/llib-lmes.ln
-INPLLIB =	$(EMHOME)/modules/lib/llib-linput.ln
-CH3LLIB =	$(EMHOME)/modules/lib/llib-lch3.ln
-ALLOCLLIB =	$(EMHOME)/modules/lib/llib-alloc.ln
-LINTLIBS =
-#LINTLIBS =	$(CH3LLIB) $(INPLLIB) $(EMMESLLIB) $(EMKLLIB) \
-#		$(PRTLLIB) $(STRLLIB) $(SYSLLIB) $(ALLOCLLIB)
-
-# Where to install the compiler and its driver
-CEMCOM =	$(DESTINATION)/cemcom
-DRIVER =	$(DESTINATION)/cem
-
-# What C compiler to use and how
-# CC = $(ACK) -.c
-# CC = CC
-# CC = /bin/cc
-COPTIONS =
-
-# What parser generator to use and how
-GEN =		$(EMHOME)/bin/LLgen
-GENOPTIONS =	-vv
-
-# Special #defines during compilation
-CDEFS =		$(MAP) $(EM_INCLUDES) $(LIB_INCLUDES)
-CFLAGS =	$(CDEFS) $(COPTIONS) -O# we cannot pass the COPTIONS to lint!
-
-# Grammar files and their objects
-LSRC =	tokenfile.g declar.g statement.g expression.g program.g ival.g
-GLCSRC = tokenfile.c declar.c statement.c expression.c program.c Lpars.c ival.c
-LOBJ =	tokenfile.o declar.o statement.o expression.o program.o Lpars.o ival.o
-
-CSRC =  main.c idf.c declarator.c decspecs.c struct.c \
-        expr.c ch7.c ch7bin.c cstoper.c arith.c \
-        asm.c code.c dumpidf.c error.c field.c\
-        tokenname.c LLlex.c LLmessage.c \
-        input.c domacro.c replace.c init.c options.c \
-        scan.c skip.c stack.c type.c ch7mon.c label.c eval.c \
-        switch.c conversion.c util.c \
-        blocks.c dataflow.c Version.c
-# Objects of hand-written C files
-COBJ =	main.o idf.o declarator.o decspecs.o struct.o \
-	expr.o ch7.o ch7bin.o cstoper.o arith.o \
-	asm.o code.o dumpidf.o error.o field.o\
-	tokenname.o LLlex.o LLmessage.o \
-	input.o domacro.o replace.o init.o options.o \
-	scan.o skip.o stack.o type.o ch7mon.o label.o eval.o \
-	switch.o conversion.o util.o \
-	blocks.o dataflow.o Version.o
-
-# Objects of other generated C files
-GCSRC = char.c symbol2str.c next.c
-GOBJ =	char.o symbol2str.o next.o
-
-# generated source files
-GSRC =	char.c symbol2str.c next.c \
-	code.h declar.h decspecs.h def.h expr.h field.h  estack.h \
-	idf.h macro.h stack.h stmt.h struct.h switch.h type.h util.h
-
-# .h files generated by `make hfiles'; PLEASE KEEP THIS UP-TO-DATE!
-GHSRC = botch_free.h dataflow.h debug.h density.h errout.h \
-	idfsize.h ifdepth.h inputtype.h inumlength.h lapbuf.h \
-	nobitfield.h nofloat.h nopp.h noRoption.h nocross.h \
-	nparams.h numsize.h parbufsize.h pathlength.h \
-	strsize.h target_sizes.h textsize.h use_tmp.h spec_arith.h static.h \
-	reg_count.h
-
-# Other generated files, for 'make clean' only
-GENERATED = tokenfile.g Lpars.h LLfiles LL.output lint.out \
-	print Xref lxref hfiles cfiles $(GLCSRC)
-
-# include files containing ALLOCDEF specifications
-NEXTFILES = code.str declar.str decspecs.str def.str expr.str field.str \
-	estack.str util.str \
-	idf.str macro.str stack.str stmt.str struct.str switch.str type.str
-
-.SUFFIXES: .str .h
-.str.h:
-	./make.allocd <$*.str >$*.h
-
-all:	cc
-
-cc:
-	make "EMHOME="$(EMHOME) "CC=$(CC)" hfiles
-	make "EMHOME="$(EMHOME) "CC=$(CC)" LLfiles
-	make "EMHOME="$(EMHOME) "CC=$(CC)" main
-
-cem:	cem.c
-	$(CC) -O cem.c $(SYSLIB) -o cem
-
-lint.cem: cem.c
-	$(LINT) -bx cem.c
-
-hfiles: ./make.hfiles Parameters
-	./make.hfiles Parameters
-	@touch hfiles
-
-LLfiles: $(LSRC)
-	$(GEN) $(GENOPTIONS) $(LSRC)
-	@touch LLfiles
-
-tokenfile.g:	tokenname.c make.tokfile
-	<tokenname.c ./make.tokfile >tokenfile.g
-
-symbol2str.c:	tokenname.c make.tokcase
-	<tokenname.c ./make.tokcase >symbol2str.c
-
-char.c:	char.tab
-	$(EMHOME)/bin/tabgen -fchar.tab >char.c
-
-next.c:	make.next $(NEXTFILES)
-	./make.next $(NEXTFILES) >next.c
-
-code.h:		make.allocd
-declar.h:	make.allocd
-decspecs.h:	make.allocd
-def.h:		make.allocd
-estack.h:	make.allocd
-expr.h:		make.allocd
-field.h:	make.allocd
-idf.h:		make.allocd
-macro.h:	make.allocd
-stack.h:	make.allocd
-stmt.h:		make.allocd
-struct.h:	make.allocd
-switch.h:	make.allocd
-type.h:		make.allocd
-util.h:		make.allocd
-
-# Objects needed for 'main'
-OBJ =	$(COBJ) $(LOBJ) $(GOBJ)
-SRC =	$(CSRC) $(LCSRC) $(GCSRC)
-
-main:	$(OBJ) Makefile.erik
-	$(CC) $(COPTIONS) $(LFLAGS) $(OBJ) $(LIBS) -o main 
-	size main
-
-emain:	$(OBJ) Makefile.erik
-	$(CC) $(COPTIONS) $(LFLAGS) $(OBJ) $(ELIBS) -o emain 
-	size emain
-
-cfiles: hfiles LLfiles $(GSRC)
-	@touch cfiles
-
-install: main cem
-	cp main $(CEMCOM)
-	cp cem $(DRIVER)
-
-print:	files
-	pr `cat files` > print
-
-tags:	cfiles
-	ctags $(SRC)
-
-shar:	files
-	shar `cat files`
-
-listcfiles:
-	@echo $(SRC)
-
-listobjects:
-	@echo $(OBJ)
-
-depend:	cfiles
-	sed '/^#AUTOAUTO/,$$d' Makefile.erik >Makefile.erik.new
-	echo '#AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO' >>Makefile.erik.new
-	$(MKDEP) $(SRC) | sed 's/\.c:/.o:/' >>Makefile.erik.new
-	mv Makefile.erik Makefile.erik.old
-	mv Makefile.erik.new Makefile.erik
-	
-xref:
-	ctags -x `grep "\.[ch]" files`|sed "s/).*/)/">Xref
-	
-lxref:
-	lxref $(OBJ) -lc >lxref
-
-lint:	lint.main lint.cem
-
-lint.main: cfiles
-	$(LINT) -bx $(CDEFS) $(SRC) $(LINTLIBS) >lint.out
-
-cchk:
-	cchk $(SRC)
-
-clean:
-	rm -f $(LCSRC) $(OBJ) $(GENERATED) $(GSRC) $(GHSRC)
-
-sim:	cfiles
-	$(SIM) $(SIMFLAGS) $(CSRC) $(GSRC) $(LSRC)
-
-#AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO
-main.o: LLlex.h
-main.o: Lpars.h
-main.o: align.h
-main.o: arith.h
-main.o: debug.h
-main.o: declar.h
-main.o: file_info.h
-main.o: idf.h
-main.o: input.h
-main.o: inputtype.h
-main.o: level.h
-main.o: noRoption.h
-main.o: nobitfield.h
-main.o: nocross.h
-main.o: nofloat.h
-main.o: nopp.h
-main.o: sizes.h
-main.o: spec_arith.h
-main.o: specials.h
-main.o: target_sizes.h
-main.o: tokenname.h
-main.o: type.h
-main.o: use_tmp.h
-idf.o: LLlex.h
-idf.o: Lpars.h
-idf.o: align.h
-idf.o: arith.h
-idf.o: assert.h
-idf.o: botch_free.h
-idf.o: debug.h
-idf.o: declar.h
-idf.o: decspecs.h
-idf.o: def.h
-idf.o: file_info.h
-idf.o: idf.h
-idf.o: idfsize.h
-idf.o: label.h
-idf.o: level.h
-idf.o: noRoption.h
-idf.o: nobitfield.h
-idf.o: nocross.h
-idf.o: nofloat.h
-idf.o: nopp.h
-idf.o: sizes.h
-idf.o: spec_arith.h
-idf.o: specials.h
-idf.o: stack.h
-idf.o: struct.h
-idf.o: target_sizes.h
-idf.o: type.h
-declarator.o: Lpars.h
-declarator.o: arith.h
-declarator.o: botch_free.h
-declarator.o: declar.h
-declarator.o: expr.h
-declarator.o: idf.h
-declarator.o: label.h
-declarator.o: nobitfield.h
-declarator.o: nocross.h
-declarator.o: nofloat.h
-declarator.o: nopp.h
-declarator.o: sizes.h
-declarator.o: spec_arith.h
-declarator.o: target_sizes.h
-declarator.o: type.h
-decspecs.o: Lpars.h
-decspecs.o: arith.h
-decspecs.o: decspecs.h
-decspecs.o: def.h
-decspecs.o: level.h
-decspecs.o: noRoption.h
-decspecs.o: nobitfield.h
-decspecs.o: nofloat.h
-decspecs.o: spec_arith.h
-decspecs.o: type.h
-struct.o: LLlex.h
-struct.o: Lpars.h
-struct.o: align.h
-struct.o: arith.h
-struct.o: assert.h
-struct.o: botch_free.h
-struct.o: debug.h
-struct.o: def.h
-struct.o: field.h
-struct.o: file_info.h
-struct.o: idf.h
-struct.o: level.h
-struct.o: noRoption.h
-struct.o: nobitfield.h
-struct.o: nocross.h
-struct.o: nofloat.h
-struct.o: nopp.h
-struct.o: sizes.h
-struct.o: spec_arith.h
-struct.o: stack.h
-struct.o: struct.h
-struct.o: target_sizes.h
-struct.o: type.h
-expr.o: LLlex.h
-expr.o: Lpars.h
-expr.o: arith.h
-expr.o: botch_free.h
-expr.o: declar.h
-expr.o: decspecs.h
-expr.o: def.h
-expr.o: expr.h
-expr.o: file_info.h
-expr.o: idf.h
-expr.o: label.h
-expr.o: level.h
-expr.o: noRoption.h
-expr.o: nobitfield.h
-expr.o: nocross.h
-expr.o: nofloat.h
-expr.o: nopp.h
-expr.o: sizes.h
-expr.o: spec_arith.h
-expr.o: target_sizes.h
-expr.o: type.h
-ch7.o: Lpars.h
-ch7.o: arith.h
-ch7.o: assert.h
-ch7.o: debug.h
-ch7.o: def.h
-ch7.o: expr.h
-ch7.o: idf.h
-ch7.o: label.h
-ch7.o: nobitfield.h
-ch7.o: nofloat.h
-ch7.o: nopp.h
-ch7.o: spec_arith.h
-ch7.o: struct.h
-ch7.o: type.h
-ch7bin.o: Lpars.h
-ch7bin.o: arith.h
-ch7bin.o: botch_free.h
-ch7bin.o: expr.h
-ch7bin.o: idf.h
-ch7bin.o: label.h
-ch7bin.o: noRoption.h
-ch7bin.o: nobitfield.h
-ch7bin.o: nofloat.h
-ch7bin.o: nopp.h
-ch7bin.o: spec_arith.h
-ch7bin.o: struct.h
-ch7bin.o: type.h
-cstoper.o: Lpars.h
-cstoper.o: arith.h
-cstoper.o: assert.h
-cstoper.o: debug.h
-cstoper.o: expr.h
-cstoper.o: idf.h
-cstoper.o: label.h
-cstoper.o: nobitfield.h
-cstoper.o: nocross.h
-cstoper.o: nofloat.h
-cstoper.o: nopp.h
-cstoper.o: sizes.h
-cstoper.o: spec_arith.h
-cstoper.o: target_sizes.h
-cstoper.o: type.h
-arith.o: Lpars.h
-arith.o: arith.h
-arith.o: botch_free.h
-arith.o: expr.h
-arith.o: field.h
-arith.o: idf.h
-arith.o: label.h
-arith.o: mes.h
-arith.o: noRoption.h
-arith.o: nobitfield.h
-arith.o: nofloat.h
-arith.o: nopp.h
-arith.o: spec_arith.h
-arith.o: type.h
-code.o: Lpars.h
-code.o: arith.h
-code.o: assert.h
-code.o: atw.h
-code.o: botch_free.h
-code.o: code.h
-code.o: dataflow.h
-code.o: debug.h
-code.o: declar.h
-code.o: decspecs.h
-code.o: def.h
-code.o: expr.h
-code.o: file_info.h
-code.o: idf.h
-code.o: label.h
-code.o: level.h
-code.o: noRoption.h
-code.o: nobitfield.h
-code.o: nocross.h
-code.o: nofloat.h
-code.o: nopp.h
-code.o: sizes.h
-code.o: spec_arith.h
-code.o: specials.h
-code.o: stack.h
-code.o: stmt.h
-code.o: target_sizes.h
-code.o: type.h
-code.o: use_tmp.h
-dumpidf.o: Lpars.h
-dumpidf.o: arith.h
-dumpidf.o: debug.h
-dumpidf.o: def.h
-dumpidf.o: expr.h
-dumpidf.o: field.h
-dumpidf.o: idf.h
-dumpidf.o: label.h
-dumpidf.o: nobitfield.h
-dumpidf.o: nofloat.h
-dumpidf.o: nopp.h
-dumpidf.o: spec_arith.h
-dumpidf.o: stack.h
-dumpidf.o: static.h
-dumpidf.o: struct.h
-dumpidf.o: type.h
-error.o: LLlex.h
-error.o: arith.h
-error.o: debug.h
-error.o: errout.h
-error.o: expr.h
-error.o: file_info.h
-error.o: label.h
-error.o: nofloat.h
-error.o: nopp.h
-error.o: spec_arith.h
-error.o: tokenname.h
-field.o: Lpars.h
-field.o: align.h
-field.o: arith.h
-field.o: assert.h
-field.o: code.h
-field.o: debug.h
-field.o: expr.h
-field.o: field.h
-field.o: idf.h
-field.o: label.h
-field.o: nobitfield.h
-field.o: nocross.h
-field.o: nofloat.h
-field.o: nopp.h
-field.o: sizes.h
-field.o: spec_arith.h
-field.o: target_sizes.h
-field.o: type.h
-tokenname.o: LLlex.h
-tokenname.o: Lpars.h
-tokenname.o: arith.h
-tokenname.o: file_info.h
-tokenname.o: idf.h
-tokenname.o: nofloat.h
-tokenname.o: nopp.h
-tokenname.o: spec_arith.h
-tokenname.o: tokenname.h
-LLlex.o: LLlex.h
-LLlex.o: Lpars.h
-LLlex.o: arith.h
-LLlex.o: assert.h
-LLlex.o: class.h
-LLlex.o: debug.h
-LLlex.o: def.h
-LLlex.o: file_info.h
-LLlex.o: idf.h
-LLlex.o: idfsize.h
-LLlex.o: input.h
-LLlex.o: nocross.h
-LLlex.o: nofloat.h
-LLlex.o: nopp.h
-LLlex.o: numsize.h
-LLlex.o: sizes.h
-LLlex.o: spec_arith.h
-LLlex.o: strsize.h
-LLlex.o: target_sizes.h
-LLmessage.o: LLlex.h
-LLmessage.o: Lpars.h
-LLmessage.o: arith.h
-LLmessage.o: file_info.h
-LLmessage.o: idf.h
-LLmessage.o: nofloat.h
-LLmessage.o: nopp.h
-LLmessage.o: spec_arith.h
-input.o: file_info.h
-input.o: input.h
-input.o: inputtype.h
-input.o: nopp.h
-domacro.o: LLlex.h
-domacro.o: Lpars.h
-domacro.o: arith.h
-domacro.o: assert.h
-domacro.o: botch_free.h
-domacro.o: class.h
-domacro.o: debug.h
-domacro.o: file_info.h
-domacro.o: idf.h
-domacro.o: idfsize.h
-domacro.o: ifdepth.h
-domacro.o: input.h
-domacro.o: interface.h
-domacro.o: macro.h
-domacro.o: nofloat.h
-domacro.o: nopp.h
-domacro.o: nparams.h
-domacro.o: parbufsize.h
-domacro.o: spec_arith.h
-domacro.o: textsize.h
-replace.o: LLlex.h
-replace.o: arith.h
-replace.o: assert.h
-replace.o: class.h
-replace.o: debug.h
-replace.o: file_info.h
-replace.o: idf.h
-replace.o: input.h
-replace.o: interface.h
-replace.o: macro.h
-replace.o: nofloat.h
-replace.o: nopp.h
-replace.o: pathlength.h
-replace.o: spec_arith.h
-replace.o: static.h
-replace.o: strsize.h
-init.o: class.h
-init.o: idf.h
-init.o: interface.h
-init.o: macro.h
-init.o: nopp.h
-options.o: align.h
-options.o: arith.h
-options.o: botch_free.h
-options.o: class.h
-options.o: dataflow.h
-options.o: idf.h
-options.o: idfsize.h
-options.o: macro.h
-options.o: noRoption.h
-options.o: nobitfield.h
-options.o: nocross.h
-options.o: nofloat.h
-options.o: nopp.h
-options.o: sizes.h
-options.o: spec_arith.h
-options.o: target_sizes.h
-options.o: use_tmp.h
-scan.o: class.h
-scan.o: idf.h
-scan.o: input.h
-scan.o: interface.h
-scan.o: lapbuf.h
-scan.o: macro.h
-scan.o: nopp.h
-scan.o: nparams.h
-skip.o: LLlex.h
-skip.o: arith.h
-skip.o: class.h
-skip.o: file_info.h
-skip.o: input.h
-skip.o: interface.h
-skip.o: nofloat.h
-skip.o: nopp.h
-skip.o: spec_arith.h
-stack.o: Lpars.h
-stack.o: arith.h
-stack.o: botch_free.h
-stack.o: debug.h
-stack.o: def.h
-stack.o: idf.h
-stack.o: level.h
-stack.o: mes.h
-stack.o: noRoption.h
-stack.o: nobitfield.h
-stack.o: nofloat.h
-stack.o: nopp.h
-stack.o: spec_arith.h
-stack.o: stack.h
-stack.o: struct.h
-stack.o: type.h
-type.o: Lpars.h
-type.o: align.h
-type.o: arith.h
-type.o: botch_free.h
-type.o: def.h
-type.o: idf.h
-type.o: nobitfield.h
-type.o: nocross.h
-type.o: nofloat.h
-type.o: nopp.h
-type.o: sizes.h
-type.o: spec_arith.h
-type.o: target_sizes.h
-type.o: type.h
-ch7mon.o: Lpars.h
-ch7mon.o: arith.h
-ch7mon.o: botch_free.h
-ch7mon.o: def.h
-ch7mon.o: expr.h
-ch7mon.o: idf.h
-ch7mon.o: label.h
-ch7mon.o: nobitfield.h
-ch7mon.o: nofloat.h
-ch7mon.o: nopp.h
-ch7mon.o: spec_arith.h
-ch7mon.o: type.h
-label.o: Lpars.h
-label.o: arith.h
-label.o: def.h
-label.o: idf.h
-label.o: label.h
-label.o: level.h
-label.o: noRoption.h
-label.o: nobitfield.h
-label.o: nofloat.h
-label.o: nopp.h
-label.o: spec_arith.h
-label.o: type.h
-eval.o: Lpars.h
-eval.o: align.h
-eval.o: arith.h
-eval.o: assert.h
-eval.o: atw.h
-eval.o: code.h
-eval.o: dataflow.h
-eval.o: debug.h
-eval.o: def.h
-eval.o: expr.h
-eval.o: idf.h
-eval.o: label.h
-eval.o: level.h
-eval.o: mes.h
-eval.o: nobitfield.h
-eval.o: nocross.h
-eval.o: nofloat.h
-eval.o: nopp.h
-eval.o: sizes.h
-eval.o: spec_arith.h
-eval.o: specials.h
-eval.o: stack.h
-eval.o: target_sizes.h
-eval.o: type.h
-switch.o: Lpars.h
-switch.o: arith.h
-switch.o: assert.h
-switch.o: botch_free.h
-switch.o: code.h
-switch.o: debug.h
-switch.o: density.h
-switch.o: expr.h
-switch.o: idf.h
-switch.o: label.h
-switch.o: noRoption.h
-switch.o: nobitfield.h
-switch.o: nofloat.h
-switch.o: nopp.h
-switch.o: spec_arith.h
-switch.o: switch.h
-switch.o: type.h
-conversion.o: Lpars.h
-conversion.o: arith.h
-conversion.o: nobitfield.h
-conversion.o: nocross.h
-conversion.o: nofloat.h
-conversion.o: sizes.h
-conversion.o: spec_arith.h
-conversion.o: target_sizes.h
-conversion.o: type.h
-util.o: Lpars.h
-util.o: align.h
-util.o: def.h
-util.o: nocross.h
-util.o: nofloat.h
-util.o: regcount.h
-util.o: sizes.h
-util.o: stack.h
-util.o: target_sizes.h
-util.o: use_tmp.h
-util.o: util.h
-blocks.o: Lpars.h
-blocks.o: align.h
-blocks.o: arith.h
-blocks.o: atw.h
-blocks.o: label.h
-blocks.o: nocross.h
-blocks.o: nofloat.h
-blocks.o: sizes.h
-blocks.o: spec_arith.h
-blocks.o: stack.h
-blocks.o: target_sizes.h
-dataflow.o: dataflow.h
-char.o: class.h
-symbol2str.o: Lpars.h

+ 0 - 67
lang/cem/cemcom.ansi/Resolve

@@ -1,67 +0,0 @@
-: create a directory Xsrc with name clashes resolved
-: and run make in that directory
-: '$Header$'
-
-case $# in
-1)	
-	;;
-*)	echo "$0: one argument expected" 1>&2
-	exit 1
-	;;
-esac
-PW=`pwd`
-options=
-case $1 in
-main|emain|lnt)
-	target=$PW/$1
-	;;
-omain)
-	target=$PW/$1
-	options=-DPEEPHOLE
-	;;
-cemain)
-	target=$PW/$1
-	options=-DCODE_EXPANDER
-	;;
-Xlint)
-	target=$1
-	;;
-*)	echo "$0: $1: Illegal argument" 1>&2
-	exit 1
-	;;
-esac
-if test -d ../Xsrc
-then
-	:
-else	mkdir ../Xsrc
-fi
-make EMHOME=$EMHOME longnames
-: remove code generating routines from the clashes list as they are defines.
-: code generating routine names start with C_
-sed '/^C_/d' < longnames > tmp$$
-cclash -c -l7 tmp$$ > ../Xsrc/Xclashes
-rm -f tmp$$
-cd ../Xsrc
-if cmp -s Xclashes clashes
-then
-	:
-else
-	mv Xclashes clashes
-fi
-rm -f Makefile
-for i in `cat $PW/Cfiles`
-do
-	cat >> Makefile <<EOF
-
-$i:	clashes $PW/$i
-	cid -Fclashes < $PW/$i > $i
-EOF
-done
-make EMHOME=$EMHOME `cat $PW/Cfiles`
-rm -f Makefile
-ed - $PW/Makefile <<'EOF'
-/^#EXCLEXCL/,/^#INCLINCL/d
-w Makefile
-q
-EOF
-make EMHOME=$EMHOME COPTIONS=$options MACH=$mach CURRDIR=$PW/ $target

+ 0 - 8
lang/cem/cemcom.ansi/Version.c

@@ -1,8 +0,0 @@
-/* $Header$ */
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-#ifndef	lint
-static char Version[] = "ACK CEM compiler Version 3.1";
-#endif	lint

+ 0 - 16
lang/cem/cemcom.ansi/asm.c

@@ -1,16 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* $Header$ */
-/*		A S M			*/
-
-/*ARGSUSED*/
-code_asm(s, l)
-	char *s;
-	int l;
-{
-	/*	'asm' '(' string ')' ';'
-	*/
-	error("\"asm\" instruction not implemented");
-}

+ 0 - 230
lang/cem/cemcom.ansi/cem.1

@@ -1,230 +0,0 @@
-.TH CEM 1L 86/11/12
-.SH NAME
-cem \- ACK C compiler
-.SH SYNOPSIS
-.B cem
-[ option ] ... file ...
-.SH DESCRIPTION
-.I Cem
-is a
-.I cc (1)-like
-C compiler that uses the C front-end compiler
-.I cemcom (1)
-of the Amsterdam Compiler Kit.
-.I Cem
-interprets its arguments not starting with a '\-' as
-source files, to be compiled by the various parts of the compilation process,
-which are listed below.
-File arguments whose names end with \fB.\fP\fIcharacter\fP are interpreted as
-follows:
-.IP .[ao]
-object file.
-.IP .[ci]
-C source code
-.IP .e
-EM assembler source file.
-.IP .k
-compact EM file, not yet optimized by the EM peephole optimizer.
-.IP .m
-compact EM file, already optimized by the peephole optimizer.
-.IP .s
-assembler file.
-.LP
-The actions to be taken by
-.I cem
-are directed by the type of file argument and the various options that are
-presented to it.
-.PP
-The following set of options, which is a mixture of options interpreted by
-.I cc (1)
-and 
-.I ack (?)
-are interpreted by
-.I cem .
-(The options not specified here are passed to the loader.)
-.IP \fB\-B\fP\fIname\fP
-Use 
-.I name
-as front-end compiler instead of the default 
-.I cemcom (1).
-.br
-Same as "\fB\-Rcem=\fP\fIname\fP".
-.IP \fB\-C\fP
-Run C preprocessor 
-.I /lib/cpp
-only and prevent it from eliding comments.
-.IP \fB\-D\fP\fIname\fP\fB=\fP\fIdef\fP
-Define the 
-.I name
-to the preprocessor, as if by "#define".
-.IP \fB\-D\fP\fIname\fP
-.br
-Same as "\fB\-D\fP\fIname\fP\fB=1\fP".
-.IP \fB\-E\fP
-Run only the macro preprocessor on the named files and send the
-result to standard output.
-.IP \fB\-I\fP\fIdir\fP
-\&"#include" files whose names do not begin with '/' are always
-sought first in the directory of the \fIfile\fP argument, then in directories
-in \fB\-I\fP options, then in directories on a standard list (which in fact
-consists of "/usr/include").
-.IP \fB\-L\fP\fIdir\fP
-Use \fIdir\fP as library-containing directory instead of the default.
-.IP \fB\-N\fP\fIc\fP
-Only effective if ACK pipeline is used. 
-This option causes some default actions and options to be suppressed, according
-to
-.I c :
-.RS
-.IP \fBc\fP
-do not convert from EM a.out to local a.out format (i.e., skip the 
-.B cv
-pass.)
-.IP \fBl\fP
-do not pass the default loader flags to the
-.B ld
-pass.
-.RE
-.IP \fB\-P\fP
-Same as \fB\-E\fP, but sending the result of input file \fIfile\fP\fB.[ceis]\fP
-to \fIfile\fP\fB.i\fP.
-.IP \fB\-R\fP
-Passed to \fIcemcom\fP(1) in order to parse the named C programs according
-to the C language as described in [K&R] (also called \fIRestricted\fP C).
-.IP \fB\-R\fP\fIprog\fP\fB=\fP\fIname\fP
-.br
-Use \fIname\fP as program for phase \fIprog\fP of the compilation instead of
-the default.
-\&\fIProg\fP is one of the following names:
-.RS
-.IP \fBcpp\fP
-macro preprocessor
-.IP \fBcem\fP
-front\-end compiler
-.IP \fBopt\fP
-EM peephole optimizer
-.IP \fBdecode\fP
-EM compact to EM assembler translator
-.IP \fBencode\fP
-EM assembler to EM compact translator
-.IP \fBbe\fP
-EM compact code to target\-machine assembly code compiler
-.IP \fBcg\fP
-same as \fBbe\fP
-.IP \fBas\fP
-assembler
-.IP \fBld\fP
-linker/loader
-.IP \fBcv\fP
-a.out format converting program (only if ACK pipeline is used)
-.RE
-.IP \fB\-R\fP\fIprog\fP\fB\-\fP\fIoption\fP
-.br
-Pass \fB\-\fP\fIoption\fP to the compilation phase indicated by \fIprog\fP.
-.IP \fB\-S\fP
-Same as \fB\-c.s\fP.
-.IP \fB\-U\fP\fIname\fP
-.br
-Remove any initial definition of \fIname\fP.
-.IP \fB\-V\fP\fIcm\fP.\fIn\fP,\ \fB\-V\fIcm\fP.\fIncm\fP.\fIn\fP\ ...
-.br
-Set the size and alignment requirements of the C constructs of the named
-C input files.
-The letter \fIc\fP indicates the simple type, which is one of
-\fBs\fP(short), \fBi\fP(int), \fBl\fP(long), \fBf\fP(float), \fBd\fP(double) or
-\fBp\fP(pointer).
-The \fIm\fP parameter can be used to specify the length of the type (in bytes)
-and the \fIn\fP parameter for the alignment of that type.
-Absence of \fIm\fP or \fIn\fP causes the default value to be retained.
-To specify that the bitfields should be right adjusted instead of the
-default left adjustment, specify \fBr\fP as \fIc\fP parameter
-without parameters.
-.br
-This option is passed directly to \fIcemcom\fP(1).
-.IP \fB\-c\fP
-Same as \fB\-c.o\fP.
-.IP \fB\-c.e\fP
-Produce human-readable EM assembly code on \fIfile\fP\fB.e\fP for the
-named files \fIfile\fP\fB.[cikm]\fP 
-.IP \fB\-c.k\fP
-Compile C source \fIfile\fP\fB.[ci]\fP or
-encode human-readable EM assembly code from \fIfile\fP\fB.e\fP
-into non-optimized compact EM code and write the result on \fIfile\fP\fB.k\fP
-.IP \fB\-c.m\fP
-Compile C source \fIfile\fP\fB.[ci]\fP,
-translate non-optimized EM code from \fIfile\fP\fB.k\fP or
-encode EM assembly code from \fIfile\fP\fB.e\fP
-into optimized compact EM code and write the result on \fIfile\fP\fB.m\fP
-.IP \fB\-c.o\fP
-Suppress the loading phase of the compilation, and force an object file to
-be produced even if only one program is compiled
-.IP \fB\-c.s\fP
-Compile the named \fIfile\fP\fB.[ceikm]\fP input files, and leave the 
-assembly language output on corresponding files suffixed ".s".
-.IP \fB\-k\fP
-Same as \fB\-c.k\fP.
-.IP \fB\-l\fP\fIname\fP
-.br
-Append the library \fBlib\fP\fIname\fP\fB.a\fP to the list of files that
-should be loaded and linked into the final output file.
-The library is searched for in the library directory.
-.IP \fB\-m\fP
-Same as \fB\-c.m\fP.
-.IP \fB\-o\fP\ \fIoutput\fP
-.br
-Name the final output file \fIoutput\fP.
-If this option is used, the default "a.out" will be left undisturbed.
-.IP \fB\-p\fP
-Produce EM profiling code (\fBfil\fP and \fBlin\fP instructions to
-enable an interpreter to keep track of the current location in the
-source code)
-.IP \fB\-t\fP
-Keep the intermediate files, produced during the various phases of the 
-compilation.
-The produced files are named \fIfile\fP\fB.\fP\fIcharacter\fP where 
-\&\fIcharacter\fP indicates the type of the file as listed before.
-.IP \fB\-v\fP
-Verbose.
-Print the commands before they are executed.
-.IP \fB\-vn\fP
-Do not really execute (for debugging purposes only).
-.IP \fB\-vd\fP
-Print some additional information (for debugging purposes only).
-.IP \fB\-\-\fP\fIanything\fP
-.br
-Equivalent to \fB\-Rcem\-\-\fP\fIanything\fP.
-The options 
-.B \-\-C ,
-.B \-\-E
-and
-.B \-\-P
-all have the same effect as respectively
-.B \-C ,
-.B \-E
-and
-.B \-P
-except for the fact that the macro preprocessor is taken to be the
-built\-in preprocessor of the \fBcem\fP phase.
-Most "\-\-" options are used by
-.I cemcom (1)
-to set some internal debug switches.
-.LP
-.SH SEE ALSO
-cemcom(1), cc(1), ack(?), as(1), ld(1)
-.br
-.IP [K&R]
-B.W. Kernighan and D.M. Ritchie, \fIThe C Programming Language\fP,
-Prentice-Hall, 1978.
-.SH DIAGNOSTICS
-.I Cem
-reports any failure of its components.
-.SH BUGS
-.IP \(bu
-All intermediate files are placed in the current working directory which
-causes files with the same name as the intermediate files to be overwritten.
-.IP \(bu
-.B Cem
-only accepts a limited number of arguments to be passed to the components.
-(e.g., 256).
-.IP \(bu
-Please report suggestions and other bugs to erikb@vu44.uucp

+ 0 - 764
lang/cem/cemcom.ansi/cem.c

@@ -1,764 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/*	$Header$	*/
-/*
-	Driver for the CEMCOM compiler: works like /bin/cc and accepts
-	most of the options accepted by /bin/cc and /usr/em/bin/ack.
-	Date written: dec 4, 1985
-	Adapted for 68000 (Aug 19, 1986)
-	Merged the vax and mantra versions (Nov 10, 1986)
-	Author: Erik Baalbergen
-*/
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <signal.h>
-
-#define MAXARGC	256	/* maximum number of arguments allowed in a list */
-#define USTR_SIZE	1024	/* maximum length of string variable */
-
-struct arglist {
-	int al_argc;
-	char *al_argv[MAXARGC];
-};
-
-/* some system-dependent variables	*/
-char *PP = "/lib/cpp";
-char *CEM = "/usr/em/lib/em_cemcom";
-char *ENCODE = "/usr/em/lib/em_encode";
-char *DECODE = "/usr/em/lib/em_decode";
-char *OPT = "/usr/em/lib/em_opt";
-char *SHELL = "/bin/sh";
-
-#ifndef MANTRA
-char *CG = "/usr/em/lib/vax4/cg";
-char *AS = "/bin/as";
-char *AS_FIX = "/user1/erikb/bin/mcomm";
-char *LD = "/bin/ld";
-char *LIBDIR = "/user1/cem/lib";
-char *V_FLAG = "-Vs2.2w4.4i4.4l4.4f4.4d8.4p4.4";
-#else MANTRA
-char *CG = "/usr/em/lib/m68k2/cg";
-char *AS = "/usr/em/lib/m68k2/as";
-char *LD = "/usr/em/lib/em_led";
-char *CV = "/usr/em/lib/m68k2/cv";
-char *LIBDIR = "/usr/em/lib/m68k2";
-char *V_FLAG = "-Vs2.2w2.2i2.2l4.2f4.2d8.2p4.2";
-#endif MANTRA
-
-struct arglist LD_HEAD = {
-	2,
-	{
-#ifndef MANTRA
-		"/usr/em/lib/vax4/head_em",
-		"/usr/em/lib/vax4/head_cc"
-#else MANTRA
-		"/usr/em/lib/m68k2/head_em",
-		"/usr/em/lib/m68k2/head_cc"
-#endif MANTRA
-	}
-};
-
-struct arglist LD_TAIL = {
-#ifndef MANTRA
-	4,
-	{
-		"/user1/cem/lib/libc.a",
-		"/user1/cem/lib/stb.o",
-		"/usr/em/lib/vax4/tail_mon",
-		"/usr/em/lib/vax4/tail_em"
-	}
-#else MANTRA
-	7,
-	{
-		"/usr/em/lib/m68k2/tail_cc.1s",
-		"/usr/em/lib/m68k2/tail_cc.2g",
-		"/usr/em/lib/m68k2/tail_cem",
-		"/usr/em/lib/m68k2/tail_fp.a",
-		"/usr/em/lib/m68k2/tail_em.rt",
-		"/usr/em/lib/m68k2/tail_mon",
-		"/usr/em/lib/m68k2/end_em"
-	}
-#endif MANTRA
-};
-
-char *o_FILE = "a.out";
-#ifdef MANTRA
-char *cv_FILE = "cv.out";
-#endif MANTRA
-
-#define remove(str)	(((FLAG(t) == 0) && unlink(str)), (str)[0] = '\0')
-#define cleanup(str)		(str && remove(str))
-#define mkname(dst, s1, s2)	mkstr(dst, (s1), (s2), 0)
-#define init(al)		(al)->al_argc = 1
-#define library(nm) \
-	mkstr(alloc((unsigned int)strlen(nm) + strlen(LIBDIR) + 7), \
-		LIBDIR, "/lib", nm, ".a", 0)
-
-struct arglist SRCFILES, LDFILES, GEN_LDFILES, PP_FLAGS, CEM_FLAGS,
-	OPT_FLAGS, DECODE_FLAGS, ENCODE_FLAGS, CG_FLAGS, AS_FLAGS,
-	O_FLAGS, DEBUG_FLAGS, CALL_VEC;
-
-#ifndef MANTRA
-struct arglist LD_FLAGS;
-#else MANTRA
-struct arglist LD_FLAGS = {
-	5,
-	{
-		"-b0:0x80000",
-		"-a0:2",
-		"-a1:2",
-		"-a2:2",
-		"-a3:2"
-	}
-};
-struct arglist CV_FLAGS;
-int Nc_flag = 0;
-#endif MANTRA
-
-/* option naming */
-#define NAME(chr)	chr
-#define FLAG(chr)	NAME(chr)_flag
-int E_flag, P_flag, S_flag, c_flag, e_flag, k_flag, 
-	m_flag, o_flag, t_flag, v_flag;
-
-/* various passes */
-struct prog {
-	char *p_name;
-	char **p_task;
-	struct arglist *p_flags;
-} ProgParts[] = {
-	{ "cpp",	&PP,		&PP_FLAGS	},
-	{ "cem",	&CEM,		&CEM_FLAGS	},
-	{ "opt",	&OPT,		&OPT_FLAGS	},
-	{ "decode",	&DECODE,	&DECODE_FLAGS	},
-	{ "encode",	&ENCODE,	&ENCODE_FLAGS	},
-	{ "be",		&CG,		&CG_FLAGS	},
-	{ "cg",		&CG,		&CG_FLAGS	},
-	{ "as",		&AS,		&AS_FLAGS	},
-	{ "ld",		&LD,		&LD_FLAGS	},
-#ifdef MANTRA
-	{ "cv",		&CV,		&CV_FLAGS	},
-#endif MANTRA
-	{ 0,		0,		0		}
-};
-
-/* various forward declarations */
-int trap();
-char *mkstr();
-char *alloc();
-long sizeof_file();
-
-/* various globals */
-char *ProgCall = 0;
-int debug = 0;
-int exec = 1;
-int RET_CODE = 0;
-
-main(argc, argv)
-	char *argv[];
-{
-	char *str, **argvec, *file, *ldfile = 0;
-	int count, ext;
-	char Nfile[USTR_SIZE], kfile[USTR_SIZE], sfile[USTR_SIZE],
-		mfile[USTR_SIZE], ofile[USTR_SIZE], BASE[USTR_SIZE];
-	register struct arglist *call = &CALL_VEC;
-
-	set_traps(trap);
-	ProgCall = *argv++;
-	append(&CEM_FLAGS, "-L");
-	while (--argc > 0) {
-		if (*(str = *argv++) != '-') {
-			append(&SRCFILES, str);
-			continue;
-		}
-		switch (str[1]) {
-		case '-':
-			switch (str[2]) {
-			case 'C':
-			case 'E':
-			case 'P':
-				FLAG(E) = 1;
-				append(&PP_FLAGS, str);
-				PP = CEM;
-				FLAG(P) = (str[2] == 'P');
-				break;
-			default:
-				append(&DEBUG_FLAGS, str);
-				break;
-			}
-			break;
-		case 'B':
-			PP = CEM = &str[2];
-			break;
-		case 'C':
-		case 'E':
-		case 'P':
-			FLAG(E) = 1;
-			append(&PP_FLAGS, str);
-			FLAG(P) = (str[1] == 'P');
-			break;
-		case 'c':
-			if (str[2] == '.') {
-				switch (str[3]) {
-				case 's':
-					FLAG(S) = 1;
-					break;
-				case 'k':
-					FLAG(k) = 1;
-					break;
-				case 'o':
-					FLAG(c) = 1;
-					break;
-				case 'm':
-					FLAG(m) = 1;
-					break;
-				case 'e':
-					FLAG(e) = 1;
-					break;
-				default:
-					bad_option(str);
-				}
-			}
-			else
-			if (str[2] == '\0')
-				FLAG(c) = 1;
-			else
-				bad_option(str);
-			break;
-		case 'D':
-		case 'I':
-		case 'U':
-			append(&PP_FLAGS, str);
-			break;
-		case 'k':
-			FLAG(k) = 1;
-			break;
-		case 'l':
-			if (str[2] == '\0')	/* no standard libraries */
-				LD_HEAD.al_argc = LD_TAIL.al_argc = 0;
-			else	/* use library from library directory */
-				append(&SRCFILES, library(&str[2]));
-			break;
-		case 'L':	/* change default library directory */
-			LIBDIR = &str[2];
-			break;
-		case 'm':
-			FLAG(m) = 1;
-			break;
-#ifdef MANTRA
-		case 'N':
-			switch (str[2]) {
-			case 'c': /* no a.out conversion */
-				Nc_flag = 1;
-				break;
-			case 'l': /* no default options to led */
-				LD_FLAGS.al_argc = 0;
-				break;
-			default:
-				bad_option(str);
-			}
-			break;
-#endif MANTRA
-		case 'o':
-			FLAG(o) = 1;
-			if (argc-- < 0)
-				bad_option(str);
-			else
-				o_FILE = *argv++;
-			break;
-		case 'O':
-			append(&O_FLAGS, "-O");
-			break;
-		case 'R':
-			if (str[2] == '\0')
-				append(&CEM_FLAGS, str);
-			else
-				Roption(str);
-			break;
-		case 'S':
-			FLAG(S) = 1;
-			break;
-		case 't':
-			FLAG(t) = 1;
-			break;
-		case 'v':	/* set debug switches */
-			FLAG(v) = 1;
-			switch (str[2]) {
-			case 'd':
-				debug = 1;
-				break;
-			case 'n':	/* no execute */
-				exec = 0;
-				break;
-			case '\0':
-				break;
-			default:
-				bad_option(str);
-			}
-			break;
-		case 'V':
-			V_FLAG = str;
-			break;
-		default:
-			append(&LD_FLAGS, str);
-		}
-	}
-	if (debug) report("Note: debug output");
-	if (exec == 0)
-		report("Note: no execution");
-	count = SRCFILES.al_argc;
-	argvec = &(SRCFILES.al_argv[0]);
-	Nfile[0] = '\0';
-	while (count-- > 0) {
-		basename(file = *argvec++, BASE);
-		if (FLAG(E)) {
-			char ifile[USTR_SIZE];
-
-			init(call);
-			append(call, PP);
-			concat(call, &DEBUG_FLAGS);
-			concat(call, &PP_FLAGS);
-			append(call, file);
-			runvec(call, FLAG(P) ? mkname(ifile, BASE, ".i") : 0);
-			continue;
-		}
-		ext = extension(file);
-		/* .c to .k and .N	*/
-		if (ext == 'c' || ext == 'i') {
-			init(call);
-			append(call, CEM);
-			concat(call, &DEBUG_FLAGS);
-			append(call, V_FLAG);
-			concat(call, &CEM_FLAGS);
-			concat(call, &PP_FLAGS);
-			append(call, file);
-			append(call, mkname(kfile, BASE, ".k"));
-			append(call, mkname(Nfile, BASE, ".N"));
-			if (runvec(call, (char *)0)) {
-				file = kfile;
-				ext = 'k';
-				if (sizeof_file(Nfile) <= 0L)
-					remove(Nfile);
-			}
-			else {
-				remove(kfile);
-				remove(Nfile);
-				continue;
-			}
-		}
-		/* .e to .k */
-		if (ext == 'e') {
-			init(call);
-			append(call, ENCODE);
-			concat(call, &ENCODE_FLAGS);
-			append(call, file);
-			append(call, mkname(kfile, BASE, ".k"));
-			if (runvec(call, (char *)0) == 0)
-				continue;
-			file = kfile;
-			ext = 'k';
-		}
-		if (FLAG(k))
-			continue;
-		/* decode .k or .m */
-		if (FLAG(e) && (ext == 'k' || ext == 'm')) {
-			char efile[USTR_SIZE];
-			init(call);
-			append(call, DECODE);
-			concat(call, &DECODE_FLAGS);
-			append(call, file);
-			append(call, mkname(efile, BASE, ".e"));
-			runvec(call, (char *)0);
-			cleanup(kfile);
-			continue;
-		}
-		/* .k to .m */
-		if (ext == 'k') {
-			init(call);
-			append(call, OPT);
-			concat(call, &OPT_FLAGS);
-			append(call, file);
-			if (runvec(call, mkname(mfile, BASE, ".m")) == 0)
-				continue;
-			file = mfile;
-			ext = 'm';
-			cleanup(kfile);
-		}
-		if (FLAG(m))
-			continue;
-		/* .m to .s */
-		if (ext == 'm') {
-			init(call);
-			append(call, CG);
-			concat(call, &CG_FLAGS);
-			append(call, file);
-			append(call, mkname(sfile, BASE, ".s"));
-			if (runvec(call, (char *)0) == 0)
-				continue;
-			if (Nfile[0] != '\0') {
-#ifndef MANTRA
-				init(call);
-				append(call, AS_FIX);
-				append(call, Nfile);
-				append(call, sfile);
-				runvec(call, (char *)0);
-#endif MANTRA
-				remove(Nfile);
-			}
-			cleanup(mfile);
-			file = sfile;
-			ext = 's';
-		}
-		if (FLAG(S))
-			continue;
-		/* .s to .o */
-		if (ext == 's') {
-			ldfile = FLAG(c) ?
-				ofile :
-				alloc((unsigned)strlen(BASE) + 3);
-			init(call);
-			append(call, AS);
-			concat(call, &AS_FLAGS);
-#ifdef MANTRA
-			append(call, "-");
-#endif MANTRA
-			append(call, "-o");
-			append(call, mkname(ldfile, BASE, ".o"));
-			append(call, file);
-			if (runvec(call, (char *)0) == 0)
-				continue;
-			file = ldfile;
-			ext = 'o';
-			cleanup(sfile);
-		}
-		if (FLAG(c))
-			continue;
-		append(&LDFILES, file);
-		if (ldfile) {
-			append(&GEN_LDFILES, ldfile);
-			ldfile = 0;
-		}
-	}
-	/* *.o to a.out */
-	if (RET_CODE == 0 && LDFILES.al_argc > 0) {
-		init(call);
-		append(call, LD);
-		concat(call, &LD_FLAGS);
-		append(call, "-o");
-#ifndef MANTRA
-		append(call, o_FILE);
-#else MANTRA
-		append(call, Nc_flag ? o_FILE : cv_FILE);
-#endif MANTRA
-		concat(call, &LD_HEAD);
-		concat(call, &LDFILES);
-		concat(call, &LD_TAIL);
-		if (runvec(call, (char *)0)) {
-			register i = GEN_LDFILES.al_argc;
-
-			while (i-- > 0)
-				remove(GEN_LDFILES.al_argv[i]);
-#ifdef MANTRA
-			/* convert to local a.out format */
-			if (Nc_flag == 0) {
-				init(call);
-				append(call, CV);
-				concat(call, &CV_FLAGS);
-				append(call, cv_FILE);
-				append(call, o_FILE);
-				if (runvec(call, (char *)0))
-					remove(cv_FILE);
-			}
-#endif MANTRA
-		}
-	}
-	exit(RET_CODE);
-}
-
-#define BUFSIZE  (USTR_SIZE * MAXARGC)
-char alloc_buf[BUFSIZE];
-
-char *
-alloc(u)
-	unsigned u;
-{
-	static char *bufptr = &alloc_buf[0];
-	register char *p = bufptr;
-
-	if ((bufptr += u) >= &alloc_buf[BUFSIZE])
-		panic("no space");
-	return p;
-}
-
-append(al, arg)
-	register struct arglist *al;
-	char *arg;
-{
-	if (al->al_argc >= MAXARGC)
-		panic("argument list overflow");
-	al->al_argv[(al->al_argc)++] = arg;
-}
-
-concat(al1, al2)
-	struct arglist *al1, *al2;
-{
-	register int i = al2->al_argc;
-	register char **p = &(al1->al_argv[al1->al_argc]);
-	register char **q = &(al2->al_argv[0]);
-
-	if ((al1->al_argc += i) >= MAXARGC)
-		panic("argument list overflow");
-	while (i-- > 0)
-		*p++ = *q++;
-}
-
-/*	The next function is a dirty old one, taking a variable number of
-	arguments.
-	Take care that the last argument is a null-valued pointer!
-*/
-/*VARARGS1*/
-char *
-mkstr(dst, arg)
-	char *dst, *arg;
-{
-	char **vec = (char **) &arg;
-	register char *p;
-	register char *q = dst;
-
-	while (p = *vec++) {
-		while (*q++ = *p++);
-		q--;
-	}
-	return dst;
-}
-
-Roption(str)
-	char *str;	/* of the form "prog=/-arg"	*/
-{
-	char *eq;
-	char *prog, *arg;
-	char bc;
-	char *cindex();
-
-	prog = &str[2];
-	if (eq = cindex(prog, '='))
-		bc = '=';
-	else
-	if (eq = cindex(prog, '-'))
-		bc = '-';
-	else {
-		bad_option(str);
-		return;
-	}
-	*eq++ = '\0';
-	if (arg = eq) {
-		char *opt = 0;
-		struct prog *pp = &ProgParts[0];
-
-		if (bc == '-')
-			opt = mkstr(alloc((unsigned)strlen(arg) + 2),
-								"-", arg, 0);
-		while (pp->p_name) {
-			if (strcmp(prog, pp->p_name) == 0) {
-				if (opt)
-					append(pp->p_flags, opt);
-				else
-					*(pp->p_task) = arg;
-				return;
-			}
-			pp++;
-		}
-	}
-	bad_option(str);
-}
-
-basename(str, dst)
-	char *str;
-	register char *dst;
-{
-	register char *p1 = str;
-	register char *p2 = p1;
-
-	while (*p1)
-		if (*p1++ == '/')
-			p2 = p1;
-	p1--;
-	if (*--p1 == '.') {
-		*p1 = '\0';
-		while (*dst++ = *p2++) {}
-		*p1 = '.';
-	}
-	else
-		while (*dst++ = *p2++) {}
-}
-
-int
-extension(fn)
-	register char *fn;
-{
-	char c;
-
-	while (*fn++) {}
-	fn--;
-	c = *--fn;
-	return (*--fn == '.') ? c : 0;
-}
-
-long
-sizeof_file(nm)
-	char *nm;
-{
-	struct stat stbuf;
-
-	if (stat(nm, &stbuf) == 0)
-		return stbuf.st_size;
-	return -1;
-}
-
-char * sysmsg[]  = {
-	0,
-	"Hangup",
-	"Interrupt",
-	"Quit",
-	"Illegal instruction",
-	"Trace/BPT trap",
-	"IOT trap",
-	"EMT trap",
-	"Floating exception",
-	"Killed",
-	"Bus error",
-	"Memory fault",
-	"Bad system call",
-	"Broken pipe",
-	"Alarm call",
-	"Terminated",
-	"Signal 16"
-};
-
-runvec(vec, outp)
-	struct arglist *vec;
-	char *outp;
-{
-	int status, fd;
-	char *task = vec->al_argv[1];
-
-	vec->al_argv[vec->al_argc] = 0;
-	if (FLAG(v))
-		print_vec(vec);
-	if (exec == 0)
-		return 1;
-	if (fork() == 0) {	/* start up the process */
-		extern int errno;
-		if (outp) {	/* redirect standard output	*/
-			close(1);
-			if ((fd = creat(outp, 0666)) < 0)
-				panic("cannot create %s", outp);
-			if (fd != 1)
-				panic("illegal redirection");
-		}
-		if (debug) report("exec %s", task);
-		execv(task, &(vec->al_argv[1]));
-		/* not an a.out file, let's try it with the SHELL */
-		if (debug) report("try it with %s", SHELL);
-		if (errno == ENOEXEC) {
-			vec->al_argv[0] = SHELL;
-			execv(SHELL, &(vec->al_argv[0]));
-		}
-		/* failed, so ... */
-		panic("cannot execute %s", task);
-		exit(1);
-	}
-	else {
-		int loworder, highorder, sig;
-
-		wait(&status);
-		loworder = status & 0377;
-		highorder = (status >> 8) & 0377;
-		if (loworder == 0) {
-			if (highorder)
-				report("%s: exit status %d", task, highorder);
-			return highorder ? ((RET_CODE = 1), 0) : 1;
-		}
-		else {
-			sig = loworder & 0177;
-			if (sig == 0177)
-				report("%s: stopped by ptrace", task);
-			else
-			if (sysmsg[sig])
-				report("%s: %s%s", task, sysmsg[sig],
-					(loworder & 0200)
-						? " - core dumped"
-						: "");
-			RET_CODE = 1;
-			return 0;
-		}
-	}
-	/*NOTREACHED*/
-}
-
-bad_option(str)
-	char *str;
-{
-	report("bad option %s", str);
-}
-
-/*VARARGS1*/
-report(fmt, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9)
-	char *fmt;
-{
-	fprintf(stderr, "%s: ", ProgCall);
-	fprintf(stderr, fmt, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-	fprintf(stderr, "\n");
-}
-
-/*VARARGS1*/
-panic(fmt, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9)
-	char *fmt;
-{
-	fprintf(stderr, "%s: ", ProgCall);
-	fprintf(stderr, fmt, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-	fprintf(stderr, "\n");
-	exit(1);
-}
-
-set_traps(f)
-	int (*f)();
-{
-	signal(SIGHUP, f);
-	signal(SIGINT, f);
-	signal(SIGQUIT, f);
-	signal(SIGALRM, f);
-	signal(SIGTERM, f);
-}
-
-/*ARGSUSED*/
-trap(sig)
-{
-	set_traps(SIG_IGN);
-	panic("Trapped");
-}
-
-print_vec(vec)
-	struct arglist *vec;
-{
-	register i;
-
-	for (i = 1; i < vec->al_argc; i++)
-		printf("%s ", vec->al_argv[i]);
-	printf("\n");
-}
-
-char *
-cindex(s, c)
-	char *s, c;
-{
-	while (*s)
-		if (*s++ == c)
-			return s - 1;
-	return (char *) 0;
-}

+ 0 - 104
lang/cem/cemcom.ansi/cemcom.1

@@ -1,104 +0,0 @@
-.TH EM_CEMCOM 6ACK
-.ad
-.SH NAME
-em_cemcom \- C to EM compiler
-.SH SYNOPSIS
-\fB~/em/lib/em_cemcom\fP [\fIoptions\fP] \fIsource \fP[\fIdestination \fP[\fInamelist\fP]]
-.SH DESCRIPTION
-\fICemcom\fP is a compiler that translates C programs
-into EM compact code.
-The input is taken from \fIsource\fP, while the
-EM code is written on \fIdestination\fP.
-If either of these two names is "\fB-\fP", standard input or output respectively
-is taken.
-The file \fInamelist\fP, if supplied, will contain a list of the names
-of external, so-called \fBcommon\fP, variables.
-When the preprocessor is invoked to run stand-alone, \fIdestination\fP
-needs not be specified.
-.br
-\fIOptions\fP is a, possibly empty, sequence of the following combinations:
-.IP \fB\-D\fIname\fR=\fItext\fR
-.br
-define \fIname\fR as a macro with \fItext\fR as its replacement text.
-.IP \fB\-D\fIname\fR
-.br
-the same as \fB\-D\fIname\fR=1.
-.IP \fB\-I\fIdirname\fR
-.br
-insert \fIdirname\fR in the list of include directories.
-.IP \fB\-M\fP\fIn\fP
-set maximum identifier length to \fIn\fP.
-.IP \fB\-g\fP
-produce a DBX-style symbol table.
-.IP \fB\-n\fR
-do not generate EM register messages.
-The user-declared variables are not stored into registers on the target
-machine.
-.IP \fB\-L\fR
-don't generate the EM \fBfil\fR and \fBlin\fR instructions 
-that usually are generated to enable
-an interpreter to keep track of the current location in the source code.
-.IP \fB\-p\fR
-generate code at each procedure entry to call the routine
-.BR procentry ,
-and at each return to call the routine
-.BE procexit .
-These routines are supplied with one parameter, a pointer to a
-string containing the name of the procedure.
-.IP \fB\-A\fR[\fIfile\fR]
-.br
-if \fIfile\fR is not given, generate a list
-of makefile dependencies and write them to the standard output.
-If \fIfile\fP is given,
-generate the list of makefile dependencies on file \fIfile\fP.
-.IP \fB-i\fR
-when generating makefile dependencies, do not include files from
-/usr/include.
-.IP \fB-m\fR
-when generating makefile dependencies, generate them in the following format:
-.RS
-.IP "file.o: file1.h"
-.RE
-.IP ""
-where "file.o" is derived from the source file name. Normally, only a list
-of files included is generated.
-.IP \fB\-R\fR
-interpret the input as restricted C (according to the language as 
-described in \fIThe C programming language\fR by Kernighan and Ritchie.)
-.IP \fB\-U\fIname\fR
-.br
-get rid of the compiler-predefined macro \fIname\fR.
-.IP \fB\-V\fIcm\fR.\fIn\fR,\ \fB\-V\fIcm\fR.\fIncm\fR.\fIn\fR\ ...
-.br
-set the size and alignment requirements.
-The letter \fIc\fR indicates the simple type, which is one of
-\fBs\fR(short), \fBi\fR(int), \fBl\fR(long), \fBf\fR(float), \fBd\fR(double) or
-\fBp\fR(pointer).
-The \fIm\fR parameter can be used to specify the length of the type (in bytes)
-and the \fIn\fR parameter for the alignment of that type.
-Absence of \fIm\fR or \fIn\fR causes the default value to be retained.
-To specify that the bitfields should be right adjusted instead of the
-default left adjustment, specify \fBr\fR as \fIc\fR parameter.
-.IP \fB\-w\fR
-suppress warning messages.
-.IP \fB\-s\fR
-suppress stricts.
-.IP \fB\-a\fR
-suppress warnings and stricts.
-.IP \fB\-o\fR
-suppress warnings and stricts about old-style.
-.IP \fB\-\-\fItext\fR
-.br
-where \fItext\fR can be either of the above or
-a debug flag of the compiler (which is not useful for the common user.)
-This feature can be used in various shell scripts and surrounding programs
-to force a certain option to be handed over to \fBcemcom\fR.
-.LP
-.SH FILES
-.IR ~em/lib/em_cemcom :
-the compiler
-.SH DIAGNOSTICS
-All warning and error messages are written on standard error output.
-.SH REFERENCE
-Baalbergen, E.H., D. Grune, M. Waage ;"\fIThe CEM compiler\fR", 
-Informatica Manual IM-4

+ 0 - 641
lang/cem/cemcom.ansi/ch7.c

@@ -1,641 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* $Header$ */
-/*	S E M A N T I C   A N A L Y S I S -- C H A P T E R  3.3		*/
-
-#include	"lint.h"
-#include	"debug.h"
-#include	"nobitfield.h"
-#include	"idf.h"
-#include	<flt_arith.h>
-#include	"arith.h"
-#include	"proto.h"
-#include	"type.h"
-#include	"struct.h"
-#include	"label.h"
-#include	"expr.h"
-#include	"def.h"
-#include	"Lpars.h"
-#include	"assert.h"
-#include	"file_info.h"
-
-extern char options[];
-extern char *symbol2str();
-extern struct type *qualifier_type();
-
-/*	Most expression-handling routines have a pointer to a
-	(struct type *) as first parameter. The object under the pointer
-	gets updated in the process.
-*/
-
-ch7sel(expp, oper, idf)
-	struct expr **expp;
-	struct idf *idf;
-{
-	/*	The selector idf is applied to *expp; oper may be '.' or
-		ARROW.
-	*/
-	register struct expr *exp;
-	register struct type *tp;
-	register struct sdef *sd;
-
-	any2opnd(expp, oper);
-	exp = *expp;
-	tp = exp->ex_type;
-	if (oper == ARROW)	{
-		if (tp->tp_fund == POINTER &&
-		    ( tp->tp_up->tp_fund == STRUCT ||
-		      tp->tp_up->tp_fund == UNION))	/* normal case */
-			tp = tp->tp_up;
-		else {	/* constructions like "12->selector" and
-				"char c; c->selector"
-			*/
-			switch (tp->tp_fund)	{
-			case POINTER:
-				break;
-			case INT:
-			case LONG:
-				/* An error is given in idf2sdef() */
-				ch7cast(expp, CAST, pa_type);
-				sd = idf2sdef(idf, tp);
-				tp = sd->sd_stype;
-				break;
-			default:
-				expr_error(exp, "-> applied to %s",
-					symbol2str(tp->tp_fund));
-			case ERRONEOUS:
-				exp->ex_type = error_type;
-				return;
-			}
-		}
-	} else {		/* oper == '.' */
-		/* nothing */
-	}
-	exp = *expp;
-	switch (tp->tp_fund)	{
-	case POINTER:	/* for int *p;	p->next = ...	*/
-	case STRUCT:
-	case UNION:
-		break;
-	case INT:
-	case LONG:
-		/* warning will be given by idf2sdef() */
-		break;
-	default:
-		if (!is_anon_idf(idf))
-			expr_error(exp, "selector %s applied to %s",
-				idf->id_text, symbol2str(tp->tp_fund));
-	case ERRONEOUS:
-		exp->ex_type = error_type;
-		return;
-	}
-	sd = idf2sdef(idf, tp);
-	if (oper == '.')	{
-		/*	there are 3 cases in which the selection can be
-			performed compile-time: 
-			I:	n.sel (n either an identifier or a constant)
-			II:	(e.s1).s2 (transformed into (e.(s1+s2)))
-			III:	(e->s1).s2 (transformed into (e->(s1+s2)))
-				The code performing these conversions is
-				extremely obscure.
-		*/
-		if (exp->ex_class == Value)	{
-			/*	It is an object we know the address of; so
-				we can calculate the address of the
-				selected member 
-			*/
-			exp->VL_VALUE += sd->sd_offset;
-			exp->ex_type = sd->sd_type;
-			exp->ex_lvalue = exp->ex_type->tp_fund != ARRAY;
-			if (exp->ex_type == error_type) {
-				exp->ex_flags |= EX_ERROR;
-			}
-		}
-		else
-		if (exp->ex_class == Oper)	{
-			struct oper *op = &(exp->ex_object.ex_oper);
-			
-			if (op->op_oper == '.' || op->op_oper == ARROW)	{
-				ASSERT(is_cp_cst(op->op_right));
-				op->op_right->VL_VALUE += sd->sd_offset;
-				exp->ex_type = sd->sd_type;
-				exp->ex_lvalue = exp->ex_type->tp_fund != ARRAY;
-				if (exp->ex_type == error_type) {
-					exp->ex_flags |= EX_ERROR;
-				}
-			}
-			else {
-				exp = new_oper(sd->sd_type, exp, '.',
-						intexpr(sd->sd_offset, INT));
-				exp->ex_lvalue = sd->sd_type->tp_fund != ARRAY;
-				if (!exp->OP_LEFT->ex_lvalue)
-					exp->ex_flags |= EX_ILVALUE;
-			}
-		}
-	}
-	else { /* oper == ARROW */
-		exp = new_oper(sd->sd_type,
-			exp, oper, intexpr(sd->sd_offset, INT));
-		exp->ex_lvalue = (sd->sd_type->tp_fund != ARRAY);
-		exp->ex_flags &= ~EX_ILVALUE;
-	}
-	if (sd->sd_type->tp_typequal & TQ_CONST)
-		exp->ex_flags |= EX_READONLY;
-	if (sd->sd_type->tp_typequal & TQ_VOLATILE)
-		exp->ex_flags |= EX_VOLATILE;
-	if (oper == '.' && exp->ex_flags & EX_READONLY)  {
-		exp->ex_type = qualifier_type(exp->ex_type, TQ_CONST);
-	}
-	*expp = exp;
-}
-
-ch7incr(expp, oper)
-	struct expr **expp;
-{
-	/*	The monadic prefix/postfix incr/decr operator oper is
-		applied to *expp.
-	*/
-	ch7asgn(expp, oper, intexpr((arith)1, INT));
-}
-
-ch7cast(expp, oper, tp)
-	register struct expr **expp;
-	register struct type *tp;
-{
-	/*	The expression *expp is cast to type tp; the cast is
-		caused by the operator oper.  If the cast has
-		to be passed on to run time, its left operand will be an
-		expression of class Type.
-	*/
-	register struct type *oldtp;
-
-	if ((*expp)->ex_type->tp_fund == FUNCTION)
-		function2pointer(*expp);
-	if ((*expp)->ex_type->tp_fund == ARRAY)
-		array2pointer(*expp);
-	if ((*expp)->ex_class == String)
-		string2pointer(*expp);
-	oldtp = (*expp)->ex_type;
-
-#ifndef NOBITFIELD
-	if (oldtp->tp_fund == FIELD)	{
-		field2arith(expp);
-		ch7cast(expp, oper, tp);
-	}
-	else
-	if (tp->tp_fund == FIELD) {
-		ch7cast(expp, oper, tp->tp_up);
-	}
-	else
-#endif NOBITFIELD
-	if (equal_type(tp, oldtp)) {
-		/* life is easy */
-	}
-	else
-	if (tp->tp_fund == VOID) {
-		/* easy again */
-		(*expp)->ex_type = void_type;
-	}
-	else
-	if (is_arith_type(oldtp) && is_arith_type(tp))	{
-		int oldi = is_integral_type(oldtp);
-		int i = is_integral_type(tp);
-
-		if (oldi && i)	{
-#ifdef	LINT
-			if (oper == CAST)
-				(*expp)->ex_type = tp;
-			else
-				int2int(expp, tp);
-#else	LINT
-			int2int(expp, tp);
-#endif	LINT
-		}
-		else
-		if (oldi && !i)	{
-#ifdef	LINT
-			if (oper == CAST)
-				(*expp)->ex_type = tp;
-			else
-				int2float(expp, tp);
-#else	LINT
-			int2float(expp, tp);
-#endif	LINT
-		}
-		else
-		if (!oldi && i) {
-#ifdef	LINT
-			if (oper == CAST)
-				(*expp)->ex_type = tp;
-			else
-				float2int(expp, tp);
-#else	LINT
-			float2int(expp, tp);
-#endif	LINT
-		}
-		else {
-			/* !oldi && !i */
-#ifdef	LINT
-			if (oper == CAST)
-				(*expp)->ex_type = tp;
-			else
-				float2float(expp, tp);
-#else	LINT
-			float2float(expp, tp);
-#endif	LINT
-		}
-	}
-	else
-	if (oldtp->tp_fund == POINTER && tp->tp_fund == POINTER)	{
-		if (oper == CASTAB)
-			expr_warning(*expp, "incompatible pointers");
-		else
-		if (oper != CAST)
-			expr_warning(*expp, "incompatible pointers in %s",
-							symbol2str(oper));
-#ifdef	LINT
-		if (oper != CAST)
-			lint_ptr_conv(oldtp->tp_up->tp_fund, tp->tp_up->tp_fund);
-#endif	LINT
-		(*expp)->ex_type = tp;	/* free conversion */
-	}
-	else
-	if (oldtp->tp_fund == POINTER && is_integral_type(tp))	{
-		/* from pointer to integral */
-		if (oper != CAST)
-			expr_warning(*expp,
-				"illegal conversion of pointer to %s",
-				symbol2str(tp->tp_fund));
-		if (oldtp->tp_size > tp->tp_size)
-			expr_warning(*expp,
-				"conversion of pointer to %s loses accuracy",
-				symbol2str(tp->tp_fund));
-		if (oldtp->tp_size != tp->tp_size)
-			int2int(expp, tp);
-		else
-			(*expp)->ex_type = tp;
-	}
-	else
-	if (tp->tp_fund == POINTER && is_integral_type(oldtp))	{
-		/* from integral to pointer */
-		switch (oper)	{
-		case CAST:
-			break;
-		case CASTAB:
-		case EQUAL:
-		case NOTEQUAL:
-		case '=':
-		case RETURN:
-			if (is_cp_cst(*expp) && (*expp)->VL_VALUE == (arith)0)
-				break;
-		default:
-			expr_warning(*expp,
-				"illegal conversion of %s to pointer",
-				symbol2str(oldtp->tp_fund));
-			break;
-		}
-		if (oldtp->tp_size > tp->tp_size)
-			expr_warning(*expp,
-				"conversion of %s to pointer loses accuracy",
-				symbol2str(oldtp->tp_fund));
-		if (oldtp->tp_size != tp->tp_size)
-			int2int(expp, tp);
-		else
-			(*expp)->ex_type = tp;
-	}
-	else
-	if (oldtp->tp_fund == ERRONEOUS) {
-		/* we just won't look */
-		(*expp)->ex_type = tp;	/* brute force */
-	}
-	else
-	if (oldtp->tp_size == tp->tp_size && oper == CAST)	{
-		expr_warning(*expp, "dubious conversion based on equal size");
-		(*expp)->ex_type = tp;		/* brute force */
-	}
-	else	{
-		if (oldtp->tp_fund != ERRONEOUS && tp->tp_fund != ERRONEOUS)
-			expr_error(*expp, "cannot convert %s to %s",
-				symbol2str(oldtp->tp_fund),
-				symbol2str(tp->tp_fund)
-			);
-		(*expp)->ex_type = tp;		/* brute force */
-	}
-	if (oper == CAST) {
-		(*expp)->ex_flags |= EX_ILVALUE;
-	}
-}
-
-/*	Determine whether two types are equal.
-*/
-equal_type(tp, otp)
-	register struct type *tp, *otp;
-{
-	if (tp == otp)
-		return 1;
-	if (!tp || !otp)
-		return 0;
-
-	if (tp->tp_fund != otp->tp_fund)
-		return 0;
-	if (tp->tp_unsigned != otp->tp_unsigned)
-		return 0;
-	if (tp->tp_align != otp->tp_align)
-		return 0;
-	if (tp->tp_fund != ARRAY /* && tp->tp_fund != STRUCT */ ) {	/* UNION ??? */
-		if (tp->tp_size != otp->tp_size)
-			return 0;
-	}
-
-	switch (tp->tp_fund) {
-
-	case FUNCTION:
-		/*	If both types have parameter type lists, the type of
-			each parameter in the composite parameter type list
-			is the composite type of the corresponding paramaters.
-		*/
-		if (tp->tp_proto && otp->tp_proto) {
-			if (!equal_proto(tp->tp_proto, otp->tp_proto))
-				return 0;
-		} else if (tp->tp_proto || otp->tp_proto) {
-			if (!legal_mixture(tp, otp))
-				return 0;
-		}
-		return equal_type(tp->tp_up, otp->tp_up);
-
-	case ARRAY:
-		/*	If one type is an array of known size, the composite
-			type is an array of that size
-		*/
-		if (tp->tp_size != otp->tp_size &&
-		     (tp->tp_size != -1 && otp->tp_size != -1))
-			return 0;
-		return equal_type(tp->tp_up, otp->tp_up);
-
-	case POINTER:
-		if (equal_type(tp->tp_up, otp->tp_up)) {
-		    if (otp->tp_up->tp_typequal & TQ_CONST) {
-			if (!(tp->tp_up->tp_typequal & TQ_CONST)) {
-			    strict("illegal use of pointer to const object");
-			}
-		    }
-		    return 1;
-		}
-		else return 0;
-
-	case FIELD:
-		return equal_type(tp->tp_up, otp->tp_up);
-
-	case STRUCT:
-	case UNION:
-	case ENUM:
-		return tp->tp_idf == otp->tp_idf && tp->tp_sdef == otp->tp_sdef;
-
-	default:
-		return 1;
-	}
-}
-
-check_pseudoproto(pl, opl)
-	register struct proto *pl, *opl;
-{
-	int retval = 1;
-
-	if (pl->pl_flag & PL_ELLIPSIS) {
-		error("illegal ellipsis terminator");
-		return 2;
-	}
-	while (pl && opl) {
-	    if (!equal_type(pl->pl_type, opl->pl_type)) {
-		if (!(pl->pl_flag & PL_ERRGIVEN)
-		    && !(opl->pl_flag & PL_ERRGIVEN))
-			error("incorrect type for parameter %s of definition",
-				opl->pl_idf->id_text);
-		pl->pl_flag |= PL_ERRGIVEN;
-		opl->pl_flag |= PL_ERRGIVEN;
-		retval = 2;
-	    }
-	    pl = pl->next;
-	    opl = opl->next;
-	}
-	if (pl || opl) {
-		error("incorrect number of parameters");
-		retval = 2;
-	}
-	return retval;
-}
-
-legal_mixture(tp, otp)
-	struct type *tp, *otp;
-{
-	register struct proto *pl = tp->tp_proto, *opl = otp->tp_proto;
-	int retval = 1;
-	struct proto *prot;
-	int fund;
-
-	ASSERT( (pl != 0) ^ (opl != 0));
-	if (pl)  {
-		prot = pl;
-	} else  {
-		prot = opl;
-	}
-	if (!opl && otp->tp_pseudoproto) {
-		return check_pseudoproto(tp->tp_proto, otp->tp_pseudoproto);
-	}
-
-	if (prot->pl_flag & PL_ELLIPSIS) {
-		if (!(prot->pl_flag & PL_ERRGIVEN)) {
-			if (pl)
-				error("illegal ellipsis terminator");
-			else	error("ellipsis terminator in previous (prototype) declaration");
-		}
-		prot->pl_flag |= PL_ERRGIVEN;
-		prot = prot->next;
-		return 2;
-	}
-	while (prot) {
-				/* if (!(prot->pl_flag & PL_ELLIPSIS)) {} */
-		fund = prot->pl_type->tp_fund;
-		if (fund == CHAR || fund == SHORT || fund == FLOAT) {
-			if (!(prot->pl_flag & PL_ERRGIVEN))
-			    error("illegal %s parameter in %sdeclaration",
-				symbol2str(fund), (opl ? "previous (prototype) " : "" ));
-			prot->pl_flag |= PL_ERRGIVEN;
-			retval = 2;
-		}
-		prot = prot->next;
-	}
-	return retval;
-}
-
-equal_proto(pl, opl)
-	register struct proto *pl, *opl;
-{
-	if (pl == opl)
-		return 1;
-
-	/*	If only one type is a function type with a parameter type list
-		(a function prototype), the composite type is a function
-		prototype with parameter type list.
-	*/
-	while ( pl && opl) {
-
-	    if ((pl->pl_flag & ~PL_ERRGIVEN) != (opl->pl_flag & ~PL_ERRGIVEN))
-		return 0;
-
-	    if (!equal_type(pl->pl_type, opl->pl_type))
-		return 0;
-
-	    pl = pl->next;
-	    opl = opl->next;
-	}
-	return !(pl || opl);
-}
-
-recurconst(tp)
-struct type *tp;
-{
-	register struct sdef *sdf;
-
-	ASSERT(tp);
-	if (!tp) return 0;
-	if (tp->tp_typequal & TQ_CONST) return 1;
-	sdf = tp->tp_sdef;
-	while (sdf) {
-		if (recurconst(sdf->sd_type))
-			return 1;
-		sdf = sdf->sd_sdef;
-	}
-	return 0;
-}
-
-ch7asgn(expp, oper, expr)
-	struct expr **expp;
-	struct expr *expr;
-{
-	/*	The assignment operators.
-		"f op= e" should be interpreted as
-		"f = (typeof f)((typeof (f op e))f op (typeof (f op e))e)"
-		and not as "f = f op (typeof f)e".
-		Consider, for example, (i == 10) i *= 0.9; (i == 9), where
-		typeof i == int.
-		The resulting expression tree becomes:
-				op=
-				/ \
-			       /   \
-			      f     (typeof (f op e))e
-		EVAL should however take care of evaluating (typeof (f op e))f
-	*/
-	register struct expr *exp = *expp;
-	int fund = exp->ex_type->tp_fund;
-	int vol = 0;
-	struct type *tp;
-
-	/* We expect an lvalue */
-	if (!exp->ex_lvalue) {
-		expr_error(exp, "no lvalue in operand of %s", symbol2str(oper));
-	} else if (exp->ex_flags & EX_ILVALUE)	{
-		strict("incorrect lvalue in operand of %s", symbol2str(oper));
-	} else if (exp->ex_flags & EX_READONLY) {
-		expr_error(exp, "operand of %s is read-only", symbol2str(oper));
-	} else if (fund == STRUCT || fund == UNION) {
-		if (recurconst(exp->ex_type))
-			expr_error(expr,"operand of %s contains a const-qualified member",
-					    symbol2str(oper));
-	}
-
-	/*	Preserve volatile markers across the tree.
-		This is questionable, depending on the way the optimizer
-		wants this information.
-	vol = (exp->ex_flags & EX_VOLATILE) || (expr->ex_flags & EX_VOLATILE);
-	*/
-
-	if (oper == '=') {
-		ch7cast(&expr, oper, exp->ex_type);
-		tp = expr->ex_type;
-	}
-	else {	/* turn e into e' where typeof(e') = typeof (f op e) */
-		struct expr *extmp = intexpr((arith)0, INT);
-
-		/* this is really $#@&*%$# ! */
-		/* if you correct this, please correct lint_new_oper() too */
-		extmp->ex_lvalue = 1;
-		extmp->ex_type = exp->ex_type;
-		ch7bin(&extmp, oper, expr);
-		/* Note that ch7bin creates a tree of the expression
-			((typeof (f op e))f op (typeof (f op e))e),
-		   where f ~ extmp and e ~ expr.
-		   We want to use (typeof (f op e))e.
-		   Ch7bin does not create a tree if both operands
-		   were illegal or constants!
-		*/
-		tp = extmp->ex_type;	/* perform the arithmetic in type tp */
-		if (extmp->ex_class == Oper) {
-			expr = extmp->OP_RIGHT;
-			extmp->OP_RIGHT = NILEXPR;
-			free_expression(extmp);
-		}
-		else
-			expr = extmp;
-	}
-#ifndef NOBITFIELD
-	if (fund == FIELD)
-		exp = new_oper(exp->ex_type->tp_up, exp, oper, expr);
-	else
-		exp = new_oper(exp->ex_type, exp, oper, expr);
-#else NOBITFIELD
-	exp = new_oper(exp->ex_type, exp, oper, expr);
-#endif NOBITFIELD
-	exp->OP_TYPE = tp;	/* for EVAL() */
-	exp->ex_flags |= vol ? (EX_SIDEEFFECTS|EX_VOLATILE) : EX_SIDEEFFECTS;
-	*expp = exp;
-}
-
-/*	Some interesting (?) questions answered.
-*/
-int
-is_integral_type(tp)
-	register struct type *tp;
-{
-	switch (tp->tp_fund)	{
-	case GENERIC:
-	case CHAR:
-	case SHORT:
-	case INT:
-	case LONG:
-	case ENUM:
-		return 1;
-#ifndef NOBITFIELD
-	case FIELD:
-		return is_integral_type(tp->tp_up);
-#endif NOBITFIELD
-	default:
-		return 0;
-	}
-}
-
-int
-is_arith_type(tp)
-	register struct type *tp;
-{
-	switch (tp->tp_fund)	{
-	case GENERIC:
-	case CHAR:
-	case SHORT:
-	case INT:
-	case LONG:
-	case ENUM:
-	case FLOAT:
-	case DOUBLE:
-	case LNGDBL:
-		return 1;
-#ifndef NOBITFIELD
-	case FIELD:
-		return is_arith_type(tp->tp_up);
-#endif NOBITFIELD
-	default:
-		return 0;
-	}
-}

+ 0 - 352
lang/cem/cemcom.ansi/ch7bin.c

@@ -1,352 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* $Header$ */
-/* SEMANTIC ANALYSIS (CHAPTER 3.3)  --  BINARY OPERATORS */
-
-#include	"botch_free.h"
-#include	<alloc.h>
-#include	"lint.h"
-#include	"idf.h"
-#include	<flt_arith.h>
-#include	"arith.h"
-#include	"type.h"
-#include	"struct.h"
-#include	"label.h"
-#include	"expr.h"
-#include	"Lpars.h"
-
-extern char options[];
-extern char *symbol2str();
-
-/*	This chapter asks for the repeated application of code to handle
-	an operation that may be executed at compile time or at run time,
-	depending on the constancy of the operands.
-*/
-
-#define commutative_binop(expp, oper, expr)	mk_binop(expp, oper, expr, 1)
-#define non_commutative_binop(expp, oper, expr)	mk_binop(expp, oper, expr, 0)
-
-ch7bin(expp, oper, expr)
-	register struct expr **expp;
-	struct expr *expr;
-{
-	/*	apply binary operator oper between *expp and expr.
-		NB: don't swap operands if op is one of the op= operators!!!
-	*/
-
-	any2opnd(expp, oper);
-	any2opnd(&expr, oper);
-	switch (oper)	{
-	case '[':				/* 3.3.2.1 */
-		/* indexing follows the commutative laws */
-		switch ((*expp)->ex_type->tp_fund)	{
-		case POINTER:
-		case ARRAY:
-			break;
-		case ERRONEOUS:
-			return;
-		default:		/* unindexable */
-			switch (expr->ex_type->tp_fund)	{
-			case POINTER:
-			case ARRAY:
-				break;
-			case ERRONEOUS:
-				return;
-			default:
-				expr_error(*expp,
-					"indexing an object of type %s",
-					symbol2str((*expp)->ex_type->tp_fund));
-				return;
-			}
-			break;
-		}
-		ch7bin(expp, '+', expr);
-		ch7mon('*', expp);
-		break;
-
-	case '(':				/* 3.3.2.2 */
-		if (	(*expp)->ex_type->tp_fund == POINTER &&
-			(*expp)->ex_type->tp_up->tp_fund == FUNCTION
-		)	{
-			ch7mon('*', expp);
-		}
-		if ((*expp)->ex_type->tp_fund != FUNCTION)	{
-			expr_error(*expp, "call of non-function (%s)",
-				symbol2str((*expp)->ex_type->tp_fund));
-			/* leave the expression; it may still serve */
-			free_expression(expr);	/* there go the parameters */
-			*expp = new_oper(error_type,
-					*expp, '(', (struct expr *)0);
-		}
-		else
-			*expp = new_oper((*expp)->ex_type->tp_up,
-					*expp, '(', expr);
-		(*expp)->ex_flags |= EX_SIDEEFFECTS;
-		break;
-
-	case PARCOMMA:				/* 3.3.2.2 */
-		if ((*expp)->ex_type->tp_fund == FUNCTION)
-			function2pointer(*expp);
-		*expp = new_oper(expr->ex_type, *expp, PARCOMMA, expr);
-		break;
-
-	case '%':
-	case MODAB:
-	case ANDAB:
-	case XORAB:
-	case ORAB:
-		opnd2integral(expp, oper);
-		opnd2integral(&expr, oper);
-		/* fallthrough */
-	case '/':
-	case DIVAB:
-	case TIMESAB:
-		arithbalance(expp, oper, &expr);
-		non_commutative_binop(expp, oper, expr);
-		break;
-
-	case '&':
-	case '^':
-	case '|':
-		opnd2integral(expp, oper);
-		opnd2integral(&expr, oper);
-		/* fallthrough */
-	case '*':
-		arithbalance(expp, oper, &expr);
-		commutative_binop(expp, oper, expr);
-		break;
-
-	case '+':
-		if (expr->ex_type->tp_fund == POINTER)	{ /* swap operands */
-			struct expr *etmp = expr;
-			expr = *expp;
-			*expp = etmp;
-		}
-		/* fallthrough */
-	case PLUSAB:
-	case POSTINCR:
-	case PLUSPLUS:
-		if ((*expp)->ex_type->tp_fund == POINTER)	{
-			pointer_arithmetic(expp, oper, &expr);
-			if (expr->ex_type->tp_size != (*expp)->ex_type->tp_size)
-				ch7cast(&expr, CAST, (*expp)->ex_type);
-			pointer_binary(expp, oper, expr);
-		}
-		else	{
-			arithbalance(expp, oper, &expr);
-			if (oper == '+')
-				commutative_binop(expp, oper, expr);
-			else
-				non_commutative_binop(expp, oper, expr);
-		}
-		break;
-
-	case '-':
-	case MINAB:
-	case POSTDECR:
-	case MINMIN:
-		if ((*expp)->ex_type->tp_fund == POINTER)	{
-			if (expr->ex_type->tp_fund == POINTER)
-				pntminuspnt(expp, oper, expr);
-			else {
-				pointer_arithmetic(expp, oper, &expr);
-				pointer_binary(expp, oper, expr);
-			}
-		}
-		else	{
-			arithbalance(expp, oper, &expr);
-			non_commutative_binop(expp, oper, expr);
-		}
-		break;
-
-	case LEFT:
-	case RIGHT:
-	case LEFTAB:
-	case RIGHTAB:
-		opnd2integral(expp, oper);
-		opnd2integral(&expr, oper);
-		arithbalance(expp, oper, &expr); /* ch. 7.5 */
-		ch7cast(&expr, oper, int_type); /* cvt. rightop to int */
-		non_commutative_binop(expp, oper, expr);
-		break;
-
-	case '<':
-	case '>':
-	case LESSEQ:
-	case GREATEREQ:
-	case EQUAL:
-	case NOTEQUAL:
-		relbalance(expp, oper, &expr);
-		non_commutative_binop(expp, oper, expr);
-		(*expp)->ex_type = int_type;
-		break;
-
-	case AND:
-	case OR:
-		opnd2test(expp, oper);
-		opnd2test(&expr, oper);
-		if (is_cp_cst(*expp))	{
-			register struct expr *ex = *expp;
-
-			/* the following condition is a short-hand for
-				((oper == AND) && o1) || ((oper == OR) && !o1)
-				where o1 == (*expp)->VL_VALUE;
-				and ((oper == AND) || (oper == OR))
-			*/
-			if ((oper == AND) == (ex->VL_VALUE != (arith)0))
-				*expp = expr;
-			else {
-				ex->ex_flags |= expr->ex_flags;
-				free_expression(expr);
-				*expp = intexpr((arith)((oper == AND) ? 0 : 1),
-						INT);
-			}
-			(*expp)->ex_flags |= ex->ex_flags;
-			free_expression(ex);
-		}
-		else
-		if (is_cp_cst(expr))	{
-			/* Note!!!: the following condition is a short-hand for
-				((oper == AND) && o2) || ((oper == OR) && !o2)
-				where o2 == expr->VL_VALUE
-				and ((oper == AND) || (oper == OR))
-			*/
-			if ((oper == AND) == (expr->VL_VALUE != (arith)0)) {
-				(*expp)->ex_flags |= expr->ex_flags;
-				free_expression(expr);
-			}
-			else {
-				if (oper == OR)
-					expr->VL_VALUE = (arith)1;
-				ch7bin(expp, ',', expr);
-			}
-		}
-		else {
-			*expp = new_oper(int_type, *expp, oper, expr);
-		}
-		(*expp)->ex_flags |= EX_LOGICAL;
-		break;
-
-	case ':':
-		if (	is_struct_or_union((*expp)->ex_type->tp_fund)
-		||	is_struct_or_union(expr->ex_type->tp_fund)
-		)	{
-			if (!equal_type((*expp)->ex_type, expr->ex_type))
-				expr_error(*expp, "illegal balance");
-		}
-		else
-			relbalance(expp, oper, &expr);
-#ifdef	LINT
-		if (	(is_cp_cst(*expp) && is_cp_cst(expr))
-		&&	(*expp)->VL_VALUE == expr->VL_VALUE
-		) {
-			hwarning("operands of : are constant and equal");
-		}
-#endif	LINT
-		*expp = new_oper((*expp)->ex_type, *expp, oper, expr);
-		break;
-
-	case '?':
-		opnd2logical(expp, oper);
-		if (is_cp_cst(*expp)) {
-#ifdef	LINT
-			hwarning("condition in ?: expression is constant");
-#endif	LINT
-			*expp = (*expp)->VL_VALUE ?
-				expr->OP_LEFT : expr->OP_RIGHT;
-		}
-		else {
-			*expp = new_oper(expr->ex_type, *expp, oper, expr);
-		}
-		break;
-
-	case ',':
-		if (is_cp_cst(*expp))
-			*expp = expr;
-		else
-			*expp = new_oper(expr->ex_type, *expp, oper, expr);
-		(*expp)->ex_flags |= EX_COMMA;
-		break;
-	}
-}
-
-pntminuspnt(expp, oper, expr)
-	register struct expr **expp, *expr;
-{
-	/*	Subtracting two pointers is so complicated it merits a
-		routine of its own.
-	*/
-	struct type *up_type = (*expp)->ex_type->tp_up;
-
-	if (!equal_type(up_type, expr->ex_type->tp_up)) {
-		expr_error(*expp, "subtracting incompatible pointers");
-		free_expression(expr);
-		erroneous2int(expp);
-		return;
-	}
-	/*	we hope the optimizer will eliminate the load-time
-		pointer subtraction
-	*/
-	*expp = new_oper((*expp)->ex_type, *expp, oper, expr);
-	ch7cast(expp, CAST, pa_type);	/* ptr-ptr: result has pa_type	*/
-	ch7bin(expp, '/',
-		intexpr(size_of_type(up_type, "object"), pa_type->tp_fund));
-	ch7cast(expp, CAST, int_type);	/* result will be an integer expr */
-}
-
-mk_binop(expp, oper, expr, commutative)
-	struct expr **expp;
-	register struct expr *expr;
-{
-	/*	Constructs in *expp the operation indicated by the operands.
-		"commutative" indicates whether "oper" is a commutative
-		operator.
-	*/
-	register struct expr *ex = *expp;
-
-	if (is_cp_cst(expr) && is_cp_cst(ex))
-		cstbin(expp, oper, expr);
-	else if (is_fp_cst(expr) && is_fp_cst(ex))
-		fltcstbin(expp, oper, expr);
-	else	{
-		*expp = (commutative && expr->ex_depth >= ex->ex_depth) ?
-				new_oper(ex->ex_type, expr, oper, ex) :
-				new_oper(ex->ex_type, ex, oper, expr);
-	}
-}
-
-pointer_arithmetic(expp1, oper, expp2)
-	register struct expr **expp1, **expp2;
-{
-	int typ;
-	/*	prepares the integral expression expp2 in order to
-		apply it to the pointer expression expp1
-	*/
-	if ((typ = any2arith(expp2, oper)) == FLOAT
-	    || typ == DOUBLE
-	    || typ == LNGDBL)	{
-		expr_error(*expp2,
-			"illegal combination of %s and pointer",
-			symbol2str(typ));
-		erroneous2int(expp2);
-	}
-	ch7bin( expp2, '*',
-		intexpr(size_of_type((*expp1)->ex_type->tp_up, "object"),
-			pa_type->tp_fund)
-	);
-}
-
-pointer_binary(expp, oper, expr)
-	register struct expr **expp, *expr;
-{
-	/*	constructs the pointer arithmetic expression out of
-		a pointer expression, a binary operator and an integral
-		expression.
-	*/
-	if (is_ld_cst(expr) && is_ld_cst(*expp))
-		cstbin(expp, oper, expr);
-	else
-		*expp = new_oper((*expp)->ex_type, *expp, oper, expr);
-}

+ 0 - 168
lang/cem/cemcom.ansi/ch7mon.c

@@ -1,168 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* $Header$ */
-/* SEMANTIC ANALYSIS (CHAPTER 3.3) -- MONADIC OPERATORS */
-
-#include	"botch_free.h"
-#include	<alloc.h>
-#include	"nobitfield.h"
-#include	"Lpars.h"
-#include	<flt_arith.h>
-#include	"arith.h"
-#include	"type.h"
-#include	"label.h"
-#include	"expr.h"
-#include	"idf.h"
-#include	"def.h"
-
-extern char options[];
-extern arith full_mask[/*MAXSIZE + 1*/];	/* cstoper.c */
-char *symbol2str();
-
-ch7mon(oper, expp)
-	register struct expr **expp;
-{
-	/*	The monadic prefix operator oper is applied to *expp.
-	*/
-	register struct expr *expr;
-
-	switch (oper)	{
-	case '*':			/* 3.3.3.2 */
-		/* no FIELD type allowed	*/
-		if ((*expp)->ex_type->tp_fund == ARRAY)
-			array2pointer(*expp);
-		if ((*expp)->ex_type->tp_fund != POINTER) {
-		    if ((*expp)->ex_type->tp_fund != FUNCTION) {
-			    expr_error(*expp,
-				    "* applied to non-pointer (%s)",
-				    symbol2str((*expp)->ex_type->tp_fund));
-		    } else {
-			    warning("superfluous use of * on function");
-			    /* ignore indirection (yegh) */
-		    }
-		} else {
-			expr = *expp;
-			if (expr->ex_lvalue == 0 && expr->ex_class != String)
-				/* dereference in administration only */
-				expr->ex_type = expr->ex_type->tp_up;
-			else	/* runtime code */
-				*expp = new_oper(expr->ex_type->tp_up, NILEXPR,
-							'*', expr);
-			(*expp)->ex_lvalue = (
-				(*expp)->ex_type->tp_fund != ARRAY &&
-				(*expp)->ex_type->tp_fund != FUNCTION
-				);
-			if ((*expp)->ex_type->tp_typequal & TQ_CONST)
-				(*expp)->ex_flags |= EX_READONLY;
-			if ((*expp)->ex_type->tp_typequal & TQ_VOLATILE)
-				(*expp)->ex_flags |= EX_VOLATILE;
-			(*expp)->ex_flags &= ~EX_ILVALUE;
-		}
-		break;
-	case '&':
-		if ((*expp)->ex_type->tp_fund == ARRAY) {
-			expr_warning(*expp, "& before array ignored");
-			array2pointer(*expp);
-		}
-		else
-		if ((*expp)->ex_type->tp_fund == FUNCTION) {
-			expr_warning(*expp, "& before function ignored");
-			function2pointer(*expp);
-		}
-		else
-#ifndef NOBITFIELD
-		if ((*expp)->ex_type->tp_fund == FIELD)
-			expr_error(*expp, "& applied to field variable");
-		else
-#endif NOBITFIELD
-		if (!(*expp)->ex_lvalue)
-			expr_error(*expp, "& applied to non-lvalue");
-		else if ((*expp)->ex_flags & EX_ILVALUE)
-			expr_error(*expp, "& applied to illegal lvalue");
-		else {
-			/* assume that enums are already filtered out	*/
-			if (ISNAME(*expp)) {
-				register struct def *def =
-					(*expp)->VL_IDF->id_def;
-
-				/*	&<var> indicates that <var>
-					cannot be used as register
-					anymore
-				*/
-				if (def->df_sc == REGISTER) {
-					expr_error(*expp,
-					"& on register variable not allowed");
-					break;	/* break case '&' */
-				}
-			}
-			(*expp)->ex_type = pointer_to((*expp)->ex_type,
-						(*expp)->ex_type->tp_typequal);
-			(*expp)->ex_lvalue = 0;
-			(*expp)->ex_flags &= ~EX_READONLY;
-		}
-		break;
-	case '~':
-	{
-		int fund = (*expp)->ex_type->tp_fund;
-
-		if (fund == FLOAT || fund == DOUBLE || fund == LNGDBL)	{
-			expr_error( *expp,
-				    "~ not allowed on %s operands",
-				    symbol2str(fund));
-			erroneous2int(expp);
-			break;
-		}
-		/* FALLTHROUGH */
-	}
-	case '-':
-		any2arith(expp, oper);
-		if (is_cp_cst(*expp))	{
-			arith o1 = (*expp)->VL_VALUE;
-
-			(*expp)->VL_VALUE = (oper == '-') ? -o1 :
-			  ((*expp)->ex_type->tp_unsigned ?
-				(~o1) & full_mask[(*expp)->ex_type->tp_size] :
-				~o1
-			  );
-		}
-		else
-		if (is_fp_cst(*expp))
-			switch_sign_fp(*expp);
-		else
-			*expp = new_oper((*expp)->ex_type,
-					NILEXPR, oper, *expp);
-		break;
-	case '!':
-		if ((*expp)->ex_type->tp_fund == FUNCTION)
-			function2pointer(*expp);
-		if ((*expp)->ex_type->tp_fund != POINTER)
-			any2arith(expp, oper);
-		opnd2test(expp, '!');
-		if (is_cp_cst(*expp))	{
-			(*expp)->VL_VALUE = !((*expp)->VL_VALUE);
-			(*expp)->ex_type = int_type;	/* a cast ???(EB) */
-		}
-		else
-			*expp = new_oper(int_type, NILEXPR, oper, *expp);
-		(*expp)->ex_flags |= EX_LOGICAL;
-		break;
-	case PLUSPLUS:
-	case MINMIN:
-		ch7incr(expp, oper);
-		break;
-	case SIZEOF:
-		if (ISNAME(*expp) && (*expp)->VL_IDF->id_def->df_formal_array)
-			expr_warning(*expp, "sizeof formal array %s is sizeof pointer!",
-				(*expp)->VL_IDF->id_text);
-		expr = intexpr((*expp)->ex_class == String ?
-				   (arith)((*expp)->SG_LEN) :
-				   size_of_type((*expp)->ex_type, "object"),
-				INT);
-		expr->ex_flags |= EX_SIZEOF;
-		free_expression(*expp);
-		*expp = expr;
-		break;
-	}
-}

+ 0 - 21
lang/cem/cemcom.ansi/decspecs.str

@@ -1,21 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* $Header$ */
-/* DECLARATION SPECIFIER DEFINITION */
-
-struct decspecs	{
-	struct decspecs *next;
-	struct type *ds_type;	/* single type */
-	int ds_notypegiven;	/* set if type not given explicitly */
-	int ds_typedef;		/* 1 if type was a user typedef */
-	int ds_sc_given;	/* 1 if the st. class is explicitly given */
-	int ds_sc;		/* storage class, given or implied */
-	int ds_size;		/* LONG, SHORT or 0 */
-	int ds_unsigned;	/* SIGNED, UNSIGNED or 0 */
-	int ds_typequal;	/* type qualifiers - see type.str */
-};
-
-extern struct type *qualifier_type();
-extern struct decspecs null_decspecs;

+ 0 - 74
lang/cem/cemcom.ansi/l_dummy.c

@@ -1,74 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* $Header$ */
-
-/*
- *The following functions are hacked to null-functions (i.e. they
- * do nothing). This needs another solution in the future.
- */
-#include	"lint.h"
-
-#ifdef	LINT
-
-#include	"arith.h"
-#include	"label.h"
-
-C_close(){}
-int C_busy(){return 0;}
-
-
-/* More routines */
-/* ARGSUSED */
-CC_bhcst(ps_xxx,n,w,i) arith n,w; {}
-/* ARGSUSED */
-CC_crcst(ps_xxx,v) arith v; {}
-/* ARGSUSED */
-CC_crdlb(ps_xxx,v,s) label v; arith s; {}
-/* ARGSUSED */
-CC_crdnam(ps_xxx,v,s) char *v; arith s; {}
-/* ARGSUSED */
-CC_crfcon(ps_xxx,v,s) char *v; arith s; {}
-/* ARGSUSED */
-CC_cricon(ps_xxx,v,s) char *v; arith s; {}
-/* ARGSUSED */
-CC_crilb(ps_xxx,v) label v; {}
-/* ARGSUSED */
-CC_crpnam(ps_xxx,v) char *v; {}
-/* ARGSUSED */
-CC_crscon(ps_xxx,v,s) char *v; arith s; {}
-/* ARGSUSED */
-CC_crucon(ps_xxx,v,s) char *v; arith s; {}
-/* ARGSUSED */
-CC_cst(l) {}
-/* ARGSUSED */
-CC_dfdlb(l) label l; {}
-/* ARGSUSED */
-CC_dfdnam(s) char *s; {}
-/* ARGSUSED */
-CC_dfilb(l) label l; {}
-/* ARGSUSED */
-CC_end(l) arith l; {}
-CC_msend() {}
-/* ARGSUSED */
-CC_msstart(ms) {}
-/* ARGSUSED */
-CC_opcst(op_xxx,c) arith c; {}
-/* ARGSUSED */
-CC_opdlb(op_xxx,g,o) label g; arith o; {}
-/* ARGSUSED */
-CC_opilb(op_xxx,b) label b; {}
-/* ARGSUSED */
-CC_oppnam(op_xxx,p) char *p; {}
-/* ARGSUSED */
-CC_pronarg(s) char *s; {}
-/* ARGSUSED */
-CC_psdlb(ps_xxx,l) label l; {}
-/* ARGSUSED */
-CC_psdnam(ps_xxx,s) char *s; {}
-/* ARGSUSED */
-CC_pspnam(ps_xxx,s) char *s; {}
-/* ARGSUSED */
-CC_scon(v,s) char *s; {}
-#endif	LINT

+ 0 - 246
lang/cem/cemcom.ansi/mcomm.c

@@ -1,246 +0,0 @@
-/* $Header$ */
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/*	mcomm.c -- change ".lcomm name" into ".comm name" where "name"
-	is specified in a list.
-*/
-#include <stdio.h>
-
-#define IDFSIZE 4096
-
-char *readfile();
-
-struct node {
-	char *name;
-	struct node *left, *right;
-};
-
-char *
-Malloc(n)
-	unsigned n;
-{
-	char *space;
-	char *malloc();
-
-	if ((space = malloc(n)) == 0) {
-		fprintf(stderr, "out of memory\n");
-		exit(1);
-	}
-	return space;
-}
-
-struct node *make_tree();
-
-#define new_node() ((struct node *) Malloc(sizeof (struct node)))
-
-main(argc, argv)
-	char *argv[];
-{
-	char *nl_file, *as_file;
-	char *nl_text, *as_text;
-	struct node *nl_tree = 0;
-	int nl_siz, as_siz;
-
-	if (argc != 3) {
-		fprintf(stderr, "use: %s namelist assembler_file\n", argv[0]);
-		exit(1);
-	}
-	nl_file = argv[1];
-	as_file = argv[2];
-
-	if ((nl_text = readfile(nl_file, &nl_siz)) == 0) {
-		fprintf(stderr, "%s: cannot read namelist %s\n",
-			argv[0], nl_file);
-		exit(1);
-	}
-
-	if ((as_text = readfile(as_file, &as_siz)) == 0) {
-		fprintf(stderr, "%s: cannot read assembler file %s\n",
-			argv[0], as_file);
-		exit(1);
-	}
-
-	nl_tree = make_tree(nl_text);
-	edit(as_text, nl_tree);
-
-	if (writefile(as_file, as_text, as_siz) == 0) {
-		fprintf(stderr, "%s: cannot write to %s\n", argv[0], as_file);
-		exit(1);
-	}
-	return 0;
-}
-
-#include <sys/types.h>
-#include <stat.h>
-
-char *
-readfile(filename, psiz)
-	char *filename;
-	int *psiz;
-{
-	struct stat stbuf;	/* for `stat' to get filesize		*/
-	register int fd;	/* filedescriptor for `filename'	*/
-	register char *cbuf;	/* pointer to buffer to be returned	*/
-
-	if (((fd = open(filename, 0)) < 0) || (fstat(fd, &stbuf) != 0))
-		return 0;
-	cbuf = Malloc(stbuf.st_size + 1);
-	if (read(fd, cbuf, stbuf.st_size) != stbuf.st_size)
-		return 0;
-	cbuf[stbuf.st_size] = '\0';
-	close(fd);		/* filedes no longer needed	*/
-	*psiz = stbuf.st_size;
-	return cbuf;
-}
-
-int
-writefile(filename, text, size)
-	char *filename, *text;
-{
-	register fd;
-
-	if ((fd = open(filename, 1)) < 0)
-		return 0;
-	if (write(fd, text, size) != size)
-		return 0;
-	close(fd);
-	return 1;
-}
-
-struct node *
-make_tree(nl)
-	char *nl;
-{
-	char *id = nl;
-	struct node *tree = 0;
-
-	while (*nl) {
-		if (*nl == '\n') {
-			*nl = '\0';
-			insert(&tree, id);
-			id = ++nl;
-		}
-		else {
-			++nl;
-		}
-	}
-	return tree;
-}
-
-insert(ptree, id)
-	struct node **ptree;
-	char *id;
-{
-	register cmp;
-
-	if (*ptree == 0) {
-		register struct node *nnode = new_node();
-
-		nnode->name = id;
-		nnode->left = nnode->right = 0;
-		*ptree = nnode;
-	}
-	else
-	if ((cmp = strcmp((*ptree)->name, id)) < 0)
-		insert(&((*ptree)->right), id);
-	else
-	if (cmp > 0)
-		insert(&((*ptree)->left), id);
-}
-
-struct node *
-find(tree, id)
-	struct node *tree;
-	char *id;
-{
-	register cmp;
-
-	if (tree == 0)
-		return 0;
-	if ((cmp = strcmp(tree->name, id)) < 0)
-		return find(tree->right, id);
-	if (cmp > 0)
-		return find(tree->left, id);
-	return tree;
-}
-
-edit(text, tree)
-	char *text;
-	struct node *tree;
-{
-	register char *ptr = text;
-	char idbuf[IDFSIZE];
-	register char *id;
-	register char *save_ptr;
-
-	while (*ptr) {
-		if (
-			*ptr   == '.' &&
-			*++ptr == 'l' &&
-			*++ptr == 'c' &&
-			*++ptr == 'o' &&
-			*++ptr == 'm' &&
-			*++ptr == 'm' &&
-			(*++ptr == ' ' || *ptr == '\t')
-		)
-		{
-			save_ptr = ptr - 6;
-			while (*++ptr == ' ' || *ptr == '\t')
-				;
-			if (*ptr == '_')
-				++ptr;
-			if (InId(*ptr)) {
-				id = &idbuf[0];
-				*id++ = *ptr++;
-				while (InId(*ptr))
-					*id++ = *ptr++;
-				*id = '\0';
-				if (find(tree, idbuf) != 0) {
-					*save_ptr++ = ' ';
-					*save_ptr++ = '.';
-				}
-			}
-		}
-		while (*ptr && *ptr++ != '\n')
-			;
-	}
-}
-
-InId(c)
-{
-	switch (c) {
-
-	case 'a': case 'b': case 'c': case 'd': case 'e':
-	case 'f': case 'g': case 'h': case 'i': case 'j':
-	case 'k': case 'l': case 'm': case 'n': case 'o':
-	case 'p': case 'q': case 'r': case 's': case 't':
-	case 'u': case 'v': case 'w': case 'x': case 'y':
-	case 'z':
-	case 'A': case 'B': case 'C': case 'D': case 'E':
-	case 'F': case 'G': case 'H': case 'I': case 'J':
-	case 'K': case 'L': case 'M': case 'N': case 'O':
-	case 'P': case 'Q': case 'R': case 'S': case 'T':
-	case 'U': case 'V': case 'W': case 'X': case 'Y':
-	case 'Z':
-	case '_':
-	case '.':
-	case '0': case '1': case '2': case '3': case '4':
-	case '5': case '6': case '7': case '8': case '9':
-		return 1;
-	
-	default:
-		return 0;
-	}
-}
-
-puttree(nd)
-	struct node *nd;
-{
-	if (nd) {
-		puttree(nd->left);
-		printf("%s\n", nd->name);
-		puttree(nd->right);
-	}
-}

+ 0 - 9
lang/cem/cemcom.ansi/nmclash.c

@@ -1,9 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* Accepted if many characters of long names are significant */
-/* $Header$ */
-abcdefghijklmnopr() { }
-abcdefghijklmnopq() { }
-main() { }

+ 0 - 237
lang/cem/cemcom.ansi/scan.c

@@ -1,237 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* $Header$ */
-/* PREPROCESSOR: SCANNER FOR THE ACTUAL PARAMETERS OF MACROS	*/
-
-#include	"nopp.h"
-
-#ifndef NOPP
-/*	This file contains the function getactuals() which scans an actual
-	parameter list and splits it up into a list of strings, each one
-	representing an actual parameter.
-*/
-
-#include	"lapbuf.h"	/* UF */
-#include	"nparams.h"	/* UF */
-
-#include	"input.h"
-#include	"class.h"
-#include	"idf.h"
-#include	"macro.h"
-#include	"interface.h"
-#include	"file_info.h"
-
-#define	EOS		'\0'
-#define	overflow()	(fatal("actual parameter buffer overflow"))
-
-PRIVATE char apbuf[LAPBUF]; /* temporary storage for actual parameters	*/
-PRIVATE char *actparams[NPARAMS]; /* pointers to the text of the actuals */
-PRIVATE char *aptr;	/* pointer to last inserted character in apbuf	*/
-
-#define	copy(ch)	((aptr < &apbuf[LAPBUF]) ? (*aptr++ = ch) : overflow())
-
-PRIVATE int nr_of_params;	/* number of actuals read until now	*/
-
-PRIVATE char **
-getactuals(idef)
-	register struct idf *idef;
-{
-	/*	getactuals() collects the actual parameters and turns them
-		into a list of strings, a pointer to which is returned.
-	*/
-	register acnt = idef->id_macro->mc_nps;
-
-	nr_of_params = 0;
-	actparams[0] = aptr = &apbuf[0];
-	copyact('(', ')', 0);	/* read the actual parameters	*/
-	copy(EOS);		/* mark the end of it all	*/
-
-	if (!nr_of_params++)	{		/* 0 or 1 parameter	*/
-		/* there could be a ( <spaces, comment, ...> )
-		*/
-		register char *p = actparams[0];
-
-		while ((class(*p) == STSKIP) || (*p == '\n')) {
-				++p;
-		}
-
-		if (!*p) {	/* the case () : 0 parameters	*/
-			nr_of_params--;
-		}
-	}
-
-	if (nr_of_params != acnt)	{
-		/*	argument mismatch: too many or too few
-			actual parameters.
-		*/
-		lexwarning("argument mismatch, %s", idef->id_text);
-
-		while (nr_of_params < acnt) {
-			/*	too few paraeters: remaining actuals are ""
-			*/
-			actparams[nr_of_params] = "";
-			nr_of_params++;
-		}
-	}
-
-	return actparams;
-}
-
-PRIVATE
-copyact(ch1, ch2, lvl)
-	char ch1, ch2;
-	int lvl;
-{
-	/*	copyact() is taken from Ceriel Jacobs' LLgen, with
-		permission.  Its task is to build a list of actuals
-		parameters, which list is surrounded by '(' and ')' and in
-		which the parameters are separated by ',' if there are
-		more than 1. The balancing of '(',')' and '[',']' and
-		'{','}' is taken care of by calling this function
-		recursively. At each level lvl, copyact() reads the input,
-		upto the corresponding closing bracket.
-
-		Opening bracket is ch1, closing bracket is ch2. If
-		lvl != 0, copy opening and closing parameters too.
-	*/
-	register int ch;		/* Current char */
-	register int match;		/* used to read strings */
-
-	if (lvl) {
-		copy(ch1);
-	}
-
-	for (;;)	{
-		LoadChar(ch);
-
-		if (ch == ch2)	{
-			if (lvl) {
-				copy(ch);
-			}
-			return;
-		}
-
-		switch(ch)	{
-
-#ifdef __MATCHING_PAR__
-		case ')':
-		case '}':
-		case ']':
-			lexerror("unbalanced parenthesis");
-			break;
-#endif __MATCHING_PAR__
-
-		case '(':
-			copyact('(', ')', lvl+1);
-			break;
-
-#ifdef __MATCHING_PAR__
-		case '{':
-			/*	example:
-					#define declare(v, t)	t v
-					declare(v, union{int i, j; float r;});
-			*/
-			copyact('{', '}', lvl+1);
-			break;
-
-		case '[':
-			copyact('[', ']', lvl+1);
-			break;
-#endif __MATCHING_PAR__
-
-		case '\n':
-			LineNumber++;
-			while (LoadChar(ch), ch == '#')	{
-				/*	This piece of code needs some
-					explanation: consider the call of
-					the macro defined as:
-						#define sum(b,c) (b + c)
-					in the following form:
-						sum(
-						#include my_phone_number
-						,2)
-					in which case the include must be
-					interpreted as such.
-				*/
-				domacro();	/* has read nl, vt or ff */
-				/* Loop, for another control line */
-			}
-
-			PushBack();
-			copy(' ');
-			break;
-
-		case '/':
-			LoadChar(ch);
-
-			if (ch == '*' && !InputLevel)	{	/* skip comment	*/
-				skipcomment();
-				continue;
-			}
-
-			PushBack();
-			copy('/');
-			break;
-
-		case ',':
-			if (!lvl)	{
-				/* next parameter encountered */
-				copy(EOS);
-
-				if (++nr_of_params >= NPARAMS) {
-					fatal("too many actual parameters");
-				}
-
-				actparams[nr_of_params] = aptr;
-			}
-			else	{
-				copy(ch);
-			}
-			break;
-
-		case '\'':
-		case '"' :
-			/*	watch out for brackets in strings, they do
-				not count !
-			*/
-			match = ch;
-			copy(ch);
-			while (LoadChar(ch), ch != EOI)	{
-				if (ch == match) {
-					break;
-				}
-
-				if (ch == '\\')	{
-					copy(ch);
-					LoadChar(ch);
-				}
-				else
-				if (ch == '\n')	{
-					lexerror("newline in string");
-					LineNumber++;
-					copy(match);
-					break;
-				}
-
-				copy(ch);
-			}
-
-			if (ch == match)	{
-				copy(ch);
-				break;
-			}
-			/* Fall through */
-
-		case EOI :
-			lexerror("unterminated macro call");
-			return;
-
-		default:
-			copy(ch);
-			break;
-		}
-	}
-}
-#endif NOPP

+ 0 - 88
lang/cem/cemcom/Files

@@ -1,88 +0,0 @@
-Files
-cem.1
-cem.c
-cemcom.1
-Parameters
-Makefile
-LLlex.c
-LLlex.h
-LLmessage.c
-align.h
-alloc.c
-alloc.h
-arith.c
-arith.h
-asm.c
-assert.h
-atw.h
-blocks.c
-char.tab
-ch7.c
-ch7bin.c
-ch7mon.c
-class.h
-code.c
-code.str
-conversion.c
-cstoper.c
-dataflow.c
-declar.g
-declarator.c
-declar.str
-decspecs.c
-decspecs.str
-def.str
-domacro.c
-dumpidf.c
-error.c
-eval.c
-expr.c
-expr.str
-expression.g
-faulty.h
-field.c
-field.str
-file_info.h
-idf.c
-idf.str
-init.c
-input.c
-input.h
-interface.h
-ival.c
-label.c
-label.h
-level.h
-macro.str
-main.c
-make.allocd
-make.hfiles
-make.next
-make.tokcase
-make.tokfile
-mcomm.c
-mes.h
-options
-options.c
-program.g
-replace.c
-scan.c
-sizes.h
-skip.c
-specials.h
-stack.c
-stack.str
-statement.g
-stb.c
-storage.c
-storage.h
-stmt.str
-struct.c
-struct.str
-switch.c
-switch.str
-tab.c
-tokenname.c
-tokenname.h
-type.c
-type.str

+ 0 - 146
lang/cem/cemcom/LintPars

@@ -1,146 +0,0 @@
-!File: lint.h
-#define	LINT		1	/* if defined, 'lint' is produced	*/
-
-
-!File: pathlength.h
-#define PATHLENGTH	1024	/* max. length of path to file		*/
-
-
-!File: errout.h
-#define	ERROUT		STDERR	/* file pointer for writing messages	*/
-#define	ERR_SHADOW	0	/* a syntax error overshadows error messages
-					until ERR_SHADOW symbols have been
-					accepted without syntax error */
-
-
-!File: idfsize.h
-#define	IDFSIZE	64	/* maximum significant length of an identifier	*/
-
-
-!File: numsize.h
-#define	NUMSIZE	256	/* maximum length of a numeric constant		*/
-
-
-!File: nparams.h
-#define	NPARAMS 32	/* maximum number of parameters of macros	*/
-
-
-!File: ifdepth.h
-#define	IFDEPTH	256	/* maximum number of nested if-constructions	*/
-
-
-!File: density.h
-#define	DENSITY	2	/* see switch.[ch] for an explanation		*/
-
-
-!File: lapbuf.h
-#define	LAPBUF	4096	/* size of macro actual parameter buffer	*/
-
-
-!File: strsize.h
-#define ISTRSIZE	32	/* minimum number of bytes allocated for
-					storing a string		*/
-#define RSTRSIZE	8	/* step size in enlarging the memory for
-					the storage of a string		*/
-
-
-!File: target_sizes.h
-#define MAXSIZE		8	/* the maximum of the SZ_* constants	*/
-
-/* target machine sizes	*/
-#define	SZ_CHAR		(arith)1
-#define	SZ_SHORT	(arith)2
-#define SZ_WORD		(arith)4
-#define	SZ_INT		(arith)4
-#define	SZ_LONG		(arith)4
-#ifndef NOFLOAT
-#define	SZ_FLOAT	(arith)4
-#define	SZ_DOUBLE	(arith)8
-#endif NOFLOAT
-#define	SZ_POINTER	(arith)4
-
-/* target machine alignment requirements	*/
-#define	AL_CHAR		1
-#define	AL_SHORT	SZ_SHORT
-#define AL_WORD		SZ_WORD
-#define	AL_INT		SZ_WORD
-#define	AL_LONG		SZ_WORD
-#ifndef NOFLOAT
-#define	AL_FLOAT	SZ_WORD
-#define	AL_DOUBLE	SZ_WORD
-#endif NOFLOAT
-#define	AL_POINTER	SZ_WORD
-#define AL_STRUCT	1
-#define AL_UNION	1
-
-
-!File: botch_free.h
-#undef BOTCH_FREE	1	/* when defined, botch freed memory, as a check	*/
-
-
-!File: dataflow.h
-#undef	DATAFLOW	1	/* produce some compile-time xref	*/
-
-
-!File: debug.h
-#undef DEBUG		1	/* perform various self-tests		*/
-
-
-!File: use_tmp.h
-#undef PREPEND_SCOPES	1	/* collect exa, exp, ina and inp commands
-					and if USE_TMP is defined let them
-					precede the rest of the generated
-					compact code	*/
-#undef USE_TMP		1	/* use C_insertpart, C_endpart mechanism
-					to generate EM-code in the order needed
-					for the code-generators. If not defined,
-					the old-style peephole optimizer is
-					needed.	*/
-
-
-!File: parbufsize.h
-#define PARBUFSIZE	1024
-
-
-!File: textsize.h
-#define ITEXTSIZE	8	/* 1st piece of memory for repl. text	*/
-#define RTEXTSIZE	8	/* stepsize for enlarging repl.text	*/
-
-
-!File: inputtype.h
-#define INP_READ_IN_ONE	1	/* read input file in one	*/
-
-
-!File: nopp.h
-#undef NOPP		1	/* if NOT defined, use built-int preprocessor */
-
-
-!File: nobitfield.h
-#undef NOBITFIELD	1	/* if NOT defined, implement bitfields	*/
-
-
-!File: spec_arith.h
-/* describes internal compiler arithmetics */
-#undef	SPECIAL_ARITHMETICS	/* something different from native long */
-
-
-!File: static.h
-#define GSTATIC			/* for large global "static" arrays */
-
-
-!File: nofloat.h
-#undef NOFLOAT		1	/* if NOT defined, floats are implemented */
-
-
-!File: noRoption.h
-#undef NOROPTION	1	/* if NOT defined, R option is implemented */
-
-
-!File: nocross.h
-#undef NOCROSS		1	/* if NOT defined, cross compiler */
-
-
-!File: regcount.h
-#undef REGCOUNT		1	/* count occurrences for register messages */
-
-

+ 0 - 139
lang/cem/cemcom/Parameters

@@ -1,139 +0,0 @@
-!File: lint.h
-#undef	LINT		1	/* if defined, 'lint' is produced	*/
-
-
-!File: pathlength.h
-#define PATHLENGTH	1024	/* max. length of path to file		*/
-
-
-!File: errout.h
-#define	ERROUT		STDERR	/* file pointer for writing messages	*/
-#define	MAXERR_LINE	5	/* maximum number of error messages given
-					on the same input line.		*/
-
-
-!File: idfsize.h
-#define	IDFSIZE	64	/* maximum significant length of an identifier	*/
-
-
-!File: numsize.h
-#define	NUMSIZE	256	/* maximum length of a numeric constant		*/
-
-
-!File: nparams.h
-#define	NPARAMS 32	/* maximum number of parameters of macros	*/
-
-
-!File: ifdepth.h
-#define	IFDEPTH	256	/* maximum number of nested if-constructions	*/
-
-
-!File: density.h
-#define	DENSITY	2	/* see switch.[ch] for an explanation		*/
-
-
-!File: lapbuf.h
-#define	LAPBUF	4096	/* size of macro actual parameter buffer	*/
-
-
-!File: strsize.h
-#define ISTRSIZE	32	/* minimum number of bytes allocated for
-					storing a string		*/
-#define RSTRSIZE	8	/* step size in enlarging the memory for
-					the storage of a string		*/
-
-
-!File: target_sizes.h
-#define MAXSIZE		8	/* the maximum of the SZ_* constants	*/
-
-/* target machine sizes	*/
-#define	SZ_CHAR		(arith)1
-#define	SZ_SHORT	(arith)2
-#define SZ_WORD		(arith)4
-#define	SZ_INT		(arith)4
-#define	SZ_LONG		(arith)4
-#ifndef NOFLOAT
-#define	SZ_FLOAT	(arith)4
-#define	SZ_DOUBLE	(arith)8
-#endif NOFLOAT
-#define	SZ_POINTER	(arith)4
-
-/* target machine alignment requirements	*/
-#define	AL_CHAR		1
-#define	AL_SHORT	SZ_SHORT
-#define AL_WORD		SZ_WORD
-#define	AL_INT		SZ_WORD
-#define	AL_LONG		SZ_WORD
-#ifndef NOFLOAT
-#define	AL_FLOAT	SZ_WORD
-#define	AL_DOUBLE	SZ_WORD
-#endif NOFLOAT
-#define	AL_POINTER	SZ_WORD
-#define AL_STRUCT	1
-#define AL_UNION	1
-
-
-!File: botch_free.h
-#undef BOTCH_FREE	1	/* when defined, botch freed memory, as a check	*/
-
-
-!File: dataflow.h
-#define DATAFLOW	1	/* produce some compile-time xref	*/
-
-
-!File: debug.h
-#undef DEBUG		1	/* perform various self-tests		*/
-
-
-!File: use_tmp.h
-#define USE_TMP		1	/* collect exa, exp, ina and inp commands
-					and let them precede the rest of
-					the generated compact code	*/
-
-
-!File: parbufsize.h
-#define PARBUFSIZE	1024
-
-
-!File: textsize.h
-#define ITEXTSIZE	8	/* 1st piece of memory for repl. text	*/
-#define RTEXTSIZE	8	/* stepsize for enlarging repl.text	*/
-
-
-!File: inputtype.h
-#define INP_READ_IN_ONE	1	/* read input file in one	*/
-
-
-!File: nopp.h
-#undef NOPP		1	/* if NOT defined, use built-int preprocessor */
-
-
-!File: nobitfield.h
-#undef NOBITFIELD	1	/* if NOT defined, implement bitfields	*/
-
-
-!File: spec_arith.h
-/* describes internal compiler arithmetics */
-#undef	SPECIAL_ARITHMETICS	/* something different from native long */
-
-
-!File: static.h
-#define GSTATIC			/* for large global "static" arrays */
-
-
-!File: nofloat.h
-#undef NOFLOAT		1	/* if NOT defined, floats are implemented */
-
-
-!File: noRoption.h
-#undef NOROPTION	1	/* if NOT defined, R option is implemented */
-
-
-!File: nocross.h
-#undef NOCROSS		1	/* if NOT defined, cross compiler */
-
-
-!File: regcount.h
-#undef REGCOUNT		1	/* count occurrences for register messages */
-
-

+ 0 - 67
lang/cem/cemcom/Resolve

@@ -1,67 +0,0 @@
-: create a directory Xsrc with name clashes resolved
-: and run make in that directory
-: '$Header$'
-
-case $# in
-1)	
-	;;
-*)	echo "$0: one argument expected" 1>&2
-	exit 1
-	;;
-esac
-PW=`pwd`
-options=
-case $1 in
-main|emain|lnt)
-	target=$PW/$1
-	;;
-omain)
-	target=$PW/$1
-	options=-DPEEPHOLE
-	;;
-cemain)
-	target=$PW/$1
-	options=-DCODE_EXPANDER
-	;;
-Xlint)
-	target=$1
-	;;
-*)	echo "$0: $1: Illegal argument" 1>&2
-	exit 1
-	;;
-esac
-if test -d ../Xsrc
-then
-	:
-else	mkdir ../Xsrc
-fi
-make EMHOME=$EMHOME longnames
-: remove code generating routines from the clashes list as they are defines.
-: code generating routine names start with C_
-sed '/^C_/d' < longnames > tmp$$
-cclash -c -l7 tmp$$ > ../Xsrc/Xclashes
-rm -f tmp$$
-cd ../Xsrc
-if cmp -s Xclashes clashes
-then
-	:
-else
-	mv Xclashes clashes
-fi
-rm -f Makefile
-for i in `cat $PW/Cfiles`
-do
-	cat >> Makefile <<EOF
-
-$i:	clashes $PW/$i
-	cid -Fclashes < $PW/$i > $i
-EOF
-done
-make EMHOME=$EMHOME `cat $PW/Cfiles`
-rm -f Makefile
-ed - $PW/Makefile <<'EOF'
-/^#EXCLEXCL/,/^#INCLINCL/d
-w Makefile
-q
-EOF
-make EMHOME=$EMHOME COPTIONS=$options MACH=$mach CURRDIR=$PW/ $target

+ 0 - 8
lang/cem/cemcom/Version.c

@@ -1,8 +0,0 @@
-/* $Header$ */
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-#ifndef	lint
-static char Version[] = "ACK CEM compiler Version 3.2";
-#endif	lint

+ 0 - 159
lang/cem/cemcom/alloc.c

@@ -1,159 +0,0 @@
-/* $Header$ */
-/*	M E M O R Y  A L L O C A T I O N  R O U T I N E S	*/
-
-/*	The allocation of memory in this program, which plays an important
-	role in reading files, replacing macros and building expression
-	trees, is not performed by malloc etc.  The reason for having own
-	memory allocation routines (malloc(), realloc() and free()) is
-	plain: the garbage collection performed by the library functions
-	malloc(), realloc() and free() costs a lot of time, while in most
-	cases (on a VAX) the freeing and reallocation of memory is not
-	necessary.  The only reallocation done in this program is at
-	building strings in memory.  This means that the last
-	(re-)allocated piece of memory can be extended.
-
-	The (basic) memory allocating routines offered by this memory
-	handling package are:
-
-	char *malloc(n)		: allocate n bytes
-	char *realloc(ptr, n)	: reallocate buffer to n bytes
-					(works only if ptr was last allocated)
-	free(ptr)		: if ptr points to last allocated
-					memory, this memory is re-allocatable
-	Salloc(str, sz)		: save string in malloc storage
-*/
-
-#include	<system.h>
-#include	"myalloc.h"	/* UF */
-#include	"debug.h"	/* UF */
-
-#include	"alloc.h"
-#include	"assert.h"
-
-#ifdef	OWNALLOC
-char *sys_break();
-/* the following variables are used for book-keeping		 */
-static int nfreebytes = 0;	/* # free bytes in sys_break space */
-static char *freeb;		/* pointer to first free byte	 */
-static char *lastalloc;		/* pointer to last malloced sp	 */
-static int lastnbytes;		/* nr of bytes in last allocated */
-				/* space			 */
-static char *firstfreeb = 0;
-
-#endif	OWNALLOC
-
-char *
-Salloc(str, sz)
-	register char str[];
-	register int sz;
-{
-	/*	Salloc() is not a primitive function: it just allocates a
-		piece of storage and copies a given string into it.
-	*/
-	char *res = Malloc(sz);
-	register char *m = res;
-
-	while (sz--)
-		*m++ = *str++;
-	return res;
-}
-
-#ifdef	OWNALLOC
-
-#define	ALIGN(m)	(ALIGNSIZE * (((m) - 1) / ALIGNSIZE + 1))
-
-char *
-malloc(n)
-	unsigned n;
-{
-	/*	malloc() is a very simple malloc().
-	*/
-	n = ALIGN(n);
-	if (nfreebytes < n)	{
-		register nbts = (n <= ALLOCSIZ) ? ALLOCSIZ : n;
-
-		if (!nfreebytes)	{
-			if ((freeb = sys_break(nbts)) == ILL_BREAK)
-				fatal("out of memory");
-		}
-		else	{
-			if (sys_break(nbts) == ILL_BREAK)
-				fatal("out of memory");
-		}
-		nfreebytes += nbts;
-	}
-	lastalloc = freeb;
-	freeb = lastalloc + n;
-	lastnbytes = n;
-	nfreebytes -= n;
-	return lastalloc;
-}
-
-/*ARGSUSED*/
-char *
-realloc(ptr, n)
-	char *ptr;
-	unsigned n;
-{
-	/*	realloc() is designed to append more bytes to the latest
-		allocated piece of memory. However reallocation should be
-		performed, even if the mentioned memory is not the latest
-		allocated one, this situation will not occur. To do so,
-		realloc should know how many bytes are allocated the last
-		time for that piece of memory. ????
-	*/
-	register int nbytes = n;
-
-	ASSERT(ptr == lastalloc);	/* security		*/
-	nbytes -= lastnbytes;		/* # bytes required	*/
-	if (nbytes == 0)		/* no extra bytes	*/
-		return lastalloc;
-
-	/*	if nbytes < 0: free last allocated bytes;
-		if nbytes > 0: allocate more bytes
-	*/
-	if (nbytes > 0)
-		nbytes = ALIGN(nbytes);
-	if (nfreebytes < nbytes)	{
-		register int nbts = (nbytes < ALLOCSIZ) ? ALLOCSIZ : nbytes;
-		if (sys_break(nbts) == ILL_BREAK)
-			fatal("out of memory");
-		nfreebytes += nbts;
-	}
-	freeb += nbytes;	/* less bytes			*/
-	lastnbytes += nbytes;	/* change nr of last all. bytes	*/
-	nfreebytes -= nbytes;	/* less or more free bytes	*/
-	return lastalloc;
-}
-
-/* to ensure that the alloc library package will not be loaded:	*/
-/*ARGSUSED*/
-free(p)
-	char *p;
-{}
-
-init_mem()
-{
-	firstfreeb = sys_break(0);
-	/* align the first memory unit to ALIGNSIZE ???	*/
-	if ((long) firstfreeb % ALIGNSIZE != 0) {
-		register char *fb = firstfreeb;
-
-		fb = (char *)ALIGN((long)fb);
-		firstfreeb = sys_break(fb - firstfreeb);
-		firstfreeb = fb;
-		ASSERT((long)firstfreeb % ALIGNSIZE == 0);
-	}
-}
-
-#ifdef	DEBUG
-mem_stat()
-{
-	extern char options[];
-
-	if (options['m'])
-		print("Total nr of bytes allocated: %d\n",
-			sys_break(0) - firstfreeb);
-}
-#endif	DEBUG
-#endif	OWNALLOC

+ 0 - 16
lang/cem/cemcom/alloc.h

@@ -1,16 +0,0 @@
-/* $Header$ */
-/*	PROGRAM'S INTERFACE TO MEMORY ALLOCATION ROUTINES		*/
-
-/*	This file serves as the interface between the program and the
-	memory allocating routines.
-	There are 3 memory allocation routines:
-		char *Malloc(n)		to allocate n bytes
-		char *Salloc(str, n)	to allocate n bytes
-						and fill them with string str
-		char *Realloc(str, n)	reallocate the string at str to n bytes
-*/
-
-extern char *Salloc(), *malloc(), *realloc();
-
-#define	Malloc(n)	malloc((unsigned)(n))
-#define	Srealloc(ptr,n)	realloc(ptr, (unsigned)(n))

+ 0 - 23
lang/cem/cemcom/code.h

@@ -1,23 +0,0 @@
-/* $Header$ */
-/*	C O D E - G E N E R A T O R   D E F I N I T I O N S	*/
-
-struct stat_block	{
-	struct stat_block *next;
-	label st_break;
-	label st_continue;
-};
-
-
-/* allocation definitions of struct stat_block */
-/* ALLOCDEF "stat_block" */
-extern char *st_alloc();
-extern struct stat_block *h_stat_block;
-#define	new_stat_block() ((struct stat_block *) \
-		st_alloc((char **)&h_stat_block, sizeof(struct stat_block)))
-#define	free_stat_block(p) st_free(p, h_stat_block, sizeof(struct stat_block))
-
-
-#define	LVAL	0
-#define	RVAL	1
-#define	FALSE	0
-#define	TRUE	1

+ 0 - 45
lang/cem/cemcom/declarator.h

@@ -1,45 +0,0 @@
-/* $Header$ */
-/* DEFINITION OF DECLARATOR DESCRIPTORS */
-
-/*	A 'declarator' consists of an idf and a linked list of
-	language-defined unary operations: *, [] and (), called
-	decl_unary's.
-*/
-
-struct declarator	{
-	struct declarator *next;
-	struct idf *dc_idf;
-	struct decl_unary *dc_decl_unary;
-	struct idstack_item *dc_fparams;	/* params for function	*/
-};
-
-
-/* allocation definitions of struct declarator */
-/* ALLOCDEF "declarator" */
-extern char *st_alloc();
-extern struct declarator *h_declarator;
-#define	new_declarator() ((struct declarator *) \
-		st_alloc((char **)&h_declarator, sizeof(struct declarator)))
-#define	free_declarator(p) st_free(p, h_declarator, sizeof(struct declarator))
-
-
-#define	NO_PARAMS ((struct idstack_item *) 0)
-
-struct decl_unary	{
-	struct decl_unary *next;
-	int du_fund;			/* POINTER, ARRAY or FUNCTION	*/
-	arith du_count;			/* for ARRAYs only	*/
-};
-
-
-/* allocation definitions of struct decl_unary */
-/* ALLOCDEF "decl_unary" */
-extern char *st_alloc();
-extern struct decl_unary *h_decl_unary;
-#define	new_decl_unary() ((struct decl_unary *) \
-		st_alloc((char **)&h_decl_unary, sizeof(struct decl_unary)))
-#define	free_decl_unary(p) st_free(p, h_decl_unary, sizeof(struct decl_unary))
-
-
-extern struct type *declare_type();
-extern struct declarator null_declarator;

+ 0 - 23
lang/cem/cemcom/decspecs.h

@@ -1,23 +0,0 @@
-/* $Header$ */
-/* DECLARATION SPECIFIER DEFINITION */
-
-struct decspecs	{
-	struct decspecs *next;
-	struct type *ds_type;	/* single type */
-	int ds_sc_given;	/* 1 if the st. class is explicitly given */
-	int ds_sc;		/* storage class, given or implied */
-	int ds_size;		/* LONG, SHORT or 0 */
-	int ds_unsigned;	/* 0 or 1 */
-};
-
-
-/* allocation definitions of struct decspecs */
-/* ALLOCDEF "decspecs" */
-extern char *st_alloc();
-extern struct decspecs *h_decspecs;
-#define	new_decspecs() ((struct decspecs *) \
-		st_alloc((char **)&h_decspecs, sizeof(struct decspecs)))
-#define	free_decspecs(p) st_free(p, h_decspecs, sizeof(struct decspecs))
-
-
-extern struct decspecs null_decspecs;

+ 0 - 37
lang/cem/cemcom/def.h

@@ -1,37 +0,0 @@
-/* $Header$ */
-/* IDENTIFIER DEFINITION DESCRIPTOR */
-
-struct def	{		/* for ordinary tags */
-	struct def *next;
-	int df_level;
-	struct type *df_type;
-	int df_sc;		/*	may be:
-					GLOBAL, STATIC, EXTERN, IMPLICIT,
-					TYPEDEF,
-					FORMAL, AUTO,
-					ENUM, LABEL
-				*/
-	int df_register;	/* REG_NONE, REG_DEFAULT or REG_BONUS	*/
-	char df_initialized;	/* an initialization has been generated */
-	char df_alloc;		/* 0, ALLOC_SEEN or ALLOC_DONE */
-	char df_used;		/* set if idf is used */
-	char df_formal_array;	/* to warn if sizeof is taken */
-	arith df_address;
-};
-
-#define	ALLOC_SEEN	1	/* an allocating declaration has been seen */
-#define	ALLOC_DONE	2	/* the allocating declaration has been done */
-
-#define REG_NONE	0	/* no register candidate */
-#define REG_DEFAULT	1	/* register candidate, not declared as such */
-#define REG_BONUS	10	/* register candidate, declared as such */
-
-
-/* allocation definitions of struct def */
-/* ALLOCDEF "def" */
-extern char *st_alloc();
-extern struct def *h_def;
-#define	new_def() ((struct def *) \
-		st_alloc((char **)&h_def, sizeof(struct def)))
-#define	free_def(p) st_free(p, h_def, sizeof(struct def))
-

+ 0 - 144
lang/cem/cemcom/doprnt.c

@@ -1,144 +0,0 @@
-/* $Header$ */
-/* STRING MANIPULATION AND PRINT ROUTINES */
-
-#include	<system.h>
-#include	"ssize.h"
-
-char *long2str();
-
-static
-integral(c)
-{
-	switch (c) {
-	case 'b':
-		return -2;
-	case 'd':
-		return 10;
-	case 'o':
-		return -8;
-	case 'u':
-		return -10;
-	case 'x':
-		return -16;
-	}
-	return 0;
-}
-
-static int
-format(buf, fmt, argp)
-	char *buf, *fmt;
-	char *argp;
-{
-	register char *pf = fmt, *pa = argp;
-	register char *pb = buf;
-
-	while (*pf) {
-		if (*pf == '%') {
-			register width, base, pad, npad;
-			char *arg;
-			char cbuf[2];
-			char *badformat = "<bad format>";
-			
-			/* get padder */
-			if (*++pf == '0') {
-				pad = '0';
-				++pf;
-			}
-			else
-				pad = ' ';
-			
-			/* get width */
-			width = 0;
-			while (*pf >= '0' && *pf <= '9')
-				width = 10 * width + *pf++ - '0';
-			
-			/* get text and move pa */
-			if (*pf == 's') {
-				arg = *(char **)pa;
-				pa += sizeof(char *);
-			}
-			else
-			if (*pf == 'c') {
-				cbuf[0] = * (char *) pa;
-				cbuf[1] = '\0';
-				pa += sizeof(int);
-				arg = &cbuf[0];
-			}
-			else
-			if (*pf == 'l') {
-				/* alignment ??? */
-				if (base = integral(*++pf)) {
-					arg = long2str(*(long *)pa, base);
-					pa += sizeof(long);
-				}
-				else {
-					pf--;
-					arg = badformat;
-				}
-			}
-			else
-			if (base = integral(*pf)) {
-				arg = long2str((long)*(int *)pa, base);
-				pa += sizeof(int);
-			}
-			else
-			if (*pf == '%')
-				arg = "%";
-			else
-				arg = badformat;
-
-			npad = width - strlen(arg);
-
-			while (npad-- > 0)
-				*pb++ = pad;
-			
-			while (*pb++ = *arg++);
-			pb--;
-			pf++;
-		}
-		else
-			*pb++ = *pf++;
-	}
-	return pb - buf;
-}
-
-doprnt(fp, fmt, argp)
-	File *fp;
-	char *fmt;
-	int argp[];
-{
-	char buf[SSIZE];
-
-	sys_write(fp, buf, format(buf, fmt, (char *)argp));
-}
-
-/*VARARGS1*/
-printf(fmt, args)
-	char *fmt;
-	char args;
-{
-	char buf[SSIZE];
-
-	sys_write(STDOUT, buf, format(buf, fmt, &args));
-}
-
-/*VARARGS1*/
-fprintf(fp, fmt, args)
-	File *fp;
-	char *fmt;
-	char args;
-{
-	char buf[SSIZE];
-
-	sys_write(fp, buf, format(buf, fmt, &args));
-}
-
-/*VARARGS1*/
-char *
-sprintf(buf, fmt, args)
-	char *buf, *fmt;
-	char args;
-{
-	buf[format(buf, fmt, &args)] = '\0';
-	return buf;
-}

+ 0 - 201
lang/cem/cemcom/em.c

@@ -1,201 +0,0 @@
-/* $Header$ */
-/* EM CODE OUTPUT ROUTINES */
-
-#define CMODE 0644
-#define MAX_ARG_CNT 32
-
-#include	"em.h"
-#include	<system.h>
-#include	"arith.h"
-#include	"label.h"
-
-/*
-	putbyte(), C_open() and C_close() are the basic routines for
-	respectively write on, open and close the output file.
-	The put_*() functions serve as formatting functions of the
-	various EM language constructs.
-	See "Description of a Machine Architecture for use with
-	Block Structured Languages" par. 11.2 for the meaning of these
-	names.
-*/
-
-/* supply a kind of buffered output */
-#define	flush(x)	sys_write(ofp, &obuf[0], x)
-
-static char obuf[BUFSIZ];
-static char *opp = &obuf[0];
-File *ofp = 0;
-
-putbyte(b)	/* shouldn't putbyte() be a macro ??? (EB)	*/
-	int b;
-{
-	if (opp >= &obuf[BUFSIZ]) { /* flush if buffer overflows */
-		if (flush(BUFSIZ) == 0)
-			sys_stop(S_ABORT);
-		opp = &obuf[0];
-	}
-	*opp++ = (char) b;
-}
-
-C_init(wsize, psize)
-	arith wsize, psize;
-{}
-
-C_open(nm)	/* open file for compact code output	*/
-	char *nm;
-{
-	if (nm == 0)
-		ofp = STDOUT;	/* standard output	*/
-	else
-	if (sys_open(nm, OP_WRITE, &ofp) == 0)
-		return 0;
-	return 1;
-}
-
-C_close()
-{
-	if (flush(opp - &obuf[0]) == 0)
-		sys_stop(S_ABORT);
-	opp = obuf;	/* reset opp	*/
-	if (ofp != STDOUT)
-		sys_close(ofp);
-	ofp = 0;
-}
-
-C_busy()
-{
-	return ofp != 0; /* true if code is being generated */
-}
-
-/***    the compact code generating routines	***/
-#define	fit16i(x)	((x) >= (long)0xFFFF8000 && (x) <= (long)0x00007FFF)
-#define	fit8u(x)	((x) <= 0xFF)		/* x is already unsigned */
-
-put_ilb(l)
-	label l;
-{
-	if (fit8u(l))	{
-		put8(sp_ilb1);
-		put8((int)l);
-	}
-	else	{
-		put8(sp_ilb2);
-		put16(l);
-	}
-}
-
-put_dlb(l)
-	label l;
-{
-	if (fit8u(l))	{
-		put8(sp_dlb1);
-		put8((int)l);
-	}
-	else	{
-		put8(sp_dlb2);
-		put16(l);
-	}
-}
-
-put_cst(l)
-	arith l;
-{
-	if (l >= (arith) -sp_zcst0 && l < (arith) (sp_ncst0 - sp_zcst0)) {
-		/*	we can convert 'l' to an int because its value
-			can be stored in a byte.
-		*/
-		put8((int) l + (sp_zcst0 + sp_fcst0));
-	}
-	else
-	if (fit16i(l)) { /* the cast from long to int causes no trouble here */
-		put8(sp_cst2);
-		put16((int) l);
-	}
-	else	{
-		put8(sp_cst4);
-		put32(l);
-	}
-}
-
-put_doff(l, v)
-	label l;
-	arith v;
-{
-	if (v == 0)
-		put_dlb(l);
-	else	{
-		put8(sp_doff);
-		put_dlb(l);
-		put_cst(v);
-	}
-}
-
-put_noff(s, v)
-	char *s;
-	arith v;
-{
-	if (v == 0)
-		put_dnam(s);
-	else	{
-		put8(sp_doff);
-		put_dnam(s);
-		put_cst(v);
-	}
-}
-
-put_dnam(s)
-	char *s;
-{
-	put8(sp_dnam);
-	put_str(s);
-}
-
-put_pnam(s)
-	char *s;
-{
-	put8(sp_pnam);
-	put_str(s);
-}
-
-#ifdef	____
-put_fcon(s, sz)
-	char *s;
-	arith sz;
-{
-	put8(sp_fcon);
-	put_cst(sz);
-	put_str(s);
-}
-#endif	____
-
-put_wcon(sp, v, sz)	/* sp_icon, sp_ucon or sp_fcon with int repr	*/
-	int sp;
-	char *v;
-	arith sz;
-{
-	/* how 'bout signextension int --> long ???	*/
-	put8(sp);
-	put_cst(sz);
-	put_str(v);
-}
-
-put_str(s)
-	char *s;
-{
-	register int len;
-
-	put_cst((arith) (len = strlen(s)));
-	while (--len >= 0)
-		put8(*s++);
-}
-
-put_cstr(s)
-	char *s;
-{
-	register int len = prepare_string(s);
-
-	put8(sp_scon);
-	put_cst((arith) len);
-	while (--len >= 0)
-		put8(*s++);
-}

+ 0 - 42
lang/cem/cemcom/em.h

@@ -1,42 +0,0 @@
-/* $Header$ */
-/* DESCRIPTION OF INTERFACE TO EM CODE GENERATING ROUTINES */
-
-#include "proc_intf.h"	/* use macros or functions */
-
-/* include the EM description files */
-#include	<em_spec.h>
-#include	<em_pseu.h>
-#include	<em_mes.h>
-#include	<em_mnem.h>
-#include	<em_reg.h>
-
-/* macros used in the definitions of the interface functions C_* */
-#define	OP(x)		put_op(x)
-#define	CST(x)		put_cst(x)
-#define	DCST(x)		put_cst(x)
-#define	CSTR(x)		put_cstr(x)
-#define	PS(x)		put_ps(x)
-#define	DLB(x)		put_dlb(x)
-#define	ILB(x)		put_ilb(x)
-#define	NOFF(x,y)	put_noff((x), (y))
-#define	DOFF(x,y)	put_doff((x), (y))
-#define	PNAM(x)		put_pnam(x)
-#define	DNAM(x)		put_dnam(x)
-#define	CEND()		put_cend()
-#define	WCON(x,y,z)	put_wcon((x), (y), (z))
-#define	FCON(x,y)	put_fcon((x), (y))
-
-/* variants of primitive "putbyte" */
-#define	put8(x)		putbyte(x)	/* defined in "em.c" */
-#define	put16(x)	(put8((int) x), put8((int) (x >> 8)))
-#define	put32(x)	(put16((int) x), put16((int) (x >> 16)))
-#define	put_cend()	put8(sp_cend)
-#define	put_op(x)	put8(x)
-#define	put_ps(x)	put8(x)
-
-/* user interface */
-#define C_magic()	put16(sp_magic)	/* EM magic word */
-
-#ifndef PROC_INTF
-#include "writeem.h"
-#endif PROC_INTF

+ 0 - 71
lang/cem/cemcom/em_lint.h

@@ -1,71 +0,0 @@
-/*
- * (c) copyright 1990 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* $Header$ */
-
-/*
- * This file can be considered the em_code.h file of lint.
- * Those code generating functions that are used by cem and that have not
- * been defined away by #ifdef LINT, are defined away here. Note that this a
- * fairly random collection. E.g. it does not include C_open(), since the
- * standard C-open() C_close() sequence is protected by #ifdef LINT, but it
- * does include C_close() since the latter is also called in other places,
- * to terminate the compilation process.
- */
-
-#define	C_asp(c)
-#define	C_bra(b)
-#define	C_cal(p)
-#define	C_csa(w)
-#define	C_csb(w)
-#define	C_fil_dlb(g,o)
-#define	C_lae_dlb(g,o)
-#define	C_lal(c)
-#define	C_lin(c)
-#define	C_loi(c)
-#define	C_lol(c)
-#define	C_sdl(c)
-#define	C_sti(c)
-#define	C_stl(c)
-
-#define	C_busy()	0
-#define	C_close()
-
-#define	C_df_dlb(l)
-#define	C_df_dnam(s)
-#define	C_df_ilb(l)
-
-#define	C_pro_narg(s)
-#define	C_end(l)
-
-#define	C_exa_dnam(s)
-#define	C_ina_dnam(s)
-#define	C_ina_dlb(l)
-#define	C_exp(s)
-#define	C_inp(s)
-
-#define	C_bss_cst(n,w,i)
-
-#define	C_con_cst(v)
-#define	C_con_icon(v,s)
-#define	C_con_ucon(v,s)
-#define	C_con_fcon(v,s)
-#define	C_con_scon(v,s)
-#define	C_con_dnam(v,s)
-#define	C_con_dlb(v,s)
-#define	C_con_pnam(v)
-
-#define	C_rom_cst(v)
-#define	C_rom_scon(v,s)
-#define	C_rom_ilb(v)
-
-#define	C_ldl(l)
-
-#define	C_mes_begin(ms)
-#define	C_mes_end()
-
-#define	C_ms_gto()
-#define	C_ms_par(b)
-#define	C_ms_reg(o,s,t,c)
-

+ 0 - 136
lang/cem/cemcom/emcode.def

@@ -1,136 +0,0 @@
-% emcode definitions for the CEM compiler -- intermediate code
-C_adf(p)	| arith p;	| OP(op_adf), CST(p)
-C_adi(p)	| arith p;	| OP(op_adi), CST(p)
-C_adp(p)	| arith p;	| OP(op_adp), CST(p)
-C_ads(p)	| arith p;	| OP(op_ads), CST(p)
-C_adu(p)	| arith p;	| OP(op_adu), CST(p)
-C_and(p)	| arith p;	| OP(op_and), CST(p)
-C_asp(p)	| arith p;	| OP(op_asp), CST(p)
-C_bra(l)	| label l;	| OP(op_bra), CST((arith)l)
-C_cai()		|		| OP(op_cai)
-C_cal(p)	| char *p;	| OP(op_cal), PNAM(p)
-C_cff()		|		| OP(op_cff)
-C_cfi()		|		| OP(op_cfi)
-C_cfu()		|		| OP(op_cfu)
-C_cif()		|		| OP(op_cif)
-C_cii()		|		| OP(op_cii)
-C_ciu()		|		| OP(op_ciu)
-C_cmf(p)	| arith p;	| OP(op_cmf), CST(p)
-C_cmi(p)	| arith p;	| OP(op_cmi), CST(p)
-C_cmp()		|		| OP(op_cmp)
-C_cmu(p)	| arith p;	| OP(op_cmu), CST(p)
-C_com(p)	| arith p;	| OP(op_com), CST(p)
-C_csa(p)	| arith p;	| OP(op_csa), CST(p)
-C_csb(p)	| arith p;	| OP(op_csb), CST(p)
-C_cuf()		|		| OP(op_cuf)
-C_cui()		|		| OP(op_cui)
-C_cuu()		|		| OP(op_cuu)
-C_dup(p)	| arith p;	| OP(op_dup), CST(p)
-C_dvf(p)	| arith p;	| OP(op_dvf), CST(p)
-C_dvi(p)	| arith p;	| OP(op_dvi), CST(p)
-C_dvu(p)	| arith p;	| OP(op_dvu), CST(p)
-C_fil_dlb(l, o)	| label l; arith o;	| OP(op_fil), DOFF(l, o)
-C_ior(p)	| arith p;	| OP(op_ior), CST(p)
-C_lae_dnam(p, o)	| char *p; arith o;	| OP(op_lae), NOFF(p, o)
-C_lae_dlb(l, o)	| label l; arith o;	| OP(op_lae), DOFF(l, o)
-C_lal(p)	| arith p;	| OP(op_lal), CST(p)
-C_ldc(p)	| arith p;	| OP(op_ldc), DCST(p)
-C_lde_dnam(p, o)	| char *p; arith o;	| OP(op_lde), NOFF(p, o)
-C_lde_dlb(l, o)	| label l; arith o;	| OP(op_lde), DOFF(l, o)
-C_ldl(p)	| arith p;	| OP(op_ldl), CST(p)
-C_lfr(p)	| arith p;	| OP(op_lfr), CST(p)
-C_lin(p)	| arith p;	| OP(op_lin), CST(p)
-C_loc(p)	| arith p;	| OP(op_loc), CST(p)
-C_loe_dnam(p, o)	| char *p; arith o;	| OP(op_loe), NOFF(p, o)
-C_loe_dlb(l, o)	| label l; arith o;	| OP(op_loe), DOFF(l, o)
-C_loi(p)	| arith p;	| OP(op_loi), CST(p)
-C_lol(p)	| arith p;	| OP(op_lol), CST(p)
-C_lor(p)	| arith p;	| OP(op_lor), CST(p)
-C_lpi(p)	| char *p;	| OP(op_lpi), PNAM(p)
-C_mlf(p)	| arith p;	| OP(op_mlf), CST(p)
-C_mli(p)	| arith p;	| OP(op_mli), CST(p)
-C_mlu(p)	| arith p;	| OP(op_mlu), CST(p)
-C_ngf(p)	| arith p;	| OP(op_ngf), CST(p)
-C_ngi(p)	| arith p;	| OP(op_ngi), CST(p)
-C_ret(p)	| arith p;	| OP(op_ret), CST(p)
-C_rmi(p)	| arith p;	| OP(op_rmi), CST(p)
-C_rmu(p)	| arith p;	| OP(op_rmu), CST(p)
-C_sbf(p)	| arith p;	| OP(op_sbf), CST(p)
-C_sbi(p)	| arith p;	| OP(op_sbi), CST(p)
-C_sbs(p)	| arith p;	| OP(op_sbs), CST(p)
-C_sbu(p)	| arith p;	| OP(op_sbu), CST(p)
-C_sde_dnam(p, o)	| char *p; arith o;	| OP(op_sde), NOFF(p, o)
-C_sde_dlb(l, o)	| label l; arith o;	| OP(op_sde), DOFF(l, o)
-C_sdl(p)	| arith p;	| OP(op_sdl), CST(p)
-C_sli(p)	| arith p;	| OP(op_sli), CST(p)
-C_slu(p)	| arith p;	| OP(op_slu), CST(p)
-C_sri(p)	| arith p;	| OP(op_sri), CST(p)
-C_sru(p)	| arith p;	| OP(op_sru), CST(p)
-C_ste_dnam(p, o)	| char *p; arith o;	| OP(op_ste), NOFF(p, o)
-C_ste_dlb(l, o)	| label l; arith o;	| OP(op_ste), DOFF(l, o)
-C_sti(p)	| arith p;	| OP(op_sti), CST(p)
-C_stl(p)	| arith p;	| OP(op_stl), CST(p)
-C_xor(p)	| arith p;	| OP(op_xor), CST(p)
-C_zeq(l)	| label l;	| OP(op_zeq), CST((arith)l)
-C_zge(l)	| label l;	| OP(op_zge), CST((arith)l)
-C_zgt(l)	| label l;	| OP(op_zgt), CST((arith)l)
-C_zle(l)	| label l;	| OP(op_zle), CST((arith)l)
-C_zlt(l)	| label l;	| OP(op_zlt), CST((arith)l)
-C_zne(l)	| label l;	| OP(op_zne), CST((arith)l)
-%
-C_df_dlb(l)	| label l;	| DLB(l)
-C_df_dnam(s)	| char *s;	| DNAM(s)
-C_df_ilb(l)	| label l;	| ILB(l)
-%
-C_bss_cst(n, w, i)	| arith n, w; int i;	|
-	PS(ps_bss), DCST(n), CST(w), CST((arith)i)
-%
-C_con_icon(val, siz)	| char *val; arith siz;	|
-	PS(ps_con), WCON(sp_icon, val, siz), CEND()
-C_con_ucon(val, siz)	| char *val; arith siz;	|
-	PS(ps_con), WCON(sp_ucon, val, siz), CEND()
-C_con_fcon(val, siz)	| char *val; arith siz;	|
-	PS(ps_con), WCON(sp_fcon, val, siz), CEND()
-C_con_scon(str, siz)	| char *str; arith siz;	| PS(ps_con), CSTR(str), CEND()
-C_con_dnam(str, val)	| char *str; arith val;	|
-	PS(ps_con), NOFF(str, val), CEND()
-C_con_dlb(l, val)	| label l; arith val;	|
-	PS(ps_con), DOFF(l, val), CEND()
-C_con_pnam(str)	| char *str;	| PS(ps_con), PNAM(str), CEND()
-%
-C_rom_cst(l)	| arith l;	| PS(ps_rom), CST(l), CEND()
-C_rom_icon(val, siz)	| char *val; arith siz;	|
-	PS(ps_rom), WCON(sp_icon, val, siz), CEND()
-C_rom_fcon(val, siz)	| char *val; arith siz;	|
-	PS(ps_rom), WCON(sp_fcon, val, siz), CEND()
-C_rom_ilb(l)	| label l;	| PS(ps_rom), ILB(l), CEND()
-%
-C_cst(l)	| arith l;	| CST(l)
-C_icon(val, siz)	| char *val; arith siz;	| WCON(sp_icon, val, siz)
-C_ucon(val, siz)	| char *val; arith siz;	| WCON(sp_ucon, val, siz)
-C_fcon(val, siz)	| char *val; arith siz;	| WCON(sp_fcon, val, siz)
-C_scon(str, siz)	| char *str; arith siz;	| CSTR(str)
-C_dnam(str, val)	| char *str; arith val;	| NOFF(str, val)
-C_dlb(l, val)	| label l; arith val;	| DOFF(l, val)
-C_pnam(str)	| char *str;	| PNAM(str)
-C_ilb(l)	| label l;	| ILB(l)
-%
-C_pro_narg(p1)	| char *p1;	| PS(ps_pro), PNAM(p1), CEND()
-C_end(l)	| arith l;	| PS(ps_end), CST(l)
-%
-C_exa(s)	| char *s;	| PS(ps_exa), DNAM(s)
-C_exp(s)	| char *s;	| PS(ps_exp), PNAM(s)
-C_ina_pt(l)	| label l;	| PS(ps_ina), DLB(l)
-C_ina(s)	| char *s;	| PS(ps_ina), DNAM(s)
-C_inp(s)	| char *s;	| PS(ps_inp), PNAM(s)
-%
-C_ms_err()	|	| PS(ps_mes), CST((arith)ms_err), CEND()
-C_ms_emx(p1, p2)	| arith p1, p2;	|
-	PS(ps_mes), CST((arith)ms_emx), CST(p1), CST(p2), CEND()
-C_ms_reg(a, b, c, d)	| arith a, b; int c, d;	|
-	PS(ps_mes), CST((arith)ms_reg), CST(a), CST(b), CST((arith)c), CST((arith)d), CEND()
-C_ms_src(l, s)	| arith l; char *s;	|
-	PS(ps_mes), CST((arith)ms_src), CST(l), CSTR(s), CEND()
-C_ms_flt()	|	| PS(ps_mes), CST((arith)ms_flt), CEND()
-C_ms_par(l)	| arith l;	| PS(ps_mes), CST((arith)ms_par), CST(l), CEND()
-C_ms_gto()	|	| PS(ps_mes), CST((arith)ms_gto), CEND()

+ 0 - 102
lang/cem/cemcom/expr.h

@@ -1,102 +0,0 @@
-/* $Header$ */
-/* EXPRESSION DESCRIPTOR */
-
-/*	What we want to define is the struct expr, but since it contains
-	a union of various goodies, we define them first; so be patient.
-*/
-
-struct value	{
-	struct idf *vl_idf;		/* idf of an external name or 0 */
-	arith vl_value;			/* constant, or offset if idf != 0 */
-};
-
-struct string	{
-	char *sg_value;		/* string of characters repr. the constant */
-	label sg_datlab;	/* global data-label			*/
-};
-
-struct floating	{
-	char *fl_value;		/* pointer to string repr. the fp const. */
-	label fl_datlab;	/* global data_label	*/
-};
-
-struct oper	{
-	struct type *op_type;	/* resulting type of the operation	*/
-	struct expr *op_left;
-	int op_oper;			/* the symbol of the operator	*/
-	struct expr *op_right;
-};
-
-/* The following constants indicate the class of the expression: */
-#define	Value	0		/* it is a value known at load time */
-#define	String	1		/* it is a string constant  */
-#define	Float	2		/* it is a floating point constant	*/
-#define	Oper	3		/* it is a run-time expression */
-#define	Type	4		/* only its type is relevant */
-
-struct expr	{
-	struct expr *next;
-	char *ex_file;		/* the file it (probably) comes from */
-	unsigned int ex_line;	/* the line it (probably) comes from */
-	struct type *ex_type;
-	char ex_lvalue;
-	char ex_flags;
-	int ex_class;
-	int ex_depth;
-	union	{
-		struct value ex_value;
-		struct string ex_string;
-		struct floating ex_float;
-		struct oper ex_oper;
-	} ex_object;
-};
-
-/* some abbreviated selections	*/
-#define	VL_VALUE	ex_object.ex_value.vl_value
-#define	VL_IDF		ex_object.ex_value.vl_idf
-#define	SG_VALUE	ex_object.ex_string.sg_value
-#define	SG_DATLAB	ex_object.ex_string.sg_datlab
-#define	FL_VALUE	ex_object.ex_float.fl_value
-#define	FL_DATLAB	ex_object.ex_float.fl_datlab
-#define	OP_TYPE		ex_object.ex_oper.op_type
-#define	OP_LEFT		ex_object.ex_oper.op_left
-#define	OP_OPER		ex_object.ex_oper.op_oper
-#define	OP_RIGHT	ex_object.ex_oper.op_right
-
-#define	EXPRTYPE(e)	((e)->ex_type->tp_fund)
-
-/*	An expression is a `load-time constant' if it is of the form
-	<idf> +/- <integral> or <integral>;
-	it is a `compile-time constant' if it is an <integral>.
-*/
-#define	is_ld_cst(e)	((e)->ex_lvalue == 0 && (e)->ex_class == Value)
-#define	is_cp_cst(e)	(is_ld_cst(e) && (e)->VL_IDF == 0)
-
-/*	a floating constant expression ?
-*/
-#define	is_fp_cst(e)	((e)->ex_class == Float)
-
-/*	some bits for the ex_flag field, to keep track of various
-	interesting properties of an expression.
-*/
-#define	EX_SIZEOF	001		/* contains sizeof operator */
-#define	EX_CAST		002		/* contains cast */
-#define	EX_LOGICAL	004		/* contains logical operator */
-#define	EX_COMMA	010		/* contains expression comma */
-#define	EX_PARENS	020		/* the top level is parenthesized */
-
-#define	NILEXPR		((struct expr *)0)
-
-extern struct expr *intexpr(), *new_oper();
-
-
-/* allocation definitions of struct expr */
-/* ALLOCDEF "expr" */
-extern char *st_alloc();
-extern struct expr *h_expr;
-#define	new_expr() ((struct expr *) \
-		st_alloc((char **)&h_expr, sizeof(struct expr)))
-#define	free_expr(p) st_free(p, h_expr, sizeof(struct expr))
-
-
-#define	ISCOMMA(e) ((e)->ex_class == Oper && (e)->OP_OPER == INITCOMMA)

+ 0 - 9
lang/cem/cemcom/faulty.h

@@ -1,9 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* $Header$ */
-/* FAULTY DEFINITIONS */
-
-#define	faulty(tp)	((tp)_faulty(__FILE__, __LINE__))
-#define	fault()		(_faulty(__FILE__, __LINE__))

+ 0 - 20
lang/cem/cemcom/field.h

@@ -1,20 +0,0 @@
-/* $Header$ */
-/* FIELD DESCRIPTOR */
-
-struct field	{	/* for field specifiers	*/
-	struct field *next;
-	arith fd_mask;
-	int fd_shift;
-	int fd_width;
-	struct sdef *fd_sdef;	/* upward pointer	*/
-};
-
-
-/* allocation definitions of struct field */
-/* ALLOCDEF "field" */
-extern char *st_alloc();
-extern struct field *h_field;
-#define	new_field() ((struct field *) \
-		st_alloc((char **)&h_field, sizeof(struct field)))
-#define	free_field(p) st_free(p, h_field, sizeof(struct field))
-

+ 0 - 68
lang/cem/cemcom/idf.h

@@ -1,68 +0,0 @@
-/* $Header$ */
-/* IDENTIFIER DESCRIPTOR */
-
-#include "nopp.h"
-
-/*	Since the % operation in the calculation of the hash function
-	turns out to be expensive, it is replaced by the cheaper XOR (^).
-	Each character of the identifier is xored with an 8-bit mask which
-	depends on the position of the character; the sum of these results
-	is the hash value.  The random masks are obtained from a
-	congruence generator in idf.c.
-*/
-
-#define	HASHSIZE	256	/* must be a power of 2 */
-#define	HASH_X		0253	/* Knuth's X */
-#define	HASH_A		77	/* Knuth's a */
-#define	HASH_C		153	/* Knuth's c */
-
-extern char hmask[];		/* the random masks */
-#define	HASHMASK		(HASHSIZE-1)	/* since it is a power of 2 */
-#define	STARTHASH()		(0)
-#define	ENHASH(hs,ch,ps)	(hs + (ch ^ hmask[ps]))
-#define	STOPHASH(hs)		(hs & HASHMASK)
-
-struct idstack_item	{	/* stack of identifiers */
-	struct idstack_item *next;
-	struct idf *is_idf;
-};
-
-
-/* allocation definitions of struct idstack_item */
-/* ALLOCDEF "idstack_item" */
-extern char *st_alloc();
-extern struct idstack_item *h_idstack_item;
-#define	new_idstack_item() ((struct idstack_item *) \
-		st_alloc((char **)&h_idstack_item, sizeof(struct idstack_item)))
-#define	free_idstack_item(p) st_free(p, h_idstack_item, sizeof(struct idstack_item))
-
-
-struct idf	{
-	struct idf *next;
-	char *id_text;
-#ifndef NOPP
-	struct macro *id_macro;
-	int id_resmac;		/* if nonzero: keyword of macroproc. 	*/
-#endif NOPP
-	int id_reserved;	/* non-zero for reserved words		*/
-	struct def *id_def;	/* variables, typedefs, enum-constants	*/
-	struct sdef *id_sdef;	/* selector tags			*/
-	struct tag *id_struct;	/* struct and union tags		*/
-	struct tag *id_enum;	/* enum tags				*/
-	int id_special;		/* special action needed at occurrence	*/
-};
-
-
-/* allocation definitions of struct idf */
-/* ALLOCDEF "idf" */
-extern char *st_alloc();
-extern struct idf *h_idf;
-#define	new_idf() ((struct idf *) \
-		st_alloc((char **)&h_idf, sizeof(struct idf)))
-#define	free_idf(p) st_free(p, h_idf, sizeof(struct idf))
-
-
-extern struct idf *str2idf(), *idf_hashed();
-
-extern int level;
-extern struct idf *gen_idf();

+ 0 - 624
lang/cem/cemcom/ival.c

@@ -1,624 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* $Header$ */
-/* CODE FOR THE INITIALISATION OF GLOBAL VARIABLES */
-
-#include	"nofloat.h"
-#include	<em.h>
-#include	"debug.h"
-#include	<alloc.h>
-#include	"nobitfield.h"
-#include	"arith.h"
-#include	"align.h"
-#include	"label.h"
-#include	"expr.h"
-#include	"type.h"
-#include	"struct.h"
-#include	"field.h"
-#include	"assert.h"
-#include	"Lpars.h"
-#include	"class.h"
-#include	"sizes.h"
-#include	"idf.h"
-#include	"level.h"
-#include	"def.h"
-
-#define con_nullbyte()	C_con_ucon("0", (arith)1)
-
-char *symbol2str();
-char *long2str();
-char *strncpy();
-struct expr *do_array(), *do_struct(), *IVAL();
-extern char options[];
-
-/*	do_ival() performs the initialisation of a global variable
-	of type tp with the initialisation expression expr by calling IVAL().
-	Guided by type tp, the expression is evaluated.
-*/
-do_ival(tpp, ex)
-	struct type **tpp;
-	struct expr *ex;
-{
-	if (IVAL(tpp, ex) != 0)
-		too_many_initialisers(ex);
-}
-
-/*	IVAL() recursively guides the initialisation expression through the
-	different routines for the different types of initialisation:
-	-	array initialisation
-	-	struct initialisation
-	-	fundamental type initialisation
-	Upto now, the initialisation of a union is not allowed!
-	An initialisation expression tree consists of normal expressions
-	which can be joined together by ',' nodes, which operator acts
-	like the lisp function "cons" to build lists.
-	IVAL() returns a pointer to the remaining expression tree.
-*/
-struct expr *
-IVAL(tpp, ex)
-	struct type **tpp;		/* type of global variable	*/
-	register struct expr *ex;	/* initialiser expression	*/
-{
-	register struct type *tp = *tpp;
-	
-	switch (tp->tp_fund) {
-	case ARRAY: /* array initialisation	*/
-		if (valid_type(tp->tp_up, "array element") == 0)
-			return 0;
-		if (ISCOMMA(ex)) /* list of initialisation expressions */
-			return do_array(ex, tpp);
-		if (tp->tp_up->tp_fund == CHAR && ex->ex_class == String)
-			/* initialisation like char s[] = "I am a string" */
-			ch_array(tpp, ex);
-		else /* " int i[24] = 12;"	*/
-			check_and_pad(ex, tpp);
-		break;
-	case STRUCT: /* struct initialisation */
-		if (valid_type(tp, "struct") == 0)
-			return 0;
-		if (ISCOMMA(ex)) /* list of initialisation expressions */
-			return do_struct(ex, tp);
-		check_and_pad(ex, tpp); /* "struct foo f = 12;"	*/
-		break;
-	case UNION:
-		error("union initialisation not allowed");
-		break;
-	case ERRONEOUS:
-		break;
-	default: /* fundamental type	*/
-		if (ISCOMMA(ex)) { /* " int i = {12};"	*/
-			if (IVAL(tpp, ex->OP_LEFT) != 0)
-				too_many_initialisers(ex);
-			/*	return remainings of the list for the
-				other members of the aggregate, if this
-				item belongs to an aggregate.
-			*/
-			return ex->OP_RIGHT;
-		}
-		check_ival(ex, tp); /* "int i = 12;" */
-		break;
-	}
-	return 0;
-}
-
-/*	do_array() initialises the members of an array described
-	by type tp with the expressions in expr.
-	Two important cases:
-	-	the number of members is known
-	-	the number of members is not known
-	In the latter case, do_array() digests the whole expression
-	tree it is given.
-	In the former case, do_array() eats as many members from
-	the expression tree as are needed for the array.
-	If there are not sufficient members for the array, the remaining
-	members are padded with zeroes
-*/
-struct expr *
-do_array(ex, tpp)
-	register struct expr *ex;
-	struct type **tpp;
-{
-	register struct type *tp = *tpp;
-	register arith elem_count;
-	
-	ASSERT(tp->tp_fund == ARRAY && ISCOMMA(ex));
-	/*	the following test catches initialisations like
-		char c[] = {"just a string"};
-		or
-		char d[] = {{"just another string"}};
-		The use of the brackets causes this problem.
-		Note: although the implementation of such initialisations
-		is completely foolish, we did it!! (no applause, thank you)
-	*/
-	if (tp->tp_up->tp_fund == CHAR) {
-		register struct expr *f = ex->OP_LEFT, *g = NILEXPR;
-
-		while (ISCOMMA(f)) {	/* eat the brackets!!!	*/
-			g = f;
-			f = f->OP_LEFT;
-		}
-		if (f->ex_class == String) { /* hallelujah, it's a string! */
-			ch_array(tpp, f);
-			return g ? g->OP_RIGHT : ex->OP_RIGHT;
-		}
-		/* else: just go on with the next part of this function */
-		if (g != 0)
-			ex = g;
-	}
-	if (tp->tp_size == (arith)-1) {
-		/* declared with unknown size: [] */
-		for (elem_count = 0; ex; elem_count++) {
-			/* eat whole initialisation expression	*/
-			if (ISCOMMA(ex->OP_LEFT)) { /* embraced member */
-				if (IVAL(&(tp->tp_up), ex->OP_LEFT) != 0)
-					too_many_initialisers(ex);
-				ex = ex->OP_RIGHT;
-			}
-			else {
-				if (aggregate_type(tp->tp_up))
-					ex = IVAL(&(tp->tp_up), ex);
-				else {
-					check_ival(ex->OP_LEFT, tp->tp_up);
-					ex = ex->OP_RIGHT;
-				}
-			}
-		}
-		/* set the proper size	*/
-		*tpp = construct_type(ARRAY, tp->tp_up, elem_count);
-	}
-	else {		/* the number of members is already known	*/
-		arith dim = tp->tp_size / tp->tp_up->tp_size;
-
-		for (elem_count = 0; elem_count < dim && ex; elem_count++) {
-			if (ISCOMMA(ex->OP_LEFT)) { /* embraced member */
-				if (IVAL(&(tp->tp_up), ex->OP_LEFT) != 0)
-					too_many_initialisers(ex);
-				ex = ex->OP_RIGHT;
-			}
-			else {
-				if (aggregate_type(tp->tp_up))
-					ex = IVAL(&(tp->tp_up), ex);
-				else {
-					check_ival(ex->OP_LEFT, tp->tp_up);
-					ex = ex->OP_RIGHT;
-				}
-			}
-		}
-		if (ex && elem_count == dim)
-			/*	all the members are initialised but there
-				remains a part of the expression tree which
-				is returned
-			*/
-			return ex;
-		if ((ex == 0) && elem_count < dim)
-			/*	the expression tree is completely absorbed
-				but there are still members which must be
-				initialised with zeroes
-			*/
-			do
-				pad(tp->tp_up);
-			while (++elem_count < dim);
-	}
-	return 0;
-}
-
-
-/*	do_struct() initialises a struct of type tp with the expression expr.
-	The main loop is just controlled by the definition of the selectors
-	during which alignment is taken care of.
-*/
-struct expr *
-do_struct(ex, tp)
-	register struct expr *ex;
-	register struct type *tp;
-{
-	register struct sdef *sd = tp->tp_sdef;
-	arith bytes_upto_here = (arith)0;
-	arith last_offset = (arith)-1;
-	
-	ASSERT(tp->tp_fund == STRUCT && ISCOMMA(ex));
-	/* as long as there are selectors and there is an initialiser..	*/
-	while (sd && ex) {
-		if (ISCOMMA(ex->OP_LEFT)) {	/* embraced expression	*/
-			if (IVAL(&(sd->sd_type), ex->OP_LEFT) != 0)
-				too_many_initialisers(ex);
-			ex = ex->OP_RIGHT;
-		}
-		else {
-			if (aggregate_type(sd->sd_type))
-				/* selector is an aggregate itself	*/
-				ex = IVAL(&(sd->sd_type), ex);
-			else {
-#ifdef NOBITFIELD
-				/* fundamental type, not embraced */
-				check_ival(ex->OP_LEFT, sd->sd_type);
-				ex = ex->OP_RIGHT;
-#else
-				if (is_anon_idf(sd->sd_idf))
-					/*	a hole in the struct due to
-						the use of ";:n;" in a struct
-						definition.
-					*/
-					put_bf(sd->sd_type, (arith)0);
-				else { /* fundamental type, not embraced */
-					check_ival(ex->OP_LEFT, sd->sd_type);
-					ex = ex->OP_RIGHT;
-				}
-#endif NOBITFIELD
-			}
-		}
-		if (sd->sd_sdef) /* align upto the next selector boundary */
-			bytes_upto_here += zero_bytes(sd);
-		if (last_offset != sd->sd_offset) {
-			/* don't take the field-width more than once	*/
-			bytes_upto_here +=
-				size_of_type(sd->sd_type, "selector");
-			last_offset = sd->sd_offset;
-		}
-		sd = sd->sd_sdef;
-	}
-	/* perfect fit if (ex && (sd == 0)) holds	*/
-	if ((ex == 0) && (sd != 0)) {
-		/* there are selectors left which must be padded with zeroes */
-		do {
-			pad(sd->sd_type);
-			/* take care of the alignment restrictions	*/
-			if (sd->sd_sdef)
-				bytes_upto_here += zero_bytes(sd);
-			/* no field thrown-outs here	*/
-			bytes_upto_here +=
-				size_of_type(sd->sd_type, "selector");
-		} while (sd = sd->sd_sdef);
-	}
-	/* keep on aligning...	*/
-	while (bytes_upto_here++ < tp->tp_size)
-		con_nullbyte();
-	return ex;
-}
-
-/*	check_and_pad() is given a simple initialisation expression
-	where the type can be either a simple or an aggregate type.
-	In the latter case, only the first member is initialised and
-	the rest is zeroed.
-*/
-check_and_pad(ex, tpp)
-	register struct expr *ex;
-	struct type **tpp;
-{
-	/* ex is of a fundamental type	*/
-	register struct type *tp = *tpp;
-
-	if (tp->tp_fund == ARRAY) {
-		if (valid_type(tp->tp_up, "array element") == 0)
-			return;
-		check_and_pad(ex, &(tp->tp_up));	/* first member	*/
-		if (tp->tp_size == (arith)-1)
-			/*	no size specified upto here: just
-				set it to the size of one member.
-			*/
-			tp = *tpp = construct_type(ARRAY, tp->tp_up, (arith)1);
-		else {
-			register int dim = tp->tp_size / tp->tp_up->tp_size;
-			/* pad remaining members with zeroes */
-			while (--dim > 0)
-				pad(tp->tp_up);
-		}
-	}
-	else
-	if (tp->tp_fund == STRUCT) {
-		register struct sdef *sd = tp->tp_sdef;
-
-		if (valid_type(tp, "struct") == 0)
-			return;
-		check_and_pad(ex, &(sd->sd_type));
-		/* next selector is aligned by adding extra zeroes */
-		if (sd->sd_sdef)
-			zero_bytes(sd);
-		while (sd = sd->sd_sdef) { /* pad remaining selectors	*/
-			pad(sd->sd_type);
-			if (sd->sd_sdef)
-				zero_bytes(sd);
-		}
-	}
-	else	/* simple type	*/
-		check_ival(ex, tp);
-}
-
-/*	pad() fills an element of type tp with zeroes.
-	If the element is an aggregate, pad() is called recursively.
-*/
-pad(tp)
-	register struct type *tp;
-{
-	register arith sz = tp->tp_size;
-
-	switch (tp->tp_fund) {
-	case ARRAY:
-		if (valid_type(tp->tp_up, "array element") == 0)
-			return;
-		break;
-	case STRUCT:
-		if (valid_type(tp, "struct") == 0)
-			return;
-		break;
-	case UNION:
-		if (valid_type(tp, "union") == 0)
-			return;
-		if (options['R']) {
-			warning("initialisation of unions not allowed");
-		}
-		break;
-#ifndef NOBITFIELD
-	case FIELD:
-		put_bf(tp, (arith)0);
-		return;
-#endif NOBITFIELD
-	case ERRONEOUS:
-		return;
-	}
-
-	while (sz >= word_size) {
-		C_con_cst((arith) 0);
-		sz -= word_size;
-	}
-	while (sz) {
-		C_con_icon("0", (arith) 1);
-		sz--;
-	}
-}
-
-/*	check_ival() checks whether the initialisation of an element
-	of a fundamental type is legal and, if so, performs the initialisation
-	by directly generating the necessary code.
-	No further comment is needed to explain the internal structure
-	of this straightforward function.
-*/
-check_ival(expr, tp)
-	register struct expr *expr;
-	register struct type *tp;
-{
-	/*	The philosophy here is that ch7cast puts an explicit
-		conversion node in front of the expression if the types
-		are not compatible.  In this case, the initialisation
-		expression is no longer a constant.
-	*/
-	struct expr *ex = expr;
-	
-	switch (tp->tp_fund) {
-	case CHAR:
-	case SHORT:
-	case INT:
-	case LONG:
-	case ENUM:
-	case POINTER:
-		ch7cast(&ex, '=', tp);
-		expr = ex;
-#ifdef DEBUG
-		print_expr("init-expr after cast", expr);
-#endif DEBUG
-		if (!is_ld_cst(expr))
-			illegal_init_cst(expr);
-		else
-		if (expr->VL_CLASS == Const)
-			con_int(expr);
-		else
-		if (expr->VL_CLASS == Name) {
-			register struct idf *idf = expr->VL_IDF;
-
-			if (idf->id_def->df_level >= L_LOCAL)
-				illegal_init_cst(expr);
-			else	/* e.g., int f(); int p = f; */
-			if (idf->id_def->df_type->tp_fund == FUNCTION)
-				C_con_pnam(idf->id_text);
-			else	/* e.g., int a; int *p = &a; */
-				C_con_dnam(idf->id_text, expr->VL_VALUE);
-		}
-		else {
-			ASSERT(expr->VL_CLASS == Label);
-			C_con_dlb(expr->VL_LBL, expr->VL_VALUE);
-		}
-		break;
-#ifndef NOFLOAT
-	case FLOAT:
-	case DOUBLE:
-		ch7cast(&ex, '=', tp);
-		expr = ex;
-#ifdef DEBUG
-		print_expr("init-expr after cast", expr);
-#endif DEBUG
-		if (expr->ex_class == Float)
-			C_con_fcon(expr->FL_VALUE, expr->ex_type->tp_size);
-		else
-		if (expr->ex_class == Oper && expr->OP_OPER == INT2FLOAT) {
-			/* float f = 1; */
-			expr = expr->OP_RIGHT;
-			if (is_cp_cst(expr))
-				C_con_fcon(long2str((long)expr->VL_VALUE, 10),
-					tp->tp_size);
-			else 
-				illegal_init_cst(expr);
-		}
-		else
-			illegal_init_cst(expr);
-		break;
-#endif NOFLOAT
-
-#ifndef NOBITFIELD
-	case FIELD:
-		ch7cast(&ex, '=', tp->tp_up);
-		expr = ex;
-#ifdef DEBUG
-		print_expr("init-expr after cast", expr);
-#endif DEBUG
-		if (is_cp_cst(expr))
-			put_bf(tp, expr->VL_VALUE);
-		else
-			illegal_init_cst(expr);
-		break;
-#endif NOBITFIELD
-
-	case ERRONEOUS:
-		break;
-	default:
-		crash("check_ival");
-	}
-}
-
-/*	ch_array() initialises an array of characters when given
-	a string constant.
-	Alignment is taken care of.
-*/
-ch_array(tpp, ex)
-	struct type **tpp;	/* type tp = array of characters	*/
-	struct expr *ex;
-{
-	register struct type *tp = *tpp;
-	register arith length = ex->SG_LEN;
-	char *s;
-	arith ntopad;
-
-	ASSERT(ex->ex_class == String);
-	if (tp->tp_size == (arith)-1) {
-		/* set the dimension	*/
-		tp = *tpp = construct_type(ARRAY, tp->tp_up, length);
-		ntopad = align(tp->tp_size, word_size) - tp->tp_size;
-	}
-	else {
-		arith dim = tp->tp_size / tp->tp_up->tp_size;
-		extern char options[];
-
-		if (length > dim) {
-			if (options['R'])
-				too_many_initialisers(ex);
-			else { /* don't take the null byte into account */
-				if (length > dim + 1)
-					expr_warning(ex,
-						"too many initialisers");
-				length = dim;
-			}
-		}
-		ntopad = align(dim, word_size) - length;
-	}
-	/* throw out the characters of the already prepared string	*/
-	s = Malloc((unsigned) (length + ntopad));
-	clear(s, (int) (length + ntopad));
-	strncpy(s, ex->SG_VALUE, (int) length);
-	free(ex->SG_VALUE);
-	str_cst(s, (int) (length + ntopad));
-	free(s);
-}
-
-/*	As long as some parts of the pipeline cannot handle very long string
-	constants, string constants are written out in chunks
-*/
-str_cst(str, len)
-	register char *str;
-	register int len;
-{
-	arith chunksize = ((127 + word_size) / word_size) * word_size;
-
-	while (len > chunksize) {
-		C_con_scon(str, chunksize);
-		len -= chunksize;
-		str += chunksize;
-	}
-	C_con_scon(str, (arith) len);
-}
-
-#ifndef NOBITFIELD
-/*	put_bf() takes care of the initialisation of (bit-)field
-	selectors of a struct: each time such an initialisation takes place,
-	put_bf() is called instead of the normal code generating routines.
-	Put_bf() stores the given integral value into "field" and
-	"throws" the result of "field" out if the current selector
-	is the last of this number of fields stored at the same address.
-*/
-put_bf(tp, val)
-	struct type *tp;
-	arith val;
-{
-	static long field = (arith)0;
-	static arith offset = (arith)-1;
-	register struct field *fd = tp->tp_field;
-	register struct sdef *sd =  fd->fd_sdef;
-	static struct expr exp;
-
-	ASSERT(sd);
-	if (offset == (arith)-1) {
-		/* first bitfield in this field	*/
-		offset = sd->sd_offset;
-		exp.ex_type = tp->tp_up;
-		exp.ex_class = Value;
-		exp.VL_CLASS = Const;
-	}
-	if (val != 0)	/* insert the value into "field"	*/
-		field |= (val & fd->fd_mask) << fd->fd_shift;
-	if (sd->sd_sdef == 0 || sd->sd_sdef->sd_offset != offset) {
-		/* the selector was the last stored at this address	*/
-		exp.VL_VALUE = field;
-		con_int(&exp);
-		field = (arith)0;
-		offset = (arith)-1;
-	}
-}
-#endif NOBITFIELD
-
-int
-zero_bytes(sd)
-	register struct sdef *sd;
-{
-	/*	fills the space between a selector of a struct
-		and the next selector of that struct with zero-bytes.
-	*/
-	register int n = sd->sd_sdef->sd_offset - sd->sd_offset -
-		size_of_type(sd->sd_type, "struct member");
-	register int count = n;
-
-	while (n-- > 0)
-		con_nullbyte();
-	return count;
-}
-
-int
-valid_type(tp, str)
-	struct type *tp;
-	char *str;
-{
-	if (tp->tp_size < 0) {
-		error("size of %s unknown", str);
-		return 0;
-	}
-	return 1;
-}
-
-con_int(ex)
-	register struct expr *ex;
-{
-	register struct type *tp = ex->ex_type;
-
-	ASSERT(is_cp_cst(ex));
-	if (tp->tp_unsigned)
-		C_con_ucon(long2str((long)ex->VL_VALUE, -10), tp->tp_size);
-	else
-		C_con_icon(long2str((long)ex->VL_VALUE, 10), tp->tp_size);
-}
-
-illegal_init_cst(ex)
-	struct expr *ex;
-{
-	expr_error(ex, "illegal initialisation constant");
-}
-
-too_many_initialisers(ex)
-	struct expr *ex;
-{
-	expr_error(ex, "too many initialisers");
-}
-
-aggregate_type(tp)
-	register struct type *tp;
-{
-	return tp->tp_fund == ARRAY || tp->tp_fund == STRUCT;
-}

+ 0 - 70
lang/cem/cemcom/l_dummy.c

@@ -1,70 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* $Header$ */
-
-/*
- *The following functions are hacked to null-functions (i.e. they
- * do nothing). This needs another solution in the future. !!???!!
- */
-#include	"lint.h"
-
-#ifdef	LINT
-
-#include	"arith.h"
-#include	"label.h"
-
-C_close(){}
-int C_busy(){return 0;}
-
-
-/* More routines */
-/* ARGSUSED */
-CC_bhcst(ps_xxx,n,w,i) arith n,w; {}
-/* ARGSUSED */
-CC_crcst(ps_xxx,v) arith v; {}
-/* ARGSUSED */
-CC_crdlb(ps_xxx,v,s) label v; arith s; {}
-/* ARGSUSED */
-CC_crdnam(ps_xxx,v,s) char *v; arith s; {}
-/* ARGSUSED */
-CC_crxcon(op,ps_xxx,v,s) char *v; arith s; {}
-/* ARGSUSED */
-CC_crilb(ps_xxx,v) label v; {}
-/* ARGSUSED */
-CC_crpnam(ps_xxx,v) char *v; {}
-/* ARGSUSED */
-CC_crscon(ps_xxx,v,s) char *v; arith s; {}
-/* ARGSUSED */
-CC_cst(l) {}
-/* ARGSUSED */
-CC_dfdlb(l) label l; {}
-/* ARGSUSED */
-CC_dfdnam(s) char *s; {}
-/* ARGSUSED */
-CC_dfilb(l) label l; {}
-/* ARGSUSED */
-CC_end(l) arith l; {}
-CC_msend() {}
-/* ARGSUSED */
-CC_msstart(ms) {}
-/* ARGSUSED */
-CC_opcst(op_xxx,c) arith c; {}
-/* ARGSUSED */
-CC_opdlb(op_xxx,g,o) label g; arith o; {}
-/* ARGSUSED */
-CC_opilb(op_xxx,b) label b; {}
-/* ARGSUSED */
-CC_oppnam(op_xxx,p) char *p; {}
-/* ARGSUSED */
-CC_pronarg(s) char *s; {}
-/* ARGSUSED */
-CC_psdlb(ps_xxx,l) label l; {}
-/* ARGSUSED */
-CC_psdnam(ps_xxx,s) char *s; {}
-/* ARGSUSED */
-CC_pspnam(ps_xxx,s) char *s; {}
-/* ARGSUSED */
-CC_scon(v,s) char *s; {}
-#endif	LINT

+ 0 - 52
lang/cem/cemcom/macro.h

@@ -1,52 +0,0 @@
-/* $Header$ */
-/* PREPROCESSOR: DEFINITION OF MACRO DESCRIPTOR */
-
-#include	"nopp.h"
-
-#ifndef NOPP
-/*	The flags of the mc_flag field of the macro structure. Note that
-	these flags can be set simultaneously.
-*/
-#define NOFLAG		0		/* no special flags	*/
-#define	FUNC		01		/* function attached    */
-#define	PREDEF		02		/* predefined macro	*/
-
-#define	FORMALP 0200	/* mask for creating macro formal parameter	*/
-
-/*	The macro descriptor is very simple, except the fact that the
-	mc_text, which points to the replacement text, contains the
-	non-ascii characters \201, \202, etc, indicating the position of a
-	formal parameter in this text.
-*/
-struct macro	{
-	struct macro *next;
-	char *	mc_text;	/* the replacement text		*/
-	int	mc_nps;	/* number of formal parameters	*/
-	int	mc_length;	/* length of replacement text	*/
-	char	mc_flag;	/* marking this macro		*/
-};
-
-
-/* allocation definitions of struct macro */
-/* ALLOCDEF "macro" */
-extern char *st_alloc();
-extern struct macro *h_macro;
-#define	new_macro() ((struct macro *) \
-		st_alloc((char **)&h_macro, sizeof(struct macro)))
-#define	free_macro(p) st_free(p, h_macro, sizeof(struct macro))
-
-
-/* `token' numbers of keywords of command-line processor
-*/
-#define	K_UNKNOWN	0
-#define	K_DEFINE	1
-#define	K_ELIF		2
-#define	K_ELSE		3
-#define	K_ENDIF		4
-#define	K_IF		5
-#define	K_IFDEF		6
-#define	K_IFNDEF	7
-#define	K_INCLUDE	8
-#define	K_LINE		9
-#define	K_UNDEF		10
-#endif NOPP

+ 0 - 19
lang/cem/cemcom/make.emfun

@@ -1,19 +0,0 @@
-ed - $1 <<'--EOI--'
-g/^%/d
-g/^	/.-1,.j
-1,$s/^\([^|]*\)|\([^|]*\)|\(.*\)$/\
-\1 \2 {\
-\3;\
-}/
-1i
-/* EM COMPACT CODE -- PROCEDURAL INTERFACE (generated from emcode.def) */
-#include	"em.h"
-#ifdef	PROC_INTF
-#include	"label.h"
-#include	"arith.h"
-.
-$a
-#endif	PROC_INTF
-.
-1,$p
---EOI--

+ 0 - 10
lang/cem/cemcom/make.emmac

@@ -1,10 +0,0 @@
-ed - $1 <<'--EOI--'
-g/^%/d
-g/^	/.-1,.j
-1,$s/^\([^|]*\)|[^|]*|\(.*\)$/\
-#define \1 (\2)/
-1i
-/* EM COMPACT CODE -- MACRO DEFINITIONS (generated from emcode.def) */
-.
-1,$p
---EOI--

+ 0 - 9
lang/cem/cemcom/nmclash.c

@@ -1,9 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* Accepted if many characters of long names are significant */
-/* $Header$ */
-abcdefghijklmnopr() { }
-abcdefghijklmnopq() { }
-main() { }

+ 0 - 46
lang/cem/cemcom/stack.h

@@ -1,46 +0,0 @@
-/* $Header$ */
-/* IDENTIFIER STACK DEFINITIONS */
-
-/*	The identifier stack is implemented as a stack of sets.
-	The stack is implemented by a doubly linked list,
-	the sets by singly linked lists.
-*/
-
-struct stack_level	{
-	struct stack_level *next;
-	struct stack_level *sl_next;		/* upward link		*/
-	struct stack_level *sl_previous;	/* downward link	*/
-	struct stack_entry *sl_entry;		/* sideward link	*/
-	arith sl_local_offset;		/* @ for first coming object	*/
-	arith sl_max_block;		/* maximum size of sub-block	*/
-	int sl_level;
-};
-
-
-/* allocation definitions of struct stack_level */
-/* ALLOCDEF "stack_level" */
-extern char *st_alloc();
-extern struct stack_level *h_stack_level;
-#define	new_stack_level() ((struct stack_level *) \
-		st_alloc((char **)&h_stack_level, sizeof(struct stack_level)))
-#define	free_stack_level(p) st_free(p, h_stack_level, sizeof(struct stack_level))
-
-
-struct stack_entry	{
-	struct stack_entry *next;
-	struct idf *se_idf;
-};
-
-
-/* allocation definitions of struct stack_entry */
-/* ALLOCDEF "stack_entry" */
-extern char *st_alloc();
-extern struct stack_entry *h_stack_entry;
-#define	new_stack_entry() ((struct stack_entry *) \
-		st_alloc((char **)&h_stack_entry, sizeof(struct stack_entry)))
-#define	free_stack_entry(p) st_free(p, h_stack_entry, sizeof(struct stack_entry))
-
-
-extern struct stack_level *local_level;
-extern struct stack_level *stack_level_of();
-extern int level;

+ 0 - 67
lang/cem/cemcom/storage.c

@@ -1,67 +0,0 @@
-/* $Header$ */
-/*	S T R U C T U R E - S T O R A G E  M A N A G E M E N T		*/
-
-/*	Assume that each structure contains a field "next", of pointer
-	type, as first tagfield.
-	struct xxx serves as a general structure: it just declares the
-	tagfield "next" as first field of a structure.
-	Please don't worry about any warnings when compiling this file
-	because some dirty tricks are performed to obtain the necessary
-	actions.
-*/
-
-#include	"debug.h"	/* UF */
-#include	"botch_free.h"	/* UF */
-#include	"assert.h"
-#include	"alloc.h"
-#include	"storage.h"
-
-struct xxx	{
-	char *next;
-};
-
-char *
-head_alloc(phead, size)
-	char **phead;
-	int size;
-{
-	struct xxx *tmp;
-
-	if (*phead == 0)	{
-		return Malloc(size);
-	}
-	tmp = (struct xxx *) (*phead);
-	*phead = (char *) tmp->next;
-	return (char *) tmp;
-}
-
-/* instead of Calloc:	*/
-clear(ptr, n)
-	char *ptr;
-	int n;
-{
-	ASSERT((long)ptr % sizeof (long) == 0);
-	while (n >= sizeof (long))	{	/* high-speed clear loop */
-		*(long *)ptr = 0L;
-		ptr += sizeof (long), n -= sizeof (long);
-	}
-	while (n--)
-		*ptr++ = '\0';
-}
-
-#ifdef	BOTCH_FREE
-botch(ptr, n)
-	char *ptr;
-	int n;
-{	/*	Writes garbage over n chars starting from ptr.
-		Used to check if freed memory is used inappropriately.
-	*/
-	ASSERT((long)ptr % sizeof (long) == 0);
-	while (n >= sizeof (long))	{	/* high-speed botch loop */
-		*(long *)ptr = 025252525252L;
-		ptr += sizeof (long), n -= sizeof (long);
-	}
-	while (n--)
-		*ptr++ = '\252';
-}
-#endif	BOTCH_FREE

+ 0 - 23
lang/cem/cemcom/storage.h

@@ -1,23 +0,0 @@
-/* $Header$ */
-/*	S T R U C T U R E - S T O R A G E  D E F I N I T I O N S	*/
-
-/*	Storage allocation is one of the most expensive operations in
-	the compiler and consequently much thought and experimentation
-	has gone into it.  To simplify the hooking in of new super-fancy
-	algorithms, all allocating and freeing of storage for structs
-	goes through the macros
-		st_alloc(&head, size)
-		st_free(ptr, head, size)
-	which, hopefully, convey enough information.
-*/
-
-extern char *head_alloc();
-
-#define	st_alloc(headp, size)		head_alloc((char **)headp, size)
-
-#ifndef	BOTCH_FREE
-#define	st_free(ptr, head, size)	(ptr->next = head, head = ptr)
-#else	def BOTCH_FREE
-#define	st_free(ptr, head, size)	(botch((char *)(ptr), size), \
-						ptr->next = head, head = ptr)
-#endif	BOTCH_FREE

+ 0 - 277
lang/cem/cemcom/string.c

@@ -1,277 +0,0 @@
-/* $Header$ */
-/* STRING MANIPULATION AND PRINT ROUTINES */
-
-#include	<system.h>
-#include	"string.h"
-#include	"nopp.h"
-#include	"str_params.h"
-#include	"arith.h"
-
-doprnt(fp, fmt, argp)
-	File *fp;
-	char *fmt;
-	int argp[];
-{
-	char buf[SSIZE];
-
-	sys_write(fp, buf, format(buf, fmt, (char *)argp));
-}
-
-/*VARARGS1*/
-printf(fmt, args)
-	char *fmt;
-	char args;
-{
-	char buf[SSIZE];
-
-	sys_write(STDOUT, buf, format(buf, fmt, &args));
-}
-
-/*VARARGS1*/
-fprintf(fp, fmt, args)
-	File *fp;
-	char *fmt;
-	char args;
-{
-	char buf[SSIZE];
-
-	sys_write(fp, buf, format(buf, fmt, &args));
-}
-
-/*VARARGS1*/
-char *
-sprintf(buf, fmt, args)
-	char *buf, *fmt;
-	char args;
-{
-	buf[format(buf, fmt, &args)] = '\0';
-	return buf;
-}
-
-int
-format(buf, fmt, argp)
-	char *buf, *fmt;
-	char *argp;
-{
-	register char *pf = fmt, *pa = argp;
-	register char *pb = buf;
-
-	while (*pf) {
-		if (*pf == '%') {
-			register width, base, pad, npad;
-			char *arg;
-			char cbuf[2];
-			char *badformat = "<bad format>";
-			
-			/* get padder */
-			if (*++pf == '0') {
-				pad = '0';
-				++pf;
-			}
-			else
-				pad = ' ';
-			
-			/* get width */
-			width = 0;
-			while (*pf >= '0' && *pf <= '9')
-				width = 10 * width + *pf++ - '0';
-			
-			/* get text and move pa */
-			if (*pf == 's') {
-				arg = *(char **)pa;
-				pa += sizeof(char *);
-			}
-			else
-			if (*pf == 'c') {
-				cbuf[0] = * (char *) pa;
-				cbuf[1] = '\0';
-				pa += sizeof(int);
-				arg = &cbuf[0];
-			}
-			else
-			if (*pf == 'l') {
-				/* alignment ??? */
-				if (base = integral(*++pf)) {
-					arg = int_str(*(long *)pa, base);
-					pa += sizeof(long);
-				}
-				else {
-					pf--;
-					arg = badformat;
-				}
-			}
-			else
-			if (base = integral(*pf)) {
-				arg = int_str((long)*(int *)pa, base);
-				pa += sizeof(int);
-			}
-			else
-			if (*pf == '%')
-				arg = "%";
-			else
-				arg = badformat;
-
-			npad = width - strlen(arg);
-
-			while (npad-- > 0)
-				*pb++ = pad;
-			
-			while (*pb++ = *arg++);
-			pb--;
-			pf++;
-		}
-		else
-			*pb++ = *pf++;
-	}
-	return pb - buf;
-}
-
-integral(c)
-{
-	switch (c) {
-	case 'b':
-		return -2;
-	case 'd':
-		return 10;
-	case 'o':
-		return -8;
-	case 'u':
-		return -10;
-	case 'x':
-		return -16;
-	}
-	return 0;
-}
-
-/* Integer to String translator
-*/
-char *
-int_str(val, base)
-	register long val;
-	register base;
-{
-	/*	int_str() is a very simple integer to string converter.
-		base < 0 : unsigned.
-		base must be an element of [-16,-2] V [2,16].
-	*/
-	static char numbuf[MAXWIDTH];
-	static char vec[] = "0123456789ABCDEF";
-	register char *p = &numbuf[MAXWIDTH];
-	int sign = (base > 0);
-
-	*--p = '\0';		/* null-terminate string	*/
-	if (val) {
-		if (base > 0) {
-			if (val < (arith)0) {
-				if ((val = -val) < (arith)0)
-					goto overflow;
-			}
-			else
-				sign = 0;
-		}
-		else
-		if (base < 0) {			/* unsigned */
-			base = -base;
-			if (val < (arith)0) {
-				register mod, i;
-				
-			overflow:
-			/* this takes a rainy Sunday afternoon to explain */
-			/* ??? */
-				mod = 0;
-				for (i = 0; i < 8 * sizeof val; i++) {
-					mod <<= 1;
-					if (val < 0)
-						mod++;
-					val <<= 1;
-					if (mod >= base) {
-						mod -= base;
-						val++;
-					}
-				}
-				*--p = vec[mod];
-			}
-		}
-			
-		do {
-			*--p = vec[(int) (val % base)];
-			val /= base;
-		} while (val != (arith)0);
-
-		if (sign)
-			*--p = '-';	/* don't forget it !!	*/
-	}
-	else
-		*--p = '0';		/* just a simple 0	*/
-
-	return p;
-}
-
-/*	return negative, zero or positive value if
-	resp. s < t, s == t or s > t
-*/
-int
-strcmp(s, t)
-	register char *s, *t;
-{
-	while (*s == *t++)
-		if (*s++ == '\0')
-			return 0;
-	return *s - *--t;
-}
-
-/* return length of s
-*/
-int
-strlen(s)
-	char *s;
-{
-	register char *b = s;
-
-	while (*b++)
-		;
-	return b - s - 1;
-}
-
-#ifndef	NOPP
-/* append t to s
-*/
-char *
-strcat(s, t)
-	register char *s, *t;
-{
-	register char *b = s;
-
-	while (*s++)
-		;
-	s--;
-	while (*s++ = *t++)
-		;
-	return b;
-}
-
-/* Copy t into s
-*/
-char *
-strcpy(s, t)
-	register char *s, *t;
-{
-	register char *b = s;
-
-	while (*s++ = *t++)
-		;
-	return b;
-}
-
-char *
-rindex(str, chr)
-	register char *str, chr;
-{
-	register char *retptr = 0;
-
-	while (*str)
-		if (*str++ == chr)
-			retptr = &str[-1];
-	return retptr;
-}
-#endif	NOPP

+ 0 - 13
lang/cem/cemcom/string.h

@@ -1,13 +0,0 @@
-/* $Header$ */
-/* STRING-ROUTINE DEFINITIONS */
-
-#define stdin 0
-#define stdout 1
-#define stderr 2
-
-#define itos(n)	int_str((long)(n), 10)
-
-char *sprintf();	/* string.h	*/
-char *int_str();	/* string.h	*/
-
-char *strcpy(), *strcat(), *rindex();

+ 0 - 44
lang/cem/cemcom/struct.h

@@ -1,44 +0,0 @@
-/* $Header$ */
-/* SELECTOR DESCRIPTOR */
-
-struct sdef	{		/* for selectors */
-	struct sdef *next;
-	int sd_level;
-	struct idf *sd_idf;	/* its name */
-	struct sdef *sd_sdef;	/* the next selector */
-	struct type *sd_stype;	/* the struct it belongs to */
-	struct type *sd_type;	/* its type */
-	arith sd_offset;
-};
-
-extern char *st_alloc();
-
-
-/* allocation definitions of struct sdef */
-/* ALLOCDEF "sdef" */
-extern char *st_alloc();
-extern struct sdef *h_sdef;
-#define	new_sdef() ((struct sdef *) \
-		st_alloc((char **)&h_sdef, sizeof(struct sdef)))
-#define	free_sdef(p) st_free(p, h_sdef, sizeof(struct sdef))
-
-
-struct tag	{		/* for struct-, union- and enum tags */
-	struct tag *next;
-	int tg_level;
-	int tg_busy;	/* non-zero during declaration of struct/union pack */
-	struct type *tg_type;
-};
-
-
-
-/* allocation definitions of struct tag */
-/* ALLOCDEF "tag" */
-extern char *st_alloc();
-extern struct tag *h_tag;
-#define	new_tag() ((struct tag *) \
-		st_alloc((char **)&h_tag, sizeof(struct tag)))
-#define	free_tag(p) st_free(p, h_tag, sizeof(struct tag))
-
-
-struct sdef *idf2sdef();

+ 0 - 40
lang/cem/cemcom/switch.h

@@ -1,40 +0,0 @@
-/* $Header$ */
-/*		S W I T C H - T A B L E - S T R U C T U R E		*/
-
-struct switch_hdr	{
-	struct switch_hdr *next;
-	label sh_break;
-	label sh_default;
-	label sh_table;
-	int sh_nrofentries;
-	struct type *sh_type;
-	arith sh_lowerbd;
-	arith sh_upperbd;
-	struct case_entry *sh_entries;
-};
-
-
-/* allocation definitions of struct switch_hdr */
-/* ALLOCDEF "switch_hdr" */
-extern char *st_alloc();
-extern struct switch_hdr *h_switch_hdr;
-#define	new_switch_hdr() ((struct switch_hdr *) \
-		st_alloc((char **)&h_switch_hdr, sizeof(struct switch_hdr)))
-#define	free_switch_hdr(p) st_free(p, h_switch_hdr, sizeof(struct switch_hdr))
-
-
-struct case_entry	{
-	struct case_entry *next;
-	label ce_label;
-	arith ce_value;
-};
-
-
-/* allocation definitions of struct case_entry */
-/* ALLOCDEF "case_entry" */
-extern char *st_alloc();
-extern struct case_entry *h_case_entry;
-#define	new_case_entry() ((struct case_entry *) \
-		st_alloc((char **)&h_case_entry, sizeof(struct case_entry)))
-#define	free_case_entry(p) st_free(p, h_case_entry, sizeof(struct case_entry))
-

+ 0 - 72
lang/cem/cemcom/system.c

@@ -1,72 +0,0 @@
-/* $Header$ */
-/* SYSTEM DEPENDENT ROUTINES */
-
-#include "system.h"
-#include "inputtype.h"
-#include <sys/stat.h>
-
-extern long lseek();
-
-int
-xopen(name, flag, mode)
-	char *name;
-{
-	if (name[0] == '-' && name[1] == '\0')
-		return (flag == OP_RDONLY) ? 0 : 1;
-
-	switch (flag) {
-
-	case OP_RDONLY:
-		return open(name, 0);
-	case OP_WRONLY:
-		return open(name, 1);
-	case OP_CREAT:
-		return creat(name, mode);
-	case OP_APPEND:
-		{
-			register fd;
-
-			if ((fd = open(name, 1)) < 0)
-				return -1;
-			lseek(fd, 0L, 2);
-			return fd;
-		}
-	}
-	/*NOTREACHED*/
-}
-
-int
-xclose(fildes)
-{
-	if (fildes != 0 && fildes != 1)
-		return close(fildes);
-	return -1;
-}
-
-#ifdef	READ_IN_ONE
-long
-xfsize(fildes)
-{
-	struct stat stbuf;
-
-	if (fstat(fildes, &stbuf) != 0)
-		return -1;
-	return stbuf.st_size;
-}
-#endif	READ_IN_ONE
-
-exit(n)
-{
-	_exit(n);
-}
-
-xstop(how, stat)
-{
-	switch (how) {
-	case S_ABORT:
-		abort();
-	case S_EXIT:
-		exit(stat);
-	}
-	/*NOTREACHED*/
-}

+ 0 - 34
lang/cem/cemcom/system.h

@@ -1,34 +0,0 @@
-/* $Header$ */
-/* SYSTEM DEPENDANT DEFINITIONS */
-
-#include <sys/types.h>
-#include <errno.h>
-
-#define OP_RDONLY	0	/* open for read */
-#define OP_WRONLY	1	/* open for write */
-#define OP_CREAT	2	/* create and open for write */
-#define OP_APPEND	3	/* open for write at end */
-
-#define sys_open(name, flag)	xopen(name, flag, 0)
-#define sys_close(fildes)	xclose(fildes)
-#define sys_read(fildes, buffer, nbytes)	read(fildes, buffer, nbytes)
-#define sys_write(fildes, buffer, nbytes)	write(fildes, buffer, nbytes)
-#define sys_creat(name, mode)	xopen(name, OP_CREAT, mode)
-#define sys_remove(name)	unlink(name)
-#define sys_fsize(fd)		xfsize(fd)
-#define sys_sbrk(incr)		sbrk(incr)
-#define sys_stop(how, stat)	xstop(how, stat)
-
-#define S_ABORT	1
-#define S_EXIT	2
-
-char *sbrk();
-long xfsize();
-
-extern int errno;
-
-#define sys_errno	errno
-
-#define time_type	time_t
-#define sys_time(tloc)	time(tloc)
-time_type time();

+ 0 - 300
lang/cem/cemcom/tab.c

@@ -1,300 +0,0 @@
-/*
- * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
- * See the copyright notice in the ACK home directory, in the file "Copyright".
- */
-/* $Header$ */
-/*	@cc tab.c -o $INSTALLDIR/tab@
-	tab - table generator 
-
-	Author: Erik Baalbergen (..tjalk!erikb)
-*/
-
-#include <stdio.h> 
-
-#define MAXTAB	10000
-#define MAXBUF	10000
-#define COMCOM	'-'
-#define FILECOM	'%'
-
-int InputForm = 'c';
-char OutputForm[MAXBUF] = "%s,\n";
-int TabSize = 257;
-char *Table[MAXTAB];
-char *ProgCall;
-
-main(argc, argv)
-	char *argv[];
-{
-	ProgCall = *argv++;
-	argc--;
-	while (argc-- > 0) {
-		if (**argv == COMCOM) {
-			option(*argv++);
-		}
-		else {
-			process(*argv++, InputForm);
-		}
-	}
-	exit(0);
-}
-
-char *
-Salloc(s)
-	char *s;
-{
-	extern char *malloc(), *strcpy();
-	char *ns = malloc((unsigned int)strlen(s) + 1);
-
-	if (ns) {
-		strcpy(ns, s);
-	}
-	return ns;
-}
-
-option(str)
-	char *str;
-{
-	/*	note that *str indicates the source of the option:
-		either COMCOM (from command line) or FILECOM (from a file).
-	*/
-	extern char *sprintf();
-	
-	switch (*++str) {
-
-	case ' ':	/* command */
-	case '\t':
-	case '\0':
-		break;
-	case 'I':
-		InputForm = *++str;
-		break;
-	case 'f':
-		if (*++str == '\0') {
-			fprintf(stderr, "%s: -f: name expected\n", ProgCall);
-			exit(1);
-		}
-		DoFile(str);
-		break;
-	case 'F':
-		sprintf(OutputForm, "%s\n", ++str);
-		break;
-	case 'T':
-		printf("%s\n", ++str);
-		break;
-	case 'p':
-		PrintTable();
-		break;
-	case 'C':
-		ClearTable();
-		break;
-	case 'S':
-	{
-		register i = stoi(++str);
-
-		if (i <= 0 || i > MAXTAB) {
-			fprintf(stderr, "%s: size would exceed maximum\n",
-				ProgCall);
-		}
-		else {
-			TabSize = i;
-		}
-		break;
-	}
-	default:
-		fprintf(stderr, "%s: bad option -%s\n", ProgCall, str);
-	}
-}
-
-ClearTable()
-{
-	register i;
-
-	for (i = 0; i < MAXTAB; i++) {
-		Table[i] = 0;
-	}
-}
-
-PrintTable()
-{
-	register i;
-
-	for (i = 0; i < TabSize; i++) {
-		if (Table[i]) {
-			printf(OutputForm, Table[i]);
-		}
-		else {
-			printf(OutputForm, "0");
-		}
-	}
-}
-
-process(str, format)
-	char *str;
-{
-	char *cstr = str;
-	char *Name = cstr;	/* overwrite original string!	*/
-
-	/* strip of the entry name
-	*/
-	while (*str && *str != ':') {
-		if (*str == '\\') {
-			++str;
-		}
-		*cstr++ = *str++;
-	}
-
-	if (*str != ':') {
-		fprintf(stderr, "%s: bad specification: \"%s\", ignored\n",
-			ProgCall, Name);
-		return 0;
-	}
-	*cstr = '\0';
-	str++;
-
-	switch (format) {
-
-	case 'c':
-		return c_proc(str, Name);
-	default:
-		fprintf(stderr, "%s: bad input format\n", ProgCall);
-	}
-	return 0;
-}
-
-c_proc(str, Name)
-	char *str;
-	char *Name;
-{
-	int ch, ch2;
-	int quoted();
-
-	while (*str)	{
-		if (*str == '\\')	{
-			ch = quoted(&str);
-		}
-		else	{
-			ch = *str++;
-		}
-		if (*str == '-')	{
-			if (*++str == '\\')	{
-				ch2 = quoted(&str);
-			}
-			else	{
-				if (ch2 = *str++);
-				else str--;
-			}
-			if (ch > ch2)	{
-				fprintf(stderr, "%s: bad range\n", ProgCall);
-				return 0;
-			}
-			if (ch >= 0 && ch2 <= 255)
-				while (ch <= ch2)
-					Table[ch++] = Salloc(Name);
-		}
-		else	{
-			if (ch >= 0 && ch <= 255)
-				Table[ch] = Salloc(Name);
-		}
-	}
-	return 1;
-}
-			
-int
-quoted(pstr)
-	char **pstr;
-{
-	register int ch;
-	register int i;
-	register char *str = *pstr;
-
-	if ((*++str >= '0') && (*str <= '9'))	{
-		ch = 0;
-		for (i = 0; i < 3; i++)	{
-			ch = 8 * ch + *str - '0';
-			if (*++str < '0' || *str > '9')
-				break;
-		}
-	}
-	else	{
-		switch (*str++)	{
-
-		case 'n':
-			ch = '\n';
-			break;
-		case 't':
-			ch = '\t';
-			break;
-		case 'b':
-			ch = '\b';
-			break;
-		case 'r':
-			ch = '\r';
-			break;
-		case 'f':
-			ch = '\f';
-			break;
-		default :
-			ch = *str;
-		}
-	}
-	*pstr = str;
-	return ch & 0377;
-}
-
-int
-stoi(str)
-	char *str;
-{
-	register i = 0;
-
-	while (*str >= '0' && *str <= '9') {
-		i = i * 10 + *str++ - '0';
-	}
-	return i;
-}
-
-char *
-getline(s, n, fp)
-	char *s;
-	FILE *fp;
-{
-	register c = getc(fp);
-	char *str = s;
-
-	while (n--) {
-		if (c == EOF) {
-			return NULL;
-		}
-		else
-		if (c == '\n') {
-			*str++ = '\0';
-			return s;
-		}
-		*str++ = c;
-		c = getc(fp);
-	}
-	s[n - 1] = '\0';
-	return s;
-}
-
-#define BUFSIZE 1024
-
-DoFile(name)
-	char *name;
-{
-	char text[BUFSIZE];
-	FILE *fp;
-
-	if ((fp = fopen(name, "r")) == NULL) {
-		fprintf(stderr, "%s: cannot read file %s\n", ProgCall, name);
-		exit(1);
-	}
-	while (getline(text, BUFSIZE, fp) != NULL) {
-		if (text[0] == FILECOM) {
-			option(text);
-		}
-		else {
-			process(text, InputForm);
-		}
-	}
-}

+ 0 - 52
lang/cem/cemcom/type.h

@@ -1,52 +0,0 @@
-/* $Header$ */
-/* TYPE DESCRIPTOR */
-
-#include	"nobitfield.h"
-
-struct type	{
-	struct type *next;	/* used only with ARRAY */
-	short tp_fund;		/* fundamental type */
-	char tp_unsigned;
-	int tp_align;
-	arith tp_size;		/* -1 if declared but not defined */
-	struct idf *tp_idf;	/* name of STRUCT, UNION or ENUM */
-	struct sdef *tp_sdef;	/* to first selector */
-	struct type *tp_up;	/* from FIELD, POINTER, ARRAY
-					or FUNCTION to fund. */
-	struct field *tp_field;	/* field descriptor if fund == FIELD	*/
-	struct type *tp_pointer;/* to POINTER */
-	struct type *tp_array;	/* to ARRAY */
-	struct type *tp_function;/* to FUNCTION */
-};
-
-extern struct type
-	*create_type(), *standard_type(), *construct_type(), *pointer_to(),
-	*array_of(), *function_of();
-
-#ifndef NOBITFIELD
-extern struct type *field_of();
-#endif NOBITFIELD
-
-extern struct type
-	*char_type, *uchar_type,
-	*short_type, *ushort_type,
-	*word_type, *uword_type,
-	*int_type, *uint_type,
-	*long_type, *ulong_type,
-	*float_type, *double_type,
-	*void_type, *label_type,
-	*string_type, *funint_type, *error_type;
-
-extern struct type *pa_type;	/* type.c	*/
-
-extern arith size_of_type(), align();
-
-
-/* allocation definitions of struct type */
-/* ALLOCDEF "type" */
-extern char *st_alloc();
-extern struct type *h_type;
-#define	new_type() ((struct type *) \
-		st_alloc((char **)&h_type, sizeof(struct type)))
-#define	free_type(p) st_free(p, h_type, sizeof(struct type))
-

+ 0 - 266
lang/cem/cpp.ansi/Makefile

@@ -1,266 +0,0 @@
-# MAKEFILE FOR (STAND_ALONE) CEM PREPROCESSOR
-
-EMHOME=../../..
-MODULES=$(EMHOME)/modules
-MODULESLIB=$(MODULES)/lib
-BIN=$(EMHOME)/lib
-MANDIR=$(EMHOME)/man
-
-# Some paths
-
-# Libraries
-SYSLIB = $(MODULESLIB)/libsystem.a
-STRLIB = $(MODULESLIB)/libstring.a
-PRTLIB = $(MODULESLIB)/libprint.a
-ALLOCLIB = $(MODULESLIB)/liballoc.a
-ASSERTLIB = $(MODULESLIB)/libassert.a
-MALLOC = $(MODULESLIB)/malloc.o
-LIBS = $(PRTLIB) $(STRLIB) $(ALLOCLIB) $(MALLOC) $(ASSERTLIB) $(SYSLIB)
-LIB_INCLUDES = -I$(MODULES)/h -I$(MODULES)/pkg
-
-# Where to install the preprocessor
-CEMPP = $(BIN)/cpp.ansi
-
-TABGEN	= $(EMHOME)/bin/tabgen
-
-# What C compiler to use and how
-CC = cc
-COPTIONS = -O
-LDFLAGS =
-
-# What parser generator to use and how
-GEN = $(EMHOME)/bin/LLgen
-GENOPTIONS =
-
-# Special #defines during compilation
-CDEFS =	$(LIB_INCLUDES)
-CFLAGS = $(CDEFS) $(COPTIONS)#	# we cannot pass the COPTIONS to lint!
-
-# Grammar files and their objects
-LSRC =	tokenfile.g expression.g
-LCSRC = tokenfile.c expression.c Lpars.c
-LOBJ =	tokenfile.o expression.o Lpars.o
-
-# Objects of hand-written C files
-CSRC =	LLlex.c LLmessage.c ch3bin.c ch3mon.c domacro.c \
-	error.c idf.c init.c input.c main.c options.c \
-	preprocess.c replace.c skip.c tokenname.c expr.c
-COBJ =	LLlex.o LLmessage.o ch3bin.o ch3mon.o domacro.o \
-	error.o idf.o init.o input.o main.o options.o \
-	preprocess.o replace.o skip.o tokenname.o next.o expr.o
-
-PRFILES = Makefile Parameters \
-	make.hfiles make.tokcase make.tokfile LLlex.h bits.h file_info.h \
-	idf.h input.h interface.h macro.str replace.str \
-	class.h char.tab expression.g $(CSRC)
-
-# Objects of other generated C files
-GOBJ =	char.o symbol2str.o
-
-# generated source files
-GSRC =	char.c symbol2str.c next.c
-
-# .h files generated by `make.allod'
-STRSRC = macro.str replace.str
-GSTRSRC = macro.h replace.h
-
-# .h files generated by `make hfiles'; PLEASE KEEP THIS UP-TO-DATE!
-GHSRC =	errout.h idfsize.h ifdepth.h macbuf.h \
-	nparams.h numsize.h obufsize.h \
-	parbufsize.h pathlength.h strsize.h textsize.h \
-	botch_free.h debug.h inputtype.h dobits.h ln_prefix.h
-
-# Other generated files, for 'make clean' only
-GENERATED = tokenfile.g Lpars.h LLfiles LL.output lint.out \
-	Xref hfiles cfiles tags Makefile.old
-
-all:	cc
-
-cc:	cfiles
-	make "EMHOME="$(EMHOME) "CC=$(CC)" ncpp
-
-hfiles: Parameters char.c
-	./make.hfiles Parameters
-	@touch hfiles
-
-.SUFFIXES: .str .h
-.str.h:
-	./make.allocd <$*.str >$*.h
-
-char.c:	char.tab
-	$(TABGEN) -fchar.tab > char.c
-
-next.c:	make.next $(STRSRC)
-	./make.next $(STRSRC) >next.c
-
-macro.h:	make.allocd
-replace.h:	make.allocd
-
-LLfiles: $(LSRC)
-	$(GEN) $(GENOPTIONS) $(LSRC)
-	@touch LLfiles
-
-tokenfile.g:	tokenname.c make.tokfile
-	<tokenname.c ./make.tokfile >tokenfile.g
-
-symbol2str.c:	tokenname.c make.tokcase
-	<tokenname.c ./make.tokcase >symbol2str.c
-
-# Objects needed for 'ncpp'
-OBJ =	$(COBJ) $(LOBJ) $(GOBJ)
-SRC =	$(CSRC) $(LCSRC) $(GSRC)
-
-ncpp:	$(OBJ) Makefile
-	$(CC) $(COPTIONS) $(LDFLAGS) $(OBJ) $(LIBS) -o ncpp 
-	-size ncpp
-
-cfiles: hfiles LLfiles $(GSRC) $(GSTRSRC)
-	@touch cfiles
-
-install: all
-	rm -f $(CEMPP)
-	cp ncpp $(CEMPP)
-	rm -f $(MANDIR)/cpp.ansi.6
-	cp ncpp.6 $(MANDIR)/cpp.ansi.6
-
-cmp:	all
-	-cmp ncpp $(CEMPP)
-	-cmp ncpp.6 $(MANDIR)/cpp.ansi.6
-
-pr: 
-	@pr $(PRFILES)
-
-opr:
-	make pr | opr
-
-tags:	cfiles
-	ctags $(SRC)
-
-depend:	cfiles
-	sed '/^#AUTOAUTO/,$$d' Makefile >Makefile.new
-	echo '#AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO' >>Makefile.new
-	$(EMHOME)/bin/mkdep $(SRC) | \
-		sed 's/\.c:/.o:/' >>Makefile.new
-	mv Makefile Makefile.old
-	mv Makefile.new Makefile
-	
-xref:
-	ctags -x `grep "\.[ch]" Files`|sed "s/).*/)/">Xref
-	
-lint:	cfiles
-	lint -bx $(CDEFS) $(SRC) >lint.out
-
-clean:
-	rm -f $(LCSRC) $(OBJ) $(GENERATED) $(GSRC) $(GHSRC) $(GSTRSRC) ncpp Out
-
-#AUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTOAUTO
-LLlex.o: LLlex.h
-LLlex.o: Lpars.h
-LLlex.o: arith.h
-LLlex.o: bits.h
-LLlex.o: class.h
-LLlex.o: dobits.h
-LLlex.o: file_info.h
-LLlex.o: idf.h
-LLlex.o: idfsize.h
-LLlex.o: input.h
-LLlex.o: inputtype.h
-LLlex.o: macro.h
-LLlex.o: numsize.h
-LLlex.o: strsize.h
-LLmessage.o: LLlex.h
-LLmessage.o: Lpars.h
-LLmessage.o: arith.h
-LLmessage.o: file_info.h
-ch3bin.o: Lpars.h
-ch3bin.o: arith.h
-ch3mon.o: Lpars.h
-ch3mon.o: arith.h
-domacro.o: LLlex.h
-domacro.o: Lpars.h
-domacro.o: arith.h
-domacro.o: bits.h
-domacro.o: botch_free.h
-domacro.o: class.h
-domacro.o: dobits.h
-domacro.o: file_info.h
-domacro.o: idf.h
-domacro.o: idfsize.h
-domacro.o: ifdepth.h
-domacro.o: input.h
-domacro.o: inputtype.h
-domacro.o: macbuf.h
-domacro.o: macro.h
-domacro.o: nparams.h
-domacro.o: parbufsize.h
-domacro.o: replace.h
-domacro.o: textsize.h
-error.o: LLlex.h
-error.o: arith.h
-error.o: errout.h
-error.o: file_info.h
-idf.o: idf.h
-init.o: class.h
-init.o: idf.h
-init.o: macro.h
-input.o: file_info.h
-input.o: input.h
-input.o: inputtype.h
-main.o: arith.h
-main.o: file_info.h
-main.o: idf.h
-main.o: idfsize.h
-main.o: macro.h
-options.o: class.h
-options.o: idf.h
-options.o: idfsize.h
-options.o: macro.h
-preprocess.o: LLlex.h
-preprocess.o: arith.h
-preprocess.o: bits.h
-preprocess.o: class.h
-preprocess.o: dobits.h
-preprocess.o: file_info.h
-preprocess.o: idf.h
-preprocess.o: idfsize.h
-preprocess.o: input.h
-preprocess.o: inputtype.h
-preprocess.o: ln_prefix.h
-preprocess.o: macro.h
-preprocess.o: obufsize.h
-preprocess.o: textsize.h
-replace.o: LLlex.h
-replace.o: arith.h
-replace.o: class.h
-replace.o: file_info.h
-replace.o: idf.h
-replace.o: idfsize.h
-replace.o: input.h
-replace.o: inputtype.h
-replace.o: macbuf.h
-replace.o: macro.h
-replace.o: nparams.h
-replace.o: numsize.h
-replace.o: pathlength.h
-replace.o: replace.h
-replace.o: strsize.h
-skip.o: LLlex.h
-skip.o: arith.h
-skip.o: class.h
-skip.o: file_info.h
-skip.o: input.h
-skip.o: inputtype.h
-tokenname.o: LLlex.h
-tokenname.o: Lpars.h
-tokenname.o: arith.h
-tokenname.o: file_info.h
-tokenname.o: idf.h
-expr.o: Lpars.h
-tokenfile.o: Lpars.h
-expression.o: LLlex.h
-expression.o: Lpars.h
-expression.o: arith.h
-expression.o: file_info.h
-Lpars.o: Lpars.h
-char.o: class.h
-symbol2str.o: Lpars.h

+ 0 - 74
lang/cem/cpp.ansi/nccp.6

@@ -1,74 +0,0 @@
-.TH NCPP 6ACK
-.ad
-.SH NAME
-ncpp \- New C Pre-Processor
-.SH SYNOPSIS
-ncpp [\-options] [ file ]
-.SH DESCRIPTION
-.I Ncpp
-reads a file, expands macros and include
-files, and writes an input file for the C compiler.
-All output is to standard output.
-.br
-The following options are supported.
-.IP -\fBI\fIdirectory\fR
-.br
-add this directory to the list of
-directories searched for #include "..." and #include <...>
-commands.  Note that there is no space between the
-"-I" and the directory string.  More than one -I command
-is permitted.
-.IP -\fBI\fR
-end the list of directories to be searched, and also do not look in
-default places.
-.IP -\fBD\fIname\fR=\fItext\fR
-.br
-define 
-.I name
-as a macro with
-.I text
-as its replacement text.
-.IP -\fBD\fIname\fR
-the same as -\fBD\fIname\fR=1.
-.IP
-.IP -\fBU\fIname\fR
-.br
-undefine the macro name
-.IR name .
-.IP -\fBC\fR
-leave comments in. By default, C-comments are deleted.
-.IP -\fBP\fR
-do not generate line directives
-.IP -\fBM\fIn\fR
-set maximum identifier length to
-.IR n .
-.PP
-The following names are always available unless undefined:
-.RS
-.IP __STDC__
-A decimal constant 1, indicating that this is an ANSI C conforming
-implementation.
-.IP __FILE__
-The input (or #include) file being compiled
-(as a quoted string).
-.IP __LINE__
-The line number being compiled.
-.IP __DATE__
-The date of translation of the source file. This is a string
-literal of the form "\fBMmm dd yyyy\fP".
-.IP __TIME__
-The time of translation of the source file. This is a string
-literal of the form "\fBhh:mm:ss\fP".
-.RE
-.SH BUGS
-The output may contain extra spaces, this prevents unintended
-pasting of tokens.
-.SH "SEE ALSO"
-L. Rosler,
-.I
-Draft Proposed Standard - Programming Language C,
-.R
-ANSI X3J11 Language Subcommittee
-.SH AUTHOR
-Leendert van Doorn
-

+ 0 - 152
lang/cem/ctest/ctstruct/str.pcc.r

@@ -1,152 +0,0 @@
-w1
-	st2.w1_i 506
-	(*st3).w1_i 506
-	st1.w1_i 711
-	st2.w1_i 711
-	es2[2].w1_i 711
-	st2.w1_i 577
-	st2.w1_i -577
-	st1.w1_i 577
-w2
-	s2t2: .w2_i 18000 .w2_d 3.141500
-	s2t3->w2_d 3.141500
-w3
-s3t2.w3_a[ 0] a
-s3t2.w3_a[ 1] b
-s3t2.w3_a[ 2] c
-s3t2.w3_a[ 3] d
-s3t2.w3_a[ 4] e
-s3t2.w3_a[ 5] f
-s3t2.w3_a[ 6] g
-s3t2.w3_a[ 7] h
-s3t2.w3_a[ 8] i
-s3t2.w3_a[ 9] j
-s3t2.w3_a[10] k
-s3t2.w3_a[11] l
-s3t2.w3_a[12] m
-s3t2.w3_a[13] n
-s3t2.w3_a[14] o
-s3t2.w3_a[15] p
-s3t2.w3_a[16] q
-s3t2.w3_a[17] r
-s3t2.w3_a[18] s
-s3t2.w3_a[19] t
-s3t2.w3_a[20] u
-s3t2.w3_a[21] v
-s3t2.w3_a[22] w
-s3t2.w3_a[23] x
-s3t2.w3_a[24] y
-s3t2.w3_a[25] z
-s3t2.w3_x 1.000000
-s3t1.w3_a[ 0] A
-s3t1.w3_a[ 1] B
-s3t1.w3_a[ 2] C
-s3t1.w3_a[ 3] D
-s3t1.w3_a[ 4] E
-s3t1.w3_a[ 5] F
-s3t1.w3_a[ 6] G
-s3t1.w3_a[ 7] H
-s3t1.w3_a[ 8] I
-s3t1.w3_a[ 9] J
-s3t1.w3_a[10] K
-s3t1.w3_a[11] L
-s3t1.w3_a[12] M
-s3t1.w3_a[13] N
-s3t1.w3_a[14] O
-s3t1.w3_a[15] P
-s3t1.w3_a[16] Q
-s3t1.w3_a[17] R
-s3t1.w3_a[18] S
-s3t1.w3_a[19] T
-s3t1.w3_a[20] U
-s3t1.w3_a[21] V
-s3t1.w3_a[22] W
-s3t1.w3_a[23] X
-s3t1.w3_a[24] Y
-s3t1.w3_a[25] Z
-s3t1.w3_x 0.318319
-structure parameters
-before -1
-str.w3_a[ 0]	1
-str.w3_a[ 1]	2
-str.w3_a[ 2]	3
-str.w3_a[ 3]	4
-str.w3_a[ 4]	5
-str.w3_a[ 5]	6
-str.w3_a[ 6]	7
-str.w3_a[ 7]	8
-str.w3_a[ 8]	9
-str.w3_a[ 9]	10
-str.w3_a[10]	11
-str.w3_a[11]	12
-str.w3_a[12]	13
-str.w3_a[13]	14
-str.w3_a[14]	15
-str.w3_a[15]	16
-str.w3_a[16]	17
-str.w3_a[17]	18
-str.w3_a[18]	19
-str.w3_a[19]	20
-str.w3_a[20]	21
-str.w3_a[21]	22
-str.w3_a[22]	23
-str.w3_a[23]	24
-str.w3_a[24]	25
-str.w3_a[25]	26
-str.w3_x 2.810000
-after 1000
-
-Stucture valued functions
-myp.w3_a:
-	 0	97
-	 1	96
-	 2	95
-	 3	94
-	 4	93
-	 5	92
-	 6	91
-	 7	90
-	 8	89
-	 9	88
-	10	87
-	11	86
-	12	85
-	13	84
-	14	83
-	15	82
-	16	81
-	17	80
-	18	79
-	19	78
-	20	77
-	21	76
-	22	75
-	23	74
-	24	73
-	25	72
-	 0	99
-	 1	100
-	 2	101
-	 3	102
-	 4	103
-	 5	104
-	 6	105
-	 7	106
-	 8	107
-	 9	108
-	10	109
-	11	110
-	12	111
-	13	112
-	14	113
-	15	114
-	16	115
-	17	116
-	18	117
-	19	118
-	20	119
-	21	120
-	22	121
-	23	122
-	24	123
-	25	124

+ 0 - 53
lang/cem/ctest/makefile

@@ -1,53 +0,0 @@
-.SILENT:
-CEM=acc
-head:
-	echo use run
-
-diffs:	$P.cc.r $P.cem.r
-	echo two compiler diff
-	-diff $P.*.r
-
-diffs3:  $P.pcc.r $P.cc.r $P.cem.r
-	echo three compiler diff
-	-diff3 $P.*.r | tee diffs
-egen:   $P.e
-	echo comparing $P.e
-	-if test -f $P.e.g ; then diff -h $P.e $P.e.g ; else echo creating $P.e.g ; cp $P.e $P.e.g ; fi
-	rm -f $P.e
-$P.e:   $P.c
-	$(CEM) -c.e $P.c
-$P.pcc.r: $P.pcc
-	echo running $P.pcc
-	-$P.pcc >$P.pcc.r
-	rm -f $P.pcc
-$P.cc.r:        $P.cc
-	echo running $P.cc
-	-$P.cc >$P.cc.r
-	rm -f $P.cc
-$P.cem.r: $P.cem
-	echo running $P.cem
-	-$P.cem >$P.cem.r
-	rm -f $P.cem
-$P.pcc: /tmp
-	echo pcc $P.c
-	pcc -o $P.pcc $P.c
-$P.cc: /tmp
-	echo cc $P.c
-	cc -o $P.cc $P.c
-$P.cem: /tmp
-	echo $(CEM) $P.c
-	$(CEM) -o $P.cem  $P.c
-gen:    $P.cem.r
-	echo comparing $P
-	-if test -f $P.cem.g ; then diff -h $P.cem.r $P.cem.g ; else echo creating $P.cem.g ; cp $P.cem.r $P.cem.g ; fi
-
-install cmp:
-
-pr:
-	@pr `pwd`/$P.c `pwd`/$P.cem.g
-
-opr:
-	make pr | opr
-
-clean:
-	-rm -f $P.[kmsoe] $P.*.r core a.out *.old em_last em_runinf e.out

+ 0 - 54
lang/cem/ctest/makefile.i86

@@ -1,54 +0,0 @@
-.SILENT:
-CEM=i86 -DNOFLOAT
-head:
-	echo use run
-
-diffs:	$P.cc.r $P.cem.r
-	echo two compiler diff
-	-diff $P.*.r
-
-diffs3:  $P.pcc.r $P.cc.r $P.cem.r
-	echo three compiler diff
-	-diff3 $P.*.r | tee diffs
-egen:   $P.e
-	echo comparing $P.e
-	-if test -f $P.e.g ; then diff -h $P.e $P.e.g ; else echo creating $P.e.g ; cp $P.e $P.e.g ; fi
-	rm -f $P.e
-$P.e:   $P.c $(CEM)
-	$(CEM) -c.e $P.c
-$P.pcc.r: $P.pcc
-	echo running $P.pcc
-	-$P.pcc >$P.pcc.r
-	rm -f $P.pcc
-$P.cc.r:        $P.cc
-	echo running $P.cc
-	-$P.cc >$P.cc.r
-	rm -f $P.cc
-$P.cem.r: $P.cem
-	echo running $P.cem
-	idl I7 $P.cem
-	-talk I7 >$P.cem.r
-	rm -f $P.cem
-$P.pcc: $P.c /usr/lib/ccom
-	echo pcc $P.c
-	pcc -o $P.pcc $P.c
-$P.cc: $P.c /lib/c0 /lib/c1
-	echo cc $P.c
-	cc -o $P.cc $P.c
-$P.cem: $P.c
-	echo $(CEM) $P.c
-	$(CEM) -o $P.cem  $P.c
-gen:    $P.cem.r
-	echo comparing $P
-	-if test -f $P.cem.g ; then diff -h $P.cem.r $P.cem.g ; else echo creating $P.cem.g ; cp $P.cem.r $P.cem.g ; fi
-
-install cmp:
-
-pr:
-	@pr `pwd`/$P.c `pwd`/$P.cem.g
-
-opr:
-	make pr | opr
-
-clean:
-	-rm -f $P.[kmsoe] $P.*.r core a.out *.old

+ 0 - 53
lang/cem/ctest/makefile.int

@@ -1,53 +0,0 @@
-.SILENT:
-CEM=int -O
-head:
-	echo use run
-
-diffs:	$P.cc.r $P.cem.r
-	echo two compiler diff
-	-diff $P.*.r
-
-diffs3:  $P.pcc.r $P.cc.r $P.cem.r
-	echo three compiler diff
-	-diff3 $P.*.r | tee diffs
-egen:   $P.e
-	echo comparing $P.e
-	-if test -f $P.e.g ; then diff -h $P.e $P.e.g ; else echo creating $P.e.g ; cp $P.e $P.e.g ; fi
-	rm -f $P.e
-$P.e:   $P.c $(CEM)
-	$(CEM) -c.e $P.c
-$P.pcc.r: $P.pcc
-	echo running $P.pcc
-	-$P.pcc >$P.pcc.r
-	rm -f $P.pcc
-$P.cc.r:        $P.cc
-	echo running $P.cc
-	-$P.cc >$P.cc.r
-	rm -f $P.cc
-$P.cem.r: $P.cem
-	echo running $P.cem
-	-/usr/evert/compile/a.out $P.cem >$P.cem.r
-	rm -f $P.cem
-$P.pcc: $P.c /usr/lib/ccom
-	echo pcc $P.c
-	pcc -o $P.pcc $P.c
-$P.cc: $P.c /lib/c0 /lib/c1
-	echo cc $P.c
-	cc -o $P.cc $P.c
-$P.cem: $P.c
-	echo $(CEM) $P.c
-	$(CEM) -o $P.cem  $P.c
-gen:    $P.cem.r
-	echo comparing $P
-	-if test -f $P.cem.g ; then diff -h $P.cem.r $P.cem.g ; else echo creating $P.cem.g ; cp $P.cem.r $P.cem.g ; fi
-
-install cmp:
-
-pr:
-	@pr `pwd`/$P.c `pwd`/$P.cem.g
-
-opr:
-	make pr | opr
-
-clean:
-	-rm -f $P.[kmsoe] $P.*.r core a.out *.old

+ 0 - 174
lang/cem/ctest/out.std

@@ -1,174 +0,0 @@
-Tue May 22 15:12:22 MDT 1984
-***** ctconv
-acc conv.c
-conv.c
-"conv.c", line 41: warning: Overflow in constant expression
-running conv.cem
-comparing conv
-***** ctdecl
-acc decl.c
-decl.c
-running decl.cem
-comparing decl
-***** ctdivers
-acc ops.c
-ops.c
-running ops.cem
-comparing ops
-***** cterr
-acc bugs.c
-bugs.c
-"bugs.c", line 92: warning: Overflow in constant expression
-running bugs.cem
-comparing bugs
-9,$c9,$
-< compl_ind
-< END
----
-> END
-***** ctest1
-acc test.c
-test.c
-running test.cem
-comparing test
-***** ctest2
-acc t7.c
-t7.c
-"t7.c", line 161: warning: statement not reached
-"t7.c", line 178: warning: statement not reached
-"t7.c", line 182: warning: statement not reached
-"t7.c", line 186: warning: statement not reached
-"t7.c", line 190: warning: statement not reached
-"t7.c", line 194: warning: statement not reached
-"t7.c", line 198: warning: statement not reached
-"t7.c", line 205: warning: statement not reached
-"t7.c", line 207: warning: statement not reached
-"t7.c", line 211: warning: statement not reached
-"t7.c", line 213: warning: statement not reached
-"t7.c", line 287: warning: statement not reached
-"t7.c", line 294: warning: statement not reached
-"t7.c", line 300: warning: statement not reached
-"t7.c", line 307: warning: statement not reached
-"t7.c", line 343: warning: statement not reached
-"t7.c", line 344: warning: statement not reached
-"t7.c", line 345: warning: statement not reached
-"t7.c", line 346: warning: statement not reached
-"t7.c", line 348: warning: statement not reached
-"t7.c", line 452: warning: statement not reached
-"t7.c", line 561: warning: statement not reached
-"t7.c", line 589: warning: statement not reached
-running t7.cem
-comparing t7
-***** ctest3
-acc test2.c
-test2.c
-running test2.cem
-comparing test2
-***** ctest5
-acc test1.c
-test1.c
-"test1.c", line 101: warning: Illegal shift count in constant expression
-"test1.c", line 370: warning: illegal pointer combination
-"test1.c", line 371: warning: illegal pointer combination
-"test1.c", line 372: warning: illegal pointer combination
-"test1.c", line 384: warning: illegal pointer combination
-"test1.c", line 407: warning: illegal pointer combination
-"test1.c", line 408: warning: illegal pointer combination
-"test1.c", line 409: warning: illegal pointer combination
-"test1.c", line 421: warning: illegal pointer combination
-running test1.cem
-comparing test1
-***** ctgen
-`bf.c' is up to date.
-acc bf.c
-bf.c
-running bf.cem
-comparing bf
-`cel.c' is up to date.
-acc cel.c
-cel.c
-running cel.cem
-comparing cel
-`clu.c' is up to date.
-acc clu.c
-clu.c
-"clu.c", line 60: warning: Overflow in constant expression
-"clu.c", line 66: warning: Overflow in constant expression
-running clu.cem
-comparing clu
-28c28
-< x *= 40000  0
----
-> x *= 40000  6784
-65c65
-< y = ( x *= 40000  ) 0 0
----
-> y = ( x *= 40000  ) 6784 6784
-102c102
-< no if ( x *= 40000  ) yes() ; else no() 0
----
-> yes if ( x *= 40000  ) yes() ; else no() 6784
-`ec.c' is up to date.
-acc ec.c
-ec.c
-"ec.c", line 58: warning: Overflow in constant expression
-"ec.c", line 64: warning: Overflow in constant expression
-running ec.cem
-comparing ec
-`ef.c' is up to date.
-acc ef.c
-ef.c
-running ef.cem
-comparing ef
-`ei.c' is up to date.
-acc ei.c
-ei.c
-"ei.c", line 22: warning: Overflow in constant expression
-"ei.c", line 65: warning: Overflow in constant expression
-"ei.c", line 108: warning: Overflow in constant expression
-running ei.cem
-comparing ei
-`el.c' is up to date.
-acc el.c
-el.c
-running el.cem
-comparing el
-`eu.c' is up to date.
-acc eu.c
-eu.c
-"eu.c", line 58: warning: Overflow in constant expression
-"eu.c", line 64: warning: Overflow in constant expression
-running eu.cem
-comparing eu
-28c28
-< x *= 40000  0
----
-> x *= 40000  6784
-65c65
-< y = ( x *= 40000  ) 0 0
----
-> y = ( x *= 40000  ) 6784 6784
-102c102
-< no if ( x *= 40000  ) yes() ; else no() 0
----
-> yes if ( x *= 40000  ) yes() ; else no() 6784
-`id.c' is up to date.
-acc id.c
-id.c
-running id.cem
-comparing id
-`lc.c' is up to date.
-acc lc.c
-lc.c
-"lc.c", line 60: warning: Overflow in constant expression
-"lc.c", line 66: warning: Overflow in constant expression
-running lc.cem
-comparing lc
-`ld.c' is up to date.
-acc ld.c
-ld.c
-running ld.cem
-comparing ld
-`lf.c' is up to date.
-acc lf.c
-lf.c

+ 0 - 66
lang/cem/libcc.ansi/MakeArch

@@ -1,66 +0,0 @@
-: $Header$
-: This script makes an archive. The only option it knows is -o, which
-: creates a library.
-
-rm -f OLIST
-
-case $# in
-	0)
-		AR=tar
-		OLIB=libsrc
-		echo 'cf libsrc' > OLIST
-		;;
-	1)
-		if [ "X$1" != "X-o" ]
-		then
-			echo $0: unrecognised option, I only know -o >&2
-			exit 1
-		fi
-		AR=$ASAR
-		echo "rv $OLIB" > OLIST
-		;;
-	*)
-		echo $0: too many arguments >&2
-		exit 1
-		;;
-esac
-
-if [ "X$AR" = "X" ]
-then
-echo EEK -- internal error, no archiver >&2
-exit 1
-fi
-
-if [ $AR = tar ]
-then
-	echo LIST >> OLIST
-	echo MakeArch >> OLIST
-	echo Makefile >> OLIST
-	echo make.proto >> OLIST
-	echo head_ac.e >> OLIST
-fi
-
-DIRS=`cat LIST`
-
-for i in $DIRS
-do
-	cd $i
-	if make "MACH=$MACH" "MACHFL=$MACHFL" "SUF=$SUF" $AR -f ../Makefile
-	then
-		cd ..
-		if [ $AR = tar ]
-		then
-			echo $i/Makefile >> OLIST
-			echo $i/LIST >> OLIST
-		fi
-		for j in `cat $i/OLIST`
-		do
-			echo $i/$j >> OLIST
-		done
-	else
-		exit 1
-	fi
-done
-
-$AR `cat OLIST`
-${RANLIB-:} $OLIB

+ 0 - 50
lang/cem/libcc.ansi/Makefile

@@ -1,50 +0,0 @@
-# $Header$
-# This Makefile is used for building the source archive as well as the
-# actual library.
-
-EMHOME=../../..
-MACH=acc
-MACHFL=-O -L -Rcem=$(EMHOME)/lib/em_cemcom.ansi -I../headers $(DEFS)
-PREF=ac
-SUB=
-ASAR=arch
-HEADSRC=$(HOME)
-OLIB=tail_$(PREF)$(SUB)
-
-install:
-	MakeArch
-	-mkdir $(EMHOME)/include/tail_ac
-	( cd headers; tar cf - `cat LIST` ) | ( cd $(EMHOME)/include/tail_ac ; tar xf - )
-
-clean:
-	rm -f OLIST */OLIST
-	(cd ctype; make clean)
-	(cd stdlib; make clean)
-
-headcp:	head
-	../../install head_$(PREF).$(SUF) head_$(PREF)
-	rm -f head_$(PREF).$(SUF)
-
-head:	head_$(PREF).e
-	make -r -f make.proto "CC=$(MACH)" "CFLAGS=-I$(EMHOME)/h $(MACHFL)" head_$(PREF).$(SUF)
-
-tail:	lib
-
-tailcp: tail
-	../../install $(OLIB)
-	rm -f $(OLIB)
-
-lib:
-	MACH=$(MACH) MACHFL="$(MACHFL) -LIB" ASAR=$(ASAR) SUF=$(SUF) \
-		OLIB=$(OLIB) MakeArch -o
-
-ar aal arch:
-	@rm -f OLIST
-	@sed 's/\.[ce]/.$(SUF)/' < LIST | sed '/\.h/D' > OLIST
-	make -r -f ../make.proto "CC=$(MACH)" "CFLAGS=$(MACHFL)" `cat OLIST`
-
-# arch doesn't work recursively, tar does, which is what we actually want
-tar:
-	@rm -f OLIST
-	make `cat LIST`
-	cp LIST OLIST

Some files were not shown because too many files changed in this diff