2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen
-
- Beiträge: 50
- Registriert: 29.03.2013 12:25
- Wohnort: Eisenach
2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen
Hallo !
Ich habe ein Problem mit der Linux-Mint-Installation von
PB6. Nachdem es jetzt geglückt ist, die IDE zum Laufen
zu bringen, kommt es zu verschiedenen unverständlichen
Dingen beim Debuggen/Compilieren. In dem einen Fall
habe ich eine "Windows"-tastatur programmiert, die einen
besonderen Symbolfont benutzen soll. Er ist mit
IncludeFile "/home/peter/safo.ttf" am Ende des Programmes
eingefügt. Der Debugger/Compiler findet diesen Font nicht,
obwohl er sich im benannten Verzeichnis befindet. Unter
Windows kann ich das Compilat erstellen. Ein zweiter Fall,
auch nur unter Linux, ist die unvollständige Abarbeitung
von Textdateien, die in jeder Zeile eine Dateiangabe mit
vollständigem Pfad enthalten. Diese Textdatei wird Zeile
für Zeile abgearbeitet, bis EOF(1) erreicht ist. Vereinfacht so:
beg:
If EOF(1)
END
Else
pic$=ReadString(1)
Dateibearbeitung
goto beg (Ihr seid nicht für GOTO)
endif
Es ist ein Kreislauf bis zur letzten Dateizeile,sollte man meinen.
Tatsächlich funktioniert pic$=ReadString(1) bei z.B. 10 Dateien
nur 9 mal, dann hängt sich das Programm auf in einen nicht zu
unterbrechenden Zustand. Wenn man in den Linuxverzeichnissen
nachsieht, fehlt immer die Bearbeitung der letzten Datei(zeile).
Ich habe schon eine Dummyzeile eingefügt, dann hat man zwar
alle Dateien bearbeitet, aber das Aufhängen bleibt ja. Müssen
die Dateien vielleicht eine andere Struktur haben, zum Beispiel
andere Bites als 0D0A?
Ich bin in beiden Fällen ratlos. Ich hatte mir eine einfachere Umsetzung
von Windowsprogrammen in Linux vorgestellt.
Heinz
Ich habe ein Problem mit der Linux-Mint-Installation von
PB6. Nachdem es jetzt geglückt ist, die IDE zum Laufen
zu bringen, kommt es zu verschiedenen unverständlichen
Dingen beim Debuggen/Compilieren. In dem einen Fall
habe ich eine "Windows"-tastatur programmiert, die einen
besonderen Symbolfont benutzen soll. Er ist mit
IncludeFile "/home/peter/safo.ttf" am Ende des Programmes
eingefügt. Der Debugger/Compiler findet diesen Font nicht,
obwohl er sich im benannten Verzeichnis befindet. Unter
Windows kann ich das Compilat erstellen. Ein zweiter Fall,
auch nur unter Linux, ist die unvollständige Abarbeitung
von Textdateien, die in jeder Zeile eine Dateiangabe mit
vollständigem Pfad enthalten. Diese Textdatei wird Zeile
für Zeile abgearbeitet, bis EOF(1) erreicht ist. Vereinfacht so:
beg:
If EOF(1)
END
Else
pic$=ReadString(1)
Dateibearbeitung
goto beg (Ihr seid nicht für GOTO)
endif
Es ist ein Kreislauf bis zur letzten Dateizeile,sollte man meinen.
Tatsächlich funktioniert pic$=ReadString(1) bei z.B. 10 Dateien
nur 9 mal, dann hängt sich das Programm auf in einen nicht zu
unterbrechenden Zustand. Wenn man in den Linuxverzeichnissen
nachsieht, fehlt immer die Bearbeitung der letzten Datei(zeile).
Ich habe schon eine Dummyzeile eingefügt, dann hat man zwar
alle Dateien bearbeitet, aber das Aufhängen bleibt ja. Müssen
die Dateien vielleicht eine andere Struktur haben, zum Beispiel
andere Bites als 0D0A?
Ich bin in beiden Fällen ratlos. Ich hatte mir eine einfachere Umsetzung
von Windowsprogrammen in Linux vorgestellt.
Heinz
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen
Das Font-Problem kann so nicht nachvollziehen. Kannst du bitte einen Beispielcode posten?
Ansonsten werden Fonts unter Linux normalerweise in ~/.fonts gespeichert, wenn sie nur für den einen Nutzer sein sollen. Und dann kannst du den Font-Cache so aktualisieren:
Den Code bitte zukünftig in die Code-Tags packen, damit er besser lesbar ist. Er deutet auch darauf hin, dass du aus einem Uralt-Basic kommst, da du Goto verwendest. Bitte vermeide das so gut wie es geht. Ich habe hier keine Probleme mit dem Lesen von Dateien.
Was aber dennoch wichtig zu wissen ist: Unter Windows werden Zeilenende in der Regel mit #CRLF$ beendet, während es bei Linux und Mac nur #LF$ ist. Ganz früher war es bei Mac noch #CR$, aber das hat sich zu #LF$ geändert.
Was ist denn der Inhalt der zu lesenden Datei?
Ansonsten werden Fonts unter Linux normalerweise in ~/.fonts gespeichert, wenn sie nur für den einen Nutzer sein sollen. Und dann kannst du den Font-Cache so aktualisieren:
Code: Alles auswählen
fc-cache -v ~/.fonts
Was aber dennoch wichtig zu wissen ist: Unter Windows werden Zeilenende in der Regel mit #CRLF$ beendet, während es bei Linux und Mac nur #LF$ ist. Ganz früher war es bei Mac noch #CR$, aber das hat sich zu #LF$ geändert.
Was ist denn der Inhalt der zu lesenden Datei?
-
- Beiträge: 50
- Registriert: 29.03.2013 12:25
- Wohnort: Eisenach
Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen
Hallo !
Der Font safo.ttf soll/muss Bestandteil des Programmes sein, weil seine Symbole auf den Tastaturbuttons stehen sollen also mitcompiliert
werden sollen.In PB6Win sieht das etwa so aus:
Es ist wahr.Ich habe schon verschiedene Basic-sprachen durch.- angefangen in den 80ern als das üblich war-und es wird ja auch immer
wieder implementiert.Ich weiß manchmal nicht, wie es ohne Verdrehung der Programmstruktur ersetzt werden kann.
Der Inhalt der TXT-Dateien sind Pfade von Bildern - jedes Bild eine Zeile.
einmal mit Pfad ,einmal nur Dateinamerumpf
Die Textdatei ensteht z.B. durch:
WriteString(0,file.s+Chr(13)+Chr(10))
Nach deiner Meinung müsste chr(13) oder chr(10) entfallen. Nur mit chr(13) wird die Datei vollständig abgearbeitet - das Programm endet
aber nicht und hakt irgendwie.
Heinz
Der Font safo.ttf soll/muss Bestandteil des Programmes sein, weil seine Symbole auf den Tastaturbuttons stehen sollen also mitcompiliert
werden sollen.In PB6Win sieht das etwa so aus:
Code: Alles auswählen
Import "User32.lib"
AddFontMemResourceEx(pFont,Size,Par,Count)
RemoveFontMemResourceEx(fHandle)
EndImport
Global fHandle.l,Fonts.l,safotxt.s
fHandle = AddFontMemResourceEx(?MyFont,?EndOfMyFont-?MyFont,0,@Fonts)
LoadFont(1,"safoall",14)
LoadFont(2,"Arial",12)
LoadFont(3,"safoall",30)
safotxt=""
Es folgt der gesamte Aufbau der Tastatur
und die Ausgabe der Zeichen in einer Leerzeile
End
DataSection
MyFont:
IncludeBinary "d:\purebasic451\safoall_170821f.ttf" in Linux /home/peter/safoall_170821.ttf
EndOfMyFont:
EndDataSection
wieder implementiert.Ich weiß manchmal nicht, wie es ohne Verdrehung der Programmstruktur ersetzt werden kann.
Der Inhalt der TXT-Dateien sind Pfade von Bildern - jedes Bild eine Zeile.
einmal mit Pfad ,einmal nur Dateinamerumpf
Code: Alles auswählen
/home/peter/Bilder/2013-03-16_AYDL_DSCF1699.MPO
2013-03-16_aydl_dscf1699
WriteString(0,file.s+Chr(13)+Chr(10))
Nach deiner Meinung müsste chr(13) oder chr(10) entfallen. Nur mit chr(13) wird die Datei vollständig abgearbeitet - das Programm endet
aber nicht und hakt irgendwie.
Heinz
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen
Okay, ich verstehe.
Ich habe mit Schriftarten in Purebasic noch nicht so viel gemacht. Aber schau dir vielleicht mal "RegisterFontFile()" in der Hilfe an. Du wirst den Font nicht direkt aus der DataSection registrieren können, sondern musst ihn zuerst lokal speichern. Am besten in ein temporäres Verzeichnis. Dann registrierst du die Schriftart mit dem genannten Befehl und dann kannst du sie mit "LoadFont()" nutzen.
Hier mal meine Idee:
Ich habe mit Schriftarten in Purebasic noch nicht so viel gemacht. Aber schau dir vielleicht mal "RegisterFontFile()" in der Hilfe an. Du wirst den Font nicht direkt aus der DataSection registrieren können, sondern musst ihn zuerst lokal speichern. Am besten in ein temporäres Verzeichnis. Dann registrierst du die Schriftart mit dem genannten Befehl und dann kannst du sie mit "LoadFont()" nutzen.
Hier mal meine Idee:
Code: Alles auswählen
Procedure RegisterFontFromMemory(*address, length.i, name.s)
Protected filePath.s = GetTemporaryDirectory() + name
Protected fileHandle.i, offset.i = 0, written.i
fileHandle = CreateFile(#PB_Any, filePath)
If Not fileHandle
ProcedureReturn #False
EndIf
While offset < length
written = WriteData(fileHandle, *address + offset, length)
If Not written
Break
EndIf
offset + written
Wend
CloseFile(fileHandle)
If written <> length
ProcedureReturn #False
EndIf
ProcedureReturn RegisterFontFile(filePath)
EndProcedure
Debug RegisterFontFromMemory(?MyFont, ?EndOfMyFont - ?MyFont, "safoall")
Debug LoadFont(#PB_Any, "safoall", 14)
DataSection
MyFont:
IncludeBinary "/home/peter/safoall_170821.ttf"
EndOfMyFont:
EndDataSection
Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen
Ausserdem verwendest du in Deinen Code Window-API (Import "User32.lib")
Die gibt es natürlich nicht unter Linux
Die gibt es natürlich nicht unter Linux
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
-
- Beiträge: 50
- Registriert: 29.03.2013 12:25
- Wohnort: Eisenach
Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen
zum Code von Nick: Ich habe name mit "safoall.ttf" oder "/home/peter/safoall.ttf" gleichgesetzt. Die Includezeile meldet immer, daß die Schrift
nicht auffindbar ist. Dadurch kann ich den Code nicht probieren. Muß die Schrift vielleicht bestimmte Merkmale haben, damit sie geladen werden kann. Ich habe sie nämlich selbst erstellt.
Oder muß es eine Type 1-Schrift sein. Wird der Aufruf von User32.lib überhaupt benötigt- gibt es in Linux eine Entsprechung ?
Heinz
nicht auffindbar ist. Dadurch kann ich den Code nicht probieren. Muß die Schrift vielleicht bestimmte Merkmale haben, damit sie geladen werden kann. Ich habe sie nämlich selbst erstellt.
Oder muß es eine Type 1-Schrift sein. Wird der Aufruf von User32.lib überhaupt benötigt- gibt es in Linux eine Entsprechung ?
Heinz
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen
Nein, der User32.lib-Kram ist nur für Windows, da das eine Windows-Library ist. Entschuldige, ich dachte das sei dir bewusst.
Mein Code sollte genau so laufen wie ich ihn gepostet habe. Die Schriftart muss allerdings eine TrueType sein. Das steht so in der Hilfe zu "RegisterFontFile":
Mein Code sollte genau so laufen wie ich ihn gepostet habe. Die Schriftart muss allerdings eine TrueType sein. Das steht so in der Hilfe zu "RegisterFontFile":
Die Fehlermeldung, dass die Schrift nicht auffindbar ist, klingt ja eigentlich recht eindeutig. Bist du sicher, dass der Pfad der richtige ist und die Schriftart direkt in deinem Home-Verzeichnis liegt? Denkt dran, dass unter Linux die Groß- und Kleinschreibung von Dateinamen wichtig ist.Die Datei muss im TrueType-Format vorliegen.
-
- Beiträge: 50
- Registriert: 29.03.2013 12:25
- Wohnort: Eisenach
Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen
Hallo !
Die Sache mit User32.lib ist eine Hilfe des Forums, um das Windowsprogramm zu erstellen. Es ist nicht auf meinem Mist gewachsen - ich hätte das
nicht gewußt. Immerhin enthält User32.lib Befehle, die im Programm Verwendung finden. Werden diese Funktionen in der Linuxversion nicht gebraucht.? Deshalb fragte ich, ob es Linux-vergleichbares giebt.
Der Font ist wirklich in die angegebene Stelle kopiert worden. Gibt es eigentlich den Arialfont in Linux oder muss etwas anderes verwendet werden?
Wenn ich Includebinary weglasse, läuft das Programm, die Safoschrift wird aber durch einen üblichen Schriftfont ersetzt, was so nicht sein soll.
Kann man denn den Safofont dadurch einbinden, daß er als Data in den Speicher geladen wird, und dort aufgerufen werden kann. Ich denke
über Alternativen nach, für die ich aber Hilfe brauchen würde.
Heinz
Die Sache mit User32.lib ist eine Hilfe des Forums, um das Windowsprogramm zu erstellen. Es ist nicht auf meinem Mist gewachsen - ich hätte das
nicht gewußt. Immerhin enthält User32.lib Befehle, die im Programm Verwendung finden.
Code: Alles auswählen
Import "User32.lib"
AddFontMemResourceEx(pFont,Size,Par,Count)
RemoveFontMemResourceEx(fHandle)
EndImport
Der Font ist wirklich in die angegebene Stelle kopiert worden. Gibt es eigentlich den Arialfont in Linux oder muss etwas anderes verwendet werden?
Wenn ich Includebinary weglasse, läuft das Programm, die Safoschrift wird aber durch einen üblichen Schriftfont ersetzt, was so nicht sein soll.
Kann man denn den Safofont dadurch einbinden, daß er als Data in den Speicher geladen wird, und dort aufgerufen werden kann. Ich denke
über Alternativen nach, für die ich aber Hilfe brauchen würde.
Heinz
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen
Nein, diese Funktionen werden in der Linuxversion nicht gebraucht und können da auch gar nicht verwendet werden. Es würde mich auch sehr irritieren, dass dein Programm dann überhaupt kompiliert werden kann.
Bei dem Fehler mit IncludeBinary hab ich keine weiteren Ideen mehr. Aber ich bin mir sicher du machst irgendwas falsch. Ich meine es ist ja eigentlich nicht so schwer den richtigen Pfad anzugeben. Beliebige Dateien in die DataSection einbinden ist kein Hexenwerk. Das geht schon immer in Purebasic ohne Probleme.
Bei dem Fehler mit IncludeBinary hab ich keine weiteren Ideen mehr. Aber ich bin mir sicher du machst irgendwas falsch. Ich meine es ist ja eigentlich nicht so schwer den richtigen Pfad anzugeben. Beliebige Dateien in die DataSection einbinden ist kein Hexenwerk. Das geht schon immer in Purebasic ohne Probleme.
Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen
Siehe dir das Beispiele FontRegister.pb in examples an. Die Daten dann mit IncludeBinary austauschen.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive