// Copyright (c) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) ///Исполнитель Чертежник предназначен для построения рисунков и чертежей на плоскости с координатами. ///Чертежник имеет перо, которое он может поднимать, опускать и перемещать. При перемещении опущенного пера за ним остается след. unit Drawman; interface /// Устанавливает скорость Чертежника равной n (n=0..10) procedure Speed(n: integer); /// Поднять перо procedure PenUp; /// Опустить перо procedure PenDown; /// Переместиться к точке (x,y) procedure ToPoint(x,y: integer); /// Переместиться на вектор (a,b) procedure OnVector(a,b: integer); /// Вызывать задание с именем name procedure Task(name: string); /// Создать пустое поле размера 9 на 11 клеток procedure StandardField; /// Создать пустое поле размера n на m клеток procedure Field(n,m: integer); /// Запустить Чертежника procedure Start; /// Остановить Чертежника procedure Stop; ///-- procedure __InitModule__; ///-- procedure __FinalizeModule__; implementation uses DMTaskMaker,DMZadan,DrawmanField; procedure Start; begin DMField.Start; end; procedure Stop; begin DMField.Stop; end; procedure Speed(n: integer); begin DMField.SetSpeed(n); end; procedure PenUp; begin DMField.PenUp; if DMField.StepState then Stop else DMField.Pause; end; procedure PenDown; begin DMField.PenDown; if DMField.StepState then Stop else DMField.Pause; end; procedure ToPoint(x,y: integer); begin DMField.ToPoint(x,y); if DMField.StepState then Stop else DMField.Pause; end; procedure OnVector(a,b: integer); begin DMField.OnVector(a,b); if DMField.StepState then Stop else DMField.Pause; end; procedure StandardField; var x,y: integer; begin TaskText('Стандартное поле'); x := 9; y := 7; DMTaskMaker.Field(x,y); CorrectFieldBounds; SetTaskCall; Stop; end; procedure Field(n,m: integer); begin TaskText('Поле '+IntToStr(n)+'x'+IntToStr(m)); DMTaskMaker.Field(n,m); CorrectFieldBounds; SetTaskCall; Stop; end; procedure RegisterTasks; begin RegisterTask('a1',a1); RegisterTask('a2',a2); RegisterTask('a3',a3); RegisterTask('a4',a4); RegisterTask('a5',a5); RegisterTask('a6',a6); RegisterTask('c1',c1); RegisterTask('c2',c2); RegisterTask('c3',c3); RegisterTask('c4',c4); RegisterTask('c5',c5); RegisterTask('c6',c6); RegisterTask('c7',c7); RegisterTask('c8',c8); RegisterTask('c9',c9); RegisterTask('c10',c10); RegisterTask('c11',c11); RegisterTask('c12',c12); RegisterTask('c13',c13); RegisterTask('c14',c14); RegisterTask('c15',c15); RegisterTask('c16',c16); RegisterTask('c17',c17); RegisterTask('c18',c18); RegisterTask('c19',c19); RegisterTask('c20',c20); RegisterTask('c21',c21); RegisterTask('c22',c22); RegisterTask('c23',c23); RegisterTask('c24',c24); RegisterTask('c25',c25); RegisterTask('c26',c26); RegisterTask('cc1',cc1); RegisterTask('cc2',cc2); RegisterTask('cc3',cc3); RegisterTask('cc4',cc4); RegisterTask('cc5',cc5); RegisterTask('cc6',cc6); RegisterTask('cc7',cc7); RegisterTask('cc8',cc8); RegisterTask('cc9',cc9); RegisterTask('cc10',cc10); RegisterTask('cc11',cc11); RegisterTask('cc12',cc12); RegisterTask('cc13',cc13); RegisterTask('cc14',cc14); RegisterTask('cc15',cc15); RegisterTask('cc16',cc16); RegisterTask('p1',p1); RegisterTask('p2',p2); RegisterTask('p3',p3); RegisterTask('p4',p4); RegisterTask('pp1',pp1); RegisterTask('pp2',pp2); RegisterTask('pp3',pp3); RegisterTask('pp4',pp4); RegisterTask('pp5',pp5); RegisterTask('pp6',pp6); RegisterTask('pp7',pp7); RegisterTask('pp8',pp8); RegisterTask('pp9',pp9); RegisterTask('pp10',pp10); RegisterTask('pp11',pp11); RegisterTask('pp12',pp12); RegisterTask('pp13',pp13); RegisterTask('pp14',pp14); RegisterTask('pp15',pp15); RegisterTask('pp16',pp16); RegisterTask('pp17',pp17); RegisterTask('pp18',pp18); RegisterTask('pp19',pp19); RegisterTask('examen1',examen1); RegisterTask('examen2',examen2); RegisterTask('examen3',examen3); RegisterTask('examen4',examen4); RegisterTask('examen5',examen5); RegisterTask('examen6',examen6); RegisterTask('examen7',examen7); RegisterTask('examen8',examen8); RegisterTask('examen9',examen9); RegisterTask('examen10',examen10); end; procedure Task(name: string); begin name:=Trim(LowerCase(name)); if name.StartsWith('dm') then Delete(name,1,2); if TasksDictionary.ContainsKey(name) then TasksDictionary[name]() else DrawManError(name+' - нет такого задания для Чертежника','Задание отсутствует'); // Добавил - МА DMField.TaskName := name; // CorrectFieldBounds; SetTaskCall; Stop; end; var __initialized := false; var __finalized := false; procedure __InitModule; begin RegisterTasks; end; procedure __InitModule__; begin if not __initialized then begin __initialized := true; DrawManField.__InitModule__; DMZadan.__InitModule__; DMTaskMaker.__InitModule__; __InitModule; end; end; procedure __FinalizeModule__; begin if not __finalized then begin __finalized := true; DrawManField.__FinalizeModule__; DMZadan.__FinalizeModule__; DMTaskMaker.__FinalizeModule__; end; end; initialization __InitModule; end.