%OWNINTEGER NIL = -1 %OWNINTEGER STRING DESC = X'58000000' %OWNINTEGER LONG DESC = X'30000000' ! %SYSTEMROUTINESPEC ITOE(%INTEGER AD, LEN) ! %EXTERNALINTEGERFNSPEC CTM JS BEGIN(%LONGINTEGER DUMMY) %EXTERNALINTEGERFNSPEC CTM JS END(%LONGINTEGER DUMMY) %EXTERNALINTEGERFNSPEC CTM JS WRITE(%INTEGER NAME0, NAME1, %C INT0, INT1, STR0, STR1, BOOL0, BOOL1) %EXTERNALINTEGERFNSPEC CTM JS READ(%INTEGER NAME0, NAME1, %C INT0, INT1, STR0, STR1, BOOL0, BOOL1) %EXTERNALINTEGERFNSPEC CTM ASSIGN FILE(%INTEGER ROUTE0, ROUTE1, %C LOCAL0, LOCAL1, NAME0, NAME1, ACC, LOCK, A,B,C,D,E, %C %LONGINTEGER F,G, %INTEGER H,I,J,K) %EXTERNALROUTINESPEC CTM DUMP ! %ROUTINE ERROR(%INTEGER I) SELECT OUTPUT(0) NEW LINE PRINT STRING(" CTM error code:"); WRITE(I,0); NEW LINE %END ! %INTEGERFN STOI(%STRING(15) S) ! %INTEGER I, J, X ! %IF LENGTH(S) = 0 %THEN %RESULT = 0 I = 0 %CYCLE J = 1, 1, LENGTH(S) X = CHARNO(S,J) %IF X # ' ' %THEN %START %UNLESS '0' <= X <= '9' %THEN %RESULT = 0 I = I*10 + X - '0' %FINISH %REPEAT %RESULT = I %END ! %EXTERNALROUTINE XBEGIN(%STRING(255) S) %INTEGER I I = CTM JS BEGIN(0) %IF I # 0 %THEN ERROR(I) %END ! %EXTERNALROUTINE XEND(%STRING(255) S) %INTEGER I I = CTM JS END(0) %IF I # 0 %THEN ERROR(I) %END ! %EXTERNALROUTINE XINT(%STRING(255) S) %STRING(31) NAME, VALUE %INTEGER I, N0, N1, I0, I1 %LONGINTEGER IVALUE %UNLESS S -> NAME.("=").VALUE %THEN ERROR(1) IVALUE = STOI(VALUE) N0 = STRING DESC ! LENGTH(NAME) N1 = ADDR(NAME) + 1 ITOE(N1,LENGTH(NAME)) I0 = LONG DESC ! 1 I1 = ADDR(IVALUE) I = CTM JS WRITE(N0,N1,I0,I1,NIL,NIL,NIL,NIL) %IF I # 0 %THEN ERROR(I) %END ! %EXTERNALROUTINE XASSIGN(%STRING(255) S) %STRING(31) FILE, LOCAL, ACCESS %INTEGER I, ACC %UNLESS S -> FILE.(",").S %THEN FILE = S %AND S = "" %UNLESS S -> LOCAL.(",").S %THEN LOCAL = S %AND S = "" ACCESS = S ITOE(ADDR(FILE)+1,LENGTH(FILE)) ACC = 1 %IF ACCESS = "W" %THEN ACC = 3 %IF ACCESS = "A" %THEN ACC = 4 ITOE(ADDR(LOCAL)+1,LENGTH(LOCAL)) I = CTM ASSIGN FILE(NIL,NIL,STRING DESC!LENGTH(LOCAL), %C ADDR(LOCAL)+1,STRING DESC!LENGTH(FILE),ADDR(FILE)+1, %C ACC,0,0,NIL,NIL,0,0,0,0,NIL,NIL,NIL,NIL) %IF I # 0 %THEN ERROR(I) %END ! %EXTERNALROUTINE XDUMP(%STRING(255) S) CTM DUMP %END ! %ENDOFFILE