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


         

Теперь можно составить функцию, которая


const

  special:array [0..5] of char = (' ', #9, '&', ';', #$a, #0);

function inarg(c:char):boolean;

var

  wrk:pchar;

begin

  wrk := special;

  while wrk^<>#0 do

  begin

    if c = wrk^ then

    begin

      inarg:=false;

      exit;

    end;

    inc(wrk);

  end;

  inarg:=true;

end;

Теперь можно составить функцию, которая будет выполнять главную работу нашего интерпретатора. Функция procline будет разбирать командную строку, используя процедуру gettok, создавая тем самым список аргументов процесса. Если встретится символ перевода строки или точка с запятой, то она вызывает для выполнения команды процедуру runcommand. При этом она предполагает, что командная строка уже была считана при помощи функции userin.

{$i smallsh.inc}

function procline:integer;         (* обработка строки ввода *)

var

  arg:array [0..MAXARG] of pchar;   (* массив указателей для runcommand *)

  toktype:integer;                (* тип лексемы в команде *)

  narg:integer;                   (* число аргументов *)

  _type:integer;                  (* на переднем плане или в фоне *)

begin

  narg := 0;

  while true do                   (* бесконечный цикл *)

  begin

    (* Выполнить действия в зависимости от типа лексемы *)

    toktype := gettok (@arg[narg]);

    case toktype of

      2://ARG

        if narg < MAXARG then

          inc(narg);

      1,3,4://EOL,SEMICOLON, AMPERSAND:

      begin

        if toktype = AMPERSAND then

          _type := BACKGROUND

        else

          _type := FOREGROUND;

        if narg <> 0 then

        begin

          arg[narg] := nil;

          runcommand (arg, _type);

        end;

        if toktype = EOL then

          exit;

        narg := 0;

      end;

    end;

  end;

end;

Следующий этап состоит в определении процедуры

runcommand, которая в действительности запускает командные процессы. Процедура runcommand в сущности, является переделанной процедурой docommand, с которой встречались раньше. Она имеет еще один целочисленный параметр


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





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий