[squeak-dev] Is there a way to quit/exit Squeak with a return code that can be tested in a .so file?
David T. Lewis
lewis at mail.msen.com
Thu May 4 03:29:36 UTC 2017
Well that looks pretty cool :-) Thanks for the update and explanation.
Dave
On Wed, May 03, 2017 at 05:35:49PM -0400, Louis LaBrunda 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
>
>
More information about the Squeak-dev
mailing list
|