/*******************************************************************/ 00050003 /* @Y30LB32*/ 00100003 /* PROCEDURE NAME - CKCSNLEN (FSR SUBROUTINE) @Y30LB32*/ 00150003 /* @Y30LB32*/ 00200003 /* FUNCTION - CHECKS LENGTH OF CARTRIDGE SERIAL NUMBER @Y30LB32*/ 00250003 /* IF THE LENGTH OF THE CSN IS LESS THEN ELEVEN,@Y30LB32*/ 00300003 /* ISSUES MESSAGE IDC2099I, IF CSN IS ELEVEN @Y30LB32*/ 00350003 /* A BLANK CHARACTER IS INSERTED AS THE FOURTH @Y30LB32*/ 00400003 /* CHARACTER @Y30LB32*/ 00450003 /* @Y30LB32*/ 00500003 /* INPUT - CSN, LENGTH OF CSN @Y30LB32*/ 00550003 /* @Y30LB32*/ 00600003 /* OUTPUT - CSN, RETURN CODE IN REGISTER 15(RETURN CODE @Y30LB32*/ 00650003 /* ZERO IF CSN VALID AND FOUR IF CSN INVALID) @Y30LB32*/ 00700003 /* @Y30LB32*/ 00750003 /********************************************************************/ 00800003 CKCSNLEN: /*@Y30LB32*/ 00850003 PROCEDURE(CKCSNVAL, /* CSN VALUE @Y30LB32*/ 00900003 CKLENGTH) /* LENGTH OF CSN @Y30LB32*/ 00950003 OPTIONS(NOSAVE,NOSAVEAREA); /*@Y30LB32*/ 01000003 01050003 /* DECLARATIONS FOR CKCSNLEN SUBROUTINE @Y30LB32*/ 01100003 DCL CKCSNVAL CHAR(12); /* CSN VALUE @Y30LB32*/ 01150003 DCL CKCSNADJ CHAR(12); /* FOR ADJUSTED CSN @Y30LB32*/ 01200003 DCL CKLENGTH FIXED(8); /* LENGTH OF CSN @Y30LB32*/ 01250003 DCL CKRETPTR PTR(31); /* SAVE RETURN ADDR @Y30LB32*/ 01300003 DCL CKSAVPTR PTR(31); /* TO SAVE POINTER @Y30LB32*/ 01350003 DCL CKPRTTAB CHAR(20) BDY(WORD); /* PRINT TABLE AREA @Y30LB32*/ 01400003 DCL CKCOND FIXED(15); 01450003 /* DECLARATIONS OF CONSTANTS @Y30LB32*/ 01500003 DCL CKBLANK CHAR(1) CONSTANT(' '); /* BLANK TO INSERT IN @Y30LB32*/ 01550003 /* CSN @Y30LB32*/ 01600003 DCL CKELEVEN BIT(8) CONSTANT('0B'X);/* TO CHECK LENGTH @Y30LB32*/ 01650003 /* OF CSN AGAINST @Y30LB32*/ 01700003 DCL CKMSGID CHAR(3) CONSTANT('CM0');/* MODULE MESSAGE ID @Y30LB32*/ 01750003 DCL MSG2099I PTR(8) CONSTANT(1); /* INVALID CSN MSG @Y30LB32*/ 01800003 @EJECT; 01850003 /* THIS IS THE START OF THE CHECK CSN SUBROUTINE @Y30LB32*/ 01900003 /* THE CALLERS RETURN ADDRESS IS SAVED @Y30LB32*/ 01950003 CKRETPTR = REG14; /*@Y30LB32*/ 02000003 UTRACE = 'CKLN'; /*@Y30LB32*/ 02050003 /* SAVE POINTER TO CALLERS PRINT TABLE, @Y30LB32*/ 02100003 /* INITIALIZE THE PRINT ARGUMENT LIST @Y30LB32*/ 02150003 /* AND CONDITION CODE TO ZEROES @Y30LB32*/02200003 CKSAVPTR = DDSTRU; /*@Y30LB32*/ 02250003 DDSTRU = ADDR(CKPRTTAB); /*@Y30LB32*/ 02300003 CKPRTTAB = NULLAREA; /*@Y30LB32*/ 02400003 CKCOND = NULLAREA; /*@Y30LB32*/ 02450003 /* CSN IS CHECKED FOR LENGTH OF ELEVEN CHARACTERS @Y30LB32*/ 02500003 /* OR MORE @Y30LB32*/ 02550003 IF CKLENGTH >= CKELEVEN THEN /*@Y30LB32*/ 02600003 /* CSN IS CHECKED FOR LENGTH OF ELEVEN AND IF IT IS @Y30LB32 02650003 ELEVEN A BLANK CHARACTER IS INSERTED AS FOURTH @Y30LB32 02700003 CHARACTER @Y30LB32*/ 02750003 IF CKLENGTH = CKELEVEN THEN /*@Y30LB32*/ 02800003 DO; /*@Y30LB32*/ 02850003 CKCSNADJ(4:4) = CKBLANK; /*@Y30LB32*/ 02900003 CKCSNADJ(5:12) = CKCSNVAL(4:11); /*@Y30LB32*/ 02950003 CKCSNVAL(4:12) = CKCSNADJ(4:12); /*@Y30LB32*/ 03000003 END; /*@Y30LB32*/ 03050003 ELSE; /*@Y30LB32*/ 03100003 /* IF CSN IS LESS THEN ELEVEN CHARACTERS ERROR @Y30LB32*/ 03150003 /* MESSAGE IDC2099I IS WRITTEN AND CONDITION CODE SET @Y30LB32*/ 03200003 ELSE /*@Y30LB32*/ 03250003 DO; /*@Y30LB32*/ 03300003 DARGSMOD = CKMSGID; /*@Y30LB32*/ 03350003 DARGSENT = MSG2099I; /*@Y30LB32*/ 03400003 DARGDBP = ADDR(CKCSNVAL); /*@Y30LB32*/ 03450003 DARGILP = LENGTH(CKCSNVAL); /*@Y30LB32*/ 03500003 DARGRETP = NULLAREA; /*@Y30LB32*/ 03550003 03600003 UPRINT (GDTTBL,PRTFILE,DDSTRU); /*@Y30LB32*/ 03650003 03700003 CKCOND = RCFAIL; /*@Y30LB32*/ 03750003 END; /*@Y30LB32*/ 03800003 /* RESTORE PRINT AREA POINTER AND RETURN ADDRESS AND @Y30LB32*/ 03850003 /* RETURN CONTROL TO CALLING FSR @Y30LB32*/ 03900003 DDSTRU = CKSAVPTR; /*@Y30LB32*/ 03950003 REG14 = CKRETPTR; /*@Y30LB32*/ 04000003 RETURN CODE(CKCOND); /*@Y30LB32*/ 04050003 END CKCSNLEN; /*@Y30LB32*/ 04100003