1 C Loglan82 Compiler&Interpreter
2 C Copyright (C) 1981-1993 Institute of Informatics, University of Warsaw
3 C Copyright (C) 1993, 1994 LITA, Pau
5 C This program is free software; you can redistribute it and/or modify
6 C it under the terms of the GNU General Public License as published by
7 C the Free Software Foundation; either version 2 of the License, or
8 C (at your option) any later version.
10 C This program is distributed in the hope that it will be useful,
11 C but WITHOUT ANY WARRANTY; without even the implied warranty of
12 C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 C GNU General Public License for more details. File: LICENSE.GNU
14 C ===============================================================
17 IMPLICIT INTEGER (A-Z)
18 COMMON /BUFF/ INSTR(265),BUFOR(85),LP,LN,MAX,JNK(266)
19 COMMON /STREAM/ ERRFLG,LINE,IBUF2(265),IBUF3(7),ON,JUNK(259)
22 O S, ADRES, K, SCOMA, SDOT, SEMICOL,
23 1 SCOLON, SLEFT, SRIGHT, SBECOME, STAR, SRELAT,
24 2 SEOF, SIDENT, SCONST, SAND, SARRAY, SARROF,
25 3 SATTACH, SBEGIN, SBLOCK, SBOOL, SCALL, SCASE,
26 4 SCLASS, SCLOSE, SCONS, SCOPY, SCOROUT, SDETACH,
27 5 SDIM, SDO, SDOWN, SELSE, SEND, SESAC,
28 6 SEXIT, SEXTERN, SFI, SFOR, SFUNCT, SIF,
29 7 SINNER, SINPUT, SINT, SKILL, SLOCK, SNEW,
30 8 SNONE, SNOT, SOD, SOR, SORIF, SOTHER,
31 9 SOUTPUT, SPREF, SPRCD, SQUA, SREAD, SRESUME,
32 O SRETURN, STEP, STOP, STAKEN, STHEN, STHIS,
33 A STO, STYPE, SUNIT, SVAR, SVIRTUAL, SWAIT,
34 B SWHEN, SWHILE, SWRIT, SWRITLN, STRUE, SALL,
35 C WAND, WARRAY, WASSIGN, WASSCON, WATTACH, WBLOCK,
36 D WCALL, WCASE, WCASEL, WCOMA, WCNSTB, WCNSTC,
37 E WCNSTI, WCNSTN, WCNSTR, WCNST, WCOPY, WDETACH,
38 F WDOT, WDOWNTO, WEOF, WESAC, WFIN, WFIRST,
39 G WFOREND, WFORVAR, WFROM, WIDENT, WIFFALS, WIFTRUE
42 H WINNER, WINSTREND,WJUMP, WKILL, WLABEL, WLEFT,
43 I WLOCK, WLOW, WLSE, WNEW, WNEWARRAY,WNOT,
44 J WOPERAT, WOPT, WOR, WOTHER, WPREF, WPRIM,
45 K WQUA, WREAD, WRELAT, WRESUME, WRETURN, WRIGHT,
46 L WSTART, WSTEP, WSTOP, WTHIS, WTO, WAIT,
47 M WRITE, WRITELN, WBOUND, UNICAL,
49 O LMEM, LPMEM, IRECN, ISFIN, LPMSYS, LPML,
50 P LPMF, NRINT, NRRE, NRBOOL, NRCHAR, NRCOR,
51 Q NRPROC, NRTEXT, NRUNIV, NATTR, NRNONE, NBLSYS,
52 R NBLUS, NEMPTY, INSYS, LOCAL, OWN, OBJECT,
53 S HASH(8000), M, NAME(10), NLAST, NL,
55 U TRANS1(13,13), TRANS2(13,13), B0, B(70),
56 V SKOK0, SKOK(70), KK, MM, STAN, STAN1,
57 W AUX, K1, SY, SY1, NU, JK1, EXP,
58 X SIGN, INTPART, FRAC, OKEY, FRACT,JK2,NB,
60 Z TOP, IN, NEXT, STACK(500)
69 INTEGER SD,SE,SL,SR,SS,ST
70 data sd,se,sl,sr,ss,st /2,61,40,41,47,42/
71 DATA SCANHEX /x'7FFF'/
75 IF (.NOT.OKEY) GOTO 111
77 IF (SY.EQ.70) GOTO 3001
78 C INSERTED DUE TO T.SZCZEPANEK
84 111 IF (LP.LT.MAX) GOTO 1
86 1 IF (BUFOR(1).EQ.SD) GOTO 3001
89 C ZNAK MEANS CHARACTER
90 IF (STAN.LT.10) GOTO 10
91 C WITHIN COMMENT - COMPOUND SYMBOLS ARE NOT PICKED UP
92 C THE SAME FOR TEXT AND CHARACTER CONSTANTS
93 IF (STAN.EQ.11) GOTO 11
95 10 IF (ZNAK.EQ.63) GOTO 101
98 2 IF (BUFOR(LP+1).NE.SE) GOTO 8
100 3 IF (BUFOR(LP+1).NE.SR) GOTO 8
102 4 IF (BUFOR(LP+1).NE.SS) GOTO 8
103 IF (BUFOR(LP+2).NE.SE) GOTO 8
106 C --- ALLOW FOR "<>" TO STAND FOR "NON EQUAL"
107 5 IF (ZNAK.NE.50) GO TO 5055
108 IF (BUFOR(LP+1) .NE. ICHAR('>')) GO TO 5055
112 5055 IF (BUFOR(LP+1).NE.SE) GOTO 8
114 6 IF (BUFOR(LP+1).NE.ST) GOTO 8
115 C BEGINNING OF COMMENT HAS BEEN RECOGNIZED '(*'. CHECK FOR A LISTING
116 C CONTROL OPTION FOLLOWING THE COMMENT ANNOUNCEMENT. IF ONE OCCURRS
117 C THEN THE LISTING CONTROL VARIABLE IS TO BE SET PROPERLY
118 IF (BUFOR(LP+2).NE.ICHAR('$')) GOTO 7
124 C END OF DETECTING COMPOUND SYMBOLS
125 C THE AUTOMATON - PART I
128 GOTO (190,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,
133 IF (KLUCZ.EQ.(SIDENT*8)) K=2
137 30 IF (KK.LT.NB) GOTO 31
138 IF (MM.LT.TL) GOTO 32
142 cbc COM(MM)=ISHFT(COM(MM),8)+Z
143 com(mm)=ior(ishft(z, 8), com(mm))
150 40 IF (KK.LT.NB) GOTO 41
151 IF (MM.LT.NL) GOTO 42
155 NAME(MM)=NAME(MM)*BYTE+ZNAK
160 IF (ZNAK.EQ.0) NAME(MM)=60
163 cdsw&bc IF (INTPART.LT.0) GOTO 52
173 60 IF (SIGN.EQ.1) EXP=-EXP
175 cdsw&bc IF (INTPART.LT.0) GOTO 191
180 192 IF (EXP) 200,210,193
182 CJF IF (FRACT.GT.0.7237005E75) GOTO 207
185 CJF 207 CALL ERROR(206)
189 CJF IF (FRACT.GT.0.AND.FRACT.LT.0.5397605E-77) GOTO 207
207 cdsw&bc 100 IF (INTPART.LT.0) GOTO 102
208 100 if (overfl) goto 102
210 cdsw&bc check for overflow
212 cailvaxC max. integer on VAX is 2147483647
213 if ( (intpart .gt. 214748364) .or. ((intpart .eq. 214748364)
214 C .and. (znak .gt. 7)) ) overfl = .TRUE.
217 if (intpart .gt. 3275) overfl = .TRUE.
219 INTPART=INTPART*10+ZNAK
220 cdsw&bc IF (INTPART.GE.0) GOTO 190
222 cailvaxC overfl is .FALSE. here
225 if (.not. overfl) goto 190
239 180 IF (EXP.LT.0) GOTO 181
240 IF (ZNAK.EQ.44) GOTO 190
251 C THE AUTOMATON - PART II
254 GOTO (1300,1020,1030,1040,1050,1060,1070,1080,1090,1100,1110,1120,
255 ,1130,1140,1150,1160,1170,1180,1190,1200,1210),I
285 1140 IF (OK) GOTO 1145
322 C END OF THE SECOND PHASE
323 IF (.NOT.OK) GOTO 111
325 GOTO (2010,2020,2030,2040,2050,2060,2070),K
335 C INTEGER CONSTANT RECOGNIZED
350 GOTO (2150,2102,2103,2104,2150,2150,2150,2150,2150,2150,2105,2106,
351 ,2107,2108,2150,2150,2150,2150,2109,2110,2111),K
389 C THE LAST TWO STATEMENT ARE INSERTED DUE TO T.SZCZEPANEK
394 IMPLICIT INTEGER (A-Z)
395 COMMON /BUFF/ INSTR(265),BUFOR(85),LP,LN,MAX,POSTR(265),STATUS
397 C POSTR - BUFFER FOR AUXILIARY INPUT FILE
398 C VARIABLE STATUS DESCRIBES THE STATUS OF INPUT:
399 C 1 - SOURCE TEXT IS READ FROM THE AUXILIARY INPUT
400 C 0 - SOURCE TEXT IS READ FROM THE STANDARD INPUT
401 C -1 - SOURCE TEXT HAS BEEN READ UNTIL THE LAST END. NOW THE STANDARD
402 C INPUT IS BEING SKIPPED UNTIL EOF
404 COMMON /LISTING/ OUTSTR(265)
405 COMMON /STREAM/ ERRFLG,LINE,IBUF2(265),IBUF3(7),ON,JUNK(259)
406 COMMON /BLANK/ C0M(4)
408 character*1 bufor1(85)
411 equivalence (bufor1(1), bufor2(1))
416 C NOW ONE LINE IS READ FROM THE INPUT FILE
420 IF (BTEST(C0M(2),15)) GOTO 1001
421 call ffwrite_char(16, '0')
424 1001 call ffwrite_char(16, '1')
427 c end of line - write CR/LF
428 call ffwrite_char(16, int2char(13))
429 call ffwrite_char(16, int2char(10))
430 2 call nextch(17, bufor(1))
431 bufor(1) = iand(X'FF',bufor(1))
432 IF (BUFOR(1).EQ.1) GOTO 1
433 IF (BUFOR(1).EQ.2) RETURN
435 call nextch(17, bufor(i))
436 bufor(i) = iand(X'FF',bufor(i))
437 if (bufor(i) .eq. 1) goto 90
438 if (i .lt. 84) goto 3
446 IF (BTEST(C0M(2),15)) GOTO 110
447 call ffwrite_char(16, '0')
450 110 call ffwrite_char(16, '1')
455 120 bufor1(i) = char(bufor(i))
456 call ffwrite(16, bufor2(1), max)
458 call ffwrite_char(16, int2char(13) )
459 call ffwrite_char(16, int2char(10) )
461 140 BUFOR(I)=ICHAR(' ')
467 C LIS OF THE ERRORS DIAGNOSED BY THE PARSER
472 C 104 - 'FI', 'ELSE' "
478 C 110 - TOO MANY EXIT-S
479 C 111 - ILLEGAL CHARACTER
480 C 112 - STRUCTURE ERROR IN 'IF THEN ELSE FI'
481 C 113 - ????????????????????????????????????????????????
483 C 115 - WRONG OCCURRENCE OF A CONSTANT IN EXPRESSION
485 C 117 - CONSTANT MISSING
486 C 118 - DELIMITER MISSING
487 C 119 - CLASS/ PROCEDURE / FUNCTION EXPECTED
488 C 120 - 'HIDDEN HIDDEN' OR 'CLOSE CLOSE'
489 C 121 - HIDDEN OUTSIDE CLASS
490 C 122 - 'BLOCK' MISSING
491 C 123 - OBJECTEXPRESSION IS NOT A GENERATOR
492 C 124 - 'DIM' MISSING
493 C 125 - 'TO' / 'DOWNTO' MISSING
494 C 126 - ILLEGAL OCCURRENCE OF AN ARITHMETIC OPERATOR
495 C 127 - DECLARATIONS EXPECTED (UNIT, VAR, CONST)
496 C 128 - THE NAME OCCURRING AFTER 'END' DOESN-T MATCH THE UNIT NAME
497 C 129 - CASE...ESAC STRUCTURE ERROR
498 C 130 - DO...OD STRUCTURE ERROR
499 C 131 - ILLEGAL OCCURRENCE OF MAIN
500 C 132 - WHEN EXPECTED
501 C 133 - TOO MANY CASES IN 'CASE' (UPPER LIMIT = 127)
502 C 134 - 'BEGIN' MISSING
503 C 135 - ERROR IN OPTION DEFINITON IN COMMENT
505 C 137 - WRONG HEADER OF THE SOURCE PROGRAM (BLOCK/PROGRAM MISSING)
506 C 138 - TOO MANY REPEAT STATEMENTS
507 C 139 - UNREACHABLE INSTRUCTIONS AFTER EXIT
508 C 140 - ANDIF'S AND ORIF'S INTERLEAVE
509 C 141 - SEMAPHORE TYPE PRECEDED BY ARRAYOF
510 C 142 - HANDLER IMPROPERLY ENDED
511 C 143 - LASTWILL OCCURRS WITHIN A COMPOUND STATEMENT OR WITHIN A HANDLER
512 C 144 - LASTWILL OCURRS TWICE
513 C 145 - NO PARAMETER SPECIFICATION
514 C 146 - WRONG REGISTER SPECIFICATION (IMPOSSIBLE IN THE PORTABLE VERSION)
516 C OVERFLOW-TYPE ERRORS: SCANNING STOPS ON ANY OF THEM
517 C 191 - NULL PROGRAM - THE INPUT FILE IS EMPTY
518 C 196 - HASH TABLE OVERFLOW
519 C 197 - VARIABLE OR FORMAL PARAMETER LIST TOO LONG (LENGTH>132)
520 C 198 - PARSER STACK OVERFLOW
521 C 199 - IPMEM TABLE OVERFLOW - NO ROOM FOR MORE PROTOTYPES
523 C 201 - ERROR IN REAL CONSTANT
524 C 202 - COMMENT STRUCTURE ERROR
525 C 203 - ERROR IN CHARACTER CONSTANT
526 C 204 - ERROR IN CONSTANT
527 C 205 - VALUE OF A INTEGER CONSTANT EXCEEDS MACHINE ARITHMETIC
529 C 211 - IDENTIFIER TOO LONG (INITIAL 20 CHARACTERS ARE SIGNIFICANT)
530 C 212 - TEXT TOO LONG (INITIAL 264 CHARACTERS ARE SIGNIFICANT)
531 IMPLICIT INTEGER (A-Z)
532 COMMON /BUFF/ INSTR(265),BUFOR(85),LP,LN,MAX,JNK(266)
533 COMMON /LISTING/ OUTSTR(265)
534 COMMON /STREAM/ ERRFLG,LINE,IBUF2(265),IBUF3(7),ON,JUNK(259)
535 COMMON /BLANK/ C0M(4) , S , ADRES , KA , RESZTA(8185)
540 IF ((EL.EQ.LN).AND.(EP.GE.LP-1)) GOTO 15
543 IF (BTEST(C0M(2),15)) GOTO 1
544 call ffwrite_char(16, '0')
547 1 call ffwrite_char(16, '1')
552 5 call ffwrite_char(16, ' ')
554 call ffwrite_char(16, '?')
556 c end of line - write CR/LF
557 call ffwrite_char(16, int2char(13) )
558 call ffwrite_char(16, int2char(10) )
561 IF ((K.GT.190).AND.(K.LT.200)) CALL OVERF(K)
568 INTEGER FUNCTION ORD(X)
569 IMPLICIT INTEGER (A-Z)
572 C --- ORIGINAL TABLE (FOR ISO-7 CODE) CHANGED TO WORK FOR EBCDIC
573 DATA TAB /8*63,36,3*63,37,19*36,63,43,4*63,44,52,53,48,39,
574 ,42,40,38,41,0,1,2,3,4,5,6,7,8,9,47,45,50,49,51,63,63,
575 ,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
576 ,30,31,32,33,34,35,4*63,46,
577 ,63,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
580 IF (Z.GT.122) GOTO 10
587 INTEGER FUNCTION SEARCH(K)
588 IMPLICIT INTEGER (A-Z)
589 COMMON /BLANK/ COM(302),
590 1 HASH(8000), M, NAME(10), NLAST, NL,
592 3 SCANER(522), STOS(503), RESZTA(3652)
597 IF (HASH(I).NE.0) GOTO 3
603 IF (NLAST.LT.0) CALL ERROR(196)
604 IF (HASH(NLAST).NE.0) GOTO 2
610 3 IF (HASH(I).EQ.NAME1) GOTO 4
614 4 IF ((K.NE.1).OR.(HASH(I+1).LT.0)) GOTO 5
632 IF (NAME(P).EQ.HASH(J)) GOTO 6
634 10 IF (I.GE.0) GOTO 1
639 12 IF (P.GT.K) RETURN
641 IF (NLAST.LT.0) CALL ERROR(196)
642 IF (HASH(NLAST).NE.0) GOTO 13
650 INTEGER FUNCTION EMBEDE(X)
651 C --- NAME CHANGED TO AVOID CONFLICTS IN THE 'ONE-PROGRAM' VERSION
652 C --- OF THE COMPILER
653 IMPLICIT INTEGER(A-Z)
654 COMMON /BLANK/ COM(278),
655 X LMEM , LPMEM , IRECN , ISFIN , LPMSYS, LPML , LPMF ,
656 X NRINT , NRRE , NRBOOL, NRCHR , NRCOR , NRPROC, NRTEXT,
657 X NRUNIV, NATTR , NRNONE, NBLSYS, NBLUS , NEMPTY, INSYS ,
658 X LOCAL , OWN , OBJECT,
661 LOGICAL INSYS, LOCAL, OWN
662 C IPMEM - MAIN MEMORY
663 C ISFIN - TOP OF THE PROTOTYPE DICTIONARY STACK
664 C LPMEM - DIVISION POINT OF IPMEM
666 EQUIVALENCE (IPMEM(1), STALE(1))
671 equivalence (y, m(1))
677 cvax one real constant in one ipmem element (4 bytes)
681 if (stale(i).eq.x) goto 20
682 10 if (i+1.lt.lpml) goto 5
683 if (lpml+1.gt.lpmf) goto 300
689 C --- LENGTH OF REALS ON SIEMENS IS 2
694 if (ipmem(i) .eq. m(1) .and. ipmem(i+1) .eq. m(2)) go to 20
695 10 if (i+2 .lt. lpml) go to 5
696 if (lpml+2 .gt. lpmf) go to 300
701 20 embede = (i+1) / 2
711 IMPLICIT INTEGER (A-Z)
714 O S, ADRES, K, SCOMA, SDOT, SEMICOL,
715 1 SCOLON, SLEFT, SRIGHT, SBECOME, STAR, SRELAT,
716 2 SEOF, SIDENT, SCONST, SAND, SARRAY, SARROF,
717 3 SATTACH, SBEGIN, SBLOCK, SBOOL, SCALL, SCASE,
718 4 SCLASS, SCLOSE, SCONS, SCOPY, SCOROUT, SDETACH,
719 5 SDIM, SDO, SDOWN, SELSE, SEND, SESAC,
720 6 SEXIT, SEXTERN, SFI, SFOR, SFUNCT, SIF,
721 7 SINNER, SINPUT, SINT, SKILL, SLOCK, SNEW,
722 8 SNONE, SNOT, SOD, SOR, SORIF, SOTHER,
723 9 SOUTPUT, SPREF, SPRCD, SQUA, SREAD, SRESUME,
724 O SRETURN, STEP, STOP, STAKEN, STHEN, STHIS,
725 A STO, STYPE, SUNIT, SVAR, SVIRTUAL, SWAIT,
726 B SWHEN, SWHILE, SWRIT, SWRITLN, STRUE, SALL,
727 C WAND, WARRAY, WASSIGN, WASSCON, WATTACH, WBLOCK,
728 D WCALL, WCASE, WCASEL, WCOMA, WCNSTB, WCNSTC,
729 E WCNSTI, WCNSTN, WCNSTR, WCNST, WCOPY, WDETACH,
730 F WDOT, WDOWNTO, WEOF, WESAC, WFIN, WFIRST,
731 G WFOREND, WFORVAR, WFROM, WIDENT, WIFFALS, WIFTRUE
734 H WINNER, WINSTREND,WJUMP, WKILL, WLABEL, WLEFT,
735 I WLOCK, WLOW, WLSE, WNEW, WNEWARRAY,WNOT,
736 J WOPERAT, WOPT, WOR, WOTHER, WPREF, WPRIM,
737 K WQUA, WREAD, WRELAT, WRESUME, WRETURN, WRIGHT,
738 L WSTART, WSTEP, WSTOP, WTHIS, WTO, WAIT,
739 M WRITE, WRITELN, WBOUND, UNICAL,
741 O LMEM, LPMEM, IRECN, ISFIN, LPMSYS, LPML,
742 P LPMF, NRINT, NRRE, NRBOOL, NRCHAR, NRCOR,
743 Q NRPROC, NRTEXT, NRUNIV, NATTR, NRNONE, NBLSYS,
744 R NBLUS, NEMPTY, INSYS, LOCAL, OWN, OBJECT,
745 S HASH(8000), M, NAME(10), NLAST, NL,
747 U TRANS1(13,13), TRANS2(13,13), B0, B(70),
748 V SKOK0, SKOK(70), KK, MM, STAN, STAN1,
749 W AUX, K1, SY, SY1, NU, JK1, EXP,
750 X SIGN, INTPART, FRAC, OKEY, FRACT,JK2,NB,
751 Y TL, BYTE, TEXT(20),
752 Z TOP, IN, NEXT, STACK(500)
757 COMMON /STREAM/ ERRFLG,LINE,IBUF2(265),BUF(7),ON,BUFOUT(256),
764 character stringbuffer(2)
765 integer istringbuffer(1)
766 equivalence (stringbuffer(1),istringbuffer(1))
769 equivalence (zero(1), zeroc(1))
775 IF (COM(2).EQ.0) RETURN
778 IF (COM(MM).LT.256) LENGTH=LENGTH-1
779 c write string length (in bytes)
780 call ffwrite_ints(15, length, 1)
781 c write string itself without any padding
783 cdsw - poprawka na wszelki wypadek
787 stringbuffer(1)=int2char(iand(com(1+i),X'FF'))
788 stringbuffer(2)=int2char(ishft(com(1+i),-8))
789 100 call ffwrite(15,istringbuffer(1),2)
791 if (mod(length, 2) .ne. 1) goto 102
792 stringbuffer(1)=int2char(iand(com(2+l),X'FF'))
793 call ffwrite(15, istringbuffer(1), 1)
796 c compute the number of trailing zero bytes
801 if (btest(c0m(2), 12)) wrdsiz=4
804 fill=wrdsiz-mod(length, wrdsiz)
806 call ffwrite(15, zero, fill)
807 c compute next string address
808 text(1) = text(1) + 1 + (length+fill)/wrdsiz
812 INTEGER FUNCTION KEY ( ADR )
815 C COMPUTES KEY OF THE ENCOUNTERED WORD. IT-S ADDRESS IS PASSED THRU
818 C STRUCTURE OF KEY TABLE:
820 C KEYS(2*N) - ADDRESS OF A KEYWORD
821 C KEYS(2*N-1) - KEY OF THIS WORD
823 C NOTE: FOR THE WORDS THAT DO NOT OCCUR IN THE DICTIONARY
824 C THE FUNCTION RETURNS IDENTIFIER KEYS
826 IMPLICIT INTEGER (A-Z)
827 COMMON /BLANK/ C0M(146),COM(132),XX(8037),KEYS(200),RESZTA(4677)
828 C --- SPECIAL CHECK IS MADE HERE FOR THE ENTRIES WHICH ARE MISSING
829 C --- IN THE HASH TABLE AND IN 'KEYS'
832 IF (ADR.NE.1833) GO TO 9999
835 C --- END OF CHECK FOR MISSING KEYS
837 9999 if(adr.ne.59) go to 9998
841 9998 if(adr.ne.1243) go to 9997
845 9997 if(adr.ne.2339) go to 9996
849 9996 if(adr.ne.2347) go to 9995
853 9995 if(adr.ne. 1841) go to 9994
857 9994 if(adr.ne.2579) go to 9993
860 c text - key jak dla string
861 9993 if(adr.ne.2249) go to 9992
864 c direct - klasa 64/7 - jak dla typow pierwotnych
865 9992 if (adr .ne. 2097) goto 8888
868 c putrec - klasa 34/0
869 8888 if (adr .ne. 2075) goto 8889
872 c getrec - klasa 34/1
873 8889 if (adr .ne. 2081) go to 8890
876 cbc ----- added concurrent statements
877 c enable - klasa 35/0
878 8890 if (adr .ne. 2047) goto 8891
881 c disable - klasa 35/1
882 8891 if (adr .ne. 2041) goto 8892
885 c accept - klasa 36/0
886 8892 if (adr .ne. 2053) goto 8893
891 8893 if(adr.ne.1463) go to 9991
898 IF (KEYS(2*LEFT)-ADR) 30,20,10
902 30 IF (KEYS(2*RIGHT)-ADR) 10,40,50
905 50 POINT=(LEFT+RIGHT)/2
906 IF (KEYS(2*POINT)-ADR) 100,200,300
907 100 IF (LEFT.EQ.POINT) RETURN
910 200 KEY=KEYS(2*POINT-1)