Города на Мурмане
29 Апреля 2024, 16:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
   Начало   ПРАВИЛА Помощь Поиск Войти Регистрация  
Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Programming  (Прочитано 34694 раз)
R.I.P.
завсегдатай
***

Карма +0/-0
Offline Offline

Сообщений: 83


« Ответ #40 : 23 Декабря 2002, 11:14 »

Аспирант Василий, #21>>

Из меня, конечно, программист посредственный, но нельзя ли пояснить, что сие означает:

>И много на asmе в защищенном режиме, желательно под GUI, попишешь?

Вообще-то, даже я знаю, что защищённый режим - это режим работы процессора и к программированию под ОС (напр. под GUI Windows) он имеет весьма отдалённое отношение. Вот мне хотелось бы увидеть перевод процессора из RM в PM (и V86) на C или пасКАЛЕ(пускай даже через DPMI, но лучше напрямую, через разблокирование процессорной линии А20 ). И если в PM писать не на Ассемблере, то тогда на чём?
Записан
Аспирант Василий
Гость
« Ответ #41 : 23 Декабря 2002, 13:22 »

> И если в PM писать не на Ассемблере, то тогда на чём?
В PM писать не обязательно надо на ассемблере. А вот сам менеджер памяти (он же DPMI) - там действительно совсем без ассемблера не обойтись. А теперь о чем вообще речь: в защищенном режиме давать обычные вызовы int, которые так любят досовские ассемблисты (а куда там без них ?!!), не всегда корректно (хотя под некоторыми расширителями DOS для DPMI и под Win9x это возможно, но под NT и Linux это в принципе недопустимо, особеннно в посл. случае - там для таких фокусов нужен доп. патч к ядру - ни больше, ни меньше). Стало быть, нужно подключаться к соотв. системным вызовам или, как минимум, быть очень осторожным с int (и вообще с вызовами BIOS/DOS). Я уж не говорю о работе с системной областью памяти. А вызывать системные функции из dll(в Windows)или .so или даже ядра (Linux) на ассемблере, как я понимаю, достаточно хлопотно. Делать же ассемблерные вставки для оптимизированного алгоритма умножения можно везде, и они не сильно зависят от режима. Под V86 виндов или dosemu linuxа на асме можно работать также, как и с DOS.
Записан
R.I.P.
завсегдатай
***

Карма +0/-0
Offline Offline

Сообщений: 83


« Ответ #42 : 24 Декабря 2002, 09:19 »

>>PM писать не обязательно надо на ассемблере.

А на чём же тогда?

>>в защищенном режиме давать обычные вызовы int, которые так любят досовские ассемблисты (а куда там без них ?!!)

1. Вы смешиваете программирование в PM и программирование под ОС.
2. А кто это вызывает int в PM? Если вы имеете ввиду DOS-сессии Windows(а это всё равно программирование под ОС), то это эмуляция RM.
3. Под Win9x можно, кстати, запустить и программу выполняющюю перекл. в PM, но Win это просто проэмулирует и даст ей минимальный уровень привелегий.
4. Если вы считаете, что в PM можно писать не на Ассемблере, то приведите пожалуйста пример на С или пасКАЛЕ перевода в PM или загрузки какой-нибудь таблицы дескрипторов в PM.
Записан
Аспирант Василий
Гость
« Ответ #43 : 25 Декабря 2002, 14:09 »

> 1. Вы смешиваете программирование в PM и программирование под ОС.
Программирование под ОС, работающей в PM и есть программирование в PM (если, конечно, программировать не на интерпретаторе типа BASIC, bash, Perl, VM типа Java и т.п.).
Ведь на низком уровне мы работаем с селекторами/дескрипторами и т.п.
 А то, что Вы предлагаете написать (переключалку RM<->PM) - лишь драйверы защищенного режима. Их собственно и программами в PM назвать полностью нельзя - они же работают наполовину в RM.
> Если вы имеете ввиду DOS-сессии Windows(а это всё равно программирование под ОС), то это  эмуляция RM.
Имеется в виду, например, вызов прерываний из DPMI. Скажем, расширителя DOS DPMI. Правда, есть целый ряд GUIшных программ под винду, вызывающих int. Примеры Sandra, FineReader 4-5.
Записан
R.I.P.
завсегдатай
***

Карма +0/-0
Offline Offline

Сообщений: 83


« Ответ #44 : 02 Января 2003, 14:07 »

Аспирант Василий, #44 >>

> Программирование под ОС, работающей в PM и есть программирование в PM

Если следовать этой логике, то "Hello world" - кроссплатформенная, кросспроцессорная, "кроссрежимная" программа.

> Ведь на низком уровне мы работаем с селекторами/дескрипторами и т.п.

С селекторами/дескрипторами работает ОС и практически ни одна ОС защищённого режима не даст простой смертной программе что-то там делать с ними. Win9x, например, работает в нулевом кольце защиты - ring0, а приложения только в ring3. В win9x для работы в ring0 нужно писать свой VxD (используя asm) - а это одно из самых сложных и нетривиальных занятий под винду, а в NT не проканает и это.

