EXTERNALROUTINESPEC DEFINE(STRING (63)S) EXTERNALROUTINE COMPRESS(STRING (63)S) !*********************************************************************** !* COMPRESSES A FILE OF ERROR MESSAGE INTO TWO CONSTARRAYS AND * !* GENERATES A ROUTINE TO REGURGITATE THEM IN ENGLISH * !*********************************************************************** INTEGER CPSTRM,INSTRM,LPSTRM INTEGERARRAY WORD(0:2000) INTEGERARRAY LETT(0:1000) INTEGER I, J, K, N, NUM, NEXT, NMAX, NUMMAX STRING (31) FILE1, FILE2, FILE3 STRING (71)TEMP,INPUT,WK1,WK2 STRING (71)FNSPEC MESS(INTEGER N) ROUTINESPEC LIT(INTEGERNAME P,STRINGNAME TXT1) ROUTINESPEC CARDS OUT CONSTBYTEINTEGERARRAY INTT(0:127)= 63(32),63(3),61,63,60, C 27,30,31,32,63(3), 28,59,29,63(17), 1,2,3,4,5,6,7,8,9,10,11,12, 13,14,15,16,17,18,19,20, 21,22,23,24,25,26, 63(6), 33,34,35,36,37,38,39,40,41,42, 43,44,45,46,47,48,49,50,51,52, 53,54,55,56,57,58,63(5); CONSTBYTEINTEGERARRAY OUTTT(0:63)='?','A','B','C','D','E','F','G', 'H','I','J','K','L','M','N', 'O','P','Q','R','S','T','U', 'V','W','X','Y','Z','&','-', '/','''','(',')', 'a','b','c','d','e','f','g', 'h','i','j','k','l','m','n', 'o','p','q','r','s','t','u', 'v','w','x','y','z','.','%', '#','?'(2); UNLESS S->FILE1.(",").FILE2.(",").FILE3 THEN C PRINTSTRING("PARAMS??") AND RETURN DEFINE("ST49,".FILE1) INSTRM=49 SELECT INPUT(INSTRM) DEFINE("ST50,".FILE2) CPSTRM=50 DEFINE("ST51,".FILE3) LPSTRM=51 SELECT OUTPUT(LPSTRM) CYCLE I=0,1,1000; WORD(I)=0 REPEAT LETT(0)=0 NEXT=1; NUM=1; NMAX=0 RMESS:READ(N); NMAX=N IF N>NMAX IF N=0 THEN ->OUTPUT J=1; WORD(NUM)=N; NUMMAX=NUM RSYM: I=NEXT SYMBOL IF I=';' OR I=NL THEN SKIP SYMBOL AND ->RSYM UNLESS I='"' THEN SKIP SYMBOL AND ->RSYM READSTRING(INPUT) INPUT=WK1." ".WK2 WHILE INPUT->WK1.(" ").WK2 IF INPUT="" OR INPUT=" " THEN ->RMESS;! MISSING ERROR MESSAGE NUM=NUM+1 NEWLINE; WRITE(N,5) WHILE INPUT->WK1.(" ").INPUT CYCLE IF WK1#"" THEN START LIT(I,WK1) WORD(NUM)=I!X'8000' NUM=NUM+1 FINISH REPEAT ->RMESS IF INPUT="" LIT(I,INPUT) WORD(NUM)=I!X'8000' NUM=NUM+1 ->RMESS OUTPUT: WORD(NUM)=0 NEWLINES(2) CYCLE I=1,1,NMAX TEMP=MESS(I) IF TEMP#"" THEN START NEWLINE; WRITE(I,5) PRINTSTRING(" ".TEMP) FINISH REPEAT CARDS OUT SELECT OUTPUT(0) PRINTSTRING("ROUTINE MESSAGE GENERATED "); STOP STRING (71)FN MESS(INTEGER N) STRING (70)OMESS INTEGER I, J, K, M, Q, S OMESS="" CYCLE I=1,1,NUM-1 ->FOUND IF N=WORD(I) REPEAT RESULT ="" FOUND: J=1 CYCLE K=WORD(I+J) IF K&X'8000'=0 THEN EXIT K=K!!X'8000' OMESS=OMESS." " UNLESS J=1 UNTIL M&1=0 CYCLE M=LETT(K); S=25 UNTIL S<0 CYCLE Q=M>>S&63 IF Q¬=0 THEN OMESS=OMESS.TOSTRING(OUTTT(Q)) S=S-6 REPEAT K=K+1 REPEAT J=J+1 REPEAT RESULT =OMESS END ROUTINE LIT(INTEGERNAME P,STRINGNAME TXT) INTEGER I, J, K, L, N, SH, CH N=0; J=0 SH=25; L=0; CH=1 AGN: ->Q IF CH>LENGTH(TXT) I=CHARNO(TXT,CH) I=INTT(I) CH=CH+1 N=N+1; J=J!I<<SH SH=SH-6; ->AGN UNLESS SH<0 J=J!1 UNLESS CH>LENGTH(TXT) LETT(NEXT+L)=J J=0; SH=25; L=L+1; ->AGN Q: IF SH#25 THEN LETT(NEXT+L)=J AND L=L+1 I=0 WHILE I<=NEXT-1 CYCLE CYCLE J=0,1,L-1 ->FAIL UNLESS LETT(I+J)=LETT(NEXT+J) REPEAT ->FOUND FAIL: I=I+1 REPEAT P=NEXT; NEXT=NEXT+L PRINTSTRING(" WORD ENTERED"); RETURN FOUND:P=I; PRINTSTRING(" WORD FOUND ") END ROUTINE PHEX(INTEGER N) INTEGER I, J PRINTSTRING("X'") CYCLE J=28,-4,0 I=N>>J&15 IF I>=10 THEN I=I+7 PRINT SYMBOL(I+'0') REPEAT ; PRINTSTRING("'") END ROUTINE CARDS OUT STRING (73)M INTEGER I, J SELECT OUTPUT(CPSTRM) PRINTSTRING(" %STRINGFN MESSAGE(%INTEGER N) !") CYCLE I=1,1,71 PRINTSYMBOL('*') REPEAT PRINTSTRING(" !* OUTPUTS AN ERROR MESSAGE STORED IN A COMPRESSED FORMAT * ") CYCLE I=1,1,NMAX M=MESS(I) IF M#"" THEN START PRINTSTRING("!* ") WRITE(I,3) PRINTSTRING(" ".M) SPACES(59-LENGTH(M)) PRINTSTRING("* ") FINISH REPEAT PRINTSTRING("!") CYCLE I=1,1,71 PRINT SYMBOL('*') REPEAT NEXT=NEXT-1 PRINTSTRING(" %CONSTBYTEINTEGERARRAY OUTTT(0:63)='?','A','B','C','D','E','F','G', 'H','I','J','K','L','M','N', 'O','P','Q','R','S','T','U',") PRINTSTRING(" 'V','W','X','Y','Z','&','-', '/','''','(',')', 'a','b','c','d','e','f','g',") PRINTSTRING(" 'h','i','j','k','l','m','n', 'o','p','q','r','s','t','u', 'v','w','x','y','z','.','%',") PRINTSTRING(" '#','?'(2)") PRINTSTRING(" %CONSTINTEGER WORDMAX=") WRITE(NUM,2) PRINTSTRING(",DEFAULT="); WRITE(NUMMAX,2) PRINTSTRING(" %CONSTHALFINTEGERARRAY WORD(0:WORDMAX)=0,%C") NEWLINE; SPACES(9) CYCLE I=1,1,NUM WRITE(WORD(I),5); PRINTSTRING(",") UNLESS I=NUM IF I&7=0 THEN START NEWLINE; SPACES(9) FINISH REPEAT PRINTSTRING(" %CONSTINTEGERARRAY LETT(0:") WRITE(NEXT,2) PRINTSTRING(")=0,%C") NEWLINE; SPACES(8) CYCLE I=1,1,NEXT PHEX(LETT(I)); PRINTSTRING(",") UNLESS I=NEXT IF I&3=0 THEN NEWLINE AND SPACES(8) REPEAT PRINTSTRING(" %INTEGER I,J,K,M,Q,S %STRING(70)OMESS OMESS="" "" %CYCLE I=1,1,WORDMAX-1 ->FOUND %IF N=WORD(I) %REPEAT I=DEFAULT") PRINTSTRING(" FOUND: J=1 %CYCLE K=WORD(I+J)") PRINTSTRING(" %IF K&X'8000'=0 %THEN %EXIT K=K!!X'8000' OMESS=OMESS."" "" %UNLESS J=1 %UNTIL M&1=0 %CYCLE M=LETT(K); S=25 %UNTIL S<0 %CYCLE Q=M>>S&63; ") PRINTSTRING(" %IF Q¬=0 %THEN OMESS=OMESS.TOSTRING(OUTTT(Q)) S=S-6 %REPEAT K=K+1 %REPEAT J=J+1 %REPEAT %RESULT=OMESS %END ") SELECT OUTPUT(LPSTRM) END END ENDOFFILE