bitmap/BitEdit.c | 1128 +++++++++ bitmap/Bitmap-color.ad | 19 bitmap/Bitmap-nocase.ad | 233 + bitmap/Bitmap.ad | 229 + bitmap/Bitmap.c | 1950 ++++++++++++++++ bitmap/Bitmap.h | 286 ++ bitmap/BitmapP.h | 211 + bitmap/COPYING | 12 bitmap/ChangeLog | 267 ++ bitmap/CutPaste.c | 207 + bitmap/Dashes | 4 bitmap/Dialog.c | 202 + bitmap/Dialog.h | 57 bitmap/Down | 13 bitmap/Excl | 17 bitmap/FlipHoriz | 13 bitmap/FlipVert | 13 bitmap/Fold | 13 bitmap/Graphics.c | 1575 +++++++++++++ bitmap/Handlers.c | 678 +++++ bitmap/Left | 13 bitmap/Makefile.am | 151 + bitmap/Makefile.in | 933 +++++++ bitmap/ReqMach.c | 263 ++ bitmap/Requests.h | 87 bitmap/Right | 13 bitmap/RotateLeft | 13 bitmap/RotateRight | 13 bitmap/Stipple | 4 bitmap/Term | 14 bitmap/Up | 13 bitmap/aclocal.m4 | 1573 +++++++++++++ bitmap/atobm.c | 296 ++ bitmap/autogen.sh | 13 bitmap/bitmap.icon | 14 bitmap/bitmap.man | 656 +++++ bitmap/bmtoa.c | 216 + bitmap/compile | 142 + bitmap/config.guess | 1510 ++++++++++++ bitmap/config.h.in | 34 bitmap/config.sub | 1619 +++++++++++++ bitmap/configure | 5807 ++++++++++++++++++++++++++++++++++++++++++++++++ bitmap/configure.ac | 66 bitmap/depcomp | 530 ++++ bitmap/install-sh | 323 ++ bitmap/missing | 360 ++ debian/changelog | 6 debian/control | 23 debian/rules | 12 49 files changed, 21823 insertions(+), 21 deletions(-)
New commits: commit a17e1be1339a477ef7b41e9ae5deca81d0ea2432 Author: Julien Cristau <[EMAIL PROTECTED]> Date: Sun Jan 6 18:46:30 2008 +0100 * Re-add bitmap (closes: #445097). diff --git a/bitmap/AUTHORS b/bitmap/AUTHORS new file mode 100644 index 0000000..e69de29 diff --git a/bitmap/BitEdit.c b/bitmap/BitEdit.c new file mode 100644 index 0000000..ee850d8 --- /dev/null +++ b/bitmap/BitEdit.c @@ -0,0 +1,1128 @@ +/* $Xorg: BitEdit.c,v 1.4 2001/02/09 02:05:28 xorgcvs Exp $ */ +/* + +Copyright 1989, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from The Open Group. + +*/ +/* $XFree86: xc/programs/bitmap/BitEdit.c,v 1.6tsi Exp $ */ + +/* + * Author: Davor Matic, MIT X Consortium + */ + + + + +#include <stdio.h> +#include <stdlib.h> +#include <X11/Intrinsic.h> +#include <X11/StringDefs.h> +#include <X11/Xaw/Paned.h> +#include <X11/Xaw/Form.h> +#include <X11/Xaw/Box.h> +#include <X11/Xaw/Command.h> +#include <X11/Xaw/Toggle.h> +#include <X11/Xaw/MenuButton.h> +#include <X11/Xaw/SimpleMenu.h> +#include <X11/Xaw/SmeLine.h> +#include <X11/Xaw/SmeBSB.h> +#include <X11/Xmu/SysUtil.h> +#include "Bitmap.h" + +#include <X11/bitmaps/xlogo16> + +static char *usage = "[-options ...] filename\n\ +\n\ +where options include all standard toolkit options plus:\n\ + -size WIDTHxHEIGHT\n\ + -sw dimension\n\ + -sh dimension\n\ + -gt dimension\n\ + -grid, +grid\n\ + -axes, +axes\n\ + -dashed, +dashed\n\ + -stippled, +stippled\n\ + -proportional, +proportional\n\ + -basename basename\n\ + -dashes filename\n\ + -stipple filename\n\ + -hl color\n\ + -fr color\n\ +\n\ +The default WIDTHxHEIGHT is 16x16.\n"; + +static XrmOptionDescRec options[] = { + { "-axes", "*bitmap.axes", XrmoptionNoArg, "True"}, + { "+axes", "*bitmap.axes", XrmoptionNoArg, "False"}, + { "-basename", "*bitmap.basename", XrmoptionSepArg, NULL}, + { "-dashed", "*bitmap.dashed", XrmoptionNoArg, "True"}, + { "+dashed", "*bitmap.dashed", XrmoptionNoArg, "False"}, + { "-dashes", "*bitmap.dashes", XrmoptionSepArg, NULL}, + { "-fr", "*bitmap.frame", XrmoptionSepArg, NULL}, + { "-gt", "*bitmap.gridTolerance",XrmoptionSepArg, NULL}, + { "-grid", "*bitmap.grid", XrmoptionNoArg, "True"}, + { "+grid", "*bitmap.grid", XrmoptionNoArg, "False"}, + { "-hl", "*bitmap.highlight", XrmoptionSepArg, NULL}, + { "-proportional","*bitmap.proportional", XrmoptionNoArg, "True"}, + { "+proportional","*bitmap.proportional", XrmoptionNoArg, "False"}, + { "-size", "*bitmap.size", XrmoptionSepArg, NULL}, + { "-sh", "*bitmap.squareHeight", XrmoptionSepArg, NULL}, + { "-sw", "*bitmap.squareWidth", XrmoptionSepArg, NULL}, + { "-stipple", "*bitmap.stipple", XrmoptionSepArg, NULL}, + { "-stippled", "*bitmap.stippled", XrmoptionNoArg, "True"}, + { "+stippled", "*bitmap.stippled", XrmoptionNoArg, "False"}, +}; + +typedef struct { + int id; + String name; + Boolean trap; + Widget widget; + } ButtonRec; + +static ButtonRec file_menu[] = { +#define New 101 + {New, "new", True}, +#define Load 102 + {Load, "load", True}, +#define Insert 103 + {Insert, "insert", True}, +#define Save 104 + {Save, "save", True}, +#define SaveAs 105 + {SaveAs, "saveAs", True}, +#define Resize 106 + {Resize, "resize", True}, +#define Rescale 107 + {Rescale, "rescale", True}, +#define Filename 108 + {Filename, "filename", True}, +#define Basename 109 + {Basename, "basename", True}, +#define Dummy -1 + {Dummy, "line", False}, +#define Quit 110 + {Quit, "quit", True}, +}; + +static ButtonRec edit_menu[] = { +#define Image 201 + {Image, "image", True}, +#define Grid 203 + {Grid, "grid", True}, +#define Dashed 204 + {Dashed, "dashed", True}, +#define Axes 205 + {Axes, "axes", True}, +#define Stippled 206 + {Stippled, "stippled", True}, +#define Proportional 207 + {Proportional, "proportional", True}, +#define Zoom 208 + {Zoom, "zoom", True}, +/* Dummy */ + {Dummy, "line", False}, +#define Cut 209 + {Cut, "cut", True}, +#define Copy 210 + {Copy, "copy", True}, +#define Paste 211 + {Paste, "paste", True}, +}; + +static ButtonRec buttons[] = { +/*#define Clear 1*/ + {Clear, "clear", False}, +/*#define Set 2*/ + {Set, "set", False}, +/*#define Invert 3*/ + {Invert, "invert", False}, +#define Mark 26 + {Mark, "mark", True}, +#define Unmark 27 + {Unmark, "unmark", False}, +#define CopyImm 4 + {CopyImm, "copy", True}, +#define MoveImm 5 + {MoveImm, "move", True}, +#define FlipHoriz 6 + {FlipHoriz, "flipHoriz", False}, +#define Up 7 + {Up, "up", False}, +#define FlipVert 8 + {FlipVert, "flipVert", False}, +#define Left 9 + {Left, "left", False}, +#define Fold 10 + {Fold, "fold", False}, +#define Right 11 + {Right, "right", False}, +#define RotateLeft 12 + {RotateLeft, "rotateLeft", False}, +#define Down 13 + {Down, "down", False}, +#define RotateRight 14 + {RotateRight, "rotateRight", False}, +#define Point 15 + {Point, "point", True}, +#define Curve 16 + {Curve, "curve", True}, +#define Line 17 + {Line, "line", True}, +#define Rectangle 18 + {Rectangle, "rectangle", True}, +#define FilledRectangle 19 + {FilledRectangle, "filledRectangle", True}, +#define Circle 20 + {Circle, "circle", True}, +#define FilledCircle 21 + {FilledCircle, "filledCircle", True}, +#define FloodFill 22 + {FloodFill, "floodFill", True}, +#define SetHotSpot 23 + {SetHotSpot, "setHotSpot", True}, +#define ClearHotSpot 24 + {ClearHotSpot, "clearHotSpot", False}, +#define Undo 25 + {Undo, "undo", False}, +}; + +#include "Dialog.h" + +static Widget + top_widget, + parent_widget, + formy_widget, + fileMenu_widget, + editMenu_widget, + status_widget, + pane_widget, + form_widget, + bitmap_widget, + image_shell, + box_widget, + normal_image_widget, + inverted_image_widget; +static Boolean image_visible = False; +static Pixmap check_mark; +static Dialog input_dialog, error_dialog, qsave_dialog; +static Time btime; +static String filename = NULL, base_name = NULL, format; +static char message[80]; + + +void FixMenu ( Widget w, XEvent *event, String *params, Cardinal *num_params ); +void SwitchImage ( void ); +void SwitchGrid( void ); +void SwitchDashed( void ); +void SwitchAxes( void ); +void SwitchStippled( void ); +void SwitchProportional( void ); +void SwitchZoom( void ); +void DoCut( void ); +void DoCopy( void ); +void DoPaste( void ); +void DoNew( void ); +void DoLoad( void ); +void DoInsert( void ); +void DoSave( void ); +void DoSaveAs( void ); +void DoResize( void ); +void DoRescale( void ); +void DoFilename( void ); +void DoBasename( void ); +void DoQuit ( Widget w, XEvent *event, String *params, Cardinal *num_params ); + +static XtActionsRec actions_table[] = { + {"fix-menu", FixMenu}, + {"switch-image", (XtActionProc)SwitchImage}, + {"switch-grid", (XtActionProc)SwitchGrid}, + {"switch-dashed", (XtActionProc)SwitchDashed}, + {"switch-axes", (XtActionProc)SwitchAxes}, + {"switch-stippled", (XtActionProc)SwitchStippled}, + {"switch-proportional", (XtActionProc)SwitchProportional}, + {"switch-zoom", (XtActionProc)SwitchZoom}, + {"do-cut", (XtActionProc)DoCut}, + {"do-copy", (XtActionProc)DoCopy}, + {"do-paste", (XtActionProc)DoPaste}, + {"do-new", (XtActionProc)DoNew}, + {"do-load", (XtActionProc)DoLoad}, + {"do-insert", (XtActionProc)DoInsert}, + {"do-save", (XtActionProc)DoSave}, + {"do-save-as", (XtActionProc)DoSaveAs}, + {"do-resize", (XtActionProc)DoResize}, + {"do-rescale", (XtActionProc)DoRescale}, + {"do-filename", (XtActionProc)DoFilename}, + {"do-basename", (XtActionProc)DoBasename}, + {"do-quit", DoQuit} +}; + +static Atom wm_delete_window; + +static void +FixImage(void) +{ + Pixmap old_image, image; + int n; + Arg wargs[2]; + + if (!image_visible) return; + + n=0; + XtSetArg(wargs[n], XtNbitmap, &old_image); n++; + XtGetValues(normal_image_widget, wargs, n); + + + image = BWGetUnzoomedPixmap(bitmap_widget); + + n=0; + XtSetArg(wargs[n], XtNbitmap, image); n++; + XtSetValues(normal_image_widget, wargs, n); + XtSetValues(inverted_image_widget, wargs, n); + + if (old_image != XtUnspecifiedPixmap) + XFreePixmap(XtDisplay(bitmap_widget), old_image); +} + +static void +FixStatus(void) +{ + int n; + Arg wargs[2]; + String str, label; + + str = BWUnparseStatus(bitmap_widget); + + n=0; + XtSetArg(wargs[n], XtNlabel, &label); n++; + XtGetValues(status_widget, wargs, n); + + if (strcmp(str, label)) { + n = 0; + XtSetArg(wargs[n], XtNlabel, str); n++; + XtSetValues(status_widget, wargs, n); + } + + /*XtFree(str); */ +} + +static void +FixUp(void) +{ + FixImage(); + FixStatus(); +} + +static void +FixEntry(Widget w, int *id) +{ + int n; + Arg wargs[2]; + Time dummy = 0; + + n = 0; + + switch (*id) { + + case Image: + XtSetArg(wargs[n], XtNleftBitmap, + image_visible ? check_mark : None); n++; + break; + + case Grid: + XtSetArg(wargs[n], XtNleftBitmap, + BWQueryGrid(bitmap_widget) ? check_mark : None); n++; + break; + + case Dashed: + XtSetArg(wargs[n], XtNleftBitmap, + BWQueryDashed(bitmap_widget) ? check_mark : None); n++; + break; + + case Axes: + XtSetArg(wargs[n], XtNleftBitmap, + BWQueryAxes(bitmap_widget) ? check_mark : None); n++; + break; + + case Stippled: + XtSetArg(wargs[n], XtNleftBitmap, + BWQueryStippled(bitmap_widget) ? check_mark : None); n++; + break; + + case Proportional: + XtSetArg(wargs[n], XtNleftBitmap, + BWQueryProportional(bitmap_widget) ? check_mark : None); n++; + break; + + case Zoom: + XtSetArg(wargs[n], XtNleftBitmap, + BWQueryZooming(bitmap_widget) ? check_mark : None); n++; + break; + + case Copy: + case Cut: + XtSetArg(wargs[n], XtNsensitive, BWQueryMarked(bitmap_widget)); n++; + break; + + case Paste: + XtSetArg(wargs[n], XtNsensitive, + BWQuerySelection(bitmap_widget, dummy)); n++; + break; + + default: + return; + } + + XtSetValues(w, wargs, n); +} + +/* ARGSUSED */ +void FixMenu(Widget w, + XEvent *event, + String *params, + Cardinal *num_params) +{ + int i; + + btime = event->xbutton.time; + + for (i = 0; i < XtNumber(edit_menu); i++) + FixEntry(edit_menu[i].widget, &edit_menu[i].id); +} + +static int zero = 0; +#define Plain (char *)&zero,sizeof(int) +/* ARGSUSED */ +static void +TheCallback(Widget w, /* not used */ + XtPointer clientData, + XtPointer callData) +{ + int *id = (int *)clientData; + switch (*id) { + + case New: + DoNew(); + break; + + case Load: + DoLoad(); + break; + + case Insert: + DoInsert(); + break; + + case Save: + DoSave(); + break; + + case SaveAs: + DoSaveAs(); + break; + + case Resize: + DoResize(); + break; + + case Rescale: + DoRescale(); + break; + + case Filename: + DoFilename(); + break; + + case Basename: + DoBasename(); + break; + + case Image: + SwitchImage(); + break; + + case Grid: + SwitchGrid(); + break; + + case Dashed: + SwitchDashed(); + break; + + case Axes: + SwitchAxes(); + break; + + case Stippled: + SwitchStippled(); + break; + + case Proportional: + SwitchProportional(); + break; + + case Zoom: + SwitchZoom(); + break; + + case Cut: + DoCut(); + break; + + case Copy: + DoCopy(); + break; + + case Paste: + DoPaste(); + break; + + case Clear: + BWStoreToBuffer(bitmap_widget); + BWClear(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + break; + + case Set: + BWStoreToBuffer(bitmap_widget); + BWSet(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); +break; + + case Invert: + BWStoreToBuffer(bitmap_widget); + BWInvert(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + break; + + case Mark: + BWRemoveAllRequests(bitmap_widget); + BWEngageRequest(bitmap_widget, MarkRequest, True, Plain); + break; + + case Unmark: + BWUnmark(bitmap_widget); + break; + + case CopyImm: + BWRemoveAllRequests(bitmap_widget); + if (BWQueryMarked(bitmap_widget)) { + BWAddRequest(bitmap_widget, MarkRequest, False, Plain); + BWEngageRequest(bitmap_widget, CopyRequest, True, Plain); + } + else { + BWEngageRequest(bitmap_widget, MarkRequest, False, Plain); + BWAddRequest(bitmap_widget, CopyRequest, True, Plain); + } + break; + + case MoveImm: + BWRemoveAllRequests(bitmap_widget); + if (BWQueryMarked(bitmap_widget)) { + BWAddRequest(bitmap_widget, MarkRequest, False, Plain); + BWEngageRequest(bitmap_widget, MoveRequest, True, Plain); + } + else { + BWEngageRequest(bitmap_widget, MarkRequest, False, Plain); + BWAddRequest(bitmap_widget, MoveRequest, True, Plain); + } + break; + + case Up: + BWStoreToBuffer(bitmap_widget); + BWUp(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + break; + + case Down: + BWStoreToBuffer(bitmap_widget); + BWDown(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + break; + + case Left: + BWStoreToBuffer(bitmap_widget); + BWLeft(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + break; + + case Right: + BWStoreToBuffer(bitmap_widget); + BWRight(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + break; + + case Fold: + BWStoreToBuffer(bitmap_widget); + BWFold(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + break; + + case FlipHoriz: + BWStoreToBuffer(bitmap_widget); + BWFlipHoriz(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + break; + + case FlipVert: + BWStoreToBuffer(bitmap_widget); + BWFlipVert(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + break; + + case RotateRight: + BWStoreToBuffer(bitmap_widget); + BWRotateRight(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + break; + + case RotateLeft: + BWStoreToBuffer(bitmap_widget); + BWRotateLeft(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + break; + + case Point: + BWRemoveAllRequests(bitmap_widget); + BWEngageRequest(bitmap_widget, PointRequest, True, Plain); + break; + + case Curve: + BWRemoveAllRequests(bitmap_widget); + BWEngageRequest(bitmap_widget, CurveRequest, True, Plain); + break; + + case Line: + BWRemoveAllRequests(bitmap_widget); + BWEngageRequest(bitmap_widget, LineRequest, True, Plain); + break; + + case Rectangle: + BWRemoveAllRequests(bitmap_widget); + BWEngageRequest(bitmap_widget, RectangleRequest, True, Plain); + break; + + case FilledRectangle: + BWRemoveAllRequests(bitmap_widget); + BWEngageRequest(bitmap_widget, FilledRectangleRequest, True, Plain); + break; + + case Circle: + BWRemoveAllRequests(bitmap_widget); + BWEngageRequest(bitmap_widget, CircleRequest, True, Plain); + break; + + case FilledCircle: + BWRemoveAllRequests(bitmap_widget); + BWEngageRequest(bitmap_widget, FilledCircleRequest, True, Plain); + break; + + case FloodFill: + BWRemoveAllRequests(bitmap_widget); + BWEngageRequest(bitmap_widget, FloodFillRequest, True, Plain); + break; + + case SetHotSpot: + BWRemoveAllRequests(bitmap_widget); + BWEngageRequest(bitmap_widget, HotSpotRequest, True, Plain); + break; + + case ClearHotSpot: + BWStoreToBuffer(bitmap_widget); + BWClearHotSpot(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + break; + + case Undo: + BWUndo(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + break; + + case Quit: + DoQuit(bitmap_widget, NULL, NULL, NULL); + break; + } /* don't add anything below this line */ +} + +/* ARGSUSED */ + +void SwitchImage() +{ + if (image_visible) { + XtPopdown(image_shell); + image_visible = False; + } + else { + Position image_x, image_y; + int n; + Arg wargs[3]; + + XtTranslateCoords(bitmap_widget, + 10, 10, &image_x, &image_y); + + n = 0; + XtSetArg(wargs[n], XtNx, image_x); n++; + XtSetArg(wargs[n], XtNy, image_y); n++; + XtSetValues(image_shell, wargs, n); + + image_visible = True; + + FixImage(); + XtPopup(image_shell, XtGrabNone); + FixImage(); + } +} + +void SwitchGrid() +{ + BWSwitchGrid(bitmap_widget); +} + +void SwitchDashed() +{ + BWSwitchDashed(bitmap_widget); +} + +void SwitchAxes() +{ + BWSwitchAxes(bitmap_widget); +} + +void SwitchStippled() +{ + BWSwitchStippled(bitmap_widget); +} + +void SwitchProportional() +{ + BWSwitchProportional(bitmap_widget); +} + +void SwitchZoom() +{ + if (BWQueryZooming(bitmap_widget)) { + BWZoomOut(bitmap_widget); + BWChangeNotify(bitmap_widget); + } + else { + if (BWQueryMarked(bitmap_widget)) { + BWStoreToBuffer(bitmap_widget); + BWZoomMarked(bitmap_widget); + BWChangeNotify(bitmap_widget); + } + else { + BWEngageRequest(bitmap_widget, ZoomInRequest, False, Plain); + } + } +} + +void DoCut() +{ + BWStore(bitmap_widget); + BWStoreToBuffer(bitmap_widget); + BWClearMarked(bitmap_widget); + BWUnmark(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); +} + +void DoCopy() +{ + BWStore(bitmap_widget); + BWUnmark(bitmap_widget); +} + +void DoPaste() +{ + BWRequestSelection(bitmap_widget, btime, TRUE); + BWEngageRequest(bitmap_widget, RestoreRequest, False, Plain); +} + +void DoNew() +{ + BWGetFilename(bitmap_widget, &filename); + if (PopupDialog(input_dialog, "New file:", + filename, &filename, XtGrabExclusive) == Okay) { + BWChangeFilename(bitmap_widget, filename); + BWChangeBasename(bitmap_widget, filename); + BWStoreToBuffer(bitmap_widget); + BWClear(bitmap_widget); + BWClearHotSpot(bitmap_widget); + BWChangeNotify(bitmap_widget); + BWClearChanged(bitmap_widget); + BWUnmark(bitmap_widget); + FixStatus(); + } +} + +void DoLoad() +{ + if (BWQueryChanged(bitmap_widget)) { + BWGetFilename(bitmap_widget, &filename); + RetryLoadSave: + switch (PopupDialog(qsave_dialog, "Save file before loading?", + filename, &filename, XtGrabExclusive)) { + case Yes: + if (BWWriteFile(bitmap_widget, filename, NULL) + != BitmapSuccess) { + XmuSnprintf(message, sizeof(message), "Can't write file: %s", filename); + if (PopupDialog(error_dialog, message, + NULL, NULL, XtGrabExclusive) == Retry) + goto RetryLoadSave; + } + break; + + case Cancel: + return; + } + } + BWGetFilepath(bitmap_widget, &filename); + RetryLoad: + if (PopupDialog(input_dialog, "Load file:", + filename, &filename, XtGrabExclusive) == Okay) { + if (BWReadFile(bitmap_widget, filename, NULL) != BitmapSuccess) { + XmuSnprintf(message, sizeof(message), "Can't read file: %s", filename); + if (PopupDialog(error_dialog, message, + NULL, NULL, XtGrabExclusive) == Retry) + goto RetryLoad; + } + else { + BWChangeNotify(bitmap_widget); + BWClearChanged(bitmap_widget); + FixStatus(); + } + } +} + +void DoInsert() +{ + BWGetFilepath(bitmap_widget, &filename); + RetryInsert: + if (PopupDialog(input_dialog, "Insert file:", + filename, &filename, XtGrabExclusive) == Okay) { + if (BWStoreFile(bitmap_widget, filename, NULL) != BitmapSuccess) { + XmuSnprintf(message, sizeof(message), "Can't read file: %s", filename); + if (PopupDialog(error_dialog, message, + NULL, NULL, XtGrabExclusive) == Retry) + goto RetryInsert; + } + else { + BWEngageRequest(bitmap_widget, RestoreRequest, False, Plain); + } + } +} + +void DoSave() +{ + BWGetFilename(bitmap_widget, &filename); + if (!strcmp(filename, "")) + DoSaveAs(); + else if (BWWriteFile(bitmap_widget, NULL, NULL) != BitmapSuccess) { + XmuSnprintf(message, sizeof(message), "Can't write file: %s", filename); + if (PopupDialog(error_dialog, message, + NULL, NULL, XtGrabExclusive) == Retry) + DoSaveAs(); + } + else { + BWClearChanged(bitmap_widget); + } +} + +void DoSaveAs() +{ + BWGetFilename(bitmap_widget, &filename); + RetrySave: + if (PopupDialog(input_dialog, "Save file:", + filename, &filename, XtGrabExclusive) == Okay) { + if (BWWriteFile(bitmap_widget, filename, NULL) != BitmapSuccess) { + XmuSnprintf(message, sizeof(message), "Can't write file: %s", filename); + if (PopupDialog(error_dialog, message, + NULL, NULL, XtGrabExclusive) == Retry) + goto RetrySave; + } + else { + BWClearChanged(bitmap_widget); + FixStatus(); + } + } +} + +void DoResize() +{ + Dimension width, height; + format = ""; + RetryResize: + if (PopupDialog(input_dialog, "Resize to WIDTHxHEIGHT:", + format, &format, XtGrabExclusive) == Okay) { + if (BWParseSize(format, &width, &height)) { + BWResize(bitmap_widget, width, height); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + FixStatus(); + } + else { + XmuSnprintf(message, sizeof(message), "Wrong format: %s", format); + if (PopupDialog(error_dialog, message, + NULL, NULL, XtGrabExclusive) == Retry) + goto RetryResize; + } + } +} + +void DoRescale() +{ + Dimension width, height; + + format = ""; + RetryRescale: + if (PopupDialog(input_dialog, "Rescale to WIDTHxHEIGHT:", + format, &format, XtGrabExclusive) == Okay) { + if (BWParseSize(format, &width, &height)) { + BWRescale(bitmap_widget, width, height); + BWChangeNotify(bitmap_widget); + BWSetChanged(bitmap_widget); + FixStatus(); + } + else { + XmuSnprintf(message, sizeof(message), "Wrong format: %s", format); + if (PopupDialog(error_dialog, message, + NULL, NULL, XtGrabExclusive) == Retry) + goto RetryRescale; + } + } +} + +void DoFilename() +{ + BWGetFilename(bitmap_widget, &filename); -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]