1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-30 21:41:56 +00:00

Added MSPLIT.

This commit is contained in:
Eric Swenson
2016-12-10 18:39:29 -08:00
parent 3dd6c71095
commit 43a514defe
3 changed files with 318 additions and 0 deletions

View File

@@ -153,6 +153,7 @@ There's a [DDT cheat sheet](doc/DDT.md) for Unix users.
- METER, displays system metering information.
- MLDEV, MLSLV, Allows access to remote systems as devices (e.g. DB:).
- MODEMS, modems gragon.
- MSPLIT, split a file into smaller parts.
- MTBOOT, make bootable tapes.
- NAME, Shows logged in users and locations, aka FINGER.
- NETIME, network time dragon.

View File

@@ -851,6 +851,10 @@ expect ":KILL"
respond "*" ":midas sys2;ts loadp_sysen1;loadp\r"
expect ":KILL"
# MSPLIT
respond "*" ":midas sys2;ts msplit_sysen2;msplit\r"
expect ":KILL"
# ndskdmp tape
respond "*" ":link kshack;good ram,.;ram ram\r"
respond "*" ":link kshack;ddt bin,.;@ ddt\r"

313
src/sysen2/msplit.13 Normal file
View File

@@ -0,0 +1,313 @@
; -*- Midas -*-
title MSPLIT - Split a mail file into smaller pieces.
a=:1
b=:2
c=:3
d=:4
e=:5
t=:6
tt=:7
x=:10
y=:11
z=:12
bc=:13
bp=:14
p=:17
ch==:0,,-1
chttyi==:1
chttyo==:2
chdski==:3
chdsko==:4
chprobe==:5
%fr==:0,,525252
%fl==:1,,525252
call=:pushj p,
return=:popj p,
save==:push p,
rest==:pop p,
flose=:.lose %lsfil
slose=:.lose %lssys
pause=:.break 16,100000
quit=:.logout 1,
tyi=:.iot chttyi,
tyo=:.iot chttyo,
define bltdup org,len
move tt,[<org>,,<org>+1]
blt tt,<org>+<len>-1
termin
define syscall name,args
.call [setz ? .1stwd sixbit /name/ ? args(400000)]
termin
define conc foo,bar
foo!bar!termin
; JSP T,LOSE is like .LOSE %LSSYS(TT) or SLOSE (TT)
lose: syscall lose,[movei %lssys(tt) ? movei -2(t)]
slose
popj1: aos (p)
cpopj: return
rfn"$$pfn==:1
rfn"$$rfn==:1
.insrt dsk:syseng;rfn >
rsixtp: cain a,",
aos (p)
psixtp: return
format"$$pfn==:1
format"pfn==:rfn"pfn
format"$$pcode==:1
.insrt dsk:syseng;format >
outstr: syscall siot,[movei chttyo ? a ? b]
slose
return
define format &string&,args
call [
call $format
.zzz.==-1
irp arg,,[args]
save arg
.zzz.==.irpcnt
termin
hrroi a,[ascii string]
movei b,.length string
movni c,.zzz.+1
jrst format"format]
termin
$forma: save a
save b
save c
call @-3(p)
rest c
rest b
rest a
rest (p)
return
.vector pdl(lpdl==:100.)
.vector buffer(lbuffer==:4000)
usrvar: sixbit /OPTION/ ? tlo %opint\%opopc
sixbit /MASK/ ? move [%pipdl]
sixbit /SNAME/ ? movem ifile+3
sixbit /XUNAME/ ? movem ifile+1
sixbit /OPTION/ ? movem a
lusrvar==:.-usrvar
go: move p,[-lpdl,,pdl-1]
.open chttyi,[.uai,,'tty ? setz ? setz]
slose
.open chttyo,[.uao\%tjdis,,'tty ? setz ? setz]
slose
move t,[-lusrvar,,usrvar]
syscall usrvar,[movei %jself ? t]
slose
move t,[ifile,,ofile]
blt t,ofile+3
tlnn a,%opcmd
jrst go1
setzm buffer+0
bltdup buffer,lbuffer-1
movsi t,(.byte 7 ? ^M ? ^M)
movem t,buffer+lbuffer-1
.break 12,[..rjcl,,buffer]
move d,[440700,,buffer]
movei b,ifile
call rfn"rfn
move t,[ifile,,ofile]
blt t,ofile+3
caie a,",
jrst go1
movei b,ofile
call rfn"rfn
go1: syscall open,[movsi .bai ? movei chdski ? move ifile+0
move ifile+1 ? move ifile+2 ? move ifile+3]
flose
syscall rfname,[movei chdski ? movem ifile+0
movem ifile+1 ? movem ifile+2 ? movem ifile+3]
slose
move a,ifile+2
lsh a,-6
tlo a,(sixbit /_/)
syscall open,[movsi .bai\%donrf\%donlk ? moves tt
movei chprobe ? move ifile+0
move ifile+1 ? move a ? move ifile+3]
jsp t,go2
exch a,ifile+2
movei t,ifile
format "~&File ~F exists. Perhaps a crash occured",t
exch a,ifile+2
format "~&during a previous attempt to split ~F?",t
quit
go2: caie tt,%ensfl
jrst lose
movei t,ifile
format "~&Renaming ~F",t
exch a,ifile+2
format " to be ~F.",t
syscall renmwo,[movei chdski ? move ifile+1 ? move ifile+2]
slose
setom bufflg
call newbuf
jumpe bc,done
move a,ofile+2
call sixnrm
loop: movem a,ofile+2
syscall open,[movsi .bai\%donrf\%donlk ? moves tt
movei chprobe ? move ofile+0
move ofile+1 ? move ofile+2 ? move ofile+3]
jsp t,loop1
next: move a,ofile+2
call sixaos
jrst loop
loop1: caie tt,%ensfl
jrst lose
movei t,ofile
format "~&Creating ~F.",t
syscall open,[movsi .uao ? movei chdsko ? move ofile+0
move ofile+1 ? move ofile+2 ? move ofile+3]
flose
setzi a,
jrst outlp
out: syscall siot,[movei chdsko ? move bp ? move bc]
slose
call newbuf
jumpe bc,done
outlp: add a,bc
camge a,size
jrst out
move b,bp
move c,bc
scan: ildb t,b
caie t,^_
sojg c,scan
sojle c,out
ildb t,b
caie t,^M
sojg c,scan
sojle c,out
ildb t,b
caie t,^J
sojg c,scan
sojl c,out
exch c,bc
sub c,bc
syscall siot,[movei chdsko ? move bp ? move c]
slose
jumpg bc,next
call newbuf
jumpg bc,next
done: movei t,ifile
format "~&Deleting ~F.",t
syscall delewo,[movei chdski]
slose
quit
.scalar bufflg ; -1 if nothing held
newbuf: move bp,[440700,,buffer]
move buffer+lbuffer-1
movem buffer+0
move t,[-<lbuffer-1>,,buffer+1]
aosn bufflg
move t,[-lbuffer,,buffer]
.iot chdski,t
jumpl t,newbf1
movei bc,5*<lbuffer-1>
return
newbf1: setom bufflg ; Nothing held back now...
movei bc,-buffer(t)
jumpe bc,cpopj
imuli bc,5
ldb tt,[.bp <177_1>,-1(t)]
caie tt,^C
cain tt,^@
soja bc,.+2
return
ldb tt,[.bp <177_8>,-1(t)]
caie tt,^C
cain tt,^@
soja bc,.+2
return
ldb tt,[.bp <177_15.>,-1(t)]
caie tt,^C
cain tt,^@
soja bc,.+2
return
ldb tt,[.bp <177_22.>,-1(t)]
caie tt,^C
cain tt,^@
soj bc,
return
sixaos: move t,a
andi t,77
cail t,'A
caile t,'Z
jrst sixao1
aos a
caie t,'Z
return
lsh a,-6
call sixaos
lsh a,6
sixao1: trz a,77
tro a,'A
return
sixnrm: movei t,77
movei tt,'A
sixnr1: tdne a,t
return
tdo a,tt
lshc t,6
jrst sixnr1
tsint:
loc 42
-ltsint,,tsint
loc tsint
400000,,p
ltsint==:.-tsint
dismis: setz ? sixbit /DISMIS/ ? movsi 400000 ? setz p
size: 5*2000*30. ; Aim for 30 blocks
cnstnts:
constants
variables
ifile: sixbit /DSK/
-1
sixbit /MAIL/
-1
ofile: block 4
patch::
pat: block 100.
epatch: -1 ; Make memory exist, end of patch area
ffaddr:
ffpage==:<ffaddr+1777>_-12
end go