From 7e2d32b7d2f6af7067dd1951f667f3448085f9e8 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Sun, 2 May 2010 22:29:59 -0700 Subject: [PATCH] windows.errors, debugger.windows: improve description of Windows error objects --- basis/debugger/windows/windows.factor | 16 ++++++++++++++-- basis/windows/errors/errors.factor | 10 ++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/basis/debugger/windows/windows.factor b/basis/debugger/windows/windows.factor index 73c6b0e795..662d07d037 100644 --- a/basis/debugger/windows/windows.factor +++ b/basis/debugger/windows/windows.factor @@ -1,7 +1,8 @@ ! Copyright (C) 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. -USING: assocs debugger io kernel literals math.parser namespaces -prettyprint sequences system windows.kernel32 ; +USING: accessors assocs debugger io kernel literals math.parser +namespaces prettyprint sequences system windows.kernel32 +windows.ole32 windows.errors math ; IN: debugger.windows CONSTANT: seh-names @@ -41,3 +42,14 @@ CONSTANT: seh-names M: windows signal-error. "Windows exception 0x" write third [ >hex write ] [ seh-name. ] bi nl ; + +M: ole32-error error. + "COM error 0x" write + dup code>> HEX: ffff,ffff bitand >hex write ": " write + message>> write ; + +M: windows-error error. + "Win32 error 0x" write + dup n>> HEX: ffff,ffff bitand >hex write ": " write + string>> write ; + diff --git a/basis/windows/errors/errors.factor b/basis/windows/errors/errors.factor index a3dbaf40ff..a4943ef877 100755 --- a/basis/windows/errors/errors.factor +++ b/basis/windows/errors/errors.factor @@ -1,7 +1,8 @@ USING: alien.data kernel locals math math.bitwise windows.kernel32 sequences byte-arrays unicode.categories io.encodings.string io.encodings.utf16n alien.strings -arrays literals windows.types specialized-arrays ; +arrays literals windows.types specialized-arrays +math.parser ; SPECIALIZED-ARRAY: TCHAR IN: windows.errors @@ -703,7 +704,6 @@ CONSTANT: FORMAT_MESSAGE_MAX_WIDTH_MASK HEX: 000000FF : make-lang-id ( lang1 lang2 -- n ) 10 shift bitor ; inline -ERROR: error-message-failed id ; :: n>win32-error-string ( id -- string ) flags{ FORMAT_MESSAGE_FROM_SYSTEM @@ -713,8 +713,10 @@ ERROR: error-message-failed id ; id LANG_NEUTRAL SUBLANG_DEFAULT make-lang-id 32768 [ TCHAR ] [ ] bi - f pick [ FormatMessage 0 = [ id error-message-failed ] when ] dip - utf16n alien>string [ blank? ] trim ; + f pick [ FormatMessage ] dip + swap zero? + [ drop "Unknown error 0x" id HEX: ffff,ffff bitand >hex append ] + [ utf16n alien>string [ blank? ] trim ] if ; : win32-error-string ( -- str ) GetLastError n>win32-error-string ; -- 2.34.1