10 REM > Circle
   20 REM Test floating point calculations in drawing a circle
   30 :
   40 DIM mem% 15
   50 CLS:PROCcircle(896,640,128,0):END
   60 :
   70 DEFPROCcircle(x%,y%,r%,f%):REM X posn, Y posn, Radius, Filled?
   80 LOCAL step,s,c,xp,yp,xr
   90 s=-0.19442308762          :REM SIN(2*PI/90+50)
  100 c=0.9809177653            :REM COS(2*PI/90+50)
  110 xp=r%:yp=0                :REM Set initial position
  120 MOVEx%+xp,y%+yp           :REM Move to initial point on edge
  130 PRINT"xp*s"SPC8"yp*c"SPC8"xp*s+yp*x"SPC4"Should be:"
  140 FOR segment=1 TO 31       :REM We'll do 31 segments here
  150   xr=xp*c-yp*s              :REM Calculate next point on edge
  160   |mem%=xp*s:PRINT;~!mem%;TAB(9);~mem%?4;SPC1;:a$=STR$~!mem%:b$=STR$~mem%?4
  170   |mem%=yp*c:PRINT;~!mem%;TAB(21);~mem%?4;TAB(24);:c$=STR$~!mem%:d$=STR$~mem%?4
  180   yp=xp*s+yp*c
  190   |mem%=yp  :PRINT;~!mem%;TAB(33);~mem%?4;" ";:e$=STR$~!mem%:f$=STR$~mem%?4
  200   READ A$,B$,C$:PRINT TAB(37);A$;TAB(46);B$;TAB(49);C$;
  210   READ D$,E$,F$:PRINT TAB(58);D$;TAB(61);E$;TAB(70);F$;
  220   IF (A$<>a$) OR (B$<>b$) OR (C$<>c$) OR (E$<>e$) OR (F$<>f$):PRINT" ERROR";
  230   PRINT
  240   xp=xr
  250   IF f%: DRAW x%,y%:PLOT85,x%+xp,y%+yp          :REM Do segment if filled
  260   IFNOTf%:DRAW x%+xp,y%+yp:PLOT 69,x%+xp,y%+yp  :REM ..else draw arc
  270   DRAW x%+xp,y%+yp:PLOT 69,x%+xp,y%+yp
  280 NEXT                                           :REM And again
  290 IF f%  :DRAW x%,y%:PLOT 85,x%+r%,y%+0          :REM Do final segment
  300 IFNOTf%:DRAW x%+r%,y%+0:PLOT 69,x%+r%,y%+0     :REM ..or arc
  310 ENDPROC
  320 :
  330 DATA C716D88B,84,0,0,C716D88B,84
  340 DATA C34A48D9,84,C34A48D9,84,C34A48D9,85
  350 DATA B809B7CB,84,BF90482A,85,8DCA9208,86
  360 DATA A5C314D1,84,8B15E9A0,86,B486AED4,86
  370 DATA 8D28EEAF,84,B114CDB2,86,D45F095E,86
  380 DATA DE5745EE,83,D0519790,86,EC1C804E,86
  390 DATA 99E06348,83,E79B15C5,86,FAD7222E,86
  400 DATA 9F1439CF,82,F60DC3E8,86,FFFF0785,86
  410 DATA 8AAEA4BB,7D,FB1C797D,86,FB61D0CF,86
  420 DATA 1693A706,82,F695CD11,86,ED2C92A1,86
  430 DATA 15DECE4E,83,E8A5F702,86,D5EA1D38,86
  440 DATA 5ABB896A,83,D1D52170,86,B67DB043,86
  450 DATA B9F9D27,84,B30235EC,86,901A4EA2,86
  460 DATA 248D52C6,84,8D5A5B90,86,C86E0DBD,85
  470 DATA 3733579A,84,C49AF174,85,D2028B4E,84
  480 DATA 42DB78FB,84,CE00A27A,84,B25297F0,80
  490 DATA 4713D3A5,84,AEEB7A69,80,3C251BFE,84
  500 DATA 43B32C6C,84,388E02ED,84,3E2097AD,85
  510 DATA 38DA8310,84,3A7FCF87,85,B768887,86
  520 DATA 26F3CFD7,84,8CD3FCB,86,328A33C1,86
  530 DATA EADF837,84,2F220693,86,52CD84A1,86
  540 DATA 61EC4425,83,4EC7BC43,86,6B0544C8,86
  550 DATA 1DDD4D88,83,66892E4F,86,7A44D800,86
  560 DATA 278FF97D,82,757E445C,86,7FF743F4,86
  570 DATA 5003DC97,7E,7B14DBD9,86,7BE4DFB6,86
  580 DATA 8E0E832B,82,77165BBE,86,6E35738B,86
  590 DATA 91D8ADC1,83,69A9C9FA,86,576EB442,86
  600 DATA D7192AB0,83,53524E32,86,386F28DC,86
  610 DATA 8A120F9B,84,34EA3058,86,1265AC71,86
  620 DATA A352932C,84,F9A840E,86,4D8BBE86,85
  630 DATA B6576914,84,499FA455,85,5CE7DF96,84