/*! load Sppedo fonts */ void load_fontspeedo(void) { int nb_fonts, i; char fontname[128], temp[35]; if(vq_vgdos() == GDOS_FSM) { graf_mouse(BUSYBEE , 0); nb_fonts = vst_load_fonts(work_display.handle, 0); fgdos = TRUE; i = 2; do { vqt_name(work_display.handle, i, temp); strcpy(fontname, " "); strcat(fontname, temp); if(strlen(fontname) > 33) fontname[33] = '\0'; set_text(ir_trindex[FONTS], i, fontname); ir_trindex[FONTS][i].ob_state &= ~DISABLED; i++; } while(((i - 1) <= nb_fonts) &&(i <= 41)); graf_mouse(ARROW, 0); fid = 1; } /* if GDOS loaded */ size = 13; } /* endof load_fontspeedo */
void fnt_mdialog(int ap_id, int win, int id, int size, int color, int effect, int prop) { FNT_DIALOG *fnt_dial; char name[34]; int i; OBJECT *o = &wdfont[WDFTEXT]; if ((fnt_dial = malloc(sizeof(FNT_DIALOG))) == NULL) { xform_error(ENSMEM); return; } if ((fnt_dial->fd = malloc((nfonts + 1) * sizeof(FONTDATA))) == NULL) { free(fnt_dial); xform_error(ENSMEM); return; } fnt_dial->userblock.fnt_dial = fnt_dial; fnt_dial->userblock.text = (char *) o->ob_spec.index; fnt_dial->userblock.userblock.ub_code = mdraw_text; fnt_dial->userblock.userblock.ub_parm = (long) &fnt_dial->userblock; o->ob_type = (o->ob_type & 0xFF00) | G_USERDEF; o->ob_spec.userblk = &fnt_dial->userblock.userblock; rsc_title(wdfont, WDFTITLE, DTVFONT); fnt_dial->ap_id = ap_id; /* Application id of caller. */ fnt_dial->win = win; /* Window id of caller. */ fnt_dial->color = color; /* Color of font. */ fnt_dial->effect = effect; /* Text effects of font. */ fnt_dial->nf = 0; for (i = 0; i <= nfonts; i++) { FONTDATA *h = &fnt_dial->fd[fnt_dial->nf]; int j, iw, mw, dummy; char *s = h->name; FONT fnt; h->id = vqt_name(vdi_handle, i + 1, name); fnt_setfont(h->id, 10, &fnt); vqt_width(vdi_handle, 'i', &iw, &dummy, &dummy); vqt_width(vdi_handle, 'm', &mw, &dummy, &dummy); if ((prop != FALSE) || (iw == mw)) { strsncpy(s, name, sizeof(h->name)); /* HR 120203: secure cpy */ j = (int) strlen(h->name); while (j < 16) s[j++] = ' '; h->flag = (int) name[32]; fnt_dial->nf++; } } fnt_dial->sl_info.slider.type = 0; fnt_dial->sl_info.slider.up_arrow = WDFUP; fnt_dial->sl_info.slider.down_arrow = WDFDOWN; fnt_dial->sl_info.slider.slider = FSLIDER; fnt_dial->sl_info.slider.sparent = FSPARENT; fnt_dial->sl_info.slider.lines = NLINES; fnt_dial->sl_info.slider.n = fnt_dial->nf; fnt_dial->sl_info.slider.line = set_font(&fnt_dial->sl_info.slider, id, &fnt_dial->font, fnt_dial->fd, fnt_dial->nf); fnt_dial->sl_info.slider.set_selector = mset_selector; fnt_dial->sl_info.slider.first = WDFONT1; fnt_dial->sl_info.slider.findsel = mfind_selected; fnt_dial->sl_info.fnt_dial = fnt_dial; fnt_dial->cursize = get_size(fnt_dial->font, fnt_dial->fd, fnt_dial->fsizes, &fnt_dial->nfsizes, size); fnt_dial->fsize = fnt_dial->fsizes[fnt_dial->cursize]; sl_init(wdfont, &fnt_dial->sl_info.slider); xd_nmopen(wdfont, &fnt_dial->dialog, &fnt_funcs, 0, -1, -1, NULL, NULL, FALSE, "Font selector"); }
boolean fnt_dialog(int title, FONT *wd_font, boolean prop) { char name[34]; int button, i, newfont, curobj, cursize, fsizes[100], nfsizes; XDINFO info; SLIDER sl_info; boolean stop = FALSE, ok = FALSE; OBJECT *o = &wdfont[WDFTEXT]; static USERBLK userblock; if ((fd = malloc((nfonts + 1) * sizeof(FONTDATA))) == NULL) { xform_error(ENSMEM); return FALSE; } if (o->ob_type != G_USERDEF) xd_userdef(o, &userblock, draw_text); rsc_title(wdfont, WDFTITLE, title); nf = 0; for (i = 0; i <= nfonts; i++) { FONTDATA *h = &fd[nf]; int j, iw, mw, dummy; char *s = h->name; FONT fnt; h->id = vqt_name(vdi_handle, i + 1, name); fnt_setfont(h->id, 10, &fnt); vqt_width(vdi_handle, 'i', &iw, &dummy, &dummy); vqt_width(vdi_handle, 'm', &mw, &dummy, &dummy); if ((prop != FALSE) || (iw == mw)) { strsncpy(s, name, sizeof(h->name)); /* HR 120203: secure cpy */ j = (int) strlen(h->name); while (j < 16) s[j++] = ' '; h->flag = (int) name[32]; nf++; } } sl_info.type = 0; sl_info.up_arrow = WDFUP; sl_info.down_arrow = WDFDOWN; sl_info.slider = FSLIDER; sl_info.sparent = FSPARENT; sl_info.lines = NLINES; sl_info.n = nf; sl_info.line = set_font(&sl_info, wd_font->id, &font, fd, nf); sl_info.set_selector = set_selector; sl_info.first = WDFONT1; sl_info.findsel = find_selected; fsize = fsizes[cursize = get_size(font, fd, fsizes, &nfsizes, wd_font->size)]; sl_init(wdfont, &sl_info); xd_open(wdfont, &info); while (stop == FALSE) { button = sl_form_do(wdfont, 0, &sl_info, &info) & 0x7FFF; switch (button) { case WDFONT1: case WDFONT2: case WDFONT3: case WDFONT4: case WDFONT5: case WDFONT6: curobj = font - sl_info.line + WDFONT1; if (((newfont = sl_info.line + button - WDFONT1) < nf) && (curobj != button)) { if ((curobj >= WDFONT1) && (curobj <= WDFONT6)) xd_change(&info, curobj, NORMAL, 1); xd_change(&info, button, SELECTED, 1); font = newfont; fsize = fsizes[cursize = get_size(font, fd, fsizes, &nfsizes, fsize)]; xd_draw(&info, WDFTEXT, 1); xd_draw(&info, WDFSIZE, 1); } break; case WDFSUP: if (cursize < nfsizes - 1) { cursize++; goto cont; } xd_change(&info, button, NORMAL, 1); break; case WDFSDOWN: if (cursize > 0) { cursize--; cont:fsize = fsizes[cursize]; itoa(fsize, wdfont[WDFSIZE].ob_spec.free_string, 10); xd_draw(&info, WDFTEXT, 1); xd_draw(&info, WDFSIZE, 1); } xd_change(&info, button, NORMAL, 1); break; case WDFOK: if ((fd[font].id != wd_font->id) || (fsize != wd_font->size)) { wd_font->id = fd[font].id; wd_font->size = fsize; wd_font->cw = chw; wd_font->ch = chh; ok = TRUE; } default: stop = TRUE; break; } } xd_change(&info, button, NORMAL, 0); xd_close(&info); free(fd); return ok; }
/* ------------------ */ void set_font(void) { register int eo, i, font_nr, font_height; int tst_x, tst_y, xy[4], dummy; int minADE, maxADE, distance[5], effects[3], maxw; char font_names[4][34]; set_eline(); font_nr = akt_font; font_height = akt_fheight; rsrc_gaddr(ROOT, SET_FONT, &form_adr); for (i = 0; i < 4; i++) form_adr[FONT_1B + i].ob_spec.tedinfo->te_ptext = font_names[i]; form_adr[FONT_S].ob_state &= ~SELECTED; for (i = 0; i < 4; i++) { form_adr[FONT_1B + i].ob_state &= ~SELECTED; if (tfont_names[akt_id][i][0]) { strcpy(font_names[i], tfont_names[akt_id][i]); form_adr[FONT_1B + i].ob_state &= ~DISABLED; } else { strcpy(font_names[i], "-- Unbelegt --"); form_adr[FONT_1B + i].ob_state |= DISABLED; } } form_adr[FONT_S + font_nr - 1].ob_state |= SELECTED; form_draw(); objc_offset(form_adr, TST_FLD, &tst_x, &tst_y); xy[0] = tst_x; xy[1] = tst_y; xy[2] = xy[0] + form_adr[TST_FLD].ob_width - 2; xy[3] = xy[1] + form_adr[TST_FLD].ob_height - 2; vs_clip(vdi_handle, TRUE, xy); vswr_mode(vdi_handle, 1); vst_effects(vdi_handle, NORMAL); vst_alignment(vdi_handle, 0, 5, &dummy, &dummy); do { show_testtext(tst_x, tst_y, font_nr, font_height); vqt_fontinfo(vdi_handle, &minADE, &maxADE, distance, &maxw, effects); if (distance[4] < font_height) font_height = distance[4]; eo = form_do(form_adr, 0); switch(eo & 0x7FFF) { case FONT_S: case FONT_1B: case FONT_2B: case FONT_3B: case FONT_4B: if ((form_adr[eo & 0x7FFF].ob_state & DISABLED) || ((eo & 0x8000) && (eo & 0x7FFF) != FONT_S)) { eo &= 0x7FFF; if (load_font(eo - FONT_S + 1)) { font_nr = eo - FONT_S + 1; vqt_name(vdi_handle, 2, tfont_names[akt_id][eo - FONT_1B]); strcpy(font_names[eo - FONT_1B], tfont_names[akt_id][eo - FONT_1B]); form_adr[eo].ob_state &= ~DISABLED; for (i = 0; i < 5; i++) form_adr[FONT_S + i].ob_state &= ~SELECTED; form_adr[eo].ob_state |= SELECTED; strcpy(txt_fonts[akt_id][font_nr - 2], rindex(font_path, '\\') + 1); } objc_draw(form_adr, ROOT, MAX_DEPTH, fx, fy, fw, fh); } else font_nr = eo - FONT_S + 1; break; case GRT_UP: if (font_height > distance[4] - distance[2]) font_height--; break; case GRT_DWN: font_height++; break; } eo &= 0x7FFF; }while(eo != FONT_OK && eo != FONT_CNC); form_adr[eo & 0x7FFF].ob_state &= ~SELECTED; f_dial(FMD_SHRINK); f_dial(FMD_FINISH); get_eline(); if (eo == FONT_OK) { set_fontd(font_nr, font_height); akt_font = font_nr; akt_fheight = font_height; } vst_alignment(vdi_handle, 0, 3, &dummy, &dummy); }