> А то, что Вы предлагаете написать (переключалку RM<->PM) - лишь драйверы защищенного режима.

PM - режим работы процессора. Собственно, перевод процессора из RM в PM (из PM в RM) - это установка (сброс) бита PE регистра управления процессора cr0. Грубо говоря, перевод в PM выглядит так:

mov eax, cr0
or eax, 1
mov cr0, eax

И мы в PM!

> Имеется в виду, например, вызов прерываний из DPMI. Скажем, расширителя DOS DPMI. Правда, есть целый ряд GUIшных программ под винду, вызывающих int.

В PM запрещены вызовы функций DOS/BIOS т.к.:

1. Формат int: int xx. Где 0<=xx<=FFh номер прерывания в таблице векторов прерываний, котороя расположена начиная с адреса 0000h:0000h. В PM же первые 20h вектора зарезервированны под исключения. Кстати, в PM также другой базовый адрес контроллера прерываний - ещё одна причина несовместимости двух режимов.

2. Самое главное! В PM совершенно другая (чем в RM) несегментная организация памяти   множество моделей адресации в ней. Программы реального режима (напр. обработчики прерываний int) считают, что в сегментных регистрах - сегментные адреса, а на самом деле в PM в них хранятся селекторы!

Вызовы же int виндовскими программами (если они вообще есть) ЭМУЛИРУЮТСЯ виндой.
Записан
Аспирант Василий
Гость
« Ответ #45 : 03 Января 2003, 13:59 »

R.I.P., #45 >>
> ни одна ОС защищённого режима не даст простой смертной программе что-то там делать с ними
Так вот в том-то все и дело! Между тем, в той же винде достаточно функций API, использующих их в качестве аргумента.
> Грубо говоря, перевод в PM выглядит так:
И что? Если подходить к этому формально, то Ваш код не является программой защищенного режима. Т.к. это ЕЩЕ реальный режим. А собственно в защищненном режиме будет то, что  идет после Вашего кода.
А вообще - Ваш код - действительно часть драйверов. Тогда как собственно программы защищенного режима должны вести себя соотв. образом. Пусть этот образ проявляется не в том, чтобы что-то делать отдельно, а чтобы чего-то НЕ делать (а именно - лазать по таблице векторов прерываний, сканнировать чужую память). Или даже делать это СПЕЦИФИЧЕСКИМ образом (например, знаменитый 0040h в Win16).
> В PM запрещены вызовы функций DOS/BIOS т.к.:
Так или иначе, они производятся. Либо эмулируются, либо на время производится переключение из защ. режима 386 в реальный и т.п.
> Если следовать этой логике, то "Hello world" - кроссплатформенная, кросспроцессорная, "кроссрежимная" программа.
Само собой разумеется! Скажем, вот так

program Hello;
{$ifdef win32}
{$apptype console}
//FPC в win32 принимает AppType,
//Delphi требует
//Kylix понимает, но не требует, поэтому здесь его не будет
//А BP7- - не знает про win32 и здесь не будет
{$endif}
begin
 writeln('Hello, World!');
end.

Вот такая штука - отнюдь не кроссплатформенная

program Hello;
{$apptype GUI}
uses Windows, Messages;
begin
 MessageBox(0,'Hello, World!', 'Hello',mb_OK mb_IconInformation)
end.

А вот такая, пожалуй, будет

