* UM ACT 086›* INC ACT 011›* INCPE ACT 031››PROC ClrL2=*()›Zero(L2,40)›RETURN››;write character to graphics screen›;screen position is unchanged›PROC WriteNA(BYTE POINTER h)›BYTE z,y,w,x›BYTE POINTER p,t›IF h^ THEN› p=gsc› FOR y=1 TO h^ DO› t=h(y) w=t&128 t==&127› IF w THEN w=255 FI› IF t<32 THEN› t==+64› ELSEIF t<96 THEN› t==-32› FI› t==LSH 3+57344› FOR z=0 TO 7 DO› p^=t(z)!w p==+40› OD› p==-319› OD›FI›RETURN››;write and change position›PROC Write(BYTE POINTER h)›WriteNA(h)›gsc==+h^›RETURN››;write and clear rest of line›PROC WriteCl(BYTE ARRAY h)›BYTE j›Write(h)›IF h^>=17 THEN RETURN FI›FOR j=1 TO 17-h^ DO› Write(" ")›OD›RETURN››PROC Conv=*()›;tax and #128 sta $FF txa and #127›;cmp #96 bcs or cmp #32 bcs sub adc #64›;bne or sub:sbc #32 or:ora $FF rts›[170 41 128 133 $FF 138 41 127›201 96 176 10 201 32 176 4 105 64›208 2 233 32 5 $FF 96]››;write a line›PROC WriteL(BYTE POINTER h)›CARD j=$CA,k=$CC›BYTE l=$FF›j=gsc-1 k=h l=h^ gsc==+l›;ldy $FF lda ($CC),y jsr Conv sta ($CA),y›;dey bne rep rts›[164 $FF 177 $CC 32 Conv 145 $CA›136 208 246 96]››CARD FUNC Strr(BYTE v)›BYTE ARRAY h(4)›h^=3›h(1)=v/100+48›v==mod 100›h(2)=v/10+48›v==mod 10›h(3)=v+48›RETURN(h)››PROC WriteB(BYTE v)›CARD q›q=Strr(v)›Write(q)›RETURN››PROC WriteLB(BYTE v)›CARD q›q=Strr(v)›WriteL(q)›RETURN››PROC WriteL2(BYTE POINTER a)›gsc=L2›ClrL2()›WriteL(a)›RETURN››BYTE FUNC AskYN(BYTE POINTER a)›BYTE k›WriteL2(a)›DO› k=GetD(7)› IF (k=') OR (k='n) OR (k='N) THEN› RETURN(0)› ELSEIF (k='y) OR (k='Y) THEN› RETURN(1)› FI›OD››BYTE FUNC PressRet(BYTE POINTER a)›WriteL2("Place ")›WriteL(a)›WriteL(" disk in drive ")›tmp^=1›IF sf THEN› tmp(1)=dvn›ELSE› tmp(1)=49›FI›WriteL(tmp)›WriteL(" & typeÒÅÔÕÒÎ")›DO i=GetD(7) UNTIL (i=155) OR (i=27) OD›IF i=155 THEN› RETURN(1)›FI›RETURN(0)››BYTE FUNC PForm(BYTE u)›IF u<9 THEN› IF u=3 THEN u=4 FI›ELSEIF (u=13) OR (u=14) OR (u=15) THEN› u=11›ELSEIF (u=60) OR (u<23) OR›((u>26) AND (u<48)) OR (u=55) OR (u=56) THEN› u=9›ELSEIF (u<27) OR (u=63) THEN› u=11›ELSEIF (u<58) OR (u=72) OR (u=73) OR (u=127) THEN› u=8›ELSEIF u<60 THEN› u=12›ELSEIF (u=126) or (u=61) THEN› u=13›ELSEIF u<96 THEN› u=10›ELSEIF (u=123) OR (u=125) THEN› u=12›ELSE› u=11›FI›RETURN(u LSH 2)››PROC Peer()›BYTE POINTER p,op,g,gim=›[›8 0 0 0›8 0 2 0›8 2 8 2›0 0 8 0›4 1 4 1›5 4 5 1›5 5 5 5›12 12 3 3›15 15 15 15›0 6 6 0›10 10 10 10›15 0 0 15›15 3 3 15›0 0 0 0›]›BYTE h,s1,s2,xp,yp›IF md>1 THEN RETURN FI›ClDisplay()›[169 0 141 704]›g=Sc›op=scadr+803›FOR yp=0 TO 31 DO› p=op› op==+160› FOR xp=0 TO 15 DO› s1=PForm(g^) g==+1 s2=PForm(g^) g==+1› IF s2=0 THEN s2=12 FI› FOR i=0 TO 3 DO› p(i*40)=(gim(s1+i) LSH 4)%gim(s2+i)› OD› p==+1› OD›OD›p=(rx+xx) RSH 1+(ry+yy)*160+scadr+803›IF ((rx+xx)&1)=1 THEN› s1=15›ELSE› s1=240›FI›DO› FOR i=0 TO 3 DO› p(i*40)==!s1› OD›UNTIL keyp#255 OD›keyp=255›RETURN››