61 PL/I OPTIMIZING COMPILER MPERAND:PROCEDURE OPTIONS(MAIN); STMT LEV NT 53 2 2 J = J + 1; 54 2 2 END; 55 2 1 COEF = SUBSTR(COEF,1,J-1) II '.'; 56 2 1 END; 57 2 0 END; 58 1 0 ROWFUNC:PROCEDURE(ROITYPE)RETU.NS( CAACTER(1)); 59 2 0 DECLARE(ROWTYPE)CHARACTER(*)VARYING; 60 2 0 DECLARE(TYPE)CHARACTER(1); 61 2 0 IF ROWTYPE 'OBJ' THEN TYPE = '$'; 62 2 0 ELSE IF (ROWTYPE = 'G') I (ROWTYPE = ') THEN TYPE = '-'; 63 2 0 ELSE IF BOWTYPE = 'L' THEN TYPE= '&'; 64 2 0 ELSE IF ROWTYPE = 'E' THEN TYPE = '0'; 65 2 0 RETURN(TYPE); 66 2 0 END; 67 1 0 PROCESS COEFFICIENT:PROCEDURE; 68 2 0 DECLARE(1)FIXED; 69 2 0 POSITION = 1; 70 2 0 ENDPOSITION = 1; 71 2 0 CALL DROPBLANKS; 72 2 0 ROWNAME = PULLFIELD('='); 73 2 0 CALL DROPBLANKS; 74 2 0 ROWTYPE = PULLFIELD(','); 75 2 0 CALL DROPBIANKS; 76 2 0 COLNAAlE = PULLFIELD(','); 77 2 0 CALL DROPBLAHKS; 78 2 0 COLTYPE = PULLFIELD(','); 79 2 0 CALL DOPBLAN'KS; 80 2 O COEF = SUBSTR(CARD,POSITION,10); 81 2 0 CALL DECIMAL POINT; 82 2 0 IF ROWTYPE = 'RHS' THEN DO; 83 2 1 NR = NR + 1; 84 2 1 RHS(NR) = ROWNAM.EI iCOEF; 85 2 1 END; 86 2 0 ELSE DO; 87 2 1 IF ROWTYPE = 'OBJ' THEN CALL REVERSECOEF SIGN; 88 2 1 NC = NC + 1; 89 2 1 COLUMNS(NC) = COLNAMEj ROWNAMEI COEF; 90 2 0 END; 91 2 0 IF (R"iT'E'= 'RIIS') & FLAGG = 'FALSE') THEN DO; 92 2 1 I = 1; 93 2 1 DO WHILE ((I< M) & (ROWNAME SUB3''R(ROWS(I),2))); 94 2 2 1 = + 1; 95 2 2 END; 96 2 1 IF ROWNAME -= SUBSTR(ROWS(I),2) THEN DO; 97 2 2 M = M + 1; 98 2 2 ROWS(M) = ROWFUNC(ROWTYPE)I IROWNA~E; 99 2 2 END; 100 2 1 END; 101 2 0 END; Figure 12.--Source listing for MPSRAND documentation--continued.