No, it's not that simple. You have given no reason to believe that control is not given to the main task. Fix your code to delete the CIB and then report on what happens.
-- Shmuel (Seymour J.) Metz http://mason.gmu.edu/~smetz3 ________________________________________ From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> on behalf of Joseph Reichman <reichman...@gmail.com> Sent: Sunday, January 6, 2019 3:32 PM To: IBM-MAIN@LISTSERV.UA.EDU Subject: Re: Concurrent Server Task Dispatch issue multitasking issue Once I process a takesocket set the bit pattern in RSNDMSK to the new socket Do a read then write go back to the select_loop control is never returned to the main task it’s that simple > On Jan 6, 2019, at 3:28 PM, Seymour J Metz <sme...@gmu.edu> wrote: > > First, a style issue; you have an explicit numeric length in XC > MY_ECB(104),MY_ECB rather than an implicit length, length attribute (L'FOO) > or equated symbols. That will cause you problems if you ever have to change > the size of the ECB list. > > Second, MODIFY is not the only type of CIB, If the COMM ECB is posted then > you need to process and delete the CIB, regardless of type, and regardless of > whether you recognize the text of a MODIFY. The types I would expect to see > are START, MODIFY and STOP. I would do a WTO for any CIB my code didn't > recognize, but you still need to delete it. > > What is SAVE14F? I hope it's not in your save area. > > Have you verified that every place you use WAIT ECB=MY_ECB you don't need > an ECB list? > > -- > Shmuel (Seymour J.) Metz > http://mason.gmu.edu/~smetz3 > > ________________________________________ > From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> on behalf of > Joseph Reichman <reichman...@gmail.com> > Sent: Saturday, January 5, 2019 11:58 PM > To: IBM-MAIN@LISTSERV.UA.EDU > Subject: Re: Concurrent Server Task Dispatch issue multitasking issue > > Ok but this is going to be really long I do appreciate it the offer BTW I did > the changes with the SELECTEX etc nothing worked > Main Task Select these are listener tasks If it’s for a new connection > do a givesocket and post worker thread > Before I get any input from windows everything is fine meaning from WTO’s I > can see the subtask timing out and the main task > After I post a worker thread which is one of the ECB’s in the WAIT list of > the subtask then do TAKESOCKET IOCTL and READ call a program to process the > command > Write the response back to the Windows Client and then branch to the select > loop > It is at this point I have a problem meaning the I don’t see the wto’s from > the main task timing out > Thanks > > *********************************************************************** > * * > * Issue SELECT TO SEE IF ANY PENDING CONNECTIONS * > * * > *********************************************************************** > SELECT_LOOP DS 0H > XC MY_ECB(104),MY_ECB CLEAR ECB AREA > MVC COMMAND,=CL8'SELECT' > XC MY_PARM(MY_PARM_LEN),MY_PARM CLEAR PARAMTER LIST > EZASMI TYPE=SELECTEX, Issue Macro X > TIMEOUT=TIMEVAL, X > MAXSOC=MAXSOC1, SPECIFY MAXIMUM NUMBER OF SOCKETS X > RSNDMSK=RSNDMSK, READ MASK X > RRETMSK=RRETMSK, RETURN FROM READ X > WSNDMSK=WSNDMSK, WRITE MASK X > WRETMSK=WRETMSK, RETURN FROM WRITE X > ESNDMSK=ESNDMSK, X > ERETMSK=ERETMSK, X > ERRNO=ERRNX, (Specify ERRNO field) X > RETCODE=RETCODY, (Specify RETCODE field) X > ECB=MY_ECB, MAIN TASK EMB X > ERROR=ERROR, Abend if Macro error X > MF=(E,MY_PARM) > > > * WAIT 1,ECBLIST=ECB_LIST WAIT FOR SOMETHING TO HAPPEN > * > L R10,ECB_LIST+4 GET COMMUCATION ADDRSS ECB > TM 0(R10),X'40' MODIFY COMMAND POSTED > BZ CK_TCPIP NO CHECK TCP IP > * WTO 'PROCESSING MODIFY' > * > * DBGRDIE LINKAGE=SVC > * > L R6,COMMADDR Get Communication Addr > USING COM,R6 > L R6,COMCIBPT Point to CIB > DROP R6 > USING CIB,R6 > CLI CIBVERB,CIBMODFY Q. IS it a Modify > BNE SELECT_LOOP no; Go back > CLC CIBDATA,=CL8'SHUTDOWN' Shut Down > BE CLEAN_UP get out > B SELECT_LOOP > CK_TCPIP DS 0H > CLC RETCODY,=F'0' A REAL TIME OUT OCCURED ??? > BNH SELECT_LOOP > * DBGRDIE LINKAGE=SVC > *----------------------------------------------------------* > * if value is > 0 then this a read request to be handled * > * by subtask go back to main loop * > *----------------------------------------------------------* > MVC NOSELECT,RETCODY Save Number of Selected Sockets > BAL XLNK,CK_SELECT Check connections > B SELECT_LOOP > > TITLE 'CHECK SELECTION ACTIVITY.......' > CK_SELECT DS 0H > ST R14,SAVE14F Save link register > LA R6,SOCKTBL Get Socket tbl > USING SOCK_TBL,R6 > SEL_LOOP DS 0H > *********************************************************************** > * * > * check out Selected sockets * > * * > *********************************************************************** > TPIMASK TEST, X > MASK=RRETMSK, X > SD=TPIMSNO > BNE CK_EXCP > L R8,NOSELECT Number of Slected sockets > BCTR R8,0 Got Down by one > ST R8,NOSELECT > TM TPIMSBIT,TPIMSLIS *Is it our listener socket? > BO SPDOACC *- Yes, do an accept > WTO 'ERROR SOCKET TBL ' > B SEL_LOOP > SPDOACC DS 0H > * > EZASMI TYPE=ACCEPT, Issue Macro X > S=TPIMSNO, Socket X > NAME=CNAME, (SOCKET NAME STRUCTURE) X > ERRNO=ERRNX, (Specify ERRNO field) X > RETCODE=RETCODY, (Specify RETCODE field) X > ECB=MY_ECB, IN CASE WE ARE DOING EXITS OR ECBS X > ERROR=ERROR, Abend if Macro error X > MF=(E,MY_PARM) > * > > WAIT ECB=MY_ECB HAPPEN > * > * > * WTO 'AFTER ACCEPT' > AFT_ACP DS 0H > L R15,RETCODY > C R15,=F'0' > BH SET_MESS > CLC RETCODY,=F'-1' > BNE SET_A_ERR > CLC ERRNX,=F'35' > BE SET_MESS > WTO 'ERROR ACCEPT MACRO' > SET_A_ERR DS 0H > *--------------------------------------------------------* > * SINCE THE ACCEPT SOCKET WILL NEVER BE USED TO READ * > * AS THE GIVE SOCKET WILL GENERATE A NEW SOCKET TO * > * TO DO COMMUNICATION WITH HER_CMD WILL WIPE OUT THIS * > * BIT IN THE RSNDMSK BLOCKING A READ UNTIL HRTCPRD * > * GENERATES A NEW SOCKET AND WE WILL CLOSE IT OUT * > * AT THAT POINT WE WILL TURN THIS BIT BACK ON * > *--------------------------------------------------------* > * > *********************************************************************** > * * > * Issue GIVESOCKET * > * * > *********************************************************************** > WAIT_GIVE DS 0H > DROP R6 > USING SOCK_TBL,R6 > XC MY_ECB,MY_ECB > XC MY_PARM(MY_PARM_LEN),MY_PARM CLEAR PARAMTER LIST > EZASMI TYPE=GIVESOCKET, Issue INITAPI Macro X > S=TPIMSNO, X > CLIENT=CLIENT, SPECIFY SUBTASK IDENTIFIER X > ERRNO=ERRNX, (Specify ERRNO field) X > RETCODE=RETCODY, (Specify RETCODE field) X > ECB=MY_ECB, X > ERROR=ERROR, ABEND IF ERROR ON MACRO X > MF=(E,MY_PARM) > * > > WAIT ECB=MY_ECB > CLC RETCODY,=F'0' > BE POST_TASK > MVC COMM,=CL8'GIVESOCK' > BAL R14,RCCHECK --> DID IT WORK? > POST_TASK DS 0H > OI TPIMSBIT,TPIMSEXP > * > L R8,TPITSKAD > * > USING THREAD_DSECT,R8 > MVC SOCKET,TPIMSNO > DROP R6 > USING SOCK_TBL,R7 > * WTO 'GIVE SOCKET EXECUTED ..' > * DBGRDIE LINKAGE=SVC > XC MY_ECB,MY_ECB > XC MY_PARM(MY_PARM_LEN),MY_PARM CLEAR PARAMTER LIST > * > MVC COMM,=CL8'GIVESOCK' > * BAL R14,RCCHECK --> DID IT WORK? > * L R1,ECB_ADDR Get ecb address > POST (R1) Tell Task Work Waitting > * > B CK_SEL > CK_EXCP DS 0H > TPIMASK TEST, X > MASK=ERETMSK, X > SD=TPIMSNO > BNE CK_SEL > L R15,NOSELECT *Decrement number of > BCTR R15,0 *- selected socket descriptors > ST R15,NOSELECT * by one. > TM TPIMSBIT,TPIMSEXP *Did we expect it? > BNO CK_SEL SPECLOSE *- Yes, server has > EZASMI TYPE=CLOSE, Issue Macro X > S=TPIMSNO, CLOSE THIS SOCKET X > ERRNO=ERRNX, (Specify ERRNO field) X > RETCODE=RETCODY, (Specify RETCODE field) X > ECB=MY_ECB, X > T ERROR=ERROR, Abend if Macro error X > MF=(E,MY_PARM) > > * > WAIT ECB=MY_ECB > T CK_SEL DS 0H > L R15,NOSELECT > LTR R15,R15 Any More Socket > BNZ SEL_LOOP > L R14,SAVE14F RE-LOAD LINK REGISTERS * > BR XLNK > > Subtask SELECT LOOP > * > SELECT_LOOP DS 0H > XC MY_ECBT(104),MY_ECBT > EZASMI TYPE=SELECT, Issue Macro X > TIMEOUT=TIMEVAL, X > MAXSOC=MAXSNO, SPECIFY MAXIMUM NUMBER OF SOCKETS X > RSNDMSK=RSNDMSK, READ MASK X > RRETMSK=RRETMSK, RETURN FROM READ X > ESNDMSK=ESNDMSK, X > ERETMSK=ERETMSK, X > ERRNO=ERRNO, (Specify ERRNO field) X > RETCODE=RETCODE, (Specify RETCODE field) X > ECB=MY_ECBT, MAIN TASK EMB X > ERROR=ERROR, Abend if Macro error X > TASK=MYTIE, X > MF=(E,MY_PARX) > * > * Wait For Something to happen > * > * > WAIT 1,ECBLIST=ECBLST WAIT For Something top Happen > * > L R15,ECBLST Get first ECB > TM 0(R15),X'40' End Task ? > BO RETURN rETURN > L R15,ECBLST+8 Get Give/Take > TM 0(R15),X'40' GiveSocket Issued > BO CKGVE > * > L R15,ECBLST+4 > TM 0(R15),X'40' Ecb Posted FromRecovery rtn > BZ CKREADS no; > * > * Get ASCB In question > * > > CKREADS DS 0H > CLC RETCODE,=F'0' TimeOut ? > BNE CK_ERR Return > XC MY_ECBT,MY_ECBT > * > * WTO 'AT CALLDISP..........' > CALLDISP give up control > > * > B SELECT_LOOP > CK_ERR DS 0H > CLC RETCODE,=F'-1' Bad RC > BNE CKRET > MVC COMMX,=CL8'SELECT' > BAL R14,RCCHECK > B SELECT_LOOP > CKRET DS 0H > ************************************************************************ > * * > * check out Slected sockets * > * * > *********************************************************************** > TPIMASK TEST, X > MASK=RRETMSK, X > SD=READ_SOCK > BNE CK_OTHER > MVC IO_SOCK,READ_SOCK > B READ > CK_OTHER DS 0H > TPIMASK TEST, X > MASK=RRETMSK, X > SD=OTHER_SOCK > BNE SELECT_LOOP > MVC IO_SOCK,READ_SOCK > B READ > CKGVE DS 0H > *---------------------------------------------------------------------* > * GET THE SOCKET TO READ * > *---------------------------------------------------------------------* > L R15,ECB_ADDR Get ECB Address > XC 0(4,R15),0(R15) Clear Post Bit > MVC COMMX,=CL8'TAKESOCK' > XC MY_PARX(MY_PARX_LEN),MY_PARX CLEAR PARAMTER LIST > XC MY_ECBT(104),MY_ECBT CLEAR ECB ADDRESS > EZASMI TYPE=TAKESOCKET, Issue TakeSocket X > SOCRECV=SOCKET, X > CLIENT=SCLIENT, SPECIFY SUBTASK IDENTIFIER X > ERRNO=ERRNO, (Specify ERRNO field) X > RETCODE=RETCODE, (Specify RETCODE field) X > ECB=MY_ECBT, X > ERROR=ERROR, ABEND IF ERROR ON MACRO X > MF=(E,MY_PARX) > * > WAIT ECB=MY_ECBT > * > * > * > > CK_RET DS 0H > CLC RETCODE,=F'-1' > BNE WAIT_TAKE > BAL R14,RCCHECK > WAIT_TAKE DS 0H > MVC IO_SOCK,RETCODE+2 > CLC READ_SOCK,=2X'FF' Q, First time in > BNE SET_OTHER > MVC READ_SOCK,IO_SOCK > B CK_FLGS > SET_OTHER DS 0H > MVC OTHER_SOCK,IO_SOCK > * > * Set Selct to Tset This Socket out > * > CK_FLGS DS 0H > TPIMASK SET, X > MASK=RSNDMSK, X > SD=READ_SOCK > * > *********************************************************************** > * * > * Issue ioctl to set non blocking mode * > * * > *********************************************************************** > EZASMI TYPE=IOCTL, Issue Macro X > S=READ_SOCK, STREAM X > COMMAND='FIONBIO', (SOCKET NAME STRUCTURE) X > REQARG=NONBLOCK, X > RETARG=RETARG, X > ERRNO=ERRNO, (Specify ERRNO field) X > RETCODE=RETCODE, (Specify RETCODE field) X > ECB=MY_ECBT, IN CASE WE ARE DOING EXITS OR ECBS X > ERROR=ERROR, Abend if Macro error X > MF=(E,MY_PARX) > > * > WAIT ECB=MY_ECBT > > *********************************************************************** > * * > * Issue READ - Read data and store in buffer * > * * > *********************************************************************** > READ DS 0H > MVC MSG1(2),=AL2(49) > MVC MSG1+2(38),=CL38'DBGRTSK ABOUT TO EXECUTE READ FOR PORT ' > ST R1,SAVE1 SAVE R1 > XR R1,R1 CLEAR > ICM R1,B'0011',PORT# > CVD R1,DWORK > L R1,SAVE1 > MVC MSG1+41(6),=X'402120202020' > ED MSG1+41(6),DWORK+5 > OI MSG1+45,X'F0' > MVC WTO_LISX(WTO_LEX),WTO_CONS > WTO TEXT=MSG1,MF=(E,WTO_LISX) > WTO 'ABOUT TO EXECUTE READ SOCKET' > * DBGRDIE LINKAGE=SVC > LA R10,BUF > EZASMI TYPE=READ, Issue Macro X > S=IO_SOCK, Read Socket X > NBYTE=NBYTE, SIZE OF BUFFER X > BUF=(R10), (BUFFER) X > ERRNO=ERRNO, (Specify ERRNO field) X > RETCODE=RETCODE, (Specify RETCODE field) X > ERROR=ERROR, Abend if Macro error X > ECB=MY_ECBT, X > MF=(E,MY_PARX) > > L R15,RETCODE Get Number of bytes > LTR R15,R15 Q. Any Data Returned > BZ SELECT_LOOP Return > C R15,=F'-1' Error ? > BNE SET#BYTE > CLC ERRNO,=F'54' Connection closed > BE CLOSE Close it up > LTR R15,R15 Q. Any Data Returned > BZ SELECT_LOOP Return > C R15,=F'-1' Error ? > BNE SET#BYTE > CLC ERRNO,=F'54' Connection closed > BE CLOSE Close it up > BAL R14,RCCHECK > B SELECT_LOOP > SET#BYTE DS 0H > ST R15,IN_BUFF# Store number of bytes rd > L R15,ECBLST > XC 0(4,R15),0(R15) Clear ECB > MVC MSG1(2),=AL2(50) > MVC MSG1+2(50),=CL50'DBGRTSK AFTER READ !!!!!!!!!!' > MVC WTO_LISX(WTO_LEX),WTO_CONS > WTO TEXT=MSG1,MF=(E,WTO_LISX) > * WTO 'AFTER READ SOCKET .........' > * > LA R10,BUF > XC LINK_LIST(LINK_LEN),LINK_LIST CLEAR PARM AREA > MVC LINK_LIST(LINK_LEN),LINK_CON1 MOVE CONSTANTS > *-----------------------------------------------------* > * LINK TO ASCII TO EBCDIC SERVICE RTN * > *-----------------------------------------------------* > LINK EP=EZACIC05, X > PARAM=((R10),F20),VL, X > MF=(E,PARAMS),SF=(E,LINK_LIST) > > > LA R10,BUF get buffer area > * > XC CALL_LIST(CALL_LEN),CALL_LIST > * > MVC MSG1(2),=AL2(50) > MVC MSG1+2(50),=CL50'DBGRTSK BEFORE CALL EZACIC05.' > MVC WTO_LISX(WTO_LEX),WTO_CONS > * MVC LINK_LIST(LINK_LEN),LINK_CON2 MOVE > CONSTANTS > *-----------------------------------------------------* > * LINK TO PROCESS DBGR_CMD REQUEST * > *-----------------------------------------------------* > LR R12,R13 Point to Task Storage > LINK EP=DRVALCMD, X > PARAM=((R12)), X > MF=(E,PARAMS),SF=(E,LINK_LIST) > > LTR R15,R15 q. Did command Process > BZ CK_WRITE > LA R10,=F'4' > LA R11,ERRCODE > B WRITE_SOCK > CK_WRITE DS 0H > CLC BUF_LEN,=4X'00' Q. Any Length > BE READ Yes; Write > WRITE DS 0H > *********************************************************************** > * * > * Issue WRITE - Write data from buffer * > * * > *********************************************************************** > XC MY_ECBT(104),MY_ECBT > MVC TYPE,MWRITE MOVE 'WRITE ' TO MESSAGE > MVC MSG1(2),=AL2(50) > MVC MSG1+2(50),=CL50'DBGRTSK BEFORE EZACIC04......' > MVC WTO_LISX(WTO_LEX),WTO_CONS > WTO TEXT=MSG1,MF=(E,WTO_LISX) > CLI 0(R10),C'V' > BE SETPRM > L R10,BUF_LEN > MVC TR_LEN,BUF_LEN > B SETTRTBL > SETPRM DS 0H > L R10,TR_LEN Get length of storage > ETTRTBL DS 0H > LA R7,STANDARDE2A get address of tr tabler > L R11,OUTBUFFA gET OutPut buffer > LA R11,4(,R11) Past Length > * > TRLOOP DS 0H > CH R10,=H'255' < 255 > BL TRREST Translate rest > TR 0(255,R11),0(R7) Translate it > LA R11,255(,R11) Bump it up > SH R10,=H'255' Decrement > B TRLOOP Loop Thru > TRREST DS 0H > BCTR R10,0 Down by for Execute > EX R10,TRBUFF Do the rest > * > LA R10,BUF_LEN re-init for write > L R11,OUTBUFFA Buff Address > B WRITE_SOCK > TRBUFF TR 0(0,R11),0(R7) > * > WRITE_SOCK DS 0H > WTO 'AT WRITE SOCK..' > EZASMI TYPE=WRITE, Issue Macro X > S=READ_SOCK, ACCEPT Socket X > NBYTE=(R10), SIZE OF BUFFER X > BUF=(R11), (BUFFER) X > ERRNO=ERRNO, (Specify ERRNO field) X > ECB=MY_ECBT, X > RETCODE=RETCODE, (Specify RETCODE field) X > ERROR=ERROR, Abend if Macro error X > MF=(E,MY_PARX) > * > WAIT ECB=MY_ECBT WAIT FOR COMMAND COMPLETION > * > CLC RETCODE,=F'0' Q. DID WE GET ANYTING > BH WAIT_WRITE > CLC RETCODE,=F'0' Q. DID WE GET ANYTING > BNE CKRCWRTE > WTO 'ZERO BYTES WRITTEN' > B SELECT_LOOP > CKRCWRTE DS 0H > MVC COMMX,=CL8'WRITE' > BAL R14,RCCHECK CHECK FOR SUCCESSFUL CALL > WAIT_WRITE DS 0H > WTO 'WRITE COMPLETED...' > XC MY_ECBT,MY_ECBT > B SELECT_LOOP > > -----Original Message----- > From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> On Behalf Of > Tony Thigpen > Sent: Saturday, January 5, 2019 10:05 PM > To: IBM-MAIN@LISTSERV.UA.EDU > Subject: Re: Concurrent Server Task Dispatch issue multitasking issue > > You might need to post your full code so people can look at it to find the > problem. > > Tony Thigpen > > Joseph Reichman wrote on 1/5/19 7:52 PM: >> This is the situation both the main task and 4 sub tasks have selects >> after the time outs of the main task and subtasks I do wto When I get >> a connection the main task posts a subtask to do a EZASMI read and >> write and then go back to the select loop at this point I hardly see >> any WTOs from the main task time the modify command works about 1 out >> of 5 times >> >> >> >>> On Jan 5, 2019, at 7:14 PM, Brian Chapman <bchapma...@gmail.com >>> <mailto:bchapma...@gmail.com> > wrote: >>> >>> 1. Are you checking the COMM ECB after every wait? Even after a >>> subtask post the main task's ECB or any other ECB in your list? I've >>> had problems with subtasks posting the main task and not checking the >>> COMM ECB after servicing the subtask request and missing console commands. >>> >>> 2. Double check which ECB in your ECB list has the high order bit >>> set. I've added more ECBs in my list and forgot to move the high order bit >>> flip. >>> >>> On Jan 5, 2019 6:26 PM, "Joseph Reichman" <reichman...@gmail.com >>> <mailto:reichman...@gmail.com> > wrote: >>> >>> First off it is being posted I saw a X’48’ in the first byte the >>> operative bit being the 4 I am doing the wto on timeout from both >>> selects and the problem is that the main task doesn’t get control >>> >>> Thanks >>> >>> >>> >>>> On Jan 5, 2019, at 12:20 AM, Brian Westerman < >>> brian_wester...@syzygyinc.com <mailto:brian_wester...@syzygyinc.com> > >>> wrote: >>>> >>>> When you test the ECB is anything being posted? Is it possible that >>>> your >>> subtasks are actually sharing the ECBLIST for other use and they are >>> clearing it for you? >>>> >>>> It would be interesting to have all of your tasks (main and sub) wto >>>> when >>> they are posted so that you can see where you are when the post happens. >>> Possibly you are in a subtask, it gets posted and that subtask sees >>> that it's not "his" data, so clears things and moves on. I don't >>> share the ECBLIST between the main and subtask, so I'm not sure what >>> happens if you do, but it always seemed to me to be asking for trouble. >>>> >>>> Brian >>>> >>>> -------------------------------------------------------------------- >>>> -- For IBM-MAIN subscribe / signoff / archive access instructions, >>>> send email to lists...@listserv.ua.edu <mailto:lists...@listserv.ua.edu> >>>> with the message: INFO >>>> IBM-MAIN >>> >>> --------------------------------------------------------------------- >>> - For IBM-MAIN subscribe / signoff / archive access instructions, >>> send email to lists...@listserv.ua.edu <mailto:lists...@listserv.ua.edu> >>> with the message: INFO >>> IBM-MAIN >>> >>> --------------------------------------------------------------------- >>> - For IBM-MAIN subscribe / signoff / archive access instructions, >>> send email to lists...@listserv.ua.edu <mailto:lists...@listserv.ua.edu> >>> with the message: INFO >>> IBM-MAIN >> >> ---------------------------------------------------------------------- >> For IBM-MAIN subscribe / signoff / archive access instructions, send >> email to lists...@listserv.ua.edu <mailto:lists...@listserv.ua.edu> with >> the message: INFO IBM-MAIN >> >> > > ---------------------------------------------------------------------- > For IBM-MAIN subscribe / signoff / archive access instructions, send email to > lists...@listserv.ua.edu <mailto:lists...@listserv.ua.edu> with the message: > INFO IBM-MAIN > > ---------------------------------------------------------------------- > For IBM-MAIN subscribe / signoff / archive access instructions, > send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN > > ---------------------------------------------------------------------- > For IBM-MAIN subscribe / signoff / archive access instructions, > send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN