home *** CD-ROM | disk | FTP | other *** search
- /*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 NUM<LO | NUM>HI 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;
-
-