home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------------------------- *)
- (* HYPERKEY.PGM *)
- (* Das HYPERKEY-Hauptprogramm *)
- (* ------------------------------------------------------------------------- *)
- (* Aufbau des HYPERKEY-Arbeitsfensters: *)
- PROCEDURE InitScreen;
- BEGIN
- MkWindow (XWin,YWin,XWin+65,YWin+13,2,FrameColor,WindowBack,WindowBack);
- WriteString ( 4,0, ' ' + Version + ' ');
- WinFrame (XWin+13, YWin+2, XWin+19, YWin+ 4, 1, WindowFore, WindowBack);
- WinFrame (XWin+30, YWin+2, XWin+37, YWin+ 4, 1, WindowFore, WindowBack);
- WinFrame (XWin+49, YWin+2, XWin+59, YWin+ 4, 1, WindowFore, WindowBack);
- WinFrame (XWin+13, YWin+5, XWin+59, YWin+ 7, 1, WindowFore, WindowBack);
- WinFrame (XWin+13, YWin+8, XWin+19, YWin+10, 1, WindowFore, WindowBack);
- WinFrame (XWin+28, YWin+8, XWin+35, YWin+10, 1, WindowFore, WindowBack);
- WinFrame (XWin+47, YWin+8, XWin+59, YWin+10, 1, WindowFore, WindowBack);
- Window (1,1,80,25); WriteString ( 5,3, 'Nummer:');
- WriteString (23,3, 'Taste:'); WriteString (41,3, 'Status:');
- WriteString ( 5,6, 'Makro:'); WriteString ( 5,9, 'Cursor:');
- WriteString (22,9, 'Code:'); WriteString (38,9, 'Zeichen:')
- END;
- (* lesen von Makro-Belegungen aus einer Diskettendatei: *)
- PROCEDURE ReadMacroAssignment;
- VAR WorkPtr :ListPtrType; k, ActInt :INTEGER;
- MacroFile :FILE OF INTEGER; MacroFileName :STRING[35];
- NameIsValid, EnoughHeap :BOOLEAN;
- BEGIN
- CursorShape (full);
- REPEAT
- MenuLine ('Datei zum Lesen: '); Read (MacroFileName);
- Assign (MacroFile, MacroFileName); ReSet (MacroFile);
- NameIsValid := (IOResult = 0);
- IF NOT NameIsValid AND (MacroFileName <> '') THEN ErrorMsg (4)
- UNTIL NameIsValid OR (MacroFileName = '');
- IF MacroFileName <> '' THEN BEGIN
- WorkPtr := ListHead; (* vorhandene Liste loeschen: *)
- WHILE WorkPtr <> NIL DO DeleteEntry (WorkPtr);
- EnoughHeap := TRUE;
- WHILE NOT Eof(MacroFile) AND EnoughHeap DO BEGIN
- EnoughHeap := EntryInserted (WorkPtr);
- IF EnoughHeap THEN
- WITH WorkPtr^ DO BEGIN
- Read (MacroFile, EntryNr); Read (MacroFile, ScanCode);
- Read (MacroFile, ActInt); Active := BOOLEAN (ActInt);
- Read (MacroFile, Replacement[0]);
- FOR k:=1 TO Replacement[0] DO Read (MacroFile, Replacement[k])
- END
- ELSE ErrorMsg (1)
- END;
- Close (MacroFile);
- ListEnd := WorkPtr; ListPtr := ListHead
- END;
- MenuLine (MainMenu)
- END;
- (* schreiben von Makro-Belegungen in eine Diskettendatei: *)
- PROCEDURE WriteMacroAssignment;
- VAR WorkPtr :ListPtrType;
- YesNoKey, k, ActInt :INTEGER; FileExists, NameIsValid :BOOLEAN;
- MacroFile :FILE OF INTEGER; MacroFileName :STRING[35];
- BEGIN
- CursorShape (full);
- REPEAT
- MenuLine ('Datei zum Schreiben: '); Read (MacroFileName);
- Assign (MacroFile, MacroFileName);
- IF MacroFileName <> '' THEN BEGIN
- ReSet (MacroFile); FileExists := (IOResult = 0);
- IF FileExists THEN BEGIN
- Close (MacroFile); ErrorMsg (5);
- REPEAT GetKey (YesNoKey);
- UNTIL UpCase(Chr(Lo(YesNoKey))) IN ['J','N'];
- NameIsValid := (UpCase(Chr(Lo(YesNoKey))) = 'J')
- END
- ELSE NameIsValid := TRUE
- END
- UNTIL NameIsValid OR (MacroFileName = '');
- IF MacroFileName <> '' THEN BEGIN
- ReWrite (MacroFile); WorkPtr := ListHead;
- WHILE WorkPtr <> NIL DO
- WITH WorkPtr^ DO BEGIN
- ActInt := INTEGER (Active); Write (MacroFile, EntryNr);
- Write (MacroFile, ScanCode); Write (MacroFile, ActInt);
- FOR k:=0 TO Replacement[0] DO Write (MacroFile, Replacement[k]);
- WorkPtr := Next
- END;
- Close (MacroFile)
- END;
- MenuLine (MainMenu)
- END;
-
- BEGIN (* TSRPgm *)
- InitScreen; MenuLine (MainMenu); Quit := FALSE;
- REPEAT (* aktuellen Eintrag anzeigen: *)
- ShowEntry (ListPtr); GetKey (Key);
- CASE Key OF
- Left: WITH ListPtr^ DO (* Eintrag nach links *)
- IF ListPtr <> NIL THEN
- IF Last <> NIL THEN ListPtr := Last;
- Right: WITH ListPtr^ DO (* Eintrag nach rechts *)
- IF ListPtr <> NIL THEN
- IF Next <> NIL THEN ListPtr := Next;
- Home: ListPtr := ListHead; (* erster Eintrag *)
- End_: ListPtr := ListEnd; (* letzter Eintrag *)
- Delete: IF ListPtr <> NIL THEN BEGIN (* Eintrag loeschen *)
- MenuLine ('Eintrag loeschen (J/N) ? ');
- CursorShape (Line); GetKey (YesNoKey);
- IF UpCase(Chr(Lo((YesNoKey)))) = 'J' THEN
- DeleteEntry (ListPtr);
- MenuLine (MainMenu)
- END;
- ShiftDel: IF ListPtr <> NIL THEN BEGIN (* alle Eintraege loeschen *)
- MenuLine ('Gesamte Liste loeschen (J/N) ? ');
- CursorShape (Line); GetKey (YesNoKey);
- IF UpCase(Chr(Lo((YesNoKey)))) = 'J' THEN
- WHILE ListPtr <> NIL DO DeleteEntry (ListPtr);
- MenuLine (MainMenu)
- END;
- Insert: IF NOT EntryInserted(ListPtr) THEN BEGIN
- ErrorMsg (1); MenuLine (MainMenu)
- END
- ELSE EditEntry (ListPtr); (* ab in's Edit-Menue! *)
- Return: BEGIN
- IF ListPtr = NIL THEN
- IF NOT EntryInserted(ListPtr) THEN BEGIN
- ErrorMsg (1); MenuLine (MainMenu)
- END;
- EditEntry (ListPtr)
- END;
- Up: WITH ListPtr^ DO (* Belegung aktivieren *)
- IF ListPtr <> NIL THEN Active := TRUE;
- Down: WITH ListPtr^ DO (* Belegung desaktivieren *)
- IF ListPtr <> NIL THEN Active := FALSE;
- AltUp,
- AltDown: BEGIN (* alle Belegungen (des)aktivieren *)
- WorkPtr := ListHead;
- WHILE WorkPtr <> NIL DO
- WITH WorkPtr^ DO BEGIN
- Active := (Key = AltUp); WorkPtr := Next
- END
- END;
- PgDn: ReadMacroAssignment; (* neue Belegung einlesen *)
- PgUp: WriteMacroAssignment; (* aktuelle Belegung wegschreiben *)
- Help: MainHelp; (* Anzeige Main-Hilfsbildschirm *)
- Escape: Quit := TRUE (* Verlassen von HYPERKEY *)
- END
- UNTIL Quit;
- CursorShape (Line); RmWindow; (* letzten Bildschirm wiederherstellen *)
- END;
- (* ------------------------------------------------------------------------- *)
- (* HYPERKEY.PGM *)
-