zOs/REXX.O13/F2XNTRFC

PROC 0 TRACE(TRACE) LANG(MIXD)       +
       SSID() SQLID() OPTION(BROWSE)           +
       MAXROW(2000) SQL()                      +
       QUAL() NAME() LOCNAME() ENTRY(FULL) LIBDEF(Y)
/*---------------------------------------------------*/
/*  COPYRIGHT (C) 1989 - 2001 COMPUWARE CORPORATION. */
/*               ALL RIGHTS RESERVED.                */
/*          UNPUBLISHED - RIGHTS RESERVED            */
/*   UNDER THE COPYRIGHT LAWS OF THE UNITED STATES.  */
/*---------------------------------------------------*/
  IF &TRACE = TRACE THEN CONTROL LIST CONLIST SYMLIST
  IF &SYSUID = &STR(X247267) THEN CONTROL MSG LIST SYMLIST CONLIST

  IF &SQLID = THEN SET &SQLID = &SYSUID
  IF &QUAL  = THEN SET &QUAL  = &SYSUID

  IF &SSID = THEN GOTO ERR3

  IF (&ENTRY NE SPUFI)     && -
     (&ENTRY NE FULL)      && -
     (&ENTRY NE TEMPLATE)  THEN GOTO ERR5

  IF &ENTRY = SPUFI THEN -
    IF &STR(&SQL) = THEN GOTO ERR4

  IF &ENTRY NE SPUFI THEN -
    IF &QUAL  = THEN GOTO ERR1

  IF &ENTRY NE SPUFI THEN -
    IF &NAME  = THEN GOTO ERR2

  IF (&OPTION NE EDIT)     && -
     (&OPTION NE BROWSE)   THEN GOTO ERR6

  IF &OPTION = EDIT THEN -
     SET &FUNC = 2
  ELSE -
     SET &FUNC = 1

  IF &ENTRY = SPUFI THEN -
     SET &OPT = &FUNC..S
     ELSE -
          IF &ENTRY = TEMPLATE THEN -
             SET &OPT = &FUNC..T
          ELSE -
             SET &OPT = &FUNC

/*----------------------------------------------------------------
/* VERIFY LENGTHS ARE ACCEPTABLE.
/*----------------------------------------------------------------
  WRITE THEN LENGTH OF SSID = &LENGTH(&SSID)

  IF &LENGTH(&SSID)   > 4  THEN -
    DO
      SET &TOKEN = SSID
      GOTO LNGERR
    END

  IF &LENGTH(&SQLID)  > 8  THEN -
    DO
      SET &TOKEN = SQLID
      GOTO LNGERR
    END

  IF &LENGTH(&OPT)    > 8  THEN -
    DO
      SET &TOKEN = OPT
      GOTO LNGERR
    END

  /* IF &LENGTH(&NAME)   > 18 THEN - */              /*FD48ITB1D4-INT*/
  IF &LENGTH(&NAME)   > 128 THEN -
    DO
      SET &TOKEN = NAME
      GOTO LNGERR
    END

  /* IF &LENGTH(&QUAL)   > 8  THEN - */              /*FD48ITB1D4-INT*/
  IF &LENGTH(&QUAL)   > 128  THEN -
    DO
      SET &TOKEN = QUALIFIER
      GOTO LNGERR
    END

  IF &LENGTH(&STR(&MAXROW)) > 5  THEN -
    DO
      SET &TOKEN = MAXROWS
      GOTO LNGERR
    END

  /* IF &LENGTH(&STR(&SQL))    > 256 THEN -  */      /*FD48ITB1D4-INT*/
  IF &LENGTH(&STR(&SQL))    > 2048 THEN -
    DO
      SET &TOKEN = SQL STATEMENT
      GOTO LNGERR
    END

  IF &STR(&MAXROW) NE ALL THEN -
    IF &MAXROW <= 0 THEN GOTO MAXRWERR

  IF &STR(&MAXROW) = ALL THEN -
    SET &MAXROW = &STR(*)

