mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-01-30 12:40:42 +00:00
Added more to the GIB docs.
This commit is contained in:
parent
c026e61d22
commit
d85639d65e
5 changed files with 469 additions and 10 deletions
459
doc/gib/GIB.lyx
459
doc/gib/GIB.lyx
|
@ -42,9 +42,6 @@ The GIB Scripting Language
|
||||||
\layout Author
|
\layout Author
|
||||||
|
|
||||||
Brian Koropoff
|
Brian Koropoff
|
||||||
\layout Date
|
|
||||||
|
|
||||||
21 February 2003
|
|
||||||
\layout Standard
|
\layout Standard
|
||||||
\pagebreak_top \pagebreak_bottom
|
\pagebreak_top \pagebreak_bottom
|
||||||
|
|
||||||
|
@ -63,7 +60,7 @@ Purpose and Applications
|
||||||
|
|
||||||
GIB
|
GIB
|
||||||
\begin_inset Foot
|
\begin_inset Foot
|
||||||
collapsed false
|
collapsed true
|
||||||
|
|
||||||
\layout Standard
|
\layout Standard
|
||||||
|
|
||||||
|
@ -179,7 +176,7 @@ Cooperative
|
||||||
An event system, wherein GIB functions can be run when a certain event occurs,
|
An event system, wherein GIB functions can be run when a certain event occurs,
|
||||||
such as a chat message being received or the player's health changing.
|
such as a chat message being received or the player's health changing.
|
||||||
\layout Itemize
|
\layout Itemize
|
||||||
\pagebreak_bottom
|
|
||||||
Integration with the console.
|
Integration with the console.
|
||||||
Console commands can be used from GIB, and GIB functions can be
|
Console commands can be used from GIB, and GIB functions can be
|
||||||
\begin_inset Quotes eld
|
\begin_inset Quotes eld
|
||||||
|
@ -191,7 +188,7 @@ exported
|
||||||
|
|
||||||
to the console as normal commands.
|
to the console as normal commands.
|
||||||
\layout Section
|
\layout Section
|
||||||
|
\pagebreak_top
|
||||||
Language Basics
|
Language Basics
|
||||||
\layout Subsection
|
\layout Subsection
|
||||||
|
|
||||||
|
@ -628,11 +625,11 @@ echo "Hello" // This is a comment
|
||||||
|
|
||||||
echo "// This is not a comment"
|
echo "// This is not a comment"
|
||||||
\layout Standard
|
\layout Standard
|
||||||
\pagebreak_bottom
|
|
||||||
Proper use of comments in your scripts will make them easier to read and
|
Proper use of comments in your scripts will make them easier to read and
|
||||||
understand.
|
understand.
|
||||||
\layout Section
|
\layout Section
|
||||||
|
\pagebreak_top
|
||||||
Variables
|
Variables
|
||||||
\begin_inset LatexCommand \label{sec:variables}
|
\begin_inset LatexCommand \label{sec:variables}
|
||||||
|
|
||||||
|
@ -798,7 +795,7 @@ To use variables with unusual names, or to separate the name of a variable
|
||||||
Examples:
|
Examples:
|
||||||
\layout LyX-Code
|
\layout LyX-Code
|
||||||
|
|
||||||
echo The variable with the name /
|
echo /
|
||||||
\backslash
|
\backslash
|
||||||
/
|
/
|
||||||
\backslash
|
\backslash
|
||||||
|
@ -813,7 +810,7 @@ echo The variable with the name /
|
||||||
}.
|
}.
|
||||||
\layout LyX-Code
|
\layout LyX-Code
|
||||||
|
|
||||||
echo Thecurrentfieldofvisionis${fov}degrees.Wheredidmyspacebargo?
|
echo Fieldofvisionis${fov}degrees.Wheredidmyspacebargo?
|
||||||
\layout Standard
|
\layout Standard
|
||||||
|
|
||||||
Variables that do not exist are considered to contain an empty string.
|
Variables that do not exist are considered to contain an empty string.
|
||||||
|
@ -1311,4 +1308,446 @@ Variable Scope
|
||||||
\layout Comment
|
\layout Comment
|
||||||
|
|
||||||
FIXME: add this section!
|
FIXME: add this section!
|
||||||
|
\layout Subsubsection
|
||||||
|
|
||||||
|
Locals
|
||||||
|
\layout Subsubsection
|
||||||
|
|
||||||
|
Globals
|
||||||
|
\layout Subsubsection
|
||||||
|
|
||||||
|
Domains
|
||||||
|
\layout Section
|
||||||
|
\pagebreak_top
|
||||||
|
Flow Control
|
||||||
|
\layout Standard
|
||||||
|
|
||||||
|
Flow control refers to controlling the order in which commands are executed
|
||||||
|
-- or if they are executed at all -- in your GIB script.
|
||||||
|
GIB currently offers two ways to control program flow:
|
||||||
|
\layout Description
|
||||||
|
|
||||||
|
Conditionals execute a command or group of commands if a certain condition
|
||||||
|
is met
|
||||||
|
\layout Description
|
||||||
|
|
||||||
|
Loops execute a command or group of commands multiple times while a certain
|
||||||
|
condition is met.
|
||||||
|
\layout Subsection
|
||||||
|
|
||||||
|
Conditionals
|
||||||
|
\layout Subsubsection
|
||||||
|
|
||||||
|
|
||||||
|
\family typewriter
|
||||||
|
if
|
||||||
|
\family default
|
||||||
|
and
|
||||||
|
\family typewriter
|
||||||
|
ifnot
|
||||||
|
\layout Standard
|
||||||
|
|
||||||
|
The
|
||||||
|
\family typewriter
|
||||||
|
if
|
||||||
|
\family default
|
||||||
|
structure will execute a group of commands when a condition is
|
||||||
|
\begin_inset Quotes eld
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
true.
|
||||||
|
\begin_inset Quotes erd
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
An optional
|
||||||
|
\family typewriter
|
||||||
|
else
|
||||||
|
\family default
|
||||||
|
structure may follow, which contains a group of commands to be executed
|
||||||
|
if the condition is
|
||||||
|
\begin_inset Quotes eld
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
false
|
||||||
|
\begin_inset Quotes erd
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
.
|
||||||
|
When
|
||||||
|
\family typewriter
|
||||||
|
ifnot
|
||||||
|
\family default
|
||||||
|
is used, the condition is reversed.
|
||||||
|
The syntax for
|
||||||
|
\family typewriter
|
||||||
|
if
|
||||||
|
\family default
|
||||||
|
and
|
||||||
|
\family typewriter
|
||||||
|
ifnot
|
||||||
|
\family default
|
||||||
|
is as follows:
|
||||||
|
\layout LyX-Code
|
||||||
|
|
||||||
|
if condition block1 [else block2]
|
||||||
|
\layout Standard
|
||||||
|
|
||||||
|
Explanations of what each part means follow:
|
||||||
|
\layout Description
|
||||||
|
|
||||||
|
condition may be any type of argument that is not a program block.
|
||||||
|
Its value will be treated as a number; 0 will be deemed
|
||||||
|
\begin_inset Quotes eld
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
false
|
||||||
|
\begin_inset Quotes erd
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
and all other numbers will be deemd
|
||||||
|
\begin_inset Quotes eld
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
true.
|
||||||
|
\begin_inset Quotes erd
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
If the value does not appear to be a number, it will be considered false.
|
||||||
|
When
|
||||||
|
\family typewriter
|
||||||
|
ifnot
|
||||||
|
\family default
|
||||||
|
is used instead of
|
||||||
|
\family typewriter
|
||||||
|
if
|
||||||
|
\family default
|
||||||
|
, true and false are reversed.
|
||||||
|
\layout Description
|
||||||
|
|
||||||
|
block1 must be a program block argument.
|
||||||
|
If
|
||||||
|
\family typewriter
|
||||||
|
condition
|
||||||
|
\family default
|
||||||
|
was considered to be true, the commands in the block will be executed.
|
||||||
|
\layout Description
|
||||||
|
|
||||||
|
else may optionally follow
|
||||||
|
\family typewriter
|
||||||
|
block1
|
||||||
|
\family default
|
||||||
|
, in which case
|
||||||
|
\family typewriter
|
||||||
|
block2
|
||||||
|
\family default
|
||||||
|
must also be provided.
|
||||||
|
\layout Description
|
||||||
|
|
||||||
|
block2 can be either a command or a single program block.
|
||||||
|
If
|
||||||
|
\family typewriter
|
||||||
|
condition
|
||||||
|
\family default
|
||||||
|
was false and
|
||||||
|
\family typewriter
|
||||||
|
block2
|
||||||
|
\family default
|
||||||
|
was provided, it will be executed instead of
|
||||||
|
\family typewriter
|
||||||
|
block1
|
||||||
|
\family default
|
||||||
|
.
|
||||||
|
\layout Standard
|
||||||
|
|
||||||
|
The simplest form of
|
||||||
|
\family typewriter
|
||||||
|
if
|
||||||
|
\family default
|
||||||
|
is shown in Figure
|
||||||
|
\begin_inset LatexCommand \vref{cap:if-simple}
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
.
|
||||||
|
Because the number 1 is non-zero and thus considered true, the program
|
||||||
|
block will be executed and text will be printed.
|
||||||
|
\layout Standard
|
||||||
|
|
||||||
|
|
||||||
|
\begin_inset Float figure
|
||||||
|
wide false
|
||||||
|
collapsed true
|
||||||
|
|
||||||
|
\layout LyX-Code
|
||||||
|
\line_top \line_bottom
|
||||||
|
|
||||||
|
\begin_inset Include \verbatiminput{if-simple.gib}
|
||||||
|
preview false
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\layout Caption
|
||||||
|
|
||||||
|
Simple
|
||||||
|
\family typewriter
|
||||||
|
if
|
||||||
|
\family default
|
||||||
|
structure
|
||||||
|
\begin_inset LatexCommand \label{cap:if-simple}
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\layout Standard
|
||||||
|
|
||||||
|
Figure
|
||||||
|
\begin_inset LatexCommand \vref{cap:if-else}
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
is similar to Figure
|
||||||
|
\begin_inset LatexCommand \ref{cap:if-simple}
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
, but includes an
|
||||||
|
\family typewriter
|
||||||
|
else
|
||||||
|
\family default
|
||||||
|
structure.
|
||||||
|
The condition argument is false, and thus the second program block is executed.
|
||||||
|
\layout Standard
|
||||||
|
|
||||||
|
|
||||||
|
\begin_inset Float figure
|
||||||
|
wide false
|
||||||
|
collapsed true
|
||||||
|
|
||||||
|
\layout LyX-Code
|
||||||
|
\line_top \line_bottom
|
||||||
|
|
||||||
|
\begin_inset Include \verbatiminput{if-else.gib}
|
||||||
|
preview false
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\layout Caption
|
||||||
|
|
||||||
|
|
||||||
|
\family typewriter
|
||||||
|
if/else
|
||||||
|
\family default
|
||||||
|
structure
|
||||||
|
\begin_inset LatexCommand \label{cap:if-else}
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\layout Standard
|
||||||
|
|
||||||
|
Besides a program block, a simple command may follow
|
||||||
|
\family typewriter
|
||||||
|
else
|
||||||
|
\family default
|
||||||
|
, including another
|
||||||
|
\family typewriter
|
||||||
|
if
|
||||||
|
\family default
|
||||||
|
structure.
|
||||||
|
This allows
|
||||||
|
\family typewriter
|
||||||
|
if
|
||||||
|
\family default
|
||||||
|
structures to be chained together.
|
||||||
|
The first stucture that is true will be the one executed, as shown by Figure
|
||||||
|
|
||||||
|
\begin_inset LatexCommand \ref{cap:if-chain}
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
.
|
||||||
|
\layout Standard
|
||||||
|
|
||||||
|
|
||||||
|
\begin_inset Float figure
|
||||||
|
wide false
|
||||||
|
collapsed false
|
||||||
|
|
||||||
|
\layout LyX-Code
|
||||||
|
\line_top \line_bottom
|
||||||
|
|
||||||
|
\begin_inset Include \verbatiminput{if-chain.gib}
|
||||||
|
preview false
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\layout Caption
|
||||||
|
|
||||||
|
Chained
|
||||||
|
\family typewriter
|
||||||
|
if
|
||||||
|
\family default
|
||||||
|
structures
|
||||||
|
\begin_inset LatexCommand \label{cap:if-chain}
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\layout Standard
|
||||||
|
|
||||||
|
Remember that
|
||||||
|
\family typewriter
|
||||||
|
ifnot
|
||||||
|
\family default
|
||||||
|
may always be used in place of
|
||||||
|
\family typewriter
|
||||||
|
if
|
||||||
|
\family default
|
||||||
|
to reverse
|
||||||
|
\family typewriter
|
||||||
|
condition
|
||||||
|
\family default
|
||||||
|
.
|
||||||
|
\layout Subsection
|
||||||
|
|
||||||
|
Loops
|
||||||
|
\layout Subsubsection
|
||||||
|
|
||||||
|
|
||||||
|
\family typewriter
|
||||||
|
while
|
||||||
|
\layout Standard
|
||||||
|
|
||||||
|
The
|
||||||
|
\family typewriter
|
||||||
|
while
|
||||||
|
\family default
|
||||||
|
structure is very similar to a basic
|
||||||
|
\family typewriter
|
||||||
|
if
|
||||||
|
\family default
|
||||||
|
structure, except that the program block is continuosly executed as long
|
||||||
|
as the condition argument is
|
||||||
|
\begin_inset Quotes eld
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
true.
|
||||||
|
\begin_inset Quotes erd
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
The formal syntax is:
|
||||||
|
\layout LyX-Code
|
||||||
|
|
||||||
|
while condition block
|
||||||
|
\layout Description
|
||||||
|
|
||||||
|
condition is the same as
|
||||||
|
\family typewriter
|
||||||
|
condition
|
||||||
|
\family default
|
||||||
|
in an
|
||||||
|
\family typewriter
|
||||||
|
if
|
||||||
|
\family default
|
||||||
|
structure; all non-zero numbers are
|
||||||
|
\begin_inset Quotes eld
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
true,
|
||||||
|
\begin_inset Quotes erd
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
anything else is false.
|
||||||
|
If condition is true, block will be executed.
|
||||||
|
\layout Description
|
||||||
|
|
||||||
|
block must be a program block argument.
|
||||||
|
If
|
||||||
|
\family typewriter
|
||||||
|
condition
|
||||||
|
\family default
|
||||||
|
is true, it will be executed.
|
||||||
|
After it has been executed,
|
||||||
|
\family typewriter
|
||||||
|
condition
|
||||||
|
\family default
|
||||||
|
will be checked again.
|
||||||
|
As long as
|
||||||
|
\family typewriter
|
||||||
|
condition
|
||||||
|
\family default
|
||||||
|
is true,
|
||||||
|
\family typewriter
|
||||||
|
block
|
||||||
|
\family default
|
||||||
|
will be continually executed.
|
||||||
|
\layout Standard
|
||||||
|
|
||||||
|
Figure
|
||||||
|
\begin_inset LatexCommand \vref{cap:while}
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
shows an example
|
||||||
|
\family typewriter
|
||||||
|
while
|
||||||
|
\family default
|
||||||
|
loop and its output.
|
||||||
|
\layout Standard
|
||||||
|
|
||||||
|
|
||||||
|
\begin_inset Float figure
|
||||||
|
wide false
|
||||||
|
collapsed false
|
||||||
|
|
||||||
|
\layout LyX-Code
|
||||||
|
\line_top \line_bottom
|
||||||
|
|
||||||
|
\begin_inset Include \verbatiminput{while.gib}
|
||||||
|
preview false
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\layout Standard
|
||||||
|
|
||||||
|
|
||||||
|
\series bold
|
||||||
|
Output:
|
||||||
|
\layout LyX-Code
|
||||||
|
|
||||||
|
|
||||||
|
\begin_inset Include \verbatiminput{while.gib.out}
|
||||||
|
preview false
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\layout Caption
|
||||||
|
|
||||||
|
Example
|
||||||
|
\family typewriter
|
||||||
|
while
|
||||||
|
\family default
|
||||||
|
loop.
|
||||||
|
\begin_inset LatexCommand \label{cap:while}
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
\the_end
|
\the_end
|
||||||
|
|
7
doc/gib/if-chain.gib
Normal file
7
doc/gib/if-chain.gib
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
if 0 {
|
||||||
|
echo The first condition is true.
|
||||||
|
} else if 1 {
|
||||||
|
echo The first condition is false but the second is true.
|
||||||
|
} else {
|
||||||
|
echo Neither condition is true.
|
||||||
|
}
|
5
doc/gib/if-else.gib
Normal file
5
doc/gib/if-else.gib
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
if 0 {
|
||||||
|
echo Condition is true.
|
||||||
|
} else {
|
||||||
|
echo Condition is false.
|
||||||
|
}
|
3
doc/gib/if-simple.gib
Normal file
3
doc/gib/if-simple.gib
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
if 1 {
|
||||||
|
echo Condition is true.
|
||||||
|
}
|
5
doc/gib/while.gib
Normal file
5
doc/gib/while.gib
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
num = 4
|
||||||
|
while $num {
|
||||||
|
echo Number: $num
|
||||||
|
num = ($num - 1)
|
||||||
|
}
|
Loading…
Reference in a new issue