Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

DOS-Zeichensatz (FNT-Format) in QBasic laden und nutzen.

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
nixsager



Anmeldungsdatum: 16.08.2007
Beiträge: 70

BeitragVerfasst am: 26.04.2011, 12:25    Titel: DOS-Zeichensatz (FNT-Format) in QBasic laden und nutzen. Antworten mit Zitat

Hi

Ich suche einen Code oder eine Beschreibung dafür um eine Schriftart im FNT-Format in einem Basic-Programm zu laden und zu nutzen.

Kann mir jemand helfen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 26.04.2011, 16:47    Titel: Antworten mit Zitat

FNT kann alles sein. Ich hab auch mal ein Schriftformat entwickelt, dessen Dateiendung "FNT" war.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nixsager



Anmeldungsdatum: 16.08.2007
Beiträge: 70

BeitragVerfasst am: 26.04.2011, 16:56    Titel: Antworten mit Zitat

Das ist das Standardformat.

Die Datei hat einen Größe von 4096 Bytes und jede Zeichen besteht aus 16 Bytes.
Aber das ist die VGA-Schriftart.

Aber wenn ich die erstmal nutzen kann, kann ich vermutlich die auch für CGA und EGA nutzen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 26.04.2011, 17:02    Titel: Antworten mit Zitat

Es gibt auch kein "Standardformat". Was du eventuell meinst, ist das Format, das üblicherweise im VGA-RAM liegt
Ich hab's mir nicht angeschaut, aber 16 Bytes sprechen dafür, dass es eine Bitmaske ist... 16 Bytes für 16 Pixelzeilen, jede Pixelzeile als ein Byte codiert... ist Bit 0 gesetzt, ist der linkeste Pixel gesetzt, ist Bit 7 gesetzt, ist der rechteste Pixel gesetzt...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nixsager



Anmeldungsdatum: 16.08.2007
Beiträge: 70

BeitragVerfasst am: 26.04.2011, 17:16    Titel: Antworten mit Zitat

Ja das Format ist sehr einfach gehalten.
Mehr brauchts es auch nicht.

Aber wie gesagt, es ist ein Standardformat das oft genutzt wird.

Hier http://www.kostis.net/freeware/ gibt es ein Programm, das die Schrift aus einer CPI-Datei holt (es ist das dritte von oben).
Die liegen dann mir den Endungen .F08, .F14 und .F16 vor.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 26.04.2011, 17:31    Titel: Antworten mit Zitat

Wenn das Daten ohne Header sind, lies sie halt so wie ich das beschrieben hab aus. Wenn das Format einen Header hat, ist dieses Forum der falsche Anhaltspunkt - wir betreiben hier nicht für dich Reverse-Engineering.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nixsager



Anmeldungsdatum: 16.08.2007
Beiträge: 70

BeitragVerfasst am: 26.04.2011, 17:37    Titel: Antworten mit Zitat

Darum geht es nicht.
Wie kann ich Eine andere Schrift für ein Programm nutzen.

Das Laden der Daten ist ja kein Problemm.
Das Proble ist, wie änder Ich per Code die Schrift die für den Textmodus genutzt wird?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 26.04.2011, 17:59    Titel: Antworten mit Zitat

Dann sag' das doch bitte explizit im ersten Post. Du könntest genau so gut den Grafikmodus gemeint haben, und da ist das Schreiben einer Textanzeige sehr einfach.

Keine Ahnung woher der Code kommt, aber hiermit kannst du einzelne Zeichen (und somit auch den ganzen Zeichensatz ändern). Gibt sicher auch was, um den gesamten Zeichensatz auf einmal zu ändern, aber das weiß ich nicht auswendig und da gibt es genug Material im Internet dazu (VGA-Programmierung...).

Code:
'$INCLUDE: 'qb.bi'
DIM Reg AS RegTypeX
DIM Feld AS STRING * 16

CLS
PRINT "Original ASCII-Zeichen 200: ";
COLOR 14: PRINT STRING$(50, 200)
COLOR 7
PRINT
PRINT "Bitte Taste drcken"
SLEEP
PRINT
PRINT "ASCII-Zeichen 200 nach der Umstellung..."
PRINT
PRINT "Bitte Taste drcken"

'---> Daten fr ein Zeichen auslesen (Jedes Grafikzeichen enth„lt 16 Zeilen)

   DEF SEG = VARSEG(Feld)
   FOR I = 0 TO 15
      READ Wert
      POKE VARPTR(Feld) + I, Wert
   NEXT
   DEF SEG

   Reg.ax = &H1100
   Reg.bx = &H1000
   Reg.cx = 1
   Reg.dx = 200               '---> ASCII - Wert des zu setzenden Zeichens
   Reg.es = VARSEG(Feld)
   Reg.bp = VARPTR(Feld)
   INTERRUPTX &H10, Reg, Reg

SLEEP

'---> Reset des Video-BIOS

 Reg.ax = &H3
 INTERRUPTX &H10, Reg, Reg
 PRINT "nach Reset: "; STRING$(50, 200);

