faqs.org.ru

 Главная > Программирование > Языки Pascal/Delphi >

Pascal FAQ

From: Sly Golovanov <Sly.Golovanov@p113.f768.n5020.z2.fidonet.org>
Date: Tue, 12 Dec 2000 01:19:39 +0300

------------------------------------------------------------------------------
              Pascal FAQ created by SLY Golovanov, 2:5020/794.13

                       Последнее обновление 1 Окт 2000
                 Обновления выделяются символом ">" в начале
==============================================================================
                                 FAQ-сервера
------------------------------------------------------------------------------
To   : Programmer,     2:5030/544.77
Subj : %HELP или %LIST
------------------------------------------------------------------------------
To   : FAQSERVER,      2:5054/26.1
Subj : %LIST
------------------------------------------------------------------------------
To   : DzeServer,      2:5020/1816.7
Subj : %help
------------------------------------------------------------------------------
                                Общие вопросы
------------------------------------------------------------------------------
Q: А как...

A: Прежде всего,  советую посмотреть в:
   - контекстной помощи среды Borland/Turbo Pascal. F1 - help index, Ctrl-F1 -
   контекстная помощь по слову, на котором стоит курсор. Shift-F1 - список
   функций;
   - примерах из поставки Borland Pascal. Там есть очень много всего;
   -  свагах. SWAG Pascal Snippets (SWAG - SourceWare Archival Group) - это
   сборник паскалевских исходников на все случаи жизни.  Некоторые из статей
   этого FAQ составлены с использованием свагов.

   http://www.gdsoft.com/swag/swag.html - официальный сайт SWAG
   2:5020/293, 2:00-5:30, 7:30-8:30, FREQ files

   За программистскими ссылками вообще заходите на http://www.ag.ru
------------------------------------------------------------------------------
Q: 1) А как восстановить исходники на паскале из .exe/.tpu?
   2) Как использовать TPU для 6-й версии TP в 7-й версии?

A: Никак.
------------------------------------------------------------------------------
Q: А как посчитать x**3 или корень четвертой степени из x?

A: Не мешало бы вспомнить школьный курс математики. x**n=exp(ln(x)*n))
   Ограничение: x>0
------------------------------------------------------------------------------
Q: var a,b:Word;
       l:LongInt;

   a:=1234;
   b:=567;
   l:=a*b;

   В l получается. 44318, а не 699678, как должно быть на самом деле. Это баг?

A: Нет,  это фича. Тип выражения определяется только типом входящих в него пе-
   ременных,  но не типом переменной,  куда записывается результат.  Если есть
   опасность переполнения, надо конвертировать тип явно:

   l:=LongInt(a)*b;
------------------------------------------------------------------------------
Q: Как узнать,  какие параметры передаются моему ЕХЕ при вызове  из  командной
   строки?

A: Функция ParamStr(i) возвращает в виде строки i-й параметр.  Отдельным пара-
   метром считается комбинация символов,  не содержащая пробелов.   ParamCount
   возвращает общее количество параметров.

A2:Если вам необходимо совершить некие продвинутые операции с ком. строкой
   - например, вы получаете параметры, содержащие пробелы и заключенные в
   кавычки,- вам поможет следующий исходник, копирующий всю ком. строку в
   первоначальном виде в строку:

var
 s: ^string;
begin
 s:=ptr(prefixseg, $80);
 writeln('Command line: "', s^, '"');
end.

Q: Предположим, запустили мой ЕХЕ. Как узнать из программы, в каком каталоге
   он лежит, и не переименовали ли его?

A: ParamStr(0) возвращает полное имя exe, например 'c:\exe\work.exe'.  При за-
   пуске программы из-под IDE вместо ParamStr(0) вернется путь к файлу
   turbo.exe, если компилировать программу в память (Compile/Destination =
   Memory) или имя программы без пути, если компилировать на диск.
------------------------------------------------------------------------------
Q: А почему файл не хочет переименовываться/удаляться? Я сделал так:
   Assign(f,'file');
   Reset(f);
   Erase(f)

A: Переименовывать/удалять открытые файлы нельзя.  Либо закройте его  командой
   Close(f) перед удалением,  либо не открывайте вообще - после  Assign  сразу
   Erase.
------------------------------------------------------------------------------
Q: 1) А как убрать курсор в текстовом режиме?
   2) А можно сделать так, чтобы курсор не мигал?

A: 1)
procedure CursorOff; assembler;
asm
  mov   ah,1
  mov   ch,20h
  int   10h
end;
procedure CursorOn; assembler;
asm
  mov   ah,1
  mov   cx,607h
  int   10h
end;

   2) Нет. Только самому '_' рисовать в нужном месте.
