<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5106346250912916933</id><updated>2011-11-27T16:55:05.404-08:00</updated><title type='text'>IBM Mainframe Journal</title><subtitle type='html'>An online journal of my interactions with z/OS</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-7590987827858604137</id><published>2011-07-29T15:20:00.000-07:00</published><updated>2011-07-29T15:21:48.236-07:00</updated><title type='text'>Fin</title><content type='html'>To my few and loyal readers,&lt;br /&gt;&lt;br /&gt;I will no longer be updating this blog. I have enjoyed writing and learning all about mainframes, but both the universe and IBM decided it was time for me to move onto bigger and better things. I, like many other IBMers, have been 'resource action-ed' (ie, laid off). Rather than get another job in the industry and thus expose myself to future resource actions, I have decided to go back to school and get my phd, with a focus on the social and ethical implications of the creation of artificial intelligence.&lt;br /&gt;&lt;br /&gt;I truly hope this blog saves you some of the pain and trouble I experienced when learning about z/OS, and please feel free to post or contact me if you have questions about z.&lt;br /&gt;&lt;br /&gt;cheers&lt;br /&gt;&lt;br /&gt;David&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-7590987827858604137?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/7590987827858604137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2011/07/fin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/7590987827858604137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/7590987827858604137'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2011/07/fin.html' title='Fin'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-5513497108460311392</id><published>2011-04-27T11:08:00.000-07:00</published><updated>2011-04-28T15:10:11.146-07:00</updated><title type='text'>HOW TO GET A WORKSTATION APPLICATION TO INTERFACE WITH Z/OS</title><content type='html'>I hope this post saves you some aggravation. If you are creating an application and need to interface with z/OS via TCP/IP, there &lt;u&gt;&lt;i&gt;&lt;b&gt;IS&lt;/b&gt;&lt;/i&gt;&lt;/u&gt; an API for that. The book you want is called "IP Sockets Application Programming Interface Guide and Reference" and can be found &lt;a href="http://publib.boulder.ibm.com/infocenter/zos/v1r12/index.jsp?topic=/com.ibm.zos.r12.cs3/cs3.htm"&gt;here&lt;/a&gt;. Note - depending on the age of this post, you may want to find a more recent version of the pub. The link takes you to communication pubs for z/OS v1r12.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-5513497108460311392?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/5513497108460311392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2011/04/how-to-create-workstation-application.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/5513497108460311392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/5513497108460311392'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2011/04/how-to-create-workstation-application.html' title='HOW TO GET A WORKSTATION APPLICATION TO INTERFACE WITH Z/OS'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-3655315759863279097</id><published>2010-09-28T12:03:00.000-07:00</published><updated>2010-09-28T12:10:32.019-07:00</updated><title type='text'>HOW TO SERIALIZE A JAVA TABLE THAT HAS ROWS OF VARIABLE HEIGHT</title><content type='html'>Not strictly a mainframe topic, I know, but this has been such a pain in the ass to figure out that I want to save others from the nonsense I had to go through to work this out.&lt;br /&gt;&lt;br /&gt;-=THE SITUATION=-&lt;br /&gt;&lt;br /&gt;You have a Java table with a custom renderer that allows for the text in cells to word-wrap, thus altering the height of some of the table rows. You want to serialize this table model and you get a java error regarding a sizeSequence.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-=WHAT'S GOING ON=-&lt;br /&gt;&lt;br /&gt;Basically, the problem is that Java is dumb. When you execute the setRowHeight method for the table in question, it should be updating the SizeSequence (the thing that keeps track of where one row ends and another begins), but it's not. Not a problem until you try to serialize the table and Java freaks out because there is a discrepancy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-=THE FIX=-&lt;br /&gt;&lt;br /&gt;Put this line:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;[table model].fireTableDataChanged();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;just prior to your attempt to serialize. It'll force Java to do what it should've done in the first place, which is update SizeSequence, and allow you to serialize your table.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-3655315759863279097?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/3655315759863279097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2010/09/how-to-serialize-java-table-that-has.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/3655315759863279097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/3655315759863279097'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2010/09/how-to-serialize-java-table-that-has.html' title='HOW TO SERIALIZE A JAVA TABLE THAT HAS ROWS OF VARIABLE HEIGHT'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-1401157773149639401</id><published>2010-08-29T09:28:00.000-07:00</published><updated>2010-08-29T09:29:51.988-07:00</updated><title type='text'>HOW TO CLEAR THE SCREEN IN TSO, CLIST, OR REXX</title><content type='html'>&lt;span class="postbody"&gt;I did some digging and found a forum thread with the answer. It seems that you can't do it from TSO. You  can, however, write a simple assembler module that will do it for you. &lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;a href="http://ibmmainframes.com/about33473.html" rel="nofollow" target="_blank" class="postlink"&gt;here is the thread with the source for  the asm module&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;a href="http://publib.boulder.ibm.com/infocenter/zos/v1r9/index.jsp?topic=/com.ibm.zos.r9.ikjb700/ikj4b760143.htm" rel="nofollow" target="_blank" class="postlink"&gt;&lt;br /&gt;here is a link to the IBM pub that describes the STLINENO macro&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-1401157773149639401?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/1401157773149639401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2010/08/how-to-clear-screen-in-tso-clist-or.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/1401157773149639401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/1401157773149639401'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2010/08/how-to-clear-screen-in-tso-clist-or.html' title='HOW TO CLEAR THE SCREEN IN TSO, CLIST, OR REXX'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-9202284337205886441</id><published>2010-08-12T09:33:00.000-07:00</published><updated>2010-08-12T09:34:11.897-07:00</updated><title type='text'>HOW TO REMOVE SYSTEM MESSAGES FROM THE CONSOLE</title><content type='html'>You can use PF1 to remove them one at a time. Does someone know how to clear them all at once?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-9202284337205886441?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/9202284337205886441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2010/08/how-to-remove-system-messages-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/9202284337205886441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/9202284337205886441'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2010/08/how-to-remove-system-messages-from.html' title='HOW TO REMOVE SYSTEM MESSAGES FROM THE CONSOLE'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-7491447044076693218</id><published>2010-08-05T08:22:00.001-07:00</published><updated>2010-08-05T08:39:25.966-07:00</updated><title type='text'>HOW TO COMPILE AND LINK EDIT MULTIPLE ASSEMBLER MODULES AT THE SAME TIME</title><content type='html'>This is the best way I could come up with. If someone has something better (a way to do it from within the JCL perhaps?) please let me know. We are going to create three files:&lt;br /&gt;&lt;br /&gt;1) a text file that contains the names and locations of the modules you are going to work with&lt;br /&gt;&lt;br /&gt;2) JCL that will compile and link edit the modules&lt;br /&gt;&lt;br /&gt;3) a REXX exec that will read data from the environment file, edit the JCL accordingly, then submit the JCL for each member in the environment file. Essentially, you are going to submit a job for each module you want compiled, and the REXX will do that for you automatically via the parameters you specify in the environment file.&lt;br /&gt;&lt;br /&gt;Here is the environment file sample:&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);font-size:78%;" &gt;&lt;br /&gt;/*********************************************************************/       &lt;br /&gt;/* ASMCLENV - ENVIRIONMENT FILE USED BY ASMCLREX                        */       &lt;br /&gt;/*                                                                                                                                      */       &lt;br /&gt;/* 04AUG10                                                                                                                   */       &lt;br /&gt;/*                                                                                                                                      */       &lt;br /&gt;/*********************************************************************/       &lt;br /&gt;                                                                             &lt;br /&gt;*1                                                                            &lt;br /&gt;[location of source module to be compiled]&lt;br /&gt;[where to put the compiled module]&lt;br /&gt;[where to put the link edited load module]                                                        &lt;br /&gt;                                                                             &lt;br /&gt;*2                                                                            &lt;br /&gt;[same format as above]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The REXX exec is going to look for an '*' in column one as it reads this file to tell it where the data it's looking for is. Also, make sure to include the high-level qualifier in the data set name.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is the JCL:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);font-size:78%;" &gt;//ASMCL    JOB 'COMPILE AND BIND ASSY',MSGLEVEL=(1,1),                        &lt;br /&gt;// NOTIFY=&amp;amp;SYSUID,MSGCLASS=H,CLASS=1                                          &lt;br /&gt;//*                                                                           &lt;br /&gt;//***   HLASMCL                                                               &lt;br /&gt;//*                                                                           &lt;br /&gt;//* THIS PROCEDURE RUNS THE HIGH LEVEL ASSEMBLER                              &lt;br /&gt;//* AND LINK-EDITS THE NEWLY ASSEMBLED PROGRAM                                &lt;br /&gt;//*                                                                           &lt;br /&gt;//*********************************************************************       &lt;br /&gt;//* COMPILE STEP                                                                                                       *       &lt;br /&gt;//*********************************************************************       &lt;br /&gt;//C        EXEC PGM=ASMA90,PARM=(OBJECT,NODECK)                               &lt;br /&gt;//SYSLIB   DD   DSN=SYS1.MACLIB,DISP=SHR                                      &lt;br /&gt;//*                                                                           &lt;br /&gt;//SYSUT1   DD   DSN=&amp;amp;&amp;amp;SYSUT1,SPACE=(4096,(120,120),,,ROUND),UNIT=SYSDA,       &lt;br /&gt;//             DCB=BUFNO=1                                                    &lt;br /&gt;//*                                                                           &lt;br /&gt;//SYSIN    DD   DSN=   LOCATION OF SOURCE ASSY PGM **                         &lt;br /&gt;//*                                                                           &lt;br /&gt;//SYSLIN   DD   DSN=   WHERE OBJECT MODULE SHOULD BE WRITTEN **               &lt;br /&gt;//*                                                                           &lt;br /&gt;//SYSPRINT DD   SYSOUT=*                                                      &lt;br /&gt;//*********************************************************************       &lt;br /&gt;//* LINK STEP                                                                                                                *       &lt;br /&gt;//*********************************************************************       &lt;br /&gt;//L        EXEC PGM=HEWL,COND=(8,LT,C),                                       &lt;br /&gt;//             PARM='NOMAP,NOLET,NOLIST,NCAL'                                 &lt;br /&gt;//*                                                                           &lt;br /&gt;//SYSLIN   DD   DSN=    LOCATION OF MODULE TO BE LINKED **                    &lt;br /&gt;//*                                                                           &lt;br /&gt;//SYSLMOD  DD   DSN=    WHERE LINKED MODULE SHOULD BE WRITTEN **              &lt;br /&gt;//*                                                                           &lt;br /&gt;//SYSUT1   DD   DSN=&amp;amp;&amp;amp;SYSUT1,SPACE=(1024,(120,120),,,ROUND),UNIT=SYSDA,       &lt;br /&gt;//             DCB=BUFNO=1                                                    &lt;br /&gt;//*                                                                           &lt;br /&gt;//SYSPRINT DD   SYSOUT=*  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This you shouldn't have to do anything with, just cut and paste, but be careful! JCL is very picky about operands being in the correct row/column. Make sure the lines that are continuations (the part of the statement that is continued on the next line) begins in column 16 or you'll get a big fat error!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is the REXX that drives the whole thing:&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);font-size:78%;" &gt;&lt;br /&gt;/* REXX */                                                                    &lt;br /&gt;/*********************************************************************/       &lt;br /&gt;/* CREATED 04AUG10                                                                                               */       &lt;br /&gt;/*                                                                                                                                      */       &lt;br /&gt;/* THE PURPOSE OF THIS EXEC IS TO DRIVE ASMCL (JCL TO COMPILE AND    */       &lt;br /&gt;/* LINK EDIT AN ASSEMBLER MODULE). ASMCLREX WILL READ ASMCLENV TO    */       &lt;br /&gt;/* GET A LIST OF ASSEMBLER SOURCE FILES TO COMPILE AND LINK. IT WILL */       &lt;br /&gt;/* THEN UPDATE ASMCL WITH THE DATA FROM ASMCLENV, SUBMIT THE JOB,    */       &lt;br /&gt;/* AND REPEAT FOR EACH ENTRY IN ASMCLENV. THIS WAY WE CAN COMPILE AND*/       &lt;br /&gt;/* LINK MULTIPLE SOURCE FILES AT A TIME.                             */       &lt;br /&gt;/*                                                                   */       &lt;br /&gt;/*********************************************************************/       &lt;br /&gt;&lt;br /&gt;ADDRESS TSO                                                                    &lt;/span&gt;                                                                               &lt;span style="color: rgb(51, 255, 51);font-size:78%;" &gt;&lt;br /&gt;&lt;br /&gt;/*READ ENVIRONMENT DATA***********************************************/        &lt;/span&gt;                                                                               &lt;span style="color: rgb(51, 255, 51);font-size:78%;" &gt;&lt;br /&gt;"ALLOC DD (INDDENV) DA('LOCATION OF ENVIRONMENT FILE') SHR REUSE"                &lt;br /&gt;'EXECIO * DISKR INDDENV (STEM ENVDATA. FINIS'                                 &lt;br /&gt;"FREE DD(INDDENV)"                                                            &lt;br /&gt;ENVSIZE = ENVDATA.0                                                           &lt;br /&gt;SYSIN = "//SYSIN    DD   DSN="                                                &lt;br /&gt;SYSLIN = "//SYSLIN   DD   DSN="                                               &lt;br /&gt;SYSLMOD = "//SYSLMOD  DD   DSN="                                              &lt;br /&gt;DISP = ",DISP=SHR"                                                            &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/*LOOP THROUGH ENVIRONMENT DATA TO PULL OUT RELEVANT INFORMATION*****/         &lt;/span&gt;                                                                                                                                                              &lt;span style="color: rgb(51, 255, 51);font-size:78%;" &gt;&lt;br /&gt;DO I = 1 TO ENVSIZE                                                           &lt;br /&gt;&lt;br /&gt;/*IF ENTRY MARKER IS FOUND, UPDATE ASMCL AND SUBMIT THE JOB**********/         &lt;/span&gt;                                                                               &lt;span style="color: rgb(51, 255, 51);font-size:78%;" &gt;&lt;br /&gt;  IF(SUBSTR(ENVDATA.I,1,1)) = '*' THEN DO                                    &lt;br /&gt;     "ALLOC DD (INDDACL) DA('LOCATION OF TEMPLATE JCL') SHR REUSE"             &lt;br /&gt;     'EXECIO * DISKR INDDACL (STEM ACLDATA. FINIS'                           &lt;br /&gt;     "FREE DD(INDDACL)"                                                      &lt;br /&gt;&lt;br /&gt;     ACLSIZE = ACLDATA.0                                                      &lt;/span&gt;                                                                               &lt;span style="color: rgb(51, 255, 51);font-size:78%;" &gt;&lt;br /&gt;     K = I + 1                                                               &lt;br /&gt;     ENVDATA.K = STRIP(ENVDATA.K)                                            &lt;br /&gt;     ACLDATA.18 =  SYSIN || ENVDATA.K || DISP                                &lt;br /&gt;     K = K + 1                                                               &lt;br /&gt;     ENVDATA.K = STRIP(ENVDATA.K)                                            &lt;br /&gt;     ACLDATA.20 = SYSLIN || ENVDATA.K || DISP                                &lt;br /&gt;     ACLDATA.29 = SYSLIN || ENVDATA.K || DISP                                &lt;br /&gt;     K = K + 1                                                               &lt;br /&gt;     ENVDATA.K = STRIP(ENVDATA.K)                                            &lt;br /&gt;     ACLDATA.31 = SYSLMOD || ENVDATA.K || DISP                               &lt;br /&gt;&lt;br /&gt;     "ALLOC DD (OUTDD) DA('LOCATION OF TEMPLATE JCL') SHR REUSE"                &lt;/span&gt;                                                                               &lt;span style="color: rgb(51, 255, 51);font-size:78%;" &gt;&lt;br /&gt;     'EXECIO * DISKW OUTDD (FINIS STEM ACLDATA.'                             &lt;br /&gt;     "FREE DD(OUTDD)"                                                        &lt;br /&gt;&lt;br /&gt;     "SUBMIT 'LOCATION OF TEMPLATE JCL'"                                        &lt;/span&gt;                                                                               &lt;span style="color: rgb(51, 255, 51);font-size:78%;" &gt;&lt;br /&gt;  END                                                                        &lt;br /&gt;&lt;br /&gt;END                                                                            &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-7491447044076693218?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/7491447044076693218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2010/08/how-to-compile-and-link-edit-multiple.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/7491447044076693218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/7491447044076693218'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2010/08/how-to-compile-and-link-edit-multiple.html' title='HOW TO COMPILE AND LINK EDIT MULTIPLE ASSEMBLER MODULES AT THE SAME TIME'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-1282509768732202707</id><published>2010-07-30T08:26:00.000-07:00</published><updated>2010-07-30T08:37:04.112-07:00</updated><title type='text'>A QUICK WAY TO CREATE A MEMBER IN AN EMPTY DATASET</title><content type='html'>Normally, if you are working with a &lt;a href="http://en.wikipedia.org/wiki/Data_set_%28IBM_mainframe%29"&gt;PDS &lt;/a&gt;that is populated with members, you can create a new member by going to&lt;span style="color: rgb(51, 255, 51);"&gt; ISPF option 3.4&lt;/span&gt;, entering the data set name, then typing &lt;span style="color: rgb(51, 255, 51);"&gt;S [new member name]&lt;/span&gt; and the command line. Unfortunately, this doesn't work if the PDS is empty. To get around this, go to&lt;span style="color: rgb(51, 255, 51);"&gt; ISPF option 2 (EDIT)&lt;/span&gt;, and enter the data set name with the name of the member you want to create like this:&lt;br /&gt;&lt;pre class="screen"&gt;&lt;span style="color: rgb(255, 204, 102);"&gt;OTHER PARTITIONED OR SEQUENTIAL DATA SET:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 204, 102);"&gt;   DATA SET NAME ===&gt;&lt;/span&gt; &lt;strong style="color: rgb(51, 255, 51);" class="userinput"&gt;&lt;code&gt;'&lt;em class="replaceable"&gt;&lt;code&gt;data.set.name&lt;/code&gt;&lt;/em&gt;(&lt;em class="replaceable"&gt;&lt;code&gt;newmemb&lt;/code&gt;&lt;/em&gt;)'&lt;/code&gt;&lt;/strong&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;I found this gem and some other neat ISPF tricks &lt;a href="http://docweb.cns.ufl.edu/docs/d0089/d0089.html"&gt;here&lt;/a&gt;. &lt;/span&gt;&lt;br /&gt;&lt;strong style="color: rgb(51, 255, 51);" class="userinput"&gt;&lt;code&gt;&lt;/code&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-1282509768732202707?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/1282509768732202707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2010/07/quick-way-to-create-member-in-empty.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/1282509768732202707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/1282509768732202707'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2010/07/quick-way-to-create-member-in-empty.html' title='A QUICK WAY TO CREATE A MEMBER IN AN EMPTY DATASET'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-6566767198152407534</id><published>2010-06-22T13:12:00.000-07:00</published><updated>2010-06-22T13:24:27.340-07:00</updated><title type='text'>HOW TO TRANSFER AN ENTIRE PDS FROM ONE SYSTEM TO ANOTHER WHEN THEY AREN'T DIRECTLY CONNECTED</title><content type='html'>Ran into this issue the other day:&lt;br /&gt;&lt;br /&gt;I had a need to move a PDS from one mainframe to another and the two systems were not connected. I tried a simple FTP to my workstation then up to the other system, but the PDS members became malformed. A coworker suggested I XMIT (&lt;a href="http://bigironnewb.blogspot.com/2008/03/racf-xmit-and-receive-basics.html"&gt;see this post&lt;/a&gt; if you need help on how to XMIT) the PDS to myself, FTP the XMITed PDS to my workstation, up to the target system, then unload it there.&lt;br /&gt;&lt;br /&gt;I know that's a bit confusing so let's break this down:&lt;br /&gt;&lt;br /&gt;1) XMIT the PDS from the source system to a new dataset on the source system. This will package the PDS into a format that can be transported. Let's say you called it (DSX)&lt;br /&gt;&lt;br /&gt;2) FTP the packaged PDS from the source mainframe to your workstation (your PC, MAC, LCARS, whatever)&lt;br /&gt;&lt;br /&gt;3) FTP the packaged PDS from your workstation to the target mainframe.&lt;br /&gt;&lt;br /&gt;4) issue a RECEIVE INDS(dsx) command on the target system.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That should do it, hope it helps :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-6566767198152407534?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/6566767198152407534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2010/06/how-to-transfer-entire-pds-from-one.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/6566767198152407534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/6566767198152407534'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2010/06/how-to-transfer-entire-pds-from-one.html' title='HOW TO TRANSFER AN ENTIRE PDS FROM ONE SYSTEM TO ANOTHER WHEN THEY AREN&apos;T DIRECTLY CONNECTED'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-3339236490851968481</id><published>2010-02-16T14:51:00.001-08:00</published><updated>2010-02-16T14:52:11.593-08:00</updated><title type='text'>How to Get Rid of the Right-Hand Column of Numbers in the ISPF Editor</title><content type='html'>UNNUM will do the trick nicely :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-3339236490851968481?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/3339236490851968481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2010/02/how-to-get-rid-of-right-hand-column-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/3339236490851968481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/3339236490851968481'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2010/02/how-to-get-rid-of-right-hand-column-of.html' title='How to Get Rid of the Right-Hand Column of Numbers in the ISPF Editor'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-4792001492540208850</id><published>2009-08-28T10:26:00.001-07:00</published><updated>2009-08-28T10:30:38.370-07:00</updated><title type='text'>2009 Master the Mainframe Contest!</title><content type='html'>The 2009 contest is just around the corner. If you are a high school or college kid and want to participate (no experience necessary, I promise!), &lt;a href="http://www.ibm.com/developerworks/university/students/contests/mainframe/index.html"&gt;click here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-4792001492540208850?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/4792001492540208850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2009/08/2009-master-mainframe-contest.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/4792001492540208850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/4792001492540208850'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2009/08/2009-master-mainframe-contest.html' title='2009 Master the Mainframe Contest!'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-3991440377323752570</id><published>2009-07-22T12:07:00.000-07:00</published><updated>2009-07-22T12:57:40.056-07:00</updated><title type='text'>Notes on How to Create a RACF Database</title><content type='html'>First, here is a quick list of some of the RACF utilities and what they do:&lt;br /&gt;&lt;br /&gt;IRRMIN00 RACF database initialization utility&lt;br /&gt;IRRUT400 RACF database split/merge/extend utility&lt;br /&gt;IRRDBU00 RACF database unload utility&lt;br /&gt;IRRUT200 RACF database verification utility&lt;br /&gt;IRRUT100 RACF cross-reference utility&lt;br /&gt;IRRRID00 RACF remove ID utility&lt;br /&gt;IRRADU00 RACF SMF data unload utility&lt;br /&gt;&lt;br /&gt;To create a new RACF database, you're going to use IRRMIN00. Just whip up some JCL (check out 'z/OS Security Server RACF System Programmer's Guide' if nobody in your shop has some canned JCL you can cut and paste) and the utility will create a fresh database for you to use. Note that you have to reIPL before you can use this new database, as it is completely empty. At IPL time, a user entry for IBMUSER will be added so you can log in and start populating your new database.&lt;br /&gt;&lt;br /&gt;After you've done this, there are two commands you probably want to issue against your new database. They are:&lt;br /&gt;&lt;br /&gt;SETR GENERIC(DATASET)&lt;br /&gt;&lt;br /&gt;and&lt;br /&gt;&lt;br /&gt;SETR EGN&lt;span style="font-size: 8pt; font-family: Tahoma; color: rgb(0, 0, 0);" class="left"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The first activates generic profile checking (&lt;a href="http://bigironnewb.blogspot.com/2008/03/racf-xmit-and-receive-basics.html"&gt;see this post for a bit more on RACF profiles&lt;/a&gt;) and the second activates Enhanced Generic Naming. "When you activate this option, RACF allows you to specify the generic character ** (in addition to the generic characters * and %) when you define data set profile names and entries in the global access checking table. " (Security Server RACF Command Language Reference).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-3991440377323752570?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/3991440377323752570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2009/07/notes-on-how-to-create-racf-database.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/3991440377323752570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/3991440377323752570'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2009/07/notes-on-how-to-create-racf-database.html' title='Notes on How to Create a RACF Database'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-1570656824171922893</id><published>2009-04-07T07:58:00.000-07:00</published><updated>2009-04-07T08:30:00.787-07:00</updated><title type='text'>Some Random Goodies</title><content type='html'>I've picked up a few tricks I thought I'd share:&lt;br /&gt;&lt;br /&gt;1)&lt;a href="http://bigironnewb.blogspot.com/2008/03/racf-xmit-and-receive-basics.html"&gt; In a previous post&lt;/a&gt; I talk about sending messages and data sets to other users. The command requires you to know the node name of the system the recipient is on. You can find out what the node name is by going into &lt;a href="http://en.wikipedia.org/wiki/SDSF"&gt;SDSF &lt;/a&gt;  and typing &lt;span style="color: rgb(51, 255, 51);"&gt;NODE &lt;/span&gt;on the command line.&lt;br /&gt;&lt;br /&gt;2) From within SDSF, after you've run a job and you are reading the results, if you want to edit and or reissue the same &lt;a href="http://en.wikipedia.org/wiki/Job_Control_Language"&gt;JCL&lt;/a&gt;, you can do so from within SDSF. When you are looking at the job output, type SJ at the command field to access your job. From there you can edit and resubmit. Here are a few screen shots of what to put where:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Uo6gkg157Ao/SdtvGyziH1I/AAAAAAAAACg/5RgEBEGztEw/s1600-h/sdsf_1.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_Uo6gkg157Ao/SdtvGyziH1I/AAAAAAAAACg/5RgEBEGztEw/s400/sdsf_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5321969547176189778" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Uo6gkg157Ao/SdtvHI4a15I/AAAAAAAAACo/22CnO-B7Z8Q/s1600-h/sdsf_2.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_Uo6gkg157Ao/SdtvHI4a15I/AAAAAAAAACo/22CnO-B7Z8Q/s400/sdsf_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5321969553102264210" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Uo6gkg157Ao/SdtvHKW_Z-I/AAAAAAAAACw/y1_-uv6ICjg/s1600-h/sdsf_3.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_Uo6gkg157Ao/SdtvHKW_Z-I/AAAAAAAAACw/y1_-uv6ICjg/s400/sdsf_3.JPG" alt="" id="BLOGGER_PHOTO_ID_5321969553498925026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3) Recalling migrated data sets can be a pain in the arse, especially when you need several of them to perform a particular task. If you want to recall a bunch of stuff at once, you can do so from within the &lt;a href="http://en.wikipedia.org/wiki/ISPF"&gt;ISPF&lt;/a&gt; data set listing (option 3.4) by typing &lt;span style="color: rgb(51, 255, 51);"&gt;HRECALL&lt;/span&gt; on the command field then &lt;span style="color: rgb(51, 255, 51);"&gt;= &lt;/span&gt;at every subsequent data set you want recalled. The equals sign tells ISPF that you want to repeat the previous command you've entered. Here's another screen shot that illustrates what I'm talking about.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Uo6gkg157Ao/SdtxGAKuRpI/AAAAAAAAAC4/nL2COUGfhA0/s1600-h/hrecall1.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_Uo6gkg157Ao/SdtxGAKuRpI/AAAAAAAAAC4/nL2COUGfhA0/s400/hrecall1.JPG" alt="" id="BLOGGER_PHOTO_ID_5321971732606502546" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-1570656824171922893?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/1570656824171922893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2009/04/some-random-goodies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/1570656824171922893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/1570656824171922893'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2009/04/some-random-goodies.html' title='Some Random Goodies'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Uo6gkg157Ao/SdtvGyziH1I/AAAAAAAAACg/5RgEBEGztEw/s72-c/sdsf_1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-1531361807992725396</id><published>2009-02-19T12:53:00.000-08:00</published><updated>2009-02-19T13:08:58.405-08:00</updated><title type='text'>Quick and Dirty Guide to Adding Users and Groups to the RACF Database</title><content type='html'>&lt;style type="text/css"&gt;  &lt;!--   @page { margin: 0.79in }   P { margin-bottom: 0.08in }  --&gt;  &lt;/style&gt; &lt;p style="margin-bottom: 0in;"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;On occasion you may have the need to give a new user access to your system. As with anything else on the mainframe, there are about a million options but thankfully you really only need to concern yourself with a few of them.     The first thing you need to understand is the concept of groups. RACF groups are a collection of users, grouped together to allow the system programmer (that's you!) an easy way to manage access lists. In other words, if you have 50 users that require access to a data set, rather than grant them access individually, you can put them in a group and give the group access to the data set. Cool, huh?    &lt;br /&gt;&lt;br /&gt;When creating a group, there are two attributes that you need to think about. They are &lt;br /&gt;&lt;br /&gt;1) who  the group owner is (can be another group) &lt;br /&gt;&lt;br /&gt;2) whether  or not this is a Unix System Services group (if it is, you may need  to specify a GID)&lt;br /&gt;&lt;br /&gt;It should be noted that it is not required that a group is created when a new user is added to the RACF database. Use the ADDGROUP command to add a RACF group. Here are a few examples from the RACF Security Administrator's Guide (ch 3, pg 59)  &lt;br /&gt;&lt;br /&gt;For example, to create a group for Department A called DEPTA whose owner and superior group is to be a group called ALLDEPT, enter:    &lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;ADDGROUP DEPTA OWNER(ALLDEPT) SUPGROUP(ALLDEPT)&lt;/span&gt;  &lt;br /&gt;&lt;br /&gt; To then connect users to that group, use the CONNECT command. For example, to connect department members SUE, LIZ, and GENE to the DEPTA group and also give LIZ and SUE authority to add new users to the group, enter:    &lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;CONNECT (SUE LIZ) GROUP(DEPTA) OWNER(DEPTA) AUTHORITY(CONNECT) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;CONNECT GENE GROUP(DEPTA) OWNER(DEPTA)   &lt;/span&gt;&lt;br /&gt;&lt;br /&gt; If the group is to own group data sets create a top generic profile for the group data sets in the DATASET class. For example:&lt;br /&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 255, 51);"&gt;ADDSD ’DEPTA.**’ UACC(NONE)   &lt;/span&gt;&lt;br /&gt;&lt;br /&gt; If the group requires access to RACF-protected resources, give the group the required access using the PERMIT command. For example:    &lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;PERMIT ’RACF.PROTECT.DATA’ ID(DEPTA) ACCESS(READ)   &lt;/span&gt;&lt;br /&gt;&lt;br /&gt; If the group requires access to z/OS UNIX resources, alter the profile to include an OMVS segment with an z/OS UNIX group identifier (GID). For example:     &lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;ALTGROUP DEPTA OMVS(GID(100))   &lt;/span&gt;&lt;br /&gt;&lt;br /&gt; The next thing you need to dig is the concept of profiles. RACF is made up of profiles, and profiles are composed of segments. The base segment is composed of RACF specific stuff. Products also have segments in the profile. When you define a user to the RACF database, you also can define segments of that profile that specify what kind of access that user has to various products that are installed on the system. For example, when you define a new user to RACF, you may also want to define a TSO segment so TSO knows to use RACF (as opposed to its own UADS (User Attribute Dataset) dataset) to authenticate said user at login time.     Use the ADDUSER command to add a user. Here are some things to remember when adding a new user: &lt;br /&gt;&lt;br /&gt;1) Unless  you specify a default password, the password for the new user will  be the name of the group to which you add the user  make  sure you use a valid logon proc (IKJACCNT and ISPFPROC are good  basic ones to start with) &lt;br /&gt;&lt;br /&gt;2) You  can apply the attributes SPECIAL, OPERATIONS, and AUDIT to a new  user to give them access to protected system resources.    &lt;br /&gt;     - SPECIAL   does not automatically give the user access to data, but does give   him/her the ability to grant him/herself permission to said data.   Another way to look at the SPECIAL user is someone who has the   ability to execute protected system commands.      &lt;br /&gt;     - OPERATIONS   has access to data, but not to protected system commands  &lt;br /&gt;     - AUDIT   gives the user the ability to view logs, and specify logging   options   &lt;br /&gt;&lt;br /&gt; Here's more of the ADDUSER command, again from RACF Security Administrator's Guide (ch3 pg 92)&lt;br /&gt;&lt;br /&gt;To create the user profile, you can use any of the following methods:   &lt;br /&gt;&lt;br /&gt;1) Issuing    the ADDUSER command.&lt;br /&gt;2) Enrolling    the user through the TSO/E Information Center Facility (ICF)    panels.     &lt;br /&gt;&lt;br /&gt;Here is an example of using the ADDUSER command to create a user profile. Suppose you want to create a user profile for user Steve H., a member of Department A. You want to assign the following values:    STEVEH  for the user ID  DEPTA  for the default connect group     DEPTA  for the owner of the STEVEH user profile     R3I5VQX  for the initial password     Steve  H. for the user’s name Steve H. does not require any of the user  profile segments except TSO. The TSO segment values that you want to  set to start with are 123456 for the account number and PROC01 for  the logon procedure. To create a user profile with these values,  enter:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;ADDUSER STEVEH DFLTGRP(DEPTA) OWNER(DEPTA) NAME(’Steve H.’) PASSWORD(R315VQX)  TSO(ACCTNUM(123456) PROC(PROC01)) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You then want to create a top generic profile for the user in the   DATASET class using the ADDSD command. For example,   if the user’s user ID is STEVEH, enter:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;ADDSD ’STEVEH.**’ UACC(NONE)   &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  Well, that's about it. Note that you can use generic RACF profiles to protect more than one resource. This can be done with the use of the '*' wildcard (also known as the splat). Generic profiles saves you the trouble of having to create a unique profile for every little thing on the system.  Last but not least, if you want RACF to protect all non-defined system resources, issue the command:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;SETROPS PROTECTALL(FAIL)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;p style="margin-bottom: 0in; font-weight: normal;"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-1531361807992725396?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/1531361807992725396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2009/02/quick-and-dirty-guide-to-adding-users.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/1531361807992725396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/1531361807992725396'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2009/02/quick-and-dirty-guide-to-adding-users.html' title='Quick and Dirty Guide to Adding Users and Groups to the RACF Database'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-6360121089144186505</id><published>2009-02-19T11:55:00.000-08:00</published><updated>2009-02-19T11:59:03.612-08:00</updated><title type='text'>What Does ABEND 414-04 Mean?</title><content type='html'>Ran into this one recently and I thought I'd share. Essentially, a volume can be set to READ ONLY. This is something outside the scope of any security product that might be running on the system, meaning you may have RACF permissions to a data set, but if the volume on which that data set resides is READ ONLY, you'll get the 414 abend. The solution is to get your system programmer to un-read only the volume so you can write to it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-6360121089144186505?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/6360121089144186505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2009/02/what-does-abend-414-04-mean.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/6360121089144186505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/6360121089144186505'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2009/02/what-does-abend-414-04-mean.html' title='What Does ABEND 414-04 Mean?'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-2980488342672471059</id><published>2009-02-19T10:42:00.000-08:00</published><updated>2009-02-19T10:52:47.737-08:00</updated><title type='text'>RANDOM APF AUTH GOODNESS</title><content type='html'>From the console (or from SDSF), use this command to display a list of data sets that are currently APF authorized:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;D PROG,APF&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;From the console (or from SDSF), to dynamically APF authorize a data set:&lt;span style="color: rgb(51, 255, 51);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;SETPROG APF,ADD,DSNAME=dsname,VOLUME=volser&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Note that if you are using the TSO 'CALL' command to execute your compiled programs, you'll get an error if the program you're attempting to execute is APF authorized. To rectify this, you need to either execute the program via JCL, or add the module to TSO Parmlib member IKSTSOxx and re IPL.&lt;span style="color: rgb(51, 255, 51);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-2980488342672471059?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/2980488342672471059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2009/02/random-apf-auth-goodness.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/2980488342672471059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/2980488342672471059'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2009/02/random-apf-auth-goodness.html' title='RANDOM APF AUTH GOODNESS'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-4711561303548323008</id><published>2009-02-18T08:39:00.000-08:00</published><updated>2009-02-18T08:44:51.082-08:00</updated><title type='text'>How to set AC=1 when using ISPF foreground processing</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Uo6gkg157Ao/SZw6_fIH5jI/AAAAAAAAACY/VbcjezbFFYo/s1600-h/ac1.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_Uo6gkg157Ao/SZw6_fIH5jI/AAAAAAAAACY/VbcjezbFFYo/s400/ac1.JPG" alt="" id="BLOGGER_PHOTO_ID_5304179323497342514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;When you are writing APF authorized code &lt;a href="http://bigironnewb.blogspot.com/2009/02/apf-authorized-supervisor-state-and-key.html"&gt;(see this post for more details on what APF is)&lt;/a&gt;, you may want to link-edit the module using the handy-dandy ISPF panels (option 4.7). Unfortunately, the pubs are not as clear as they could be as to the syntax of how to set the AC = 1 option when using the panels. Well, here's a screen shot of what you need to put there and what it looks like.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-4711561303548323008?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/4711561303548323008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2009/02/how-to-set-ac1-when-using-ispf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/4711561303548323008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/4711561303548323008'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2009/02/how-to-set-ac1-when-using-ispf.html' title='How to set AC=1 when using ISPF foreground processing'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Uo6gkg157Ao/SZw6_fIH5jI/AAAAAAAAACY/VbcjezbFFYo/s72-c/ac1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-2708053452210384745</id><published>2009-02-12T09:08:00.000-08:00</published><updated>2009-02-12T09:11:48.837-08:00</updated><title type='text'>APF AUTHORIZED, SUPERVISOR STATE, AND KEY 0</title><content type='html'>&lt;p style="margin-bottom: 0in;"&gt; Understanding how the mainframe manages authorized and non-authorized code is crucial for anyone performing system-level tasks. The concepts are simple, but understanding how they relate to one another can get dicey. This post is geared towards someone who needs to write authorized mainframe code.  &lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt;The system considers a task authorized when the executing program has the following characteristics:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;It runs in supervisor state (bit  15 of the program status word (PSW) is zero).   &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;It runs with PSW key 0 to 7 (bits  8 through 11 of the PSW contain a value in the range 0 to 7).   &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;All previous programs executed in the same task were APF  programs.   &lt;/p&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;Here are the three things you need to know about:&lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt; APF AUTHORIZED: APF stands for A.uthorized P.rogram F.acility. It allows for the system programmer (for those of you who are new to the field, in mainframe-land a system programmer is like a system-administrator) to identify data sets and programs that are allowed to perform sensitive system functions. There are two components to APF authorization. The first is link-editing a module (program) with the AC 1 option set. By using the AC 1 option, we are making the module eligible to be APF authorized. The second component is to place the module into an APF authorized library. APF-authorized programs must reside in one of the following authorized libraries (data set):  &lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;SYS1.LINKLIB   &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;SYS1.SVCLIB   &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0in;"&gt;SYS1.LPALIB   &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;Authorized libraries specified by your installation.   &lt;/p&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;p style="margin-bottom: 0in;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0in;"&gt;Now that we've got our module properly link-edited and placed in an authorized library, we can move onto PSW key and system state. Normally, the system will run in what's referred to as “problem state”. This means there is a set of instructions that are unavailable. Only when the user is in supervisor state are these privileged instructions available. APF authorized programs are permitted to put the system into supervisor state. THIS IS IMPORTANT ---&gt; APF AUTHORIZED PROGRAMS DO NOT RUN IN SUPERVISOR STATE AUTOMATICALLY! APF AUTHORIZATION ONLY ALLOWS FOR THE SYSTEM TO BE PLACED SUPERVISOR STATE.  &lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt; So now that we're in supervisor state, there's one more thing we need to think about. Every page of storage (a page is 4 kilobytes) has a key associated with it. Keys 0-7 are considered protected, and 8-15 are considered unprotected. If a page of storage is protected, module attempting to access it must be authorized. The system needs to be in supervisor state in order to change the default PSW key from 8 to one that is authorized.  &lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt; So, let's review. To create a  program that is capable of executing privileged instructions and accessing protected storage, it needs to be APF authorized (link edited with the AC 1 option and placed in an APF authorized library), it needs to use the MODESET macro to place the system in supervisor state, and it needs to use the SPKA instruction to change the PSW key to 0-7 (whatever is appropriate).  &lt;/p&gt;  &lt;p style="margin-bottom: 0in;"&gt; Well, that's about it. I hope it helps. &lt;a href="http://publib.boulder.ibm.com/infocenter/zos/basics/index.jsp?topic=/com.ibm.zos.zsecurity/zsecc_060.htm"&gt;Here's a link that provides a bit more info if you need it.&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-2708053452210384745?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/2708053452210384745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2009/02/apf-authorized-supervisor-state-and-key.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/2708053452210384745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/2708053452210384745'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2009/02/apf-authorized-supervisor-state-and-key.html' title='APF AUTHORIZED, SUPERVISOR STATE, AND KEY 0'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-5254006184592151314</id><published>2009-01-26T11:52:00.000-08:00</published><updated>2009-01-26T12:46:15.036-08:00</updated><title type='text'>Random TSO Goodness</title><content type='html'>Lately I've been missing &lt;a href="http://en.wikipedia.org/wiki/MS-DOS"&gt;MS-DOS&lt;/a&gt;. Not because DOS was amazing, but because I know where things are and how to get things done. The PATH command is a good example. In DOS, you could use the PATH command to help DOS find programs you wanted to run. It created a list of directories to search through before it gave up and said something like BAD COMMAND OR &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;FILENAME&lt;/span&gt;. You could put this command inside a file called &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;AUTOEXEC&lt;/span&gt;.BAT, which was the name of a program that would get run every time the computer started. This way, you could save time as you didn't have to type out or go to the directory in which the program you wanted to execute resided.&lt;br /&gt;&lt;br /&gt;In mainframe land, however, things are a bit more complicated.&lt;br /&gt;&lt;br /&gt;In mainframe land, the equivalent of a BAT file (short for BATCH) is something called a &lt;a href="http://en.wikipedia.org/wiki/CLIST"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;CLIST&lt;/span&gt;&lt;/a&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;CLIST&lt;/span&gt; stands for Command Listing, and is a lot like a DOS batch file in that it provides a user the means to execute several commands at once. In other words, instead of &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;issuing&lt;/span&gt; ten commands &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;separately&lt;/span&gt;, you could make a list and all you had to do was type in the name of the list. So how do we save ourselves time like we did on our old DOS system?&lt;br /&gt;&lt;br /&gt;There are two commands that you can issue on the mainframe that are roughly equivalent to the DOS PATH command. They are &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;TSOLIB&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;ALTLIB&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;TSOLIB&lt;/span&gt; is used for load modules, which are programs that have been compiled and link-edited. We issue this command against load modules to have it added to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;STEPLIB&lt;/span&gt; data set. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;STEPLIB&lt;/span&gt; is a library that will be at the head of a load module search. So, when we want to run our "hello world!" program we lovingly wrote in C, we add it to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;STEPLIB&lt;/span&gt; so the mainframe knows where to find it, thus saving us the trouble of pecking out it's location in the file system.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;ALTLIB&lt;/span&gt; will do basically the same thing, but is used for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;CLISTs&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;uncompiled&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;REXX&lt;/span&gt; programs. These are &lt;a href="http://en.wikipedia.org/wiki/Scripting_language"&gt;scripting languages&lt;/a&gt; and thus don't have load modules. By &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_16"&gt;default&lt;/span&gt;, the mainframe will look in a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;dataset&lt;/span&gt; called &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;SYSPROC&lt;/span&gt; for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;CLISTs&lt;/span&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;ALTLIB&lt;/span&gt; will add other data sets to that search, thus saving us time.&lt;br /&gt;&lt;br /&gt;Now, it's important to remember that, like the PATH command in DOS, these changes all go away the minute you log off (or in the case of DOS, reboot the system). So, we need to find a way to have the system &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_21"&gt;re-implement&lt;/span&gt; these changes every time we log in. We need a mainframe equivalent to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;AUTOEXEC&lt;/span&gt;.BAT.&lt;br /&gt;&lt;br /&gt;On the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;logon&lt;/span&gt; screen , there is a field &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_24"&gt;labeled&lt;/span&gt; COMMAND. From there you can issue any &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;TSO&lt;/span&gt; command you want, including a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;CLIST&lt;/span&gt; that contains all your &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;ALTLIB&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;TSOLIB&lt;/span&gt; statements in it.&lt;br /&gt;&lt;br /&gt;There ya go. Hope it helps :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-5254006184592151314?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/5254006184592151314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2009/01/random-tso-goodness.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/5254006184592151314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/5254006184592151314'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2009/01/random-tso-goodness.html' title='Random TSO Goodness'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-7599963028885204223</id><published>2008-08-21T12:04:00.000-07:00</published><updated>2008-08-21T12:17:18.938-07:00</updated><title type='text'>How to search for PDS members in ISPF</title><content type='html'>I've just discovered a really simple way to find stuff on the mainframe. Let's say you are looking for a file called INDEX and you only know the high level qualifier of the dataset it's in. After you do your DLIST (ISPF option 3.4) of the HLQ (hlq.** for example), you type&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;member index&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;at the command line. The system will show you all the data sets where a file called INDEX resides. You can also use wildcards. So, for example, let's say there are lots of files you want to find, all starting with INDEX (INDEX00, INDEX01, INDEX02, etc). Then you'd type&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;member index*&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and you'll be shown all the files that begin with the word index. Cool huh? The only thing I've noticed is that if your data set has been migrated, this won't work. You'll have to recall the data set before you do your search.&lt;br /&gt;&lt;br /&gt;Hope you find it useful :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-7599963028885204223?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/7599963028885204223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2008/08/how-to-search-for-pds-members-in-ispf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/7599963028885204223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/7599963028885204223'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2008/08/how-to-search-for-pds-members-in-ispf.html' title='How to search for PDS members in ISPF'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-1728820521845605455</id><published>2008-08-06T18:24:00.000-07:00</published><updated>2008-08-06T18:54:53.842-07:00</updated><title type='text'>Master the Mainframe and GDDM</title><content type='html'>The &lt;a href="http://www.ibm.com/university/contest"&gt;Master the Mainframe contest&lt;/a&gt; is just around the corner and as I'm on the contest team this year, I was asked to come up with a coding challenge. The one I came up with last year was a simple ISPF macro challenge I ripped from the pubs (ISRBOX) and added a few bugs too. This year I wanted to do something spectacular so I dug deep and dove into IBMs Graphical Data Display Manager, or &lt;a href="http://en.wikipedia.org/wiki/GDDM"&gt;GDDM &lt;/a&gt;for short.&lt;br /&gt;&lt;br /&gt;What's so cool about GDDM? Well my friends, it allows the mainframe to display graphics and interact with things like mice and light pens and all sorts of other cool peripherals. ISPF can be made to act like a simple GUI with a point and click interface. It is also the means by which &lt;a href="http://en.wikipedia.org/wiki/OS/2"&gt;OS/2&lt;/a&gt; displayed it's windows and such. With the advent of the web, however, this feature became somewhat depricated and nobody, to my knowledge, really uses it anymore.&lt;br /&gt;&lt;br /&gt;So what am I doing messing around with this thing? Well, as fun as looking at endless streams of green text can be (and believe me, it's a hoot), I figured some colorful graphics might be a nice change of pace. I decided to create an implementation of &lt;a href="http://en.wikipedia.org/wiki/Mandelbrot_set"&gt;Mandelbrot Set&lt;/a&gt;. The man who discovered this method, Benoît Mandelbrot, was an IBM fellow so it seemed fitting.&lt;br /&gt;&lt;br /&gt;So I got to coding, pestered my co-workers when I got stuck or when the math got over my head, and finally I was able to get the thing working. It should be noted that I got some help, especially with the zooming bit, from &lt;a href="http://plus.maths.org/issue9/features/mandelbrot/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So I get the stupid thing working,&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Uo6gkg157Ao/SJpS1CfKcBI/AAAAAAAAABo/_ZHlrEX9Clk/s1600-h/z_mand.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_Uo6gkg157Ao/SJpS1CfKcBI/AAAAAAAAABo/_ZHlrEX9Clk/s400/z_mand.jpg" alt="" id="BLOGGER_PHOTO_ID_5231584988298375186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;it looks amazing, it zooms (sortof) at the click of a mouse, I get my ooohs and aaaahs. After all that, it can't be included in the contest because none of the TN3270 emulators on the market (save the IBM one) can handle host graphics. No host graphics means no GGDM. The contestants won't be using the IBM TN3270 program so they won't be able to see the image.&lt;br /&gt;&lt;br /&gt;...probably should've looked into that before I spent all that time coding the thing.&lt;br /&gt;&lt;br /&gt;Oh well. As there isn't much good information on the web about GDDM I thought I'd post the code, written in C, for the Mandelbrot Generator. In order to use GDDM, you're going to have to play with your JCL and include some libraries so this compiles/links properly.&lt;br /&gt;&lt;br /&gt;*NOTE* There are [] around the includes so Blogger doesn't think it's some sort of tag&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#include [stdio.h]                                                             &lt;br /&gt;#include [string.h]                                                            &lt;br /&gt;#include [admucina.h]                                                          &lt;br /&gt;#include [admtstrc.h]                                                          &lt;br /&gt;#include [admucinf.h]                                                          &lt;br /&gt;#include [admucing.h]                                                          &lt;br /&gt;#include [admucins.h]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(asread,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(chhatt,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(chhead,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gsuwin,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gschar,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gsseg,OS)                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gssati,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gsscls,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gsenda,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gsarea,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gsqcho,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gsqloc,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gspat,OS)                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gsenab,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gssaga,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gsmove,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gscol,OS)                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gsline,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gsview,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gslw,OS)                                                        &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gsflw,OS)                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(gsarc,OS)                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(fsinit,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#pragma linkage(fsterm,OS)                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#define width 320                                                               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#define height 200                                                              &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;main ()                                                                         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;{                                                                               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;/*SETUP THE GDDM ENVIRONMENT**********************/                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;float xoff, yoff, oldcx, oldcy;                                                 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;int temp;                                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;float scale;                                                                    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;int flag;                                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;int number;                                                                     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;float cx = -0.5;                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;float cy = 0;                                                                   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;int inwin;                                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;int type;                                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;int val;                                                                        &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;int count;                                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;int id_type;                                                                    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;int id_id;                                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;double x,y;                                                                     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;double xstart,xstep,ystart,ystep;                                               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;double xend, yend;                                                              &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;double z,zi,newz,newzi;                                                         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;double colour;                                                                  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;int iter,input;                                                                 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;long col;                                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;int i,j,k;                                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;int inset;                                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;int fd;                                                                         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;fsinit();                                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;flag = 0;                                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;gsenab (1,0,1);                                                                 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;gsenab (1,1,1);                                                                 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;gsenab (2,1,1);                                                                 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;gsuwin(0,640,0,480);                                                            &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;gsms(9);                                                                        &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;xstart = -2;                                                                    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;xend = 1;                                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;ystart = -1;                                                                    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;yend = 1;                                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;xoff = 0;                                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;yoff = 0;                                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;iter = 200;                                                                     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;scale = 1;                                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;xstep = ((xend-xstart)/width) * scale;                                          &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;ystep = ((yend-ystart)/height) * scale;                                         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;/*DISPLAY AND ZOOM LOOP***************************/                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;while (flag == 0)                                                               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;   {                                                                            &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;   flag = 1;                                                                    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;   x = xstart;                                                                  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;   y = ystart;                                                                  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;   for (i=0; i&lt;height;&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      {                                                                         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      for (j=0; j&lt;width;&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         {                                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         z = 0;                                                                 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         zi = 0;                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         inset = 1;                                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         for (k=0; k&lt;iter;&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;            {                                                                   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;            /* z^2 = (a+bi)(a+bi) = a^2 + 2abi - b^2 */                         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;            newz = (z*z)-(zi*zi) + x;                                           &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;            newzi = 2*z*zi + y;                                                 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;            z = newz;                                                           &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;            zi = newzi;                                                         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;            if(((z*z)+(zi*zi)) &gt; 4)                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;               {                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;               inset = 0;                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;               colour = k;                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;               k = iter;                                                        &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;               }                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;            }                                                                   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         if (inset)                                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;            {                                                                   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;            gscol(-1);                                                          &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;            }                                                                   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;        else                                                                    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;           {                                                                    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;           while (colour &gt; 7)                                                   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;              {                                                                 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;              colour = colour / 8;                                              &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;              }                                                                 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;           gscol(colour);                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;           }                                                                    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;        x += xstep;                                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;        /*DRAW YOUR FRACTAL!******************************/                     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;        gsmark (j,i);                                                           &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;        }                                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;     y += ystep;                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;     x = xstart;                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;     }                                                                          &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;   /*SEND THE GDDM DATA TO THE SCREEN****************/                          &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;   gsread(1,&amp;amp;id_type,&amp;amp;id_id);                                                   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;   if (id_type == 2)                                                            &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      {                                                                         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      scale = scale * 0.75;                                                     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      flag = 0;                                                                 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      oldcx = cx;                                                               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      oldcy = cy;                                                               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      gsqloc(&amp;amp;inwin,&amp;amp;cx,&amp;amp;cy);                                                   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      if (cx &gt; 320)                                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         {                                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         cx = 320;                                                              &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         }                                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      if (cy &gt; 200)                                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         {                                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         cy = 200;                                                              &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;         }                                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      cx = (cx * xstep) - 2 + xoff;                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      cy = (cy * ystep) - 1 + yoff;                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      xoff = (xoff + (cx - oldcx));                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      yoff = (yoff + (cy - oldcy));                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      xstart = cx + (-1.5 * scale);                                             &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      xend = cx + 1.5 * scale;                                                  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      ystart = cy + (-1 * scale);                                               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      yend = cy + 1 * scale;                                                    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      xstep = xstep * scale;                                                    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      ystep = ystep * scale;                                                    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;      }                                                                         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;   }                                                                            &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;fsterm();                                                                       &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;}                  &lt;/span&gt;                                                          &lt;br /&gt;                      &lt;br /&gt;Enjoy (and good luck to this years Master the Mainframe contestants!)&lt;/iter;&gt;&lt;/span&gt;&lt;/width;&gt;&lt;/span&gt;&lt;/height;&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-1728820521845605455?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/1728820521845605455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2008/08/master-mainframe-and-gddm.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/1728820521845605455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/1728820521845605455'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2008/08/master-mainframe-and-gddm.html' title='Master the Mainframe and GDDM'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Uo6gkg157Ao/SJpS1CfKcBI/AAAAAAAAABo/_ZHlrEX9Clk/s72-c/z_mand.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-146812839153523601</id><published>2008-06-02T08:31:00.000-07:00</published><updated>2008-12-09T16:16:03.866-08:00</updated><title type='text'>What are the PA keys for?</title><content type='html'>If you're used to dealing with PCs and you suddenly find yourself working with a mainframe, there is a lot you have to get used to. Hitting the [ctrl] key instead of [enter] is a big one. Another is getting used to the fact that historically, the mainframe terminal keyboard had keys that aren't included on your AT-style PC keyboard. So what are those keys and what are they for?&lt;br /&gt;&lt;br /&gt;Well, to start, let's talk a bit about what you're really doing when you log into a mainframe. When you log in, regardless of what terminal program you're using, you are emulating an &lt;a href="http://publib.boulder.ibm.com/infocenter/zoslnctr/v1r7/index.jsp?topic=/com.ibm.znetwork.doc/znetwork_261.html"&gt;IBM 3270 terminal&lt;/a&gt;. Here's a pic:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Uo6gkg157Ao/SEQTfZMlr5I/AAAAAAAAABY/pso0ATyT5Sc/s1600-h/SG246772-170.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_Uo6gkg157Ao/SEQTfZMlr5I/AAAAAAAAABY/pso0ATyT5Sc/s400/SG246772-170.gif" alt="" id="BLOGGER_PHOTO_ID_5207308499207696274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This machine was sometimes called a "dumb" terminal because it didn't have any computational power on it's own. Its purpose was to provide an interface between the mainframe and the user. So, let's take a look at that keyboard layout:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Uo6gkg157Ao/SEQUmJMlr6I/AAAAAAAAABg/a6js7mR4ywM/s1600-h/3270.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_Uo6gkg157Ao/SEQUmJMlr6I/AAAAAAAAABg/a6js7mR4ywM/s400/3270.gif" alt="" id="BLOGGER_PHOTO_ID_5207309714683441058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Looks a bit different, huh? Most of these keys you're already familiar with. Let's start on the right:&lt;br /&gt;&lt;br /&gt;PF1-PF12, are Program Function keys. They are identical to the "F-keys" on your PC keyboard.&lt;br /&gt;&lt;br /&gt;The "PA" keys are Program Attention keys, and are defined by whatever program you are running. For example, under &lt;a href="http://en.wikipedia.org/wiki/Time_Sharing_Option"&gt;TSO&lt;/a&gt;, PA1 will interrupt a command, and PA2 will redisplay the current screen. Under &lt;a href="http://en.wikipedia.org/wiki/SDSF"&gt;SDSF&lt;/a&gt;, PA1/2 will both redisplay the screen contents.&lt;br /&gt;&lt;br /&gt;DUP places the DUP Field symbol on the screen and the cursor moves to the first position of the next unprotected field. Handling of the symbol is dependant on the application program.&lt;br /&gt;&lt;br /&gt;INS MD Queries the session's operator information area to determine if the keyboard is in InsertMode mode.&lt;br /&gt;&lt;br /&gt;CLEAR, or "CLR", sets all buffer locations to nulls and all character attributes to X'00'. The cursor moves to the top left corner of the screen.&lt;br /&gt;&lt;br /&gt;ERASE INPUT erases the contents of all input fields in the screen and moves the cursor to the beginning of the first unprotected field. If the screen has no unprotected field, the cursor moves to the top left corner; no data is erased. If the screen is unformatted, this function clears the screen and moves the cursor to the top left corner.&lt;br /&gt;&lt;br /&gt;ERASE EOF erases all characters (the characters are replaced with NULL) from the cursor position to the end of the field while the cursor is in an unprotected field. The cursor does not move. On an unformatted screen, this function erases all characters from the cursor position to the end of the screen.&lt;br /&gt;&lt;br /&gt;TEST RQ sends a test request to the host system.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Well, that's about it. I hope that helps :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-146812839153523601?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/146812839153523601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2008/06/what-are-pa-keys-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/146812839153523601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/146812839153523601'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2008/06/what-are-pa-keys-for.html' title='What are the PA keys for?'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Uo6gkg157Ao/SEQTfZMlr5I/AAAAAAAAABY/pso0ATyT5Sc/s72-c/SG246772-170.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-9199623537940162184</id><published>2008-04-14T07:49:00.000-07:00</published><updated>2008-04-14T08:08:11.345-07:00</updated><title type='text'>How to Write to or Read from a File in REXX</title><content type='html'>I found a great article on the web that explains how to do this. I'm just going to link to it, rather than reiterate the whole thing. It's pretty simple, just a bit awkward (what on MVS isn't? :-)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.lbdsoftware.com/Reading%20and%20Writing%20Data%20using%20REXX%20EXECIO.pdf"&gt;click here for the article&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-9199623537940162184?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/9199623537940162184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2008/04/how-to-write-to-or-read-from-file-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/9199623537940162184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/9199623537940162184'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2008/04/how-to-write-to-or-read-from-file-in.html' title='How to Write to or Read from a File in REXX'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-480496864604849232</id><published>2008-03-05T05:46:00.000-08:00</published><updated>2008-03-06T07:56:35.295-08:00</updated><title type='text'>RACF, XMIT, and RECEIVE Basics</title><content type='html'>Oy! It's been a while since I've updated this thing. In all fairness though, I've been in class learning the mysteries of PL/X and Basic Assembler Language so I haven't had a lot of free time as of late.&lt;br /&gt;&lt;br /&gt;So like everything else on the mainframe, performing simple tasks like sharing, sending, or receiving data sets can become a real pain in the tookus. There are about a million options for each command, most of which you really don't need to worry about. What follows is a quick-and-dirty guide to performing these basic tasks:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1) SETTING PERMISSIONS IN &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://en.wikipedia.org/wiki/RACF"&gt;RACF&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So here's the scenario. You've got a data set and you want your colleague to be able to view it so you can collaborate. How do you give him/her the ability to access your files?&lt;br /&gt;&lt;br /&gt;In order to set a specific level of access to a data set, you need to create either a generic or discrete profile. A generic profile is used to set permissions on several data sets at once. For the purposes of this guide, we will only work with discrete profiles, which sets the permission level on a specific data set.&lt;br /&gt;&lt;br /&gt;The first thing you need to do is determine whether or not the data set is already defined to RACF. You do this by issuing the following &lt;a href="http://en.wikipedia.org/wiki/Time_Sharing_Option"&gt;TSO &lt;/a&gt;command:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;&lt;span style="font-style: italic;"&gt;LISTDSD DA(dataset name) ALL&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;This will tell you if and in what manner the data set is defined to RACF. If the data set is covered by a generic profile, there will be a (G) next to the data set name. If there is no profile, or the data set is covered by a generic profile, you'll want to create a discrete profile to allow a specific user access to a specific, single data set. In the case where a data set is defined to RACF with both a generic and discrete profile, the discrete profile will take precedence. To create a discrete profile, use the following command:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;ADDSD dataset UACC(NONE)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;UACC stands for Universal Access Authority. Here are a few of the more useful UACC parameters:&lt;br /&gt;&lt;br /&gt;NONE   Does not allow users to access the data set.        &lt;br /&gt;                                  &lt;br /&gt;READ   Allows users to access the data set for reading only.&lt;br /&gt;                                  &lt;br /&gt;UPDATE Allows users to read from, copy from, or write to the data set.                   &lt;br /&gt;                                  &lt;br /&gt;ALTER  Allows users to read, update, delete, rename, move, or scratch the data set.       &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;By setting the default level to NONE, we ensure that nobody but the person(s) we specify have access to the data set. Now that we have the data set defined to RACF, we need to give your colleague access to it. You can do this by issuing the following command:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;PERMIT dataset ID(user) ACCESS(level)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Congrats! You've now created a RACF profile to protect your dataset, and have allowed your coworker(s) access to it. I should note that there are lots of other fun things you can do with RACF, and that this is just a few basic commands. If you want to know more, the IBM publication &lt;span style="font-style: italic;"&gt;z/OS Security Server RACF General User’s Guide &lt;/span&gt;is an excellent resource.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2) TRANSMITTING A DATA SET&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is actually pretty simple. You need to issue the following TSO command:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;XMIT (node.user) DATASET(&lt;span style="font-style: italic;"&gt;data set)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The node name is going to be specific to your system. Just ask around, one of your coworkers will be able to tell you what it is :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3) RECEIVE&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When someone sends you a data set, you use the receive command to, well, receive it. This is another one of those commands with a lot of options that 99% of the time you don't need. This is a TSO command, and the following options are the ones that I find the most useful:&lt;br /&gt;&lt;br /&gt;RESTORE: SPECIFIES THE TRANSMITTED DATA SHOULD BE RESTORED  TO                ITS  ORIGINAL FORMAT. RESTORE IS THE DEFAULT.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;DELETE: SPECIFIES THE FILE BE DELETED WITHOUT RESTORING IT.&lt;br /&gt;&lt;br /&gt;DATASET(data set name): SPECIFIES THE NAME OF THE DATA SET TO BE USED TO CONTAIN THE RECEIVED DATA SET. IF THE NAME DOES NOT EXIST ALREADY, THE       SYSTEM CREATES IT.      &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So when someone sends you a data set and you want to receive it, the command looks like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;RECEIVE RESTORE/DELETE/DATASET(data set name)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;That's it for now, hope you found this helpful!           &lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-480496864604849232?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/480496864604849232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2008/03/racf-xmit-and-receive-basics.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/480496864604849232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/480496864604849232'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2008/03/racf-xmit-and-receive-basics.html' title='RACF, XMIT, and RECEIVE Basics'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-749275902252295298</id><published>2008-01-29T12:47:00.000-08:00</published><updated>2008-12-09T16:16:04.041-08:00</updated><title type='text'>Real Programmers don't eat Quiche</title><content type='html'>Well, it's January and you know what that means? Time to compile a new fortran Snoopy calendar!! I'm going to walk you through the process, but you're going to need a few things first:&lt;br /&gt;&lt;br /&gt;1) read the article at the following link (don't worry, it's quite amusing)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pbm.com/%7Elindahl/real.programmers.html"&gt;Real Programmers Don't Use Pascal&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2) download the IBM 1130 emulator &lt;a href="http://ibm1130.org/sim"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3) download the snoopy calendar card deck &lt;a href="http://www.users.on.net/%7Efarnik/wikicgi/wiki.pl?SnoopyCalendar"&gt;here&lt;/a&gt;. Save this file to the IBM1130Software sub-directory created by the emulator under the name "snoopy.job".&lt;br /&gt;&lt;br /&gt;4) &lt;span style="font-weight: bold;"&gt;*OPTIONAL*&lt;/span&gt; get yourself a dot matrix printer and do this old skool!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;All set? Right, lets do this!&lt;br /&gt;&lt;br /&gt;First you need to fire up the emulator. You'll see a GUI (which we won't really be using but it looks pretty), and a console window with a &lt;span style="color: rgb(255, 255, 0);"&gt;sim&gt;&lt;/span&gt; prompt. At the prompt, enter the following commands:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;attach dsk dms.dsk&lt;/span&gt; [ENTER]&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;att prt snoopy.txt&lt;/span&gt; [ENTER]&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;reset &lt;/span&gt;[ENTER]&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;boot dsk &lt;/span&gt;[ENTER]&lt;br /&gt;&lt;br /&gt;This will bootstrap the system and create a text file called "snoopy.txt". This will be your calendar! Now type&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;attach cr snoopy.job &lt;/span&gt;[ENTER]&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;go &lt;/span&gt;[ENTER]&lt;br /&gt;&lt;br /&gt;It'll run for a second, and afterwards, the Printer icon will change. Double click on it to see the output of your job.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Uo6gkg157Ao/R5-ZKkqArnI/AAAAAAAAAAc/EEBz00AXY9A/s1600-h/2008-01-29_162246.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_Uo6gkg157Ao/R5-ZKkqArnI/AAAAAAAAAAc/EEBz00AXY9A/s400/2008-01-29_162246.jpg" alt="" id="BLOGGER_PHOTO_ID_5161012104907501170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you scroll down, you should see a 1969 snoopy calendar! Now, as cool as it is to have a calendar from December 1969, you're probably thinking this would be a lot better if the calendar was for this year. Well don't fret, one simple change to the code you'll have an authentic Fortran Snoopy calendar that is current, usable, and will be the envy of all your friends! Open up SNOOPY.JOB in your favorite text editor and find the line that reads&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;12  1969    12  1969     1    &lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;(in my editor, it's line 319)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;That line is a date range. What you are really saying to your trusty IBM1130 is "hey pal, print me a calendar containing all the months from at December 1969 to December 1969. So, for example, you want a calendar from January 2008 to March 2008, you would change that line to read:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1  2008   3  2008     1&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;With that, you should be able to print our own calendars. Enjoy! &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-749275902252295298?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/749275902252295298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2008/01/real-programmers-dont-eat-quiche.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/749275902252295298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/749275902252295298'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2008/01/real-programmers-dont-eat-quiche.html' title='Real Programmers don&apos;t eat Quiche'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Uo6gkg157Ao/R5-ZKkqArnI/AAAAAAAAAAc/EEBz00AXY9A/s72-c/2008-01-29_162246.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-162960187758590915</id><published>2008-01-07T11:44:00.000-08:00</published><updated>2008-12-09T16:16:04.341-08:00</updated><title type='text'>More on the x37 Abend (read this one first!)</title><content type='html'>Well it turns out that there is, in some cases, a much simpler method of dealing with the x37 abend. As I mentioned before, any x37 means you've run out of space. So dig this, when you save members of a data set, z/OS saves the old copies. After a while, those copies can cause you to run out of space. When you browse the dataset, enter "/" at the command field,&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Uo6gkg157Ao/R4KFJM1MoBI/AAAAAAAAAAM/rhqX15kI8wc/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_Uo6gkg157Ao/R4KFJM1MoBI/AAAAAAAAAAM/rhqX15kI8wc/s400/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5152827316774936594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;then choose option 12 "Compress Dataset".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Uo6gkg157Ao/R4KFRM1MoCI/AAAAAAAAAAU/2TzEOhsJ27g/s1600-h/2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_Uo6gkg157Ao/R4KFRM1MoCI/AAAAAAAAAAU/2TzEOhsJ27g/s400/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5152827454213890082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This will delete the old copies and hopefully free up some space. This will not work in cases where you've run out of directory space. In other words, if compressing the data set doesn't work, then go ahead and fix it the hard way as described in the previous Abend x37 post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-162960187758590915?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/162960187758590915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2008/01/more-on-x37-abend-read-this-one-first.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/162960187758590915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/162960187758590915'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2008/01/more-on-x37-abend-read-this-one-first.html' title='More on the x37 Abend (read this one first!)'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Uo6gkg157Ao/R4KFJM1MoBI/AAAAAAAAAAM/rhqX15kI8wc/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-4709492247257008157</id><published>2007-11-30T14:54:00.000-08:00</published><updated>2007-12-03T07:54:28.003-08:00</updated><title type='text'>What the $#@! is does ABEND 0E37 mean?</title><content type='html'>Lemmie guess, you were working with a dataset via &lt;a href="http://en.wikipedia.org/wiki/ISPF"&gt;ISPF &lt;/a&gt;and tried to save your work and got an 0E37 abend. Sound about right? Well don't fret, it's an easy fix. Any &lt;span style="font-style: italic;"&gt;x37&lt;/span&gt; abend is an error having to do with space. You're going to have to free some space.&lt;br /&gt;&lt;br /&gt;One way to do this is to create a new, bigger data set for your stuff. You'll copy the old data set into the new one, and work with the copy. Ready? lets get started!&lt;br /&gt;&lt;br /&gt;First, exit out of the dataset by entering &lt;span style="color: rgb(51, 204, 0);"&gt;CANCEL &lt;/span&gt;at the command line. You'll lose any changes you've made since your last save, so cut-and-paste anything critical. Go into the UTILITY menu, then into the DATA SET sub menu (option &lt;span style="color: rgb(51, 255, 51);"&gt;3.2 &lt;/span&gt;at the command line).  Get the attributes of the data set you were using by entering its name on the NAME field under the heading OTHER PARTITIONED, SEQUENTIAL OR VSAM DATA SET. Once you do this, you should see a screen listing the attributes of the Data Set you were working with. Exit out of this screen.&lt;br /&gt;&lt;br /&gt;Now we're going to create a new data set. At the same line you entered your data set name, enter a name for your new data set. Before you hit enter, type &lt;span style="color: rgb(51, 255, 51);"&gt;A&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;&lt;/span&gt; &lt;span style="color: rgb(51, 255, 51);"&gt;&lt;/span&gt;at the OPTION line. This tells the mainframe you want to allocate a new data set. Go ahead and hit Enter. You'll see the same attributes screen you saw before. Here's where you are going to make your changes. Increase the size of your data set, then hit enter. You should see a message that says the data set has been allocated. Exit out to the UTILITY menu.&lt;br /&gt;&lt;br /&gt;Now we are going to copy your old data into the new data set. Go into the MOVE/COPY sub-menu in the UTILITY menu (option &lt;span style="color: rgb(51, 204, 0);"&gt;3.3&lt;/span&gt;). Under the heading FROM OTHER PARTITIONED OR SEQUENTIAL DATA SET, on the line entitled NAME, enter the name of the data set from which you want to copy. Don't hit the ENTER key just yet. &lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;*IMPORTANT!* If you do not enter this name in quotes, z/OS will attach your user name as a high-level qualifier. For example, if your username is JSMITH, and you enter PROGRAMS.WORKING&lt;/span&gt;&lt;span style="color: rgb(51, 255, 51); font-style: italic;"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;as the dataset name (note the lack of quotes), z/OS will change the name you entered to JSMITH.PROGRAMS.WORKING.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;Okay, now that you've got the correct data set name entered, go ahead and type &lt;span style="color: rgb(51, 204, 0);"&gt;C&lt;span style="color: rgb(51, 204, 0);"&gt; &lt;/span&gt;&lt;/span&gt;at the OPTION line and hit ENTER. Now the system will want to know where you want to place the copied files. Under the heading TO OTHER PARTITIONED OR SEQUENTIAL DATA SET, on the line entitled NAME, enter the name of the data set from which you want to copy. Hit the ENTER key.&lt;br /&gt;&lt;br /&gt;Now you see a list of all the members of the data set from which you want to copy. Select the members you want to copy by entering &lt;span style="color: rgb(51, 204, 0);"&gt;S &lt;/span&gt;next to the member name. You can copy more than one member at a time by selecting multiple members before hitting the ENTER key. When you are done, exit out of this screen. Check your new data set to make sure the copy went alright (ISPF option &lt;span style="color: rgb(51, 204, 0);"&gt;3.4&lt;/span&gt;). Once you are satisfied with how everything turned out, delete the old dataset and rename the new one  (if your old dataset was called PROGRAMS.WORKING and you copied everything into PROGRAMS.WORKING.TEMP, we need to delete PROGRAMS.WORKING and rename PROGRAMS.WORKING.TEMP to PROGRAMS.WORKING).&lt;br /&gt;&lt;br /&gt;Deleting and renaming data sets is fairly painless. Via ISPF option 3.4, enter the name of the old dataset on the line titled DSNAME LEVEL and hit ENTER. You should end up at the DSLIST panel. type &lt;span style="color: rgb(51, 204, 0);"&gt;DELETE &lt;/span&gt;at the command field (the space to the left of your dataset name).  Once you've deleted the old dataset, you can rename the new one. Return to ISPF option 3.4 and enter the name of the new dataset and hit enter. At the command field type RENAME  and hit ENTER. You will be asked to enter a new data set name. Type the name of the data set you just deleted and hit ENTER.&lt;br /&gt;&lt;br /&gt;All done! Now you've got a bigger, badder data set to work with and you shouldn't have to worry about Abend 0E37 for a while :-)   &lt;span style="font-style: italic; color: rgb(51, 204, 0);"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-4709492247257008157?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/4709492247257008157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2007/11/what-is-does-abend-0e37-mean.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/4709492247257008157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/4709492247257008157'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2007/11/what-is-does-abend-0e37-mean.html' title='What the $#@! is does ABEND 0E37 mean?'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5106346250912916933.post-4692252274507573633</id><published>2007-11-29T07:28:00.000-08:00</published><updated>2007-11-29T08:54:31.029-08:00</updated><title type='text'>ISPF is a harsh Mistress...</title><content type='html'>Whew, the past month or so has been more painful than usual. As much as I love the mainframe, there are times where I feel like working on these machines is akin to hammering  a nail into a wall with your forehead. Developing an ISPF interface has proven to be one of those times.&lt;br /&gt;&lt;br /&gt;Essentially, I'm creating an interface for an in-house tool that reads and parses source code. To do this, I'm using &lt;a href="http://en.wikipedia.org/wiki/ISPF"&gt;ISPF&lt;/a&gt; for the user interface and a bit of &lt;a href="http://en.wikipedia.org/wiki/REXX"&gt;REXX &lt;/a&gt;to handle the processing.  Essentially, a large block of source code gets written into a table which is then displayed to the user. The user is able to view and manipulate the table by removing blocks of code that are irrelevant. The program aids the user in determining what sections of the code are important. When all is said and done, the user then has the option to save the table to a &lt;a href="http://en.wikipedia.org/wiki/Data_set_%28IBM_mainframe%29"&gt;dataset&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The main sticking points have been:&lt;br /&gt;&lt;br /&gt;1) Figuring out what defaults get set when you engage ISPF panel services&lt;br /&gt;&lt;br /&gt;2) How to create/manage dynamic content&lt;br /&gt;&lt;br /&gt;3) How to efficiently manage the interactions between ISPF and the code that is driving it&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Before I go on, I'm going to show you what the panel code looks like that drives the main page:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;)PANEL                                                                          &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;)ATTR                                                                           &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;  ! TYPE (OUTPUT)                                                               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;  + TYPE (TEXT ) INTENS(LOW) COLOR (WHITE)                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;  @ TYPE (OUTPUT) INTENS(LOW) COLOR (YELLOW) JUST(ASIS)                         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;  # TYPE (TEXT) INTENS(LOW) COLOR (GREEN) JUST(ASIS)                            &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;  * TYPE (OUTPUT) INTENS(LOW) COLOR (WHITE) JUST(ASIS)                          &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;  % TYPE (TEXT) INTENS(LOW) COLOR(RED) JUST(ASIS)                               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;)BODY WIDTH(132)                                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;+                                                                               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;+COMMAND -=&gt;_CMDFLD                                  +SCROLL -=&gt;_SAMT+          &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;+                                                                               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;+       TYPE "?" FOR ONLINE HELP                                                &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;+                                                !MSG                           &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;+                                                                               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#       MVS SYSTEM INTEGRITY SCANNER: OUTPUT ANALYSIS TOOL                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#                                                                               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#       ROW    LOC     OFFSET   OBJECT CODE    ADDR1 ADDR2  STMT   SRC STATEMENT&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;#  -----------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;)MODEL                                                                          &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;+&gt;_IN  @AA                                                                      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;)INIT                                                                           &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;  &amp;amp;SAMT=PAGE                                                                    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;)PROC                                                                           &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;)END  &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;First off, note the spacing in the ")ATTR" section. That's important. It seems that ISPF, much like &lt;a href="http://en.wikipedia.org/wiki/JCL"&gt;JCL&lt;/a&gt;, is sensitive to row/column position of code. I should say that there is another way to develop ISPF panels called Dialog Tag Language (DTL). DTL appears to have more functionality, but there is a trade-off. In order to keep everything compatible, you write a panel in DTL, then run it through a conversion program by typing ISPDTLC at the command line. Once you do this, the panel gets converted into something that is non-human readable, but is compatible with ISPF. I found this to be problematic, as I have no idea what my DTL is getting turned into. True, the conversion utility has error checking, but it's not able to find logic errors. So there are instances where you attempt to develop a dialog via DTL, you wash it through the conversion utility, run the panel, and find out it's not doing what it's supposed to be doing. Now you can't tell if the problem is the DTL you wrote, or the manner in which ISPDTLC interpreted your DTL.&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;So why bother with it you ask? Well, from the looks of it, DTL provides functionality that the normal ISPF panel language does not provide. If you look at the panel code I showed you (go ahead and scroll up, I'll wait), you'll see that there is only one line of code in the "(MODEL" section. that line, specifically the "@AA" part, is what displays the table information. Every row of the table is displayed in the same way. This means that I can't dynamically change the color of a particular row of the table based on context. DTL would, in theory, allow me to do that. The problem is that DTL will ignore the profile keylist (the thing that defines what the PFKeys are set to). This means that you have to define them yourself, but the figuring out how to define the APPL that would drive that is akin to learning Mandrin Chinese in an hour. So in the end, it seems that the ISPF Panel language is the best way to go.&lt;br /&gt;&lt;br /&gt;So let's take a quick tour of the panel code I showed you:&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;)PANEL&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Panel section. Specifies a keylist to be used during the display of the panel, and identifies where to find the keylist&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;)ATTR&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Attribute section. Defines the special characters in the body of the panel definition that represent attribute (start of field) bytes. ISPF panels are defined line-by-line with control characters. So in the case of&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;span style="color: rgb(51, 204, 0);"&gt;+ TYPE (TEXT ) INTENS(LOW) COLOR (WHITE)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;, a line that starts with the control character "+" will be displayed as plain text, low intensity (brightness), and will be white.&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;)BODY&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Body section. Defines the format of the panel as seen by the user and defines the name of each variable field on the panel. In the case of the sample above, &lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;WIDTH(132) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;pertains to the number of character columns that will be displayed when the panel is shown.&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Now is a good time to note that there are built-in control characters. One of them is "_". This denotes an input field. So by saying&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;_CMDFLD&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;, I am defining an input field with the variable name CMDFLD.&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;In the sample above, you'll also note a message field. This is where any messages will be displayed in the panel.&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;)MODEL&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Model section. Defines the format of each row of scrollable data. This section is required for table display panels. Only one )MODEL section is allowed per panel.&lt;br /&gt;&lt;br /&gt;In the sample panel I've shown you, I've defined &lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;+&gt;_IN  @AA  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;in the model section. This means a table will be displayed here. Each row will start with a "&gt;", which will be displayed with the characteristics mapped to control character "+".  Then, an input field called "IN" will be created, then the table row called "AA". Note that "IN" and "AA" have different control characters, and thus are displayed differently.&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;)INIT&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Initialization section. Specifies the initial processing that is to occur before the panel is displayed. This section is typically used to define how variables are to be initialized.&lt;br /&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;)PROC&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Processing section. Specifies processing that is to occur after the panel has been displayed or redisplayed. This section is typically used to define how variables are to be verified and translated.&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;)END&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;End section. Specifies the end of the panel definition, and consists only of the )END statement. ISPF ignores any data that appears on lines following the )END statement.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That about covers the ISPF end of things. The next post will go over the REXX that's driving everything. I hope this has been helpful :-)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------------------&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;The postings on this site are my own and don’t necessarily represent IBM’s positions, strategies or opinions.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;                                                 &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;a href="http://en.wikipedia.org/wiki/ISPF"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5106346250912916933-4692252274507573633?l=bigironnewb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bigironnewb.blogspot.com/feeds/4692252274507573633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://bigironnewb.blogspot.com/2007/11/ispf-is-harsh-mistress.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/4692252274507573633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5106346250912916933/posts/default/4692252274507573633'/><link rel='alternate' type='text/html' href='http://bigironnewb.blogspot.com/2007/11/ispf-is-harsh-mistress.html' title='ISPF is a harsh Mistress...'/><author><name>David</name><uri>http://www.blogger.com/profile/04627967266541565420</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
