100 DIGBUFF,ZBLOCK 5 /DIGIT BUFFER 110 NUMTEMP,.-. /NUMBER TEMPORARY 120 REM, .-. /DIVIDE REMAINDER 130 QUO, .-. /DIVIDE QUOTIENT 140 150 PAGE 160 EJECT 170 / PROCESS STRING ARGUMENT ROUTINE. 180 190 GETSTRI,.-. /GET A STRING ROUTINE 200 NL7777 /SET -1 210 DCA PREVCHAR /INDICATE NO PREVIOUS CHARACTER 220 TAD [STRBUFFER] /POINT TO 230 DCA STRPTR /STRING BUFFER 240 TAD [40] /SETUP THE 250 DCA CASE /DEFAULT CASE 260 GETSLUP,JMS DOAGETC /GET A CHARACTER FROM FOCAL 270 TAD I [CHAR] /GET THE CHARACTER 280 CDF DFIELD /BACK TO OUR FIELD 290 AND [177] /JUST SEVEN-BIT 300 DCA LATCHAR /SAVE IT 310 TAD LATCHAR /GET IT BACK 320 AND [140] /JUST QUADRANT BITS 330 TAD [-140] /COMPARE TO LOWER-CASE 340 SNA CLA /SKIP IF OTHER 350 TAD [-40] /MAKE IT UPPER-CASE 360 TAD LATCHAR /ADD ON LATEST CHARACTER 370 TAD (-"I!300) /COMPARE TO 380 SNA /SKIP IF NOT 390 TAD (" -"I&77) /ELSE CONVERT TO 400 TAD ("I&37) /RESTORE THE CHARACTER 410 DCA LATCHAR /STORE IT 420 TAD LATCHAR /GET CORRECTED LATEST CHARACTER 430 TAD (-""!200) /COMPARE TO STRING DELIMITER 440 SNA /SKIP IF OTHER 450 JMP TSTQUOTE /JUMP IF IT MATCHES 460 TAD (-",+"") /COMPARE TO COMMA 470 SNA /SKIP IF OTHER 480 JMP TSTCOMMA /JUMP IF IT MATCHES 490 TAD (-"^+",) /COMPARE TO UP-ARROW 500 SNA CLA /SKIP IF OTHER 510 JMP TSTUPARROW /JUMP IF IT MATCHES 520 TAD LATCHAR /GET LATEST CHARACTER 530 AND [140] /JUST QUADRANT BITS 540 SNA CLA /SKIP IF NOT CONTROL CHARACTER 550 JMP STRER1 /JUMP IF BAD CONTROL CHARACTER 560 TAD PREVCHAR /GET PREVIOUS CHARACTER 570 SPA CLA /SKIP IF THIS NON-DELIMITER IS NOT FIRST 580 JMP STRER2 /JUMP IF FIRST NOT DELIMITER 590 OUTCHAR,TAD LATCHAR /GET THE LATEST CHARACTER 600 AND [100] /JUST ALPHA BIT 610 SZA CLA /SKIP IF NOT SET 620 TAD CASE /ELSE BIAS WITH LATEST CASE 630 TAD LATCHAR /ADD ON LATEST CHARACTER 640 OUTQUOT,DCA I STRPTR /STORE IN THE BUFFER 650 ISZ STRPTR /BUMP TO NEXT 660 NXTCHAR,CLA /ENSURE CLEAR AC 670 TAD LATCHAR /GET LATEST CHARACTER 680 DCA PREVCHAR /MAKE IT THE PREVIOUS CHARACTER FOR NEXT TIME 690 JMP GETSLUP /GO GET ANOTHER CHARACTER 700 EJECT 710 / COMES HERE WHEN STRING DELIMITER IS FOUND. 720 730 TSTQUOT,TAD PREVCHAR /GET PREVIOUS CHARACTER 740 SPA /SKIP IF NOT FIRST TIME 750 JMP NXTCHAR /ELSE JUST KEEP GOING 760 TAD (-""!200) /WAS PREVIOUS SAME AS LATEST? 770 SZA CLA /SKIP IF SO 780 JMP NXTCHAR /JUST KEEP GOING IF NOT 790 UPARENT,DCA LATCHAR /CLEAR PREVIOUS CHARACTER (EVENTUALLY) 800 TAD PREVCHAR /GET A QUOTE CHARACTER 810 JMP OUTQUOTE /CONTINUE THERE 820 830 / COMES HERE WHEN A COMMA IS FOUND. 840 850 TSTCOMM,TAD PREVCHAR /GET PREVIOUS CHARACTER 860 TAD (-""!200) /COMPARE TO DELIMITER 870 SZA CLA /SKIP IF AT END OF STRING 880 JMP OUTCHAR /JUST OUTPUT AN IMBEDDED COMMA 890 DCA I STRPTR /DELIMIT THE STRING 900 JMP I GETSTRING /RETURN TO CALLER 910 920 / COMES HERE WHEN AN UP-ARROW IS FOUND. 930 940 TSTUPAR,TAD CASE /GET CURRENT CASE 950 CIA /INVERT IT 960 TAD [40+0] /ADD ON SUM OF BOTH VALUES 970 DCA CASE /SAVE NEW CASE 980 TAD PREVCHAR /GET PREVIOUS CHARACTER 990 TAD (-"^!200) /COMPARE TO UP-ARROW 1000 SZA CLA /SKIP IF SAME AS PREVIOUS 1010 JMP NXTCHAR /JUST KEEP GOING 1020 JMP UPARENTRY /CONTINUE THERE 1030 1040 / COMES HERE WHEN FIRST CHARACTER IS NOT STRING DELIMITER. 1050 1060 STRER1, NL0001 /SET OFFSET 1070 1080 / COMES HERE WHEN THERE IS NO TERMINATING STRING DELIMITER. 1090 1100 STRER2, TAD (XDYS+7) /GET ERROR ADDRESS 1110 CIF CDF PRGFLD /GOTO MAIN FIELD 1120 JMP I [ERROR5] /GO COMPLAIN THERE 1130 EJECT