   Beschreibung des VDI-Fehlers, der durch VDI-FIX behoben wird
########################################################################

Die VDI_Workstations werden intern als verkettete, sortierte Liste
verwaltet. Der Fehler tritt auf, wenn Lcken in der Liste entstehen,
jeder neue VDI-Block wird dann fasch einsortiert und es wird immer
dasselbe VDI-Handle vergeben.

Bei Einhngen wird folgendermaen vorgegangen. Block 1 wird auf Handle
1, Block 2 auf Handle 2 usw. getestet. Wenn kein Block fehlt, wird ein
Block angehngt, wenn einer fehlt, so wird dieser neu vergeben.
Und genau da lauert der Fehler ! Der neue Block wird hinter den 
gefundenen Block gehangen, so da beim nchsten ffnen einer WK wieder
derselbe Handle als fehlend festgestellt wird usw..

Am Besten ein Beispiel :

   Vorgang			Reihenfolge der Blcke
  -------------------------------------------------------
   Existieren die WKs 1,2,3,4	1,2,3,4
   Nun schliet WK 3		1,2,4
   Prg A ffnet eine WK und
     erhlt die 3,die ist aber
     falsch eingehngt		1,2,4,3
   Prg B ffnet auch eine WK
     und erhlt wieder die 3	1,2,4,3,3

Prg A und Prg B arbeiten als auf derselben Workstation und die Aufrufe
zum setzen der Parameter laufen durcheinander. Setz Prg A GrosseSchrift
und danach Prg B KleineSchrift, so werden auch die Ausgaben von Prg A
in kleiner Schrift geschehen usw...

Und dies alles nur, weil der Block dahinter, statt davor gehngt wurde !

########################################################################

Hier nun der Code fr v_opnvwk aus TOS 1.0 - 06.02.86 - $FCD4D8
			           TOS 1.4 - 06.04.89 - $FCE22A
			           TOS 1.6 - 29.07.89 - $E0E454
                                   TOS 030 - 23.05.89 - $E085BC
	MALLOC($134)
	move.l	D0,A5		;   new = Malloc($134)
	...
	Abbruch wenn kein Speicher erhalten
	...
	move.w	#1,D7		;   handle = 1
	move.l	BASE,A4		;   wk     = BASE
	bra	Test		;   while(handle == wk->handle) {
Loop:	addq	#1,D7		;     handle++;
	tst.l	64(A4)		;     if (!wk->next)
	beq	End		;        break;
	move.l	64(A4),A4	;     wk = wk->next; 	
Test:	cmp.w	40(A4),D7	;	 /* In C eine WHILE-Schleife */
	beq	Loop		;     }
End:	tst.l	64(A4)		;   if (!wk->next)
	bne	InsertWK	;     {
	move.l	A5,D0		;     wk->next = new;
	move.l	D0,64(A4)	;
	...			;     new->next= 0L;
	clr.l	64(A5)		;     }
	bra	Continue	;   else
Insert:	move.l	64(A4),A3	;     {
	move.l	A5,D0		;     hilf     = wk->next;
	move.l	D0,64(A4)	;     wk->next = new;
	...			;     new->next= hilf;
	move.l	A3,64(A5)	;     }
Cont:	...			;
        move.w	D7,D0		;
	...			;
	move.w	D0,40(A5)	;   new->handle = handle;
	...

########################################################################

   Karsten Isakovic
   Wilmersdorferstr.82
   1000 Berlin

   Mailbox : Maus Mnster, Maus Mnchen, Parrot Berlin
