#

Cobukas - Dokumentation zur Portierung

 
 

Dokumentation was zu tun war und getan wurde
============================================
- Portierung von COBUKAS von DOS nach Linux -


COBUKAS wurde mit cbk.exe gestartet:
  cbk.exe sammelte die Lizenz ein, 
  rief cobukas.exe auf und
  gab die Lizenzinformationen an cobukas.exe weiter.

Da keine Lizenzen mehr erforderlich sind, ist
  cbk.pas überflüssig. 


Hinweis: Jede Datei muss von den DOS CarriageReturns befreit werden:
         Das Shellscript tr-d-cr bewirkt dies: 
           tr -d '\015' <$1 >um
           mv um $1

         - Probiere: (DOS)->(UNIX) siehe emacs-Anleitung

Hinweis: Damit beim Emacs Farbe ins Spiel kommt <(load-library "hilit19")>
         muss die Kennung .pas und nicht .PAS lauten. 

Die Portierung beginnt bei
  cobukas.pas  

  1. Da das DPMI (DOS protected Mode Interface) unter Linux keine Rolle spielt,
     werden entfernt alle Aufrufe der Form:
       (*$ IFNDEF dpmi *) modulename (*$ENDIF *)

  2. Nicht benötigt wird das Modul:
       overinit

  3. In der Prozedur mainProc  gelöscht:
       PROCEDURE keineLizenz;       

Der Aufruf des Compilers sollte mit der TurboPascal-KompatiblitätsOption -So erfolgen:

     ppc386 -So name.pas

  Dann werden zum Beispiel die VarProcedure-Probleme erledigt, weil unterschiedliche Deklaration!

<-- In cobukas.pas weiter noch nichts geändert.  Hier wieder aufgreifen!
-----------------

Da die Compilierung von cobukas.pas voraussetzt, dass die Units - zu finden im
Verzeichnis SYSMOD - compiliert sind, werden jetzt erst einmal die Units
compiliert. 

-->  Alle Module werden mit kleinen Buchstaben geschrieben!

Diese setzen aber teilweise auch wieder Units voraus, so dass zunächst
herausgefunden werden muss, welche Units welche Units voraussetzen:
                  
                                    Uses: interface / implementation
     Bibliothek rtl: crt
                     dos
     Cobukas/Work  : cbkconst  <--  - / -
     Cobukas/SYSMOD: cache     <--  - / -

     Cobukas/SYSMOD: sysmod    <--  - / crt, dos, 
                               Änderungen am Modul:
                                    - IFDEF gelöscht, nur V70 stehen gelassen
                                    - readDir auskommentiert wegen MEM & Co.
                      
     Cobukas/SYSMOD: txscreen  <--  cache / crt, dos, sysmod;
                               Änderungen am Modul:
                                    - IFDEF gelöscht, V70 gelöscht, weil
                                      "segB000" angemeckert wurde als nicht definiert.

     Cobukas/SYSMOD: windef    <--  sysmod, txscreen / -

     Cobukas/Work  : cbkvars   <--  sysmod, windef, cbkconst / -

     Cobukas/SYSMOD: conv      <--  sysmod / -

     Cobukas/SYSMOD: dial      <--  sysmod, windef / conv, txscreen, window, user

     Cobukas/SYSMOD: mask      <--  sysmod, windef / window, dial


     Cobukas/SYSMOD: scrsaver  <--  - / crt, sysmod, window
                               Änderungen am Modul:
                                    - Identifier "new" ersetzt durch "nnew", weil "new" reserviert.

     Cobukas/SYSMOD: maskedit  <--  - / sysmod, window, windef, mask, dial

     Cobukas/SYSMOD: user      <--  - / crt, sysmod, conv, window, maskedit, txscreen, dial, scrsaver
                                        
                               Änderungen am Modul:
                                    - herausgelöscht an der Stelle (*xxx ifndef *):
                                      (*$IFNDEF VER70 *) overlay, (*$ENDIF*)
                                    - herausgelöscht an der Stelle (*xxx memInfo *):
                                        komplette PROCEDURE memInfo; ... END

     Cobukas/SYSMOD: window    <--  sysmod, txscreen, windef / dos, crt, conv, mask
                               Änderungen am Modul:
                                    herausgelöscht an der Stelle (*xxx noMask *):
                                    (*$IFDEF noMask*) calledFromMGEN := true; (*$ENDIF*)


     Cobukas/SYSMOD: syswrite, <--  sysmod, txscreen / conv, window, user, dial
                               Änderungen am Modul:
                                    - herausgelöscht an der Stelle (*xxx kopfzeile *):
                                      (*$IFDEF VER60 *)  CONST autoKopfZeile: PROCEDURE = keineAutoKopfZeile; (*$ELSE*)
                                    - Problem:  "VAR autoKopfZeile: PROCEDURE;"
                                                 scheint als Definition nicht zu stimmen, wird später als VOID erkannt.



     Cobukas/SYSMOD:  edit
     

     verwUser, verwPara, verwPlan, verwAusw,
     belegDBF, belegEUR, buchJour, bilanzGV,
     saldList, opList, abschlus, koLeiRec,
     kontroll, muster, imExport, opVerwal,
     hilfProg, mahnung, auswHand, buchHand, planHand;






dann die ersten UNITS: cbkconst.pas compiliert. Kein Problem. 

Dann cbkvars.pas: Das will cbkconst (fertig), windef und sysmod.

Bei sysmod.pas bin ich dann auf das Problem mem, memw, ... gestoßen.

  3. The MEM, MEMW, MEML and PORT variables for memory and port access are not
  available in the system unit. This is due to the operating system. Under DOS,
  the extender unit (GO32.PPU) implements the mem constuct. under LINUX, the
  ports unit implements such a construct.

  (file:/usr/share/doc/packages/fpk/user/ ->1 Things that will not work ) 

Diese kommen (nur) in zwei Units vor, nämlich

      ->KEYBOARD.PAS und

      ->SYSMOD.PAS 

Das Handbuch zu FreePascal (SuSE-Linux 8.0) sagt, das man dies
durch ports ersetzen soll, rät aber auch davon ab, weil dies Root-
Berechtigung voraussetzt.

Informationen zu ports findet Ihr in

     file:/usr/share/doc/packages/fpk/units/node13.html
und
     file:/usr/share/doc/packages/fpk/units/node19.html


--------------------------------------------------------------------------------

Keyboard.pas wird letztlich nicht benötigt: 
------------
->serialKb.pas Uses keyBoard
  ------------
  ->test.pas Uses serialKb
    --------
    test.pas wird aber nirgends benötigt  

In der Unit KEYBOARD ist nur eine Zeile betroffen:  memW [kbdSeg:tail] := sc;
--------------------------------------------------------------------------------

In SYSMOD ist nur eine Prozedur betroffen, nämlich

    PROCEDURE readDir (pattern : string80; attr : byte; VAR de : tDirEintrag);

readDir wird nur benötigt in

  ->verwuser.pas und zwar in
    ------------
    ->PROCEDURE deleteUser und
    ->PROCEDURE getBenVerz

--------------------------------------------------------------------------------
Strategie 1:

  Die Prozeduren einfach auskommentieren und zu compilieren versuchen