|
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: 51456 (0xc900) Types: TextFile Names: »smtxt «
└─⟦9ccaf6601⟧ Bits:30008165 Bånd med SW8000 kildetekst/release værktøjer └─⟦40b1eb8cd⟧ └─⟦this⟧ »smtxt «
\f ; tas 1.0 14.05.87 system menu coroutine smtxt ...1... ; @(#)smtxt 1.3 (RC International) 7/10/90 ; ;******************************************************************** ;********************* SYSTEM MENU COROUTINE *********************** ;******************************************************************** ; ; Terminal access system for rc8000 - A/S Regnecentralen ; Erik Poulsen ; Revisions historie ; ; 87.01.15 release til betatest ; ; 87.05.14 release 1.0 ; ; 88.01.08 side 20/21 test på entydig sessions navn rettet ; side 33 tbuf.tdescr.sender sættes altid til 0 ved exit fra sm ; ; 88.02.25 Indsæt nyt punkt i 1. menu linie, !disconnect, ; indsæt kode til at behandle det nye punkt ; ; 88.03.17 release 1.2 ; ; temp testpunkter (900 - 999) ; brugte ; ;; \f ; tas 1.0 14.05.87 rcmenu smtxt ...2... ; ; Coroutinen består af følgende procedure ; ; d0 init_sysmenu ; d1 insert_string ; d2 insert_point ; d3 gen_sysmenu ; d4 write_sysmenu ; d5 find_session ; d6 search_point ; d7 new_password ; d8 new_session ; d9 remove_session ; d12 send_att ; d13 get_choice_table ; d14 get_and_lock_choice_table ; d15 unlock_choice_table \f ; tas 1.0 14.05.87 system menu coroutine smtxt ...3... b. d40,r50,t50,o10 ; begin system menu coroutine w. m.system menu smtxt 1.3 c.-1 l14: z. ; routinerne i sm coroutinen bruger lokale variable i coroutine ; beskrivelsen, variabel oprådet er delt i 4 niveauer ; relativ start adresse i coroutine beskrivelse for hvert niveau ; er givet ved o-navne o1 = q7 ; start niveau 1 o2 = o1 + 8 ; start niveau 2 o3 = o2 + 4 ; start niveau 3 o4 = o3 + 2 ; start niveau 4 o5 = o4 + 2 ; top niveau 4 q194= o5 - o1 ; stack size ; extern variable, indeholder adresser på variable og routiner u15: r0: h. m24 , r1. w. ; curco, current coroutine r1: h. m67 , r9. w. ; free_term r9: h. m123 , r10. w. ; <:tascat:> r10: h. m120 , r11. w. ; get_buffer r11: h. m84 , r12. w. ; create_spool_area r12: h. m75 , r13. w. ; get_spool_segment r13: h. m7 , r14. w. ; csend_message r14: h. m8 , r15. w. ; cwait_answer r15: h. m10 , r16. w. ; signal r16: h. m11 , r17. w. ; wait_semaphor r17: h. m85 , r18. w. ; remove_spool_area r18: h. m22 , r19. w. ; release_buffer r19: h. m93 , r20. w. ; get_from_session r20: h. m101 , r21. w. ; init_td r21: h. m102 , r22. w. ; c_read r22: h. m103 , r23. w. ; c_write r23: h. m109 , r24. w. ; write r24: h. m108 , r25. w. ; c_outtext r25: h. m113 , r26. w. ; rd_char r26: h. m111 , r27. w. ; cursor r27: h. m114 , r28. w. ; read_password \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...4... r28: h. m119 , r29. w. ; remove_coroutine r29: h. m118 , r30. w. ; create_coroutine r30: h. m92 , r31. w. ; put_in_session r31: h. m2 , r32. w. ; start_coroutine r32: h. m110 , r33. w. ; erase r33: h. m127 , r34. w. ; start addr for th coroutine r34: h. m112 , r35. w. ; in_text r35: h. m161 , r36. w. ; max_tbuf_size r36: h. m173 , r37. w. ; write_error r37: h. m176 , r38. w. ; register testout r38: h. m233 , r39. w. ; antal sysm coroutiner r39: h. m246 , r40. w. ; corebuf_lock r40: h. m247 , r41. w. ; corebuf_open; r41: h. m56 , r42. w. ; segmenttable base r42: h. m49 , r43. w. ; coretable base r43: h. m260 , t0. w. ; disconnect terminal ; adresser på tekster t0: h. m190 , 1 w. ; <:password :> t1: h. m191 , 1 w. ; <:new :> t2: h. m192 , 1 w. ; <:remove :> t3: h. m193 , 1 w. ; <:break :> t4: h. m194 , 1 w. ; <:kill :> t5: h. m195 , 1 w. ; <:att :> t6: h. m196 , 1 w. ; <:select --> :> t7: h. m197 , 1 w. ; <:new password :> t8: h. m198 , 1 w. ; <:confirme password :> t9: h. m199 , 1 w. ; <:password not confirmed :> t10: h. m200 , 1 w. ; <:password not changed :> t11: h. m201 , 1 w. ; <:remove session --> :> t12: h. m202 , 1 w. ; <:break session --> :> t13: h. m203 , 1 w. ; <:kill from session --> :> t14: h. m204 , 1 w. ; <:att to session --> :> t15: h. m205 , 1 w. ; <:missing resources :> t16: h. m206 , 1 w. ; <:session id :> t17: h. m207 , 1 w. ; <:illegal id, session id :> t18: h. m208 , 1 w. ; <:ambigous id, session id :> t19: h. m241 , 1 w. ; <:en session nedlagt<10>:> t20: h. m259 , 0 w. ; <:!disconnect:> ; end init list ; procedure init_sysmenu(result); ; \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...5... ; result (return) =0 ok ; =1 ikke frie spool segmenter ; =2 ingen frie terminal buffere ; ; initialisere variable der bruges i system menu coroutinen samt ; allokere corebuffer til valgstrukturen, den låses i lager, og ; initialisere valgstruktur til en tom tabel ; ; call return ; w0: result ; w1: undef. ; w2: undef. ; w3: return curco b. i5,j5 w. ; proceduren bruger følgende lokale variable i cdescr q40 = o1 + 0 ; saved return d0: rl. w2 (r0.) ; w2:=curco c. a88<4 rs. w3 6 ; *** test no 200 ******* jl. w3 (r37.) ; w0 w2 curco h. 200 , 1<11 w. ; w1 w3 retur addr 0 ; z. rs w3 x2+q40 ; save return i cdescr; rl. w2 (r1.) ; w2:=addr free_term jl. w3 (r10.) ; get_buffer(free_term,t); se w1 0 ; if t=0 then begin jl. i1. ; result:=2; al w0 2 ; return; jl (x3+q40) ; end; i1: rs w1 x3+q63 ; tbuf.taddr:=t; rl. w0 (r35.) ; rs w0 x3+q64 ; tbuf.size:=term_size; al w0 1 ; /* alloc fri corebuffer og spool segment */ jl. w3 (r11.) ; create_spool_area(1,c_seg,result); se w0 0 ; if result<>0 then jl (x3+q40) ; return; rs w2 x3+q1 ; al w1 2 ; /* find fri corebuffer, sæt write bit */ \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...6... jl. w3 (r12.) ; get_spool_segment(c_seg,c_base,4); rs w2 x3+q2 ; al w0 0 ; rs w0 x3+q5 ; top_line:=0; am (x3+q62) ; rl w0 f116 ; rs w0 x3+q23 ; old_cth:=tbuf.tdescr.cth; rl w2 x3+q62 ; rl w2 x2+f110 ; zl w0 x2+f129 ; r_arrow:=tbuf.tdescr.ttda.right_key; rs w0 x3+q30 ; zl w0 x2+f128 ; l_arrow:=tbuf.tdescr.ttda.left_key; rs w0 x3+q31 ; zl w0 x2+f127 ; down_arrow:=tbuf.tdescr.ttda.down_key; rs w0 x3+q81 ; zl w0 x2+f126 ; up_arrow:=tbuf.tdescr.ttda.up_key; rs w0 x3+q80 ; zl w0 x2+f124 ; max_col:=tbuf.tdescr.ttda.max_col; rs w0 x3+q82 ; zl w0 x2+f125 ; max_lin:=tbuf.tdescr.ttda.max_lin; rs w0 x3+q83 ; al w0 0 ; result:=0; jl (x3+q40) ; return; j1: 0 ; top e. ; procedure insert_string(td,string,ch); ; ; td (call) td for menu linie ; string (call) adresse på tekst der skal indsættes ; ch (return) første tegn i teksten ; ; indsætter en tekst i en menu linie, teksten skal være afsluttet ; med et nul tegn ; ; call return ; w0: ch ; w1: td unch. ; w2: string unch. ; w3: return curco \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...7... b. i5,j5 w. d1: rs. w3 j0. ; c.a88<4 rs. w3 6 ; *** test no 201 ******* jl. w3 (r37.) ; w0 w2 string h. 201 , 1<11 w. ; w1 td w3 retur addr 0 ; z. ds. w2 j2. ; save registers; al w0 80 ; al. w1 j3. ; al w2 x2-2 ; jl. w3 (r20.) ; init_td(tdr,string-2,80); jl. w3 (r21.) ; c_read(tdr,c); rs. w0 j4. ; ch:=c; i1: rl. w1 j1. ; repeat jl. w3 (r22.) ; c_write(td,c); al. w1 j3. ; c_read(tdr,c); jl. w3 (r21.) ; se w0 0 ; until c<0; jl. i1. ; rl. w0 j4. ; w0:=ch; dl. w2 j2. ; restore w1,w2; jl. (j0.) ; return; j0: 0 ; saved return j1: 0 ; td j2: 0 ; string j3: 0,r.3 ; tdr j4: 0 ; ch e. ; procedure insert_point(line,string,choice); ; ; line (call) menu linie nummer ; string (call) adresse på tekst til punkt ; choice (return) adresse på indgang i choice tabellen ; ; indsætter et punkt i valgstrukturen ; \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...8... ; call return ; w0: unch. ; w1: line undef. ; w2: string choice ; w3: return curco b. i5,j5 w. d2: ds. w0 j1. ; save w0,return; rs. w2 j2. ; save w2; c.a88<4 rs. w3 6 ; *** test no 202 ******* jl. w3 (r37.) ; w0 w2 string h. 202 , 1<11 w. ; w1 line w3 retur addr 0 ; z. rl. w3 (r0.) ; w3:=curco; al w2 x1+1 ; sl w1 (x3+q5) ; if line>=top_line then rs w2 x3+q5 ; top_line:=line+1; ls w1 6 ; wa w1 x3+q2 ; td:=c_base+line shift 6; rl. w2 j2. ; jl. w3 d1. ; insert_string(td,string,c); rl w2 x3+q2 ; wa w2 x3+q21 ; choice:=c_base+top_choice; rl w1 x3+q21 ; al w1 x1+6 ; top_choice:=top_choice+6; rs w1 x3+q21 ; sl w1 (x3+q22) ; if top_choice>max_choice then je -60 ; fault; rs w0 x2+0 ; choice.ch:=c; rl. w0 j1. ; restore w0; jl. (j0.) ; return; j0: 0 ; saved return; j1: 0 ; saved w0; j2: 0 ; saved w2 e. ; procedure gen_sysmenu; ; \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...9... ; Initialisere choice tabellen ud fra sessions kæden ; ; call return ; w0: number_of_sessions ; w1: undef. ; w2: undef. ; w3: return curco b. i15,j10 w. d3: ds. w1 j1. ; ds. w3 j3. ; save registers; c.a88<4 rs. w3 6 ; *** test no 203 ******* jl. w3 (r37.) ; w0 w2 h. 203 , 1<11 w. ; w1 w3 retur addr 0 ; z. jl. w3 d13. ; get_choice_table; rl w2 x3+q2 ; /* init valg struktur */ al w1 x2+255 ; top:=c_base+255; rs. w1 j7. ; td:=c_base; /* init valgstruktur */ i10: al w1 x2+4 ; repeat rs w1 x2+0 ; td.cur:=td+4; al w1 80 ; td.nch:=80; hs w1 x2+4 ; al w1 -1 ; td.chshift:=-1; hs w1 x2+5 ; td.first:=td+6; al w1 x2+6 ; rs w1 x2+2 ; al w2 x2+64 ; td:=td+64; sh. w2 (j7.) ; until td > top; jl. i10. ; al w1 256 ; rs w1 x3+q20 ; first_choice:=256; rs w1 x3+q21 ; top_choice:=256; al w1 490 ; max_choice:=490; rs w1 x3+q22 ; al w0 0 ; rs w0 x3+q3 ; number_of_sessions:=0; am (x3+q62) ; rl w1 f116 ; c:=tbuf.tdescr.cth; sl w1 1 ; if c<=0 then jl. i9. ; begin \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...10... am (x3+q62) ; c=tbuf.tdescr.head_session rl w1 f102 ; if c er sm coroutinen then sn w1 x3 ; c:=c.next_session; rl w1 x1+q60 ; if c=0 then sn w1 0 ; goto ret; jl. i7. ; am (x3+q62) ; tbuf.tdescr.cur_th:=c; rs w1 f116 ; end; i9: rs. w1 j4. ; cur:=c; al w0 0 ; rs. w0 j5. ; stop_th:=0; ; repeat i1: sn. w1 (j5.) ; while cur<>stop_th do jl. i3. ; begin sn w1 x3 ; if cur<>th then jl. i2. ; begin rl w2 x3+q3 ; al w2 x2+1 ; number_of_sessions := rs w2 x3+q3 ; number_of_sessions + 1; al w2 x1+q61 ; al w1 0 ; insert_point(0, jl. w3 d2. ; cur.tbuf.s_name,choice); al w0 0 ; rs w0 x2+2 ; choice.action:=start; rl. w1 j4. ; choice.param:=cur; rs w1 x2+4 ; end; i2: rl w1 x1+q60 ; cur:=cur.tbuf.next_session; rs. w1 j4. ; end; jl. i1. ; i3: rl. w0 j5. ; if stop_th=0 then se w0 0 ; begin jl. i4. ; rl w1 x3+q62 ; cur:=th.tbuf.tdescr.head_session; rl w1 x1+f102 ; stop_th:=tbuf.tdescr.cth; rs. w1 j4. ; am (x3+q62) ; rl w0 f116 ; end; rs. w0 j5. ; until cur=stop_th; i4: se. w1 (j5.) ; jl. i1. ; ; /* indsæt de øvrige punkter */ i8: al w1 1 ; rl. w2 t0. ; insert_point(1, al w2 x2+2 ; <:password :>,choice); \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...11... jl. w3 d2. ; al w0 2 ; rs w0 x2+2 ; choice.action:=password; al w1 1 ; rl. w2 t1. ; insert_point(1, al w2 x2+2 ; <:new :>,choice); jl. w3 d2. ; al w0 4 ; rs w0 x2+2 ; choice.action:=new; al w1 1 ; rl. w2 t2. ; insert_point(1, al w2 x2+2 ; <:remove :>,choice); jl. w3 d2. ; al w0 6 ; rs w0 x2+2 ; choice.action:=remove; am (x3+q62) ; rl w1 f116 ; rl w0 x1+f21 ; rs. w0 j6. ; sz. w0 (j8.) ; if tbuf.tdescr.cth.state.direct=1 or jl. 4 ; tbuf.tdescr.cth.state.send_get then jl. i5. ; begin al w1 1 ; rl. w2 t3. ; insert_point(1, al w2 x2+2 ; <:break :>,choice); jl. w3 d2. ; al w0 8 ; choice.action:=break; rs w0 x2+2 ; end; rl. w0 j6. ; i5: sz w0 p4+p5 ; if cth.state.stty=1 or jl. +4 ; cth.state.mtty=1 then jl. i6. ; begin al w1 1 ; rl. w2 t4. ; insert_point(1, al w2 x2+2 ; <:kill :>,choice); jl. w3 d2. ; al w0 10 ; choice.action:=kill; rs w0 x2+2 ; end; rl. w0 j6. ; i6: so w0 p4 ; if cth.state.stty=1 then jl. i11. ; begin al w1 1 ; rl. w2 t5. ; insert_point(1, al w2 x2+2 ; <:att :>,choice); \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...12... jl. w3 d2. ; al w0 12 ; choice.action:=att; rs w0 x2+2 ; end; i11: al w1 1 ; rl. w2 t20. ; insert_point(1, al w2 x2+2 ; <:disconnect:>,choice); jl. w3 d2. ; al w0 14 ; choice.action:=disconnect terminal rs w0 x2+2 ; i7: al w0 0 ; ret: am (x3+q62) ; tbuf.tdescr.th_stopped:=0; rs w0 f115 ; rl w0 x3+q3 ; w0 = number_of_sessions; jl. (j3.) ; return; j0: 0 ; saved w0 j1: 0 ; saved w1 j2: 0 ; saved w2 j3: 0 ; saved w3 j4: 0 ; cur j5: 0 ; stop_th j6: 0 ; cth.state j7: 0 ; top j8: p7+p19 ; state.direct + state.send_get e. ; procedure write_sysmenu(line,s); ; ; line (call) menu linie nummer ; s (return) write status ; ; skriver en menu linie på sidste linie på skærmen ; ; call return ; w0: s ; w1: line undef. ; w2: undef. ; w3: return curco b. i5,j5 w. ; proceduren bruger følgende lokale variable i cdescr q40 = o2 + 0 ; saved return q41 = o2 + 2 ; td d4: rl. w2 (r0.) ; w2:=curco; \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...13... c.a88<4 rs. w3 6 ; *** test no 204 ******* jl. w3 (r37.) ; w0 w2 curco h. 204 , 1<11 w. ; w1 line w3 retur addr 0 ; z. rs w3 x2+q40 ; save return; jl. w3 d14. ; get_and_lock_choice_table; /* lås valgtabel */ ls w1 6 ; wa w1 x3+q2 ; td:=c_case + line shift 6; rs w1 x3+q41 ; i0: rl. w0 t6. ; rep: jl. w3 (r23.) ; write(<:select --> :>,s); sz. w0 (j0.) ; if att i s then goto rep; jl. i0. ; rl w1 x3+q41 ; sn w0 2 ; if s=2 then jl. w3 (r24.) ; c_outtext(td,s); sz. w0 (j0.) ; if att i s then goto rep; jl. i0. ; jl. w3 d15. ; unlock_choice_table; /* frigiv corebuffer */ jl (x3+q40) ; return; j0: 1<16 ; att e. ; procedure find_session(txt,cda,s); ; ; txt (call) adresse på ledetekst ; cda (return) cda for den valgte terminal handler, hvis ; =0 er valg fortrudt med att eller timeout ; s (return) write status ; ; finder session ud fra valg i menu linie 1 ; ; call return ; w0: txt s ; w1: undef. ; w2: cda eller 0 ; w3: return curco b. i8,j5 w. \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...14... ; proceduren bruger følgende lokale variable i cdescr q40 = o3 + 0 ; saved return d5: rl. w1 (r0.) ; c.a88<4 rs. w3 6 ; *** test no 205 ******* jl. w3 (r37.) ; w0 text w2 h. 205 , 1<11 w. ; w1 curco w3 retur addr 0 ; z. rs w3 x1+q40 ; save return; al w3 x1 ; w3:=curco; rl w2 x3+q3 ; sl w2 2 ; if number_of_sessions<2 then jl. i1. ; begin rl w2 x3+q2 ; choice:=c_base+first_choice; wa w2 x3+q20 ; goto found_ch; jl. i4. ; end; i1: jl. w3 d14. ; get_and_lock_choice_table; /* lås coretable */ jl. w3 (r23.) ; write(txt,s); jl. w3 d15. ; unlock_choice_table; /* frigiv corebuffer */ se w0 2 ; if s<>2 then jl. i5. ; goto error_ret; rl w1 x3+q2 ; td:=c_base; jl. w3 (r24.) ; c_outtext(td,s); se w0 2 ; if s<>2 then jl. i5. ; goto error_ret; i2: rl w1 x3+q82 ; rd: /* sæt cursor sidst på linien */ al w1 x1-2 ; col:=max_col-2; rl w2 x3+q83 ; al w2 x2-1 ; lin:=max_lin-1; jl. w3 (r26.) ; curcor(col,lin,s); se w0 2 ; if s<>2 then jl. i5. ; goto error_ret; al w0 a4 ; a4 timeout perioder jl. w3 (r25.) ; rd_char(c,a4,s); sz. w0 (j2.) ; jl. i7. ; so. w0 (j0.) ; if att or timeout i s then begin jl. i3. ; s:=s - (att+timeout); i7: la. w0 j1. ; cda:=0; al w2 0 ; return \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...15... jl (x3+q40) ; end; i3: se w0 2 ; if s<>2 then jl. i5. ; goto error_ret; am (x3+q62) ; rl w0 f115 ; if tbuf.tdescr.th_stopped <> 0 then sn w0 0 ; begin jl. i8. ; write(<:session fjernet:>); rl. w0 t19. ; goto error_ret; jl. w3 (r23.) ; end; jl. i5. ; i8: jl. w3 d6. ; search_point(c,choice); sn w2 0 ; if choice=0 then jl. i2. ; goto rd; i4: rl w0 x2+2 ; found_ch: se w0 0 ; if choice.action<>start then jl. i2. ; goto rd; al w0 2 ; s:=2; rl w2 x2+4 ; cda:=choice.param; rl w1 x3+q62 ; /* cda skal stå i sessions kæden */ rl w1 x1+f102 ; cur:=tbuf.tdescr.head_session; i6: sh w1 0 ; while cur>0 do begin jl. i5. ; if cur=cda then sn w1 x2 ; return; jl (x3+q40) ; cur:=cur.next_session; rl w1 x1+q60 ; end; jl. i6. ; i5: al w2 0 ; error_ret: cda:=0; la. w0 j3. ; s:=s-att; jl (x3+q40) ; return; j0: 1<16 ; att j1: -(:1<16+1<21:)-1 ; -att-timeout j2: 1<21 ; timeout j3: -(:1<16:)-1 ; -att e. ; procedure search_point(ch,choice); ; ; ch (call) valg tegn ; choice (return) peger til indgang i choice tabellen ; hvis valg tegn er ch, hvis ikke funder er \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...16... ; choice=0 ; ; søger efter indgang i valg struktur med et givet valg tegn ; ; call return ; w0: undef. ; w1: ch undef ; w2: choice eller 0 ; w3: return curco b. i5,j5 w. d6: rs. w3 j0. ; save return; c.a88<4 rs. w3 6 ; *** test no 206 ******* jl. w3 (r37.) ; w0 w2 h. 206 , 1<11 w. ; w1 tegn w3 retur addr 0 ; z. jl. w3 d13. ; get_choice_table; rl w2 x3+q2 ; wa w2 x3+q21 ; al w2 x2-1 ; rs. w2 j1. ; top:=c_base+first_choice-1; rl w2 x3+q2 ; wa w2 x3+q20 ; choice:=c_base+first_choice; sn w1 13 ; if ch<>cr then begin jl. i2. ; repeat i1: sn w1 (x2) ; if choice.ch=c then jl. i2. ; goto found_ch; al w2 x2+6 ; choice:=choice+6; sh. w2 (j1.) ; until choice>top; jl. i1. ; choice:=0; al w2 0 ; end; i2: jl. (j0.) ; found_ch: return; j0: 0 ; saved return; j1: 0 ; top e. ; procedure new_password(s); \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...17... ; ; s (return) status ; ; sætter nyt password ; ; call return ; w0: s ; w1: undef. ; w2: undef. ; w3: return curco b. i5,j5 w. ; proceduren bruger følgende lokale variable i cdescr q40 = o1 + 0 ; saved return q41 = o1 + 2 ; password (første ord) q42 = o1 + 4 ; - (andet ord) d7: rl. w2 (r0.) ; c.a88<4 rs. w3 6 ; *** test no 207 ******* jl. w3 (r37.) ; w0 w2 curco h. 207 , 1<11 w. ; w1 w3 retur addr 0 ; z. rs w3 x2+q40 ; save return; rl. w0 t7. ; jl. w3 (r23.) ; write(<:new password :>,s); se w0 2 ; if s<>2 then jl. i3. ; goto error_ret; jl. w3 (r27.) ; read_password(x,s); se w0 2 ; if s<>2 then jl. i3. ; goto error_ret; ds w2 x3+q42 ; rl. w0 t8. ; jl. w3 (r23.) ; write(<:confirme password :>,s); se w0 2 ; if s<>2 then jl. i3. ; goto error_ret; jl. w3 (r27.) ; read_password(y,s); se w0 2 ; if s<>2 then jl. i3. ; goto error_ret; sn w1 (x3+q41) ; se w2 (x3+q42) ; if x=y then \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...18... jl. i1. ; begin rl. w0 j0. ; rs w0 x3+q66 ; tbuf.opmocde:=9 shift 12 + 6; rl w1 x3+q63 ; tbuf.first:=tbuf.taddr; al w2 x1+8 ; tbuf.last:=tbuf.first+8; ds w2 x3+q69 ; rl w2 x3+q62 ; word(tbuf.first):= rl w0 x2+f106 ; tbuf.tdescr.uid; rs w0 x1 ; dl w0 x2+f105 ; dword(tbuf.first+4):= ds w0 x1+4 ; tbuf.tdescr.cpw; rl. w3 (r0.) ; dl w0 x3+q42 ; dword(tbuf.first+8):= ds w0 x1+8 ; x; rl. w3 (r0.) ; al w1 x3+q66 ; rl. w2 r9. ; csendmessage(tbuf.op, jl. w3 (r13.) ; <:tascat:>,buf); sh w2 0 ; if buf=0 then fault je -12 ; al w0 0 ; al. w1 j1. ; cwaitanswer(buf,0,ans,r); jl. w3 (r14.) ; se w0 1 ; if r<>1 then je -18 ; fault; rl w0 x1 ; se w0 0 ; if ans.result<>0 then je -18 ; fault; dl w1 x3+q42 ; rl w2 x3+q62 ; tbuf.tdescr.cpw:=x; ds w1 x2+f105 ; al w0 2 ; s:=2; jl. i2. ; end i1: rl. w0 t9. ; else jl. w3 (r23.) ; write(<:password not confirmed :>,s); i2: jl (x3+q40) ; return; i3: la. w0 j2. ; error_ret: s:=s-att-timeout; se w0 2 ; if s<>2 then jl (x3+q40) ; return; rl. w0 t10. ; write(<:password not changed :>,s); jl. w3 (r23.) ; la. w0 j3. ; s:=s-att; jl (x3+q40) ; return; \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...19... j0: 9<12+6 j1: 0,r.8 ; answer area j2: -(:1<21+1<16:)-1 ; -att-timeout j3: -(:1<16:)-1 ; -att e. ; procedure new_session(cda,s); ; ; cda (return) cda for th oprettet, hvis =0 er der ikke ; started ny session ; s (return) status ; ; opretter og starter en ny terminal handler der skal køre en session ; på en terminal ; ; call return ; w0: s ; w1: undef. ; w2: cda eller 0 ; w3: return curco b. i20,j10 w. ; proceduren bruger følgende lokale variable i cdescr q40 = o2 + 0 ; saved return q41 = o2 + 2 ; cda d8: rl. w2 (r0.) ; c.a88<4 rs. w3 6 ; *** test no 208 ******* jl. w3 (r37.) ; w0 w2 curco h. 208, 1<11 w. ; w1 w3 retur addr 0 ; z. rs w3 x2+q40 ; save return; rl. w0 t16. ; jl. w3 (r23.) ; write(<:session id :>,s); se w0 2 ; if s<>2 then jl. i10. ; goto error_ret; i1: al w1 x3+q15 ; rd: \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...20... rl w2 x3+q63 ; rs w2 x1+2 ; td.first:=tbuf.taddr; al w0 4 ; in_text(td,4,0,10,s); rl. w2 j9. ; jl. w3 (r34.) ; sz. w0 (j0.) ; jl. i0. ; so. w0 (j1.) ; if att or timeout i s then begin jl. i2. ; s:=s-att-timeout; i0: la. w0 j2. ; goto error_ret jl. i10. ; end; i2: se w0 2 ; if s<>2 then jl. i10. ; goto error_ret; al. w1 j6. ; al. w2 j2. ; al w0 9 ; init_td(tdw,wrk_s_name,9); jl. w3 (r20.) ; al w1 x3+q15 ; jl. w3 (r21.) ; c_read(td,c); sl w0 32 ; if c<32 then jl. i3. ; al w0 0 ; wrk_s_name:=0; rs. w0 j3. ; else jl. i9. ; begin i3: sl w0 65 ; if c>125 or sl w0 126 ; c<65 or jl. i4. ; sh w0 96 ; (c<97 and sh w0 93 ; c>93 ) then jl. i5. ; begin i4: rl. w0 t17. ; write(<:illegal id, session id :>,s); jl. w3 (r23.) ; if s<>2 then se w0 2 ; goto error_ret; jl. i10. ; goto rd; jl. i1. ; end; i5: jl. w3 d13. ; get_choice_table; rl w2 x3+q2 ; wa w2 x3+q21 ; al w2 x2-1 ; rs. w2 j4. ; top:=c_base+top_choice-1; rl w2 x3+q2 ; wa w2 x3+q20 ; choice:=c_base+first_choice; i6: se w0 (x2) ; repeat jl. i11. ; if choice.ch=c then begin \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...21... rl. w0 t18. ; write(<:ambigous id, session id :>,s); jl. w3 (r23.) ; if s<>2 then goto error_ret; se w0 2 ; goto rd; jl. i10. ; end; jl. i1. ; choice:=choice+6; i11: al w2 x2+6 ; sh. w2 (j4.) ; until choice > top ; jl. i6. ; i7: al w1 0 ; n:=0; rs. w1 j5. ; repeat i13: al. w1 j6. ; c_write(tdw,c); jl. w3 (r22.) ; rl. w1 j5. ; al w1 x1+1 ; n:=n+1; rs. w1 j5. ; al w1 x3+q15 ; get_char(td,c); jl. w3 (r21.) ; sl w0 32 ; until c<32; jl. i13. ; al. w1 j6. ; i8: rl. w2 j5. ; while n<5 do sl w2 5 ; jl. i14. ; begin al w2 x2+1 ; c_write(tdw,32); rs. w2 j5. ; end; al w0 32 ; jl. w3 (r22.) ; jl. i8. ; i14: al w0 0 ; c_write(tdw,0); jl. w3 (r22.) ; i9: al w1 0 ; rl w2 x3+q83 ; al w2 x2-1 ; lin:=max_lin-1; jl. w3 (r26.) ; cursor(0,lin,s); jl. w3 (r32.) ; erase(s); jl. w3 (r29.) ; create_coroutine(cda); sn w1 0 ; if cda<>0 then jl. i15. ; begin c.a88<4 rs. w3 6 ; *** test no 219 ******* jl. w3 (r37.) ; w0 w2 h. 219 , 1<11 w. ; w1 cda w3 retur addr 0 ; \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...22... z. rs w1 x3+q41 ; rl w3 x3+q62 ; /* sæt term_spec fra tdescr, med type 1 */ rl w0 x3+f112 ; rx w0 x3+f111+2 ; rs w0 x3+f112 ; swop ord med gemt type og ord med type 2; al w1 x3+f111 ; al w2 x3+f108 ; csendmessage(tbuf.tdescr.termspec, jl. w3 (r13.) ; tbuf.tdescr.name,buf); sh w2 2 ; if buf<2 then je -12 ; fault; rl w1 x3+q62 ; rl w0 x1+f112 ; rx w0 x1+f111+2 ; rs w0 x1+f112 ; swop tilbage al w1 x3+q8 ; al w0 0 ; jl. w3 (r14.) ; cwaitanswer(buf,0,ans,r); rl w1 x3+q41 ; rl. w0 j8. ; rs w0 x1+f21 ; cda.state:=th_med_mcl; dl. w0 j7. ; ds w0 x1+q61+2 ; s_name:=wrk_s_name; rl. w3 (r0.) ; al w2 x1 ; rl w1 x3+q62 ; tdescr:=tbuf.tdescr; jl. w3 (r30.) ; put_in_session(tdescr,cda); rs w2 x1+f103 ; tdescr.cur_th:=cda; al w0 a25 ; start_coroutine(prio,ic,cda); rl. w1 r33. ; jl. w3 (r31.) ; al w2 x2+f26 ; jl. w3 (r16.) ; wait_semaphor(cda.stop_sem); rl w2 x3+q41 ; rl w0 x2+f27 ; w0:=create result fra th; sn w0 0 ; if result=ok then jl (x3+q40) ; return; rl w3 x3+q62 ; al w1 x3+f111 ; /* sæt term_spec fra tdescr, med type 2 */ al w2 x3+f108 ; csendmessage(tbuf.tdescr.termspec, jl. w3 (r13.) ; tbuf.tdescr.name,buf); sh w2 2 ; if buf<2 then je -12 ; fault; \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...23... al w1 x3+q8 ; al w0 0 ; cwaitanswer(buf,0,ans,r); jl. w3 (r14.) ; goto error_ret; jl. i10. ; end i15: al w1 18 ; else error_no:=18; rl w2 x3+q62 ; rl w0 x2+f107 ; jl. w3 (r36.) ; write_error(tbuf.tdescr.tpda,error_no); i10: al w2 0 ; error_ret: cda:=0; jl (x3+q40) ; return; j0: 1<21 ; timeout j1: 1<16 ; att j2: -(:1<21+1<16:)-1 ; -att-timeout j3: 0,r.2 ; wrk_s_name j7=j3+2 j4: 0 ; top j5: 0 ; n j6: 0,r.3 ; tdw j8: p32 + p18 ; startup værdi af th.state j9: a4<12 ; timeout<12+mode e. ; procedure remove_session(cda,s); ; ; cda (return) cda for valgt session, hvis 0 fortrudt med att ; s (return) status ; ; finder cda for session der skal fjernes, og sætter finis=1 i ; coroutinens state variabel ; ; call return ; w0: s ; w1: undef. ; w2: cda eller 0 ; w3: return curco b. i5,j5 w. ; proceduren bruger følgende lokale variable i cdescr q40 = o4 + 0 ; saved return \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...24... d9: rl. w2 (r0.) ; c.a88<4 rs. w3 6 ; *** test no 209 ******* jl. w3 (r37.) ; w0 w2 curco h. 209 , 1<11 w. ; w1 w3 retur addr 0 ; z. rs w3 x2+q40 ; save return; rl. w0 t11. ; find_session(<:remove session --> :>, jl. w3 d5. ; cda,s); sn w2 0 ; if cda=0 then jl (x3+q40) ; return; rl w1 x2+f21 ; lo. w1 j0. ; cda.state.finis:=1; rs w1 x2+f21 ; am (x3+q62) ; rs w2 f116 ; tbuf.tdescr.cth:=cda; jl (x3+q40) ; return j0: p14 ; state.cont e. ; procedure send_att(s); ; ; s (return) status ; ; finder session til hvis ejer (ejer af ph) der skal sendes en ; attention message, og sætter att=1 i coroutinens state variabel ; coroutinen sættes til current ; ; call return ; w0: s ; w1: undef. ; w2: undef. ; w3: return curco b. i5,j5 w. ; proceduren bruger følgende lokale variable i cdescr q40 = o1 + 0 ; saved return \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...25... d12: al w0 x3 ; rl. w3 (r0.) ; c.a88<4 rs. w3 6 ; *** test no 212 ******* jl. w3 (r37.) ; w0 return adr w2 h. 212 , 1<11 w. ; w1 w3 curco 0 ; z. rs w0 x3+q40 ; save return; ; rl. w0 t14. ; find_session(<:att to session --> :>, ; jl. w3 d5. ; cda,s); am (x3+q62) ; rl w2 f116 ; cda:=tbuf.tdescr.cth; sn w2 0 ; if cda=0 then jl (x3+q40) ; return; rl w1 x2+f21 ; lo. w1 j0. ; cda.state.att:=1; rs w1 x2+f21 ; am (x3+q62) ; rs w2 f116 ; tbuf.tdescr.cth:=cda; jl (x3+q40) ; return j0: p15 ; state.att e. ; procedure get_choice_table; ; ; ; proceduren sikre at choice table er i en corebuffer ; ; call return ; w0: unch. ; w1: unch. ; w2: unch. ; w3: return curco b. i5,j5 w. ; proceduren bruger følgende lokale variable i cdescr q40 = o1 + 0 ; saved w0 \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...26... q41 = o1 + 2 ; saved w1 q42 = o1 + 4 ; saved w2 q43 = o1 + 6 ; saved return d13: rs. w3 j0. ; c.a88<4 rs. w3 6 ; *** test no 200 ******* jl. w3 (r37.) ; w0 w2 h. 213 , 1<11 w. ; w1 w3 retur addr 0 ; z. rl. w3 (r0.) ; ds w1 x3+q41 ; save w0,w1,w2,return i cdescr; rs w2 x3+q42 ; rl. w0 j0. ; /* find corebuffer, læs hvis ikke i lager rs w0 x3+q43 ; sæt write bit i coretable indgang */ rl w2 x3+q1 ; get_spool_segment(c_seg,c_base,3); al w1 3 ; jl. w3 (r12.) ; rs w2 x3+q2 ; dl w1 x3+q41 ; restore w0,w1,w2; rl w2 x3+q42 ; jl (x3+q43) ; return; j0: 0 ; saved return e. ; procedure get_and_lock_choice_table; ; ; ; proceduren sikre at choice table er i en corebuffer, corebufferen låses ; ; call return ; w0: unch. ; w1: unch. ; w2: unch. ; w3: return curco b. i5,j5 w. ; proceduren bruger følgende lokale variable i cdescr \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...27... q40 = o1 + 0 ; saved w0 q41 = o1 + 2 ; saved w1 q42 = o1 + 4 ; saved w2 q43 = o1 + 6 ; saved return d14: rs. w3 j0. ; c.a88<4 rs. w3 6 ; *** test no 200 ******* jl. w3 (r37.) ; w0 w2 h. 214 , 1<11 w. ; w1 w3 retur addr 0 ; z. rl. w3 (r0.) ; ds w1 x3+q41 ; save w0,w1,w2,return i cdescr; rs w2 x3+q42 ; rl. w0 j0. ; rs w0 x3+q43 ; al w0 1 ; jl. w3 (r39.) ; corebuf_lock(1); /* reserver een corebuffer */ rl w2 x3+q1 ; /* find corebuffer, læs hvis ikke i lager al w1 7 ; sæt write og lock bit i coretable indgang */ jl. w3 (r12.) ; get_spool_segment(c_seg,c_base,7); rs w2 x3+q2 ; dl w1 x3+q41 ; restore w0,w1,w2; rl w2 x3+q42 ; jl (x3+q43) ; return; j0: 0 ; saved return e. ; procedure unlock_choice_table ; ; ; fjerner reservationen af corebuffer med choice table ; ; call return ; w0: unch. ; w1: unch. ; w2: unch. ; w3: return curco b. i5,j5 w. \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...28... ; proceduren bruger følgende lokale variable i cdescr q40 = o1 + 0 ; saved w0 q41 = o1 + 2 ; saved w1 q42 = o1 + 4 ; saved w2 q43 = o1 + 6 ; saved return d15: rs. w3 j0. ; c.a88<4 rs. w3 6 ; *** test no 215 ******* jl. w3 (r37.) ; w0 w2 h. 215 , 1<11 w. ; w1 w3 retur addr 0 ; z. rl. w3 (r0.) ; ds w1 x3+q41 ; save w0,w1,w2,return i cdescr; rs w2 x3+q42 ; rl. w0 j0. ; rs w0 x3+q43 ; rl w1 x3+q1 ; am. (r41.) ; am (0) ; zl w1 x1 ; cte:=segmenttable(c_seg)*8 + coretable_base; ls w1 3 ; wa. w1 (r42.) ; rl w0 x1 ; la. w0 j1. ; cte.prio.L:=0; rs w0 x1 ; jl. w3 (r40.) ; corebuf_open; rl w2 x3+q1 ; /* find corebuffer, læs hvis ikke i lager al w1 3 ; sæt write bit i coretable indgang */ jl. w3 (r12.) ; get_spool_segment(c_seg,c_base,3); rs w2 x3+q2 ; dl w1 x3+q41 ; restore w0,w1,w2; rl w2 x3+q42 ; jl (x3+q43) ; return; j0: 0 ; saved return j1: -(:1<22:)-1 ; e. \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...29... ; ; system menu coroutine kode ; b. e10,i20,j7 w. ; d16: u32: rl. w3 (r38.) ; al w3 x3+1 ; en mere aktiv sysm rs. w3 (r38). ; jl. w3 d0. ; init_sysmenu(r); sn w0 0 ; if r<>0 then jl. i1. ; begin rs. w0 j0. ; am (x3+q62) ; rl w2 f116 ; w2:=tbuf.tdescr.cth; al w2 x2+f26 ; signal(cth,stop_sem); jl. w3 (r15.) ; rl. w0 j0. ; if r=1 then se w0 1 ; goto error_area; jl. i11. ; goto end_sysm; jl. i10. ; end; i0: rl. w0 t19. ; Error_and_gen_sysmenu: jl. w3 (r23.) ; write(<:en session fjernet:>); i1: jl. w3 d3. ; gen_sysmenu: gen_sysmenu; sh w0 0 ; if number_of_sessions=0 then jl. i9. ; goto fin; al w0 0 ; rs w0 x3+q4 ; lin:=0; i2: rl. w3 (r0.) ; write_menu: rl w1 x3+q4 ; jl. w3 d4. ; write_sysmenu(lin,s); se w0 2 ; if s<>2 then jl. i13. ; goto error_halt; i3: rl w1 x3+q82 ; next_char: /* sæt cursor sidst på linien */ al w1 x1-3 ; col:=max_col-3; rl w2 x3+q83 ; al w2 x2-1 ; lin:=max_lin-1; jl. w3 (r26.) ; cursor(col,lin,s); sz. w0 (j1.) ; if att i s then \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...30... jl. i3. ; goto next_char; se w0 2 ; if s<>2 then jl. i13. ; goto error_halt; al w0 0 ; rs w0 x3+q0 ; timeoutcount:=0; i16: al w0 0 ; readchar med ingen timeout jl. w3 (r25.) ; RD: rd_char(c,s); am (x3+q62) ; if tbuf.tdescr.th_stopped <> 0 then rl w2 f115 ; goto Error_and_gen_sysmenu; se w2 0 ; jl. i0. ; so. w0 (j3.) ; if timeout i s then begin jl. i15. ; rl w1 x3+q0 ; timeoutcount:=timeoutcount+1; al w1 x1+1 ; rs w1 x3+q0 ; if timeoutcount<=a4 then goto RD; sh w1 a4 ; jl. i16. ; i14: la. w0 j2. ; St: s:=s-timeout-att; rs w0 x3+q6 ; al w1 0 ; rl w2 x3+q83 ; al w2 x2-1 ; lin:=max_lin-1; jl. w3 (r26.) ; cursor(0,lin,s); jl. w3 (r32.) ; erase(s); rl w0 x3+q6 ; goto error_halt; jl. i13. ; end; i15: sz. w0 (j1.) ; if att i s then jl. i14. ; goto St; i4: se w0 2 ; if s<>2 then jl. i13. ; goto error_halt; se w1 (x3+q30) ; if c=r_arrow or sn w1 (x3+q80) ; c=up_arrow then jl. +4 ; jl. i5. ; begin rl w1 x3+q4 ; lin:=lin+1; al w1 x1+1 ; if lin=top_lin then lin:=0; sn w1 (x3+q5) ; al w1 0 ; goto write_menu; rs w1 x3+q4 ; end jl. i2. ; else i5: se w1 (x3+q31) ; if c=l_arrow or sn w1 (x3+q81) ; c=up_arrow then jl. +4 ; \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...31... jl. i6. ; begin rl w1 x3+q4 ; al w1 x1-1 ; lin:=lin-1; rl w2 x3+q5 ; al w2 x2-1 ; if lin<0 then lin:=top_lin-1; sh w1 -1 ; al w1 x2 ; goto write_menu; rs w1 x3+q4 ; end; jl. i2. ; i6: jl. w3 d6. ; search_point(c,choice); sn w2 0 ; if choice=0 then jl. i3. ; goto next_char; rl w1 x2+2 ; ac:=choice.action; c.a88<4 rs. w3 6 ; *** test no 220 ******* jl. w3 (r37.) ; w0 w2 choice h. 220 , 1<10 w. ; w1 action w3 curco 0 ; z. am. (x1+4) ; case ac of jl. x1+2 ; begin e0. ; start e1. ; password e2. ; new e3. ; remove e4. ; break e5. ; kill e6. ; att e7. ; disconnect terminal ; /* 0: start session */ e0: rl w2 x2+4 ; begin am (x3+q62) ; rs w2 f116 ; tbuf.tdescr.cth:=choice.param; e10: al w1 0 ; Start_current: rl w2 x3+q83 ; al w2 x2-1 ; lin:=max_lin-1; jl. w3 (r26.) ; cursor(0,lin,s); jl. w3 (r32.) ; erase(s); am (x3+q62) ; rl w2 f116 ; sn w2 0 ; if tbuf.tdescr.cth=0 then jl. i0. ; goto Error_and_gen_sysmenu; al w2 x2+f26 ; signal(tbuf.tdescr.cth.stop_sem); jl. w3 (r15.) ; \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...32... rl w2 x3+q62 ; rl w0 x2+f116 ; tbuf.tdescr.cur_th:=tbuf.tdescr.cth; rs w0 x2+f103 ; jl. i8. ; end; e1: ; /* 2: nyt password */ jl. w3 d7. ; begin se w0 2 ; new_password(s); jl. i13. ; if s<>2 then goto error_halt; jl. i1. ; goto gen_sysmenu; ; end; ; /* 4: ny session */ e2: jl. w3 d8. ; begin new_session(cda,s); sn w2 0 ; if cda=0 then jl. i1. ; goto gen_sysmenu; am (x3+q62) ; rs w2 f116 ; tbuf.tdescr.cth:=cda; am (x3+q62) ; rs w2 f103 ; tbuf.tdescr.cur_th:=cda; jl. i8. ; end; ; /* 6: nedlæg session */ e3: jl. w3 d9. ; begin se w0 2 ; remove_session(cda,s); jl. i13. ; if s<>2 then goto error_halt; sn w2 0 ; if cda=0 then jl. i1. ; goto gen_sysmenu; am (x3+q62) ; rs w2 f116 ; tbuf.tdescr.cth:=cda; goto start_current; jl. e10. ; end; ; /* 8: ud af direct */ e4: am (x3+q62) ; rl w2 f116 ; begin rl w1 x2+f21 ; lo. w1 j4. ; tbuf.tdescr.cth.state.cont:=1; rs w1 x2+f21 ; jl. e10. ; goto start_current; ; end; ; /* 10: skip output */ e5: am (x3+q62) ; rl w2 f116 ; begin \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...33... rl w1 x2+f21 ; lo. w1 j5. ; tbuf.tdescr.cth.state.skip:=1; rs w1 x2+f21 ; jl. e10. ; goto start_current; ; end; ; /* 12: send att */ e6: jl. w3 d12. ; begin ; se w0 2 ; send_att(s);); ; jl. i13. ; if s<>2 then goto error_halt; jl. e10. ; goto start_current; ; end; ; /* 14: disconnect terminal */ e7: am (x3+q62) ; begin rl w1 f116 ; th := tbuf.tdescr.cth; jl. w3 (r43.) ; disconnect_terminal(th); jl. e10. ; goto start_current; ; end; i8: ; end case; i9: al w0 0 ; fin: rl w2 x3+q62 ; ; rl w1 x2+f116 ; if old_cth<>tbuf.tdescr.cth then ; se w1 (x3+q23) ; tbuf.tdescr.sender:=0; rs w0 x2+f114 ; rl w1 x3+q1 ; fin: jl. w3 (r17.) ; remove_spool_area(c_seg); i10: rl w1 x3+q63 ; error_area: rl. w2 (r1.) ; jl. w3 (r18.) ; release_buffer_(tbuf.taddr,free_term); i11: ; end_sysm: al w1 x3 ; get_from_session( jl. w3 (r19.) ; th,session,cda); al w0 0 ; am (x3+q62) ; tbuf.tdescr.cth:=0; rs w0 f116 ; rl. w2 (r38.) ; al w2 x2-1 ; en mindre aktiv sysm rs. w2 (r38). ; al w2 x3 ; remove_coroutine(th); /* sig selv */ jl. w3 (r28.) ; i13: rl w2 x3+q62 ; error_halt: rs w0 x2+f113 ; tbuf.tdescr.s:=s; rl w2 x2+f116 ; sn w2 0 ; if tbuf.tdescr.cth = 0 then jl. i0. ; goto Error_and_gen_sysmenu; sn w0 2 ; jl. i17. ; if s<>2 then \f ;. tas 1.0 14.05.87 system menu coroutine smtxt ...34... rl w0 x2+f21 ; tbuf.tdescr.cth.state.finis:=1; lo. w0 j6. ; rs w0 x2+f21 ; i17: am (x3+q62) ; rs w2 f103 ; tbuf.tdescr.cur_th:=tbuf.tdescr.cth; al w2 x2+f26 ; jl. w3 (r15.) ; signal(tbuf.tdescr.cth.stop_sem); /* start næste */ jl. i9. ; goto fin; j0: 0 ; r j1: 1<16 ; att j2: -(:1<21+1<16:)-1 ; -att-timeout j3: 1<21 ; timeout j4: p12 ; state.cont j5: p11 ; state.skip j6: p14 ; state.finis e. c.-1 l15: z. e. ▶EOF◀