[squeak-dev] The Inbox: FFI-Win32-cbc.13.mcz
Chris Cunningham
cunningham.cb at gmail.com
Wed Oct 25 15:32:09 UTC 2017
Just this morning I was trying out a (very old GraphViz) package that
required (on Windows) running the Win32Shell to run the package, and got an
error '2'.
That annoyed me, so I added support for actually describing what the errors
are - that is this package.
I'd appreciate feedback and someone with powers to eventually move if to
the FFI repository.
Thanks,
cbc
On Wed, Oct 25, 2017 at 8:27 AM, <commits at source.squeak.org> wrote:
> Chris Cunningham uploaded a new version of FFI-Win32 to project The Inbox:
> http://source.squeak.org/inbox/FFI-Win32-cbc.13.mcz
>
> ==================== Summary ====================
>
> Name: FFI-Win32-cbc.13
> Author: cbc
> Time: 25 October 2017, 8:25:54.022628 am
> UUID: 66fa70bb-22f1-5748-b805-2a201a834489
> Ancestors: FFI-Win32-cbc.12
>
> Add descriptive errors for return codes from Wind32Shell.
>
> =============== Diff against FFI-Win32-cbc.12 ===============
>
> Item was added:
> + ----- Method: Win32Shell>>error: (in category 'operations') -----
> + error: code
> + Win32ShellErrors signal: code!
>
> Item was changed:
> ----- Method: Win32Shell>>shellExecute: (in category 'operations') -----
> shellExecute: aFileString
> "Opens (without opening a window) the file specified by
> aFileString. The file can be an executable file, a document file,
> or a folder."
> | result fileUrlString |
> "@@@@ CHECKME - jrd - Hackity, hack, hack, hack. Apparently the
> Win32 url parser doesn't handle %-encoded colons in file paths properly. So
> we do the conversion ourselves. I'm not sure if the real problem is that we
> shouldnt be encoding the colons in the first place."
> fileUrlString := (aFileString asLowercase beginsWith: 'file:')
> ifTrue: [(aFileString copyReplaceAll: '%3A' with: ':')
> copyReplaceAll: '%3a' with: ':' ]
> ifFalse: [aFileString].
>
> result := self shellExecute: nil
> lpOperation: 'open'
> lpFile: fileUrlString
> lpParameters: nil
> lpDirectory: nil
> nShowCmd: 0.
> + (result <= 32 and: [result >= 0]) ifTrue: [self error: result]!
> - result <= 32 ifTrue: [self error: 'system error, code:', result
> printString]!
>
> Item was changed:
> ----- Method: Win32Shell>>shellExplore: (in category 'operations') -----
> shellExplore: aPathString
> "Explores the folder specified by aPathString"
>
> | result |
> result := self shellExecute: nil
> lpOperation: 'explore'
> lpFile: aPathString
> lpParameters: nil
> lpDirectory: nil
> nShowCmd: 1.
> + (result <= 32 and: [result >= 0]) ifTrue: [self error: result]!
> - result <= 32 ifTrue: [self error: 'system error, code:', result
> printString]!
>
> Item was changed:
> ----- Method: Win32Shell>>shellFind: (in category 'operations') -----
> shellFind: aPathString
> "Initiates a search starting from the specified directory."
>
> | result |
> result := self shellExecute: nil
> lpOperation: 'find'
> lpFile: nil
> lpParameters: nil
> lpDirectory: aPathString
> nShowCmd: 1.
> + (result <= 32 and: [result >= 0]) ifTrue: [self error: result]!
> - result <= 32 ifTrue: [self error: 'system error, code:', result
> printString]!
>
> Item was changed:
> ----- Method: Win32Shell>>shellOpen: (in category 'operations') -----
> shellOpen: aFileString
> "Opens the file specified by aFileString. The file can be an
> executable file, a document file,
> or a folder."
> | result fileUrlString |
> "@@@@ CHECKME - jrd - Hackity, hack, hack, hack. Apparently the
> Win32 url parser doesn't handle %-encoded colons in file paths properly. So
> we do the conversion ourselves. I'm not sure if the real problem is that we
> shouldnt be encoding the colons in the first place."
> fileUrlString := (aFileString asLowercase beginsWith: 'file:')
> ifTrue: [(aFileString copyReplaceAll: '%3A' with: ':')
> copyReplaceAll: '%3a' with: ':' ]
> ifFalse: [aFileString].
>
> result := self shellExecute: nil
> lpOperation: 'open'
> lpFile: fileUrlString
> lpParameters: nil
> lpDirectory: nil
> nShowCmd: 1.
> + (result <= 32 and: [result >= 0]) ifTrue: [self error: result]!
> - result <= 32 ifTrue: [self error: 'system error, code:', result
> printString]!
>
> Item was added:
> + SharedPool subclass: #Win32ShellErrors
> + instanceVariableNames: 'errorNumber description'
> + classVariableNames: 'ERROR_BAD_FORMAT ERROR_FILE_NOT_FOUND
> ERROR_PATH_NOT_FOUND OUT_OF_MEMORY_OR_RESOURCES SE_ERR_ACCESSDENIED
> SE_ERR_ACCOSINCOMPLETE SE_ERR_DDEBUSY SE_ERR_DDEFAIL SE_ERR_DDETIMEOUT
> SE_ERR_DDLNOTFOUND SE_ERR_FNF SE_ERR_NOASSOC SE_ERR_OOM SE_ERR_PNF
> SE_ERR_SHARE'
> + poolDictionaries: ''
> + category: 'FFI-Win32-Examples'!
> + Win32ShellErrors class
> + instanceVariableNames: 'errors'!
> + Win32ShellErrors class
> + instanceVariableNames: 'errors'!
>
> Item was added:
> + ----- Method: Win32ShellErrors class>>initialize (in category 'as yet
> unclassified') -----
> + initialize
> + self initializeWindowConstants!
>
> Item was added:
> + ----- Method: Win32ShellErrors class>>initializeWindowConstants (in
> category 'as yet unclassified') -----
> + initializeWindowConstants
> + OUT_OF_MEMORY_OR_RESOURCES := self new errorNumber: 0;
> description: 'The operating system is out of memory or resources'.
> + SE_ERR_FNF := self new errorNumber: 2; description: 'The specified
> file was not found'.
> + SE_ERR_PNF := self new errorNumber: 3; description: 'The specified
> path was not found'.
> + SE_ERR_ACCESSDENIED := self new errorNumber: 5; description: 'The
> operating system denied access to the specified file'.
> + SE_ERR_OOM := self new errorNumber: 8; description: 'There was not
> enough memory to complete the operation'.
> + ERROR_BAD_FORMAT := self new errorNumber: 11; description: 'The
> .EXE file is invalid (non-Win32 .EXE or error in .EXE image)'.
> + SE_ERR_SHARE := self new errorNumber: 26; description: 'A sharing
> violation occurred'.
> + SE_ERR_ACCOSINCOMPLETE := self new errorNumber: 27; description:
> 'The filename association is incomplete or invalid'.
> + SE_ERR_DDETIMEOUT := self new errorNumber: 28; description: 'The
> DDE transaction could not be completed because the request timed out'.
> + SE_ERR_DDEFAIL := self new errorNumber: 29; description: 'The DDE
> transaction failed'.
> + SE_ERR_DDEBUSY := self new errorNumber: 30; description: 'The DDE
> transaction could not be completed because other DDE transactions were
> being processed'.
> + SE_ERR_NOASSOC := self new errorNumber: 31; description: 'There is
> no application associated with the given filename extension'.
> + SE_ERR_DDLNOTFOUND := self new errorNumber: 32; description: 'The
> specified dynamic-link library was not found'.
> + errors := Dictionary new: (self allInstances size).
> + self allInstances do: [:err|
> + errors at: err errorNumber put: err
> + ].!
>
> Item was added:
> + ----- Method: Win32ShellErrors class>>signal: (in category 'as yet
> unclassified') -----
> + signal: code
> + | err |
> + err := errors at: code ifAbsent: [Error signal: 'system error,
> code:', code].
> + Error signal: err errorString!
>
> Item was added:
> + ----- Method: Win32ShellErrors>>description (in category 'accessing')
> -----
> + description
> +
> + ^ description
> + !
>
> Item was added:
> + ----- Method: Win32ShellErrors>>description: (in category 'accessing')
> -----
> + description: anObject
> +
> + description := anObject.
> + !
>
> Item was added:
> + ----- Method: Win32ShellErrors>>errorNumber (in category 'accessing')
> -----
> + errorNumber
> +
> + ^ errorNumber
> + !
>
> Item was added:
> + ----- Method: Win32ShellErrors>>errorNumber: (in category 'accessing')
> -----
> + errorNumber: anObject
> +
> + errorNumber := anObject.
> + !
>
> Item was added:
> + ----- Method: Win32ShellErrors>>errorString (in category 'accessing')
> -----
> + errorString
> + ^'system error, code: ', errorNumber, ' "', description, '"'!
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20171025/9e740509/attachment.html>
More information about the Squeak-dev
mailing list
|