/* REXX */ ARG SRCHARG /* Set search argument */ /* File requirement: Sequential file where the search argument is unique within the file, and the file is sorted in ascending sequence by that field. */ "ALLOC F(DD1) DA('TEST.FILE') SHR REUSE" /* Allocate sequential file */ "EXECIO * DISKR DD1 (STEM DD1. FINIS" /* Read records into stem variables */ DO UNTIL SRCHARG = "" | SRCHARG = EXIT MIN = 0 /* Initialize lowest rec # */ MAX = DD1.0 + 1 /* Initialize highest rec # */ MIDPOINT = MAX % 2 /* Calculate midpoint of file */ DO UNTIL FILEARG = SRCHARG | MIDPOINT = MIN /* Iterative loop */ FILEARG = SUBSTR(DD1.MIDPOINT,1,4) /* Set variable for search compare */ SELECT WHEN SRCHARG < FILEARG THEN MAX = MIDPOINT /* SRCHARG in lower half...reset MAX */ WHEN SRCHARG > FILEARG THEN MIN = MIDPOINT /* SRCHARG in upper half...reset MIN */ OTHERWISE NOP END MIDPOINT = MIN + ((MAX - MIN) % 2) /* Re-calculate midpoint */ END IF SRCHARG = FILEARG THEN SAY SRCHARG "FOUND" /* Indicate a hit */ ELSE SAY SRCHARG "NOT FOUND" /* Indicate a miss */ SAY "Enter a new search argument" /* Prompt for a new search argument */ PULL SRCHARG /* Retrieve the new search argument */ END EXIT