#

Cobukas - Dokumentation zur Portierung

 
 


ProgrammierRegeln für das neue Cobukas
======================================


  1. Auswahlmöglichkeiten stringenter präsentieren
  2. Verwendung von Laufvariablen
  3. Tastenbelegung mit Funktion
  4. AbbruchVariable 'ende'
  5. Farben
  6. Plus- und Minus
  7. Meldungen
  8. Eingabe von Zeichen
  9. Listen schreiben  ->doku: 90_listenSchreiben
  A. Kommentarzeichen


1. Auswahlmöglichkeiten stringenter präsentieren
------------------------------------------------

   Wert ausgesucht/vorgegeben:

    - entweder  = akzeptieren, weil richtig oder nur eine Funktion mögich,

    -  oder    .. Funktion wählen, was mit dem Wert geschehen soll

    -  oder     Fertig -> Zurück / oder / Abbrechen in einer Kette von Eingaben


2. Verwendung von Laufvariablen
-------------------------------


  Ein Laufvariable soll immer bei 1 beginnen:

      FOR lauf := 1  TO  ziel  DO

  Weil Arrays bei 0 beginnen, wird im allgemeinen beim Programmieren die
  Zielvariable immer um 1 vermindert:   name.arr[ziel-1];
  Das ist aber im Denken sehr unpraktisch.

  Deshalb verschenken wir das Feld 0 und beginnen mit dem Belegen des Arrays
  bei 1.

      In Programmen, in denen Plätze getauscht werden müssen, eignet sich das
      Feld 0 als TauschFeld!
  




  Ausnahme: BenutzerUnit 10. Da habe ich das noch nicht geschafft. Dort sind
  auch die Namen der Laufvariablen beim Sortieren noch nicht sprechend.

  
3. Tastenbelegung mit Funktion
------------------------------

  1. Alle Tasten sollen in dem aktuellen Kontext immer nur eine Funktion haben,
     sonst wird das Programmieren zur Spagetti-Qual.
     Beispiel:

       Eingabe Beleg: RETURN schließt immer ein Feld ab und führt zum nächsten.
       Beim Feld "Betrag" diente RETURN auch zum Umschalten zwischen Soll- und
       Haben-Seite des Feldes: Jetzt ist dies .


  2. Alle Funktionen in einem aktuellen Kontext sollen immer nur eine Taste
     haben. Beispiel:

       Zum nächsten Feld kam man mit RETURN und . 
       jetzt nicht mehr.


4. AbbruchVariable 'ende'
------------------------

  Beim Abbruch des Programmes wird die globale Variable "ende := true" gesetzt.
  Beim Auftauchen aus Aufruf, wird abgefragt:
                                               IF ende THEN exit


5. Farben
---------

  4: red     - rot:      Fehler der zum Abbruch führt,
                         wenn ESC:  taste27: ->ESC: 'ende := true; exit;'
  1: blue    - blau:     Sachmeldung
  5: magenta - magenta:  "So geht das nicht"
  2: green   - grün:     Auswahlzeile


6. Plus- und Minus
------------------
  Für einen Profi-Programmiere wahrscheinlich sowieso selbstverständlich:

    Plus und Minus sind "reserviert" für
      - reine Rechenoperationen
      - als Vorzeichen
      - die Verkettung von Strings

    Herauf-/Herunterzählen erfolgt durch inc() und dec()

    Ansprechen von Elementen einer Kette (zum Beispiel bei Tauschvorgängen)
    durch succ() und pred()


7. Meldungen
------------
  Strenge Folge der Zeilen:

    x := wherex; y := wherey;
    gotoxy(2,iz); clrEol;
    textColor(farbe);
    write();
    taste;
    textColor(black);
    gotoxy(2,iz); clrEol;
    gotoxy(x,y);


8. Eingabe von Zeichen
----------------------

  Für die kontrollierte Eingabe und Auswertung von Zeichen habe ich folgende
  Struktur (ein Beispiel) verwendet:

    REPEAT

      REPEAT
        d:=#0;
        c:=readkey; IF c=#0 THEN d:=readkey;
      UNTIL (c in [#13, #27, #8, ' '..'~', #161..#255])  OR  (d in [#60, #75, #83]);

      IF (c in [#13, #27])  OR  (d in [#60]) THEN
      BEGIN {...}

        CASE c OF
        END; {case c of}

        CASE d OF
        END; {case d of}

      END {Keine Änderung des Grundes - Verlassen des Feldes}
      ELSE
      BEGIN {Änderung des Grundes}
        REPEAT

          CASE c OF
          END; {case c of}

          CASE d OF
          END; {case d of}

          REPEAT
            d:=#0;
            c:=readkey; IF c=#0 THEN d:=readkey;
          UNTIL (c in [#13, #27, #8, ' '..'~', #161..#255])  OR  (d in [#83]);


          CASE c OF
          END; {case c of}

        UNTIL (c in [#13, #27])
      END; {Änderung des Grundes}
    UNTIL (c in [#13, #27])  OR  (d in [#60, #75]);
 

9. Listen schreiben
-------------------
  ->doku: 90_listenSchreiben

A. Kommentarzeichen
-------------------

Kommentarzeichen {}  geändert in (* *), weil Emacs-pas-Modul kein Matching
bietet.