! ! EXPORT LIST ! ! %ROUTINESPEC F77 STOP(%HALFINTEGER PTYPE,%INTEGER VAL) %ROUTINESPEC F77 PAUSE (%HALFINTEGER PTYPE,%INTEGER VAL) %ROUTINESPEC F77 RTERR(%HALFINTEGER ERRNO) %ROUTINESPEC F77 IOERR(%HALFINTEGER ERRNO) %ROUTINESPEC F77 CONCAT(%HALFINTEGER COUNT,%INTEGER ADRINDESCS, OUTPUTBASE,%HALFINTEGER OUTPUTDISP,OUTPUTLEN) %ROUTINESPEC F77COPY (%INTEGER SCE BASE,%HALFINTEGER SCE DISP, SOURCE LEN,%INTEGER TARGET BASE,%HALFINTEGER TARGET DISP,TARGET LEN) %INTEGERFNSPEC F77 INDEX (%INTEGER SEARCHBASE, %HALFINTEGER SEARCHDISP,SEARCHLEN,%INTEGER KEYBASE,%HALFINTEGER KEYDISP, KEYLEN) %ROUTINESPEC F77 CMULTC(%INTEGER AD,%REAL R1,C1,R2,C2) %ROUTINESPEC F77 CDIVC(%INTEGER AD,%REAL R1,C1,R2,C2) %HALFINTEGERFNSPEC F77 CEQUC(%REAL R1,C1,R2,C2) %HALFINTEGERFNSPEC F77 CNEQC(%REAL R1,C1,R2,C2) %INTEGERFNSPEC F77 IABS(%INTEGERNAME I) %REALFNSPEC F77 ABS(%REALNAME X) %INTEGERFNSPEC F77 MOD(%INTEGERNAME I,J) %REALFNSPEC F77 AMOD(%REALNAME X,Y) %INTEGERFNSPEC F77 ISIGN(%INTEGERNAME I,J) %REALFNSPEC F77 SIGN (%REALNAME X,Y) %INTEGERFNSPEC F77 NINT(%REALNAME X) %REALFNSPEC F77 AINT(%REALNAME X) %REALFNSPEC F77 ANINT(%REALNAME X) %INTEGERFNSPEC F77 IDIM(%INTEGERNAME I,J) %REALFNSPEC F77 DIM(%REALNAME X,Y) %INTEGERFNSPEC F77 LLE(%INTEGER A0,A1,%HALFINTEGER D0,D1,L0,L1) %INTEGERFNSPEC F77 LGT(%INTEGER A0,A1,%HALFINTEGER D0,D1,L0,L1) %INTEGERFNSPEC F77 LLT(%INTEGER A0,A1,%HALFINTEGER D0,D1,L0,L1) %INTEGERFNSPEC F77 LGE(%INTEGER A0,A1,%HALFINTEGER D0,D1,L0,L1) %INTEGERFNSPEC F77 LEN (%INTEGER A0, HALFINTEGER D0, L0) ! ! SPECIFICATIONS OF ROUTINES REFERENCEDBELOW ! ! %EXTERNALROUTINESPEC NDIAG(%INTEGER AP,%HALFINTEGER I,J,K) ! ! %EXTERNALINTEGERFN F77 IABS(%INTEGERNAME I) %IF I<0 %THEN %RESULT=-I %ELSE %RESULT=I %END %EXTERNALREALFN F77 ABS(%REALNAME X) %IF X<0 %THEN %RESULT=-X %ELSE %RESULT=X %END %EXTERNALINTEGERFN F77 MOD(%INTEGERNAME I,J) %RESULT=I-(I//J)*J %END %EXTERNALREALFN F77 AMOD(%REALNAME X,Y) %HALFINTEGER I I=INTPT(X/Y) %RESULT=X-I*Y %END %EXTERNALINTEGERFN F77 ISIGN(%INTEGERNAME I,J) %INTEGER K %IF J<0 %THEN K=-1 %ELSE K=1 %IF I<0 %THEN %RESULT=-I*K %ELSE %RESULT=I*K %END %EXTERNALREALFN F77 SIGN (%REALNAME X,Y) %INTEGER I %IF Y<0 %THEN I=-1 %ELSE I=1 %IF X<0 %THEN %RESULT=-X*I %ELSE %RESULT=X*I %END %EXTERNALINTEGERFN F77 NINT(%REALNAME X) %REAL Y,REM %INTEGER K %HALFINTEGER I %IF X<0 %THEN Y=-X %AND K=-1 %ELSE Y=X %AND K=1 I=INTPT(Y) REM=Y-I %IF REM>=0.5 %THEN %RESULT=(I+1)*K %ELSE %RESULT=I*K %END %EXTERNALREALFN F77 AINT(%REALNAME X) %REAL Y,I %IF X<0 %THEN Y=-X %AND I=-1.0 %ELSE Y=X %AND I=1.0 %IF Y<1 %THEN %RESULT=0 %ELSE %RESULT=INTPT(Y)*I %END %EXTERNALREALFN F77 ANINT(%REALNAME X) %REAL Y,REM,K %HALFINTEGER I %IF X<0 %THEN Y=-X %AND K=-1.0 %ELSE Y=X %AND K=1.0 I=INTPT(X) REM=Y-I %IF REM>=0.5 %THEN %RESULT=(I+1.0)*K %ELSE %RESULT=I*K %END %EXTERNALINTEGERFN F77 IDIM(%INTEGERNAME I,J) %IF I>J %THEN %RESULT=I-J %ELSE %RESULT=0 %END %EXTERNALREALFN F77 DIM(%REALNAME X,Y) %IF X>Y %THEN %RESULT=X-Y %ELSE %RESULT=0 %END %ROUTINE COPY(%INTEGER LEN,SBASE,%HALFINTEGER SDISP, %INTEGER TBASE,%HALFINTEGER TDISP) **@TBASE; *LDDW; **TDISP **@SBASE; *LDDW; **SDISP **LEN+1 *STLATE_X'63'; *MVBW %END %ROUTINE CREATE(%INTEGER AD1,LEN,AD2,DIFF) ! %BYTEINTEGERARRAYNAME ST ! %BYTEINTEGERARRAYFORMAT STF(0:512) ! %INTEGER I ! COPY(LEN,AD1,0,AD2,0) ! ST==ARRAY(AD2,STF) ! %IF DIFF=0 %THEN %RETURN ! %CYCLE I=LEN,1,LEN+DIFF-1 ! ST(I)=32 ! %REPEAT %END %EXTERNALINTEGERFN F77 LLE(%INTEGER A0,A1,%HALFINTEGER D0,D1,L0,L1) ! %INTEGER I,ADRS0,ADRS1 ! %HALFINTEGER LEN,J,K ! %BYTEINTEGERARRAY S0,S1(0:512) ! ADRS0=ADDR(S0(0)) ! ADRS1=ADDR(S1(0)) ! %IF L0>L1 %THEN LEN=L0 %ELSE LEN=L1 ! CREATE(A0,L0,ADRS0,LEN-L0) ! CREATE(A1,L1,ADRS1,LEN-L1) ! %CYCLE I=0,1,LEN-1 ! J=S0(I) ! K=S1(I) ! %IF JK %THEN %RESULT=0 ! %REPEAT ! %RESULT=1 %END %EXTERNALINTEGERFN F77 LGT(%INTEGER A0,A1,%HALFINTEGER D0,D1,L0,L1) ! %INTEGER I,ADRS0,ADRS1 ! %HALFINTEGER LEN,J,K ! %BYTEINTEGERARRAY S0,S1(0:512) ! ADRS0=ADDR(S0(0)) ! ADRS1=ADDR(S1(0)) ! %IF L0>L1 %THEN LEN=L0 %ELSE LEN=L1 ! CREATE(A0,L0,ADRS0,LEN-L0) ! CREATE(A1,L1,ADRS1,LEN-L1) ! %CYCLE I=0,1,LEN-1 ! J=S0(I) ! K=S1(I) ! %IF J>K %THEN %RESULT=1 ! %IF JL1 %THEN LEN=L0 %ELSE LEN=L1 ! CREATE(A0,L0,ADRS0,LEN-L0) ! CREATE(A1,L1,ADRS1,LEN-L1) ! %CYCLE I=0,1,LEN-1 ! J=S0(I) ! K=S1(I) ! %IF JK %THEN %RESULT=0 ! %REPEAT ! %RESULT=0 %END %EXTERNALINTEGERFN F77 LGE(%INTEGER A0,A1,%HALFINTEGER D0,D1,L0,L1) ! %INTEGER I,ADRS0,ADRS1 ! %HALFINTEGER LEN,J,K ! %BYTEINTEGERARRAY S0,S1(0:512) ! ADRS0=ADDR(S0(0)) ! ADRS1=ADDR(S1(0)) ! %IF L0>L1 %THEN LEN=L0 %ELSE LEN=L1 ! CREATE(A0,L0,ADRS0,LEN-L0) ! CREATE(A1,L1,ADRS1,LEN-L1) ! %CYCLE I=0,1,LEN-1 ! J=S0(I) ! K=S1(I) ! %IF J>K %THEN %RESULT=1 ! %IF J L1 %THEN %RESULT = 0 ! %IF L0 = 0 %OR L1 = 0 %THEN %RESULT = 0 ! ST0 == ARRAY(A0 + D0,ST0F) ! ST1 == ARRAY(A1 + D1,ST1F) ! J = ST0(0) ! %CYCLE I = 0, 1, L1 - 1 ! %IF J = ST1(I) %THEN %START ! %IF L1 - I < L0 %THEN %RESULT = 0 ! %CYCLE K = 0, 1, L0 - 1 ! %IF ST0(K) # ST1(I + K) %THEN -> LOOP ! %REPEAT ! %RESULT = I + 1 ! LOOP: ! %FINISH ! %REPEAT ! %RESULT = 0 %END %ROUTINE FILL(%INTEGER AD,%HALFINTEGER DISP,LEN) %WHILE LEN>0 %CYCLE **AD+1 **AD **DISP *LDCB_X'20' *TLATE3 *STB DISP=DISP+1 LEN=LEN-1 %REPEAT %END %ROUTINE DESCTOSTR(%INTEGER VAL,%STRINGNAME S) %INTEGER LEN,DISP LEN=HALFINTEGER(VAL+3) LEN=32 %IF LEN>32 DISP=HALFINTEGER(VAL+2) COPY(LEN,VAL,DISP,ADDR(S),1) LENGTH(S)=LEN %END %EXTERNALROUTINE F77 CONCAT(%HALFINTEGER COUNT,%INTEGER ADDR INPUTDESCS, OUTPUTBASE,%HALFINTEGER OUTPUT DISP,OUTPUT LEN) %INTEGER I,LEN,OUTPUTPTR,ADR,DISP OUTPUTPTR=OUTPUTDISP %CYCLE I=0,4,(COUNT-1)*4 LEN=HALFINTEGER(ADDR INPUTDESCS+3+I) %IF OUTPUTLEN>LEN %THEN OUTPUTLEN=OUTPUTLEN-LEN ADR=INTEGER(ADDR INPUTDESCS+I) DISP=HALFINTEGER(ADDRINPUTDESCS+2+I) COPY(LEN,ADR,DISP,OUTPUTBASE,OUTPUTPTR) OUTPUTPTR=OUTPUTPTR+LEN %REPEAT %IF OUTPUTLEN>0 %THEN FILL(OUTPUT BASE,OUTPUTPTR,OUTPUTLEN) %END; !OF F77 CONCAT %EXTERNALROUTINE F77 IOERR(%HALFINTEGER ERRNO) %HALFINTEGER AP *LSSN *LDAP *TLATE1 *LDIND **=AP NDIAG(AP,0,0,0) %END; !OF F77 IOERR %EXTERNALROUTINE F77 RTERR(%HALFINTEGER ERRNO) %HALFINTEGER AP *LDAP **=AP NDIAG(AP,0,ERRNO,0) %END; !OF F77 RTERR %EXTERNALROUTINE F77 STOP(%HALFINTEGER PTYPE,%INTEGER VAL) %STRING(32) S ! PTYPE = 0 STOP ! PTYPE = 1 STOP ! PTYPE = 2 STOP PRINTSTRING(" FORTRAN STOP") %IF PTYPE=1 %THEN WRITE(VAL,4) %IF PTYPE=2 %THEN DESCTOSTR(VAL,S) %AND PRINTSTRING(" ".S) NEWLINE %END %EXTERNALROUTINE F77 PAUSE (%HALFINTEGER PTYPE,%INTEGER VAL) %STRING(32) S ! PTYPE=0 PAUSE ! PTYPE=1 PAUSE ! PTYPE=2 PAUSE PRINTSTRING(" FORTRAN PAUSE") %IF PTYPE=1 %THEN WRITE(VAL,4) %IF PTYPE=2 %THEN DESCTOSTR(VAL,S) %AND PRINTSTRING(" ".S) NEWLINE %END %EXTERNALROUTINE F77COPY (%INTEGER SOURCE BASE,%HALFINTEGER SOURCE DISP, SOURCE LEN,%INTEGER TARGET BASE,%HALFINTEGER TARGET DISP,TARGET LEN) %IF TARGET LEN<=SOURCE LEN %THEN SOURCE LEN=TARGET LEN COPY(SOURCE LEN,SOURCE BASE,SOURCE DISP,TARGET BASE,TARGET DISP) %IF TARGET LEN>SOURCE LEN %THEN %C FILL(TARGET BASE,TARGET DISP+SOURCE LEN,TARGET LEN-SOURCE LEN) %END %EXTERNALROUTINE F77 CMULTC(%INTEGER AD,%REAL R1,C1,R2,C2) %REAL R3,C3 R3=R1*R2-C1*C2 C3=C1*R2+C2*R1 ! REAL(AD)=R3 ! REAL(AD+2)=C3 **AD+1 **AD **@R3 *TLATE2 *MOVB_4 %END %EXTERNALROUTINE F77 CDIVC(%INTEGER AD,%REAL R1,C1,R2,C2) %REAL R,R3,C3 R=R2*R2+C2*C2 R3=(R1*R2+C1*C2)/R C3=(C1*R2-R1*C2)/R ! REAL(AD)=R3 !REAL(AD+2)=C3 **AD+1 **AD **@R3 *TLATE2 *MOVB_4 %END %EXTERNALHALFINTEGERFN F77 CEQUC(%REAL R1,C1,R2,C2) ! 1-TRUE,0 FALSE %IF R1=R2 %AND C1=C2 %THEN %RESULT=1 %ELSE %RESULT=0 %END %EXTERNALHALFINTEGERFN F77 CNEQC(%REAL R1,C1,R2,C2) ! 1 TRUE, 0 FALSE %IF R1#R2 %OR C1#C2 %THEN %RESULT=1 %ELSE %RESULT=0 %END %ENDOFFILE %ENDOFFILE