quest2008
New User
Joined: 12 Jun 2008 Posts: 22 Location: bangalore
|
|
|
|
Hello guys,
I am getting MAC CC =12 for the following PLI prog.
The problem is with the logical operator 'Not equal' is not supporting in the system.The compiler prog IEL0AA.
Can anybody tell me how can i handle this.
Thanks.
TEXT IN OR FOLLOWING THIS STATEMENT CONTAINS INVALID CHARACTER'LEGAL_DEPARTMENTS)'. 'IF
VERIFY (DEPT,LEGAL_DEPARTMENTS) ^' IGNORED.
STATEMENT BEGINS WITH INVALID SYNTAX. '= 0' IGNORED.
STATEMENT BEGINS WITH INVALID SYNTAX. 'THEN DO' IGNORED.
INVALID CHARACTER AFTER 'E > 6)) | (DEPT' SET TO A BLANK.
INVALID CHARACTER AFTER ''P' & DISCOUNT_CODE' SET TO A BLANK.
LABEL REFERENCED BY 'END' STATEMENT CANNOT BE MATCHED. REFERENCE IGNORED.
LOGICAL END OF PROGRAM FOUND BEFORE END OF SOURCE TEXT. STATEMENT IGNORED.
VALIDTE:PROCEDURE OPTIONS(MAIN);
DCL AMOUNT FIXED DEC(6,2);
DCL CUSTOMER# CHAR(6);
DCL DEPT CHAR(1);
DCL DISCOUNT_CODE FIXED DEC(1);
DCL ITEM# FIXED DEC(8);
DCL LEGAL_DEPARTMENTS CHAR(7) INIT('AFPWZ5*');
DCL MORE_RECORDS BIT(1) INIT ('1'B);
DCL NO BIT(1) INIT ('0'B);
DCL ORDER# CHAR(4);
DCL PRICE FIXED DEC(5,2);
DCL QUANTITY FIXED DEC(5);
DCL SAVE_CUSTOMER# CHAR(6);
DCL SAVE_ORDER# CHAR(4);
DCL SAVE_SEQUENCE# FIXED DEC(3);
DCL SEQUENCE# FIXED DEC(3);
DCL SIZE_ERROR BIT(1);
DCL TOTAL FIXED DEC(9,2);
DCL YES BIT(1) INIT('1'B);
DCL (ONCHAR,ONSOURCE,VERIFY) BUILTIN;
IF VERIFY (DEPT,LEGAL_DEPARTMENTS) ^ = 0 THEN
DO;
PUT SKIP LIST('INVALID DEPT CODE = ' || DEPT);
ERROR_RECORD = YES;
END;
IF (DEPT = 'P' & (DISCOUNT_CODE < 1 | DISCOUNT_CODE > 6)) |
(DEPT ^ = 'P' & DISCOUNT_CODE ^ = 0) THEN
DO;
PUT SKIP LIST('SEQQUENCE NUMBER ERROR','PREVIOUS SEQUENCE# = '
|| SAVE_SEQUENCE#,'NEW SEQUENCE# = ' ||
SEQUENCE#);
SAVE_SEQUENCE# = SEQUENCE#;
ERROR_RECORD = YES;
END;
Complete program.
VALIDTE:PROCEDURE OPTIONS(MAIN);
DCL AMOUNT FIXED DEC(6,2);
DCL CUSTOMER# CHAR(6);
DCL DEPT CHAR(1);
DCL DISCOUNT_CODE FIXED DEC(1);
DCL ITEM# FIXED DEC(8);
DCL LEGAL_DEPARTMENTS CHAR(7) INIT('AFPWZ5*');
DCL MORE_RECORDS BIT(1) INIT ('1'B);
DCL NO BIT(1) INIT ('0'B);
DCL ORDER# CHAR(4);
DCL PRICE FIXED DEC(5,2);
DCL QUANTITY FIXED DEC(5);
DCL SAVE_CUSTOMER# CHAR(6);
DCL SAVE_ORDER# CHAR(4);
DCL SAVE_SEQUENCE# FIXED DEC(3);
DCL SEQUENCE# FIXED DEC(3);
DCL SIZE_ERROR BIT(1);
DCL TOTAL FIXED DEC(9,2);
DCL YES BIT(1) INIT('1'B);
DCL (ONCHAR,ONSOURCE,VERIFY) BUILTIN;
ON ENDFILE(SYSIN)
MORE_RECORDS = NO;
ON SIZE
SIZE_ERROR = YES;
ON CONVERSION
BEGIN;
PUT SKIP LIST('INVALID NUMERIC FIELD = ',ONSOURCE);
ONCHAR = '0';
ERROR_RECORD = YES;
END;
CALL INITIALIZATION;
GET FILE(SYSIN) LIST(CUSTOMER#,ORDER#,SEQUENCE#,DEPT,DISCOUNT_CODE,
ITEM#,QUANTITY,PRICE);
SAVE_CUSTOMER# = CUSTOMER;
SAVE_ORDER# = ORDER#;
SAVE_SEQUENCE# = 0;
DO WHILE(MORE_RECORDS);
IF CUSTOMER# = SAVE_CUSTOMER# & ORDER# = SAVE_ORDER THEN
SAVE_SEQUENCE = SAVE_SEQUENCE + 1;
ELSE
DO;
CALL VALIDATE_TOTAL;
SAVE_CUSTOMER# = CUSTOMER;
SAVE_ORDER# = ORDER#;
SAVE_SEQUENCE# = 1;
END;
CALL VALIDATE_INPUT_FIELDS;
CALL COMPUTE_AND_TEST_AMOUNT;
IF ERROR_RECORD THEN
DO;
CALL PRINT_RECORD;
ERROR_RECORD = NO;
END;
GET FILE(SYSIN) LIST(CUSTOMER#,ORDER#,SEQUENCE#,DEPT,DISCOUNT_CODE,
ITEM#,QUANTITY,PRICE);
END;
CALL VALIDATE_TOTAL;
PUT SKIP(3) LIST ('ALL DATA HAS BEEN ROCESSED');
COMPUTE_AND_TEST_AMOUNT:PROC;
AMOUNT = PRICE * QUANTITY;
IF SIZE_ERROR THEN
DO;
PUT SKIP LIST ('PRICE * QUANTITY EXCEEDS MAXIMUM AMOUNT',
PRICE,QUANTITY);
AMOUNT = 0;
SIZE_ERROR = NO;
ERROR_RECORD = YES;
END;
TOTAL = TOTAL + AMOUNT;
END COMPUTE_AND_TEST_AMOUNT;
INITIALIZATION:PROC;
ERROR_RECORD = NO;
SIZE_ERROR = NO;
TOTAL = 0;
END INITIALIZATION;
PRINT_RECORD:PROC;
PUT SKIP LIST(CUSTOMER# || ' ' || ORDER# || ' ' ||
SEQUENCE || ' ' || DEPT || ' ' || DISCOUNT_CODE
||' ' || ITEM# || ' ' || QUANTITY || PRICE);
PUT SKIP(2) LIST((120) '*');
PUT SKIP(3);
END PRINT_RECORD;
VALIDATE_INPUT_FIELDS:PROC;
IF VERIFY (DEPT,LEGAL_DEPARTMENTS) ^ = 0 THEN
DO;
PUT SKIP LIST('INVALID DEPT CODE = ' || DEPT);
ERROR_RECORD = YES;
END;
IF (DEPT = 'P' & (DISCOUNT_CODE < 1 | DISCOUNT_CODE > 6)) |
(DEPT ^ = 'P' & DISCOUNT_CODE ^ = 0) THEN
DO;
PUT SKIP LIST('SEQQUENCE NUMBER ERROR','PREVIOUS SEQUENCE# = '
|| SAVE_SEQUENCE#,'NEW SEQUENCE# = ' ||
SEQUENCE#);
SAVE_SEQUENCE# = SEQUENCE#;
ERROR_RECORD = YES;
END;
END VALIDATE_INPUT_FIELDS;
VALIDATE_TOTAL:PROC;
IF TOTAL < 25 THEN
PUT SKIP LIST ('TOTAL IS BELOW MINIMUM', TOTAL,'CUSTOMER# = ' ||
SAVE_CUSTOMER#,'ORDER# = ' || SAVE-ORDER#);
TOTAL = 0;
END VALIDATE_TOTAL;
END VALIDTE; |
|
Robert Sample
Global Moderator
Joined: 06 Jun 2008 Posts: 8696 Location: Dubuque, Iowa, USA
|
|
|
|
Difficult to tell since you didn't post as CODE, but the not equal operator has to be one symbol ^= instead ^ =; get rid of the space between the ^ and the = and try again. |
|