program Hello;
{$ifdef Win32}
uses windows;
{$else}
{$ifdef FPC}
{$ifdef unix}
uses LCLLinux;
{$else}
{$fatal Lazarus doesn't support platforms other than Windows and Linux, at least,yet}
{$endif}
{$else}
{$Fatal Kylix, VP, etc doesn't supported, sorry}
{$endif}
{$endif}
begin
 MessageBox(0,'Hello, World','Hello',0);
end.
> если они вообще есть
Они есть. См. Sisoft Sandra, FineReader. И, скажем, попытку эмулятора wine выполнять такие программы и его ругательства.
А эмулируются или нет - не важно (хотя, конечно, да).
Записан
R.I.P.
завсегдатай
***

Карма +0/-0
Offline Offline

Сообщений: 83


« Ответ #46 : 03 Января 2003, 16:34 »

Аспирант Василий, #46 >>
Очевидно, мы уклонились от темы. Вопрос стоит так: начём программировать в PM? IMHO на Ассемблере т.к. PM - это режим работы процессора, а Ассемблер - его [процессора] язык. Под PM, кстати, я подразумеваю именно PM, а, например, не ОС, работающюю в нем. IMHO самый "чистый" PM - это PM, полученный самостоятельным переводом процессора в защищёный режим из ОС реального режима (напр. DOS). Простой пример: Вы из доса перевели процессор в PM, тогда для поддержания работы процессора в этом режиме нужно фактически писать небольшую ОС. Когда же Вы "программируете  в PM" из-под ОС защищёного режима то, во-первых, это всё уже написанно (на Ассемблере, кстати), а, во-вторых, очень многих вещей Вы сделать просто не сможете.
Записан
Аспирант Василий
Гость
« Ответ #47 : 04 Января 2003, 10:31 »

R.I.P., #47 >>
> Под PM, кстати, я подразумеваю именно PM, а, например, не ОС, работающюю в нем.
ОС не есть PM, но ОС работает в РМ. Программа, работающая под эту ОС, работает в РМ, как ни крути. Другое дело, что эта же программа, возможно, где-то может быть собрана и не для РМ, но в данном случае она собирается для работы в РМ, и все!
А "Чистый РМ" - это что-то новое.
>  (на Ассемблере, кстати),
И на нем тоже, но на нем как раз мало. См. ядро (www/kernel.org)
Записан
DevilFuzzer
Гость
« Ответ #48 : 13 Апреля 2004, 18:33 »

Внимание! Собираю группу программистов работующих на Ассемблере для создания ОС. По вопросам обращайтесь по моему e-mail'у.
Записан
br.less
Гость
« Ответ #49 : 14 Апреля 2004, 18:12 »

хм. а поподробней? что за ОС то будет?
стоит ли вообще начинать?
Записан
Dilan
матерый
*****

Карма +0/-0
Offline Offline

Расположение: Североморск
Сообщений: 610


« Ответ #50 : 27 Апреля 2004, 15:24 »

DMD, #28 от 21-11-2002 17:04 >>
> Мужики, а кто-нить так вот серьёзно программит? Не так чтобы там под Win в VB, а в реале под *nix'ы (но не Kilix)- просто охота присоединиться /Win к чему-нить стоящему, чем писать очередной "Блокнот". Знаю много - ну скучно всё время писать вирусы (хотя и получается неплохо 8о) ). Может кто работает над чем-нить сложным, системным - я с удовольствием.
Дмитрий.


Я пишу под *nix'ы давно уже. Дело это неблагодарное - прибыли никакой... Open Source все-таки.
Записан

Using Gentoo Base System 1.5.3, KDE 3.3.1, gentoo-dev-sources 2.6.9-r1
Dilan
матерый
*****

Карма +0/-0
Offline Offline

Расположение: Североморск
Сообщений: 610


« Ответ #51 : 27 Апреля 2004, 15:29 »

DevilFuzzer, #49 от 13-04-2004 18:33 >>
> Внимание! Собираю группу программистов работующих на Ассемблере для создания ОС. По вопросам обращайтесь по моему e-mail'у.

Что, батенька, Биллом Гейтсом себя вообразили, али Линусом Торвальдсом? Кому это надо??? До тебя уже многие постарались - Linux, Unix, *BSD, винды, QNX и т.д.
Записан

Using Gentoo Base System 1.5.3, KDE 3.3.1, gentoo-dev-sources 2.6.9-r1
Нори
Гость
« Ответ #52 : 24 Декабря 2004, 20:25 »

Люди, подскажите ВБ может работать с объектами из 3D Studio Max функции, без использования DirectX и ActiveX
Записан
br.less
Гость
« Ответ #53 : 25 Декабря 2004, 19:13 »

vb идет лесом
Записан
Павел
Гость
« Ответ #54 : 09 Января 2005, 22:02 »

нужны проги по с   сортировка (метод шейкера)!!
Срочно!!!!!!!!!
Записан
Hipo
молодой
*

Карма +0/-0
Offline Offline

Сообщений: 18


« Ответ #55 : 29 Марта 2005, 10:43 »

Oleg, cachaj!
Program ColorTable;
    Uses Crt;           {Ї®¤Є«о祭ЁҐ Є Їа®Ја ¬¬Ґ ЎЁЎ«Ё®вҐЄЁ Crt}
    Const P  = '    ';  {4 Їа®ЎҐ« }
    Var i,j : Integer;
 BEGIN
   ClrScr;              {®зЁбвЄ  нЄа ­ }
   Window(1,1,80,7);    {®ЇаҐ¤Ґ«Ґ­ЁҐ ®Є­  ¤«п § Ј®«®ў®з­®© з бвЁ в Ў«Ёжл}
   TextColor(Yellow);   {гбв ­®ўЄ  ¦Ґ«в®Ј® жўҐв  бЁ¬ў®«®ў}
   GoToXY(24,1);  WriteLn('’…Љ‘’Ћ‚›‰ ‚›‚Ћ„ ЌЂ ќЉђЂЌ „?‘Џ‹…џ');
   GoToXY(30,2);  WriteLn('’ЂЃ‹?–Ђ –‚…’ЌЋ‘’?');

   TextColor(LightCyan); {гбв ­®ўЄ  паЄ®Ј®«гЎ®Ј® жўҐв  бЁ¬ў®«®ў}
   WriteLn('  0-—Ґа­л© ',P,'4-Ља б­л©    ',P,' 8-’Ґ¬­®бҐал© ',P,'12-ђ®§®ўл©');
   WriteLn('  1-‘Ё­Ё©  ',P,'5-”Ё®«Ґв®ўл© ',P,' 9-џаЄ®бЁ­Ё©  ',P,'13-Њ «Ё­®ўл©');
   WriteLn('  2-‡Ґ«Ґ­л©',P,'6-Љ®аЁз­Ґўл© ',P,'10-џаЄ®§Ґ«Ґ­л©',P,'14-†Ґ«вл©');
   Write  ('  3-ѓ®«гЎ®©',P,'7-‘ўҐв«®бҐал©',P,'11-џаЄ®Ј®«гЎ®©',P,'15-ЃҐ«л©');
   TextColor(3 128);  WriteLn('    i 128-ЊҐаж ­ЁҐ'); TextColor(White);

   For i := 0 to 9 do               {жЁЄ« Ї® 梥⠬ д®­  в Ў«Ёжл 梥⭮бвЁ}
     begin
       Window(i*8 1, 7, i*8 8, 25); {oЇаҐ¤Ґ«Ґ­ЁҐ ®Є­  ¤«п бв®«Ўж  в Ў«Ёжл }
       GoToXY(1,1);                 {Єгаб®а ў ўҐае­Ґ¬ «Ґў®¬ гЈ«г ®Є­ }
       TextBackGround(Black);       {гбв ­®ўЄ  зҐа­®Ј® жўҐв  д®­     }
       WriteLn(' ”®­', i:2);
       WriteLn('ДДДДДДД');
       TextBackGround(i);           {гбв ­®ўЄ  вҐЄг饣® жўҐв  д®­  ®Є­ }

       For j := 0 to 15 do
        begin
          TextColor(j);             {гбв ­®ўЄ  вҐЄг饣® жўҐв  ­ ¤ЇЁбҐ© ў ®Є­Ґ}
          WriteLn('梥в',j:2)
        end
     end; NormVideo; ReadLn
 END.
Записан
Hipo
молодой
*

Карма +0/-0
Offline Offline

Сообщений: 18


« Ответ #56 : 29 Марта 2005, 10:51 »

Cachaj!{        ‚­Ё¬ ­ЁҐ! „«п а Ў®вл нв®© Їа®Ја ¬¬л ­Ґ®Ўе®¤Ё¬®, зв®Ўл:

          1) Turbo Pascal Ўл« гбв ­®ў«Ґ­ ў Є в «®Ј  C:\TP;
          2) Є в «®Ј C:\TP\BGI ᮤҐа¦ « д ©«  egavga.bgi ;
          3) ў ¬Ґ­о  Options/Directories  Ўл« гЄ § ­ Їгвм
             Є д ©«г  graph.tpu,  ­ ЇаЁ¬Ґа,  ‘:\TP\UNITS.

        …б«Ё Turbo Pascal гбв ­®ў«Ґ­ ў ¤агЈ®¬ Є в «®ЈҐ, ­г¦­® Ё§¬Ґ­Ёвм
        Їгвм Є ­Ґ¬г ў Їа®жҐ¤гॠ InitGraph  (10-п бва®Є  Їа®Ја ¬¬л).
}

 Program Lines;
   Uses Graph, Crt; {Ї®¤Є«о祭ЁҐ Є Їа®Ја ¬¬Ґ ЎЁЎ«Ё®вҐЄ Crt Ё Graph}
   Var
     Key              : Char;
     LineStyle        : Word;    { ­®¬Ґа бвЁ«п аЁб®ў ­Ёп «Ё­ЁЁ }
     Style            : String;  { ­ §ў ­ЁҐ бвЁ«п              }
     GrDriver, GrMode : Integer; { вЁЇ Ё ०Ё¬ а Ў®вл Ја дЁзҐбЄ®Ј® ¤а ©ўҐа  }
     GrError          : Integer; { Є®¤ ®иЁЎЄЁ Ја дЁЄЁ          }
  BEGIN
   GrDriver := Detect;         {  ўв®®ЇаҐ¤Ґ«Ґ­ЁҐ вЁЇ  Ја дЁзҐбЄ®Ј® ¤а ©ўҐа  }
   InitGraph(GrDriver, GrMode, 'C:\TP\BGI'); { гбв ­®ўЄ  Ја дЁзҐбЄ®Ј® ०Ё¬ }
   GrError := GraphResult;
   If GrError<>GrOk then begin Writeln('ЋЎ­ а㦥­  ®иЁЎЄ !'); Halt
                         end;
   SetBkColor(LightGray); SetColor(Red);     { 梥в д®­  Ё 梥в аЁб®ў ­Ёп }
  {------------------------------------------------------------}
   OutTextXY(120, 100, 'ђЁб㥬 «Ё­Ёо ®в в®зЄЁ (200,200) Є в®зЄҐ (400,280)');
   Line(200, 200, 400, 280);
   Key:=ReadKey;    { ЇаЁ®бв ­®ў«Ґ­ЁҐ ЁбЇ®«­Ґ­Ёп Їа®Ја ¬¬л }
   ClearViewPort;   { ®зЁбвЄ  ®Є­ }
  {-----------------------------------------------------------}
   OutTextXY(240, 80, 'ђЁб㥬 «®¬ ­­го');
   Rectangle(110, 120, 520, 400);              { аЁб®ў ­ЁҐ а ¬ЄЁ         }
   MoveTo(Round(GetMaxX/2), Round(GetMaxY/2)); { гЄ § вҐ«м ў 業вॠ®Є­  }

   Repeat {жЁЄ« ЇаҐалў Ґвбп ­ ¦ вЁҐ¬ «оЎ®© Є« ўЁиЁ}
     LineTo(Random(GetMaxX-250) 120, Random(GetMaxY-210) 120);
     Delay(100);
   until KeyPressed;

   Key := ReadKey; ClearViewPort;
  {-----------------------------------------------------------}
   OutTextXY(190, 80, 'MҐ­пҐ¬ бвЁ«Ё аЁб®ў ­Ёп «Ё­Ё©');

   For LineStyle := 0 to 3 do
     begin
       SetLineStyle(LineStyle, 0, 1);
       Case LineStyle of
         0: Style:='‘Ї«®и­ п';
         1: Style:='’®зҐз­ п';
         2: Style:='?ваЁеЇг­ЄвЁа­ п';
         3: Style:='Џг­ЄвЁа­ п'
       end;
       Line(120, 150 LineStyle*50, 430, 150 LineStyle*50);
       OutTextXY(450, 145 LineStyle*50, Style);
     end;

   Key:=ReadKey; ClearViewPort; {®зЁбвЄ  ®Є­ }
  {-----------------------------------------------------------}
   OutTextXY(180, 80, 'ЊҐ­пҐ¬ в®«йЁ­г аЁб®ў ­Ёп «Ё­Ё©');
   SetLineStyle(0, 0, 1); {в®«йЁ­  1 ЇЁЄбҐ« }
   Line(140, 200, 430, 200); OutTextXY(450, 195, 'Ќ®а¬ «м­ п');
   SetLineStyle(0, 0, 3); {в®«йЁ­  3 ЇЁЄбҐ« }
   Line(140, 250, 430, 250); OutTextXY(450, 245, '’а®©­ п');
   ReadLn; CloseGraph; {§ ЄалвЁҐ Ја дЁзҐбЄ®Ј® ०Ё¬ }
 END.
{        ‚­Ё¬ ­ЁҐ! „«п а Ў®вл нв®© Їа®Ја ¬¬л ­Ґ®Ўе®¤Ё¬®, зв®Ўл:

          1) Turbo Pascal Ўл« гбв ­®ў«Ґ­ ў Є в «®Јe C:\TP;
          2) Є в «®Ј C:\TP\BGI ᮤҐа¦ « д ©«  egavga.bgi ;
          3) ў ¬Ґ­о  Options/Directories  Ўл« гЄ § ­ Їгвм
             Є д ©«г  graph.tpu,  ­ ЇаЁ¬Ґа,  ‘:\TP\UNITS.

        …б«Ё Turbo Pascal гбв ­®ў«Ґ­ ў ¤агЈ®¬ Є в «®ЈҐ, ­г¦­® Ё§¬Ґ­Ёвм
        Їгвм Є ­Ґ¬г ў Їа®жҐ¤гॠ InitGraph  (10-п бва®Є  Їа®Ја ¬¬л).
}

 Program Symbols;
   Uses Graph, Crt;        { Ї®¤Є«о祭ЁҐ Є Їа®Ја ¬¬Ґ ЎЁЎ«Ё®вҐЄ Crt Ё Graph }
   Var
     Key              : Char;
     Font             : String; { ­ §ў ­Ёп иаЁдв®ў }
     Size, MyFont     : Word;
     GrDriver, GrMode : Integer; { вЁЇ Ё ०Ё¬ а Ў®вл Ја дЁзҐбЄ®Ј® ¤а ©ўҐа }
 BEGIN
   GrDriver := Detect;          { ўв®®ЇаҐ¤Ґ«Ґ­ЁҐ вЁЇ  Ја дЁзҐбЄ®Ј® ¤а ©ўҐа }
   InitGraph(GrDriver, GrMode, 'C:\TP\BGI'); {гбв ­®ўЄ  Ја дЁзҐбЄ®Ј® ०Ё¬ }
   If GraphResult <> GrOk then Halt;
  {-----------------------------------------------------------}
   SetTextStyle(DefaultFont, HorizDir, 2);
   OutTextXY(140, 80, 'ЊҐ­пҐ¬ а §¬Ґа бЁ¬ў®«®ў');
   OutTextXY(220, 100, 'Ё 梥в д®­ ');

   For Size := 0 to 13 do      {Size - 梥в д®­  Ё а §¬Ґа бЁ¬ў®«®ў}
     begin SetBkColor(Size);               { Ё§¬Ґ­Ґ­ЁҐ жўҐв  д®­  }
       Rectangle(135, 425, 470, 450);      { аЁб®ў ­ЁҐ а ¬ЄЁ      }
       SetTextStyle(DefaultFont, HorizDir, 1);
       OutTextXY(150, 435, '„«п Їа®¤®«¦Ґ­Ёп ­ ¦¬ЁвҐ «оЎго Є« ўЁиг !');
       SetTextStyle(DefaultFont, HorizDir, Size);
       OutTextXY(250-Size*15, 200, 'HELLO');
       Key := ReadKey; ClearViewPort;
     end;
   ReadLn;
  {-----------------------------------------------------------}
   SetBkColor(LightGray); SetColor(Red);   { 梥в д®­  Ё 梥в аЁб®ў ­Ёп }
   SetTextStyle(DefaultFont, HorizDir, 2);
                     { гбв ­®ўЄ  иаЁдв , ­ Їа ў«Ґ­Ёп Ё а §¬Ґа  бЁ¬ў®«®ў }
   OutTextXY(70, 100, 'ђ бЇ®« Ј Ґ¬ бва®Єг Ј®аЁ§®­в «м­®');
   SetTextStyle(DefaultFont, VertDir, 2);
   OutTextXY(310, 150, 'Ё ўҐавЁЄ «м­®');
   Key:=ReadKey; ClearViewPort;
  {-----------------------------------------------------------}
   SetTextStyle(DefaultFont, HorizDir, 2);
                     { гбв ­®ўЄ  иаЁдв , ­ Їа ў«Ґ­Ёп Ё а §¬Ґа  бЁ¬ў®«®ў }
   OutTextXY(220, 30, 'ЊҐ­пҐ¬ иаЁдвл');

   For MyFont := 0 to 9 do       { жЁЄ« Ї® ­®¬Ґа ¬ иаЁдв®ў }
     begin
       Case MyFont of
         0: Font:='0 - ’®зҐз­л© (Default)';
         1: Font:='1 - “в஥­­л© (Triplex)';
         2: Font:='2 - “¬Ґ­м襭­л© (Small)';
         3: Font:='3 - Џаאַ© (SansSerif)';
         4: Font:='4 - ѓ®вЁзҐбЄЁ© (Gothic)';
         5: Font:='5 - ђгЄ®ЇЁб­л©';
         6: Font:='6 - ЉгамҐа';
         7: Font:='7 - Ља бЁўл© (T ©¬б Italic)';
         8: Font:='8 - ’ ©¬б Roman';
         9: Font:='9 - ЉгамҐа 㢥«ЁзҐ­­л©';
       end;
       SetTextStyle(MyFont, HorizDir, 2);
       OutTextXY(40, 70 MyFont*35, 'abcdfxyz 0123456789'); { ўлў®¤ ⥪бв  }
       SetTextStyle(DefaultFont, HorizDir, 1);
       OutTextXY(410, 80 MyFont*35, Font)         { ўлў®¤ ­ §ў ­Ёп иаЁдв  }
     end;

   OutTextXY(380, 60, 'N иаЁдв  ЋЇЁб ­ЁҐ'); ReadLn;
   CloseGraph;                             { § ЄалвЁҐ Ја дЁзҐбЄ®Ј® ०Ё¬  }
 END.