END

'---> Daten fr ein Zeichen mit 16 Zeilen
'---> als Beispiel ein (c) - Zeichen

DATA 0,0,24,36,90,165,161,161,165,90,36,24,0,0,0,0

_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nixsager



Anmeldungsdatum: 16.08.2007
Beiträge: 70

BeitragVerfasst am: 26.04.2011, 18:04    Titel: Antworten mit Zitat

Sorry.
Das ich den Textmodus hätte ich erwähnen sollen.

Ich habe meim googeln leider nichts gefunden.

Werde mal den Code testen, und wenn es mir nichts bring werde ich weiter nerven.

Danke.

Edit:
Sorry der Code funtzt nicht, da er eine Routine aufrufen will die nicht vorhanden ist.
Zum testen habe ich QB4.5 benutzt.

Hättest du vielleicht nocht was anderes oder einen Link wo ich schauen könnte?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 26.04.2011, 18:43    Titel: Antworten mit Zitat

Sonst ein entsprechendes Beispiel aus meiner Sammlung:

http://beilagen.dreael.ch/QB/FONTDEMO.ZIP

Sonst als Lektüre:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/DOS-Interrupts.html
http://www.ctyme.com/intr/rb-0136.htm
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nixsager



Anmeldungsdatum: 16.08.2007
Beiträge: 70

BeitragVerfasst am: 26.04.2011, 19:05    Titel: Antworten mit Zitat

Also mit deinem Programm (EXE-Version) funktioniert es so wie ich es haben möchte.

Aber bei dem Code-Beispiel oben und deinem Code kriege die Meldung das INTERUPTX nicht aufgerufen werden kann.

Muss ich noch was bestimmte einbinden und/oder QB mit einem Schalter starten.

Normal nutze ich VBDOS. Ich vermute mal, das sollte dort auch klappen?

Jetzt belibt mir nur noch, das zusätzlich Problem die FNT-Datei einzulesen (was nicht das Problem ist) und eine Routoine zu schreiben die die einzelnen Zeichen mit den neuen Daten überschreibt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 26.04.2011, 19:15    Titel: Antworten mit Zitat

bei VBDOS heißt die qb.bi vermutlich anders. vbdos.bi vielleicht. da sind die ganze definition für regtypex und interruptx drin.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nixsager



Anmeldungsdatum: 16.08.2007
Beiträge: 70

BeitragVerfasst am: 26.04.2011, 19:21    Titel: Antworten mit Zitat

In der qb.bi heißen die RegType und RegTyp und bei deinem Codebeispiel wird einer genutzt, unter dem Include-Befehl.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 27.04.2011, 00:29    Titel: Antworten mit Zitat

Du musst dazu QB mit dem Parameter /L starten und folgenden Datei inkludieren:

Code:
'***
' QB.BI - Assembly Support Include File
'
'       Copyright <C> 1987 Microsoft Corporation
'
' Purpose:
'      This include file defines the types and gives the DECLARE
'       statements for the assembly language routines ABSOLUTE,
'       INTERRUPT, INTERRUPTX, INT86OLD, and INT86XOLD.
'
'***************************************************************************
'
' Define the type needed for INTERRUPT
'
TYPE RegType
     ax    AS INTEGER
     bx    AS INTEGER
     cx    AS INTEGER
     dx    AS INTEGER
     bp    AS INTEGER
     si    AS INTEGER
     di    AS INTEGER
     flags AS INTEGER
END TYPE
'
' Define the type needed for INTERUPTX
'
TYPE RegTypeX
     ax    AS INTEGER
     bx    AS INTEGER
     cx    AS INTEGER
     dx    AS INTEGER
     bp    AS INTEGER
     si    AS INTEGER
     di    AS INTEGER
     flags AS INTEGER
     ds    AS INTEGER
     es    AS INTEGER
END TYPE
'
'                 DECLARE statements for the 5 routines
'                 -------------------------------------
'
' Generate a software interrupt, loading all but the segment registers
'
DECLARE SUB INTERRUPT (intnum AS INTEGER,inreg AS RegType,outreg AS RegType)
'
' Generate a software interrupt, loading all registers
'
DECLARE SUB INTERRUPTX (intnum AS INTEGER,inreg AS RegTypeX, outreg AS RegTypeX)
'
' Call a routine at an absolute address.
' NOTE: If the routine called takes parameters, then they will have to
'       be added to this declare statement before the parameter given.
'
DECLARE SUB ABSOLUTE (address AS INTEGER)
'
' Generate a software interrupt, loading all but the segment registers
'       (old version)
'
DECLARE SUB INT86OLD (intnum AS INTEGER,_
            inarray(1) AS INTEGER,_
            outarray(1) AS INTEGER)
'
' Gemerate a software interrupt, loading all the registers
'       (old version)
'
DECLARE SUB INT86XOLD (intnum AS INTEGER,_
             inarray(1) AS INTEGER,_
             outarray(1) AS INTEGER)
'

_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz