211 lines
5.3 KiB
C
211 lines
5.3 KiB
C
/*
|
|
* CDE - Common Desktop Environment
|
|
*
|
|
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
|
|
*
|
|
* These libraries and programs are free software; you can
|
|
* redistribute them and/or modify them under the terms of the GNU
|
|
* Lesser General Public License as published by the Free Software
|
|
* Foundation; either version 2 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* These libraries and programs are distributed in the hope that
|
|
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
* PURPOSE. See the GNU Lesser General Public License for more
|
|
* details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with these librararies and programs; if not, write
|
|
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
* Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
/* $XConsortium: udcimp.c /main/4 1996/09/02 18:51:02 cde-fuj $ */
|
|
/*
|
|
* (c) Copyright 1995 FUJITSU LIMITED
|
|
* This is source code modified by FUJITSU LIMITED under the Joint
|
|
* Development Agreement for the CDEnext PST.
|
|
* This is unpublished proprietary source code of FUJITSU LIMITED
|
|
*/
|
|
|
|
#include "excutil.h"
|
|
#include "FaLib.h"
|
|
void addcharptn();
|
|
void setcodelists();
|
|
|
|
extern ListData *ld;
|
|
extern int num_gr;
|
|
extern FalGlyphRegion *gr;
|
|
extern FalFontData fullFontData;
|
|
|
|
void udcimp(Exc_data * ed)
|
|
{
|
|
ed->function = IMPORT;
|
|
strcpy(ed->bdfmode,"r");
|
|
getbdffn(ed);
|
|
}
|
|
|
|
int checkcode(int code)
|
|
{
|
|
int i, j;
|
|
int code1, code2;
|
|
|
|
for (i = 0; i < num_gr; i++) {
|
|
code1 = smaller(gr[i].start, gr[i].end);
|
|
code2 = bigger(gr[i].start, gr[i].end);
|
|
if ((code >= code1) && (code <= code2)) { /*in udc area */
|
|
for (j = 0; j < ld->existcode_num; j++) {
|
|
if (code == ld->existcode[j])
|
|
return (1); /* the font has same glyph index */
|
|
}
|
|
return (0);
|
|
}
|
|
}
|
|
return (-1); /* out of udc area */
|
|
}
|
|
|
|
|
|
int checkcodes(int code_num, int * code_list)
|
|
{
|
|
int *codep;
|
|
int i, ans;
|
|
int exist = 0;
|
|
|
|
codep = code_list;
|
|
for (i = 0; i < code_num; i++) {
|
|
ans = checkcode(*codep);
|
|
if (ans == -1) {
|
|
return (-1);
|
|
} else if (ans == 1) {
|
|
exist = 1;
|
|
}
|
|
codep++;
|
|
}
|
|
return (exist);
|
|
}
|
|
|
|
void getcharcd(Exc_data * ed)
|
|
{
|
|
int code_num;
|
|
int *code_list;
|
|
int i;
|
|
char *msg;
|
|
char *msg2;
|
|
char *msg3;
|
|
int ans, ans2;
|
|
|
|
msg = GETMESSAGE(12, 2, "Glyph images in this BDF file can't be added to the font.");
|
|
msg2 = GETMESSAGE(12, 4, "Failed to open the selected BDF font. You have no right to access for the font file, or the format of the file is not consistent.");
|
|
msg3 = GETMESSAGE(12, 6, "There are one or more glyph images being overwritten. Overwrite?");
|
|
|
|
i = ImpBDFCodeList(ed->bdffile, &code_num, &code_list);
|
|
|
|
if (i != 0) { /* bad BDF format */
|
|
AskUser(ed->toplevel, ed, msg2, &ans, "error");
|
|
freeld(ld);
|
|
excterminate(ed);
|
|
}
|
|
|
|
ans2 = checkcodes(code_num, code_list);
|
|
if (ans2 == -1) { /* out of UDC code exists */
|
|
AskUser(ed->toplevel, ed, msg, &ans, "error");
|
|
freeld(ld);
|
|
excterminate(ed);
|
|
} else if (ans2 == 1) { /* font file has same glyph index */
|
|
AskUser(ed->toplevel, ed, msg3, &ans, "warning");
|
|
if (ans != 1) {
|
|
freeld(ld);
|
|
excterminate(ed);
|
|
}
|
|
}
|
|
|
|
/* set twe codelists */
|
|
setcodelists(ld, code_num, code_list);
|
|
|
|
if (ImpBDFCodeListFree(&code_list) != 0) {
|
|
fprintf(stderr,"error in ImpBDFCodeListFree\n");
|
|
}
|
|
|
|
/* add gryph images to font */
|
|
addcharptn(ed);
|
|
}
|
|
|
|
void addcharptn(Exc_data * ed)
|
|
{
|
|
int i;
|
|
int ans;
|
|
char *msg;
|
|
char *msg2;
|
|
char *msg3;
|
|
|
|
int mask;
|
|
FalFontDataList *fulllist = NULL;
|
|
FalFontID fontid;
|
|
|
|
msg = GETMESSAGE(12, 8, "Failed to open the selected font. You have no right to access for the font file, or the format of the file is not consistent.");
|
|
msg2 = GETMESSAGE(12, 10, "Glyph images in this BDF file can't be added to the font.");
|
|
msg3 = GETMESSAGE(12, 12, "Failed in the registration of the font file.");
|
|
|
|
mask = FAL_FONT_MASK_XLFDNAME | FAL_FONT_MASK_GLYPH_INDEX |
|
|
FAL_FONT_MASK_DEFINED | FAL_FONT_MASK_UPDATE |
|
|
FAL_FONT_MASK_UNDEFINED | FAL_FONT_MASK_CODE_SET;
|
|
|
|
i = ImpBDFCheck(ed->bdffile, ed->fontfile);
|
|
if (i != 0) {
|
|
AskUser(ed->toplevel, ed, msg2, &ans, "error");
|
|
excterminate(ed);
|
|
}
|
|
|
|
fontid = FalOpenSysFont(&fullFontData, mask, &fulllist);
|
|
if (fontid == 0) {
|
|
AskUser(ld->ed->toplevel, ld->ed, msg, &ans, "error");
|
|
excterminate(ed);
|
|
}
|
|
i = 0;
|
|
i = ImpBDFtoGpf(ed->bdffile, ed->fontfile,
|
|
ed->code_num, ed->bdf_code_list);
|
|
FalCloseFont( fontid );
|
|
if (i != 0) {
|
|
AskUser(ed->toplevel, ed, msg3, &ans, "error");
|
|
}
|
|
|
|
excterminate(ed);
|
|
}
|
|
|
|
void setcodelists(ListData *ld, int code_num, int *code_list)
|
|
{
|
|
int *c1, *c2;
|
|
int i;
|
|
Exc_data *ed;
|
|
|
|
ld->ed->code_num = code_num;
|
|
|
|
if ((c1 = (int *) calloc(code_num, sizeof(int))) == NULL) {
|
|
ed = ld->ed;
|
|
freeld(ld);
|
|
excerror(ed, EXCERRMALLOC, "setcodelists", "exit");
|
|
}
|
|
ld->ed->bdf_code_list = c1;
|
|
c2 = code_list;
|
|
for (i = 0; i < code_num; i++)
|
|
{
|
|
*c1 = *c2;
|
|
c1++;
|
|
c2++;
|
|
}
|
|
|
|
if ((c1 = (int *) calloc(code_num, sizeof(int))) == NULL) {
|
|
ed = ld->ed;
|
|
freeld(ld);
|
|
excerror(ed, EXCERRMALLOC, "setcodelists", "exit");
|
|
}
|
|
ld->ed->gpf_code_list = c1;
|
|
c2 = code_list;
|
|
for (i = 0; i < code_num; i++)
|
|
{
|
|
*c1 = *c2;
|
|
c1++;
|
|
c2++;
|
|
}
|
|
}
|