home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / MISC / MN325O16.ZIP / old_docs / karcher.txt < prev    next >
Text File  |  2004-07-10  |  7KB  |  164 lines

  1.  
  2. Ein exaktes Reassembly (Bytegenau) ist leider nicht moeglich, da der
  3. urpruenglich verwendete Compiler (Microsoft C Version vor 7.0) nicht
  4. zur Verfuegung steht :-(
  5.  
  6. ----[ NetMail Folder ]--------------------------------------------------------
  7. On: Sun 19 Dec 1999 16:27    (Rcvd: Sun 19 Dec 1999 21:51)                  #5
  8. By: Michael Karcher                  2:2410/710.9
  9. To: Franz Zimmer                     2:2410/710
  10. Re: f:\FD\SECURE\makenl.arj
  11. St: Pvt File Rcvd
  12. ------------------------------------------------------------------------------
  13. Hallo Franz!
  14.  
  15. Im Attachment befindet sich der Quellcode zu Makenl. An den stellen,
  16. wo ich vom Original abweiche, habe ich mit "BUG FIXED"-Kommentaren
  17. darauf hingewiesen. Die Strings sind einfach uebernommen, daher
  18. heisst es in MERGE.C an einer Stelle "merge cnacled". Es sind viele
  19. kleine Quellcode-Dateien, und wenn man sie in folgender Reihenfolge
  20. linkt:
  21.  
  22. BAUDRATE.C CHECK.C GETKEYW.C FTS5_1.C GETPATH.C FTS5_2.C UPCONT.C
  23. CLEAN.C CONFIG.C COMMENT.C STRCRC.C APPDIFF.C INSTLST.C OPENLST.C
  24. SRCHMAX.C CLEANOLD.C MAKEARC.C MKDIFF.C MAKENL.C VARIABLE.C COPYMOVE.C
  25. ADDRESS.C MSGTOOL.C FTS5_3.C MERGE.C PROCESS.C STACK.C OUTPUT.C
  26.  
  27. Und die Funktionen aus LIB.C und EXECUTE.ASM in eine Bibliothek
  28. packt, dann sollte die gleiche Funktionsreihenfolge wie im Original
  29. in der EXE-Datei auftauchen. Die Quelltexte kompilieren zur Zeit
  30. unter Borland C 3.1 fehlerfei, aber die Anpassung an ein MSC sollte
  31. nur bei findfirst und coreleft (_max_avail bei MS) Aenderungen
  32. erfordern.
  33.  
  34. Viele Gruesse,
  35.   Michael Karcher
  36.  
  37.  
  38. --- FIDOGATE 4.2.3
  39.  
  40. ----[ NetMail Folder ]--------------------------------------------------------
  41. On: Fri 31 Dec 1999  0:33    (Rcvd: Fri 31 Dec 1999  8:05)                  #8
  42. By: Michael Karcher                  2:2410/710.9
  43. To: Franz Zimmer                     2:2410/710
  44. Re: F:\FD\SECURE\newfiles.zip
  45. St: Pvt File Rcvd
  46. ------------------------------------------------------------------------------
  47.  
  48. [...]
  49.  
  50. Deine Testdaten laufen jetzt alle prima durch, und liefern das
  51. gleiche Ergebnis wie MAKENL.
  52.  
  53. Ausserdem habe ich mir mal die modifizierte Version von MAKENL 2.52
  54. angesehen. Sie unterscheidet sich von MAKENL an folgenden Stellen:
  55. 1) Die Funktion getbaud ist totgelegt und liefert immer "1" zurueck
  56. 2) Die Funktion getstring schmeisst keine Zeichen groesser als
  57.    127 mehr raus, die fⁿnf Zeilen 
  58.    while(*(++workptr) != 0)
  59.    {
  60.        if(*workptr < 0)
  61.            *workptr = '?';
  62.    }
  63.    werden totgelegt. Wie dieses Fragment nahe legt, muss MAKENL
  64.    uebrigens mit signed characters uebersetzt werden. Aber in der
  65.    PRJ ist das ja bereits alles eingestellt.
  66. Der Y2K-Fix scheint identisch zu funktionieren.
  67.  
  68. Michael Karcher
  69.  
  70. --- FIDOGATE 4.2.3
  71.  
  72. ----[ NetMail Folder ]--------------------------------------------------------
  73. On: Thu 13 Jan 2000 23:14    (Rcvd: Fri 14 Jan 2000 22:10)                 #33
  74. By: Michael Karcher                  2:2410/710.9
  75. To: Franz Zimmer                     2:2410/710
  76. Re: makenl
  77. St: Pvt Rcvd Replied
  78. ------------------------------------------------------------------------------
  79.  
  80. [...]
  81.  
  82. > mkdiff.c: In function `WriteDiffPart':
  83. > mkdiff.c:418: warning: int format, long int arg (arg 3)
  84. > mkdiff.c:437: warning: int format, long int arg (arg 3)
  85. > mkdiff.c:443: warning: int format, long int arg (arg 3)
  86. Das liegt an den 32-Bit-Pointern von GNU C. Das Original hatte dort
  87. far-Pointer, die bekanntlich nur arrays innerhalb eines Segmentes
  88. darstellen koennen, und Borland C hat diese Differenzen als
  89. ints behandelt.
  90.  
  91. > openlst.c: In function `searchlistfile':
  92. > openlst.c:69: warning: unused variable `extension'
  93. Einfach loeschen
  94.  
  95. Michael Karcher
  96.  
  97. --- FIDOGATE 4.2.3
  98.  
  99. ----[ NetMail Folder ]--------------------------------------------------------
  100. On: Tue 18 Jan 2000 22:55    (Rcvd: Wed 19 Jan 2000 22:01)                 #42
  101. By: Michael Karcher                  2:2410/710.9
  102. To: Franz Zimmer                     2:2410/710
  103. Re: MKNLDATA.ZIP
  104. St: Pvt Rcvd
  105. ------------------------------------------------------------------------------
  106. > Es funktioniert nur dann plausibel, wenn in mkdiff.c die vom gcc gewarnten
  107. > Formate auf %d statt %ld stehen.
  108. > Mit %ld fand ich ein D-Statement mit einem gewaltig
  109. > grossen negativen Zahlenwert dazu.
  110.  
  111. Da steht die Differenz zweier (long*) und nicht zweier long, und im
  112. Modell small ist die Zeigerdifferenz nun mal ein 16-Bit-Int. Es geht
  113. ja wohl um: "(long*)(unsigned)*NowRunner-OldRunner". Dabei zeigt Now-
  114. Runner auf lauter longs. Als erstes wird das auf einen unsigned-int
  115. konvertiert, da die verlust- und Warnungsfrei in einen (long near *)
  116. konvertiert werden koennen. (Achtung! 16-Bit-Zeiger sind hier
  117. *VORRAUSSETZUNG!*). Danach wird das ganze in einen Zeiger konvertiert.
  118. OldRunner ist ebenfalls ein (long*), und die Differenz zweier (long*)
  119. ist ein ptr_diff_t, was je nach Lust und Laune des Compilers ein
  120. char, ein int, ein long, oder sonst irgend ein vorzeichenbehafteter
  121. Ganzzahltyp sein kein. Im Modell small ist das eben ein Int, unter
  122. GNU C ein long.
  123.  
  124. Den differ wuerde ich aber nicht so einfach mir-nix-dir-nix portieren,
  125. denn der hat da so eine unangenehme Eigenschaft:
  126.  
  127. Er puffert Hashwerte von Zeilen. In diesem Puffer steht entweder ein
  128. 31-Bit-Hashwert, und das oberste Bit ist gesetzt, oder dort steht ein
  129. 16-Bit-Zeiger (near) auf das Hash-Array der anderen Datei. Diese 16-
  130. Bit-Zeiger haben im obersten Bit immer 0.
  131. Der Algorithmus sucht nach Verknuepfungen der beiden Dateien, und
  132. prueft anhand des obersten Bits, ob da schon eine Verknuepfung
  133. steht, oder nicht. Wenn man jetzt einen Compiler hat, bei dem
  134. Zeiger auch das oberste Bit gesetzt haben koennen, gibt es maechtig
  135. Aerger.
  136.  
  137. > Die Diff-Files unterscheiden bei identischen Input-Daten sich deutlich
  138. > zwischen dem originalen MakeNl und der hier produzierten Version,
  139. > allerdings nur bei unmittelbar aufeinander folgenden C-Statements
  140. > (warum passiert sowas eigentlich ueberhaupt? z.B. ist C825+C20+C99
  141. > identisch mit C944).
  142. Er betrachtet immer nur Abschnitte der Dateien, da das diffing auf
  143. dem near-heap laeuft, wo gerade mal etwa 30K frei sind. Wie man
  144. an
  145.  
  146. -C112
  147. -C3988
  148. -C2861
  149. +C324
  150. +C4094
  151. +C2543
  152.  
  153. sehen kann, puffert das Original 3988 Zeilen, wogegen meine Version
  154. im Puffer 4094 Zeilen unterbekommt. Wenn am Pufferende eine Verbin-
  155. dung gefunden wurde, wird einfach gesagt: "Die letzten 112 bzw. 324
  156. Zeilen im Puffer waren gleich", dann wird der Inhalt der Listen
  157. bis dorthin vergessen, und die naechste Ladung Zeilen geladen.
  158.  
  159. Der diff-Teil ist sogar (etwas spaerlich) kommentiert.
  160.  
  161. Michael Karcher
  162.  
  163. --- FIDOGATE 4.2.3
  164.