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:
@@ -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.
|
||||
|
||||
@@ -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
313
src/sysen2/msplit.13
Normal 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
|
||||
Reference in New Issue
Block a user