| Register | FAQ | Calendar | Search | Today's Posts | Mark Forums Read |
|
#1
| |||
| |||
| Hello, I tried to compile a PL/I program under OS/360 release 21.8. However, there is some syntax error which I do not understand. I think the "logical or" operator is coded incorrectly. Could anyone please explain me what is wrong? Please see the listing below. Thank you, Andrew Makhorin //TEST JOB MSGLEVEL=(1,1),REGION=200K // EXEC PL1LFC XXPL1L EXEC PGM=IEMAA,PARM='LOAD,NODECK',REGION=52K 10000001 XXSYSPRINT DD SYSOUT=A 20000001 XXSYSLIN DD DSNAME=&&LOADSET,DISP=(MOD,PASS),UNIT=SYSSQ, *30000001 XX SPACE=(80, (250,100)) 40000001 XXSYSUT3 DD DSNAME=&&SYSUT3,UNIT=SYSDA,SPACE=(80,(250,250)), *46000019 XX DCB=BLKSIZE=80 52000019 XXSYSUT1 DD DSNAME=&&SYSUT1,UNIT=SYSDA,SPACE=(1024,(60,60),,CO NTIG),*60000001 XX SEP=(SYSUT3,SYSLIN),DCB=BLKSIZE=1024 70000019 //PL1L.SYSIN DD * // IEF236I ALLOC. FOR TEST PL1L IEF237I 352 ALLOCATED TO SYSPRINT IEF237I 151 ALLOCATED TO SYSLIN IEF237I 352 ALLOCATED TO SYSUT3 IEF237I 352 ALLOCATED TO SYSUT1 IEF237I 150 ALLOCATED TO SYSIN PAGE 1 VERSION 5.5 OS/360 PL/I COMPILER (F) DATE 80.034 PL/I F COMPILER OPTIONS SPECIFIED ARE AS FOLLOWS-- LOAD,NODECK THE COMPLETE LIST OF OPTIONS USED DURING THIS COMPILATION IS-- EBCDIC CHAR60 NOMACRO SOURCE2 NOMACDCK COMP SOURCE NOATR NOXREF NOEXTREF NOLIST LOAD NODECK FLAGW NOSTMT SIZE=0198496 LINECNT=050 OPT=01 SORMGIN=(002,072) NOEXTDIC NONEST OPLIST SYNCHKT *OPTIONS IN EFFECT* EBCDIC,CHAR60,NOMACRO,SOURCE2,NOMACDCK,COMP,SOURCE ,NOATR,NOXREF,NOEXTREF,NOLIST,LOAD, *OPTIONS IN EFFECT* NODECK,FLAGW,NOSTMT,SIZE=0198496,LINECNT=050,OPT=0 1,SORMGIN=(002,072),NOEXTDIC, *OPTIONS IN EFFECT* NONEST,OPLIST,SYNCHKT DISTWE: PROC(P,KAO,FO,WE,S,T,ET,W); PAGE 2 1 DISTWE: PROC(P,KAO,FO,WE,S,T,ET,W); 2 DCL (P,KAO(*),FO(*),S,T,RP(P),I,J) BIN FIXED; 3 DCL (WE(*),W,WR(P)) BIN FLOAT; 4 DCL 1 ET(*), 2 EP BIN FIXED, 2 EQ BIN FIXED; 5 ET=0; EP=0; RP=0; RP(S)=1; WR=0; 10 M: J=0; W=10**6; 12 DO I=1 TO P; IF RP(I)=1 THEN IF WR(I)<W THEN 15 DO;J=I;W=WR(I); 18 END; 19 END; 20 * IF J=T ! J=0 THEN RETURN; RP(J)=-1; 24 DO I=KAO(J) TO KAO(J+1)-1; 25 IF WE(I)<10**6 THEN IF RP(FO(I))=0 THEN 27 DO; RP(FO(I))=1; WR(FO(I))=WR(J)+WE(I); 30 ET(FO(I)).EP=J; ET(FO(I)).EQ=I; 32 END; 33 ELSE 33 DO; W=WR(J)+WE(I); IF W<WR(FO(I)) THEN 36 DO; WR(FO(I))=W; ET(FO(I)).EP=J; 39 ET(FO(I)).EQ=I; 40 END; 41 END; 42 END; 43 GO TO M; 44 END DISTWE; DISTWE: PROC(P,KAO,FO,WE,S,T,ET,W); PAGE 3 STORAGE REQUIREMENTS. ---------------------- THE STORAGE AREA (IN STATIC) FOR THE PROCEDURE LABELLED DISTWE IS 272 BYTES LONG. THE PROGRAM CSECT IS NAMED DISTWE AND IS 1358 BYTES LONG. THE STATIC CSECT IS NAMED *DISTWEA AND IS 416 BYTES LONG. *STATISTICS* SOURCE RECORDS = 27,PROG TEXT STMNTS = 44,OBJECT BYTES = 1358 DISTWE: PROC(P,KAO,FO,WE,S,T,ET,W); PAGE 4 TABLE OF OFFSETS AND STATEMENT NUMBERS WITHIN PROCEDURE DISTWE OFFSET (HEX) 0000 00D8 0134 017C 01B2 01C8 0200 0206 0222 0236 024C 0268 0268 026E 027E 027E 0292 02A2 02A8 02AE 02C0 STATEMENT NO 1 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 OFFSET (HEX) 0300 032E 0354 0354 036A 03AA 03D2 03F6 03FA 03FA 0426 044A 044A 0462 048A 04AE 04AE 04B2 04C6 04CA STATEMENT NO 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 DISTWE: PROC(P,KAO,FO,WE,S,T,ET,W); PAGE 5 COMPILER DIAGNOSTICS. ERRORS. IEM0097I 19 INVALID CHARACTER HAS BEEN REPLACED BY BLANK IN OR FOLLOWING STATEMENT NUMBER 19 . THE CONTAINING OUTPUT RECORD IS MARKED BY AN ASTERISK. IEM0074I 20 THEN INSERTED IN IF STATEMENT NUMBER 20 IEM0096I 21 SEMI-COLON NOT FOUND WHEN EXPECTED IN STATEMENT NUMBER 21 . ONE HAS BEEN INSERTED. IEM0095I 22 LABEL ON STATEMENT NUMBER 22 HAS NO COLON. ONE IS ASSUMED. WARNINGS. IEM0526I 1 OPTION MAIN HAS NOT BEEN SPECIFIED FOR THE EXTERNAL PROCEDURE, STATEMENT NUMBER 1 IEM0764I ONE OR MORE FIXED BINARY ITEMS OF PRECISION 15 OR LESS HAVE BEEN GIVEN HALFWORD STORAGE. THEY ARE FLAGGED '*********' IN THE XREF/ATR LIST. END OF DIAGNOSTICS. AUXILIARY STORAGE WILL NOT BE USED FOR DICTIONARY WHEN SIZE = 120K COMPILE TIME .01 MINS DISTWE: PROC(P,KAO,FO,WE,S,T,ET,W); PAGE 6 ELAPSED TIME .01 MINS IEF142I - STEP WAS EXECUTED - COND CODE 0008 IEF285I SYS80034.T024515.SV000.TEST.R0000001 SYSOUT IEF285I VOL SER NOS= WORK02. IEF285I SYS80034.T024515.RV000.TEST.LOADSET PASSED IEF285I VOL SER NOS= WORK01. IEF285I SYS80034.T024515.RV000.TEST.SYSUT3 DELETED IEF285I VOL SER NOS= WORK02. IEF285I SYS80034.T024515.RV000.TEST.SYSUT1 DELETED IEF285I VOL SER NOS= WORK02. IEF285I SYS80034.T024515.RV000.TEST.S0000002 SYSIN IEF285I VOL SER NOS= SYSRES. IEF285I SYS80034.T024515.RV000.TEST.S0000002 DELETED IEF285I VOL SER NOS= SYSRES. IEF285I SYS80034.T024515.RV000.TEST.LOADSET DELETED IEF285I VOL SER NOS= WORK01. |
|
#2
| |||
| |||
| Mao wrote: > Hello, > > I tried to compile a PL/I program under OS/360 release 21.8. However, > there is some syntax error which I do not understand. I think the > "logical or" operator is coded incorrectly. Could anyone please > explain > me what is wrong? Please see the listing below. > Looks to me like you're using the "bang" character (!) in place of "or" (|). I believe some compilers allow this, but the F compiler is pretty picky. |
|
#3
| |||
| |||
| > > Looks to me like you're using the "bang" character (!) in place of "or" > (|). I believe some compilers allow this, but the F compiler is pretty > picky. Thank you for your response. I tried both ! (excalamtion mark) and | (vertical dash); the error is the same. Maybe there should be [ or ] ? (I forgot to say that I am using Hercules to simulate System/360.) |
|
#4
| |||
| |||
| Mao wrote: >>Looks to me like you're using the "bang" character (!) in place of "or" >>(|). I believe some compilers allow this, but the F compiler is pretty >>picky. > > > Thank you for your response. I tried both ! (excalamtion mark) and | > (vertical dash); the error is the same. Maybe there should be [ or ] ? > (I forgot to say that I am using Hercules to simulate System/360.) It should be EBCDIC '4F'x. Hercules complicates things a bit. The translation may depend on what tn3270 program you're using. You're cot using the 48-character set, are you? I didn't think to look at your options. You want CHAR60 instead of CHAR48. |
|
#5
| |||
| |||
| Peter Flass wrote: > Mao wrote: > >>Looks to me like you're using the "bang" character (!) in place of "or" > >>(|). I believe some compilers allow this, but the F compiler is pretty > >>picky. > > > > > > Thank you for your response. I tried both ! (excalamtion mark) and | > > (vertical dash); the error is the same. Maybe there should be [ or ] ? > > (I forgot to say that I am using Hercules to simulate System/360.) > > It should be EBCDIC '4F'x. Hercules complicates things a bit. The > translation may depend on what tn3270 program you're using. You're cot > using the 48-character set, are you? I didn't think to look at your > options. You want CHAR60 instead of CHAR48. Thank you very much. Using a brute force approach and IEBPTPCH utility I found a code which is translated to EBCDIC 0x4F; it is ASCII 0xD7 (215 in dec). And now my PL/I program is compiled without errors. (However, the choice of Hercules' developers seems to me not reasonable, because 0xD7 is non-standard ASCII code.) |
|
#6
| |||
| |||
| Mao wrote: > > Peter Flass wrote: > >>Mao wrote: >> >>>>Looks to me like you're using the "bang" character (!) in place of "or" >>>>(|). I believe some compilers allow this, but the F compiler is pretty >>>>picky. >>> >>> >>>Thank you for your response. I tried both ! (excalamtion mark) and | >>>(vertical dash); the error is the same. Maybe there should be [ or ] ? >>>(I forgot to say that I am using Hercules to simulate System/360.) >> >>It should be EBCDIC '4F'x. Hercules complicates things a bit. The >>translation may depend on what tn3270 program you're using. You're cot >>using the 48-character set, are you? I didn't think to look at your >>options. You want CHAR60 instead of CHAR48. > > > Thank you very much. Using a brute force approach and IEBPTPCH utility > I found a code which is translated to EBCDIC 0x4F; it is ASCII 0xD7 > (215 in dec). And now my PL/I program is compiled without errors. > (However, the choice of Hercules' developers seems to me not > reasonable, because 0xD7 is non-standard ASCII code.) It is strange, but as I said it's your terminal emulator, not Hercules (presumably). Many emulators also offer the opportunity to customize the translations used. |
|
#7
| |||
| |||
| "Mao" <mao@gnu.org> wrote in message news:b1164f79-dd92-44b1-b8c6-437d2297ec95@i72g2000hsd.googlegroups.com... > > Hello, > > I tried to compile a PL/I program under OS/360 release 21.8. However, > there is some syntax error which I do not understand. I think the > "logical or" operator is coded incorrectly. That's curious, because the error message says that the offending character has been replaced by a blank. What you also needed to show us is the original source line. Have you tried re-typing the entire line? (and the one before, since the compiler cites "in or following stmt 19") Mightn't hurt to re-type the following line also, making 3 altogether. > 19 END; > 20 * IF J=T ! J=0 THEN RETURN; RP(J)=-1; > 24 DO I=KAO(J) TO KAO(J+1)-1; > IEM0097I 19 INVALID CHARACTER HAS BEEN REPLACED BY BLANK IN > OR > FOLLOWING STATEMENT NUMBER 19 . THE > CONTAINING OUTPUT RECORD IS MARKED BY AN > ASTERISK. |
|
#8
| |||
| |||
| "Peter Flass" <Peter_Flass@Yahoo.com> wrote in message news:47a5bc22$0$22608$4c368faf@roadrunner.com... > It should be EBCDIC '4F'x. Hercules complicates things a bit. The > translation may depend on what tn3270 program you're using. You're cot > using the 48-character set, are you? I didn't think to look at your > options. You want CHAR60 instead of CHAR48. The listing of options says "CHAR60", so that's not the problem. |
|
#9
| |||
| |||
| Mao wrote: > > Peter Flass wrote: > >>Mao wrote: >> >>>>Looks to me like you're using the "bang" character (!) in place of "or" >>>>(|). I believe some compilers allow this, but the F compiler is pretty >>>>picky. >>> >>> >>>Thank you for your response. I tried both ! (excalamtion mark) and | >>>(vertical dash); the error is the same. Maybe there should be [ or ] ? >>>(I forgot to say that I am using Hercules to simulate System/360.) >> >>It should be EBCDIC '4F'x. Hercules complicates things a bit. The >>translation may depend on what tn3270 program you're using. You're cot >>using the 48-character set, are you? I didn't think to look at your >>options. You want CHAR60 instead of CHAR48. > > > Thank you very much. Using a brute force approach and IEBPTPCH utility > I found a code which is translated to EBCDIC 0x4F; it is ASCII 0xD7 > (215 in dec). And now my PL/I program is compiled without errors. > (However, the choice of Hercules' developers seems to me not > reasonable, because 0xD7 is non-standard ASCII code.) Have you tried ASCII 0x7C for vertical bar? Also, for the not sign, the ASCII code should be 0xAC. Bob Lidral lidral at alum dot mit dot edu |
|
#10
| |||
| |||
| > It is strange, but as I said it's your terminal emulator, not Hercules > (presumably). Many emulators also offer the opportunity to customize > the translations used. I do not think it depends on a terminal emulator (I am using windows telnet). Looking through the hercules code I found the translate table used, which, in fact, maps ASCII 0xD7 to EBCDIC 0x4F and vice versa. Moreover, there already was a discussion on the Hercules list concerning this issue. As I understand such strange coding for PL/I "logical or" is used to allow using a "natural" coding in C programs. |
![]() |
| Thread Tools | |
| Display Modes | |
In an effort to better serve ads to our visitors, cookies are used on objectmix.com. For more information, check out our Privacy Policy.