(stringrange, stringsize): /* 2 Nov. 2013 */ Mad_Libs: procedure options (main); declare (line, left, right) character (100) varying; declare true bit(1) value ('1'b), false bit (1) value ('0'b); declare name character (20) varying, seen_name bit (1) initial (false); declare pronoun character (20) varying, seen_pronoun bit (1) initial (false); declare noun character (20) varying, seen_noun bit (1) initial (false); declare replaced_all bit (1); declare in file input; open file (in) title ('/MADLIBS.DAT,type(text),recsize(100)'); do forever; get file (in) edit (line) (L); if line = '' then leave; do until (replaced_all); replaced_all = true; if index(line, '') > 0 then if seen_name then do until (index(line, '') = 0); call split(line, '', left, right); line = left || name || right; replaced_all = false; end; else do; put skip list ('Please type a name:'); get edit (name) (L); seen_name = true; replaced_all = false; end; if index(line, '') > 0 then if seen_pronoun then do until (index(line, '') = 0); call split(line, '', left, right); line = left || pronoun || right; replaced_all = false; end; else do; put skip list ('Please type a pronoun (he or she):'); get edit (pronoun) (L); seen_pronoun = true; replaced_all = false; end; if index(line, '') > 0 then if seen_noun then do until (index(line, '') = 0); call split(line, '', left, right); line = left || noun || right; replaced_all = false; end; else do; put skip list ('Please type a noun:'); get edit (noun) (L); seen_noun = true; replaced_all = false; end; end; put skip list (line); end; split: procedure (line, text, Left, Right); declare (line, text, left, right) character (*) varying; declare i fixed binary; i = index(line, text); left = substr(line, 1, i-1); right = substr(line, i+length(text), length(line) - (i + length(text)) + 1 ); end split; end Mad_Libs;