From b580f9f06b3cbee8ae91a5eab2f3a225447ecb1a Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Mon, 8 Oct 2018 13:53:33 +0200 Subject: [PATCH] Chaosnet ECHO server. --- build/misc.tcl | 4 +++ doc/programs.md | 1 + src/sysnet/echo.5 | 77 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100755 src/sysnet/echo.5 diff --git a/build/misc.tcl b/build/misc.tcl index bc822c21..017789e1 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -95,6 +95,10 @@ expect ":KILL" respond "*" ":midas sys1;ts dir_bawden;dir^k\r" expect ":KILL" +respond "*" ":midas sysbin;_sysnet;echo\r" +expect ":KILL" +respond "*" ":link device; chaos echo, sysbin; echo bin\r" + respond "*" ":midas sysbin;chtn_sysnet;chtn\r" expect ":KILL" diff --git a/doc/programs.md b/doc/programs.md index 6633d45e..06b1a9bc 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -75,6 +75,7 @@ - DSKDEV/D, short disk device. - DSKUSE, disk usage information. - DUMP/LOAD, tape backup and restore. +- ECHO, Chaosnet echo server. - ELIZA, the original psychiatrist game. - EMACS, editor. - EXECVT, convert 20x EXE (SSAVE) file to ITS BIN (PDUMP) file. diff --git a/src/sysnet/echo.5 b/src/sysnet/echo.5 new file mode 100755 index 00000000..eb28f6e3 --- /dev/null +++ b/src/sysnet/echo.5 @@ -0,0 +1,77 @@ +;-*-midas-*- +title echo + +t=10 +tt=11 + +chaich=0 +chaoch=1 + +.insrt system;chsdef + +debug: 0 +chapkt: block %cpmxw + +die: 0 + skipn debug + .logout + .value + +rcvpkt: setz ? 'pktiot ? movei chaich ? setzi chapkt +sndpkt: setz ? 'pktiot ? movei chaoch ? setzi chapkt + +go: .close 1, + .call [setz ? 'chaoso ? movei chaich ? movei chaoch ? setzi 5] + .lose %lssys + move t,[.byte 8 ? %colsn ? 0 ? 0 ? 4] + movem t,chapkt + move t,[.byte 8 ? "E ? "C ? "H ? "O] + movem t,chapkt+%cpkdt + .call sndpkt ;setup listen for connection + .lose %lssys + movei t,60.*60. + skipe debug + hrloi t,177777 + .call [setz ? 'netblk ? movei chaich ? movei %cslsn ? t ? setzm t] + .lose %lssys + caie t,%csrfc + jsr die + .call rcvpkt ;get the rfc + .lose %lssys + movei t,%coopn + dpb t,[chapkt+$cpkop] + .call sndpkt ;accept it + .lose %lssys + + skipe debug ;debugging? + jrst loop ;yes, dont try to login then + ldb t,[chapkt+$cpksa] ;get source host address + move tt,[sixbit /000C00/] ;convert host number to sixbit + dpb t,[220300,,tt] + lsh t,-3 + dpb t,[300300,,tt] + lsh t,-3 + dpb t,[360300,,tt] + .suset [.ruind,,t] ;incoroporate user index also + dpb t,[000300,,tt] + lsh t,-3 + dpb t,[060300,,tt] + move t,tt ;save copy for xuname + .call [setz + sixbit /LOGIN/ + tt ? [sixbit /CHAOS/] ? setz t] + aoja tt,.-1 ;error, perhaps need to try other uname + .suset [.sjname,,[sixbit /ECHO/]] + .call [setz ? 'detach ? movei %jself ? andi 3 ] + jsr die + +loop: .call rcvpkt ;get a packet + .lose %lssys + ldb t,[chapkt+$cpkop] + caige t,%codat ;is this data? + jsr die ;no, we are done then + .call sndpkt ;yes, send it right back + .lose %lssys + jrst loop + +end go