123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336 |
- /*
- * 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 libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
- /* $XConsortium: excutil.c /main/3 1996/04/08 15:51:03 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"
- extern char *maintitle;
- Widget excCreatePushButton(Widget parent, String name, String label,
- XtCallbackProc callback_func,
- XtPointer client_data)
- {
- Widget widget;
- XmString xms;
- Arg args[20];
- Cardinal n;
- n = 0;
- xms = XmStringCreateLocalized(label);
- XtSetArg(args[n], XmNlabelString, xms); n++;
- widget = XmCreatePushButton(parent, name, args, n);
- XmStringFree(xms);
- XtAddCallback(widget, XmNactivateCallback,
- (XtCallbackProc) callback_func,
- (XtPointer) client_data);
- XtManageChild(widget);
- return (widget);
- }
- void excerror(Exc_data * ed, int excerrno, char * funcname, char * func)
- {
- switch (excerrno)
- {
- case EXCERRMALLOC:
- fprintf(stderr, "dtudcexch:memory allocation error\n");
- freeExcdata(ed);
- exit (-1);
- case EXCERRNOUDC:
- fprintf(stderr, "dtudcexch:UDC is not defined in current locale\n");
- freeExcdata(ed);
- exit (-1);
- }
- }
- void dialogokCB(Widget widget, int * ans, XtPointer call_data)
- {
- /* ok button pushed */
- *ans = 1;
- }
- void dialogcancelCB(Widget widget, int * ans, XtPointer call_data)
- {
- /* cancel button pushed */
- *ans = 2;
- }
- void AskUser(Widget parent, Exc_data * ed, char *msg, int *r, char * type)
- /* If ok button pushed, *r = 1. */
- /* If cancel button pushed(if exists), *r = 2. */
- {
- XmString message;
- Widget dialog;
- int ans = 0;
- Cardinal n;
- Arg args[20];
- n = 0;
- message = XmStringCreateLocalized(msg);
- XtSetArg(args[n], XmNmessageString, message); n++;
- XtSetArg(args[n], XmNtitle, maintitle); n++;
- XtSetArg(args[n], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); n++;
- if (strcmp(type, "warning") == 0) {
- dialog = XmCreateWarningDialog(parent, type, args, n);
- } else if (strcmp(type, "error") == 0) {
- dialog = XmCreateErrorDialog(parent, type, args, n);
- XtUnmanageChild(XmMessageBoxGetChild(dialog, XmDIALOG_CANCEL_BUTTON));
- } else if (strcmp(type, "information") == 0) {
- dialog = XmCreateInformationDialog(parent, type, args, n);
- XtUnmanageChild(XmMessageBoxGetChild(dialog, XmDIALOG_CANCEL_BUTTON));
- } else if (strcmp(type, "question") == 0) {
- dialog = XmCreateQuestionDialog(parent, type, args, n);
- } else {
- fprintf(stderr, "error in AskUser\n");
- }
- XtUnmanageChild(XmMessageBoxGetChild(dialog, XmDIALOG_HELP_BUTTON));
- XmStringFree(message);
- XtAddCallback(dialog, XmNokCallback, (XtCallbackProc) dialogokCB,
- (XtPointer) &ans);
- XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc) dialogcancelCB,
- (XtPointer) &ans);
- XtManageChild(dialog);
- while (ans == 0) {
- XtAppProcessEvent(ed->app, XtIMAll);
- XSync(XtDisplay(dialog), 0);
- }
- *r = ans;
- XSync(XtDisplay(dialog), 0);
- XmUpdateDisplay(dialog);
- }
- int beki(int n, int num)
- {
- int a,i;
- a = 1;
- for (i=0; i<num; i++)
- a = a * n;
- return a;
- }
- int c2h(char * num)
- {
- int i,n;
- char *c;
- if ((strlen(num)==6)&&(strncmp(num,"0x",2)==0))
- {
- c = num;
- c=c+2;
- n=0;
- for (i=3;i>=0;i--)
- {
- if (('0'<= *c)&&(*c <= '9'))
- n = n + ((*c - '0')*beki(16,i));
- else if (('a' <= *c)&&(*c <= 'f'))
- n = n + ((*c - 'a'+10)*beki(16,i));
- else
- Ecs("error in c2h.here");
- c++;
- }
- } else
- Ecs("error in c2h");
- return n;
- }
- char * renge2num(char * renge)
- {
- char * num;
- num = (char *) calloc(7, sizeof(char));
- strncpy(num,renge,6);
- return num;
- }
- void Ecs(char * string)
- {
- fprintf(stderr,"%s\n",string);
- }
- void Ecd(int data)
- {
- fprintf(stderr,"%d\n",data);
- }
- void freecsrec(UDCcsREC *rec)
- {
- if (rec->charset != NULL)
- free(rec->charset);
- if (rec->udcrenge != NULL)
- free(rec->udcrenge);
- }
- void freecslist(int n, UDCcsREC *rec)
- {
- int i;
- UDCcsREC *recp;
- recp = rec;
- for (i = 0; i < n; i++)
- {
- if (recp != NULL)
- {
- freecsrec(recp);
- recp++;
- } else {
- break;
- }
- }
- }
- void freeExcdata(Exc_data *ed)
- {
- if (ed == NULL)
- return;
- /* Don't free ed->toplevel */
- if (ed->locale != NULL)
- free(ed->locale);
- if (ed->cslist != NULL)
- free(ed->cslist);
- if (ed->xlfdname != NULL)
- free(ed->xlfdname);
- if (ed->style != NULL)
- free(ed->style);
- if (ed->size != NULL)
- free(ed->size);
- /* Don't free ed->fontfile */
- if (ed->bdffile != NULL)
- XtFree(ed->bdffile);
- if (ed->udcrenge != NULL)
- free(ed->udcrenge);
- if (ed->gpf_code_list != NULL)
- free(ed->gpf_code_list);
- if (ed->bdf_code_list != NULL)
- free(ed->bdf_code_list);
- if (ed->comment_list != NULL)
- free(ed->comment_list);
- free(ed);
- }
- void Ecss(char * s1, char * s2)
- {
- fprintf(stderr,"%s is %s\n", s1, s2);
- }
- void Ecsd(char * s1, int i)
- {
- fprintf(stderr,"%s = %d\n", s1, i);
- }
- void checkdata(Exc_data *ed)
- {
- if (ed == NULL)
- return;
- /* Don't free ed->toplevel */
- if (ed->locale != NULL)
- Ecss("ed->locale", ed->locale);
- Ecsd("ed->csnum", ed->csnum);
- if (ed->xlfdname != NULL)
- Ecss("ed->xlfdname",ed->xlfdname);
- if (ed->fontfile != NULL)
- Ecss("ed->fontfile",ed->fontfile);
- if (ed->bdffile != NULL)
- Ecss("ed->bdffile",ed->bdffile);
- if (ed->udcrenge != NULL)
- Ecss("ed->udcrenge",ed->udcrenge);
- Ecsd("ed->code_num", ed->code_num);
- }
- void excterminate(Exc_data * ed)
- {
- freeExcdata(ed);
- exit(0);
- }
- void excexit(Exc_data * ed)
- {
- excterminate(ed);
- }
- void freeld(ListData *ld)
- {
- int i;
- char **cp;
- if (ld != NULL) {
- if (ld->allcode != NULL)
- free(ld->allcode);
- if (ld->existcode != NULL)
- free(ld->existcode);
- if (ld->existcode_c != NULL) {
- cp = ld->existcode_c;
- for (i = 0; i < ld->existcode_num; i++) {
- if (*cp != NULL)
- free(*cp);
- cp++;
- }
- free(ld->existcode_c);
- }
- free(ld);
- }
- }
- int bigger(int num1, int num2)
- {
- if (num1 >= num2)
- return (num1);
- else
- return (num2);
- }
- int smaller(int num1, int num2)
- {
- if (num1 < num2)
- return (num1);
- else
- return (num2);
- }
|