IDENTIFICATIONDIVISION. * PROGRAM-ID. GETNUMT. * DATE-WRITTEN. 04/04/90. * * MODIFIED 10/18/97. * * ******************************* * * * * * Judson D. McClendon * * * Sun Valley Systems * * * 329 37th Court N.E. * * * Birmingham, AL 35215 * * * 205-853-8440 * * * * * ******************************* * ENVIRONMENTDIVISION. * CONFIGURATIONSECTION. * INPUT-OUTPUTSECTION. * FILE-CONTROL. * I-O-CONTROL. * DATADIVISION. * FILESECTION. * * WORKING-STORAGESECTION. * 77 WS-ESCAPE-FLAG PIC9(01) COMPVALUE0. 77 WS-ERR-MSG PIC X(30) VALUESPACES. * ****************************************************************** * * * N U M B E R W O R K A R E A * * * ****************************************************************** * 01 NUMBER-WORK-AREA. 03 NW-NBR-ERROR-FLAG PIC9(01). 03 NW-WORK-NBR. 05 NW-WORK-CHAR OCCURS25 TIMES INDEXEDBY NW-WX
NW-WLIM. 07 NW-WORK-DIGIT PIC9(01). 03 NW-DEC-PLACES PIC9(02). 03 NW-BLD-SIGN PIC S9(01). 03 NW-BLD-NBR PIC9(12)V9(06). 03 NW-BLD-NBR-SPLIT REDEFINES NW-BLD-NBR. 05 NW-BLD-INTEGER PIC9(12). 05 NW-BLD-DECIMAL PIC V9(06). 88 NW-RESULT-INTEGER VALUEZERO. 05 NW-BLD-DEC-DIGITS REDEFINES NW-BLD-DECIMAL. 07 NW-BLD-DEC-DIGIT OCCURS6 TIMES INDEXEDBY NW-BDX
NW-BDLIM PIC9(01). 03 NW-EXTRACTED-NBR PIC S9(12)V9(06). *
SCREEN SECTION. * * * I N P U T S C R E E N * 01 INPUT-SCREEN
FOREGROUND-COLOR 7
BACKGROUND-COLOR 0. 03BLANK SCREEN LINE01COLUMN31VALUE"G E T N U M B E R". * 03LINE03COLUMN01VALUE"Enter Number: ". 03PIC X(25) USING NW-WORK-NBR. * * * O U T P U T S C R E E N * 01 OUTPUT-SCREEN
FOREGROUND-COLOR 7
BACKGROUND-COLOR 0. * 03LINE05COLUMN01VALUE" Result: ". 03PIC -(13).9(06) FROM NW-EXTRACTED-NBR. 03COLUMN41 PIC X(30) FROM WS-ERR-MSG.
/ PROCEDUREDIVISION. * * * C O N T R O L S E C T I O N * 000000-CONTROL. * MOVESPACESTO NW-WORK-NBR. DISPLAY INPUT-SCREEN. * PERFORM000100-PROCESS
THRU 000100-EXIT UNTIL (WS-ESCAPE-FLAG = 1). * 000000-EXIT. STOPRUN. * * P R O C E S S * 000100-PROCESS. * ACCEPT INPUT-SCREEN ON ESCAPE MOVE1TO WS-ESCAPE-FLAG GOTO000100-EXIT. * PERFORM003000-GET-NBR
THRU 003000-EXIT. * IF (NW-NBR-ERROR-FLAG = 1) MOVE"NUMBER INVALID"TO WS-ERR-MSG ELSE MOVESPACESTO WS-ERR-MSG. * DISPLAY OUTPUT-SCREEN. * 000100-EXIT. EXIT. * ****************************************************************** * * * G E T N U M B E R * * * * Judson D. McClendon * * Sun Valley Systems * * 329 37th Court NE * * Birmingham, AL 35215 * * 205/853-8440 * * * * CONVERTS A NUMBER IN FREE FORMAT DISPLAY FORM: * * FOR EXAMPLE: * * * * "999,999,999,999.999999 " * * "-999,999,999,999.999999" * * " -23.61 " * * " 4" * * "0 " * * " .000001 " * * "0000000000123456789.10-" * * " " BLANK IS VALID = 0 * * * * INTO FIXED NUMERIC FORM: * * * * PIC S9(12)V9(06) * * * * * * USAGE: MOVE <FREE FORM NUMBER> TO NW-WORK-NBR. * * PERFORM 003000-GET-NBR * * THRU 003000-EXIT. * * * * RESULT: NW-NBR-ERROR-FLAG = 0 INPUT IS A VALID NUMBER * * 1 INPUT NOT A VALID NUMBER * * * * IF NW-NBR-ERROR-FLAG = 0 THEN: * * * * NW-EXTRACTED-NBR = NUMBER AS: PIC S9(12)V9(06) * * * * NW-DEC-PLACES = NUMBER OF DIGITS TO THE RIGHT * * OF THE DECIMAL POINT (0=NONE) * * * * NW-BLD-SIGN = +1 OR -1 AS: PIC S9(01) * * * * NW-BLD-INTEGER = INTEGER DIGITS AS: PIC 9(12) * * * * NW-BLD-DECIMAL = DECIMAL DIGITS AS: PIC V9(06) * * * ****************************************************************** * 003000-GET-NBR. * MOVE0TO NW-NBR-ERROR-FLAG. MOVEZEROTO NW-EXTRACTED-NBR. * MOVE0TO NW-DEC-PLACES. MOVEZEROTO NW-BLD-NBR. MOVE +1TO NW-BLD-SIGN. SET NW-BDX TO1. SET NW-WLIM TO25. * * ** LOCATE LEFTMOST DIGIT OF NUMBER ** * SET NW-WX TO1. SEARCH NW-WORK-CHAR WHEN NW-WORK-CHAR(NW-WX) NOT = SPACE PERFORM003010-DECODE-NBR
THRU 003010-EXIT. * IF (NW-WORK-NBR NOT = SPACES) MOVE1TO NW-NBR-ERROR-FLAG ELSE COMPUTE NW-EXTRACTED-NBR = NW-BLD-NBR * NW-BLD-SIGN. * 003000-EXIT. EXIT. * * * DECODE NUMBER * 003010-DECODE-NBR. * IF (NW-WORK-CHAR(NW-WX) = "-") MOVE -1TO NW-BLD-SIGN MOVESPACETO NW-WORK-CHAR(NW-WX) SET NW-WX UPBY1. * PERFORM003020-GET-INT-PART
THRU 003020-EXIT UNTIL (NW-WX > NW-WLIM). * SET NW-DEC-PLACES TO NW-BDX. SUBTRACT1FROM NW-DEC-PLACES. * 003010-EXIT. EXIT. * * * GET INTEGER PART OF NUMBER * 003020-GET-INT-PART. * IF (NW-WORK-CHAR(NW-WX) NUMERIC) IF (NW-BLD-INTEGER > 99999999999) SET NW-WX TO NW-WLIM ELSE COMPUTE NW-BLD-INTEGER =
NW-BLD-INTEGER * 10 + NW-WORK-DIGIT(NW-WX) MOVESPACETO NW-WORK-CHAR(NW-WX) ELSE IF (NW-WORK-CHAR(NW-WX) = ".") MOVESPACESTO NW-WORK-CHAR(NW-WX) SET NW-WX UPBY1 PERFORM003030-GET-DEC-PART
THRU 003030-EXIT UNTIL (NW-WX > NW-WLIM) ELSE IF (NW-WORK-CHAR(NW-WX) = ",") MOVESPACETO NW-WORK-CHAR(NW-WX) ELSE SET NW-WX TO NW-WLIM. * SET NW-WX UPBY1. * 003020-EXIT. EXIT. * * * GET DECIMAL PART OF NUMBER * 003030-GET-DEC-PART. * IF (NW-WORK-CHAR(NW-WX) NUMERIC) IF (NW-BDX > 6) SET NW-WX TO NW-WLIM ELSE MOVE NW-WORK-DIGIT(NW-WX) TO NW-BLD-DEC-DIGIT(NW-BDX) MOVESPACESTO NW-WORK-CHAR(NW-WX) SET NW-BDX UPBY1 ELSE IF (NW-WORK-CHAR(NW-WX) = "-") MOVE -1TO NW-BLD-SIGN MOVESPACETO NW-WORK-CHAR(NW-WX) SET NW-WX TO NW-WLIM ELSE SET NW-WX TO NW-WLIM. * SET NW-WX UPBY1. * 003030-EXIT. EXIT.
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.