home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / utility / vdifx110.lzh / INTERNA.TXT < prev    next >
Text File  |  1990-02-20  |  3KB  |  80 lines

  1.    Beschreibung des VDI-Fehlers, der durch VDI-FIX behoben wird
  2. ########################################################################
  3.  
  4. Die VDI_Workstations werden intern als verkettete, sortierte Liste
  5. verwaltet. Der Fehler tritt auf, wenn Lücken in der Liste entstehen,
  6. jeder neue VDI-Block wird dann fasch einsortiert und es wird immer
  7. dasselbe VDI-Handle vergeben.
  8.  
  9. Bei Einhängen wird folgendermaßen vorgegangen. Block 1 wird auf Handle
  10. 1, Block 2 auf Handle 2 usw. getestet. Wenn kein Block fehlt, wird ein
  11. Block angehängt, wenn einer fehlt, so wird dieser neu vergeben.
  12. Und genau da lauert der Fehler ! Der neue Block wird hinter den 
  13. gefundenen Block gehangen, so daß beim nächsten Öffnen einer WK wieder
  14. derselbe Handle als fehlend festgestellt wird usw..
  15.  
  16. Am Besten ein Beispiel :
  17.  
  18.    Vorgang            Reihenfolge der Blöcke
  19.   -------------------------------------------------------
  20.    Existieren die WKs 1,2,3,4    1,2,3,4
  21.    Nun schließt WK 3        1,2,4
  22.    Prg A öffnet eine WK und
  23.      erhält die 3,die ist aber
  24.      falsch eingehängt        1,2,4,3
  25.    Prg B öffnet auch eine WK
  26.      und erhält wieder die 3    1,2,4,3,3
  27.  
  28. Prg A und Prg B arbeiten als auf derselben Workstation und die Aufrufe
  29. zum setzen der Parameter laufen durcheinander. Setz Prg A GrosseSchrift
  30. und danach Prg B KleineSchrift, so werden auch die Ausgaben von Prg A
  31. in kleiner Schrift geschehen usw...
  32.  
  33. Und dies alles nur, weil der Block dahinter, statt davor gehängt wurde !
  34.  
  35. ########################################################################
  36.  
  37. Hier nun der Code für v_opnvwk aus TOS 1.0 - 06.02.86 - $FCD4D8
  38.                        TOS 1.4 - 06.04.89 - $FCE22A
  39.                        TOS 1.6 - 29.07.89 - $E0E454
  40.                                    TOS 030 - 23.05.89 - $E085BC
  41.     MALLOC($134)
  42.     move.l    D0,A5        ;   new = Malloc($134)
  43.     ...
  44.     Abbruch wenn kein Speicher erhalten
  45.     ...
  46.     move.w    #1,D7        ;   handle = 1
  47.     move.l    BASE,A4        ;   wk     = BASE
  48.     bra    Test        ;   while(handle == wk->handle) {
  49. Loop:    addq    #1,D7        ;     handle++;
  50.     tst.l    64(A4)        ;     if (!wk->next)
  51.     beq    End        ;        break;
  52.     move.l    64(A4),A4    ;     wk = wk->next;     
  53. Test:    cmp.w    40(A4),D7    ;     /* In C eine WHILE-Schleife */
  54.     beq    Loop        ;     }
  55. End:    tst.l    64(A4)        ;   if (!wk->next)
  56.     bne    InsertWK    ;     {
  57.     move.l    A5,D0        ;     wk->next = new;
  58.     move.l    D0,64(A4)    ;
  59.     ...            ;     new->next= 0L;
  60.     clr.l    64(A5)        ;     }
  61.     bra    Continue    ;   else
  62. Insert:    move.l    64(A4),A3    ;     {
  63.     move.l    A5,D0        ;     hilf     = wk->next;
  64.     move.l    D0,64(A4)    ;     wk->next = new;
  65.     ...            ;     new->next= hilf;
  66.     move.l    A3,64(A5)    ;     }
  67. Cont:    ...            ;
  68.         move.w    D7,D0        ;
  69.     ...            ;
  70.     move.w    D0,40(A5)    ;   new->handle = handle;
  71.     ...
  72.  
  73. ########################################################################
  74.  
  75.    Karsten Isakovic
  76.    Wilmersdorferstr.82
  77.    1000 Berlin
  78.  
  79.    Mailbox : Maus Münster, Maus München, Parrot Berlin
  80.