/*After making a font... You can save it as a binary file with: FileWrite("filename.BIN.Z",text.font,256*FONT_HEIGHT); You can load it with: U64 *my_font=FileRead("filename.BIN.Z"); text.aux_font=my_font; <CTRL-ALT-f> will toggle main font and aux_font. If you want to change the system font permanently, save to a file with this font editor program and cut and paste the code into ::/Kernel/FontStd.HC. You will need to recompile Kernel by calling BootHDIns(). See ::/Demo/ExtChars.HC, ::/Demo/Games/CharDemo.HC, ::/Demo/Graphics/CharAnimation.HC and ::/Demo/ScrnCodes.HC. */ #define BLOW_UP_CHAR_X (18*FONT_WIDTH) #define BLOW_UP_CHAR_Y (4*FONT_HEIGHT) U8 cur_ch; U0 DrawIt(CTask *task,CDC *dc) { I64 i,j,k,c; TextPrint(task,0,0,BLUE<<4+YELLOW,"Press <CTRL-ALT-f> to Toggle Aux Font."); k=0; for (i=0;i<16;i++) for (j=0;j<16;j++) { if (k==cur_ch) { if (Blink) c=(BLUE<<4+YELLOW)<<8 + k++; else c=(YELLOW<<4+BLUE)<<8 + k++; } else c=(BLUE<<4+WHITE)<<8 + k++; TextChar(task,,j,i+2,c); } k=0; for (i=0;i<FONT_HEIGHT;i++) for (j=0;j<FONT_WIDTH;j++) { if (Bt(&text.font[cur_ch],k++)) dc->color=YELLOW; else dc->color=BLUE; GrRect(dc,BLOW_UP_CHAR_X+j*FONT_WIDTH, BLOW_UP_CHAR_Y+i*FONT_HEIGHT, FONT_WIDTH,FONT_HEIGHT); } } U0 FESave(Bool pmt) { U8 old_draw_it=Fs->draw_it; CDoc *doc=DocNew; I64 i; for (i=0;i<256;i++) { DocPrint(doc,"0x%016X,",text.font[i]); if (Bt(char_bmp_safe_dollar,i)) DocPrint(doc,"//%c",i); else if (i=='$') DocPrint(doc,"//$$",i); DocPrint(doc,"\n"); } Fs->draw_it=NULL; DocWrite(doc,pmt); Fs->draw_it=old_draw_it; DocDel(doc); } U0 FontEd() { I64 msg_code,arg1,arg2,k; SettingsPush; //See SettingsPush MenuPush( "File {" " SaveAs(,CH_CTRLA);" " Abort(,CH_SHIFT_ESC);" " Exit(,CH_ESC);" "}"); AutoComplete; DocCursor; DocClear; Fs->win_inhibit|=WIG_DBL_CLICK; cur_ch=0; try { Fs->draw_it=&DrawIt; while (TRUE) { switch (msg_code=GetMsg(&arg1,&arg2, 1<<MSG_KEY_DOWN|1<<MSG_MS_L_DOWN|1<<MSG_MS_R_DOWN|1<<MSG_MS_MOVE)) { case MSG_KEY_DOWN: switch (arg1) { case 0: switch (arg2.u8[0]) { case SC_CURSOR_LEFT: cur_ch--; break; case SC_CURSOR_RIGHT: cur_ch++; break; case SC_CURSOR_UP: cur_ch-=16; break; case SC_CURSOR_DOWN: cur_ch+=16; break; } break; goto fe_done; case CH_CTRLA: FESave(TRUE); break; case CH_ESC: FESave(FALSE); case CH_SHIFT_ESC: goto fe_done; default: cur_ch=arg1; } break; case MSG_MS_L_DOWN: case MSG_MS_R_DOWN: if (0<=arg1<FONT_WIDTH*16 && FONT_HEIGHT*2<=arg2<FONT_HEIGHT*16) { cur_ch=(arg2/FONT_HEIGHT-2)*16+arg1/FONT_WIDTH; break; } //fall through case MSG_MS_MOVE: k=((arg2-BLOW_UP_CHAR_Y)/FONT_HEIGHT)*FONT_WIDTH+ (arg1-BLOW_UP_CHAR_X)/FONT_WIDTH; if (0<=k<FONT_WIDTH*FONT_HEIGHT) { if (ms.lb||msg_code==MSG_MS_L_DOWN) Bts(&text.font[cur_ch],k); if (ms.rb||msg_code==MSG_MS_R_DOWN) Btr(&text.font[cur_ch],k); } break; } } fe_done: GetMsg(,,1<<MSG_KEY_UP); } catch PutExcept; MenuPop; SettingsPop; } FontEd;