-
Notifications
You must be signed in to change notification settings - Fork 194
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Moved sample scripts to their own directory
- Loading branch information
Showing
4 changed files
with
188 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,187 @@ | ||
# script by: Kazuma77 | ||
# last modified: Who cares? You should not validate files this way. Anyone can modify plain text. | ||
# shameless plug: Please check out my InScripted AIO for all your CFW installation and | ||
# customization needs if you haven't already. | ||
|
||
# OK, so what if you want your script to be able to make choices based on | ||
# returned values? | ||
# That is what branching commands are for. | ||
|
||
# First, we have the 'if' command. | ||
# The parameter is any other command (except 'labelsel' -- more on that later). | ||
# Note: Some people like to indent the lines following an 'if' to make their | ||
# code easier to read by others. I'm lazy, so I don't do this, myself. | ||
# Your script will work either way. | ||
|
||
if chk $[ONTYPE] "N3DS" | ||
echo "N3DS/N2DS detected.\nChecking secret sector." | ||
|
||
# The secret sector is important on an N3DS, not so much the O3DS. | ||
# So, let's check it with another 'if' command. | ||
# This is sometimes referred to as 'nesting' because we now have an 'if' command | ||
# inside of another 'if' command. | ||
|
||
shaget S:/sector0x96.bin SECRETSEC | ||
if chk $[SECRETSEC] "82F2730D2C2DA3F30165F987FDCCAC5CBAB24B4E5F65C981CD7BE6F438E6D9D3" | ||
echo "Secret sector valid." | ||
|
||
# But what if the check fails? That's where the 'else' command comes in | ||
# It allows us to provide commands to be executed if the results are false. | ||
|
||
# The 'else' command has no parameters. Place it on a line by itself to invert the | ||
# logic for a preceeding 'if' command (or 'elif' command, more on that later). | ||
|
||
else | ||
echo "Secret sector invalid.\nKeep system on Sighax." | ||
|
||
# So, now that we've told the N3DS user the condition of their secret sector, | ||
# we are done with this branch of the program. To tell GM9 that it has ended, | ||
# we use the 'end' command. | ||
|
||
# The 'end' command is used to close an 'if' conditional. It has no parameters. | ||
|
||
end | ||
|
||
# So now the second 'if' condition is closed and we are back to the first. | ||
# We still haven't done anything in the event the system is an O3DS. | ||
# To do that, we could use an 'else' followed by an 'if' to check for the "O3DS" | ||
# string. | ||
# However, we have the 'elif' command to combine those two, so let's use it. | ||
|
||
# The 'elif' command is almost the equivalent of entering an 'else' followed immediately | ||
# by an 'if' but without taking up two lines. However, the 'elif' command does not actually | ||
# nest another 'if' command, but remains an extension of the existing 'if' command, like the | ||
# 'else' command does. In other words, it doesn't need an extra 'end' like an 'else' followed | ||
# by an 'if' would. | ||
|
||
elif chk $[ONTYPE] "O3DS" | ||
echo "O3DS/02DS detected.\nSkipping checking secret sector." | ||
|
||
# What follows should never be displayed. It's just here as precautionary BS. | ||
# Besides, pretending this could happen gives us a reason to use the 'elif' command. | ||
# You would normally only need it if there are 3 or more possible outcomes. | ||
# With two, 'else' has you covered by itself. | ||
|
||
else | ||
echo "Unable to detect system type." | ||
end | ||
|
||
|
||
|
||
# Now let's ratchet things up another notch with the 'labelsel' command. | ||
# This lets us quickly and easily define a static menu with selections for the | ||
# user to choose from. | ||
|
||
echo "Here's an example 'labelsel' menu." | ||
|
||
# Oh right, in order to do this, you have to know how to create a label. | ||
# This is as easy as creating a comment. Simply put an '@' at the start of | ||
# the line. However, unlike a comment, labels MUST NOT contain any spaces. | ||
|
||
@lsmain | ||
|
||
# So, back to 'labelsel' now. The parameters are a text string and a wildcard. | ||
# Any label matching the chosen wildcard will be displayed, so choose carefully. | ||
# labelsel "your text here" menu_* | ||
|
||
labelsel -o -s "Select a preview mode." lsmenu_* | ||
|
||
# Note: the underscore is optional, but it makes things much easier to keep track of. | ||
|
||
# This will present a menu of labels that match the wildcard. Pick one to go straight to it. | ||
# But what if someone hits the B button to cancel? That's why I used the '-o' | ||
# and '-s' flags. The script will continue. | ||
# If you don't want to force people to pick an option, you could simply have a 'reboot' or | ||
# 'poweroff' command after your 'labelsel' command. | ||
|
||
# Since I do want to force people to pick an option, I'm going to use 'goto' to loop | ||
# back to the label just before the 'labelsel' command so it will get run again until an option | ||
# is picked. Which brings us to our next subject. | ||
|
||
# The 'goto' command allows us to jump to any label within the script. For example: | ||
# goto mylabel | ||
# would cause it to jump to @mylabel | ||
# (do not include the '@' symbol) | ||
|
||
goto lsmain | ||
|
||
# So, here's our example menu. It shows off the new PREVIEW_MODE settings if you were | ||
# not already familiar with them (you can use a path to a .pcx file or plain text in quotes). | ||
|
||
@lsmenu_Image | ||
set PREVIEW_MODE V:/GodMode9_splash.pcx | ||
echo "This is image preview mode." | ||
goto resume_script | ||
|
||
@lsmenu_Text | ||
set PREVIEW_MODE "GodMode9" | ||
echo "This is text preview mode." | ||
|
||
@resume_script | ||
|
||
# That's all well and good. But what if you want a DYNAMIC menu? One that can have | ||
# entries changed, added, reordered, and/or removed at will? This can be done, using the | ||
# 'filesel command with some dummy files in a separate folder containing said files. | ||
|
||
# The next part of the script will create some temporary dummy files for the next example. | ||
# In reality, you will probably want to include them in a folder (please try to avoid using | ||
# 'gm9/zeroes' though -- that's what I use, go get your own ;) ). | ||
|
||
findnot $[GM9OUT]/tempmenu??? TEMPMENU | ||
mkdir $[TEMPMENU] | ||
inject -n S:/nand.bin@0:1 $[TEMPMENU]/Image | ||
inject -n S:/nand.bin@0:1 $[TEMPMENU]/Text | ||
|
||
# So, now that the dummy files we will be using as options are in place, let's begin. | ||
|
||
echo "Now here's the 'filesel' version" | ||
|
||
@fsmenu | ||
if filesel "Select a preview mode." $[TEMPMENU]/* FULLCHOICE | ||
|
||
# This is simply having you pick one of the files we just created. | ||
# Not exactly the original intended use of the 'filesel' command, but hey, it works very | ||
# well if your goal is to have a dynamic menu that can even change its own layout. | ||
|
||
# Now, so that we don't have to 'chk' for the entire path for each option, we are going to | ||
# use the new 'strsplit' function to shorten the results to just the filename. | ||
|
||
# The 'strsplit' command can be used to parse paths retrieved via the 'find' and 'filesel' | ||
# commands. For a basic example: | ||
# strsplit SPLITVAR $[FULLPATHVAR] "/" | ||
# The optional flags are '-b' for 'before' and '-f' for 'first' | ||
# By default it splits the string after the last occurrence of the key provided in quotes. | ||
# The above example would extract the full filename from the path. | ||
# We could further remove the extension with: | ||
# strsplit -b SPLITVAR2 $[SPLITVAR] "." | ||
# However, menu dummy files should not have any (unless you want your menu to be ugly). | ||
|
||
strsplit MENUCHOICE $[FULLCHOICE] "/" | ||
|
||
# Now that we have our menu selection nice and trimmed, time to process it. | ||
|
||
if chk $[MENUCHOICE] "Image" | ||
set PREVIEW_MODE V:/GodMode9_splash.pcx | ||
echo "This is image preview mode." | ||
elif chk $[MENUCHOICE] "Text" | ||
set PREVIEW_MODE "GodMode9" | ||
echo "This is text preview mode." | ||
end | ||
|
||
# And in case someone hits the B button and tries to cancel without making a choice: | ||
# (I started that 'filesel' command with an 'if' for a reason) | ||
|
||
else | ||
goto fsmenu | ||
end | ||
|
||
# Well, there you have it. How to create conditionals and setup menus. | ||
|
||
# Right, I should probably delete those temporary files. | ||
# It would be unprofessional to just leave a mess on your SD card after all. | ||
|
||
rm -o -s $[TEMPMENU] | ||
|
||
# There you go. | ||
|
||
echo "That's it.\nThanks for trying the script.\nHave a nice day." |
File renamed without changes.
File renamed without changes.