71 lines
2.6 KiB
Text
71 lines
2.6 KiB
Text
(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, '<name>') > 0 then
|
|
if seen_name then
|
|
do until (index(line, '<name>') = 0);
|
|
call split(line, '<name>', 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, '<he or she>') > 0 then
|
|
if seen_pronoun then
|
|
do until (index(line, '<he or she>') = 0);
|
|
call split(line, '<he or she>', 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, '<noun>') > 0 then
|
|
if seen_noun then
|
|
do until (index(line, '<noun>') = 0);
|
|
call split(line, '<noun>', 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;
|