range_expansion: procedure options (main); get_number: procedure (Number, c, eof); declare number fixed binary (31), c character (1), eof bit (1) aligned; declare neg fixed binary (1); number = 0; eof = false; do until (c ^= ' '); get edit (c) (a(1)); end; if c = '-' then do; get edit (c) (a(1)); neg = -1; end; else neg = 1; do forever; select (c); when ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') number = number*10 + c; when (',', '-') do; number = neg*number; return; end; otherwise signal error; end; on endfile (sysin) go to exit; get edit (c) (a(1)); end; exit: number = neg*number; eof = true; end get_Number; declare c character, (i, range_start, range_end) fixed binary (31); declare eof bit (1) aligned; declare true bit (1) value ('1'b), false bit (1) value ('0'b); declare delimiter character (1) initial (' '); declare out file output; open file (out) output title ('/out, type(text),recsize(80)'); do while (^eof); call get_number(range_start, c, eof); if c = '-' then /* we have a range */ do; call get_number (range_end, c, eof); do i = range_start to range_end; put file (out) edit (delimiter, i) (a, f(3)); end; end; else do; put file (out) edit (delimiter, range_start) (a, f(3)); end; delimiter = ','; end; end range_expansion;