Erst mit TURBO C und später mit PURE C habe ich verschiedene Programme verwirklicht. Die Quelltexte wurden hernach ohne Verwendung von AES und VDI an einen PC übergeben und mit TURBO C++ kompiliert. Meistens waren keine Änderungen im Quelltext nötig.
Eine erste Schwierigkeit tauchte allerdings auf, als ich Arrays mit Längen von mehr als 64 KBytes einführte. Versuche mit Far-Pointers auf dem PC (CPU: Intel 386) zu arbeiten, misslangen. Wahrscheinlich wollte Borland auch PCs mit einem 286er Prozessor berücksichtigen, was nicht so ganz gelungen scheint.
Auch bezüglich des EoF (End of File) verhalten sich die übersetzten Programme auf ATARI und PC nicht gleich. ATARI berücksichtigt die Dateilänge in Bytes, während TURBO C++ den EoF-Charakter „0x1a“ abprüft, auch beim Lesen von binär geschriebenen Dateien. Solche Files können mit fread und der Prüfung auf EoF nicht vollständig gelesen werden, wenn irgend ein anderes Byte den EoF-Wert annimmt.
Die MS-DOSen-Welt kennt z.B. die VT52-Emulation nicht. TURBO C++ bietet nun als Ersatz verschiedene Prozeduren an, die PURE C wiederum nicht kennt - Beispiel: „goto xy(int row, int col)“ zur Positionierung des Cursors. Um nun leichter übertragbare Programme zu erzeugen, könnte man auf dem ATARI folgende Zeile einfügen:
#define gotoxy(x,y) printf("\x1bY% c%c", y+32,x+32);
Diese Zeile muß dann auf dem PC gelöscht werden. Schließlich ist noch zu bemerken, daß hie und da auch bei den „#include <xxx.h>“ gelegentlich kleine Korrekturen nötig sind.
W. Fässler, CH-8052 Zürich
Wer längere Zeit programmiert, kennt das Problem: Essen, Besuch, Telefon usw. Also macht man kurz ein Backup, seines dadurch nie endenden Projekts, und geht der Störung nach. Leider dauert es meistens etwas länger. In Vergessenheit gerät auch, daß sich das Bild in den Bildschirm brennt und deshalb bedingungslos die Lebensdauer eines Monitors kürzt. Das kann man beseitigen, in dem man ein kurzes Programm schreibt, welches die 256 000 Pixel eines Monochrombildschirms ungefähr alle zwei Sekunden umgekehrt und man gewöhnt sich an, dieses Programm stets zu laden. Die Besitzer von Monochrom-Bildschirmen können sich eines Bildschirmschoners bedienen, der das Graustufenmuster aus dem Desk-Top benutzt. Ein Invertier-Befehl setzt die weißen Pixel auf Schwarz, und umgekehrt, dadurch verändert sich das Bild unmerklich. Diejenigen, die mit Farbmonitor programmieren (die armen Augen!) werden sicherlich keine Probleme mit ihrer Programm- Lösung in derentsprechenden Auflösungen haben.
M. Brust + Ch. Roth,
' *************************************
' * "Schneller" Bildschirmschoner in *
' * in GFA-BASIC, am 11.11.1991 von *
' * Matthias Brust und Christian Roth *
' *************************************
'
s ! In [s]choner Springen
'
' -------------
' Programm-Code
' -------------
'
PROCEDURE s
DEFFILL ,2,4 ! Graustufe einschalten
PBOX 0,0,639,399 ! ...und auf Bildschirm
REPEAT
SETCOLOR 0,0 ! Bildschirm invertieren
PAUSE 100 ! ...und 2 sec. warten
SETCOLOR 0,7 ! Bildschirm normal
PAUSE 100 ! ...und 2 sec. warten
UNTIL INKEY$=" " ! ...bis Leertaste gedr.
END
RETURN
Wer in MAXON-Pascal Dialogboxen programmieren will und glaubt, dies mit der Unit GEM-Interface tun zu können, wird eine kleine Überraschung mit editierbaren Textfeldern erleben können. MAXON hat nämlich den hierfür notwendigen Typ „tedinfo“ einfach ausgespart. Dem ist aber schnell geholfen, wenn in der Typendeklaration der Unit folgende Anweisung hinzugefügt wird:
ted_info=record
te_ptext, te_ptmplt, te_pvalid : pointer;
te_font, te_junkl, te_just, te_color,
te_junk2, te_thickness, te_txtlen, te_tmplen : integer;
end;
außerdem muß „Spec_Info“ geändert werden:
Spec_info = RECORD
CASE Ob_Type OF
G_Box,
G_IBox,
G_BoxChar (thick : integer;
color : integer);
G_Text,
G_BoxText,
G_Image,
G_UserDef,
G_Button,
G_Icon,
G_String,
G_Title : (str : String_Ptr);
G_FText, {hier ist's verändert!}
G_FBoxText:(tedinfo:^ted_info )
END;
Abgefragt werden die editierbaren Textfelder dann wie in C:
VAR Eingabe : STRING;
...
Eingabe:=#00;
Tree[^FELD].ob_spec.tedinfo^.te_txtlen:=such_was_aus; TreeA[FELD].ob_spec.tedinfo^.te_ptext:=ADDR(Eingabe[1]);
form_do(...)
...
Bevor man ihn benutzen kann, muß man dann allerdings noch „zu Fuß“ die Länge des Eingabestrings feststellen und in Element [0] speichern.
M. Bierschenk, W-4780 Lippstadt
Wenn man größere Programme schreibt, kommt es selbstverständlich vor, daß sich kleine, aber verhängnisvolle Fehler einschleichen. Vor allem ist das tragisch, wenn das BASIC schon zu einem ablauffähigen Programm übersetztwurde und deswegen nicht mehr zu ändern ist. Tritt dann ein Fehler auf, stürzt das Programm entweder ab, oder es kommt eine Fehlermeldung und man findet sich plötzlich auf dem Desktop wieder. Es wäre doch besser, wenn eine Routine eingebaut wäre, bei der man zwischen Wiederholung, Fortsetzung oder Programmstop wählen kann. Genau das macht das beigefügte Programm. Es verzweigt im Fehlerfall in eine Prozedur mit den entsprechenden Wählknöpfen. A. Hitschke, W-2990 Papenburg
'
' Listing zur Fehlerbehandlung
'
' von Andre Hitzschke
'
' ab GfA-BASIC V: 1.0
'
'
ON ERROR GOSUB errproc
'
' Hier kann das Hauptprogramm stehen
'
PROCEDURE errproc
ON ERROR GOSUB errproc
ALERT 1, "|"+MID$(ERR$(ERR),4,INSTR(ERR$(ERR), "]",4)-3+"
",1,"Nochmal|Weiter|Abbruch",alert
IF alert=1
RESUME
ELSE IF alert=2
RESUME NEXT
ENDIF
EDIT
RETURN