12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513 |
- /*
- * 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
- */
- /* ufont.c 1.45 - Fujitsu source for CDEnext 96/12/03 18:34:11 */
- /* $XConsortium: ufont.c /main/14 1996/12/17 19:30:16 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 <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <X11/Intrinsic.h>
- #include "xoakufont.h"
- #include "util.h"
- #define _CLIENT_CAT_NAME "dtudcfonted"
- extern char *_DtGetMessage(char *filename, int set, int n, char *s);
- #define GETMESSAGE(set, number, string) GetMessage(set, number, string)
- static char *
- GetMessage(int set, int number, char *string)
- {
- char *tmp, *ret;
- tmp = _DtGetMessage(_CLIENT_CAT_NAME, set, number, string);
- ret = malloc(strlen(tmp) + 1);
- strcpy(ret, tmp);
- return (ret);
- }
- /****************************************************************
- * Widgets *
- ***************************************************************/
- Widget toplevel;
- Widget editPtnW;
- Widget cpyPtnW;
- Widget mngPtnW;
- EditChar edg;
- EditList edlist;
- EditPane edpane;
- XlibInf xl;
- DelInf dn;
- DelPtnInf dl[D_MAX] ;
- DelPtnInf dl_glyph[EDLIST_MAX]; /* add dl_disp 1995.09.20 */
- int sq_disp[EDLIST_MAX]; /* add sq_disp 1995.09.20 */
- EditPtnInf em;
- CopyPtnInf cpm;
- static Widget dnPopW;
- Widget wgeScro, editPopW;
- static int select_x, select_y, select_w, select_h;
- static int r1_x, r1_y, r2_x, r2_y, cut_w, cut_h;
- extern Widget xlfdDialog, cpyDialog;
- extern FalFontID font_id;
- Pixmap arrow_pix=0;
- static XtAppContext app; /* application context */
- static int edpane_size=0;
- static void OtherFontSelect(void);
- void drawDelCode(int i);
- void drawDelPtn(int i);
- static void xeg_init(void);
- static void dstrypaneEditPtn(void);
- void chgEdCode(int code, char mode);
- void chgEdList(int statloc, int slctloc, char mode);
- static void chgEdPtn(int code);
- static void DrawRectEdPn(int x1, int y1, int x2, int y2);
- static void DrawBorderEdPn(int x1, int y1, int x2, int y2);
- static void DrawPointEdPn(int x, int y, int mode);
- static void DrawDpPn(void);
- static void DrawPointDpPn(int x, int y, int mode);
- static void musPoint(int evtype, int px, int py);
- static void musLine(int evtype, int px, int py);
- static void musCircle(int evtype, int px, int py);
- static void musRect(int proc, int evtype, int px, int py);
- static void musRegionProc(int proc, int evtype, int px, int py);
- #ifdef __linux__
- static void musPasteProc(Widget w, XtPointer client_data, XEvent *event, Boolean*);
- #else
- static void musPasteProc(Widget w, XtPointer client_data, XEvent *event);
- #endif
- static void rubLine(int x1, int y1, int x2, int y2);
- static void rubBand(int x1, int y1, int x2, int y2);
- static void rubCircle(int ox, int oy, int rx, int ry);
- static void resetEditMode(unsigned int flag);
- static void copyPatterns(FalFontData *fdata,
- int s1_code,
- int s2_code,
- int d1_code,
- int proc);
- extern String MngCodeTfValue(void);
- extern String CpySrcCodeTfValue(void);
- extern String CpyDestCodeTfValue(void);
- char *get_cmd_path(char *path, char *cmd);
- extern FalFontData fullFontData;
- extern FalFontData copyFontData;
- extern void PopupSelectXLFD(Widget top);
- extern void UpdateMessage(String str);
- extern void DispMngErrorMessage(String msg);
- extern void DispCpyErrorMessage(String msg);
- static int setRealDelArea(int *s_ncode,
- int *e_ncode,
- int *sq_start,
- int *sq_end);
- /****************************************************************
- * parameters *
- ***************************************************************/
- static Arg arg[30];
- static int n;
- Resource resource;
- /****************************************************************
- * callback routines *
- ***************************************************************/
- static void CancelCB(void);
- static void
- ExitCB(void)
- {
- exit(0);
- }
- int
- efctPtnNum(void)
- {
- int no;
- int sq;
- int cnt;
- for ( cnt = 0, sq = edlist.sqstart;
- sq < (edlist.sqstart + edlist.nptn); sq++) {
- no = ptnSqToNo(sq);
- if (( no >= 0) && (codeCheck( noToCode( no)) == 0))
- cnt++;
- }
- return( cnt);
- }
- void
- Error_message(Widget widget, char *message)
- {
- static NoticeButton is_lock[] = {
- NBTNARGS( ExitCB, NULL, 'E', True, False ),
- NBTNARGS( CancelCB, NULL, 'C', True, True )
- };
- static NButton LockBTN = NBUTTONS( is_lock );
- SetItemLabel(&LockBTN, 0, resource.l_exit);
- SetItemLabel(&LockBTN, 1, resource.l_cancel);
- PopupNotice( (widget), message,
- D_ERROR,
- &LockBTN,
- True,
- resource.l_question_title);
- }
- void
- Error_message2(Widget widget, char *message)
- {
- static NoticeButton is_lock[] = {
- NBTNARGS( CancelCB, NULL, 'C', True, True )
- };
- static NButton LockBTN = NBUTTONS( is_lock );
- if (widget == NULL)
- widget = toplevel;
- SetItemLabel(&LockBTN, 0, resource.l_ok);
- PopupNotice( (widget), message,
- D_ERROR,
- &LockBTN,
- True,
- resource.l_question_title);
- }
- /*
- * contents : read a character pattern from SNF file
- */
- /*ARGSUSED*/
- static void
- CBmOblB_edit( Widget widget, caddr_t clientData, caddr_t callData )
- {
- int ptn_n;
- int ptn_w;
- int ptn_h;
- int code;
- int i;
- int ret;
- char err[128];
- extern int begin_code;
- extern int ptnGetInfo();
- extern void PopupEditPtn();
- /* open font file and get informations of character to be edited */
- ret = readSNF( &(edg.fdata), &(edg.width), &(edg.height), err);
- if( ret == -1 ) {
- Error_message(widget, err);
- return;
- }
- dn.ptn_w = (Dimension) edg.width;
- dn.ptn_h = (Dimension) edg.height;
- if( xlfdDialog != NULL )
- PopdownDialog(xlfdDialog);
- ptnGetInfo( &ptn_n, &ptn_w, &ptn_h );
- for( i=0 ; i<ptn_n ; i++ ) {
- code = noToCode( ptnSqToNo(i) );
- if( begin_code > code){
- edlist.sqstart = i+1;
- } else {
- edlist.nptn++;
- }
- }
- if( efctPtnNum() > 0) {
- for ( i=edlist.sqstart; i<(edlist.sqstart+edlist.nptn); i++){
- if ( codeCheck( noToCode( ptnSqToNo(i))) == 0)
- break;
- }
- edg.ncode = ptnSqToNo( i );
- edg.code = noToCode( edg.ncode );
- ptnGet( edg.code, edg.ptn );
- }
- PopupEditPtn(toplevel);
- }
- void CBeOblB_aAdd(void);
- static Boolean do_read = False;
- static Boolean do_end = False;
- static void CancelCB(void) { }
- static void ContReadCB(Widget w)
- {
- FalCloseFont(font_id);
- editPtnW = NULL;
- OtherFontSelect();
- PopupSelectXLFD(toplevel);
- }
- static void SaveReadCB(void)
- {
- CBeOblB_aAdd();
- do_read = True;
- PopupSelectXLFD(toplevel);
- }
- static void ContEndCB(void)
- {
- FalCloseFont(font_id);
- exit(0);
- }
- static void SaveEndCB(void)
- {
- CBeOblB_aAdd();
- do_end = True;
- }
- /*
- * contents : quit editting
- */
- /*ARGSUSED*/
- static int
- QuitEditPtn( Widget widget, caddr_t clientData, caddr_t callData )
- {
- resetEditMode( RES_MSG | RES_PROC | RES_SLCT | RES_RSV );
- if( edg.code != 0 ){
- ptnAdd( edg.code, edg.ptn );
- }
- if( edg.flag == ON ){
- return(0);
- }
- return(1);
- }
- void
- OpenCB(Widget w, XtPointer client_data, XtPointer call_data)
- {
- static NoticeButton is_save_read_btn1[] = {
- NBTNARGS( SaveReadCB, NULL, 'S', True, False ),
- NBTNARGS( ContReadCB, NULL, 'O', True, False ),
- NBTNARGS( CancelCB, NULL, 'C', True, True ),
- };
- static NoticeButton is_save_read_btn2[] = {
- NBTNARGS( ContReadCB, NULL, 'O', True, False ),
- NBTNARGS( CancelCB, NULL, 'C', True, True ),
- };
- static NButton SaveReadBTN1 = NBUTTONS( is_save_read_btn1 );
- static NButton SaveReadBTN2 = NBUTTONS( is_save_read_btn2 );
- if (QuitEditPtn((Widget)NULL, (caddr_t)NULL, (caddr_t)NULL)){
- FalCloseFont(font_id);
- editPtnW = NULL;
- OtherFontSelect();
- PopupSelectXLFD(toplevel);
- }
- else{
- if (! fullFontData.prm) {
- SetItemLabel(&SaveReadBTN1, 0, resource.l_do_save_exit);
- SetItemLabel(&SaveReadBTN1, 1, resource.l_dont_save_exit);
- SetItemLabel(&SaveReadBTN1, 2, resource.l_cancel);
- PopupNotice( (w), resource.mn_saved_open ,
- D_QUESTION,
- &SaveReadBTN1,
- True,
- resource.l_question_title);
- } else {
- SetItemLabel(&SaveReadBTN2, 0, resource.l_dont_save_exit);
- SetItemLabel(&SaveReadBTN2, 1, resource.l_cancel);
- PopupNotice( (w), resource.mn_saved_open ,
- D_QUESTION,
- &SaveReadBTN2,
- True,
- resource.l_question_title);
- }
- }
- }
- void
- ReadCB(Widget w, XtPointer client_data, XtPointer call_data)
- {
- if (fullFontData.xlfdname == NULL) {
- return;
- }
- if (fullFontData.xlfdname == (char *) -1) {
- Error_message(w, resource.mn_prop_font);
- return;
- }
- CBmOblB_edit( w, client_data, call_data );
- }
- /****************************************************************
- * callback routines and event handler *
- ***************************************************************/
- /*
- * contents : write character patterns to SNF file
- */
- static Boolean
- WPwriteSNF( int restart )
- {
- int rc, err;
- char str[MG_MAXSIZE];
- switch( rc = writeSNF( restart, &err ) ) {
- case -1:
- if (dnPopW)
- XtSetSensitive( dnPopW, TRUE );
- switch( err ) {
- case 001:
- sprintf(str, "%s(permission denied)", resource.me_write_snf);
- break;
- case 002:
- sprintf(str, "%s(disk full)", resource.me_write_snf);
- break;
- case 101:
- sprintf(str, "%s(pipe error)", resource.me_write_snf);
- break;
- case 102:
- sprintf(str, "%s(fork error)", resource.me_write_snf);
- break;
- case 103:
- sprintf(str, "%s(execv error)", resource.me_write_snf);
- break;
- case 104:
- sprintf(str, "%s(data error)", resource.me_write_snf);
- break;
- default:
- sprintf(str, "%s", resource.me_write_snf);
- }
- UpdateMessage( str );
- return( TRUE );
- case 0:
- edg.flag = 0;
- UpdateMessage( resource.mg_register );
- sleep(1);
- UpdateMessage("");
- if (do_read){
- do_read = False;
- ContReadCB((Widget)NULL);
- }
- if (do_end){
- do_read = False;
- ContEndCB();
- }
- return(TRUE);
- default:
- if( rc == 1101 )
- sprintf( str, "%s", resource.me_wait );
- else
- sprintf( str, "%s(%3d%%)", resource.mg_write_snf , rc-1000 );
- UpdateMessage( str );
- XtAppAddWorkProc( app, (XtWorkProc)WPwriteSNF, (XtPointer)ON );
- if( rc == 1101 ){
- XSync( xl.display,0 );
- }
- return( TRUE );
- }
- }
- /*
- * contents : write character patterns to SNF file
- */
- void
- CBeOblB_aAdd(void)
- {
- char str[MG_MAXSIZE];
- resetEditMode( RES_MSG | RES_PROC | RES_SLCT | RES_RSV );
- UpdateMessage( resource.mg_write_snf );
- if( edg.code != 0 )
- ptnAdd( edg.code, edg.ptn );
- if( edg.flag == ON ) {
- sprintf( str, "%s", resource.mg_write_snf );
- if (dnPopW)
- XtSetSensitive( dnPopW, FALSE );
- XtAppAddWorkProc( app, (XtWorkProc)WPwriteSNF, (XtPointer)OFF );
- return;
- }
- else{
- UpdateMessage( "" );
- }
- }
- /*
- * contents : destroy the editor window
- */
- static void
- OtherFontSelect(void)
- {
- dstrypaneEditPtn();
- xeg_init();
- }
- /*
- * contents : close dtudcfonted
- */
- /*ARGSUSED*/
- void
- CBeOblB_aEnd( Widget widget, caddr_t clientData, caddr_t callData )
- {
- static NoticeButton is_save_exit_btn[] = {
- NBTNARGS( SaveEndCB, NULL, 'S', True, False ),
- NBTNARGS( ContEndCB, NULL, 'E', True, False ),
- NBTNARGS( CancelCB, NULL, 'C', True, True ),
- };
- static NButton SaveEndBTN = NBUTTONS( is_save_exit_btn );
- resetEditMode( RES_MSG | RES_PROC | RES_SLCT | RES_RSV );
- if( edg.code != 0 )
- ptnAdd( edg.code, edg.ptn );
- if( edg.flag == ON ) {
- SetItemLabel(&SaveEndBTN, 0, resource.l_do_save);
- SetItemLabel(&SaveEndBTN, 1, resource.l_dont_save);
- SetItemLabel(&SaveEndBTN, 2, resource.l_cancel);
- PopupNotice( widget, resource.mn_saved_exit, D_QUESTION,
- &SaveEndBTN, True, resource.l_question_title);
- return;
- } else {
- FalCloseFont(font_id);
- }
- exit(0);
- }
- /*ARGSUSED*/
- void
- CBeOblB_rCmd( Widget widget, int proc, caddr_t callData )
- {
- extern void SelectUnset();
- extern void UndoSet();
- if (!select_x && !select_y && !select_w && !select_h)
- return;
- em.rsv_f = ON;
- bitPtnCopy( em.rsv_ptn, edg.ptn );
- rubBand( r1_x, r1_y, r2_x, r2_y );
- switch( proc ) {
- case PROC_CLS:
- bitDrawCls (edg.ptn, select_x, select_y, select_w, select_h );
- break;
- case PROC_SET:
- bitDrawSet (edg.ptn, select_x, select_y, select_w, select_h );
- break;
- case PROC_REV:
- bitDrawRev (edg.ptn, select_x, select_y, select_w, select_h );
- break;
- case PROC_ROLL:
- bitDrawRoll(edg.ptn, select_x, select_y, select_w, select_h);
- break;
- case PROC_SYMV:
- bitDrawSymV(edg.ptn, select_x, select_y, select_w, select_h );
- break;
- case PROC_SYMH:
- bitDrawSymH(edg.ptn, select_x, select_y, select_w, select_h );
- break;
- }
- edg.flag = ON;
- DrawRectEdPn( 0, 0, edg.width - 1, edg.height - 1 );
- DrawDpPn();
- select_x = select_y = select_w = select_h = 0;
- SelectUnset();
- UndoSet();
- }
- /*ARGSUSED*/
- void
- CBeOblB_rCmdp( Widget widget, int proc, caddr_t callData )
- {
- extern Widget wgeBulB_edit;
- extern void CopySet();
- extern void UndoSet();
- extern void SelectUnset();
- switch( proc ) {
- case PROC_CPY:
- if (!select_x && !select_y && !select_w && !select_h)
- return;
- rubBand( r1_x, r1_y, r2_x, r2_y );
- bitDrawCpy(edg.ptn, select_x, select_y, select_w, select_h, False);
- cut_w = select_w;
- cut_h = select_h;
- select_x = select_y = select_w = select_h = 0;
- CopySet();
- SelectUnset();
- break;
- case PROC_CUT:
- if (!select_x && !select_y && !select_w && !select_h)
- return;
- em.rsv_f = ON;
- rubBand( r1_x, r1_y, r2_x, r2_y );
- bitPtnCopy( em.rsv_ptn, edg.ptn );
- bitDrawCpy(edg.ptn, select_x, select_y, select_w, select_h, True);
- cut_w = select_w;
- cut_h = select_h;
- edg.flag = ON;
- DrawRectEdPn( 0, 0, edg.width - 1, edg.height - 1 );
- DrawDpPn();
- select_x = select_y = select_w = select_h = 0;
- CopySet();
- UndoSet();
- SelectUnset();
- break;
- case PROC_PASTE:
- XtAddEventHandler(wgeBulB_edit,
- ButtonReleaseMask|PointerMotionMask,
- False, musPasteProc, NULL );
- }
- }
- /*
- * contents : cancel all editting
- */
- /*ARGSUSED*/
- void
- CBeOblB_rCan( Widget widget, caddr_t clientData, caddr_t callData )
- {
- extern void UndoUnset();
- resetEditMode( RES_MSG | RES_PROC | RES_SLCT );
- if( em.rsv_f == ON ) {
- bitPtnCopy( edg.ptn, em.rsv_ptn );
- em.rsv_f = OFF;
- DrawRectEdPn( 0, 0, edg.width - 1, edg.height - 1 );
- DrawDpPn();
- UndoUnset();
- }
- }
- /*
- *
- * contents : get a sequential number of the editor
- */
- int
- RelToAbsSq( int from, int cnt)
- {
- int i;
- int no;
- if ( cnt >= 0) {
- for ( i = -1; from < (edlist.sqstart + edlist.nptn) ; from++) {
- no = ptnSqToNo(from);
- if (( no >= 0) && ( noToCode( no) >= 0) ) {
- i++;
- if ( i >= cnt)
- return( from);
- }
- }
- } else {
- cnt *= -1;
- for ( i = -1; from >= edlist.sqstart; from--) {
- no = ptnSqToNo(from);
- if (( no >= 0) && ( noToCode( no) >= 0) ) {
- i++;
- if ( i >= cnt)
- return(from);
- }
- }
- }
- return( -1);
- }
- /*
- * contents : get a relative number of the system area
- */
- int
- AbsSqToRel( int from, int to)
- {
- int sq;
- int cnt;
- int sign = 1;
- int no;
- if ( from > to) {
- sq = from;
- from = to;
- to = sq;
- sign = -1;
- }
- for ( cnt = -1, sq = from; sq <= to; sq++) {
- no = ptnSqToNo(sq);
- if (( no >= 0) && (codeCheck( noToCode( no)) == 0))
- cnt++;
- }
- if ( cnt < 0)
- cnt = 0;
- cnt *= sign;
- return( cnt);
- }
- /*
- * contents : be the character list selected
- */
- /*ARGSUSED*/
- void
- EHeStaT_list( Widget widget, int select, XEvent *e )
- {
- int sq, no;
- int code;
- resetEditMode( RES_MSG|RES_PROC|RES_SLCT|RES_RSV );
- if( (e->xbutton.button != 1) || (e->type != ButtonRelease) ||
- (e->xbutton.x < 0) || ((int)edlist.elem_w < e->xbutton.x) ||
- (e->xbutton.y < 0) || ((int)edlist.elem_h < e->xbutton.y)
- )
- return;
- if( edlist.slctloc == select )
- return;
- sq = RelToAbsSq( edlist.sqstart + edlist.statloc, select);
- if( (no = ptnSqToNo(sq)) == -1 )
- return;
- code = noToCode( no );
- if( codeCheck( code ) == -1 )
- return;
- if( ptnSense( code) == 0 )
- return ;
- chgEdList( edlist.statloc, select, OFF );
- if( ptnSense(edg.code) == 1 )
- ptnAdd(edg.code, edg.ptn );
- chgEdPtn( code );
- }
- /*
- * contents : update the character list
- */
- /*ARGSUSED*/
- void
- CBeScro( Widget widget, caddr_t clientData, caddr_t callData )
- {
- int newl;
- int new_statloc;
- int new_slct;
- n = 0;
- XtSetArg( arg[n], XmNvalue, (XtArgVal)&newl ); n++;
- XtGetValues( wgeScro , arg, n );
- if (( new_statloc = RelToAbsSq( edlist.sqstart, newl)) < 0) {
- new_statloc = 0;
- } else {
- new_statloc -= edlist.sqstart;
- }
- /*
- */
- new_slct = edlist.slctloc
- - AbsSqToRel( edlist.sqstart + edlist.statloc,
- edlist.sqstart + new_statloc);
- chgEdList( new_statloc, new_slct, OFF);
- }
- /*
- * contents : select the edit items by mouse
- */
- /*ARGSUSED*/
- void
- EHeBulB_eMEv( Widget widget, caddr_t clientData, XEvent *e )
- {
- int px, py;
- int downbutton;
- if (edpane.pix_w * edpane.pix_h == 0 ) {
- return;
- }
- if( e->type == ButtonPress ){
- em.drag_f = ON;
- }
- if( (edg.code == 0) || (em.drag_f == OFF) )
- return;
- if( e->type == ButtonRelease ){
- em.drag_f = OFF;
- }
- px = e->xbutton.x / edpane.pix_w;
- py = e->xbutton.y / edpane.pix_h;
- if (( e->type == ButtonPress) || (e->type == ButtonRelease)){
- downbutton = e->xbutton.button;
- }else if ( e->type == MotionNotify ){
- if ( e->xmotion.state & Button1Mask ){
- downbutton = 1; /* select button */
- }else if ( e->xmotion.state & Button2Mask ){
- downbutton = 2; /* adjust button */
- } else {
- downbutton = 0;
- }
- }
- switch( downbutton ) {
- case 1:
- switch( em.proc ) {
- case PROC_POINT:
- resetEditMode( RES_MSG | RES_PROC | RES_SLCT | RES_RSV );
- musPoint( e->type, px, py );
- break;
- case PROC_LINE:
- resetEditMode( RES_MSG | RES_PROC | RES_SLCT | RES_RSV );
- musLine( e->type, px, py );
- break;
- case PROC_CIRCLE:
- resetEditMode( RES_MSG | RES_PROC | RES_SLCT | RES_RSV );
- musCircle( e->type, px, py );
- break;
- case PROC_RECT:
- resetEditMode( RES_MSG | RES_PROC | RES_SLCT | RES_RSV );
- musRect( em.proc, e->type, px, py );
- break;
- case PROC_ERASE:
- resetEditMode( RES_MSG | RES_PROC | RES_SLCT | RES_RSV );
- musPoint( e->type, px, py );
- break;
- case PROC_SELECT:
- musRegionProc( em.proc, e->type, px, py );
- break;
- default:
- break;
- }
- break;
- case 2:
- if( (0 <= px) && (px < edg.width) && (0 <= py) && (py < edg.height) ) {
- resetEditMode( RES_MSG | RES_PROC | RES_SLCT | RES_RSV );
- switch( e->type ) {
- case MotionNotify:
- if( (em.adj_px == px) && (em.adj_py == py) )
- return;
- break;
- case ButtonPress:
- em.adj_px = px;
- em.adj_py = py;
- if( bitRead(edg.ptn, px, py) == 0 ) {
- bitSet( edg.ptn, px, py );
- DrawPointEdPn( px,py, 1 );
- DrawPointDpPn( px,py, 1 );
- }
- else {
- bitReset( edg.ptn, px, py );
- DrawPointEdPn( px,py, 0 );
- DrawPointDpPn( px,py, 0 );
- }
- edg.flag = ON;
- break;
- default:
- return;
- }
- }
- default:
- break;
- }
- }
- /*
- * contents : restore the editting pane
- */
- /*ARGSUSED*/
- void
- EHeBulB_eExp( Widget widget, caddr_t clientData, XEvent *e )
- {
- int x1, y1;
- int x2, y2;
- if (edpane.pix_w * edpane.pix_h == 0 ) {
- return;
- }
- x1 = e->xexpose.x / edpane.pix_w;
- y1 = e->xexpose.y / edpane.pix_h;
- x2 = (e->xexpose.x + e->xexpose.width - 1) / edpane.pix_w;
- y2 = (e->xexpose.y + e->xexpose.height - 1) / edpane.pix_h;
- DrawRectEdPn( x1, y1, x2, y2 );
- DrawBorderEdPn( x1, y1, x2, y2 );
- }
- /*
- * contents : specifies the drawing operation (Pont/Line/Rectangle/Circle)
- */
- /*ARGSUSED*/
- void
- CBeRecB_obj( Widget widget, int obj, XmToggleButtonCallbackStruct *call)
- {
- extern void SelectUnset();
- if (call->set == False)
- return;
- resetEditMode( RES_MSG | RES_RSV | RES_SLCT );
- if (obj == PROC_ERASE)
- edpane.color = OFF;
- else
- edpane.color = ON;
- edpane.obj = obj;
- em.proc = obj;
- if (obj != PROC_SELECT) {
- if (select_x || select_y || select_w || select_h) {
- rubBand( r1_x, r1_y, r2_x, r2_y );
- select_x = select_y = select_w = select_h = 0;
- SelectUnset();
- }
- }
- }
- /*
- * contents : restore the displaying pane
- */
- /*ARGSUSED*/
- void
- EHeBulB_dExp( Widget widget, caddr_t clientData )
- {
- if (xl.display == NULL ){
- return;
- }
- DrawDpPn();
- }
- /*
- * contents : set the range to be add or deleted
- */
- static int
- codeAreaSet(int *s_code, int *e_code)
- {
- char *str;
- char delm;
- str = MngCodeTfValue();
- delm = '\0';
- *s_code = 0;
- *e_code = 0;
- if (!str || !*str){
- return(-1);
- }
- sscanf( str, "%x %c %x", s_code, &delm, e_code );
- if (str) free( str );
- switch( delm ) {
- case '\0':
- *e_code = *s_code;
- break;
- case '-':
- break;
- default:
- return(-1);
- }
- if( codeCheck(*s_code) || codeCheck(*e_code) ||
- (*s_code > *e_code) ) {
- return(-1);
- }
- return(0);
- }
- /****************************************************************
- * callback routines (character management window) *
- ***************************************************************/
- Boolean
- BeforeMngCheck(int *s_code, int *e_code)
- {
- if(codeAreaSet(s_code, e_code) == -1) {
- DispMngErrorMessage( resource.me_illegal_code );
- return(False);
- }
- return(True);
- }
- void
- DoAddProc(int s_code, int e_code)
- {
- int code;
- int s_ncode;
- int e_ncode;
- char ptn[MAXPTNBYTE];
- char mode;
- int i;
- resetEditMode( RES_MSG | RES_PROC | RES_SLCT | RES_RSV );
- s_ncode = codeToNo( s_code );
- e_ncode = codeToNo( e_code );
- mode = OFF;
- bitPtnClear( ptn );
- for( i=s_ncode ; i <= e_ncode ; i++ ) {
- code = noToCode(i);
- if ( codeCheck( code))
- continue;
- if (ptnSense(code) == 0) {
- if(ptnAdd(code, ptn) != 1) {
- UpdateMessage( resource.me_non_memory );
- return;
- }
- edg.flag = ON;
- mode = ON;
- edlist.nptn++;
- }
- }
- if( ptnSense( edg.code ) == 1 ) {
- ptnAdd( edg.code, edg.ptn );
- }
- if(mode == ON) {
- chgEdCode( s_code, mode );
- }
- resetEditMode( RES_MSG | RES_PROC | RES_SLCT | RES_RSV );
- }
- void PopupDelNotice();
- Widget CreateDelNotice();
- void
- DoDelProc( int s_code, int e_code )
- {
- resetEditMode( RES_MSG | RES_PROC | RES_SLCT | RES_RSV );
- if( ptnSense( edg.code) == 1 )
- ptnAdd( edg.code, edg.ptn );
- dn.s_ncode = codeToNo( s_code );
- dn.e_ncode = codeToNo( e_code );
- if (setRealDelArea(&dn.s_ncode, &dn.e_ncode, &dn.sq_start, &dn.sq_end) == -1) {
- DispMngErrorMessage( resource.me_nodelete_code );
- return;
- }
- dn.sq_top = dn.sq_start;
- dn.disp_num = AbsSqToRel( dn.sq_start, dn.sq_end) + 1;
- dn.disp_num = (dn.disp_num <= D_MAX) ? dn.disp_num : D_MAX;
- PopupDelNotice( mngPtnW );
- }
- /*
- * contents : get the real range to be add or delete
- */
- static int
- setRealDelArea(int *s_ncode, int *e_ncode, int *sq_start, int *sq_end )
- {
- int ncode;
- int flg;
- int sq;
- int i;
- /* first code */
- flg = 0;
- ncode = *e_ncode;
- for( i=*s_ncode ; i <= ncode ; i++ ) {
- if (((sq = ptnNoToSq(i)) != -1) && (codeCheck( noToCode(i)) == 0)) {
- flg = 1;
- break;
- }
- }
- if (flg == 1) {
- *s_ncode = ptnSqToNo( sq );
- *sq_start = sq;
- } else {
- return(-1);
- }
- /* last code */
- flg = 0;
- ncode = *s_ncode;
- for( i=*e_ncode ; i >= ncode ; i-- ) {
- if ((( sq = ptnNoToSq(i)) != -1) && (codeCheck( noToCode(i) ) == 0)) {
- flg = 1;
- break;
- }
- }
- *e_ncode = ptnSqToNo( sq );
- *sq_end = sq;
- return(0);
- }
- /****************************************************************
- * callback routines (Copy) *
- ****************************************************************/
- static int
- CpySrcCodeCheck(void)
- {
- char *str;
- char delm;
- str = CpySrcCodeTfValue();
- if (!str)
- return(-1);
- if (!*str) {
- free(str);
- return(-1);
- }
- delm = '\0';
- cpm.s1_code = 0;
- cpm.s2_code = 0;
- sscanf( str, "%x %c %x", &cpm.s1_code,&delm, &cpm.s2_code );
- free( str );
- switch( delm ) {
- case '\0':
- cpm.s2_code = cpm.s1_code;
- break;
- case '-':
- break;
- default:
- return(-1);
- }
- if (cpm.s1_code > cpm.s2_code)
- return(-1);
- return(0);
- }
- static int
- CpyDestCodeCheck(void)
- {
- char *str;
- str = CpyDestCodeTfValue();
- if (!str)
- return(-1);
- if (!*str){
- free(str);
- return(-1);
- }
- cpm.d1_code = 0;
- sscanf( str, "%x", &cpm.d1_code );
- free( str );
- if( codeCheck(cpm.d1_code) ) {
- return(-1);
- }
- return(0);
- }
- Boolean
- BeforeCpyCheck( int proc )
- {
- int s_ncode, e_ncode;
- int r1_code, r2_code;
- int no;
- int i;
- char rstr[30];
- extern void PopupCpyNotice();
- if (copyFontData.xlfdname == NULL) {
- DispCpyErrorMessage(resource.me_non_srcfile);
- return(False);
- }
- if (CpySrcCodeCheck() == -1){
- DispCpyErrorMessage( resource.me_illegal_srccode );
- return(False);
- }
- if (CpyDestCodeCheck() == -1){
- DispCpyErrorMessage( resource.me_illegal_destcode );
- return(False);
- }
- s_ncode = codeToNo( cpm.d1_code );
- e_ncode = codeToNo( cpm.d1_code + cpm.s2_code - cpm.s1_code);
- r1_code = r2_code = 0;
- for( i=s_ncode ; i <= e_ncode ; i++ ) {
- no = ptnSqToNo(i);
- if (( no >= 0) && (codeCheck( noToCode( no)) == 0)) {
- if(r1_code == 0)
- r1_code = noToCode(i);
- r2_code = noToCode(i);
- }
- }
- cpm.proc = proc;
- if( r1_code != 0 ) {
- if( r1_code == r2_code ) {
- sprintf( rstr, "%s %x¡¡", resource.l_code, r1_code );
- } else if ( codeCheck(r1_code) && codeCheck(r2_code)){
- sprintf( rstr, " %x - %x", r1_code, r2_code );
- } else {
- sprintf( rstr, "%s %x - %x ", resource.l_code_range, r1_code, r2_code );
- }
- PopupCpyNotice(rstr);
- return(False);
- }
- return(True);
- }
- void
- DoCpyProc(void)
- {
- extern void PopdownCpyPtn();
- PopdownCpyPtn();
- resetEditMode( RES_MSG | RES_PROC | RES_SLCT | RES_RSV );
- copyPatterns( cpm.fdata, cpm.s1_code, cpm.s2_code, cpm.d1_code, cpm.proc );
- }
- /****************************************************************
- * main routine *
- ****************************************************************/
- #define R(name, class, member,def) { \
- name, \
- class, \
- XtRString, \
- sizeof(char *), \
- XtOffsetOf(Resource, member), \
- XtRString, \
- (XtPointer)def }
- #define RBoolean(name, class, member,def) \
- { name, class, XtRBoolean, sizeof(XtRBoolean), \
- XtOffsetOf(Resource, member), XtRString, (XtPointer)def }
- #define RDimension(name, class, member,def) \
- { name, class, XtRDimension, sizeof(XtRDimension), \
- XtOffsetOf(Resource, member), XtRString, (XtPointer)def }
- #define Rint(name, class, member,def) \
- { name, class, XtRInt, sizeof(XtRInt), \
- XtOffsetOf(Resource, member), XtRString, (XtPointer)def }
- #define RPixel(name, class, member,def) \
- { name, class, XtRPixel, sizeof(XtRPixel), \
- XtOffsetOf(Resource, member), XtRString, (XtPointer)def }
- static XtResource app_resources[] = {
- RBoolean("Codepoint", "codepoint", codepoint, "False"),
- R( "lptog", "Lptog", l_ptog, DFLTPATH ),
- R( "lptogCmd", "LptogCmd", l_ptog_cmd, DFLTCMD ),
- /* CreateCaptionFrame() */
- RBoolean( "captResize", "CaptResize", capt_resize, "True" ) ,
- Rint( "captLftoff", "CaptLftoff", capt_lftoff, "2" ) ,
- Rint( "captTopoff", "CaptTopoff", capt_topoff, "2" ) ,
- Rint( "captRghoff", "CaptRghoff", capt_rghoff, "2" ) ,
- RPixel( "paneBackground", "paneBackground", pane_background, "white" ),
- RPixel( "paneForeground", "PaneForeground", pane_foreground, "black" ),
- RPixel( "background", "Background", background, "white" ),
- RPixel( "foreground", "Foreground", foreground, "black" ),
- /* CreateMenuButtons() */
- RDimension( "menuMargin", "MenuMargin", menu_margin, "0" ) ,
- /* CreateDialogAndButtons() */
- RBoolean( "diaTmAutomng", "DiaTmAutomng", dia_tm_automng, "False" ) ,
- RDimension( "diaTmWidth", "DiaTmWidth", dia_tm_width, "4" ) ,
- RDimension( "diaTmHeight", "DiaTmHeight", dia_tm_height, "4" ) ,
- RBoolean( "diaTmResize", "DiaTmResize", dia_tm_resize, "True" ) ,
- RBoolean( "diaTmMinimize", "DiaTmMinimize", dia_tm_minimize, "True" ) ,
- RDimension( "diaRwWidth", "DiaRwWidth", dia_rw_width, "6" ) ,
- RDimension( "diaRwHeight", "DiaRwHeight", dia_rw_height, "6" ) ,
- RDimension( "diaRwSpacing", "DiaRwSpacing", dia_rw_spacing, "4" ) ,
- /* CreateDrawingArea() */
- RDimension( "drawBorder", "DrawBorder", draw_border, "1" ) ,
- Rint( "drawTopoff", "DrawTopoff", draw_topoff, "2" ) ,
- Rint( "drawLftoff", "DrawLftoff", draw_lftoff, "2" ) ,
- /* PopupNotice() */
- RBoolean( "popResize", "PopResize", pop_resize , "True" ) ,
- RBoolean( "popMinimize", "PopMinimize", pop_minimize , "True" ) ,
- /* CreateTemplateDialog() */
- RBoolean( "tempResize", "TempResize", temp_resize, "True" ) ,
- RBoolean( "tempMinimize", "TempMinimize", temp_minimize, "True" ) ,
- RDimension( "tempWidth", "TempWidth", temp_width, "1" ) ,
- RDimension( "tempHeight", "TempHeight", temp_height, "1" ) ,
- /* CreateMenuBarAndFooterMessageForm() */
- Rint( "edBarTopoff", "EdBarTopoff", ed_bar_topoff, "1" ) ,
- Rint( "edBarLftoff", "EdBarLftoff", ed_bar_lftoff, "1" ) ,
- Rint( "edBarRghoff", "EdBarRghoff", ed_bar_rghoff, "1" ) ,
- Rint( "edFrmBtmoff", "EdFrmBtmoff", ed_frm_btmoff, "3" ) ,
- Rint( "edFrmLftoff", "EdFrmLftoff", ed_frm_lftoff, "3" ) ,
- Rint( "edFrmRghoff", "EdFrmRghoff", ed_frm_rghoff, "3" ) ,
- RDimension( "edMsgMargintop", "EdMsgMargintop", ed_msg_margintop, "3" ) ,
- RDimension( "edMsgMarginbtm", "EdMsgMarginbtm", ed_msg_marginbtm, "3" ) ,
- RDimension( "edMesgMargintop", "EdMesgMargintop", ed_mesg_margintop, "3" ) ,
- RDimension( "edMesgMarginbtm", "EdMesgMarginbtm", ed_mesg_marginbtm, "3" ) ,
- Rint( "edSepBtmoff", "EdSepBtmoff", ed_sep_btmoff, "3" ) ,
- Rint( "edSepLftoff", "EdSepLftoff", ed_sep_lftoff, "0" ) ,
- Rint( "edSepRghoff", "EdSepRghoff", ed_sep_rghoff, "0" ) ,
- RDimension( "edSepMargin", "EdSepMargin", ed_sep_margin, "0" ) ,
- Rint( "edWgeTopoff", "EdWgeTopoff", ed_wge_topoff, "10" ) ,
- Rint( "edWgeLftoff", "EdWgeLftoff", ed_wge_lftoff, "10" ) ,
- Rint( "edWgeRghoff", "EdWgeRghoff", ed_wge_rghoff, "10" ) ,
- Rint( "edWgeBtmoff", "EdWgeBtmoff", ed_wge_btmoff, "10" ) ,
- /* CreateFrame() */
- RBoolean( "frameResize", "FrameResize", frame_resize, "False" ) ,
- /* CreateScrollBase() */
- RDimension( "scllFrWidth", "ScllFrWidth", scll_fr_width, "500" ) ,
- RDimension( "scllFrThick", "ScllFrThick", scll_fr_thick, "2" ) ,
- Rint( "scllBarLftoff", "ScllBarLftoff", scll_bar_lftoff, "4" ) ,
- };
- #undef R
- #undef RBoolean
- #undef RDimension
- #undef Rint
- #undef RPixel
- int CodePoint = False;
- /*ARGSUSED*/
- static void
- xerror(Display *d, XErrorEvent *ev)
- {
- fprintf (stderr, "dtudcfonted: warning, error event receieved.\n");
- exit(-1);
- }
- int
- main(int argc, char *argv[])
- {
- static char class_name[] = "Dtudcfonted";
- int i;
- /* initialize GUI */
- toplevel = GuiInitialize(&app, class_name, &argc, argv);
- /* get application's resources */
- XtGetApplicationResources( toplevel, &resource,
- app_resources, XtNumber(app_resources), NULL, 0);
- if (resource.codepoint)
- CodePoint = True;
- /* initialize the code range */
- for( i=1 ; i < argc ; i++ ) {
- if( !strcmp(argv[i],"-pane_size") ) {
- i++;
- edpane_size = atoi( argv[i] );
- } else if( !strcmp(argv[i],"-codepoint") ) {
- CodePoint = True;
- }
- }
- resource.mg_write_snf = GETMESSAGE(2, 2, "Registration processing inside.");
- resource.me_write_snf = GETMESSAGE(2, 4, "Failed in the registration of the character.");
- resource.me_illegal_code = GETMESSAGE(2, 6, "Illegal code.");
- resource.me_non_memory = GETMESSAGE(2, 8, "Because the memory allocation cannot be done, it is not possible to add.");
- resource.mg_non_code = GETMESSAGE(2, 10, "There is no character of the specified code.");
- resource.me_illegal_srccode = GETMESSAGE(2, 12, "The mistake is found in the specified copy origin code.");
- resource.me_illegal_destcode = GETMESSAGE(2, 14, "The mistake is found in the specified copy target code.");
- resource.me_nodelete_code = GETMESSAGE(2, 16, "There is no character in the specified area.");
- resource.me_wait = GETMESSAGE(2, 18, "Please wait for a while.");
- resource.me_non_srcfile = GETMESSAGE(2, 20, "No copy origin code file is specified.");
- resource.mn_no_font = GETMESSAGE(2, 22, "Informations of user defined character cannot collect.\nThere is no font specified.");
- resource.mn_plural_font = GETMESSAGE(2, 24, "Informations of user defined character cannot collect.\nThere are plural fonts specified.");
- resource.mn_not_udc = GETMESSAGE(2, 26, "The specified font do not have any UDCs areas.");
- resource.mn_no_mem = GETMESSAGE(2, 28, "There are no memories any more.");
- resource.mn_illegal_area = GETMESSAGE(2, 30, "The information of UDCs area is illegal.");
- resource.mn_no_read = GETMESSAGE(2, 32, "The font file cannot read.\nPattern area was broken.");
- resource.mn_prop_font = GETMESSAGE(2, 34, "Dtudcfonted cannot edit proportional character font.");
- resource.mn_saved_open = GETMESSAGE(2, 36, "There are unsaved edits.\nDo you want to save them before opening?");
- resource.mn_saved_exit = GETMESSAGE(2, 38, "There are unsaved edits.\nDo you want to save them before exiting?");
- resource.mn_cpy_lost = GETMESSAGE(2, 40, "When the copy processing is done, the glyph\nimage within the following ranges is changed.\nDo you want to do the copy processing?\n\n");
- resource.mn_no_perm = GETMESSAGE(2, 42, "No write permission for this font. You should change the file access mode before saving.\n");
- resource.l_selectitem = GETMESSAGE(2, 100, "Select Items"); /* font open */
- resource.l_codeset = GETMESSAGE(2, 102, " CodeSet:");
- resource.l_style = GETMESSAGE(2, 104, " Style:");
- resource.l_width = GETMESSAGE(2, 106, " Width:");
- resource.l_height = GETMESSAGE(2, 108, " Height:");
- resource.exec_label = GETMESSAGE(2, 110, "Open");
- resource.quit_label = GETMESSAGE(2, 112, "Quit");
- resource.l_font = GETMESSAGE(2, 114, "Font"); /* menu bar */
- resource.l_edit = GETMESSAGE(2, 116, "Edit");
- resource.l_manage = GETMESSAGE(2, 118, "Character");
- resource.l_info = GETMESSAGE(2, 120, "Information");
- resource.l_open_w = GETMESSAGE(2, 122, "Open"); /* font menu */
- resource.l_save = GETMESSAGE(2, 124, "Save");
- resource.l_exit = GETMESSAGE(2, 126, "Exit");
- resource.l_clear = GETMESSAGE(2, 128, "Clear"); /* edit menu */
- resource.l_set = GETMESSAGE(2, 130, "Set");
- resource.l_reverse = GETMESSAGE(2, 132, "Reverse");
- resource.l_cut = GETMESSAGE(2, 134, "Cut");
- resource.l_Copy = GETMESSAGE(2, 135, "Copy");
- resource.l_paste = GETMESSAGE(2, 136, "Paste");
- resource.l_roll = GETMESSAGE(2, 138, "Rotate");
- resource.l_updown_roll = GETMESSAGE(2, 140, "Vertical Roll");
- resource.l_leftright_roll = GETMESSAGE(2, 142, "Horizontal Roll");
- resource.l_undo = GETMESSAGE(2, 144, "Undo");
- resource.l_manage_w = GETMESSAGE(2, 146, "Add/Delete..."); /* character menu */
- resource.l_copy_w = GETMESSAGE(2, 148, "Copy...");
- resource.l_xlfd = GETMESSAGE(2, 150, "XLFD name..."); /* information menu */
- resource.l_codearea = GETMESSAGE(2, 152, "Code Area...");
- resource.l_add = GETMESSAGE(2, 154, "Add"); /* add/delete dialog */
- resource.l_delete = GETMESSAGE(2, 156, "Delete");
- resource.l_cancel = GETMESSAGE(2, 158, "Cancel");
- resource.l_manage_code = GETMESSAGE(2, 160, "Code(hex):"); /* copy dialog */
- resource.l_copy_src_code = GETMESSAGE(2, 162, " Copy origin code(hex):");
- resource.l_copy_dest_code = GETMESSAGE(2, 164, "Copy target code(hex):");
- resource.l_copy = GETMESSAGE(2, 166, "Copy");
- resource.l_overlay = GETMESSAGE(2, 168, "Overlay");
- resource.l_ok = GETMESSAGE(2, 170, "OK");
- resource.l_do_save = GETMESSAGE(2, 172, "Save"); /* unsaved edits */
- resource.l_dont_save = GETMESSAGE(2, 174, "Do not Save");
- resource.l_do_save_exit = GETMESSAGE(2, 176, "Save and Exit");
- resource.l_dont_save_exit = GETMESSAGE(2, 178, "Do not Save and Exit");
- resource.mg_start_del_s = GETMESSAGE(2, 180, "The following character will be deleted."); /* delete notice dialog */
- resource.mg_start_del_cs = GETMESSAGE(2, 182, "character");
- resource.mg_start_del_m = GETMESSAGE(2, 184, "The following characters will be deleted.");
- resource.mg_start_del_cm = GETMESSAGE(2, 186, "characters");
- resource.mg_register = GETMESSAGE(2, 188, "Register completed");
- resource.l_code = GETMESSAGE(2, 190, " Code : ");
- resource.l_code_range = GETMESSAGE(2, 192, " Code range : ");
- resource.message = GETMESSAGE(2, 194, "Message : ");
- resource.code = GETMESSAGE(2, 196, "code..."); /* code dialog */
- resource.previous = GETMESSAGE(2, 198, "Page up");
- resource.next = GETMESSAGE(2, 200, "Page down");
- resource.apply = GETMESSAGE(2, 202, "Apply");
- resource.l_question_title = GETMESSAGE(2, 204, "dtudcfonted - Question");
- resource.l_warning_title = GETMESSAGE(2, 206, "dtudcfonted - Warning");
- resource.l_error_title = GETMESSAGE(2, 208, "dtudcfonted - Error");
- resource.l_copy_title = GETMESSAGE(2, 210, "dtudcfonted - Copy");
- resource.l_open_title = GETMESSAGE(2, 212, "dtudcfonted - Open");
- resource.l_add_title = GETMESSAGE(2, 214, "dtudcfonted - Add/Delete");
- resource.l_xlfd_title = GETMESSAGE(2, 216, "dtudcfonted - XLFD");
- resource.l_codearea_title = GETMESSAGE(2, 218, "dtudcfonted - CodeArea");
- resource.file_name = GETMESSAGE(2, 230, "File name");
- resource.xlfd_name = GETMESSAGE(2, 232, "XLFD name");
- resource.codearea = GETMESSAGE(2, 234, "Code area");
- resource.falerrmsg[0] = GETMESSAGE(2, 300, "Fatal error occurred.");
- resource.falerrmsg[1] = GETMESSAGE(2, 301, "Cannot open the font file.");
- resource.falerrmsg[2] = GETMESSAGE(2, 302, "Cannot read the font file.");
- resource.falerrmsg[3] = GETMESSAGE(2, 303, "There is no more memory.");
- resource.falerrmsg[4] = GETMESSAGE(2, 304, "Fatal error occurred.");
- resource.falerrmsg[5] = GETMESSAGE(2, 305, "The specified font file does not exist.");
- resource.falerrmsg[6] = GETMESSAGE(2, 306, "This font is not a pcf or snf font.");
- resource.falerrmsg[7] = GETMESSAGE(2, 307, "Cannot open fonts.list file.");
- resource.falerrmsg[8] = GETMESSAGE(2, 308, "The format of fonts.list file is illegal.");
- resource.falerrmsg[9] = GETMESSAGE(2, 309, "The descriptions of the fonts.list file are incorrect.");
- resource.falerrmsg[10] = GETMESSAGE(2, 310, "The format of fonts.list file is illegal.");
- resource.falerrmsg[11] = GETMESSAGE(2, 311, "Cannot open fonts.dir file.");
- resource.falerrmsg[12] = GETMESSAGE(2, 312, "Cannot read fonts.dir file.");
- resource.falerrmsg[13] = GETMESSAGE(2, 313, "Cannot read font properties.");
- resource.falerrmsg[14] = GETMESSAGE(2, 314, "Cannot get FONT property.");
- resource.falerrmsg[15] = GETMESSAGE(2, 315, "Cannot get FAMILY_NAME property.");
- resource.falerrmsg[16] = GETMESSAGE(2, 316, "This font file is already opened by other application.");
- resource.falerrmsg[17] = GETMESSAGE(2, 317, "Cannot lock font file.");
- resource.falerrmsg[18] = GETMESSAGE(2, 318, "Cannot unlock font file.");
- resource.falerrmsg[19] = GETMESSAGE(2, 319, "Cannot get lock information from the font file.");
- resource.falerrmsg[20] = GETMESSAGE(2, 320, "Cannot find the specified font file.");
- resource.falerrmsg[21] = GETMESSAGE(2, 321, "Cannot read NLS database.");
- resource.falerrmsg[22] = GETMESSAGE(2, 322, "Cannot get charset names from NLS database.");
- resource.falerrmsg[23] = GETMESSAGE(2, 323, "Charset name not defined in NLS database.");
- resource.falerrmsg[24] = GETMESSAGE(2, 324, "The specified font has not been opened.");
- resource.falerrmsg[25] = GETMESSAGE(2, 325, "Fatal error occurred.");
- xlfdDialog = NULL ;
- cpyDialog = NULL ;
- /* initialize the global values and allocate the memories */
- xeg_init();
- /* displays the selection window */
- PopupSelectXLFD(toplevel);
- XSetErrorHandler((XErrorHandler)xerror);
- XSetIOErrorHandler((XIOErrorHandler)xerror);
- /* main loop */
- XtAppMainLoop(app);
- return(-1);
- }
- /*
- * contents : initialize the global values
- */
- static void
- xeg_init(void)
- {
- int i;
- edg.code = edg.ncode = 0;
- bitPtnClear( edg.ptn );
- edg.flag = (char)0;
- edlist.nlist = EDLIST_MAX;
- edlist.statloc = edlist.slctloc = 0;
- edlist.nptn = 0;
- edlist.sqstart = 0;
- edlist.list_h = edlist.elem_w = edlist.elem_h = (Dimension)0;
- edlist.back = resource.pane_background;
- edlist.border = resource.pane_foreground;
- if ( edpane_size ){
- edpane.width = edpane_size;
- edpane.height = edpane_size;
- } else {
- edpane.width = EDPANE_SIZE;
- edpane.height = EDPANE_SIZE;
- }
- edpane.pix_w = edpane.pix_h = 0;
- edpane.color = 0;
- edpane.obj = 0;
- edpane.back = resource.pane_background;
- edpane.border = resource.pane_foreground;
- xl.display = NULL;
- xl.root_winID = xl.edit_winID = xl.disp_winID = xl.list_winID =
- (Window)NULL;
- xl.borderGC = xl.backGC = xl.rubGC = xl.dashGC = (GC)NULL;
- xl.dispImage = NULL;
- dn.elem_w = dn.elem_h = (Dimension)0;
- dn.ptn_w = dn.ptn_h = (Dimension)0;
- dn.list_h = (Dimension)0;
- dn.s_ncode = dn.e_ncode = 0;
- dn.sq_top = dn.sq_start = dn.sq_end = 0;
- dn.disp_num = 0;
- for ( i=0 ; i<D_MAX ; i++ ) {
- dl[i].disp_winID = (Window)NULL;
- dl[i].dispImage = NULL;
- bitPtnClear( dl[i].ptn );
- }
- for ( i=0 ; i<EDLIST_MAX ; i++ ) {
- dl_glyph[i].disp_winID = (Window)NULL;
- dl_glyph[i].dispImage = NULL;
- bitPtnClear( dl_glyph[i].ptn );
- sq_disp[i] = 0 ;
- }
- em.drag_f = OFF;
- em.adj_px = em.adj_py = 0;
- em.proc = em.slct_f = 0;
- em.src1_px = em.src1_py = 0;
- em.src2_px = em.src2_py = 0;
- em.dest_px = em.dest_py = 0;
- em.rsv_f = (char)0;
- bitPtnClear( em.rsv_ptn );
- cpm.s1_code = cpm.s2_code = cpm.d1_code = 0;
- cpm.proc = 0;
- return;
- }
- /****************************************************************
- * distroy the "User defined character editor" window *
- ****************************************************************/
- /*
- * contents : destroy the editting window
- */
- static void
- dstrypaneEditPtn(void)
- {
- int i ;
- ptnClose();
- XFree( (char *)xl.dispImage );
- XFreeGC( xl.display, xl.borderGC );
- XFreeGC( xl.display, xl.backGC );
- XFreeGC( xl.display, xl.rubGC );
- XFreeGC( xl.display, xl.dashGC );
- for( i=0; i<EDLIST_MAX; i++ ){
- if( dl_glyph[i].dispImage ){
- XFree( (char *)dl_glyph[i].dispImage );
- dl_glyph[i].dispImage = NULL ;
- }
- }
- XtPopdown( editPopW );
- XtDestroyWidget( editPopW );
- return;
- }
- /****************************************************************
- * update character list *
- ***************************************************************/
- /*
- * contents : add the specified code to the character list
- */
- void
- chgEdCode( int code, char mode )
- {
- int ncode;
- int esq;
- int statloc;
- int slctloc;
- int slimax;
- if( code == 0 ) {
- esq = -1;
- } else {
- ncode = codeToNo( code );
- esq = ptnNoToSq( ncode ) - edlist.sqstart;
- }
- if( esq < 0 ) {
- slctloc = -1;
- statloc = 0;
- } else if (efctPtnNum() <= edlist.nlist) {
- statloc = 0;
- slctloc = AbsSqToRel(edlist.sqstart, ptnNoToSq( ncode));
- } else {
- if ((esq >= edlist.statloc)
- && (esq <= (RelToAbsSq( edlist.sqstart + edlist.statloc,
- edlist.nlist - 1) - edlist.sqstart))){
- statloc = edlist.statloc;
- slctloc = AbsSqToRel(edlist.sqstart+statloc,
- edlist.sqstart + esq);
- } else {
- statloc = esq;
- slctloc = 0;
- }
- while( RelToAbsSq(edlist.sqstart+statloc, edlist.nlist - 1) < 0)
- statloc = RelToAbsSq( edlist.sqstart + statloc, -1)
- - edlist.sqstart;
- slctloc = AbsSqToRel( edlist.sqstart + statloc, edlist.sqstart + esq);
- }
- n = 0;
- if (( slimax = efctPtnNum()) < edlist.nlist)
- slimax = edlist.nlist;
- XtSetArg( arg[n], XmNmaximum, (XtArgVal)slimax ); n++;
- XtSetArg( arg[n], XmNvalue, (XtArgVal)AbsSqToRel( edlist.sqstart, edlist.sqstart + statloc) ); n++;
- XtSetValues( wgeScro , arg, n );
- chgEdList( statloc, slctloc, mode );
- chgEdPtn( code );
- }
- /*
- * contents : rewrite the character list
- */
- void
- chgEdList( int statloc, int slctloc, char mode )
- {
- int sq;
- int i;
- char str[6];
- int no;
- int code;
- extern void ListSetLabelStr();
- extern void ListSetGlyphImage();
- extern void ListUnselectItem();
- extern void ListSelectItem();
- if((mode == ON) || (edlist.statloc != statloc)){
- for (i=0, sq=edlist.sqstart+statloc; i < edlist.nlist; sq++){
- no = ptnSqToNo(sq);
- sq_disp[i] = sq ;
- if ((no >= 0) && (code = noToCode(no)) >= 0 ){
- sprintf(str, "%4x", code);
- ListSetLabelStr(i, str);
- ListSetGlyphImage(i) ;
- if (i == 0)
- edlist.statloc = sq - edlist.sqstart;
- i++;
- } else if (sq > ( edlist.sqstart + edlist.nptn - 1)){
- strcpy(str, " ");
- ListSetLabelStr(i, str);
- ListSetGlyphImage(i) ;
- i++;
- }
- }
- }
- if( (mode == ON) || (edlist.slctloc != slctloc) ) {
- if((0 <= edlist.slctloc) && (edlist.slctloc < edlist.nlist)){
- ListUnselectItem(edlist.slctloc);
- }
- if((0 <= slctloc) && (slctloc < edlist.nlist)){
- ListSelectItem(slctloc);
- }
- edlist.slctloc = slctloc;
- }
- }
- /*
- * contents : rewrite the editting pane
- */
- static void
- chgEdPtn( int code )
- {
- extern void SetCodeString();
- if (xl.display == NULL ){
- return;
- }
- if( code == 0 ) {
- XClearWindow( xl.display, xl.edit_winID );
- DrawBorderEdPn( 0, 0, edg.width - 1, edg.height - 1 );
- XClearWindow( xl.display, xl.disp_winID );
- XClearWindow( xl.display, xl.list_winID );
- bitPtnClear( edg.ptn );
- edg.code = 0;
- edg.ncode = 0;
- SetCodeString(0);
- }
- if( ptnGet( code, edg.ptn) == 0 ) {
- edg.code = code;
- edg.ncode = codeToNo( code );
- DrawRectEdPn( 0, 0, edg.width - 1, edg.height - 1 );
- SetCodeString(code);
- DrawDpPn();
- }
- }
- /****************************************************************
- * draw patterns to the editting pane *
- ***************************************************************/
- /*
- * contents : draw a rectangle
- *
- */
- static void
- DrawRectEdPn( int x1, int y1, int x2, int y2 )
- {
- int i, j, wk;
- short cx1, cy1, cx2, cy2;
- XRectangle recOn[MAXPTNSIZE*MAXPTNSIZE];
- XRectangle recOff[MAXPTNSIZE*MAXPTNSIZE];
- int nron, nroff;
- if (xl.display == NULL ){
- return;
- }
- if( x2 < x1 ) {
- wk = x2;
- x2 = x1;
- x1 = wk;
- }
- if( y2 < y1 ) {
- wk = y2;
- y2 = y1;
- y1 = wk;
- }
- nron = nroff = 0;
- for( j=y1 ; j <= y2 ; j++ ) {
- for( i=x1 ; i <= x2 ; i++ ) {
- cx1 = (short)(edpane.pix_w * i);
- cy1 = (short)(edpane.pix_h * j);
- cx2 = (short)(cx1 + edpane.pix_w - 1);
- cy2 = (short)(cy1 + edpane.pix_h - 1);
- if( bitRead( edg.ptn, i, j ) != 0 ) {
- recOn[nron].x = cx1;
- recOn[nron].y = cy1;
- recOn[nron].width = (unsigned short)(cx2 - cx1);
- recOn[nron].height = (unsigned short)(cy2 - cy1);
- nron++;
- }
- else {
- recOff[nroff].x = cx1;
- recOff[nroff].y = cy1;
- recOff[nroff].width = (unsigned short)(cx2 - cx1);
- recOff[nroff].height = (unsigned short)(cy2 - cy1);
- nroff++;
- }
- }
- }
- if( nron )
- XFillRectangles( xl.display, xl.edit_winID, xl.borderGC, recOn, nron );
- if( nroff )
- XFillRectangles( xl.display, xl.edit_winID, xl.backGC, recOff, nroff );
- }
- /*
- * contents : draw a lattice inside of the editting pane
- */
- static void
- DrawBorderEdPn( int x1, int y1, int x2, int y2 )
- {
- short cx1, cy1;
- short cx2, cy2;
- int ndseg;
- int wk, i;
- XSegment dseg[MAXPTNSIZE*2];
- if (xl.display == NULL ){
- return;
- }
- if( x2 < x1 ) {
- wk = x2;
- x2 = x1;
- x1 = wk;
- }
- if( y2 < y1 ) {
- wk = y2;
- y2 = y1;
- y1 = wk;
- }
- ndseg = 0;
- cx1 = (short)(edpane.pix_w * x1);
- cx2 = (short)(edpane.pix_w * x2 + edpane.pix_w - 1);
- for( i=y1 ; i <= y2 ; i++ ) {
- cy1 = (short)(edpane.pix_h * i + edpane.pix_h - 1);
- dseg[ndseg].x1 = cx1;
- dseg[ndseg].y1 = cy1;
- dseg[ndseg].x2 = cx2;
- dseg[ndseg].y2 = cy1;
- ndseg++;
- }
- cy1 = (short)(edpane.pix_h * y1);
- cy2 = (short)(edpane.pix_h * y2 + edpane.pix_h - 1);
- for( i=x1 ; i <= x2 ; i++ ) {
- cx1 = (short)(edpane.pix_w * i + edpane.pix_w - 1);
- dseg[ndseg].x1 = cx1;
- dseg[ndseg].y1 = cy1;
- dseg[ndseg].x2 = cx1;
- dseg[ndseg].y2 = cy2;
- ndseg++;
- }
- if( ndseg ) {
- XDrawSegments( xl.display, xl.edit_winID, xl.dashGC, dseg, ndseg);
- }
- }
- /*
- * contents : draw a dot
- */
- static void
- DrawPointEdPn( int x, int y, int mode )
- {
- int x1, y1;
- int x2, y2;
- if (xl.display == NULL ){
- return;
- }
- x1 = edpane.pix_w * x;
- y1 = edpane.pix_h * y;
- x2 = x1 + edpane.pix_w - 1;
- y2 = y1 + edpane.pix_h - 1;
- if( mode != 0 ) {
- XFillRectangle( xl.display, xl.edit_winID, xl.borderGC,
- x1, y1, x2-x1, y2-y1 );
- } else {
- XFillRectangle( xl.display, xl.edit_winID, xl.backGC,
- x1, y1, x2-x1, y2-y1 );
- }
- }
- /*
- * contents : draw a current character pattern to the display pane
- */
- static void
- DrawDpPn(void)
- {
- if (xl.display == NULL ){
- return;
- }
- XPutImage( xl.display, xl.disp_winID, xl.borderGC, xl.dispImage,
- 0, 0, 0, 0, edg.width, edg.height );
- if( xl.list_winID ) {
- XPutImage( xl.display, xl.list_winID, xl.borderGC,
- xl.dispImage, 0, 0, 0, 0, edg.width, edg.height );
- }
- }
- /*
- * contents : draw a dot
- */
- static void
- DrawPointDpPn( int x, int y, int mode )
- {
- if (xl.display == NULL ){
- return;
- }
- if( mode != 0 ){
- XDrawPoint( xl.display, xl.disp_winID, xl.borderGC, x, y );
- if (xl.list_winID)
- XDrawPoint( xl.display, xl.list_winID, xl.borderGC, x, y );
- } else {
- XDrawPoint( xl.display, xl.disp_winID, xl.backGC, x, y );
- if (xl.list_winID)
- XDrawPoint( xl.display, xl.list_winID, xl.backGC, x, y );
- }
- }
- /****************************************************************
- * draw patterns by mouse *
- ****************************************************************/
- /*
- * contents : draw a dot
- */
- static void
- musPoint( int evtype, int px, int py )
- {
- switch( evtype ) {
- case MotionNotify:
- if( (em.src1_px == px) && (em.src1_py == py) )
- return;
- break;
- case ButtonPress:
- em.src1_px = px;
- em.src1_py = py;
- break;
- default:
- return;
- }
- if( edpane.color == ON )
- bitSet( edg.ptn, px, py );
- else
- bitReset( edg.ptn, px, py );
- edg.flag = ON;
- DrawPointEdPn( px, py, edpane.color );
- DrawPointDpPn( px, py, edpane.color );
- }
- /*
- * contents : draw a line
- */
- static void
- musLine( int evtype, int px, int py )
- {
- int r1_x, r1_y;
- int r2_x, r2_y;
- int rx, ry;
- int harf_pix_w;
- int harf_pix_h;
- harf_pix_w = edpane.pix_w / 2;
- harf_pix_h = edpane.pix_h / 2;
- r1_x = em.src1_px * edpane.pix_w + harf_pix_w;
- r1_y = em.src1_py * edpane.pix_h + harf_pix_h;
- r2_x = em.src2_px * edpane.pix_w + harf_pix_w;
- r2_y = em.src2_py * edpane.pix_h + harf_pix_h;
- rx = px * edpane.pix_w + harf_pix_w;
- ry = py * edpane.pix_h + harf_pix_h;
- switch( evtype ) {
- case MotionNotify:
- if( (em.src2_px == px) && (em.src2_py == py) )
- return;
- rubLine( r1_x, r1_y, r2_x, r2_y );
- rubLine( r1_x, r1_y, rx, ry );
- em.src2_px = px;
- em.src2_py = py;
- return;
- case ButtonPress:
- em.src1_px = em.src2_px = px;
- em.src1_py = em.src2_py = py;
- return;
- default:
- if( (r1_x == r2_x) && (r1_y == r2_y) )
- return;
- rubLine( r1_x, r1_y, r2_x, r2_y );
- if ((em.src2_px < 0) || (em.src2_py < 0) ||
- (edg.width <= em.src2_px) || (edg.height <= em.src2_py))
- return;
- bitDrawLine( edg.ptn, em.src1_px, em.src1_py,
- em.src2_px, em.src2_py, edpane.color );
- edg.flag = ON;
- DrawRectEdPn( em.src1_px, em.src1_py, em.src2_px, em.src2_py );
- DrawDpPn();
- }
- }
- /*
- * contents : draw a circle
- */
- static void
- musCircle( int evtype, int px, int py )
- {
- int r1_x, r1_y;
- int r2_x, r2_y;
- int rx, ry;
- int harf_pix_w;
- int harf_pix_h;
- extern int bitDrawCircle();
- harf_pix_w = edpane.pix_w / 2;
- harf_pix_h = edpane.pix_h / 2;
- r1_x = em.src1_px * edpane.pix_w + harf_pix_w;
- r1_y = em.src1_py * edpane.pix_h + harf_pix_h;
- r2_x = em.src2_px * edpane.pix_w + harf_pix_w;
- r2_y = em.src2_py * edpane.pix_h + harf_pix_h;
- rx = px * edpane.pix_w + harf_pix_w;
- ry = py * edpane.pix_h + harf_pix_h;
- switch( evtype ) {
- case MotionNotify:
- if( (em.src2_px == px) && (em.src2_py == py) ) {
- return;
- }
- rubCircle( r1_x, r1_y, r2_x, r2_y );
- rubCircle( r1_x, r1_y, rx, ry );
- em.src2_px = px;
- em.src2_py = py;
- return;
- case ButtonPress:
- em.src1_px = em.src2_px = px;
- em.src1_py = em.src2_py = py;
- return;
- default:
- if( (em.src1_px == px) && (em.src1_py == py) ) {
- return;
- }
- rubCircle( r1_x, r1_y, r2_x, r2_y );
- if( (px < 0) || (py < 0) || (edg.width <= px) || (edg.height <= py) ) {
- return;
- }
- bitDrawCircle( edg.ptn, em.src1_px, em.src1_py, px, py, edpane.color);
- edg.flag = ON;
- DrawRectEdPn( 0, 0, edg.width -1, edg.height -1 );
- DrawDpPn();
- }
- }
- /*
- * contents : draw a rectangle
- */
- static void
- musRect( int proc, int evtype, int px, int py )
- {
- int r1_x, r1_y;
- int r2_x, r2_y;
- int rx, ry;
- int lux, luy;
- int width, height;
- int dpx, dpy, dp;
- if( (proc == PROC_ROLL) && (evtype != ButtonPress) ) {
- dpx = px - em.src1_px;
- dpy = py - em.src1_py;
- dp = (abs(dpx) > abs(dpy) ) ? abs(dpx) : abs(dpy);
- if( dpx != 0 )
- px = em.src1_px + dpx/abs(dpx) * dp;
- if( dpy != 0 )
- py = em.src1_py + dpy/abs(dpy) * dp;
- }
- r1_x = em.src1_px * edpane.pix_w + edpane.pix_w / 2;
- r1_y = em.src1_py * edpane.pix_h + edpane.pix_h / 2;
- r2_x = em.src2_px * edpane.pix_w + edpane.pix_w / 2;
- r2_y = em.src2_py * edpane.pix_h + edpane.pix_h / 2;
- rx = px * edpane.pix_w + edpane.pix_w / 2;
- ry = py * edpane.pix_h + edpane.pix_h / 2;
- switch( evtype ) {
- case MotionNotify:
- if( (em.src2_px == px) && (em.src2_py == py) )
- return;
- rubBand( r1_x, r1_y, r2_x, r2_y );
- rubBand( r1_x, r1_y, rx, ry );
- em.src2_px = px;
- em.src2_py = py;
- return;
- case ButtonPress:
- resetEditMode( RES_SLCT );
- em.src1_px = em.src2_px = px;
- em.src1_py = em.src2_py = py;
- return;
- default:
- resetEditMode( RES_MSG | RES_PROC );
- rubBand( r1_x, r1_y, r2_x, r2_y );
- if( (r1_x == r2_x) || (r1_y == r2_y) )
- return;
- if( (em.src2_px < 0) || (em.src2_py < 0) ||
- (edg.width <= em.src2_px) || (edg.height <= em.src2_py) )
- return;
- lux = (em.src1_px < em.src2_px ) ? em.src1_px : em.src2_px;
- luy = (em.src1_py < em.src2_py ) ? em.src1_py : em.src2_py;
- width = abs( em.src1_px - em.src2_px ) + 1;
- height = abs( em.src1_py - em.src2_py ) + 1;
- bitDrawRect(edg.ptn, lux, luy, width, height, edpane.color);
- edg.flag = ON;
- DrawRectEdPn( em.src1_px, em.src1_py, px, py );
- DrawDpPn();
- }
- }
- /*
- * contents : edit inside of the specified area (clear, reverse, rotate,etc.)
- */
- static void
- musRegionProc( int proc, int evtype, int px, int py )
- {
- int rx, ry;
- int dpx, dpy, dp;
- extern void SelectSet();
- if( (proc == PROC_ROLL) && (evtype != ButtonPress) ) {
- dpx = px - em.src1_px;
- dpy = py - em.src1_py;
- dp = (abs(dpx) > abs(dpy) ) ? abs(dpx) : abs(dpy);
- if( dpx != 0 )
- px = em.src1_px + dpx/abs(dpx) * dp;
- if( dpy != 0 )
- py = em.src1_py + dpy/abs(dpy) * dp;
- }
- r1_x = em.src1_px * edpane.pix_w + edpane.pix_w / 2;
- r1_y = em.src1_py * edpane.pix_h + edpane.pix_h / 2;
- r2_x = em.src2_px * edpane.pix_w + edpane.pix_w / 2;
- r2_y = em.src2_py * edpane.pix_h + edpane.pix_h / 2;
- rx = px * edpane.pix_w + edpane.pix_w / 2;
- ry = py * edpane.pix_h + edpane.pix_h / 2;
- switch( evtype ) {
- case MotionNotify:
- if( (em.src2_px == px) && (em.src2_py == py) )
- return;
- rubBand( r1_x, r1_y, r2_x, r2_y );
- rubBand( r1_x, r1_y, rx, ry );
- em.src2_px = px;
- em.src2_py = py;
- return;
- case ButtonPress:
- if (select_x || select_y || select_w || select_h) {
- rubBand( r1_x, r1_y, r2_x, r2_y );
- }
- resetEditMode( RES_SLCT );
- em.src1_px = em.src2_px = px;
- em.src1_py = em.src2_py = py;
- return;
- default:
- resetEditMode( RES_MSG | RES_PROC );
- select_x = select_y = select_w = select_h = 0;
- if( (r1_x == r2_x) || (r1_y == r2_y) ) {
- rubBand( r1_x, r1_y, r2_x, r2_y );
- return;
- }
- if( (em.src2_px < 0) || (em.src2_py < 0) ||
- (edg.width <= em.src2_px) || (edg.height <= em.src2_py) ) {
- rubBand( r1_x, r1_y, r2_x, r2_y );
- return;
- }
- select_x = (em.src1_px < em.src2_px ) ? em.src1_px : em.src2_px;
- select_y = (em.src1_py < em.src2_py ) ? em.src1_py : em.src2_py;
- select_w = abs( em.src1_px - em.src2_px ) + 1;
- select_h = abs( em.src1_py - em.src2_py ) + 1;
- SelectSet();
- }
- }
- /*ARGSUSED*/
- static void
- #ifdef __linux__
- musPasteProc(Widget w, XtPointer client_data, XEvent *event, Boolean* continue_to_dispatch)
- #else
- musPasteProc(Widget w, XtPointer client_data, XEvent *event)
- #endif
- {
- static int ox=0, oy=0;
- int rc, tx, ty;
- extern void UndoSet();
- extern Widget wgeBulB_edit;
- extern int bitDrawPaste();
- switch(event->type) {
- case MotionNotify:
- tx = (event->xmotion.x / edpane.pix_w) * edpane.pix_w + edpane.pix_w / 2;
- ty = (event->xmotion.y / edpane.pix_h) * edpane.pix_h + edpane.pix_h / 2;
- if (tx == ox && ty == oy)
- return;
- if(ox) {
- rubBand(ox, oy, ox + cut_w * edpane.pix_w, oy + cut_h * edpane.pix_h);
- }
- ox = tx;
- oy = ty;
- rubBand(ox, oy, ox + cut_w * edpane.pix_w, oy + cut_h * edpane.pix_h);
- break;
- case ButtonRelease:
- XtRemoveEventHandler(wgeBulB_edit,
- ButtonReleaseMask|PointerMotionMask,
- False, (XtEventHandler)musPasteProc, NULL );
- rubBand(ox, oy, ox + cut_w * edpane.pix_w, oy + cut_h * edpane.pix_h);
- ox = 0;
- oy = 0;
- bitPtnCopy( em.rsv_ptn, edg.ptn );
- tx = event->xbutton.x / edpane.pix_w;
- ty = event->xbutton.y / edpane.pix_h;
- rc = bitDrawPaste(edg.ptn, tx, ty);
- if( rc == -1 )
- return;
- edg.flag = ON;
- em.rsv_f = ON;
- DrawRectEdPn( 0, 0, edg.width - 1, edg.height - 1 );
- DrawDpPn();
- UndoSet();
- break;
- }
- }
- static void
- rubLine( int x1, int y1, int x2, int y2 )
- {
- if( x1==x2 && y1==y2 ) return;
- XDrawLine( xl.display, xl.edit_winID, xl.rubGC, x1,y1, x2,y2 );
- }
- static void
- rubBand( int x1, int y1, int x2, int y2 )
- {
- if( x1==x2 && y1==y2 )
- return;
- XDrawLine( xl.display, xl.edit_winID, xl.rubGC, x1, y1, x2, y1 );
- XDrawLine( xl.display, xl.edit_winID, xl.rubGC, x1, y1, x1, y2 );
- XDrawLine( xl.display, xl.edit_winID, xl.rubGC, x2, y1, x2, y2 );
- XDrawLine( xl.display, xl.edit_winID, xl.rubGC, x1, y2, x2, y2 );
- }
- static void
- rubCircle( int ox, int oy, int rx, int ry )
- {
- unsigned int r;
- int x, y;
- if( ox==rx && oy==ry ) return;
- x = rx - ox;
- y = ry - oy;
- r = (unsigned int)sqrt( (double)(x*x + y*y) );
- if ( r == 0 ) return;
- x = ox - (int)r;
- y = oy - (int)r;
- XDrawArc( xl.display, xl.edit_winID, xl.rubGC,
- x, y, 2*r-1, 2*r-1,
- 0, 360*64
- );
- }
- static void
- resetEditMode( unsigned int flag )
- {
- int r1_x, r1_y;
- int r2_x, r2_y;
- if( flag & RES_MSG )
- UpdateMessage( "" );
- if( flag & RES_PROC )
- em.proc = edpane.obj;
- if( (flag & RES_SLCT) && (em.slct_f) ) {
- r1_x = em.src1_px * edpane.pix_w + edpane.pix_w / 2;
- r1_y = em.src1_py * edpane.pix_h + edpane.pix_h / 2;
- r2_x = em.src2_px * edpane.pix_w + edpane.pix_w / 2;
- r2_y = em.src2_py * edpane.pix_h + edpane.pix_h / 2;
- rubBand( r1_x, r1_y, r2_x, r2_y );
- em.slct_f = OFF;
- }
- if( flag & RES_RSV )
- em.rsv_f = OFF;
- }
- /****************************************************************
- * copy character pattern *
- ***************************************************************/
- /*
- * contents : copy or overlay the new character pattern to the current pattern
- */
- /*ARGSUSED*/
- static void
- copyPatterns(
- FalFontData *fdata,
- int s1_code,
- int s2_code,
- int d1_code,
- int proc)
- {
- int ret;
- int d1_ncode, d2_ncode;
- int code_d;
- int code_disp;
- char err[128];
- int i_s, i_d;
- int i;
- char grc_d;
- char **ptn;
- char ptn2[MAXPTNBYTE];
- int num;
- extern int last_code;
- ret = copySNF(s1_code, s2_code, &ptn, &num, err);
- if( ret == -1 ) {
- Error_message2((Widget)NULL, err);
- return;
- }
- if (last_code < (d1_code + num))
- last_code = d1_code + num;
- if( ptnSense(edg.code) == 1 )
- ptnAdd( edg.code, edg.ptn );
- d1_ncode = codeToNo( d1_code );
- for (i_d=d1_ncode, i_s=0; i_s < num; i_d++) {
- if ( codeCheck( noToCode( i_d)))
- continue;
- bitPtnClear( ptn2 );
- code_d = noToCode( i_d );
- grc_d = ptnGet( code_d, ptn2 );
- if (grc_d == 0) {
- if( proc == CPY_OVERLAY ) {
- for( i=0 ; i < edg.height*((edg.width+7)/8) ; i++ ) {
- ptn[i_s][i] |= ptn2[i];
- }
- }
- ptnAdd( code_d, ptn[i_s] );
- edg.flag = ON;
- } else {
- if( ptnAdd( code_d, ptn[i_s] ) != 1 ) {
- UpdateMessage( resource.me_non_memory );
- break;
- }
- edlist.nptn++;
- edg.flag = ON;
- }
- i_s ++;
- }
- d2_ncode = i_d - 1;
- code_disp = 0;
- for( i=d1_ncode ; i <= d2_ncode; i++ ) {
- if ( codeCheck( noToCode(i) ) )
- continue;
- if( ptnSense( noToCode( i ) ) == 1 ) {
- code_disp = noToCode( i );
- break;
- }
- }
- freeSNF(ptn, num);
- if( (code_disp == 0) && (efctPtnNum() > 0))
- code_disp = noToCode( ptnSqToNo(edlist.sqstart) );
- chgEdCode( code_disp, ON );
- resetEditMode( (unsigned int) (RES_MSG | RES_PROC | RES_SLCT | RES_RSV) );
- }
|