DFSORT: FILTER by STCK format
Good morning IBM-MAIN, Can DFSORT filter [not just DISPLAY] a QSAM input by a fixed field in the STCK format? Say, the file records have 8-byte STCK time in columns 11-18, how should I code the control statements to only INCLUDE records which are older than "current-time less 30 minutes"? As always, your input is greatly appreciated, -Victor- This message and any attachments are intended only for the use of the addressee and may contain information that is privileged and confidential. If the reader of the message is not the intended recipient or an authorized representative of the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by e-mail and delete the message and any attachments from your system. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html
Re: Best practice for 24-bit storage in assembler called from C/C++
Charles, Have you looked at the ALL31(OFF) LE option? I don't know how it works for C/C++ but for Cobol this option instructs LE to allocate the COBOL EXTERNAL data in storage below the line. Which means if a main program defines an EXTERNAL variable it will be below the line AND accessible by the name from any subroutine that also defines it as EXTERNAL. This is a rather old trick and so the most current LE may have other options to suit your needs. HTH, -Victor- This message and any attachments are intended only for the use of the addressee and may contain information that is privileged and confidential. If the reader of the message is not the intended recipient or an authorized representative of the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by e-mail and delete the message and any attachments from your system. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html
Re: Batch connection to CSKL (was: Trigger CICS transaction from Batch Job)
Thanks, Jantje. I vaguely remember coding a simple child server circa 1997 and having an issue with the need to start it on a "terminal" to enable password maintenance via EXEC CICS SIGNON. But I've never touched the "batch" part. Will take a look. Thanks again, -Victor- === Date:Thu, 13 Aug 2009 07:16:24 -0500 From:Jan MOEYERSONS Subject: Re: Batch connection to CSKL (was: Trigger CICS transaction from Batch Job) You can find the fine manual that describes the CICS side of such at z/OS Communications Server IP CICS Sockets Guide ( http://www.elink.ibmlink.ibm.com/publications/servlet/pbi.wss? CTY=US&FNC=SRX&PBL=SC31-8807-05 ). The batch side of things is described in z/OS Communications Server IP Sockets Application Programming Interface Guide and Reference ( http://www.elink.ibmlink.ibm.com/publications/servlet/pbi.wss? CTY=US&FNC=SRX&PBL=SC31-8788-07 ). I did code a child server, but I am afraid I cannot give you that code, because it was developed for a specific customer who paid for it and who actually owns that code. But the documentation is fairly good and there are samples. The code for the client was for Windows. The point, however, is that CICS comes with infrastructure (the CSKL transaction) that makes managing a listener in CICS quite simple and effective. All you need to do is to code the child server transaction in your programming language of choice. The book gives you guidelines on how to structure the program for this transaction. And you do not have to worry about how to listen for an incoming connection (because that is the difficult part that CICS has already done for you...). Your transaction is started by CSKL and receives the socket number that represents the connection. All you need to do is to TAKESOCKET and start receiving (and sending) data over it. For the batch program, you just do simple sockets programming, again in the programming language of your choice. The connection is set up by opening a socket to the port where the CSKL is listening, send the trancode plus some security-related information (if you need it). CICS is listening for incoming connections, spawns the transaction, corresponding to the trancode you ask for and GIVESOCKET the socket to it. Then your batch program and your CICS transaction engage in a TCP conversation and can pass data back and forth among them without restriction. Do read the book; it is all in there. If you need more information, please ask me specific, detailed questions off- list. Cheers, Jantje. This message and any attachments are intended only for the use of the addressee and may contain information that is privileged and confidential. If the reader of the message is not the intended recipient or an authorized representative of the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by e-mail and delete the message and any attachments from your system. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html
Batch connection to CSKL (was: Trigger CICS transaction from Batch Job)
Jantje, I am intrigued. Can you elaborate a bit on this idea? [Doc pointers, code samples, etc.] TIA, -Victor- == Date:Mon, 10 Aug 2009 05:40:50 -0500 From:Jan MOEYERSONS Subject: Re: Trigger CICS transaction from Batch Job But instead of connecting to a 3270 terminal, the connection should be made to the CICS listener CSKL. Works like a charm. With security if you need it and no sweat exchanging information back and forth between the batch program and the CICS transaction. Cheers, Jantje. This message and any attachments are intended only for the use of the addressee and may contain information that is privileged and confidential. If the reader of the message is not the intended recipient or an authorized representative of the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by e-mail and delete the message and any attachments from your system. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@bama.ua.edu with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html
Re: Mainframe Assembler Coding Contest
Tom, I liked your solution. Truly ingenious! It might get just a bit shorter by using ICM instead of the IC+SLL: ICM R5,B'1000',INBYTE -Victor- Date:Thu, 13 Dec 2007 17:13:09 -0800 From:Tom Simons <[EMAIL PROTECTED]> Subject: Re: Mainframe Assembler Coding Contest Here's 8 instructions to translate 8 bits to 8 chars of 1's or 0's: LAR3,8 ICR5,INBYTE SLL R5,24 LOOP SLL R4,3 SLDL R4,1 BCT R3,LOOP STR4,OUTCHAR UNPK OUTCHAR(9),OUTCHAR(5) OUTCHAR DSCL8 DSX INBYTE DCB'10101011' This message and any attachments are intended only for the use of the addressee and may contain information that is privileged and confidential. If the reader of the message is not the intended recipient or an authorized representative of the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by e-mail and delete the message and any attachments from your system. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html
Re: SUBSYS and VSAM
Jim, Thanks for the response. I guess BLSR is not a good comparison since it has its own way of intercepting the I/O [not by replacing ACBINRTN], so the question remains. Hopefully, I'll test this out in a week or so. Meanwhile, I am confirming that DYNALLOC during SSI Open does indeed hang on SYSZTIOT, so I am deferring it up to the first I/O request. Luckily, there are no collisions between the SSI Close and dynamic De-Allocation. -Victor- -Original Message- Date:Wed, 17 May 2006 02:52:14 -0400 From:Jim Mulder <[EMAIL PROTECTED]> Subject: Re: SUBSYS and VSAM IBM Mainframe Discussion List wrote on 05/04/2006 03:32:36 PM: > According to an old doc [SSI in MVS/SP], when a user opens a DCB against a > SUBSYS dd, SAM-SI [part of the SAM access] converts it into an ACB [which > is presented to the SSI routines] and then maps the response back to the > original DCB. > > Anybody knows what happens if the user opens a VSAM ACB against a SUBSYS dd > [like when using BLSR]? The BLSR SSI Open routine is presented with a key 5 copy of the ACB being opened. I don't know what gets mapped back into the original ACB, because BLSR doesn't modify the key 5 copy, and doesn't depend on anything getting getting mapped back. My knowledge of SUBSYS processing is limited to what BLSR does. Jim Mulder z/OS System Test IBM Corp. Poughkeepsie, NY _ This message and any attachments are intended only for the use of the addressee and may contain information that is privileged and confidential. If the reader of the message is not the intended recipient or an authorized representative of the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by e-mail and delete the message and any attachments from your system. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html
SSI experience
First of all, I'd like to thank everybody who helped me with the subsystem documentation and debugging, especially, Sam Knutson, Tom Schmidt and Binyamin Dissen - your input was much appreciated. Let me also share some of the experience [for the archive]: a) Contrary to the doc "Using the SSI", do NOT place your function routines in either LPA or the LNKLST [while debugging, of course]. The latter requires LOAD-TO-GLOBAL option on the SSVTI entry which causes the routine to be stuck in CSA. In either case this becomes a PITA if you need to refresh the code after a recompile [there are programmatic ways of refreshing a function but they require extra coding]. Instead - code a small stub to load your function, define it in SSVTI so that your actual function routine can happily live in any APF-authorized library NOT associated with the LNKLST. b) If during CLOSE you'd like to reuse the working storage acquired by OPEN, you might be able to keep its pointer in SSDASSCM c) Personally, I like the idea of a single working storage shared among the various entry points [helps debugging], so I am also preserving its pointer in a task-level NAME/TOKEN pair, where the name suffix is made of such ACB fields as ACBUJFCB and/or ACBDEB. Whether the entry points are passed the "true" user ACB or the protected copy, these fields are going to remain the same. This way the GetPut routine can easily construct a proper token name and retrieve its value. Comes handy, because the GetPut routine does need to access the DCB built during Open. d) However, the token retriever [IEANTRT] needs 52 bytes: 4 arguments with the total length of 36 bytes plus 4 addresses. Don't you hate to OBTAIN/RELEASE 52 bytes upon each and every entry just for the purpose of locating working storage? Me too. Luckily, there is a tricky workaround [left as an exercise and also to prevent flames] -Victor- -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html
SSI questions
I am probably missing something obvious - When setting up a subsystem, how do I tell the system to call a custom function to Allocate, Open, Get, Close or Deallocate a dataset? Doesn't the association come from a table built using the IEFSSVTI macro? But the list of codes "SSI Function Codes Your Subsystem Can Support" has no such functions. I can use "my own" codes in the 236-255 range, but how would this tell the system to call a function, say, for Open? Also - looking at the SUBSYS parameter in the JCL reference, I see the following statement Do not use the SUBSYS parameter for an SMS-managed data set (one with an assigned storage class). I am almost sure that the datasets I'd like to access have an assigned storage class - does this truly mean they can't be accessed through a subsystem? Thanks in advance! -Victor- _ This message and any attachments are intended only for the use of the addressee and may contain information that is privileged and confidential. If the reader of the message is not the intended recipient or an authorized representative of the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by e-mail and delete the message and any attachments from your system. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html
How to "marry" subsystem and dynamic allocation
Good afternoon, IBM-MAIN We'd like to be able to prevent certain "confidential" fields in production files from being revealed to "unauthorized" users while still allowing access to the rest of the record. From the users prospective these files are read-only and are accessed through TSO, batch or CICS for testing or comparison purposes. The total volume of such files is huge and changes daily, so cloning them and altering the sensitive fields is not an option. The only other option we can think of is to develop an in-house method of intercepting and altering records while they are being read, transparently to the application. Here's what we've researched so far: - In CICS this should be easily achievable through the file control exit. The exit would look up the dataset in a table and if found, apply a correspondent "rule". - In batch we would implement a subsystem that would intercept each [sequential] I/O and alter the record using the very same rules. What do we do in TSO? Generally, how do we intercept records of a dynamically allocated file? There is a system-wide dynalloc input validation exit, IEFDB401, and it might be able to add "SUBSYS=..." to the DYNALLOC requests, but this would severe overtax all other dynamic allocations in the shop. Appreciate all and any ideas, as crazy as they might sound -Victor- _ This message and any attachments are intended only for the use of the addressee and may contain information that is privileged and confidential. If the reader of the message is not the intended recipient or an authorized representative of the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by e-mail and delete the message and any attachments from your system. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html
Re: Fw: COBOL callable services?
B) Not necessarily. Working storage of a COBOL program complied with DATA(31) may define data residing below 16M if ALL31 is set to OFF [IBM-supplied default]. This is achieved using the EXTERNAL attribute as in the following code snippet 01 BELOW EXTERNAL. 05 DELAY-AMT PIC S9(9) COMP. CALL ILBOWAT0 USING DELAY-AMT -Original Message- Date:Tue, 30 Aug 2005 17:02:50 -0500 From:Bill Klein <[EMAIL PROTECTED]> Subject: Fw: Fw: COBOL callable services? Just remember that when calling ILBOWAT0, you A) want to do a dynamic CALL B) need to use DATA(24) I know that some shops have actually created their own "interface" module (to be called by DATA(31) programs) to copy the time below the line and then to call ILBOWAT0. P.S. ILBOABN0 *has* been changed to accept data above the line - as I recall. Certainly ILBOSTP0 can be called from above the line. <[EMAIL PROTECTED]> wrote in message news:<[EMAIL PROTECTED]>... > No PL/I however I have written and assembler STIMER routine. I'll stick > with ILBOWATO for now. > > Thanks, >Craig _ This message and any attachments are intended only for the use of the addressee and may contain information that is privileged and confidential. If the reader of the message is not the intended recipient or an authorized representative of the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by e-mail and delete the message and any attachments from your system. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html
ISREDIT macro and ampersands
When a source line happens to contain an ampersand it can still be read by ISREDIT (THELINE) = LINE &ROW However, an attempt to rewrite it back [even unchanged!] ISREDIT LINE &ROW = &THELINE fails, and so does an attempt to examine its contents with the &SUBSTR function. I've looked through the manuals, tried SCAN OFF/ON but ended up with replacing the ampersands BEFORE reading the line ISREDIT LABEL &ROW = .CURR ISREDIT CHANGE X'50' X'EF' .CURR .CURR ALL and restoring them back later ISREDIT CHANGE X'EF' X'50' .CURR .CURR ALL This works [except for the rare case when X'EF' is actually part of the original source code and thus gets mistakenly replaced with the ampersand] but just doesn't feel right. I guess it would if the restore was done through UNDO but it's unavailable to ISREDIT. Am I missing something stupid or is this a known limitation? Thanks! -Victor- _ This message and any attachments are intended only for the use of the addressee and may contain information that is privileged and confidential. If the reader of the message is not the intended recipient or an authorized representative of the intended recipient, you are hereby notified that any dissemination of this communication is strictly prohibited. If you have received this communication in error, please notify us immediately by e-mail and delete the message and any attachments from your system. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO Search the archives at http://bama.ua.edu/archives/ibm-main.html