REFSKRIPT
;Aufruf:        oval <radius> <breite> <npkte> <name> */


GET_N_PARAMS
GET_RESULT res
IF_EQUAL_GOTO res 4 w1
RETURN 0
>w1:
GET_PARAM_NR 1
GET_RESULT rad
GET_PARAM_NR 2
GET_RESULT breite
GET_PARAM_NR 3
GET_RESULT np
GET_PARAM_NR 4
GET_RESULT name
FUNCTION breite-(rad*2)
GET_RESULT verschieb
IF_LESS_GOTO rad 0.00001 error
IF_LESS_GOTO np 3 error
IF_LESS_GOTO verschieb 0 error
GOTO w2
>error:
RETURN 0
>w2:
; Anzahl punkte durch vier teilbar machen */
MOD np 4
GET_RESULT np1
IF_EQUAL_GOTO np1 0 w2a
  FUNCTION np+4-np1
  GET_RESULT np
  
>w2a:
/* Makro für Polygon-kreis aufrufen */
;param=rad np name
PRINT kreis.skr ( rad np name )
CALL kreis.skr rad np name

GET_RESULT name

POL_EXIST name
GET_RESULT res
IF_STR_EQUAL_GOTO res JA w3
RETURN 0
>w3:
IDIV np 4
GET_RESULT i
GET_POL_PKT_KOORD name i
GET_RESULT res
COPY_WORD res 1
GET_RESULT x
COPY_WORD res 2
GET_RESULT y

SUB rad y
GET_RESULT delta
; Jetzt alle Punkte mit x>0 um verschieb verschieben */
DIV rad np
GET_RESULT r1
DIV r1 100
GET_RESULT r1
SET_VAR i 1
>doloop1:
;DO i=1 to np
   SUB i 1
   GET_RESULT i1
   
   GET_POL_PKT_KOORD name i1
   GET_RESULT res
   COPY_WORD res 1
   GET_RESULT x
   COPY_WORD res 2
   GET_RESULT y
   FUNCTION ABS(x)
   GET_RESULT absx
    
   IF_GREATER_GOTO absx r1 else
   ; punkte auf 0-achse */
    FUNCTION x+(verschieb/2)
    GET_RESULT x
    POL_PKT name i1 x y
	GOTO w3a       
>else:
    IF_LESS_GOTO x 0 w3a
       ADD x verschieb
       GET_RESULT x
	   POL_PKT name i1 x y
	
>w3a:
  ADD i 1
  GET_RESULT i
  PRINT  doloop i
  IF_GREATER_GOTO i np fert1
  GOTO doloop1
>fert1:

FUNCTION (np/4)
GET_RESULT i
FUNCTION np-(np/4)
GET_RESULT j

GET_POL_PKT_KOORD name i
GET_RESULT res
COPY_WORD res 1
GET_RESULT x
COPY_WORD res 2
GET_RESULT y
SUB y delta
GET_RESULT y
POL_PKT name i x y
GET_POL_PKT_KOORD name j
GET_RESULT res
COPY_WORD res 1
GET_RESULT x
COPY_WORD res 2
GET_RESULT y
ADD y delta
GET_RESULT y
POL_PKT name j x y
RETURN name
