REFSKRIPT
; überarbeitet von Carsten Lotz, 23.8.1997
; Aufruf: 
; wald.skr kpquelle kopierzahl minx miny maxx maxy kpname [opt.]
; dupliziert Körper eines Dreiecksobjekts und positioniert sie zufällig
; innerhalb der Grenzen von xy.
; wird opt. (beliebig, aber ungleich Null) übergeben, werden die neu 
; erzeugten Körper mit einzelnen Namen im Körpereditor erscheinen.
GET_N_PARAMS
GET_RESULT x

IF_EQUAL_GOTO x 7 param_ok
IF_EQUAL_GOTO x 8 param_ok
  RETURN 0
>param_ok:
GET_PARAM_NR 1
GET_RESULT kp
GET_PARAM_NR 2
GET_RESULT ncopys
GET_PARAM_NR 3
GET_RESULT x1
GET_PARAM_NR 4
GET_RESULT y1
GET_PARAM_NR 5
GET_RESULT x2
GET_PARAM_NR 6
GET_RESULT y2
GET_PARAM_NR 7
GET_RESULT name

SET_VAR einzel 0
IF_NOT_EQUAL_GOTO x 8 w3
  GET_PARAM_NR 8
  GET_RESULT res
  IF_EQUAL_GOTO res 0 w3
   SET_VAR einzel 1

>w3:
SUB x2 x1
GET_RESULT dx
SUB y2 y1
GET_RESULT dy
IF_LESS_GOTO ncopys 1 w4
goto w5
>w4:
   RETURN 0

>w5:
; schauen, ob es kp ALLES ist, dann müssen wird zuerst
; einen neuen Koerper schaffen
 GET_KP_NAME 1
 GET_RESULT kpalles
 IF_STR_NOT_EQUAL_GOTO kp kpalles w2b
 KP_DOPPELN kp kptempurher
 SET_VAR kp kptempurher

>w2b:
COPY_WORD kp 1
GET_RESULT old

GET_NOBJEKTE
GET_RESULT nobj

GET_KP_KOORD kp
GET_RESULT res
COPY_WORD res 3
GET_RESULT kpz

; da keine Wandlung von Real nach Integer möglich, machen
; wir mittels ADD gleich Real daraus...
SET_VAR i 0
ADD i 1
GET_RESULT i
>doloop:
       SET_VAR neu_name tmp
       SET_VAR found 0
       SET_VAR j 1
       KP_EXIST neu_name
       GET_RESULT res
       IF_STR_NOT_EQUAL_GOTO res JA name_ok
>do_while:
	ADD_STR neu_name _ j
	GET_RESULT neu_name
	KP_EXIST neu_name
	GET_RESULT res
	IF_STR_EQUAL_GOTO res NEIN name_ok
	ADD j 1
	GET_RESULT j
	GOTO do_while
>name_ok:

   COPY_WORD neu_name 1
   GET_RESULT new
   KP_DOPPELN kp new
   PRINT Kopie i
    RAND
    GET_RESULT x
    RAND
    GET_RESULT y
    FUNCTION (dx*x)+x1
    GET_RESULT x
    FUNCTION (dy*y)+y1
    GET_RESULT y
    RAND
    GET_RESULT res
    MUL res 360
    GET_RESULT wi
    KP_BEWEGE_NACH new x y kpz
    KP_DREHE new 5 wi
    IF_NOT_EQUAL_GOTO einzel 0 setname
     
    KP_LOESCHEN new
    GOTO weiter1
>setname:
    ADD_STR name _ i               
    GET_RESULT neu_name
    KP_NEUNAME new neu_name
>weiter1:       
    ADD i 1
    GET_RESULT i
	IF_GREATER_GOTO i ncopys loop_fertig
    GOTO doloop
>loop_fertig:


GET_NOBJEKTE
GET_RESULT nobj1

KP_NEU name
SUB nobj1 1
GET_RESULT nobj2
KP_OBJ_VONBIS nobj nobj2
KP_FERTIG

; falls Temporärkörper für "ALLES" erzeugt werden mußte
KP_EXIST kptempurher
GET_RESULT res
IF_STR_EQUAL_GOTO res NEIN ende
KP_LOESCHEN kptempurher

>ende:
RETURN 1
