tim Rowledge uploaded a new version of Nebraska to project The Trunk:
http://source.squeak.org/trunk/Nebraska-tpr.50.mcz
==================== Summary ====================
Name: Nebraska-tpr.50
Author: tpr
Time: 7 August 2017, 6:38:27.598699 pm
UUID: 633f7da3-da1d-44ee-8bdc-3f417d8db1ec
Ancestors: Nebraska-tpr.49
Fix a dumb-thumb in the prior update
=============== Diff against Nebraska-tpr.49 ===============
Item was changed:
----- Method: NebraskaCommunicatorMorph>>textEntryFieldNamed:with:help: (in category 'as yet unclassified') -----
textEntryFieldNamed: aSymbol with: aString help: helpString
| f col |
f := (StringMorph new contents: aString; font: Preferences standardEToysFont; yourself)
setBalloonText: helpString;
on: #mouseUp send: #editEvent:for: to: self.
self field: aSymbol is: f.
+ col := (self inAColumn: {f}) color: Color white; hResizing: #shrinkWrap.
- col _ (self inAColumn: {f}) color: Color white; hResizing: #shrinkWrap.
^col!
tim Rowledge uploaded a new version of Morphic to project The Trunk:
http://source.squeak.org/trunk/Morphic-tpr.1348.mcz
==================== Summary ====================
Name: Morphic-tpr.1348
Author: tpr
Time: 7 August 2017, 4:40:57.485319 pm
UUID: b8af09c4-97da-4835-a036-b1c557a8ab92
Ancestors: Morphic-mt.1347
Explain that an underscore assignment requires a Preference setting
=============== Diff against Morphic-mt.1347 ===============
Item was changed:
----- Method: TextEditor>>explainChar: (in category 'explain') -----
explainChar: string
"Does string start with a special character?"
| char |
char := string at: 1.
char = $. ifTrue: [^'"Period marks the end of a Smalltalk statement. A period in the middle of a number means a decimal point. (The number is an instance of class Float)."'].
char = $' ifTrue: [^'"The characters between two single quotes are made into an instance of class String"'].
char = $" ifTrue: [^'"Double quotes enclose a comment. Smalltalk ignores everything between double quotes."'].
char = $# ifTrue: [^'"The characters following a hash mark are made into an instance of class Symbol. If parenthesis follow a hash mark, an instance of class Array is made. It contains literal constants."'].
(char = $( or: [char = $)]) ifTrue: [^'"Expressions enclosed in parenthesis are evaluated first"'].
(char = $[ or: [char = $]]) ifTrue: [^'"The code inside square brackets is an unevaluated block of code. It becomes an instance of BlockClosure and is usually passed as an argument."'].
(char = ${ or: [char = $}]) ifTrue: [^ '"A sequence of expressions separated by periods, when enclosed in curly braces, are evaluated to yield the elements of a new Array"'].
(char = $< or: [char = $>]) ifTrue: [^'"<primitive: xx> means that this method is usually preformed directly by the virtual machine. If this method is primitive, its Smalltalk code is executed only when the primitive fails."'].
char = $^ ifTrue: [^'"Uparrow means return from this method. The value returned is the expression following the ^"'].
char = $| ifTrue: [^'"Vertical bars enclose the names of the temporary variables used in this method. In a block, the vertical bar separates the argument names from the rest of the code."'].
+ char = $_ ifTrue: [^'"Left arrow means assignment (deprecated, applies if the Preference for allow underscore assignment is set). The value of the expression after the left arrow is stored into the variable before it."'].
- char = $_ ifTrue: [^'"Left arrow means assignment. The value of the expression after the left arrow is stored into the variable before it."'].
char = $; ifTrue: [^'"Semicolon means cascading. The message after the semicolon is sent to the same object which received the message before the semicolon."'].
char = $: ifTrue: [^'"A colon at the end of a keyword means that an argument is expected to follow. Methods which take more than one argument have selectors with more than one keyword. (One keyword, ending with a colon, appears before each argument).', '\\' withCRs, 'A colon before a variable name just inside a block means that the block takes an agrument. (When the block is evaluated, the argument will be assigned to the variable whose name appears after the colon)."'].
char = $$ ifTrue: [^'"The single character following a dollar sign is made into an instance of class Character"'].
char = $- ifTrue: [^'"A minus sign in front of a number means a negative number."'].
char = $e ifTrue: [^'"An e in the middle of a number means that the exponent follows."'].
char = $r ifTrue: [^'"An r in the middle of a bunch of digits is an instance of Integer expressed in a certain radix. The digits before the r denote the base and the digits after it express a number in that base."'].
char = Character space ifTrue: [^'"the space Character"'].
char = Character tab ifTrue: [^'"the tab Character"'].
char = Character cr ifTrue: [^'"the carriage return Character"'].
char = Character lf ifTrue: [^'"the line feed Character"'].
^nil!
tim Rowledge uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-tpr.1110.mcz
==================== Summary ====================
Name: Kernel-tpr.1110
Author: tpr
Time: 7 August 2017, 4:38:16.198536 pm
UUID: f7a1538d-4c10-4b42-9ec7-325d0ac94c8d
Ancestors: Kernel-nice.1109
Correct an ancient underscore assignment
=============== Diff against Kernel-nice.1109 ===============
Item was changed:
----- Method: Semaphore>>wait (in category 'communication') -----
wait
"Primitive. The active Process must receive a signal through the receiver
before proceeding. If no signal has been sent, the active Process will be
suspended until one is sent. Essential. See Object documentation
whatIsAPrimitive."
<primitive: 86>
self primitiveFailed
"excessSignals>0
+ ifTrue: [excessSignals := excessSignals-1]
- ifTrue: [excessSignals _ excessSignals-1]
ifFalse: [self addLastLink: Processor activeProcess suspend]"
!
Here is what I found, experts please double-check (and I only looked up
x86):
The Windows API uses the stdcall calling convention, which has the same
argument order and register preservation rules as cdecl, but the callee is
responsible to pop arguments from the stack.
In IA32FFIPlugin there is a macro PLATFORM_API_USES_CALLEE_POPS_CONVENTION,
which is only 1 on Windows. If this is 1 and apicall is used
(isCalleePopsConvention), the foreign function invocation code knows that
the callee modifies the stack pointer and reacts accordingly.
So, apicall does stdcall instead of cdecl on Windows, but not on the other
x86 platforms.
Stdcall is not the same as the Pascal calling convention, which pushes
arguments from left to right, contrary to cdecl and stdcall, which push
from right to left.
Best,
Jakob
Am 04.08.2017 3:45 vorm. schrieb "tim Rowledge" <tim(a)rowledge.org>:
Whilst looking at ancient OpenGL code I noted that many primitive calls
used apicall and not cdecl. The swiki entry (http://wiki.squeak.org/
squeak/2426) for FFI is… vague, and explicitly mentions confusion about the
matter. It wold be nice to clear this up, document it on the swiki and
maybe even make a Help page to go into the image.
tim
--
tim Rowledge; tim(a)rowledge.org; http://www.rowledge.org/tim
Strange OpCodes: MII: Mask all Interrupts and then Interrupt
— “We are apologize for multiple copies.” —
Dear Smalltalker,
Live programming frees developers from the "edit-compile-run" loop and allows people to interact with running programs very easily. Live programming is getting popular, but many of its features have been present in Smalltalk for a very long time.
We want to understand how Smalltalk software developers use live programming features in practice. We would be grateful if you could participate in our 10-minute survey on this subject: http://bit.ly/2ufcg2D <http://bit.ly/2ufcg2D>
As a thank you for your participation, you will be able to participate in a raffle to win a Smalltalk book of your choice. If you wish to participate, you will need to share your email with us, so that we can contact you.
We will appreciate if you share the survey
- Twitter post: https://twitter.com/JurajKubelka/status/893006267085709312 <https://twitter.com/JurajKubelka/status/893006267085709312>
- Facebook post: https://www.facebook.com/juraj.kubelka/posts/10212505941300008 <https://www.facebook.com/juraj.kubelka/posts/10212505941300008>
By participating in the survey you will:
- help me to successfully finish my PhD,
- push Smalltalk awareness in Live Programming research community,
- bring new integrated electronic communication ideas, and
- bring new ideas to improve our Smalltalk Live Programming experience :-)
We will close the survey on Wednesday, August 9, 2017 AoE.
Thank you and we really hope you enjoy participating in our survey!
Juraj Kubelka, PhD Student at the University of Chile
Romain Robbes, Professor at Free University of Bozen-Bolzano
Alexandre Bergel, Professor at the University of Chile
Whilst looking at ancient OpenGL code I noted that many primitive calls used apicall and not cdecl. The swiki entry (http://wiki.squeak.org/squeak/2426) for FFI is… vague, and explicitly mentions confusion about the matter. It wold be nice to clear this up, document it on the swiki and maybe even make a Help page to go into the image.
tim
--
tim Rowledge; tim(a)rowledge.org; http://www.rowledge.org/tim
Strange OpCodes: MII: Mask all Interrupts and then Interrupt
> Begin forwarded message:
>
> From: Juraj Kubelka <juraj.kubelka(a)gmail.com>
> Subject: [Esug-list] Live Programming in Smalltalk development environments survey + raffle
> Date: 3. August 2017 um 09:49:44 MESZ
> To: esug-list(a)lists.esug.org
>
> — “We are apologize for multiple copies.” —
>
> Dear Smalltalker,
> Live programming frees developers from the "edit-compile-run" loop and allows people to interact with running programs very easily. Live programming is getting popular, but many of its features have been present in Smalltalk for a very long time.
>
> We want to understand how Smalltalk software developers use live programming features in practice. We would be grateful if you could participate in our 10-minute survey on this subject: http://bit.ly/2ufcg2D <http://bit.ly/2ufcg2D>
>
> As a thank you for your participation, you will be able to participate in a raffle to win a Smalltalk book of your choice. If you wish to participate, you will need to share your email with us, so that we can contact you.
>
> We will appreciate if you share the survey
> - Twitter post: https://twitter.com/JurajKubelka/status/893006267085709312 <https://twitter.com/JurajKubelka/status/893006267085709312>
> - Facebook post: https://www.facebook.com/juraj.kubelka/posts/10212505941300008 <https://www.facebook.com/juraj.kubelka/posts/10212505941300008>
>
> By participating in the survey you will:
> - help me to successfully finish my PhD,
> - push Smalltalk awareness in Live Programming research community,
> - bring new integrated electronic communication ideas, and
> - bring new ideas to improve our Smalltalk Live Programming experience :-)
>
> We will close the survey on Wednesday, August 9, 2017 AoE.
> Thank you and we really hope you enjoy participating in our survey!
> Juraj Kubelka, PhD Student at the University of Chile
> Romain Robbes, Professor at Free University of Bozen-Bolzano
> Alexandre Bergel, Professor at the University of Chile
>
> _______________________________________________
> Esug-list mailing list
> Esug-list(a)lists.esug.org
> http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
tim Rowledge uploaded a new version of Network to project The Trunk:
http://source.squeak.org/trunk/Network-tpr.202.mcz
==================== Summary ====================
Name: Network-tpr.202
Author: tpr
Time: 2 August 2017, 5:56:32.822543 pm
UUID: e26da09c-d555-47c0-8c95-d0fcc1085a03
Ancestors: Network-eem.201
Correct a misleading comment
=============== Diff against Network-eem.201 ===============
Item was changed:
----- Method: NetNameResolver class>>initializeNetwork (in category 'network initialization') -----
initializeNetwork
+ "Initialize the network drivers and record the semaphore to be used by the resolver. Do nothing if the network is already initialized. Signal NoNetworkError if network initialization fails."
- "Initialize the network drivers and record the semaphore to be used by the resolver. Do nothing if the network is already initialized. Evaluate the given block if network initialization fails."
"NetNameResolver initializeNetwork"
self resolverStatus = ResolverUninitialized
ifFalse: [^HaveNetwork := true]. "network is already initialized"
HaveNetwork := false. "in case abort"
Smalltalk newExternalSemaphoreDo: [ :semaphore :index |
ResolverSemaphore := semaphore.
"result is nil if network initialization failed, self if it succeeds"
(self primInitializeNetwork: index)
ifNil: [
Smalltalk unregisterExternalObject: ResolverSemaphore.
ResolverSemaphore := nil.
NoNetworkError signal: 'failed network initialization']
ifNotNil: [ HaveNetwork := true ] ].
self initializeOldNetworkFlag!