%CONTROL X'0FFFFFFF' !* MODIFIED 20/03/79 !* %EXTERNALROUTINESPEC ICL9CEDIAGOUT(%INTEGER AD,LEN) !* %SYSTEMINTEGERFN IOCP(%INTEGER EP, N) %CONSTINTEGER OUTMARG2=132 %OWNBYTEINTEGERARRAY OUTPUTBUFF(0:132)=10,0(132) %OWNINTEGER OUTPTR=1 %ROUTINESPEC OUTPUTRECORD %INTEGER I, X, L, CH %SWITCH SW(1:22) ->SW(EP) SW(3): ! PRINT SYMBOL(N) SW(5): ! PRINT CH(N) %IF (N=10 %OR N=12 %OR N=13) %THEN %START OUTPUTBUFF(OUTPTR)=N OUTPUTRECORD; OUTPUTBUFF(0)=N ->END2 %FINISH OUTPUTBUFF(OUTPTR)=N OUTPTR=OUTPTR+1 %IF OUTPTR>OUTMARG2 %THEN %START OUTPUTBUFF(OUTPTR)=10 OUTPUTRECORD %FINISH END2: %RESULT=0 SW(15): ! RESTRICTED PRINTSTRING ! STRING MUST HAVE NO UNPRINTABLES ! OR CONTROLS (XCEPT LAST CHAR) ! AND MAY NOT EXCEED MARGINS X=X'180000FF' L=BYTE INTEGER(N) *LD_OUTPUTBUFF; *MODD_OUTPTR; ! TO RECEIVE STRING *LDB_L *STD_%TOS *LDA_N; *INCA_=1; *CYD_=0 *LD_%TOS; *MV_%L=%DR *INCA_=-1 *LSS_(%DR); *ST_X OUTPTR=OUTPTR+L OUTPTR=OUTPTR-1 %AND OUTPUT RECORD %IF X=10 %RESULT=0 ! ! CAN DELETE M-C CODE AND ALLOX SW(15) TO DROP THRO TO SW(7) ! IF REQUIRED FOR ALL IMP VERSION ! SW(7): ! PRINT STRING(N) WHERE ! N IS ADDRESS OF STRING L=BYTEINTEGER(N) %IF L=0 %THEN %RESULT=0 %CYCLE I=1,1,L CH=BYTEINTEGER(I+N)&X'7F' %IF CH=10 %THEN OUTPUT RECORD %ELSE %START OUTPUTBUFF(OUTPTR)=CH OUTPTR=OUTPTR+1 %IF OUTPTR>OUTMARG2 %THEN OUTPUT RECORD %FINISH %REPEAT %RESULT=0 SW(9): ! SELECT OUTPUT SW(11): ! OUTPUT THE CURRENT RECORD OUTPTR=1 OUTPUTBUFF(0)=10 %RESULT=0 SW(17): ! REPEATED PRINT SYMBOL %RESULT=0 %IF N<0 %OR N>>8=0 %CYCLE I=1,1,N>>8 X=IOCP(3,N&127) %REPEAT %RESULT=0 %ROUTINE OUTPUTRECORD ICL9CEDIAGOUT(ADDR(OUTPUTBUFF(1)),OUTPTR-1) OUTPTR=1 OUTPUTBUFF(0)=10 %END;! OUTPUTRECORD %END;! IOCP !* %SYSTEMROUTINE WRITE(%INTEGER I,N) %STRING(16) S %INTEGER D0,D1,D2,D3,MINCHARS,J N=N&15 %IF I=0 %THENSTART %IF N=0 %THEN N=1 SPACES(N) PRINTSYMBOL('0') %RETURN %FINISH D0=X'18000010' D1=ADDR(S)+1 *LD_D0 *LSS_I *CDEC_0;! 15 DECIMAL DIGITS IN ACC *MPSR_X'20';! SET CC=0 *SUPK_%L=15,0,32;! UNPACK 15 DIGITS, LEADING ZEROS SUPPRESSED *STD_D0;! DESCRIPTOR TO END OF UNPACK AREA *LSD_%TOS *ST_D2;! DESCRIPTOR TO POTENTIAL SIGN POSITION %IF I<0 %THEN BYTEINTEGER(D3)='-' MINCHARS=D1-D3 SETLEN:J=IOCP(17,(N-MINCHARS+1)<<8!' ');! SPACES(N-MINCHARS+1) J=MINCHARS+1 D1=D1-J *LD_D0 *LDB_J;! LENGTH OF STRING *LB_J *SBB_1 *MVL_%L=1;! INSERT LENGTH *MODD_1;! POINT TO FIRST DIGIT *MVL_%L=%DR,15,48;! SET TOP QUARTETS FOR ISO J=IOCP(15,D1);! FAST PRINTSTRING %END;! WRITE !* %ENDOFFILE