[Gelöst] XLib XListFonts Runtime error 216

Benutzeravatar
Roland Chastain
Beiträge: 156
Registriert: Sa 7. Jul 2012, 21:50
Wohnort: Saargemünd
Kontaktdaten:

[Gelöst] XLib XListFonts Runtime error 216

Beitrag von Roland Chastain »

Hallo!

Ich versuche, die XListFonts-Funktion aus der XLib-Unit zu verwenden. Ich erhalte zur Laufzeit einen Fehler.

Code: Alles auswählen

uses
  XLib;
  
var
  display: PDisplay;
  display_name: pchar;
  font_list: ppchar;
  count: plongint;
  i: integer;
  
begin
  display_name := XDisplayName(nil);
  WriteLn('display_name ', display_name);
  
  display := XOpenDisplay(display_name);
  
  if display = nil then
    WriteLn(ErrOutput, 'Cannot open display')
  else
  begin
    count := nil;
    font_list := XListFonts(display, '*-fixed-*', 50, count); // Runtime error 216
    if Assigned(font_list) and (count^ > 0) then
      for i := 0 to Pred(count^) do
        WriteLn(font_list[i]^);
    
    if Assigned(font_list) then
      XFreeFontNames(font_list);
    
    XCloseDisplay(display);
  end;
end.
Das ursprüngliche Programm (in C) funktioniert einwandfrei.

Code: Alles auswählen

/* 
 * Exemple provenant du site :
 * http://supertos.free.fr/html/linux/dev/xwindow/dev/xlib/index.htm
 */

#include <stdio.h>
#include <X11/Xlib.h>

Display* dpy;
char **fontlist; // Pointeur sur un tableau de pointeurs qui contiendront les noms des fontes
int listcount, i;

int main(void)
{
  dpy   = XOpenDisplay("");

  if (dpy == NULL)
    printf("Connexion impossible au serveur X par défaut\n");
  else
  {
    // Récupération des 50 premiers noms de fonte contenant fixed dans la dénomination
    fontlist = XListFonts(dpy, "*-fixed-*", 50, &listcount);

    if (fontlist != NULL && listcount > 0)
    {
      for (i = 0; i < listcount; i++)
      {
        printf("%s\n", fontlist[i]);
      }
    }
    else
      printf("Problème lors de la récupération des noms\n");

    if (fontlist != NULL)
      XFreeFontNames(fontlist);

    XCloseDisplay(dpy);
  }

  return;
}
:?
Zuletzt geändert von Roland Chastain am Sa 19. Feb 2022, 11:06, insgesamt 1-mal geändert.
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: XLib XListFonts Runtime error 216

Beitrag von theo »

Bist du sicher, dass du auf XLib zurückgreifen musst?
Schau dir doch mal das Beispiel in <lazarus>/examples/fontenum/ an.

Benutzeravatar
Roland Chastain
Beiträge: 156
Registriert: Sa 7. Jul 2012, 21:50
Wohnort: Saargemünd
Kontaktdaten:

Re: XLib XListFonts Runtime error 216

Beitrag von Roland Chastain »

theo hat geschrieben:
Sa 19. Feb 2022, 10:36
Bist du sicher, dass du auf XLib zurückgreifen musst?
Schau dir doch mal das Beispiel in <lazarus>/examples/fontenum/ an.
Ja, aber ich studiere X-Window-Programmierung.
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: XLib XListFonts Runtime error 216

Beitrag von theo »

Count muss wahrsch. ein integer sein, das ist es ja im C Code auch.

Code: Alles auswählen

var
  count: longint;  
...
font_list := XListFonts(display, '*-fixed-*', 50, @count); 
etc.

Benutzeravatar
Roland Chastain
Beiträge: 156
Registriert: Sa 7. Jul 2012, 21:50
Wohnort: Saargemünd
Kontaktdaten:

Re: XLib XListFonts Runtime error 216

Beitrag von Roland Chastain »

theo hat geschrieben:
Sa 19. Feb 2022, 10:50
Count muss wahrsch. ein integer sein.
Danke! Das Programm läuft jetzt.

Code: Alles auswählen

uses
  XLib;
  
var
  display: PDisplay;
  display_name: pchar;
  font_list: ppchar;
  count: longint;
  i: integer;
  
begin
  display_name := XDisplayName(nil);
  WriteLn('display_name ', display_name);
  
  display := XOpenDisplay(display_name);
  
  if display = nil then
    WriteLn(ErrOutput, 'Cannot open display')
  else
  begin
    font_list := XListFonts(display, '*-fixed-*', 50, @count);
    if Assigned(font_list) and (count > 0) then
      for i := 0 to Pred(count) do
        WriteLn(font_list[i]^);
    
    if Assigned(font_list) then
      XFreeFontNames(font_list);
    
    XCloseDisplay(display);
  end;
end.
Aber es muss noch etwas zu reparieren geben. Das zeigt das Programm an:

Code: Alles auswählen

-
-
-
usw.
Das zeigt dasC- Programm an:

Code: Alles auswählen

-jis-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1983-0
-jis-fixed-medium-r-normal--16-150-75-75-c-160-jisx0208.1983-0
-jis-fixed-medium-r-normal--24-170-100-100-c-240-jisx0208.1983-0
usw.
Zuletzt geändert von Roland Chastain am Sa 19. Feb 2022, 11:02, insgesamt 1-mal geändert.
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: XLib XListFonts Runtime error 216

