TITLE CREEP -- TOPS-20 HELP FOR CRAWL.PAS SUBTTL PHIL BUDNE@DEC/LCG SEARCH MONSYM TMRCHN==0 T1==1 T2==2 T3==3 T4==4 T5==5 P==17 JFN: BLOCK 1 TEMP: BLOCK 10 TEMP2: BLOCK 2 INSINR: BLOCK 1 OUTCNT: BLOCK 1 ;COUNT OF TIMEOUTS GETLOCAL:: SETZM OUTCNT MOVE T4,T2 ;SAVE RESULT POINTER MOVEI T1,.NDGLN ;GET FUNCTION MOVEI T2,T3 ;POINT TO BLOCK HRROI T3,TEMP NODE MOVEI T1,6 ;NODE LENGTH MOVE T3,[POINT 7,TEMP] ;GET SOURCE TLNE T4,-1 ;SECTION? TLOA T4,610000 ; YES, GET OWG HRLI T4,(POINT 7,) ;MAKE DEST BP GL.1: ILDB T2,T3 ;GET A BYTE JUMPE T2,GL.2 ;NULL? IDPB T2,T4 ;NO, COPY SOJG T1,GL.1 ;KEEP GOING POPJ P, ;WAS FULL 6 CHARACTERS GL.2: MOVEI T2," " ;GET A SPACE GL.3: IDPB T2,T4 ;STORE IT SOJG T1,GL.3 ;FILL THE REST POPJ P, OPENCON:: DMOVEM T2,TEMP2 ;SAVE NODE NAME HRROI T1,TEMP ;GET BUFFER HRROI T2,[ASCIZ 'DCN:'] SETZ T3, SOUT MOVE T4,[POINT 7,TEMP2] MOVEI T5,6 OP.1: ILDB T2,T4 ;GET NEXT BYTE CAIN T2," " ;SPACE IS TERMINATOR JRST OP.2 IDPB T2,T1 SOJG T5,OP.1 OP.2: HRROI T2,[ASCIZ '-19;BDATA:003000000'] SOUT IDPB T3,T1 MOVSI T1,(GJ%SHT) HRROI T2,TEMP GTJFN ERJMP RETZER MOVEM T1,JFN MOVE T2,[8B5+OF%RD+OF%WR] OPENF ERJMP RETREL TIME MOVE T4,T1 ;SAVE UPTIME ADDI T4,^D<60*1000> ;WAIT FOR ONE MIN OP.3: MOVE T1,JFN MOVEI T2,.MORLS MTOPR ERJMP RETCLZ TLNE T3,(MO%CON) ;CONNECTED? JRST OP.4 TLNE T3,(MO%ABT) ;ABORTED? JRST RETCLZ TIME CAML T1,T4 ;TIME UP? JRST RETCLZ ; YES MOVEI T1,^D1000 ;NO, GET A SECOND DISMS ;SLEEP JRST OP.3 ;LOOP OP.4: SETZM INSINR ;CLEAR IO FLAG MOVEI T2,TMRCHN MOVEI T3,1 ;LEVEL HRLZ T4,16 ;?? HRRI T4,TMRINT ;HANDLR PUSHJ P,PSIDEF## ;LIBRARY ROUTINE MOVEI T2,TMRCHN PUSHJ P,PSIENABLE## RETONE: MOVEI T1,1 JRST RETVAL RETCLZ: MOVE T1,JFN CLOSF JFCL JRST RETZER RETREL: MOVE T1,JFN RLJFN JFCL RETZER: SETZ T1, RETVAL: MOVEM T1,1(P) POPJ P, CLOSECON:: MOVE T1,JFN TLO T1,(CZ%ABT) CLOSF JFCL POPJ P, PUTDATA:: EXCH T2,T3 ;EXCHANGE COUNT,BUFFER MOVE T1,JFN TLNE T2,-1 ;SECTION? TLOA T2,540000 ; YES, GET OWG HRLI T2,(POINT 8,) SOUTR ERJMP RETZER JRST RETONE TMRENA: MOVE T1,[.FHSLF,,.TIMEL] MOVEI T2,^D<60*1000> ;TIME OUT IN ONE MINUTE MOVEI T3,TMRCHN TIMER ERJMP .+1 POPJ P, GETDATA:: DMOVE T4,T2 ;SAVE ARGS (COUNT,DEST) PUSHJ 17,TMRENA MOVE T2,T5 ;GET DEST TLNE T2,-1 ;SECTION? TLOA T2,540000 ; YES, GET OWG HRLI T2,(POINT 8,) ; MAKE BP MOVE T1,JFN ;GET FILE MOVN T3,T4 ;GET COUNT SETOM INSINR ;DOING I/O SINR ERJMP RETZER ;RETURN ZERO SETZM INSINR ;I/O DONE MOVE T1,T3 ;GET REMAINING COUNT ADD T1,T4 ;GET COUNT OF BYTES READ PUSH P,T1 ;SAVE BYTE COUNT MOVE T1,[.FHSLF,,.TIMAL] TIMER ;CANCEL INTERRUPT ERJMP .+1 POP P,T1 JRST RETVAL TMRINT: SKIPN INSINR ;STUCK IN SINR? POPJ P, ; NOPE AOS OUTCNT HRROI T1,[ASCIZ 'TIMEOUT'] ESOUT XMOVEI T1,RETZER MOVEM T1,1(T5) POPJ P, END