LC Cross-compiler 06/01/81 1 C0000 D0000 program "ecce_" 2 C0000 D0000 3 C0000 D0000 {Implementation of Edinburgh Compatible Context Editor in LC for Intel 8086 by Rainer Thonnes, December 1980 based on that in IMP for DEC PDP9/15 by Hamish Dewar, June 1970} 7 C0000 D0000 8 C0000 D0000 const min=1 mout=1 sin=2 stop=-5000 9 C0000 D0000 word in=min 10 C0000 D0002 word mon=0 11 C0000 D0004 word case=95 12 C0000 D0006 word print1=0 13 C0000 D0008 word print2=0 14 C0000 D000A const sextra=122 15 C0000 D000A word pp1 sym 16 C0000 D000E word code text num 17 C0000 D0014 const cbase=1 tbase=120 18 C0000 D0014 word ci ti 19 C0000 D0018 word cmax=0 20 C0000 D001A word c(cbase:tbase) 21 C0000 D010A word stored(1:192)=0(192) 22 C0000 D028A word pos1=0 23 C0000 D028C word pos2=0 24 C0000 D028E word pos3=0 25 C0000 D0290 const bufmax=10000 26 C0000 D0290 word top=1 27 C0000 D0292 word bot=bufmax-sextra 28 C0000 D0294 byte a(0:bufmax) 29 C0000 D29A5 word lbeg pp 30 C0000 D29A9 word fp=0 31 C0000 D29AB word lend=0 32 C0000 D29AD word fend=0 33 C0000 D29AF word ms=0 34 C0000 D29B1 word ml=0 35 C0000 D29B3 word type chain 36 C0000 D29B7 word pend=0 37 C0000 D29B9 word mfp=0 38 C0000 D29BB word mlend=0 39 C0000 D29BD word mend=0 40 C0000 D29BF word sfp=0 41 C0000 D29C1 word send=0 42 C0000 D29C3 byte symtype(33:95)= 43 C0000 D29C3 64 3 3 3 2 3 3 11 9 64 3 12 2 3 3 44 C0000 D29D2 0 0 0 0 0 0 0 0 0 0 3 1 3 3 3 64 45 C0000 D29E2 3 18 10 26 5 8 52 10 2 6 10 10 122 56 2 2 46 C0000 D29F2 10 50 10 22 5 117 6 2 32 32 32 3 10 3 3 3 47 C0000 D2A02 { ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ Special classes 0 Normal 1 %A,%C,%S 2 %X,%Y,%Z 3 %M,%F,%Q 4 ! * ? 5 unused 6 unused 7 %L,%U Normal classes 0 Digits 0:9 1 NL and ; 2 Illegals %,-,A,H,N,O,Q,W 3 delimiters "#$&'+./<>=@[]^_ 4 F 5 D,T,U 6 I,S,V 7 unused 8 E,M 9 ) 10 B,C,G,J,K,L,P,R,\ 11 ( 12 , 13 unused 14 unused 15 unused} 77 C0000 D2A02 78 C0000 D2A02 spec psym "printsymbol" 79 C0000 D2A06 spec rsym "readsymbol" 80 C0000 D2A0A spec selin "selectinput" 81 C0000 D2A0E spec selout "selectoutput" 82 C0000 D2A12 spec rout "resetoutput" 83 C0000 D2A16 spec signal "signal" 84 C0000 D2A1A spec trap "trap" 85 C0000 D2A1E spec xprompt "XPrompt" 86 C0000 D2A22 spec phex "PHex" 87 C0000 D2A26 const nl=10 88 C0000 D2A26 89 C0000 D2A26 proc main "ecce." 90 C000C D2A26 spec ecce "ecce" 91 C000C D2A2A selout 0; psym 'E'; psym 'C'; psym 'C'; psym 'E' 92 C0034 D2A2A psym ' '; psym '0'; psym '6'; psym '/'; psym '0' 93 C005C D2A2A psym '1'; psym '/'; psym '8'; psym '1'; psym nl 94 C0084 D2A2A ecce 95 C0088 D2A2A end 96 C008D D2A2A 97 C008D D2A2A proc mainfp 98 C0094 D2A2A return fp if in=min 99 C00A6 D2A2A return mfp 100 C00AF D2A2A end 101 C00AF D2A2A 102 C00AF D2A2A proc readsym 103 C00B6 D2A2A if pend#0 104 C00C2 D2A2A sym=pend; pend=0 105 C00D1 D2A2A else 106 C00D4 D2A2A cycle 107 C00D4 D2A2A if pos3=0 108 C00E0 D2A2A sym=rsym; return 109 C00ED D2A2A finish 110 C00ED D2A2A sym=stored(pos3); pos3=pos3+1 111 C0108 D2A2A return if sym#0 112 C0116 D2A2A pos3=pos2; pos2=pos1; pos1=0 113 C012D D2A2A repeat 114 C0130 D2A2A finish 115 C0130 D2A2A end 116 C0135 D2A2A 117 C0135 D2A2A proc readitem 118 C013C D2A2A cycle 119 C013C D2A2A type=1 120 C0143 D2A2A cycle 121 C0143 D2A2A readsym 122 C0147 D2A2A repeat if sym=' ' 123 C0153 D2A2A return if sym<' ' 124 C0161 D2A2A sym=sym-32 if sym>=96 125 C0175 D2A2A type=symtype(sym) 126 C0185 D2A2A return if type&15#0 127 C0196 D2A2A if type=32 128 C01A2 D2A2A pos1=pos2; pos2=pos3; pos3=sym-'X'<<6+1 129 C01C4 D2A2A finish 130 C01C4 D2A2A repeat if type=32 131 C01D0 D2A2A if type=0 132 C01DC D2A2A num=sym-'0' 133 C01E7 D2A2A cycle 134 C01E7 D2A2A readsym; pend=sym 135 C01F3 D2A2A return if sym<'0' 136 C0201 D2A2A return if sym>'9' 137 C020F D2A2A pend=0; num=num*10-'0'+sym 138 C022A D2A2A repeat 139 C022D D2A2A else 140 C0230 D2A2A type=0; num=0; return if sym='*' 141 C024C D2A2A num=stop+1; return if sym='?' 142 C0261 D2A2A num=stop {sym='!'} 143 C0268 D2A2A finish 144 C0268 D2A2A end 145 C026D D2A2A 146 C026D D2A2A proc unchain 147 C0274 D2A2A cycle 148 C0274 D2A2A text=chain; return if text=0 149 C028A D2A2A chain=c(text+1); c(text+1)=ci 150 C02AE D2A2A repeat if c(text)#'(' 151 C02C1 D2A2A end 152 C02C6 D2A2A 153 C02C6 D2A2A proc stack v 154 C02CD D2A2A c(ci)=v; ci=ci+1 155 C02E6 D2A2A end 156 C02ED D2A2A 157 C02ED D2A2A proc readline 158 C02F4 D2A2A word k 159 C02F4 D2A2A if fp#fend 160 C0304 D2A2A lend=fp 161 C030C D2A2A cycle 162 C030C D2A2A return if a(lend)=nl 163 C0322 D2A2A lend=lend+1 164 C032D D2A2A repeat 165 C0330 D2A2A finish 166 C0330 D2A2A selin in 167 C0339 D2A2A if trap 1<<9#0 168 C0349 D2A2A fp=bot; lend=fp; fend=lend; a(fp)=nl 169 C036E D2A2A else 170 C0371 D2A2A fp=bot-121 171 C037C D2A2A cycle 172 C037C D2A2A k=nl; k=rsym if fp#bot; a(fp)=k; fp=fp+1 173 C03AB D2A2A repeat if k#nl 174 C03B6 D2A2A fend=fp; lend=fend-1; fp=bot-121 175 C03D4 D2A2A finish 176 C03D4 D2A2A selin 0 177 C03DC D2A2A ms=0; print1=0; print2=0 178 C03F1 D2A2A end 179 C03F6 D2A2A 180 C03F6 D2A2A proc break 181 C03FD D2A2A a(pp)=nl; pp=pp+1; lbeg=pp 182 C041D D2A2A end 183 C0422 D2A2A 184 C0422 D2A2A proc leftstar 185 C0429 D2A2A cycle 186 C0429 D2A2A return if pp=lbeg 187 C0438 D2A2A fp=fp-1; pp=pp-1; a(fp)=a(pp) 188 C0464 D2A2A repeat 189 C0467 D2A2A end 190 C046C D2A2A 191 C046C D2A2A proc rightstar 192 C0473 D2A2A cycle 193 C0473 D2A2A return if fp=lend 194 C0482 D2A2A a(pp)=a(fp); pp=pp+1; fp=fp+1 195 C04AE D2A2A repeat 196 C04B1 D2A2A end 197 C04B6 D2A2A 198 C04B6 D2A2A proc makespace 199 C04BD D2A2A word k p1 p2 200 C04BD D2A2A return if mainfp-pp>240 201 C04D2 D2A2A selout mout 202 C04DA D2A2A p1=top; p2=p1+lbeg>>1; p2=lbeg if code='C' 203 C04FD D2A2A signal 15 p1 p2 if p2=top 204 C0516 D2A2A cycle 205 C0516 D2A2A k=a(p1); psym k; p1=p1+1 206 C0535 D2A2A k=0 if p1'z' 241 C06D2 D2A2A return ch&case 242 C06E0 D2A2A end 243 C06E0 D2A2A 244 C06E0 D2A2A proc matched {used for F,U,T,D,V} 245 C06E7 D2A2A word i j k l t1 fp1 lim 246 C06E7 D2A2A lim=c(ci-3)>>7 247 C06FF D2A2A t1=cased c(text) 248 C0712 D2A2A cycle 249 C0712 D2A2A pp1=pp; fp1=fp 250 C0721 D2A2A if fp#lend; cycle 251 C072E D2A2A k=a(fp) 252 C073D D2A2A if cased k=t1 253 C074D D2A2A if fp=ms 254 C075A D2A2A jump no if code='F' 255 C0766 D2A2A jump no if code='U' 256 C0772 D2A2A finish 257 C0772 D2A2A i=fp; j=text 258 C0780 D2A2A cycle 259 C0780 D2A2A i=i+1; j=j-1; l=cased c(j) 260 C07A4 D2A2A if l=0 261 C07AF D2A2A ms=fp; ml=i; return 1 262 C07C6 D2A2A finish 263 C07C6 D2A2A repeat if cased a(i)=l 264 C07DE D2A2A finish 265 C07DE D2A2A return 0 if code='V' 266 C07EF D2A2A no: a(pp)=k; pp=pp+1; fp=fp+1 267 C0812 D2A2A repeat if fp#lend; finish 268 C081F D2A2A return 0 if code='V' 269 C0830 D2A2A lim=lim-1; lim=0 if fp=fend 270 C0849 D2A2A if lim=0 271 C0854 D2A2A pp=pp1; fp=fp1; return 0 272 C086B D2A2A finish 273 C086B D2A2A if code='U' 274 C0877 D2A2A pp=pp1 275 C087F D2A2A else 276 C0882 D2A2A break 277 C0886 D2A2A finish 278 C0886 D2A2A refresh 279 C088A D2A2A repeat 280 C088D D2A2A end 281 C0892 D2A2A 282 C0892 D2A2A proc switchinputs 283 C0899 D2A2A if in=min 284 C08A5 D2A2A leftstar; in=sin 285 C08B0 D2A2A mfp=fp; mlend=lend; mend=fend 286 C08C8 D2A2A bot=bot+sextra; fp=sfp; fend=send 287 C08E3 D2A2A readline 288 C08E7 D2A2A else 289 C08EA D2A2A pp=lbeg; in=min 290 C08F9 D2A2A bot=bot-sextra; sfp=fp; send=fend; fp=mfp 291 C091C D2A2A lend=mlend; fend=mend 292 C092C D2A2A finish 293 C092C D2A2A end 294 C0931 D2A2A 295 C0931 D2A2A proc showpointers 296 C0938 D2A2A phex top; psym ' '; psym ' ' 297 C0951 D2A2A phex lbeg; psym ' '; phex pp; psym ' ' 298 C0973 D2A2A phex fp; psym ' '; phex lend; psym ' ' 299 C0995 D2A2A psym ' '; phex fend; psym ' ' 300 C09AE D2A2A end 301 C09B3 D2A2A 302 C09B3 D2A2A proc ecce "ecce" 303 C09BF D2A2A word i j k 304 C09BF D2A2A jump eof if trap 1<<9#0 305 C09D2 D2A2A selout 0 306 C09DA D2A2A pp=top-1; break; readline 307 C09ED D2A2A 308 C09ED D2A2A readco: xprompt 0; xprompt '>'; xprompt '>' if in=sin 309 C0A0E D2A2A cycle 310 C0A0E D2A2A ci=cbase; ti=tbase; chain=0 311 C0A23 D2A2A showpointers if mon>0 312 C0A30 D2A2A readitem 313 C0A34 D2A2A repeat if type=1 314 C0A40 D2A2A if type=0; if cmax#0 315 C0A58 D2A2A c(cmax+2)=num; readitem 316 C0A6E D2A2A jump er2 if type#1 317 C0A7A D2A2A jump execute 318 C0A7D D2A2A finish; finish 319 C0A7D D2A2A if sym='%' 320 C0A89 D2A2A readsym; sym=sym-32 if sym>=96; code=sym 321 C0AA9 D2A2A jump er5 if code<'A'; readitem 322 C0AB9 D2A2A i=symtype(code)>>4 323 C0ACC D2A2A else 324 C0ACF D2A2A nextunit: i=type&15; jump er2 if i<4 325 C0AE4 D2A2A code=sym; text=0; num=1; readitem 326 C0AFE D2A2A finish 327 C0AFE D2A2A jump er5 if i=0 328 C0B09 D2A2A if i=1 {%c,s,a} 329 C0B14 D2A2A if code='A' 330 C0B20 D2A2A selout mout; rout; signal 0 0 0 331 C0B3C D2A2A finish 332 C0B3C D2A2A if code='S' 333 C0B48 D2A2A switchinputs; jump monitor 334 C0B4F D2A2A finish 335 C0B4F D2A2A eof:code='C' 336 C0B56 D2A2A switchinputs if in=sin 337 C0B63 D2A2A cycle 338 C0B63 D2A2A rightstar 339 C0B67 D2A2A if fp=fend 340 C0B74 D2A2A selout mout 341 C0B7C D2A2A cycle 342 C0B7C D2A2A signal 0 0 0 if top=pp 343 C0B96 D2A2A psym a(top); top=top+1 344 C0BB2 D2A2A repeat 345 C0BB5 D2A2A finish 346 C0BB5 D2A2A break; refresh 347 C0BBD D2A2A repeat 348 C0BC0 D2A2A finish 349 C0BC0 D2A2A if i=2 {%x,y,z} 350 C0BCB D2A2A i=code-'X'<<6+1 351 C0BDC D2A2A if sym='=' 352 C0BE8 D2A2A cycle 353 C0BE8 D2A2A readsym 354 C0BEC D2A2A if sym#nl 355 C0BF8 D2A2A stored(i)=sym 356 C0C07 D2A2A jump er6 if i&63=0 357 C0C15 D2A2A i=i+1 358 C0C1E D2A2A finish 359 C0C1E D2A2A repeat if sym#nl 360 C0C2A D2A2A stored(i)=0 361 C0C38 D2A2A jump readco 362 C0C3B D2A2A finish 363 C0C3B D2A2A cycle 364 C0C3B D2A2A sym=stored(i) 365 C0C4A D2A2A if sym=0 366 C0C56 D2A2A psym nl; jump readco 367 C0C61 D2A2A finish 368 C0C61 D2A2A psym sym; i=i+1 369 C0C73 D2A2A repeat 370 C0C76 D2A2A finish 371 C0C76 D2A2A if i=3 {%m,f,q} 372 C0C81 D2A2A mon='M'-code; jump readco 373 C0C8F D2A2A finish 374 C0C8F D2A2A if i=4 {f} 375 C0C9A D2A2A num=0 if type#0 376 C0CAA D2A2A finish 377 C0CAA D2A2A if i<=5 {+d,t,u} 378 C0CB5 D2A2A code=num<<7+code; num=1; readitem if type=0 379 C0CD9 D2A2A finish 380 C0CD9 D2A2A if i<=6 {+i,s,v} 381 C0CE4 D2A2A jump er4 if type#3; text=ti; i=sym 382 C0CFF D2A2A cycle 383 C0CFF D2A2A readsym 384 C0D03 D2A2A if sym=nl 385 C0D0F D2A2A pend=sym; i=sym 386 C0D1E D2A2A finish 387 C0D1E D2A2A if sym=i 388 C0D2A D2A2A if code#'I'; if code#'S' 389 C0D42 D2A2A jump er4 if sym=nl 390 C0D4E D2A2A jump er4 if ti=text 391 C0D5B D2A2A finish; finish 392 C0D5B D2A2A c(ti)=0; ti=ti-1; jump ri 393 C0D77 D2A2A finish 394 C0D77 D2A2A jump er6 if ti<=ci; c(ti)=sym; ti=ti-1 395 C0D9E D2A2A repeat 396 C0DA1 D2A2A finish 397 C0DA1 D2A2A if i=7 {%u,l} 398 C0DAC D2A2A case=95; case=127 if code='L'; jump readco 399 C0DC6 D2A2A finish 400 C0DC6 D2A2A if i=8 {m,e} 401 C0DD1 D2A2A jump nq if sym#'-'; code=code+10 402 C0DE8 D2A2A ri: readitem; jump rn 403 C0DEF D2A2A finish 404 C0DEF D2A2A if i=9 {)} 405 C0DFA D2A2A unchain; jump er3 if text=0 406 C0E0A D2A2A c(text+2)=num; text=text+3 407 C0E27 D2A2A finish 408 C0E27 D2A2A if i<=10 {+g,k,etc} 409 C0E32 D2A2A nq: jump er1 if type=3 410 C0E3E D2A2A rn: readitem if type=0 411 C0E4B D2A2A jump put 412 C0E4E D2A2A finish 413 C0E4E D2A2A if i=12 {,} 414 C0E59 D2A2A readitem if type=1 415 C0E66 D2A2A finish 416 C0E66 D2A2A if i<=12 {+(} 417 C0E71 D2A2A text=chain; chain=ci; num=0 418 C0E88 D2A2A finish 419 C0E88 D2A2A signal 14 1 i if i>12 420 C0EA0 D2A2A put: stack code; stack text; stack num 421 C0EBB D2A2A jump er6 if ci+4>=ti 422 C0ECB D2A2A jump nextunit if type#1 423 C0ED7 D2A2A unchain; jump er3 if text#0 424 C0EE7 D2A2A cmax=ci 425 C0EEF D2A2A stack ')'; stack cbase; stack 1 426 C0F07 D2A2A stack 0; jump execute 427 C0F12 D2A2A er1: psym ' '; psym code 428 C0F23 D2A2A er2: code=sym; jump er5 429 C0F2E D2A2A er3: psym ' '; psym '('; psym ')'; jump er7 430 C0F49 D2A2A er4: psym ' '; psym 'T'; psym 'e'; psym 'x'; psym 't' 431 C0F71 D2A2A psym ' '; psym 'f'; psym 'o'; psym 'r' 432 C0F91 D2A2A er5: psym ' '; psym code&127; jump er7 433 C0FA8 D2A2A er6: psym ' '; psym 'S'; psym 'i'; psym 'z'; psym 'e' 434 C0FD0 D2A2A er7: psym '?'; psym nl 435 C0FE0 D2A2A cmax=0 if ci#cbase 436 C0FF0 D2A2A cycle 437 C0FF0 D2A2A jump readco if sym=nl; readsym 438 C1000 D2A2A repeat 439 C1003 D2A2A 440 C1003 D2A2A execute: 441 C1003 D2A2A ci=cbase 442 C100A D2A2A get: code=c(ci)&127; jump monitor if code=0 443 C1028 D2A2A text=c(ci+1); num=c(ci+2); ci=ci+3 444 C1057 D2A2A rep: num=num-1 445 C1062 D2A2A jump xm if code='M' 446 C106E D2A2A jump xw if code='W' 447 C107A D2A2A jump xl if code='L' 448 C1086 D2A2A jump xr if code='R' 449 C1092 D2A2A jump xc if code='C' 450 C109E D2A2A jump xlb if code='(' 451 C10AA D2A2A jump xcomma if code=',' 452 C10B6 D2A2A jump xrb if code=')' 453 C10C2 D2A2A jump no if code='\' 454 C10CE D2A2A jump xj if code='J' 455 C10DA D2A2A jump xk if code='K' 456 C10E6 D2A2A jump xp if code='P' 457 C10F2 D2A2A jump xb if code='B' 458 C10FE D2A2A jump xg if code='G' 459 C110A D2A2A jump xi if code='I' 460 C1116 D2A2A jump xs if code='S' 461 C1122 D2A2A jump xt if code='T' 462 C112E D2A2A jump xd if code='D' 463 C113A D2A2A jump xu if code='U' 464 C1146 D2A2A jump xf if code='F' 465 C1152 D2A2A jump xv if code='V' 466 C115E D2A2A jump xo if code='O' 467 C116A D2A2A jump xe if code='E' 468 C1176 D2A2A signal 14 2 code 469 C1187 D2A2A ok: jump get if num=0 470 C1193 D2A2A jump get if num=stop 471 C119F D2A2A jump rep 472 C11A2 D2A2A no: jump get if num<0 473 C11AE D2A2A if c(ci)='\' 474 C11C1 D2A2A ci=ci+3; jump get 475 C11CF D2A2A finish 476 C11CF D2A2A skp: i=c(ci); ci=c(ci+1) if i='('; ci=ci+3 477 C1202 D2A2A if i#','; if i#')' 478 C1218 D2A2A jump skp if i#0; jump xer 479 C1226 D2A2A finish; finish 480 C1226 D2A2A num=c(ci-1)-1; jump no 481 C123E D2A2A xer: psym 'F'; psym 'a'; psym 'i'; psym 'l'; psym 'e'; psym 'd' 482 C126E D2A2A psym ' ' 483 C1276 D2A2A if code='O' 484 C1282 D2A2A psym 'E'; code='-' 485 C1291 D2A2A else if code='W' 486 C12A0 D2A2A psym 'M'; code='-' 487 C12AF D2A2A finish 488 C12AF D2A2A psym code 489 C12B8 D2A2A if text#0 490 C12C4 D2A2A psym '"' 491 C12CC D2A2A cycle 492 C12CC D2A2A i=c(text); psym i if i#0; text=text-1 493 C12F5 D2A2A repeat if i#0 494 C1300 D2A2A psym '"' 495 C1308 D2A2A finish 496 C1308 D2A2A psym nl; print1=0 497 C1317 D2A2A monitor: 498 C1317 D2A2A jump readco if sym#nl 499 C1323 D2A2A jump readco if mon<0 500 C132F D2A2A if print1=lend 501 C133C D2A2A jump readco if mon=0 502 C1348 D2A2A jump readco if print2=fp+pp 503 C135F D2A2A finish 504 C135F D2A2A num=0; printline 505 C136A D2A2A jump readco 506 C136D D2A2A 507 C136D D2A2A xlb: c(text+2)=num+1; jump get 508 C1385 D2A2A xrb: jump get if num=0 509 C1391 D2A2A jump get if num=stop 510 C139D D2A2A c(ci-1)=num 511 C13AF D2A2A xcomma: ci=text; jump get 512 C13BA D2A2A xc: jump no if fp=lend; i=a(fp) 513 C13D6 D2A2A if i&95>='A'; if i&95<='Z' 514 C13F2 D2A2A a(fp)=i\32 515 C1402 D2A2A finish; finish 516 C1402 D2A2A xr: jump no if fp=lend 517 C140F D2A2A a(pp)=a(fp); pp=pp+1; fp=fp+1; jump ok 518 C143E D2A2A xl: jump no if pp=lbeg 519 C144B D2A2A jump no if in=sin 520 C1457 D2A2A fp=fp-1; pp=pp-1; a(fp)=a(pp) 521 C1483 D2A2A ms=0; jump ok 522 C148D D2A2A xe: jump no if fp=lend; fp=fp+1; jump ok 523 C14A8 D2A2A xo: jump no if pp=lbeg; pp=pp-1; jump ok 524 C14C3 D2A2A xv:xu:xd:xf: 525 C14C3 D2A2A jump no if matched=0 526 C14CF D2A2A if code='U' 527 C14DB D2A2A pp=pp1 528 C14E3 D2A2A else if code='D' 529 C14F2 D2A2A fp=ml 530 C14FA D2A2A finish 531 C14FA D2A2A jump ok 532 C14FD D2A2A xt: jump no if matched=0 533 C1509 D2A2A cycle 534 C1509 D2A2A a(pp)=a(fp); pp=pp+1; fp=fp+1 535 C1535 D2A2A repeat if fp#ml 536 C1542 D2A2A jump ok 537 C1545 D2A2A xs: jump no if fp#ms; fp=ml 538 C155A D2A2A xi: makespace 539 C155E D2A2A jump no if pp-lbeg+lend-fp>80 540 C1576 D2A2A i=text 541 C157D D2A2A cycle 542 C157D D2A2A jump ok if c(i)=0 543 C158F D2A2A a(pp)=c(i); pp=pp+1; i=i-1 544 C15B7 D2A2A repeat 545 C15BA D2A2A xg: xprompt 0; xprompt ':' 546 C15CA D2A2A makespace; i=rsym; jump no if i=':'; leftstar 547 C15E4 D2A2A if i#nl; cycle 548 C15EF D2A2A a(pp)=i; pp=pp+1; i=rsym 549 C160E D2A2A repeat if i#nl; finish 550 C1619 D2A2A xb: break; jump ok 551 C1620 D2A2A xp: printline; jump get if num=0 552 C1630 D2A2A xm: rightstar; jump no if fp=fend; break 553 C1645 D2A2A m1: refresh; jump ok 554 C164C D2A2A xk: pp=lbeg; fp=lend 555 C165C D2A2A k1: jump no if fp=fend; jump m1 556 C166C D2A2A xj: rightstar; jump no if pp-lbeg>80; jump k1 557 C1683 D2A2A xw: jump no if in=sin 558 C168F D2A2A makespace 559 C1693 D2A2A jump no if lbeg=top 560 C16A0 D2A2A lend=fp-pp+lbeg-1 561 C16B3 D2A2A cycle 562 C16B3 D2A2A k=a(pp-1) 563 C16C5 D2A2A if k=nl; if pp#lbeg 564 C16DD D2A2A lbeg=pp; ms=0; jump ok 565 C16EF D2A2A finish; finish 566 C16EF D2A2A fp=fp-1; pp=pp-1; a(fp)=k 567 C1712 D2A2A repeat 568 C1715 D2A2A end {ecce} 569 C171A D2A2A 570 C171A D2A2A end {file}