|
|
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
© faqs.org.ru