Quick-Tips

C-Programme auf PC übertragen?

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

Schneller Bildschirmschoner

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

Dialogboxen in MAXON-Pascal

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

Fehlerabzweigung

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


Aus: ST-Computer 06 / 1992, Seite 149

Links

Copyright-Bestimmungen: siehe Über diese Seite