Mercurial > hg > xemacs-beta
diff src/console-msw.c @ 563:183866b06e0b
[xemacs-hg @ 2001-05-24 07:50:48 by ben]
Makefile.in.in, abbrev.c, alloc.c, buffer.c, bytecode.c, callint.c, callproc.c, casetab.c, chartab.c, cmdloop.c, cmds.c, console-msw.c, console-msw.h, console-stream.c, console-tty.c, console-x.c, console.c, data.c, database.c, debug.c, device-gtk.c, device-msw.c, device-tty.c, device-x.c, device.c, dialog-gtk.c, dialog-msw.c, dialog-x.c, dialog.c, dired-msw.c, dired.c, doc.c, doprnt.c, dragdrop.c, editfns.c, eldap.c, eldap.h, elhash.c, emacs-widget-accessors.c, emacs.c, emodules.c, esd.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, events.c, extents.c, faces.c, file-coding.c, fileio.c, filelock.c, floatfns.c, fns.c, font-lock.c, frame-gtk.c, frame-x.c, frame.c, general-slots.h, glade.c, glyphs-gtk.c, glyphs-msw.c, glyphs-widget.c, glyphs-x.c, glyphs.c, glyphs.h, gpmevent.c, gui-gtk.c, gui-x.c, gui.c, gutter.c, hpplay.c, indent.c, input-method-xlib.c, insdel.c, intl.c, keymap.c, libsst.c, libsst.h, linuxplay.c, lisp.h, lread.c, lstream.c, lstream.h, macros.c, marker.c, md5.c, menubar-gtk.c, menubar-msw.c, menubar-x.c, menubar.c, minibuf.c, miscplay.c, miscplay.h, mule-ccl.c, mule-charset.c, mule-wnnfns.c, mule.c, nas.c, ntplay.c, ntproc.c, objects-gtk.c, objects-msw.c, objects-x.c, objects.c, postgresql.c, print.c, process-nt.c, process-unix.c, process.c, ralloc.c, rangetab.c, redisplay.c, scrollbar.c, search.c, select-gtk.c, select-x.c, select.c, sgiplay.c, sheap.c, sound.c, specifier.c, sunplay.c, symbols.c, symeval.h, symsinit.h, syntax.c, sysdep.c, toolbar-msw.c, toolbar.c, tooltalk.c, ui-byhand.c, ui-gtk.c, undo.c, unexaix.c, unexapollo.c, unexconvex.c, unexec.c, widget.c, win32.c, window.c:
-- defsymbol -> DEFSYMBOL.
-- add an error type to all errors.
-- eliminate the error functions in eval.c that let you just
use Qerror as the type.
-- redo the error API to be more consistent, sensibly named,
and easier to use.
-- redo the error hierarchy somewhat. create new errors:
structure-formation-error, gui-error, invalid-constant,
stack-overflow, out-of-memory, process-error, network-error,
sound-error, printing-unreadable-object, base64-conversion-
error; coding-system-error renamed to text-conversion error;
some others.
-- fix Mule problems in error strings in emodules.c, tooltalk.c.
-- fix error handling in mswin open-network-stream.
-- Mule-ize all sound files and clean up the headers.
-- nativesound.h -> sound.h and used for all sound files.
-- move some shared stuff into glyphs-shared.c: first attempt
at eliminating some of the massive GTK code duplication.
xemacs.mak: add glyphs-shared.c.
xemacs-faq.texi: document how to debug X errors
subr.el: fix doc string to reflect reality
author | ben |
---|---|
date | Thu, 24 May 2001 07:51:33 +0000 |
parents | abe6d1db359e |
children | 190b164ddcac |
line wrap: on
line diff
--- a/src/console-msw.c Thu May 24 06:30:21 2001 +0000 +++ b/src/console-msw.c Thu May 24 07:51:33 2001 +0000 @@ -1,5 +1,5 @@ /* Console functions for mswindows. - Copyright (C) 1996, 2000 Ben Wing. + Copyright (C) 1996, 2000, 2001 Ben Wing. This file is part of XEmacs. @@ -156,7 +156,7 @@ if (!NILP (connection)) { if (ERRB_EQ (errb, ERROR_ME)) - signal_simple_error + invalid_argument ("Invalid (non-nil) connection for mswindows device/console", connection); else @@ -530,14 +530,14 @@ #undef FROB else - signal_simple_error ("Unrecognized flag", st); + invalid_constant ("Unrecognized flag", st); } { int retval = MessageBox (NULL, msgout, titleout, sty); if (retval == 0) - error ("Out of memory when calling `mswindows-message-box'"); + out_of_memory ("When calling `mswindows-message-box'", Qunbound); #define FROB(sym, val) if (retval == val) return sym FROB (Qabort, IDABORT); @@ -549,28 +549,51 @@ FROB (Qyes, IDYES); #undef FROB - signal_simple_error ("Unknown return value from MessageBox()", - make_int (retval)); + invalid_argument ("Unknown return value from MessageBox()", + make_int (retval)); } return Qnil; } +Lisp_Object +mswindows_lisp_error (int errnum) +{ + LPTSTR lpMsgBuf; + Lisp_Object result; + Bufbyte *inres; + Bytecount len; + + FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER + | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, errnum, + /* !!#### not Mule-correct */ + MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), + /* yeah, i'm casting a char ** to a char *. ya gotta + problem widdat? */ + (LPTSTR) &lpMsgBuf, + 0, + NULL); + + TO_INTERNAL_FORMAT (C_STRING, lpMsgBuf, ALLOCA, (inres, len), + Qmswindows_tstr); + /* Messages tend to end with a period and newline */ + if (len >= 3 && !strcmp (inres + len - 3, ".\r\n")) + len -= 3; + result = make_string (inres, len); + + LocalFree (lpMsgBuf); + return result; +} + void mswindows_output_last_error (char *frob) { - LPVOID lpMsgBuf; - int errval = GetLastError(); + int errval = GetLastError (); + Lisp_Object errmess = mswindows_lisp_error (errval); - FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER - | FORMAT_MESSAGE_FROM_SYSTEM, - NULL, errval, - MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &lpMsgBuf, - 0, - NULL); stderr_out ("last error during %s is %d: %s\n", - frob, errval, (char*)lpMsgBuf); + frob, errval, XSTRING_DATA (errmess)); } static Lisp_Object @@ -585,7 +608,8 @@ if (NILP (connection)) { if (ERRB_EQ (errb, ERROR_ME)) - error ("There is no default printer in the system"); + invalid_state ("There is no default printer in the system", + Qunbound); else return Qunbound; } @@ -612,40 +636,40 @@ { DEFSUBR (Fmswindows_debugging_output); - defsymbol (&Qabortretryignore, "abortretryignore"); - defsymbol (&Qapplmodal, "applmodal"); - defsymbol (&Qdefault_desktop_only, "default-desktop-only"); - defsymbol (&Qdefbutton1, "defbutton1"); - defsymbol (&Qdefbutton2, "defbutton2"); - defsymbol (&Qdefbutton3, "defbutton3"); - defsymbol (&Qdefbutton4, "defbutton4"); - /* defsymbol (&Qhelp, "help"); */ - defsymbol (&Qiconasterisk, "iconasterisk"); - defsymbol (&Qiconexclamation, "iconexclamation"); - defsymbol (&Qiconhand, "iconhand"); - defsymbol (&Qiconinformation, "iconinformation"); - defsymbol (&Qiconquestion, "iconquestion"); - defsymbol (&Qiconstop, "iconstop"); - /* defsymbol (&Qok, "ok"); */ - defsymbol (&Qokcancel, "okcancel"); - defsymbol (&Qretrycancel, "retrycancel"); - /* defsymbol (&Qright, "right"); */ - defsymbol (&Qrtlreading, "rtlreading"); - defsymbol (&Qservice_notification, "service-notification"); - defsymbol (&Qsetforeground, "setforeground"); - defsymbol (&Qsystemmodal, "systemmodal"); - defsymbol (&Qtaskmodal, "taskmodal"); - defsymbol (&Qtopmost, "topmost"); - defsymbol (&Qyesno, "yesno"); - defsymbol (&Qyesnocancel, "yesnocancel"); + DEFSYMBOL (Qabortretryignore); + DEFSYMBOL (Qapplmodal); + DEFSYMBOL (Qdefault_desktop_only); + DEFSYMBOL (Qdefbutton1); + DEFSYMBOL (Qdefbutton2); + DEFSYMBOL (Qdefbutton3); + DEFSYMBOL (Qdefbutton4); + /* DEFSYMBOL (Qhelp); */ + DEFSYMBOL (Qiconasterisk); + DEFSYMBOL (Qiconexclamation); + DEFSYMBOL (Qiconhand); + DEFSYMBOL (Qiconinformation); + DEFSYMBOL (Qiconquestion); + DEFSYMBOL (Qiconstop); + /* DEFSYMBOL (Qok); */ + DEFSYMBOL (Qokcancel); + DEFSYMBOL (Qretrycancel); + /* DEFSYMBOL (Qright); */ + DEFSYMBOL (Qrtlreading); + DEFSYMBOL (Qservice_notification); + DEFSYMBOL (Qsetforeground); + DEFSYMBOL (Qsystemmodal); + DEFSYMBOL (Qtaskmodal); + DEFSYMBOL (Qtopmost); + DEFSYMBOL (Qyesno); + DEFSYMBOL (Qyesnocancel); - /* defsymbol (&Qabort, "abort"); */ - /* defsymbol (&Qcancel, "cancel"); */ - /* defsymbol (&Qignore, "ignore"); */ - /* defsymbol (&Qno, "no"); */ - /* defsymbol (&Qok, "ok"); */ - /* defsymbol (&Qretry, "retry"); */ - /* defsymbol (&Qyes, "yes"); */ + /* DEFSYMBOL (Qabort); */ + /* DEFSYMBOL (Qcancel); */ + /* DEFSYMBOL (Qignore); */ + /* DEFSYMBOL (Qno); */ + /* DEFSYMBOL (Qok); */ + /* DEFSYMBOL (Qretry); */ + /* DEFSYMBOL (Qyes); */ DEFSUBR (Fmswindows_message_box); }