diff --git a/README.md b/README.md index c0018c42..c739e892 100644 --- a/README.md +++ b/README.md @@ -192,6 +192,7 @@ A list of [known ITS machines](doc/machines.md). - PRINT, print long-named files. - PROBE, probe inside job and display various information about it. - PRUFD, list files on disk volume. + - PSEND, super sender. - PTY, pseudo-tty. - PWMAIL, a limited version of MAIL when not yet logged in under PWORD. - PWORD, replacement for sys;atsign hactrn that requires registered logins. diff --git a/build/build.tcl b/build/build.tcl index a051b7f9..65e8a86c 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -792,6 +792,10 @@ respond "*" ":link sys1;ts s,sys;ts send\r" respond "*" ":link sys3;ts snd,sys;ts send\r" respond "*" ":link sys3;ts sned,sys;ts send\r" +# psend +respond "*" ":midas sys3;ts psend_sysen2;b\r" +expect ":KILL" + # more lisp packages respond "*" ":link lisp;tty fasl,liblsp;tty fasl\r" respond "*" "complr\013" diff --git a/src/sysen2/b.5 b/src/sysen2/b.5 new file mode 100755 index 00000000..4f19c08b --- /dev/null +++ b/src/sysen2/b.5 @@ -0,0 +1,132 @@ +;-*-Midas-*- + + TITLE Super Sender! + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Format: +;;; +;;; :PSEND ^C +;;; +;;; Output: +;;; +;;; [Msg from UNAME:] +;;; +;;; +;;; +;;; Only one line JCL sent, and only same-site sends allowed. +;;; +;;; Written By SPC@AI +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +A=1 ;General purpose +B=2 +C=3 +J=10 ;Pointer to JCL + +CLIC==1 ;CLI output chnl +USRC==2 ;USR: chnml to see if target logged in +JCLEN==20 ;Allow 80. chars of jcl + +UNAME: 0 ;Your uname +TARGET: 0 ;Uname of who you're sending to. + +COLON: ": +BLM: "M +LS: "s +LG: "g +LEF: "f +LR: "r +LO: "o +LM: "m +SP: 40 ;Space +OPENB: "[ +CLOSEB: "] +CR: 15 ;Carriage Return + +JCLBUF: BLOCK JCLEN + -1 + +DEFINE SYSCAL OP,ARGS + .CALL [SETZ ? SIXBIT /OP/ ? ARGS ((SETZ))] +TERMIN + +BEGIN: .BREAK 12,[..RJCL,,JCLBUF] ;Get JCL + MOVE J,[440700,,JCLBUF] ;Make pointer to same + MOVE A,[440600,,TARGET] ;Pointer (6bit) to target + .SUSET [.RUNAME,,UNAME] + +GETARG: ILDB B,J ;Get a char from JCL + CAME B,SP ;Uname ends in any of ^C, ^M, ^_, or Space + CAIN B,^M + JRST GETEXT + CAIE B,^_ + CAIN B,^C + JRST GETEXT + AOS C ;This is the Cth char + CAMG B,SP + ADDI B,100 + CAIL B,140 + SUBI B,40 + SUBI B,40 ;Make sixbit + IDPB B,A ;Put chr in Target + CAIE C,6 ;Was this 6th char (last possible)? + JRST GETARG ;Nope. + ILDB B,J + +GETEXT: CAME B,SP + .VALUE [ASCIZ / +:No message??  :KILL /] + SYSCAL OPEN,[%CLBIT,,.BII + %CLIMM,,USRC + [SIXBIT /USR/] ;Target logged in? + TARGET + [SIXBIT /HACTRN/]] + .VALUE [ASCIZ / +:Not logged in.  :KILL /] + .CLOSE USRC, + +SENDIT: SYSCAL OPEN,[%CLBIT,,.UAO + %CLIMM,,CLIC + [SIXBIT /CLI/] ;Open CLI to send + TARGET + [SIXBIT /HACTRN/]] + .VALUE [ASCIZ / +:The cretin is gagged..  :KILL /] + .IOT CLIC,[177] + .IOT CLIC,OPENB ;"[" + .IOT CLIC,BLM + .IOT CLIC,LS + .IOT CLIC,LG + .IOT CLIC,SP + .IOT CLIC,LEF + .IOT CLIC,LR + .IOT CLIC,LO + .IOT CLIC,LM + .IOT CLIC,SP + MOVE A,UNAME + SETZ B, + ROTC A,6 ;UNAME + ADDI B,40 + .IOT CLIC,B + JUMPN A,.-4 + .IOT CLIC,CLOSEB + .IOT CLIC,COLON + .IOT CLIC,CR + .IOT CLIC,SP + .IOT CLIC,SP + +OUTMSG: ILDB C,J + CAIE C,^M + CAIN C,^C + JRST CLOSE + CAIN C,^_ + JRST CLOSE + .IOT CLIC,C + JRST OUTMSG + +CLOSE: .CLOSE CLIC, + .BREAK 16,44000 + + END BEGIN