From eca5df75cfbd20653bb949061607c373ba408992 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Fri, 22 Jan 2021 08:07:53 +0100 Subject: [PATCH] SURGIV - Demon to send SURVEY data. Applications like HOSTAT can connect to DM to retrieve host status data. This is the demon that serves the data. --- build/dm.tcl | 6 + build/timestamps.txt | 1 + doc/programs.md | 1 + src/survey/surgiv.mmb012 | 376 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 384 insertions(+) create mode 100644 src/survey/surgiv.mmb012 diff --git a/build/dm.tcl b/build/dm.tcl index 0624ca2a..e382e1fe 100644 --- a/build/dm.tcl +++ b/build/dm.tcl @@ -27,3 +27,9 @@ expect ":KILL" # Arpanet survey demon. respond "*" ":midas sys; atsign survey_survey; survey\r" expect ":KILL" + +# Survey giver demon. +respond "*" ":midas survey; atsign surgiv_surgiv\r" +expect ":KILL" +respond "*" ":link sys; atsign surgiv, survey;\r" +type ":vk\r" diff --git a/build/timestamps.txt b/build/timestamps.txt index 3dbe82af..16b84aaf 100644 --- a/build/timestamps.txt +++ b/build/timestamps.txt @@ -1730,6 +1730,7 @@ shrdlu/ts.twdemo 197110312144.38 sra/usefmt.9 198905011833.08 stan_k/3406.40 197411302122.54 _/@.stink 197306120431.21 +survey/surgiv.mmb012 197606212141.59 survey/survey.msg207 197801272221.28 sys1/ts.speedy 197408060500.00 sys2/ts.ralp 198001301933.20 diff --git a/doc/programs.md b/doc/programs.md index 40a3a4fb..7bb4da9b 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -320,6 +320,7 @@ - STYLOG, convert PTY output file into ASCII file. - SUPARD, draw ARDS graphics to SUPDUP. - SUPDUP, Supdup client. +- SURGIV, survey giver demon. - SURVEY, survey Arpanet hosts. - SWAR, Imlac Spacewar. - SYSCHK, check up on system job. diff --git a/src/survey/surgiv.mmb012 b/src/survey/surgiv.mmb012 new file mode 100644 index 00000000..517f4e85 --- /dev/null +++ b/src/survey/surgiv.mmb012 @@ -0,0 +1,376 @@ +TITLE SURVEY GIVER DAEMON +; VERSION 8 MB 3/22/74 FILTER OUT "HOST" > 377 AT MLOOP+5 +; VERSION 9 MB 6/5/74 FLUSH SOCKET NOT=1M FOR NEW AND OLD FORMAT +; VERSION 10 MB 5/5/76 CLOSE CONNECTION RATHER THAN ACCEPT IF NO DATA + +.MLLIT==1 ;MULTI-LINE LITERALS + +A=1 +B=2 +C=3 +D=4 +E=5 +F=6 +G=7 +H=10 +I=11 +J=12 +K=13 +L=14 +M=15 +;N=16 +P=17 + + + +NETI==1 +NETO==2 +DSKI==3 + +INBIT==1_NETI +OUTBIT==1_NETO + +CLKBIT=10000 +IOCBIT=400 + +CLOCK=16 + +RFCSNT==4 +OPEN==5 + ; NETWAIT MACRO. WAITS UNTIL NETWORK CHANNEL MAKES DEFINED TRANSITION. + + ; NOSKIP -> TIME-OUT + ; 1 SKIP -> ERROR, FUNNY STATE ENCOUNTERED + ; 2 SKIP -> WIN, SPECIFIED TRANSITION WINS + + DEFINE NETWAIT CHAN,OLD,NEWSTATE,TLIMIT\OK,TEXIT,EEXIT,EXIT +OK==IRP N,,[NEWSTATE] +1_+!TERMIN!0 + PUSH P,A + PUSH P,B + MOVEI B,30.*TLIMIT + .CALL [SETZ ? 'NETBLK ? 1000,,CHAN ? 1000,,OLD ? B ? SETZM A] + JRST EEXIT + JUMPE B,TEXIT ;TIMED OUT + MOVEI B,1 + LSH B,(A) + TRNN B,OK + JRST EEXIT ;NOT OK STATE + POP P,B + POP P,A + JRST EXIT+2 +EEXIT:: POP P,B ;ERROR OR BAD STATE + POP P,A + JRST EXIT+1 +TEXIT:: POP P,B ;TIMED OUT + POP P,A +EXIT:: IF2 EXPUNGE OK,TEXIT,EEXIT,EXIT +TERMIN + +ICPBLK: 40067,,(SIXBIT/NET/) + 15. + 0 + 0 + +OCHCNT: 0 + ASCII / / ;5 SPACES TO FILL OBUFFR +OBUFFR: BLOCK 400. +OBUFFE: BLOCK 1 + +PDL: BLOCK 50 +PATCH: BLOCK 20 + +BUF: BLOCK 10. + +DBLK: 6,,(SIXBIT/DSK/) + SIXBIT/CSDATA/ + SIXBIT/NOW/ + +ZZZ==. +LOC 40 + 0 + 0 + JSR TSINT +LOC ZZZ + +FOO: SIXBIT /HST000/ ;FOR TERMINAL "HSTXXX" + +START: MOVE P,[-50,,PDL] + MOVEI A,IOCBIT+CLKBIT + SETZM B + .SETM2 A, ;ENABLE IOC ERR AND 30TH SEC CLK + +;ICP - SERVER ON SOCKET 15. + SETZM CLOCK + .OPEN NETO,ICPBLK + JRST LOGLOS + NETWAIT NETO,1,2,120. + JRST DONE + JRST DONE + MOVE F,[NETO,,A] + .RCHST F, ;D/FOR HOST C/FORSOC E/STATE + ANDI D,377 ; 8 BITS FOR HOST +; CHECK HERE FOR FILE GOODNESS, BEFORE ACCEPTING CONNECTION + .SUSET [.SSNAM,,[SIXBIT/NETWRK/]] + .OPEN DSKI,DBLK + JRST DFAIL + MOVE A,[-5,,BUF] ;GET HEADER + .IOT DSKI,A + HRRZ A,BUF + SOJL A,DFAIL ;FILE FAILS TEST + + .NETAC NETO, ;WON ACCEPT CONNECTION + JRST LOGLOS + + MOVE A,D + DPB A,[000300,,FOO] + LSH A,-3 + DPB A,[060300,,FOO] + LSH A,-3 + DPB A,[140300,,FOO] + + .SUSET [.RUNAM,,A] ;UNAME IS -1 IF DEMON + HLLOS A + AOJN A,START2 + .DEMON + JFCL + + MOVE A,[SIXBIT /SURGIV/] + .CALL [SETZ ? 'LOGIN_6 ? A ? SETZ FOO] + AOJA A,[ MOVEI 30. + .SLEEP + JRST .-1] + +START2: ;FALL THRU + ;CREATE AN OPNBLK IN A B C D + SETZM CLOCK + MOVE A,[50,,(SIXBIT /NET/)] + MOVEI B,0 + ADDI C,3 ;U+3 + .OPEN NETI,A + JRST DONE + + MOVE F,[NETI,,A] + .RCHST F, ;LOC SOC "S" IN B + + MOVE F,[-1,,B] + SETZM CLOCK + .IOT NETO,F ;SEND 32 BITS + + ADDI B,1 ;S+1, NOW + SUBI C,1 ;"U+2" + MOVE A,[3,,(SIXBIT/NET/)] ;S+1 + SETZM CLOCK + .OPEN NETO,A + JRST DONE + SETZB E,CLOCK +; NETWAIT NETO,4,5,3600. ;MOVED TO ALLOW OVERLAP WITH MAKING TBL +; JFCL +; JRST DONE + ;NOW ENABLE CHANNEL INTERRUPTS ALSO + .SUSET [.SMSK2,,[INBIT+OUTBIT]] +STX: MOVE G,[OBUFFR-1,,OBUFFR] + BLT G,OBUFFE + MOVE G,[440700,,OBUFFR] + +;MAIN LOOP FOR SENDING DATA + + HRRZ A,BUF ;SET UP WHEN FILE OPENED ABOVE + SOSGE A ;FOR BYTE INDEX 1 MEANS FIRST IN TABLE + MOVEI A,96. ;WRAPPED AROUND? 0? + IDIVI A,12. + ADD A,BLIST(B) + MOVE C,[440600,,BUF+4] + MOVEI D,4 +DTL: ILDB E,C ; OUTPUT DATE AS MM,DD,19YY + ADDI E,40 + IDPB E,G + TRNN D,1 + JRST DTLX + MOVEI E,", + IDPB E,G +DTLX: CAMN D,[-1] + JRST DTL2 + SOJN D,DTL + MOVEI E,"1 + IDPB E,G + MOVEI E,"9 + IDPB E,G + JRST DTL + +DTL2: MOVEI D,4 + MOVE C,[440600,,BUF+3] +DTL3: ILDB E,C ; OUTPUT TIME AS HH,MM + ADDI E,40 + IDPB E,G + CAIE D,3 + JRST DTL4 + MOVEI E,", + IDPB E,G +DTL4: SOJG D,DTL3 + MOVEI B,16. + MOVEM B,OCHCNT + PUSHJ P,CRLF + HRRZ H,BUF ; SAVE SURVEY COUNT +MLOOP: MOVE B,[-10.,,BUF] + .IOT DSKI,B + HRRZ C,BUF + CAIE C,-1 + CAIN C,10000 + JRST OUTOVR ;-1 OR 10000 IS END OF FILE FLAG + CAIL C,400 + JRST MLOOP ;IGNORE HOST # NOT LES 400 + HLRZ D,BUF ;GET NEW FMT SOCKET# + CAIE D,1 ;OK IF SOCKET #1 + JUMPN D,MLOOP ;IF NOT 0, THEN NEW FILE, IGNORE SOCKET NOT = 1 + MOVEI D,3 + PUSHJ P,NUMOUT + MOVEI C,", + IDPB C,G + AOS OCHCNT + LDB C,A + MOVEI D,-5(C) + ADDI C,"0 + IDPB C,G + AOS OCHCNT + MOVEI C,", + IDPB C,G + AOS OCHCNT + MOVEI C,200. + JUMPN D,MLX2 + MOVE C,BUF+1 + IDIVI C,3 + SETZM D + MOVE E,[440300,,BUF+2] + PUSH P,H +MLX1: ILDB F,E + CAIN F,5 + AOS D + SOJG H,MLX1 + POP P,H + IDIV C,D +MLX2: MOVEI D,3 + PUSHJ P,NUMOUT + PUSHJ P,CRLF + JRST MLOOP + +OUTOVR: MOVEI A,"- + IDPB A,G + AOS OCHCNT + MOVEI A,"1 + IDPB A,G + AOS OCHCNT + PUSHJ P,CRLF + JRST DONEX + +; OUTPUT ROUTINE + +STOUT: ILDB D,C + SKIPN D + POPJ P, + IDPB D,G + AOS OCHCNT + JRST STOUT + +CRLF: MOVEI D,15 + IDPB D,G + AOS OCHCNT + MOVEI D,12 + IDPB D,G + AOS OCHCNT + POPJ P, + +NUMOUT: PUSH P,A + PUSH P,B + PUSH P,[-1] + MOVE A,C +NMLP: IDIVI A,10. + ADDI B,"0 + PUSH P,B + SOJG D,NMLP +NMLP2: POP P,B + JUMPL B,NMLPX + IDPB B,G + AOS OCHCNT + JRST NMLP2 + +NMLPX: POP P,B + POP P,A + POPJ P, + +BLIST: 410300,,BUF+2 + 360300,,BUF+2 + 330300,,BUF+2 + 300300,,BUF+2 + 250300,,BUF+2 + 220300,,BUF+2 + 170300,,BUF+2 + 140300,,BUF+2 + 110300,,BUF+2 + 060300,,BUF+2 + 030300,,BUF+2 + 000300,,BUF+2 + + +;FINISHED + +DONEX: NETWAIT NETO,4,5,120. + JRST DONE + JRST DONE ;ALL THAT WORK FOR NAUGHT + MOVE A,OCHCNT + ADDI A,4 + IDIVI A,5 + MOVNS A + HRLS A + HRRI A,OBUFFR + .IOT NETO,A + .NETS NETO, + JFCL +LOGLOS:: +DFAIL:: +DONE: .CLOSE NETO, + .CLOSE NETI, + .LOGOUT + .VALUE + ;INTERRUPT CODE +TSINT: 0 +RETURN: 0 + SKIPGE J,TSINT + JRST WRDTWO + SKIPG TSINT + JRST TSINTX ;NO INTRRUPTS TO SERVICE + TRNN J,IOCBIT ;IOC? + JRST NOTIOC ;NO + JRST INTLOS + +NOTIOC: TRNN J,CLKBIT ;CLOCK INTERRUPT? + JRST TSINTX ;NO + ADDI CLOCK,1 + CAIGE CLOCK,240. ;TWO MINUTES?? + JRST TSINTX ;NO + JRST INTLOS + +WRDTWO: TRNN J,OUTBIT + JRST TESTIN + .STATU NETO,K + LDB K,[140400,,K] + CAIL K,5 + CAILE K,6 + JRST INTLOS +TESTIN: TRNN J,INBIT + JRST TSINTX + .STATU NETI,K + LDB K,[140400,,K] + CAIN K,5 + JRST TSINTX + CAIE K,10 + CAIN K,11 + JRST TSINTX + +INTLOS: MOVEI K,DONE + MOVEM K,RETURN +TSINTX: .DISMI RETURN + + + END START + \ No newline at end of file