>> << Ndx Usr Pri Phr Dic Rel Voc !: wd Help Primer

# Script file

When you close J you lose the definitions of all the names. What you execute in the ijx window affects the current session, but is not permanent. This is fine when experimenting, but when you start defining things like your centigrade verb you want to record the definition so that you can use it in another session.

Close J and restart it.

       centigrade
    ¦value error

You have a clean slate. The definition of centigrade, and all the other names you defined, in the previous session are lost.

At least the primitives are still there!

       2 + 5
    7

As you would expect, to maintain a permanent record of your definitions, you save them in files. Files with J sentences and definitions are called script files and you can edit them just as you would edit any other text file. Script files typically have a suffix of .ijs.

Remember: a script file is a source file for definitions.

Although you can use any text editor to work with script files, the J system provides a simple editor that is integrated in ways that make it convenient.

The File|New IJS menu command creates a new script file and a window for editing it. Do this now and you will see that your J session has both an ijx window and a new ijs window. Use Window|Tile Across so that you can see them both side by side.

The ijs window is an edit window on the file with the name in its titlebar. Enter in an ijs window does not execute the line, it just moves to the start of a new line.

Type your centigrade definition into the ijs window.

    centigrade =: 3 : 0
    t1 =. y. - 32
    t2 =. t1 * 5
    t3 =. t2 % 9
    )

Be sure to use `=:` instead of `=.` in the first line. The `=:` makes a global definition. If you use `=.` it is a local definition. This important difference is explained shortly.

Because this is an ijs window the system has not provided a three space indent for the first line.

So far you have just edited changes into the window. The file has not been changed and the verb is still not defined. You have to run the script in order to execute the sentences.

With the ijs window active (titlebar highlighted), run it with Run|Window. Running the window with Run|Window, saves changes that have been edited in the window to the file, and then executes each of the sentences in the file. This is similar to your typing the contents of the file into the ijx window, except the sentences and results are not displayed. The only display in the ijx window is the sentence that causes the file sentences to be executed. This sentence will be something like: `load'c:\j3\temp\1.ijs'`

If an error is reported (output in the ijx window with a vertical bar on the left) then you have a typo in your script. Correct the text in the ijs window and run it again.

The sentences in the script file have been executed and centigrade is now defined. In the ijx window try using centigrade.

       centigrade 32
    0

Your screen should look something like:

The file created with File|New IJS is in the TEMP directory and has a temporary format name (a number with an ijs suffix). If you close J now, it will ask if you want to delete that temporary file. If you replied no, you could restart and open that temporary file and run it to define centigrade. However, it would be better to resave it now with a more appropriate name in the USER directory. Use File|Save As..., change to the USER directory, and set the file name as cf.ijs. The file name in the ijs window titlebar will change to the new name.

Close the cf.ijs window and erase your centigrade definition. You erase the definition of a name by using the utility verb erase with an argument that is the string of the name you want to erase. The result of 1 indicates the erase was successful.

       erase 'centigrade'
    1

       centigrade 212
    ¦value error
    ¦       centigrade 212

Use File|Open to open the cf.ijs window and use Run|Window to run the script to define centigrade.

       centigrade 212
    100

Let's add a definition for fahrenheit to the cf.ijs window. Type in the following after your centigrade definition. Again, be sure to use `=:` .

    fahrenheit =: 3 : 0
    t1 =. y. * 9
    t2 =. t1 % 5
    t3 =. t2 + 32
    )

Use Run|Window to run the sentences in the cf.ijs script. Because these are the first changes to a permanent (non-temporary) file you are prompted to see if you want to save the changes to file. Reply yes, and then test your new verb.

       fahrenheit 0
    32

       fahrenheit 451
    843.8

    Close J and restart it.

       centigrade
    ¦value error
       fahrenheit
    ¦value error

You can run the sentences in the cf.ijs file without opening the file for editing. Use Run|File and select your cf.ijs file. A line similar to load'c:\j3\user\cf.ijs' appears in the ijx window to run the sentences in the file.

       centigrade 32
    0

       fahrenheit 100
    212

The line that starts with load that appears in the ijx window is in fact the sentence that causes the sentences in the file to be executed. The menu command is just a short cut way of executing this sentence. The string is the full path name to the file to run. You can shorten this full path name to a relative path name when you type it manually.

To check this, close J, restart it, and verify that centigrade is undefined. In the ijx window execute the following sentence.

       load'user\cf.ijs'

Now check that your verbs are defined.

Use File|Open to open your cf.ijs file for editing.

What if there is an error in the script? Let's add an intentional error to the script to see what happens. Add the line `foo 123` at the end of the script and run the script again.

       load'c:\j3\user\cf.ijs'
    ¦value error
    ¦       foo 123
    ¦[-13]

An error is reported and the execution of the sentences in the script stops. The number at the end of the error report is the line number in the script that had the error. The statusbar shows the line number in the script and you can use this to find the error in the script.

Remove the error from the script and run it again.

>> << Ndx Usr Pri Phr Dic Rel Voc !: wd Help Primer