------------------------------------------------------------------------------
Q: Ищу  я  все  подкаталоги  в  данном  каталоге  процедурой
   FindFirst('*.*',Directory,Search),  а она мне не только подкаталоги,  но  и
   все файлы находит. В чем дело?

A: Глюк MS-DOS. А именно,  функции 4E прерывания 21.  Нужно после каждого  ис-
   пользования  FindFirst/FindNext  проверять,    каталог  ли  ты  нашел:
   if Search.Attr and Directory<>0 then begin [...] end;
------------------------------------------------------------------------------
Q: А почему внешняя программа из моей не запускается?

A: А память кто будет внешней проге отдавать?  По умолчанию все 640Kb отдаются
   твоей программе. Исправить это можно либо Options/Memory Sizes../ High heap
   limit,  либо директивой компилятора:
   {$M 4096,0,10000}
   В ней первая цифра - память под стек (в стеке  размещаются локальные
   переменные каждой вызываемой процедуры/функции), вторая - нижняя граница
   памяти, третья - верхняя.  В данном примере твоей программе отдается 10000
   байт, а все остальное - внешней программе.

Q: А если мне самому память нужна?

A: Используй библиотеку для своппинга в XMS/EMS/Disk - перед запуском  внешней
   программы твоя программа вместе со всеми данными переписывается  в  XMS/EMS
   или на винт,  а после завершения внешней - восстанавливается.   Можно  вос-
   пользоваться, например, юнитом SPAWNO от Ральфа Брауна
------------------------------------------------------------------------------
Q: А как прочитать нажатия клавиш с клавиатуры? Ну, буквы и цифры я прочитал с
   помощью ReadKey - а вот функциональные клавиши почему-то ноль возвращают.

A: Потому что эти клавиши возвращают расширенный код, состоящий из двух симво-
   лов - как, например,  стрелки,  или буквенно/цифровая клавиатура в комбина-
   ции с Alt, Ctrl, и т.д. Вот, как нужно обрабатывать клавиатуру:

   case ReadKey of                  {читаем код              }
     #0:case ReadKey of             {код оказался расширенным}
          #59:Writeln('Нажали F1');
          #60:Writeln('Нажали F2');
          {.......................}
        end {case};                 {закончили обработку расширенных кодов}
     #13:Writeln('Нажали Enter');
     #27:Exit
   end {case}
------------------------------------------------------------------------------
Q: А как прочитать нажатия клавиш Ctrl, Alt и подобных?
A: Вот вам функция. Пример вызова: if GetLockKey(Ctrl) then {нажат Ctrl}

Type
  Keytype=(Ins, Caps, Num, Scroll, Ctrl, Alt, LShift, RShift);

function GetLockKey(lock:Keytype):Boolean;
var b:byte;
begin
  case lock of
    Ins    : b:=$60;
    Caps   : b:=$40;
    Num    : b:=$20;
    Scroll : b:=$10;
    Ctrl   : b:=$04;
    Alt    : b:=$08;
    LShift : b:=$02;
    RShift : b:=$01;
  end;
  if (mem[0:$417] and b)=b then GetLockKey:=true
                         else GetLockKey:=false;
end;
------------------------------------------------------------------------------
Q: А почему одновременно больше 14 файлов Borland Pascal не открывает?

A: Используйте в вашей программе вот такой модуль.  Можете до 255  файлов  от-
   крыть.

{$IFDEF DPMI}
STOP COMPILE ! Only for real mode !
{$ENDIF}

Unit Extend; {(C) 1996 by Pavel Nikiforov}
interface
implementation

procedure Setup;
type PJFT=^TJFT;
     TJFT=record
            Num:word;
            Tbl:PChar;
          end;

var MyJFT:PChar;
    P:PJFT;

begin
  getmem(MyJFT,255);
  FillChar(MyJFT[0],255,$FF);
  P:=Ptr(PrefixSeg,$32);
  move(P^.TBL^,MyJFT^,P^.Num);
  P^.TBL:=MyJFT;
  P^.Num:=255;
end;

begin
  Setup;
end.
------------------------------------------------------------------------------
Q: 1) А как открыть на запись файл с атрибутом read/only? Ругается.
   2) Как удалить r/o файл?

A: Нужно снять атрибут r/o с файла, а затем делать с ним все, что
   заблагорассудится.

Uses DOS;
var
  t:text;
  attr:Word;
Begin
  Assign(t,'file');
  GetFAttr(t,attr);
  attr:=attr and $FE;
  SetFAttr(t,attr);
  Append(t);
  Writeln(t,'Hello!');
  Close(t);
  attr:=attr or $01;
  SetFAttr(t,attr);