/*---------------------------------------------------------------
/* GET REQUIRED LIBRARIES ALLOCATED TO RUN PRODUCT.
/*---------------------------------------------------------------

  IF &LIBDEF = Y THEN -
     ISPEXEC SELECT CMD(F2LIBRZ# DB2(Y) TRACE(&TRACE))

/*----------------------------------------------------------------*/
/*  GET PLAN BASED ON SSID            PT134860                    */
/*----------------------------------------------------------------*/

  ISPEXEC SELECT CMD(F2GETPLN SSID(&SSID) TRACE(&TRACE)) +
    NEWAPPL(FD49) PASSLIB

/*---------------------------------------------------------------
/* CALL FILEAID/DB2 EXTERNAL ENTRY MODULE TO PERFORM FUNCTION.
/*---------------------------------------------------------------

  SET &F2SSID  = SSID(&SSID)
  SET &F2SQLID = SQLID(&SQLID)
  SET &F2OPT   = OPT(&OPT)
  SET &F2MAXROWS = MAXROWS(&STR(&MAXROW))
  SET &F2LOCNAME = LOCNAME(&LOCNAME)

  IF &ENTRY = SPUFI THEN -
     DO
       SET &F2SQL  = &STR(SQL(&SQL))
       SET &F2NAME =
       SET &F2QUAL =
     END
  ELSE -
     DO
       SET &F2SQL  =
       SET &F2NAME = NAME(&NAME)
       SET &F2QUAL = QUAL(&QUAL)
     END

/* CHANGED NEWAPPL FROM F2DE TO FD48                     FD48ITB1-09*/
  ISPEXEC SELECT CMD(F2XTRN01                  +
                  &F2SSID  &F2OPT   &F2SQLID   +
                  &F2QUAL  &F2NAME  &F2MAXROWS +
                  &F2SQL   &F2LOCNAME          +
                  ) +
     NEWAPPL(FD49) NOCHECK PASSLIB MODE(FSCR)

  SET &RC = &LASTCC

/*---------------------------------------------------------------
/* FREE LIBDEFS DONE IN PREVIOUS STEP.
/*---------------------------------------------------------------

  IF &LIBDEF = Y THEN -
     ISPEXEC SELECT CMD(F2LIBRZ# FREE(FREE) TRACE(&TRACE))

  IF &RC = 0 THEN GOTO RETURN
  GOTO EXECERR

/*----------------------------------------------------------------
/* SET APPROPRIATE MESSAGE.
/*----------------------------------------------------------------

LNGERR:-
  SET &MSG = THE LENGTH ENTER FOR "&TOKEN" IS TOO LONG.
  SET &RC  = 8
  GOTO DISPMSG

ERR1:-
  SET &MSG = A QUALIFIER MUST BE SPECIFIED FOR THE "&ENTRY" OPTION.
  SET &RC  = 8
  GOTO DISPMSG

ERR2:-
  SET &MSG = AN OBJECT NAME MUST BE SPECIFIED FOR THE "&ENTRY" OPTION.
  SET &RC  = 8
  GOTO DISPMSG

ERR3:-
  SET &RC  = 8
  SET &MSG = NO DB2 SUBSYSTEM ID WAS SPECIFIED.
  GOTO DISPMSG

ERR4:-
  SET &RC  = 8
  SET &MSG = NO SQL SELECT STATMENT WAS SPECIFIED FOR THE SPUFI OPTION.
  GOTO DISPMSG

ERR5:-
  SET &RC  = 8
  SET &MSG = "&ENTRY" IS NOT A VALID ENTRY TYPE.
  GOTO DISPMSG

ERR6:-
  SET &RC  = 8
  SET &MSG = "&OPTION" IS NOT A VALID FUNCTION TYPE.
  GOTO DISPMSG

EXECERR:-
  SET &RC  = 8
  SET &MSG = FAILED TO EXECUTE FILEAID DB2 "&OPTION" FUNCTION.
  GOTO DISPMSG

MAXRWERR:-
  SET &RC  = 8
  SET &MSG = MAXROWS MUST BE EQUAL TO "ALL" OR GREATER THAN 0
  GOTO DISPMSG

/*---------------------------------------------------------------
/* WRITE ERROR MESSAGE TO SCREEN.
/*---------------------------------------------------------------

DISPMSG: -
  WRITE
  WRITE &MSG
  WRITE

/*---------------------------------------------------------------
/* RETURN TO CALLER.
/*---------------------------------------------------------------

RETURN: -
EXIT CODE (&RC)