|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 8448 (0x2100)
Types: TextFile
Names: »gensareatxt«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦this⟧ »gensareatxt«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦this⟧ »gensareatxt«
\f
; file processor utility program, gensarea page 1
; this is a file processor utility program for
; the RC4000 installation at H.C.Ørsted Institute,
; Copenhagen.
;
; this installaton has a special command to the
; operating system, s, which makes it possible to
; read s-commands from a backing-storage-area.
;
; in order to minimize the extra code needed in s,
; the area must obey a special format.
;
; this program, gensarea, reads a text from current
; input or from a file specified and outputs it
; on the specified output file in the format
; required by s.
;
; the format is described in the documentation of
; the change of s.
;
; too, this program changes the content-field of
; the catalog-entry corresponding to the output
; file. the value set at present is: 100.
;
; erik lilholt
; april, 1973.
; H.C. Ørsted Institute, Copenhagen
;
; entry to the program at the 4.th word:
;
s. a10,c20,d10,e10,g2
w. k=h55
c20: c19, 0 ;length of progrm, 0
jl. a5. ; entry: goto initialize
; constants, used by program:
c0: 0 ; output name address
c1: 0 ; input name address or zero (current input)
c2: 0 ; working cell for register save
c3: 1<16 ; bit in partial word
c4= 100 ; content set in catalog entry
c5= 46 ; simulated em from teletypes
c6: 0 ; number of characters (total)
c7= 760 ; max characters allowed (1 segment)
c8: 0 ; number of characters (in current line)
c9= 70 ; max characters pr. line
d0: <:***gensarea<32><0>:> ; textconstants
d1: <:call<10><0>:>
d2: <:param<10><0>:>
d3: <:connect input<10><0>:>
d4: <:connect output<10><0>:>
d5: <:change entry<10><0>:>
d6: <:more than one segment not allowed<10><0>:>
d7: <:line too long<10><0>:>
\f
; file processor utility program, gensarea page 2
; main program
a0: jl. w3 h25.-2 ; rep: w2:= inchar(current input)
rl. w1 c6.
al w1 x1+1 ; chars total:= chars total+1
rs. w1 c6.
sl w1 c7 ; if chars total>max-chars then
jl. e5. ; alarm(<:more than one segment...:>)
rl. w1 c8. ; chars on line:=
al w1 x1+1 ; chars on line+1
rs. w1 c8. ;
sl w1 c9 ; if chars on line>=max on line then
jl. e6. ; alarm(<:line too long:>
se w2 25 ; if w2=em or
sn w2 10 ; w2=nl or
jl. a1. ;
sn w2 c5 ; w2=simulated em then
jl. a1. ; goto end-line
al. w1 g0. ; outchar(char, output-zone)
jl. w3 h26. ;
jl. a0. ; goto rep
a1: rs. w2 c2. ; end-line: save w2
al w0 0 ; chars on line:= 0
rs. w0 c8. ;
al. w1 g0. ;
a2: rl w0 x1+h2+4 ; next: if partial word.bit16=0 then
sz. w0 (c3.) ; begin
jl. a3. ;
al w2 0 ; outchar(null,output-zone)
jl. w3 h26. ;
rl. w2 c6. ; chars:= chars+1
al w2 x2+1
rs. w2 c6.
jl. a2. ; goto next
; end;
a3: al w2 10 ; outchar(nl, output-zone)
jl. w3 h26. ;
rl. w2 c2. ; restore w2
se w2 10 ; if char=nl then
jl. a4. ;
jl. a0. ; goto rep
a4: al w2 25 ; close up(em, output-zone)
jl. w3 h34. ;
jl. w3 h79. ; terminate zone(output-zone)
al. w1 g2. ; change entry:
rl. w3 c0. ;
jd 1<11+42 ; lookup entry(name, tail)
al w0 c4 ; set content
hs w0 x1+16 ;
jd 1<11+44 ; change entry(name, tail)
se w0 0 ; if result<>0 then
jl. e4. ; alarm(<:change entry:>)
al w2 0 ; ok:= true
jl. h7. ; goto end program
\f
; file processor utility program, gensarea page 3
; initialize program:
a5: al w0 x2+2 ; save address of output name
rs. w0 c0.
bl w0 x3 ; check left side in call
se w0 6 ;
jl. e0. ;
ba w3 x3+1 ; right hand side
bl w0 x3 ;
sh w0 2 ;
jl. a6. ;
bl w0 x3+1 ; right hand side present.
se w0 10 ; check text-type
jl. e1. ;
al w0 x3+2 ; save start-address of text
rs. w0 c1. ;
ba w3 x3+1 ; check only one parameter.
bl w0 x3 ;
sl w0 4 ;
jl. e1. ;
; call of program ok.
; initialize zones
a6: al. w1 g0. ; w1:= output zone descriptor
al. w3 g1. ; w3:= share descriptor
al w2 x2-1 ;
rs w2 x1+h0+2 ; set last of buffer
rs w2 x3+4 ; set last shared
al w2 x2-511 ;
rs w2 x3+2 ; set first shared
al w2 x2-1 ;
rs w2 x1+h0+0 ; set base-buffer area
rs w3 x1+h0+4 ; set used share,
rs w3 x1+h0+6 ; first share and
rs w3 x1+h0+8 ; last share.
al w0 0 ; give up mask:=
rs w0 x1+h2+0 ; give up action:= 0;
rs w0 x1+h2+2 ;
rl. w2 c1. ; if right hand side in call then
sn w2 0 ; begin
jl. a8. ;
jl. w3 h29.-4 ; stack current input
rl. w2 c1. ; restore w2
jl. w3 h27.-2 ; connect current input
se w0 0 ; if result<>0 then
; alarm(<:connect input:>)
jl. e2. ; end
a8: rl. w2 c0. ;
al. w1 g0. ;
jl. w3 h28. ; connect output
se w0 0 ; if result<>0 then
jl. e3. ; alarm(<:connect output:>)
; end of initialize
jl. a0. ; goto main program.
\f
; file processor utility program, gensarea page 4
; procedure alarm(text)
; outputs the text on current output and terminates
; the program with the ok-bit set to false.
e0: am d1-d2 ; text:= <:call:> or
e1: am d2-d3 ; <:param:> or
e2: am d3-d4 ; <:connect input:> or
e3: am d4-d5 ; <:connect output:> or
e4: am d5-d6 ; <:change entry:> or
e5: am d6-d7 ; <:more than one segment...:> or
e6: al. w2 d7. ; <:line too long:>
al. w0 d0. ;
jl. w3 h31.-2 ; outtext(<:***gensarea:>)
al w0 x2 ;
jl. w3 h31.-2 ; outtext(text)
; comment: w0 now points to the first word
; after the text written on current
; output
; this is used to destinguish between
; the two cases: 1) output has been connected
; and the document should be released
; and 2) output has not yet been connected
al w2 1 ; ok:= false
sh. w0 d5. ; if text==output has been connected
jl. h7. ; then goto end program
al. w1 g0. ; terminate zone(output)
jl. w3 h79. ;
jl. h7. ; goto end program
c19=k-c20 ; length of program
; output zone and share descriptors
g0=k+h3-h0
g1=k+h5
g2=k+h5+h6 ; tail area for lookup entry
e. ; end slang segment
e. ; end block for fp-names
▶EOF◀