<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  
  <title></title>
</head>
<body text="#000000" bgcolor="#ffffff">
<tt>Stefan Hajnoczi wrote:</tt>
<blockquote type="cite" cite="mid:fbd9d3991003150306i18925273q18f591249243ea9e@mail.gmail.com">
  
  
  <title>Re: [gPXE-devel] (no subject)</title>
<!-- Converted from text/plain format -->
  <p><tt><font size="2">I can't see how 'loopif' and executing scripts
support a general<br>
if-else statement.&nbsp; Executing scripts allows code snippets to be<br>
called out to, but a conditional is still required to choose the right<br>
name for the script to call (think if-else statement).<br>
  <br>
Maybe I am missing something?</font></tt></p>
</blockquote>
<tt><br>
Heheh, thus far I never intended to claim that 'exit' and 'loopif'
could support if-else flow control.&nbsp; 'exit' and 'loopif' were prompted
by an IRC user who wished for gPXE to poll a server for instructions,
otherwise idling.&nbsp; This scenario is similar to IBM Tivoli Provisioning
Manager for OS Deployment's idling strategy.&nbsp; 'exit' and 'loopif' can
directly support loops, which are a form of flow control that gPXE
doesn't currently have.&nbsp; That's what the commit comments were intended
to convey.<br>
<br>
I think the bigger issue to tackle before flow control becomes highly
useful is controlling "erroring out" of scripts.&nbsp; A singular error at
this time will break out of all scripts.<br>
<br>
As far as if-else functionality goes, consider this:<br>
<br>
#!gpxe<br>
# toplevel.gpxe<br>
set exec0 #<br>
set exec1 set<br>
set next-script step1<br>
set keep-running 1<br>
imgload main.gpxe<br>
boot main.gpxe<br>
<br>
#!gpxe<br>
# main.gpxe<br>
imgload ${next-script}.gpxe<br>
boot ${next-script}.gpxe<br>
loopif ${keep-running}<br>
<br>
#!gpxe<br>
# stepX.gpxe<br>
# exec becomes "${execX}"<br>
set exec:hex 24:7B:65:78:65:63:${condition1:hex}:7D<br>
set foo default_value<br>
${exec} foo bar<br>
# foo will contain "default_value" or "bar" depending on what
condition1 was<br>
# You could use the same :hex method to fill foo with instructions,<br>
# so you could do:<br>
# ${foo}<br>
echo condition1: ${condition1}, foo: ${foo}<br>
# ...<br>
# We can set next-script based on conditions<br>
# We can fill exitif variable with "exit" or "#" based on a condition
and do:<br>
# ${exitif}<br>
<br>
Some of this is obviously pretty tricky, but I think my point is that
it can be done...&nbsp; One could develop a "library" that makes some of
this easier and implements common uses.&nbsp; It's nowhere near as pretty as
if-else.<br>
<br>
Anyway, the merits of 'exit' and 'loopif' should please be considered
based on code size cost and that it helps users to loop, should they
need to.&nbsp; I don't mean to suggest them as the solution to all gPXE
script uses...&nbsp; We have Lynus' work from last Google Summer of Code
still as well as great discussions about the perfect scripting system,
as well as a lack of "stayin' alive" in current scripts, as well as a
lack of math &amp;/ logic in current scripts.<br>
<br>
It would be great if we could have 'exit', 'loopif', 'if', ': label',
and 'goto' all together, though 'loopif' could be accomplished by 'if
... goto', instead.<br>
<br>
I value your thoughts thus far. :)<br>
<br>
- Shao Miller<br>
</tt>
</body>
</html>