pascalabcnet/TestSuite/CompilationSamples/Drawman.pas
Бондарев Иван 59169b5168 ...
2015-06-27 18:33:50 +02:00

250 lines
5.3 KiB
ObjectPascal

// 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.