#

Cobukas - Dokumentation zur Portierung

 
 


Zur Einführung
==============


Der Compiler
-----------

  Cobukas wurde in TurboPascal geschrieben und wird jetzt neu geschrieben in

      Freepascal Version 2.0.

  Freepascal ist mit TurboPascal identisch, so dass der bisherige Code im
  Prinzip übernommen werden kann.


  Der Freepascal-Aufruf erfolgte früher mit 'ppc386', jetzt aber nur noch mit:

      fpc -options prog (wenn Kennung .pas oder .pp ist, sonst prog.kng)


Programmaufruf
--------------

  Das Programm kann mit

    cbk00

  im aktuellen Befehlsfenster aufgerufen werden. Zweckmäßigerweise zieht man
  die Konsole dann auf eine Breite von 30 Zeichen.

  Oder man öffnet eine neue Konsole mit

    kcbk00

  Hinter diesem Aufruf verbirgt sich ein Shellscript, dass eine Konsole von
  80x30 Zeichen erzeugt und dann cbk00 startet.


Programm- und Datenstruktur
---------------------------

  Die prinzipiellen Strukturen, sowohl der Daten als auch des Programmaufbaus
  wurden beibehalten. Sie sind funktional bedingt und (daher) auch pädagogisch
  richtig.

  An den Datenstrukturen ist fast nichts geändert worden, so dass die alten
  Dateien weiterverwendet werden können.

  Lediglich das Datumsformat ist umgestellt worden auf das Format, das durch
  die Laufzeitbibliothek von FPC unterstützt wird. Dafür muss aber lediglich
  die Datei cbk3buch.kng mit einem Hilfsprogramm umgesetzt werden. (Ein
  simpler Aufruf.)


Verständlichkeit des Programmes
-------------------------------

  Um die Lesbarkeit (Verständlichkeit) des Programmes zu erhöhen, wurde viel
  getan:

    1. Die Programmiertiefe wurde verringert - Zusammenhang belassen!
    2. Die Dateinamen erzählen die Funktionsgliederung
    3. Die Bezeichner der Daten wurden verständnisstützend gewählt


Die Programmiertiefe
--------------------

  Mit 'Programmiertiefe' bezeichne ich, wie stark die einzelnen
  Verarbeitungsprozesse in immer weiter Unterprozesse zergliedert werden.

  Das Programm wurde für DOS entwickelt und hatte daher mit großer
  Speicherknappheit zu kämpfen, zumal auch die Daten alle komplett im
  Hauptspeicher gehalten werden sollten. Daher wurde vieles in immer weitere
  Unterprozesse ausgelagert, so dass die Aufbaustruktur des Originalprogrammes
  schwierig zu durchschauen ist.

  Um ein klar überschaubares Programm zu erhalten, werden hier die Prozesse
  nur soweit in Unterprozesse zergliedert, bis die eigentliche Arbeit beginnt.
  Diese wird dann soweit wie möglich an Ort und Stelle erledigt, so dass man
  im Sachzusammenhang erkennen kann, was wie erledigt wird.

    Dass bedeutet zum Beispiel, dass eine Sortierroutine an Ort und Stelle die
    spezielle Verarbeitung erledigt und nicht so verallgemeinert wird, dass
    damit unterschiedlichste Sortierungen möglich sind.


Wahl der Dateinamen - Strukturierung der Programmdateien
--------------------------------------------------------

  Die Dateinamen wurden geändert: cbk -nn- -name- -erg-

    cbk - Anfang aller Dateinamen

    nn  - Erste Ziffer: 0   Allgemeines,

                        1-5 Die HauptfunktionsBlöcke wie Hauptmenü:

                            1. Benutzerwahl
                            2. StammdatenVerwaltung
                            3. Buchen (Doppelte Buchführung)
                            4. Auswertung
                            5. Hilfsfunktionen


    nn - Zweite Ziffer: 00  Das Programm selbst: cbk00
                        01  Daten und Routinen für alle Units: cbk01alle
                        02  Satzstrukturen der eigentlichen Daten: cbk02satz
                        03  Konfiguration: cbk03conf
                        04  Kontenplan: ckk04plan
                        05  Belegbuch: cbk05buch
                        06  Auswertungen(Aktiv, Passiv, GuV): cbk06ausw:

                        n0  Hauptfunktionsblöcke:
                              cbk10benu
                              cbk20stam
                              cbk30dobf
                              cbk40ausw
                              cbk50hilf

                        n1  Erster (1) Unterfunktionsblock im Hauptfunktionsblock n
                            -erg- sagt welcher:
                              cbk22stamkon - Verwaltung Kontenplan
                              cbk23stamaus - Verwalten  Bilanz+GuV (Aktiv, Passiv, GuV)

                        n9  Hilfsfunktionsblock (Funktionen und Prozesse) für
                              Hauptfunktionsblock n
                            -erg- sagt welcher:
                              cbk09allefup.pas
                              cbk39dobffup.pas


Sprechende Bezeichner von Daten, Prozeduren + Funktionen, Dateien
-----------------------------------------------------------------

  Zu Dateinamen -> siehe oben


  Die Bezeichner der Daten sind dann geändert worden, wenn es darum ging, sie
  konsistent und verständnisstützend zu machen. Hinter den neuen Namen wurden
  die alten als Kommentar 'vormals: ...' eingefügt.

  Alle allgemeinen Bezeichner wie 'text', 'nr', 'name', 'kto', 'saldo', ...
  sind so geändert worden, dass man weiß, welches Objekt sie bezeichnen.

  Objektebezeichner sind im allgemeinen so zusammengesetzt:

    funktionUnterobjektObjekt:  tauschZeileBuch, aktZeileBeleg, ...
  
  Alle Laufvariablen (mit Ausnahme noch in den Sortierroutinen und einer
  Prozedur in cbk01alle) sind sprechend: "i, j, idx - sagen nix"

    Wenn man diese Laufvariablen ändern will, muss man die Datenstruktur
    verstanden haben, denn man bezieht die Bezeichnung des Iterators ja auf
    das, über das iteriert wird. Man lernt dabei also gleich auch die
    Datenstruktur kennen.


  Alle Bezeichner von Prozeduren und Funktionen wurden aus denglisch und
  deutsch übersetzt.

  Prozeduren sind Tätigkeiten. Für die Bezeichner wurde die Befehlform, der
  Infinitiv gewählt: 

    writePlan ->speichernPlan

  Achtung: schreiben = auf den Bildschirm 
           speichern = auf die Platte

  Funktionen sind Fragen. Entsprechend wurden die Bezeichner gewählt:

    alterBeleg (?), ktoImPlan (?) , ...

  Das müsste auch für boolsche Variable gelten:

    Nicht:  'speichernBeleg'  sondern  'fertigBeleg'