|
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: 39168 (0x9900) Types: TextFile Names: »binin3tx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »binin3tx «
; rc 1977.02.04 fp utility, binin, page ...1... ; the program is translated like ; (binin=slang text entry.no ; binin) b. g4 w. ; for insertproc d. p.<:fpnames:> l. ; b. h99 ; begin block: fp names; this block must always ; w. ; be loaded from some where; s. a32, b26, c16, d26, f16, g9, i9 ; w. ; k = h55 d22: i4 ; length of binin 0 ; empty; jl. d20. ; entry binin: goto initialize binin; ; output zone descriptor (single buffer): ; part 0, buffer and share description: w. 0 ; h0 base of buffer area 0 ; h0+2 last of buffer area 0 ; h0+4 used share 0 ; h0+6 first share 0 ; h0+8 last share ; part 1, process description: h. 0 , 0 ; h1 1<11+mode, kind w. 0 , r.4 ; h1+2 document name 0 ; h1+10 name address 0 ; h1+12 file count 0 ; h1+14 block count 0 ; h1+16 segment count ; part 2, status handling: 0 ; h2 give up mask 0 ; h2+2 give up action 0 ; h2+4 partial word 0 ; h2+6 free ; part 3, record description: g1: 0 ; h3 record base 0 ; h3+2 last byte 0 ; h3+4 record length 0 ; h3+6 free ; part 4, users parameters 0 ; h4 free 0 ; h4+2 free 0 ; h4+4 free ; share descriptor: g8: 0 ; 0 state 0 ; 2 first shared 0 ; 4 last shared 0 , r.8 ; 6 latest message 0 ; 22 top transferred \f ; rc 22.05.72 fp utility, binin, page 2 ; input zone descriptor (single buffer): ; part 0, buffer and share description: w. 0 ; h0 base of buffer area 0 ; h0+2 last of buffer area 0 ; h0+4 used share 0 ; h0+6 first share 0 ; h0+8 last share ; part 1, process description: h. 0 , 0 ; h1 1<11+mode, kind w. 0 , r.4 ; h1+2 document name 0 ; h1+10 name address 0 ; h1+12 file count 0 ; h1+14 block count 0 ; h1+16 segment count ; part 2, status handling: 5<16 ; h2 give up mask (end document, file mark) 0 ; h2+2 give up action 0 ; h2+4 partial word 0 ; h2+6 free ; part 3, record description: g2: 0 ; h3 record base 0 ; h3+2 last byte 0 ; h3+4 record length 0 ; h3+6 free ; part 4, users parameters 0 ; h4 free 0 ; h4+2 free 0 ; h4+4 free ; share descriptor: g6: 0 ; 0 state 0 ; 2 first shared 0 ; 4 last shared 0 , r.8 ; 6 latest message 0 ; 22 top transferred \f ; rc 19.02.1973 fp utility, binin, page 3 ; procedure inbyte: ; call : jl. w3 c0. ; exit 0 : end segment (sumerror) , w0, w1 unchanged ; exit 2 : end segment (ok) , - - - ; exit 4 : normal, w2 = byte , - - - b. a11, b10 ; begin block: inbyte, exit fp w. ; 0 ; saved w0 b0: 0 ; saved w1 b1: 0 ; saved return (inbyte) b2: 0 ; saved return ( next char) b3: 2.111111 ; mask b4:f6:-1 ; sum b5: <: sumerror<0>:>; b6: 2.111110100011110010111100 ; mask for hard errors b7: 1<16 ; bit 7, i.e. file mark b8: 0 ; char1 d24: -1 ; char count b10: 1<22 ; parity bit h. ; parity table: b9: 0 ; 0000 1 ; 0001 1 ; 0010 0 ; 0011 1 ; 0100 0 ; 0101 0 ; 0110 1 ; 0111 1 ; 1000 0 ; 1001 0 ; 1010 1 ; 1011 0 ; 1100 1 ; 1101 1 ; 1110 0 ; 1111 w. ; end parity table \f ;rc 19.02.1973 fp utility, binin, page 3a c0: ds. w1 b0. ; inbyte: rs. w3 b1. ; save(w0,w1,w3); jl. w3 a1. ; exit := saved return; al w0 x2 ; next char; rs. w0 b8. ; char1 := byte; jl. w3 a1. ; next char; ls w0 6 ; byte := ba w2 1 ; byte + char1 shift 6; rl. w3 b1. ; a0: dl. w1 b0. ; finis: restore(w0,w1); jl x3+4 ; return(exit+6); a11: rl. w3 b10. ; parity error: jl. a4. ; status:=parity;goto giveup; a1: rs. w3 b2. ; next char: save return; d4: al. w1 g2. ; repeat: w1 := addr(input zone descr); am. (g0.) ; enter fp: jl w3 h25 ; byte := inchar; sn w2 0 ; if char = 0 jl. a5. ; then terminate; al w3 15 ; check parity: la w3 4 ; bl. w1 x3+b9. ; w1:=parity(rightmost 4 bits) ld w3 -4 ; + ba. w1 x2+b9. ; parity(leftmost 4 bits); ld w3 4 ; if parity se w1 1 ; not odd jl. a11. ; then goto parity error; sz w2 1<6 ; if char = sum character then jl. a2. ; goto check sum; rl. w0 b8. ; restore(char1); la. w2 b3. ; byte := bits(6,11,byte); rx. w2 b4. ; swap(byte,sum); wa. w2 b4. ; byte := byte + sum; rx. w2 b4. ; swap(byte,sum); jl. (b2.) ; return; \f ; rc 22.05.1972 fp utility, binin, page 4 a2: ws. w2 b4. ; check sum: la. w2 b3. ; byte := bits(6,11,byte-sum); sn w2 0 ; if sum = 0 then jl. a3. ; goto sum ok; al. w2 b5. ; sum error: jl. w3 c3. ; inmessage(<:sumerror:>); am -2 ; exit := exit - 2; a3: al w3 -2 ; sum ok: wa. w3 b1. ; exit := exit - 2; al w2 0 ; rs. w2 b4. ; sum := 0; jl. a0. ; goto finis; d0: sz w3 1 ; give up action on input file: jl. a4. ; if hard error then give up; so. w3 (b7.) ; if file mark then jl. a6. ; begin bz w0 x2+6 ; if operation = input sn w0 3 ; then goto terminate jl. a5. ; else goto return to fp jl. a7. ; end; a6: am (0) ; end document: rl w0 4 ; sn w0 0 ; if no of chars = 0 jl. a5. ; then terminate; a7: am. (g0.) ; return to fp: jl h36 ; goto after check; a5: jl. w3 c14. ; terminate: terminate input; jl. d5. ; goto more input; a4: rs. w3 f0. ; give up: al. w0 g2.+h1+2 ; rs. w0 f9. ; save doc name addr; ; fp result := logical status; d1: al w2 10 ; exit fp: am. (g0.) ; w2 := 10; jl w3 h26-2 ; writechar(new line); rl. w2 f0. ; w2 := fp result; rl. w1 f9. ; w1 := addr(doc name); am. (g0.) ; jl h7 ; goto fp end program; i. ; id list e. ; end block: inbyte, exit fp c6: am. (g0.) ; writetext: jl h31-2 ; goto fp outtext; c7: am. (g0.) ; writeinteger: jl h32-2 ; goto fp outinteger; c14: al. w1 g2. ; terminate input: am. (g0.) ; w1 := addr(input zone descr); jl h79 ; goto terminate zone; g0: 0 ; fp base f0: 0 ; fp result f9: 0 ; addr(doc name) \f ; rc 14.5.1970 fp utility, binin, page 5 ; procedure outbyte: ; call: w2 := byte; jl. w3 c1. ; exit: w0, w1 unchanged b. a1, b0 ; begin block: outbyte w. ; 0 ; saved return(outbyte) b0: 0 ; saved w0 i0 = k + 1 ; check c1: se w3 x3 ; ch ; outbyte: jl x3 ; if check then return; ds. w0 b0. ; save(w0,return); a0: rl. w0 g1.+h3 ; test record base: sl. w0 (g1.+h3+2) ; if record base >= last byte then jl. a1. ; goto test block; ba. w0 1 ; rs. w0 g1.+h3 ; record base := record base + 1; hs. w2 (g1.+h3) ; byte(record base) := w2; al w0 0 ; hs. w0 i1. ; empty := false; rl. w3 f10. ; al w3 x3+1 ; rs. w3 f10. ; length := length + 1; dl. w0 b0. ; restore(w0,w1); jl x3 ; return; a1: bz. w0 g1.+h1+1 ; test block: al. w3 a0. ; set return(test record base); se w0 18 ; if process kind <> 18 then jl. c2. ; goto output block; jl. w2 c9. ; inalarm(<:core size:>); <: core size<0>:> ; i. ; id list e. ; end block outbyte d26: rs. w3 f0. ; give up output: al. w1 g1.+h1+2 ; save fp result; rs. w1 f9. ; save addr(doc name); jl. d1. ; goto exit fp; \f ; rc 18.08.1972 fp utility, binin, page 6 ; procedure output block: ; call: jl. w3 c2. ; exit: w0, w1, w2 unchanged b. a1, b3 ; begin block: output block, terminate output w. ; 0 ; saved w0 b0: 0 ; saved w1 b1: 0 ; saved return c2: ds. w1 b0. ; output block: bz. w0 i0. ; save(w0,w1); i1 = k + 1 ; empty ; sn w3 x3+1;empty; se w0 0 ; if mpty or check then jl. a0. ; return; rs. w3 b1. ; save return; al w0 -2 ; remove last bit of record base; la. w0 g1.+h3 ; bz. w1 g1.+h1+1 ; se w1 4 ; if process kind <> 4 then rs. w0 g8.+10 ; last of transfer := record base ; al. w1 g1. ; w1 := addr(output zone descr); am. (g0.) ; enter fp: jl w3 h23 ; output block; al w0 1 ; hs. w0 i1. ; empty := true; rl. w3 b1. ; restore(return); a0: dl. w1 b0. ; restore(w0,w1); jl x3 ; return; \f ; rc 18.08.1972 fp utility, binin, page 6a c10: bz. w0 i0. ; terminate output: se w0 0 ; if check then jl x3 ; return; rs. w3 b2. ; save(return); jl. w3 c2. ; bz. w0 g1.+h1+1 ; output block; i5 = k + 1 ; no output ; se w3 x3 ; if -, no output se w0 18 ; and process kind = 18 then jl. a1. ; begin al w0 0 ; hs. w0 i5. ; filemark:= no output := true; a1: al. w1 g1. ; end; am. (g0.) ; w1 := addr(output zone descriptor); jl w3 h79 ; terminate zone; c. h57<3 ; if monitor 3 version then include the following: bz w2 x1+h1+1 ; the outputfile must be reduced to the al w3 x1+h1+2 ; absolute minumum, in case of backing storage: al. w1 h54. ; jd 1<11+42 ; lookup entry(outfilename, tailaddr); rl w0 x3+14 ; tail(0) := segment count (output zone); rs w0 x1 ; sn w2 4 ; if kind(output zone) = <bs> then jd 1<11+44 ; change entry(outfile name, tail); z. ; jl. (b2.) ; return; b2: 0 ; saved return b3: 10<12 ; message (write file mark) i. ; id list e. ; end block outblock, terminate output \f ; rc 06.10.1972 fp utility, binin, page 7 b. a7, b4 ; begin block: initialize input, initialize output w. ; a7: 1<23+4<12+10 ; mode.kind no.parity.reader 0 ; saved w0 b0: 0 ; saved w1 0 ; saved w2 b1: 0 ; saved w3 b2: <: input impossible<0>:> ; b3: <: output impossible<0>:>; b4: 0 , r.10 ; area for lookup input file descriptor f2: 0 , r.5 ; name of input file descriptor (+ 0) f3: 0, r.5 ; name of output file descriptor(+ 0) c12: ds. w1 b0. ; initialize input: ds. w3 b1. ; save(all registers); al. w1 b4. ; lookup input file: al. w3 f2. ; jd 1<11+42 ; se w0 0 ; if not found then jl. a5. ; goto check result; rl w0 x1 ; if mode.kind >= 0 sl w0 0 ; then goto connect; jl. a6. ; bz w3 1 ; w3:=kind; rl. w0 a7. ; if kind = 10 sn w3 10 ; then (reader) rs w0 x1 ; mode.kind := 1<23+4<12+10; am b4-f2 ; modify addr to file descr; a6: al. w2 f2. ; connect: al. w1 g2. ; w1:=addr(zone); am. (g0.) ; enter fp: jl w3 h27 ; connect input; a5: al. w3 d2. ; check result: set return(scan parameter list); al. w2 b2. ; w2 := addr(<:input impossible:>); se w0 0 ; if conect error then jl. c3. ; goto inmessage; bz. w0 g2.+h1+1 ; sn w0 10 ; if process kind = <reader> jl. a0. ; then goto exit; a4: se w0 18 ; if process kind = <magnetic tape> sn w0 4 ; or process kind = <area> then jl. a0. ; goto exit jl. c3. ; goto inmessage; a0: dl. w1 b0. ; exit: dl. w3 b1. ; restore(all registers); jl x3 ; return; \f ; rc 29.07.1971 fp utility, binin, page 8 c11: bz. w0 i0. ; initialize output: se w0 0 ; if check then jl x3 ; return; ds. w1 b0. ; save(all registers); ds. w3 b1. ; al. w1 g1. ; w1 := addr(output zone descr); al. w2 f3. ; w2 := addr(name of output file descr); al w0 1<1+1 ; if new area then connect one segment on disc; am. (g0.) ; enter fp: jl w3 h28 ; connect output; sn w0 0 ; if connect error then jl. a1. ; begin a2: al. w2 b3. ; connect alarm: jl. w3 c4. ; outmessage(<:output impossible:>); al w0 1 ; hs. w0 i0. ; check := true; rl. w2 b1.-2 ; goto exit; jl. a0. ; end; a1: bz. w0 g1.+h1+1 ; test content: se w0 4 ; if process kind = 4 sn w0 18 ; or process kind = 18 then jl. a3. ; goto update; jl. a2. ; goto connect alarm; a3: al w0 0 ; update: al w3 0 ; if content(file descriptor) = 4 then bz w1 x2+16 ; begin sn w1 4 ; segment count := 0; block := 0; ds. w0 g1.+h1+16 ; end; rl. w0 g1.+h1+16 ; rs. w0 f15. ; bssegment := segment count; al w0 0 ; hs. w0 i8. ; rel := 0; rs. w0 f10. ; length := 0; rs. w0 f11. ; total := 0; bz. w0 g1.+h1+1 ; se w0 18 ; if process kind <> 18 then jl. a0. ; goto exit; dl. w1 g1.+h0+2 ; first shared := base of buffer; ds. w1 g8.+4 ; last shared := last of buffer; bs. w0 1 ; al w1 x1+1 ; record base := first shared - 1; ds. w1 g1.+h3+2 ; last byte := last shared + 1; jl. a0. ; goto exit; i. ; id list e. ; end block: initialize input, initialize output \f ; rc 4.7.1969 fp utility, binin, page 8a b. a0, b3 ; begin block: alarm, message: w. ; b0: 0 ; saved w2 b1: 0 ; saved w3 c9: al w3 0 ; inalarm: message call := false; c3: al. w1 f2. ; inmessage: jl. a0. ; goto message1: c5: al w3 0 ; outalarm: message call := false; c4: al. w1 f3. ; outmessage: a0: ds. w3 b1. ; message1: al w2 x1 ; save(w2,w3); jl. w3 c8. ; message(name of i/o); rl. w0 b0. ; w0 := text address; jl. w3 c6. ; writetext; rl. w3 b1. ; restore(w3); se w3 0 ; if message call then jl x3 ; return; d3: jl. w3 c10. ; terminate exit: terminate output; jl. w3 c14. ; terminate input; jl. d1. ; goto exit fp; c8: rs. w3 b2. ; message: al. w0 b3. ; save return; jl. w3 c6. ; writetext(<:***binin:>); al w0 x2 ; jl. w3 c6. ; writetext(text parameter); al w3 1 ; rs. w3 f0. ; fp result := 1; jl. (b2.) ; return; b2: 0 ; saved return (message) b3: <:<10>***binin <0>:> i. ; id list e. ; end block: alarm, message \f ; rc 2.8.1969 fp utility, binin, page 9 f5: 1<22 ; segments f8: 0 ; first segment b22: 0 ; segment b0: <: in load <0>:> ; b21: 1<22 ; infinite d17: dl w1 x2+6 ; load: ds. w1 f3.+2 ; move name part of load dl w1 x2+10 ; command to name part of ds. w1 f3.+6 ; output file descriptor; rl w0 x2+12 ; rs. w0 f5. ; segments := load segments; jl. w3 c11. ; initialize output; d7: al w1 0 ; load program: segment := 0; a0: bz. w0 i7. ; next segment: sl. w1 (f8.) ; if segment >= first segment sn w0 0 ; and s then jl. a29. ; begin al w2 0 ; w2 := 0; jl. w3 c1. ; outbyte; jl. w3 c1. ; outbyte; ; end; a29: al w2 x1 ; ws. w2 f8. ; test := segment - first segment; sl. w2 (f5.) ; if test >= segments then jl. a4. ; goto finis load; a1: jl. w3 c0. ; next byte: inbyte; jl. a2. ; exit 0 : goto sumerror; jl. a3. ; exit 2 : goto end segment; sl. w1 (f8.) ; exit 4 : if segment >= first segment jl. w3 c1. ; then outbyte; jl. a1. ; goto next byte; a2: rs. w1 b22. ; sumerror: al. w0 b0. ; save segment; jl. w3 c6. ; writetext(<:in load:>); al. w0 f3. ; jl. w3 c6. ; writetext(name of output file); rl. w1 b22. ; restore segment; a3: al w1 x1+1 ; end segment: sh. w1 (f8.) ; segment := segment + 1; jl. a0. ; if segment <= first segment then ; goto next segment; i7 = k + 1 ; s ; sn w3 x3 ; if -,s jl. a30. ; goto test block; rs. w1 b22. ; save segment; rl. w0 f15. ; se. w0 (g1.+h1+16); if bssegment <> segment count then jl. a25. ; goto update segment; \f ; rc 2.8.1969 fp utility, binin, page 9a a28: rl. w0 f10. ; update buffer: bz. w3 i8. ; am. (g1.+h0) ; rs w0 x3 ; word(first of output + rel) := length; jl. a26. ; goto clear; a25: bz. w0 g1.+h1+1 ; update segment: se w0 4 ; if process kind <> 4 then jl. a28. ; goto update buffer; jl. w3 c16. ; rl. w0 f10. ; input bssegment; am. (f13.) ; i8 = k + 1 ; rel ; rs w0 0 ; word(bssegment base + rel) := length; jl. w3 c15. ; output bssegment; a26: al w2 0 ; clear: rl. w3 f11. ; wa. w3 f10. ; rs. w3 f11. ; total := total + length; ld w0 -9 ; rs. w3 f15. ; bssegment := total//512; al w3 0 ; ld w0 9 ; hs. w3 i8. ; rel := total mod 512; al w2 0 ; rs. w2 f10. ; length := 0; rl. w1 b22. ; restore segment; a30: bz. w0 g1.+h1+1 ; test block: sn w0 18 ; if process kind = 18 then jl. w3 c2. ; output block; al w2 0 ; sn w0 18 ; if process kind = 18 then hs. w2 i8. ; rel := 0; al w3 1 ; hs. w3 i5. ; no output := false; jl. a0. ; goto next segment; i6 = k + 1 ; other output a4: se w3 x3 ; finis load: if -, other output then jl. a22. ; begin jl. w3 c10. ; terminate output; jl. d6. ; goto next command; ; end; a22: ; prepare next source: al. w3 d7. ; w3 := <load program>; jl. d25. ; goto store return; \f ; rc 2.8.1969 fp utility, binin, page 9b b. a1, b0 ; segment transfer w. ; f10: 0 ; length; f11: 0 ; total; f12: 0 ; message: operation; f13: 0 ; first core; f14: 0 ; last core; f15: 0 ; bssegment; f16: 0,r.8; answer; c15: am 2 ; output bssegment: c16: al w0 3 ; input bssegment: hs. w0 f12. ; set operation; rs. w3 b0. ; save return; a0: al. w1 f12. ; repeat: al. w3 g1.+h1+2 ; w1 := message address; jd 1<11+16 ; w3 := addr(doc name); send message; al. w1 f16. ; w1 := answer address; jd 1<11+18 ; wait answer; rl. w3 f16. ; sn w3 0 ; if status word <> 0 se w0 1 ; or result <> 1 then jl. a1. ; goto error; rl. w3 f16.+2 ; sn w3 0 ; if bytes transferred = 0 then jl. a0. ; goto repeat; jl. (b0.) ; return; a1: al w3 1 ; error: ls w3 (0) ; w3 := 1 shift result; sn w0 1 ; if normal answer then wa. w3 f16. ; w3 := w3 + status word; jl. d26. ; goto give up output; b0: 0 ; saved return ; i. ; id list e. ; end block segment transfer \f ; rc 19.02.1973 fp utility, binin, page 10 d9: jd 1<11+48 ; create: remove entry; jd 1<11+40 ; create entry; jl. a10. ; goto check result; d10: jd 1<11+48 ; remove: remove entry; jl. a10. ; goto check result; d11: jd 1<11+44 ; change: change entry; jl. a10. ; goto check result; d12: jd 1<11+46 ; rename: rename entry; jl. a10. ; goto check result; d13: rl w1 x1 ; permanent: w1:=cat key; jd 1<11+50 ; permanent entry; se w0 0 ; if result <> 0 jl. a10. ; then goto check result; se w1 3 ; if cat key <> 3 then jl. d6. ; goto next command; am. (g0.) ; set entry base: dl w1 h58 ; jd 1<11+74 ; set entry base(name,user base); jl. d6. ; goto next command; a10: se w0 0 ; check result: if result <> 0 jl. w1 d18. ; then command alarm; d6: rl. w2 g3. ; next command: sl. w2 (g9.) ; if current command >= last command jl. d8. ; then goto load command segment; dl w1 x2+2 ; index := first of command table; al. w3 g4. ; search: a8: al w3 x3+6 ; index := index + 6; sl. w3 g5. ; if index >= top of command table jl. a9. ; then goto syntax error; sn w0 (x3-6) ; if command part(current command) se w1 (x3-4) ; <> name part (command table(index-6)) jl. a8. ; then goto search; \f ; rc 1977.02.04 fp utility, binin, page ...11... a20: ba w2 x3-1 ; ok: current command := current command + rx. w2 g3. ; size part(command table(index-1)); am 6 ; se. w3 g4. ; if create jl. a11. ; rl. w1 i9. ; and sn w1 0 ; jl. a11. ; message.yes ds. w3 b5. ; then al w2 10 ; begin jl. w3 h26.-2 ; writenl; dl. w3 b5. ; al w0 x2+4 ; jl. w3 h31.-2 ; write(out,<:entryname:>); dl. w3 b5. ; end; a11: bz. w0 i0. ; sn w0 0 ; if -, check then jl. a12. ; goto execute; dl w1 x2+2 ; sn. w0 (d15.) ; se. w1 (d16.) ; if command = <:load:> then jl. d6. ; goto next command; a12: bl w0 x3-2 ; execute: hs. w0 i2. ; action := action part of al w3 x2+4 ; command table(index-2); al w1 x2+12 ; w3 := addr(name part(table)); i2 = k + 1 ; action ; w1 := addr(tail part(table)); d14: jl. 0 ; call action; a9: se. w0 (d23.) ; syntax error: jl. a19. ; if first word command = <:end:> then al w2 x2+2 ; begin sn. w2 (g9.) ; if current command = last command - 2 jl. d3. ; then goto terminate exit a19: ds. w1 f3.+2 ; end; al. w2 b4. ; jl. c5. ; outalarm(<:syntax error:>); b1: <: in command segment<0>:> ; b2: <: sizeerror<0>:> ; b4: <: syntaxerror<0>:> ; d8: al. w1 d20. ; load command segment: rs. w1 g3. ; current command := current byte := ; first free core; a5: sl. w1 g7. ; next byte: jl. a7. ; if current byte >= first free core + 512 ; then goto size error; jl. w3 c0. ; inbyte; jl. a6. ; exit 0 : goto command sumerror; jl. d6. ; exit 2 : goto next command; hs w2 x1 ; exit 4 : byte(current byte) := byte; al w1 x1+1 ; current byte := rs. w1 g9. ; last command := current byte + 1; jl. a5. ; goto next byte; a6: al. w0 b1. ; command sumerror: jl. w3 c6. ; writetext(<:in command segment:>); jl. d6. ; goto next command; a7: al. w2 b2. ; sizeerror: jl. c9. ; inalarm(<:sizeerror:>); g3: 0 ; current command g9: 0 ; last of command \f ; rc 25.6.1969 fp utility, binin, page 12 ; command table: ; command action size g4: <:create:>, h. d9 -d14, 32, w. d21: <:remove:>, h. d10-d14, 12, w. <:change:>, h. d11-d14, 32, w. <:rename:>, h. d12-d14, 20, w. <:perman:>, h. d13-d14, 14, w. <:oldcat:>, h. d6 -d14, 4 , w. <:newcat:>, h. d6 -d14, 4 , w. d15: <:load:> , h. d17-d14, 14, w. d23: <:end:>,0 , h. d3 -d14, 4 , w. g5 = k, d16 = d15 + 2, b3 = d21 + 2 f7: 0 ; saved w0 0 ; saved w1 b5: 0 ; saved w2 <:<127><127><32>:> ; b26 - 4 0 ; b6: 0 ,0 ; saved command b7: <: result <0>:> ; d18: rs. w0 f7. ; command alarm: save result; d19: ds. w2 b5. ; command alarm1: save(w1,w2); dl w1 x2+2 ; ds. w1 b6. ; save command; al. w2 b6.-4 ; jl. w3 c3. ; inmessage(name of command); al w2 32 ; am. (g0.) ; jl w3 h26-2 ; writechar(space); rl. w2 b5. ; restore w2; al w0 x2+4 ; jl. w3 c6. ; writetext(catalog name); al. w0 b7. ; jl. w3 c6. ; writetext(<:result:>); rl. w0 f7. ; w0 := saved result; jl. w3 c7. ; writeinteger; 32<12 + 1 ; dl. w2 b5. ; restore(w1,w2); jl x1 ; return; f4: 0 ; current parameter pointer 0 ; saved w0 b8: 0 ; saved w1 0 ; saved w2 b9: 0 ; saved w3 b10: 0 ; return after scan parameter list \f ; rc 1977.02.04 fp utility, binin, page ...13... d5: ds. w1 b8. ; more input: ds. w3 b9. ; save all registers; al. w3 d4. ; w3 := <repeat inbyte>; d25: rs. w3 b10. ; store return; rl. w3 b21. ; rs. w3 f5. ; segments := infinite; al w3 0 ; rs. w3 f8. ; first segment := 0; d2: rl. w2 f4. ; scan parameter list: ba w2 x2+1 ; next param; rs. w2 f4. ; al w0 0 ; hs. w0 i0. ; check := false; hs. w0 i7. ; s := false; rl w0 x2 ; if param = (space,name) then se. w0 (b11.) ; goto not name; jl. a32. ; rl w0 x2+2 ; se. w0 (b24.) ; if name<> <:mes:> jl. a18. ; then goto next tape; rl w0 x2+10 ; se. w0 (b12.) ; if nexttape<>pointname jl. a18. ; then goto next tape; rl w0 x2+12 ; if nextname sn. w0 (b25.) ; = <:no:> jl. a31. ; then goto messageno; se. w0 (b26.) ; if nextname <> <:yes:> jl. a18. ; then goto nexttape; am 1 ; messageyes: a31: al w0 0 ; messageno: rs. w0 i9. ; save message; rl. w2 f4. ; al w2 x2+10 ; ready for next param rs. w2 f4. ; jl. d2. ; goto scan param list; b24: <:lis:> ; b25: <:no:> ; b26: <:yes:> ; i9: 0 ; saved message a32: bl w0 x2 ; not name: sl w0 4 ; if parameter list exhausted then jl. a13. ; begin rl. w0 f6. ; sn w0 0 ; if sum = 0 then jl. d3. ; goto terminate exit; rl. w0 f2. ; al. w2 b18. ; w2 := addr(<:exhausted:>); sn w0 0 ; if first word(input name) = 0 then al. w2 b19. ; w2 := addr(<:input name missing:>); jl. c9. ; goto inalarm; b18: <: exhausted<0>:> ; b19: <:input name missing<0>:>; i3 = k + 1 ; alarm state; param alarm: a13: se w3 x3 ; if alarm state then jl. a14. ; goto list parameter; al w0 1 ; hs. w0 i3. ; alarm state := true; al. w2 b13. ; jl. w3 c8. ; message(<:param:>); a14: bz. w1 (f4.) ; list parameter: al. w0 x1+b14. ; writetext(string jl. w3 c6. ; delimiter table(delimiter)); al. w3 d2. ; set return(scan parameter list); rl. w2 f4. ; al w0 x2+2 ; w0 := address(parameter value); bz w1 x2+1 ; sn w1 10 ; if parameter is name then jl. c6. ; goto writetext; rl w0 x2+2 ; jl. w3 c7. ; 32<12 + 1 ; writeinteger(parameter value); jl. d2. ; goto scan parameter list; \f ; rc 2.8.1969 fp utility, binin, page 14 b13: <:param <0>:> ; b14 = k - 4 ; delimiter table: <: :>,<:=:>,<:.:> ; b11: 4<12 + 10 ; (space,name); b12: 8<12 + 10 ; (point,name); b20: 8<12 + 4 ; (point,integer); b15: <:c:> ; b23: <:s:> ; a18: al w0 0 ; next tape: rs. w0 f6. ; sum := 0; dl w1 x2+4 ; ds. w1 f2.+2 ; move parameter to name dl w1 x2+8 ; input file descriptor; ds. w1 f2.+6 ; al w3 x2 ; a24: ba w3 x3+1 ; expect integer: next param; dl w1 x3+2 ; se. w0 (b12.) ; if item <> (point,name) then jl. a15. ; goto prepare input; se. w1 (b23.) ; if param <> <:s:> then jl. a27. ; goto check; al w0 1 ; hs. w0 i7. ; s := true; rs. w3 f4. ; save parameter pointer; jl. a24. ; goto expect integer; a27: se. w1 (b15.) ; if param <> <:c:> then jl. a15. ; goto prepare input; al w0 1 ; hs. w0 i0. ; check := true; rs. w3 f4. ; save parameter pointer; jl. a24. ; goto expect integer; a15: se. w0 (b20.) ; prepare input: jl. a23. ; if item <> (point,integer) then rs. w1 f5. ; goto return input; rs. w3 f4. ; save parameter pointer; ba w3 x3+1 ; segments := param; dl w1 x3+2 ; next param; se. w0 (b20.) ; if item <> (point integer) then jl. a23. ; goto return input; rs. w3 f4. ; save parameter pointer; rs. w1 f8. ; first segment := param; a23: al w0 0 ; return input: hs. w0 i3. ; alarm state := false; jl. w3 c12. ; initialize input; dl. w1 b8. ; dl. w3 b9. ; restore all registers; jl. (b10.) ; return; g7 = k + 1024 ; first free core: base command segment: d20: rs. w1 g0. ; initialize binin: rs. w3 f4. ; save fp base; al. w1 d6. ; save parameter pointer; bz w0 x3 ; exit := next command; sn w0 6 ; if there is left hand side then al. w1 d7. ; exit := load program; rs. w1 b10. ; set return(exit); \f ; rc 76.02.02 fp utility, binin, page ...15... se w0 6 ; if there is left hand side then jl. a16. ; begin al w0 1 ; hs. w0 i6. ; finis := true; dl w1 x3-6 ; move left hand side to ds. w1 f3.+2 ; name of output file descr; dl w1 x3-2 ; ds. w1 f3.+6 ; end; a16: al. w3 g7.+512 ; initialize output zone: al w0 x2-2 ; base of buffer := first free core + 1536; ds. w0 g1.+h0+2 ; last of buffer := top command stack - 2; ds. w0 g8.+4 ; first shared := base buffer; sl w0 x3+512 ; if last of buffer < base buffer + 512 then jl. a17. ; begin al. w2 b16. ; message(<:core size:>); jl. w3 c8. ; goto exit fp; jl. d1. ; end; b16: <:core size<0>:> ; a17: al. w0 g8. ; last shared := last of buffer; rs. w0 g1.+h0+4 ; first share := last share := rs. w0 g1.+h0+6 ; used share := rs. w0 g1.+h0+8 ; share descriptor address; bz. w0 i6. ; se w0 0 ; if other output then jl. w3 c11. ; initialize output; al. w0 d26. ; rs. w0 g1.+h2+2 ; set give up action; al. w3 g7. ; initialize input zone: al w0 x3+510 ; base of buffer := first free core + 512; ds. w0 g2.+h0+2 ; last of buffer := base buffer + 510; ds. w0 g6.+4 ; first shared := base buffer; al. w0 g6. ; last shared := last of buffer; rs. w0 g2.+h0+4 ; first share := used share := rs. w0 g2.+h0+6 ; last share := rs. w0 g2.+h0+8 ; share descriptor address; al. w0 d0. ; rs. w0 g2.+h2+2 ; set give up action; al. w3 g7.-512 ; al w0 x3+510 ; set first and last core in bsmessage; ds. w0 f14. ; jl. d2. ; goto scan parameter list; i4 = k - d22 ; length of binin 0 ; zero, to terminate program segment i. ; id list e. ; end segment binin m. rc 1977.02.04 fp utility, binin g2=k-h55 ; length g0:g1: (:g2+511:)>9 ; segm 0, r.4 s2 ; date 0,0 ; file,block 2<12+4 ; contents, entry g2 ; length d. p.<:insertproc:> l. e. ; end block fp names \f ▶EOF◀