; "READSTRING used by DFL to allow reading of RSUBRs." <DECLARE ("VALUE" FIX STRING CHANNEL)> <DPUSH TP* (AB)> <DPUSH TP* 2(AB)> <PUSHJ P* IREADS> <JRST FINIS> <INTERNAL-ENTRY IREADS 2> <SUBM M* (P)> <MOVE A* <MQUOTE <RGLOC MUDDLE>>> <ADD A* GLOTOP 1> <MOVE A* 1(A)> ; ",MUDDLE" <MOVEI E* 0> <CAIL A* 100> <MOVNI E* 1> ; "E IS -1 IF THIS IS BAGBITING 10X" <MOVE A* (TP)> ; "CHANNEL" <HRRZ C* 36(A)> ; "LENGTH OF BUFFER" <JUMPG C* USEBUF> ; "USE BUFFER, IF IT EXISTS" DOREAD <HRRZ B* -3(TP)> ; "LENGTH OF DEST STRING" <JUMPL E* [<PUSH P* A> <PUSH P* B> <MOVE A* 1(A)> ; "JFN" <MOVE C* B> <IDIVI C* 5> ; "NUMBER OF WORDS" <HRRZ B* -2(TP)> <ADDI B* 1> <HRLI B* *444400*> ; "MAKE BPTR" <SIN-JSYS> ; "DO IT" <MOVN D* C> ; "# CHARACTERS NOT READ" <POP P* B> ; "# CHARACTERS TO READ" <POP P* A> <JUMPE D* DOUPD> ; "READ EVERYTHING, SO DONE" <JRST ENDHAK1>]> ; "OTHERWISE, RETURN FUNNINESS" <MOVE C* B> <IDIV C* [-5]> ; "NEGATIVE THE NUMBER OF WORDS" <HRRZ D* -2(TP)> ; "DEST STRING" <ADDI D* 1> ; "MAKE IT POINT TO RIGHT WORD" <HRL D* C> ; "AOBJN POINTER" <MOVE C* 1(A)> ; "CHANNEL NUMBER" <LSH C* 23> ; "TO AC FIELD" <IOR C* [<*IOT D>]> ; "IO INSTRUCTION" <XCT C> ; "DO IT" <JUMPL D* ENDHAK> ; "IF RAN OUT OF WORDS IN FILE" DOUPD <ADDM B* 33(A)> ; "UPDATE ACCESS POINTER" DOLEAV <MOVSI A* <TYPE-CODE FIX>> <SUB TP* [<(4) 4>]> <JRST MPOPJ> ; "RETURN LENGTH OF STRING" ENDHAK <HLRES D> ; "# OF WORDS NOT READ" ENDHAK1 <IMULI D* 5> ; "TO CHARACTERS" <ADD B* D> ; "# OF CHARACTERS READ" <JRST DOLEAV> ; "CHANNEL IS IN A, LENGTH OF BUFFER IS IN C, DEST STRING IS -2(TP)" USEBUF <MOVE B* C> ; "SAVE BUFFER LENGTH" <IDIVI C* 5> ; "# WORDS IN BUFFER, ALMOST" <JUMPE D* NOREM> <SUBI D* 5> NOREM <ADDB D* 33(A)> ; "NEW MUDDLE ACCESS POINTER" <IDIVI D* 5> ; "# WORDS" <JUMPL E* [<PUSH P* A> <PUSH P* B> <MOVE A* 1(A)> ; "JFN" <MOVE B* D> ; "ACCESS POINTER" <SFPTR> <JFCL> <POP P* B> <POP P* A> <JRST DIDACC>]> <*CALL ACC> ; "UPDATE CHANNEL ACCESS" <JFCL> ; "# OF WORDS TO SKIP OVER IS IN C" DIDACC <MOVE B* 37(A)> ; "GET BPTR" <ADD B* C> ; "MUNG RH" <HRLI B* *10700*> ; "MUNG LH" <MOVEM B* 37(A)> <HLLZS 36(A)> ; "SET STRING LENGTH TO 0" <JRST DOREAD> ACC <SETZ> <SIXBIT "ACCESS"> <(1) A> ; "CHANNEL NUMBER" <SETZ D> ; "NEW ACCESS POINTER"