[squeak-dev] Is there a way to quit/exit Squeak with a return code that can be tested in a .so file?

Eliot Miranda eliot.miranda at gmail.com
Wed May 3 21:49:02 UTC 2017


Hi Louis,

    why not run the Smalltalk image as root and use the FFI to invoke the reboot system call?

Here's a snippet that /doesn't/ invoke the system call directly :-)

https://www.raspberrypi.org/forums/viewtopic.php?t=85815&p=605954

_,,,^..^,,,_ (phone)

> On May 3, 2017, at 2:35 PM, Louis LaBrunda <Lou at Keystone-Software.com> wrote:
> 
> Hi Dave,
> 
> Thanks for checking this for me.  Sorry it took me so long to get back to this.  I had to set
> up a new Raspberry and Samba and Apache2 gave me a lot of trouble, not to mentions the Bash
> script.
> 
> I did know about Smalltalk>snapshot:andQuitWithExitCode: when I posted about
> Smalltalk>snapshot:andQuit:withExitCode:embedded:, I just wanted to point everyone to the
> method that did the work.
> 
> Big picture:  I'm working on a Squeak/Seaside program that controls four relays.  I gave my old
> Raspberry Pi (model 1) to a friend to open and close his garage doors.  The Seaside parts
> displays a web page (login, relay page and settings) in any web browser.  With a hole in his
> router, he can get to it from anywhere, even with his iPhone.
> 
> You may remember me asking about how to shutdown or reboot from within Squeak.  I wanted to be
> able to reboot to clean up a problem or shutdown if you wanted to turn off the power without
> just pulling the plug while things were running.  I had some timing problems with that and had
> to use a delay options in the shutdown call.  The problem with that is that you couldn't wait
> less than a minute.  There is a call that says it could wait n number of seconds but it waited
> n minutes.  Looks like a bug to me.  Anyway, waiting a minute was too long.  Since I was
> already using a script to start pigpiod and Squeak, I decided to remove the shutdown/reboot
> calls from within my program and move them out to the Bash script.  The final version of the
> script is below.  I know Linux is free open source and I shouldn't complain about free stuff
> but what a mess of a scripting language.  Too many ways to do the same thing.  All too easily
> mixed together in ways that won't work.
> 
> This is the final script.  It works and allows the user to exit the Squeak program and
> optionally shutdown or reboot.  The script is automatically on boot.
> 
> #!/bin/bash
> sudo systemctl start pigpiod
> 
> squeak -vm-display-null /usr/share/RaspberryRelay/RasRelay.image RasRelay.St
> ret=$?
> 
> if [ $ret -eq 1 ];
> then
> sudo reboot
> elif [ $ret -eq 2 ];
> then
> sudo halt
> fi
> 
> 
> 
> 
> 
>> On Fri, 28 Apr 2017 20:05:46 -0400, "David T. Lewis" <lewis at mail.msen.com> wrote:
>> 
>> Confirming: Yes it works with the latest Spur VM and Squeak trunk image.
>> 
>> From a console window, run Squeak in the foreground (no '&' at the end of the command):
>> 
>> $ spur64 my64BitImage
>> 
>> Then in the image, do e.g. "Smalltalk snapshot: false andQuitWithExitCode: 3"
>> to quit without saving and return exit status 3.
>> 
>> After the image exits, test the exit status that was returned to the shell:
>> 
>> $ echo $?
>> 3
>> 
>> 
>> Dave
>> 
>> 
>>> On Fri, Apr 28, 2017 at 01:13:38PM -0400, Louis LaBrunda wrote:
>>> Hi Guys,
>>> 
>>> Thanks for the reply's.  I found:
>>> 
>>> snapshot: save andQuit: quit withExitCode: exitCode embedded: embeddedFlag
>>> 
>>> which looks like it will do what I want.  I will give it a try and report back.
>>> 
>>> Lou
>>> 
>>> 
>>>> On Fri, 28 Apr 2017 18:43:59 +0200, Nicolas Cellier <nicolas.cellier.aka.nice at gmail.com> wrote:
>>>> 
>>>> 2017-04-28 18:36 GMT+02:00 Nicolas Cellier <
>>>> nicolas.cellier.aka.nice at gmail.com>:
>>>> 
>>>>> 
>>>>> 
>>>>> 2017-04-28 17:48 GMT+02:00 David T. Lewis <lewis at mail.msen.com>:
>>>>> 
>>>>>>> Hi Squeakers,
>>>>>>> 
>>>>>>> Is there a way to quit/exit Squeak with a return code that can be tested
>>>>>>> in a .so file?
>>>>>>> 
>>>>>> 
>>>>>> I think I remember implementing this a long time ago in the Unix VM. I
>>>>>> can't really look further right now but I'll check later and try to give a
>>>>>> better answer.
>>>>>> 
>>>>>> IIRC, primitiveQuit can take an optional argument that is passed back to
>>>>>> the shell script that in turn gives you an exit code that you can test.
>>>>>> This probably is working right now in the interpreter VM (sorry I can't
>>>>>> check it at the moment). I'm not sure if it's in Cog/Spur, but if not it
>>>>>> can be easily added.
>>>>>> 
>>>>>> Dave
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> Answer is yes, if you browse the code on github,
>>>>> https://raw.githubusercontent.com/OpenSmalltalk/
>>>>> opensmalltalk-vm/Cog/src/vm/cointerp.c
>>>>> then you will see this:
>>>>> 
>>>>> /* 113 */ primitiveQuit,
>>>>> 
>>>>> ... snip...
>>>>> 
>>>>>    /* InterpreterPrimitives>>#primitiveQuit */
>>>>> static void
>>>>> primitiveQuit(void)
>>>>> {   DECL_MAYBE_SQ_GLOBAL_STRUCT
>>>>>    ioExitWithErrorCode((GIV(argumentCount) == 1
>>>>>        ? ((longAt(GIV(stackPointer))) >> 1)
>>>>>        : 0));
>>>>> }
>>>>> 
>>>>> 
>>>>> So you can pass a SmallInteger to the primitive 113
>>>>> 
>>>>> Then to know what the platform will do with this error code, just query it
>>>>> thru github web iface:
>>>>> 
>>>>> https://github.com/OpenSmalltalk/opensmalltalk-vm/search?utf8=%E2%9C%93&q=
>>>>> ioExitWithErrorCode&type=
>>>>> 
>>>>> Sorry, I wanted to post that all supported platforms would call
>>>> exit(errorCode), but I'm bad with web iface shortcuts...
>>>> <rant>
>>>> The windows squeak spur VM/image fixture insist on having shortcuts thru
>>>> ALT instead of CTRL which certainly DOES NOT HELP!!!
>>>> </rant>
>>> -- 
>>> Louis LaBrunda
>>> Keystone Software Corp.
>>> SkypeMe callto://PhotonDemon
>>> 
>>> 
>> 
> -- 
> Louis LaBrunda
> Keystone Software Corp.
> SkypeMe callto://PhotonDemon
> 
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20170503/49abc6bd/attachment-0001.html>


More information about the Squeak-dev mailing list