End.
------------------------------------------------------------------------------
Q: 1) А почему задержки, которые задаются процедурой Delay(),на разных машинах
   разные?
   2) А почему программы, написанные на паскале, вылетают с ошибкой
   Runtime Error 200 (Division by zero) на быстрых машинах типа PII-300?

A:
1) CRT криво написан. Вот вам другая процедура:

procedure Stop(Wait:LongInt); assembler;
asm
   mov   ah,86h
   mov   dx,word ptr Wait
   mov   cx,word ptr Wait+2
   int   15h
end;

2) Если в программе используется модуль CRT, то программа виснет при запус- ке
из-за  инициализации,  которая  потом используется  процедурой  Delay().  Ини-
циализация происходит в любом случае - даже если эта процедура не используется
в  программе. При написании своих программ используйте пропатченный CRT. Чтобы
заработала уже скомпилированная программа (чужая), возьмите hex-редактор и:

Ищем:       B93700F7F1
Меняем на:    6E          (увеличение в 2 раза)
или на:           9090    (убрать деление вообще)

    Программа _не_ должна быть запакована EXE-паковщиками.

3)  Для  того,  чтобы  самому  пропатчить  CRT  сделайте  следующее.  В  файле
'crt.asm', расположенном в каталоге 'BP\RTL\CRT', найдите строчки
             NOT     DX
             MOV     CX,55
             DIV     CX
(они  располагаются  на  строках  104-106). Замените во второй строке значение
'55'  на  что-то  большее - например на '110'  или '550'. Либо можете удалить/
закоментировать/заменить   команду   третьей  строки на команду(ы) NOP. Затем,
следуя  инструкциям файла 'readme' из 'BP\RTL', создайте с помощью 'makefile',
расположенного  в  том  же  каталоге,  файлы  'TURBO.TPL'  (для 'real mode') и
'TPP.TPL'  (для  'protected  mode').  Замените  ими  соответствующие  файлы  в
каталоге  'BP\BIN'.  Патчить  аналогичный  модуль  'TPW.TPL'  для  Windows  не
обязательно, т.к. он не содержит такой ошибки.
------------------------------------------------------------------------------
Q: А как преобразовать число, большее чем максимальное положительное значение
   longint, но меньшее, чем $FFFFFFFF, в строку? Оно ведь отрицательное
   получается...

A: Замечательные функции есть на этот счет в пакете Turbo Professional.
   Например, преобразование longint в строку, да еще в 16-ричный вид:
   HexL(l:Longint):String;
------------------------------------------------------------------------------
Q: Нужен формат JAM, SQUISH, HUDSON...

A: Ищите библиотеку MkMsg для работы с базами фидошных форматов.
   Также Sergey Korowkin (2:5033/27, он же - автор FastUUE/FastPOST) пишет
   skMHL, пока что идут бета версии, но уже вполне работоспособны.
   Или:
   rMsg можно взять на http://raven66.newmail.ru в pазделе sources. либо
   попpосить у автоpа: Dmitry Suhodoev, 2:5010/150.16.
------------------------------------------------------------------------------
Q: Как узнать ErrorLevel,который выставила программа, запущенная через Exec()?

A: С помощью DosExitCode:

{$M 8192,0,0}
Uses Dos;
Begin
  SwapVectors;
  Exec(FExpand(FSearch('arj.exe',GetEnv('PATH'))),'x a.arj');
  SwapVectors;
  WriteLn(lo(DosExitCode));
End.
------------------------------------------------------------------------------
Q: Глючат процедуры побитового сдвига shl, shr в применении к LongInt

A: Известный баг. Можно поставить фикс, или же использовать свои процедуры.
Вот пример (работают на 386+):

function LongShl(A: LongInt; B: Byte): LongInt; assembler;
asm
  mov	  cl,[B]
  db	  $66	{код опеpаций с 32-битными pегистpами}
  mov	  ax,word ptr [A]
  db	  $66
  shl	  ax,cl
  db	  $66
  push    ax
  pop	  ax
  pop	  dx
end;
function LongShr(A: LongInt; B: Byte): LongInt; assembler;
asm
  mov	  cl,[B]
  db	  $66
  mov	  ax,word ptr [A]
  db	  $66
  shr	  ax,cl
  db	  $66
  push    ax
  pop	  ax
  pop	  dx
end;
------------------------------------------------------------------------------
Q: А можно записать в середину текстового файл строку произвольной длины, но
   чтобы остальные строки остались, как были, или удалить одну строку из
   середины?

A: Просто так - нет. Есть два варианта. Простой: открываете второй файл,
   читаете строки из первого, пишете строки во второй, пропуская то, что не
   нужно или дополняя в нужных местах. Сложный: открываете файл, как бинарный,
   составляете список длин строк, и копируете куски файла в другой с помощью
   BlockRead/BlockWrite.
------------------------------------------------------------------------------
Q: Как получить полное имя файла с путем, если известно его имя и то, что он
   лежит в одном из каталогов, определенных в переменной PATH?

A: FileName:=FExpand(FSearch('file.ext',GetEnv('PATH')))
------------------------------------------------------------------------------
Q: Как вставить в мою программу показ файлов BMP/PCX/TGA/GIF/JPG/..

A: Универсального алгоритма для чтения и вывода на экран различных графических
   файлов не существует. Стандартизированы лишь методы сжатия информации,
   которые используются в каждом из графических форматов - берется
   документация по нужному форматы и производится чтение файла. Существуют
   библиотеки, в которых уже реализована работа с распространенными форматами-
   их необходимо искать, как всегда, в SWAG или на разных BBS
------------------------------------------------------------------------------
Q: Как работать с модемом?
A1:
var
    Port:Text;
begin
  Assign(Port,'COM2');
  Rewrite(Port);
  WriteLn(Port,'ATZ');
  Close(Port);
End.

A2: Для ноpмальной pаботы с модемом, с протоколами приема и передачи файлов и
    т.п. пpидется использовать либо int 14h, либо интеpфейс fossil (см.
    справочники "Ralf Brown's interrupt list" или TechHelp, либо, что проще -
    библиотеку Asynch Professional.
------------------------------------------------------------------------------
>Q: Хочу паскаль под DOS, но в защищенном режиме! 32-bit protected! Под Win32!
   Под OS/2!

A: 16-bit защищенный режим, он же DPMI, присутствует  в  стандартной  поставке
   Borland   Pascal   7.0.  Turbo Pascal - это всего лишь  облегченная  версия
   BP,  посему   запустите  bp.exe  и узнаете много нового (хотя бы посмотрите
   на    возможности    пункта   target   компиляции).

   Под   32-bit   DOS  есть разработка  под  названием   TMT   Pascal.
   http://www.tmt.com

   Под  Win32   лучше   Delphi  ничего  пока  не придумали.

   Под    OS/2,   DMPI32  и  Win32  одновременно  есть  неплохой,  по отзывам,
   Virtual   Pascal   2.1. По синтаксису совместим с BP 7 и Delphi 2.
   www.vpascal.com

   Еще  один  многоплатформенный  паскаль - Free Pascal. Пока довольно глючная
   вещь, зато поддерживает: Dos-32, Win32, OS/2, Linux.
------------------------------------------------------------------------------
Q: Дайте исходники резидента.

A: Набери в редакторе слово keep, наведи на него курсор и нажми Ctrl-F1
------------------------------------------------------------------------------
Q: Как обойти каталоги на диске?

A: Используя процедуры FindFirst, FindNext. Их описание есть в хелпе. Вкратце-
   в функции обхода перебираем все вхождения в каталог, и проверяем каждое из
   них - если это каталог, то входим в него и рекурсивно вызываем функцию
   обхода каталога.
------------------------------------------------------------------------------
Q: Как сделать процедуру с нефиксированным числом параметров, типа writeln?
A:  икак. WriteLn - это не процедура вовсе, это макрос такой, сделанный для
   удобства и средствами Pascal не реализуемый.
------------------------------------------------------------------------------
				 Turbo Vision
------------------------------------------------------------------------------
Q: А бывает Turbo Vision в графике?

A: Бывает. Delphi, для Win32. Если очень хочется под дос - есть библиотека
   Graphic Vision, представляющая из себя копию TV для граф. режимов.
------------------------------------------------------------------------------
Q: Хочу использовать TFrame, но не получается изменить заголовок.

A:

if MyWindow^.Title <> nil then
  DisposeStr(MyWindow^.Title);
MyWindow^.Title:=NewStr('Это окошко :-))');
MyWindow^.Frame^.Draw;
------------------------------------------------------------------------------
Q: Где взять пропатченный модуль CRT,который не вылетает по Runtime Error 200?
A: Вот. CRT вместе с некоторыми другими модулями содержится в общей
библиотеке turbo.tpl. Для включения этого модуля необходимо написать:

<полный_путь>\tpumover.exe turbo.tpl +crt.tpu

(утилита tpumover лежит в каталоге tp\utils)

section 1 of uuencode 5.21 of file crt.rar    by R.E.M.

begin 644 crt.rar
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
6$\$!;1==>7X*[(80N<`K_IYU@-]AK]]A
`
end
sum -r/size 29490/5638 section (from "begin" to "end")
sum -r/size 32681/4072 entire input file

Вернуться в раздел "Языки Pascal/Delphi" - Обсудить эту статью на Форуме
Главная - Поиск по сайту - О проекте - Форум - Обратная связь

© faqs.org.ru