← index
MutatrisHD/mutatris/font_source.cpp
Source: MutatrisHD/mutatris/font_source.cpp
#include"cmx_font.h"
#include<cstdio>
#include<cstdlib>
namespace cmx {

	namespace font {

		int readInt(void *buffer) {
			int temp=0;
			memcpy(&temp, buffer, sizeof(int));
			return temp;
		}

		bool Font::loadFont(const void *buffer, unsigned int size) {

			int *font_buffer = (int*)buffer;
			_Font *fnt = &font_source;

			int temp=0;
			temp=readInt(font_buffer);
			font_buffer++;
			if(temp == -100) {
				int cx = readInt(font_buffer);


				font_buffer++;
				int cy = readInt(font_buffer);
				font_buffer++;
				int tcolor = readInt(font_buffer);
				fnt->tcolor = tcolor;
				font_buffer++;

			if(cx < 0 || cy < 0 || cx > 250 || cy > 250) {
				fprintf(stderr, "Error invalid font file format!\n");
				return false;
			  }
			initFont(cx, cy,tcolor);
			int p=0,i=0,z=0;
			for(p = 0; p <= 127; p++)
			for(i = 0; i < fnt->mx; i++) {
				for(z = 0; z < fnt->my; z++) {
					   temp = readInt(font_buffer);
					   font_buffer++;
					   fnt->letters[p].fnt_ptr[i][z] = temp;
				   }
			  }
			} else {
				fprintf(stderr, "Error font corrupted..\n");
				return false;
			}
			return true;
		}

		bool Font::loadFont(const char *src) {

		 FILE *fptr = fopen(src, "rb");
		 int q = 0,mx = 0,my = 0;
		 int i,z,p;
		 if(!fptr) return false;
		 int mode = 0;
		 _Font *fnt =&this->font_source;
		  mode = 0;
		 fread((char*)&q, sizeof(int), 1, fptr);
		 if(mode == 1)
		 q = littleToBig(q);
		 if(q == -100) {
			  fread((char*)&mx, sizeof(int), 1, fptr);
			  fread((char*)&my, sizeof(int), 1, fptr);
			  fread((char*)&fnt->tcolor, sizeof(int), 1, fptr);
			  if(mode == 1) {
				   mx = littleToBig(mx);
				   my = littleToBig(my);
				   fnt->tcolor = littleToBig(fnt->tcolor);
			  }
			  if(mx < 0 || mx < 0 || mx > 250 || my > 250) {
				   // invalid font file
				fprintf(stderr, "Error invalid font file format!\n");
				 return false;
			  }
			  initFont(mx, my, fnt->tcolor);
			  for(p = 0; p <= 127; p++)
			  for(i = 0; i < fnt->mx; i++) {
				   for(z = 0; z < fnt->my; z++) {
						fread((char*)&fnt->letters[p].fnt_ptr[i][z], sizeof(int), 1, fptr);
						if(mode == 1) fnt->letters[p].fnt_ptr[i][z] = littleToBig(fnt->letters[p].fnt_ptr[i][z]);
				   }
			  }
		 }
		 return true;
		}
	}
}