*20 / STRINGS / A CHARACTER STRING SEARCH THRU THE / DIAL-MS EDITOR WORK AREA, WITH DISPLAY / OF THE LINE(S) ON WHICH MATCHES ARE / FOUND. / WRITTEN BY: / JOHN RAINES / N.U.M.S. / JULY,1971 SEGMNT 4 *10 ANSPTR, 0 STCTR, 0 DSPTR, 0 TBCTR, 0 GCRTN, 0 QXPTR, 0 *5 /START OF PROGRAM LDA I 20 ESF /I/O PRESET LDF 7 RDC 6\322 /READ DIAL-MS I/O RDC 7\323 CLR IOB /BRING UP TTY FLAG QATLS START, JMP QAINIT /RESTART HERE. STMES STANS JMP QARFSH SET I ANSPTR STANS LDH ANSPTR SAE I 74 JMP START /?? CLR STC STCTR /ZERO CHAR COUNT EJECT STLUP, LDH I ANSPTR /COUNT THE CHARS SHD I /IN THE STRING. 7400 CLR AZE I JMP STRCTD /STRING LENGTH COUNTED. SHD I 4700 JMP START /?? TAB ?? SHD I 3700 JMP START /?? LF ?? SHD I 4300 JMP START /?? CR ?? XSK I STCTR /COUNT IT. JMP STLUP READP, 7774 STRCTD, ADD STCTR AZE I JMP START /NO CHAR STRING! STC CNTSAV STC FIRST COM STC GCOBLK SET I ANSPTR STLINE LDH ANSPTR SAE I 74 JMP START /?? OCTLUP, LDH I ANSPTR /NOW GET STARTING SHD I 3400 /LINE NO FROM QANDA CLR AZE I JMP OCTDUN BCL I 7 SAE I 60 JMP START /NON-OCTAL DIGIT? LDH ANSPTR BCL I 7770 STC .+4 ADD FIRST ROL 3 ADA I 0 STA I FIRST, 0 JMP OCTLUP EJECT / WHEN WE GET HERE: / STRING IS IN QANDA ANSWER BUFFER / NO. OF CHARS IN STRING IS IN "CNTSAV" / FIRST LINE NO. IS IN "FIRST". OCTDUN, CLR STC LINCNT LDA I CNTSAV, 0 COM ADD K1 STC MATCTR STC SRBLK1 ADD K2000 STC SRWRD1 SRLUP1, JMP GETCHR SRBLK1, 0 SRWRD1, 0 JMP SRLUP1 /TAB--IGNORE. JMP CNTLIN /CR--INC LINE NO. JMP NOTFND /00--STRING NOT THERE. SHD /CHAR--MATCH? 4\STANS JMP MATCH1 /YES. JMP SRLUP1 /NO. CNTLIN, CLR /CR--NEW LINE ADD SRBLK1 /SAVE PTRS TO 1ST STC LBLK /CHAR ON NEW LINE IN ADD SRWRD1 /CASE FULL MATCH IS STC LWRD /FOUND. ADD K1 /NOW INCR. LINE NO. LAM I LINCNT, 0 JMP SRLUP1 EJECT NOTFND, JMP QAINIT /STRING NOT FOUND NONMES STANS JMP QARFSH JMP START MATCH1, SET I ANSPTR 4\STANS LDA I MATCTR, 0 AZE I JMP CHK1ST /JUST 1 CHAR IN STRING STC STCTR ADD SRBLK1 STC SRBLK2 ADD SRWRD1 STC SRWRD2 SRLUP2, JMP GETCHR SRBLK2, 0 SRWRD2, 0 JMP SRLUP2 /IGNORE TAB JMP SRLUP1 /CR--NO MATCH JMP SRLUP1 /00--NO MATCH SHD I ANSPTR /NEW CHAR MATCH? SKP /YES! JMP SRLUP1 /NO MATCH XSK I STCTR /COMPLETE? JMP SRLUP2 /NOT YET. CHK1ST, LDA /YES!! LINCNT COM ADD FIRST APO I /PAST "FIRST"? JMP SRLUP1 /NO JMP DISPLY /YES!!! EJECT DISPLY, SET I DSPTR /WE HAVE A MATCH DSNO-1 /DISPLAY IT. LDA LINCNT JMP .+3 /LINE NO. OF MATCH LDA I DSLIN, 0 /ONTO THE SCOPE ROL 3 STA DSLIN BCL I 7770 BSE I 60 STH I DSPTR /INTO QANDA TEXT SRO I 3567 /4 DIGITS? JMP DSLIN-1 /NOT YET. LDA I 40 STH I DSPTR /3 SPACES SRO I 3333 JMP .-3 SET I STCTR /NO. OF CHARS ON LINE. -50 LDA I LBLK, 0 STC LBLK2 LDA I LWRD, 0 STC LWRD2 DSLUP, JMP GETCHR LBLK2, 0 LWRD2, 0 JMP DSTAB /TURN TAB INTO SPACES JMP DSCR /EXIT FROM THIS LOOP HLT /00CAN"T HAPPEN!?! SHD I 3400 CLR /UNDERLINE SHD I 7400 CLR /UNDERLINE DSSTH, STH I DSPTR XSK I STCTR /LINE FULL? JMP DSLUP /NOT YET JMP DSREDY /YES EJECT DSCR, STH I DSPTR LDH I K4000, 4000 XSK I STCTR JMP DSCR JMP DSREDY DSTAB, CLR ADD STCTR /TABS ARE EVERY ADD K10 /8 SPACES. APO JMP .-2 ADD K7767 AZE I ADD K7767 STC TBCTR /TAB COUNT INTO B-REG LDA I 40 TBLUP, STH I DSPTR XSK I STCTR /LINE DONE? SKP /NOT YET JMP DSREDY /YES XSK I TBCTR JMP TBLUP JMP DSLUP DSREDY, JMP QAINIT DSTEXT DSANS JMP QARFSH LDA DSANS SAE I 7404 SKP JMP QADIAL /LIKE CTRL/D SAE I 7416 /N--SAME STRING SKP JMP SRLUP1 SAE I 7423 /S--NEW STRING SKP JMP START JMP DSREDY /ILLEGAL ANSWER EJECT DSTEXT, TEXT "H" DSNO, TEXT " " TEXT " " 4343 TEXT "F OPTION<1 HD--DIAL RESTART HN--SEARCH FOR NEXT MATCH HS--SEARCH FOR NEW STRING\" DSANS, 7400 3400 EJECT STMES, TEXT "F STRING SEARCH HCHAR STRING? JMP QAK SHD I 2 /ALT? JMP QACA /REINITIALIZE SHD I 2 /BACK SLASH? JMP QARFSH /IGNORE SHD I 2 /RUBOUT? JMP QAL /IGNORE SHD I 2 /TAB? JMP QARFSH /IGNORE STC .+5 /ACCEPTABLE CHAR JMP QAO /TEST NEXT CHAR JMP QAQ /74 BACK PTR UP BY 1 JMP QAQ /34 ^ LDA I /OK. STORE IT 0 STH 4 JMP QARFSH /REDISPLAY QAL, LDH 4 /TO HERE IF RUBBOUT OR < JMP QAO+1 JMP QARFSH /74 IGNORE -6002 LDH 2 /TEST THE CHAR SAE I /RUBOUT? 37 JMP QAQ /NO. BACK PTR UP BY 1 SET 5 4 SET 3 4 JMP .+2 LDH I 5 /BUMP PTR LDH I 3 /GET NEXT CHAR JMP QAO+1 NOP /IF 74 OR 34, REPLACE /CURRENT CHAR WITH 0 CLR STH 5 AZE /WAS IT 74 OR 34? JMP .-7 /NO. CONTINUE JMP QAQ /BACK PTR UP BY 1 /TO HERE IF CR QAN, XSK 6 JMP QAK+4 /EXIT IF NO ANSWER BUF JMP QAO JMP QARFSH /74 MOVE PTR TO NEXT /QUESTION FIELD JMP QAE+1 /34 END OF BUFR. MOVE /PTR TO 1ST QUESTION JMP QAN+2 QAO, LDH I 4 /S\R SHD I / +1 74 BEGIN FIELD 7400 / +2 34 END BUFR JMP 0 / +3 NEITHER 74 NOR 34 SAE I 34 XSK I 0 XSK I 0 JMP 0 /S\R TO DISP CHAR IN AC QAP, ROL 1 /*2 FOR ADDRS IN TABLE ADD QAX+4 STC 2 /ADDRSS OF CHAR INTO XR2 ADD QAU /EITHER NOP OR ADD QAU ADD QAU ADD 1 /ADD 4 TO SPACE CHAR STC 1 ADD 5 /GET ADDRSS OF ANS BUFR COM ADD 4 AZE CLR STC QAI-2 /SWITCH=0 OR 7777 ADD QAH-1 /Y COORDINATE IN AC DSC 2 DSC I 2 /DISPLAY CHAR JMP 0 QAQ, LDA I /BACK UP PTR BY 1 -4000 ADM 4 JMP QARFSH /REDISPLAY / QAT, LDH I 1 /S\R SHD I / +1 F 0600 / +2 H JMP 0 / +3 NEITHER SAE I 10 XSK I 0 XSK I 0 JMP 0 / QAZ, LDH I 3 LDA I 40 JMP QAI-4 /TO HERE IF > QAK, LDH I 4 AZE I /IS CURRENT CHAR BLANK? JMP QAQ /YES. IGNORE JMP QAX /MOVE DOT FORWARD /EXIT WITH SKP LDA I 1 ADM QAB JMP QAB /CHARACTER PATTERNS QAV, 0101 /ILLEGAL. USED AS MARKER 0101 4477 /1:A 7744 5177 /2:B 2651 4136 /3:C 2241 4177 /4:D 3641 4577 /5:E 4145 4477 /6:F 4044 4136 /7:G 2645 1077 /10:H 7710 7741 /11:I 0041 4142 /12:J 4076 1077 /13:K 4324 0177 /14:L 0301 3077 /15:M 7730 3077 /16:N 7706 4177 /17:O 7741 4477 /20:P 3044 4276 /21:Q 0376 4477 /22:R 3146 5121 /23:S 4651 4040 /24:T 4077 0177 /25:U 7701 0176 /26:V 7402 0677 /27:W 7701 1463 /30:X 6314 0770 /31:Y 7007 4543 /32:Z 6151 4177 /33:/ 0000 0204 /34:\ 1020 0000 /35:] 7741 5710 /36:^ 1057 0 /37:B.A.=LF NOPE 0 0000 /40:SPACE 0000 7500 /41:! 0000 7000 /42:" 0070 0000 /43:CR, NOT DISPLAYED 0000 4731 /44:$ 4275 1446 /45:% 6130 5166 /46: ? 0526 /CODE 47:TAB NOT DSPLYD 0 /NOT USED 0 /NOT USED 3600 /50:( 0041 4100 /51:) 0036 2050 /52:* 0050 0404 /53:+ 0437 0500 /54:, 0006 0404 /55:- 0404 0001 /56:. 0000 0601 /57:\ 4030 4536 /60:0 3651 2101 /61:1 0177 4523 /62:2 2151 4122 /63:3 2651 2414 /64:4 0477 5172 /65:5 0651 1506 /66:6 4225 4443 /67:7 6050 5126 /70:8 2651 5122 /71:9 3651 2200 /72:: 0000 4601 /73:; 0000 0412 /74:< 2100 1212 /75:= 1212 4200 /76:> 1024 4020 /77:? 2055 / SEVERAL TABLES MOVED OUT OF CHAR DISPLY / TABLE TO RECLAIM THE EXTRA CHARS! / QAY, 4543 7476 3634 3747 QAX, JMP QAO+1 JMP QAQ JMP QAQ JMP QARFSH QAV QAW, NOP ADD QAU QAU, 2 QAF, DSC I 6000 JMP QAI / /END Q+A / / / / /KEYBOARD INPUT ROUTINE / QAKRB=6036 /PDP-8 IOT KBD QATSF=6041 /TSF QATLS=6046 /TLS / GETKBD, LDA 0 STC QAEXIT+6 /SAVE RETURN ADD 1 /SAVE XRS 1 AND 2 STC QAEXIT+3 ADD 2 STC QAEXIT+5 STC QAEXIT+1 KST /WAS SOMETHING TYPED? JMP 0 /NO: EXIT IOB QAKRB /GET TTY CHAR, CLR FLAG STA I /SAVE IT QATY, 0 ADA I -237 APO /BETWEEN 200 AND 237? JMP QACNTR /CONTROL CHAR. CHECK FOR /CR,LF,TAB,^C,^D SET I 1 /NO QACHAR-1 SET I 2 -7 LDA QATY SAE I 1 JMP .+2 JMP QAEXIT /ILLEGAL CHAR. DONT ECHO XSK I 2 /CHECKED THEM ALL? JMP .-4 / ADA I -337 APO /BETWEEN 240 AND 337? JMP QALEGL /YES. LEGAL CHAR / SAE I 1 /NO. CHECK FURTHER. JMP .+7 LDA I /RUBOUT 334 JMP QATPE /ECHO BACKSLASH LDA I 37 JMP QAEXIT+2 /LEGAL EXIT / SAE I 1 JMP QAEXIT /ILLEGAL /ALT JMP QAEXIT+2 /EXIT, DONT ECHO / QALEGL, LDA QATY JMP QATPE /ECHO CHAR ADD QATY BCL I /STRIP IT TO 6-BIT 7700 JMP QAEXIT+2 /TO HERE IF CONTROL CHAR QACNTR, SAE I 7755 JMP QACKLF LDA I /CR 43 STC QAEXIT+1 LDA I 215 JMP QATPE LDA I 212 JMP QATPE JMP QAEXIT / QACKLF, SAE I 7752 JMP QCTRLD LDA I /LF 45 JMP QACNTR+5 QATAB, SAE I 7751 JMP QAEXIT /ILLEGAL LDA I 47 JMP QAEXIT+2 /EXIT, DONT ECHO / QAEXIT, LDA I /GET 6-BIT ASCII 0 SET I 1 /RESTORE XRS 0 SET I 2 0 JMP /EXIR S\R GETKBD /S\R TO PRINT C(AC) QATPE, PDP PMODE TSF /MODIFIED TO JMP .-1 /REDUCE FLICKER TLS /ON SCOPE WHILE CLA /TYPING IS ECHOED. LINC LMODE JMP 0 / QACHAR, 243 /HASH 244 /DOLLAR SIGN 245 /PER CENT 247 /APOSTROPHE 300 /AT SIGN 336 /UP ARROW 337 /BACK ARROW 40 /RUBOUT 36 /ALT /END OF S\R GETKBD QCTRLD, SAE I 7744 /CTRL/D JMP QATAB QADIAL, CLR /RESTART DIAL-MS PDP /VIA ITS I/O PMODE /ROUTINES. CDF 10 JMP I .+1 7777 ASMIFM 2001-. TOO BIG-SORRY EJECT