1 /*
2 * Author: William Chia-Wei Cheng (bill.cheng@acm.org)
3 *
4 * Copyright (C) 2001-2009, William Chia-Wei Cheng.
5 *
6 * This file may be distributed under the terms of the Q Public License
7 * as defined by Trolltech AS of Norway and appearing in the file
8 * LICENSE.QPL included in the packaging of this file.
9 *
10 * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING
11 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
12 * PURPOSE. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
13 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
14 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
15 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
16 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 *
18 * @(#)$Header: /mm2/home/cvs/bc-src/tgif/shortcut.c,v 1.47 2011/06/09 16:11:42 cvsps Exp $
19 */
20
21 #define _INCLUDE_FROM_SHORTCUT_C_
22
23 #include "tgifdefs.h"
24 #include "cmdids.h"
25
26 #include "choice.e"
27 #include "msg.e"
28 #include "setup.e"
29 #include "shortcut.e"
30 #include "strtbl.e"
31 #include "tangram2.e"
32 #include "util.e"
33
34 /*
35 * Note: the num_args field in shortCutXlateTbl is used by the shortcut
36 * mechanism. This includes the call_one_arg_shortcut() internal
37 * command.
38 */
39 /* do not translate -- program constants */
40 static struct ShortCutRec shortCutXlateTbl[] = {
41 /* Control Keys */
42 { 'a', CNTRL_ONLY, "SelectAll()", 0, CMDID_SELECTALL },
43 { 'b', CNTRL_ONLY, "Back()", 0, CMDID_BACK },
44 { 'c', CNTRL_ONLY, "CopyToCutBuffer()", 0, CMDID_COPY },
45 { 'd', CNTRL_ONLY, "Duplicate()", 0, CMDID_DUPLICATE },
46 { 'e', CNTRL_ONLY, "PushCurChoice()", 0, CMDID_PUSHCURCHOICE },
47 { 'f', CNTRL_ONLY, "Front()", 0, CMDID_FRONT },
48 { 'g', CNTRL_ONLY, "Group()", 0, CMDID_GROUP },
49 { 'i', CNTRL_ONLY, "Instantiate()", 0, CMDID_INSTANTIATE },
50 { 'k', CNTRL_ONLY, "Pop()", 0, CMDID_POP },
51 { 'l', CNTRL_ONLY, "AlignObjs()", 0, CMDID_ALIGNOBJS },
52 { 'n', CNTRL_ONLY, "New()", 0, CMDID_NEW },
53 { 'o', CNTRL_ONLY, "Open()", 1, CMDID_OPEN },
54 { 'p', CNTRL_ONLY, "Print()", 0, CMDID_PRINT },
55 { 'q', CNTRL_ONLY, "Quit()", 0, CMDID_QUIT },
56 { 'r', CNTRL_ONLY, "Redraw()", 0, CMDID_REDRAW },
57 { 's', CNTRL_ONLY, "Save()", 0, CMDID_SAVE },
58 { 't', CNTRL_ONLY, "AlignToGrid()", 0, CMDID_ALIGNTOGRID },
59 { 'u', CNTRL_ONLY, "UnGroup()", 0, CMDID_UNGROUP },
60 { 'v', CNTRL_ONLY, "PasteFromCutBuffer()", 0, CMDID_PASTE },
61 { 'w', CNTRL_ONLY, "DrawText()", 0, CMDID_DRAWTEXT },
62 { '\0', 0, "Delete()", 0, CMDID_DELETE },
63 { 'y', CNTRL_ONLY, "Redo()", 0, CMDID_REDO },
64 { 'z', CNTRL_ONLY, "Undo()", 0, CMDID_UNDO },
65 { ',', CNTRL_ONLY, "ScrollLeft()", 0, CMDID_SCROLLLEFT },
66 { '.', CNTRL_ONLY, "ScrollRight()", 0, CMDID_SCROLLRIGHT },
67 { '-', CNTRL_ONLY, "PrintWithCmd()", 0, CMDID_PRINTWITHCMD },
68 { '1', CNTRL_ONLY, "ScreenCapture()", 0, CMDID_SCREENCAPTURE },
69 { '2', CNTRL_ONLY, "FullScreenCapture()", 0, CMDID_FULLSCREENCAPTURE },
70 /* Meta Keys */
71 { 'a', META_ONLY, "AttachAttrs()", 0, CMDID_ATTACHATTRS },
72 { 'b', META_ONLY, "Probe()", 0, CMDID_PROBE },
73 { 'c', META_ONLY, "RotateCounter()", 0, CMDID_ROTATECOUNTER },
74 { 'd', META_ONLY, "-Grid()", 0, CMDID_DECGRID },
75 { 'e', META_ONLY, "AnimateSend()", 0, CMDID_ANIMATESEND },
76 { 'f', META_ONLY, "AnimateFlash()", 0, CMDID_ANIMATEFLASH },
77 { 'g', META_ONLY, "ToggleGrid()", 0, CMDID_TOGGLEGRID },
78 { 'h', META_ONLY, "FlipHorizontal()", 0, CMDID_FLIPHORIZONTAL },
79 { 'i', META_ONLY, "+Grid()", 0, CMDID_INCGRID },
80 { 'j', META_ONLY, "HideAttrName()", 0, CMDID_HIDEATTRNAME },
81 { 'k', META_ONLY, "SelectMode()", 0, CMDID_SELECTMODE },
82 { 'l', META_ONLY, "DistributeObjs()", 0, CMDID_DISTRIBUTEOBJS },
83 { 'm', META_ONLY, "Move/JustfyAttr()", 0, CMDID_MOVEJUSTIFYATTR },
84 { 'n', META_ONLY, "ShowAttrName()", 0, CMDID_SHOWATTRNAME },
85 { 'o', META_ONLY, "ZoomOut()", 0, CMDID_ZOOMOUT },
86 { 'p', META_ONLY, "Import()", 0, CMDID_IMPORT },
87 { 'q', META_ONLY, "DrawPoly()", 0, CMDID_DRAWPOLY },
88 { 'r', META_ONLY, "DrawBox()", 0, CMDID_DRAWBOX },
89 { 's', META_ONLY, "Solve()", 0, CMDID_SOLVE },
90 { 't', META_ONLY, "DetachAttrs()", 0, CMDID_DETACHATTRS },
91 { 'u', META_ONLY, "Animate()", 0, CMDID_ANIMATE },
92 { 'v', META_ONLY, "FlipVertical()", 0, CMDID_FLIPVERTICAL },
93 { 'w', META_ONLY, "RotateClockWise()", 0, CMDID_ROTATECLOCKWISE },
94 { 'x', META_ONLY, "Escape()", 0, CMDID_ESCAPE },
95 { 'y', META_ONLY, "Simulate()", 0, CMDID_SIMULATE },
96 { 'z', META_ONLY, "ZoomIn()", 0, CMDID_ZOOMIN },
97 { '9', META_ONLY, "SpecifyAnArc()", 0, CMDID_SPECIFYANARC },
98 { '0', META_ONLY, "Update()", 0, CMDID_UPDATE },
99 { ',', META_ONLY, "ScrollUp()", 0, CMDID_SCROLLUP },
100 { '.', META_ONLY, "ScrollDown()", 0, CMDID_SCROLLDOWN },
101 { '-', META_ONLY, "ShowAttr()", 0, CMDID_SHOWATTR },
102 { '{', META_ONLY, "AlignObjsTop()", 0, CMDID_ALIGNOBJSTOP },
103 { '+', META_ONLY, "AlignObjsMiddle()", 0, CMDID_ALIGNOBJSMIDDLE },
104 { '}', META_ONLY, "AlignObjsBottom()", 0, CMDID_ALIGNOBJSBOTTOM },
105 { '[', META_ONLY, "AlignObjsLeft()", 0, CMDID_ALIGNOBJSLEFT },
106 { '=', META_ONLY, "AlignObjsCenter()", 0, CMDID_ALIGNOBJSCENTER },
107 { ']', META_ONLY, "AlignObjsRight()", 0, CMDID_ALIGNOBJSRIGHT },
108 { '"', META_ONLY, "MakeRegPolygon()", 0, CMDID_MAKEREGPOLYGON },
109 { '%', META_ONLY, "SetReduction()", 0, CMDID_SETREDUCTION },
110 { ':', META_ONLY, "DefaultZoom()", 0, CMDID_DEFAULTZOOM },
111 { '`', META_ONLY, "ZoomWayOut()", 0, CMDID_ZOOMWAYOUT },
112 { '~', META_ONLY, "SaveSelectedAs()", 0, CMDID_SAVESELECTEDAS },
113 { ';', META_ONLY, "CutBit/Pixmap()", 0, CMDID_CUTBITPIXMAP },
114 { '_', META_ONLY, "AbutHorizontal()", 0, CMDID_ABUTHORIZONTAL },
115 { '|', META_ONLY, "AbutVertical()", 0, CMDID_ABUTVERTICAL },
116 { '#', META_ONLY, "BreakUpText()", 1, CMDID_BREAKUPTEXT },
117 { '^', META_ONLY, "ScrollToOrig()", 0, CMDID_SCROLLTOORIG },
118 { '@', META_ONLY, "ToggleMoveMode()", 0, CMDID_TOGGLEMOVEMODE },
119 { '$', META_ONLY, "SelectVertexMode()", 0, CMDID_SELECTVERTEXMODE },
120 { '&', META_ONLY, "AlignToPage()", 0, CMDID_ALIGNTOPAGE },
121 { '*', META_ONLY, "ChangeDomain()", 0, CMDID_CHANGEDOMAIN },
122 { '(', META_ONLY, "ImportEPSFile()", 1, CMDID_IMPORTEPSFILE },
123 { ')', META_ONLY, "PreciseScale()", 0, CMDID_PRECISESCALE },
124 { '<', META_ONLY, "Lock()", 0, CMDID_LOCK },
125 { '>', META_ONLY, "UnLock()", 0, CMDID_UNLOCK },
126 /* Control Meta Keys */
127 { 'a', CNTRL_META, "AddPoint()", 0, CMDID_ADDPOINT },
128 { 'b', CNTRL_META, "Bold()", 0, CMDID_BOLD },
129 { 'c', CNTRL_META, "Center()", 0, CMDID_CENTER },
130 { 'd', CNTRL_META, "DeletePoint()", 0, CMDID_DELETEPOINT },
131 { 'e', CNTRL_META, "DrawRCBox()", 0, CMDID_DRAWRCBOX },
132 { 'f', CNTRL_META, "InvertXBitmap()", 0, CMDID_INVERTXBITMAP },
133 { 'g', CNTRL_META, "ToggleSnap()", 0, CMDID_TOGGLESNAP },
134 { 'h', CNTRL_META, "HideAttr()", 0, CMDID_HIDEATTR },
135 { 'i', CNTRL_META, "MakeIconic()", 0, CMDID_MAKEICONIC },
136 { 'j', CNTRL_META, "UnMakeIconic()", 0, CMDID_UNMAKEICONIC },
137 { 'k', CNTRL_META, "ToggleBW/ColorPS()", 0, CMDID_TOGGLEBWCOLORPS },
138 { 'l', CNTRL_META, "Left()", 0, CMDID_LEFT },
139 { 'm', CNTRL_META, "MakeSymbolic()", 0, CMDID_MAKESYMBOLIC },
140 { 'n', CNTRL_META, "UnMakeSymbolic()", 0, CMDID_UNMAKESYMBOLIC },
141 { 'o', CNTRL_META, "Roman()", 0, CMDID_ROMAN },
142 { 'p', CNTRL_META, "BoldItalic()", 0, CMDID_BOLDITALIC },
143 { 'q', CNTRL_META, "DrawPolygon()", 0, CMDID_DRAWPOLYGON },
144 { 'r', CNTRL_META, "Right()", 0, CMDID_RIGHT },
145 { 's', CNTRL_META, "SaveNew()", 1, CMDID_SAVENEW },
146 { 't', CNTRL_META, "Italic()", 0, CMDID_ITALIC },
147 { 'u', CNTRL_META, "UpdateSymbols()", 0, CMDID_UPDATESYMBOLS },
148 { 'v', CNTRL_META, "DrawOval()", 0, CMDID_DRAWOVAL },
149 { 'w', CNTRL_META, "ToggleLineType()", 0, CMDID_TOGGLELINETYPE },
150 { 'x', CNTRL_META, "CyclePrintFormat()", 0, CMDID_CYCLEPRINFORMAT },
151 { 'y', CNTRL_META, "Push()", 0, CMDID_PUSH },
152 { 'z', CNTRL_META, "DrawArc()", 0, CMDID_DRAWARC },
153 { '.', CNTRL_META, "ImportXBitmap()", 0, CMDID_IMPORTXBITMAP },
154 { ',', CNTRL_META, "ImportXPixmap()", 0, CMDID_IMPORTXPIXMAP },
155 { '-', CNTRL_META, "ToggleGridSystem()", 0, CMDID_TOGGLEGRIDSYSTEM },
156 { '=', CNTRL_META, "FindAgain()", 0, CMDID_FINDAGAIN },
157 { '5', CNTRL_META, "InsertRightSubscript()", 0, CMDID_INSERTRIGHTSUBSCRIPT },
158 { '6', CNTRL_META, "InsertRightSuperscript()", 0,
159 CMDID_INSERTRIGHTSUPERSCRIPT },
160 { '7', CNTRL_META, "ToggleEqAttrShown()", 0, CMDID_TOGGLEEQATTRSHOWN },
161 { '8', CNTRL_META, "ToggleSlideShow()", 0, CMDID_TOGGLESLIDESHOW },
162 { '9', CNTRL_META, "FindNoCase()", 0, CMDID_FINDNOCASE },
163 { '0', CNTRL_META, "FindCaseSensitive()", 0, CMDID_FINDCASESENSITIVE },
164 /* Miscellaneous */
165 { '\0', 0, "DrawCornerOval()", 0, CMDID_DRAWCORNEROVAL },
166 { '\0', 0, "DrawCenterOval()", 0, CMDID_DRAWCENTEROVAL },
167 { '\0', 0, "DrawEdgeOval()", 0, CMDID_DRAWEDGEOVAL },
168 { '\0', 0, "DrawEdgeArc()", 0, CMDID_DRAWEDGEARC },
169 { '\0', 0, "ScrollPageUp()", 0, CMDID_SCROLLPAGEUP },
170 { '\0', 0, "ScrollPageDown()", 0, CMDID_SCROLLPAGEDOWN },
171 { '\0', 0, "ScrollPageLeft()", 0, CMDID_SCROLLPAGELEFT },
172 { '\0', 0, "ScrollPageRight()", 0, CMDID_SCROLLPAGERIGHT },
173 { '\0', 0, "FlushUndoBuffer()", 0, CMDID_FLUSHUNDOBUFFER },
174 { '\0', 0, "PrintMsgBuffer()", 0, CMDID_PRINTMSGBUFFER },
175 { '\0', 0, "SaveOrigin()", 0, CMDID_SAVEORIGIN },
176 { '\0', 0, "RestoreImageWH()", 0, CMDID_RESTOREIMAGEWH },
177 { '\0', 0, "UpdateEPS()", 0, CMDID_UPDATEEPS },
178 { '\0', 0, "ToggleMapShown()", 0, CMDID_TOGGLEMAPSHOWN },
179 { '\0', 0, "ToggleUseGrayScale()", 0, CMDID_TOGGLEUSEGRAYSCALE },
180 { '\0', 0, "FreeHandMode()", 0, CMDID_FREEHANDMODE },
181 { '\0', 0, "SaveSymInLibrary()", 0, CMDID_SAVESYMINLIBRARY },
182 { '\0', 0, "CenterAnEndPoint()", 0, CMDID_CENTERANENDPOINT },
183 { '\0', 0, "CenterAVertex()", 0, CMDID_CENTERAVERTEX },
184 { '\0', 0, "NextPage()", 0, CMDID_NEXTPAGE },
185 { '\0', 0, "PrevPage()", 0, CMDID_PREVPAGE },
186 { '\0', 0, "NamePages()", 0, CMDID_NAMEPAGES },
187 { '\0', 0, "GotoPage()", 1, CMDID_GOTOPAGE },
188 { '\0', 0, "AddPageBefore()", 0, CMDID_ADDPAGEBEFORE },
189 { '\0', 0, "AddPageAfter()", 0, CMDID_ADDPAGEAFTER },
190 { '\0', 0, "DeleteCurPage()", 0, CMDID_DELETECURPAGE },
191 { '\0', 0, "TogglePageLineShown()", 0, CMDID_TOGGLEPAGELINESHOWN },
192 { '\0', 0, "SpecifyDrawingSize()", 0, CMDID_SPECIFYDRAWINGSIZE },
193 { '\0', 0, "PrintOnePage()", 0, CMDID_PRINTONEPAGE },
194 { '\0', 0, "ToggleNamedAttrShown()", 1, INVALID },
195 { '\0', 0, "AttachFileAttrs()", 0, CMDID_ATTACHFILEATTRS },
196 { '\0', 0, "DetachFileAttrs()", 0, CMDID_DETACHFILEATTRS },
197 { '\0', 0, "EditFileAttrs()", 0, CMDID_EDITFILEATTRS },
198 { '\0', 0, "PrintSelectedObjs()", 0, CMDID_PRINTSELECTEDOBJS },
199 { '\0', 0, "InputPolyPts()", 0, CMDID_INPUTPOLYPTS },
200 { '\0', 0, "InputPolygonPts()", 0, CMDID_INPUTPOLYGONPTS },
201 { '\0', 0, "EditAttrs()", 0, CMDID_EDITATTRS },
202 { '\0', 0, "ConvertIntSpline()", 0, CMDID_CONVERTINTSPLINE },
203 { '\0', 0, "PasteFromFile()", 0, CMDID_PASTEFROMFILE },
204 { '\0', 0, "ToggleShowMeasurement()", 0, CMDID_TOGGLESHOWMEASUREMENT },
205 { '\0', 0, "SetMeasureUnit()", 0, CMDID_SETMEASUREUNIT },
206 { '\0', 0, "Cut()", 0, CMDID_CUT },
207 { '\0', 0, "ToggleSmoothHinge()", 0, CMDID_TOGGLESMOOTHHINGE },
208 { '\0', 0, "ToggleShowMenubar()", 0, CMDID_TOGGLESHOWMENUBAR },
209 { '\0', 0, "ToggleShowStatus()", 0, CMDID_TOGGLESHOWSTATUS },
210 { '\0', 0, "BrowseXBitmap()", 0, CMDID_BROWSEXBITMAP },
211 { '\0', 0, "BrowseXPixmap()", 0, CMDID_BROWSEXPIXMAP },
212 { '\0', 0, "SpecifyPaperSize()", 0, CMDID_SPECIFYPAPERSIZE },
213 { '\0', 0, "ToggleOneMotionSelMove()", 0, CMDID_TOGGLEONEMOTIONSELMOVE },
214 { '\0', 0, "GoBack()", 0, CMDID_GOBACK },
215 { '\0', 0, "GoForward()", 0, CMDID_GOFORWARD },
216 { '\0', 0, "RefreshCurrent()", 0, CMDID_REFRESHCURRENT },
217 { '\0', 0, "HotList()", 0, CMDID_HOTLIST },
218 { '\0', 0, "AddCurrentToHotList()", 0, CMDID_ADDCURRENTTOHOTLIST },
219 { '\0', 0, "SessionHistory()", 0, CMDID_SESSIONHISTORY },
220 { '\0', 0, "ToggleHyperSpace()", 0, CMDID_TOGGLEHYPERSPACE },
221 { '\0', 0, "EmbedEPSFile()", 0, CMDID_EMBEDEPSFILE },
222 { '\0', 0, "SetSelLineWidth()", 0, CMDID_SETSELLINEWIDTH },
223 { '\0', 0, "AddColor()", 0, CMDID_ADDCOLOR },
224 { '\0', 0, "ImportAttrs()", 0, CMDID_IMPORTATTRS },
225 { '\0', 0, "ExportAttrs()", 0, CMDID_EXPORTATTRS },
226 { '\0', 0, "MergeWithTable()", 0, CMDID_MERGEWITHTABLE },
227 { '\0', 0, "ExportToTable()", 0, CMDID_EXPORTTOTABLE },
228 { '\0', 0, "DeletePages()", 0, CMDID_DELETEPAGES },
229 { '\0', 0, "PrintOneFilePerPage()", 0, CMDID_PRINTONEFILEPERPAGE },
230 { '\0', 0, "ImportGIFFile()", 0, CMDID_IMPORTGIFFILE },
231 { '\0', 0, "SetExportPixelTrim()", 0, CMDID_SETEXPORTPIXELTRIM },
232 { '\0', 0, "ToggleColorLayers()", 0, CMDID_TOGGLECOLORLAYERS },
233 { '\0', 0, "ToggleStretchableText()", 0, CMDID_TOGGLESTRETCHABLETEXT },
234 { '\0', 0, "BreakUpBit/Pixmap()", 0, CMDID_BREAKUPBITPIXMAP },
235 { '\0', 0, "LayoutOnArc()", 0, CMDID_LAYOUTONARC },
236 { '\0', 0, "PreciseRotate()", 0, CMDID_PRECISEROTATE },
237 { '\0', 0, "JoinPoly()", 0, CMDID_JOINPOLY },
238 { '\0', 0, "CutPoly()", 0, CMDID_CUTPOLY },
239 { '\0', 0, "GetBoundingBox()", 0, CMDID_GETBOUNDINGBOX },
240 { '\0', 0, "SetTemplate()", 0, CMDID_SETTEMPLATE },
241 { '\0', 0, "MakeGray()", 0, CMDID_MAKEGRAY },
242 { '\0', 0, "InvertColor()", 0, CMDID_INVERTCOLOR },
243 { '\0', 0, "InterpolateColor()", 0, CMDID_INTERPOLATECOLOR },
244 { '\0', 0, "BrightenDarken()", 0, CMDID_BRIGHTENDARKEN },
245 { '\0', 0, "ChangeSaturation()", 0, CMDID_CHANGESATURATION },
246 { '\0', 0, "ChangeHue()", 0, CMDID_CHANGEHUE },
247 { '\0', 0, "ContrastEnhance()", 0, CMDID_CONTRASTENHANCE },
248 { '\0', 0, "ColorBalance()", 0, CMDID_COLORBALANCE },
249 { '\0', 0, "Gamma()", 0, CMDID_GAMMA },
250 { '\0', 0, "EdgeDetect()", 0, CMDID_EDGEDETECT },
251 { '\0', 0, "Emboss()", 0, CMDID_EMBOSS },
252 { '\0', 0, "ReduceColors()", 0, CMDID_REDUCECOLORS },
253 { '\0', 0, "ReduceToPixmapColors()", 0, CMDID_REDUCETOPIXMAPCOLORS },
254 { '\0', 0, "SetDefaultColorLevels()", 0, CMDID_SETDEFAULTCOLORLEVELS },
255 { '\0', 0, "ReduceToDefaultColors()", 0, CMDID_REDUCETODEFAULTCOLORs },
256 { '\0', 0, "DefaultErrorDiffuse()", 0, CMDID_DEFAULTERRORDIFFUSE },
257 { '\0', 0, "Spread()", 0, CMDID_SPREAD },
258 { '\0', 0, "Sharpen()", 0, CMDID_SHARPEN },
259 { '\0', 0, "Blur3()", 0, CMDID_BLUR3 },
260 { '\0', 0, "Blur5()", 0, CMDID_BLUR5 },
261 { '\0', 0, "Blur7()", 0, CMDID_BLUR7 },
262 { '\0', 0, "RunBggen()", 0, CMDID_RUNBGGEN },
263 { '\0', 0, "CircularBggen()", 0, CMDID_CIRCULARBGGEN },
264 { '\0', 0, "SimpleRectBggen()", 0, CMDID_SIMPLERECTBGGEN },
265 { '\0', 0, "RegenerateImage()", 0, CMDID_REGENERATEIMAGE },
266 { '\0', 0, "CropImage()", 0, CMDID_CROPIMAGE },
267 { '\0', 0, "GetColor()", 0, CMDID_GETCOLOR },
268 { '\0', 0, "ReplaceColor()", 0, CMDID_REPLACECOLOR },
269 { '\0', 0, "FloodFill()", 0, CMDID_FLOODFILL },
270 { '\0', 0, "CreateContour()", 0, CMDID_CREATECONTOUR },
271 { '\0', 0, "Subtract()", 0, CMDID_SUBTRACT },
272 { '\0', 0, "AlphaCombine()", 0, CMDID_ALPHACOMBINE },
273 { '\0', 0, "XorColors()", 0, CMDID_XORCOLORS },
274 { '\0', 0, "ImportOtherFile()", 0, CMDID_IMPORTOTHERFILE },
275 { '\0', 0, "ImportOtherFileType()", 1, INVALID },
276 { '\0', 0, "BrowseOther()", 0, CMDID_BROWSEOTHER },
277 { '\0', 0, "BrowseOtherType()", 1, INVALID },
278 { '\0', 0, "ToggleShowCrossHair()", 0, CMDID_TOGGLESHOWCROSSHAIR },
279 { '\0', 0, "SetShapeShadow()", 0, CMDID_SETSHAPESHADOW },
280 { '\0', 0, "NoTransform()", 0, CMDID_NOTRANSFORM },
281 { '\0', 0, "About()", 0, CMDID_ABOUT },
282 { '\0', 0, "Copyright()", 0, CMDID_COPYRIGHT },
283 { '\0', 0, "SetSelFontSize()", 0, CMDID_SETSELFONTSIZE },
284 { '\0', 0, "ZoomInAtCursor()", 0, CMDID_ZOOMINATCURSOR },
285 { '\0', 0, "CenterAtCursor()", 0, CMDID_CENTERATCURSOR },
286 { '\0', 0, "SetEditTextSize()", 0, CMDID_SETEDITTEXTSIZE },
287 { '\0', 0, "SetTextRotation()", 0, CMDID_SETTEXTROTATION },
288 { '\0', 0, "SetRotationIncrement()", 0, CMDID_SETROTATIONINCREMENT },
289 { '\0', 0, "CurrentVersionInfo()", 0, CMDID_CURRENTVERSIONINFO },
290 { '\0', 0, "LatestReleaseInfo()", 0, CMDID_LATESTRELEASEINFO },
291 { '\0', 0, "VectorWarp()", 0, CMDID_VECTORWARP },
292 { '\0', 0, "ConnectPins()", 0, CMDID_CONNECTPINS },
293 { '\0', 0, "PasteCompoundText()", 0, CMDID_PASTECOMPOUNDTEXT },
294 { '\0', 0, "CopyProperties()", 0, CMDID_COPYPROPERTIES },
295 { '\0', 0, "SaveProperties()", 0, CMDID_SAVEPROPERTIES },
296 { '\0', 0, "PasteProperties()", 0, CMDID_PASTEPROPERTIES },
297 { '\0', 0, "RestoreProperties()", 0, CMDID_RESTOREPROPERTIES },
298 { '\0', 0, "RotateShearMode()", 0, CMDID_ROTATESHEARMODE },
299 { '\0', 0, "ChangeAllSelFill()", 0, CMDID_CHANGEALLSELFILL },
300 { '\0', 0, "ChangeAllSelPen()", 0, CMDID_CHANGEALLSELPEN },
301 { '\0', 0, "ChangeAllSelLineWidth()", 0, CMDID_CHANGEALLSELLINEWIDTH },
302 { '\0', 0, "ChangeAllSelLineStyle()", 0, CMDID_CHANGEALLSELLINESTYLE },
303 { '\0', 0, "ChangeAllSelLineType()", 0, CMDID_CHANGEALLSELLINETYPE },
304 { '\0', 0, "ChangeAllSelLineDash()", 0, CMDID_CHANGEALLSELLINEDASH },
305 { '\0', 0, "ChangeAllSelFont()", 0, CMDID_CHANGEALLSELFONT },
306 { '\0', 0, "ChangeAllSelFontSize()", 0, CMDID_CHANGEALLSELFONTSIZE },
307 { '\0', 0, "ChangeAllSelFontStyle()", 0, CMDID_CHANGEALLSELFONTSTYLE },
308 { '\0', 0, "ChangeAllSelFontJust()", 0, CMDID_CHANGEALLSELFONTJUST },
309 { '\0', 0, "ChangeAllSelColor()", 0, CMDID_CHANGEALLSELCOLOR },
310 { '\0', 0, "LanscapeMode()", 0, CMDID_LANDSCAPEMODE },
311 { '\0', 0, "PortraitMode()", 0, CMDID_PORTRAITMODE },
312 { '\0', 0, "SetWhereToPrint()", 0, CMDID_SETWHERETOPRINT },
313 { '\0', 0, "SetHoriAlign()", 0, CMDID_SETHORIZONTALALIGN },
314 { '\0', 0, "SetVertAlign()", 0, CMDID_SETVERTICALALIGN },
315 { '\0', 0, "SetMoveMode()", 0, CMDID_SETMOVEMODE },
316 { '\0', 0, "SetStretchTextMode()", 0, CMDID_SETSTRETCHTEXTMODE },
317 { '\0', 0, "CreateShape()", 0, CMDID_CREATESHAPE },
318 { '\0', 0, "SetPageLayoutMode()", 0, CMDID_SETPAGELAYOUTMODE },
319 { '\0', 0, "SetTransPatMode()", 0, CMDID_SETTRANSPATMODE },
320 { '\0', 0, "ToggleShowMode()", 0, CMDID_TOGGLESHOWMODE },
321 { '\0', 0, "SetSlideShowBorderColor()", 0, CMDID_SETSLIDESHOWBRDRCOLOR },
322 { '\0', 0, "SetSlideShowWindowOffsets()", 0, CMDID_SETSLIDESHOWWINOFFSETS },
323 { '\0', 0, "ExportXPixmapDeckToGIF()", 0, CMDID_EXPORTXPMDECKTOGIF },
324 { '\0', 0, "ImportGIFToXPixmapDeck()", 0, CMDID_IMPORTGIFTOXPMDECK },
325 { '\0', 0, "InsertThinSpace()", 0, CMDID_INSERTTHINSPACE },
326 { '\0', 0, "InsertVerticalOffset()", 0, CMDID_INSERTVERTICALOFFSET },
327 { '\0', 0, "RemoveVerticalOffset()", 0, CMDID_REMOVEVERTICALOFFSET },
328 { '\0', 0, "InsertLeftSuperscript()", 0, CMDID_INSERTLEFTSUPERSCRIPT },
329 { '\0', 0, "InsertLeftSubscript()", 0, CMDID_INSERTLEFTSUBSCRIPT },
330 { '\0', 0, "InsertCenterSuperscript()", 0, CMDID_INSERTCENTERSUPERSCRIPT },
331 { '\0', 0, "InsertCenterSubscript()", 0, CMDID_INSERTCENTERSUBSCRIPT },
332 { '\0', 0, "SetScriptFraction()", 0, CMDID_SETSCRIPTFRACTION },
333 { '\0', 0, "FakeUserAgent()", 1, CMDID_FAKEUSERAGENT },
334 { '\0', 0, "FakeReferer()", 1, CMDID_FAKEREFERER },
335 { '\0', 0, "ToggleKeepAlive()", 0, CMDID_TOGGLEKEEPALIVE },
336 { '\0', 0, "SizeToWidest()", 0, CMDID_SIZETOWIDEST },
337 { '\0', 0, "SizeToNarrowest()", 0, CMDID_SIZETONARROWEST },
338 { '\0', 0, "SizeToTallest()", 0, CMDID_SIZETOTALLEST },
339 { '\0', 0, "SizeToShortest()", 0, CMDID_SIZETOSHORTEST },
340 { '\0', 0, "SizeToGivenWidthHeight()", 0, CMDID_SIZETOGIVENWIDTHHEIGHT },
341 { '\0', 0, "SizeToGivenWidth()", 0, CMDID_SIZETOGIVENWIDTH },
342 { '\0', 0, "SizeToGivenHeight()", 0, CMDID_SIZETOGIVENHEIGHT },
343 { '\0', 0, "ExecCmdsFromFile()", 1, CMDID_EXECCMDSFROMFILE },
344 { '\0', 0, "StartExecCmdsFromFile()", 0, CMDID_STARTEXECCMDSFROMFILE },
345 { '\0', 0, "CopyPlainTextAsObject()", 0, CMDID_COPYPLAINTEXTASOBJECT },
346 { '\0', 0, "SetTextFillPatternColor()", 0, CMDID_SETTEXTFILLPATTERNCOLOR },
347 { '\0', 0, "AlignDirect()", 0, CMDID_ALIGNDIRECT },
348 { '\0', 0, "DistributeDirect()", 0, CMDID_DISTRIBUTEDIRECT },
349 { '\0', 0, "ToggleVisibleGridInSlideShow()",0,CMDID_VISIBLEGRIDINSLIDESHOW },
350 { '\0', 0, "ChangeScrollMode()", 0, CMDID_CHANGESCROLLMODE },
351 { '\0', 0, "SetAltEditTextBgColor()", 0, CMDID_SETALTEDITTEXTBGCOLOR },
352 { '\0', 0, "SetAltEditTextHighlightColor()", 0,
353 CMDID_SETALTEDITTEXTHIGHLIGHTCOLOR },
354 { '\0', 0, "ToggleAltEditTextBgColor()", 0, CMDID_TOGGLEALTEDITTEXTBGCOLOR },
355 { '\0', 0, "ChangeAllSelFontUnderline()",0,CMDID_CHANGEALLSELFONTUNDERLINE },
356 { '\0', 0, "ChangeAllSelFontOverline()",0,CMDID_CHANGEALLSELFONTOVERLINE },
357 { '\0', 0, "EditPageFileNames()", 0, CMDID_EDITPAGEFILENAMES },
358 { '\0', 0, "ExportHalfToneBitmap()", 0, CMDID_EXPORTHALFTONEBITMAP },
359 { '\0', 0, "ExportThresholdBitmap()", 0, CMDID_EXPORTTHRESHOLDBITMAP },
360 { '\0', 0, "SetExportBitmapThreshold()", 1, CMDID_SETEXPORTBITMAPTHRESHOLD },
361 { '\0', 0, "PreciseScaleEverything()", 0, CMDID_PRECISESCALEEVERYTHING },
362 { '\0', 0, "SetPaperColor()", 0, CMDID_SETPAPERCOLOR },
363 { '\0', 0, "DelayedFullScreenCapture()", 0, CMDID_DELAYEDFULLSCREENCAPTURE },
364 { '\0', 0, "ToggleHideDuringCapture()", 0, CMDID_TOGGLEHIDEDURINGCAPTURE },
365 { '\0', 0, "EditDomainPaths()", 0, CMDID_EDITDOMAINPATHS },
366 { '\0', 0, "SelectDefaultDomain()", 0, CMDID_SELECTDEFAULTDOMAIN },
367 { '\0', 0, "AddADomain()", 0, CMDID_ADDADOMAIN },
368 { '\0', 0, "DeleteADomain()", 0, CMDID_DELETEADOMAIN },
369 { '\0', 0, "ReloadDomainInfoFromX()", 0, CMDID_RELOADDOMAININFOFROMX },
370 { '\0', 0, "ImportPNGFile()", 0, CMDID_IMPORTPNGFILE },
371 { '\0', 0, "EditIndexedAttrInEditor()", 0, CMDID_EDITATTRINEDITOR },
372 { '\0', 0, "GetProperty()", 0, CMDID_GETPROPERTY },
373 { '\0', 0, "PeekDimension()", 0, CMDID_PEEKDIMENSION },
374 { '\0', 0, "SetHtmlExportTemplate()", 0, CMDID_SETHTMLEXPORTTEMPLATE },
375 { '\0', 0, "PrintPages()", 0, CMDID_PRINTPAGES },
376 { '\0', 0, "GoHyperSpaceInSlideShow()",0, CMDID_GOHYPERSPACEINSLIDESHOW },
377 { '\0', 0, "FreehandModeInSlideShow()",0, CMDID_FREEHANDMODEINSLIDESHOW },
378 { '\0', 0, "OpenARecentlyUsedFile()", 0, CMDID_RECENTLYUSEDFILES },
379 { '\0', 0, "MoveEditTextBox()", 0, CMDID_MOVEEDITTEXTBOX },
380 { '\0', 0, "ReplaceGraphic()", 0, CMDID_REPLACEGRAPHIC },
381 { '\0', 0, "ToggleShowMeasurementInTooltip()", 0,
382 CMDID_TOGGLESHOWMEASUREMENTINTT },
383 { '\0', 0, "ImportJPEGFile()", 0, CMDID_IMPORTJPEGFILE },
384 { '\0', 0, "ToggleAutoEPSPreviewBitmap()", 0,
385 CMDID_TOGGLEAUTOEPSPREVIEWBITMAP },
386 { '\0', 0, "CreateThumbnails()", 0, CMDID_CREATETHUMBNAILS },
387 { '\0', 0, "ConnectTwoPortsByAWire()", 0, CMDID_CONNECT2PORTSBYWIRE },
388 { '\0', 0, "RenameSignalNameForAPort()", 0, CMDID_RENAMESIGNAMEFORAPORT },
389 { '\0', 0, "ClearSignalNameForAPort()", 0, CMDID_CLEARSIGNAMEFORAPORT },
390 { '\0', 0, "ToggleShowWireSignalName()", 0, CMDID_TOGGLESHOWWIRESIGNALNAME },
391 { '\0', 0, "ToggleShowChoicebar()", 0, CMDID_TOGGLESHOWCHOICEBAR },
392 { '\0', 0, "MergePortsWithAnObject()", 0, CMDID_MERGEPORTSWITHANOBJECT },
393 { '\0', 0, "RenumberObjectIds()", 0, CMDID_RENUMBER_OBJECT_IDS },
394 { '\0', 0, "RepeatConnectTwoPortsByAWire()", 0,
395 CMDID_REPEATCONNECT2PORTSBYWIRE },
396 { '\0', 0, "ConnectPortsToBroadcastWire()", 0,
397 CMDID_CONNECTPORTSTOBROADCAST },
398 { '\0', 0, "ImportMultipageTextFile()", 0, CMDID_IMPORTMULTIPAGETEXTFILE },
399 { '\0', 0, "SetMarginsForImportMultipageTextFile()", 0,
400 CMDID_SETMARGINSONIMPORTTEXT },
401 { '\0', 0, "ToggleWordWrapDuringImportMultipageTextFile()", 0,
402 CMDID_TOGGLEWORDWRAPONIMPORTTEXT },
403 { '\0', 0, "HandleDataInMBuff()", 0, CMDID_DATA_IN_MBUFF },
404 { '\0', 0, "BenchMark()", 0, CMDID_BENCHMARK },
405
406 { '\0', 0, "ConvertToBezier()", 0, CMDID_CONVERTTOBEZIER },
407 { '\0', 0, "SetBezierConvertNumSegs()", 1, CMDID_SETBEZIERCONVERTNUMSEGS },
408
409 { '\0', 0, "AddSquareTickMarks()", 0, CMDID_ADDSQUARETICKMARKS },
410 { '\0', 0, "AddTriangleTickMarks()", 0, CMDID_ADDTRIANGLETICKMARKS },
411 { '\0', 0, "AddCircleTickMarks()", 0, CMDID_ADDCIRCLETICKMARKS },
412 { '\0', 0, "AddXTickMarks()", 0, CMDID_ADDXTICKMARKS },
413 { '\0', 0, "AddDiamondTickMarks()", 0, CMDID_ADDDIAMONDTICKMARKS },
414 { '\0', 0, "AddBowtieTickMarks()", 0, CMDID_ADDBOWTIETICKMARKS },
415 { '\0', 0, "AddInvTriangleTickMarks()", 0, CMDID_ADDINVTRIANGLETICKMARKS },
416 { '\0', 0, "AddPlusTickMarks()", 0, CMDID_ADDPLUSTICKMARKS },
417 { '\0', 0, "AddHourGlassTickMarks()", 0, CMDID_ADDHOURGLASSTICKMARKS },
418 { '\0', 0, "SetTickMarkSize()", 1, CMDID_SETTICKMARKSIZE },
419 { '\0', 0, "ToggleShowChat()", 0, CMDID_TOGGLESHOWCHAT },
420 { '\0', 0, "SavePagesAs()", 0, CMDID_SAVEPAGESAS },
421 { '\0', 0, "ImportPPMFile()", 0, CMDID_IMPORTPPMFILE },
422 { '\0', 0, "AddPageBeforeCopyAll()", 0, CMDID_ADDPAGEBEFORECOPYALL },
423 { '\0', 0, "AddPageAfterCopyAll()", 0, CMDID_ADDPAGEAFTERCOPYALL },
424 { '\0', 0, "InsertHexOctalChar()", 0, CMDID_INSERTHEXOCTALCHAR },
425 { '\0', 0, "ResetInputMethod()", 0, CMDID_RESETINMETHOD },
426 { '\0', 0, "ImportPBMFile()", 0, CMDID_IMPORTPBMFILE },
427 { '\0', 0, "ImportPGMFile()", 0, CMDID_IMPORTPGMFILE },
428 { '\0', 0, "EditIndexedAttrGroupInEditor()", 0,
429 CMDID_EDITATTRGROUPINEDITOR },
430 { '\0', 0, "LinkExtJPEGFile()", 0, CMDID_LINKEXTJPEGFILE },
431 { '\0', 0, "NextSlide()", 0, CMDID_NEXTSLIDE },
432 { '\0', 0, "PrevSlide()", 0, CMDID_PREVSLIDE },
433 { '\0', 0, "SetObjectShadowColor()", 0, CMDID_SETOBJSHADOWCOLOR },
434 { '\0', 0, "SetObjectShadowOffsets()", 0, CMDID_SETOBJSHADOWOFFSETS },
435 { '\0', 0, "AddObjectShadow()", 0, CMDID_ADDOBJSHADOW },
436 { '\0', 0, "RemoveObjectShadow()", 0, CMDID_REMOVEOBJSHADOW },
437 { '\0', 0, "CopyDoubleByteString()", 0, CMDID_COPYUTF8 },
438 { '\0', 0, "PasteDoubleByteString()", 0, CMDID_PASTEUTF8 },
439 { '\0', 0, "ReduceToMobileWebSafeColors()", 0,
440 CMDID_REDUCETOMOBILEWEBCOLORS },
441 { '\0', 0, "CreatePixmapFromSelected()", 0, CMDID_CREATEPIXMAPFROMSEL },
442 { '\0', 0, "ToggleAutoRotatePivot()", 0, CMDID_TOGGLEROTATEPIVOT },
443 { '\0', 0, "SpecifyRotatePivot()", 0, CMDID_SPECIFYROTATEPIVOT },
444 { '\0', 0, "ResetRotatePivot()", 0, CMDID_RESETROTATEPIVOT },
445 { '\0', 0, "NextPolyRotationPivot()", 0, CMDID_NEXTPOLYROTATEPIVOT },
446 { '\0', 0, "MoveRotationPivotToArcCenter()", 0,
447 CMDID_MOVEROTATEPIVOTARCCNTR },
448 { '\0', 0, "MoveRotatePivotCenter()", 0, CMDID_MOVEROTATEPIVOTCENTER },
449 { '\0', 0, "MoveRotatePivotLeftTop()", 0, CMDID_MOVEROTATEPIVOTLT },
450 { '\0', 0, "MoveRotatePivotRightTop()", 0, CMDID_MOVEROTATEPIVOTRT },
451 { '\0', 0, "MoveRotatePivotLeftBottom()", 0, CMDID_MOVEROTATEPIVOTLB },
452 { '\0', 0, "MoveRotatePivotRightBottom()", 0, CMDID_MOVEROTATEPIVOTRB },
453 { '\0', 0, "MoveRotatePivotLeft()", 0, CMDID_MOVEROTATEPIVOTLEFT },
454 { '\0', 0, "MoveRotatePivotRight()", 0, CMDID_MOVEROTATEPIVOTRIGHT },
455 { '\0', 0, "MoveRotatePivotTop()", 0, CMDID_MOVEROTATEPIVOTTOP },
456 { '\0', 0, "MoveRotatePivotBottom()", 0, CMDID_MOVEROTATEPIVOTBOTTOM },
457 { '\0', 0, "ChooseRotatePivot()", 0, CMDID_CHOOSEROTATEPIVOT },
458 { '\0', 0, "ChooseColor()", 0, CMDID_COLORWHEEL },
459 { '\0', 0, "ExtendSegment()", 0, CMDID_EXTENDSEGMENT },
460 { '\0', 0, "InsertSymbol()", 0, CMDID_INSERTSYMBOL },
461 { '\0', 0, "ToggleRightMargin()", 0, CMDID_TOGGLERIGHTMARGIN },
462 { '\0', 0, "SpecifyRightMargin()", 0, CMDID_SPECIFYRIGHTMARGIN },
463 { '\0', 0, "ToggleTighterStructuredSplines()", 0,
464 CMDID_TOGGLETIGHTERSPLINES },
465 { '\0', 0, "ToggleFloodReplaceColorThreshold()", 0,
466 CMDID_TOGGLEFLOODREPLACECOLORTHRESH },
467 { '\0', 0, "SetFloodReplaceColorThreshold()", 0,
468 CMDID_SETFLOODREPLACECOLORTHRESH },
469 { '\0', 0, "RemoveTransparentPixel()", 0, CMDID_REMOVETRANSPIXEL },
470 { '\0', 0, "ReplaceColorWithTrans()", 0, CMDID_REPLACECOLORWITHTRANS },
471 { '\0', 0, "MakeBoxObjFromBoundingBox()", 0, CMDID_NEWRECTFROMBOUNDINGBOX },
472 { '\0', 0, "MakeRCBoxObjFromBoundingBox()", 0, CMDID_NEWRCBOXFROMBOUNDINGBOX },
473 { '\0', 0, "MakeOvalObjFromBoundingBox()", 0, CMDID_NEWOVALFROMBOUNDINGBOX },
474 { '\0', 0, "", 0, 0 }
475 };
476
477 static int maxShortCuts=0;
478 static int shortCutIndex[256];
479 static char *shortCutArgs[256];
480
481 typedef struct tagFuncKeyShortCutInfo {
482 char code;
483 unsigned int state;
484 char *name;
485 char *arg;
486 } FuncKeyShortCutInfo;
487
488 static FuncKeyShortCutInfo funcKeyInfo[13];
489
490 static int shortCutCmdIdIndex[MAXCMDIDS-CMDID_BASE];
491
492 static
FunctionKeySpec(buf,pn_code,pn_index_return)493 int FunctionKeySpec(buf, pn_code, pn_index_return)
494 char *buf;
495 int *pn_code, *pn_index_return;
496 {
497 int value=0;
498 char *colon_ptr=strchr(buf, ':');
499
500 if (colon_ptr == NULL) return FALSE;
501 *colon_ptr = '\0';
502 if (buf[0] != 'F' || sscanf(&buf[1], "%d", &value) != 1) {
503 *colon_ptr = ':';
504 return FALSE;
505 }
506 *colon_ptr++ = ':';
507 if (value < 1 || value > 12) return FALSE;
508
509 *pn_code = value;
510 *pn_index_return = (int)(colon_ptr-buf);
511
512 return TRUE;
513 }
514
InitShortCut()515 void InitShortCut()
516 {
517 int i=0, num_cmdids=MAXCMDIDS-CMDID_BASE;
518 char *c_ptr=NULL;
519
520 for (i=0; i < 256; i++) {
521 shortCutIndex[i] = INVALID;
522 shortCutArgs[i] = NULL;
523 }
524 memset(funcKeyInfo, 0, 13*sizeof(FuncKeyShortCutInfo));
525
526 maxShortCuts = 0;
527 if ((c_ptr=XGetDefault(mainDisplay, TOOL_NAME, "ShortCuts")) != NULL) {
528 int j=0, precise_match=0, ok=0, len=0;
529 unsigned int code=0;
530 char *saved_c_ptr=NULL, *tmp_c_ptr=NULL, *buf=NULL;
531
532 len = strlen(c_ptr);
533 if ((buf=(char *)malloc((len+1)*sizeof(char))) == NULL) {
534 FailAllocMessage();
535 return;
536 }
537 while (*c_ptr!=':' && *c_ptr!='!' && *c_ptr!='<' && *c_ptr!='\0') c_ptr++;
538 while (*c_ptr != '\0') {
539 saved_c_ptr = c_ptr;
540 precise_match = FALSE;
541 ok = TRUE;
542 if ((*c_ptr==':' || *c_ptr=='!') && strncmp(&c_ptr[1],"<Key>",5)==0) {
543 precise_match = TRUE;
544 strcpy(buf, &c_ptr[6]);
545 } else if (strncmp(c_ptr,"<Key>",5)==0) {
546 strcpy(buf, &c_ptr[5]);
547 } else {
548 ok = FALSE;
549 }
550 if (ok) {
551 tmp_c_ptr = buf;
552 while (*tmp_c_ptr != ')' && *tmp_c_ptr != '\n' &&
553 *tmp_c_ptr != '\0') {
554 tmp_c_ptr++;
555 }
556 if (*tmp_c_ptr == '\0') {
557 ok = FALSE;
558 } else {
559 int func_index=0;
560
561 if (*tmp_c_ptr == '\n') {
562 *tmp_c_ptr = '\0';
563 } else {
564 *(++tmp_c_ptr) = '\0';
565 }
566 code = buf[0]&0xff;
567 if (buf[0] != '\0' && buf[1] == ':' &&
568 ((code>0x20 && code<=0x7f) || (code>0xa0 && code<=0xff))) {
569 int found=TRUE;
570 char *paren_ptr=NULL;
571
572 if ((paren_ptr=strchr(&buf[2], '(')) == NULL) {
573 fprintf(stderr,
574 TgLoadString(STID_INVALID_SHORTCUT_ENTRY_SKIP), buf);
575 fprintf(stderr, "\n");
576 continue;
577 }
578 len = paren_ptr-(&buf[2]);
579 for (j=0; *(shortCutXlateTbl[j].name) != '\0'; j++) {
580 if (strncmp(shortCutXlateTbl[j].name, &buf[2], len) == 0 &&
581 shortCutXlateTbl[j].name[len] == '(') {
582 if (shortCutXlateTbl[j].num_args != 0) {
583 shortCutArgs[code] = (char*)malloc(
584 (strlen(&buf[len+2])+1)*sizeof(char));
585 if (shortCutArgs[code] == NULL) FailAllocMessage();
586 strcpy(shortCutArgs[code], ++paren_ptr);
587 }
588 if (shortCutIndex[code] != INVALID) {
589 fprintf(stderr,
590 TgLoadString(STID_DUP_SHORTCUT_ENTRY_FOR_CHAR),
591 code);
592 fprintf(stderr, "\n");
593 }
594 shortCutIndex[code] = j;
595 if (!precise_match) {
596 if (*buf>='a' && *buf<='z') {
597 code = *buf-'a'+'A';
598 if (shortCutIndex[code] != INVALID) {
599 fprintf(stderr, TgLoadString(
600 STID_DUP_SHORTCUT_ENTRY_FOR_CHAR), code);
601 fprintf(stderr, "\n");
602 }
603 shortCutIndex[code] = j;
604 } else if (*buf>='A' && *buf<='Z') {
605 code = *buf-'A'+'a';
606 if (shortCutIndex[code] != INVALID) {
607 fprintf(stderr, TgLoadString(
608 STID_DUP_SHORTCUT_ENTRY_FOR_CHAR), code);
609 fprintf(stderr, "\n");
610 }
611 shortCutIndex[code] = j;
612 }
613 }
614 maxShortCuts++;
615 break;
616 }
617 }
618 if (*(shortCutXlateTbl[j].name) == '\0') {
619 if (cmdLineTgrm2) {
620 int num_args=0;
621 int index=ValidTangram2CmdName(&buf[2], len, &num_args);
622
623 if (index != 0) {
624 if (num_args != 0) {
625 shortCutArgs[code] = (char*)malloc(
626 (strlen(&buf[len+2])+1)*sizeof(char));
627 if (shortCutArgs[code] == NULL) {
628 FailAllocMessage();
629 }
630 strcpy(shortCutArgs[code], ++paren_ptr);
631 }
632 if (shortCutIndex[code] != INVALID) {
633 fprintf(stderr, TgLoadString(
634 STID_DUP_SHORTCUT_ENTRY_FOR_CHAR), code);
635 fprintf(stderr, "\n");
636 }
637 shortCutIndex[code] = index;
638 if (!precise_match) {
639 if (*buf>='a' && *buf<='z') {
640 code = *buf-'a'+'A';
641 if (shortCutIndex[code] != INVALID) {
642 fprintf(stderr, TgLoadString(
643 STID_DUP_SHORTCUT_ENTRY_FOR_CHAR),
644 code);
645 fprintf(stderr, "\n");
646 }
647 shortCutIndex[code] = index;
648 } else if (*buf>='A' && *buf<='Z') {
649 code = *buf-'A'+'a';
650 if (shortCutIndex[code] != INVALID) {
651 fprintf(stderr, TgLoadString(
652 STID_DUP_SHORTCUT_ENTRY_FOR_CHAR),
653 code);
654 fprintf(stderr, "\n");
655 }
656 shortCutIndex[code] = index;
657 }
658 }
659 maxShortCuts++;
660 } else {
661 found = FALSE;
662 }
663 } else {
664 found = FALSE;
665 }
666 }
667 if (!found) {
668 fprintf(stderr,
669 TgLoadString(STID_INVALID_SHORTCUT_ENTRY_SKIP), buf);
670 fprintf(stderr, "\n");
671 }
672 } else if (FunctionKeySpec(buf, (int*)&code, &func_index)) {
673 int found=FALSE;
674 char *paren_ptr=NULL;
675
676 if ((paren_ptr=strchr(&buf[func_index], '(')) == NULL) {
677 fprintf(stderr,
678 TgLoadString(STID_INVALID_SHORTCUT_ENTRY_SKIP), buf);
679 fprintf(stderr, "\n");
680 continue;
681 }
682 len = paren_ptr-(&buf[func_index]);
683 for (j=0; *(shortCutXlateTbl[j].name) != '\0'; j++) {
684 if (strncmp(shortCutXlateTbl[j].name, &buf[func_index],
685 len) == 0 && shortCutXlateTbl[j].name[len] == '(') {
686 if (funcKeyInfo[code].name != NULL) {
687 fprintf(stderr,
688 TgLoadString(STID_DUP_SHORTCUT_FUNCTION_KEY),
689 code);
690 fprintf(stderr, "\n");
691 }
692 funcKeyInfo[code].code = shortCutXlateTbl[j].code;
693 funcKeyInfo[code].state = shortCutXlateTbl[j].state;
694 funcKeyInfo[code].name =
695 UtilStrDup(shortCutXlateTbl[j].name);
696 if (funcKeyInfo[code].name == NULL) {
697 FailAllocMessage();
698 }
699 if (shortCutXlateTbl[j].num_args != 0) {
700 funcKeyInfo[code].arg = (char*)malloc(
701 (strlen(&buf[len+func_index])+1)*sizeof(char));
702 if (funcKeyInfo[code].arg == NULL) {
703 FailAllocMessage();
704 }
705 strcpy(funcKeyInfo[code].arg, ++paren_ptr);
706 }
707 found = TRUE;
708 break;
709 }
710 }
711 if (!found) {
712 fprintf(stderr,
713 TgLoadString(STID_INVALID_SHORTCUT_ENTRY_SKIP), buf);
714 fprintf(stderr, "\n");
715 }
716 } else {
717 fprintf(stderr,
718 TgLoadString(STID_INVALID_SHORTCUT_ENTRY_SKIP), buf);
719 fprintf(stderr, "\n");
720 }
721 }
722 }
723 if (ok) {
724 while (*c_ptr!=')' && *c_ptr!='\0') c_ptr++;
725 while (*c_ptr!=':' && *c_ptr!='!' && *c_ptr!='<' && *c_ptr!='\0') {
726 c_ptr++;
727 }
728 } else {
729 fprintf(stderr, TgLoadString(STID_INVALID_SHORTCUT_ENTRY),
730 saved_c_ptr);
731 fprintf(stderr, "\n");
732 break;
733 }
734 }
735 free(buf);
736 }
737 for (i=0; i < num_cmdids; i++) {
738 shortCutCmdIdIndex[i] = INVALID;
739 }
740 for (i=0; *(shortCutXlateTbl[i].name) != '\0'; i++) {
741 int cmdid=shortCutXlateTbl[i].cmdid;
742
743 if (cmdid != INVALID) {
744 int index=cmdid-CMDID_BASE;
745
746 if (shortCutCmdIdIndex[index] == INVALID) {
747 shortCutCmdIdIndex[index] = i;
748 } else {
749 fprintf(stderr, TgLoadString(STID_WARN_DUP_CMDID), cmdid);
750 fprintf(stderr, "\n");
751 }
752 }
753 }
754 }
755
CleanUpShortCut()756 void CleanUpShortCut()
757 {
758 register int i;
759
760 for (i=0; i < 256; i++) {
761 if (shortCutArgs[i] != NULL) {
762 free(shortCutArgs[i]);
763 }
764 }
765 for (i=0; i < 13; i++) {
766 UtilFree(funcKeyInfo[i].name);
767 UtilFree(funcKeyInfo[i].arg);
768 }
769 }
770
FetchShortCut(c,code,state,name,args,args_sz)771 int FetchShortCut(c, code, state, name, args, args_sz)
772 int c, args_sz;
773 char *code, **name, *args;
774 unsigned int *state;
775 {
776 if (shortCutIndex[c] == INVALID) return FALSE;
777
778 if (cmdLineTgrm2 && (shortCutIndex[c] & CMDID_TANGRAM2_BASE) != 0) {
779 /* for tangram-II, just do it */
780 int num_args=0;
781
782 if (FetchTangram2ShortCutNumArgs(shortCutIndex[c]-CMDID_TANGRAM2_BASE,
783 &num_args) && num_args > 0) {
784 strcpy(args, shortCutArgs[c]);
785 } else {
786 *args = '\0';
787 }
788 DoTangram2ShortCut(shortCutIndex[c]-CMDID_TANGRAM2_BASE, args);
789
790 return FALSE;
791 }
792 *code = shortCutXlateTbl[shortCutIndex[c]].code;
793 *state = shortCutXlateTbl[shortCutIndex[c]].state;
794 *name = shortCutXlateTbl[shortCutIndex[c]].name;
795 if (shortCutXlateTbl[shortCutIndex[c]].num_args == 0) {
796 *args = '\0';
797 } else {
798 strcpy(args, shortCutArgs[c]);
799 }
800 return TRUE;
801 }
802
FetchFuncKeyShortCut(c,code,state,name,args,args_sz)803 int FetchFuncKeyShortCut(c, code, state, name, args, args_sz)
804 int c, args_sz;
805 char *code, **name, *args;
806 unsigned int *state;
807 {
808 int index=0;
809 char buf[MAXSTRING];
810
811 switch (c) {
812 case XK_F1: index=1; break;
813 case XK_F2: index=2; break;
814 case XK_F3: index=3; break;
815 case XK_F4: index=4; break;
816 case XK_F5: index=5; break;
817 case XK_F6: index=6; break;
818 case XK_F7: index=7; break;
819 case XK_F8: index=8; break;
820 case XK_F9: index=9; break;
821 case XK_F10: index=10; break;
822 case XK_F11: index=11; break;
823 case XK_F12: index=12; break;
824 default: return FALSE;
825 }
826 if (curChoice == DRAWTEXT) {
827 sprintf(buf, "DrawTextFuncKey_F%1d", index);
828 if (XGetDefault(mainDisplay, TOOL_NAME, buf) != NULL) {
829 return FALSE;
830 }
831 }
832 if (funcKeyInfo[index].name == NULL) return FALSE;
833
834 *code = funcKeyInfo[index].code;
835 *state = funcKeyInfo[index].state;
836 *name = funcKeyInfo[index].name;
837
838 if (funcKeyInfo[index].arg == NULL) {
839 *args = '\0';
840 } else {
841 strcpy(args, funcKeyInfo[index].arg);
842 }
843 return TRUE;
844 }
845
FetchCmdById(nCmdId,code,state,name,args)846 int FetchCmdById(nCmdId, code, state, name, args)
847 int nCmdId;
848 char *code, **name, *args;
849 unsigned int *state;
850 {
851 int cmd_index=nCmdId-CMDID_BASE, table_index=INVALID;
852
853 if (nCmdId >= MAXCMDIDS || shortCutCmdIdIndex[cmd_index] == INVALID) {
854 return FALSE;
855 }
856 table_index = shortCutCmdIdIndex[cmd_index];
857
858 if (shortCutXlateTbl[table_index].num_args != 0) {
859 strcpy(args, "-1");
860 }
861 *code = shortCutXlateTbl[table_index].code;
862 *state = shortCutXlateTbl[table_index].state;
863 *name = shortCutXlateTbl[table_index].name;
864 return TRUE;
865 }
866
ValidShortCut(name,num_args,code,state)867 int ValidShortCut(name, num_args, code, state)
868 char *name, *code;
869 int num_args;
870 unsigned int *state;
871 {
872 int j, len=strlen(name);
873
874 if (len <= 2) return FALSE;
875 for (j=0; *(shortCutXlateTbl[j].name) != '\0'; j++) {
876 if (num_args == ((int)shortCutXlateTbl[j].num_args) &&
877 strncmp(shortCutXlateTbl[j].name, name, len-2) == 0 &&
878 shortCutXlateTbl[j].name[len] == '(' &&
879 shortCutXlateTbl[j].name[len+1] == ')') {
880 *code = shortCutXlateTbl[j].code;
881 *state = shortCutXlateTbl[j].state;
882 return TRUE;
883 }
884 }
885 return FALSE;
886 }
887