|
|
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◀