home *** CD-ROM | disk | FTP | other *** search
- { [GRAPHN80.PAS of JUGPDS Vol.11] }
-
- { Semi-Ggraphic Routines for NEC PC-8001
- by K. Nakazato Nov. 23, 1984 }
-
- procedure cls(g:boolean);
- var addr:integer; i,attr:byte;
- begin
- clrscr; addr:=$F350;
- if g then attr:=$80 else attr:=0;
- for i:=1 to 24 do begin
- mem[addr] :=1; mem[addr+1]:=attr;
- mem[addr+2]:=81; addr:=addr+$78
- end
- end;
-
- procedure dotset(x,y,color:integer);
- var ad:integer; bit:byte;
- begin
- x:=x mod 160; y:= y mod 100;
- ad:=$F300+(y and $fc)*30+x shr 1;
- bit:=1 shl ( y and 3+(x and 1) shl 2);
- if color>0 then mem[ad]:=mem[ad] or bit
- else if color=0 then mem[ad]:=mem[ad] and not bit
- end;
-
- procedure drawline(x1,y1,x2,y2,c:integer);
- var dx,dy,accx,accy,x,y:integer; sdx,sdy:boolean;
- begin
- dx:=abs(x2-x1); dy:=abs(y2-y1);
- if (dx>0) or (dy>0) then
- while (dx and $4000=0) and (dy and $4000=0) do
- begin dx:=dx shl 1; dy:=dy shl 1 end;
- accx:=$4000; accy:=accx;
- sdx:=x2>x1; sdy:=y2>y1;
- x:=x1; y:=y1; dotset(x,y,c);
- while (x<>x2) or (y<>y2) do
- begin
- accx:=accx+dx;
- if accx<0 then
- begin
- if sdx then x:=x+1 else x:=x-1;
- accx:=accx and $7FFF
- end;
- accy:=accy+dy;
- if accy<0 then
- begin
- if sdy then y:=y+1 else y:=y-1;
- accy:=accy and $7FFF
- end;
- dotset(x,y,c)
- end
- end;
-
- { turtle }
-
- var x,y,angle,color:integer;
-
- procedure moveto(x1,y1:integer);
- begin
- if color>=0 then drawline(x+80,49-y,x1+80,49-y1,color);
- x:=x1; y:=y1
- end;
-
- procedure move(dest:integer);
- var angle1:real;
- begin
- angle1:=angle*pi/180.0;
- moveto(x+round(dest*cos(angle1)),y+round(dest*sin(angle1)))
- end;
-
- procedure turnto(i:integer);
- begin
- angle:=i mod 360
- end;
-
- procedure turn(i:integer);
- begin
- turnto(angle+i)
- end;
-
- procedure pascolor(i:integer);
- begin
- color:=i
- end;
-
- procedure initturtle;
- begin
- cls(true); x:=0; y:=0; angle:=0; color:=-1
- end;
-