{        ‚­Ё¬ ­ЁҐ! „«п а Ў®вл нв®© Їа®Ја ¬¬л ­Ґ®Ўе®¤Ё¬®, зв®Ўл:

          1) Turbo Pascal Ўл« гбв ­®ў«Ґ­ ў Є в «®Ј  C:\TP;
          2) Є в «®Ј C:\TP\BGI ᮤҐа¦ « д ©«  egavga.bgi ;
          3) ў ¬Ґ­о  Options/Directories  Ўл« гЄ § ­ Їгвм
             Є д ©«г  graph.tpu,  ­ ЇаЁ¬Ґа,  ‘:\TP\UNITS.

        …б«Ё Turbo Pascal гбв ­®ў«Ґ­ ў ¤агЈ®¬ Є в «®ЈҐ, ­г¦­® Ё§¬Ґ­Ёвм
        Їгвм Є ­Ґ¬г ў Їа®жҐ¤гॠ InitGraph  (7-п бва®Є  Їа®Ја ¬¬л).
}

 Program MusicColor;
   Uses Crt, Graph;        { Ї®¤Є«о祭ЁҐ Є Їа®Ја ¬¬Ґ ЎЁЎ«Ё®вҐЄ Crt Ё Graph }
   Var
     GrDriver, GrMode: Integer; { вЁЇ Ё ०Ё¬ а Ў®вл Ја дЁзҐбЄ®Ј® ¤а ©ўҐа  }
 BEGIN
   GrDriver := Detect;        {  ўв®®ЇаҐ¤Ґ«Ґ­ЁҐ вЁЇ  Ја дЁзҐбЄ®Ј® ¤а ©ўҐа  }
   InitGraph(GrDriver, GrMode, 'C:\TP\BGI'); {гбв ­®ўЄ  Ја дЁзҐбЄ®Ј® ०Ё¬ }
   SetColor(White);           { гбв ­®ўЄ  ЎҐ«®Ј® жўҐв  а ¬ЄЁ }
   Rectangle(130, 130, 460, 370);          { аЁб®ў ­ЁҐ а ¬ЄЁ }
   Randomize;        { Ё­ЁжЁ «Ё§ жЁп ¤ взЁЄ  б«гз ©­ле зЁбҐ« }

   Repeat          { жЁЄ« ЇаҐалў Ґвбп ­ ¦ вЁҐ¬ «оЎ®© Є« ўЁиЁ }
     Sound(Random(2000));           { Ё§¬Ґ­Ґ­ЁҐ ўлб®вл §ўгЄ  }
     Delay(Random(1000));           { § ¤Ґа¦Є                }
     SetFillStyle(Random(4), Random(16)); { ᬥ­  вЁЇ  иваЁе®ўЄЁ Ё жўҐв  }
     Bar(140, 140, 450, 360);    { аЁб®ў ­ЁҐ § Єа 襭­®Ј® Їаאַ㣮«м­ЁЄ  }
   until KeyPressed;

   NoSound;            { ®в¬Ґ­  §ўгЄ  }
   CloseGraph; ReadLn; { § ЄалвЁҐ Ја дЁзҐбЄ®Ј® ०Ё¬  }
 END.

