100 110 / DO A "GETC" ROUTINE. 120 130 DOAGETC,.-. /DO A "GETC" ROUTINE 140 CIF CDF PRGFLD /GOING TO MAIN FIELD 150 JMP I [DOGETC] /CONTINUE THERE 160 170 / COMES HERE WHEN RETURNING AFTER A "GETC" CALL. 180 190 DOGETBA,JMP I DOAGETC /RETURN TO CALLER 200 210 / POP ELEMENT OFF OF STACK ROUTINE. 220 230 POPAC, .-. /POP INTO AC ROUTINE 240 ISZ I [PDLXR] /BUMP STACK POINTER 250 TAD I [PDLXR] /GET THE NEW VALUE 260 DCA STKTMP /STASH IT 270 TAD I STKTMP /GET THE VALUE 280 JMP I POPAC /RETURN 290 300 / COMES HERE TO FINISH THE "FIO", "FDIS" FUNCTIONS. 310 320 XIOMORE,JMP I [XIOMR2] /CONTINUE THERE 330 EJECT 340 PAGE 350 360 / COMES HERE TO FINISH "FIO" AND "FDIS" FUNCTIONS. 370 380 XIOMR2, SNA /INPUT/OUTPUT FUNCTION? 390 JMP DODISP /NO, MUST BE DISPLAY 400 AND [177] /JUST SEVEN-BIT 410 DCA I [FLAC+1] /STORE IN HIGH-ORDER 420 DCA I [FLAC+2] /CLEAR LOW-ORDER 430 TAD [13] /GET SHIFT FACTOR 440 DCA I [FLAC] /SET EXPONENT 450 DISPRET,CIF CDF PRGFLD /GOING TO FIELD ZERO 460 JMP I [XRET] /FINISH IT THERE 470 480 / COMES HERE TO FINISH "FDIS" FUNCTION. 490 500 DODISP, JMS FIXPUSH /FIX AND PUSH FIRST ARGUMENT 510 JMS I [GETARG] /GET SECOND ARGUMENT 520 JMP I (DISP1) /WASN'T ANY 530 TAD [4000] /MAKE IT UNSIGNED 540 DCA Y /SAVE SECOND ARGUMENT AS Y VALUE 550 JMS POPAC /GET PREVIOUS ARGUMENT 560 TAD [4000] /MAKE IT UNSIGNED 570 DCA X /SAVE FIRST ARGUMENT AS X VALUE 580 JMS I [GETARG] /GET THIRD ARGUMENT 590 JMP I (DOPOINT) /WASN'T ANY 600 AND [7] /JUST VALID BITS 610 TAD (JMP I MODTABL)/MAKE IT PROPER JUMP INSTRUCTION 620 DCA .+1 /STORE IN-LINE 630 JMP I MODTABLE+.-. /WILL BE PROPER JUMP INSTRUCTION 640 650 / JUMP TABLE FOR EXTENDED MODES. 660 670 MODTABL,DOSTRING /FDIS(X,Y,0,"STRING",S,R) 680 DOCHAR /FDIS(X,Y,1,CHARACTER,S,R) 690 DONUMBER /FDIS(X,Y,2,VALUE,LENGTH,S,R) 700 DOVADDR /FDIS(X,Y,3) SET VECTOR STARTING ADDRESS 710 DOVECTOR /FDIS(X,Y,4) DRAW VECTOR FROM PREVIOUS ADDRESS 720 STRER1 /FDIS(X,Y,5) ILLEGAL 730 STRER1 /FDIS(X,Y,6) ILLEGAL 740 STRER1 /FDIS(X,Y,7) ILLEGAL 750 EJECT 760 / COMES HERE TO DO STRING OUTPUT. 770 780 DOSTRIN,TAD I [CHAR] /GET LAST CHARACTER 790 TAD [-",] /COMPARE TO COMMA 800 SZA CLA /SKIP IF IT MATCHES 810 JMP I [STRER2] /COMPLAIN IF NOT 820 JMS I (GETSTRING) /GET STRING ARGUMENT 830 NUMENTR,JMS I [GETARG] /GET FIFTH ARGUMENT 840 TAD (DEFSIZE) /USE DEFAULT SIZE (CAN'T HAPPEN IF STRING CALL) 850 DCA SIZE /SAVE AS SIZE FOR NOW 860 JMS I [GETARG] /GET FIFTH ARGUMENT 870 TAD (DEFROTATE) /USE DEFAULT ROTATE VALUE 880 DCA ROTATE /STORE ROTATE VALUE 890 TAD SIZE /GET SIZE VALUE 900 SPA CLA /SKIP IF POSITIVE 910 TAD ("<-"=) /MAKE IT "<" IF NEGATIVE 920 TAD ("=&177) /GET "=" AT LEAST 930 DCA SLANTBUFFER+1 /STORE IN STRING 940 TAD SIZE /GET SIZE VALUE 950 SPA /SKIP IF POSITIVE 960 CIA /ELSE MAKE IT SO 970 AND [7] /JUST OFFSET BITS 980 TAD (SIZTABLE) /POINT AT TABLE ELEMENT 990 DCA SIZE /STASH THE POINTER 1000 CDF DFIELD /GOTO OUR FIELD 1010 TAD I SIZE /GET THE VALUE 1020 DCA SIZBUFFER+1 /STORE IN STRING 1030 TAD ROTATE /GET ROTATE VALUE 1040 AND [3] /JUST OFFSET BITS 1050 CLL RAL /*2 1060 TAD ["0&177] /MAKE IT ASCII 1070 DCA ROTBUFFER+2 /STORE IN STRING 1080 JMS I [SETADR] /SETUP ADDRESS STRING 1090 JMS I [STROUT] /OUTPUT TO TERMINAL 1100 SLANTBUFFER /SLANT STRING 1110 SIZBUFFER /SIZE STRING 1120 ROTBUFFER /ROTATE STRING 1130 VECMODE /GO INTO VECTOR MODE 1140 ADRBUFFER /ADDRESS BUFFER 1150 ANOMOVE /BACK TO ALPHA MODE 1160 STRBUFFER /STRING BUFFER 1170 0 /THIS ENDS THE LIST 1180 JMP DISPRETURN /FINISH IT THERE 1190 1200 / COMES HERE TO DO CHARACTER OUTPUT. 1210 1220 DOCHAR, JMS I [GETARG] /GET CHARACTER ARGUMENT