home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol049
/
getd92.pli
< prev
next >
Wrap
Text File
|
1984-04-29
|
2KB
|
76 lines
/*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;