* Edit Input Unsigned Integer Number Subroutine (up to 16 Pos) * ---------------------------------------------------------------- * Copyright (C) 1990-1997 by Vladimir Veytsel www.davar.net * Call ----------------------------------------------------------- * CALL 'EDITINT' USING Number-Field * Number-Length * Validity-Flag. * Parameters ----------------------------------------------------- * Number-Field - Input & output (edited) number (max 16 pos) * If input number is invalid, * then Number-Field is left unchanged. * Number-Length - Length of input number (starts from 1-st pos * of Number-Field; 16 - maximum). * Output number has the same length. * Validity-Flag - Number validity output indicator: * 'Y' if input number is valid (and edited) * 'N' if input number is invalid (unchanged) * Action --------------------------------------------------------- * If leftmost Number-Length positions of Number-Field contain * a numeric value, * then this value is right-justified in its place * by adding the appropriate number of leading zeros and * Validity-Flag is set to 'Y', * else Validity-Flag is set to 'N'. * Examples ------------------------------------------------------- * Number before: '12___' * Number after : '00012' Validity flag: Y - Number edited * Number before: '12345' * Number after : '12345' Validity flag: Y - Number edited * Number before: ' 45' * Number after : '00045' Validity flag: Y - Number edited * Number before: '__3__' * Number after : '00003' Validity flag: Y - Number edited * Number before: ' 2 4 ' * Number after : ' 2 4 ' Validity flag: N * Number before: '+2345' * Number after : '+2345' Validity flag: N * Number before: '_2.4_' * Number after : '_2.4_' Validity flag: N * Number before: ' ' * Number after : '00000' Validity flag: Y - Number edited * Number before: '00___' * Number after : '00000' Validity flag: Y - Number edited * Number before: ' 00' * Number after : '00000' Validity flag: Y - Number edited * Number before: '__0__' * Number after : '00000' Validity flag: Y - Number edited * Number before: ' 0 0 ' * Number after : ' 0 0 ' Validity flag: N * Number before: '+0000' * Number after : '+0000' Validity flag: N * Number before: '_0.0_' * Number after : '_0.0_' Validity flag: N * Notes ---------------------------------------------------------- * - Examples show number values before and after calling EDITINT * - Underscore '_' in examples stands for LOW-VALUE *----------------------------------------------------------------- IDENTIFICATION DIVISION. *----------------------------------------------------------------- PROGRAM-ID. EDITINT IS INITIAL PROGRAM. AUTHOR. Vladimir Veytsel. DATE-WRITTEN. 08/21/1990. DATE-COMPILED. 10/15/1997. *----------------------------------------------------------------- DATA DIVISION. *----------------------------------------------------------------- WORKING-STORAGE SECTION. 77 Zero-Fill PIC X(16) VALUE ZEROS. 01 Work-Number PIC X(16). 01 FILLER REDEFINES Work-Number. 02 Number-Symbol PIC X OCCURS 16 TIMES. 77 Work-Number-Temp PIC X(16). 77 Work-Length PIC 9(02) COMP. *----------------------------------------------------------------- LINKAGE SECTION. 77 Number-Field PIC X(16). 77 Number-Length PIC 9(02) COMP. 01 Validity-Flag PIC X. 88 Valid-Number VALUE 'Y'. 88 InValid-Number VALUE 'N'. *----------------------------------------------------------------- PROCEDURE DIVISION USING Number-Field Number-Length Validity-Flag. *----------------------------------------------------------------- * Adjust Specified Length of Input Number ------------------------ IF (Number-Length > 16) MOVE 16 TO Number-Length. * Get Source Number String and Replace Low Values by Spaces ------ MOVE Number-Field(1:Number-Length) TO Work-Number. INSPECT Work-Number REPLACING ALL LOW-VALUES BY SPACES. * Replace Leading Spaces in Source Number Field by Zeros --------- INSPECT Work-Number REPLACING LEADING SPACES BY ZEROS. * Determine Actual Length of Source Number Field ----------------- PERFORM WITH TEST AFTER VARYING Work-Length FROM Number-Length BY -1 UNTIL ((Number-Symbol(Work-Length) NOT = SPACE) OR (Work-Length < 2)). * Adjust Number to Specified Length by Adding Leading Zeros ------ IF (Work-Length < Number-Length) MOVE Work-Number TO Work-Number-Temp STRING Zero-Fill(1 : Number-Length - Work-Length) Work-Number-Temp DELIMITED BY SIZE INTO Work-Number. * Check Number Validity and Form Target Number if Valid ---------- IF (Work-Number(1:Number-Length) IS NUMERIC) MOVE Work-Number (1:Number-Length) TO Number-Field(1:Number-Length) MOVE 'Y' TO Validity-Flag ELSE MOVE 'N' TO Validity-Flag.