Been testing a new "modified" lib for driving the Nokia 5110 LCD displays.
Totally "re-jigged" the font handling code to allow easy addition of fonts and allow for setting of proportional width. Main aim is for it to be fast, efficient and have good functionality without going overboard.
I created a support program for it in VB.NET that allows custom fonts to be created in seconds which can then be cut and paste from the creation program. I had a look at a few similar programs, some where $89 and the trial crashed and was cumbersome, another was free and great but the export format was useless.
The program also allows single bitmaps to be created which are treated as just a single character and buffer from PROGMEM a bit differently.
I don't have an actual display atm so relying on the Arduino to dump the buffer to the output for me to look at.
Will hopefully get a release out to the community at some stage soon.
sample font so far (< 30 secs to make)
PROGMEM static const prog_uint8_t font1_data[2496] =
{
 0,10, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // ASCII code 32
 1,9, 0,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,0,0,64,0,0,0,0,0, // ASCII code 33
 1,6, 0,0,72,0,72,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // ASCII code 34
 1,4, 0,0,36,0,36,0,126,0,36,0,36,0,36,0,126,0,36,0,36,0,0,0,0,0, // ASCII code 35
 1,5, 0,0,16,0,56,0,84,0,80,0,48,0,24,0,20,0,84,0,56,0,16,0,0,0, // ASCII code 36
 1,3, 0,0,48,0,73,0,50,0,4,0,8,0,16,0,38,0,73,0,6,0,0,0,0,0, // ASCII code 37
 1,5, 0,0,32,0,80,0,80,0,32,0,32,0,84,0,72,0,72,0,52,0,0,0,0,0, // ASCII code 38
 1,9, 0,0,64,0,64,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // ASCII code 39
 1,8, 0,0,32,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,32,0, // ASCII code 40
 1,8, 0,0,64,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,64,0, // ASCII code 41
 1,7, 0,0,80,0,32,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // ASCII code 42
 1,5, 0,0,0,0,0,0,0,0,16,0,16,0,124,0,16,0,16,0,0,0,0,0,0,0, // ASCII code 43
 1,8, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,64,0,0,0, // ASCII code 44
 1,8, 0,0,0,0,0,0,0,0,0,0,0,0,96,0,0,0,0,0,0,0,0,0,0,0, // ASCII code 45
 1,9, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0, // ASCII code 46
 1,6, 0,0,8,0,8,0,8,0,16,0,16,0,32,0,32,0,64,0,64,0,0,0,0,0, // ASCII code 47
 1,5, 0,0,56,0,68,0,68,0,68,0,68,0,68,0,68,0,68,0,56,0,0,0,0,0, // ASCII code 48
 1,7, 0,0,16,0,112,0,16,0,16,0,16,0,16,0,16,0,16,0,16,0,0,0,0,0, // ASCII code 49
 1,5, 0,0,56,0,68,0,4,0,4,0,8,0,16,0,32,0,64,0,124,0,0,0,0,0, // ASCII code 50
 1,5, 0,0,56,0,68,0,4,0,4,0,24,0,4,0,4,0,68,0,56,0,0,0,0,0, // ASCII code 51
 1,5, 0,0,8,0,24,0,24,0,40,0,40,0,72,0,124,0,8,0,8,0,0,0,0,0, // ASCII code 52
 1,5, 0,0,124,0,64,0,64,0,120,0,68,0,4,0,4,0,68,0,56,0,0,0,0,0, // ASCII code 53
 1,5, 0,0,56,0,68,0,64,0,64,0,120,0,68,0,68,0,68,0,56,0,0,0,0,0, // ASCII code 54
 1,5, 0,0,124,0,4,0,8,0,8,0,16,0,16,0,32,0,32,0,32,0,0,0,0,0, // ASCII code 55
 1,5, 0,0,56,0,68,0,68,0,68,0,56,0,68,0,68,0,68,0,56,0,0,0,0,0, // ASCII code 56
 1,5, 0,0,56,0,68,0,68,0,68,0,60,0,4,0,4,0,68,0,56,0,0,0,0,0, // ASCII code 57
 1,9, 0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0, // ASCII code 58
 1,8, 0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,32,0,64,0,0,0, // ASCII code 59
 1,6, 0,0,0,0,0,0,8,0,16,0,32,0,64,0,32,0,16,0,8,0,0,0,0,0, // ASCII code 60
 1,5, 0,0,0,0,0,0,0,0,0,0,124,0,0,0,124,0,0,0,0,0,0,0,0,0, // ASCII code 61
 1,6, 0,0,0,0,0,0,64,0,32,0,16,0,8,0,16,0,32,0,64,0,0,0,0,0, // ASCII code 62
 1,5, 0,0,56,0,68,0,4,0,4,0,8,0,16,0,16,0,0,0,16,0,0,0,0,0, // ASCII code 63
 1,0, 0,0,15,0,48,192,32,64,71,32,73,32,73,32,70,224,32,0,48,0,15,128,0,0, // ASCII code 64
 0,4, 0,0,16,0,16,0,40,0,40,0,68,0,68,0,124,0,130,0,130,0,0,0,0,0, // ASCII code 65
 1,5, 0,0,120,0,68,0,68,0,68,0,120,0,68,0,68,0,68,0,120,0,0,0,0,0, // ASCII code 66
 1,4, 0,0,60,0,66,0,64,0,64,0,64,0,64,0,64,0,66,0,60,0,0,0,0,0, // ASCII code 67
 1,4, 0,0,120,0,68,0,66,0,66,0,66,0,66,0,66,0,68,0,120,0,0,0,0,0, // ASCII code 68
 1,5, 0,0,124,0,64,0,64,0,64,0,120,0,64,0,64,0,64,0,124,0,0,0,0,0, // ASCII code 69
 1,5, 0,0,124,0,64,0,64,0,64,0,120,0,64,0,64,0,64,0,64,0,0,0,0,0, // ASCII code 70
 1,4, 0,0,60,0,66,0,64,0,64,0,78,0,66,0,66,0,70,0,58,0,0,0,0,0, // ASCII code 71
 1,4, 0,0,66,0,66,0,66,0,66,0,126,0,66,0,66,0,66,0,66,0,0,0,0,0, // ASCII code 72
 1,9, 0,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,0,0,0,0, // ASCII code 73
 0,7, 0,0,16,0,16,0,16,0,16,0,16,0,16,0,144,0,144,0,96,0,0,0,0,0, // ASCII code 74
 1,4, 0,0,68,0,72,0,80,0,96,0,96,0,80,0,72,0,68,0,66,0,0,0,0,0, // ASCII code 75
 1,5, 0,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,124,0,0,0,0,0, // ASCII code 76
 1,3, 0,0,65,0,65,0,99,0,99,0,85,0,85,0,73,0,73,0,65,0,0,0,0,0, // ASCII code 77
 1,4, 0,0,66,0,98,0,98,0,82,0,82,0,74,0,70,0,70,0,66,0,0,0,0,0, // ASCII code 78
 1,4, 0,0,60,0,66,0,66,0,66,0,66,0,66,0,66,0,66,0,60,0,0,0,0,0, // ASCII code 79
 1,4, 0,0,124,0,66,0,66,0,66,0,124,0,64,0,64,0,64,0,64,0,0,0,0,0, // ASCII code 80
 1,4, 0,0,60,0,66,0,66,0,66,0,66,0,66,0,74,0,70,0,60,0,2,0,0,0, // ASCII code 81
 1,4, 0,0,124,0,66,0,66,0,66,0,124,0,66,0,66,0,66,0,66,0,0,0,0,0, // ASCII code 82
 1,5, 0,0,56,0,68,0,64,0,64,0,56,0,4,0,4,0,68,0,56,0,0,0,0,0, // ASCII code 83
 1,5, 0,0,124,0,16,0,16,0,16,0,16,0,16,0,16,0,16,0,16,0,0,0,0,0, // ASCII code 84
 1,4, 0,0,66,0,66,0,66,0,66,0,66,0,66,0,66,0,66,0,60,0,0,0,0,0, // ASCII code 85
 0,4, 0,0,130,0,130,0,68,0,68,0,68,0,40,0,40,0,16,0,16,0,0,0,0,0, // ASCII code 86
 0,0, 0,0,128,32,128,32,68,64,68,64,68,64,42,128,42,128,17,0,17,0,0,0,0,0, // ASCII code 87
 0,4, 0,0,130,0,130,0,68,0,40,0,16,0,40,0,68,0,130,0,130,0,0,0,0,0, // ASCII code 88
 0,4, 0,0,130,0,130,0,68,0,40,0,16,0,16,0,16,0,16,0,16,0,0,0,0,0, // ASCII code 89
 0,4, 0,0,254,0,2,0,4,0,8,0,16,0,32,0,64,0,128,0,254,0,0,0,0,0, // ASCII code 90
 1,8, 0,0,96,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,96,0, // ASCII code 91
 1,6, 0,0,64,0,64,0,64,0,32,0,32,0,16,0,16,0,8,0,8,0,0,0,0,0, // ASCII code 92
 1,8, 0,0,96,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,96,0, // ASCII code 93
 1,5, 16,0,40,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // ASCII code 94
 0,5, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,0, // ASCII code 95
 1,8, 0,0,64,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // ASCII code 96
 1,5, 0,0,0,0,0,0,0,0,56,0,4,0,60,0,68,0,68,0,60,0,0,0,0,0, // ASCII code 97
 1,5, 0,0,64,0,64,0,64,0,120,0,68,0,68,0,68,0,68,0,120,0,0,0,0,0, // ASCII code 98
 1,5, 0,0,0,0,0,0,0,0,56,0,68,0,64,0,64,0,68,0,56,0,0,0,0,0, // ASCII code 99
 1,5, 0,0,4,0,4,0,4,0,60,0,68,0,68,0,68,0,68,0,60,0,0,0,0,0, // ASCII code 100
 1,5, 0,0,0,0,0,0,0,0,56,0,68,0,124,0,64,0,68,0,56,0,0,0,0,0, // ASCII code 101
 1,8, 0,0,32,0,64,0,64,0,96,0,64,0,64,0,64,0,64,0,64,0,0,0,0,0, // ASCII code 102
 1,5, 0,0,0,0,0,0,0,0,60,0,68,0,68,0,68,0,68,0,60,0,4,0,120,0, // ASCII code 103
 1,5, 0,0,64,0,64,0,64,0,88,0,100,0,68,0,68,0,68,0,68,0,0,0,0,0, // ASCII code 104
 1,9, 0,0,64,0,0,0,0,0,64,0,64,0,64,0,64,0,64,0,64,0,0,0,0,0, // ASCII code 105
 1,9, 0,0,64,0,0,0,0,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0, // ASCII code 106
 1,5, 0,0,64,0,64,0,64,0,72,0,80,0,96,0,80,0,72,0,68,0,0,0,0,0, // ASCII code 107
 1,9, 0,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,0,0,0,0, // ASCII code 108
 1,3, 0,0,0,0,0,0,0,0,118,0,73,0,73,0,73,0,73,0,73,0,0,0,0,0, // ASCII code 109
 1,5, 0,0,0,0,0,0,0,0,88,0,100,0,68,0,68,0,68,0,68,0,0,0,0,0, // ASCII code 110
 1,5, 0,0,0,0,0,0,0,0,56,0,68,0,68,0,68,0,68,0,56,0,0,0,0,0, // ASCII code 111
 1,5, 0,0,0,0,0,0,0,0,120,0,68,0,68,0,68,0,68,0,120,0,64,0,64,0, // ASCII code 112
 1,5, 0,0,0,0,0,0,0,0,60,0,68,0,68,0,68,0,68,0,60,0,4,0,4,0, // ASCII code 113
 1,8, 0,0,0,0,0,0,0,0,96,0,64,0,64,0,64,0,64,0,64,0,0,0,0,0, // ASCII code 114
 1,6, 0,0,0,0,0,0,0,0,48,0,72,0,32,0,16,0,72,0,48,0,0,0,0,0, // ASCII code 115
 1,8, 0,0,0,0,64,0,64,0,96,0,64,0,64,0,64,0,64,0,32,0,0,0,0,0, // ASCII code 116
 1,5, 0,0,0,0,0,0,0,0,68,0,68,0,68,0,68,0,76,0,52,0,0,0,0,0, // ASCII code 117
 1,5, 0,0,0,0,0,0,0,0,68,0,68,0,40,0,40,0,16,0,16,0,0,0,0,0, // ASCII code 118
 1,3, 0,0,0,0,0,0,0,0,73,0,73,0,85,0,85,0,34,0,34,0,0,0,0,0, // ASCII code 119
 1,6, 0,0,0,0,0,0,0,0,72,0,72,0,48,0,48,0,72,0,72,0,0,0,0,0, // ASCII code 120
 0,6, 0,0,0,0,0,0,0,0,72,0,72,0,72,0,72,0,48,0,32,0,32,0,192,0, // ASCII code 121
 1,6, 0,0,0,0,0,0,0,0,120,0,8,0,16,0,32,0,64,0,120,0,0,0,0,0, // ASCII code 122
 1,7, 16,0,32,0,32,0,32,0,32,0,64,0,32,0,32,0,32,0,32,0,16,0,0,0, // ASCII code 123
 1,9, 0,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,64,0,0,0, // ASCII code 124
 1,7, 64,0,32,0,32,0,32,0,32,0,16,0,32,0,32,0,32,0,32,0,64,0,0,0, // ASCII code 125
 1,4, 0,0,0,0,50,0,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // ASCII code 126
 0,10, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // ASCII code 127
};
// 96 characters, 11*12 pixels, 2 bytes across starting at ASCII character 32
PROGMEM static const NOKIA_FONT font1 =
{
 32, // Start character (usually 32)
 96, // Number of characters
 11, // Pixel width
 2, // Byte width
 12, // Height of each character
 font1_data // Pointer to actual font data
};