1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-04 02:35:00 +00:00
Files
PDP-10.its/src/mudbug/dfl.hand

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"