Системное программирование в UNIX средствами Free Pascal


         

Бесконечный цикл до получения правильного


   * Иначе использовать приглашение по умолчанию
   * pdefault *)
  if prompt <> nil then
    p_use := prompt
  else
    p_use := pdefault;
  (* Бесконечный цикл до получения правильного ответа. *)
  while true do
  begin
    (* Вывести приглашение *)
    printf ('%s > ', [p_use]);
    if fgets (buf, ANSWSZ, stdin) = nil then
    begin
      yesno:=EOF;
      exit;
    end;
    (* Удалить пробельные символы *)
    p := buf;
    while isspace (byte(p^)) do
      inc(p);
    case p^ of
      'Y','y':
      begin
        yesno:=YES;
        exit;
      end;
      'N','n':
      begin
        yesno:=NO;
        exit;
      end;
      else
        printf (#$a'%s'#$a, [error]);
    end;
  end;
end;
var
  ans:integer;
begin
  ans := yesno (nil);
  printf ('Получен ответ: ',[]);
  if ans = YES then
    printf ('Да'#$a,[])
  else
    printf ('Нет'#$a,[]);
end.
В этом примере предполагается, что stdin связан с терминалом. Как можно сделать эту процедуру более безопасной?
Обратными процедурами для gets и fgets будут соответственно процедуры puts и fputs.

Содержание  Назад  Вперед