{        ‚­Ё¬ ­ЁҐ! „«п а Ў®вл нв®© Їа®Ја ¬¬л ­Ґ®Ўе®¤Ё¬®, зв®Ўл:

          1) Turbo Pascal Ўл« гбв ­®ў«Ґ­ ў Є в «®Ј  C:\TP;
          2) Є в «®Ј C:\TP\BGI ᮤҐа¦ « д ©«  egavga.bgi ;
          3) ў ¬Ґ­о  Options/Directories  Ўл« гЄ § ­ Їгвм
             Є д ©«г  graph.tpu,  ­ ЇаЁ¬Ґа,  ‘:\TP\UNITS.

        …б«Ё Turbo Pascal гбв ­®ў«Ґ­ ў ¤агЈ®¬ Є в «®ЈҐ, ­г¦­® Ё§¬Ґ­Ёвм
        Їгвм Є ­Ґ¬г ў Їа®жҐ¤гॠ InitGraph  (9-п бва®Є  Їа®Ја ¬¬л).
}

 Program Star;
   Uses Crt, Graph; { Ї®¤Є«о祭ЁҐ Є Їа®Ја ¬¬Ґ ЎЁЎ«Ё®вҐЄ Crt Ё Graph   }
   Const            { ¬ ббЁў Є®®а¤Ё­ в ўҐаиЁ­ ¬­®Ј®гЈ®«м­ЁЄ  (§ўҐ§¤л) }
       TopsStar: Array[1..18] of Integer = (300, 125, 325, 225, 425, 250,
             325, 275, 300, 375, 275, 275, 180, 250, 275, 225, 300, 125);
   Var i, j, GrDriver, GrMode : Integer;
 BEGIN
   GrDriver := Detect;
   InitGraph(GrDriver, GrMode, 'C:\TP\BGI'); {гбв ­®ўЄ  Ја дЁзҐбЄ®Ј® ०Ё¬ }
   SetTextStyle(DefaultFont, HorizDir, 2);   {гбв ­®ўЄ  иаЁдв , ­ Їа ў«Ґ­Ёп}
                                             {Ё а §¬Ґа  бЁ¬ў®«®ў           }
   OutTextXY(220, 60, 'S T A R ');
   SetTextStyle(DefaultFont, VertDir, 2);
   OutTextXY(140, 150, 'S T A R ');
   SetTextStyle(DefaultFont, VertDir, 2);
   OutTextXY(500, 150, 'S T A R ');

   i:=0;
   Repeat
      j:=i mod 12;                        { j - ®бв в®Є ®в ¤Ґ«Ґ­Ёп i ­  12 }
      SetFillStyle(j, Random(13));        { иваЁе®ўЄ  Ё д®­                }
      FillPoly(9, TopsStar);              { аЁб®ў ­ЁҐ Ё иваЁе®ўЄ  §ўҐ§¤л   }
      Inc(i);                             { 㢥«ЁзҐ­ЁҐ i ­  1              }
      Delay(500)
   until KeyPressed;             { § ўҐа襭ЁҐ жЁЄ«  ­ ¦ вЁҐ¬ «оЎ®© Є« ўЁиЁ }

   CloseGraph
 END.