Beitrag von theo »

Code: Alles auswählen

program project1;

uses
  XLib, SysUtils;

var
  display: PDisplay;
  font_list: ppchar;
  count: longint;
  i: integer;

begin
  Display := XOpenDisplay(Pchar(GetEnvironmentVariable('DISPLAY')));
  if display = nil then
    WriteLn(ErrOutput, 'Cannot open display')
  else
  begin
    count := 0;
    font_list := XListFonts(display, '*-fixed-*', MaxInt, @count);
    if Assigned(font_list) and (count > 0) then
      for i := 0 to Pred(count) do
        WriteLn(font_list[i]);

    if Assigned(font_list) then
      XFreeFontNames(font_list);
    XCloseDisplay(display);
  end;
end.     

Benutzeravatar
Roland Chastain
Beiträge: 156
Registriert: Sa 7. Jul 2012, 21:50
Wohnort: Saargemünd
Kontaktdaten:

Re: XLib XListFonts Runtime error 216

Beitrag von Roland Chastain »

Super! Danke.
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: [Gelöst] XLib XListFonts Runtime error 216

Beitrag von theo »

Gut.
Ein Plongint ist nur ein Zeiger und reserviert noch keinen Speicher für den integer, deshalb hat es gekracht.

Benutzeravatar
Roland Chastain
Beiträge: 156
Registriert: Sa 7. Jul 2012, 21:50
Wohnort: Saargemünd
Kontaktdaten:

Re: [Gelöst] XLib XListFonts Runtime error 216

Beitrag von Roland Chastain »

theo hat geschrieben:
Sa 19. Feb 2022, 11:22
Ein Plongint ist nur ein Zeiger und reserviert noch keinen Speicher für den integer, deshalb hat es gekracht.
Ja, ich verstehe nun.
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: XLib XListFonts Runtime error 216

Beitrag von Mathias »

Roland Chastain hat geschrieben:
Sa 19. Feb 2022, 10:47
theo hat geschrieben:
Sa 19. Feb 2022, 10:36
Bist du sicher, dass du auf XLib zurückgreifen musst?
Schau dir doch mal das Beispiel in <lazarus>/examples/fontenum/ an.
Ja, aber ich studiere X-Window-Programmierung.
Anscheinend bin ich nicht der einzig, welcher sich noch für das alte X-Windows System interressiert.
Ich habe hier einige Beispiele zusammengestellt: https://github.com/sechshelme/Lazarus-X11-Examples
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: XLib XListFonts Runtime error 216

Beitrag von m.fuchs »

Mathias hat geschrieben:
Di 7. Feb 2023, 15:38
Anscheinend bin ich nicht der einzig, welcher sich noch für das alte X-Windows System interressiert.
Was meinst du mit dem "alte[n] X-Window System"?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
Roland Chastain
Beiträge: 156
Registriert: Sa 7. Jul 2012, 21:50
Wohnort: Saargemünd
Kontaktdaten:

Re: XLib XListFonts Runtime error 216

Beitrag von Roland Chastain »

Mathias hat geschrieben:
Di 7. Feb 2023, 15:38
Anscheinend bin ich nicht der einzig, welcher sich noch für das alte X-Windows System interressiert.
Ich habe hier einige Beispiele zusammengestellt: https://github.com/sechshelme/Lazarus-X11-Examples
Ja, ich habe es gesehen. Danke!
Petit poisson deviendra grand,
Pourvu que Dieu lui prête vie.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: [Gelöst] XLib XListFonts Runtime error 216

Beitrag von Winni »

Hi!

Das heisst

X Window System

Das erste funktionierende Windows kam 8 Jahre später,
nämlich 1992 mit Version 3.1

Winni

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: [Gelöst] XLib XListFonts Runtime error 216

Beitrag von af0815 »

Winni hat geschrieben:
Di 7. Feb 2023, 17:03
Hi!

Das heisst

X Window System

Das erste funktionierende Windows kam 8 Jahre später,
nämlich 1992 mit Version 3.1

Winni
1987 kam OS/2 als Kooperation von M$ und IBM heraus, mit dem Presentation Manager. Dann hat M$ aufgrund von Spannungen auf WiNT gesetzt, das nach einigen Jahren. Also waren es nur 3 Jahre nach dem X-Server. Wobei der ja auch Vorläufer hatte (halt schwer kostenpflichtig)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: [Gelöst] XLib XListFonts Runtime error 216

Beitrag von Winni »

Hi!

Es war zwar eine Kooperation zwischen IBM und M$, aber OS/2 war offiziell ein IBM-Projekt.

OS/2 lief so halbwegs ab Ende der 80er, während Windows eine Krankeit war.
Ich hab aus Spaß Windows 2.0 installiert und einen Tag getestet. Grusel! Noch nicht mal Icons. Abends hab ichs gelöscht.

Na gut - ich war auch "verwöhnt" durch den Desktop des Atari ST. Und gute Software von Application Systems, Heidelberg. Wie Signum! das erste bidirektionale Textverarbeitungsprogramm zumindest in der westlichen Welt. Aber auch schöne Ballerspiele.

Winni

PS.: Kann jemand der Forums-Software das international übliche
Ctrl i
für italic = kursiv
beibringen??

Antworten