summaryrefslogtreecommitdiff
path: root/rhtvision/examples/fonts/genraw.cc
diff options
context:
space:
mode:
Diffstat (limited to 'rhtvision/examples/fonts/genraw.cc')
-rw-r--r--rhtvision/examples/fonts/genraw.cc113
1 files changed, 113 insertions, 0 deletions
diff --git a/rhtvision/examples/fonts/genraw.cc b/rhtvision/examples/fonts/genraw.cc
new file mode 100644
index 0000000..728b052
--- /dev/null
+++ b/rhtvision/examples/fonts/genraw.cc
@@ -0,0 +1,113 @@
+/**[txh]********************************************************************
+
+ Copyright (c) 2002 by Salvador E. Tropea
+ This code is Public Domain and you can use it for any purpose. Note that
+when you link to another libraries, obviously needed, the code can (and
+currently will) be affected by the libraries license.
+ Currently my TV port is GPL so this code becomes GPL, but if you link
+with another Turbo Vision port or the library changes license things are
+different.
+
+ Description:
+ This examples shows how to use sft files for bitmaped fonts.
+ It can be used as a fonts generator and supports over than 40 encodings.
+Current sft files can be used to generate more than 200 fonts (different
+sizes and encodings).
+ For more sft files look in other directories or in the setedit project.
+
+***************************************************************************/
+
+#define Uses_stdlib
+#define Uses_string
+#define Uses_TVCodePage
+#define Uses_TVFontCollection
+#include <tv.h>
+
+// This small test program creates raw fonts from the specified sft file
+// In Linux the generated fonts can be loaded using consolechars -f file
+// Note that some SFT files can contain fonts with more than 8 pixels of
+// width.
+
+void WriteRaw(uchar *data, int w, int h, const char *name)
+{
+ unsigned wSize=(w+7)/8;
+ FILE *f=fopen(name,"wb");
+ if (f)
+ {
+ printf("Writing %s\n",name);
+ fwrite(data,256*h*wSize,1,f);
+ fclose(f);
+ }
+}
+
+void WriteHeader(uchar *data, int w, int h, char *name)
+{
+ FILE *f=fopen(name,"wb");
+ int c,x,y;
+ int wSize=(w+7)/8;
+
+ if (f)
+ {
+ fprintf(f,"// Font %s size %d,%d\n",name,w,h);
+ char *dot=strchr(name,'.');
+ if (dot) *dot='_';
+ fprintf(f,"uchar *FontData_%s[]=\n{\n",name);
+ for (c=0; c<256; c++)
+ {
+ for (y=0; y<h; y++)
+ for (x=0; x<wSize; data++, x++)
+ fprintf(f,"0x%02X,",*data);
+ fprintf(f,"\n");
+ }
+ fprintf(f,"};\n");
+ fclose(f);
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ new TVCodePage(TVCodePage::ISOLatin1Linux,TVCodePage::ISOLatin1Linux,
+ TVCodePage::ISOLatin1Linux);
+
+ if (argc<2 || argc>3)
+ {
+ printf("Usage: %s sft_file [encoding]\nGenerates raw fonts\n",argv[0]);
+ return 2;
+ }
+
+ char *end;
+ int encoding=TVCodePage::ISOLatin1Linux;
+ if (argc==3)
+ encoding=strtol(argv[2],&end,0);
+
+ TVFontCollection *p=new TVFontCollection(argv[1],encoding);
+ if (p->GetError())
+ {
+ printf("Error!\n");
+ return 1;
+ }
+
+ char b[PATH_MAX];
+ int w,h;
+ uchar *data;
+
+ for (w=8; w<11; w++)
+ {
+ for (h=13; h<21; h++)
+ {
+ data=p->GetFont(w,h);
+ // Not all are available, you must check. In fact only a few are
+ // available
+ if (!data) continue;
+ sprintf(b,"raw%03d.%03d",w,h);
+ #if 0
+ WriteRaw(data,w,h,b);
+ #else
+ // Optional version to generated a C++ header
+ WriteHeader(data,w,h,b);
+ #endif
+ DeleteArray(data);
+ }
+ }
+ return 0;
+}