/**************************** REXX ************************************/
/*     (c)  Copyright   Roger Lacroix   1995                          */
/*                                                                    */
/* Designed, developed and programmed by Roger Lacroix                */
/*--------------------------------------------------------------------*/
/* FS   - FULL SCREEN BROWSE OF TSO COMMAND RESULTS                   */
/*        SYNTAX:  FS <TSO COMMAND>                                   */
/*                                                                    */
/*                                                                    */
/*        Perfect when you need to read the TSO HELP for info.        */
/*        i.e.  TSO FS HELP ALLOCATE                                  */
/*                                                                    */
/*                                                                    */
/*        This program can be used when you are debugging another     */
/*        rexx program.  Lets say the other rexx is called ABCD.      */
/*        Place the 'TRACE R' (no quotes) in your ABCD rexx program.  */
/*        Then to run your ABCD program do the following:             */
/*        i.e. TSO FS ABCD                                            */
/*                                                                    */
/*        All tracing output will be present to you in full screen.   */
/*                                                                    */
/*--------------------------------------------------------------------*/
trace o
PARSE ARG CMD OPER
ADDRESS TSO
if SYSVAR(SYSISPF) <> 'ACTIVE' then
do
   SAY 'FS ONLY RUNS UNDER ISPF.'
   exit
end
else nop
if LENGTH(CMD) = 0 then
do
   SAY 'INVALID SYNTAX:'
   SAY 'SYNTAX IS FS <TSO COMMAND>'
   exit
end
else nop

Call GET_UNIQUE_DD

/* X=MSG('OFF') */
X=OUTTRAP("OUTLINE.")
  ""CMD OPER""
X=OUTTRAP(OFF)

dsn = "BROWSE."CMD".R"rn

"ALLOC F("dd") DSN("dsn") TRACKS SPACE(100 100) UNIT(SYSDA) ",
  "NEW DELETE DSORG(PS) LRECL(133) RECFM(V B) BLKSIZE(13300)"

if RC = 0 then
do
    IF outline.0 <> 0 THEN
    do
      "EXECIO * DISKW "dd" (FINIS STEM OUTLINE."
       ADDRESS ISPEXEC
      "CONTROL ERRORS RETURN"
      "LMINIT DATAID(IDVAR) DDNAME("dd")"
      "LMOPEN DATAID("IDVAR")"
      "BROWSE DATAID("IDVAR")"
      "LMCLOSE DATAID("IDVAR")"
      "LMFREE DATAID("IDVAR")"
   end
   else do
      SAY 'Nothing returned from TSO!!'
   end
end
else do
   SAY '*** FS ERROR: Dataset allocation failed.'
end
ADDRESS TSO
"FREE F("dd")"

exit

/* */

GET_UNIQUE_DD:
unique = 'N'
do while unique = 'N'
   rn = RIGHT(RANDOM(0,99999),6,'0')
   dd = 'FS'rn
   fs_stat = Listdsi(dd 'FILE')     /* get 'FS###### DD' info */
   if fs_stat = 0 then unique = 'N' /* dd has been found */
   else                unique = 'Y'
end
return