{        ‚­Ё¬ ­ЁҐ! „«п а Ў®вл нв®© Їа®Ја ¬¬л ­Ґ®Ўе®¤Ё¬®, зв®Ўл:

          1) Turbo Pascal Ўл« гбв ­®ў«Ґ­ ў Є в «®Ј  C:\TP;
          2) Є в «®Ј C:\TP\BGI ᮤҐа¦ « д ©«  egavga.bgi ;
          3) ў ¬Ґ­о  Options/Directories  Ўл« гЄ § ­ Їгвм
             Є д ©«г  graph.tpu,  ­ ЇаЁ¬Ґа,  ‘:\TP\UNITS.

        …б«Ё Turbo Pascal гбв ­®ў«Ґ­ ў ¤агЈ®¬ Є в «®ЈҐ, ­г¦­® Ё§¬Ґ­Ёвм
        Їгвм Є ­Ґ¬г ў Їа®жҐ¤гॠ InitGraph.
}

 Program Sight;
   Uses Crt, Graph;       { Ї®¤Є«о祭ЁҐ Є Їа®Ја ¬¬Ґ ЎЁЎ«Ё®вҐЄ Crt Ё Graph }
   Const Step = 5;        { и Ј Ё§¬Ґ­Ґ­Ёп Є®®а¤Ё­ в 業ва  ЇаЁжҐ«         }
      Instr = '“ЏђЂ‚‹…Ќ?… „‚?†…Ќ?…Њ Џђ?–…‹Ђ - ‘’ђ…‹Љ?, ‚›•Ћ„ - ESC';
   Var
     GrDriver, GrMode : Integer; {вЁЇ Ё ०Ё¬ а Ў®вл Ја дЁзҐбЄ®Ј® ¤а ©ўҐа }
     X, Y             : Integer; { Є®®а¤Ё­ вл 業ва  ЇаЁжҐ«               }
     XStr, YStr       : String;
     Ch               : Char;
 {-----------------------------------------------------------}
 Procedure MakeSight(X, Y : Integer);       { Їа®жҐ¤га  аЁб®ў ­Ёп ЇаЁжҐ«  }
   Begin SetColor(White);
     Circle(X, Y, 80);
     SetColor(LightGreen);
     Line(X-80, Y, X 80, Y); Line(X, Y-63, X, Y 63); { ўлў®¤ ®бҐ© ЇаЁжҐ«  }
     SetColor(LightRed); Circle(X, Y, 2);   { ®Єаг¦­®бвм ў 業вॠЇаЁжҐ«  }
     Str(X, XStr); Str(Y, YStr);      { ЇҐаҐў®¤ Є®®а¤Ё­ в ў бва®Є®ўл© вЁЇ }
     SetColor(Yellow);
     OutTextXY(X 5, Y-35, 'x='   XStr);  { ўлў®¤ Є®®а¤Ё­ в 業ва  ЇаЁжҐ«  }
     OutTextXY(X 5, Y-20, 'y='   YStr)
   End;
 {-----------------------------------------------------------}
 BEGIN
   GrDriver := Detect;
   InitGraph(GrDriver, GrMode, 'C:\TP\BGI');
   SetColor(LightGray);
   X := GetMaxX div 2; Y := GetMaxY div 2;  { Є®®а¤Ё­ вл 業ва  нЄа ­  }
   Rectangle(50, 425, 600, 460);            { аЁб®ў ­ЁҐ а ¬ЄЁ          }
   OutTextXY(120, 440, Instr);
   MakeSight(X, Y);                { аЁб®ў ­ЁҐ ЇаЁжҐ«  ў 業вॠнЄа ­  }

   While TRUE do  { жЁЄ« а Ў®вл Їа®Ја ¬¬л ¤® ЇаҐалў ­Ёп Ї® Є« ўЁиҐ ESC }
     begin
        Ch := ReadKey;
        Case Ch of
           #27: begin CloseGraph; Halt(1) end;  { ўл室 Ї® Є« ўЁиҐ ESC }
           #75: X := X-Step; {Ё§¬Ґ­Ґ­ЁҐ Є®®а¤Ё­ в x, y ­ ¦ вЁҐ¬ бв५®Є}
           #77: X := X Step; {"ў«Ґў®", "ўЇа ў®", "ўўҐае", "ў­Ё§"       }
           #72: Y := Y-Step;
           #80: Y := Y Step
        end;

        ClearViewPort;               { ®зЁбвЄ  Ја дЁзҐбЄ®Ј® нЄа ­      }
        SetColor(LightGray);         { ў®ббв ­®ў«Ґ­ЁҐ а ¬ЄЁ б ­ ¤ЇЁбмо }
        Rectangle(50, 425, 600, 460);
        OutTextXY(120, 440, Instr);
        MakeSight(X, Y)      { аЁб®ў ­ЁҐ ЇаЁжҐ«  ў ⥪гйЁе Є®®а¤Ё­ в е }
     end;

   CloseGraph;
 END.
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines
Wap | PDA | Обратная связь
Valid XHTML 1.0! Valid CSS!