• The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
Menu
  • The Four Hundred
  • Subscribe
  • Media Kit
  • Contributors
  • About Us
  • Contact
  • Suppress Runtime Display When Qshell Cancels

    April 27, 2005 Hey, Ted

    Tahler’s Qshell tip works great. If there is an error in a CL program that runs the Start Qshell command (STRQSH or QSH), I receive escape message QSH0005. Unfortunately, an error also causes the system to display the C runtime display when I run interactively. I have to press Enter to continue. Can I suppress the error display?

    –John

    Yes. I wish I had included that information when we ran the article you mentioned. You need to assign the value NONE to environment variable QIBM_QSH_CMD_OUTPUT.

    addenvvar  envvar(QIBM_QSH_CMD_OUTPUT) value('NONE')
    

    Here’s more information I wish I had included: I have found that it’s often advantageous to build the Qshell command in a character variable, which can be dumped when the program cancels. When I view the entire command in the dump, my problem is often obvious.

    By way of example, here’s a CL program that runs the tr (Translate) command. Let’s call it CONVERT.

    pgm parm(&FromFile &ToFile &Conv)
    
       dcl   &Conv          *char     32
       dcl   &FromFile      *char     64
       dcl   &ToFile        *char     64
    
       dcl   &Abending      *lgl
       dcl   &Command       *char    128
       dcl   &MsgID         *char      7
       dcl   &MsgDta        *char    256
       dcl   &MsgF          *char     10
       dcl   &MsgFLib       *char     10
       dcl   &MsgKey        *char      4
       dcl   &PgmName       *char     10
       dcl   &RtnType       *char      2
       dcl   &Sender        *char     80
    
       monmsg cpf0000 exec(goto ForwardMsg)
    
       /* retrieve the program name */
       sndpgmmsg msg(' ') topgmq(*same) msgtype(*info) keyvar(&msgkey)
       rcvmsg    pgmq(*same) msgtype(*info) sender(&sender) rmv(*yes)
       chgvar    &PgmName   %sst(&Sender 56 10)
    
       /* convert the data */
    
       chgvar  var(&Command) +
               value('tr' *bcat &Conv *bcat '' *cat &ToFile)
    
       addenvvar  envvar(QIBM_QSH_CMD_ESCAPE_MSG) value('Y')
       monmsg cpfa980 exec(do)
          rcvmsg msgtype(*excp) rmv(*yes)
       enddo
       addenvvar  envvar(QIBM_QSH_CMD_OUTPUT) value('NONE')
       monmsg cpfa980 exec(do)
          rcvmsg msgtype(*excp) rmv(*yes)
       enddo
       QSH cmd(&Command)
       monmsg qsh0005 exec(goto abend)
    
       /* normal end of job */
       sndpgmmsg  msgid(cpf9898) msgf(qcpfmsg) msgtype(*comp) +
                       msgdta('Program' *bcat &PgmName *bcat +
                              'completed normally')
          return
    
       /* Routine to handle unexpected errors */
    Abend:
          if &Abending then(return)
          chgvar   &Abending '1'
          dmpclpgm
    
    ForwardMsg:
          rcvmsg     msgtype(*any) msgdta(&msgdta) msgid(&msgid) +
                        rtntype(&RtnType) +
                        msgf(&msgf) sndmsgflib(&msgflib)
          if ((&RtnType *eq '02') *or   /* diagnostic */ +
              (&RtnType *eq '15') *or (&RtnType *eq '17')) do  /* *escape */
             sndpgmmsg  msgid(&msgid)  msgf(&msgflib/&msgf) msgtype(*diag) +
                       msgdta(&msgdta)
          enddo
          if (&RtnType *ne '  ') then(goto ForwardMsg)
    Escape:
       sndpgmmsg  msgid(cpf9898) msgf(qcpfmsg) msgtype(*escape) +
                    msgdta('Program' *bcat &PgmName *bcat +
                           'ended abnormally')
    endpgm
    


    The call from another program might look like this:

    
    dcl   &Conv          *char     32
    dcl   &FromFile      *char     64
    dcl   &ToFile        *char     64
    
    chgvar  &conv   value('[:lower:] [:upper:]')
    chgvar  &FromFile +
               value('/QSYS.LIB/MYLIB.LIB/MYFILE.FILE/MBR1.MBR')
    chgvar  &ToFile +
               value('/QSYS.LIB/MYLIB.LIB/MYFILE.FILE/MBR2.MBR')
    call Convert parm(&FromFile &ToFile &Conv)
    

    –Ted

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    Tags:

    Sponsored by
    ARCAD Software

    “Pairing Verifier with Selenium for all your Regression Needs”

    Webinar, Thursday, June 23, 12pm ET

    Do you have the need to do regression testing for your IBM i application? Then ARCAD Verifier is for you. But what if you need to do regression testing against a web interface? You’re in luck, ARCAD Verifier pairs nicely with Selenium for this regression testing. Then use Verifier to see the results.

    Join us on June 23 at 12 p.m. ET (45 min) to see how Selenium and Verifier can support your expanded regression testing needs.

    Share this:

    • Reddit
    • Facebook
    • LinkedIn
    • Twitter
    • Email

    All You Need for B2B is GIS 4.0, Sterling Says Exercises in Simplicity

    Leave a Reply Cancel reply

Volume 5, Number 17 -- April 27, 2005
THIS ISSUE
SPONSORED BY:

WorksRight Software
Advanced Systems Concepts
Guild Companies
SoftLanding Systems

Table of Contents

  • A Simple Encryption/Decryption Algorithm for Numbers
  • Suppress Runtime Display When Qshell Cancels
  • Admin Alert: Getting Ready for Single Sign-On

Content archive

  • The Four Hundred
  • Four Hundred Stuff
  • Four Hundred Guru

Recent Posts

  • DRV Brings More Automation to IBM i Message Monitoring
  • Managed Cloud Saves Money By Cutting System And People Overprovisioning
  • Multiple Security Vulnerabilities Patched on IBM i
  • Four Hundred Monitor, June 22
  • IBM i PTF Guide, Volume 24, Number 25
  • Plotting A Middle Age Career Change To IBM i
  • What Is Code Transformation Even?
  • Guru: The CALL I’ve Been Waiting For
  • A Frank Solstice
  • The Inevitable Wave Of Power9 Withdrawals Begins

Subscribe

To get news from IT Jungle sent to your inbox every week, subscribe to our newsletter.

Pages

  • About Us
  • Contact
  • Contributors
  • Four Hundred Monitor
  • IBM i PTF Guide
  • Media Kit
  • Subscribe

Search

Copyright © 2022 IT Jungle

loading Cancel
Post was not sent - check your email addresses!
Email check failed, please try again
Sorry, your blog cannot share posts by email.