|
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: 138240 (0x21c00) Types: TextFile Names: »tterm1«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦0b92c64d5⟧ »ctb« └─⟦this⟧
(bterm1 = set 1 disc bterm1 = slang proc.options scope user bterm1 print bterm1 integer words.4 0.6 ) b. w. p.1 ; sl 12.11.71 ext table term1 ...1... s0=0, s1=0 ; s. h30 w. ; h10, h11 ; version: 78 05 04, 112 ; version id: m. boss 2 tterm1 s. d100, g300 w. ; h29: k=10000 ; list of external words: h30: g47.,g48.,g49. g50.,g51.,g52.,g53.,g54.,g55.,g56.,g57.,g58.,g59. g60.,g61.,g62.,g63.,g64.,g65.,g66.,g67.,g68.,g69. g70.,g71.,g72.,g73.,g74.,g75.,g76.,g77.,g78.,g79. g80.,g81.,g82.,g83.,g84.,g85.,g86.,g87.,g88.,g89. g90.,g91.,g92.,g93.,g94.,g95.,g96.,g97.,g98.,g99. g100.,c.e25-1,g101.,g102.,g103.,g104.,g198.,g199.,g200.,g201.,g202.,g203. z. g105.,g106.,g107.,g108.,g109. g110.,g111.,g112.,g113.,g114.,g115.,g116.,g117.,g118.,g119. g120.,g121.,g122.,g123.,g124.,g125.,g126.,g127.,g128.,g129. g130.,g131.,g132.,g133.,g134.,g135.,g136.,g137.,g138.,g139. g140.,g141.,g142.,g143.,g144.,g145.,g146.,g147.,g148.,g149. g150.,g151.,g152.,g153.,g154.,g155.,g156.,g157.,g158.,g159. g160.,g161.,g162.,g163.,g164.,g165.,g166.,g167.,g168.,g169. g170.,g171.,g172.,g173.,g174.,g175.,g176.,g177.,g178.,g179. g180.,g181.,g182.,g183.,g184.,g185.,g186.,g187.,g188.,g189. g190.,g191.,g192.,g193.,g194.,g195.,g196.,g197. g204.,g205.,g206.,g207. g210.,g211.,g212.,g213.,g214.,g215.,g216.,g217. g220.,g221.,g222.,g223., g226.,g227.,g228.,g229. g230.,g231. g245. g255.,g256.,g257.,g258.,g259.,g260.,g261.,g262. c.e61-1, g263. , g264. z. h1: h2 am. (4) ; goto start init jl. +2 ; g43. ; \f ; bbj 77 06 28 contents of tterm1 ...1a... ; block structure and contents: page structure: ; ; s. d, g ; external words. initialisation 1 ; job file page job file page 2 ; b. b, c, j ; local variables, read login commandio central 5 ; b. a ; next block, attention - 6 ; next char, central actions - 7 ; e. ; b. a ; edit actions - 10 ; e. ; entries to print segment - 14 ; character table, syntax table - 14 ; command table - 17 ; i.e. ; b. b, c ; local variables commandio bulk file 1 ; various procedures - 2 ; next line - 5 ; init line - 7 ; bulk get - 8 ; bulk save - 9 ; clear correction, release - 10 ; i.e. ; initialisation initialisation 11 ; s. b,c,g print 37 ; output block - ; login after error - ; general print 38b ; verify,list list,verify 41 ; alarm print - 43 ; init - 46 ; e. ; ; s. f,g ; b. b,d ; snapshot 48 ; autoline 50 ; e. ; i.e. ; i.e. 14 \f ; sl 14.6.71 job file page term1 ...2... g0=k-4-i46 ; begin page 1, job file page ; return virt and rel for commandio procs d7=4, d8=4 ; param list and line buffer. ; also used as working area by command actions. d34=k-2-g0, d35=d8-2 ; last of line, base line ; variables for next block and attention: d36=k-g0, 0 ; job descr page d38=k-g0, g63: 53 ; terminal reserve. binary semafore. ext(221) d39=k-g0, g64: ;+2 attention semafore. h. e13*i4+e13, 19 w. ; d40=k-g0, g65: ; terminal sender descr h. 10*i4+10, 20 w. ; d41=k-g0, 0, r.5 ; name, name addr of terminal d42=k-g0, g66: 150 ; first addr of terminal buffer. c. d42+2-e11-1 m.*** e11 too small z. ; variables for next char and central actions: d1=k-g0, 0 ; partial word d2=k-g0, -1 ; special char. logout cause d3=k-g0, g20 ;+2 state. initially: start state, testing only. d4=k-g0, 0 ; curr word. abs address in input buffer. d5=k-g0, 0 ; top buf. - - - - . d6=k-g0, 29<12+0 ; console state < 12 + jobstate ; console state: 8 + ready*4 + user*2 + operator*1 + unlogged*16 ; job state: defined in tjob, io page d37=k-g0, 0 ;+2 conversational * 8 ; d10 is used to count buffers returned with timer status ; variables for edit actions: d9=k-g0, d14 ; top corr list. rel address within page 1. d10=k-g0, 0 ;+2 work. line number. timer count(from command input). d11=k-g0, 0 ; work. return rel inside page. d12=k-g0, d15 ; curr corr segm. rel address within page 1. d15=k-g0, 1000 001 ; first corr segm: list of corr segments each r. 2*i44 ; described by two words, thus: ; first word: top corr list when the corr segment became full, large ; until it is full. second word: virt address of corr segment. d86=k-g0, 0 ; start line for autoline d87=k-g0, 0 ; linedistance in autoline ; variables for next line and init line: d16=k-g0, 0 ; work page. buffer for basis file. d18=k-g0, 0 ; abs or page. relative on bulk file page. ; (page 0-4 are indicated by value 0-8, ; abs addr by: ext 155) d27=k-g0, 0 ;-2 last store rel. used by next line. d19=k-g0, 0 ;+0 store rel. - - . d20=k-g0, 0 ;+2 return rel. - - . d21=k-g0, 0 ; segment number in basis file. d22=k-g0, 0, r.5 ; name, name address of basis file. d26=k-g0 ; logical status at alarm. d33=k-g0, 0 ; line got. used by next line. d28=k-g0, 0 ; next corr line d29=k-g0, 0 ;+2 next corr index d30=k-g0, 0 ; used already from corr line. d31=k-g0, 0 ; next file line d32=k-g0, 0 ;+2 next file index d25=k+2-g0, 0, 0 ; return virt and rel from nextline etc, print catalog entry \f ; sl 12.11.71 job file page term1 ...3... ; variables for accounting and stdinterval d43=k-g0, 0 ; time logged in (seconds) d44=k-g0, 0 ;+2 operations performed d45=k+2-g0, 0, 0 ; stdinterval ; variables for psjob, primary io: d50=k-g0, g67: ; psjobque, chained semafor. h. e13*i45, 19 w. ; d51=k-g0, g68: ; job in core, binary semafor. h. e13*i45, 19 w. ; d52=k-g0, 0 ; exhaust count. d53=k-g0, 0 ; rest room on page, job contr. printer. d54=k-g0, 0 ;+2 job buffer index. d55=k-g0, 0 ;+4 get current virt buffer addr d56=k-g0, 0 ; message addr d57=k-g0, 0 ; first of job (even) d58=k-g0, 0 ; top of job (even) d59=k-g0, 0 ; rest room on page, primary output d60=k-g0, 0 ;+2 job buffer index d61=k-g0, 0 ;+4 virt buf (ext 193) d62=k-g0, 0 ; first buf byte d63=k-g0, 0, r.5 ; name of super buffer area d64=k-g0, 0 ; length of super buffer d65=k-g0, g69: 54 ; terminal full, simple semafor d66=k-g0, 0 ; card reader: ext 198, 450: prog state, start rel d67=k-g0, 0 ; ext 199 : curr virt address of card buffer d68=k-g0, 0 ; ext 200 : last received status of card reader d69=k-g0, 0 ; ext 201 : card length d82=k-g0, 0 ;-2 ext 367 : free buffer semafore d83=k-g0, 0 ; ext 368 : full buffer semafore d84=k-g0, 0 ;-2 ext 369 : virt first buffer addr d85=k-g0, 0 ; ext 370 : virt top buffer addr d71=k-g0, 0 ; ext 299 : state of terminal output d72=k-g0, 0,0 ; ext 301,302: next byte, buf byte d73=k-g0, 0,0 ; ext 303,304: virt buf, appetite d74=k-g0, 0 ; ext 305 : out bytes d75=k-g0, 0 ; job controlled tape reader: ext 446: prog state d76=d75+1 ; ext 447 : start rel d77=k-g0, 0 ; ext 448 : curr virt address of tape buffer d78=k-g0, 0 ; ext 449 : last received status of tape reader d90=k-g0, 0 ; ext 518 : job reader free d91=k-g0, 0 ; ext 519 : job reader full d92=k-g0, 0 ; ext 520 : first virt buffer d93=k-g0, 0 ; ext 521 : top virt buffer ; card reader and reader: d81=k-g0, 0 ; ext 429 : next store in job input area d79=k-g0, 0 ; ext 474: : job controlled printer: ; current paper type d80=k-g0, g140: 81 ; terminal input semafore ; variables for various commands d88=k-g0, 0 ; terminal user rights; d70=k-g0, g100: ; commandio answer semafore h. e13*i4+e13, 19 w. ; (ext 236) \f ; sl 14.6.71 job file page term1 ...4... ; line table, correction list, related g-names. d17=k-g0, 1000 000 ; line table. contains one word for each ; segment in the basis file, specifying the line number for the first ; character on the segment. if the file is not terminated by an em- ; character, the top segment is considered containing the em-character. ; the table is terminated by one more word containing a large value. d14=d17+2+2*i47 ; corr list. one word for each correction ; specifying the line number corrected. g2 =d14+2+2*i48 ; end page 1, job file page. g2 = length g12=g2, g13=510-i46 ; max top corr list, max last on corr page g14=d15+2*i44-2 ; max current corr segm. g15=8+4 ; required edit bits: conversational, ready. g16=i46, g19=i3 ; max line length, length terminal buffer ; the corrected lines are stored on correction segments, each ; segment composed like this: ; 0: last on corr page (1 word, specifying last used on this page) ; 2: corrected line (possibly some words containing the characters, ; one word containing line number, ; one word containing -length of corrected line) ; corrected line, ... \f ; sl 14.6.71 command input term1 ...5... b. b60, c60, j10 w. ; begin commandio central page g1: ; b0: 0, r.5 ; page addresses 20<12+0 ; pageident: command input b1: 0 ; sh count. used by pack char. b2: 0 ; curr text. - - b3: 0 ;+2 top text. - - b4: 0 ; the number so far read from the input buffer b6: 0 ; first of comm name. packing of name. b12: ; param addr. used for storing params. b15: 0, r.20 ; template. used by replace command. b17=k-1 ; last of template b7=k ; top comm name b8: 10 ; used in creation of numbers from digits (no:=no*10+digit) b9: 255<16 ; mask for 4-letter names b14: ; template addr b10: 0 ; pattern. for checking params b11: 0 ;+2 comm addr b26: 0 ; comm rel b13: g50: 8 ; page jump b16: 0 ; line number. used during edit commands. b18: 0 ;-2 constant. used by replace command. (used at prepare attention) b19: 0 ;+0 partial of line. - - b20: 0 ;+2 word of line. - - b22: 0 ; saved char. - - and login b23=k+2, 0, 0 ; saved pos. - - b24: g51: 7 ; get pages b25: 1 000 001 ; large b27=k+2,g52:157,g53:158; entry next line b28=k+2,g54:157,g55:161; entry init line b29: g56: 25 ; call b30: 6<12 ; check ready and user console b31: g57: 4 ; open b32: g58: 3 ; lock b21: g49: 5 ; lock chained b33: 3<12, 0, 0 ; input message b34=k-2 ; b35: g59: 1 ; send and wait b36: 1<16 ; attention b37: 1<21 ; timer b38: -1-1<23-1<21-1<1 ; other than local or timer or normal b39=k+2,g60:162,g76:204; entry alarm b40=k+2,g61:162,g77:205; entry io alarm b41: 1 000 000 ; large - 1 b42: g62: 26 ; current corutine b43: 5<12,0,0 ; output message b44: <:>><10>:> ; attention text b45: g137:34 ; w0 call b46: g141:21 ; private output b47: 15 ; private output, kind b48: g47: 162, g48: 310; message action b49: (:-1:)>8 ; mask for 16 bit param spec b51=k+2,g259 : 162, g260 : 229; virtual and relative address of general print b50: i177 ; max timer count b52: 2.1111 ; mask for removing user rights; \f ; sl 30.11.71 command input term1 ...6... g45=k-g1 ; read login information: al w0 g30 ; rs w0 x3+d3 ; read state:= expecting login; al w0 -1 ; rs w0 x3+d2 ; special char:=not exist; jl. c49. ; goto input; c50: rs. w1 b22. ; prep login: save w1 = char; al. w2 g46. ; command found(w2 = login); jl. w3 c47. ; rl. w1 b22. ; w1:= char; jl. c12. ; goto prep name; b. a25 w. ; next block: w3= page 1 abs; c1: rl w1 x3+d40 ; rl w0 x1+8 ; rl w1 (x3+d39) ; sn w0 0 ; if sender.mess <> 0 or sl w1 1 ; attention > 0 then jl. a8. ; goto wait attention; dl w1 x3+d37 ; w0:= console state; w1:= conversational; so. w0 (b30.) ; if ready and user console sz w1 8 ; or conversational then jl. c49. ; goto input first; a8: rl w2 x3+d38 ; wait attention: jl. w3 (b31.) ; open(terminal reserve); rl w2 x3+d39 ; jl. w3 (b21.) ; lock chained(attention); rl. w1 (b42.) ; rl w0 x1+10 ; page 3:= operation; rs w0 x1+12 ; rl w2 x3+d38 ; jl. w3 (b32.) ; lock(terminal reserve); rl. w2 b0.+6 ; al w0 0 ; hs w0 x2+2 ; release operations; bz w1 x2+3 ; sl w1 4 ; if login attention then c.-1, o100 , z. ; (bossfault xref) jd -100 ; ***bossfault 100 bz. w1 x1+a0. ; goto case operation of jl. x1+b0. ; (output attention, message, logout op, finis); a0: h. a11, a12, a7, a13 w. a13=k-b0 ; finis: bz w1 x3+d6 ; al w1 x1+4 ; console state:= console state + hs w1 x3+d6 ; + ready; jl. a14. ; goto prep; a11=k-b0 ; rl. w1 b0.+6 ; output attention: al w2 0 ; sender.message:= 0; rx w2 x1+4 ; al w0 1 ; result:= 1; jd 1<11+22; send answer(mess); rl. w2 b0.+2 ; rl w1 x2+d3 ; load current state se w1 g31 ; if autoline then jl. a14. ; change state al w1 g20 ; autoline is stopped by setting the start rs w1 x2+d3 ; state to g20 instead of g31. a14: rl w1 (x3+d41+8) ; prep: rl w0 x1+12 ; w0:= terminal descr.reserver; sn w0 0 ; if terminal not reserved then jl. c49. ; goto input first; rl w1 x3+d42 ; al w2 x1 ; fa of message := ds. w2 b43.+4 ; la of message := fa; rl. w0 b44. ; rs w0 x1 ; buffer:= <:>>nl:>; al. w1 b43. ; al w2 x3+d41 ; w2:= terminal name; jl. w3 (b35.) ; send and wait; \f ; sl 30.11.71 command input term1 ...7... c49: ; input first: al w0 0 ; comment top buff used for summation of bytes transferred; rs w0 x3+d5 ; top buff := 0; rs w0 x3+d10 ; timer count := 0; a10: ; input: rl w1 (x3+d39) ; if attention sem > 0 then sl w1 1 ; jl. a17. ; goto prep1 attention; rl w1 x3+d42 ; w1:= current word:= fa - 2; al w0 x1-2 ; rs w0 x3+d4 ; fa of message:= fa + top buff; al w2 x1+g19-2 ; la of message:= fa - 2 + length term buf; wa w1 x3+d5 ; ds. w2 b34. ; al. w1 b33. ; w1:= mess addr; al w2 x3+d41 ; w2:= terminal name; jl. w3 (b35.) ; send and wait; sz w0 15<2 ; if process does not exist etc then jl. a18. ; goto harderror logout; sz. w0 (b36.) ; if attention then jl. a15. ; goto prepare attention; sz. w0 (b38.) ; if other than local or timer or normal then jl. c48. ; goto terminal io alarm; rl w2 x3+d5 ; top buff := top buff + bytes transferred; wa w2 x1+2 ; rs w2 x3+d5 ; sz. w0 (b37.) ; if timer then jl. a16. ; goto count timer; rs w2 x1+2 ; bytes transferred := top buff; wa w2 x3+d42 ; top buff := top buff + fa; rs w2 x3+d5 ; al w0 0 ; conversational:= false; rs w0 x3+d37 ; prepares for empty buffer; rl w2 x3+d44 ; accounting: al w2 x2+1 ; operations:= operations + 1; rs w2 x3+d44 ; rl. w2 (b42.) ; w2:= current corutine; bz w0 x2+4 ; so w0 2 ; if testmode 2 then jl. a22. ; begin rl w0 x1+2 ; ls w0 6 ; w0:=bytes transferred wa. w0 b47. ; shift 6 + 15; rl w1 x3+d42 ; w1:=fa; privout; jl. w3 (b46.) ; end; a22: rl w0 x3+d3 ; load current state se w0 g31 ; if autoline mode then jl. a1. ; begin rl w0 x3+d86 ; w0:= current linenumber rs. w0 b4. ; b4:= current linenumber jl. w2 c29. ; update correction tables ; end jl. a1. ; goto next word; a17: al. w1 b18.-2 ; prep1 attention: bytes transferred := 0; a15: rl w2 x3+d5 ; prepare attention: wa w2 x1+2 ; if top buff + bytes transferred = 0 then sh w2 0 ; jl. a8. ; goto wait attention; jl. c54. ; goto input line skipped; a16: al w0 1 ; count timer: wa w0 x3+d10 ; timer count := timer count + 1; rs w0 x3+d10 ; sh. w0 (b50.) ; if timer count <= max timer count then jl. a10. ; goto input; jl. a19. ; goto timer logout; \f ; btj 03.04.73 command input term1 ...7a... a12=k-b0 ; message operation: dl. w3 b48.+2 ; jl. (b13.) ; a18: am 32-33 ; harderror logout: a7=k-b0 ; logout operation: am 33-34 ; operator remove: a19: al w1 34 ; timer logout: rs w1 x3+d2 ; save logout cause in special char; rl. w2 g17. ; al w0 -1 ; param1:=empty; rs w0 x3+d7 ; prepare kill. rl. w1 (b42.) ; rl w0 x3+d36 ; page 4 descr:= job descr; rs w0 x1+14 ; bz. w3 g18. ; goto logout command; jl. (b13.) ; g35= k-g1 c44: al w0 -1 ; after action: special char:= non exist; rs w0 x3+d2 ; rl w0 x3+d3 ; w0:= current state rl w1 (x3+d39) ; sh w1 0 ; if attention or se w0 g31 ; not(autoline) then jl. a5. ; goto a5 jl. w2 c57. ; print next lineno jl. c1. ; end a5: ld w1 -100 ; rl. w2 (b42.) ; page 2 descr:= page 3 descr:= ds w1 x2+12 ; page 4 descr:= 0; rs w0 x2+14 ; jl. c1. ; goto next block; \f ; sl 7.6.71 command input term1 ...8... ; central logic: unpacks a character, looks up in character table ; and syntax table, and switches to an action. ; variable explanation : ; d1 - contains the partial word currently being unpacked. ; d2 - contains the delimiter from replace. ; d3 - the current state of the state-action table. ; d4 - index to next word to read. ; d5 - max length of line to be read. c0: rl. w3 b0.+2 ; nextchar: w3:= page 1 abs; rl w2 x3+d1 ;+2: w2:= partial word; sn w2 0 ; if partial word = 0 then jl. a1. ; next word; a2: al w1 0 ; ld w2 8 ; w1:= char:= first char in partial; rs w2 x3+d1 ; partial word:= remaining chars; bl. w2 x1+g5. ; w2:= class:= char table(char); sn w1 (x3+d2) ; if char = special char then al w2 10 ; w2:= class:= 10; ; the class 10 is used in the state table to make ; the right replace. sh w1 127 ; if char>127 or sn w2 12 ; class = blind then jl. c0.+2 ; goto next char, w3 ok; am (x3+d3) ; w2:= action, new state j1: rl. w2 x2 ; := syntax(state + class); hs w2 x3+d3+1 ; state:= new state; bl w2 4 ; w2:= action; j2: jl. x2 ; switch to action, w1 = char; a1: rl w2 x3+d4 ; next word: al w2 x2+2 ; w2:= curr word + 2; sl w2 (x3+d5) ; if w2 >= top buf then jl. c53. ; goto line termination; rs w2 x3+d4 ; curr word:= w2; rl w2 x2 ; w2:= buf(curr word); jl. a2. ; return; ; variable explanation : ; b1 - a shift constant. ; b2 - the address of the current text word. ; b3 - the max length of a text string in words. ; the addresses are absolute in page3 (correction page). ; pack char: w1 = char. returns to x3+2 normally. calls alarm ; if the text area is full. then x3 should contain alarm code. c2: rl. w2 b1. ; pack char: al w2 x2-8 ; w2:= sh count:= sh count - 8; sl w2 0 ; if w2 < 0 then jl. a3. ; begin rl. w2 b2. ; al w2 x2+2 ; w2:= curr text + 2; sl. w2 (b3.) ; if w2 >= top text then jl. c30. ; goto alarm; c3: al w0 0 ; start packing: w2 = curr text; rs w0 x2 ; text(w2):= 0; rs. w2 b2. ; curr text:= w2; al w2 16 ; sh count:= 16; a3: rs. w2 b1. ; end; ls w1 x2 ; text(curr text):= wa. w1 (b2.) ; char shift sh count rs. w1 (b2.) ; + text(curr text); jl x3+2 ; return; \f ; sl 7.6.71 command input term1 ...9... c4: jl. w3 c2. ; pack name: pack char; g10 ; full alarm is name-length; jl. c0. ; goto nextchar; c5: al w1 x1-48 ; first digit: rs. w1 b4. ; number:= char - 48; jl. c0.+2 ; goto nextchar, w3 ok; c6: al. w2 b7. ; first letter: rs. w2 b3. ; top text:= top comm name; al w0 0 ; rs. w0 b6.+2 ; clear second of comm name; al. w2 b6. ; w2:= curr text:= first of comm name; al. w3 c0.-2 ; prepare return to next char; jl. c3. ; start packing(char); c7: al w1 x1-48 ; digit: rx. w1 b4. ; wm. w1 b8. ; w1:= number:= wa. w1 b4. ; number * 10 + char - 48; sl w1 0 ; sl. w1 (b41.) ; if number >= large - 1 jl. c33. ; then goto number alarm; rs. w1 b4. ; jl. c0.+2 ; goto nextchar, w3 ok; c8: al. w3 c0. ; find command: prepare return to nextchar; c9: dl. w1 b6.+2 ; procedure find command: la. w1 b9. ; command name:= ds. w1 b6.+2 ; first 4 chars of name; al. w2 g6. ; w2:= base comm table; a4: al w2 x2+8 ; rep: w2:= next in comm table; sl. w2 g7. ; if w2 >= top comm table then jl. c31. ; goto what alarm; dl w1 x2+2 ; la. w1 b9. ; w0 w1:= first 4 letters from comm table; se. w0 (b6.) ; jl. a4. ; if entry <> comm name then se. w1 (b6.+2) ; goto rep; jl. a4. ; c47: dl w1 x2+4 ; command found: pattern:= comm pattern(w2); la. w0 b49. ; ds. w1 b11. ; comm addr:= comm addr(w2); rl w1 x2+6 ; comm rel:= comm rel(w2); hs. w1 b26.+1 ; bz w1 2 ; w1:= required bits; c. i179-1 ; if main console is normal console sz w1 2 ; then remove user-only bit; al w1 x1-2 ; z. ; rl. w2 b0.+2 ; w2:= page 1 abs; al w0 x1 ; la. w0 b52. ; conversational:=required bits; rs w0 x2+d37 ; bz w0 x2+d6 ; lo w0 x2+d88 ; w0:=console state <or> user rights; so w0 x1 ; if required bits not part of console state jl. c38. ; then goto state alarm; al w1 x2+d7 ; param addr:= param list on page 1; rs. w1 b12. ; jl x3 ; return; \f ; sl 7.6.71 command input term1 ...10... c10: jl. w3 c9. ; find and do: find command; c11: rl. w0 b10. ; do: w0:= pattern; so w0 1 ; if empty forbidden then jl. c34. ; goto param alarm; al w0 -1 ; rs. w0 (b12.) ; param(param addr):= end mark; rl. w3 b0.+2 ; w3:= page 1 abs; rl w0 x3+d36 ; rl. w1 (b42.) ; w0:= virt job descr; w1:= current corutine; rl. w2 b11. ; w2:= command virtual addr; bz. w3 b26.+1 ; w3:= relative of comm addr; so w3 1 ; if even relative then rs w0 x1+14 ; page 4 descr:= job descr; jl. w1 (b29.) ; call command action; jl. c44. ; goto after action; jl. c51. ;+4 goto limited alarm; jl. c34. ;+6 goto param alarm; jl. c52. ;+8 goto device unknown; c12: rl. w2 b12. ; prep name: w1 = char; w2:= param addr; al w0 x2+8 ; rs. w0 b3. ; top text:= next param addr; ld w0 -100 ; ds w0 x2+6 ; the first word is cleared in pack char the remaining here; rs w3 x2+2 ; al. w3 c0.-2 ; prepare return to next char; jl. c3. ; start packing(char); c13: al. w3 c0. ; name param: prepare return to next char; c14: rl. w0 b10. ; procedure name param: so w0 4 ; if name forbidden then jl. c34. ; goto param alarm; rl. w2 b12. ; test for that a name param. is not too long rl w2 x2+6 ; w2:= fourth word of name sz w2 255 ; if last char <> 0 then jl. a21. ; name too long a6: ls w0 -3 ; update pattern: rs. w0 b10. ; pattern:= pattern shift(-3); rl. w2 b12. ; al w2 x2+8 ; param addr:= param addr + 8; rs. w2 b12. ; jl x3 ; return; a21: jl. w3 c30. ; goto name length alarm g10 ; c15: jl. w3 c14. ; name and do: name param; jl. c11. ; goto do; c16: al. w3 c0. ; numerical param: prepare return to next char; c17: rl. w1 b4. ; procedure numerical param: al w0 0 ; am. (b12.) ; ds w1 +2 ; param area:= 0, number; rl. w0 b10. ; so w0 2 ; if number forbidden then jl. c34. ; goto param alarm; jl. a6. ; goto update pattern; c18: jl. w3 c17. ; numerical and do: numerical param; jl. c11. ; goto do; e. ; end central actions \f ; sl 7.6.71 insert, replace term1 ...11... ; edit actions. b. a10 w. ; c27: rl. w1 b4. ; store numerical: w1:= char:= number; sn w1 10 ; if char = newline then jl. c33. ; goto char alarm; sl w1 1 ; if char < 1 sl w1 128 ; or char >= 128 then jl. c33. ; goto char alarm; c19: jl. w3 c2. ; pack line: pack char; g11 ; full alarm is line length; jl. c0. ; goto nextchar; c20: rs w1 x3+d2 ; replace: special char:= char; jl. c28. ; get line; c40: jl. w2 c29. ; return: get free corr; al w0 0 ; al w1 x3+d35 ; partial of line := 0; ds. w1 b20. ; word of line := abs line base; al. w2 b15. ; rs. w2 b14. ; template addr:= first of template; al. w2 c41. ; rs. w2 b11. ; comm addr:= terminate replace; jl. c0. ; c21: jl. w2 c29. ; insert: get free corr; al. w2 c42. ; rs. w2 b11. ; comm addr:= terminate insert; jl. c0. ; c22: jl. w2 c29. ; delete: get free corr; jl. a1. ; goto terminate delete; c23: jl. (b11.) ; end edit: switch to terminating action; ; in replace the char 50 must be remembered in the following ex. 7/a/b/50 c55: rl. w1 b4. ; w1:=number sn w1 0 ; jl. (b11.) ; if number = 0 then end edit actions sl w1 1 ; if char < 1 or sl w1 128 ; char > 128 then jl. c33. ; goto char alarm jl. w3 c2. ; pack the char g11 ; name length is full alarm jl. (b11.) ; end edit actions c41: jl. w3 c43. ; terminate replace: w1:= char from line; sn w1 10 ; if w1 <> nl then jl. c42. ; begin jl. w3 c2. ; pack char; g11 ; full alarm is line length; jl. c41. ; goto terminate replace; ; end; c42: al w1 10 ; terminate insert: jl. w3 c2. ; pack char(nl); g11 ; full alarm is line length; a1: rl. w3 b0.+2 ; terminate delete: w3:= page 1 abs; rl. w2 b2. ; w2:= curr text; al w1 x2+4 ; last on corr page := ws. w1 b0.+6 ; curr text + 4 - page 3 abs; rx. w1 (b0.+6) ; w1:= old last on corr page; ws. w1 (b0.+6) ; w1:= - length of corr; rl. w0 b16. ; w0:= line number; ds w1 x2+4 ; save line number, - length of corr; rl w1 x3+d9 ; al w1 x1+2 ; top corr list:= top corr list + 2; rs w1 x3+d9 ; jl. c44. ; goto after action; \f ; sl 7.6.71 insert, replace term1 ...12... c24: rl. w2 b14. ; pack template: sl. w2 b17. ; if template addr > last of template jl. c35. ; then goto template length alarm; hs w1 x2 ; template(template addr):= char; al w2 x2+1 ; rs. w2 b14. ; template addr:= template addr + 1; jl. c0. ; goto next char; c26: al w1 0 ; prep numerical: rs. w1 b4. ; number:= 0; jl. c0. ; goto next char; ; search template: copies the line until a text string matching ; the template is met. the string and blinds preceding it are not copied. c25: al. w2 b15. ; search template: w2:= p:= addr first template; a3: sn. w2 (b14.) ; match next: if p = top template then jl. c0. ; goto next char; template skipped. jl. w3 c43. ; w1:= char:= char from line; se. w2 b15. ; if p = first template then jl. a2. ; begin rs. w1 b22. ; saved char:= char; dl. w0 b20. ; saved pos:= pos in line; ds. w0 b23. ; end; a2: bl. w0 x1+g5. ; rep: w0:= char class; al. w3 a2. ; prepare return to rep; sn w0 12 ; if class = blind jl. c43. ; then w1:= next char, goto rep; sn w0 6 ; if class = nl then jl. c37. ; goto not found alarm; bl w0 x2 ; w0:= template(p); al w2 x2+1 ; if template(p) = char then sn w0 x1 ; w2:= p:= p + 1, goto match next; jl. a3. ; dl. w0 b23. ; no matching: ds. w0 b20. ; pos in line:= saved pos; rl. w1 b22. ; jl. w3 c2. ; pack char(saved char); g11 ; full alarm is line length; jl. c25. ; goto search template; c45: bz w0 x3+d6 ; test state: if required edit bits so w0 g15 ; not part of console state then jl. c38. ; goto state alarm; al w0 g15 ; rs w0 x3+d37 ; conversational:= required edit bits; jl. c5. ; goto first digit; \f ; sl 7.6.71 insert, replace term1 ...13... ; the next char is read and returned in w1, b19 contains the ; remaining chars. If no more chars (b19=0) then a new word ; is read. B20 contains the address of the line. c43: dl. w1 b19. ; char from line: w2 saved, w3 = return. sn w1 0 ; w0:= 0; w1:= partial of line; jl. a4. ; if partial = 0 then next word; a5: ld w1 8 ; w0:= char; w1:= remaining chars; rs. w1 b19. ; partial of line:= remaining chars; rl w1 0 ; w1:= char; jl x3 ; return; a4: rl. w1 b20. ; next word: al w1 x1+2 ; word of line:= word of line + 2; rs. w1 b20. ; rl w1 x1 ; w1:= line(word of line); jl. a5. ; return to char from line; c28: rl. w0 b4. ; get line: rs w0 x3+d10 ; w0:= saved line number:= rs w0 x3+d33 ; line got:= number; al w0 x3+d25 ; w0:= addr of return point; rl w1 x3+d16 ; rl. w3 (b42.) ; rs w1 x3+12 ; page 3 descr:= work page; dl. w3 b28. ; jl. w1 (b45.) ; w0 call init line; jl. c46. ; if io alarm then goto io alarm; al w0 d34 ; last store rel:= last of line; al w1 d35 ; base store rel:= base of line; ds w1 x3+d19 ; al w0 2 ; abs or page:= page 1; rs w0 x3+d18 ; al w0 x3+d25 ; dl. w3 b27. ; jl. w1 (b45.) ; w0 call next line; jl. c46. ; if io alarm then goto io alarm; jl. c39. ; if line too long then goto line length alarm; rl w0 x3+d10 ; se w0 (x3+d33) ; if saved line <> line got then jl. c37. ; goto not found alarm; rs. w0 b4. ; number:= saved line; jl. c40. ; return to replace; \f ; sl 7.6.71 insert, replace term1 ...14... c29: ws. w2 b0. ; get free corr: w2:= return rel; rl. w1 b4. ; w1:= line number:= number; rl. w3 b0.+2 ; w3:= page 1 abs; rs w1 x3+d33 ; save line number for >verify< ds w2 x3+d11 ; save line number, return rel; rl w0 x3+d9 ; w0:= top corr list; sl w0 g12 ; if w0 >= max top corr list then jl. c36. ; goto no room alarm; am (0) ; rs w1 x3+0 ; corr list(top corr):= line number; am (x3+d12) ; rl w1 x3+2 ; w1:= virt corr segm(curr corr segm); rl. w3 (b42.) ; rs w1 x3+12 ; page 3 descr:= w1; jl. w3 (b24.) ; get pages; rl. w2 b0.+6 ; w2:= page 3 abs; rl w1 x2 ; w1:= last on corr page; sh w1 g13 ; if w1 > max last on corr page then jl. a6. ; begin rl w1 x3+d12 ; w1:= curr corr segm; sl w1 g14 ; if curr corr segm >= max then jl. c36. ; goto no room alarm; al w1 x1+4 ; rs w1 x3+d12 ; curr corr segm:= curr corr segm + 4; wa w1 6 ; w1:= addr of corr segm descr; rl w0 x3+d9 ; rs w0 x1-4 ; old corr limit:= top corr list; rl. w0 b25. ; rs w0 x1 ; corr limit:= large; rl w1 x1+2 ; w1:= virt corr segm(curr corr segm); rl. w3 (b42.) ; rs w1 x3+12 ; page 3 descr:= w1; jl. w3 (b24.) ; get pages; rl. w2 b0.+6 ; w2:= page 3 abs; al w1 0 ; last on corr page:= w1:= 0; rs w1 x2 ; end; a6: wa w1 4 ; w1:= curr text:= last on corr page + page 3 abs; al w2 x1+g16 ; w2:= top text:= curr text + max line length; ds. w2 b3. ; al w0 0 ; w0:= sh count:= 0; rs. w0 b1. ; dl w2 x3+d11 ; line number:= saved line number; rs. w1 b16. ; w2:= return rel; jl. x2+b0. ; return; \f ; bbj 76 10 25 autoline term1 ...14a... ; autoline - remaining initializations. g41=k-g1 ; al w0 g31 ; rs w0 x3+d3 ; curr state := state g31 telling that we are in autoline. ; now autoline has been initialized and behaves ; like insertion but with empty input buffer jl. c44. ; therefore - goto after action. ; print next lineno - used by autoline ; first the mode is set to conversational. ; second the parameters to print general are set in page 1 ; at last the call is performed. c57: bz w0 x3+d6 ; test state (see c45) so w0 g15 ; if required edit bits not part of console state then alarm jl. c38. ; al w0 g15 ; conversational:=required edit bits rs w0 x3+d37 ; al w0 -13 ; start of parameters to general print rl w1 x3+d86 ; ds w1 x3+6 ; first param := linenumber to write al w0 0 ; al w1 19 ; ds w1 x3+10 ; second param := space al w0 -6 ; rs w0 x3+ 12 ; end of parameters al w1 x2 ; dl. w3 b51. ; jl. (b29.) ; call general print -end of next line no c56: rl. w3 b0.+2 ; w3 := page 1 add rl w0 x3+d86 ; w0 := current lineno. wa w0 x3+d87 ; w0 := w0+linedistance sl. w0 (b41.) ; if w0 > large then jl. c33. ; number too large rs w0 x3+d86 ; old line := newline jl. c42. ; jump to terminating action for current line e. ; end edit actions \f ; sl 7.6.71 alarms, tables term1 ...15... b. a10 w. ; entries to print segment g10= 9, g11= 0 ; name length, line length alarm. ; alarms: c54: am 43-35 ; 43: input line skipped c53: am 35-30 ; 35: line termination c52: am 1 ;30 device unknown c51: am 21 ;29 limited c31: am 1 ;8 what alarm: c32: am 1 ;7 syntax alarm: c33: am 1 ;6 numerical alarm: c34: am 1 ;5 param alarm: c35: am 1 ;4 template length: c36: am 1 ;3 no room: c37: am 1 ;2 template not found: c38: am 1 ;1 state alarm: illegal command. c39: al w1 0 ;0 line length alarm: a1: am b39-b40; alarm: a2: al. w2 b40. ; alarm(hard error): rl. w3 b0.+2 ; rs w1 x3+d7 ; param:= alarm code; al w0 g20 ; state:= start; rs w0 x3+d3 ; rs w0 x3+d5 ; top buf:= buffer empty; al w0 8 ; conversational:= true; rs w0 x3+d37 ; rs w0 x3+d1 ; partial word:= dummy; dl w3 x2 ; jl. (b13.) ; page jump to alarm or hard error; c30: rl w1 x3 ; alarm code in (x3): jl. a1. ; w1:= alarm code; goto alarm; c48: rs w0 x3+d26 ; terminal io alarm: logical status:= w0; am d41-d22 ; c46: al w1 d22 ; io alarm: param:= relative name addr; jl. a2. ; alarm(hard error); e. ; g5: h. ; character table: each entry gives the character class. ; NUL SOH STX ETX EOT ENQ ACK BEL BS HT NL VT FF CR SO SI 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 6, 12, 8, 12, 12, 12 ; DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 12, 12, 12, 12, 12, 12, 12, 12, 12, 6, 12, 12, 12, 12, 12, 12 ; SP ! apo pou dol per & ' ( ) * + , - . / 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 ; 0 1 2 3 4 5 6 7 8 9 : ; < = > que 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, 8, 8, 8, 8 ; ca A B C D E F G H I J K L M N O 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 ; P Q R S T U V W X Y Z Æ Ø AA ci _ . 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 ; apo a b c d e f g h i j k l m n o 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; p q r s t u v w x y z æ ø aa bar DEL 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 12 w. \f ; sl 7.6.71 tables term1 ...16... ; syntax table. each row corresponds to one state. each entry consists ; of action and new state. the comments give the action. ; 0: letter , 2: digit , 4: space , 6: nl,etc., 8: other ,10:special g20=k-j1; start state h. c6-j2,g21, c45-j2,g25, c0-j2,g20, c1-j2,g20, c32-j2,g29 ;first lett., test state, empty , empty , alarm g21=k-j1; in command name c4-j2,g21, c31-j2,g21, c8-j2,g22, c10-j2,g20, c32-j2,g29 ; pack name , pack name , find comm.,find and do, alarm g22=k-j1; expecting parameter c12-j2,g23, c5-j2,g24, c0-j2,g22, c11-j2,g20, c32-j2,g29 ; prep name ,first digit, empty , do , alarm g23=k-j1; in name param c4-j2,g23, c4-j2,g23, c13-j2,g22, c15-j2,g20, c32-j2,g29 ; pack name , pack name , name param,name and do, alarm g24=k-j1; in number param c32-j2,g29, c7-j2,g24, c16-j2,g22, c18-j2,g20, c32-j2,g29 ; alarm , digit , num. param,num. and do, alarm g25=k-j1; in edit head c20-j2,g26, c7-j2,g25, c21-j2,g27, c22-j2,g20, c20-j2,g26 ; replace , digit , insert , delete , replace g26=k-j1; in template c24-j2,g26, c24-j2,g26, c24-j2,g26, c32-j2,g20, c24-j2,g26, c25-j2,g27 ;pack templ.,pack templ.,pack templ., alarm ,pack templ.,search templ. g27=k-j1; in edit line or after template c19-j2,g27, c19-j2,g27, c19-j2,g27, c23-j2,g20, c19-j2,g27, c26-j2,g28 ; pack line , pack line , pack line , end edit , pack line , prep num. g28=k-j1; in numerical character c33-j2,g29, c7-j2,g28, c0-j2,g28, c55-j2,g20, c33-j2,g29, c27-j2,g27 ; alarm , digit , empty , end edit , alarm , store num. g29=k-j1; skip command c0-j2,g29, c0-j2,g29, c0-j2,g29, c1-j2,g20, c0-j2,g29 ; empty , empty , empty , empty , empty g30=k-j1; expecting login c50-j2,g23, c32-j2,g29, c0-j2,g30, c1-j2,g30, c32-j2,g29 ; prep login, alarm , empty , empty , alarm g31=k-j1; autoline c19-j2,g31, c19-j2,g31, c19-j2,g31, c56-j2,g31, c19-j2,g31, ; pack char pack char pack char new line pack char. w. \f ; sl 14.6.71 command list term1 ...17... ; command table: ; ; each entry is four words describing one command: ; ; ------------------------- ; ! 1. ! 2. ! 3. ! first three letters of command ; ------------------------- ; ; ------------------------- ; ! 4. !!p5!p4!p3!p2!p1! fourth letter, parameter specif. ; ------------------------- ; ; ------------------------- ; ! virt. address ! virtual address of command code ; ------------------------- ; ; ------------------------- ; ! bit mask ! rel.addr. ! required bits in user rights,cons.state ; ------------------------- relative address of command code ; ; ; each of the parameterspecifications consists of 3 bits like this: ; ; text allowed < 2 + integer allowed < 1 + empty allowed < 0 ; ; ; required bits in user rights, console state are composed like this: ; ; 0 0 0 0 0 0 0 0 0 0 0 0 ; A A A A A A A A A A A A ; ! ! ! ! ! ! ! ! ! ! ! '- operator rights ; ! ! ! ! ! ! ! ! ! ! '--- user only (console state) ; ! ! ! ! ! ! ! ! ! '----- ready only (console state) ; ! ! ! ! ! ! ! ! '------- conversational (console state) ; ! ! ! ! ! ! ! '--------- half operator - start,job ; ! ! ! ! ! ! '----------- may know other user names ; ! ! ! ! ! '------------- may run jobs with non-std job options ; ! ! ! ! '--------------- may run jobs with std job options only ; ! ! ! '----------------- may convert files ; ! ! '------------------- unassigned ; ! '--------------------- unassigned ; '----------------------- unassigned ; ; ; When a command action is entered during runtime, page 1 holds ; the return point (byte 0 to 3 on page 1), and the actual parameter ; list (byte 4 to i46+3). Each parameter occupies 8 bytes like this: ; number : 0, value of number, undefined, undefined ; name : name packed as text with unused words zerofilled ; first unused param: -1, undefined, undefined, undefined ; The command action may use the entire parameter list as working ; space. The value of a number fullfills 0 <= number < 1000 000. ; If the relative entry is even, page 4 will be the job description ; page. Otherwise page 4 descr is 0. ; command p5 p4 p3 p2 p1 virt.addr. required bits rel.addr. command name \f ; bbj 76 10 25 online command table term1 ...17a... g6=k-8 <:cle:>, 97<16+2.000 000 001 100 101, g78: 251, h.2.000000001100, g79: 253 w. ; clear <:get:>, 0<16+2.000 000 001 101 100, g80: 206, h.2.000000001100, g81: 208 w. ; get <:lis:>, 116<16+2.000 000 001 011 011, g82: 162, h.2.000000001100, g83: 209 w. ; list <:ver:>, 105<16+2.000 000 001 011 011, g220:162, h.2.000000001100, g221:174 w. ; verify <:sav:>, 101<16+2.000 000 001 101 100, g84: 206, h.2.000000001100, g85: 207 w. ; save <:log:>, 111<16+2.000 000 000 000 001, g86: 215, h.2.000000000000, g87: 216 w. ; logout <: :>, 0<16+2.000 001 011 010 100, g96: 215, h.2.000000000000, g97: 220 w. ; login c. e25-1 <:nam:>, 101<16+2.001 011 101 100 010, g101:296, h.2.000000000001, g102:297 w. ; name <:lab:>, 101<16+2.001 011 101 100 010, g103:296, h.2.000000000001, g104:298 w. ; label <:eve:>, 110<16+2.001 011 101 100 010, g198:296, h.2.000000000001, g199:487 w. ; even <:nrz:>, 0<16+2.001 011 101 100 010, g200:296, h.2.000000000001, g201:488 w. ; nrz <:nrz:>, 101<16+2.001 011 101 100 010, g202:296, h.2.000000000001, g203:489 w. ; nrze z. <:con:>, 118<16+2.000 001 011 111 100, g105:237, h.2.000100000110, g106:238 w. ; convert <:go:>, 0<16+2.000 000 000 000 001, g107:237, h.2.000010000110, g108:239 w. ; go <:run:>, 0<16+2.000 000 000 000 001, g109:237, h.2.000001000110, g110:240 w. ; run <:new:>, 106<16+2.000 000 001 101 100, g214:237, h.2.000001000100, g215:232 w. ; newjob <:reg:>, 114<16+2.000 000 001 101 010, g111:237, h.2.000001000100, g112:241 w. ; regret <:job:>, 0<16+2.000 000 001 101 010, g113:237, h.2.000000010100, g114:242 w. ; job <:ans:>, 119<16+2.000 001 011 111 100, g115:244, h.2.000000000001, g116:245 w. ; answer <:kil:>, 108<16+2.000 000 000 001 111, g117:244, h.2.000000000000, g118:246 w. ; kill <:aut:>, 111<16+2.000 000 001 011 111, g257:130, h.2.000000001100, g258:132 w. ; autoline <:dis:>, 112<16+2.000 001 111 111 101, g119:247, h.2.000000000000, g120:248 w. ; display <:req:>, 117<16+2.000 000 000 000 001, g121:247, h.2.000000100000, g122:249 w. ; request <:kit:>, 0<16+2.000 000 000 001 010, g124:247, h.2.000000000001, g125:250 w. ; kit <:ren:>, 97<16+2.000 000 001 100 100, g126:251, h.2.000000001100, g127:252 w. ; rename <:sco:>, 112<16+2.000 000 001 100 100, g128:251, h.2.000000001100, g129:243 w. ; scope <:loo:>, 107<16+2.000 000 001 101 100, g222:251, h.2.000000001100, g223:307 w. ; lookup <:sta:>, 114<16+2.000 001 101 101 110, g130:244, h.2.000001000000, g131:254 w. ; start <:rep:>, 101<16+2.000 000 001 111 010, g132:244, h.2.000000000001, g133:255 w. ; repeat <:clo:>, 115<16+2.000 000 000 000 001, g135:244, h.2.000000000001, g136:256 w. ; close <:cha:>, 110<16+2.000 000 001 010 010, g138:244, h.2.000000000001, g139:258 w. ; change c. -1 <:new:>, 116<16+2.000 000 000 001 100, g188:244, h.2.000000000001, g189:295 w. ; newtape z. \f ; bbj 76 10 25 online command table term1 ...17b... <:sel:>,101<16+2.1011 011 011 110 010, g204:385, h.2.000000000001, g205:396 w. ; select <:rej:>,101<16+2.1011 011 011 110 010, g206:385, h.2.000000000001, g207:397 w. ; reject <:acc:>, 111<16+2.000 000 000 001 010, g142:400, h.2.000001000100, g143:464 w. ; accounts <:are:>, 97<16+2.000 000 000 001 010, g144:400, h.2.000001000100, g145:456 w. ; areas <:buf:>, 0<16+2.000 000 000 001 010, g146:400, h.2.000001000100, g147:455 w. ; buf <:cbu:>, 102<16+2.000 000 000 001 010, g148:400, h.2.000001000100, g149:468 w. ; cbuf <:dev:>, 105<16+2.000 000 000 001 110, g150:473, h.2.000001000100, g151:466 w. ; device <:int:>, 101<16+2.000 000 000 001 010, g152:400, h.2.000001000100, g153:453 w. ; internals <:key:>, 0<16+2.000 000 000 001 010, g154:400, h.2.000001000100, g155:457 w. ; key <:lat:>, 101<16+2.000 000 001 011 010, g156:400, h.2.000001000100, g157:460 w. ; latest <:mou:>, 110<16+2.000 000 000 001 010, g158:400, h.2.000001000100, g159:461 w. ; mounts <:out:>, 112<16+2.000 000 000 001 010, g160:400, h.2.000001000100, g161:462 w. ; output <:per:>, 109<16+2.000 001 010 010 100, g162:400, h.2.000001000100, g163:458 w. ; perm <:pro:>, 103<16+2.000 000 000 001 100, g164:400, h.2.000001000100, g165:454 w. ; program <:siz:>, 101<16+2. 001 010+i178*4 , g166:400, h.2.000001000100, g167:452 w. ; size <:sta:>, 116<16+2.000 000 000 001 010, g168:400, h.2.000001000100, g169:465 w. ; stations <:sus:>, 112<16+2.000 000 000 001 010, g170:400, h.2.000001000100, g171:469 w. ; suspends <:tap:>, 101<16+2.000 000 000 001 010, g172:473, h.2.000001000100, g173:467 w. ; tapes <:tem:>, 112<16+2.000 001 011 010 100, g174:400, h.2.000001000100, g175:459 w. ; temp <:tim:>, 101<16+2.000 001 011 011 010, g176:400, h.2.000001000100, g177:463 w. ; time <:onl:>, 105<16+2.000 000 000 001 100, g178:400, h.2.000001000100, g179:483 w. ; online <:cor:>, 101<16+2.000 000 000 001 010, g180:400, h.2.000001000100, g181:484 w. ; corelock <:tra:>, 110<16+2.000 001 101 100 100, g182:259, h.2.000000000100, g183:260 w. ; transmit <:kit:>,108<16+2.1010 010 010 100 010, g184:247, h.2.000000000001, g185:263 w. ; kitlabel <:att:>, 0<16+2.000 000 000 001 100, g186:162, h.2.000000000000, g187:264 w. ; att <:res:>, 111<16+2.000 000 001 011 100, g190:247, h.2.000000000000, g191:265 w. ; resource <:mes:>, 115<16+2.000 000 001 010 100, g192:247, h.2.000000000100, g193:485 w. ; message <:rem:>, 111<16+2.000 000 000 001 100, g194:247, h.2.000000000001, g195:486 w. ; remove \f ; bbj 76 10 25 online command table term1 ...17c... <:tes:>, 116<16+2.000 001 011 010 010, g196:244, h.2.000000000001, g197:490 w. ; test <:clo:>, 99<16+2.000 000 000 000 001, g210:162, h.2.000000000000, g211:491 w. ; clock <:sto:>, 112<16+2.000 000 000 001 100, g212:237, h.2.000000000001, g213:506 w. ; stop <:min:>, 105<16+2.000 000 000 001 100, g216:400, h.2.000001000100, g217:420 w. ; minimal <:pri:>, 111<16+2.000 000 000 001 010, g226:400, h.2.000001000100, g227:372 w. ; priority <:wai:>, 116<16+2.000 000 000 001 010, g228:400, h.2.000001000100, g229:373 w. ; wait <:pre:>, 115<16+2.000 000 000 001 100, g230:400, h.2.000001000100, g231:374 w. ; preserve <:sna:>, 112<16+2.000 000 001 101 100, g255:130, h.2.000000000001, g256:131 w. ; snapshot <:hot:>, 110<16+2.000 000 000 001 111, g261:247, h.2.000000000000, g262:137 w. ; hotnews <:lin:>,107<16+2.000 000 000 001 010, g188:400, h.2.000100000100, g189:526 w. ; link c. e61-1 <:cal:>, 108<16+2.000 000 001 100 010, g263:244, h.2.000000000001, g264:528 w. ; call z. g17=g86 ; virt, g18=g87 ; rel logout action (in case of forced logout) g46=g96-4 ; index for simulated login command \f ; sl 13.6.72 command list term1 ...21... ; for further commands g7: ; top command table i.e. \f ; sl 29.6.71 bulk file term1 ...22... b. b30, c20 w. ; begin commandio bulk file g9: ; b0: 0, r.5 ; page addresses and a zero for abs addressing 21<12+0 ; pageident: commandio bulk file g8=k-b0, 0 ; zero for abs adressing(next line) b1: 3<12, 0 ; input from basis file b2: 0 ; last addr, last get b3: 0 ; segment in operation b4: e30>9 ; segments in work page b5: g70: 2 ; send and wait fast b6: 1<18 ; end doc b7=b2 ; last get b8: 25<16 ; em-character b9: g71: 8 ; page jump b10=k+2, 0, 0 ; work for subroutines b11: 0 ; last store b12: 1000 001 ; large b13: 1<6+1<14+1<22; mask for checknl b14: 127 ; mask for checknl b15: 1000 000 ; large - 1 b16: 1000 ; handling of ff b17: 1<5+1<13+1<21; mask prior to call of checknl b18: g72: 7 ; get pages b19: 0 ; top line b20: 0 ; abs base corr b21: g73: 26 ; current corutine b22=k+2,g74:202,g75:203; entry after action b23: -15 ; for checknl b24: g123:33 ; terminate access \f ; sl 7.6.71 bulk file term1 ...23... ; procedure transfer: w1 = abs store, w2 = return, page 3 = work page. ; returns with w1 = updated abs store, w2 = base segment buffer, w3 = ; page 1 abs, abs last store and abs last get updated. generates 6 em-chars ; when the basis file is exhausted (or not present). performs a page return ; after hard errors with logical status in page 1. b. a10 w. ; c13: rl. w3 b0.+2 ; transfer and account: rl w0 x3+d44 ; ba. w0 1 ; operations:= operations + 1; rs w0 x3+d44 ; c1: rl. w3 b0.+2 ; transfer: w3:= page 1 abs; ws. w2 b0. ; w2:= return rel:= return - page 0 abs; am (x3+d18) ; rl. w0 +b0. ; w0:= page abs; ws w1 0 ; w1:= store rel:= abs store - page abs; ds w2 x3+d20 ; save return rel, store rel; rl. w1 b0.+6 ; w1:= fa:= page 3 abs; al w2 x1+e30-2 ; w2:= la:= fa + work page length - 2; ds. w2 b2. ; rl w0 x3+d21 ; w0:= current segment in basis file (see initline) rs. w0 b3. ; segm in op:= segment; wa. w0 b4. ; rs w0 x3+d21 ; segment:= segment + segments in work page; al. w1 b1. ; w1:= message; al w2 x3+d22 ; w2:= name; rl w0 x2+8 ; if name table addr dummy then sh w0 50 ; goto generate em; jl. a1. ; jl. w3 (b5.) ; send and wait fast; w0:= logical status; rl. w2 b0.+6 ; w2:= base segment buffer:= al w2 x2-2 ; page 3 abs - 2; sz. w0 (b6.) ; if end doc then jl. a1. ; goto generate em; se w0 2 ; if not normal answer then jl. a2. ; goto io alarm; al w0 x2 ; last get:= wa w0 x1+2 ; base segment buffer + bytes transferred; a3: rs. w0 b7. ; exit: jl. w1 c2. ; update store; w1:= abs store; am (x3+d20) ; w2 = base segment buffer jl. b0. ; return to page 0 abs + return rel; a1: rl. w1 b8. ; generate em: rl. w2 b0.+6 ; w2:= base segment buffer:= al w2 x2-2 ; page 3 abs - 2; rs w1 x2+2 ; buffer:= one em-char; al w0 x2+2 ; last get:= base segment buffer + 2; jl. a3. ; goto exit; a2: rs w0 x3+d26 ; io alarm: logical status:= w0; dl w3 x3+d25 ; return from bulk procedure, jl. (b9.) ; e.g. nextline, init line; e. ; \f ; sl 7.6.71 bulk file term1 ...24... ; procedure update store: w1 = return, w3 = page 1 abs. ; returns with w2, w3 unchanged, w1 = abs store. b. a10 w. ; c2: rs. w1 b10. ; update store: save return; am (x3+d18) ; rl. w1 +b0. ; w0:= w1:= page abs; al w0 x1 ; aa w1 x3+d19 ; w0:= a1: rs. w0 b11. ; last store:= page abs + last store rel; jl. (b10.) ; return; ; procedure update next corr: w2 = return, w3 = page 1 abs. ; return: w1, w3 unchanged, page 3 descr = work page, next corr line ; and next corr index updated. ; The routine searches the correction list to find the next ; line to be used by save etc. The found linenumber is stored ; in page1 rel d28 and the index to the linenumber in the ; correction list is stored in d29. c3: ds. w2 b10. ; update next corr: save w1, return; al w0 6 ; used already:= 6; rs w0 x3+d30 ; compensate for loop code in next line. rl w0 x3+d28 ; ba. w0 1 ; w0:= next corr line + 1; rl w2 x3+d9 ; wa. w2 b0.+2 ; w2:= abs top corr list; rl. w1 b12. ; w1:= large; a2: sn w2 x3+d14 ; rep: w1 = smallest line number >= w0. jl. a3. ; if w2 = first of corr list then goto byp; al w2 x2-2 ; w2:= preceding in corr list; sh w0 (x2) ; if w0 <= line(w2) sh w1 (x2) ; and line(w2) < w1 then jl. a2. ; begin rl w1 x2 ; w1:= line(w2); rs w2 x3+d29 ; next corr index:= w2; jl. a2. ; end; goto rep; a3: rl w2 x3+d29 ; byp: next corr index:= ws. w2 b0.+2 ; next corr index - page 1 abs; ds w2 x3+d29 ; next corr line:= w1; rl w0 x3+d16 ; rl. w2 (b21.) ; rs w0 x2+12 ; page 3 descr:= work page; dl. w2 b10. ; reestablish w1; jl x2 ; return; ; procedure update get: w1 = return, returns with w2 = get addr. c4: rl. w2 b0.+6 ; update get: w2:= page 3 abs; al w0 x2+e30-2 ; last get:= page 3 abs rs. w0 b7. ; + work page length - 2; wa w2 x3+d32 ; w2:= get addr:= jl x1 ; next file index + page 3 abs; return; e. ; \f ; sl 7.6.71 bulk file term1 ...25... ; procedure checknl: w0 = text word possibly containing nl, em, or ff. ; w1 = store addr, w2 = get addr, w3 = return. ; returns to x3+2 when nl, em, or ff was present, to x3 otherwise. ; w1, w2 unchanged, next file line updated, w0 = the characters ; belonging to the preceding line - including nl etc. ; the buffer element given by w2 holds the remaining characters. ; if w0 = 0 initially, w1 is decreased by 2 to avoid storing ; empty words. b. a10 w. ; c5: sn w0 0 ; checknl: if empty word then al w1 x1-2 ; decrease store addr; c16: al w0 0 ; check no decrease: preceding chars:= 0; ; continue checknl: as checknl, but preceding chars loaded prior to ; entry. store addr is never decreased. c14: ds. w2 b10. ; continue checknl: save store addr, get addr; rl w1 x2 ; ls w1 1 ; w1:= text word or (text word shift 1); lo w1 x2 ; so. w1 (b13.) ; if all chars >= 32 sn w1 0 ; or empty word then jl. a7. ; goto exit0; am. (b0.+2) ; save return; rx w3 +d31 ; w3:= next file line; rl w1 x2 ; w1:= text word; a1: ld w1 8 ; rep: w0 = first chars, w1 = remaining chars. rl w2 0 ; la. w2 b14. ; w2:= char:= w0 mod 128; bl. w2 x2+a2. ; jl. x2+a6. ; switch to chartable(char); a4: se. w3 (b15.) ; em: if w3 <> large - 1 then replace em by nl; wa. w0 b23. ; never return em until next file line has rl. w1 b8. ; been large; w1:= remaining chars:= em; rl. w3 b15. ; w3:= large - 1; jl. a8. ; goto exit; a5: sl. w3 (b15.) ; if next file line>=1000000 then jl. c8. ; goto file too long; al w2 0 ; w3:= next file line wd. w3 b16. ; // 1000 * 1000 + 1000; wm. w3 b16. ; al w3 x3+1000 ; jl. a1. ; goto rep; a6: se w1 0 ; other: jl. a1. ; if remaining chars <> 0 then goto rep; am. (b0.+2) ; rx w3 +d31 ; save next file line; w3:= return; a7: dl. w2 b10. ; exit0: reestablish w1, w2; jl x3 ; return; a3: sl. w3 (b15.) ; if next file line>=1000000 then jl. c8. ; goto file too long; al w3 x3+10 ; w3:= next file line + 10; a8: am. (b0.+2) ; exit: rx w3 +d31 ; save next file line; w3:= return; rs. w1 (b10.) ; buffer(get addr):= remaining chars; dl. w2 b10. ; reestablish w1, w2; jl x3+2 ; return; a2: h. 0, r.10, a3-a6, 0, a5-a6, 0, r.12, a4-a6, 0, r.102; char table ; 10: nl 12: ff 25: em e. \f ; sl 7.6.71 bulk file term1 ...26... ; page procedure nextline: page 1 must contain: last store rel, base ; store rel, abs or page, return virtual and relative. page 3 ; must be the work page. init line must have been called. ; at return, line got gives the actual line number, base store rel ; is updated to point to the last word got. ; return takes place to: ; return + 0 : after io alarm, line got contains logical status. ; return + 2 : when the line was too long. the remaining part ; of the line is delivered at next call of get line. ; return + 4 : normal return. ; next line, init line, and bulk get are procedures common for ; commandio and psjob. as a consequence they may not use the ; work area on job file page, but only the variables dedicated ; for them. this also applies to the return point. b. a20 w. ; g36= k-g9 ; c6: rl w0 x3+d31 ; nextline: sl w0 (x3+d28) ; if next corr line <= next file line jl. a4. ; then goto line from corrections; ; line from basis file: rs w0 x3+d33 ; line got:= next file line; jl. w1 c4. ; update get; w2:= get addr; jl. w1 c2. ; update store; w1:= abs store; a1: sl. w2 (b7.) ; rep: if get addr >= last get then jl. w2 c1. ; transfer; al w2 x2+2 ; w2:= get addr:= get addr + 2; sl. w1 (b11.) ; if abs store >= last store then jl. a2. ; goto file line too long; al w1 x1+2 ; w1:= abs store:= abs store + 2; rl w0 x2 ; core(abs store):= core(get addr); rs w0 x1 ; so. w0 (b17.) ; if the word does not contain jl. w3 c5. ; nl, ff, or em jl. a1. ; then goto rep; rs w0 x1 ; core(abs store):= chars belonging to line; am 2 ; w0:= 4; prepare normal return; c17: ; a2: al w0 2 ; file line too long: w0:= 2; prepare return; al w2 x2-2 ; get addr:= get addr - 2; ready for ; examining the word again. a3: rl. w3 b0.+2 ; exit: w3:= page 1 abs; ws. w2 b0.+6 ; w2:= next file index:= rs w2 x3+d32 ; get addr - page 3 abs; a11: am (x3+d18) ; exit1: rl. w2 +b0. ; w2:= page abs; ws w1 4 ; w1:= store rel:= abs store - page abs; rs w1 x3+d19 ; dl w3 x3+d25 ; w2:= return virt; wa w3 0 ; w3:= return rel + w0; jl. (b9.) ; page jump; c9: am 4 ; end save: prepare return to end save; c8: al w0 2 ; return init: w0:= 2; prepare jl. a3. ; return; goto exit; \f ; sl 7.6.71 bulk file term1 ...27... c15: ; a4: rl w0 x3+d28 ; line from corrections: rs w0 x3+d33 ; se w0 (x3+d31) ; line got:= next corr line; jl. a6. ; if next corr line = next file line then ; begin comment skip line in file; jl. w1 c4. ; update get; w2:= get addr; jl. w1 c2. ; update store to set w1 = abs store; a5: sl. w2 (b7.) ; rep: if get addr >= last get then jl. w2 c1. ; transfer; al w2 x2+2 ; w2:= get addr:= get addr + 2; rl w0 x2 ; w0:= core(get addr); so. w0 (b17.) ; if the word does not contain jl. w3 c16. ; nl, ff, or em jl. a5. ; then goto rep; rl. w3 b0.+2 ; w3:= page 1 abs; ws. w2 b0.+6 ; w2:= next file index:= al w2 x2-2 ; get addr - page 3 abs - 2; rs w2 x3+d32 ; ready for examining the word again; ; end; a6: rl w2 x3+d29 ; get correction: w2:= next corr index; al w1 x3+d15 ; w1:= abs first corr segm; a7: al w1 x1+4 ; rep: w1:= next abs corr segm; sl w2 (x1-4) ; if next corr index >= corr limit(w1-4) jl. a7. ; then goto rep; rl w0 x1-2 ; rl. w3 (b21.) ; rs w0 x3+12 ; page 3 descr:= virt corr segm(w1 - 4); jl. w3 (b18.) ; get pages; correction page ready. rl. w2 b0.+6 ; w2:= abs base corr:= wa w2 x2 ; page 3 abs + last on corr page; a8: dl w1 x2 ; rep: w0:= corr line number; w1:= -length; rs. w2 b19. ; top line:= abs last of corr; wa w2 x2 ; w2:= abs base corr:= w2 - length; se w0 (x3+d33) ; if corr line number <> line got then jl. a8. ; goto rep; correction found; rs. w2 b20. ; abs base corr:= w2; sh w1 -5 ; if length > -5 then jl. a12. ; begin line deleted. jl. w2 c3. ; update next corr; jl. w3 (b18.) ; get pages; goto next line; jl. c6. ; end; a12: jl. w1 c2. ; update store; w1:= abs store; wa w2 x3+d30 ; w2:= get addr:= w2 + used already; a9: sl. w1 (b11.) ; rep: if abs store >= last store then jl. a10. ; goto corr line too long; al w1 x1+2 ; abs store:= abs store + 2; rl w0 x2-4 ; core(abs store):= core(get addr - 4); rs w0 x1 ; al w2 x2+2 ; get addr:= get addr + 2; sh. w2 (b19.) ; if get addr <= top line then jl. a9. ; goto rep; \f ; sl 7.6.71 bulk file term1 ...28... jl. w2 c3. ; update next corr; w1 = abs store; al w0 4 ; w0:= 4; prepare normal return; jl. a11. ; goto exit1, set store rel; a10: ws. w2 b20. ; corr line too long: rs w2 x3+d30 ; used already:= get addr - abs base corr; al w0 2 ; w0:= 2; prepare return to jl. a11. ; line too long; goto exit1, set store rel; e. ; ; page procedure initline: page 1 must contain: line got = number of ; the first line needed, return virt and rel. page 3 must be the work ; page. returns to: ; return + 0 : after io alarm, line got contains logical status. ; return + 2 : normal return. b. a10 w. ; g37= k-g9 ; c7: rl w1 x3+d33 ; initline: al w1 x1-1 ; w1:= next corr line:= line got - 1; rs w1 x3+d28 ; jl. w2 c3. ; update next corr; al w2 x3+d17 ; w2:= base line table; a1: al w2 x2+2 ; rep: w2:= next of line table; sl w1 (x2-2) ; if line got - 1 >= line table(x2 - 2) jl. a1. ; then goto rep; ; line got <= line table(x2 - 2), i.e. start sn w2 x3+d17+2 ; of line on segment given by x2 - 4, except al w2 x2+2 ; in case of segment 0, where x2 is increased. ac w1 x3+d17+4 ; wa w1 4 ; w1:= segment:= as w1 -1 ; (w2 - base line table - 4)/ 2; rs w1 x3+d21 ; segment = -1 for empty files. rl w0 x2-4 ; next file line:= line table(x2 - 4); rs w0 x3+d31 ; jl. w2 c1. ; transfer; w2:= base segment buffer; a3: rl. w3 b0.+2 ; test: w3:= page 1 abs; rl w0 x3+d33 ; w0:= line got; beware of line 0. sh w0 (x3+d31) ; if line got <= next file line then jl. c8. ; goto return init; a2: sl. w2 (b7.) ; rep: if get addr >= last get then transfer; jl. w2 c1. ; only needed if file is changed meanwhile. al w2 x2+2 ; w2:= get addr:= w2+2; rl w0 x2 ; so. w0 (b17.) ; if core(get addr) does not contain jl. w3 c5. ; nl, ff, em then jl. a2. ; goto rep; al w2 x2-2 ; w2:= get addr:= w2-2; prepare examining the word again. jl. a3. ; goto test; e. ; \f ; sl 29.6.71 bulk file term1 ...29... ; page procedure bulk get: initialises the line table. page 1 must contain: ; return virtual and relative, line table index = nextfile line = segment = 0. ; page 3 must be the work page. return takes place to: ; return + 0: after io alarm. ; return + 2: when the file was too long. ; return + 4: normally. b. a10 w. ; g38=k-g9 ; al w2 0 ; rs w2 x3+d33 ; line got := 0; (prepare for >verify< command) c10: jl. w2 c13. ; bulk get:transfer and account; w2 = get addr = base buffer. rl w0 x3+d31 ; w0:= next file line; a1: rl w1 x3+d32 ; set line table: w1:= index; sl w1 2+2*i47; if index > 2 * max segments in file then jl. c8. ; goto return init; i.e. file too long. am x3+d17 ; rs w0 x1+0 ; line table(index):= next file line; sl. w0 (b15.) ; if next file line >= large - 1 then jl. a2. ; goto exit; rs w0 x3+d33 ; line got := next file line; (>verify< again) al w1 x1+2 ; rs w1 x3+d32 ; index:= index + 2; a3: sl. w2 (b7.) ; rep: if get addr >= last get then jl. c10. ; goto bulk get; al w2 x2+2 ; w2:= get addr:= get addr + 2; rl w0 x2 ; so. w0 (b17.) ; if core(get addr) does not contain jl. w3 c5. ; nl. ff, or em jl. a3. ; then goto rep; rl. w3 b0.+2 ; w3:= page 1 abs; rl w0 x3+d31 ; w0:= next file line; sl. w0 (b15.) ; if next file line >= large - 1 then jl. a1. ; goto set line table; rs w0 x3+d33 ; line got := next file line; (>verify< again) al w2 x2-2 ; get addr:= get addr - 2; ready for examining jl. a3. ; the word again; goto rep; a2: dl w3 x3+d25 ; exit: al w3 x3+4 ; jl. (b9.) ; page jump to return + 4; e. ; ; page procedure bulk save: page 1 must contain: last store rel, ; base store rel, abs or page ( must be 8), return virt and rel. ; page 3 must be the work page, page 4 must be the save buffer. ; init line must have been called. return takes place to: ; return + 0: after io alarm ; return + 2: when the store buffer is full ; return + 4: corr line stored ; return + 6: end save. \f ; sl 29.6.71 bulk file term1 ...30... b. a10 w. ; g39=k-g9 ; c11: rl w0 x3+d31 ; bulk save: sl w0 (x3+d28) ; if next corr line <= next file line jl. c15. ; then goto line from corrections; rs w0 x3+d33 ; line from basis file: line got:= next file line; jl. w1 c4. ; update get; w2:= get addr; jl. w1 c2. ; update store; w1:= store addr; a1: sl. w2 (b7.) ; rep: if get addr >= last get then jl. w2 c13. ; transfer and account; al w2 x2+2 ; w2:= get addr:= get addr + 2; sl. w1 (b11.) ; if store addr >= last store then jl. c17. ; goto file line too long; i.e. buffer full. al w1 x1+2 ; w1:= store addr:= store addr + 2; rl w0 x2 ; core(store addr):= core(get addr); rs w0 x1 ; so. w0 (b17.) ; if the word does not contain jl. w3 c5. ; nl, ff, or em jl. a1. ; then goto rep; a2: rl. w3 b0.+2 ; test end: w3:= page 1 abs; rl w2 x3+d33 ; notice that get addr is saved in b10. sn. w2 (b15.) ; if line got = large - 1 then jl. c9. ; goto end save; rl w2 x3+d31 ; w2:= rs w2 x3+d33 ; line got:= next file line; sl w2 (x3+d28) ; if next file line >= next corr line jl. a3. ; then goto prep corr line; rl. w2 b10. ; w2:= saved get addr; jl. w3 c14. ; continue checknl; jl. a1. ; if no nl, ff, or em then goto rep; jl. a2. ; goto test end; ; the basisfile is copied strictly word by word, except when a ; correction is to be inserted. the modified chars belonging ; to the line (possibly em replaced by nl or some chars missing) ; are then saved. a3: rs w0 x1 ; prep corr line: save modified chars; rl. w2 b10. ; al w2 x2-2 ; w2:= next file index:= ws. w2 b0.+6 ; saved get addr - 2 - page 3 abs; rs w2 x3+d32 ; ready for examining the word again. ws. w1 b0.+8 ; rs w1 x3+d19 ; w1:= store rel:= abs store - page 4 abs; jl. c15. ; goto line from corrections; e. ; \f ; sl 29.6.71 bulk file term1 ...31... ; page procedure clear corrections: page 3 must be first corr segm, ; page 3 = unused at return. b. a10 w. ; g40=k-g9 ; c12: al w0 d14 ; clear corrections: rs w0 x3+d9 ; top corr list:= first of corr list; al w0 d15 ; rs w0 x3+d12 ; curr corr segm:= first corr segm; rl. w0 b15. ; rs w0 x3+d15 ; limit first corr segm:= large - 1; rs w0 x3+d17 ; first of line table:= large - 1; al w0 0 ; rs. w0 (b0.+6) ; last on first corr segm:= 0; rl. w2 (b21.) ; rs w0 x2+12 ; page 3 descr:= not used; al w2 x3+d22 ; w2:= name of basis file; jl. w3 (b24.) ; terminate access; al w0 0 ; basis file.name table addr := 0; rs w0 x3+d22+8 ; makes clear corrections idempotent. rs w0 x3+d22 ; name:=undef; for test primout. dl w3 x3+2 ; jl. (b9.) ; return; e. ; g4=k-g9 ; top bulk file page i.e. \f ; sl 12.11.71 initialization term1 ...32... ; initialisation. ; commandio reserves the psjob descriptions and inserts into their ; page 3 description the virtual address of the job file page. ; in pass 2, commandio will also get the job descr virt address ; from the psjob descriptions (page 4). this procedure requires that ; commandio is loaded first. b. a20, b25 w. ; g3=g0+2000 ; stepping stone: base of addressing b0=g0-g3 ; displacement for addressing b1: g88: 0 ; base of external table b2: g89: 12 ; reserve virt b3: g90: 13 ; move to virt b4: g91: ; psjob descriptions h. e12*i45, 18 w. ; b5: g92: ; commandio descriptions h. e12*i4+e12,18w.;+2 b6: g93: 14 ; simulate lock b7: g94: 15 ; end init b8: g95: 27 ; new line b9: g134:22 ; terminal output descr h.100<3+e95,g98: 224 w.;-2 start commio, test mode, relative b10: g99: 162 ; virtual = list etc. b11: 0 ; init corr segment b12: 0 ; count corr pages b13: 0 ; virt job file b14: 0 ; incarnations ; list of words to be increased from incarnation to incarnation: ; commandio increments: b18: h. d65+b0,e13, d39+b0,e13, d38+b0,e13, d40+b0,10, d42+b0,i3 b5-g3,e12, d70+b0,e13, b9-g3,e12, d80+b0,e13 ; psjob increments: b20: d50+b0,e13, d51+b0,e13, b4-g3,e12, b20-g3,0 w. b21: g7-g1 ; length of comio central code page g43: \f ; sl 5.7.71 initialization term1 ...33... a2: al. w3 g3. ; w3:= begin bulk file. (base of addressing) rl w0 x3+d39+b0 ; insert values in ext table: rs. w0 g246. ; first attention semafore rl w0 x3+d40+b0 ; rs. w0 g247. ; first terminal sender descr rl w0 x3+d50+b0 ; rs. w0 g248. ; first psjobque semafore rl w0 x3+d51+b0 ; rs. w0 g249. ; first job in core semafore dl. w1 b5. ; rs. w0 g250. ; first psjob; rs. w1 g251. ; commandio descr; al w0 i56 ; reserve and move code pages: rl. w1 b21. ; reserve for commio central jl. w3 (b2.) ; rs. w2 g252. ; virt commandio central; am. g3. ; al w0 g1-g3 ; w0:= begin commio central; jl. w3 (b3.) ; move to virt; al w0 i56 ; al w1 g4 ; jl. w3 (b2.) ; reserve for commio bulk file; rs. w2 g253. ; virt commio bulk free; jl. w3 (2) ; set externals; g245: 40 ; d6 , 179 ; d16, 189 ; virt addr work page; d18, 188 ; abs on page; d19, 187 ; base store rel; d33, 190 ; line got - logical status of alarm; d36, 177 ; job description page; d50, 175 ; psjob queue; d51, 176 ; job in core; d52, 180 ; exhaust count; d53, 181 ; rest room on page; d54, 182 ; job buffer index; d55, 183 ; get current virt buffer addr; d56, 184 ; message address; d57, 185 ; first of job (even); d58, 186 ; top of job; d59, 191 ; rest room on page; d60, 192 ; job buffer index; d61, 193 ; virt buffer; d62, 194 ; first buffer byte; d63, 195 ; name of superbuffer area; d64, 196 ; length of superbuffer (no of segments*512-512); d65, 197 ; terminal full; d66, 198 ; prog state (and answer rel); d67, 199 ; current virtual address of card buffer; d68, 200 ; last received status of cardreader; d69, 201 ; card length; g36, 158 ; rel nextline; g37, 161 ; rel initline; g35, 203 ; rel after action; g38, 211 ; rel bulk get; g39, 212 ; rel bulk save; g40, 213 ; rel clear correction; g41, 133 ; rel autoline d81, 429 ; rel next store in job input area; d42, 178 ; first address of terminal buffer; d41, 217 ; terminal name; d22, 218 ; basis file name; g45, 219 ; rel read login information; d38, 221 ; rel terminal reserve; d39, 223 ; rel attention semaphore; d40, 222 ; rel terminal sender descr addr; d44, 226 ; rel(-2:login time), operations performed; d45, 227 ; rel std interval; d15+2, 228 ; rel of first correction segment; d32, 230 ; rel next file index; d21, 231 ; rel segm number in base file; d70, 236 ; rel commandio answer semaphore; d41, 300 ; rel terminal name; d71, 299 ; rel state of term output; d72, 301 ; rel next byte; d72+2, 302 ; rel buf byte; d73, 303 ; rel virt byte; d73+2, 304 ; rel appetite; d74, 305 ; rel out bytes; d66+1, 450 ; card reader (job) start rel of input buf; d75, 446 ; tape reader (job) prog state (and answer rel); d76, 447 ; tape reader (job) start rel; d77, 448 ; tape reader (job) curr. virt addr. of tape buf; d78, 449 ; tape reader (job) last received status; d25, 257 ; rel return from nextfile etc.; d79, 474 ; rel current papertype on jobfile page; d80, 306 ; rel terminal input semaphore; d43, 494 ; rel time logged in on jobfile page; d2 , 289 ; rel special char and logout cause; d82, 367 ; rel cards free jobcontrolled; d83, 368 ; rel cards full jobcontrolled; d84, 369 ; rel first virt card jobcontrolled; d85, 370 ; rel top virt card jobcontrolled; d86, 135 ; autoline current line d87, 136 ; - lineincrement d88, 134 ; terminal user rights (rel on job file page); d90, 518 ; reader free sem d91, 519 ; reader full sem d92, 520 ; first virt buffer d93, 521 ; top virt buffer g8 , 155 ; value for abs page (nextline); g246: 0 , 62 ; first attention semapgore; g247: 0 , 163 ; first terminal sender descr; g248: 0 , 63 ; first psjobque semaphore; g249: 0 , 64 ; first job in core semaphore; g250: 0 , 100 ; first psjob; g251: 0 , 101 ; commandio descr; (:g2+511:)>9+i62,507; segments in save buffer + jobfile; g252: 0 , 202 ; virt commio central; g253: 0 , 157 ; virt commio bulk file; 0 , -1000 ; end of externals; al. w0 g9. ; jl. w3 (b3.) ; move to virt; c.-1 ; if no main console termout then include the following rl. w1 b9. ; decrease termout descr to account for main console; al w1 x1-e12 ; rs. w1 b9. ; am. g3. ; rl w1 g69-g3 ; al w1 x1-e13 ; decrease term full semafore; am. g3. ; rs w1 g69-g3 ; am. g3. ; rl w1 g140-g3; al w1 x1-e13 ; decrease input semafore; am. g3. ; rs w1 g140-g3 ; z. ; \f ; sl 5.7.71 initalization term1 ...34... a3: al w0 i57 ; next incarnation: al w1 g2 ; jl. w3 (b2.) ; reserve for job file; al w2 x2+1 ; write page; rs. w2 b13. ; save virt addr; rl. w3 b4. ; w3:= psjob descr; rs w2 x3+12 ; page 3 descr:= job file; rl w0 x3+14 ; am. g3. ; job descr page:= page 4 descr; rs w0 +d36+b0; al w0 i58 ; al w1 e30 ; jl. w3 (b2.) ; reserve for work page; al w2 x2+1 ; write page; am. g3. ; rs w2 +d16+b0; al w0 i59 ; al w1 512 ; jl. w3 (b2.) ; reserve for primary output buf; al w2 x2+1 ; write page; am. g3. ; rs w2 +d61+b0; al w1 0 ; count:= 0; a4: rs. w1 b12. ; next corr segment: al w0 i60 ; al w1 512 ; jl. w3 (b2.) ; reserve for one corr segment; al w2 x2+1 ; write page; rl. w1 b12. ; am. g3. ; rs w2 x1+d15+2+b0; corr segment(count):= virt addr; al w1 x1+4 ; count:= count+ 4; se w1 4*i44 ; if count <> 4 * number of corr segments jl. a4. ; then goto next corr segment; rl. w2 b13. ; al w1 g2 ; am. g3. ; al w0 g0-g3 ; move job file to virt; jl. w3 (b3.) ; \f ; sl 5.7.71 initialization term1 ...35... rl. w1 b14. ; sh w1 i45-i4-2; if incarnations >= no of off-line jobs then jl. a5. ; begin c.-1 ; if no mainconsole termout then include: sn w1 i45-i4-1; if incarnations <> no of off line jobs then jl. a7. ; z. ; rl. w0 b13. ; rl. w2 b9. ; page 1 of termout:= job file virt addr; rs w0 x2+8 ; a7: rl. w2 b5. ; w2:= commio descr; rl. w0 b13. ; rs w0 x2+8 ; page 1 descr:= job file virt addr; al. w3 g3. ; w3:= addressing base; rl w2 x3+d40+b0 ; w2:= sender table addr; rl w1 x3+d39+b0 ; rs w1 x2+2 ; sender table.sem:= attention sem; rl. w1 b5. ; w1:= commio descr; am. g3. ; rl w2 +d39+b0; w2:= attention sem; jl. w3 (b6.) ; simulate lock; dl. w3 b10. ; return, page 0:= start commandio; ds w3 x1+6 ; bl. w1 b10.-2 ; al w1 x1+1<3 ; next corutine ident; hs. w1 b10.-2 ; al. w3 g3. ; w3:= addressing base; al w0 30 ; console state:= unlogged, ready user; hs w0 x3+d6+b0 ; end; am b18-b20; commandio increments only after commio incarn. a5: al. w2 b20. ; increase semafore addresses, etc: a6: bl w1 x2 ; rep: w1:= relative address:= byte 0; rl. w0 x1+g3. ; ba w0 x2+1 ; increase word by byte 1; rx. w0 x1+g3. ; al w2 x2+2 ; w2:= addr of next two bytes; se. w0 (x1+g3.) ; if word not changed then jl. a6. ; goto rep; jl. w3 (b8.) ; new line; listing of virt addresses. rl. w1 b14. ; al w1 x1+1 ; incarnations:= incarnations + 1; rs. w1 b14. ; se w1 i45 ; if incarnations <> number of psjobs jl. a3. ; then goto next incarnation; jl. w3 (b7.) ; end init; e. ; i.e.; end segment \f ; sl 7.7.71 command print term1 ...36... s. b50, c20, g90 w. ; h2=h1-k ; continue external list g20. g21., g22., g23., g24., g25., g26., g27., g28., g29., g30. g31., g32., g33., g34., g35., g36., g37., g38., g39., g40. g41., g42., g43., g44., g45., g46., g47., g48., g49., g50. g51., g52., g53., g54., g55., g56., g57., g58., g59., g60. g61., g62., g63., g64., g65., g66., g67., g68., g69., g70. g71., g72., g74., g75., g76., g77., g78., g79., g80. g81., g82.,g84.,g85.,g86. h3: h4 ; am 2000 ; jl. g4. ; goto initialise; g0: ; begin commandio list etc b0: 0, r.5 ; page addresses 22<12+0 ; pageident: command print b1: 999 999 ; large - 2 b2=k+2,g42:157, g43:161; init line b3=k+2,g44:157, g45:158; next line b4: g46: 34 ; w0 call b5: g47: 26 ; current corutine b6=k+2,g48:202, g49:203; after action b7: g50: 8 ; page jump b8: 5<12, 0, 0 ; output message b9: g51: 1 ; send and wait b10: -1<6-1<23-1<16 ; not local, attention, no output, normal b11: 1<16+15<2 ; attention or no output b12=k+2,g52:202,g53:219; read login information 100 ;b13-2: constant b13: 0 ; work, move text, io alarm r.5 ; work, used by generate date and time b14: <:<19><15><10>device status <0>:> b15: 10<16 ; nl b16: g58: 3 ; lock b17: g59: 4 ; open b18: 0 ; param addr, work for general print b19: 0 ; for set base and sense message b20: <:no:> ; att param b21: 10000*60*4 ; for time conversion: b22: 10000*60 ; b23: 15*24 ; b25: 10000 ; b26: 15 ; b27: 1461 ; no of days in 4 years b28: 365 ; no of days in 1 year b29: h. -1, 30, 58, 89,119,150; month table: 180,211,242,272,303,333; accumulated - 1 w. b30: <:.00:> ; mask \f ; sm 75.05.27 command print term1 ...36a... b24: g72: 5 ; lock chained ;***** test begin b31: 0 ; test for code bugs (or buffer sizes): first of buffer b32: 0 ;+2 - - - - - - - top of buffer ;***** test end b33: 48 ; constant b34: <: octal status = <0>:>; b35: g86: 140 ; virt, b36: g84: 146 ; rel lookup and reserve device b41: g85: 25 ; call; b37: g81: 7 ; get pages b38: 0 ; virt addr of alarm text page b39: 32<8+45 ; <: -:> b40: 45 ; <:-:> \f ; sl 7.7.71 command print term1 ...37... ; output block: w2 = return, w3 = page 1 abs. w2 odd signals ; that io alarm is to be ignored. return: w1 = base buffer, ; w3 = page 1 abs; b. a10, j10 w. ; c2: rl w1 x3+187 ; output block: w1:= base store; c3: ws. w2 b0. ; output block, w1 = last addr: rs w2 x3+i46+2 ; last work:= return rel; j1: rl w0 x3+178 ; first addr mess:= first of term buf; ds. w1 b8.+4 ; last addr mess:= w1; al. w1 b8. ; rl. w2 b5. ; w2:=current coroutine description bz w2 x2+4 ; w2:=current coroutine number sn w2 10 ; if w2=10 (= operator display) am 4-0 ; then mode:=4 al w0 0 ; else mode:=0 hs. w0 b8.+1 ; j2: al w2 x3+217 ; w2:= name of terminal; jl. w3 (b9.) ; send and wait; sz. w0 (b10.) ; if hard errors then jl. a1. ; goto test io alarm; j5: rl w1 (x3+223) ; sh w1 0 ; if attention sem > 0 or sz. w0 (b11.) ; attention or no output then jl. a3. ; goto sense; a2: rl w1 x3+178 ; w1:= first of term buf - 2; al w1 x1-2 ; am (x3+i46+2) ; return; jl. b0. ; ; this sense insures that the attention message will be accepted first a3: al. w1 b19. ; sense: w1 := sense message; al. w2 b19. ; w2:=ref zero name; jl. w3 (b9.) ; send and wait(no check on transfer); jl. c4. ; goto exit alarm; a1: rl w2 x3+i46+2 ; test io alarm: sz w2 1 ; if return odd then jl. c4. ; goto exit alarm; jl. c7. ; goto term alarm; c9: am 2 ; release: c10: al w0 -1<11+8 ; reserve: hs. w0 j3. ; al. w3 b19. ; am (66) ; dl w1 +74 ; set cat base to boss max base; jd 1<11+72; rl. w3 b0.+2 ; j4: al w3 x3+217 ; release/reserve terminal; j3=k+1, jd ; rl. w3 b0.+2 ; w3:= page 1 abs; jl x2 ; return; g10=k-b0 ; att: al w0 1 ; possible alarmtext=forbidden rx w0 x3+4 ; w0=param (yes or no) al w2 i181 ; sl w2 -1 ; if i181=0 or = -1 then sl w2 1 ; continue else ( = 1 or = -2) jl. g6. ; goto alarmprint sn. w0 (b20.) ; if param = no then am c10-c9 ; reserve else jl. w2 c9. ; release; dl. w3 b6. ; jl. (b7.) ; page jump to after action; g11=k-b0 ; clock: al w0 -10 ; param1:= time; al w1 0 ; ds w1 x3+6 ; param2 := newline; al w0 8 ; al w1 -4 ; param3:= out and after action; ds w1 x3+10 ; jl. g9. ; goto general print; g30=c2+1, g31=j1+1, g32=j2+1, g33=a2+1, g66=j4+1, g71=j5+1 e. ; \f ; sl 7.7.71 command print term1 ...38... ; login after error: waits for the first attention, prints the ; initial message, and jumps to read login information (commio central). b. a10, j10 w. ; c6: rl w2 x3+221 ; login after error: jl. w3 (b17.) ; open(terminal reserve); al w0 0 ; j1: rl w1 x3+222 ; w1:=sender table entry; rs w0 x1 ; sender descr addr:=0; rs w0 x1+8 ; sender.mess:=0; jl. w2 c9. ; release terminal; a0: ; skip internal operation: j2: rl w2 x3+223 ; jl. w3 (b24.) ; lock chained(attention); g8: al w0 0 ; hs w0 x1+2 ; release operation; bz w0 x1+3 ; start of commandio: se w0 0 ; if operation = attention and jl. a4. ; operation <> login attention then al w2 0 ; begin rx w2 x1+4 ; sender.message := 0; al w0 2 ; result := rejected; jd 1<11+22; send answer; jl. a0. ; goto skip internal operation; a4: ; end; se w0 4 ; if operation<>login attention then jl. a0. ; goto skip internal operation; rl w2 x1+4 ; jl. w3 (b17.) ; open(login att answer); j0: rl w2 x3+221 ; jl. w3 (b16.) ; lock(terminal reserve); \f ; btj 14.8.74 command print term1 ...38a... rl. w2 (b5.) ; j4: rl w1 x3+177 ; page 4 := job descr page; rs w1 x2+14 ; ; find out, whether or not the terminal is a rb-terminal j5: al w2 x3+217 ; w2:=address of terminal name; rl w0 (x2+8) ; w0:=process description address rs w0 x3+r41 ; set process description address j9: rl w0 x3+178 ; rs w0 x3+r40 ; set abs ref message area dl. w3 b36. ; jl. w1 (b41.) ; call (lookup host) jl. a6. ;+2 no rb terminal dl w1 x3+r142+2 ;+4 a3: rl. w2 b0.+8 ; w2:=job descr page j7: rs w0 x2+423 ; set host ident j8: ds w1 x2+424 ; set device host description al. w2 a1. ; w2 := text address; j3: rl w1 x3+178 ; w1 := first of terminal buffer; jl. w3 c5. ; move text; al w1 x1-2 ; jl. w2 c3. ; output block, w1 = last address; dl. w3 b12. ; jl. (b7.) ; page jump to read login information; a6: al w0 0 ; host ident :=0 jl. a3. ; a1: <:type user name and project number<10><0>:> g60=c6+1, g61=j1+1, g62=j2+1, g63=j0+1, g64=j3+1 g76=j4+1, g77=j5+1, g78=j8+1, g79=j7+1, g80=j9+1, g2: rl. w2 b0.+2 ; message action: rl. w1 b0.+6 ; a2: rl w0 x1 ; copy operation to rs w0 x2 ; al w1 x1+2 ; param space on al w2 x2+2 ; se w2 x3+i46+4 ; page 1; jl. a2. ; e. ; \f ; kll 17.10.72 command print term1 ...38b... ; general print: the parameter list contains items with this format: ; name of 4 words : printed ; 0, text index : text index = 0, 1, 2... the text is printed ; -2, integer : the integer is printed using 4 positions. ; -4 : output block and goto after action ; -5 : as -6, but no output block ; -6 : output block and return (at return (x3+4) = last addr) ; -8, text length, text: print text; ; -10 : print time ; -12, abs buffer start : set own buffer addr ; -13, integer : as -14, but with layout <<-d> ; -14, integer : the integer is printed with the layout << -d> ; -16 : page 3 is interpreted as a request line and printed ; -18 : a text to appear after login is included via j.-code b. a30, f60 w. ; g9: rl w1 x3+178 ; general print: w1:= first of terminal buf; ;***** test begin al w2 x1+i3 ; w2 := top of terminal buffer; ds. w2 b32. ; save first,top; ;***** test end al w2 x3+4 ; w2:= addr of param 1; jl. a1. ; goto byp; a19: rl w1 x2+2 ; start line: first store addr := param; ;***** test begin rl. w2 b1. ; top := large; ds. w2 b32. ; save first,top; ;***** test end a3: al w2 4 ; rep: a2: wa. w2 b18. ; rep(param length): w2:= increased param addr; a1: rs. w2 b18. ; byp: param addr:= w2; w1 = first store addr. rl w0 x2 ; w0:= param type; sl w0 1 ; if w0 >= 1 then jl. a4. ; goto print name; am (0) ; jl. +a0. ; switch to action; jl. a23. ;-18 goto print text from options jl. a21. ;-16 goto print request line jl. a20. ;-14 goto print signed integer jl. a19. ;-12 goto start line; jl. a12. ;-10 goto time jl. a9. ;-8 goto long text; jl. a8. ;-6 goto out and return; jl. a7. ;-4 goto out and after action; jl. a6. ;-2 goto print integer 4; a0: jl. a5. ;0 goto print text; \f ; btj 14.8.74 command print term1 ...38c... g65=g9+1 ; general print actions: a4: al w0 8 ; print name: w0:=text length; jl. w3 c11. ; move text; jl. a1. ; goto general print, byp; a5: rl w2 x2+2 ; print text: al. w2 x2+a10. ; w2:= text index + text table base ba w2 x2 ; + text table (text index); jl. w3 c5. ; move text; jl. a3. ; goto rep; a6: al w1 x1+2 ; print integer 4: w1:= last store addr; rl w0 x2+2 ; w0:= integer; al w2 4 ; w2:= 4 positions; jl. w3 c1. ; convert number; ;***** test begin al w1 x1+2 ; w1 := store addr; sl. w1 (b31.) ; if printed integer >= 1000 000 then jl. 4 ; c.-1, o102 , z. ; (bossfault xref) jd -102 ; bossfault 102; al w1 x1-2 ; w1 := base store addr; ;***** test end al w1 x1+6 ; w1:= top store addr; jl. a3. ; goto rep; a7: al w1 x1-2 ; out and after action: ;***** test begin sl. w1 (b32.) ; if last address >= top of buffer then c.-1, o103 , z. ; (bossfault xref) jd -103 ; bossfault 103; ;***** test end jl. w2 c3. ; output block, w1 = last addr; dl. w3 b6. ; page jump to after action; jl. (b7.) ; a8: al w1 x1-2 ; out and return: ;***** test begin sl. w1 (b32.) ; if last address >= top of buffer then c.-1, o103 , z. ; (bossfault xref) jd -103 ; bossfault 103; ;***** test end rs w1 x3+4 ; save last addr; se w0 -5 ; if code <> -5 then jl. w2 c3. ; output block, w1 = last addr; dl w3 x3+2 ; jl. (b7.) ; page jump to return; \f ; sm 75.05.27 command print term1 ...38d... ; print signed integer with layout << -d> ; 2-4 words in the buffer is used 0 ;-2 saved last store a20: rl w3 x2+2 ; w3:=number; sn w0 -13 ; if code = -13 then am b40-b39; abort leading space; rl. w2 b39. ; w2:=32<8+45 al w0 x3 ; w0:=number; sl w0 0 ; if number >= 0 then ls w2 -8 ; delete minus sign sh w0 0 ; else ac w0 (0) ; change sign; rs w2 x1 ; store space and sign; al w3 0 ; rs w3 x1+2 ; prepare for rs w3 x1+4 ; number < 1000 al w1 x1+6 ; w1:=last store; sh. w0 (b1.) ; if number< 1 000 000 then al w1 x1-2 ; save 1 word; sh w0 999 ; if number < 1 000 then al w1 x1-2 ; save another word; al w2 1 ; w2:=min print pos; rs. w1 a20.-2 ; save last store jl. w3 c1. ; convert number; rl. w1 a20.-2 ; w1:=last store; al w1 x1+2 ; w1:=top store; jl. a3. ; goto rep (next parameter) g3: al w1 0 ; from create output: first store addr := 0; a12: rs. w1 b13.+8 ; generate date and time: jd 1<11+36; get clock(w0, w1); ld w3 -100 ; wd. w1 b21. ; w1:= fourmin:= clock // (10000 * 60 * 4); wd. w0 b22. ; clock:= clock mod (10000 * 60 * 4); wd. w3 b25. ; min:= clock // (10000 * 60); rs. w0 b13. ; clock:= clock mod (10000 * 60); al w0 0 ; w3:= sec:= clock // 10000; wd. w1 b23. ; w1:= days:= fourmin // 360; rx w3 0 ; w0:= w3:= sec; w3:= fourmin:= fourmin mod (15 * 24); al w2 0 ; w3:= hour:= fourmin // 15; wd. w3 b26. ; w2:= fourmin:= fourmin mod 15; as w2 2 ; wa. w2 b13. ; w2:= min:= fourmin * 4 + min; ds. w3 b13.+2 ; save min, hour; ld w0 -100 ; julian calendar: wd. w1 b27. ; w1:= years:= days // 1461 * 4 + 68; as w1 2 ; w0:= days:= days mod 1461; al w1 x1+68 ; se w0 59 ; if days = 59 then jl. a13. ; begin comment leap year; al w2 2 ; w2:= month:= 2; al w3 29 ; w3:= date:= 29; jl. a15. ; goto date found; ; end; \f ; sm 75.05.27 command print term1 ...38e... a13: sl w0 59+1 ; if days > 59 then bs. w0 1 ; days:= days - 1; wd. w0 b28. ; year:= year + days // 365; wa w1 0 ; days:= days mod 365; al w2 13 ; w2:= month:= 13; a14: al w2 x2-1 ; search month: bl. w0 x2+b29.-1 ; w2:= month:= month - 1; sh w3 (0) ; if days <= month table(month) jl. a14. ; then goto search month; ws w3 0 ; date:= days - month table month; a15: al w1 x1+1900 ; date found: add century rx. w1 b13.+8 ; save year; w1=first store addr; ds. w3 b13.+6 ; save month, date; sn w1 0 ; if called from create output then jl. c0. ; goto pack date and time; al w1 x1+2 ; prepare for 4 digits rl. w0 b13.+8 ; year jl. w3 a18. ; convert (4 digits) al w1 x1+2 ; w1:=first store; rl. w0 b13.+4 ; month jl. w3 a16. ; convert and add point rl. w0 b13.+6 ; date jl. w3 a16. ; convert and add point rl. w0 b13.+2 ; hour jl. w3 a17. ; convert (3 digits) rl. w0 b13. ; minute jl. w3 a16. ; convert and add point al w1 x1+4 ; w1 := top store addr (=first store addr) al w2 2 ; w2 := param length jl. a2. ; goto rep(param length); a16: rs. w3 b13.+8 ; convert and add point: save return; jl. w3 a17. ; convert (3 digits); rl w0 x1+2 ; lo. w0 b30. ; add <:.00:>; rs w0 x1+2 ; jl. (b13.+8); return; a17: al w1 x1+4 ; convert (3 digits): am 3-4 ; w1 := top store addr; a18: al w2 4 ; convert (4 digits): w2 := positions; jl. c1. ; goto convert number; \f ; kll 17.10.72 command print term1 ...39... a9: rl w0 x2+2 ; long text: w0:=length; al w2 x2+4 ; w2:=first get addr; jl. w3 c11. ; move text; jl. a1. ; goto general print, byp; a21: rl. w2 b0.+6 ; print request line: w2:=request line; rl w0 x2+4 ; w0:=length; al w2 x2+6 ; w2:=first get addr; jl. w3 c11. ; move text; al w2 10 ; store nl rs w2 x1 ; after text al w1 x1+2 ; al w2 2 ; w2:=param length jl. a2. ; goto general print, rep(param length); b. j4 w. j1: 0,r.10 ; j2: h30.-h29+e101-4 ; a text to appear after login is included j3: al. w1 j1. ; al. w2 j2. ; wa w2 x2 ; j4: rl w0 x2 ; rs w0 x1 ; al w1 x1+2 ; al w2 x2+2 ; sh. w1 j1.+20 ; if w1<= length of text then jl. j4. ; goto rep al w0 0 ; al w2 0 ; jl x3 ; jl. j3. ; j. ; end of j.-code to include a text from options a23: al. w2 j1. ; w2:= get addr al w0 20 ; w0:= length of text jd-1 jd-1 jl. w3 c11. ; move text al w2 10 ; insert nl rs w2 x1 ; al w1 x1+2 ; al w2 2 ; jl. a2. ; e. ; procedure move text: jl. w3 c11. ; call: return: ; w0= text length undef. ; w1= first store addr top store addr ; w2= first get addr top get addr ; w3= link page 1 abs 0 ;-2 return addr c11: rs. w3 c11.-2 ; move text: save return; a22: rl w3 x2 ; next: rs w3 x1 ; move one word; al w2 x2+2 ; increase get addr; se w3 0 ; al w1 x1+2 ;-2 increase store addr; bs. w0 -1 ; decrease text length; sl w0 1 ; if text length >= 1 then jl. a22. ; goto next; rl. w3 b0.+2 ; w3:=page 1 abs; jl. (c11.-2); return; \f ; bbj 76 10 25 command print term1 ...39a... a10: h.f0., f1., f2., f3., f4., f5., f6., f7., f8., f9., f10.,f11., f12., f13., f14., f15., f16., f17., f18., f19. f20.,f21.,f22.,f23.,f24.,f25.,f26.,f27.,f28.,f29. f30.,f31.,f32.,f33.,f34.,f35.,f36.,f37.,f38.,f39. f40.,f41.,f42.,f43.,f44.,f45.,f46.,f47.,f48.,f49. f50.,f51. w. f0: <:<10>logged in<0>:> f1: <: min. operations<0>:> f2: <: tape jobs waiting<10><0>:> f3: <: loading <0>:> f4: <: reserving <0>:> f5: <: waiting <0>:> f6: <: in core <0>:> f7: <: swopped out<0>:> f8: c. i171 <:<30><30><30><30><13><10><127><0>:> z. c. -i171 <:<13><10><127><0>:> z. f9: <:*********unknown error code 9<10><0>:> ; not used f10: <:*********unknown error code 10<10><0>:>; not used f11: <:<19><15><10>end transmit<10><0>:> ; <19>= stop reader, <15>= start print f12: <:<19><15><10>mode unknown<10><0>:> f13: <:<19><15><10>no resources<10><0>:> ; from transmit f14: <:<19><15><10>harderror input<10><0>:> ; from transmit (probably not used) f15: <:<19><15><10>harderror output<10><0>:> ; from transmit (probably not used) f16: <:a:> f17: <:b:> f18: <:<10>from <0>:> f19: <: :> f20: <:in: <0>:> f21: <:end display<10><0>:> f22: <:end request<10><0>:> f23: <:wait<10><0>:> f24: <:no such job<10><0>:> f25: <:<0>:> f26: <: login<0>:> f27: <:stat entr disc<0>:> ; from display f28: <: con acco buf ar. int sus drum<0>:>; from display f29: <: size<0>:> ; from display f30: <:boss2 performance <0>:> ; from display f31: <:<10>logout caused by <0>:> ; from logout f32: <:harderror on terminal<0>:> ; do. f33: <:operator remove<0>:> ; do. f34: <:timeout on terminal<0>:> ; do. f35: <:login<0>:> ; from print catalog entry f36: <:user<0>:> ; do. f37: <:project<0>:> ; do. f38: <:system<0>:> ; do. f39: <:***<0>:> ; do. f40: <: =set<0>:> ; do. f41: <:; <0>:> ; do. f42: <:.<0>:> ; do. f43: <:no<0>:> ; from regret \f ; lkn 20.10.75 command print tterm1 ...39b... f44: <:: <0>:> ; from display convert f45: <: files <0>:> ; from display convert f46: <:paper<0>:> ; from display convert f47: <: segments <0>:>; from display convert f48: <:after <0>:> ; from display convert f49: <:primout <0>:>; from display convert f50: <:job contr <0>:>; from display convert f51: <: d.<0>:> ; from print catalog entry e. \f ; sl 7.7.71 command print term1 ...40... ; convert number: w0 = number, w1 = last store addr, w2 = minimum ; print positions, w3 = return. return: w3 = page 1 abs, w1 = base ; store addr. b. a10 w. ; c1: rs. w3 a1. ; convert number: save return; ls w2 12 ; w2:= remaining positions, char pos = 0; a2: al w3 0 ; digit: wd. w0 a3. ; w0:= number:= number// 10; al w3 x3+48 ; w3:= remainder + 48; a4: wa. w2 a5. ; print: w2:= remaining pos - 1, char pos + 4; hs. w2 a6. ; a6=k+1, jl. ;+0 switch to char pos; a3: 10 ;+2 also: byte = 0 al w1 x1-2 ;+4 first char: decrease store addr; jl. a7. ;+6 goto store; ls w3 8 ;+8 second char: shift 8; jl. a8. ;+10 goto pack; hl. w2 a3. ;+12 last char: char pos:= 0; ls w3 16 ; shift 16; a8: wa w3 x1+2 ; pack: w3:= shifted char + core(store addr + 2); a7: rs w3 x1+2 ; store: core(store addr + 2):= w3; se w0 0 ; if number <> 0 then jl. a2. ; goto digit; al w3 32 ; fill: w3:= space; sl w2 100 ; if remaining positions > 0 then jl. a4. ; goto print; rl. w3 b0.+2 ; w3:= page 1 abs; jl. (a1.) ; return; a1: 0 ; saved return a5: -1<12+4 ; update w2 ; pack date and time: w3 = date c0: rl. w3 b13.+4 ; page1(0):= wm. w3 b13.-2 ; month*100+date; wa. w3 b13.+6 ; ls w3 12 ; rl. w2 b13.+8 ; +year shift 12 ld w3 12 ; rx. w2 (b0.+2) ; rl. w3 b13.+2 ; page 1 (1) := ls w3 12 ; hour shift 12 wa. w3 b13. ; + min; am. (b0.+2) ; rx w3 +2 ; jl. (b7.) ; return; e. ; \f ; sl 7.7.71 list,verify term1 ...41... ; verify: 0, 1, or 2 integer parameters ; specifying: 0: verify line got ; 1: verify the line specified ; 2: verify the line specified and the specified number of following lines ; list: 0, 1, or 2 integer parameters specifying the interval of lines ; to be listed. b. a10, d10, j20 w. ; begin list d1=6, d2=14 ; param 1 and param 2 relative d3=4 ; top line number d4=6 ; print number. (boolean, 0 = false) d5=8 ; number address (abs) d6=10 ; number of lines to print g12: dl w2 x3+d1 ; verify: sl w1 0 ; if param 1 empty then jl. a4. ; begin j12: rl w2 x3+190 ; line to get := line got; jl. a7. ; no of lines := 1; ; end else a4: dl w1 x3+d2 ; begin line to get := param 1; sh w0 -1 ; no of lines := if param 2 empty then a7: al w1 1 ; 1 else param 2; rs w1 x3+d6 ; end; j13: rs w2 x3+190 ; line got := line to get; rl. w1 b1. ; top line := large-2 + 1; al w1 x1+1 ; rs w1 x3+d3 ; jl. a8. ; goto init list; g5: dl w2 x3+d1 ; list: sl w1 0 ; if param 1 empty then jl. a1. ; begin al w2 0 ; w2:= line got:= 0; jl. a2. ; w1:= top line number:= large - 2 +1; a1: dl w1 x3+d2 ; end else sh w0 -1 ; begin top line number:= a2: rl. w1 b1. ; (if param 2 empty then large - 2 al w1 x1+1 ; else param 2) + 1; sh w1 x2 ; if top line <= line got then al w1 x2+1 ; top line :=line got + 1; rs w1 x3+d3 ; line got:= param 1; j1: rs w2 x3+190 ; end; rl. w1 b1. ; no of lines to print := large-2; rs w1 x3+d6 ; a8: ; init list: j4: rl w1 x3+189 ; j10: al w0 x3+257 ; w0:= store return addr; al w2 0 ; page 3 descr:= work page; rl. w3 (b5.) ; page 4 descr:= 0; ds w2 x3+14 ; dl. w3 b2. ; jl. w1 (b4.) ; w0 call init line; jl. c8. ;+0 goto file alarm; j14: al w0 155 ; j2: rs w0 x3+188 ; abs or page:= abs; rs w0 x3+d4 ; print number:= true; j3: rl w1 x3+178 ; al w1 x1-2 ; w1:= base terminal buffer; \f ; sl 7.7.71 list term1 ...42... a3: al w0 i3-2 ; list next: w0:= last store:= j5: wa w0 x3+178 ; length buf - 2 + first of term buf; rl w2 x3+d4 ; w1 = base store. se w2 0 ; w1:= base store:= al w1 x1+6 ; if print number then w1 + 6 else w1; j6: ds w1 x3+187 ; rs w1 x3+d5 ; j11: al w0 x3+257 ; w0:= store return addr; dl. w3 b3. ; jl. w1 (b4.) ; w0 call next line; jl. c8. ;+0 goto file alarm; am -1 ;+2 buffer full: print number:= false; al w1 1 ;+4 line stored: print number:= true; j7: rl w0 x3+190 ; w0:= line got; rl w2 x3+d6 ; sh w2 0 ; if no of lines<=0 then jl. a5. ; goto endlist; se w1 0 ; al w2 x2-1 ; decrease(number of lines to print) rs w2 x3+d6 ; rx w1 x3+d4 ; w1:=old print number; sl w0 (x3+d3) ; if line got >= top line number jl. a5. ; then goto end list; sn w1 0 ; if old print number then jl. a6. ; begin rl w1 x3+d5 ; w1:= number address; al w2 32 ; rs w2 x1 ; store space; al w1 x1-2 ; w1:= number address - 2; al w2 4 ; w2:= 4 print positions; jl. w3 c1. ; convert number(w0 = line got); j8: ; end; a6: rl w1 x3+187 ; w1:= base store; j9: rl w2 x3+178 ; w2:= first of term buf; sl w1 x2+i3-6 ; if base store >= last of term buf - 4 then jl. w2 c2. ; output block; prepare room for number. g69=k+1 ; rl w0 x3+226 ; accounting: ba. w0 1 ; operations:= operations + 1; g70=k+1 ; rs w0 x3+226 ; jl. a3. ; goto list next; a5: rl w1 x3+d5 ; end list: al w1 x1-6 ; w1:= number address - 6; jl. w2 c3. ; output block, w1 = last; dl. w3 b6. ; jl. (b7.) ; goto after action; g21=j1+1, g22=j2+1, g23=j3+1, g24=j4+1, g25=j5+1, g26=j6+1 g27=j7+1, g28=j8+1, g29=j9+1, g67=j10+1, g68=j11+1, g74=j12+1, g75=j13+1 g20=j14+1 e. ; end list \f ; sl 3.1.72 alarm print term1 ...43... ; alarm: param 1 holds the alarm index. b. a10, j10 w. ; g6: rl. w2 (b5.) ; alarm: ld w1 -100 ; page 2 := page 3 := 0; ds w1 x2+12 ; rl. w1 b38. ; page 4 := alarm texts; rs w1 x2+14 ; jl. w3 (b37.) ; get pages; rl. w2 b0.+8 ; w2 := page 4 abs wa w2 x3+4 ; + alarm index ba w2 x2 ; + alarm table(alarm index); j1: rl w1 x3+178 ; w1:= first of term buf; jl. w3 c5. ; move text; rl. w2 (b5.) ; al w0 0 ; page 4 := 0; rs w0 x2+14 ; al w1 x1-2 ; w1:= last addr to print; jl. w2 c3. ; output block, w1 = last addr; c4: bl w0 x3+179 ; exit alarm: w0:= console state; sz w0 16 ; if unlogged then jl. c6. ; goto login after error; dl. w3 b6. ; jl. (b7.) ; page jump to after action; g34=j1+1, g35=c4+1 ; move text: w1 = first store, w2 = first text, w3 = return. ; return: w1 = top store, w3 = page 1 abs. c5: rs. w3 b13. ; move text: save return; a1: rl w0 x2 ; rep: rs w0 x1 ; move word; al w2 x2+2 ; se w0 0 ; al w1 x1+2 ; update pointers; sz w0 255 ; if no null stored then jl. a1. ; goto rep; rl. w3 b0.+2 ; w3:= page 1 abs; jl. (b13.) ; return; e. ; \f ; sl 7.7.71 alarm print term1 ...44... ; io alarm: line got contains logical status, param 1 relative address ; of document name. b. a10, j10 w. ; c7: rs w0 x3+190 ; terminal alarm: save logical status; j1: al w0 217 ; doc name:= param 1:= terminal name; jl. a1. ; c8: al w0 218 ; file alarm: a1: rs w0 x3+4 ; doc name:= param 1:= basis file name; g7: rl w1 x3+178 ; io alarm: w1:= first of term buf; al. w2 b14. ; w2:= <:device status:>; jl. w3 c5. ; move text; rl w2 x3+4 ; wa. w2 b0.+2 ; w2:= abs addr of doc name; jl. w3 c5. ; move text; al. w2 b34. ; w2 := <:octal status = :>; jl. w3 c5. ; move text; j2: rx w1 x3+190 ; w1 := logical status; save store address al w0 0 ; ld w3 -100 ; w2w3w0 := 0; a2: ld w3 8 ; repeat ls w3 -8 ; ld w0 8 ; w2w3w0 := w2w3w0 shift 8 ls w0 -3 ; + status shift (-21) ld w1 3 ; + 48; wa. w0 b33. ; status := status shift 3; sh w2 255 ; jl. a2. ; until w2w3w0 contains 8 characters; am. (b0.+2) ; j3: rx w1 +190 ; w1 := store addr; ds w3 x1+2 ; save octal status in buffer; rs w0 x1+4 ; al w1 x1+6 ; store addr := store addr + 6; rl. w3 b0.+2 ; a3: rl. w0 b15. ; output: store nl; rs w0 x1 ; al. w2 c4.+1 ; w2:= exit alarm, no io alarm test; jl. c3. ; output block, w1 = last; g36=c7+1, g37=j1+1, g38=c8+1, g39=g7+1, g40=j3+1, g41=j2+1 e. ; g1=k-g0 ; length of code page g13: ; start of alarm text page: b. f70 h. ; alarm table: f0., f1., f2., f3., f4., f5., f6., f7., f8., f9. f10., f11., f12., f13., f14., f15., f16., f17., f18., f19. f20., f21., f22., f23., f24., f25., f26., f27., f28., f29. f30., f31., f32., f33., f34., f35., f36., f37., f38., f39. f40., f41., f42., f43., f44., f45., f46., f47., f48., f49. f50.,f51.,f52.,f53. w. \f ; btj 14.8.74 alarm print term1 ...45... f0: <:line too long<10><0>:> ; edit, message, newjob f1: <:forbidden<10><0>:> ; console state does not allow it f2: <:not found<10><0>:> ; template matching f3: <:no room<10><0>:> ; correction list full f4: <:template too long<10><0>:> ; f5: <:param<10><0>:> ; wrong parameter kind (name-num) f6: <:illegal number<10><0>:> ; param > large or num char f7: <:syntax<10><0>:> ; state table f8: <:what<63><10><0>:> ; wrong command name f9: <:name too long<10><0>:> ; f10: <:illegal identification<10><0>:> ; from login, newjob f11: <:user index too large<10><0>:> ; from login, newjob f12: <:kit not present<10><0>:> ; from save f13: <:no resources<10><0>:> ; from save, scope, transmit f14: <:file too long<10><0>:> ; from get, newjob f15: <:file does not exist<10><0>:> ; from get, clear, newjob, lookup f16: <:kind must be w, p or r<10><0>:> ; from name, label f17: <:device not tape station<10><0>:>; from name, label f18: <:tape used by a job<10><0>:> ; from name, label f19: <:no room for output<10><0>:> ; from go, run f20: <:user index conflict<10><0>:> ; from login, newjob f21: <:no such job<10><0>:> ; from kill answer f22: <:file in use<10><0>:> ; from rename, clear, scope f23: <:kit in use<10><0>:> ; from kit change f24: <:change kit<10><0>:> ; from kit change f25: <:new name exists already<10><0>:>; from rename, call f26: <:file protected<10><0>:> ; from rename, clear, scope f27: <:device kind illegal<10><0>:> ; from start etc f28: <:killed by operator<10><0>:> ; from run, go during job start f29: <:limited<10><0>:> ; from option commands f30: <:device unknown<10><0>:> ; from option commands, start card, convert, newjob, call f31: <:primout in use<10><0>:> ; from go, run f32: <:device not disc<10><0>:> ; from kit change f33: <:project number missing<10><0>:> ; from label f34: <:forbidden, the installation is closing<10><0>:>; from go run , newjob, convert f35: <:<10>line termination<10><0>:> ; from central read f36: <:job queue full<10><0>:> ; from newjob f37: <:file not permanent<10><0>:> ; from newjob f38: <:file unreadable<10><0>:> ; from newjob f39: <:temp exceeded<10><0>:> ; from newjob f40: <:option unknown<10><0>:> ; from newjob f41: <:param at job<10><0>:> ; from newjob f42: <:syntax at job<10><0>:> ; from newjob f43: <:<10>last input line skipped<10><0>:>; from command input, start card, lookup rbprintername f44: <:parent device disconnected<10><0>:>; from rbconvert and rbnewjob f45: <:device not card reader<10><0>:> ; from start card f46: <:no more card readers<10><0>:> ; - - - f47: <:card reader busy<10><0>:> ; - - - f48: <:not same mode<10><0>:> ; - - - f49: <:wait<10><0>:> ; - - - f50: <:file is no text file<10><0>:> ; from get f51: <:bosstest not bs-area<10><0>:> ; from snapshot; f52: <:name already exists on another document<10><0>:> ; from save f53: <:device reserved<10><0>:> ; from call e. ; g14=k-g13 ; length of alarm text page \f ; sl 7.7.71 init term1 ...46... b. f10 w. ; g54: 0 ; base ext table g55: 12 ; reserve virtual g56: 13 ; move to virtual g57: 15 ; end init g4=k-2000 al w0 i56 ; w0 := commandio on disc al w1 g14 ; jl. w3 (g55.) ; reserve virtual(alarm text page); am -2000 ; rs. w2 b38.+2000; save virt addr on code page; al. w0 g13. ; jl. w3 (g56.) ; move to virtual(alarm text page); al w0 i56 ; w0:= commandio on disc al w1 g1 ; jl. w3 (g55.) ; reserve virtual rs. w2 g83. ; virtual list etc. jl. w3 (2) ; set externals; g82: 40 ; f1: g5-g0+1, 209 ; entry list; f2: g12-g0+1, 174 ; entry verify; g6-g0 , 204 ; entry alarm; g7-g0 , 205 ; entry io alarm; c8-g0 , 210 ; entry file alarm; g8-g0 , 224 ; start commandio; c6-g0 , 225 ; login after error; g9-g0 , 229 ; general print; g10+1 , 264 ; att; g2-g0 , 310 ; rel message action; g11 , 491 ; rel clock; g3-g0 , 214 ; rel date and time; g83: 0 , 162 ; virtual list etc.; 0 , -1000 ; end of externals; am -2000 ; al. w0 g0.+2000; jl. w3 (g56.) ; move to virtual am. (4) ; jl. +4 ; next init h1. ; e. ; e. \f ; lkn 24.9.75 snapshot term1 ...47... s. f10, g50 w. h4=h3-k g10.,g11.,g12.,g13.,g14.,g15.,g16.,g17.,g18.,g19. g20.,g21.,g22.,g23.,g24.,g25.,g26.,g27.,g28.,g29. g30.,g31.,g32.,g33.,g34.,g35.,g36.,g37.,g38.,g39.,g40.,g41.,g42.,g43.,g44.,g45. 0 jl. g2. ; goto initialize; f0: g10: 12 ; reserve virtual; f1: g11: 13 ; move to virtual; g2: al w0 i204 ; al w1 g1 ; w1:=length of page; jl. w3 (f0.) ; reserve virtual; al w2 x2+1 ; write page; al. w0 g0. ; w0:=start of page; jl. w3 (f1.) ; move to virtual; rs. w2 f3. ; save virt of code page; jl. w3 (2) ; set externals; g12: 40 ; f3: 0 , 130 ; virt of code; g4 , 131 ; rel of snapshot; g5 , 132 ; rel of autoline 0 , -1000 ; end of externals; am.(4,jl.4,h3.) ; goto next init; \f ; lkn 24.9.75 snapshot term1 ...48... b. b50, d10, w. g0: ; start of code page; b0: 0 ; page 0; b1: 0 ; page 1; b2: 0 ; page 2; b3: 0 ; page 3; b4: 0 ; page 4; 23<12+0 ; page identification; b5: g13: 2 ; send and wait fast; b6: g14: 8 ; page jump; b7: g15: 21 ; private output; b8: g16: 25 ; call; b9: g17: 33 ; terminate access; b10: g18: 34 ; w0 call; b11: g19: 37 ; testoutput switch; b12: g20: 38 ; current segment in bosstest; g21: 162 ; virt, b13: g22: 205 ; rel ioalarm; b14: g23: 204 ; rel alarm print; g24: 202 ; virt, b15: g25: 203 ; rel after action; g26: 206 ; virt, b16: g27: 261 ; rel create output; g28: 473 ; virt, b17: g29: 498 ; rel copy area; g30: 415 ; virt, b18: g31: 414 ; rel terminate bs adjust; b30: g35: 39 ; name table address of bosstest; b31: g39: 133 ; rel of autoline b25: g37: 26 ; current corutine descr.; b26: g38: 34 ; w0 call; b19: <:bosstest:>,0,0 ; name of testoutput area; b20: 5<12 ; output operation; 0 ; first of output; b21: 0 ; last of output; b22: 0 ; current segment in bosstest; b23: 9,1,1,0 ; stop element for testoutput; b24: 0 ; zero for set cat. base; d1 = 4 ; param1 (rel on page 1 - job file page); d2 = 12 ; param2 - d3 = 20 ; param3 - d4 = 16 ; kit name in tail; d6 = 8 ; rel of input file name; d7 = 18 ; rel of output file name; \f ; lkn 24.9.75 snapshot term1 ...49... b. a10, j10 w. g4 = k-g0 ; rel entry snapshot; rl. w2 b30. ; w2:=ext(39) - nta(bosstest); rl w2 (x2) ; w2:=processdescr.(besstest); rl w0 x2 ; w0:=process kind; se w0 4 ; if not area process then jl. a2. ; goto alarm 1; rl w1 x2+e49 ; w1:=size; jd-1 al w0 0 ; ds w1 x3+d3+2 ; param3:=size; j0: al w0 x3+262 ; w0:=rel return; dl. w3 b16. ; jl. w1 (b10.) ; w0call(create output); j1: dl w1 x3+227 ; w01:=std interval; al. w3 b24. ; jd 1<11+72; set std interval; jd-1 al w1 2 ; w1:=catalog key; rl. w3 b1. ; w3:=abs page 1; al w2 x3+d4 ; w2:=kit name in tail; al w3 x3+d1 ; w3:=file name; jd 1<11+50; permanent entry; jd-1 dl. w3 b18. ; jl. w1 (b8.) ; call(terminate bs adjust); jl. a1. ;+2 goto alarm 2; rl. w2 b4. ; w2:=abs page 4 (job descr. page); dl w1 x3+d1+2 ; move output file name; ds w1 x2+d7+2 ; dl w1 x3+d1+6 ; ds w1 x2+d7+6 ; rl w0 x3+d1+8 ; rs w0 x2+d7+8 ; dl. w1 b19.+2 ; move input file name; ds w1 x2+d6+2 ; dl. w1 b19.+6 ; ds w1 x2+d6+6 ; rl. w0 (b30.) ; rs w0 x2+d6+8 ; al w0 d6 ; w0:=rel input file name; al w1 d7 ; w1:=rel output file name; ds w1 x2+6 ; jd-1 al w0 506 ; w0:=length of tail; ls w0 6 ; shift 6 + kind; al. w1 0 ; jl. w3 (b7.) ; private output - fill buffer; al w0 -1 ; rs. w0 (b11.) ; turn off testoutput switch; rl. w0 (b12.) ; w0:=current segment in bosstest; rs. w0 b22. ; save current segment; \f ; lkn 24.9.75 snapshot term1 ...50... rl. w2 (b25.) ; w2:=current corutine descr.; rl w0 x2+8 ; w0:=virt page 1; rl w1 x2+14 ; w1:=virt page 4; rs w0 x2+14 ; page 4:=page 1 (=job file page); rs w1 x2+8 ; page 1:=page 4 (=job descr page); am. (b4.) ; al w0 +2 ; w0:=abs job descr page + rel 2; dl. w3 b17. ; jl. w1 (b26.) ; w0 call(copy area); jl. a3. ;+2 goto hard error; al w0 0 ; rs. w0 (b11.) ; turn on testoutput switch; al. w1 b23. ; w1:=first of stop element; al w2 x1+510 ; w2:=last of testout; ds. w2 b21. ; al. w1 b20. ; w1:=message; al w2 x3+d7 ; w2:=areaname; jl. w3 (b5.) ; send and wait fast; al w2 x3+d7 ; jl. w3 (b9.) ; terminate access; rl. w2 (b25.) ; w2:=current corutine descr; rl w1 x2+14 ; rs w1 x2+8 ; page 1:=page 4 (=job file page); dl. w3 b15. ; jl. w1 (b6.) ; page jump to after action; a2: al w1 51 ; alarm 1: (bosstest not bs-area); a4: rs w1 x3+4 ; param1:=alarm index; rl. w2 b13.-2 ; rl. w3 b14. ; jl. (b6.) ; page jump to alarm print; a1: al w2 x3+d1 ; alarm 2: jl. w3 (b9.) ; terminate access; al w3 x3+d1 ; w3:=file name; jd 1<11+48; remove entry; jd-1 dl. w3 b18. ; jl. w1 (b8.) ; call(terminate bs adjust); c.-1, o104, z. ; (bossfault xref); jd -104 ;+2 ***bossfault(104); al w1 13 ; w1:=alarm index (no resources); jl. a4. ; goto alarm 1; a3: al w0 0 ; hard error: rs. w0 (b11.) ; turn on testoutput switch; al w2 x3+d7 ; jl. w3 (b9.) ; terminate access; rl. w2 b4. ; w2:=abs page 4; j2: dl w1 x3+499 ; w01:=status, inout operation; j3: rs w0 x2+190 ; save status; se w1 3 ; if input operation then jl. a5. ; dl w1 x3+d6+2 ; move inputfile name; ds w1 x2+d6+2 ; dl w1 x3+d6+6 ; ds w1 x2+d6+6 ; jl. a6. ; else a5: dl w1 x3+d7+2 ; move outputfile name; ds w1 x2+d6+2 ; dl w1 x3+d7+6 ; ds w1 x2+d6+6 ; a6: al w0 d6 ; rs w0 x2+d1 ; param 1:=rel file name; rl. w2 (b25.) ; rl w1 x2+14 ; rs w1 x2+8 ; page 1:=page 4 (=job file page); al w1 0 ; rs w1 x2+14 ; page 4:=0; dl. w3 b13. ; jl. (b6.) ; page jump to ioalarm; g32=j0+1, g33=j1+1, g34=j2+1, g36=j3+1 e. \f ; bbj 76 10 25 autoline term1 ...51... ; autoline. ; the routine produces automatically linenumbers to insertion. ; Autoline has zero,one or two parameters. The first parameter,if any, ; is the startline and the second the lineincrement (linedistance). ; The following possibilities exist for the parameters : ; a) zero parameters ; default 10 is used for both the startline and the lineincrement. ; b) one parameter ; b1) integer ; the startline is set to integer and the linedistance to 10. ; b2) last ; the startline is set to first free line (only relevant after a ; get command). The linedistance is set to default 10. ; c) two parameters ; the startline is set to the first parameter and the linedistance to ; the second. ; The parameters,if any, are situated in page1 from byte 4 each occupying ; 8 bytes. b. a10, j10 w. j1: 1000000 ; large j2: <:las:> ; g5=k-g0+1 al w0 10 ; g41=k+1 rs w0 x3+135 ; startline:= default value g42=k+1 rs w0 x3+136 ; lineincrement:= default value dl w1 x3+d1+2 ; w0,w1:= two first words of param1 sn w0 -1 ; if no parameters (-1) then jl. a1. ; defaults are used sn. w0 (j2.) ; if param1=<:last:> then jl. a2. ; get last line from get se w1 0 ; sl. w1 (j1.) ; if number out of range then al w1 10 ; use default value g43=k+1 rs w1 x3+135 ; store startline (param1) dl w1 x3+d2+2 ; w0,w1:= two first word of param2 sn w0 -1 ; if no more params then use default value jl. a1. ; g44=k+1 rs w1 x3+136 ; else use param2 a1: rl. w2 b15.-2 ; rl. w3 b31. ; jl. (b6.) ; page jump to autoline in commandio g40=k+1 a2: rl w2 x3+190 ; get last lineno g45=k+1 rs w2 x3+135 ; store in startline jl. a1. ; e. g1=k-g0 ; length of code page e. ; end code; h10=s0, h11=s1 ; final checksums i.e.e.e.e. ; end segment, end h-names, end options, end tterm1 \f ▶EOF◀