Andy, As Walt pointed out many times certain Rexx functions can't be called because they are authorized ...not apf , ikjtso authorized .......
Scott ford www.identityforge.com Tell me and I'll forget; show me and I may remember; involve me and I'll understand. - Chinese Proverb On Mar 29, 2013, at 10:41 AM, Andy Robertson <[email protected]> wrote: > We use this COBOL warning 400+lines follow > > > IDENTIFICATION DIVISION. > > PROGRAM-ID. 'JLPFCALL'. > > **************************************************************** > * JLPFCALL JLP UTILITY REXX FUNCTION > **************************************************************** > * > * THIS IS CALLED IN A REXX EXEC IN THE FOLLOWING > * WAY > * JLPFCALL(MODULENAME,N,PARM1,PARM2. . . .) > * > * WHERE MODULENAME IS A DEFINED SUBROUTINE AND N IS THE NUMBER OF > * THE PARM THAT WE WANT TO GO INTO THE RESULT > * > * E.G. > * > * INDATE = "12/12/12" > * JDCONTROL="ESCJDC " > * > * X = JLPFCALL("JDATE",JDCONTROL,INDATE,"") > * > * PUTS THE 80-BYTE JDATE FIELD INTO X > * > * PARAMETERS ARE PADDED TO 250 BYTES ON INPUT. THE RESULT FIELD > * IS PADDED TO 250 BYTES AND THEN HAS TRAILING BLANKS TRUNCATED. > * HOWEVER ITS LENGTH IS NEVER REDUCED TO LESS THAN ITS LENGTH ON > * INPUT > * > **************************************************************** > * IT IS NECESSARY TO WRITE THIS IN COBOL BECAUSE THE COBOL DYNAMIC > * CALL IS THE ONLY AVAILABLE INTERFACE WHICH CAN HANDLE ALL > * POSSIBLE TYPES OF MODULE E.G. > * COBOL MODULES (24 AND 31) > * C MODULES (MUST BE 31) - NOT MAIN > * C MODULES (MUST BE 31) - MAIN > * ASS MODULES (24 AND 31) - NON-CONFORMING > * ASS MODULES (24 AND 31) - CONFORMING MAIN > * ASS MODULES (24 AND 31) - CONFORMING NOT MAIN > **************************************************************** > * > * WARNING: WE DID ATTEMPT TO PUT THIS IN IRXFLOC, BUT FOUND IT > * NOT WORTH THE TROUBLE. SINCE YOU HAVE TO INITIALISE A LE/370 > * ENCLAVE EVERY TIME THE OVERHEAD OF LOADING JLPFCALL IS SMALL > * > **************************************************************** > * > * THIS JLPFCALL IS USED ON MVS AND VSE. OTHER ENVIRONMENTS NEED > * THEIR OWN INTERFACES. > * > **************************************************************** > > **************************************************************** > * NOTE FOR USE UNDER OMVS. UNDER OMVS EXTERNAL FUNCTIONS ARE > * LOOKED FOR FIRST BY MVS LOAD. THUS THE "MVS BATCH" VERSION > * ON OPS.LIVE.LOADLIB (SYSTEM LINKLIB) IS USED UNDER OMVS. > **************************************************************** > > > ENVIRONMENT DIVISION. > DATA DIVISION. > WORKING-STORAGE SECTION. > > 01 W-MAX-EVALBLOCK-EVDATA-LEN PIC S9(8) COMP. > > 01 W-ARG-COUNT PIC S9(8) COMP. > > 01 W-ARG-ENTRYS. > 04 W-ARG OCCURS 11 INDEXED BY > W-ARG-ENTRY-X. > 07 W-ARG-LEN PIC S9(8) COMP. > 07 W-ARG-DATA PIC X(500). > > > 01 W-REPLY. > 07 W-REPLY-LEN PIC S9(8) COMP. > 07 W-REPLY-DATA PIC X(500). > > 01 W-RESULT PIC X. > > LINKAGE SECTION. > > 01 DUMMY1 PIC X. > > 01 DUMMY2 PIC X. > > 01 DUMMY3 PIC X. > > 01 DUMMY4 PIC X. > > 01 ARGTABLE. > 04 ARGTABLE-ENTRY OCCURS 10 INDEXED BY > ARGTABLE-ENTRY-X. > 07 ARGTABLE-ARGSTRING-POINTER USAGE POINTER. > 07 ARGTABLE-ARGSTRING-LEN PIC S9(8) COMP. > > 01 ARGSTRING PIC X(9999). > > 01 EVALBLOCK-POINTER USAGE POINTER. > > 01 EVALBLOCK. > 02 EVALBLOCK-PREFIX. > 04 EVALBLOCK-EVPAD1 PIC S9(8) COMP. > 04 EVALBLOCK-EVSIZE PIC S9(8) COMP. > 04 EVALBLOCK-EVLEN PIC S9(8) COMP. > 04 EVALBLOCK-EVPAD2 PIC S9(8) COMP. > 02 EVALBLOCK-REST. > 04 EVALBLOCK-EVDATA PIC X(9999). > > PROCEDURE DIVISION USING DUMMY1 DUMMY2 DUMMY3 DUMMY4 ARGTABLE > EVALBLOCK-POINTER. > > > * COUNT ARGUMENT TABLE. > * MUST BE (2+1) AT LEAST, MAY NOT BE > (2+9) > > > * SET ADRESSABILITY OF EVALBLOCK > * SET MAX ALLOWABLE LENGTH TO SIZE AVAILABLE IN EVDATA > * > SET ADDRESS OF EVALBLOCK > TO EVALBLOCK-POINTER > > COMPUTE W-MAX-EVALBLOCK-EVDATA-LEN > = (EVALBLOCK-EVSIZE * 8) - LENGTH OF EVALBLOCK-PREFIX > > IF W-MAX-EVALBLOCK-EVDATA-LEN > 250 > MOVE 250 TO W-MAX-EVALBLOCK-EVDATA-LEN > END-IF > > > MOVE 1 TO W-ARG-COUNT > > PERFORM VARYING ARGTABLE-ENTRY-X FROM 1 BY 1 UNTIL > ARGTABLE-ENTRY(ARGTABLE-ENTRY-X) = HIGH-VALUES > > ADD 1 TO W-ARG-COUNT > > > END-PERFORM > > IF W-ARG-COUNT < 3 OR W-ARG-COUNT > 11 > GO TO Z999-ERROR > END-IF > > > * MOVE ARGUMENTS TO WORKING-STORAGE > > PERFORM VARYING W-ARG-ENTRY-X FROM 1 BY 1 UNTIL > W-ARG-ENTRY-X > 11 > MOVE ' ' TO W-ARG-DATA(W-ARG-ENTRY-X) > MOVE 0 TO W-ARG-LEN(W-ARG-ENTRY-X) > END-PERFORM > > SET W-ARG-ENTRY-X TO 1 > PERFORM VARYING ARGTABLE-ENTRY-X FROM 1 BY 1 UNTIL > ARGTABLE-ENTRY(ARGTABLE-ENTRY-X) = HIGH-VALUES > IF ARGTABLE-ARGSTRING-LEN(ARGTABLE-ENTRY-X) > > W-MAX-EVALBLOCK-EVDATA-LEN > GO TO Z999-ERROR > END-IF > SET ADDRESS OF ARGSTRING TO ARGTABLE-ARGSTRING-POINTER > (ARGTABLE-ENTRY-X) > IF ARGTABLE-ARGSTRING-LEN(ARGTABLE-ENTRY-X) > 0 > MOVE ARGSTRING > (1:ARGTABLE-ARGSTRING-LEN(ARGTABLE-ENTRY-X)) > TO W-ARG-DATA(W-ARG-ENTRY-X) > END-IF > MOVE ARGTABLE-ARGSTRING-LEN(ARGTABLE-ENTRY-X) > TO W-ARG-LEN(W-ARG-ENTRY-X) > SET W-ARG-ENTRY-X UP BY 1 > END-PERFORM > > CALL 'JLPFCAL1' USING W-ARG-COUNT W-ARG-ENTRYS W-REPLY > W-RESULT > * DISPLAY 'JLPFCAL1 RC = ' RETURN-CODE > IF W-RESULT NOT = 'V' > GO TO Z999-ERROR > END-IF > > > > MOVE W-REPLY-LEN TO EVALBLOCK-EVLEN > IF EVALBLOCK-EVLEN > W-MAX-EVALBLOCK-EVDATA-LEN > MOVE W-MAX-EVALBLOCK-EVDATA-LEN > TO EVALBLOCK-EVLEN > END-IF > > MOVE W-REPLY-DATA TO EVALBLOCK-EVDATA(1:EVALBLOCK-EVLEN) > > MOVE 0 TO RETURN-CODE > > GOBACK. > > Z999-ERROR. > > MOVE 12 TO RETURN-CODE > > GOBACK. > > > * COPY IN EXECUTION SUBROUTINE FOR FAST EXECUTION > > 000100 IDENTIFICATION DIVISION. > 00010000 > 000200 > 00020000 > 000300 PROGRAM-ID. JLPFCAL1. > 00030000 > 000400 > 00040000 > 000500**************************************************************** > 00050000 > 000600* JLPFCALL SUBROUTINE FOR DOING ACTUAL CALL > 00060000 > 000700**************************************************************** > 00070000 > 000800* > 00080000 > 002900* > 00290000 > 003000**************************************************************** > 00300000 > 003100* IT IS NECESSARY TO WRITE THIS IN COBOL BECAUSE THE COBOL > DYNAMIC00310000 > 003200* CALL IS THE ONLY AVAILABLE INTERFACE WHICH CAN HANDLE ALL > 00320000 > 003300* POSSIBLE TYPES OF MODULE ON MVS. THIS IS ALSO TRUE ON MANY > 00330000 > 003400* OTHER OPERATING SYSTEMS > 00340000 > 004000**************************************************************** > 00400000 > 004700 > 00470000 > 004800 > 00480000 > 004900 ENVIRONMENT DIVISION. > 00490000 > 005000 DATA DIVISION. > 00500000 > 005100 WORKING-STORAGE SECTION. > 00510000 > 005200 > 00520000 > 005300 01 W-MODULE-NAME PIC X(8). > 00530000 > 005500 01 W-RETURN-CODE PIC S9(8) COMP. > 00550000 > 006000 01 W-ARG-RETURNED-NO PIC S9(8) COMP. > 00600000 > 006010 01 W-COUNT PIC S9(8) COMP. > 00601005 > 006020 01 W-CHAR-X. > 00602005 > 006030 04 W-CHAR PIC 9. > 00603005 > 006100 > 00610000 > 007300 LINKAGE SECTION. > 00730000 > 007400 > 00740000 > 007410 01 W-ARG-COUNT PIC S9(8) COMP. > 00741000 > 007431 > 00743100 > 007432 01 W-ARG-ENTRYS. > 00743200 > 007433 04 W-ARG OCCURS 11 INDEXED BY > 00743300 > 007434 W-ARG-ENTRY-X. > 00743400 > 007440 07 W-ARG-LEN PIC S9(8) COMP. > 00744000 > 007450 07 W-ARG-DATA PIC X(500). > 00745000 > 007460 > 00746000 > 007470 > 00747000 > 007480 01 W-REPLY. > 00748000 > 007490 07 W-REPLY-LEN PIC S9(8) COMP. > 00749000 > 007491 07 W-REPLY-DATA PIC X(500). > 00749100 > 007492 > 00749200 > 007493 > 00749300 > 007494 01 W-RESULT PIC X. > 00749400 > 010100 > 01010000 > 010200 PROCEDURE DIVISION USING W-ARG-COUNT W-ARG-ENTRYS W-REPLY > 01020000 > 010400 W-RESULT. > 01040000 > 010500 > 01050000 > 016500 > 01650000 > 016510 MOVE 'I' TO W-RESULT > 01651000 > 016520 > 01652000 > 016600* GET NAME OF MODULE > 01660000 > 016700 > 01670000 > 016800 IF W-ARG-LEN(1) > 8 > 01680000 > 016900 GO TO Z999-ERROR > 01690000 > 017000 END-IF > 01700000 > 017100* DISPLAY 'HI 01' > 01710000 > 017110 > 01711000 > 017200 MOVE W-ARG-DATA(1) TO W-MODULE-NAME > 01720008 > 017300 INSPECT W-MODULE-NAME > 01730009 > 017301 CONVERTING 'abcdefghijklmnopqrstuvwxyz' > 01730109 > 017302 TO 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' > 01730209 > 017320 > 01732008 > 017400* GET NUMBER OF PARM TO RETURN. DONE THIS WAY COS "NUMERIC" > 01740005 > 017410* IS A BIT DICKY ON SOME COMPILERS > 01741005 > 017500 > 01750000 > 017501 MOVE 0 TO W-ARG-RETURNED-NO > 01750105 > 017510 PERFORM VARYING W-COUNT FROM 1 BY 1 UNTIL W-COUNT > 01751005 > 017520 > W-ARG-LEN(2) > 01752005 > 017521 COMPUTE W-ARG-RETURNED-NO = W-ARG-RETURNED-NO * 10 > 01752105 > 017530 MOVE W-ARG-DATA(2) (W-COUNT:1) TO W-CHAR-X > 01753005 > 017531 IF W-CHAR-X = '0' > 01753105 > 017532 OR W-CHAR-X = '1' > 01753205 > 017533 OR W-CHAR-X = '2' > 01753305 > 017534 OR W-CHAR-X = '3' > 01753405 > 017535 OR W-CHAR-X = '4' > 01753505 > 017536 OR W-CHAR-X = '5' > 01753605 > 017537 OR W-CHAR-X = '6' > 01753705 > 017538 OR W-CHAR-X = '7' > 01753805 > 017539 OR W-CHAR-X = '8' > 01753905 > 017540 OR W-CHAR-X = '9' > 01754005 > 017557 COMPUTE W-ARG-RETURNED-NO > 01755705 > 017558 = > 01755805 > 017559 W-ARG-RETURNED-NO + W-CHAR > 01755905 > 017560 ELSE > 01756005 > 017561 GO TO Z999-ERROR > 01756105 > 017562 END-IF > 01756206 > 017569 > 01756905 > 017570 END-PERFORM > 01757005 > 017580 > 01758005 > 017590 COMPUTE W-ARG-RETURNED-NO = W-ARG-RETURNED-NO + 2 > 01759007 > 018600 > 01860000 > 018700 IF W-ARG-RETURNED-NO < 3 OR W-ARG-RETURNED-NO > W-ARG-COUNT > 01870000 > 018800 GO TO Z999-ERROR > 01880000 > 018900 END-IF > 01890000 > 018910* DISPLAY 'HI 03' > 01891000 > 019000 > 01900000 > 019100 > 01910000 > 019200* CALL MODULE > 01920000 > 019300 > 01930000 > 019400 MOVE 0 TO W-RETURN-CODE > 01940000 > 019500 > 01950000 > 019600 EVALUATE W-ARG-COUNT > 01960000 > 019700 > 01970000 > 019800 WHEN 3 > 01980000 > 019900 > 01990000 > 020000 CALL W-MODULE-NAME USING > 02000000 > 020100 W-ARG-DATA(3) > 02010000 > 020200 ON EXCEPTION GO TO Z999-ERROR > 02020000 > 020300 END-CALL > 02030000 > 020400 MOVE RETURN-CODE TO W-RETURN-CODE > 02040000 > 020500 > 02050000 > 020600 WHEN 4 > 02060000 > 020700 > 02070000 > 020800 CALL W-MODULE-NAME USING > 02080000 > 020900 W-ARG-DATA(3) > 02090000 > 021000 W-ARG-DATA(4) > 02100000 > 021100 ON EXCEPTION GO TO Z999-ERROR > 02110000 > 021200 END-CALL > 02120000 > 021300 MOVE RETURN-CODE TO W-RETURN-CODE > 02130000 > 021400 > 02140000 > 021500 WHEN 5 > 02150000 > 021600 > 02160000 > 021700 CALL W-MODULE-NAME USING > 02170000 > 021800 W-ARG-DATA(3) > 02180000 > 021900 W-ARG-DATA(4) > 02190000 > 022000 W-ARG-DATA(5) > 02200000 > 022100 ON EXCEPTION GO TO Z999-ERROR > 02210000 > 022200 END-CALL > 02220000 > 022300 MOVE RETURN-CODE TO W-RETURN-CODE > 02230000 > 022400 > 02240000 > 022500 WHEN 6 > 02250000 > 022600 > 02260000 > 022700 CALL W-MODULE-NAME USING > 02270000 > 022800 W-ARG-DATA(3) > 02280000 > 022900 W-ARG-DATA(4) > 02290000 > 023000 W-ARG-DATA(5) > 02300000 > 023100 W-ARG-DATA(6) > 02310000 > 023200 ON EXCEPTION GO TO Z999-ERROR > 02320000 > 023300 END-CALL > 02330000 > 023400 MOVE RETURN-CODE TO W-RETURN-CODE > 02340000 > 023500 > 02350000 > 023600 WHEN 7 > 02360000 > 023700 > 02370000 > 023800 CALL W-MODULE-NAME USING > 02380000 > 023900 W-ARG-DATA(3) > 02390000 > 024000 W-ARG-DATA(4) > 02400000 > 024100 W-ARG-DATA(5) > 02410000 > 024200 W-ARG-DATA(6) > 02420000 > 024300 W-ARG-DATA(7) > 02430000 > 024400 ON EXCEPTION GO TO Z999-ERROR > 02440000 > 024500 END-CALL > 02450000 > 024600 MOVE RETURN-CODE TO W-RETURN-CODE > 02460000 > 024700 > 02470000 > 024800 WHEN 8 > 02480000 > 024900 > 02490000 > 025000 CALL W-MODULE-NAME USING > 02500000 > 025100 W-ARG-DATA(3) > 02510000 > 025200 W-ARG-DATA(4) > 02520000 > 025300 W-ARG-DATA(5) > 02530000 > 025400 W-ARG-DATA(6) > 02540000 > 025500 W-ARG-DATA(7) > 02550000 > 025600 W-ARG-DATA(8) > 02560000 > 025700 ON EXCEPTION GO TO Z999-ERROR > 02570000 > 025800 END-CALL > 02580000 > 025900 MOVE RETURN-CODE TO W-RETURN-CODE > 02590000 > 026000 > 02600000 > 026100 WHEN 9 > 02610000 > 026200 > 02620000 > 026300 CALL W-MODULE-NAME USING > 02630000 > 026400 W-ARG-DATA(3) > 02640000 > 026500 W-ARG-DATA(4) > 02650000 > 026600 W-ARG-DATA(5) > 02660000 > 026700 W-ARG-DATA(6) > 02670000 > 026800 W-ARG-DATA(7) > 02680000 > 026900 W-ARG-DATA(8) > 02690000 > 027000 W-ARG-DATA(9) > 02700000 > 027100 ON EXCEPTION GO TO Z999-ERROR > 02710000 > 027200 END-CALL > 02720000 > 027300 MOVE RETURN-CODE TO W-RETURN-CODE > 02730000 > 027400 > 02740000 > 027500 WHEN 10 > 02750000 > 027600 > 02760000 > 027700 CALL W-MODULE-NAME USING > 02770000 > 027800 W-ARG-DATA(3) > 02780000 > 027900 W-ARG-DATA(4) > 02790000 > 028000 W-ARG-DATA(5) > 02800000 > 028100 W-ARG-DATA(6) > 02810000 > 028200 W-ARG-DATA(7) > 02820000 > 028300 W-ARG-DATA(8) > 02830000 > 028400 W-ARG-DATA(9) > 02840000 > 028500 W-ARG-DATA(10) > 02850000 > 028600 ON EXCEPTION GO TO Z999-ERROR > 02860000 > 028700 END-CALL > 02870000 > 028800 MOVE RETURN-CODE TO W-RETURN-CODE > 02880000 > 028900 > 02890000 > 029000 WHEN 11 > 02900000 > 029100 > 02910000 > 029200 CALL W-MODULE-NAME USING > 02920000 > 029300 W-ARG-DATA(3) > 02930000 > 029400 W-ARG-DATA(4) > 02940000 > 029500 W-ARG-DATA(5) > 02950000 > 029600 W-ARG-DATA(6) > 02960000 > 029700 W-ARG-DATA(7) > 02970000 > 029800 W-ARG-DATA(8) > 02980000 > 029900 W-ARG-DATA(9) > 02990000 > 030000 W-ARG-DATA(10) > 03000000 > 030100 W-ARG-DATA(11) > 03010000 > 030200 ON EXCEPTION GO TO Z999-ERROR > 03020000 > 030300 END-CALL > 03030000 > 030400 MOVE RETURN-CODE TO W-RETURN-CODE > 03040000 > 030500 > 03050000 > 030600 END-EVALUATE > 03060000 > 030610* DISPLAY 'HI 04' > 03061000 > 030700 > 03070000 > 030800* MOVE RETURNED DATA BACK TO W-REPLY > 03080000 > 030900 > 03090000 > 031000 SET W-ARG-ENTRY-X TO W-ARG-RETURNED-NO > 03100000 > 031100 > 03110000 > 031200 MOVE W-ARG-DATA(W-ARG-ENTRY-X) TO W-REPLY-DATA > 03120000 > 031300 > 03130000 > 031400* THE RETURNED PARAMETER MAY BE OF DIFFERENT LENGTH. > 03140000 > 031500* WE TRIM OFF TRAILING BLANKS, BUT DO NOT LET THE LENGTH > 03150000 > 031600* OF THE RETURNED PARAMETER FALL BELOW WHAT IT WAS ON INPUT > 03160000 > 031700* EVEN IF THIS DOES LEAVE TRAILING BLANKS > 03170000 > 031800* > 03180000 > 031900 COMPUTE W-REPLY-LEN = (LENGTH OF W-REPLY-DATA) > 03190000 > 032000 PERFORM UNTIL W-REPLY-LEN = 1 > 03200000 > 032100 OR W-REPLY-DATA(W-REPLY-LEN:1) NOT = ' ' > 03210000 > 032200 SUBTRACT 1 FROM W-REPLY-LEN > 03220000 > 032300 END-PERFORM > 03230000 > 032400 > 03240000 > 032500* DO NOT REDUCE BELOW INPUT VALUE > 03250000 > 032600 > 03260000 > 032610* DISPLAY 'HI 05' > 03261000 > 032700 IF W-REPLY-LEN < W-ARG-LEN (W-ARG-ENTRY-X) > 03270000 > 032800 MOVE W-ARG-LEN (W-ARG-ENTRY-X) TO W-REPLY-LEN > 03280000 > 032900 END-IF > 03290000 > 032910 > 03291000 > 033000 MOVE 'V' TO W-RESULT > 03300000 > 033100 MOVE 0 TO RETURN-CODE > 03310000 > 034200 > 03420000 > 034210* DISPLAY 'HI 06' > 03421000 > 034300 GOBACK. > 03430000 > 034400 > 03440000 > 034500 Z999-ERROR. > 03450000 > 034600 > 03460000 > 034610* DISPLAY 'HI 07' > 03461000 > 034700 MOVE 12 TO RETURN-CODE > 03470000 > 034800 > 03480000 > 034900 GOBACK. > 03490000 > 035000 > 03500000 > 035100 > 03510000 > 035200 > 03520000 > 035300 END PROGRAM JLPFCAL1. > 03530000 > > END PROGRAM 'JLPFCALL'. > > > > > > > ~~~~~~~~~~~~ Andy Robertson telephone mobile 0797 0005958 home 01308 420797 > > > -----IBM Mainframe Discussion List <[email protected]> wrote: ----- > To: [email protected] > From: Ed Jaffe > Sent by: IBM Mainframe Discussion List > Date: 03/29/2013 02:10PM > Subject: Re: Linking to MVS standard linkage function from Rexx > > > On 3/29/2013 5:19 AM, Lloyd Fuller wrote: >> ... unless things have changed, Metal C does not handle C++. >> C only. I have not looked specifically at z/OS 1.13, but I do know that in >> 1.12 >> and earlier, C only. > > True in z/OS 1.13 as well. > > -- > Edward E Jaffe > Phoenix Software International, Inc > 831 Parkview Drive North > El Segundo, CA 90245 > http://www.phoenixsoftware.com/ > > ---------------------------------------------------------------------- > For IBM-MAIN subscribe / signoff / archive access instructions, > send email to [email protected] with the message: INFO IBM-MAIN > ********************************************************************** > This email is confidential and may contain copyright material of the John > Lewis Partnership. > If you are not the intended recipient, please notify us immediately and > delete all copies of this message. > (Please note that it is your responsibility to scan this message for > viruses). Email to and from the > John Lewis Partnership is automatically monitored for operational and lawful > business reasons. > ********************************************************************** > > John Lewis plc > Registered in England 233462 > Registered office 171 Victoria Street London SW1E 5NN > > Websites: http://www.johnlewis.com > http://www.waitrose.com > http://www.johnlewis.com/insurance > http://www.johnlewispartnership.co.uk > > ********************************************************************** > > ---------------------------------------------------------------------- > For IBM-MAIN subscribe / signoff / archive access instructions, > send email to [email protected] with the message: INFO IBM-MAIN ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
