ISPFTutorial

toc
 * Table of Contents**

Introduction to the ISPF Editor
This document is a brief introduction on using the editor in ISPF. The ISPF editor is very versatile, and this document describes only basic editing capabilities. For detailed descriptions of the commands discussed here or for more information about using the ISPF editor, see the IBM manual [|ISPF/PDF Edit and Edit Macros].

In order to use the ISPF editor, you need to be familiar with TSO. To edit new data sets in TSO, you should also know how to allocate a data set, or see the section titled "Creating a New Sequential Data Set", in this document.

Starting ISPF
> >
 * Sign on to TSO
 * Enter the ISPF command at the READY prompt:
 * ISPF**
 * You will see the ISPF Primary Option Menu. Edit is option 2, so type a **2** on the ISPF command line (option line) and press <**Enter**>.


 * Figure 1. ISPF Primary Option Menu**

Alternatively, you can bypass the ISPF Primary Option Menu by invoking ISPF as follows: Selecting option 2 takes you to the ISPF Edit Entry Panel.
 * ISPF 2**


 * Figure 2. The ISPF Edit Entry Panel**

Opening a Data Set for Editing
The data set must already exist. To edit a new (non-existing) data set, see the section titled "Creating a New Sequential Data Set". You can edit either a sequential data set or sequential member of a partitioned data set (PDS). You can also create and edit a new member of an existing PDS.

Invoke ISPF and select option 2 on the ISPF Primary Option Menu. The first thing you see is the Edit Entry Panel (figure 2, above), where you enter the name of the data set you want to edit. This panel has many fields. Until you become more familiar with editing in ISPF, you can ignore most of the fields on this screen. Tab your cursor to the line that says Data Set Name (about half-way down the screen) and enter the complete name of the data set you want to edit, in single quotes.
 * Opening an Existing Data Set or PDS Member**

Other Partitioned or Sequential Data Set: DATA SET NAME **==>** 'data.set.name.here'

If the data set is a sequential data set, ISPF will open it for you to edit. If the data set is a Partitioned Data Set (PDS), ISPF will display a list of members. To select a particular member to edit, move your cursor down the list (or use <**F8**> to page forward for other members) and type an **S** in the margin to the left of the member name. Press <**Enter**>. ISPF will open this member for you to edit. The following example selects a member named CMEMBER.

If you want to edit a specific member and you know its name, you can bypass the member list by including the member name on the Edit Entry Panel as follows:

OTHER PARTITIONED OR SEQUENTIAL DATA SET: > DATA SET NAME ==> **'//data.set.name//(//member//)'**

There are several ways you can use ISPF to create a new member in an existing PDS. In addition to the procedures described below, you may wish to refer to the section titled Allocating (Creating) a New Data Set in CNS document [|D0040, ISPF at CNS], for some other methods. Being familiar with all the various methods available will enable you to choose the easiest/most appropriate method for each specific occasion. To create a new member in an existing PDS, enter the name of the data set on the Edit Entry Panel as described above (don't press <**Enter**> yet). Then type an **S** on the command line, a <**space**>, and a new member name. >COMMAND ==> **S //newmemb//**
 * Creating a New Member in an Existing PDS**

Then press <**Enter**>.

Alternatively, you can specify a new member name on the Edit Entry Panel, as follows, and bypass the member list: OTHER PARTITIONED OR SEQUENTIAL DATA SET: DATA SET NAME ==> **'//data.set.name//(//newmemb//)'**

When you open an empty data set, the screen looks a little different than when you edit an existing data set. See the section titled "Editing an Empty Data Set or PDS Member."

Creating a New Sequential Data Set
TSO requires that space for a data set exist before you can edit it. TSO does not let the editor allocate a data set for you "on the fly." Therefore, before you can edit a new sequential data set, you must first allocate it. The procedure for doing this is covered in detail in CNS document [|D0040, ISPF at CNS], in the section titled Allocating (Creating) a New Data Set.

Starting an Edit Session
The Edit Screen When you specify an empty sequential data set or new PDS member, your first edit session will display a screen that contains blank lines between special fields called the Top of Data and Bottom of Data message labels. There will be 'quote marks' () on the left of the screen, which will be replaced by line numbers after you type information on the lines. The 'quote marks' are in the line command fields; these fields are where you will type commands which apply to a specific line. The top line on your screen shows the name of the data set you are editing. The next line is the command line (Command line), where you enter some types of edit commands.


 * Figure 3. Editing an Empty Data Set or PDS Member**

Note
Before you begin entering data, you may want to check your caps mode. In some situations, the editor will translate what you type to all capital/upper-case letters when you press <**Enter**>. To ensure that you get mixed (upper/lower) case, enter **CAPS OFF** on the command line. See the section titled "Edit Profiles" for more information about caps mode and saving caps settings between sessions. To begin entering data, <**Tab**> your cursor down to the first blank line after the TOP OF DATA message field. Enter your text or data. When you come to the end of the line, use your <**Tab**> key to move to the next blank line. As you continue typing lines, eventually you will fill up the screen. See the section "Inserting Lines and Entering Data" for information on how to input data. When you press <**Enter**>, the 'quote marks' in the line command fields will be changed to line numbers. From here, see the section on "Using the Editor." If you see ISPF messages (denoted by the word

MSG> in the line command fields) below the main Command
=> line, enter the command **RESET** on the Command === > line to get rid of them. **RESET** also gets rid of the 'quote marks' in the line command fields, and the unused blank lines. The top line on your screen shows the name of the data set you are editing. The next line is the Command === > line, where you enter some types of edit commands. At the top-right corner, the editor shows you the columns it is displaying (usually columns 1 to 72, depending on the width of your screen). Below it is the Scroll field that lets you specify how you want the screen to be scrolled. The next line is a message field that indicates the top of your data set (Top of Data). (Similarly, after the last line of your data set, which may not be visible on your screen, is a message line for the Bottom of Data.) Next, the editor displays the first several lines of the data set (a screen's worth). Each line has a line number on the left of the screen. These are for entering line edit commands (commands which apply to a specific line) and are not part of your data. Occasionally, the editor displays messages for you. These appear immediately after the command line and are denoted by

MSG> in the line command field. If you see messages, you can get rid of them by entering the command **RESET** on the Command
=> line at the top of the screen. Special Keys and Moving Around the Screen All references to keys are to the IBM 3270 function that a key performs. Refer to your own keyboard mapping chart to determine which key you actually need to press to get the desired function. The arrow keys move your cursor up, down, left, or right. The <**Home**> key moves the cursor quickly up to the Command === > line. The <**Insert**> key lets you enter data within a line. (See the discussion of NULLS in "Edit Profiles.") The <**Delete**> key deletes characters on a line. At the bottom of the screen, the editor displays the default function key settings (<**F//n//**>). Particularly useful ones include: <**F1**>=Help invoke the ISPF help utility <**F3**>=Exit exit the editor <**F7**>=Up move toward the beginning of the data set <**F8**>=Down move toward the end of the data set Other function keys perform more complex tasks, which are not discussed here. Refer to the documentation provided by IBM for detailed information on all the F-key functions.

Saving Your Work
As you edit your data set, periodically move your cursor to the Command === > line (using the arrow keys or your <**Home**> key) and enter the **SAVE** command to save your work. This saves the information in the data set and leaves you in the editor to continue working.

Ending An Edit Session
When you are through, move your cursor to the Command === > line and enter the **SAVE** command to save your work. Then exit the editor either by entering the **END** command on the command line or by pressing <**F3**>. This returns you to the Edit Entry Panel. Press <**F3**> again to return to the ISPF Primary Option Menu. To exit ISPF, choose option X (enter **X** on the command line) or press <**F3**>. ISPF lets you specify an automatic save option in the editor, called **AUTOSAVE**. If this option is turned ON, then ISPF will automatically save your data set or file when you type **END** or press <**F3**> in the editor. For more information, see the section titled "Edit Profiles."

Cancelling An Edit Session
Sometimes, you realize that you have made changes to a data set that you do not want to keep. You can cancel an edit session by moving your cursor to the command line and entering **CANCEL**. This returns you to the Edit Entry Panel.

Warning
The **CANCEL** command cancels all changes since the beginning of the edit session or the last **SAVE** command, whichever is most recent.

Logging off
From the ISPF Primary Option Menu, exit by entering an **X** on the command line or pressing <**F3**>. You can exit ISPF from any other panel by entering **=X** on the panel's main command line. To log off of TSO, enter **LOGOFF**.

Using the Editor
Commands may be entered in either uppercase or lowercase. Two basic types of commands perform ISPF editing operations. Line Commands These affect only a single line or block of lines. You enter line commands by typing them in the line command field and then pressing the <**Enter**> key. The line command field is the column of line numbers (or quote marks for new data sets) on the left of your screen. Line commands let you easily move, copy, delete, and insert lines, among other functions. Primary Commands These affect the entire data set. You enter these commands on the command line (COMMAND === >), located near the top of your screen. Some primary commands (e.g, **FIND** and **CHANGE**) begin with the current line, which is usually the line immediately below the command line. Primary commands let you search for and alter strings, modify your profile settings, and customize your editing environment, among other functions. All commands require that you press the <**Enter**> key after typing the command to send the command to the computer.

Inserting Lines and Entering Data
Anywhere in the line command field, enter **I//n//** to add //n// number of lines. This inserts //n// blank lines after the line on which you entered the **I** command (ex: **i3**). 000001 This is a line of text. 000002 This is another. 000004 To enter many lines, simply enter an **I** with no number after it to go into "insert" mode. Each time you press the <**Enter**> key after typing on a blank line, you will get a new blank line. To get out of insert mode, press your <**Enter**> key twice (enter a null line). Power Typing The text entry (**TE**) command allows you to perform power typing. This is useful when you have many lines to enter. To begin power typing, enter **TE** in the line number field of the line where you want to insert text. The line command field on the left of the screen goes away, so that you can type your information as if it were one long line. When you press the <**Enter** >key, the text is flowed into a paragraph. Before you enter power typing mode, consider the following: If you are entering text, such as for a memo or letter, make sure caps mode is set to OFF so that your text will not be translated to uppercase. (Enter **CAPS OFF** on the command line.) Make sure sequence numbering is off so that sequence numbers will not be written over any of your text. (Enter **NUMBER OFF** on the command line.) If you have set bounds, make sure the setting is where you want so that the lines will flow correctly when you finish power typing. See "Edit Profiles" for more information about caps mode, bounds, and numbering.
 * i3**0003 This inserts 3 blank lines here.

Deleting lines
Enter **D//n//** to delete n number of lines. This deletes //n// lines including the one on which you entered the **D** command (ex: d4). To delete only one line, you can enter just **D** (with no number).

Replicating Lines
Enter **R//n//** to replicate a line //n// number of times (ex: r6). The new replicas are created immediately following the line being replicated. Existing lines (if any) beneath the line being replicated are automatically moved down to make room for the new replica lines.

Copying/Moving Lines
The copy (**C//n//**) and move (**M//n//**) commands require a second command to tell the editor where a line should be copied or moved to. After typing the copy or move command, move the cursor to the line you want the text to be inserted Before (B) or After (A). Type **B** to have the text entered before the line your cursor is on, or **A** to put the text after the line your cursor is on. Then press <**Enter**>. You can enter a move or copy command and press the <**Enter**> key or the <**F7**> and <**F8**> keys before typing a before or after command. ISPF will display the message MOVE/COPY IS PENDING. It's reminding you to complete the move or copy operation. Simply move your cursor to the appropriate place and type an **A** or **B**, then press <**Enter**> to complete the operation. If you start a move or copy command and then change your mind, press <**Enter**> to get the PENDING message. Then enter **RESET** on the command line to clear the command.  000002 five lines will be copied. 000003 The copied lines will be inserted 000004 AFTER the line following the one 000005 marked with an A. 000006  000010 000013 000014 000016 just ahead of the line marked 000017 with a B.
 * Example 1. Enter C//n// to copy //n// number of lines.**
 * c5**0001 Beginning with this line,
 * a**00007 Lines will be inserted After this line.
 * Example 2. Enter M//n// to move //n// number of lines.**
 * b**00011 Text to be added Before this line.
 * m3**0015 These three lines will be moved

Block Editing
Block editing lets you delete, copy, or move a large number of lines without having to specify an exact number. You can start a block operation on one screen and complete it after paging to another screen. Deleting Blocks To delete a range of lines, block off the area you would like to delete by typing the command **DD** next to the beginning and ending lines of your block. Press <**Enter**>. This deletes the entire block, including the ones containing the **DD** commands. 000021 deletes 000022 lines Moving Blocks Block off the area by typing **MM** on the beginning and ending lines you would like to move. Move the cursor to the line where the block is to be moved. You can use the <**F8**> and <**F7**> keys to move forward or backward through your data set to get to the line you want. Type **A** to move the block After the line your cursor is on, or type **B** to move the block Before the line your cursor is on. Press <**Enter**>. 000031 a block that will 000032 be moved from this 000033 location. The next line 000035 000036 0**a**0037 Text is moved to after this line. Copying Blocks The procedure is exactly the same as moving blocks except use **CC** to block off the area. Block off the area by typing **CC** on the beginning and ending lines you would like to move. Move the cursor to the line where the block is to be moved. You can use the <**F8**> and <**F7**> keys to move forward or backward through your data set to get to the line you want. Type **A** to move the block After the line your cursor is on, or type **B** to move the block Before the line your cursor is on. Press <**Enter**>. 000031 a block that will 000032 be copied. 000033 The next line is 000035 000036 0**b**0037 Text is copied before this line.
 * dd**0020 This
 * dd**0023 20 through 23.
 * mm**0030 This is the start of
 * mm**0034 is the end of the block.
 * cc**0030 This is the start of
 * cc**0034 the end of the block.

Splitting Lines
The text split (**TS**) line command splits a line into two lines. This is useful when you must insert additional text and the line becomes too long. To split a line, type **TS//n//** anywhere in the line command field (but don't press <**Enter**> yet), then move your cursor to the location in the line where you want to split it. Then press <**Enter**>. The new line will align with the left side of the paragraph. If lines are indented, the new line will align with the indent. The "//n//" specifies how many blank lines to insert between the split lines. If you do not specify any number, then one blank line will be inserted. If you don't want a blank line, just press <**Enter**> again.

Aligning Paragraphs
The text flow (**TF**) line command restructures a paragraph following deletions, insertions, splitting, etc. When you enter **TF** in the line command area, the text is reflowed from the beginning of that line to the end of the paragraph. The end of a paragraph is denoted by a blank line, a change in indentation, or the special characters period (.), colon, or ampersand (&) in column 1. (The special characters are Script/VS control word delimiters.) You can also use **TF//n//**, where //n// specifies the rightmost column position for text to flow. For example, **TF50** adjusts a paragraph to 50 characters wide. The default is the right column in the current **BOUNDS** setting. For more information about bounds, see "Edit Profiles".

Finding and Changing Data
The **FIND** and **CHANGE** commands are primary commands, entered on the command line. Both of these commands take effect beginning with the current line, usually the first line below the command line. To ensure that these commands apply to your whole data set, first issue the command **TOP** on the command line to move back to the top of your data set. You'll see the TOP OF DATA message. Finding a String The **FIND** command locates one or more occurrences of a specified string, starting with the current line. The simple format of the **FIND** command is: where "//string//" is the search string you want to find. If the string contains blanks, non-alphanumeric characters, or single quotes, enclose the string in double quotes ("). Or, if the string contains a double quote, enclose it in single quotes ('). The **FIND** command has several options that let you further tailor your search, such as specifying a range of lines to search, finding exact case matches, and indicating whether to find a part of a word or whole word. You can also find multiple occurrences of a given string. See IBM's document ISPF/PDF Edit and Edit Macros, for a complete description of **FIND**. Changing Data The **CHANGE** primary command lets you change a specified character string to another string. The editor searches for the first string, beginning with the current line, and, when it finds it, changes it to the second string. The simple format of the **CHANGE** command is: where "//string-1//" is the string to be changed, and "//string-2//" is the string you want the first one changed to. If either string contains non-alphanumeric characters, you must enclose the string in double quotes. This form of the **CHANGE** command changes the //first// occurrence of "//string-1//" that it finds. To change all occurrences of "//string-1//" to "//string-2//", use the //ALL// keyword on the **CHANGE** command. Additional options on the **CHANGE** command allow you to specify a range of lines, indicate a case-sensitive match, or change a whole or part of a word. See IBM's document ISPF/PDF Edit and Edit Macros, for a complete description of **CHANGE**. Converting Characters to Lowercase The **LC** line command converts all uppercase characters on a line or range of lines to lowercase. The **LC** command does not modify the caps mode in the profile of the data set you are editing. (See about profiles in "Edit Profiles.") 000031 THAT WILL BE 000032 CONVERTED TO 000033 LOWERCASE AFTER 000034 YOU PRESS . 000035 000036 000037 THIS LINE ISN'T AFFECTED. 000031 THAT WILL BE 000032 CONVERTED TO 000033 LOWERCASE AFTER 000035 000036 000037 THIS LINE ISN'T AFFECTED. Converting Characters to Uppercase The **UC** line command converts all lowercase characters on a line or range of lines from to uppercase. The **UC** command does not modify the caps mode in the profile of the data set you are editing. 000031 that will be 000032 converted to 000033 uppercase after 000034 you press. 000035 000036 000037 this line isn't affected. 000031 that will be 000032 converted to 000033 uppercase after 000035 000036 000037 this line isn't affected.
 * FIND //string//**
 * find tso** ///* finds the characters tso *///
 * find "isn't"** ///* finds the word isn't *///
 * find '"string-1"**' ///* finds the word "string-1" *///
 * CHANGE //string-1// //string-2//**
 * CHANGE abc def** **CHANGE "isn't" "aren't"**
 * CHANGE //string-1// //string-2// ALL**
 * LC//n//** changes //n// lines from uppercase to lowercase.
 * lc5**030 THIS STARTS 5 LINES
 * LCLC** lets you change a block of lines, inclusive, from uppercase to lowercase.
 * lclc**30 THIS IS TEXT
 * lclc**34 YOU PRESS .
 * UC//n//** changes //n// lines from lowercase to uppercase.
 * uc5**030 this starts 5 lines
 * UCUC** lets you change a block of lines, inclusive, from lowercase to uppercase.
 * ucuc**30 this is text
 * ucuc**34 you press.

ISPF Profiles and ISPF Edit Profiles
ISPF profiles allow you to customize your ISPF environment. For example, you can define the number of function (F-keys or PF-keys) keys supported by your terminal and change their default values. You also can tell ISPF characteristics about your terminal, such as the number of lines and columns on your screen. The ISPF editor also lets you define edit profiles (discussed in section "Changing Edit Profile Settings"), which are saved in the ISPF profile. In TSO, profiles are saved in a data set with a name of your choice. If you don't create a permanent ISPF profile, ISPF uses a temporary profile during your ISPF session. Any customizations you make will go away when you exit ISPF. For more information about creating a permanent ISPF profile, see the chapter "ISPF Profiles." A Word About Edit Profiles The ISPF editor also lets you define edit profiles (discussed later in this document), which are saved in the ISPF profile. Edit profiles define your editing environment and let you customize it for different types of files. By default, the editor associates profile characteristics with your data set, depending on a number of data set characteristics. These may be OK for you... or they may not. The section near the end of this document titled "Edit Profiles" briefly discusses how you can alter your current edit profile. For detailed information about creating and modifying edit profiles, see IBM manual [|ISPF/PDF Edit and Edit Macros]. ISPF Profiles A temporary ISPF profile data set is created automatically for you when you log on to TSO. It is assigned to the ddname ISPPROF. Since the data set is temporary, ISPF profile values are not saved between TSO sessions. Creating a Permanent ISPF Profile Data Set You can save your profile values between sessions by allocating a permanent ISPF profile data set. Enter the following command: You must specify a valid data set name (for example, UF.//userid//.ISPFPROF). If the data set doesn't exist, it will be created and then allocated to the ddname ISPFPROF. If the data set already exists, the command allocates it to ddname ISPPROF. You must allocate this data set for each TSO session in which you want to use ISPF. Allocating an ISPF Profile Data Set Automatically This section assumes you already have a TSO start-up CLIST. If you don't, or don't know whether you do, see below. Add these commands to your start-up CLIST member (e.g., $$$BEGIN): FREE DDN(ISPPROF) ALLOC DD(ISPPROF) DS('prof.data.set.name') SHR REUSE The **FREE** command frees the temporary ISPPROF data set before you allocate your permanent data set. If you do not know whether you have a profile data set, use the **TSO LISTALC** command to list your data sets and their associated ddnames as follows: Look for ddname ISPPROF. If the data set name associated with it is one of your own data sets (your userid, a departmental high-level index, or other familiar index will be part of the name), then you already have a user profile data set. Edit Profiles Edit profiles let you customize your editing environment to suit your needs. The editor uses a set of default profile commands if you do not create your own. Edit profiles are stored in your ISPF profile. Some data set characteristics implicitly specify an edit profile. These include the name you use as the last qualifier in the data set name (e.g., .CLIST, .TEXT, or .CNTL); the record length; or record format. Also, the editor makes some assumptions about the data set based on the first few lines of data, such as how to set the case, whether to use internal sequence numbers, and others. Any of the default settings can be overridden by issuing a command on the command line. To see the profile settings currently in effect, enter the **PROFILE** command on the command line. The editor will display several lines containing settings that affect your entire data set. To get rid of these lines, enter **RESET** on the command line. Retaining Profile Settings The next section describes some useful edit profile commands and how to change them. In order to keep any profile changes that you make, they must be saved in a permanent profile data set. See the section "ISPF Profiles" for information about creating an ISPF profile. Changing Edit Profile Settings To change any profile setting, enter the associated command on the command line. The command takes effect immediately and is saved in the profile when you enter the **SAVE** command. This controls whether the data set is automatically saved when you enter the END command or press . AUTOSAVE ON turns autosave mode on; AUTOSAVE OFF turns it off. Sets the left and right boundaries. The boundaries control which columns are affected by other commands. This lets you protect parts of your data set from being altered such as with the **CHANGE** command. To set bounds, enter the following on the command line: If you enter **BOUNDS** with no columns specified, it resets the bounds to the default bounds for that data set. The boundaries also determine where text will be flowed when you end power typing. Controls whether data are automatically converted to uppercase. **CAPS ON** converts all characters to uppercase; **CAPS OFF** leaves characters in mixed case. If the data set to be edited contains lowercase characters, ISPF sets the profile to **CAPS OFF**. Similarly, if the data set contains all uppercase characters, ISPF sets the mode to **CAPS ON**. Determines whether trailing spaces at the end of a line are treated as blanks or nulls. **NULLS ON STD** specifies that trailing spaces be treated as one blank, followed by nulls. This is very useful if you plan to use the  key function, since blanks prevent you from inserting characters. An empty line is written as all blanks. **NULLS OFF** specifies that trailing spaces be written as blanks. Controls whether sequence numbering occurs in the data line. **NUMBER ON** verifies that all lines have valid numbers in ascending order and renumbers lines that are out of sequence. **NUMBER OFF** turns number mode off. Note that if your data set contains sequence numbers and you turn numbering off, you must delete the sequence numbers if you no longer want them. Sequence numbers are stored at the far right of your line, so, depending on your line length, they may not be visible on your screen. You can use the **RIGHT** and **LEFT** primary commands to shift your screen to the right or left to see characters that are off the screen. For example, **RIGHT 20** shifts the screen right by 20 columns. Similarly, **LEFT 20** would shift it back again. Sequence numbers in the data line are not the same as the line numbers that show in the line command field on the left side of your screen. Line numbers are not part of your data set, whereas sequence numbers are. Lets you display your current profile, define a new profile, or switch to a different profile.You can define several different profiles for different types of data sets and tell ISPF which one you want it to use. To just view your current profile, enter **PROFILE** on the command line. For more information on how to define a new profile or switch profiles, see the description of the **PROFILE** command in IBM's manual ISPF/PDF Edit and Edit Macros. Creates and maintains statistics for a member of a PDS. **STATS ON** requests that statistics be created. The statistics include the date of last modification, userid that modified the member, creation date, and others. ISPF will issue a warning message if it detects that the stats mode and the member are not consistent. Enter **RESET** to get rid of the message. You will see the message if statistics exist, but stats mode is OFF; or, if stats mode is ON and no statistics exist. Statistics are useful when multiple users can update the same data set; when a data set has many members; or when you want to keep track of when a member changes.
 * %ISPPROF //prof.data.set.name//**
 * LISTALC STATUS**
 * AUTOSAVE**
 * BOUNDS**
 * BOUNDS //left-col// //right-col//**
 * CAPS**
 * NULLS**
 * NUMBER**
 * PROFILE**
 * STATS**

Introduction to the ISPF Editor
This document is a brief introduction on using the editor in ISPF. The ISPF editor is very versatile, and this document describes only basic editing capabilities. For detailed descriptions of the commands discussed here or for more information about using the ISPF editor, see the IBM manual [|ISPF/PDF Edit and Edit Macros]. In order to use the ISPF editor, you need to be familiar with TSO. You should know how to sign on and know CNS's data set naming conventions. See CNS document [|D0037, TSO Introduction], for a basic overview of this information. To edit new data sets in TSO, you should also know how to allocate a data set, or see the section titled "Creating a New Sequential Data Set", in this document. code

Starting ISPF
Sign on to TSO Enter the ISPF command at the READY prompt: You will see the ISPF Primary Option Menu. Edit is option 2, so type a **2** on the ISPF command line (Option ===>) and press <**Enter**>. > > code Alternatively, you can bypass the ISPF Primary Option Menu by invoking ISPF as follows: Selecting option 2 takes you to the ISPF Edit Entry Panel. 
 * ISPF**
 * 1)
 * Figure 1. ISPF Primary Option Menu**
 * ISPF 2**
 * Figure 2. The ISPF Edit Entry Panel**

Opening a Data Set for Editing
The data set must already exist. To edit a new (non-existing) data set, see the section titled "Creating a New Sequential Data Set". You can edit either a sequential data set or sequential member of a partitioned data set (PDS). You can also create and edit a new member of an existing PDS. Opening an Existing Data Set or PDS Member Invoke ISPF and select option 2 on the ISPF Primary Option Menu. The first thing you see is the Edit Entry Panel (figure 2, above), where you enter the name of the data set you want to edit. This panel has many fields. Until you become more familiar with editing in ISPF, you can ignore most of the fields on this screen. Some (such as Data Set Password) are not supported at CNS. Tab your cursor to the line that says Data Set Name (about half-way down the screen) and enter the complete name of the data set you want to edit, in single quotes.

code Other Partitioned or Sequential Data Set: DATA SET NAME ===> 'data.set.name.here' code If the data set is a sequential data set, ISPF will open it for you to edit. If the data set is a Partitioned Data Set (PDS), ISPF will display a list of members. To select a particular member to edit, move your cursor down the list (or use <**F8**> to page forward for other members) and type an **S** in the margin to the left of the member name. Press <**Enter**>. ISPF will open this member for you to edit. The following example selects a member named CMEMBER. code COMMAND ===> AMEMBER BMEMBER **s** CMEMBER DMEMBER code If you want to edit a specific member and you know its name, you can bypass the member list by including the member name on the Edit Entry Panel as follows: OTHER PARTITIONED OR SEQUENTIAL DATA SET: DATA SET NAME === > **'//data.set.name//(//member//)'** Creating a New Member in an Existing PDS There are several ways you can use ISPF to create a new member in an existing PDS. In addition to the procedures described below, you may wish to refer to the section titled Allocating (Creating) a New Data Set in CNS document [|D0040, ISPF at CNS], for some other methods. Being familiar with all the various methods available will enable you to choose the easiest/most appropriate method for each specific occasion. To create a new member in an existing PDS, enter the name of the data set on the Edit Entry Panel as described above (don't press <**Enter**> yet). Then type an **S** on the command line, a <**space**>, and a new member name. COMMAND === > **S //newmemb//** Then press <**Enter**>. Alternatively, you can specify a new member name on the Edit Entry Panel, as follows, and bypass the member list: OTHER PARTITIONED OR SEQUENTIAL DATA SET: DATA SET NAME === > **'//data.set.name//(//newmemb//)'** When you open an empty data set, the screen looks a little different than when you edit an existing data set. See the section titled "Editing an Empty Data Set or PDS Member." Creating a New Sequential Data Set TSO requires that space for a data set exist before you can edit it. TSO does not let the editor allocate a data set for you "on the fly." Therefore, before you can edit a new sequential data set, you must first allocate it. The procedure for doing this is covered in detail in CNS document [|D0040, ISPF at CNS], in the section titled Allocating (Creating) a New Data Set.

Starting an Edit Session
The Edit Screen When you specify an empty sequential data set or new PDS member, your first edit session will display a screen that contains blank lines between special fields called the Top of Data and Bottom of Data message labels. There will be 'quote marks' () on the left of the screen, which will be replaced by line numbers after you type information on the lines. The 'quote marks' are in the line command fields; these fields are where you will type commands which apply to a specific line. The top line on your screen shows the name of the data set you are editing. The next line is the command line (Command === >), where you enter some types of edit commands. 
 * Figure 3. Editing an Empty Data Set or PDS Member**

Note
Before you begin entering data, you may want to check your caps mode. In some situations, the editor will translate what you type to all capital/upper-case letters when you press <**Enter**>. To ensure that you get mixed (upper/lower) case, enter **CAPS OFF** on the command line. See the section titled "Edit Profiles" for more information about caps mode and saving caps settings between sessions. To begin entering data, <**Tab**> your cursor down to the first blank line after the TOP OF DATA message field. Enter your text or data. When you come to the end of the line, use your <**Tab**> key to move to the next blank line. As you continue typing lines, eventually you will fill up the screen. See the section "Inserting Lines and Entering Data" for information on how to input data. When you press <**Enter**>, the 'quote marks' in the line command fields will be changed to line numbers. From here, see the section on "Using the Editor." If you see ISPF messages (denoted by the word

MSG> in the line command fields) below the main Command
=> line, enter the command **RESET** on the Command === > line to get rid of them. **RESET** also gets rid of the 'quote marks' in the line command fields, and the unused blank lines. The top line on your screen shows the name of the data set you are editing. The next line is the Command === > line, where you enter some types of edit commands. At the top-right corner, the editor shows you the columns it is displaying (usually columns 1 to 72, depending on the width of your screen). Below it is the Scroll field that lets you specify how you want the screen to be scrolled. The next line is a message field that indicates the top of your data set (Top of Data). (Similarly, after the last line of your data set, which may not be visible on your screen, is a message line for the Bottom of Data.) Next, the editor displays the first several lines of the data set (a screen's worth). Each line has a line number on the left of the screen. These are for entering line edit commands (commands which apply to a specific line) and are not part of your data. Occasionally, the editor displays messages for you. These appear immediately after the command line and are denoted by

MSG> in the line command field. If you see messages, you can get rid of them by entering the command **RESET** on the Command
=> line at the top of the screen. Special Keys and Moving Around the Screen All references to keys are to the IBM 3270 function that a key performs. Refer to your own keyboard mapping chart to determine which key you actually need to press to get the desired function. The arrow keys move your cursor up, down, left, or right. The <**Home**> key moves the cursor quickly up to the Command === > line. The <**Insert**> key lets you enter data within a line. (See the discussion of NULLS in "Edit Profiles.") The <**Delete**> key deletes characters on a line. At the bottom of the screen, the editor displays the default function key settings (<**F//n//**>). Particularly useful ones include: <**F1**>=Help invoke the ISPF help utility <**F3**>=Exit exit the editor <**F7**>=Up move toward the beginning of the data set <**F8**>=Down move toward the end of the data set Other function keys perform more complex tasks, which are not discussed here. Refer to the documentation provided by IBM for detailed information on all the F-key functions.

Saving Your Work
As you edit your data set, periodically move your cursor to the Command === > line (using the arrow keys or your <**Home**> key) and enter the **SAVE** command to save your work. This saves the information in the data set and leaves you in the editor to continue working.

Ending An Edit Session
When you are through, move your cursor to the Command === > line and enter the **SAVE** command to save your work. Then exit the editor either by entering the **END** command on the command line or by pressing <**F3**>. This returns you to the Edit Entry Panel. Press <**F3**> again to return to the ISPF Primary Option Menu. To exit ISPF, choose option X (enter **X** on the command line) or press <**F3**>. ISPF lets you specify an automatic save option in the editor, called **AUTOSAVE**. If this option is turned ON, then ISPF will automatically save your data set or file when you type **END** or press <**F3**> in the editor. For more information, see the section titled "Edit Profiles."

Cancelling An Edit Session
Sometimes, you realize that you have made changes to a data set that you do not want to keep. You can cancel an edit session by moving your cursor to the command line and entering **CANCEL**. This returns you to the Edit Entry Panel.

Warning
The **CANCEL** command cancels all changes since the beginning of the edit session or the last **SAVE** command, whichever is most recent.

Logging off
From the ISPF Primary Option Menu, exit by entering an **X** on the command line or pressing <**F3**>. You can exit ISPF from any other panel by entering **=X** on the panel's main command line. To log off of TSO, enter **LOGOFF**.

Using the Editor
Commands may be entered in either uppercase or lowercase. Two basic types of commands perform ISPF editing operations. Line Commands These affect only a single line or block of lines. You enter line commands by typing them in the line command field and then pressing the <**Enter**> key. The line command field is the column of line numbers (or quote marks for new data sets) on the left of your screen. Line commands let you easily move, copy, delete, and insert lines, among other functions. Primary Commands These affect the entire data set. You enter these commands on the command line (COMMAND === >), located near the top of your screen. Some primary commands (e.g, **FIND** and **CHANGE**) begin with the current line, which is usually the line immediately below the command line. Primary commands let you search for and alter strings, modify your profile settings, and customize your editing environment, among other functions. All commands require that you press the <**Enter**> key after typing the command to send the command to the computer.

Inserting Lines and Entering Data
Anywhere in the line command field, enter **I//n//** to add //n// number of lines. This inserts //n// blank lines after the line on which you entered the **I** command (ex: **i3**). 000001 This is a line of text. 000002 This is another. 000004 To enter many lines, simply enter an **I** with no number after it to go into "insert" mode. Each time you press the <**Enter**> key after typing on a blank line, you will get a new blank line. To get out of insert mode, press your <**Enter**> key twice (enter a null line). Power Typing The text entry (**TE**) command allows you to perform power typing. This is useful when you have many lines to enter. To begin power typing, enter **TE** in the line number field of the line where you want to insert text. The line command field on the left of the screen goes away, so that you can type your information as if it were one long line. When you press the <**Enter** >key, the text is flowed into a paragraph. Before you enter power typing mode, consider the following: If you are entering text, such as for a memo or letter, make sure caps mode is set to OFF so that your text will not be translated to uppercase. (Enter **CAPS OFF** on the command line.) Make sure sequence numbering is off so that sequence numbers will not be written over any of your text. (Enter **NUMBER OFF** on the command line.) If you have set bounds, make sure the setting is where you want so that the lines will flow correctly when you finish power typing. See "Edit Profiles" for more information about caps mode, bounds, and numbering.
 * i3**0003 This inserts 3 blank lines here.

Deleting lines
Enter **D//n//** to delete n number of lines. This deletes //n// lines including the one on which you entered the **D** command (ex: d4). To delete only one line, you can enter just **D** (with no number).

Replicating Lines
Enter **R//n//** to replicate a line //n// number of times (ex: r6). The new replicas are created immediately following the line being replicated. Existing lines (if any) beneath the line being replicated are automatically moved down to make room for the new replica lines.

Copying/Moving Lines
The copy (**C//n//**) and move (**M//n//**) commands require a second command to tell the editor where a line should be copied or moved to. After typing the copy or move command, move the cursor to the line you want the text to be inserted Before (B) or After (A). Type **B** to have the text entered before the line your cursor is on, or **A** to put the text after the line your cursor is on. Then press <**Enter**>. You can enter a move or copy command and press the <**Enter**> key or the <**F7**> and <**F8**> keys before typing a before or after command. ISPF will display the message MOVE/COPY IS PENDING. It's reminding you to complete the move or copy operation. Simply move your cursor to the appropriate place and type an **A** or **B**, then press <**Enter**> to complete the operation. If you start a move or copy command and then change your mind, press <**Enter**> to get the PENDING message. Then enter **RESET** on the command line to clear the command.  000002 five lines will be copied. 000003 The copied lines will be inserted 000004 AFTER the line following the one 000005 marked with an A. 000006  000010 000013 000014 000016 just ahead of the line marked 000017 with a B.
 * Example 1. Enter C//n// to copy //n// number of lines.**
 * c5**0001 Beginning with this line,
 * a**00007 Lines will be inserted After this line.
 * Example 2. Enter M//n// to move //n// number of lines.**
 * b**00011 Text to be added Before this line.
 * m3**0015 These three lines will be moved

Block Editing
Block editing lets you delete, copy, or move a large number of lines without having to specify an exact number. You can start a block operation on one screen and complete it after paging to another screen. Deleting Blocks To delete a range of lines, block off the area you would like to delete by typing the command **DD** next to the beginning and ending lines of your block. Press <**Enter**>. This deletes the entire block, including the ones containing the **DD** commands. 000021 deletes 000022 lines Moving Blocks Block off the area by typing **MM** on the beginning and ending lines you would like to move. Move the cursor to the line where the block is to be moved. You can use the <**F8**> and <**F7**> keys to move forward or backward through your data set to get to the line you want. Type **A** to move the block After the line your cursor is on, or type **B** to move the block Before the line your cursor is on. Press <**Enter**>. 000031 a block that will 000032 be moved from this 000033 location. The next line 000035 000036 0**a**0037 Text is moved to after this line. Copying Blocks The procedure is exactly the same as moving blocks except use **CC** to block off the area. Block off the area by typing **CC** on the beginning and ending lines you would like to move. Move the cursor to the line where the block is to be moved. You can use the <**F8**> and <**F7**> keys to move forward or backward through your data set to get to the line you want. Type **A** to move the block After the line your cursor is on, or type **B** to move the block Before the line your cursor is on. Press <**Enter**>. 000031 a block that will 000032 be copied. 000033 The next line is 000035 000036 0**b**0037 Text is copied before this line.
 * dd**0020 This
 * dd**0023 20 through 23.
 * mm**0030 This is the start of
 * mm**0034 is the end of the block.
 * cc**0030 This is the start of
 * cc**0034 the end of the block.

Splitting Lines
The text split (**TS**) line command splits a line into two lines. This is useful when you must insert additional text and the line becomes too long. To split a line, type **TS//n//** anywhere in the line command field (but don't press <**Enter**> yet), then move your cursor to the location in the line where you want to split it. Then press <**Enter**>. The new line will align with the left side of the paragraph. If lines are indented, the new line will align with the indent. The "//n//" specifies how many blank lines to insert between the split lines. If you do not specify any number, then one blank line will be inserted. If you don't want a blank line, just press <**Enter**> again.

Aligning Paragraphs
The text flow (**TF**) line command restructures a paragraph following deletions, insertions, splitting, etc. When you enter **TF** in the line command area, the text is reflowed from the beginning of that line to the end of the paragraph. The end of a paragraph is denoted by a blank line, a change in indentation, or the special characters period (.), colon, or ampersand (&) in column 1. (The special characters are Script/VS control word delimiters.) You can also use **TF//n//**, where //n// specifies the rightmost column position for text to flow. For example, **TF50** adjusts a paragraph to 50 characters wide. The default is the right column in the current **BOUNDS** setting. For more information about bounds, see "Edit Profiles".

Finding and Changing Data
The **FIND** and **CHANGE** commands are primary commands, entered on the command line. Both of these commands take effect beginning with the current line, usually the first line below the command line. To ensure that these commands apply to your whole data set, first issue the command **TOP** on the command line to move back to the top of your data set. You'll see the TOP OF DATA message. Finding a String The **FIND** command locates one or more occurrences of a specified string, starting with the current line. The simple format of the **FIND** command is: where "//string//" is the search string you want to find. If the string contains blanks, non-alphanumeric characters, or single quotes, enclose the string in double quotes ("). Or, if the string contains a double quote, enclose it in single quotes ('). The **FIND** command has several options that let you further tailor your search, such as specifying a range of lines to search, finding exact case matches, and indicating whether to find a part of a word or whole word. You can also find multiple occurrences of a given string. See IBM's document ISPF/PDF Edit and Edit Macros, for a complete description of **FIND**. Changing Data The **CHANGE** primary command lets you change a specified character string to another string. The editor searches for the first string, beginning with the current line, and, when it finds it, changes it to the second string. The simple format of the **CHANGE** command is: where "//string-1//" is the string to be changed, and "//string-2//" is the string you want the first one changed to. If either string contains non-alphanumeric characters, you must enclose the string in double quotes. This form of the **CHANGE** command changes the //first// occurrence of "//string-1//" that it finds. To change all occurrences of "//string-1//" to "//string-2//", use the //ALL// keyword on the **CHANGE** command. Additional options on the **CHANGE** command allow you to specify a range of lines, indicate a case-sensitive match, or change a whole or part of a word. See IBM's document ISPF/PDF Edit and Edit Macros, for a complete description of **CHANGE**. Converting Characters to Lowercase The **LC** line command converts all uppercase characters on a line or range of lines to lowercase. The **LC** command does not modify the caps mode in the profile of the data set you are editing. (See about profiles in "Edit Profiles.") 000031 THAT WILL BE 000032 CONVERTED TO 000033 LOWERCASE AFTER 000034 YOU PRESS . 000035 000036 000037 THIS LINE ISN'T AFFECTED. 000031 THAT WILL BE 000032 CONVERTED TO 000033 LOWERCASE AFTER 000035 000036 000037 THIS LINE ISN'T AFFECTED. Converting Characters to Uppercase The **UC** line command converts all lowercase characters on a line or range of lines from to uppercase. The **UC** command does not modify the caps mode in the profile of the data set you are editing. 000031 that will be 000032 converted to 000033 uppercase after 000034 you press. 000035 000036 000037 this line isn't affected. 000031 that will be 000032 converted to 000033 uppercase after 000035 000036 000037 this line isn't affected.
 * FIND //string//**
 * find tso** ///* finds the characters tso *///
 * find "isn't"** ///* finds the word isn't *///
 * find '"string-1"**' ///* finds the word "string-1" *///
 * CHANGE //string-1// //string-2//**
 * CHANGE abc def** **CHANGE "isn't" "aren't"**
 * CHANGE //string-1// //string-2// ALL**
 * LC//n//** changes //n// lines from uppercase to lowercase.
 * lc5**030 THIS STARTS 5 LINES
 * LCLC** lets you change a block of lines, inclusive, from uppercase to lowercase.
 * lclc**30 THIS IS TEXT
 * lclc**34 YOU PRESS .
 * UC//n//** changes //n// lines from lowercase to uppercase.
 * uc5**030 this starts 5 lines
 * UCUC** lets you change a block of lines, inclusive, from lowercase to uppercase.
 * ucuc**30 this is text
 * ucuc**34 you press.

ISPF Profiles and ISPF Edit Profiles
ISPF profiles allow you to customize your ISPF environment. For example, you can define the number of function (F-keys or PF-keys) keys supported by your terminal and change their default values. You also can tell ISPF characteristics about your terminal, such as the number of lines and columns on your screen. The ISPF editor also lets you define edit profiles (discussed in section "Changing Edit Profile Settings"), which are saved in the ISPF profile. In TSO, profiles are saved in a data set with a name of your choice. If you don't create a permanent ISPF profile, ISPF uses a temporary profile during your ISPF session. Any customizations you make will go away when you exit ISPF. For more information about creating a permanent ISPF profile, see the chapter "ISPF Profiles." A Word About Edit Profiles The ISPF editor also lets you define edit profiles (discussed later in this document), which are saved in the ISPF profile. Edit profiles define your editing environment and let you customize it for different types of files. By default, the editor associates profile characteristics with your data set, depending on a number of data set characteristics. These may be OK for you... or they may not. The section near the end of this document titled "Edit Profiles" briefly discusses how you can alter your current edit profile. For detailed information about creating and modifying edit profiles, see IBM manual [|ISPF/PDF Edit and Edit Macros]. ISPF Profiles A temporary ISPF profile data set is created automatically for you when you log on to TSO. It is assigned to the ddname ISPPROF. Since the data set is temporary, ISPF profile values are not saved between TSO sessions. Creating a Permanent ISPF Profile Data Set You can save your profile values between sessions by allocating a permanent ISPF profile data set. Enter the following command: You must specify a valid data set name (for example, UF.//userid//.ISPFPROF). If the data set doesn't exist, it will be created and then allocated to the ddname ISPFPROF. If the data set already exists, the command allocates it to ddname ISPPROF. You must allocate this data set for each TSO session in which you want to use ISPF. Allocating an ISPF Profile Data Set Automatically This section assumes you already have a TSO start-up CLIST. If you don't, or don't know whether you do, see below. Add these commands to your start-up CLIST member (e.g., $$$BEGIN): FREE DDN(ISPPROF) ALLOC DD(ISPPROF) DS('prof.data.set.name') SHR REUSE The **FREE** command frees the temporary ISPPROF data set before you allocate your permanent data set. If you do not know whether you have a profile data set, use the **TSO LISTALC** command to list your data sets and their associated ddnames as follows: Look for ddname ISPPROF. If the data set name associated with it is one of your own data sets (your userid, a departmental high-level index, or other familiar index will be part of the name), then you already have a user profile data set. Edit Profiles Edit profiles let you customize your editing environment to suit your needs. The editor uses a set of default profile commands if you do not create your own. Edit profiles are stored in your ISPF profile. Some data set characteristics implicitly specify an edit profile. These include the name you use as the last qualifier in the data set name (e.g., .CLIST, .TEXT, or .CNTL); the record length; or record format. Also, the editor makes some assumptions about the data set based on the first few lines of data, such as how to set the case, whether to use internal sequence numbers, and others. Any of the default settings can be overridden by issuing a command on the command line. To see the profile settings currently in effect, enter the **PROFILE** command on the command line. The editor will display several lines containing settings that affect your entire data set. To get rid of these lines, enter **RESET** on the command line. Retaining Profile Settings The next section describes some useful edit profile commands and how to change them. In order to keep any profile changes that you make, they must be saved in a permanent profile data set. See the section "ISPF Profiles" for information about creating an ISPF profile. Changing Edit Profile Settings To change any profile setting, enter the associated command on the command line. The command takes effect immediately and is saved in the profile when you enter the **SAVE** command. This controls whether the data set is automatically saved when you enter the END command or press . AUTOSAVE ON turns autosave mode on; AUTOSAVE OFF turns it off. Sets the left and right boundaries. The boundaries control which columns are affected by other commands. This lets you protect parts of your data set from being altered such as with the **CHANGE** command. To set bounds, enter the following on the command line: If you enter **BOUNDS** with no columns specified, it resets the bounds to the default bounds for that data set. The boundaries also determine where text will be flowed when you end power typing. Controls whether data are automatically converted to uppercase. **CAPS ON** converts all characters to uppercase; **CAPS OFF** leaves characters in mixed case. If the data set to be edited contains lowercase characters, ISPF sets the profile to **CAPS OFF**. Similarly, if the data set contains all uppercase characters, ISPF sets the mode to **CAPS ON**. Determines whether trailing spaces at the end of a line are treated as blanks or nulls. **NULLS ON STD** specifies that trailing spaces be treated as one blank, followed by nulls. This is very useful if you plan to use the  key function, since blanks prevent you from inserting characters. An empty line is written as all blanks. **NULLS OFF** specifies that trailing spaces be written as blanks. Controls whether sequence numbering occurs in the data line. **NUMBER ON** verifies that all lines have valid numbers in ascending order and renumbers lines that are out of sequence. **NUMBER OFF** turns number mode off. Note that if your data set contains sequence numbers and you turn numbering off, you must delete the sequence numbers if you no longer want them. Sequence numbers are stored at the far right of your line, so, depending on your line length, they may not be visible on your screen. You can use the **RIGHT** and **LEFT** primary commands to shift your screen to the right or left to see characters that are off the screen. For example, **RIGHT 20** shifts the screen right by 20 columns. Similarly, **LEFT 20** would shift it back again. Sequence numbers in the data line are not the same as the line numbers that show in the line command field on the left side of your screen. Line numbers are not part of your data set, whereas sequence numbers are. Lets you display your current profile, define a new profile, or switch to a different profile.You can define several different profiles for different types of data sets and tell ISPF which one you want it to use. To just view your current profile, enter **PROFILE** on the command line. For more information on how to define a new profile or switch profiles, see the description of the **PROFILE** command in IBM's manual ISPF/PDF Edit and Edit Macros. Creates and maintains statistics for a member of a PDS. **STATS ON** requests that statistics be created. The statistics include the date of last modification, userid that modified the member, creation date, and others. ISPF will issue a warning message if it detects that the stats mode and the member are not consistent. Enter **RESET** to get rid of the message. You will see the message if statistics exist, but stats mode is OFF; or, if stats mode is ON and no statistics exist. Statistics are useful when multiple users can update the same data set; when a data set has many members; or when you want to keep track of when a member changes.
 * %ISPPROF //prof.data.set.name//**
 * LISTALC STATUS**
 * AUTOSAVE**
 * BOUNDS**
 * BOUNDS //left-col// //right-col//**
 * CAPS**
 * NULLS**
 * NUMBER**
 * PROFILE**
 * STATS**