mirror of
https://github.com/PDP-10/its.git
synced 2026-03-04 02:35:00 +00:00
81 lines
2.4 KiB
Plaintext
81 lines
2.4 KiB
Plaintext
; "READSTRING used by DFL to allow reading of RSUBRs."
|
|
<TITLE READST>
|
|
<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" |