/*PROGRAM GETD92 - GET A DECIMAL NUMBER. PROGRAMMER ROBERT M. WHITE DATE WRITTEN APRIL 10, 1981 PURPOSE THIS ROUTINE GETS A DECIMAL NUMBER FROM THE TERMINAL OPERATOR, CONVERTS IT TO INTERNAL FORM, AND VALIDATES IT. CONTROL IS RETURNED ONLY WHEN A VALID NUMBER HAS BEEN ENTERED. INPUT 13-BYTE 9-DIGIT NUMBER W/2-DECIMAL PLACES OUTPUT 5-BYTE 9-DIGIT NUMBER W/2-DECIMAL PLACES (PACKED) RETURN CODES 0=SUCCESSFUL COMPLETION REMARKS 1. ALLOW 13 BYTES ON THE SCREEN FOR THE NUMBER. */ GETD92: PROC (X,Y,NUM,LO,HI,RTN_COD); DCL X BIN(7), /* ROW */ Y BIN(7), /* COLUMN */ NUM DEC(9,2), /* RETURNED NUMBER */ LO DEC(9,2), /* LOW RANGE CHECK */ HI DEC(9,2), /* HIGH RANGE CHECK */ RTN_COD BIN(7); /* RETURN CODE */ DCL V CHAR(13); DCL VW CHAR(13) VARYING; DCL GETSTR ENTRY(BIN(7),BIN(7),BIN(7),PTR,BIN(7)); DCL PUTERR ENTRY(CHAR(80) VARYING); DCL PUTD92 ENTRY(BIN(7),BIN(7),PTR); /* GET THE NUMBER. */ ON ERROR /* HANDLE CONVERSION ERRORS. */ BEGIN; GOTO CONV_ERROR; END; ON FIXEDOVERFLOW /* HANDLE CONVERSION ERRORS. */ BEGIN; GOTO CONV_ERROR; END; START: CALL GETSTR(X,Y,LENGTH(V),ADDR(V),RTN_COD); /* GET IT. */ VW=V; DO WHILE(SUBSTR(VW,LENGTH(VW),1)=' '); /* REMOVE TRAILING BLANKS. */ VW=SUBSTR(VW,1,LENGTH(VW)-1); END; /* VALIDATE THE NUMBER. */ NUM = DEC(VW,9,2); IF LO=0 & HI=0 THEN /* DON'T RANGE CHECK. */ ; ELSE IF NUMHI THEN DO; SIGNAL ERROR(1); END; /* REWRITE DATA ON SCREEN TO CLEAN IT UP. */ CALL PUTD92(X,Y,ADDR(NUM)); RETURN; /* HANDLE ERROR CONDITIONS. */ CONV_ERROR: CALL PUTERR('*** INVALID NUMBER ***'); GOTO START; /* RETURN TO CALLER. */ END GETD92;