;›;This is the main program for UMAP›;it includes beg.act, inc.act, and›;incpe.act›;›;When I ra out of memory, I commented›;out code I knew worked an continued›;to add features. Later, I used this›;source as documentation for the›;assembly language version.›;›INCLUDE "D:beg"›MODULE›BYTE vis››PROC Io()›DDev=49›DUNIT=1 DCOM=Cmd›IF Cmd='R THEN IODIR=64›ELSE IODIR=128 FI›BUFADR=sc_ TIMEOUT=10›SECSIZE=128›DSECTOR=SEC›Siocall()›RETURN››PROC RWSec(CARD start,Nsec)›FOR Sec=start TO start+Nsec-1 DO› Io()› sc_==+128›OD›RETURN››PROC ClDisplay()›;ldx #176 lda scadr sta $CA›;lda scadr+1 sta $CB ??:lda #0›;ldy #21 ?:sta ($CA),y dey bpl ? clc›;lda $CA adc #40 sta $CA bcc 2 inc $CB›;dex bne ?? rts›[162 176 169 32 133 $CA›169 132 133 $CB 169 0›160 21 145 $CA 136 16 251 24›165 $CA 105 40 133 $CA 144 2 230 $CB›202 208 233 96]››INCLUDE "D:inc"››PROC DoOpen(BYTE POINTER q BYTE n)›;;BYTE POINTER j›;;BYTE rw›;;rw=4 IF Cmd#'R THEN rw=8 FI›;;Close(2)›;;j=Strr(n)›;;MoveBlock(q+q^-2,j+1,3)›;;q(2)=dvn›;;Open(2,q,rw,0)›RETURN››PROC ReadBrit()›;;CARD c›;;Close(1) Open(1,"D9:BRIT.MAP",8,0)›;;IF sf THEN›;; Brit(2)=dvn›;; Close(2) Open(2,Brit,4,0)›;; FOR i=0 TO 63 DO›;; BGet(2,Sc,1024)›;; BPut(1,Sc,1024)›;; OD›;; Close(2)›;;ELSE›;; c=17›;; FOR i=0 TO 63 DO›;; sc_=Sc›;; Cmd='R›;; RWSec(c,8) c==+8›;; BPut(1,Sc,1024)›;; OD›;;FI›;;Close(1)›;;Open(1,"D9:BRIT.MAP",12,0)›RETURN››PROC WriteBrit()›;;CARD c›;;Point(1,0,0)›;;IF sf THEN›;; Brit(2)=dvn›;; Close(2) Open(2,Brit,8,0)›;; FOR i=0 TO 63 DO›;; BGet(1,Sc,1024)›;; BPut(2,Sc,1024)›;; OD›;; Close(2)›;;ELSE›;; c=17›;; FOR i=0 TO 63 DO›;; BGet(1,Sc,1024)›;; sc_=Sc›;; Cmd='P›;; RWSec(c,8) c==+8›;; OD›;;FI›RETURN››PROC FGet(CARD POINTER q BYTE z)›DO› q^=gg gg==+gg^+1 q==+2› z==-1›UNTIL z=0 OD›RETURN››PROC Defs()›FGet(mdn,5)›FGet(sof,2)›FGet(ts,13)›FOR i=0 TO 11 DO› bs(i)=ts(i)›OD›FGet(bs+24,3)›FGet(tm,17)›FGet(dm,8)›FGet(ds,7)›ds(7)=bs(14)›FOR i=0 TO 6 DO› dis(i)=ds(i)›OD›FGet(dis+14,16)›RETURN››PROC Inv_(BYTE a)›CARD p=$CA›IF a=0 THEN› p=scadr+663›ELSE› p=scadr+m640(a)+343›FI›[162 7]›[160 13]›[169 255 81 $CA 145 $CA 136 16 247]›[24 169 40 101 $CA 133 $CA 144 2›230 $CB 202 16 231]›[96]››PROC DispMenu()›BYTE a›CARD POINTER b›IF smd=0 THEN RETURN FI›gsc=scadr+357›a=cnt(smd)›gsc==+m640(smd)›WriteB(a)›IF smd<>6 THEN› b=pcnt(smd)› gsc==+303› IF a>cmax(smd) THEN› WriteCl(FiEx)› ELSE› WriteCl(b(a))› FI›FI›RETURN››PROC Menu()›CARD ARRAY l(1)›gsc=scadr+22›FOR i=0 TO 21 DO› FGet(l,1)› WriteNA(l^)› gsc==+320›OD›FOR i=0 TO 6 DO cnt(i)=0 OD›md=0 icn=0 sf=0›Defs()›pcnt(1)=bs›pcnt(2)=tm›pcnt(3)=ts›pcnt(4)=dm›pcnt(5)=ds›FOR smd=1 TO 6 DO› DispMenu()›OD›smd=0›RETURN››PROC DoIcn()›BYTE POINTER p,q,c›gsc=scadr+5795›WriteB(icn)›c=gsc+320›p=Pa+icn q=p+4096›FOR i=0 TO 15 DO› c^=p^ c(1)=q^› c==+40 p==+256 q==+256›OD›RETURN››PROC Init()›Close(6)›Graphics(24)›dma=0 dma2=0›;start of data=33840-16›;4K data reached at 36K(76 gr0 scan lines)›Zero(33602,7358)›dl=33602›scadr=33824›;lda #112 ldy #2 sta 33602,y dey bpl rep›[169 112 160 2 153 33602 136 16 250›169 79 141 33605 165 88 141 33606›165 89 141 33607 160 90 169 15›153 33608 153 33699 136 16 247›169 79 141 33683 169 0 141 33684›169 144 141 33685 169 66 141 33785›169 176 141 33786 169 159 141 33787›169 2 141 33788 169 65 141 33789›173 560 141 33790 173 561 141 33791]›;Close(7)›;Open(7,"K:",4,0)›bg=0 TextMode=0›fg=12›Zero(Pe,256) sic=0›Close(1)›Open(1,"D:*.UFN",4,0)›BGet(1,Pa,8192)›Close(1)›;BRIT.MAP›;should be on a separate drive, if›;not a Ramdisk. I used D9:, my Ramdisk.›Open(1,"D9:BRIT.MAP",12,0)›gsc=L1›WriteL("X:")›gsc==+4›WriteL("Y:")›Menu()›Inv_(0)›dvn=49 crmd=0 ocrmd=1›pmb=4 vdel=0›Zero(1536,128);p0›FOR i=0 TO 3 DO px(i)=0 OD›oyv=0›pc0=16›ps0=0›gprior=1›gractl=2›Ttyp=0 vis=0›dma=42›RETURN››PROC PosCur()›IF ocrmd#crmd THEN ocrmd=crmd ox=255 oy=255 FI›IF ox#rx THEN› IF crmd=0 THEN;p0x=48+rx LSH 3 ox=rx›[173 rx 141 ox 10 10 10 24 105 48 141 p0x]› ELSE;p0x=48+28+rx LSH 2 ox=rx›[173 rx 141 ox 10 10 24 105 76 141 p0x]› FI›FI›IF oy=ry THEN RETURN FI›IF crmd=0 THEN›[169 255 133 $A0 169 8 133 $A1 169 0›133 $A2 169 16 133 $A3]›ELSE›[169 240 133 $A0 169 4 133 $A1›169 44 133 $A3 169 255 133 $A2]›FI›;ldy oyv ldx #8 lda #0 sta 1536,y iny›[172 oyv 162 8 169 0 153 1536 200›;dex bne rep lda ry sta oy asla asla›202 208 249 173 ry 141 oy 10 10›;bit $A2 bmi 1 asla adc $A3›36 $A2 48 1 10 101 $A3›;sta oyv tay lda $A0 ldx $A1›141 oyv 168 165 $A0 166 $A1›;sta 1536,y iny dex bne rep›153 1536 200 202 208 249›96]›RETURN››PROC GetBl()›CARD q,p›q=(mx+my*16)*256 oq=q›Point(1,q,0)›p=0›DO› BGet(1,Sc+p,16)› p==+32›UNTIL p=512 OD›Point(1,q+4096,0)›DO› BGet(1,Sc+p,16)› p==+32›UNTIL p=1024 OD›Point(1,q+256,0)›p=16›DO› BGet(1,Sc+p,16)› p==+32›UNTIL p=528 OD›Point(1,q+4096+256,0)›DO› BGet(1,Sc+p,16)› p==+32›UNTIL p=1040 OD›RETURN››PROC PutBl()›CARD p›Point(1,oq,0)›p=0›DO› BPut(1,Sc+p,16)› p==+32›UNTIL p=512 OD›Point(1,oq+4096,0)›DO› BPut(1,Sc+p,16)› p==+32›UNTIL p=1024 OD›Point(1,oq+256,0)›p=16›DO› BPut(1,Sc+p,16)› p==+32›UNTIL p=528 OD›Point(1,oq+4096+256,0)›DO› BPut(1,Sc+p,16)› p==+32›UNTIL p=1040 OD›RETURN››PROC Rot(BYTE w)›BYTE POINTER p,r›BYTE t,q,u›p=pa+w+3840›r=p+4096›t=p^›u=r^›q=0›DO› p==-256› r==-256› p(256)=p^› r(256)=r^› q==+1›UNTIL q=15 OD›p^=t r^=u›RETURN››PROC Flag(BYTE w)›;;BYTE POINTER p›;;BYTE t›;;IF (rnd&3)#0 THEN›;; IF w=14 THEN›;; p=pa+w+256›;; ELSEIF (w=16) OR (w=18) THEN›;; p=pa+w+512›;; ELSEIF w=11 THEN›;; p=pa+w+4096+256›;; ELSE;towne›;; p=pa+w+768›;; FI›;; t=p^›;; p^=p(256)›;; p(256)=t›;; IF (w=16) OR (w=18) THEN›;; t=p($1000) p($1000)=p($1100)›;; p($1100)=t›;; FI›;;FI›RETURN››PROC DoChr()›;;BYTE POINTER r,s,t,u›;;BYTE q›Rot(0)›Rot(1)›Rot(2)›Rot(76)›;;Flag(14)›;;Flag(10)›;;Flag(11)›;;Flag(16)›;;Flag(18)›;;r=Pa+68 s=Pa+70 t=Pa+69 u=Pa+71›;;FOR i=0 TO 31 DO›;; q=rnd&170›;; r^=q r==+256›;; s^=q RSH 1 s==+256›;; t^=q%(q RSH 1)%(rnd&170) t==+256›;; u^==!255 u==+256›;;OD›;;r=Pa+75+$700›;;FOR i=0 TO 5 DO›;; r^==&224%(rnd&21)›;; r(4096)==&63%(rnd&64)›;; r==+256›;;OD›RETURN››PROC CPlot(BYTE x,y,q,o)›;;BYTE POINTER gp,cp›;;gp=x LSH 1+m640(y)+o+scadr›;;cp=q cp==LSH 3+57344 q=8›;;DO gp^=cp^ gp==+40 cp==+1 q==-1 UNTIL q=0 OD›RETURN››PROC DoShowPe(BYTE ofs)›;;ofs==LSH 4›;;i=7›;;DO›;; CPlot(Pe(i+64+ofs),Pe(i+72+ofs),i+16,0)›;; i==-1›;;UNTIL i=255 OD›RETURN››PROC ShowM3()›;;i=15›;;DO›;; CPlot(Pe(i+64),Pe(i+80),45,1);'M-32›;; i==-1›;;UNTIL i=255 OD›;;DoShowPe(2)›RETURN››PROC ShowM4()›;;BYTE p›;;IF Ptyp=2 THEN›;; p=per LSH 2 i=Pe(p+1)›;; CPlot(i RSH 4,i&15,52,1);'T-32›;; i=Pe(p+2)›;; CPlot(i RSH 4,i&15,17,0)›;; i=Pe(p+3)›;; CPlot(i RSH 4,i&15,18,0)›;;ELSE›;; DoShowPe(s_dir);N=0,E=1,S=2,W=3›;;FI›RETURN››MODULE›BYTE POINTER zt,zf›BYTE ARRAY hbuf(242),›hdx=[$FF 0 1 1 1 0 $FF $FF $FF 0],›hdy=[$FF $FF $FF 0 1 1 1 0 $FF $FF]››PROC Spike(BYTE d,x,y)›BYTE p,tmp›DO› x==+hdx(d) y==+hdy(d)› IF (x>10) OR (y>10) THEN› RETURN› FI› p=x+y*11› tmp=zf(p)› zt(p)=tmp› IF (tmp=127) OR (tmp=6) OR (tmp=8) OR (tmp=73) THEN› RETURN› FI›OD››PROC Vis_()›BYTE ax,ay,dr,p,tmp,tx,ty›zt=hbuf›zf=hbuf+121›SetBlock(zt,121,126)›dr=1›p=rx+ry*11›zt(p)=zf(p)›DO› ax=rx ay=ry› DO› ax==+hdx(dr) ay==+hdy(dr)› IF (ax>10) OR (ay>10) THEN EXIT FI› p=ax+ay*11› tmp=zf(p)› zt(p)=tmp› IF (tmp=127) OR (tmp=6) OR (tmp=8) OR (tmp=73) THEN› EXIT› FI› Spike(dr-1,ax,ay)› Spike(dr+1,ax,ay)› OD› dr==+1›UNTIL dr=9 OD›RETURN››;xp=$FE,yp=$FF›;^scp=$FC,$FD›;^gt=$FA,$FB›;^lk=$F8,$F9›;^hb=$F6,$F7›;ooscp=$F4,$F5›;oscp=$F2,$F3›;hPa=$F0,$F1›;gt4096=$EE›PROC Display(BYTE ux,uy)›BYTE xp=$FE,yp=$FF›CARD scp=$FC,gt=$FA,lk=$F8,hPa=$F0,›gt4096=$EE›CARD hb=$F6,ooscp=$F4,oscp=$F2›[173 704 24 105 16 240 251 141 704]›DoChr()›lk=uy lk==LSH 5›lk==+Sc+ux›hb=hbuf+121›;copy into 11*11 hbuf›;yp=11›[162 11]›DO›;xp=11›[160 10]› DO›;hb(xp)=lk(xp) xp==-1 UNTIL xp=0›[177 $F8 145 $F6 136 48 3]› OD›;lk==+32 hb==+11 yp==-1 UNTIL yp=0›[24 165 $F8 105 32 133 $F8 144 2› 230 $F9 24 165 $F6 105 11 133 $F6› 144 2 230 $F7 202 240 3]›OD›IF ((md=0) OR (md=1)) AND (vis=1) THEN› ;Do Visibility check› Vis_()›ELSE› MoveBlock(hbuf,hbuf+121,121)›FI›;Display on Screen›hPa=Pa›scp=scadr›ooscp=scp›lk=hbuf›;yp=11›[169 11 133 $FF 160 0]›DO›; xp=11›; oscp=scp›; ooscp==+640›[169 11 133 $FE›165 $FC 133 $F2 165 $FD 133 $F3›24 165 $F4 105 128 133 $F4 165 $F5›105 2 133 $F5]› DO›; gt=Pa+lk^›; lk==+1 en=16›; oscp==+2›[165 $F0 113 $F8 133 $FA›133 $EE 165 $F1 105 0 133 $FB›105 16 133 $EF›230 $F8 208 2 230 $F9 162 16›165 $F2 105 2 133 $F2 165 $F3 105 0›133 $F3]› DO›; scp^=gt^›; scp(1)=gt(4096)›; gt==+256 gt4096==+256›; scp==+40›; en==-1›; UNTIL en=0 OD›[177 $FA 145 $FC›177 $EE 200 145 $FC 136›230 $EF 230 $FB›165 $FC 105 40 133 $FC 165 $FD›105 0 133 $FD›202 240 3]› OD›; scp=oscp›; xp==-1 UNTIL xp=0 OD›[165 $F2 133 $FC 165 $F3 133 $FD›198 $FE 240 3]› OD›; scp=ooscp›; yp==-1 UNTIL yp=0 OD›[165 $F4 133 $FC 165 $F5 133 $FD›198 $FF 240 3]›OD›IF md=3 THEN› IF sic THEN› ShowM3()› FI›ELSEIF md=4 THEN› IF sic THEN› ShowM4()› FI›FI›DoIcn()›RETURN››PROC M_Fount(BYTE POINTER ad)›;;BYTE h,i›;;h=ad(5) i=5›;;DO ad(i)=ad(i-1) i==-1 UNTIL i=0 OD›;;ad^=h›RETURN››PROC Mod_()›BYTE POINTER q,r,s,t›BYTE i,h›;;M_Fount(gf_)›;;M_Fount(pf_)›;;M_Fount(pf2_)›;;M_Fount(cf_)›q=poi_ r=lig_ s=fir_ t=sl_›FOR i=0 TO 7 DO› h=rnd&170› q^=h q==+1› s^=h RSH 1 s==+1› r^=h%(h RSH 1)%(rnd&170) r==+1› t^==!255 t==+1›OD›RETURN ››BYTE FUNC Ind_(BYTE f)›BYTE i›i=0›DO› IF ToV(i)=f THEN› RETURN(i)› FI› i==+1›UNTIL i=23 OD›RETURN(22)››CARD FUNC chad(BYTE f)›IF f=240 THEN RETURN(wa_)›ELSEIF f=0 THEN RETURN(57344);' ›ELSEIF f=224 THEN RETURN(sd_)›ELSEIF f=32 THEN RETURN(dn_)›ELSEIF f=16 THEN RETURN(up_)›ELSEIF f=48 THEN RETURN(ud_)›ELSEIF f=128 THEN RETURN(57784);'W›ELSEIF f=129 THEN RETURN(57744);'R›ELSEIF f=160 THEN RETURN(poi_)›ELSEIF f=161 THEN RETURN(lig_)›ELSEIF f=162 THEN RETURN(fir_)›ELSEIF f=163 THEN RETURN(sl_)›ELSEIF f=64 THEN RETURN(57376);'$›ELSEIF f=192 THEN RETURN(er_)›ELSEIF f=112 THEN RETURN(58016);'›ELSEIF f=142 THEN RETURN(57728);'P›ELSEIF f=144 THEN RETURN(noe_)›ELSEIF f=145 THEN RETURN(gf_)›ELSEIF f=146 THEN RETURN(pf_)›ELSEIF f=147 THEN RETURN(cf_)›ELSEIF f=148 THEN RETURN(pf2_)›ELSEIF f=176 THEN RETURN(alt_)›ELSE›RETURN(rm_)›FI››PROC DoDngIcn()›BYTE ARRAY dd="00"›BYTE POINTER c,p›BYTE a›gsc=scadr+5795›IF icn<22 THEN› Write(" ")›ELSE› a=icn-22+cnt(4) LSH 4› IF cnt(4)=7 THEN› a==+(xx RSH 1)LSH 4› FI› WriteB(a)›FI›c=gsc+320›a=icn IF a>22 THEN a=22 FI›p=chad(ToV(a))›FOR i=0 TO 7 DO› c^=p^ c(1)=0› c==+40 p==+1›OD›IF a=22 THEN› gsc=c› a=icn-22› dd(1)=a/10+48› dd(2)=a MOD 10+48› Write(dd)›ELSE› FOR i=0 TO 7 DO› c^=0 c(1)=0› c==+40› OD›FI›RETURN››PROC DispDng()›BYTE POINTER f,ot,t›CARD tt=$CC,c=$CA›BYTE xp,yp,py›Mod_()›f=Sc+xx*64›ot=scadr+2247›FOR yp=0 TO 7 DO› t=ot› ot==+320› FOR xp=0 TO 7 DO› c=chad(f(xp))› tt=t›; FOR py=0 TO 7 DO›; t(py*40)=c(py)›; OD›;c=$CA,$CB;tt=$CC,$CD›;ldy #0 lda ($CA),y sta ($CC),y›[160 0 177 $CA 145 $CC›;clc lda $CC adc #39 sta $CC bcc 2›24 165 $CC 105 39 133 $CC 144 2›;inc $CD iny cpy #8 bne rep›230 $CD 200 192 8 208 236]› t==+1› OD› f==+8›OD›DoDngicn()›RETURN››PROC RWTowne()›IF sf=1 THEN›;; DoOpen("Dn:TOWNE.000",cnt(2))›;; IF Cmd='R THEN›;; BGet(2,Sc,1024)›;; BGet(2,Pe,256)›;; ELSE›;; BPut(2,Sc,1024)›;; BPut(2,Pe,256)›;; FI›;; Close(2)›ELSE› IF cnt(2)>16 THEN RETURN FI› sc_=Sc› IF cnt(2)=16 THEN› RWSec(555,8)› ELSE› RWSec(360+cnt(2)*10,8)› FI› sc_=Pe› RWSec(Sec,2)›FI›RETURN››PROC ReadTowne()›RWTowne()›mx=0 my=0 xx=11 yy=11 rx=5 ry=5›RETURN››PROC WriteTowne()›;;RWTowne()›RETURN››PROC RdSc(BYTE b)›IF sf=0 THEN› IF cnt(b)>cmax(b) THEN RETURN FI›FI›IF sf THEN› IF b=1 THEN› Scs(4)='B› ELSEIF b=3 THEN› Scs(4)='T› ELSEIF b=5 THEN› Scs(4)='D› ELSEIF b=6 THEN› Scs(4)='R› FI› DoOpen(Scs,cnt(b))› BGet(2,Pe,128)› sc_=Sc+768› BGet(2,sc_,128)› Close(2)›ELSE› sc_=Pe› Io()› Sec==+1 sc_=Sc+768› Io()›FI›i=0›DO› MoveBlock(Sc+i*32,sc_+i*11,11)› i==+1›UNTIL i=11 OD›mx=0 my=0 xx=0 yy=0 rx=5 ry=5›RETURN››PROC WrSc(BYTE b)›;;IF sf=0 THEN›;; IF cnt(b)>cmax(b) THEN RETURN FI›;;FI›;;IF sf THEN›;; IF b=1 THEN›;; Scs(4)='B›;; ELSEIF b=3 THEN›;; Scs(4)='T›;; ELSEIF b=5 THEN›;; Scs(4)='D›;; ELSEIF b=6 THEN›;; Scs(4)='R›;; FI›;; DoOpen(Scs,cnt(b))›;; BPut(2,Pe,128)›;; FOR i=0 TO 10 DO›;; BPut(2,Sc+i*32,11)›;; OD›;; Close(2)›;;ELSE›;; sc_=Pe›;; Io() Sec==+1 sc_=Sc+768›;; i=0›;; DO›;; MoveBlock(sc_+i*11,Sc+i*32,11)›;; i==+1›;; UNTIL i=11 OD›;; Io()›;;FI›RETURN››PROC RWScreen(BYTE b)›BYTE a›a=cnt(b)›IF a=13 THEN› Sec=584›ELSEIF a=14 THEN› Sec=681›ELSE› Sec=529+a*2›FI›IF Cmd='R THEN› RdSc(b)› i=111› DO› IF Pe(i)>10 THEN› Zero(Pe,128)› FI› i==-1› UNTIL i=63 OD›ELSE› WrSc(b)›FI›RETURN››PROC RWDScr(BYTE b,t)›BYTE a›a=cnt(b)›IF t THEN› IF a=7 THEN› Sec=681› ELSE› Sec=657+a*2› FI›ELSE› Sec=17+a*2›FI›IF Cmd='R THEN› RdSc(b)› IF t=0 THEN› i=127› DO› IF Pe(i)>10 THEN› Zero(Pe,128)› FI› i==-1› UNTIL i=31 OD› ELSE› i=111› DO› IF Pe(i)>10 THEN› Zero(Pe,128)› FI› i==-1› UNTIL i=63 OD› FI›ELSE› WrSc(b)›FI›RETURN››PROC RWDng()›BYTE ARRAY dngs="Dn:DUNGEON.000"›BYTE a›a=cnt(4)›IF (a>cmax(4)) AND (sf=0) THEN RETURN FI›IF sf THEN› DoOpen(dngs,a)› IF Cmd='R THEN› BGet(2,Sc,512)› ELSE› BPut(2,Sc,512)› FI› Close(2)›ELSE› sc_=Sc› RWSec(625+a LSH 2,4)›FI›IF Cmd='R THEN› rx=0 ry=0 xx=0 ox=255 oy=255›FI›RETURN››INCLUDE "D9:incpe"››PROC SErr()›BYTE t20=20›WriteL2("ĹňňşYou can't save cur mode as sel mode")›t20=0›DO UNTIL t20=255 OD›RETURN››BYTE FUNC KeyCore(BYTE k)›BYTE POINTER z›BYTE y›y=15›IF k='+ THEN› y=11›ELSEIF k='* THEN› y=7›ELSEIF k='- THEN› y=14›ELSEIF k='= THEN› y=13›ELSEIF k='c THEN› IF md=0 THEN PutBl() FI › IF (md=0) OR (md=1) THEN› IF AskYN(" Convert to Screen(Y or N)?")=1 THEN› Zero(Pe,128)› z=xx+yy*32› FOR i=0 TO 10 DO› MoveBlock(Sc+i*32,Sc+i*32+z,11)› OD› mx=0 my=0 xx=0 yy=0 rx=5 ry=5 md=3› FI› FI›ELSEIF k=' THEN› Cmd='R› IF (sic#0) AND (md#3) THEN› HidePe()› FI› gsc=scadr+6435› sic=0› ClrL2()› Write("ff")› IF PressRet("load")=1 THEN› IF smd=2 THEN;Towne› IF md=0 THEN PutBl() FI› ReadTowne()› md=1› ELSEIF smd=1 THEN;BritSc› IF md=0 THEN PutBl() FI› RWScreen(1)› md=3› ELSEIF smd=3 THEN;TownSc› IF md=0 THEN PutBl() FI› RWScreen(3)› md=3› ELSEIF smd=0 THEN;Brit› ReadBrit()› md=0› RETURN(255)› ElSEIF smd=4 THEN;Dung› IF md=0 THEN PutBl() FI› RWDng()› md=2 icn=0› ClDisplay()› DispDng()› RETURN(253)› ELSEIF smd=5 THEN;DungSc› IF md=0 THEN PutBl() FI› RWDScr(5,1)› md=3› ELSEIF smd=6 THEN;DungRm› IF md=0 THEN PutBl() FI› RWDScr(6,0)› md=4› FI› FI› ClrL2()›ELSEIF k=' THEN› IF PressRet("save")=1 THEN› IF (sic#0) AND (md#3) THEN› HidePe()› FI› gsc=scadr+6435› sic=0› ClrL2()› Write("ff")› Cmd='W› IF smd=2 THEN;Towne› IF md#1 THEN› SErr()› ELSE› WriteTowne()› FI› ELSEIF smd=1 THEN;BritSc› IF md#3 THEN› SErr()› ELSE› RWScreen(1)› FI› ELSEIF smd=3 THEN;TownSc› IF md#3 THEN› SErr()› ELSE› RWScreen(3)› FI› ELSEIF smd=0 THEN;Brit› IF md#0 THEN› SErr()› ELSE› PutBl()› WriteBrit()› GetBl()› FI› ElSEIF smd=4 THEN;Dung› IF md#2 THEN› SErr()› ELSE› RWDng()› FI› ELSEIF smd=5 THEN;DungSc› IF md#3 THEN› SErr()› ELSE› RWDScr(5,1)› FI› ELSEIF smd=6 THEN;DungRm› IF (md#4) AND (md#3)THEN› SErr()› ELSE› RWDScr(6,0)› FI› FI› FI› ClrL2()›ELSEIF k='F THEN› IF AskYN(" Fill with current icon (Y or N)?")=1› THEN› IF md=2 THEN› IF icn<22 THEN› SetBlock(sc+64*xx,64,ToV(icn))› FI› ELSE› SetBlock(Sc,1024,icn)› FI› IF sic THEN ShowPe() FI› FI› ClrL2()›ELSEIF k='. THEN› icn==+1› IF md=2 THEN› IF icn=38 THEN icn=0 FI› FI›ELSEIF k=', THEN› icn==-1› IF md=2 THEN› IF icn=255 THEN icn=37 FI› FI›ELSEIF k='] THEN› icn==+20› IF md=2 THEN› IF icn>37 THEN icn=0 FI› FI›ELSEIF k='[ THEN› icn==-20› IF md=2 THEN› IF icn>230 THEN icn=37 FI› FI›ELSEIF k=' THEN› IF md=0 THEN PutBl() FI› [169 0 141 53248]› Break()›ELSEIF (k=') OR (k='ź) THEN› Inv_(smd)› IF k=' THEN› smd==+1› IF smd=7 THEN smd=0 FI› ELSEIF k='ź THEN› smd==-1› IF smd=255 THEN smd=6 FI› FI› Inv_(smd)›ELSEIF ((k='>) OR (k='<)) OR ((k='}) OR (k='ť)) THEN› IF k='> THEN› k=1› ELSEIF k='< THEN› k=255› ELSEIF k='} THEN› IF cnt(smd)<10 THEN› k=-cnt(smd)› ELSE› k=-10› FI› ELSEIF k='ť THEN› k=10› FI› IF smd=0 THEN› IF md#0 THEN› md=0 RETURN(255)› FI› ELSE› cnt(smd)==+k› IF cnt(smd)=255 THEN› cnt(smd)=cmax(smd)› FI› FI› DispMenu()›ELSEIF (k>'0) AND (k<='9) THEN› dvn=k z=sof(1) z(7)=dvn+128›ELSEIF k=' THEN sf==!1›FI›RETURN(y)››PROC DoJoy(BYTE y)›IF (y&1)=0 THEN› gyy=-1›ELSEIF (y&2)=0 THEN› gyy=1›ELSE› gyy=0›FI›IF (y&4)=0 THEN› gxx=-1›ELSEIF (y&8)=0 THEN› gxx=1›ELSE› gxx=0›FI›RETURN››PROC Inf()›gsc=L1+2›IF md=2 THEN› WriteLB(rx)› gsc==+3› WriteLB(ry)›ELSE› WriteLB(mx LSH 4+xx+rx)› gsc==+3› WriteLB(my LSH 4+yy+ry)›FI›gsc==+1›WriteL(mdn(md))›gsc==+2›WriteL(sof(sf))›IF md=2 THEN› gsc==+1 WriteL("L")› tmp^=1 tmp(1)=xx+49› WriteL(tmp)›FI›RETURN››BYTE FUNC DngLoop()›BYTE k,x,y,t20=20,acc›ClrL2()›DO› crmd=1› PosCur()› DispDng()› Inf()› pp=Sc+rx+ry LSH 3+xx*64› k=Ind_(pp^)› WriteL2(dis(k))› IF k=22 THEN› y=pp^-208+cnt(4) LSH 4› IF cnt(4)=7 THEN› y==+(xx RSH 1)LSH 4› FI› WriteL("#")› WriteLB(y)› WriteL(" Locally#")› WriteLB(pp^-208)› FI› DO› k=(t20 MOD 15)+1› [173 k 10 10 10 10 141 704]› k=keyp&63› IF (keyp#255) AND (k#60) AND (k#39) THEN› EXIT› ELSEIF k#255 THEN› keyp=255› FI› y=Stick0› IF y#15 THEN EXIT FI› acc==+1 IF acc=0 THEN DispDng() FI› UNTIL strig0=0 OD › IF (strig0=0) OR (k=33) THEN› IF icn>22 THEN› pp^=208+icn-22› ELSE› pp^=ToV(icn)› FI› keyp=255› FI› IF keyp#255 THEN› k=GetD(7)› x=KeyCore(k)› IF x=255 THEN ClrL2() gsc=L1+30 WriteL(" ") RETURN(255) FI› IF x<15 THEN y=x FI› IF md#2 THEN ClrL2() gsc=L1+30 WriteL(" ") RETURN(0) FI› IF k='a THEN› xx==-1› IF xx=255 THEN xx=7 FI› ELSEIF k='z THEN› xx==+1› IF xx=8 THEN xx=0 FI› ELSEIF k='p THEN› DPeer()› FI› FI› DoJoy(y)› rx==+gxx ry==+gyy› IF rx=8 THEN rx=0› ELSEIF rx=255 THEN rx=7 FI› IF ry=8 THEN ry=0› ELSEIF ry=255 THEN ry=7 FI› [169 0 141 consol 133 77]›OD››PROC Loop()›BYTE POINTER z›BYTE x,y,acc,k›mx=4 my=4›xx=0 yy=0›rx=5 ry=5›GetBl()›DO› pp=Sc+(yy+ry)*32+xx+rx› IF sic THEN› ShowPer()› FI› crmd=0› PosCur()› Display(xx,yy)› Inf()› acc=0› DO y=Stick0› k=Strig0› acc==+1› IF acc=0 THEN› IF md#2 THEN› Display(xx,yy)› FI› FI› UNTIL ((y#15) OR (keyp#255))OR(k=0) OD› IF (k=0) OR (keyp=33) THEN› keyp=255› IF sic THEN› IF md=1 THEN› EditPe()› FI› ELSE› pp^=icn› FI› FI› IF keyp#255 THEN› k=keyp› IF (k&63)=60 OR (k&63)=39 THEN› keyp=30+128› FI› k=GetD(7)› IF TextMode THEN› IF k=' THEN› TextMode=0 pp=L1+39 pp^=0› ELSE› IF k>96 THEN k==-32 FI› pp^=31+k y=7› FI› ELSE› DO› IF md#0 THEN EXIT FI› IF k='\ THEN› mx==-1› ELSEIF k='^ THEN› mx==+1› ELSEIF k='_ THEN› my==-1› ELSEIF k='| THEN› my==+1› ELSE› EXIT› FI› IF mx=255 THEN mx=15› ELSEIF mx=16 THEN mx=0› ELSEIF my=255 THEN my=15› ELSEIF my=16 THEN my=0 FI› PutBl()› GetBl()› EXIT› OD› x=KeyCore(k)› IF x=255 THEN› [104 104] Loop()› FI› IF x=253 THEN› IF DngLoop()=255 THEN› [104 104] Loop()› FI› FI› IF x<15 THEN› y=x› FI› IF k=' THEN› TextMode=1 pp=L1+39 pp^='Ô-32› ELSEIF (k='t) OR (k='T) THEN› IF (sic#0) AND (Ptyp=2) AND (md=4) THEN› IF k='t THEN› Ttyp==+1› IF Ttyp=3 THEN Ttyp=0 FI› ELSE› Ttyp==-1› IF Ttyp=255 THEN Ttyp=2 FI› FI› SelPer()› FI› ELSEIF (k='a) OR (k='z) THEN› IF sic THEN› IF k='a THEN› per==+1› IF md=1 THEN› IF per=32 THEN› i=31› DO› IF (Pe(i-1)=0) OR (Pe(i)=0) THEN› EXIT› FI› i==-1› UNTIL i=0 OD› per=i› FI› ELSEIF md=3 THEN› IF (Ptyp=0) AND (per=8) THEN› Ptyp=1 per=0› ELSEIF (Ptyp=1) AND (per=16) THEN› Ptyp=0 per=0› FI› ELSEIF md=4 THEN› IF (Ptyp=0) AND (per=8) THEN› Ptyp=1 per=0› ELSEIF (Ptyp=1) AND (per=16) THEN› Ptyp=2 per=0› ELSEIF (Ptyp=2) AND (per=4) THEN› Ptyp=0 per=0› FI› FI› ELSE› per==-1› IF md=1 THEN› IF per=255 THEN› per=31› ELSEIF Pe(per+1)=0 THEN› per=31› FI› ELSEIF per=255 THEN› IF md=3 THEN Ptyp==!1› IF Ptyp THEN› per=15› ELSE› per=7› FI› ELSEIF md=4 THEN› IF Ptyp=0 THEN› Ptyp=2 per=3› ELSEIF Ptyp=1 THEN› Ptyp=0 per=7› ELSEIF Ptyp=2 THEN› Ptyp=1 per=15› FI› FI› FI› FI› IF md#3 THEN› HidePe() ShowPe()› FI› SelPer()› FI› ELSEIF k='r THEN› s_dir==+1 IF s_dir=4 THEN s_dir=0 FI› IF (md=4) AND (Ptyp=0) THEN› SelPer()› FI› ELSEIF k='v THEN› Vis==!1› pp=L1+38 pp^=('Ö-32)*Vis› ELSEIF k='s THEN› IF (md=1) OR (md=3) OR (md=4) THEN› gsc=scadr+6435› sic==!1› IF sic THEN› Write("n ")› IF md=1 THEN› Per=31› ShowPe()› SelPer()› ELSEIF md=3 THEN› Per=0 Ptyp=0› SelPer()› ELSEIF md=4 THEN› Per=0 Ptyp=0› i=64 s_dir=0› DO› IF (Pe(i)#0) OR (Pe(i+8)#0) THEN› EXIT› FI› i==+16 s_dir==+1› UNTIL s_dir=3 OD› ShowPe()› SelPer()› FI› ELSE› Write("ff")› ClrL2()› IF md#3 THEN› HidePe()› FI› FI› FI› ELSEIF k='p THEN› Peer()› FI› FI› FI› IF y#15 THEN› DoJoy(y)› IF md=0 THEN› xx==+gxx yy==+gyy› IF xx=32-10 THEN› xx=16-10 mx==+1› IF mx=16 THEN› mx=0› FI› PutBl()› GetBl()› ELSEIF xx=255 THEN› xx=15 mx==-1› IF mx=255 THEN› mx=15› FI› PutBl()› GetBl()› FI› IF yy=32-10 THEN› yy=16-10 my==+1› IF my=16 THEN› my=0› FI› PutBl()› GetBl()› ELSEIF yy=255 THEN› yy=15 my==-1› IF my=255 THEN› my=15› FI› PutBl()› GetBl()› FI› ELSEIF md=1 THEN› IF rx#5 THEN› rx==+gxx› IF rx=11 THEN rx=10› ELSEIF rx=255 THEN rx=0 FI› ELSE› xx==+gxx› IF xx=255 THEN xx=0 rx==-1› ELSEIF xx=32-10 THEN xx=32-11 rx==+1 FI› FI› IF ry#5 THEN› ry==+gyy› IF ry=11 THEN› ry=10› ELSEIF ry=255 THEN› ry=0› FI› ELSE› yy==+gyy› IF yy=255 THEN› yy=0 ry==-1› ELSEIF yy=32-10 THEN› yy=32-11 ry==+1› FI › FI› ELSEIF md=2 THEN› ELSEIF (md=3) OR (md=4) THEN› rx==+gxx ry==+gyy› IF rx=255 THEN rx=10› ELSEIF rx=11 THEN rx=0 FI› IF ry=255 THEN ry=10› ELSEIF ry=11 THEN ry=0 FI› FI› FI› [169 0 141 consol 133 77]›OD›RETURN››PROC Main()›Init()›Loop()›RETURN››