Nach noch einigen Experimenten konnte ich das Konsolen-Projekt zu einem brauchbaren Abschluß bringen: Die Größe wird bei der Initialisierung als Parameter übergeben und die diversen Control-Signale werden brauchbar verarbeitet:
zuerst den Ctrl-Handler definieren ( da gibt's 5 verschiedene signale: 0 = ^C, 1= Ctrl-Break,
3,4 und 5 sind CloseWindow, Logoff und Shutdown)
Code: Alles auswählen
Procedure CtrlHandler(fdwCtrlType.l)
Select fdwCtrlType
Case 0 ; Ctrl-C
Send($03)
Case 1 ; Ctrl-Break
; MessageRequester("VT52", "Ctrl Break detected ?")
Default ; close-event, logoff, shutdown
run = 0 ; stop console
EndSelect
ProcedureReturn(-1) ; cancel ctrl-signal executing
EndProcedure
Der CtrlHandler muß mit einem TRUE verlassen werden, damit die Control-Signale nicht noch weiter ausgewertet werden ( Dann würde Ctrl-C doch noch die Konsole abschießen)
Nun die Initialisierung:
Code: Alles auswählen
Procedure ConsoleInit(xch.l,ych.l)
Define gStdOut.l
Define consoleInfo.CONSOLE_SCREEN_BUFFER_INFO
Define rect.SMALL_RECT
If OpenConsole()
EnableGraphicalConsole(1)
ConsoleTitle("VT52")
xch = range(xch, $20, $80)
ych = range(ych, $10, $50)
gStdOut.l = GetStdHandle_(#STD_OUTPUT_HANDLE)
rect\right = xch - 1
rect\bottom = ych - 1
SetConsoleWindowInfo_(gStdOut, 1, @rect)
SetConsoleScreenBufferSize_(gStdOut, ych<<16 | xch)
SetConsoleWindowInfo_(gStdOut, 1, @rect)
SetConsoleCtrlHandler_(@CtrlHandler(),-1)
Con = 1 ; console is running
Else
MessageRequester("VT52", "Console not availible")
EndIf
EndProcedure
Das öffnet eine Konsole, stellt die Buffergröße und - soweit möglich - das darstellende Fenster auf die gewünschte Größe (der zulässige Wertebereich wird von mir mit der Prozeduer "Range(wert,min,max) begrenzt) eingestellt. Abschließend wird noch der ControlHandler verbogen.
Zum Programm im Ganzen: es ist ein einfaches "Satellitenterminal", welches dem Zielsystem (ursprünglich: 65C02 mit 160KB(!) Ram) über die serielle Schnittstelle einen Massenspeicher zur Verfügung stellt und an sonsten ein irgendwie VT52-kompatibles "farbtaugliches" Terminal darstellt, welches alles, was vom Zielsystem zur Anzeige gebracht werden soll, auch noch mitprotokolliert. (Falls das noch jemand gebrauchen kann, bitte bei mir melden)