Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
nixsager
Anmeldungsdatum: 16.08.2007 Beiträge: 70
|
Verfasst am: 26.04.2011, 13:25 Titel: DOS-Zeichensatz (FNT-Format) in QBasic laden und nutzen. |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 26.04.2011, 17:47 Titel: |
|
|
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 |
|
|
nixsager
Anmeldungsdatum: 16.08.2007 Beiträge: 70
|
Verfasst am: 26.04.2011, 17:56 Titel: |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 26.04.2011, 18:02 Titel: |
|
|
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 |
|
|
nixsager
Anmeldungsdatum: 16.08.2007 Beiträge: 70
|
Verfasst am: 26.04.2011, 18:16 Titel: |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 26.04.2011, 18:31 Titel: |
|
|
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 |
|
|
nixsager
Anmeldungsdatum: 16.08.2007 Beiträge: 70
|
Verfasst am: 26.04.2011, 18:37 Titel: |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 26.04.2011, 18:59 Titel: |
|
|
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 |
|
|
nixsager
Anmeldungsdatum: 16.08.2007 Beiträge: 70
|
Verfasst am: 26.04.2011, 19:04 Titel: |
|
|
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 |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
|
nixsager
Anmeldungsdatum: 16.08.2007 Beiträge: 70
|
Verfasst am: 26.04.2011, 20:05 Titel: |
|
|
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 |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 26.04.2011, 20:15 Titel: |
|
|
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 |
|
|
nixsager
Anmeldungsdatum: 16.08.2007 Beiträge: 70
|
Verfasst am: 26.04.2011, 20:21 Titel: |
|
|
In der qb.bi heißen die RegType und RegTyp und bei deinem Codebeispiel wird einer genutzt, unter dem Include-Befehl. |
|
Nach oben |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
Verfasst am: 27.04.2011, 01:29 Titel: |
|
|
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 |
|
|
|