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