home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 02 / hyperkey / hyperkey.lst < prev    next >
Encoding:
File List  |  1987-11-11  |  3.9 KB  |  89 lines

  1. (* ------------------------------------------------------------------------- *)
  2. (*                               HYPERKEY.LST                                *)
  3. (*              Operationen fuer die dynamische Listenverwaltung             *)
  4. (* ------------------------------------------------------------------------- *)
  5. (*     fuegt neuen Eintrag in Makro-Liste ein und liefert Erfolgsmeldung:    *)
  6. FUNCTION EntryInserted (VAR ListPtr :ListPtrType) :BOOLEAN;
  7.    CONST Dist = $140;       (* "Sicherheitsabstand" zum Stack in Paragraphen *)
  8.    VAR   NewEntry :ListPtrType;   EnoughHeap :BOOLEAN;
  9. BEGIN
  10.    EnoughHeap := (MaxAvail < 0) OR ((MaxAvail-Dist)*16.0 > SizeOf(EntryType));
  11.    IF EnoughHeap THEN BEGIN
  12.       New (NewEntry);                              (* neuen Eintrag erzeugen *)
  13.       WITH NewEntry^ DO BEGIN
  14.          Last := ListPtr;
  15.          IF ListPtr <> NIL THEN BEGIN
  16.             Next := ListPtr^.Next;   EntryNr := Succ (Last^.EntryNr);
  17.             IF ListPtr^.Next <> NIL THEN  ListPtr^.Next^.Last := NewEntry
  18.             ELSE  ListEnd := NewEntry;
  19.             ListPtr^.Next := NewEntry
  20.          END
  21.          ELSE BEGIN
  22.             ListHead := NewEntry;   ListEnd := NewEntry;
  23.             Next := NIL;            EntryNr := 1;
  24.          END;
  25.          FillChar (Replacement, SizeOf(Replacement), 0);
  26.          Scancode := $FFFF;   Active := TRUE
  27.       END;
  28.       ListPtr := NewEntry
  29.    END;
  30.    EntryInserted := EnoughHeap
  31. END;
  32. (*            Loescht den Eintrag "ListPtr^" aus der Makro-Liste:            *)
  33. PROCEDURE DeleteEntry (VAR ListPtr :ListPtrType);
  34.    VAR DisposePtr :ListPtrType;
  35. BEGIN
  36.    IF ListPtr <> NIL THEN BEGIN
  37.       DisposePtr := ListPtr;                               (* Zeiger sichern *)
  38.       WITH ListPtr^ DO
  39.          IF Last = NIL THEN BEGIN                         (* erster Eintrag? *)
  40.             ListHead := Next;
  41.             IF Next = NIL THEN  ListEnd := NIL          (* einziger Eintrag? *)
  42.             ELSE  Next^.Last := NIL;
  43.             ListPtr := Next
  44.          END
  45.          ELSE BEGIN
  46.             Last^.Next := Next;
  47.             IF Next = NIL THEN BEGIN                     (* letzter Eintrag? *)
  48.                ListEnd := Last;  ListPtr := ListEnd
  49.             END
  50.             ELSE BEGIN
  51.                Next^.Last := Last;  ListPtr := Next
  52.             END
  53.          END;
  54.       Dispose (DisposePtr)
  55.    END
  56. END;
  57. (*      gibt den Listeneintrag "ListPtr^" im HYPERKEY-Arbeitsfenster aus:    *)
  58. PROCEDURE ShowEntry (VAR ListPtr :ListPtrType);
  59.    VAR i,c :INTEGER;
  60. BEGIN
  61.    Cursor (off);   SetColors (Pen, KeyBack);   WriteString (14, 3, Space(5));
  62.    WriteString (31, 3, Space(6));              WriteString (50, 3, Space(9));
  63.    IF ListPtr <> NIL THEN
  64.       WITH ListPtr^ DO BEGIN
  65.          IF ListPtr = ListHead THEN  EntryNr := 1
  66.          ELSE  EntryNr := Succ (Last^.EntryNr);      (* Nummer aktualisieren *)
  67.          WriteString (15, 3, NumStr(EntryNr,3));
  68.          WriteString (32, 3, HexWord(Scancode));
  69.          WriteString (51, 3, Status[Ord(Active)])
  70.       END;
  71.    SetColors (Pen, EditBack);   WriteString (14, 6, Space(45));
  72.    IF ListPtr <> NIL THEN
  73.       WITH ListPtr^ DO
  74.          FOR i := 1 TO 44 DO
  75.             IF Replacement[0] >= i THEN BEGIN
  76.                c := Lo (Replacement[i]);
  77.                IF c < 32 THEN BEGIN                      (* Control-Zeichen? *)
  78.                   SetColors (AltPen, EditBack);
  79.                   WriteString (14+i, 6, Chr(c+64));
  80.                   SetColors (Pen, EditBack);
  81.                END
  82.                ELSE  WriteString (14+i, 6, Chr(c))
  83.             END;
  84.    SetColors (Pen, InfoBack);         WriteString (14, 9, Space( 5));
  85.    WriteString (29, 9, Space( 6));    WriteString (48, 9, Space(11))
  86. END;
  87. (* ------------------------------------------------------------------------- *)
  88. (*                               HYPERKEY.LST                                *)
  89.