1 /* $Id: cim.h,v 1.15 1996/03/27 16:42:29 cim Exp $ */
2 
3 /* Copyright (C) 1994 Sverre Hvammen Johansen, Stein Krogdahl and Terje Mj�s
4  * Department of Informatics, University of Oslo.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; version 2.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
18 
19 /******************************************************************************
20                                              Definition of runtime-constants */
21 
22 #define __FALSE 0
23 #define __TRUE 1
24 #define __NULL 0L
25 #define __EOF (-1)
26 
27 /* Executing must have the value 0 since it is not set */
28 #define __EXECUTING 0
29 #define __DETACHED 1
30 #define __TERMINATED 2
31 #define __RESUMED 3
32 #define __CONSTANT 1
33 
34 #define __ACTS 1
35 #define __TEXT 3
36 #define __ARRAY 5
37 #define __THUNK 7
38 
39 #define __FROM_START 0
40 #define __CURRENT_POS 1
41 #define __AT_END 2
42 
43 #define __ADDRESS_NOTHUNK 0
44 #define __ADDRESS_THUNK 1
45 #define __VALUE_NOTHUNK 2
46 #define __VALUE_THUNK 3
47 
48 #define __NOTEST 0
49 #define __WRITETEST 1
50 #define __READTEST 2
51 #define __READWRITETEST 3
52 
53 #define __NOCONV 0
54 #define __INTREAL 1
55 #define __REALINT 2
56 #define __REALINTREAL 3
57 
58 #define __RTPUTTEXTLENGTH 150
59 #define __RTPUTTEXTFORMATLENGTH 10
60 #define __RTPUTMAXN 100
61 
62 /* Definition of kind */
63 #define __KNOKD   'N'
64 #define __KSIMPLE 'S'
65 #define __KARRAY  'A'
66 #define __KPROC   'P'
67 #define __KCLASS  'C'
68 #define __KBLOKK  'B'
69 #define __KPRBLK  'R'
70 #define __KFOR    'F'
71 #define __KINSP   'I'
72 #define __KCON    'O'
73 #define __KERROR  'E'
74 
75 /* Definition of type */
76 #define __TNOTY   'N'
77 #define __TINTG   'I'
78 #define __TSHORT  'I'		/* S */
79 #define __TREAL   'R'
80 #define __TLONG   'R'		/* D */
81 #define __TBOOL   'B'
82 #define __TCHAR   'C'
83 #define __TLABEL  'L'
84 #define __TTEXT   'T'
85 #define __TREF    'P'
86 #define __TERROR  'E'
87 
88 #define __NOSHARED  0
89 #define __SHARED    1
90 
91 #define __NOAPPEND  0
92 #define __APPEND    1
93 
94 #define __NOCREATE  0
95 #define __CREATE    1
96 #define __ANYCREATE 2
97 
98 #define __READWRITE 0
99 #define __WRITEONLY 1
100 #define __READONLY  2
101 
102 #define __NOREWIND  0
103 #define __REWIND    1
104 
105 #define __NOPURGE   0
106 #define __PURGE     1
107 
108 #define __READ 0
109 #define __WRITE 1
110 #define __SEEK 2
111 
112 #define __BYTESIZE 8
113 
114 /******************************************************************************
115                                      Structures, unions and type definitions */
116 
117 typedef struct
118   {
119     short ent;
120     void (*ment) ();
121   }
122 __progadr;
123 
124 typedef union
125   {
126     long i;
127     int c;
128     double f;
129     short s;
130     long l;
131     __progadr adr;
132     double d;
133   }
134 __valuetype;
135 
136 /* A prototype-object */
137 
138 typedef struct __ptys __ptyp,
139  *__pty;
140 struct __ptys
141   {
142     char kind,
143       plev;
144     short blev,
145       size;
146     __progadr adr;
147     short fornest,
148       connest;
149     short naref,
150       navirt;
151     short *ref;
152     __pty *virt;
153     __pty *pref;
154     __progadr *virtlab;
155   };
156 
157 
158 /* Head of a data-object */
159 
160 typedef struct __dhs *__dhp;
161 typedef struct __dhs
162   {
163     __pty pp;
164     __dhp gl,
165       dl;
166     char pm,
167       dt;
168     __progadr ex;
169     __dhp sl;
170   }
171 __dh;
172 
173 /* Var parameter of type boolean, char, or text */
174 typedef struct
175   {
176     __dhp bp;			/* Pointer to block to akt.par. */
177     int ofs;			/* Relativ adress of akt.par   */
178   }
179 __varpar;
180 
181 /* Aritmetic var parameter */
182 typedef struct
183   {
184     __dhp bp;			/* Pointer to block to akt.par. */
185     int ofs;			/* Relativ adress of akt.par   */
186     char conv;			/* What kind of converting (integer, real) */
187   }
188 __aritvarpar;
189 
190 /* Ref var parameter */
191 typedef struct
192   {
193     __dhp bp;			/* Pointer to block to akt.par. */
194     int ofs;			/* Relativ adress of akt.par   */
195     __pty q;			/* Pointer to prototype to strongest
196 				 * qualification  on the access path */
197     char conv;			/* When in test must be done */
198   }
199 __refvarpar;
200 
201 
202 /* Formal prosedure parameter */
203 typedef struct
204   {
205     __pty pp;
206     __dhp psl;
207   }
208 __forprocpar;
209 
210 typedef struct
211   {
212     __pty pp;
213     __dhp psl;
214     char conv;
215   }
216 __aritprocpar;
217 
218 typedef struct
219   {
220     __pty pp;
221     __dhp psl;
222     char conv;
223     __pty q;
224   }
225 __refprocpar;
226 
227 typedef union
228   {
229     __valuetype v;
230     __dhp r;
231   }
232 __val_or_ref;
233 
234 /* Head of a stack-object */
235 typedef struct
236   {
237     __pty pp;
238     __dhp gl,
239       dl;
240     char pm,
241       dt,
242       at;			/* pm="ant ref", at="ant text", and dt="ant
243 				 * value" */
244     short size;
245   }
246 __sh, *__shp;
247 
248 /* A stack-object */
249 typedef struct
250   {
251     __sh h;
252     __val_or_ref s[1];
253   }
254 __stk, *__stkp;
255 
256 /* Head of a tekst-object */
257 typedef struct
258   {
259 
260     __pty pp;
261     __dhp gl;
262     char konstant;
263     short size;
264   }
265 __th, *__thp;
266 
267 /* Tekst-object */
268 typedef struct
269   {
270     __th h;
271     char string[1];
272   }
273 __tobj, *__textref;
274 
275 /* Tekst-variable */
276 typedef struct
277   {
278     __textref obj;
279     unsigned short length,
280       pos,
281       start;
282   }
283 __txt, *__txtvp;
284 
285 /* Notext */
286 typedef struct
287   {
288     __txt tvar;
289   }
290 __notext;
291 
292 /* Head of an array-object */
293 typedef struct
294   {
295     __pty pp;
296     __dhp gl;
297     int size;
298     short dim;
299     char type;
300   }
301 __ah, *__ahp;
302 
303 /* Upper and lower limit for each dimension */
304 typedef struct
305   {
306     int low,
307       size;
308   }
309 __arrlimit;
310 
311 /* Head of an array-object */
312 typedef struct
313   {
314     __ah h;
315     __arrlimit limits[1];
316   }
317  *__arrp;
318 
319 /* Name transmission */
320 
321 typedef union
322   {
323     int ofs;			/* Offset adress for a variable, bp is base
324 				 * adress   */
325     int i;			/* Valuie for a constant aktual name par */
326     double f;
327     char c;
328     short s;
329     long l;
330     double d;
331     __dhp r;
332   }
333 __ofsorvalue;
334 
335 typedef struct
336   {
337     __dh h;
338     char conv;			/* What kind of conversions have to be
339 				 * performed      */
340     __pty q;			/* Strongest qualification on the access
341 				 * path.                  */
342     char ftype;			/* Formal type of an aritmetick name. */
343     char writeaccess;		/* TRUE or FALSE. For thunks that is
344 				 * computing adresses. */
345     /* Should the thunk return the adress or an value.        */
346   }
347 __thunk, *__thunkp;
348 
349 typedef struct
350   {
351     __dhp sl;
352     __progadr adr;
353     __dhp bp;
354     __ofsorvalue v;
355     char namekind;
356   }
357 __simplenamepar;
358 
359 typedef struct
360   {
361     __dhp sl;
362     __progadr adr;
363     __dhp bp;
364     __ofsorvalue v;
365     char namekind;
366   }
367 __charboolnamepar;
368 
369 typedef struct
370   {
371     __dhp sl;
372     __progadr adr;
373     __dhp bp;
374     __ofsorvalue v;
375     char namekind;
376     char conv;
377   }
378 __aritnamepar;
379 
380 typedef struct
381   {
382     __dhp sl;
383     __progadr adr;
384     __dhp bp;
385     __ofsorvalue v;
386     char namekind;
387     __pty q;
388     char conv;
389   }
390 __refnamepar;
391 
392 typedef struct
393   {
394     __dhp sl;
395     __progadr adr;
396     __dhp bp;
397     __ofsorvalue v;
398     char namekind;
399     __txtvp tp;
400   }
401 __textnamepar;
402 
403 typedef struct
404   {
405     __dhp sl;
406     __progadr adr;
407     __pty pp;			/* Pointer to the procedures prototype    */
408     __dhp psl;			/* Procedures static environment          */
409     char namekind;
410   }
411 __procname;
412 
413 typedef struct
414   {
415     __dhp sl;
416     __progadr adr;
417     __pty pp;			/* Pointer to the procedures prototype    */
418     __dhp psl;			/* Procedures static environment          */
419     char namekind;
420   }
421 __simpleprocnamepar;
422 
423 typedef struct
424   {
425     __dhp sl;
426     __progadr adr;
427     __pty pp;			/* Pointer to the procedures prototype    */
428     __dhp psl;			/* Procedures static environment          */
429     char namekind;
430     char conv;
431   }
432 __aritprocnamepar;
433 
434 typedef struct
435   {
436     __dhp sl;
437     __progadr adr;
438     __pty pp;			/* Pointer to the procedures prototype    */
439     __dhp psl;			/* Procedures static environment          */
440     char namekind;
441     char conv;
442     __pty q;
443   }
444 __refprocnamepar;
445 
446 typedef struct
447   {
448     __dhp sl;
449     __progadr adr;
450     __dhp ob;
451     int swv;
452     char namekind;
453   }
454 __labelnamepar;
455 
456 /* Label var and standard transmitted parameter or
457  * a name, var or standard transmitted switch parameter */
458 
459 typedef struct			/* No thunk for switch parameter by name */
460   {
461     __progadr adr;
462     __dhp ob;
463   }
464 __labelswitchpar;
465 
466 typedef struct
467   {
468     __dhp sl;
469     __progadr adr;
470     __arrp ap;
471     char namekind;
472   }
473 __arraynamepar;
474 
475 typedef struct
476   {
477     char *fil;
478     long line,
479       fromline;
480   }
481 __map;
482 
483 /******************************************************************************
484                                                           External variables */
485 
486 /* Inline error messages */
487 extern char *__errnone,
488  *__errlim,
489  *__errarr,
490  *__errswitch,
491  *__errqual,
492  *__errvirt,
493  *__errbound;
494 
495 /* Program counter */
496 extern __progadr __goto,
497   __return;
498 extern long __vreturn;
499 extern void __main_modul ();
500 
501 /* switch */
502 extern int __swv;
503 
504 /* Local-block, parameter-block, and static environm,ent to rcp(p)() */
505 extern __dhp __lb,
506   __pb;
507 extern __dhp __sl;		/* Can't be a parameter since GBC must update
508 				 * it */
509 
510 /* Garbage collections statistics */
511 extern int __gc;
512 extern double __gbctime;
513 
514 /* Stack or return value for evaluation of expressions */
515 						/* 900526 (1)   */
516 extern __valuetype __v[],
517   __ev;
518 extern __dhp __r[],
519   __er;
520 extern __txt __t[],
521   __et,__t1,__t2;
522 
523 extern long __as;		/* Antall p} h.h.v ref og text stakken */
524 
525 /* Pointer to current array-object */
526 extern __arrp __ap;
527 
528 /* (indeks - lower bound) for the actual dimensions to an array object */
529 extern int __h[];
530 
531 extern char *__progname;
532 
533 extern __pty __pp;		/* Prototyp pointer */
534 extern __dhp __bp;		/* In test */
535 extern __refvarpar *__vrp;	/* In test for var par */
536 extern __aritvarpar *__vvp;	/* Convertion between real and integer */
537 extern __refnamepar *__nrp;	/* In test for name par */
538 extern __aritnamepar *__nvp;	/* Convertion between real and integer for
539 				 * name */
540 extern long __rputlen;
541 extern char __conv;
542 extern char __currentlowten,
543   __currentdecimalmark;
544 
545 extern __notext __tk0;		/* tk0 == notext */
546 extern char __ctab[3][4];
547 
548 extern long __poolsize,
549   __maxsize;
550 extern char __dynsize,
551   __chpoolsize;
552 
553 extern char *__ctext;
554 
555 extern char *__nullstr;
556 
557 extern char *__progname;
558 extern long __argc;
559 extern long __argv;
560 extern long __rargc ();
561 extern long __rargv ();
562 
563 extern __map *__curent_map;
564 
565 extern long __cline;
566 
567 extern long __lines_per_page;
568 
569 extern __dhp __sto,
570   __max,
571   __min,
572   __fri;
573 extern __dh __niu,
574   __nil;
575 
576 extern __dhp __p;
577 
578 /******************************************************************************
579             External declaration of run-time routines that do not return int */
580 
581 /* RTCK.C */
582 extern __dhp __rca ();
583 extern __dhp __ralloc ();
584 extern char __rin ();
585 extern char __rrin ();
586 extern char __ris ();
587 extern char __rgetav ();
588 extern char __rgetcbv ();
589 extern char __rgetrv ();
590 extern char __rgettv ();
591 extern char __rgetproc ();
592 extern char __rgetlab ();
593 extern char __rgeta ();
594 extern char __rgetsa ();
595 
596 /* RTBASICIO.C */
597 extern __dhp __rsysin ();
598 extern __dhp __rsysout ();
599 extern __dhp __rsyserr ();
600 
601 /* ENVIRONMENT.C */
602 
603 /* Basic operations */
604 extern double __rabsr ();
605 extern long __rabsi ();
606 extern long __rsigndi ();
607 extern long __rsigndr ();
608 extern long __rmod ();
609 extern long __rrem ();
610 extern long __rentier ();
611 extern long __rintrea ();
612 extern double __raddepsilon ();
613 extern double __rsubepsilon ();
614 extern long __rlowerbound ();
615 extern long __rupperbound ();
616 extern long __ridiv0();
617 extern double __rrdiv0();
618 
619 /* Power functions */
620 extern long __rpowii ();
621 extern double __rpowri ();
622 extern double __rpow ();
623 
624 /* Text utilities */
625 extern char __rchar ();
626 extern char __risochar ();
627 extern long __rrank ();
628 extern long __risorank ();
629 extern char __rdigit ();
630 extern char __rletter ();
631 extern char __rlowten ();
632 extern char __rdecimalmark ();
633 extern __txtvp __rupcase ();
634 extern __txtvp __rlowcase ();
635 
636 /* Mathematical functions */
637 extern double __rsqrt ();
638 extern double __rsin ();
639 extern double __rcos ();
640 extern double __rtan ();
641 extern double __rarcsin ();
642 extern double __rarccos ();
643 extern double __rarctan ();
644 extern double __rarctan2 ();
645 extern double __rsinh ();
646 extern double __rcosh ();
647 extern double __rtanh ();
648 extern double __rln ();
649 extern double __rlog10 ();
650 extern double __rexp ();
651 extern double __rcotan ();
652 
653 /* Extremum functions */
654 extern void __rmint ();
655 extern char __rminc ();
656 extern long __rmini ();
657 extern double __rminr ();
658 extern void __rmaxt ();
659 extern char __rmaxc ();
660 extern long __rmaxi ();
661 extern double __rmaxr ();
662 
663 /* Environmental enquiries */
664 extern __txtvp __rsimulaid();
665 
666 /* Random drawing */
667 extern char __rdraw ();
668 extern long __rrandint ();
669 extern double __runiform ();
670 extern double __rnormal ();
671 extern double __rnegexp ();
672 extern long __rpoisson ();
673 extern double __rerlang ();
674 extern long __rdiscrete ();
675 extern double __rlinear ();
676 extern long __rhistd ();
677 
678 /* Calendar and timing utilities */
679 extern __txtvp __rdatetime ();
680 extern double __rcputime ();
681 extern double __rclocktime ();
682 
683 /* RTTEXT.C */
684 extern char __rtconstant ();
685 extern long __rtstart ();
686 extern long __rtlength ();
687 extern char __rtmore ();
688 extern char __rtgetchar ();
689 extern double __rtgetreal ();
690 extern long __rtgetfrac ();
691 extern long __rtgetint ();
692 extern long __rtpos ();
693 extern __txtvp __rtmain ();
694 extern __txtvp __rtputchar ();
695 extern __txtvp __rtputint ();
696 extern __txtvp __rtputfix ();
697 extern __txtvp __rtputreal ();
698 extern __txtvp __rtputfrac ();
699 extern __txtvp __rtsetpos ();
700 extern __txtvp __rtsub ();
701 extern __txtvp __rtstrip ();
702 extern __txtvp __rcopy ();
703 extern __txtvp __rblanks ();
704 extern __txtvp __rconc ();
705 extern __txtvp __rtextvalassign ();
706 extern __txtvp __rtextassign ();
707 extern char __reqrtext ();
708 extern char __reqrtext ();
709 extern char __reqtext ();
710 extern char __rlttext ();
711 extern char __rletext ();
712 
713 /* FILESYSTEM.C */
714 
715 extern long __rfsize ();
716 
717 /* Class file */
718 extern __txtvp __rfilename ();
719 extern char __risopen ();
720 extern char __rsetaccess ();
721 
722 /* File class imagefile */
723 extern long __rpos ();
724 extern char __rmore ();
725 extern long __rlength ();
726 extern __dhp __rsetpos ();
727 
728 /* Imagefile class infile */
729 extern char __riendfile ();
730 extern char __riopen ();
731 extern char __riclose ();
732 extern char __riinrecord ();
733 extern char __riinchar ();
734 extern char __rilastitem ();
735 extern long __riinint ();
736 extern double __riinreal ();
737 extern long __riinfrac ();
738 extern __txtvp __riintext ();
739 extern __dhp __riinimage ();
740 
741 /* Imagefile class outfile */
742 extern char __roopen ();
743 extern char __roclose ();
744 extern __dhp __rooutimage ();
745 extern __dhp __rooutrecord ();
746 extern __dhp __robreakoutimage ();
747 extern __dhp __rooutchar ();
748 extern __dhp __roouttext ();
749 extern __dhp __rooutint ();
750 extern __dhp __rooutfix ();
751 extern __dhp __rooutreal ();
752 extern __dhp __rooutfrac ();
753 
754 /* Outfile class printfile */
755 extern long __rpline ();
756 extern long __rppage ();
757 extern char __rpopen ();
758 extern char __rpclose ();
759 extern long __rplinesperpage ();
760 extern __dhp __rpspacing ();
761 extern __dhp __rpeject ();
762 extern __dhp __rpoutimage ();
763 extern __dhp __rpoutrecord ();
764 
765 /* Imagefile class directfile */
766 extern long __rdlocation ();
767 extern char __rdendfile ();
768 extern char __rdlocked ();
769 extern char __rdcheckpoint ();
770 extern char __rdunlock ();
771 extern long __rdlock ();
772 extern char __rdopen ();
773 extern char __rdclose ();
774 extern long __rdlastloc ();
775 extern long __rdmaxloc ();
776 extern char __rddeleteimage ();
777 extern __dhp __rdlocate ();
778 extern __dhp __rdoutimage ();
779 extern __dhp __rdinimage ();
780 
781 /* File class bytefile */
782 
783 extern long __rbytesize ();
784 
785 /* Bytefile class inbytefile */
786 extern __txtvp __ribintext ();
787 extern long __ribinbyte ();
788 extern char __ribendfile ();
789 extern char __ribopen ();
790 extern char __ribclose ();
791 
792 /* Bytefile class outbytefile */
793 extern char __robopen ();
794 extern char __robclose ();
795 extern __dhp __roboutbyte ();
796 extern __dhp __robouttext ();
797 
798 /* Bytefile class directbytefile */
799 extern __txtvp __rdbintext ();
800 extern long __rdblocation ();
801 extern long __rdbmaxloc ();
802 extern char __rdblocked ();
803 extern long __rdblock ();
804 extern char __rdbunlock ();
805 extern char __rdbopen ();
806 extern char __rdbclose ();
807 extern long __rdblastloc ();
808 extern __dhp __rdblocate ();
809 extern __dhp __rdboutbyte ();
810 extern __dhp __rdbouttext ();
811 
812 /* Environment to C */
813 extern char *__rcopytexttoc ();
814 extern char *__raddroffirstchar ();
815 extern char *__raddroffirstelem ();
816 extern char **__rcopytextarrtoc ();
817 extern char *__rcopyarrtoc ();
818 
819 extern char *xmalloc();
820