Лучшие автора конкурса
1. saleon@bk.ru (277)
4. patr1cia@i.ua (45)
Вселенная:
Результат
Архив

Главная / Учебники / Учебники на русском языке / Компьютерные науки / Borland Pascal 7.0 & Objects - Справочное руководство программиста


Компьютерные науки - Учебники на русском языке - Скачать бесплатно


Автор неизвестен
Borland Pascal 7.0 & Objects - Справочное руководство программиста

Справочное руководство программиста
=========================================================================

B.Pascal 7 & Objects/PG - 1 -

Введение.......................................................21
Об этом руководстве............................................21
Глава 1. Справочник по библиотеке..............................23
Процедура Sample Содержащие ее
модули........................................................23
Константы, типы и переменные...................................24
Тип ArcCoordsType модуль
Graph.........................................................24
Переменная AutoTracking модуль
WinCrt........................................................24
Константы Bar модуль
Graph.........................................................25
Операции BitBlt модуль
Graph.........................................................25
Тип Bool модуль
WinAPI........................................................26
Переменная CheckBreak
модуль Crt....................................................26
Переменная CheckBreak модуль
WinCrt........................................................27
Переменная CheckEof
модуль Crt....................................................27
Переменная CheckEof модуль
WinCrt........................................................28
Переменная CheckSnow
модуль Crt....................................................28
Константы отсечения модуль
Graph.........................................................29
Переменная CmdLine модуль
System........................................................29
Переменная CmdShow модуль
System........................................................30
Константы цветов модуль
Graph.........................................................30
Константы цветов для SetRGBPalette модуль
Graph.........................................................31
Константы режима Crt
модуль Crt....................................................32
Переменная Cursor модуль
WinCrt........................................................33
Тип DateTime
модуль Dos....................................................33
Переменная DirectVideo
модуль Crt....................................................34
Переменная DosError модуль Dos,
WinDos........................................................35
Драйверы и константы режима модуль
Graph.........................................................36
Переменная ErrorAddr модуль
System........................................................39
Константы флагов fcXXXX модуль
WinDos........................................................39
Константы атрибутов файла модули Dos,

B.Pascal 7 & Objects/PG - 2 -

WinDos........................................................40
Константы длины имени файла модуль
WinDos........................................................41
Типы работы со строками
модуль Dos....................................................41
Переменная FileMode модуль
System........................................................42
Тип FileRec
модуль Dos....................................................43
Константы образцов закраски модуль
Graph.........................................................44
Тип FillPatternType
модуль Dos....................................................45
Тип FillSettingType модуль
Graph.........................................................45
Константы флагов модуль Dos,
WinDos........................................................46
Константы fmXXXX модуль Dos,
WinDos........................................................47
Константы шрифтов модуль
Graph.........................................................47
Переменная FreeList модуль
System........................................................48
Константы флага памяти gmem_XXXX модуль
WinAPI........................................................49
Переменная GraphFreeMemPtr модуль
Graph.........................................................50
Переменная GraphGetMemPtr модуль
Graph.........................................................51
Константы grXXXX модуль
Graph.........................................................52
Переменная HeapAllocFlags модуль
System........................................................53
Переменная HeapBlock модуль
System........................................................53
Переменная HeapEnd модуль
System........................................................54
Переменная HeapError модуль
System........................................................55
Переменная HeapLimit модуль
System........................................................56
Переменная HeapList модуль
System........................................................56
Переменная HeapOrg модуль
System........................................................57
Переменная HeapPtr модуль
System........................................................57
Переменная HInstance модуль
System........................................................58
Переменная HPrevInst модуль
System........................................................58
Константы Id_XXXX модуль
WinAPI........................................................59

B.Pascal 7 & Objects/PG - 3 -

Переменная InactiveTitle модуль
WinCrt........................................................59
Переменная InOutRes модуль
System........................................................60
Переменная Input модуль
System........................................................60
Константы выравнивания модуль
Graph.........................................................61
Переменная LastMode
модуль Crt....................................................61
Константы стиля линии модуль
Graph.........................................................62
Тип LineSettingsType модуль
Graph.........................................................63
Переменная Lst модуль
Printer.......................................................64
Константы MaxColors модуль
Craph.........................................................64
Константы mb_XXXX модуль
WinAPI........................................................65
Переменная Origin модуль
WinCrt........................................................67
Переменная Output модуль
System........................................................68
Переменная OvrCodeList модуль
Overlay.......................................................69
Переменная OvrDebugPtr модуль
Overlay.......................................................69
Переменная OvrDosHandle модуль
System........................................................70
Переменная OvrEmsHandle модуль
System........................................................70
Переменная OvrFileMode модуль
Overlay.......................................................71
Переменная OvrHeapEnd модуль
System........................................................71
Переменная OvrHeapOrg модуль
System........................................................72
Переменная OvrHeapPtr модуль
System........................................................73
Переменная OvrHeapSize модуль
System........................................................73
Переменная OvrLoadCount модуль
Overlay.......................................................74
Переменная OvrLoadList модуль
System........................................................74
Переменная OvrReadBuf модуль
Overlay.......................................................75
Переменная OvrResult модуль
Overlay.......................................................75
Переменная OvrTrapCount модуль
Overlay.......................................................76
Константы ovrXXXX модуль

B.Pascal 7 & Objects/PG - 4 -

Overlay.......................................................76
Тип PaletteType модуль
Graph.........................................................77
Тип PointType модуль
Graph.........................................................77
Переменная PrefixSeg модуль
System........................................................78
Переменная RandSeed модуль
System........................................................78
Переменная ReadModeRegs модуль
System........................................................79
Тип Registers
модуль Dos....................................................79
Переменные SaveIntXX модуль
System........................................................80
Типизированные константы ScreenSize модуль
WinCrt........................................................82
Тип SearchRec
модуль Dos....................................................83
Переменная Seg0040 модуль
System........................................................83
Переменная SegA000 модуль
System........................................................84
Переменная SegB000 модуль
System........................................................84
Переменная SegB800 модуль
System........................................................85
Переменная SelectorInc модуль
System........................................................85
Переменная StackLimit модуль
System........................................................86
Тип TDateTime модуль
WinDos........................................................86
Переменная Test8086 модуль
System........................................................87
Переменная Test8087 модуль
System........................................................88
Переменная TextAttr
модуль Crt....................................................89
Константы цветов текста
модуль Crt....................................................90
Тип TextRec
модуль Dos....................................................91
Тип TextSettingsType модуль
Graph.........................................................92
Тип TFarProc модуль
WinAPI........................................................92
Тип TFileRec модуль
WinDos........................................................93
Тип THandle модуль
WinAPI........................................................93
Тип TRegisters модуль
WinDos........................................................94

B.Pascal 7 & Objects/PG - 5 -

Тип TSearchRec модуль
WinDos........................................................94
Тип TTextRec модуль
WinDos........................................................95
Тип ViewPortType модуль
Graph.........................................................96
Флаги конфигурации wf_XXXX модуль
VinAPI........................................................97
Переменные WindMax и WindMin
модуль Crt....................................................97
Переменная WindowOrg модуль
WinCrt........................................................98
Переменная WindowSize модуль
WinCrt........................................................98
Переменная WindowTitle модуль
WinCrt........................................................99
Процедуры и функции...........................................100
Процедура AbortPrn модуль
WinPrn.......................................................100
Функция Abs модуль
System.......................................................101
Функция AccessResource модуль
WinApi.......................................................102
Функция Addr модуль
System.......................................................103
Функция AllocDStoCSAlias модуль
WinApi.......................................................104
Функция AllocSelector модуль
WinApi.......................................................105
Процедура Append модуль
System.......................................................106
Процедура Arc модуль
Graph........................................................107
Функция ArcTan модуль
System.......................................................108
Процедура Assign модуль
System.......................................................108
Функция AssignCrt
модуль Crt...................................................110
Функция AssignCrt модуль
WinCrt.......................................................111
Функция AssignDefPrn модуль
WinPrn.......................................................111
Функция Assigned модуль
System.......................................................112
Процедура AssignPrn модуль
WinPrn.......................................................113
Процедура Bar модуль
Graph........................................................114
Процедура Bar3D модуль
Graph........................................................115
Процедура BlockRead модуль
System.......................................................117

B.Pascal 7 & Objects/PG - 6 -

Процедура BlockWrite модуль
System.......................................................119
Процедура Break модуль
System.......................................................121
Функция ChangeSelector модуль
WinAPI.......................................................122
Процедура ChDir модуль
System.......................................................123
Функция Chr модуль
System.......................................................124
Процедура Circle модуль
Graph........................................................125
Процедура ClearDevice модуль
Graph........................................................126
Процедура ClearViewPort модуль
Graph........................................................127
Процедура Close модуль
System.......................................................128
Процедура CloseGraph модуль
Graph........................................................129
Процедура CrlEol
модуль Crt...................................................130
Процедура CrlEol модуль
WinCrt.......................................................130
Процедура ClrScr
модуль Crt...................................................131
Процедура ClrScr модуль
WinCrt.......................................................132
Функция Concat модуль
System.......................................................133
Процедура Continue модуль
System.......................................................134
Функция Copy модуль
System.......................................................135
Функция Cos модуль
System.......................................................136
Процедура CreateDir модуль
WinDos.......................................................136
Функция CSeg модуль
System.......................................................137
Процедура CursorTo модуль
WinCrt.......................................................137
Процедура Dec модуль
System.......................................................138
Процедура Delay
модуль Crt...................................................139
Процедура Delete модуль
System.......................................................139
Процедура DelLine
модуль Crt...................................................140
Процедура DetectGraph модуль
Graph........................................................141
Функция DiskFree

B.Pascal 7 & Objects/PG - 7 -

модуль Dos...................................................142
Функция DiskSize
модуль Dos...................................................143
Процедура Dispose модуль
System.......................................................144
Процедура DoneWithCrt модуль
WinCrt.......................................................145
Функция DosExitCode
модуль Dos...................................................145
Процедура DOS3Call модуль
WinAPI.......................................................146
Процедура DosVersion модуль Dos,
WinDos.......................................................147
Процедура DrawPoly модуль
Graph........................................................148
Функция Dseg модуль
System.......................................................149
Процедура Ellipse модуль
Graph........................................................150
Функция EnvCount
модуль Dos...................................................151
Функция EnvStr
модуль Dos...................................................151
Функция Eof (текстовые файлы) модуль
System.......................................................152
Функция Eof (типизированные и нетипизированные файлы) мод.
System.......................................................153
Функция Eoln модуль
System.......................................................154
Процедура Erase модуль
System.......................................................155
Процедура Exclude модуль
System.......................................................156
Процедура Exec
модуль Dos...................................................156
Процедура Exit модуль
System.......................................................158
Переменная ExitCode модуль
System.......................................................158
Переменная ExitProc модуль
System.......................................................159
Функция Exp модуль
System.......................................................159
Процедура FatalExit модуль
WinAPI.......................................................160
Функция FExpand
модуль Dos...................................................160
Функция FileExpand модуль
WinDos.......................................................161
Функция FilePos модуль
System.......................................................162
Функция FileSearch модуль
WinDos.......................................................163

B.Pascal 7 & Objects/PG - 8 -

Функция FileSize модуль
System.......................................................164
Функция FileSplit модуль
WinDos.......................................................165
Процедура FillChar модуль
System.......................................................166
Функция FillEllipse
модуль Dos...................................................167
Процедура FillPoly модуль
Graph........................................................168
Процедура FindFirst модуль Dos,
WinDos.......................................................169
Процедура FindNext модуль Dos,
WinDos.......................................................170
Функция FindResource модуль
WinAPI.......................................................171
Процедура FloodFill модуль
Graph........................................................172
Процедура Flush модуль
System.......................................................174
Функция Frac модуль
System.......................................................175
Процедура FreeLibrary модуль
WinAPI.......................................................175
Процедура FreeMem модуль
System.......................................................176
Функция FreeResource модуль
WinAPI.......................................................177
Функция FreeSelector модуль
WinAPI.......................................................178
Функция FSearch
модуль Dos...................................................178
Процедура FSplit
модуль Dos...................................................179
Процедура GetArcCoords модуль
Graph........................................................180
Функция GetArgCount модуль
WinDos.......................................................181
Функция GetArgStr модуль
WinDos.......................................................181
Процедура GetAspectRatio модуль
Graph........................................................182
Функция GetBkColor модуль
Graph........................................................183
Процедура GetCBreak
модуль Dos...................................................184
Функция GetColor модуль
Graph........................................................185
Функция GetCurDir модуль
WinDos.......................................................186
Процедура GetDate модуль Dos,
WinDos.......................................................186
Функция GetDefaultPalette модуль

B.Pascal 7 & Objects/PG - 9 -

Graph........................................................187
Процедура GetDir модуль
System.......................................................188
Функция GetDOSEnviroment модуль
WinAPI.......................................................189
Функция GetDriverName модуль
Graph........................................................190
Функция GetEnv
модуль Dos...................................................191
Функция GetEnvVar модуль
WinDos.......................................................192
Процедура GetFAttr
модуль Dos...................................................193
Процедура GetFillPattern модуль
Graph........................................................194
Процедура GetFillSettings модуль
Graph........................................................195
Функция GetFreeSpace модуль
WinAPI.......................................................196
Процедура GetFTime модуль Dos,
WinDos.......................................................197
Функция GetGraphMode модуль
Graph........................................................197
Процедура GetImage модуль
Graph........................................................200
Процедура GetIntVec
модуль Dos...................................................201
Процедура GetLineSettings модуль
Graph........................................................201
Процедура GetMaxColor модуль
Graph........................................................203
Функция GetMaxMode модуль
Graph........................................................204
Функция GetMахХ модуль
Graph........................................................205
Функция GetМахY модуль
Graph........................................................206
Процедура GetMem модуль
System.......................................................207
Функция GetModeName модуль
Graph........................................................208
Процедура GetModeRange модуль
Graph........................................................209
Функция GetModuleFileName модуль
WinAPI.......................................................210
Функция GetModuleHandle модуль
WinAPI.......................................................210
Функция GetModuleUsage модуль
WinAPI.......................................................211
Процедура GetPalette модуль
Graph........................................................212
Функция GetPaletteSize модуль
Graph........................................................213

B.Pascal 7 & Objects/PG - 10 -

Процедура GetPixel модуль
Graph........................................................214
Функция GetProcAddress модуль
WinAPI.......................................................215
Функция GetSelectorBase модуль
WinAPI.......................................................216
Функция GetSelectorLimit модуль
WinAPI.......................................................216
Процедура GetTextSettings модуль
Graph........................................................217
Процедура GetTime
модуль Dos...................................................218
Процедура GetVerify модуль Dos,
WinDos.......................................................218
Функция GetVersion модуль
WinAPI.......................................................219
Процедура GetViewSettings модуль
Graph........................................................220
Функция GetWinFlags модуль
WinAPI.......................................................221
Функция GetX модуль
Graph........................................................222
Функция GetY модуль
Graph........................................................223
Функция GlobalAlloc модуль
WinAPI.......................................................224
Функция GlobalAllocPrt модуль
WinAPI.......................................................226
Функция GlobalCompact модуль
WinAPI.......................................................227
Функция GlobalDiscard модуль
WinAPI.......................................................227
Функция GlobalDosAlloc модуль
WinAPI.......................................................228
Функция GlobalDosFree модуль
WinAPI.......................................................229
Процедура GlobalFix модуль
WinAPI.......................................................229
Функция GlobalFlags модуль
WinAPI.......................................................230
Функция GlobalFree модуль
WinAPI.......................................................231
Функция GlobalFreePtr модуль
WinAPI.......................................................231
Функция GlobalHandle модуль
WinAPI.......................................................232
Функция GlobalLock модуль
WinAPI.......................................................232
Функция GlobalLRUNewest модуль
WinAPI.......................................................233
Функция GlobalLRUOldest модуль
WinAPI.......................................................233
Функция GlobalNotify модуль

B.Pascal 7 & Objects/PG - 11 -

WinAPI.......................................................234
Функция GlobalPageLock модуль
WinAPI.......................................................235
Функция GlobalPageUnLock модуль
WinAPI.......................................................235
Функция GlobalPtrHandle модуль
WinAPI.......................................................236
Функция GlobalReAlloc модуль
WinAPI.......................................................237
Функция GlobalReAllocPtr модуль
WinAPI.......................................................238
Функция GlobalSize модуль
WinAPI.......................................................239
Функция GlobalUnfix модуль
WinAPI.......................................................239
Функция GlobalUnlock модуль
WinAPI.......................................................240
Процедура GotoXY
модуль Crt...................................................240
Процедура GotoXY модуль
WinCrt.......................................................241
Процедура GraphDefaults модуль
Graph........................................................241
Функция GraphErrorMsg модуль
Graph........................................................242
Функция GraphResult модуль
Graph........................................................243
Процедура Halt модуль
System.......................................................245
Функция Hi модуль
System.......................................................245
Функция HiByte модуль
WinAPI.......................................................246
Функция High модуль
System.......................................................246
Процедура HighVideo
модуль Crt...................................................247
Функция HiWord модуль
WinAPI.......................................................247
Процедура ImageSize модуль
Graph........................................................248
Процедура Inc модуль
System.......................................................249
Процедура Include модуль
System.......................................................250
Процедура InitGraph модуль
Graph........................................................250
Процедура InitWinCrt модуль
WinCrt.......................................................253
Процедура Insert модуль
System.......................................................253
Процедура InsLine
модуль Crt...................................................254

B.Pascal 7 & Objects/PG - 12 -

Функция InstallUserDriver модуль
Graph........................................................255
Функция InstallUserFont модуль
Graph........................................................258
Функция Int модуль
System.......................................................259
Процедура Intr модуль Dos,
WinDos.......................................................260
Функция IOResult модуль
System.......................................................261
Процедура Keep
модуль Dos...................................................262
Функция KeyPressed
модуль Crt...................................................262
Функция KeyPressed модуль
WinCrt.......................................................263
Функция Length модуль
System.......................................................264
Процедура Line модуль
Graph........................................................265
Процедура LineRel модуль
Graph........................................................267
Процедура LineTo модуль
Graph........................................................268
Функция Ln модуль
System.......................................................269
Функция Lo модуль
System.......................................................269
Функция LoadLibrary модуль
WinAPI.......................................................270
Функция LoadResource модуль
WinAPI.......................................................273
Функция LoadString модуль
WinAPI.......................................................274
Функция LoByte модуль
WinAPI.......................................................274
Функция LockResource модуль
WinAPI.......................................................275
Функция LockSegment модуль
WinAPI.......................................................275
Функция LoWord модуль
WinAPI.......................................................276
Функция Low модуль
System.......................................................277
Процедура LowVideo
модуль Crt...................................................278
Функция MakeLong модуль
WinAPI.......................................................278
Функция MaxAvail модуль
System.......................................................279
Функция MemAvail модуль
System.......................................................280
Функция MessageBox модуль

B.Pascal 7 & Objects/PG - 13 -

WinAPI.......................................................281
Процедура MkDir модуль
System.......................................................283
Процедура Move модуль
System.......................................................284
Процедура MoveRel модуль
Graph........................................................285
Процедура MoveTo модуль
Graph........................................................286
Функция MsDos
модуль Dos...................................................287
Процедура New модуль
System.......................................................287
Процедура NormVideo
модуль Crt...................................................288
Процедура NoSound
модуль Crt...................................................288
Функция Odd модуль
System.......................................................289
Функция Ofs модуль
System.......................................................289
Функция Ord модуль
System.......................................................290
Процедура OutText модуль
Graph........................................................290
Процедура OutTextXY модуль
Graph........................................................293
Процедура OvrClearBuf модуль
Overlay......................................................294
Процедура OvrGetBuf модуль
Overlay......................................................294
Функция OvrGetRetry модуль
Overlay......................................................295
Процедура OvrInit модуль
Overlay......................................................296
Процедура OvrInitEMS модуль
Overlay......................................................296
Процедура OvrSetBuf модуль
Overlay......................................................299
Процедура OvrSetRetry модуль
Overlay......................................................300
Процедура PackTime
модуль Dos...................................................301
Функция ParamCount модуль
System.......................................................301
Функция ParamStr модуль
System.......................................................302
Функция Pi модуль
System.......................................................302
Процедура PieSlice модуль
Graph........................................................303
Функция Pos модуль
System.......................................................304

B.Pascal 7 & Objects/PG - 14 -

Функция Pred модуль
System.......................................................305
Функция Ptr модуль
System.......................................................305
Процедура PutImage модуль
Graph........................................................306
Процедура PutPixel модуль
Graph........................................................309
Функция Random модуль
System.......................................................310
Процедура Randomize модуль
System.......................................................310
Процедура Read (текстовые файлы) модуль
System.......................................................311
Процедура Read (типизированные файлы) модуль
System.......................................................313
Функция ReadBuf модуль
WinCrt.......................................................314
Функция ReadKey
модуль Crt...................................................314
Функция ReadKey модуль
WinCrt.......................................................316
Процедура ReadLn модуль
System.......................................................316
Процедура Rectangle модуль
Graph........................................................317
Функция RegisterBGIdriver модуль
Graph........................................................318
Функция RegisterBGIfont модуль
Graph........................................................320
Процедура RemoveDir модуль
WinDos.......................................................323
Процедура Rename модуль
System.......................................................323
Процедура Reset модуль
System.......................................................324
Процедура RestoreCrtMode модуль
Graph........................................................325
Процедура Rewrite модуль
System.......................................................327
Процедура RmDir модуль
System.......................................................329
Функция Round модуль
System.......................................................330
Процедура RunError модуль
System.......................................................330
Процедура ScrollTo модуль
WinCrt.......................................................331
Процедура Sector модуль
Graph........................................................331
Процедура Seek модуль
System.......................................................333
Функция SeekEof модуль

B.Pascal 7 & Objects/PG - 15 -

System.......................................................333
Функция SeekEoln модуль
System.......................................................334
Функция Seg модуль
System.......................................................334
Процедура SetActivePage модуль
Graph........................................................335
Процедура SetAllPalette модуль
Graph........................................................336
Процедура SetAspectRatio модуль
Graph........................................................338
Процедура SetBkColor модуль
Graph........................................................340
Процедура SetCBreak
модуль Dos...................................................341
Процедура SetColor модуль
Graph........................................................342
Процедура SetCurDir модуль
WinDos.......................................................343
Процедура SetDate
модуль Dos...................................................343
Процедура SetFAttr
модуль Dos...................................................344
Процедура SetFillPattern модуль
Graph........................................................345
Процедура SetFillStyle модуль
Graph........................................................347
Процедура SetFTime модуль Dos,
WinDos.......................................................348
Процедура SetGraphMode модуль
Graph........................................................348
Процедура SetGraphMode модуль
Graph........................................................349
Процедура SetIntVec модуль Dos,
WinDos.......................................................350
Процедура SetLineStyle модуль
Graph........................................................351
Процедура SetPalette модуль
Graph........................................................353
Функция SetPrnFont модуль
WinPrn.......................................................355
Процедура SetRGBPalette модуль
Graph........................................................356
Функция SetSelectorBase модуль
WinAPI.......................................................358
Функция SetSelectorLimit модуль
WinAPI.......................................................358
Процедура SetTextBuf модуль
System.......................................................359
Процедура SetTextJustify модуль
Graph........................................................361
Процедура SetTextStyle модуль
Graph........................................................362

B.Pascal 7 & Objects/PG - 16 -

Процедура SetTime
модуль Dos...................................................364
Процедура SetUserCharSize модуль
Graph........................................................364
Процедура SetVerify
модуль Dos...................................................366
Процедура SetViewPort модуль
Graph........................................................366
Процедура SetVisualPage модуль
Graph........................................................369
Процедура SetWriteMode модуль
Graph........................................................370
Функция Sin модуль
System.......................................................372
Функция SizeOf модуль
System.......................................................373
Процедура SizeofResource модуль
WinAPI.......................................................374
Процедура Sound
модуль Crt...................................................374
Функция SPtr модуль
System.......................................................375
Функция Sqr модуль
System.......................................................375
Функция Sqrt модуль
System.......................................................376
Функция SSeg модуль
System.......................................................376
Процедура Str модуль
System.......................................................377
Функция StrCat модуль
Strings......................................................378
Функция StrComp модуль
Strings......................................................379
Функция StrCopy модуль
Strings......................................................380
Функция StrDispose модуль
Strings......................................................380
Функция StrECopy модуль
Strings......................................................381
Функция StrEnd модуль
Strings......................................................382
Функция StrIComp модуль
Strings......................................................382
Функция StrLCat модуль
Strings......................................................383
Функция StrLComp модуль
Strings......................................................384
Функция StrLCopy модуль
Strings......................................................385
Функция StrLen модуль
Strings......................................................385
Функция StrLIComp модуль

B.Pascal 7 & Objects/PG - 17 -

Strings......................................................386
Функция StrLower модуль
Strings......................................................386
Функция StrMove модуль
Strings......................................................387
Функция StrNew модуль
Strings......................................................388
Функция StrPas модуль
Strings......................................................389
Функция StrPCopy модуль
Strings......................................................390
Функция StrPos модуль
Strings......................................................391
Функция StrRScan модуль
Strings......................................................392
Функция StrScan модуль
Strings......................................................393
Функция StrUpper модуль
Strings......................................................394
Функция Succ модуль
System.......................................................395
Функция Swap модуль
System.......................................................395
Процедура SwapVectors
модуль Dos...................................................396
Процедура TextBackGround
модуль Crt...................................................397
Процедура TextColor
модуль Crt...................................................398
Функция TextHeight модуль
Graph........................................................399
Процедура TextMode
модуль Crt...................................................400
Функция TextWidth модуль
Graph........................................................402
Процедура TitlePrn модуль
WinPrn.......................................................404
Процедура TrackCursor модуль
WinCrt.......................................................404
Функция Trunc модуль
System.......................................................405
Процедура Truncate модуль
System.......................................................405
Функция TypeOf модуль
System.......................................................406
Функция UnlockResource модуль
WinAPI.......................................................406
Функция UnlockSegment модуль
WinAPI.......................................................407
Процедура UnpackTime модуль Dos,
WinDos.......................................................407
Функция UpCase модуль
System.......................................................408

B.Pascal 7 & Objects/PG - 18 -

Процедура Val модуль
System.......................................................408
Функция WhereX
модуль Crt...................................................410
Функция WhereX модуль
WinCrt.......................................................410
Функция WhereY
модуль Crt...................................................410
Функция WhereY модуль
WinCrt.......................................................411
Процедура Window
модуль Crt...................................................411
Процедура Write (текстовые файлы) модуль
System.......................................................412
Процедура Write (типизированные файлы) модуль
System.......................................................415
Функция WriteBuf модуль
WinCrt.......................................................416
Функция WriteChar модуль
WinCrt.......................................................416
Процедура Writeln.............................................417
Глава 2. Директивы компилятора................................418
Выравнивание данных
переключатель................................................420
Булевские вычисления
переключатель................................................421
Атрибут сегмента кода
параметр.....................................................422
Информация для отладки
переключатель................................................423
Директива DEFINE условная
компиляция...................................................425
Описание
параметр.....................................................425
Директива ELSE условная
компиляция...................................................426
Эмуляция
переключатель................................................426
Директива ENDIF условная
компиляция...................................................427
Принудительный дальний тип вызова
переключатель................................................427
Генерация кода для процессора 80286
переключатель................................................428
Сегменты групп модулей
параметр.....................................................429
Директива IFDEF условная
компиляция...................................................429
Директива IFNDEF условная
компиляция...................................................430
Директива IFOPT условная
компиляция...................................................430
Включение файла

B.Pascal 7 & Objects/PG - 19 -

параметр.....................................................431
Проверка ошибок ввода-вывода
переключатель................................................431
Эффективные вызовы
переключатель................................................432
Компоновка объектного файла
параметр.....................................................432
Информация о локальных идентификаторах
переключатель................................................433
Размеры выделяемой памяти
параметр.....................................................434
Сопроцессор математических вычислений
переключатель................................................435
Генерация оверлейного кода
переключатель................................................435
Имя оверлейного модуля
параметр.....................................................436
Открытые строковые параметры
переключатель................................................436
Проверка переполнения
переключатель................................................437
Проверка границ
переключатель................................................438
Файл ресурсов
параметр.....................................................439
Допустимый размер сегмента
параметр.....................................................440
Проверка переполнения стека
параметр.....................................................441
Указатели с проверкой типов
переключатель................................................441
Директива UNDEF условная
компиляция...................................................442
Проверка параметров-переменных строкового типа
переключатель................................................442
Кадры стека Windows
переключатель................................................443
Расширенный синтаксис
переключатель................................................443
Информация о ссылках на идентификаторы
переключатель................................................444
Использование директив условной компиляции....................444
Условные идентификаторы.......................................445
Глава 3. Компилятор, работающий в режиме командной строки.....448
Параметры компилятора.........................................449
Параметры-директивы компилятора...............................451
Параметры режима компилятора..................................453
Параметр компиляции /C........................................453
Параметр формирования /М......................................454
Параметр построения /B........................................455
Параметр поиска ошибки /F.....................................455
Параметр буфера компоновки /L.................................457
Параметр сокращенного вывода /Q...............................457

B.Pascal 7 & Objects/PG - 20 -

Параметры для pаботы с каталогами.............................458
Параметр каталога /T..........................................458
Параметр каталога выполняемых файлов и файлов модулей (/E)....459
Параметр каталога включаемых файлов (/I)......................459
Параметр каталогов модулей (/R) (только для BPC)..............460
Параметр каталогов модулей (/U)...............................460
Параметр каталогов объектных файлов (/О)......................460
Параметры отладки.............................................461
Параметр файла MAP (/G).......................................461
Параметр автономной отладки (/V)..............................461
Файлы TPC.CFG и BPC.CFG.......................................463
Параметры компилятора, специфические для конкретной
платформы (только для BPC)...................................464
Глава 4. Сообщения об ошибках.................................465
Сообщения компилятора об ошибках..............................465
Ошибки 1 - 50.................................................466
Ошибки 51 - 100...............................................472
Ошибки 101 - 150..............................................478
Ошибки 151 - 169..............................................484
Ошибки этапа выполнения.......................................488
Ошибки DOS....................................................488
Ошибки ввода-вывода...........................................490
Критические ошибки............................................492
Фатальные ошибки..............................................493
Ошибки DPMI...................................................497
Ошибки DPMIINST...............................................497
Ошибки фиктивного модуля......................................497
Ошибки администратора этапа выполнения........................499
Ошибки DPMI-сервера...........................................502
Приложение A. Использование редактора.........................505
Подробное описание команд работы с блоками Таблица A.2........510
Описание команд работы с блоками фирмы Borland Таблица A.3...512
Другие команды редактирования.................................512
Поиск с регулярными выражениями...............................515
Приложение B. Краткий справочник по директивам компилятора....516
Приложение C. Зарезервированные слова и стандартные
директивы....................................................523
Приложение D. Символы ASCII...................................524

B.Pascal 7 & Objects/PG - 21 -

-------------------------------------------------------------------
Введение
-----------------------------------------------------------------

Данное руководство содержит материалы для программистов, уже
имеющих некоторый опыт работы.

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

* выяснить подробности ко конкретной процедуре, функции, ти-
пе, переменной или константе библиотеки исполняющей систе-
мы и узнать о том, как ее использовать;

* понять, что делает каждая директива компилятора, как она
работает и как ее использовать;

* узнать, как работать с компилятором режима командной стро-
ки;

* просмотреть список зарезервированных слов и стандартные
директивы компилятора;

* ознакомиться с командами редактора;

* просмотреть в краткой справочной таблице директивы компи-
лятора;

* ознакомиться с алфавитно-цифровыми символами ASCII, иден-
тификаторами и управляющими инструкциями.

Примечание: "Руководство пользователя" содержит спра-
вочную информацию об интегрированной интерактивной среде
Borland Pascal (включая редактор), подсистеме разработки
программ и компиляторах, работающих с командной строкой.
Чтобы узнать, как эффективнее работать с документацией,
прочтите введение к этому руководству.

Об этом руководстве
-----------------------------------------------------------------

Данное руководство разбито на четыре главы и четыре приложе-
ния:

Глава 1 "Справочник по библиотеке" представляет собой пере-
чень в алфавитном порядке всех процедур, функций, перемен-
ных, типов, констант и типизированных констант, которые мож-
но найти в модулях, образующих библиотеку исполняющей систе-
мы.

Глава 2 "Директивы компилятора" поясняет, как использовать
три типа директив компилятора и представляет детальный пере-
чень этих директив в алфавитном порядке.

B.Pascal 7 & Objects/PG - 22 -


Глава 3 "Компиляторы, работающие в режиме командной строки"
поясняет, как использовать компиляторы режима командной
строки.

В Главе 4 "Сообщения об ошибках" перечислены в алфавитном
порядке все сообщения об ошибках, которые вы можете обнару-
жить, и поясняется, что они означают.

Приложение A "Справочник по редактору" поясняет наборы ко-
манд CUA и альтернативный набор, которые вы можете использо-
вать при редактировании исходного кода.

В Приложении B "Краткий справочник по директивам компилято-
ра" перечисляются директивы компилятора, эквивалентные им
параметры командной строки и их описание.

В Приложении C "Зарезервированные слова и стандартные дирек-
тивы" перечисляются зарезервированные слова и стандартные
директивы Borland Pascal.

Примечание: Обзор модулей, которые можно найти в биб-
лиотеке исполняющей системы Borland Pascal, содержится в
"Руководстве по языку".


B.Pascal 7 & Objects/PG - 23 -

--------------------------------------------------------------------
Глава 1. Справочник по библиотеке
-----------------------------------------------------------------

В данной главе описываются все процедуры и функции Borland
Pascal with Objects, а также его переменные, типы и константы. В
начале описания каждого элемента указан модули или модули, содер-
жащие этот элемент данных или подпрограмму, а ниже следуют формат
описания, целевая платформа и относящиеся к данному элементу при-
мечания. В случае специальных ограничений они также описываются.
Перекрестные ссылки и примеры дают дополнительную информацию об
использовании указанного элемента. Это иллюстрируется приведенным
ниже примером процедуры Sample.


Процедура Sample Содержащие ее модули
-----------------------------------------------------------------

Назначение: Выполняемые ей действия.

Целевая платформа: Указывает целевую платформу для данного
элемента (защищенный режим DOS, реальный режим DOS или Windows).

Описание: Как описывается подпрограмма или элемент данных.
Для иллюстрации констант, значения которых не изменяются, вместо
описаний приведены таблицы.

Примечания: Специальная информация по данному элементу.

Ограничения: Специальные требования к данному элементу.

См. также: Родственные процедуры, переменные, функции, конс-
танты и типы, которые также описываются в данной главе.

Пример: Пример программы, иллюстрирующей, как данный элемент
использовать. В случае, когда этот элемент используется более чем
в одном модуле - несколько примеров программ.


B.Pascal 7 & Objects/PG - 24 -

--------------------------------------------------------------------
Константы, типы и переменные
-----------------------------------------------------------------

Тип ArcCoordsType модуль Graph
-----------------------------------------------------------------

Назначение: Используется в GetArcCoords для получения инфор-
мации о последнем вызове Arc или Ellipse.

Целевая платформа: Защищенный режим, реальный режим.

Описание:

type
ArcCoordsType = record
X, Y: Integer;
XStart, YStart: Integer;
XEnd, YEnd: Integer;
end;

См. также: GetArcCoords.

Переменная AutoTracking модуль WinCrt
-----------------------------------------------------------------

Назначение: Для сохранения видимости курсора разрешает и
запрещает прокрутку окна.

Целевая платформа: Windows.

Описание: var AutoTracking: Boolean;

Примечания: Когда AutoTracking имеет значение True, окно CRT
для обеспечения видимости курсора после каждой операции Write и
Writeln автоматически прокручивается. Если AutoTracking равно
False, то окно CRT не будет автоматически прокручиваться, и запи-
сываемый в окно текст может быть невидимым для пользователя.


B.Pascal 7 & Objects/PG - 25 -


Константы Bar модуль Graph
-----------------------------------------------------------------

Назначение: Управляет отображением "верха" трехмерного
столбца.

Целевая платформа: Реальный режим, защищенный режим.

Примечания: Константы Bar используются в процедуре Bar3D для
управления отображением верхней части трехмерных столбцов.

-------------------T----------------¬
¦ Константа ¦ Значение ¦
+------------------+----------------+
¦ TopOn ¦ True ¦
¦ TopOff ¦ False ¦
L------------------+-----------------

См. также: Bar3D.

Операции BitBlt модуль Graph
-----------------------------------------------------------------

Назначение: Используется в процедурах PutImage и
SetWriteMode.

Целевая платформа: Реальный режим, защищенный режим.

Примечания: Указанные логические операции представлены сле-
дующими значениями:

-------------------T----------------¬
¦ Константа ¦ Значение ¦
+------------------+----------------+
¦ CopyPut ¦ 0 (mov) ¦
¦ XORPut ¦ 1 (xor) ¦
+------------------+----------------+
¦ Используются только в PutImage: ¦
+------------------T----------------+
¦ OrPut ¦ 2 (or) ¦
¦ AndPut ¦ 3 (and) ¦
¦ NotPut ¦ 4 (not) ¦
L------------------+-----------------


B.Pascal 7 & Objects/PG - 26 -


Тип Bool модуль WinAPI
-----------------------------------------------------------------

Назначение: Булевский тип, используемый в модуле WinAPI.

Целевая платформа: Защищенный режим, Windows

Описание: type Bool = WordBool;

Примечания: Ряд функций в WinAPI возвращают значение типа
Bool. Значение Bool совместимо с типом Boolean, который использу-
ется для логических операций.

Переменная CheckBreak модуль Crt
-----------------------------------------------------------------

Назначение: Разрешает и запрещает проверки на Ctrl+Break.

Целевая платформа: Реальный режим, защищенный режим.

Описание: var CheckBreak: Boolean;

Примечания: Когда CheckBreak имеет значение True, то нажатие
клавиш Ctrl+Break при следующем выводе на экран прерывает прог-
рамму. Когда CheckBreak имеет значение False, то нажатие клавиш
Ctrl+Break никакого действия не оказывает. На этапе выполнения
Crt сохраняет старый вектор прерывания Ctrl+Break $1B в глобаль-
ной переменной-указателе SaveInt1B.

См. также: KeyPressed, ReadKey, SaveInt1B.


B.Pascal 7 & Objects/PG - 27 -


Переменная CheckBreak модуль WinCrt
-----------------------------------------------------------------

Назначение: Разрешает и запрещает проверки на Ctrl+Break.

Целевая платформа: Windows.

Описание: var CheckBreak: Boolean;

Примечания: Когда CheckBreak имеет значение True, то пользо-
ватель может завершить прикладную программу, выбрав в меню
Control окна CRT команду Close, дважды щелкнув "мышью" в блоке
управляющего меню окна или нажав ALt+F4. Аналогично, в любой мо-
мент для остановки приложения и перевода окна CRT в неактивное
состояние пользователь может нажать клавиши Ctrl+C или
Ctrl+Break. Когда переменная CheckBreak имеет значение False, все
эти средства запрещены.

См. также: KeyPressed, ReadKey, SaveInt1B.

Переменная CheckEof модуль Crt
-----------------------------------------------------------------

Назначение: Разрешает и запрещает символ конца файла.

Целевая платформа: Реальный режим, защищенный режим.

Описание: var CheckEOF: Boolean;

Примечания: Когда CheckEOF имеет значение True, то при нажа-
тии клавиш Ctrl+Z во время чтения файла присвоенного экрану, ге-
нерируется символ конца файла. Когда CheckEOF имеет значение
False, то клавиши Ctrl+Z не действуют. По умолчанию CheckEOF рав-
но False.


B.Pascal 7 & Objects/PG - 28 -


Переменная CheckEof модуль WinCrt
-----------------------------------------------------------------

Назначение: Разрешает и запрещает символ конца файла.

Целевая платформа: Windows.

Описание: var CheckEOF: Boolean;

Примечания: Когда CheckEOF имеет значение True, то при нажа-
тии клавиш Ctrl+Z во время чтения файла присвоенного окну CRT,
генерируется символ конца файла. Когда CheckEOF имеет значение
False, то клавиши Ctrl+Z не действуют. По умолчанию CheckEOF рав-
но False.

Переменная CheckSnow модуль Crt
-----------------------------------------------------------------

Назначение: Разрешает и запрещает проверку на помехи
("снег") для видеоадаптеров CGA.

Целевая платформа: Реальный режим, защищенный режим.

Описание: var CheckSnow: Boolean;

Примечания: На большинстве адаптеров CGA, если символы запи-
сываются в видеопамять вне интервалов обратного хода горизонталь-
ной развертки, возникают помехи. На монохромных адаптерах, EGA
или VGA это не происходит.

При выборе цветного режима CheckSnow устанавливается в зна-
чение True, и запись в видеопамять происходит только во время об-
ратного хода горизонтальной развертки. Если вы работаете с новым
адаптером CGA, то в начале программы после каждого вызова
TextMode эту переменную можно установить в False. Это выключает
проверку на помехи и значительно ускоряет вывод.

Ограничения: Если DirectVideo имеет значение False, то пере-
менная CheckSnow не действует.

См. также: DirectVideo.


B.Pascal 7 & Objects/PG - 29 -


Константы отсечения модуль Graph
-----------------------------------------------------------------

Назначение: Управляет отсечением, используется в процедуре
SetViewPort.

Целевая платформа: Реальный режим, защищенный режим.

Примечания: Когда отсечение разрешено, графический вывод от-
секается на границах области просмотра.

-------------------T----------------¬
¦ Константа ¦ Значение ¦
+------------------+----------------+
¦ ClipOn ¦ True ¦
¦ ClipOff ¦ False ¦
L------------------+-----------------

См. также: SetViewPort.

Переменная CmdLine модуль System
-----------------------------------------------------------------

Назначение: Указывает в программе на строку с завершающим
нулем, содержащую аргументы командной строки, заданные при запус-
ке прикладной программы.

Целевая платформа: Windows.

Описание: var CmdLine: PChar;

Примечания: В библиотеке CmdLine имеет значение nil.


B.Pascal 7 & Objects/PG - 30 -


Переменная CmdShow модуль System
-----------------------------------------------------------------

Назначение: Содержит в программе значение параметра, которое
нужно передать ShowWindow при создании прикладной программой ос-
новного окна.

Целевая платформа: Windows.

Описание: var CmdShow: Integer;

Примечания: В библиотеке CmdLine всегда имеет нулевое значе-
ние.

Константы цветов модуль Graph
-----------------------------------------------------------------

Назначение: Константы цветов, используемые SetPalette и
SetAllPalette.

Целевая платформа: Реальный режим, защищенный режим.

----------------T--------T------------------¬
¦ Константа ¦Значение¦ Цвет ¦
+---------------+--------+------------------+
¦ Black ¦ 0 ¦ черный ¦
¦ Blue ¦ 1 ¦ синий ¦
¦ Green ¦ 2 ¦ зеленый ¦
¦ Cyan ¦ 3 ¦ бирюзовый ¦
¦ Red ¦ 4 ¦ красный ¦
¦ Magenta ¦ 5 ¦ малиновый ¦
¦ Brown ¦ 6 ¦ коричневый ¦
¦ LightGray ¦ 7 ¦ светло-серый ¦
¦ DarkGray ¦ 8 ¦ темно-серый ¦
¦ LightBlue ¦ 9 ¦ светло-голубой ¦
¦ LightGreen ¦ 10 ¦ светло-зеленый ¦
¦ LightCyan ¦ 11 ¦ светло-бирюзовый ¦
¦ LightRed ¦ 12 ¦ светло-красный ¦
¦ LightMagenta ¦ 13 ¦ светло-малиновый ¦
¦ Yellow ¦ 14 ¦ желтый ¦
¦ White ¦ 15 ¦ белый ¦
L---------------+--------+-------------------

С. также: SetAllPalette, SetPalette, SetColor.



B.Pascal 7 & Objects/PG - 31 -


Константы цветов для SetRGBPalette модуль Graph
-----------------------------------------------------------------

Назначение: Константы цветов, используемые в SetRGBPalette
для выбора стандартных цветов EGA и на графическом адаптере IBM
8514.

Целевая платформа: Реальный режим, защищенный режим.

-------------------T--------------------------¬
¦ Константа ¦Значение Цвет ¦
+------------------+--------------------------+
¦ EGABlack ¦ 0 (темные цвета) ¦
¦ EGABlue ¦ 1 ¦
¦ EGAGreen ¦ 2 ¦
¦ EGACyan ¦ 3 ¦
¦ EGARed ¦ 4 ¦
¦ EGAMagenta ¦ 5 ¦
¦ EGABrown ¦ 20 ¦
¦ EGALightGray ¦ 7 ¦
+------------------+--------------------------+
¦ EGADarkGray ¦ 56 (светлые цвета) ¦
¦ EGALightBlue ¦ 57 ¦
¦ EGALightGreen ¦ 58 ¦
¦ EGALightCyan ¦ 59 ¦
¦ EGALightRed ¦ 60 ¦
¦ EGALightMagenta ¦ 61 ¦
¦ EGAYellow ¦ 62 ¦
¦ EGAWhite ¦ 63 ¦
L------------------+---------------------------

С. также: SetRGBPalette.


B.Pascal 7 & Objects/PG - 32 -


Константы режима Crt модуль Crt
-----------------------------------------------------------------

Назначение: Используются для представления текстовых и стро-
ковых режимов Crt.

Целевая платформа: Реальный режим, защищенный режим.

Примечания: BW40, CO40 и CO80 представляют четыре цветных
текстовых режима, поддерживаемых цветным графическим адаптером
IBM PC (CGA). Константа Mono представляет единственный черно-бе-
лый режим, поддерживаемый монохромным адаптером IBM PC. Font8x9
представляет 43- и 50-строчный режимы EGA/VGA и используются с
CO80 или LastMode. LastMode возвращает последний активный тексто-
вый режим после использования графики.

------------T--------T---------------------------------------¬
¦ Константа ¦Значение¦ Описание ¦
+-----------+--------+---------------------------------------+
¦ BW40 ¦ 0 ¦ 40х25, черно-белый на цветном адаптере¦
¦ C40 ¦ 1 ¦ 40х25, цветной на цветном адаптере ¦
¦ BW80 ¦ 2 ¦ 80х25, черно-белый на цветном адаптере¦
¦ C80 ¦ 3 ¦ 80х25, цветной на цветном адаптере ¦
¦ Mono ¦ 7 ¦ 80х25, черно-белый на монохромном ¦
¦ ¦ ¦ адаптере ¦
¦ Font8x8 ¦ 256 ¦ для адаптеров EGA/VGA (50 строк) ¦
¦ C40 ¦ C040 ¦ для совместимости с версией 3.0 ¦
¦ C80 ¦ C080 ¦ для совместимости с версией 3.0 ¦
L-----------+--------+----------------------------------------

См. также: TextMode.



B.Pascal 7 & Objects/PG - 33 -


Переменная Cursor модуль WinCrt
-----------------------------------------------------------------

Назначение: Содержит текущую позицию курсора виртуального
экрана.

Целевая платформа: Windows.

Описание: const Cursor: TPoint = (X: 0; Y: 0);

Примечания: Верхний левый угол соответствует позиции (0,0)
Cyrsor - это переменная, доступная только для чтения, которой
нельзя присваивать значение.

Тип DateTime модуль Dos
-----------------------------------------------------------------

Назначение: Используется подпрограммами UnpackTime и
PackTime для проверки и построения 4-байтовых упакованных значе-
ний даты и времени, которые используются в GetTime, SetFTime,
FindFirst и FindNext.

Целевая платформа: Реальный режим, защищенный режим.

Описание:

type
DateTime = record
Year, Month, Day, Hour, Min, Sec: Word;
end;

Примечания: Допустимыми значениями являются для Year -
1980..2099, для Month - 1..12, для Day - 1..31, для Hour - 0..23,
для Min 0..59, для Sec - 0..59.

См. также: FindFirst, FindNext, GetFTime, SetFTime.



B.Pascal 7 & Objects/PG - 34 -


Переменная DirectVideo модуль Crt
-----------------------------------------------------------------

Назначение: Разрешает или запрещает прямой доступ к памяти
для процедур Write и Writeln, которые выводят данные на экран.

Целевая платформа: Реальный режим, защищенный режим.

Описание: var DirectVideo: Boolean;

Примечание: Когда DirectVideo равно True, операции Write и
Writeln в связанные с CRT файлы будут записывать символы непос-
редственно в видеопамять, а не вызывать для их вывода BIOS. Когда
DirectVideo имеет значение False, все символы записываются через
вызовы BIOS, что существенно замедляет процесс.

По умолчанию DirectVideo всегда равно True. Если по каким-то
причинам требуется, чтобы символы выводились через вызовы BIOS,
в начале программы и после каждого вызова TextMode установите
DirectVideo в False.

См. также: CheckSnow.



B.Pascal 7 & Objects/PG - 35 -


Переменная DosError модуль Dos, WinDos
-----------------------------------------------------------------

Назначение: Используется во многих подпрограммах модулей Dos
и WinDos.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: var DosError: Integer;

Примечания: Значения, записанные в DosError, представляют
собой коды ошибок DOS. Значение 0 указывает на отсутствие ошибки.

-----------------T---------------------------------¬
¦ Код ошибки DOS ¦ Смысл ¦
+----------------+---------------------------------+
¦ 2 ¦ Файл не найден. ¦
¦ 3 ¦ Маршрут не найден. ¦
¦ 5 ¦ Доступ запрещен. ¦
¦ 6 ¦ Недопустимый описатель файла. ¦
¦ 8 ¦ Не хватает памяти. ¦
¦ 10 ¦ Недопустимая операционная среда.¦
¦ 11 ¦ Неверный формат. ¦
¦ 18 ¦ Больше нет файлов. ¦
L----------------+----------------------------------

Подробное описание сообщений DOS об ошибках вы можете найти
в Главе 4 "Сообщения об ошибках".

См. также: CreateDir, Exec, FindFirst, FindNext, GetCurDir,
GetFAttr, GetFTime. RemoveDir, SetCurDir, SetFAttr, SetFTime.



B.Pascal 7 & Objects/PG - 36 -


Драйверы и константы режима модуль Graph
-----------------------------------------------------------------

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

Целевая платформа: Защищенный режим, реальный режим.

Примечания: Графические драйверы и палитры цветов перечисля-
ются в следующих таблицах.

Константы драйверов модуля Graph Таблица 1.1
-------------------T--------T-----------------------------------¬
¦Константа драйвера¦Значение¦ Смысл ¦
+------------------+--------+-----------------------------------+
¦ Detect ¦ 0 ¦ требуется автоматическое распозна-¦
¦ ¦ ¦ вание ¦
¦ CGA ¦ 1 ¦ ¦
¦ MCGA ¦ 2 ¦ ¦
¦ EGA ¦ 3 ¦ ¦
¦ EGA64 ¦ 4 ¦ ¦
¦ EGAMono ¦ 5 ¦ ¦
¦ RESERVED ¦ 6 ¦ зарезервировано (не используется) ¦
¦ HercMono ¦ 7 ¦ ¦
¦ ATT400 ¦ 8 ¦ ¦
¦ VGA ¦ 9 ¦ ¦
¦ PC3270 ¦ 10 ¦ ¦
¦ CurrentDriver ¦ -128 ¦ передается GetModeRange ¦
L------------------+--------+------------------------------------


B.Pascal 7 & Objects/PG - 37 -


Константы драйверов модуля Graph Таблица 1.2
---------------T--------T---------T-----T-----------------T-----¬
¦ Имя ¦Значение¦ Строк x ¦Па- ¦ Цвета ¦Стра-¦
¦ константы ¦ ¦ столбцы ¦литра¦ ¦ницы ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ ATT400C0 ¦ 0 ¦ 320x200 ¦ 0 ¦ Светло-серый, ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ светло-красный, ¦ ¦
¦ ¦ ¦ ¦ ¦ желтый. ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ ATT400C1 ¦ 1 ¦ 320x200 ¦ 1 ¦ Светло-бирюзовый¦ 1 ¦
¦ ¦ ¦ ¦ ¦ светло-малиновый¦ ¦
¦ ¦ ¦ ¦ ¦ белый. ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ ATT400C2 ¦ 2 ¦ 320x200 ¦ 2 ¦ Бирюзовый, ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ малиновый, ¦ ¦
¦ ¦ ¦ ¦ ¦ светло-серый. ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ ATT400Med ¦ 4 ¦ 640x200 ¦ ¦ ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ ATT400Hi ¦ 5 ¦ 640x400 ¦ ¦ ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ CGAC0 ¦ 0 ¦ 320x200 ¦ 0 ¦ Светло-серый, ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ светло-красный, ¦ ¦
¦ ¦ ¦ ¦ ¦ желтый. ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ CGAC1 ¦ 1 ¦ 320x200 ¦ 1 ¦ Светло-бирюзовый¦ 1 ¦
¦ ¦ ¦ ¦ ¦ светло-малиновый¦ ¦
¦ ¦ ¦ ¦ ¦ белый. ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ CGAC2 ¦ 2 ¦ 320x200 ¦ 2 ¦ Зеленый, ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ красный, ¦ ¦
¦ ¦ ¦ ¦ ¦ коричневый. ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ CGAC3 ¦ 3 ¦ 320x200 ¦ 3 ¦ Бирюзовый, ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ малиновый, ¦ ¦
¦ ¦ ¦ ¦ ¦ светло-серый. ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ CGAHi ¦ 4 ¦ 640x200 ¦ ¦ ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ EGALo ¦ 0 ¦ 640x200 ¦ ¦ 16 цветов ¦ 4 ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ EGAHi ¦ 1 ¦ 640x350 ¦ ¦ 16 цветов ¦ 2 ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ EGA64Lo ¦ 0 ¦ 640x200 ¦ ¦ 16 цветов ¦ 1 ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ EGA64Hi ¦ 1 ¦ 640x350 ¦ ¦ 4 цвета ¦ 1 ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ EGAMonoHi ¦ 3 ¦ 640x350 ¦ ¦ 64K на плату, ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ 256К на плату. ¦ 2 ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ HercMonoHi ¦ 0 ¦ 720x348 ¦ ¦ ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+

B.Pascal 7 & Objects/PG - 38 -

¦ IBM8514Lo ¦ 0 ¦ 640x480 ¦ ¦ 256 цветов ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ IBM8514Hi ¦ 1 ¦ 1024x768¦ ¦ 256 цветов ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ MCGAC0 ¦ 0 ¦ 320x200 ¦ 0 ¦ Светло-серый, ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ светло-красный, ¦ ¦
¦ ¦ ¦ ¦ ¦ желтый. ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ MCGAC1 ¦ 1 ¦ 320x200 ¦ 1 ¦ Светло-бирюзовый¦ 1 ¦
¦ ¦ ¦ ¦ ¦ светло-малиновый¦ ¦
¦ ¦ ¦ ¦ ¦ белый. ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ MCGAC2 ¦ 2 ¦ 320x200 ¦ 2 ¦ Зеленый, ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ красный, ¦ ¦
¦ ¦ ¦ ¦ ¦ коричневый. ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ MCGAC3 ¦ 3 ¦ 320x200 ¦ 3 ¦ Бирюзовый, ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ малиновый, ¦ ¦
¦ ¦ ¦ ¦ ¦ светло-серый. ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ MCGAMed ¦ 4 ¦ 640x200 ¦ ¦ ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ MCGAHi ¦ 5 ¦ 640x480 ¦ ¦ ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ PC3270Hi ¦ 0 ¦ 720x350 ¦ ¦ ¦ ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ VGALo ¦ 0 ¦ 640x200 ¦ ¦ 16 цветов ¦ 4 ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ VGAMed ¦ 1 ¦ 640x200 ¦ ¦ 16 цветов ¦ 2 ¦
+--------------+--------+---------+-----+-----------------+-----+
¦ VGAHi ¦ 2 ¦ 640x480 ¦ ¦ 16 цветов ¦ 1 ¦
L--------------+--------+---------+-----+-----------------+------

См. также: DetectGraph, GetModeRange, InitGraph.



B.Pascal 7 & Objects/PG - 39 -


Переменная ErrorAddr модуль System
-----------------------------------------------------------------

Назначение: Содержит адрес оператора, вызвавшего ошибку эта-
па выполнения.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: var ErrorAddr: Pointer;

Примечания: Если программа завершается нормально или оста-
навливается из-за вызова Halt, ErrorAddr имеет значение nil. Если
программа завершается из-за ошибки этапа выполнения, то ErrorAddr
содержит адрес ошибочного оператора. Дополнительную информацию
можно найти в разделе "Процедуры выхода в Главе 22 "Руководства
по языку".

См. также: ExitCode, ExitProc.

Константы флагов fcXXXX модуль WinDos
-----------------------------------------------------------------

Назначение: Данные флаги используются функцией FileSplit.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Примечания: Возвращаются следующие константы:

-------------------T----------------¬
¦ Константа ¦ Значение ¦
+------------------+----------------+
¦ fcExtension ¦ $0001 ¦
¦ fcFileName ¦ $0002 ¦
¦ fcDirectory ¦ $0004 ¦
¦ fcWildcards ¦ $0008 ¦
L------------------+-----------------

См. также: FileSplit.



B.Pascal 7 & Objects/PG - 40 -


Константы атрибутов файла модули Dos, WinDos
-----------------------------------------------------------------

Назначение: Используется для построения атрибутов файлов при
работе с процедурами GetFAttr, SetFAttr, FindFirst и FindNext.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Примечания:

-----------------T------------------T--------------¬
¦ Константа Dos ¦ Константа WinDos ¦ Значение ¦
+----------------+------------------+--------------+
¦ ReadOnly ¦ faReadOnly ¦ $01 ¦
¦ Hidden ¦ faHidden ¦ $02 ¦
¦ SysFile ¦ faSysFile ¦ $04 ¦
¦ VolumeID ¦ faVolumeID ¦ $08 ¦
¦ Directory ¦ faDirectory ¦ $10 ¦
¦ Archive ¦ faArchive ¦ $20 ¦
¦ AnyFile ¦ faAnyFile ¦ $3F ¦
L----------------+------------------+---------------

Константы являются аддитивными, так что оператор:

FindFirst('*.*', ReadOnly + Directory, S); { DOS }
FindFirst('*.*', faReadOnly + faDirectory, S); { Windows }

будет находить все обычные файлы, а также файлы, доступные только
по чтению и подкаталоги текущего каталога. Константа AnyFile (или
faAnyFile) представляет собой просто сумму атрибутов.

См. также: FindFirst, FindNext, GetFAttr, SetFAttr.



B.Pascal 7 & Objects/PG - 41 -


Константы длины имени файла модуль WinDos
-----------------------------------------------------------------

Назначение: Содержит максимальные длины строк компонентов
имени файла, используемых в функциях FileSearch и FileExpand.

Целевая платформа: Защищенный режим, реальный режим,
Windows.


Примечания:

-------------------T-------------¬
¦ Константа ¦ Значение ¦
+------------------+-------------+
¦ fsPathName ¦ 79 ¦
¦ fcDirectory ¦ 67 ¦
¦ fcFileName ¦ 8 ¦
¦ fcExtension ¦ 4 ¦
L------------------+--------------

См. также: FileExpand, FileSplit, FileSearch.

Типы работы со строками модуль Dos
-----------------------------------------------------------------

Назначение: Строковые типы используются различными процеду-
рами и функциями модуля Dos.

Целевая платформа: Защищенный режим, реальный режим.

Примечание: Определены следующие типы:

ComStr = string[127]; { командная строка }
PathStr = string[79]; { полная строка имени маршрута }
DirStr = string[67]; { строка диска и каталога }
NameStr = string[8]; { строка имени файла }
ExtStr = string[4]; { строка расширения имени файла }

См. также: FExpand, FSplit.



B.Pascal 7 & Objects/PG - 42 -


Переменная FileMode модуль System
-----------------------------------------------------------------

Назначение: Определяет код доступа, передаваемый DOS, когда
с помощью процедуры Reset открываются типизированные и нетипизи-
рованные файлы.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: var FileMode: Byte;

Примечание: Диапазон допустимых значений FileMode зависит от
используемой версии DOS. Однако для всех версий определены следу-
ющие режимы:

0 только чтение
1 только запись
2 чтение/запись

Значение по умолчанию (2) допускает как чтение, так и за-
пись. Присваивание FileMode другого значения вызывает использова-
ние этого режима во всех последующих операциях Reset. Новый файл,
использующий Rewrite, всегда открывается в режиме чтения/записи
(то есть FileMode = 2).

В версиях DOS 3.x и выше определяются дополнительные конс-
танты, которые относятся в основном к совместному использованию
файлов в сетях. Подробности вы можете узнать в руководствах по
DOS.



B.Pascal 7 & Objects/PG - 43 -


Тип FileRec модуль Dos
-----------------------------------------------------------------

Назначение: Определение записи, предназначенное для внутрен-
него использования в Borland Pascal и описанное также в модуле
Dos.

Целевая платформа: Защищенный режим, реальный режим.

Описание:

type
FileRec = record
Handle: Word;
Mode: Word;
RecSize: Word;
Private: array[1..26] of Byte;
UserData: array[1..16] of Byte;
Name: array[0..79] of Char;
end;

Примечания: FileRec определяет внутренний формат данных для
типизированных и нетипизированных файлов.

См. также: TextRec.



B.Pascal 7 & Objects/PG - 44 -


Константы образцов закраски модуль Graph
-----------------------------------------------------------------

Назначение: Константы, определяющие образец, используемый
для закраски области.

Целевая платформа: Защищенный режим, реальный режим.

Примечания: Для определения собственного образца закраски
используйте SetFillPattern, затем вызовите SetFillStyle(UserFill,
SomeColor) и сделайте свой образец закраски активным.

-----------------T--------T----------------------------------¬
¦ Константа ¦Значение¦ Описание ¦
+----------------+--------+----------------------------------+
¦ EmptyFill ¦ 0 ¦ Закраска области фоновым цветом. ¦
¦ SolidFill ¦ 1 ¦ Непрерывная закраска области. ¦
¦ LineFill ¦ 2 ¦ Закраска ---------------------. ¦
¦ ltSlashFill ¦ 3 ¦ Закраска /////. ¦
¦ SlashFill ¦ 4 ¦ Закраска жирными линиями ////. ¦
¦ BkSlashFill ¦ 5 ¦ Закраска жирными линиями \\\\. ¦
¦ LtBkSlashFill ¦ 6 ¦ Закраска \\\\\. ¦
¦ HatchFill ¦ 7 ¦ Закраска редкой штриховкой. ¦
¦ XHatchFill ¦ 8 ¦ Закраска частой шриховкой (в ¦
¦ ¦ ¦ обоих направлениях). ¦
¦ Interleave ¦ 9 ¦ Закраска прерывистой линией. ¦
¦ WideDotFill ¦ 10 ¦ Закраска линией из редких точек. ¦
¦ CloseDotFill ¦ 11 ¦ Закраска линией из частых точек. ¦
¦ UserFill ¦ 12 ¦ Закраска, определенная пользова- ¦
¦ ¦ ¦ телем. ¦
L----------------+--------+-----------------------------------

См. также: FillPatternType, GetFillSettings, SetFillStyle.



B.Pascal 7 & Objects/PG - 45 -


Тип FillPatternType модуль Dos
-----------------------------------------------------------------

Назначение: Определяет образец закраски, заданный пользова-
телем.

Целевая платформа: Защищенный режим, реальный режим.

Описание: FillPatternType = array[1..8] of Byte;

См. также: образец закраски, GetFillPattern, SetFillPattern.

Тип FillSettingType модуль Graph
-----------------------------------------------------------------

Назначение: Запись, определяющая образец и цвет, используе-
мый для закраски области.

Целевая платформа: Защищенный режим, реальный режим.

Описание:

type
FillSettingsType = record
Pattern: Word;
Color: Word;
end;

См. также: GetFillSettings.



B.Pascal 7 & Objects/PG - 46 -


Константы флагов модуль Dos, WinDos
-----------------------------------------------------------------

Назначение: Используется для проверки отдельных битовых фла-
гов в регистре флагов после вызова функции Intr или MsDos.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Примечания:

-------------------T----------------¬
¦ Константа ¦ Значение ¦
+------------------+----------------+
¦ FCarry ¦ $0001 ¦
¦ FParity ¦ $0004 ¦
¦ FAuxiliary ¦ $0010 ¦
¦ FZero ¦ $0040 ¦
¦ FSign ¦ $0080 ¦
¦ FOverFlow ¦ $0800 ¦
L------------------+-----------------

Например, если R - это регистровая запись, то проверки:

R.Flags and FCArry <> 0
R.Flags and FZero = 0

дают True, если, соответственно, установлен флаг переноса и сбро-
шен флаг нуля.

См. также: Intr, MsDos.



B.Pascal 7 & Objects/PG - 47 -


Константы fmXXXX модуль Dos, WinDos
-----------------------------------------------------------------

Назначение: Определяет допустимые значения поля Mode записи
текстового файла TextRec и TFileRec.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Примечания: Поле Mode файловых переменных Borland Pascal со-
держит одну из определенных ниже переменных:

-------------------T----------------¬
¦ Константа ¦ Значение ¦
+------------------+----------------+
¦ fmClosed ¦ $D7B0 ¦
¦ fmInput ¦ $D7B1 ¦
¦ fmOutput ¦ $D7B2 ¦
¦ fmInOut ¦ $D7B3 ¦
L------------------+-----------------

Константы шрифтов модуль Graph
-----------------------------------------------------------------

Назначение: Константы, идентифицирующие шрифты.

Целевая платформа: Защищенный режим, реальный режим.

Примечания:

-------------------T--------------------------¬
¦ Константа ¦ Значение ¦
+------------------+--------------------------+
¦ DefaultFont ¦ 0 (растровый шрифт 8х8) ¦
¦ TriplexFont ¦ 1 (векторный шрифт) ¦
¦ SmallFont ¦ 2 ¦
¦ SanSerifFont ¦ 3 ¦
¦ GothicFont ¦ 4 ¦
¦ HorizDir ¦ 0 (слева-направо) ¦
¦ VertDir ¦ 1 (сверху-вниз) ¦
¦ UserCharSize ¦ 0 (определенный пользо- ¦
¦ ¦ вателем размер Char) ¦
L------------------+---------------------------

См. также: GetTextSettings, SetTextStyle, TextSettingsType.



B.Pascal 7 & Objects/PG - 48 -


Переменная FreeList модуль System
-----------------------------------------------------------------

Назначение: Указывает на первый свободный блок в динамически
распределяемой области памяти.

Целевая платформа: Реальный режим.

Описание: var FreeList: Pointer;

Примечания: Переменная FreeList указывает на первый свобод-
ный блок в динамически распределяемой области памяти. Этот блок
содержит указатель на следующий свободный блок, в свою очередь
содержащий указатель на следующий свободный блок и т.д. Последний
свободный блок содержит указатель на вершину динамически распре-
деляемой области. Если в списке нет свободных блоков, FreeList
будет равно HeapPtr. Подробности вы можете узнать в Главе 13 "Ру-
ководства по языку".

См. также: Dispose, FreeMem, HeapPtr.



B.Pascal 7 & Objects/PG - 49 -


Константы флага памяти gmem_XXXX модуль WinAPI
-----------------------------------------------------------------

Назначение: Флаги атрибута блока памяти.

Целевая платформа: Защищенный режим, Windows.

Примечания:

-----------------------T----------------------------------------¬
¦ Константа ¦ Описание ¦
+----------------------+----------------------------------------+
¦ gmem_DDEShare ¦ Только для Windows. Используется для¦
¦ ¦ распределения совместно используемой¦
¦ ¦ переменной, применяемой в протоколе ди-¦
¦ ¦ намического обмена данными DDE. ¦
+----------------------+----------------------------------------+
¦ gmem_Discarded ¦ Возвращается функцией GlobalFlags для¦
¦ ¦ указания выгруженного блока памяти. ¦
+----------------------+----------------------------------------+
¦ gmem_Discardable ¦ Возвращается функцией GlobalFlags для¦
¦ ¦ указания выгружаемого блока памяти. ¦
+----------------------+----------------------------------------+
¦ gmem_Fixed ¦ Используется для распределения фиксиро-¦
¦ ¦ ванной памяти. ¦
+----------------------+----------------------------------------+
¦ gmem_LockCount ¦ Логическая операция and этой константы¦
¦ ¦ и значения, возвращаемого GlobalFlags,¦
¦ ¦ дает счетчик блокировки блока памяти. ¦
+----------------------+----------------------------------------+
¦ gmem_Modify ¦ Используется для распределения переме-¦
¦ ¦ щаемой памяти. ¦
+----------------------+----------------------------------------+
¦ gmem_NoCompact ¦ Только для Windows. Используется для¦
¦ ¦ указания того, что память не должна¦
¦ ¦ упаковываться или выгружаться. ¦
+----------------------+----------------------------------------+
¦ gmem_NoDiscard ¦ Только для Windows. Используется для¦
¦ ¦ указания того, что запрос на распреде-¦
¦ ¦ ление не должен выгружать память. ¦
+----------------------+----------------------------------------+
¦ gmem_Not_Banked ¦ Только для реального режима. Используе-¦
¦ ¦ тся для распределение небанкируемой па-¦
¦ ¦ мяти. ¦
+----------------------+----------------------------------------+
¦ gmem_Notify ¦ Используется при распределении выгружа-¦
¦ ¦ емых блоков для указания того, что в¦
¦ ¦ случае выгрузки блока следует вызвать¦
¦ ¦ функцию уведомления. ¦
+----------------------+----------------------------------------+
¦ gmem_ZeroInit ¦ Используется для задания инициализации¦
¦ ¦ содержимого вновь распределенной памяти¦

B.Pascal 7 & Objects/PG - 50 -

¦ ¦ нулями. ¦
L----------------------+-----------------------------------------

См. также: GlobalAlloc, GlobalFlags, GlobalReAlloc.

Переменная GraphFreeMemPtr модуль Graph
-----------------------------------------------------------------

Назначение: Содержит адрес подпрограммы освобождения динами-
ческого распределяемой памяти.

Целевая платформа: Защищенный режим, реальный режим.

Описание: var GraphFreeMemPtr: Pointer;

Примечания: Первоначально GraphFreeMemPtr указывает на подп-
рограмму освобождения динамически распределяемой области памяти
модуля Graph. Если ваша программа обеспечивает свое собственное
управление памятью, то присвойте этой переменной адрес своей
подпрограммы освобождения памяти. См. Главу 19 "Использование
графического интерфейса фирмы Borland" "Руководства по языку",
где вы найдете дополнительную информацию по этой подпрограмме.



B.Pascal 7 & Objects/PG - 51 -


Переменная GraphGetMemPtr модуль Graph
-----------------------------------------------------------------

Назначение: Содержит адрес подпрограммы динамического расп-
ределения памяти.

Целевая платформа: Защищенный режим, реальный режим.

Описание: var GraphGetMemPtr: Pointer;

Примечания: Первоначально GraphGetMemPtr указывает на подп-
рограмму распределения динамической области памяти модуля Graph.
Если ваша программа обеспечивает свое собственное управление па-
мятью, то присвойте этой переменной адрес своей подпрограммы
распределения памяти. См. Главу 19 "Использование графического
интерфейса фирмы Borland" "Руководства по языку", где вы найдете
дополнительную информацию по этой подпрограмме.



B.Pascal 7 & Objects/PG - 52 -


Константы grXXXX модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает для последней графической операции
код ошибки.

Целевая платформа: Защищенный режим, реальный режим.

-------------------T-------T---------------------¬
¦ Константа ¦ Код ¦ Соответствующее ¦
¦ ошибки графики ¦ ошибки¦ сообщение об ошибке¦
+------------------+-------+---------------------+
¦ grOk ¦ 0 ¦ нет ошибки ¦
¦ grNoInitGraph ¦ -1 ¦ графика не инициали-¦
¦ ¦ ¦ зирована ¦
¦ grNotDetected ¦ -2 ¦ графические средства¦
¦ ¦ ¦ не найдены ¦
¦ grFileNotFound ¦ -3 ¦ файл не найден ¦
¦ grInvalidDriver ¦ -4 ¦ недопустимый драйвер¦
¦ grNoLoadMem ¦ -5 ¦ память не загружена ¦
¦ grNoScanMem ¦ -6 ¦ ошибка при просмотре¦
¦ ¦ ¦ памяти ¦
¦ grNoFloodMem ¦ -7 ¦ ошибка при закраске ¦
¦ grFontNotFound ¦ -8 ¦ шрифт не найден ¦
¦ grNoFontMem ¦ -9 ¦ шрифт не загружен в¦
¦ ¦ ¦ память ¦
¦ grInvalidMode ¦ -10 ¦ недопустимый режим¦
¦ grError ¦ -11 ¦ ошибка графики ¦
¦ grIOError ¦ -12 ¦ ошибка ввода-вывода¦
¦ ¦ ¦ графики ¦
¦ grInvalidFont ¦ -13 ¦ недопустимый файл¦
¦ ¦ ¦ шрифта ¦
¦ grInvalidFontNum ¦ -14 ¦ недопустимый номер¦
¦ ¦ ¦ шрифта ¦
L------------------+-------+----------------------

См. также: GraphResult.



B.Pascal 7 & Objects/PG - 53 -


Переменная HeapAllocFlags модуль System
-----------------------------------------------------------------

Назначение: Определяет флаги распределения блока администра-
тора памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: var HeapAllocFlags: Word;

Примечания: Начальное значение HeapAllocFlags равно
gmem_Moveable (для программ) или gmem_Moveable + gmemDDEShare
(для библиотек).

HeapAllocFlags содержит флаги атрибутов, которые администра-
тор памяти передает функции GlobalAlloc при выделении блоков ди-
намически распределяемой памяти. Изменять значение переменной
HeapAllocFlags обычно не требуется. См. Главу 21 ("Вопросы управ-
ления памятью") в "Руководстве по языку", где вы найдете более
подробную информацию.

См. также: GlobalAlloc, флаги памяти gmem_XXXX.

Переменная HeapBlock модуль System
-----------------------------------------------------------------

Назначение: Определяет размер, используемый администратором
динамически распределяемой памяти, при выделении блока, затребо-
ванного подпрограммой.

Целевая платформа: Защищенный режим, Windows.

Описание: var HeapBlock: Word;

Примечания: Начальное значение HeapBlock равно 8192. Изме-
нять значение этой переменной обычно не требуется. См. Главу 21
("Вопросы управления памятью") в "Руководстве по языку", где вы
найдете более подробную информацию о работе администратора дина-
мически распределяемой памяти.

См. также: HeapLimit.



B.Pascal 7 & Objects/PG - 54 -


Переменная HeapEnd модуль System
-----------------------------------------------------------------

Назначение: Указывает на конец используемой программами па-
мяти DOS.

Целевая платформа: Реальный режим.

Описание: var HeapEnd: Pointer;

Примечания: HeapEnd инициализируется системным модулем в на-
чале работы программы. См. Главу 21 ("Вопросы управления па-
мятью") в "Руководстве по языку", где вы найдете более подробную
информацию.

См. также: HeapPtr, HeapOrg.



B.Pascal 7 & Objects/PG - 55 -


Переменная HeapError модуль System
-----------------------------------------------------------------

Назначение: Указывает на функцию ошибки динамически распре-
деляемой области.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: var HeapError: Pointer;

Примечания: HeapBlock содержит функцию ошибки динамически
распределяемой области памяти, которая вызывается, когда адми-
нистратор динамически распределяемой области памяти не может вы-
полнить запрос на выделение. Установите функцию ошибки динамичес-
ки распределяемой области памяти, присвоив ее HeapError:

HeapError := @HeapFunc;

См. Главу 21 ("Вопросы управления памятью") в "Руководстве
по языку", где вы найдете более подробную информацию о функциях
ошибки динамически распределяемой памяти.

См. также: GetMem, New.



B.Pascal 7 & Objects/PG - 56 -


Переменная HeapLimit модуль System
-----------------------------------------------------------------

Назначение: Определяет порог между размером малых и больших
блоков динамически распределяемой памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: var HeapLimit: Word;

Примечания: Начальное значение HeapLimit равно 1024. Изме-
нять значение этой переменной обычно не требуется. См. Главу 21
("Вопросы управления памятью") в "Руководстве по языку", где вы
найдете более подробную информацию о работе администратора дина-
мически распределяемой области памяти.

См. также: HeapBlock.

Переменная HeapList модуль System
-----------------------------------------------------------------

Назначение: Сохраняет значение селектора для первого распре-
деленного блока в динамически распределяемой памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: var HeapList: Word;

Примечания: Переменная HeapList предназначена для внутренне-
го использования администратором динамически распределяемой об-
ласти и сохраняет значение селектора первого выделенного блока
памяти. Если вторично распределенные блоки памяти отсутствуют, то
она равна нулю. Изменять значение этой переменной обычно не тре-
буется. См. Главу 21 ("Вопросы управления памятью") в "Руководс-
тве по языку", где вы найдете более подробную информацию.

См. также: HeapBlock.



B.Pascal 7 & Objects/PG - 57 -


Переменная HeapOrg модуль System
-----------------------------------------------------------------

Назначение: Указывает на конец динамически распределяемой
памяти ("дно").

Целевая платформа: Реальный режим.

Описание: var HeapOrg: Pointer;

Примечания: Переменная HeapOrg содержит адрес конца динами-
чески распределяемой области. См. Главу 21 ("Вопросы управления
памятью") в "Руководстве по языку", где вы найдете более подроб-
ную информацию.

См. также: HeapEnd, HeapPtr.

Переменная HeapPtr модуль System
-----------------------------------------------------------------

Назначение: Указывает на начало динамически распределяемой
памяти ("вершина").

Целевая платформа: Реальный режим.

Описание: var HeapPtr: Pointer;

Примечания: Переменная HeapPtr содержит адрес начала динами-
чески распределяемой области. См. Главу 21 ("Вопросы управления
памятью") в "Руководстве по языку", где вы найдете более подроб-
ную информацию.

См. также: HeapEnd, HeapOrg.



B.Pascal 7 & Objects/PG - 58 -


Переменная HInstance модуль System
-----------------------------------------------------------------

Назначение: Содержит описатель экземпляра прикладной прог-
раммы или библиотеки.

Целевая платформа: Реальный режим, защищенный режим.

Описание: var HInstance: Word;

Примечания: Данный идентификатор экземпляра идентифицирует
программу, когда она работает под Windows или в защищенном режиме
DOS.

Переменная HPrevInst модуль System
-----------------------------------------------------------------

Назначение: Содержит описатель экземпляра прикладной прог-
раммы.

Целевая платформа: Windows.

Описание: var HPrevInst: Word;

Примечания: Если экземпляров предыдущей прикладной программы
нет, то значение HPrevInst равно 0. В библиотеке значение
HPrevInst всегда равно 0.



B.Pascal 7 & Objects/PG - 59 -


Константы Id_XXXX модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает значения функции MessageBox.

Целевая платформа: Защищенный режим, Windows.

Примечания: Данные константы определяют значения, возвращае-
мые функцией MessageBox. Если окно сообщений содержит командную
кнопку отмены Cancel, то Id_Cancel возвращается при выборе ко-
мандной кнопки Cancel или по клавише Esc. Если окно сообщений не
содержит командную кнопку отмены Cancel, то нажатие клавиши Esc
не действует.

------------------T-----------------------------¬
¦ Константа ¦ Описание ¦
+-----------------+-----------------------------+
¦ Id_Abort ¦ Задействована кнопка Abort. ¦
¦ Id_Cancel ¦ Задействована кнопка Cancel.¦
¦ Id_Ignore ¦ Задействована кнопка Ignore.¦
¦ Id_No ¦ Задействована кнопка No. ¦
¦ Id_Ok ¦ Задействована кнопка Ok. ¦
¦ Id_Retry ¦ Задействована кнопка Retry. ¦
¦ Id_Yes ¦ Задействована кнопка Yes. ¦
L-----------------+------------------------------

См. также: Константы mb_XXXX, MessageBox.

Переменная InactiveTitle модуль WinCrt
-----------------------------------------------------------------

Назначение: Указывает на строку с завершающим нулем, исполь-
зуемую для формирования заголовка неактивного окна CRT.

Целевая платформа: Windows.

Описание: cons InactiveTitle: PChar = '(Inactive %s)';

Примечания: Строка, используемая в качестве параметра управ-
ления форматом вызова функции Windows WVSPrintF. Спецификатор %s,
если он присутствует, указывает, куда нужно включить строку заго-
ловка окна.



B.Pascal 7 & Objects/PG - 60 -


Переменная InOutRes модуль System
-----------------------------------------------------------------

Назначение: Сохраняет значение, возвращаемое следующим вызо-
вом IOResult.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: var InOutRes: Integer;

Примечания: InOutRes используется встроенными функциями вво-
да-вывода.

См. также: IOResult.

Переменная Input модуль System
-----------------------------------------------------------------

Назначение: Назначает стандартный файл ввода.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: var Input: Text;

Примечания: Input - это доступный только по чтению файл,
связанный со стандартным файлом ввода операционной системы (обыч-
но клавиатурой).

Множество стандартных процедур и функций работы с файлами
Borland Pascal позволяют опускать файловый параметр. В этом слу-
чае процедура или функция будет работать со стандартной перемен-
ной Input или Output. Например, Read(X) соответствует Read(Input,
X) а Write(X) соответствует Write(Output, X). Следующие стандарт-
ные процедуры и функции работы с файлами, когда параметр файла не
задан, работают с файлом Input:

Eof Readln
Eoln SeekEof
Read SeekEoln

Так как Windows не поддерживает прямой ориентированный на
текст ввод и вывод, в приложении Windows файлы Input и Output по
умолчанию не присваиваются, и любая попытка чтения или записи в
них даст ошибку. Однако, если прикладная программа использует мо-
дуль WinCrt, то Input и Output будут ссылаться на прокручиваемое
текстовое окно. Подробнее вопросы ввода-вывода освещаются в Главе
14 ("Ввод и вывод") "Руководства по языку".

См. также: Output.


B.Pascal 7 & Objects/PG - 61 -

Константы выравнивания модуль Graph
-----------------------------------------------------------------

Назначение: Константы, управляющие горизонтальным и верти-
кальным выравниванием.

Целевая платформа: Реальный режим, защищенный режим.

Примечания:

-----------------T--------------¬
¦ Константа ¦ Значение ¦
+----------------+--------------+
¦ LeftText ¦ 0 (слева) ¦
¦ CenterText ¦ 1 (по центру)¦
¦ RightText ¦ 2 (справа) ¦
¦ BottomText ¦ 0 (внизу) ¦
¦ CenterText ¦ 1 (по центру)¦
¦ TopText ¦ 2 (вверху) ¦
L----------------+---------------

См. также: SetTextJustify.

Переменная LastMode модуль Crt
-----------------------------------------------------------------

Назначение: Сохраняет текущий видеорежим при каждом вызове
TexMode.

Целевая платформа: Реальный режим, защищенный режим.

Описание: var LastMode: Word;

Примечания: В начале выполнения программы LastMode инициали-
зирует значением видеорежима, который будет затем активным.

См. также: TextMode.



B.Pascal 7 & Objects/PG - 62 -


Константы стиля линии модуль Graph
-----------------------------------------------------------------

Назначение: Определяет стиль и толщину линии; используется с
GetLineSettings и SetLineStyle.

Целевая платформа: Реальный режим, защищенный режим.

Примечания:

-----------------T--------------------------¬
¦ Константа ¦ Значение ¦
+----------------+--------------------------+
¦ SolidLn ¦ 0 (непрерывная) ¦
¦ DottedLn ¦ 1 (линия из точек) ¦
¦ CenterLn ¦ 2 (точки и тире) ¦
¦ DashedLn ¦ 0 (пунктирная) ¦
¦ UserBitLn ¦ 1 (стиль, заданный ¦
¦ ¦ пользователем) ¦
¦ NormWidth ¦ 1 (обычная толщина) ¦
¦ ThickWidth ¦ 3 (жирная линия) ¦
L----------------+---------------------------

См. также: LineSettingsType.



B.Pascal 7 & Objects/PG - 63 -


Тип LineSettingsType модуль Graph
-----------------------------------------------------------------

Назначение: Запись, определяющая стиль, образец и толщину
линии.

Целевая платформа: Реальный режим, защищенный режим.

Описание:

type
LineSettingsType = record
LineStyle: Word;
Pattern: Word;
Thickness: Word;
end;

Примечания: Список констант стиля линий и определенных сти-
лей линии и значений толщины см. в начале главы.

См. также: GetLineSettings, SetLineStyle.



B.Pascal 7 & Objects/PG - 64 -


Переменная Lst модуль Printer
-----------------------------------------------------------------

Назначение: Сохраняет стандартный вывод в виде текстового
файла.

Целевая платформа: Защищенный режим, реальный режим.

Описание: var Lst: Text;

Примечания: Используйте Lst для передачи вывода вашей прог-
раммы на принтер.

См. также: Assign, Rewrite.

Пример:

program PrintIt;
var
Lst: Text; { описать Lst как переменную типа тексто-
вого файла }
begin
Assing(Lst, 'LPT1'); { присвоить текстовый файл стандарт-
ному выводу }
Rewrite(Lst); { для пересылки текстового файла на принтер
вызвать Rewrite }
Writeln(Lst, 'Hello, printer.');
Close(Lst) { закрыть текстовый файл }
end.

Константы MaxColors модуль Craph
-----------------------------------------------------------------

Назначение: Определяют максимальное число цветов.

Целевая платформа: Защищенный режим, реальный режим.

Описание: const MaxColors = 15;

См. также: GetPalette; GetDefaultPalette, SetPalette.



B.Pascal 7 & Objects/PG - 65 -


Константы mb_XXXX модуль WinAPI
-----------------------------------------------------------------

Назначение: Флаги mb_XXXX задают характеристики окна сообще-
ния, создаваемого MessageBox.

Целевая платформа: Защищенный режим, Windows.

Примечание: Определены следующие константы:

----------------------T---------------------------------------¬
¦ Константа ¦ Смысл ¦
+---------------------+---------------------------------------+
¦ mb_AbortRetryIgnore ¦ Окно сообщения содержит командные¦
¦ ¦ кнопки Abort, Retry и Ignore. ¦
+---------------------+---------------------------------------+
¦ mb_ApplModal ¦ Перед продолжением работы в порождаю-¦
¦ ¦ щем окне пользователь должен ответить¦
¦ ¦ на это окно. Однако, пользователь мо-¦
¦ ¦ жет работать в окнах других приложе-¦
¦ ¦ ний. Если не задано mb_SystemModel или¦
¦ ¦ mb_TaskModel, это окно используется по¦
¦ ¦ умолчанию. ¦
+---------------------+---------------------------------------+
¦ mb_DefButton1 ¦ По умолчанию используется первая ко-¦
¦ ¦ мандная кнопка. Это всегда имеет мес-¦
¦ ¦ то, если не определены md_DefButton2¦
¦ ¦ или mb_DefButton3. ¦
+---------------------+---------------------------------------+
¦ mb_DefButton2 ¦ По умолчанию используется вторая ко-¦
¦ ¦ мандная кнопка. ¦
+---------------------+---------------------------------------+
¦ mb_DefButton2 ¦ По умолчанию используется третья ко-¦
¦ ¦ мандная кнопка. ¦
+---------------------+---------------------------------------+
¦ mb_IconAsterisk ¦ То же, что mb_IconInformation. ¦
+---------------------+---------------------------------------+
¦ mb_IconExclamation ¦ Окно сообщений включает в себя пикто-¦
¦ ¦ грамму с восклицательным знаком. ¦
+---------------------+---------------------------------------+
¦ mb_IconHand ¦ То же, что и mb_IconStop. ¦
+---------------------+---------------------------------------+
¦ mb_IconQuestion ¦ Окно сообщений включает в себя пикто-¦
¦ ¦ грамму с вопросительным знаком. ¦
+---------------------+---------------------------------------+
¦ mb_IconStop ¦ Окно сообщений включает в себя пикто-¦
¦ ¦ грамму со знаком "стоп". ¦
+---------------------+---------------------------------------+
¦ mb_OK ¦ Окно сообщений содержит только команд-¦
¦ ¦ ную кнопку OK. ¦
+---------------------+---------------------------------------+
¦ mb_OKCancel ¦ Окно сообщений содержит только команд-¦

B.Pascal 7 & Objects/PG - 66 -

¦ ¦ ные кнопки OK и Cancel. ¦
+---------------------+---------------------------------------+
¦ mb_RetryCancel ¦ Окно сообщений содержит только команд-¦
¦ ¦ ные кнопки Retry и Cancel. ¦
+---------------------+---------------------------------------+
¦ mb_SystemModal ¦ Перед продолжением работы приложения¦
¦ ¦ пользователь должен ответить на данное¦
¦ ¦ окно сообщения. Если приложение не¦
¦ ¦ специфицирует mb_IconHand, окно сооб-¦
¦ ¦ щения не становится модальным, пока не¦
¦ ¦ создается. Используйте это окно сооб-¦
¦ ¦ щения для предупреждения пользовате-¦
¦ ¦ лей о потенциально опасных ситуациях¦
¦ ¦ (например, нехватке памяти). ¦
+---------------------+---------------------------------------+
¦ mb_TaskModal ¦ То же, что mb_AppModal, но все окна¦
¦ ¦ верхнего уровня, принадлежащие текущей¦
¦ ¦ задаче, запрещаются, если WndOwner¦
¦ ¦ равно 0. Используйте данный флаг, если¦
¦ ¦ нет доступного описателя порождающего¦
¦ ¦ окна, и вызывающей прикладной програм-¦
¦ ¦ ме или библиотеке нужно предотвратить¦
¦ ¦ ввод в другие окна текущей прикладной¦
¦ ¦ задачи без приостановки других прик-¦
¦ ¦ ладных задач. ¦
+---------------------+---------------------------------------+
¦ mb_YesNo ¦ Окно сообщений содержит командные¦
¦ ¦ кнопки Yes (Да) и No (Нет). ¦
+---------------------+---------------------------------------+
¦ mb_YesNoCancel ¦ Окно сообщений содержит командные¦
¦ ¦ кнопки Yes (Да), No (Нет) и Cancel¦
¦ ¦ (Отмена). ¦
L---------------------+----------------------------------------

См. также: константы Id_XXXX, MessageBox.



B.Pascal 7 & Objects/PG - 67 -


Переменная Origin модуль WinCrt
-----------------------------------------------------------------

Назначение: Содержит виртуальные координаты экрана символь-
ной ячейки, выводимой в левом верхнем углу окна CRT.

Целевая платформа: Windows.

Описание: const Origin: TPoint = (X: 0; Y: 0);

Примечания: Origin - это переменная, доступная только для
чтения; не присваивайте ей значения.



B.Pascal 7 & Objects/PG - 68 -


Переменная Output модуль System
-----------------------------------------------------------------

Назначение: Назначает стандартный файл вывода.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: var Output: Text;

Примечания: Output - это файл, доступный только для записи,
связанный со стандартным файлом вывода операционной системы, ко-
торым обычно является дисплей.

Ряд стандартных процедур и функций работы с файлами Borland
Pascal позволяют опускать параметр файловой переменной. В этом
случае процедура или функция будет работать с переменной Input и
Output. Например, Read(X) соответствует Read(Input, X), а
Write(X) соответствует Write(Output, X). Следующие стандартные
процедуры и функции при отсутствии файлового параметра работают с
файлом Output:

Write, Writeln

Так как Windows не поддерживает непосредственно ориентиро-
ванный на текст ввод и вывод, в приложении Windows файлы Input и
Output по умолчанию не присваиваются, и любые попытки чтения или
записи в них дадут ошибку ввода-вывода. Однако, если приложение
использует модуль WinCrt, Input и Output будут ссылаться на прок-
ручиваемое текстовое окно.

Подробнее вопросы ввода-вывода в DOS и Windows освещаются в
Главе 14 ("Ввод и вывод") "Руководства по языку".

См. также: Input.



B.Pascal 7 & Objects/PG - 69 -


Переменная OvrCodeList модуль Overlay
-----------------------------------------------------------------

Назначение: Список сегментов оверлейного кода.

Целевая платформа: Реальный режим.

Описание: var OvrCodeList: Word;

Примечания: Переменная OvrCodeList инициализируется на этапе
компоновки компоновщиком Borland Pascal и предназначена для внут-
реннего использования администратором оверлеев. Если программа
не содержит оверлеи, она равна 0, и отлична от 0 в противном слу-
чае. Модифицировать эту переменную не следует.

Переменная OvrDebugPtr модуль Overlay
-----------------------------------------------------------------

Назначение: Инструментальное средство отладки.

Целевая платформа: Реальный режим.

Описание: var OvrDebugPtr: Pointer;

Примечания: Переменная OvrDebugPtr используется встроенным
отладчиком Borland Pascal для отладки оверлейных программ. Моди-
фицировать эту переменную не следует.



B.Pascal 7 & Objects/PG - 70 -


Переменная OvrDosHandle модуль System
-----------------------------------------------------------------

Назначение: Описатель оверлейного файла.

Целевая платформа: Реальный режим.

Описание: var OvrDosHandle: Word;

Примечания: Переменная OvrDosHandle содержит описатель овер-
лейного файла программы. Она инициализируется подпрограммой
OvrInit модуля Overlay. Нулевое значение переменной OvrDosHandle
указывает, что оверлейный файл в данный момент не открыт. Модифи-
цировать эту переменную не следует.

См. также: OvrInit.

Переменная OvrEmsHandle модуль System
-----------------------------------------------------------------

Назначение: Описатель оверлея в EMS.

Целевая платформа: Реальный режим.

Описание: var OvrEmsHandle: Word;

Примечания: Переменная OvrEmsHandle содержит описатель блока
дополнительной памяти, содержащего оверлеи программы. Она инициа-
лизируется подпрограммой OverInitEMS модуля Overlay. Значение
$FFFF переменной OvrEmsHandle указывает, что блок дополнительной
памяти для оверлеев не распределен. Модифицировать эту переменную
не следует.

См. также: OvrInit, OverInitEMS.



B.Pascal 7 & Objects/PG - 71 -


Переменная OvrFileMode модуль Overlay
-----------------------------------------------------------------

Назначение: Определяет код доступа для передачи в DOS при
открытии оверлейного файла.

Целевая платформа: Реальный режим.

Описание: var OvrFileMode: Byte;

Примечания: По умолчанию переменная OvrFileMode равна 0, что
соответствует доступу только по чтению. Присвоив перед вызовом
OvrInit новое значение этой переменной, вы можете изменить код
доступа. Это может потребоваться, например, для обеспечения сов-
местного доступа в сети. Подробности о кодах доступа вы можете
найти в справочном руководстве программиста по DOS.

См. также: OvrInit.

Переменная OvrHeapEnd модуль System
-----------------------------------------------------------------

Назначение: Конец оверлейного буфера.

Целевая платформа: Реальный режим.

Описание: var OvrHeapEnd: Word;

Примечания: Переменная OvrHeapEnd сохраняет значение адреса
сегмента конца оверлейного буфера. Модифицировать эту переменную
не следует.

См. также: OvrHeapOrg, OvrSetBuf.



B.Pascal 7 & Objects/PG - 72 -


Переменная OvrHeapOrg модуль System
-----------------------------------------------------------------

Назначение: Начало оверлейного буфера.

Целевая платформа: Реальный режим.

Описание: var OvrHeapOrg: Word;

Примечания: Переменная OvrHeapEnd сохраняет значение адреса
сегмента начала оверлейного буфера. Код запуска библиотеки испол-
няющей системы инициализирует переменные OvrHeapOrg, OvrHeapPtr и
OvrHeapEnd, чтобы они указывали на оверлейный буфер между сегмен-
том стека программы и динамически распределяемой областью. Размер
этого начального оверлейного буфера (в 16-байтовых параграфах)
задается переменной OvrHeapSize и соответствует размеру наиболь-
шего оверлея программы, включая корректировочную информацию для
оверлея.

Присвоив переменным OvrHeapOrg, OvrHeapPtr и OvrHeapEnd но-
вые значения, вы можете переместить в программе оверлейный буфер.
Любое перемещение такого рода должно выполняться перед вызовом
OvrInit или непосредственно после вызова OvrClearBuf (это обеспе-
чивает, что оверлейный буфер пуст). Чтобы переместить оверлейный
буфер, присвойте адрес сегмента начала буфера переменным
OvrHeapOrg и OvrHeapPrt и присвойте адрес сегмента концу буфера
OvrHeapEnd. Нужно обеспечить, чтобы размер буфера (вычисляемый
как разность OvrHeapEnd - OvrHeapOrg) был больше или равен
OvrHeapSize.

См. также: OverHeapEnd, OvrHeapPtr, OvrSetBuf.



B.Pascal 7 & Objects/PG - 73 -


Переменная OvrHeapPtr модуль System
-----------------------------------------------------------------

Назначение: Указатель оверлейного буфера.

Целевая платформа: Реальный режим.

Описание: var OvrHeapPtr: Word;

Примечания: Переменная OvrHeapPtr предназначена для внутрен-
него использования администратором оверлеев. Кроме задания в опи-
сании OvrHeapOrg, модифицировать значение OvrHeapPrt не следует.

См. также: OverHeapOrg.

Переменная OvrHeapSize модуль System
-----------------------------------------------------------------

Назначение: Минимальный размер оверлейной динамически расп-
ределяемой области.

Целевая платформа: Реальный режим.

Описание: var OvrHeapSize: Word;

Примечания: Переменная OvrHeapSize содержит минимальный раз-
мер оверлейной динамически распределяемой области в 16-байтовых
параграфах. OvrHeapSize инициализируется на этапе компоновки и
содержит размер наибольшего оверлея в программе, включая коррек-
тировочную информацию для оверлея. Если программа не содержит
оверлеев, этот размер нулевой. Модифицировать значение данной пе-
ременной не следует.

См. также: OverHeapOrg.



B.Pascal 7 & Objects/PG - 74 -


Переменная OvrLoadCount модуль Overlay
-----------------------------------------------------------------

Назначение: Счетчик загрузки оверлея.

Целевая платформа: Реальный режим.

Описание: Var OvrLoadCount: Word;

Примечания: Начальное значение OvrLoadCount равно 0. Адми-
нистратор оверлеев увеличивает это значение при каждой загрузке
оверлеев. Проверяя значения OvrTrapCount и OvrLoadCount в окне
Watch отладчика во время идентичных прогонов своей прикладной
программы, вы можете отслеживать влияние различного размера проб-
ной области (устанавливаемого с помощью OvrSetRetry) и найти для
своей прикладной программы ее оптимальный размер.

См. также: OvrTrapCount.

Переменная OvrLoadList модуль System
-----------------------------------------------------------------

Назначение: Список загруженных оверлеев.

Целевая платформа: Реальный режим.

Описание: Var OvrLoadList: Word;

Примечания: Данная переменная предназначена для внутреннего
использования администратором оверлеев. Изменять ее значение не
следует.



B.Pascal 7 & Objects/PG - 75 -


Переменная OvrReadBuf модуль Overlay
-----------------------------------------------------------------

Назначение: Указатель функции считывания оверлея.

Целевая платформа: Реальный режим.

Описание:

type OvrReadFunc = function(OvrSeg: Word): Integer;
var OvrReadBuf: OvrReadFunc;

Примечания: OvrLoadList позволяет вам перехватывать операции
загрузки оверлеев и реализовать, например, обработку ошибок или
проверку наличия сменного диска. Когда администратору оверлеев
требуется считать оверлей, он вызывает функцию, адрес которой
хранится в OvrReadBuf. Если эта функция возвращает 0, администра-
тор оверлеев предполагает, что операция выполнена успешно. Если
результат ненулевой, то генерируется ошибка 209 этапа выполнения.
Параметр OvrSeg указывает на загрузку оверлея, но доступ к данной
информации вам не требуется. Подробности по установке своей собс-
твенной функции считывания оверлея вы можете найти в Главе 20
("Использование оверлеев") "Руководства по языку".

Переменная OvrResult модуль Overlay
-----------------------------------------------------------------

Назначение: Код результата последней процедуры вызова овер-
лея.

Целевая платформа: Реальный режим.

Описание: var OvrResult: Integer;

Примечания: Перед возвратом управления каждая процедура мо-
дуля Overlay записывает код результата в переменную OvrResult.
Возможные коды ovrXXXX вы найдете ниже. В общем случае нулевое
значение указывает на успешное выполнение. Переменная OvrResult
напоминает стандартную функцию IOResult, но после обращения к ней
данная переменная не устанавливается в 0. Таким образом, перед
проверкой вам не нужно копировать эту переменную в локальные пе-
ременные.

См. также OvrInit, OvrInitEMS, OvrSetBuf.



B.Pascal 7 & Objects/PG - 76 -


Переменная OvrTrapCount модуль Overlay
-----------------------------------------------------------------

Назначение: Счетчик перехвата вызова оверлея.

Целевая платформа: Реальный режим.

Описание: var OvrTrapCount: Word;

Примечания: Каждый раз, когда оверлейная подпрограмма перех-
ватывается администратором оверлеев (из-за того, что оверлей не
находится в памяти или находится в пробной области), значение пе-
ременной OvrTrapCount увеличивается. Начальное значение этой пе-
ременной равно 0.

См. также OverLoadCount.

Константы ovrXXXX модуль Overlay
-----------------------------------------------------------------

Назначение: Коды возврата, записываемые в переменную
OvrResult.

Целевая платформа: Реальный режим.

Примечания:

-----------------T--------T---------------------------------¬
¦ Константа ¦Значение¦ Смысл ¦
+----------------+--------+---------------------------------+
¦ ovrOk ¦ 0 ¦ Успешное выполнение. ¦
¦ ovrError ¦ -1 ¦ Ошибка администратора оверлеев. ¦
¦ ovrNotFound ¦ -2 ¦ Не найден файл оверлея. ¦
¦ ovrNoMemory ¦ -3 ¦ Не хватает памяти для оверлейно-¦
¦ ¦ ¦ го буфера. ¦
¦ ovrIOError ¦ -4 ¦ Ошибка ввода-вывода оверлейного¦
¦ ¦ ¦ файла. ¦
¦ ovrNoEMSDriver ¦ -5 ¦ Драйвер EMS не установлен. ¦
¦ ovrNoEMSMemory ¦ -6 ¦ Не хватает памяти EMS. ¦
L----------------+--------+----------------------------------



B.Pascal 7 & Objects/PG - 77 -


Тип PaletteType модуль Graph
-----------------------------------------------------------------

Назначение: Запись, определяющая размер и цвета палитры; ис-
пользуется в GetPalette, GetDefaultPalette и SetAllPalette.

Целевая платформа: Реальный режим. Защищенный режим.

Описание: PaletteType определяется следующим образом:

const
MaxColors = 15;
type
PaletteType = record
Size: Byte;
Colors: array[0..MaxColors] of Shortint;
end;

Поле размера Size указывает на число цветов в палитре для
текущего драйвера и текущего режима. Colors содержит фактические
цвета 0..Size - 1.

Тип PointType модуль Graph
-----------------------------------------------------------------

Назначение: Этот тип определен для вашего удобства. Оба поля
имеют тип Integer, а не Word.

Целевая платформа: Реальный режим. Защищенный режим.

Описание:

type
PointType = Record
X. Y: Integer;
end;



B.Pascal 7 & Objects/PG - 78 -


Переменная PrefixSeg модуль System
-----------------------------------------------------------------

Назначение: Содержит селектор для защищенного режима или
сегмент для реального режима префикса программного сегмента
(PSP), создаваемого DOS при выполнении прикладной программы.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: var PrefixSeg: Word;

Примечания: Полное описание префикса программного сегмента
вы можете найти в руководствах по DOS.

Переменная RandSeed модуль System
-----------------------------------------------------------------

Назначение: Сохраняет начальное значение встроенного генера-
тора случайных чисел.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: var RandSeed: Longint;

Примечания: Путем присваивания этой переменной конкретного
значения можно получать каждый раз заданную последовательность
случайных чисел. Это особенно полезно в прикладных задачах, где
используется кодирование данных, статистике и моделировании.

См. также: Random, Randomize.



B.Pascal 7 & Objects/PG - 79 -


Переменная ReadModeRegs модуль System
-----------------------------------------------------------------

Назначение: Структура регистров реального режима, используе-
мая в вызовах функции DPMI.

Целевая платформа: Защищенный режим.

Описание: var RealModeRegs: array[0..49] of Byte;

Примечания: Библиотека исполняющей системы использует пере-
менную RealModeRegs в сервере DPVI. В частности, она используется
для реализации вызова реального режима для прерываний 23H и 24H.
Обращаться к данной переменной вам не требуется.

Тип Registers модуль Dos
-----------------------------------------------------------------

Назначение: Параметр-переменную типа Registers используют
процедуры Intr и MsDos. Она специфицирует содержимое входных и
выходных регистров программного прерывания.

Целевая платформа: Реальный режим. Защищенный режим.

Описание:

type
Registers = record
case Inrteger of
0: (AX, BX, CX, DX, BP, SI, DI, DS, ES, Flags: Word);
1: (AL, AH, DL, DH, CL, CH, DL, DH: Byte);
end;

Примечания: Переменную типа Registers используют процедуры
Intr и MsDos. Обратите внимание на применение для отображения
8-битовых регистров в старшие слова соответствующих 16-битовый
регистров вариантной записи.

См. также: Intr, MsDos, TRegisters.



B.Pascal 7 & Objects/PG - 80 -


Переменные SaveIntXX модуль System
-----------------------------------------------------------------

Назначение: Используются для сохранения векторов прерываний.

Целевая платформа: Реальный режим. Защищенный режим.

Примечания: В версии модуля System для реального режима DOS
описаны следующие переменные SaveIntXX:

-----------------T----------T-----------------------------------¬
¦ Имя ¦ Тип ¦ Описание ¦
+----------------+----------+-----------------------------------+
¦ SaveInt00 ¦ Pointer ¦ { сохраненное прерывание $00 } ¦
¦ SaveInt02 ¦ Pointer ¦ { сохраненное прерывание $02 } ¦
¦ SaveInt1B ¦ Pointer ¦ { сохраненное прерывание $1B } ¦
¦ SaveInt21 ¦ Pointer ¦ { сохраненное прерывание $21 } ¦
¦ SaveInt23 ¦ Pointer ¦ { сохраненное прерывание $23 } ¦
¦ SaveInt24 ¦ Pointer ¦ { сохраненное прерывание $24 } ¦
¦ SaveInt34 ¦ Pointer ¦ { сохраненное прерывание $34 } ¦
¦ SaveInt35 ¦ Pointer ¦ { сохраненное прерывание $35 } ¦
¦ SaveInt36 ¦ Pointer ¦ { сохраненное прерывание $36 } ¦
¦ SaveInt37 ¦ Pointer ¦ { сохраненное прерывание $37 } ¦
¦ SaveInt38 ¦ Pointer ¦ { сохраненное прерывание $38 } ¦
¦ SaveInt39 ¦ Pointer ¦ { сохраненное прерывание $39 } ¦
¦ SaveInt3A ¦ Pointer ¦ { сохраненное прерывание $3A } ¦
¦ SaveInt3B ¦ Pointer ¦ { сохраненное прерывание $3B } ¦
¦ SaveInt3C ¦ Pointer ¦ { сохраненное прерывание $3C } ¦
¦ SaveInt3D ¦ Pointer ¦ { сохраненное прерывание $3D } ¦
¦ SaveInt3E ¦ Pointer ¦ { сохраненное прерывание $3E } ¦
¦ SaveInt3F ¦ Pointer ¦ { сохраненное прерывание $3F } ¦
¦ SaveInt75 ¦ Pointer ¦ { сохраненное прерывание $75 } ¦
L----------------+----------+------------------------------------


B.Pascal 7 & Objects/PG - 81 -


В версии модуля System для защищенного режима DOS описаны
следующие переменные SaveIntXX:

-----------------T----------T-----------------------------------¬
¦ Имя ¦ Тип ¦ Описание ¦
+----------------+----------+-----------------------------------+
¦ SaveInt02 ¦ Pointer ¦ { сохраненное прерывание $02 } ¦
¦ SaveInt0C ¦ Pointer ¦ { сохраненная исключительная ¦
¦ ¦ ¦ ситуация $0C } ¦
¦ SaveInt0D ¦ Pointer ¦ { сохраненная исключительная ¦
¦ ¦ ¦ ситуация $0D } ¦
¦ SaveInt1B ¦ Pointer ¦ { сохраненное прерывание $1B } ¦
¦ SaveInt21 ¦ Pointer ¦ { сохраненное прерывание $21 } ¦
¦ SaveInt23 ¦ Pointer ¦ { сохраненное прерывание реального¦
¦ ¦ ¦ режима $21 } ¦
¦ SaveInt24 ¦ Pointer ¦ { сохраненное прерывание реального¦
¦ ¦ ¦ режима $24 } ¦
¦ SaveInt34 ¦ Pointer ¦ { сохраненное прерывание $34 } ¦
¦ SaveInt35 ¦ Pointer ¦ { сохраненное прерывание $35 } ¦
¦ SaveInt36 ¦ Pointer ¦ { сохраненное прерывание $36 } ¦
¦ SaveInt37 ¦ Pointer ¦ { сохраненное прерывание $37 } ¦
¦ SaveInt38 ¦ Pointer ¦ { сохраненное прерывание $38 } ¦
¦ SaveInt39 ¦ Pointer ¦ { сохраненное прерывание $39 } ¦
¦ SaveInt3A ¦ Pointer ¦ { сохраненное прерывание $3A } ¦
¦ SaveInt3B ¦ Pointer ¦ { сохраненное прерывание $3B } ¦
¦ SaveInt3C ¦ Pointer ¦ { сохраненное прерывание $3C } ¦
¦ SaveInt3D ¦ Pointer ¦ { сохраненное прерывание $3D } ¦
¦ SaveInt3E ¦ Pointer ¦ { сохраненное прерывание $3E } ¦
¦ SaveInt3F ¦ Pointer ¦ { сохраненное прерывание $3F } ¦
¦ SaveInt75 ¦ Pointer ¦ { сохраненное прерывание $75 } ¦
L----------------+----------+------------------------------------

В модуле System и других библиотечных модулях исполняющей
системы используется несколько векторов прерываний. Код инициали-
зации библиотеки исполняющей системы в модуле System перед уста-
новкой какой-либо подпрограммы обработки прерываний сохраняет
старые векторы прерываний в переменных SaveIntXX. Аналогично, код
завершения библиотеки исполняющей системы перед возвратом в опе-
рационную системы с помощью переменных SaveIntXX восстанавливает
векторы прерываний.

Если прикладной программе требуется доступ к первоначальному
вектору прерываний (тому, который существовал до установки библи-
отекой исполняющей системы нового обработчика), она должна обра-
титься к соответствующей переменной SaveIntXX. Если для этого
конкретного вектора прерываний переменной SaveIntXX нет, то зна-
чит библиотека исполняющей системы данный вектор не модифицирует.

В защищенном режиме DOS в некоторых из переменных SaveIntXX
вместо векторов прерываний защищенного режима сохраняются векторы
прерываний реального режима или векторов исключительных ситуаций
защищенного режима. Подпрограммы GetIntVec и SetIntVec в модулях

B.Pascal 7 & Objects/PG - 82 -

Dos и WinDos могут использоваться только для работы с векторами
прерываний защищенного режима. Чтобы работать с векторами реаль-
ного режима и векторами исключительных ситуаций защищенного режи-
ма, вы должны использовать функциональные вызовы DPMI. Подробнос-
ти вы можете узнать в Спецификации защищенного режима DOS Intel
0.9.

См. также: Exec, SwapVectors.

Типизированные константы ScreenSize модуль WinCrt
-----------------------------------------------------------------

Назначение: Определяют ширину и высоту (в символах) вирту-
ального экрана в окне CRT.

Целевая платформа: Windows.

Описание: const ScreenSize: TPoint = (X: 80; Y: 25);

Примечания: По умолчанию экран имеет размер 80 столбцов на
25 строк. Присвоив координатам X и Y ScreenSize перед созданием
окна CRT другие значения, вы можете изменить размер виртуального
экрана. Произведение значения ScreenSize.X на ScreenSize.Y не
должно превышать 65520.



B.Pascal 7 & Objects/PG - 83 -


Тип SearchRec модуль Dos
-----------------------------------------------------------------

Назначение: Процедуры FindFirst и FindNext используют пере-
менные типа SearchRec для просмотра каталогов.

Целевая платформа: Реальный режим, защищенный режим.

Описание:

type
SearchRec = record
Fill: array[1..21] of Byte;
Attr: Byte;
Time: Longint;
Size: Longint;
Name: string[12];
end;

Информация о каждом файле, найденном в одной из этих проце-
дур, записывается в SearchRec. Поле Attr содержит атрибуты файла
(построенные из констант-атрибутов), Time содержит упакованную
дату и время (для распаковки этого значения используется
UnpackTime), Size содержит размер в байтах, а Name содержит его
имя. Поле Fill резервируется DOS и не должно модифицироваться.

Переменная Seg0040 модуль System
-----------------------------------------------------------------

Назначение: Селектор сегмента $0040.

Целевая платформа: Реальный режим, защищенный режим.

Описание: var Seg0040: Word;

Примечания: Seg0040 содержит селектор, который можно исполь-
зовать для доступа к рабочему пространству ROM BIOS по адресу
сегмента $0040. В реальном режиме Seg0040 всегда содержит значе-
ние $0040, но в защищенном режиме фактическое значение может из-
меняться.

См. также: SegA000, SegB000, SegB800.



B.Pascal 7 & Objects/PG - 84 -


Переменная SegA000 модуль System
-----------------------------------------------------------------

Назначение: Селектор сегмента $A000.

Целевая платформа: Реальный режим, защищенный режим.

Описание: var SegA000: Word;

Примечания: SegA000 содержит селектор, который можно исполь-
зовать для доступа к рабочему пространству ROM BIOS по адресу
сегмента $A000. В реальном режиме SegA000 всегда содержит значе-
ние $A000, но в защищенном режиме фактическое значение может из-
меняться.

См. также: Seg0040, SegB000, SegB800.

Переменная SegB000 модуль System
-----------------------------------------------------------------

Назначение: Селектор сегмента $B000.

Целевая платформа: Реальный режим, защищенный режим.

Описание: var SegB000: Word;

Примечания: SegB000 содержит селектор, который можно исполь-
зовать для доступа к рабочему пространству ROM BIOS по адресу
сегмента $B000. В реальном режиме SegB000 всегда содержит значе-
ние $B000, но в защищенном режиме фактическое значение может из-
меняться.

См. также: Seg0040, SegB000, SegB800.



B.Pascal 7 & Objects/PG - 85 -


Переменная SegB800 модуль System
-----------------------------------------------------------------

Назначение: Селектор сегмента $B800.

Целевая платформа: Реальный режим, защищенный режим.

Описание: var SegB900: Word;

Примечания: SegB800 содержит селектор, который можно исполь-
зовать для доступа к рабочему пространству ROM BIOS по адресу
сегмента $B800. В реальном режиме SegB800 всегда содержит значе-
ние $B800, но в защищенном режиме фактическое значение может из-
меняться.

См. также: Seg0040, SegB000, SegB800.

Переменная SelectorInc модуль System
-----------------------------------------------------------------

Назначение: Значение увеличение селектора.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: var SelectorInc: Word;

Примечания: SelectorInc содержит значение, которое должно
добавляться или вычитаться из селекторной части указателя для
увеличения или уменьшения указателя на 64К. В реальном режиме
SelectorInc всегда содержит значение $1000, но в защищенном режи-
ме это значение может быть другим. Более подробно о SelectorInt
рассказывается в Главе 17 ("Программирование в защищенном режиме
DOS") в "Руководстве по языку".



B.Pascal 7 & Objects/PG - 86 -


Переменная StackLimit модуль System
-----------------------------------------------------------------

Назначение: Содержит смещение конца стека ("дна") в кадре
стека.

Целевая платформа: Реальный режим.

Описание: var StackLimit: Word;

Примечания: StackLimit возвращает наименьшее значение, кото-
рое может содержать регистр SP перед наступлением ситуации пере-
полнения стека.

См. также: SPtr.

Тип TDateTime модуль WinDos
-----------------------------------------------------------------

Назначение: Переменные типа TDateTime используются в проце-
дурах UnpakcTime и PackTime для проверки и построения 4-байтовых
упакованных значений даты и времени для процедур GetFTime,
SetFTime, FindFirst и FindNext.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание:

type
TDAteTie = record
Year,Month,Day,Hour,Min,Sec: Word;
end;

Примечания: Значения имеют следующие допустимые диапазоны:
Year (год) - 1980..2099, Month (месяц) - 1..12, Day (число)
1..31, Hour (час) 0..23, Min (минуты) 0..59 и Sec (секунды)
0..59.

См. также: PackTime.



B.Pascal 7 & Objects/PG - 87 -


Переменная Test8086 модуль System
-----------------------------------------------------------------

Назначение: Идентифицирует тип процессора 80x86, который со-
держит система.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: var Test8086: Byte;

Примечания: Код инициализации и запуска библиотеки исполняю-
щей системы содержит логику обнаружения, которая автоматически
определяет, какой тип процессора 80x86 содержит система. Резуль-
тат распознавания ЦП записывается в переменную Test8086 в виде
одного из следующих значений:

------------T----------------------------¬
¦ Значение ¦ Определение ¦
+-----------+----------------------------+
¦ 0 ¦ Процессор 8086. ¦
¦ 1 ¦ Процессор 80286. ¦
¦ 2 ¦ Процессор 80386 или старше.¦
L-----------+-----------------------------

Когда библиотека исполняющей системы распознает процессор
80386 или более поздний, для ускорения отдельных операций она бу-
дет использовать инструкции 80386. В частности, умножение, деле-
ние, и операции сдвига Longint выполняются с 32-битовыми инструк-
циями.

См. также: Test8087.



B.Pascal 7 & Objects/PG - 88 -


Переменная Test8087 модуль System
-----------------------------------------------------------------

Назначение: Идентифицирует тип сопроцессора 80x87, который
содержит система.

Целевая платформа: Защищенный режим, реальный режим.

Описание: var Test8086: Byte;

Примечания: Переменная Test8087 указывает, будут ли инструк-
ции с плавающей точкой эмулироваться или фактически выполняться.
Определены следующие значения переменной Test8087:

------------T------------------------------¬
¦ Значение ¦ Определение ¦
+-----------+------------------------------+
¦ 0 ¦ Сопроцессор не обнаружен. ¦
¦ 1 ¦ Обнаружен сопроцессор 8087. ¦
¦ 2 ¦ Обнаружен сопроцессор 80287. ¦
¦ 3 ¦ Обнаружен сопроцессор 80387¦
¦ ¦ или старше. ¦
L-----------+-------------------------------

Если прикладная программа не содержит инструкции сопроцессо-
ра 80х87, логика обнаружения сопроцессора 80х87 не компонуется с
выполняемым файлом, и переменная Test8087 будет содержать нулевое
значение. Кроме того, эта переменная всегда имеет нулевое значе-
ние в библиотеке, так как библиотека зависит от обнаружения соп-
роцессора или использования эмулирующей библиотеки вызывающей
программой.

Дополнительную информацию вы можете найти в Главе 15 ("Ис-
пользование сопроцессора 80x87") в "Руководстве по языку".

Пример: Существование сопроцессора проверяет следующая прог-
рамма:

program Test87;
{$N+} { разрешить инструкции сопроцессора 80x87 }
{$E+} { включить эмулирующую библиотеку }
var
X : Single;
begin
X := 0; { принудительная генерация инструкций
сопроцессора 80x87 }
case Test8087 of
0: Writeln ('Арифметический сопроцессор не обнаружен.');
1: Writeln ('Сопроцессор 8087 обнаружен.');
end;
end.


B.Pascal 7 & Objects/PG - 89 -


Переменная TextAttr модуль Crt
-----------------------------------------------------------------

Назначение: Сохраняет текущий выбранный текстовый атрибут.

Целевая платформа: Защищенный режим, реальный режим.

Описание: var TextAttr: Byte;

Примечания: Хотя текстовые атрибуты обычно устанавливаются с
помощью вызовов TextColor и TextBackground, вы можете также ис-
пользовать их непосредственно, записывая в TextAttr значение. Ин-
формация о цвете кодируется в TextAttr следующим образом:

bit -------> 7 6 5 4 3 2 1 0
----T---T---T---T---T---T---T---¬
¦ B ¦ b ¦ b ¦ b ¦ f ¦ f ¦ f ¦ f ¦
L---+---+---+---+---+---+---+----

где ffff - это 4-битовый основной цвет, bbbb - 3-битовый фоновый
цвет, а B - бит мерцания. Если для создания значений TextAttr вы
используете константы цветов, то фоновый цвет может выбираться
только из первых 8 цветов и для получения корректных битовых по-
зиций должен умножаться на 16. Например, при следующем присваива-
нии выбираются мерцающие желтые символы на голубом фоне:

TextAttr := Yellow + Blue * 16 + Blink;

См. также: LowVideo, NormVideo, TextBackGround, TextColor.



B.Pascal 7 & Objects/PG - 90 -


Константы цветов текста модуль Crt
-----------------------------------------------------------------

Назначение: Представляют цвета текста.

Целевая платформа: Защищенный режим, реальный режим.

Примечания:

-----------------T------------------------------¬
¦ Константа ¦ Значение ¦
+----------------+------------------------------+
¦ Black ¦ 0 ( черный ) ¦
¦ Blue ¦ 1 ( синий ) ¦
¦ Green ¦ 2 ( зеленый ) ¦
¦ Cyan ¦ 3 ( бирюзовый ) ¦
¦ Red ¦ 4 ( красный ) ¦
¦ Magenta ¦ 5 ( малиновый ) ¦
¦ Brown ¦ 6 ( коричневый ) ¦
¦ LightGray ¦ 7 ( светло-серый ) ¦
¦ DarkGray ¦ 8 ( темно-серый ) ¦
¦ LightBlue ¦ 9 ( светло-синий ) ¦
¦ LightGreen ¦ 10 ( светло-зеленый ) ¦
¦ LightCyan ¦ 11 ( светло-бирюзовый ) ¦
¦ LightRed ¦ 12 ( светло-красный ) ¦
¦ LightMagenta ¦ 13 ( светло-малиновый ) ¦
¦ Yellow ¦ 14 ( желтый ) ¦
¦ White ¦ 15 ( белый ) ¦
¦ Blink ¦ 128 ( мерцание) ¦
L----------------+-------------------------------

Цвета текста представляются значениями от 0 до 15 включи-
тельно; чтобы облегчить идентификацию каждого цвета, вместо чисел
вы можете использовать данные константы. В цветном режиме цвет
каждого символа выбирается из 16 цветов, а фон - из 8 цветов. Фон
каждого символа также можно сделать мерцающим.

См. также: TextAttr, TexBackGround, TextColor.



B.Pascal 7 & Objects/PG - 91 -


Тип TextRec модуль Dos
-----------------------------------------------------------------

Назначение: Определяет внутренний формат текста Borland
Pascal.

Целевая платформа: Защищенный режим, реальный режим.

Описание:

type
TextBut = array[0..127] of Char;
TextRec = record
Handle: Word;
Mode: Word;
BufSize: Word;
Private: Word;
Bufpos: Word;
BufEnd: Word;
BufPtr: ^TextBuf;
OpenFunc: Pointer;
InOutFunc: Pointer;
FlushFunc: Pointer;
CloseFunc: Pointer;
UserData: array[1..16] of Byte;
Name: array[0..79] of Char;
Buffer: TextBuf;
end;

Примечания: TextRec - это внутренний формат переменной типа
Text.

См. также: FileRec.



B.Pascal 7 & Objects/PG - 92 -


Тип TextSettingsType модуль Graph
-----------------------------------------------------------------

Назначение: Запись, определяющая используемые
GetTextSettings текстовые атрибуты.

Целевая платформа: Защищенный режим, реальный режим.

Описание:

type
TextSettingsType = record
Font: Word;
Direction: Word;
CharSize: Word;
Horiz: Word;
Vert: Word;
end;

Примечание: См. список констант шрифта, используемых для
идентификации атрибутов шрифта.

Тип TFarProc модуль WinAPI
-----------------------------------------------------------------

Назначение: Тип указателя на процедуру.

Целевая платформа: Защищенный режим, реальный режим.

Описание: type TFarProc = Pointer;

Примечания: Тип TFarProc используется в подпрограммах
GetProcAddress и GlobalNotify для представления указателя на про-
цедуру или функцию.



B.Pascal 7 & Objects/PG - 93 -


Тип TFileRec модуль WinDos
-----------------------------------------------------------------

Назначение: Определяет запись, используемую для типизирован-
ных и нетипизированных файлов.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание:

type
TFileRec = record
Handle: Word;
Mode: Word;
RecSize: Word;
Private: array[1..26] of Byte;
UserData: array[1..16] of Byte;
Name: array[0..79] of Char;
end;

Примечания: TFileRec - это определение записи, предназначен-
ной для внутреннего использования в Borland Pascal, а также опи-
санной в модуле Dos. Подробности вы можете найти в Главе 21
("Внутренние форматы данных") в "Руководстве по языку".

Тип THandle модуль WinAPI
-----------------------------------------------------------------

Назначение: Генерирует тип описателя.

Целевая платформа: Защищенный режим, Windows.

Описание: type THandle = Word;

Примечание: API Windows использует описатели для представле-
ния ссылок на различные объекты. С точки зрения прикладной прог-
раммы описатель - это просто значение размером в слово, но в
Windows он представляет указатель на структуру данных или индекс
в таблице. Прикладная программа не может сама построить значащий
описатель - описатели всегда создаются и уничтожаются подпрограм-
мами API Windows.



B.Pascal 7 & Objects/PG - 94 -


Тип TRegisters модуль WinDos
-----------------------------------------------------------------

Назначение: Задает содержимое регистров ввода и вывода прог-
раммного прерывания.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание:

type
TRegisters = record
case Integer of
0: (AX, BX, CX, DX, BP, SI, DI, DS, ES, Flags: Word);
1: (Al, AH, BL, BH, CL, CH, DL, DH: Byte);
end;

Примечания: Переменные типа TRegisters используются в подп-
рограммах Intr и MsDos. Обратите внимание на применение вариант-
ной записи для отображения 8-битовых регистров в их 16-битовые
эквиваленты.

Тип TSearchRec модуль WinDos
-----------------------------------------------------------------

Назначение: Переменные типа TSearchRec используются в проце-
дурах FindFirst и FindNext для поиска в каталогах.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание:

TSearchRec = record
Fill: array[1..21] of Byte;
Attr: Byte:
Time: Longint;
Size: Longint;
Name: array[0..12] of Char;
end;

Примечание: Информация о каждом файле, найденном в одном из
этих процедур, возвращается в TSearchRec. Поле Attr содержит ат-
рибуты файла (построенные из констант атрибутов файла), поле Time
содержит его упакованную дату и время (для распаковки используйте
подпрограмму UnpackTime), Size содержит его размер в байтах, а
Name - имя. Полу Fill резервируется DOS, не модифицируйте его.

См. также: FindFirst, FindNext.


B.Pascal 7 & Objects/PG - 95 -

Тип TTextRec модуль WinDos
-----------------------------------------------------------------

Назначение: Определяет внутренний формат переменных типа
Text.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание:

type
PTextBuf = ^ TTextBuf;
TTextBuf = array[0..127] of Char;

TText = record
Handle: Word;
Mode: Word;
BufSize: Word;
Private: Word;
BufPos: Word;
BufEnd: Word;
BufPtr: PTextBuf;
OpenFunc: Pointer;
InOutFunc: Pointer;
FlushFunc: Pointer;
CloseFunc: Pointer;
UserData: array[1..16] of Byte;
Name: array[0..79] of Char;
Buffer: TTextBuf;
end;

Примечания: TTextRec - это определение записи, предназначен-
ной для внутреннего использования в Borland Pascal и описанной в
модуле WinDos. См. раздел "Внутренние форматы данных" в Главе 21
в "Руководстве по языку".


B.Pascal 7 & Objects/PG - 96 -



Тип ViewPortType модуль Graph
-----------------------------------------------------------------

Назначение: Запись, которая сообщает о состоянии текущей об-
ласти просмотра; используется в GetViewSettings.

Целевая платформа: Защищенный режим, реальный режим.

Описание:

type
ViewPortType = record
X1, Y1, X2, Y2: Integer;
Clip: Boolean;
end;

Примечания: Точки (X1,Y1) и (X2,Y2) определяют размер актив-
ной области просмотра и задают абсолютные координаты экрана. Clip
- это булевская переменная, управляющая отсечением.

См. также: GetViewSettings.



B.Pascal 7 & Objects/PG - 97 -


Флаги конфигурации wf_XXXX модуль VinAPI
-----------------------------------------------------------------

Назначение: Флаги памяти и системной конфигурации, использу-
емые в GetWinFlags.

Целевая платформа: Защищенный режим, Windows.

Примечания:

------------------T---------------------------------------------¬
¦ Константа ¦ Описание ¦
+-----------------+---------------------------------------------+
¦ wf_PMode ¦ Система работает в защищенном режиме. ¦
¦ wf_CPU286 ¦ Система содержит процессор 80286. ¦
¦ wf_CPU386 ¦ Система содержит процессор 80386. ¦
¦ wf_CPU486 ¦ Система содержит процессор 80486. ¦
¦ wf_Standard ¦ Windows работает в стандартном режиме. ¦
¦ wf_Enchanced ¦ Windows работает в улучшенном режиме. ¦
¦ wf_CPU086 ¦ Система содержит процессор 8086. ¦
¦ wf_CPU186 ¦ Система содержит процессор 80186. ¦
¦ wf_LargeFrame ¦ Конфигурация Windows с большим кадром EMS. ¦
¦ wf_LargeFrame ¦ Конфигурация Windows с малым кадром EMS. ¦
¦ wf_80x86 ¦ Система содержит арифметический сопроцессор.¦
¦ wf_DPMI ¦ Система работает в защищенном режиме DOS. ¦
L-----------------+----------------------------------------------

См. также: GetWinFlags.

Переменные WindMax и WindMin модуль Crt
-----------------------------------------------------------------

Назначение: Содержат координаты экрана текущего окна.

Целевая платформа: Защищенный режим, реальный режим.

Описание: var WindMax, WindMin: Word;

Примечания: Данные переменные устанавливаются вызовом проце-
дуры Window. WindMin определяет верхний левый угол, а WindMax -
нижний правый угол. Координата x сохраняется в младшем байте, а y
- в старшем байте. Например, Lo(WindMin) дает x-координату левого
края, а Hi(WindMax) дает y-координату нижнего края. Верхний левый
угол экрана соответствует (x,y) = (0,0). Однако, для координат,
передаваемых подпрограммам Window и GotoXY, верхним левым углом
является (1,1).

См. также: GotoXY, High, Lo, LoWindow.



B.Pascal 7 & Objects/PG - 98 -


Переменная WindowOrg модуль WinCrt
-----------------------------------------------------------------

Назначение: Определяет начальное расположение окна CRT.

Целевая платформа: Windows.

Описание: const WindowOrg: TPoint = (X: cw_UseDefault; Y:
cw_UseDefault);

Примечания: Используемое по умолчанию расположение позволяет
Windows выбрать для окна CRT подходящее место. Присвоив перед
созданием окна CRT переменным X и Y новые начальные значения, вы
можете изменить начальное расположение.

Переменная WindowSize модуль WinCrt
-----------------------------------------------------------------

Назначение: Определяет начальный размер окна CRT.

Целевая платформа: Windows.

Описание: const WindowSize: TPoint = (X: cw_UseDefault; Y:
cw_UseDefault);

Примечания: Используемый по умолчанию размер позволяет
Windows выбрать для окна CRT подходящий размер. Присвоив перед
созданием окна CRT переменным X и Y новые начальные значения, вы
можете изменить начальный размер.



B.Pascal 7 & Objects/PG - 99 -


Переменная WindowTitle модуль WinCrt
-----------------------------------------------------------------

Назначение: Определяет заголовок окна CRT.

Целевая платформа: Windows.

Описание: var WindowTitle: array[0..79] of Char;

Примечания: Используемое по умолчанию значение представляет
собой полный маршрут файла .EXE программы. Записав в WindowTitle
перед созданием окна CRT новое значение, вы можете изменить заго-
ловок.

Пример: StrCopy(WindowTitle, 'Hello Word');



B.Pascal 7 & Objects/PG - 100 -

-------------------------------------------------------------
Процедуры и функции
-----------------------------------------------------------------

Процедура AbortPrn модуль WinPrn
-----------------------------------------------------------------

Назначение: Прекращает печать текста.

Целевая платформа: Windows.

Описание: procedure AbortPrn(var F: Text);

Примечания: Процедура AbortPrn отбрасывает все ненапечатан-
ные части текста. Не забудьте, однако, закрыть файл. Файл требу-
ется присвоить с помощью AssignPrn или AssignDefPrn.

Пример:

uses WinPrn, WinCrt;

var
Source, Prn: Text;
Name: array[0..80] of Char;
Line: String;
begin { получить имя от пользователя }
Write(' Введите файл для печати:');
Readln(Name);
Assign(Source, Name);
Reset(Source);
AssignDefPrn(Prn) { открыть файл для используемого
по умолчанию принтера }
TitlePrn(Prn, Name);
Rewrite(Prn);
Writeln(' Печать файла:', Name); { печать файла }
while not Eof(Source) do
begin
Readln(Source, Line);
Writeln(Prn, Line);
{ завершить печать, если пользователь нажал ESC }
if KeyPressed and (ReadKey = #27) then
begin
AbortPrn(Prn);
Break;
end;
end;
Close(Source);
Close(Prn);
end;

См. также: AssignDefPrn, AssignPrn, SetPrnFont, TitlePrn.



B.Pascal 7 & Objects/PG - 101 -


Функция Abs модуль System
-----------------------------------------------------------------

Назначение: Возвращает абсолютное значение аргумента.

Описание: Abs(x);

Тип результата: Соответствует типу параметра.

Примечания: Параметр x - выражение целого или вещественного
типа. Результат, имеющий тот же тип, что и x, представляет собой
абсолютное значение x.

Пример:

var
r : real;
i : integer;
begin
r := Abx(-2.3); { 2.3 }
i := Abs(-157); { 157 }



B.Pascal 7 & Objects/PG - 102 -


Функция AccessResource модуль WinApi
-----------------------------------------------------------------

Назначение: Открывает и позиционирует файл ресурсов.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function AccessResource(Instance, ResInfo:
THandle): Integer;

Примечания: Открывает файл ресурса, заданный параметром
Instance, и перемещает указатель файла на позицию, заданную
ResInfo. Возвращаемое значение представляет собой описатель фай-
ла, который может использоваться в последующих операциях чтения
из файла для загрузки ресурса. Если ресурс не найден, то возвра-
щается значение -1. Параметр Instance - это описатель экземпляра
модуля, получаемый обычно из переменной HInstance в модуле System
или создается LoadLibrary. Параметр ResInfo должен представлять
собой информацию о ресурсе, созданную FindResource.

Ограничения: Файл ресурсов открывается только для чтения.
Если после обращения к ресурсу открытый файл не закрывается, то
множественные вызовы AccessResource могут исчерпать все доступные
описатели файлов DOS.

См. также: FindResource, SizeOfResource.



B.Pascal 7 & Objects/PG - 103 -


Функция Addr модуль System
-----------------------------------------------------------------

Назначение: Возвращает адрес заданного объекта.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function Addr(x) : Pointer;

Тип результата: Указатель.

Примечания: Параметр x - любая переменная, или идентификатор
процедуры или функции. Результатом является указатель, ссылающий-
ся на x. Как и указатель типа nil (пустой указатель), результат
данной функции совместим по присваиванию со всеми типами указате-
лей.

См. также: Ofs, Seg, Ptr.

Пример:

var
p : pointer;
begin
p : Addr(p); { указывает теперь сам на себя }
end.



B.Pascal 7 & Objects/PG - 104 -


Функция AllocDStoCSAlias модуль WinApi
-----------------------------------------------------------------

Назначение: Отображает селектор сегмента данных на селектор
сегмента кода.

Целевая платформа: Защищенный режим, Windows.

Описание: function AllocDCtoCSAlias(Selector: Word): Word;

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

Ограничения: Администратор Windows и администратор Borland
этапа выполнения защищенного режима DOS не обновляет выделенный
селектор в случае его последующей модификации, поэтому прикладная
программа должна использовать выделенный селектор непосредственно
после его возвращения данной функцией и перед тем, как может про-
изойти перемещение памяти. В противном случае исходный селектор
следует сделать фиксированным и невыгружаемым.

См. также: FreeSelector.



B.Pascal 7 & Objects/PG - 105 -


Функция AllocSelector модуль WinApi
-----------------------------------------------------------------

Назначение: Выделяет новый селектор.

Целевая платформа: Защищенный режим, Windows.

Описание: function AllocSelector(Selector: Word): Word;

Примечания: AllocSelector выделяет новый селектор, являющий-
ся точной копией селектора, заданного параметром Selector. Если
Selector равен 0, то AllocSelector возвращает новый неинициализи-
рованный селектор (который затем используется обычно в вызове
ChangeSelector). Если функция не может выделить новый селектор,
то возвращаемое значение равно 0. Когда выделенный селектор боль-
ше не будет нужен, прикладная программа должна освободить его с
помощью функции FreeSelector.

Ограничения: Администратор Windows и администратор Borland
этапа выполнения защищенного режима DOS не обновляет выделенный
селектор в случае его последующей модификации, поэтому прикладная
программа должна использовать выделенный селектор непосредственно
после его возвращения данной функцией и перед тем, как может про-
изойти перемещение памяти. В противном случае исходный селектор
следует сделать фиксированным и невыгружаемым.

См. также: FreeSelector, ChangeSelector.



B.Pascal 7 & Objects/PG - 106 -


Процедура Append модуль System
-----------------------------------------------------------------

Назначение: Открывает текущий файл для присоединения.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure Append(var f : text);

Примечания: Параметр f - файловая переменная текстового ти-
па, которая должна быть связана с внешним файлом с помощью проце-
дуры Assign.

Процедура Appеnd открывает существующий внешний файл с име-
нем, назначенным переменной f. Если внешнего файла с указанным
именем не существует, то это является ошибкой. Если файл f уже
открыт, то он сначала закрывается, а затем открывается заново.
Текущая позиция устанавливается на конец файла.

Если в последнем блоке файла размером 128 байт присутствует
символ Ctrl+Z (26 в коде ASСII), то текущая позиция устанавлива-
ется в файле таким образом, что при записи первым в блоке будет
"затираться" символ Ctrl+Z.

Если переменной f было присвоено пустое имя (например,
Assign(f,''), то после обращения к процедуре Appеnd f будет ука-
зывать на стандартный выходной файл (стандартный канал номер 1).
После обращения к Appеnd файл f становится доступным только по
записи и Eоf(f) всегда принимает значение Truе.

При использовании директивы компилятора {$I+} функция
IОRеsult будет возвращать значение 0 при успешном завершении опе-
рации и ненулевой код ошибки в противном случае.

См. также: Rеsеt, Rеwritе.

Пример:

var f : text;
begin
Assign(f, 'Test.txt');
Rewrite(f); { создать новый файл }
Writeln(f, 'исходный текст');
Close(f); { закрыть файл, сохранить изменения }
Append(f); { добавить текст в конец файла }
Writeln(f,'дополнительный текст');
Close(f); { закрыть файл, сохранить изменения }
end.



B.Pascal 7 & Objects/PG - 107 -


Процедура Arc модуль Graph
-----------------------------------------------------------------

Назначение: Вычерчивает дугу окружности от начального угла
до конечного угла. Точка (x,y) используется, как центр окружнос-
ти.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure Arс(Х, Y: Integer; Angle1, Angle2, R:
Word);

Примечания: Рисует дугу окружности с центром (x,y) и радиу-
сом R. Дуга рисуется от начального угла (Angle1) до конечного уг-
ла (Angle2). При этом используется текущий цвет.

В каждом графическом драйвере содержится коэффициент относи-
тельного удлинения, который используется в процедурах Circle, Arс
и РieSlice.

Начальный угол, равный 0 и конечный угол, равный 360, задают
вычерчивание полной окружности.

Углы для Arc, Ellipce и PieSlice рисуются против часовой
стрелки; угол 0 соответствует 3 часам, 90 градусов - 12 часам и
т.д.

Ограничения: Должен использоваться графический режим.

См. также: Circle, Ellipse, GetArcCoords, GetAspectRatio,
PieSlice.

Пример:

uses Graph:
var
Dg, Gm: Integer;
Radius: Integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
for Radius := 1 to 5 do
Arc(100, 100, 0, 90, Radius * 10);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 108 -


Функция ArcTan модуль System
-----------------------------------------------------------------

Назначение: Возвращает арктангенс аргумента.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function ArcTan(x : real); Real;

Примечания: Параметр x - выражение вещественного типа. Ре-
зультат представляет собой главное значение арктангенса x (в ра-
дианах).

Пример:

var
r : real;
begin
r := ArcTan(Pi);
end;

Процедура Assign модуль System
-----------------------------------------------------------------

Назначение: Присваивает имя внешнего файла файловой перемен-
ной.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure Assign(var f; Name);

Примечания: Параметр f является файловой переменой любого
типа файла, а Name должно представлять собой выражение строкового
типа. Дальнейшие операции с f будут выполняться с внешним файлом
с именем, заданным параметром Name.

После обращения к процедуре Assign связь, установленная меж-
ду переменной f и внешним файлом будет существовать до тех пор,
пока для переменной f не будет выполнена другая процедура Assign.

Имя состоит из маршрута (пути доступа), определяющего доступ
к 0 или более каталогов, имена которых отделены друг от друга с
помощью обратной косой черты и за которыми следует действительное
имя файла:

Диск:\имя_кат\имя_кат\...\имя_кат\имя_файла

Если маршрут начинается с обратной косой черты, то поиск на-
чинается в корневом каталоге, в противном случае он начинается в
текущем каталоге. "Диск" представляет собой идентификатор диска

B.Pascal 7 & Objects/PG - 109 -

(A-Z). Если "Диск" и двоеточие будут пропущены, то используется
назначенный по умолчанию дисковод.

Каталог "\имя_кат\имя_кат\...\имя_кат" является корневым ка-
талогом и маршрутом доступа к подкаталогу, в котором содержится
имя файла. Параметр "имя_файла" может содержать до восьми симво-
лов, за которыми могут следовать точка и расширение имени файла,
длиной до трех символов. Максимально допустимая длина всего имени
файла составляет 79 символов.

Ограничения: Процедура Assign не должна использоваться для
открытого файла.

Пример:

var f : text;
begin
Assign(f,''); { стандартный вывод }
Rewrite(f);
Writeln(f,'стандартный вывод...');
Close(f);
end;

См. также: Append, Close, Lst, Reset, Rewrite.



B.Pascal 7 & Objects/PG - 110 -


Функция AssignCrt модуль Crt
-----------------------------------------------------------------

Назначение: Связывает текстовый файл с устройством CRТ.
(терминалом).

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure AssignCrt(var f: Text)

Примечания: Процедура AssignCrt работает точно также, как
стандартная процедура Assing, за исключением того, что имени фай-
ла не указывается. Вместо этого текстовый файл связывается с уст-
ройством CRТ (терминалом).

Это позволяет ускорить вывод (или ввод) по сравнению с той
скоростью, которая была бы возможна при использовании стандартно-
го вывода (или ввода).

Пример:

uses Crt;
var
f : text;
begin

Write('Вывести на экран или на устройство печати? [S, P]');
if UpCase(ReadKey) = 'P' then
Assign(f,'PRN') { вывод на устройство печати }
else
AssignCrt(f); { вывод на экран; используются под-
программы работы с экраном, осу-
ществляющие быстрый вывод информа-
ции }
Rewrite(f);
Writeln(f,'Быстрый вывод через программы CRT...');
Close(f)
end.



B.Pascal 7 & Objects/PG - 111 -


Функция AssignCrt модуль WinCrt
-----------------------------------------------------------------

Назначение: Связывает текстовый файл с устройством CRТ.

Целевая платформа: Windows.

Описание: procedure AssignCrt(var f: Text);

Примечания: Процедура AssignCrt работает точно также, как
стандартная процедура Assing, за исключением того, что имени фай-
ла не указывается. Вместо этого текстовый файл связывается с уст-
ройством CRТ (терминалом). При последующих операциях Write и
Writeln файл выводится в окно CRT, а операции Read и Readln вы-
полняют считывание из окна CRT.

Пример: См. выше пример для AssignCrt. Для программ Windows
вместо модуля Crt используйте WinCrt.

Функция AssignDefPrn модуль WinPrn
-----------------------------------------------------------------

Назначение: Присваивает файл используемому по умолчанию
принтеру.

Целевая платформа: Windows.

Описание: procedure AssignDefPrn(var f: Text);

Примечания: Процедура AssignDefPrn вызывает AssignPrn с
Device, Driver и Port, установленными в nil. Это связывает ис-
пользуемый по умолчанию в Windows принтер с файлом f. Если акти-
вен администратор печати Windows, то любой текст, записанный в f,
сохраняется администратором печати и будет распечатываться при
закрытии файла.

Пример: См. выше пример для AbortPrn.

См. также: AbortPrn, AssignPrn, SetPrnFont, TitlePrn.



B.Pascal 7 & Objects/PG - 112 -


Функция Assigned модуль System
-----------------------------------------------------------------

Назначение: Проверяет, имеет ли указатель или процедурная
переменная значение nil.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function Assigned(var P): Boolean;

Примечания: Параметр P должен быть ссылкой на переменную или
указатель процедурного типа. Assigned возвращает True, если зна-
чение P не равно nil, и False, если оно равно nil. Для перемен-
ной-указателя Assigned(P) соответствует проверке P <> nil, а для
процедурной переменной - @P <> nil.

Пример:

{ под Windows используйте WinCrt }
var P: Pointer;
begin
P := nil;
if Assigned(P) then Wrileln('Вы этого не увидите');
P := @P;
if Assigned(P) then Writeln('А это увидите');
end.



B.Pascal 7 & Objects/PG - 113 -


Процедура AssignPrn модуль WinPrn
-----------------------------------------------------------------

Назначение: Присваивает текстовый файл принтеру.

Целевая платформа: Windows.

Описание: procedure AssignPrn(var F: Text; Device, Driver,
Port: TChar);

Примечания: Присваивает принтер, описанный параметрами
Driver и Device для порта Port переменной F. Эти значения должны
соответствовать устройству, заданному в файле WIN.INI (в секции
устройств). Например, если к порту LPT1 у вас подключен принтер
LaserJet IIP, то файл WIN.INI будет выглядеть следующим образом:

[устройства]
.
.
.
HP LaserJet IIP=HPPCL,LPT1:
.
.
.

Чтобы присвоить этот принтер текстовому файлу, вызовите
AssignPrn следующим образом:

AssignPrn(F 'HP LaserJet IIP', 'HPPCL', 'LPT1:');

Вы можете получить список допустимых значений параметров,
используя функцию API Windows GetProfileString.

Если Device равно nil, параметры Driver и Port игнорируются,
и AssignPrn присваивает F используемый по умолчанию принтер. Этот
принтер указан в WIN.INI в секции [windows] под ключевым словом
"device". Этот результат можно получить также, вызвав подпрограм-
му AssignDefPrn, которая вызывает процедуру AssignedPrn с пара-
метрами Device, Driver и Port, установленными в nil.

Если активен администратор печати Windows, то записанный в F
текст сохраняется администратором печати и будет печататься при
закрытии файла.

См. также: AbortPrn, AssignDefPrn, SetPrnFont, TitlePrn.



B.Pascal 7 & Objects/PG - 114 -


Процедура Bar модуль Graph
-----------------------------------------------------------------

Назначение: Рисует столбец, используя стандартный тип и цвет
закраски.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure Bar(x1, y1, x2, y2: Integer);

Примечания: Рисуется закрашенный столбец (что можно исполь-
зовать, например, в гистограммах). При этом используется образец
и цвет закраски, заданные с помощью процедур SetFillStyle и
SetFillPattern. Чтобы нарисовать оконтуренный столбец, вызовите
с нулевой глубиной Bar3D.

Ограничения: Должен использоваться графический режим.

См. также: Bar3D, GraphResult, SetFillStyle, SetFillPattern.

Пример:

uses Graph
var
Gd, Gm: Integer;
I, Width: Integer;
begin
Gd := Detect
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
Width := 10;
for I := 1 to 5 do
Bar(I * Width, I * 10, Succ(I) * Width, 200);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 115 -


Процедура Bar3D модуль Graph
-----------------------------------------------------------------

Назначение: Используя текущий тип и цвет закраски, рисует
трехмерный параллелепипед (столбец).

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure Ваr3D(х1, у1, х2, у2: Integer; L: Word;
S: Bооlеаn);

Примечания: Рисуется закрашенный трехмерный параллелепипед.
При этом используется тип и цвет закраски, заданные с помощью
процедур SetFillStile и SetFillPattern. Трехмерный контур парал-
лелепипеда вычерчивается тем цветом и типом линии, которые уста-
новлены процедурами SetLineStyle и SetColor. Параметр L представ-
ляет собой число элементов изображения, задающих глубину трехмер-
ного контура. Если переменная, указанная в качестве параметра S,
принимает истинное значение (Truе), то для параллелепипеда рису-
ется трехмерная вершина, в противном случае вершина не рисуется
(что позволяет рисовать несколько параллелепипедов, расположенных
один на другом).

Типичный параметр глубины можно вычислить, взяв за основу
25% ширины параллелепипеда:

Bar3D(x1, y1, x2, y2, (x2 - x1 + 1) div 4, TopOn);

Ограничения: Должен использоваться графический режим.

См. также: Bar, GraphResult, SetFillStyle, SetFillPattern,
SetLineStyle.


B.Pascal 7 & Objects/PG - 116 -

Пример:

uses Graph
var
Gd, Gm: Integer;
I, Width: Integer;
begin
Gd := Detect
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
y0 := 10;
y1 := 60;
y2 := 110;
x1 := 10;
x2 := 50;
Bar3D(x1, y0, x2, y1, 10, TopOn);
Bar3D(x1, y1, x2, y2, 10, TopOff);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 117 -


Процедура BlockRead модуль System
-----------------------------------------------------------------

Назначение: Считывает одну или более записей в переменную.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure BlockRеаd(var f: File; var Buff; Count:
Word [; Result: Word ])

Примечания: Параметр f представляет собой файловую перемен-
ную, Buff (буфер) - любая переменная, Count (счетчик) - выражение
длиной в слово и Result (результат) - это также переменная длиной
в слово.

Данная процедура считывает из файла File записи, количество
которых не превосходит числа, указанного в переменной Count, на-
чиная с первого байта, занятого переменной Buff. Действительное
число полных считанных записей (меньшее или равное значению пере-
менной Count) возвращается в необязательном параметре Result. Ес-
ли этот параметр не задан, то в том случае, когда число прочитан-
ных записей не будет совпадать со значением переменной Count,
произойдет ошибка ввода-вывода.

Весь размер переданного блока не превышает числа байт, опре-
деляемых произведением значения переменной Count и длины записи,
указываемой при открытии файла (по умолчанию 128). Если это про-
изведение превышает 65535 (64К байта), то возникает ошибка.

Параметр Result является необязательным. Он работает следую-
щим образом. Если был передан весь блок, то при возврате управле-
ния в параметре Result будет содержаться то же значение, что и в
переменной Count. В противном случае значение параметра Result
будет меньше: до того, как успела завершиться передача, был обна-
ружен символ конца файла. В этом случае, если размер записи файла
превышает единицу, то в параметре Result возвращается число пол-
ных прочитанных записей. Таким образом, возможная неполная пос-
ледняя запись в параметре Result не учитывается.

В результате выполнения процедуры BlockRеаd текущая позиция
в файле продвигается на число записей, заданных переменной
Result.

При использовании директивы компилятора {$I-} функция
IОRеsult будет возвращать 0, если операция завершилась успешно и
ненулевой код ошибки в противном случае.

Ограничения: Файл должен быть открыт.

См. также: BlockWritе.


B.Pascal 7 & Objects/PG - 118 -

Пример:

{ под Windows используется WinCrt }
program CopyFile;
{ Простая программа быстрого копирования файлов без провер-
ки на возникновение ошибок }
var
FromF, ToF, : file;
NumRead, NumWritten : word;
buf : array[1..2048] of char;
begin
Assign(FromF, ParamSrt(1)); { открыть входной файл }
Reset(FromF); { размер записи - 1 }
Assign(ToF, ParamStr(2)); { открыть выходной файл }
Rewrite(ToF, 1); { размер записи = 1 }
Writeln('Копирование ',FileSize(FromF),' байт...');
repeat
BlockRead(FromF, buf, SizeOf(buf), NumberRead);
BlockWrite(ToF, buf, NumberRead, NumWritten);
until (NumRead = 0) or (NumWitten <> NumRead);
Close(FromF);
Close(ToF);
end.



B.Pascal 7 & Objects/PG - 119 -


Процедура BlockWrite модуль System
-----------------------------------------------------------------

Назначение: Записывает одну или более записей из переменной.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure BlockWritе(var f: File; var Buff; Count:
Word [; Result: Word ]);

Примечания: Параметр f представляет собой нетипизированную
файловую переменную, Buff (буфер) - любая переменная, Count
(счетчик) - выражение длиной в слово и Result (результат) - это
также переменная длиной в слово (т.е. имеет тип Word).

Данная процедура записывает записи, количество которых не
превосходит числа, указанного в переменной Count, начиная с пер-
вого байта, занятого переменной Buff. Действительное число полных
записанных записей (меньшее или равное значению переменной Count)
возвращается в необязательном параметре Result. Если этот пара-
метр не задан, то в том случае, когда число записанных записей не
будет совпадать со значением переменной Count, произойдет ошибка
ввода-вывода.

Весь размер переданного блока не превышает числа байт, опре-
деляемых произведением значения переменной Count и длины записи,
указываемой при открытии файла (по умолчанию 128). Если это про-
изведение превышает 65535 (64К байта), то возникает ошибка.

Параметр Result является не обязательным. Он работает следу-
ющим образом. Если был передан весь блок, то при возврате управ-
ления в параметре Result будет содержаться то же значение, что и
в переменной Count. В противном случае значение параметра Result
будет меньше: до того, как успела завершиться передача, диск пе-
реполнился. В этом случае, если размер записи файла превышает
единицу, то в параметре Result возвращается число полных записан-
ных записей. Таким образом, возможная неполная остающаяся послед-
няя запись не учитывается в параметре Result.


B.Pascal 7 & Objects/PG - 120 -

В результате выполнения процедуры BlockWritе текущая позиция
в файле продвигается на число записей, заданных переменной
Result.

При использовании директивы компилятора {$I-} IОRеsult будет
возвращать 0, если операция завершилась успешно и ненулевой код
ошибки в противном случае.

Ограничения: Файл должен быть открыт.

См. также: BlockRead.

Пример: См. пример для процедуры BlockRеаd.



B.Pascal 7 & Objects/PG - 121 -


Процедура Break модуль System
-----------------------------------------------------------------

Назначение: Завершает оператор for, while или repeat.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure Break;

Примечания: Процедура Break выполняет выход из внутреннего
оператора for, while или repeat. Break аналогична оператору goto
с указанием метки в конце внутреннего оператора цикла. Если Break
не содержится внутри цикла for, while или repeat, компилятор со-
общает об ошибке.

См. также: Continue, Exit, Halt.

Пример:

{ под Windows используется WinCrt }
var S: String;
begin
while True do
begin
Readln(S);
if S = '' then Break;
Writeln(S);
end;
end.



B.Pascal 7 & Objects/PG - 122 -


Функция ChangeSelector модуль WinAPI
-----------------------------------------------------------------

Назначение: Копирует и конвертирует селектор.

Целевая платформа: Защищенный режим, Windows.

Описание: function ChangeSelector(SourceSel, DestSel: Word):
Word;

Примечания: Функция ChangeSelector генерирует селектор кода,
соответствующий данному селектору данных, или селектор данных,
соответствующий данному селектору кода. Эта функция изменяет
только атрибут селектора, а не его значение.

Ограничения: Администратор Windows и администратор Borland
этапа выполнения защищенного режима DOS не обновляет выделенный
селектор в случае его последующей модификации, поэтому прикладная
программа должна использовать выделенный селектор непосредственно
после его возвращения данной функцией и перед тем, как может про-
изойти перемещение памяти. В противном случае исходный селектор
следует сделать фиксированным и невыгружаемым.

См. также: AllocSelector.



B.Pascal 7 & Objects/PG - 123 -


Процедура ChDir модуль System
-----------------------------------------------------------------

Назначение: Выполняет смену текущего каталога.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure ChDir(s: String);

Примечания: Параметр s представляет собой выражение строко-
вого типа. Текущий каталог изменяется на тот, который задается с
помощью маршрута, указанного в параметре s. Если в параметре s
задается буквенная метка дисковода, то текущий дисковод также из-
меняется.

При использовании директивы компилятора {$I-} функция
IОRеsult будет возвращать 0, если операция завершилась успешно и
ненулевой код ошибки в противном случае.

См. также: GetDir, RmDir, MkDir.

Пример:

{ под Windows используется WinCrt }
begin
{$I-}
{ Получить из командной строки имя каталога }
ChDir(ParamStr(1));
if IOResult <> 0 then
Writeln('Каталог не найден');
end.



B.Pascal 7 & Objects/PG - 124 -


Функция Chr модуль System
-----------------------------------------------------------------

Назначение: Возвращает символ, соответствующий указанному
значению кода ASCII (порядковому номеру).

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function Chr(x: Byte): Char;

Примечания: Параметр x - это выражение целого типа. Резуль-
татом является символ с порядковым значением (значением кода
ASСII) x.

См. также: Оrd.

Пример:

{ под Windows используйте WinCrt }
var I: Integer;
begin
for I := 32 to 255 do Write(Chr(I));
end.



B.Pascal 7 & Objects/PG - 125 -


Процедура Circle модуль Graph
-----------------------------------------------------------------

Назначение: Рисует окружность. Точка (Х,Y) считается центром
окружности.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure Circlе(Х, Y: Integer; R: Word);

Примечания: Окружность рисуется текущим цветом. В каждом
графическом драйвере содержится коэффициент относительного удли-
нения, который используется в процедурах Circlе, Arс и PiеSliсе.
Параметр R задает радиус.

Ограничения: Должен использоваться графический режим.

См. также: Arc, Ellipse, GetArcCoords, GetAspectRatio,
PieSlice.

Пример:

uses Graph:
var
Dg, Gm: Integer;
Radius: Integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
for r := 1 to 5 do
Circle(100, 100, Radius*10);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 126 -


Процедура ClearDevice модуль Graph
-----------------------------------------------------------------

Назначение: Сбрасывает состояние текущего графического экра-
на и подготавливает его для вывода данных.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure ClearDevice;

Примечания: Данная процедура очищает устройство и сбрасывает
все графические параметры, устанавливая для них те значения, ко-
торые предусмотрены по умолчанию (текущий указатель, палитру,
цвет, область вывода). Процедура перемещает текущий указатель в
точку с координатами (0,0).

Ограничения: Должен использоваться графический режим.

См. также: ClearViewPort, CloseGraph, InitGraph,
RestoreCrtMode, SetGraphMode.

Пример:

uses Graph:
var
Dg, Gm: Integer;
Radius: Integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
Randomize;
repeat
LineTo(Random(200), Random(200));
until KeyPressed;
ClearDevice;
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 127 -


Процедура ClearViewPort модуль Graph
-----------------------------------------------------------------

Назначение: Очищает текущую область просмотра (окно).

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure ClearViewPort;

Примечания: Очищается текущая область просмотра. При этом
используется цвет, сохраненный в Раlettе(0), вызывается процедура
Bar и текущий указатель перемещается в точку с координатами
(0,0).

Ограничения: Должен использоваться графический режим.

См. также: SetViewPort, GetViewSettings.

Пример:

uses Graph:
var
Dg, Gm: Integer;
Radius: Integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
begin
Rectengle(19, 19, GetMaxX - 19, GetMaxY - 19);
SetrViewPort(20, 20, GetMaxX - 10, GetMaxY - 20, ClipOn);
SetColor(White);
OutText('Для очистки области просмотра нажмите );
Readln;
ClearViewPort;
OutTextXY(0,0, ' to quit:');
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 128 -


Процедура Close модуль System
-----------------------------------------------------------------

Назначение: Закрывает открытый файл.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure Close(var f);

Примечания: Параметр f представляет собой файловую перемен-
ную любого типа файла, который был предварительно открыт с по-
мощью процедур Rеset, Rеwrite или Аppеnd. Для внешнего файла,
связанного с переменной f полностью выполняется его обновление, и
затем он закрывается, после чего описатель файла DOS освобождает-
ся для последующего использования.

При использовании директивы компилятора {$I-} IОRеsult будет
возвращать 0, если операция завершилась успешно и ненулевой код
ошибки в противном случае.

См. также: Append, Assign, Reset, Rewrite.

Пример:

{ под Windows используйте модуль WinCrt }
var f: file;
begin
Assign(f,'\AUTOEXEC.BAT'); { открыть файл }
Reset(f,1);
Writeln('Размер файла = ',FileSize);
Close(f); { закрыть файл }
end.



B.Pascal 7 & Objects/PG - 129 -


Процедура CloseGraph модуль Graph
-----------------------------------------------------------------

Назначение: Останавливает работу графической системы.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure CloseGraph;

Примечания: Данная процедура восстанавливает исходный режим
экрана (который был установлен до инициализации графики) и осво-
бождает в динамически распределяемой области память, используемую
графическим драйвером.

Ограничения: Должен использоваться графический режим.

См. также: CloseGraph, DetectGraph, InitGraph,
RestoreCrtMode, SetGraphMode.

Пример:

uses Graph:
var
Dg, Gm: Integer;
Radius: Integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
Line(0,0, GetMaxX, GetMaxY);
Readln;
CloseGraph; { завершить графику }
end.



B.Pascal 7 & Objects/PG - 130 -


Процедура CrlEol модуль Crt
-----------------------------------------------------------------

Назначение: Стирает все символы, начиная от позиции курсора,
до конца строки. Курсор при этом не перемещается.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure ClrEol;

Примечания: Все позиции символов заполняются пробелами. При
этом используется текущее определение текстовых атрибутов. Таким
образом, если в TextВаckground не задан черный цвет, то в позици-
ях, начиная от курсора и до правой границы, экран приобретает фо-
новый цвет.

Эта процедура зависит от используемого окна. Например:

Window(1,1,60,20);
ClrEol;

установит для текущей позиции курсора вместо значений (1,1) зна-
чения (60,1) (то есть правая граница активного окна).

См. также: ClrScr, Window.

Процедура CrlEol модуль WinCrt
-----------------------------------------------------------------

Назначение: Стирает все символы, начиная от позиции курсора,
до конца строки. Курсор при этом не перемещается.

Целевая платформа: Windows.

Описание: procedure ClrEol;

См. также: ClrScr.



B.Pascal 7 & Objects/PG - 131 -


Процедура ClrScr модуль Crt
-----------------------------------------------------------------

Назначение: Очищает экран и помещает курсор в верхний левый
угол экрана.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure ClrScr;

Примечания: Все позиции символов заполняются пробелами. При
этом используется текущее определение текстовых атрибутов. Таким
образом, если для TextВасkGround не задан черный цвет, то для
всего экрана устанавливается фоновый цвет. Это относится также к
позициям символов, очищенных с помощью процедур ClrEоl, InsLine и
DelLine, а также к пустым строкам, образующимся при пролистывании
экрана.

Эта процедура зависит от используемого окна. Например:

Window(1,1,60,20);
ClrScr;

приведут к очистке прямоугольной области на экране размером 60х20
с началом в точке (1,1).

См. также: ClrEol, Window.

Пример:

uses Crt;
begin
TextBackGround(LightGray); { для всего экрана устанавли-
вается светло-серый фоновый
цвет }
ClrScr;
end.



B.Pascal 7 & Objects/PG - 132 -


Процедура ClrScr модуль WinCrt
-----------------------------------------------------------------

Назначение: Очищает экран и помещает курсор в верхний левый
угол экрана.

Целевая платформа: Windows.

Описание: procedure ClrScr;

Примечания: Все позиции символов заполняются пробелами. При
этом используется текущее определение текстовых атрибутов. Таким
образом, если для TextBасkGround не задан черный цвет, то для
всего экрана устанавливается фоновый цвет. Это относится также к
позициям символов, очищенных с помощью процедур ClrEоl, InsLine и
DelLine, а также к пустым строкам, образующимся при пролистывании
экрана.

Эта процедура зависит от используемого окна. Например:

Window(1,1,60,20);
ClrScr;

приведут к очистке прямоугольной области на экране размером 60х20
с началом в точке (1,1).

См. также: ClrEol, Window.



B.Pascal 7 & Objects/PG - 133 -


Функция Concat модуль System
-----------------------------------------------------------------

Назначение: Выполняет конкатенацию последовательности строк.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function Concat(s1, [s2, ..., sn]: String):
String;

Примечания: Каждый параметр является выражением строкового
типа. Результат представляет собой конкатенацию (объединение)
всех строковых параметров. Если длина результирующей строки пре-
вышает 255 символов, то она усекается до 255 символов. Использо-
вание операции + дает тот же результат, что и вызов функции
Concat:

S := 'ABC' + 'DEF';

Пример:

var
s : string;
begin
s := Concat('ABC','DEF'); { 'ABCDEF' }
end.


B.Pascal 7 & Objects/PG - 134 -

Процедура Continue модуль System
-----------------------------------------------------------------

Назначение: Продолжает выполнение оператора for, while или
repeat.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure Continue;

Примечания: Continue приводит к выполнению следующей итера-
ции самого внутреннего оператора for, while или repeat. Если вы-
зов Continue содержится вне указанных операторов цикла, то компи-
лятор выведет сообщение об ошибке.

См. также:; Break, Exit, Halt.

Пример:

{ под Windows используйте модуль WinCrt }
var
I: Integer;
Name: string[79];
F: file;
begin
for I := 1 to ParamCount do
begin
Name := ParamStr(I);
Assign(F, Name);
{$I-}
Reset(F, 1);
{$I+}
if IOResult <> 0 then
begin
Writeln('Файл не найден: ', Name);
Continue;
end;
Writeln(Name,': ', FileSize(F), ' байт');
Close(F);
end;
end.



B.Pascal 7 & Objects/PG - 135 -


Функция Copy модуль System
-----------------------------------------------------------------

Назначение: Возвращает для строки подстроку.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure Cоpy(s: String; Indx: Integer; Count:
Integer);

Примечания: Параметр s - выражение строкового типа. Парамет-
ры Indx и Count являются выражениями целого типа. Функция Cоpy
возвращает строку, число символов которой соответствует параметру
Count и которая начинается с символа строки s, номер которого за-
дан параметром Indx. Если значение параметра Indx превышает длину
строки, то возвращается пустая строка. Если параметр Count задает
больше символов, чем остается в строке, начиная с символа Indx,
то возвращается только остаток строки.

См. также: Concat, Delete, Insert, Length, Pos.

Пример:

var
s : string;
begin
s := 'ABCDEF';
s := Copy(s,2,3) { 'BCD' }
end.



B.Pascal 7 & Objects/PG - 136 -


Функция Cos модуль System
-----------------------------------------------------------------

Назначение: Возвращает косинус аргумента.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function Cos(x: Real);

Примечания: Параметр x является выражением вещественного ти-
па. Результатом будет косинус x. Предполагается, что это значение
задает угол в радианах.

См. также: ArcTan, Sin.

Пример:

var
r : real;
begin
r := Cos(Pi);
end.

Процедура CreateDir модуль WinDos
-----------------------------------------------------------------

Назначение: Создает новый подкаталог.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure CreateDir(Dir: PChar);

Примечания: Создаваемый подкаталог задается параметром Dir.
Ошибки сообщаются в DosError. Подпрограмма MkDir выполняет функ-
цию, аналогичную CreateDir, но воспринимает в качестве аргумента
строку Паскаля, а не строку с завершающим нулем.

См. также: GetCurDir, SetCurDir, RemoveDir.



B.Pascal 7 & Objects/PG - 137 -


Функция CSeg модуль System
-----------------------------------------------------------------

Назначение: Возвращает текущее значение регистра CS.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function CSeg: Word;

Примечания: Результат длиной в слово представляет собой ад-
рес сегмента для той части программы, из которой была вызвана
функция CSeg.

См. также: DSeg, SSeg.

Процедура CursorTo модуль WinCrt
-----------------------------------------------------------------

Назначение: Перемещает курсор в заданные координаты вирту-
ального экрана.

Целевая платформа: Windows.

Описание: procedure CursorTo(X, Y: Integer);

Примечания: Верхний левый угол соответствует координатам
(0,0). Позиционирует курсор в точку (X,Y).



B.Pascal 7 & Objects/PG - 138 -


Процедура Dec модуль System
-----------------------------------------------------------------

Назначение: Уменьшает значение переменной.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure Dec(var x[; n: Longint]);

Примечания: Параметр x представляет собой переменную пере-
числимого типа, а n - целочисленное выражение. Значение x умень-
шается на 1 (или на n в случае явного задания n). То есть Dес(x)
соответствует x := x-1, а Dес(x,n) соответствует x := x-n. Функ-
ция Dес порождает оптимизированный код и особенно полезна в боль-
ших циклах.

См. также: Inc, Pred.

Пример:

var
IntVar : integer;
LongIntVar : longint;
begin
Dec(IntVar); { IntVar := IntVar - 1 }
Dec(LongIntVar(Var, 5); { LongIntVar := LongIntVar - 5 }
end.



B.Pascal 7 & Objects/PG - 139 -


Процедура Delay модуль Crt
-----------------------------------------------------------------

Назначение: Выполняет задержку на заданное число миллисе-
кунд.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure Delay(Msec : word);

Примечания: Параметр Msec задает число миллисекунд интервала
ожидания.

Данная процедура является приблизительной, поэтому период
задержки не будет точно равняться заданному числу миллисекунд.

Процедура Delete модуль System
-----------------------------------------------------------------

Назначение: Удаляет из строки подстроку.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: Delete(var s: String; Indx: Integer; Count:
Integer);

Примечания: Параметр s представляет собой выражение строко-
вого типа. Параметры Indx и Count являются выражениями целого ти-
па. Функция Delete удаляет символы, количество которых соответс-
твует параметру Count, начиная с символа строки s, номер которого
задан параметром Indx. Если значение параметра Indx превышает
длину строки, то символы не удаляются. Если параметр Count задает
больше символов, чем остается в строке, начиная с символа Indx,
то удаляется остаток строки.

См. также: Insert, Copy, Concat, Pos.



B.Pascal 7 & Objects/PG - 140 -


Процедура DelLine модуль Crt
-----------------------------------------------------------------

Назначение: Удаляет строку, на которой находится курсор.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure DelLine;

Примечания: Удаляется строка, в которой расположен курсор.
При этом все строки, расположенные ниже данной строки, перемеща-
ются на одну строку вверх (для этого используется программа лис-
тания экрана базовой системы ввода-вывода). Внизу экрана добавля-
ется новая строка.

Все позиции символов заполняются пробелами. При этом исполь-
зуется текущее определение текстовых атрибутов. Таким образом,
если для TextBасkGround не задан черный цвет, то для всего экрана
устанавливается фоновый цвет.

Эта процедура зависит от текущего окна. Например:

Window(10,10,15,20);
DelLine;

DelLine приводит к удалению первой строки окна, которая яв-
ляется десятой строкой экрана.

Прочее: См. также процедуры InsLine, Window.



B.Pascal 7 & Objects/PG - 141 -


Процедура DetectGraph модуль Graph
-----------------------------------------------------------------

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

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure DetectGraph(var Driver, Mode: Integer);

Примечания: Возвращает значения выбранного режима Mode и
драйвера Driver, которые можно передать в качестве параметров
процедуре InitGraph для загрузки соответствующего драйвера. Если
графическая аппаратура не найдена, то параметры Driver и Mode бу-
дут содержать значения -2.

Если не указываются другие действия, процедура InitGraph вы-
зывает процедуру DetectGraph, находит и загружает соответствующий
драйвер и инициализирует графическую систему. Единственной причи-
ной непосредственного вызова процедуры DetectGraph является заме-
на выбираемого ей драйвера. В приведенном ниже примере идентифи-
цируется система с объемом памяти 64 или 256К и графическим
адаптером EGA, но загружается драйвер СGA. Заметим, что когда вы
передаете процедуре InitGraph параметр GraphDriver (задающий
драйвер), отличающийся от Detect, вы должны также передать для
требуемого драйвера в параметре GraphMode допустимый графический
режим.

Ограничения: Процедуру DetectGraph (или Detect c InitGraph)
не следует использовать для IBM 8514 (если вы не хотите эмулиро-
вать режим VGA).

Прочее: См. также процедуры InitGraph, GraphResult.

Пример:

uses Graph:
var
GraphDriver, GraphMode: Integer;
begin
DetectGraph(GraphDriver, GraphMode);
if (GraphDriver = EGA) or
(GraphDriver = EGA64) then
begin
GraphDriver := CGA;
GraphMode := CGAHi;
end;
InitGraph(GraphDriver, GraphMode, ''),
if GraphResult <> rgOk then
Halt(1);
Line(0, 0, GetMaxX, GetMaxY);

B.Pascal 7 & Objects/PG - 142 -

Readln;
CloseGraph;
end;

Функция DiskFree модуль Dos
-----------------------------------------------------------------

Назначение: Возвращает число свободных байт на заданном дис-
ке.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function DiskFree(Disk : byte): Longint;

Примечания: Значение параметра Disk, равное 0, задает опре-
деленный по умолчанию диск; значение 1 указывает на диск A, 2 -
на диск В и т.д. Если номер диска недействителен, то данная про-
цедура возвращает значение -1.

См. также: DiskSize, GetDir.

Пример:

{ под Windows используйте модули WinDos и WinCrt }
uses Dos;
begin
Writeln('Свободно ',DiskFree(0), div 1024,' килобайт');
end.



B.Pascal 7 & Objects/PG - 143 -


Функция DiskSize модуль Dos
-----------------------------------------------------------------

Назначение: Возвращает число свободных байт на заданном дис-
ке.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function DiskSizе(Disk : Byte): Longint;

Примечания: Значение параметра Disk, равное 0, задает опре-
деленный по умолчанию диск, значение 1 указывает на диск A, 2 -
на диск В и т.д. Если номер диска недействителен, то данная про-
цедура возвращает значение -1.

См. также: DiskFree, GetDir.

Пример:

{ под Windows используйте модули WinDos и WinCrt }
uses Dos;
begin
Writeln(DiskSize(0) div 1024,' килобайт свободно');
end.



B.Pascal 7 & Objects/PG - 144 -


Процедура Dispose модуль System
-----------------------------------------------------------------

Назначение: Уничтожает динамическую переменную.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure Dispose(var p: Pointer [, Destructor]);

Примечания: Параметр p является переменной-указателем и мо-
жет иметь тип, соответствующий любому типу указателя. Для этого
параметра должно быть предварительно выполнено присваивание с по-
мощью процедуры New или ему должно быть присвоено значащее значе-
ние с помощью оператора присваивания.

Данная процедура уничтожает переменную, на которую указывает
p и возвращает занимаемую ей память в динамически распределяемую
область памяти. Значение p становится неопределенным, и последую-
щие ссылки вида p^ являются ошибкой.

Ограничения: Если p не указывает на область в динамической
памяти, то происходит ошибка этапа выполнения.

Полную информацию по данной теме вы можете найти в разделе
"Администратор динамически распределяемой области памяти" Главы
21 "Руководства по языку".

См. также: FreeMem, GetMem, New.

Пример:

type
Str18 = sting[18];
var
p : ^Str18;
begin
New(p);
p^ := 'теперь вы можете это видеть...';
Dispose(p); { а теперь нет... }
end.



B.Pascal 7 & Objects/PG - 145 -


Процедура DoneWithCrt модуль WinCrt
-----------------------------------------------------------------

Назначение: Уничтожает окно CRT (если оно еще существует).

Целевая платформа: Windows.

Описание: procedure DoneWithCrt;

Примечания: Вызов DoneWithCrt непосредственно перед заверше-
нием программы предотвращает переход окна CRT в неактивное состо-
яние; таким образом, пользователю не требуется закрывать это ок-
но.

Функция DosExitCode модуль Dos
-----------------------------------------------------------------

Назначение: Возвращает для подпроцесса код завершения.

Целевая платформа: Реальный режим, защищенный режим.

Описание: function DosExitCode: Word;

Примечания: Младший байт представляет собой код, переданный
процессом при завершении. Значение старшего байта равно 0 при
нормальном завершении, 1 - при завершении по нажатию клавиш
Ctrl+C, 2 - при завершении из-за ошибки устройства и 3 - если
процесс был завершен процедурой Keep.

См. также: Exec. Keep.



B.Pascal 7 & Objects/PG - 146 -


Процедура DOS3Call модуль WinAPI
-----------------------------------------------------------------

Назначение: Дает прерывание по вызову функции DOS - 21H.

Целевая платформа: Защищенный режим, Windows.

Описание: procedure DOS3Call;

Примечания: Вызов данной процедуры соответствует выполнению
инструкции INT21H. Процедура DOS3Call выполняется под Windows
быстрее, чем соответствующее программное прерывание DOS INT 21H.

Ограничения: Поскольку DOS3Call требует передачи параметров
в регистрах ЦП, она может использоваться только в подпрограмма на
языке ассемблера.

Пример: В следующем примере показано, как вызвать DOS3Call
из языка ассемблера.

function FileRead(Handle: Integer; var Buffer; Count: Word):
Word; assembler;
asm
PUSH DS { сохранить DS }
MOV AH,3FH { AH - функция чтения из файла }
MOV BX,Handle { BX - описатель }
MOV CX,Count { CX - счетчик }
LDS DX,Buffer { DS:DX - адрес буфера }
CALL DOS3Call { аналогично INT 21H но выпол-
няется быстрее }
JNC @1 { AX - число считанных байт при
отсутствии переноса }
MOV AX,0FFFH { AX = 0FFFFH означает ошибку }
@1: POP DS { восстановить DS }
end;



B.Pascal 7 & Objects/PG - 147 -


Процедура DosVersion модуль Dos, WinDos
-----------------------------------------------------------------

Назначение: Возвращает номер версии DOS.

Целевая платформа: Защищенный режим, Windows.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure DosVersion: Word;

Примечания: Эта функция возвращает номер версии DOS. Младший
байт результата представляет собой основной номер версии, а стар-
ший байт - вспомогательный. Например, для DOS 3.20 возвращается 3
в старшем байте и 20 в младшем.

Пример:

{ под Windows используйте WinDos и WinCrt }
uses Dos;
begin
Ver := DosVersion;
Writeln(' Это DOS версии ', Lo(Ver), '.', Hi(Ver));
end.

См. также: Hi, Lo.



B.Pascal 7 & Objects/PG - 148 -


Процедура DrawPoly модуль Graph
-----------------------------------------------------------------

Назначение: Используя текущий тип прямой и текущий цвет, ри-
сует контур многоугольника.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure DrawPoly(N : word; var S);

Примечания: Параметр S является нетипизированным параметром,
который содержит координаты каждого пересечения в многоугольнике.
Параметр N задает число координат в S. Координата состоит из двух
слов: значения x и значения y.

Данная процедура использует текущий тип линии и текущий
цвет.

Заметим, что для вычерчивания замкнутой фигуры с n вершинами
вы должны передать при обращении к процедуре DrawPoly n + 1 коор-
динату, где координата вершины с номером n будет равна координате
вершины с номером 1 (см. приведенный ниже пример).

Ограничения: Должен использоваться графический режим.

См. также: FillPoly, GetLineSettings, SetColor,
SetLineStyle, GraphResult.

Пример:

uses Graph;
const Triangle : array[1..4] of PolyPoint =
((x: 10; y: 100),
(x: 100; y: 100),
(x: 150; y: 150),
(x: 50; y: 100));
begin { рисует треугольник }
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
DrawPoly(SizeOf(Triangle)
div SizeOf(PolyPoint), { 4 }
Triangle);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 149 -


Функция Dseg модуль System
-----------------------------------------------------------------

Назначение: Возвращает текущее значение регистра DS.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function DSeg: Word;

Примечания: Результат длиной в слово представляет собой ад-
рес сегмента данных.

См. также: CSeg, SSeg.



B.Pascal 7 & Objects/PG - 150 -


Процедура Ellipse модуль Graph
-----------------------------------------------------------------

Назначение: Рисует эллиптическую дугу от начального угла
SStart до конечного угла SEnd, используя (Х,Y) в качестве точки
центра.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure Ellipsе(Х, Y: Integer; SStart, SEnd:
Word; RadX, RadY: Word);

Примечания: Процедура рисует эллиптическую дугу, используя
(Х,Y), как точку центра, а RadX, RadY - как горизонтальную и вер-
тикальную оси. Дуга эллипса вычерчивается от начального угла (па-
раметр SStart) до конечного угла (параметр SEnd) текущим цветом.

Значение начального угла, равное 0, и конечного угла, равное
359, приведут к вычерчиванию полного эллипса. Углы для процедур
Arc, Ellipse и PieSlice задаются по направлению часовой стрелки.
При этом значение (в градусах) 0 соответствует 3 часам, 90 граду-
сом - 12 часам и т.д. Информацию о последнем вызове процедуры
Ellipse можно получить с помощью процедуры GetArcCoords.

Ограничения: Должен использоваться графический режим.

См. также: Circle, Arc, PieSlice, GetArcCoords,
GetAspectRatio.

Пример:

Uses Graph;
var
Gd, Gm: integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
If GraphResult <> grOk then
Halt(1);
Ellipse(100,100,0,20,30,50);
Ellipse(100,100,90,180,50,30);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 151 -


Функция EnvCount модуль Dos
-----------------------------------------------------------------

Назначение: Возвращает число строк, содержащихся в определе-
нии операционной среды DOS.

Целевая платформа: Защищенный режим, реальный режим.

Описание: function EnvCount: Integer;

Примечания: Функция EnvCount возвращает число строк, содер-
жащихся в описании операционной среды DOS. Каждая такая строка
имеет вид 'ПЕРЕМЕННАЯ = ЗНАЧЕНИЕ'. Эти строки можно просмотреть с
помощью функции EnvStr.

Более полная информация об операционной среде DOS содержится
в руководствах по операционной системе DOS.

См. также: EnvStr, GetEnv.

Пример:

uses Dos;
var
I: integer;
begin
for I := 1 to EnvCount do
WriteLn(EnvStr(I));
end.

Функция EnvStr модуль Dos
-----------------------------------------------------------------

Назначение: Возвращает заданную строку операционной среды.

Целевая платформа: Защищенный режим, реальный режим.

Описание: function EnvStr(Indx : integer): String;

Примечания: Данная функция возвращает заданную строку опера-
ционной среды DOS. Эта строка имеет вид `ПЕРЕМЕННАЯ = ЗНАЧЕНИЕ`.
Индексом первой строки является единица. Если Indx меньше единицы
или больше, чем EnvCount, EnvStr возвращает пустую строку.

Более полная информация об операционной среде DOS содержится
в руководствах по операционной системе.

См. также: EnvCount, GetEnv.



B.Pascal 7 & Objects/PG - 152 -


Функция Eof (текстовые файлы) модуль System
-----------------------------------------------------------------

Назначение: Возвращает состояние "конец файла" (end-of-file)
для текстовых файлов.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Eof[ (var f: Text) ]: Boolean;

Примечания: Параметр f представляет собой файловую перемен-
ную, определяющую текстовый файл. Если этот параметр опущен, то
используется стандартная файловая переменная Input. Если текущая
позиция в файле находится за последним элементом файла или если
файл не содержит никаких элементов, то функция Eоf(f) возвращает
значение Truе. В противном случае она возвращает значение False.

При указании директивы компилятора {$I+} функция IОRеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

См. также: Eoln, SeekEof.

Пример:

{ под Windows используйте WinCrt }
var
f : text; ch : char;
begin { получить имя файла из командной строки }
Assign(f, ParamStr(1));
Reset(f);
while not Eof(f) do
begin
Read(f,ch); { вывести текстовый файл }
Write(ch);
end;
end.



B.Pascal 7 & Objects/PG - 153 -


Функция Eof (типизированные и нетипизированные файлы) мод. System
-----------------------------------------------------------------

Назначение: Для типизированных или нетипизированных файлов
возвращает состояние "конец файла" (end-of-file).

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Eof[ (var f: Text) ]: Boolean;

Примечания: Параметр f представляет собой файловую перемен-
ную. Если текущая позиция в файле находится за последним элемен-
том файла или если файл не содержит никаких элементов, то функция
Еоf(f) возвращает значение Truе. В противном случае она возвраща-
ет значение False.

При указании директивы компилятора {$I+} функция IОRеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.



B.Pascal 7 & Objects/PG - 154 -


Функция Eoln модуль System
-----------------------------------------------------------------

Назначение: Для файлов возвращает состояние "конец строки"
(end-of-line).

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Eoln [ (var f : text) ]: Boolean;

Тип результата: Булевский (boolean).

Примечания: Параметр f представляет собой файловую перемен-
ную, определяющую текстовый файл. Если этот параметр опущен, то
подразумевается использование стандартной файловой переменной
Input. Если текущая позиция в файле находится на метке конца
строки, то функция Eоln(f) возвращает значение Truе. В противном
случае она возвращает значение False.

При проверке состояния "конец строки" для стандартного вво-
да, направление которого изменено не было, следующая программа
ожидает, пока не будет введен символ возврата каретки, а затем
передает управление функции Eoln.

begin
WriteLn(Eoln); { Это приведет к тому, что }
{ программа будет ожидать ввода }
{ с клавиатуры }
end.

При указании директивы компилятора {$I+} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

См. также: SeekEoln, Eof.



B.Pascal 7 & Objects/PG - 155 -


Процедура Erase модуль System
-----------------------------------------------------------------

Назначение: Стирает внешний файл.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure Erase(var f);

Примечания: Параметр f представляет собой файловую перемен-
ную любого файлового типа. Внешний файл, связанный с переменной
f, стирается.

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

Ограничения: Процедура Erase не должна использоваться для
открытого файла.

См. также: Rename.

Пример:

{ под Windows используйте WinCrt }
var
f : file;
ch : char;
begin
{ получить из командной строки имя предназначенного для
удаления файла }
Assign(f, ParamStr(1));
{$I-}
Reset(f);
{$I+}
if IOResult <> 0 then
Write('Файл не найден ' ParamStr(1))
else
begin
Close();
Write('Стереть ', ParamStr(1)),'?');
Readln(ch);
if UpCase(ch) = 'Y' then
Erase(f);
end;
end.



B.Pascal 7 & Objects/PG - 156 -


Процедура Exclude модуль System
-----------------------------------------------------------------

Назначение: Удаляет элемент из множества.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure Exclude(var S: set of T; I: T);

Примечания: S - это переменная множественного типа, а I -
выражение типа, совместимого с базовым типом S. Из множества, за-
данного S, исключается элемент, заданный I. Конструкция:

Exclude(S, I)

соответствует

S := S - [I]

но процедура Exclude генерирует более эффективный код.

См. также: Incude.

Процедура Exec модуль Dos
-----------------------------------------------------------------

Назначение: Выполняет указанную программу, передавая задан-
ную строку параметров (командную строку).

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure Exec(Path, S: String);

Примечания: Имя программы указывается в параметре Path, а
строка параметров содержится в параметре S. Для выполнения внут-
ренней команды DOS запустите файл COММAND.CОМ. Например:

Exec('COMMAND.COM','/C DIR *.PAS');

/C перед командой является запросом на запуск файла CОММAND.
COМ (но не других программ). Возможные коды ошибок можно получить
с помощью функции DosError. Этими кодами могут быть 2, 8, 10 и
11. Код завершения процесса можно получить с помощью функции
DosExitCode.

До начала выполнения программы процедура Ехес не изменяет
распределение памяти. Таким образом, при компиляции программы,
использующей процедуру Ехес, необходимо обеспечить задание макси-
мального размера динамически распределяемой области памяти, иначе
памяти может не хватить (DosError = 8).


B.Pascal 7 & Objects/PG - 157 -

См. также: DosExitCode, SwapVectors, DosError, SaveIntXX.

Пример:

{ 16К выделяется для стека, динамически распределяемая об-
ласть не запрашивается и не резервируется }
{$M $4000,0,0}
uses Dos;
var
ProgramName, CmdLine : string;
begin
Write('Программа, которую нужно выполнить (включая
полное имя маршрута): ');
Readln(ProgramName);
Write('Командная строка, которую нужно передать в ',
'программу ', ProgramName, ':');
Readln(CmdLine);
Writeln('Начало выполнения Exec...');
Exec(ProgramName, CmdLine);
Writeln('...возврат из Exec');
if DosError <> 0 then { ошибка? }
Writeln('Ошибка DOS #', DosError)
else
Writeln('Вызов Exec прошел успешно. Код завершения ',
'порожденного процесса = ', DosExitCode);
end.



B.Pascal 7 & Objects/PG - 158 -


Процедура Exit модуль System
-----------------------------------------------------------------

Назначение: Выполняет немедленный выход из текущего блока.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure Exit;

Примечания: Когда процедура Eхit выполняется в подпрограмме
(процедуре или функции), то происходит возврат управления из
подпрограммы. Когда эта процедура выполняется в операторной части
программы, она вызывает прекращение работы программы. Обращение к
Eхit аналогично оператору перехода на оператор с меткой, адрес
которого находится непосредственно после оператора end.

См. также: Нalt.

Пример:

{ под Windows используйте WinCrt }
uses Crt;
procedure WasteTime;
repeat
if KeyPressed then Exit;
Write('Xx');
until False;
end;
begin
WasteTime;
end.

Переменная ExitCode модуль System
-----------------------------------------------------------------

Назначение: Содержит код выхода прикладной программы.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: var ExitCode: Integer;

Примечания: Процедура выхода может узнать причину заверше-
ния, проверив значение ExitCode. При нормальном завершении
ExitCode равно 0. Если программа завершается через обращение к
Halt, то ExitCode содержит значение, переданное Halt. Если прог-
рамма завершается из-за ошибки этапа выполнения, то ExitCode со-
держит код ошибки. О процедурах выхода рассказывается в Главе 22
("Вопросы управления") "Руководства по языку".

См. также: ErrorAddr, ExitProc.

B.Pascal 7 & Objects/PG - 159 -


Переменная ExitProc модуль System
-----------------------------------------------------------------

Назначение: Реализует список процедур выхода прикладной
программы.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: var ExitProc: Pointer;

Примечания: ExitProc позволяет вам установить процедуры вы-
хода, которые должны выполняться в процессе завершения программы
(нормальном завершении, завершении по вызову Halt или завершении
из-за ошибки этапа выполнения). О процедурах выхода подробнее
рассказывается в Главе 22 ("Вопросы управления") "Руководства по
языку".

См. также: ErrorAddr, ExitCode.

Функция Exp модуль System
-----------------------------------------------------------------

Назначение: Возвращает экспоненциальное значение аргумента.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Exp(x : Real): Real;

Примечания: Параметр x является выражением вещественного ти-
па. Результатом будет экспонента x, то есть значение e возводится
в степень x (e - основание натурального логарифма).

См. также: Ln.



B.Pascal 7 & Objects/PG - 160 -


Процедура FatalExit модуль WinAPI
-----------------------------------------------------------------

Назначение: Используется в целях отладки для сообщения о фа-
тальных ошибках.

Целевая платформа: Защищенный режим, Windows.

Описание: function FatalExit(Code: Integerl);

Примечания: При работе в Windows FatalExit выводит заданный
код ошибки и текущее состояния Windows на отладочном мониторе и
выводит запрос на продолжение. В защищенном режиме DOS FatalExit
выводит заданный код ошибки и завершает прикладную программу.

Ограничения: Прикладная программа должная использовать про-
цедуру FatalExit только для целей отладки.

Функция FExpand модуль Dos
-----------------------------------------------------------------

Назначение: Расширяет имя файла до полного имени файла.

Целевая платформа: Защищенный режим, реальный режим.

Описание: function FExpand(path :PathStr): PathStr;

Примечания: Расширяет имя файла, задаваемого параметром
маршрута Path, до полного имени файла. Полученное в результате
имя преобразуется в прописные буквы и содержит буквенную метку
дисковода, двоеточие, путь доступа относительно корневого катало-
га и имя файла. Внутренние ссылки на каталоги ".." и "." удаляют-
ся.

Тип PathType определен в модуле DOS в виде строки
(string[79]).

Предположим, что текущим диском и каталогом является
C:\SOURCE\PAS. Тогда следующие вызовы процедуры FExpand дадут та-
кие значения:

FExpand('test.pas') = 'C:\SOURCE\PAS\TEST.PAS'
FExpand('../*.TPU') = 'C:\SOURCE\*.TPU'
FExpand('c:\bin\turbo.exe') = 'C:\BIN\TURBO.EXE'

См. также: FindFirst, FindNext, FSplit, строковые типы рабо-
ты с файлами.



B.Pascal 7 & Objects/PG - 161 -


Функция FileExpand модуль WinDos
-----------------------------------------------------------------

Назначение: Расширяет имя файла до полностью уточненного
имени файла.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function FileExpand(Dest, Name: PChar): PChar;

Примечания: Расширяет имя файла, задаваемого параметром
Name, до полного имени файла. Полученное в результате имя преоб-
разуется в буквы верхнего регистра и содержит буквенную метку
дисковода, двоеточие, маршрут относительно корневого каталога и
имя файла. Внутренние ссылки на каталоги ".." и "." удаляются.
Компоненты имени файла и расширения усекаются соответственно до 8
и 3 символов. Результат Dest и Name могут ссылаться на один ад-
рес.

Предположим, что текущим диском и каталогом является
C:\SOURCE\PAS. Тогда следующие вызовы процедуры FileExpand дадут
такие значения:

FileExpand(S,'test.pas') = 'C:\SOURCE\PAS\TEST.PAS'
FileExpand(S,'../*.TPU') = 'C:\SOURCE\*.TPU'
FileExpand(S,'c:\bin\turbo.exe') = 'C:\BIN\TURBO.EXE'

См. также: FindFirst, FindNext, FSplit, строковые типы рабо-
ты с файлами.



B.Pascal 7 & Objects/PG - 162 -


Функция FilePos модуль System
-----------------------------------------------------------------

Назначение: Возвращает текущую позицию в файле.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function FilePos(var f): Longint;

Примечания: Параметр f представляет собой файловую перемен-
ную. Если текущей позицией является начало файла, то функция
FilePos(f) возвращает значение 0. Если текущей позицией в файле
является конец файла, то есть Eоf(f) возвращает значение Truе, то
значение, возвращаемое функцией FilePos(f), совпадает со значени-
ем, возвращаемым функцией FileSizе(f) (то есть с размером файла).

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

Ограничения: Эта функция не может использоваться для тексто-
вого файла. Файл должен быть открыт.

См. также: FileSize, Seek.



B.Pascal 7 & Objects/PG - 163 -


Функция FileSearch модуль WinDos
-----------------------------------------------------------------

Назначение: Ищет файл в списке каталогов.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function FilePos(Dest, Name, List: PChar): PChar;

Примечания: Ищет файл с именем Name в списке каталогов, за-
данным параметром List. Каталоги в List должны разделяться точка-
ми с запятой, аналогично каталогам, заданным в команде DOS PATH.
Поиск начинается всегда с текущего каталога текущего диска. Если
файл не найден, FileSearch записывает в Dest конкатенация маршру-
та каталога и имени файла. В противном случае FileSearch записы-
вает в Dest пустую строку. Возвращаемое значение находится в
Dest. Dest и Name не должны ссылаться на одно и то же.

Максимальная длина результата определяется константой
fsPathName (которая равна 79).

Чтобы искать выполняемые файлы по маршруту DOS, вызовите
GetEnvVar('PATH') и передайте результат FileSearch в качестве па-
раметра List.

Результат FileSearch можно передать FileExpand для преобра-
зования его в полностью уточненное имя файла, то есть имя файла в
верхнем регистре, включающее в себя буквенную метку диска и марш-
рут относительно корневого каталога. Кроме того, вы можете ис-
пользовать для разбиения имени файла на строку диска/каталога,
строку имени файла и строку расширения, вы можете использовать
функцию FileSplit.

См. также: FileExpand, FileSplit, константы длины имени фай-
ла, FSearch.

Пример:

{ под Windows используйте модуль WinCrt }
uses WinDos;
var
S: array[0..fsPathName] of Char;
begin
FileSearch(S, 'BP.EXE', GetEnvVar('PATH'));
if S[0] = #0 then
Writeln('BP.EXE не найден')
else
Writeln('Найден как ',FileExpand(S, S));
end.



B.Pascal 7 & Objects/PG - 164 -


Функция FileSize модуль System
-----------------------------------------------------------------

Назначение: Возвращает текущий размер файла.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function FileSize(var f): Longint;

Примечания: Параметр f представляет собой файловую перемен-
ную. Данная функция возвращает число элементов в f. Если файл
пуст, функция возвращает значение 0.

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

Ограничения: Функция не может использоваться для текстового
файла. Файл должен быть открыт.

См. также: FilePos.

Пример:

{ под Windows используйте модуль WinCrt }
var
f : file of byte;
begin
{ получить имя файла из командной строки }
Assign(f, ParamStr(1));
Reset(f);
Writeln('Размер файла в байтах: ', FileSize(f));
Close(f);
end.



B.Pascal 7 & Objects/PG - 165 -


Функция FileSplit модуль WinDos
-----------------------------------------------------------------

Назначение: Разбивает полное имя файла на три компонента.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function FileSplit(Path, Dir, Name, Ext: PChar):
Word;

Примечания: Разбивает полное имя файла, заданное параметром
Path, на три компонента. Dir будет содержать буквенную метку дис-
ка и маршрут каталога с предшествующей и завершающей обратной ко-
сой чертой, Name - имя файла, а Ext - расширение имени файла с
предшествующей точкой. Если строковый параметр-компонент содер-
жит nil, то соответствующая часть маршрута не записывается. Если
маршрут не содержит данного компонента, возвращаемая строка ком-
понента будет пуста. Максимальные длины строк, возвращаемые в па-
раметрах Dir, Name и Ext, определяются константами fsDirectory,
fsFileName и fsExtension.

Возвращаемое значение является комбинацией битовых масок
fcDirectory, fcFileName и fcExtension, указывающих, сколько ком-
понентов присутствовало в маршруте. Если имя или расширение со-
держит трафаретные символы (* или ?), то в возвращаемом значении
устанавливается флаг fcWildCard. См. в данной главе список конс-
тант fcXXXX и fsXXXX.

См. также: FileExpand,FindFirst, FindNext, FSplit.

Пример:

{ под Windows используйте модуль WinCrt }
var
Path: array[0..fsPathName] of Char;
Dir: array[0..fsDirectory] of Char;
Name: array[0..fsFileName] of Char;
Ext: array[0..fsExtension] of Char;
begin
Write('Имя файла (WORK.PAS: ');
Readln(Path);
FileSplit(Path, Dir, Name, Ext);
if Name[0] = #0 then StrCopy(Name, 'WORK');
if Ext[0] = #0 then StrCopy(Ext, '.PAS');
StrECopy(StrECopy(StrECopy(Path, Dir), Name), Ext);
Writeln('Полученное в результате имя: ', Path);
end.



B.Pascal 7 & Objects/PG - 166 -


Процедура FillChar модуль System
-----------------------------------------------------------------

Назначение: Помещает в заданное число следующих друг за дру-
гом байт указанное значение.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure FillChar(var x; Count: Word; Val);

Примечания: Параметр x является ссылкой на переменную любого
типа, Count представляет собой выражение длиной в слово, Val яв-
ляется выражением перечислимого типа. Процедура записывает значе-
ние, указанное в параметре Val, в то количество следующих друг за
другом байт памяти, начиная с первого байта, занимаемого перемен-
ной х, которое определяется параметром Count. Проверка на допус-
тимость границ не выполняется, поэтому будьте внимательны.

Если это возможно, при использовании процедуры FillChar за-
давайте параметр Count с помощью функции SizeOf. При использова-
нии этой процедуры для строк не забудьте после заполнения устано-
вить длину в байтах.

См. также: Моvе.

Пример:

var
s : string[80];
begin
{ задать строку, состоящую из пробелов }
FillChar(s, SizeOf(s),' '); { установить длину последо-
вательности байт }
s[0] := #80;
end.



B.Pascal 7 & Objects/PG - 167 -


Функция FillEllipse модуль Dos
-----------------------------------------------------------------

Назначение: Рисует эллипс.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure FillEllipse(X, Y: Integer; ХRad, YRad:
Word);

Примечания: Используя точку с координатами (X,Y) в качестве
центра, а XRad и YRad - в качестве горизонтальной и вертикальной
осей, рисует закрашенный эллипс.

Ограничения: Должен использоваться графический режим.

См. также: Arc, Circle, Ellipse, GetArcCoords,
GetAspectRatio, PieSlice.

Пример:

uses
Graph;
const
R = 30;
var
Driver, Mode: integer;
Xasp, Yasp : word;
begin
Driver := Detect; { переводит в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult < 0 then
Halt(1);
{ нарисовать эллипс }
FillEllipse(GetMaxX div 2, GetMaxY div 2, 50, 50);
GetAspectRatio(Xasp, Yasp);
{ "круглый" эллипс }
FillEllipse(R, R, R, R, * LongInt(Xasp) div Yasp);
ReadLn;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 168 -


Процедура FillPoly модуль Graph
-----------------------------------------------------------------

Назначение: Рисует закрашенный многоугольник.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure FillPoly((N : Word; var S);

Примечания: Параметр S является нетипизированным параметром,
который содержит координаты каждого пересечения сторон в многоу-
гольнике (координаты вершин). Параметр N задает число координат в
S. Координата состоит из двух слов: значения x и значения y.

Данная процедура вычисляет все горизонтальные пересечения и
затем заполняет многоугольник, используя текущий тип и цвет зак-
раски, которые задаются процедурами SetFillStyle и
SetFillPattern. При вычерчивании контура многоугольника использу-
ется текущий тип линии и цвет, которые устанавливаются процедурой
SetLineStyle.

Если при закраске многоугольника возникает ошибка, то функ-
ция GraphResult возвращает значение grNoScanMem.

Ограничения: Должен использоваться графический режим.

См. также: DrawPoly, GetFillSettings, GetLineSettings,
SetLineStyle, GraphResult, SetLineStyle.

Пример:

uses Graph;
const
Pentagon : array[1..6] of PointType =
((x: 50; y: 50),
(x: 75; y: 75),
(x: 62; y: 100),
(x: 48; y: 100),
(x: 25, y: 75),
(x: 50, y: 50));
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
DrawPoly(SizeOf(Pentagon)
div SizeOf(PointType), Pentagon);
FillPoly(SizeOf(Pentagon)
div SizeOf(PointType), Pentagon);
Readln;
CloseGraph;
end.

B.Pascal 7 & Objects/PG - 169 -


Процедура FindFirst модуль Dos, WinDos
-----------------------------------------------------------------

Назначение: Производит поиск в заданном (или текущем) ката-
логе первой записи, соответствующей заданному имени файла и набо-
ру атрибутов файла.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание:

procedure FindFirst(Path: String; Attr: Bytе; var S:
SearchRec); { DOS }

procedure FindFirst(Path: String; Attr: Bytе; var S:
TSearchRec); { Windows }

Примечания: Параметр Path определяет каталог, например
"*.*". Параметр Attr определяет включение в список рассматривае-
мых специальные файлы (наряду со всеми обычными файлами). Список
атрибутов файла, как они описаны в модуле Dos и в WinDow, вы мо-
жете найти в данной главе.

Результат поиска по каталогу возвращается в заданной записи
типа SearchRec, который описывается в модуле Dos, и TSearchRec,
который описывается в модуле WinDos.

Коды ошибки можно получить с помощью DosError. Возможными
значениями кодов являются 3 (маршрут не найден) и 18 (больше фай-
лов нет).

См. также: FindNext, DosError, FExpand, константы атрибута
файла, FileExpand, SearchRec, TSearchRec.

Пример:

{ под Windows используйте WinCrt }
uses Dos;
var
{ под Windows используйте TSearchRec }
DirInfo : SearchRec;
begin
{ под Windows используйте fArchive }
FindFirst('*.PAS', Archive, DirInfo); { то же, что и
DIR *.PAS }
while DosError = 0 do
begin
Writeln(DirInfo.Name);
FindNext(DirInfo);
end;
end.

B.Pascal 7 & Objects/PG - 170 -


Процедура FindNext модуль Dos, WinDos
-----------------------------------------------------------------

Назначение: Возвращает следующую запись, совпадающую с име-
нем и атрибутами файла, указанными при предыдущем обращении к
процедуре FindFirst.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание:

procedure FindNext(var s: SearchRec); { DOS }

procedure FindNext(var s: TSearchRec); { Windows }

Примечания: Параметр s должен быть таким же, как при обраще-
нии к FindFirst (тип SearchRec описывается в модуле Dos, а
TSearchRec - в WinDos). С помощью DosError можно получить код
ошибки. Единственно возможным кодом является код 18, указывающий
на отсутствие файлов.

См. также: FindFirst, DosError, FExpand, константы атрибута
файла, FileExpand, SearchRec, TSearchRec.

Пример: См. пример для процедуры FindFirst.



B.Pascal 7 & Objects/PG - 171 -


Функция FindResource модуль WinAPI
-----------------------------------------------------------------

Назначение: Ищет ресурс в файле ресурса.

Целевая платформа: Защищенный режим, Windows.

Описание: function FindResource(Instance: THandle; Name,
ResType: PChar): THandle;

Примечания: Находит в файле ресурса, заданном параметром
Instance, ресурс, заданный параметрами имени Name и типа ресурса
ResType, и возвращает описатель информации о ресурсе. Если ресурс
не найден, то возвращается нулевое значение. Параметр Instance -
это описатель экземпляра модуля, получаемый обычно из переменной
HInstance модуля System или создаваемый LoadLibrary. Параметры
Name и ResType указывают либо на строку с завершающим нулем, либо
задают порядковое значение. В последнем случае старшее слово Name
или ResType равно 0, а младшее содержит порядковое значение.

См. также: AccessResource, LoadResource, SizeofResource.



B.Pascal 7 & Objects/PG - 172 -


Процедура FloodFill модуль Graph
-----------------------------------------------------------------

Назначение: Закрашивает ограниченную область, используя те-
кущий заполнитель.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure FloodFill(x, y: Integer; S: Word);

Примечания: Эта процедура используется для заполнения замк-
нутой области (на экране). Точка (x,y) является произвольной
внутренней точкой заполняемой области. Для заполнения области,
ограниченной цветом, которую определяет параметр S, используется
текущий образец закраски. Если точка (x,y) находится внутри замк-
нутой области, то заполняется внутренняя область. Если эта точка
находится вне замкнутой области, то заполняется ее внешняя часть
(поле экрана, не входящее в область).

Если при заполнении области происходит ошибка, то функция
GraphResult возвращает значение grNoFloodMem.

Заметим, что процедура FloodFill останавливается после того,
как выведено две пустых линии. Это может произойти в том случае,
когда заполнитель и маленький прямоугольник сливаются. В следую-
щей программе прямоугольник полностью не закрашивается:

program StopFill;
uses Graph;
var
Driver, Mode: integer;
begin
Driver := Detect;
InitGraph(Driver, Mode, 'c:\bgi');
if GraphResult <> grOk then
Halt(1);
SetFillStyle(LtSlashFill, GetMaxColor);
Rectangle(0, 0, 8, 20);
FloodFill(1, 1, GetMaxColor);
ReadLn;
CloseGraph;
end.

В этом случае прямоугольник будет полностью закрашен, если
использовать более "густой" заполнитель типа SlashFill.

Ограничения: Используя, где это возможно, вместо FloodFill
FillPoly, вы можете обеспечить совместимость кода с будущими вер-
сиями. Должен использоваться графический режим. При применении
графического драйвера IBM 8514 (IBM8514.BGI) данная процедура не-
доступна.


B.Pascal 7 & Objects/PG - 173 -

См. также: SetFillPattern, FillPoly, SetFillStyle,
GraphResult.

Пример:

uses Graph;
var
Driver, Mode: integer;
begin
Driver := Detect;
InitGraph(Driver, Mode, '');
if GraphResult <> grOk then
Halt(1);
SetColor(Red);
FloodFill(50,50,GetMaxColor);
Readln;
CloseGraph:
end.



B.Pascal 7 & Objects/PG - 174 -


Процедура Flush модуль System
-----------------------------------------------------------------

Назначение: Выводит содержимое буфера открытого для вывода
текстового файла.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure Flush(var f: Text);

Примечания: Параметр f является файловой переменной тексто-
вого типа.

Когда текстовый файл открывается для вывода с помощью проце-
дур Rewrite или Appеnd, обращение к процедуре Flush позволяет
очистить буфер файла. Это обеспечивает то, что все символы, запи-
санные в это время в файл, будут действительно записаны во внеш-
ний файл. Для файлов, открытых для ввода, данная процедура ника-
ких действий не выполняет.

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.



B.Pascal 7 & Objects/PG - 175 -


Функция Frac модуль System
-----------------------------------------------------------------

Назначение: Возвращает дробную часть аргумента.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Frac(x : Real): Real;

Примечания: Параметр х является выражением вещественного ти-
па. Результатом является дробная часть x, то есть Frас(x) = x -
Int(x).

См. также: Int.

Пример:

var
r : real;
begin
f := Frac(123.456); { 0.456 }
end.

Процедура FreeLibrary модуль WinAPI
-----------------------------------------------------------------

Назначение: Освобождает динамически загружаемую библиотеку.

Целевая платформа: Защищенный режим, Windows.

Описание: procedure FreeLibrary(LibModule: THandle);

Примечания: Параметр LibModule должен быть описателем эк-
земпляра модуля, созданного LoadLibrary. FreeLibrary уменьшает на
1 счетчик ссылок для данной библиотеки, и, если значение счетчика
становится равным 0, занятая библиотекой память освобождается.

Ограничения: Динамически компонуемая библиотека (DLL) не
должна освобождать память в своей функции выхода (WEP).

См. также: LoadLibrary.



B.Pascal 7 & Objects/PG - 176 -


Процедура FreeMem модуль System
-----------------------------------------------------------------

Назначение: Уничтожает динамическую переменную данного раз-
мера.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure FrееМем(var P : Pоinter; Size : Word);

Примечания: Параметр P является указателем на переменную
(относящимся к любому типу указателей), для которого было предва-
рительно выполнено присваивание с помощью процедуры GetМем или
которому было присвоено значащее значение с помощью оператора
присваивания. Параметр Size представляет собой выражение длиной в
слово, которое задает размер уничтожаемой динамической переменной
(в байтах). Его значение должно в точности соответствовать числу
байт памяти, отведенных ранее для переменной процедурой GetМем.
Процедура FrееМем уничтожает переменную, на которую указывает P,
и освобождает занятую ей область памяти в динамически распределя-
емой области. Если указатель p не ссылается на область памяти в
динамически распределяемой области, то во время выполнения прог-
раммы возникает ошибка. После обращения к процедуре FrееМем зна-
чение указателя p становится неопределенным, а последующие ссылки
вида p^ будут приводить к ошибке.

См. также: Dispose, GetMem, Release.

B.Pascal 7 & Objects/PG - 177 -


Функция FreeResource модуль WinAPI
-----------------------------------------------------------------

Назначение: Удаляет загруженный ресурс из памяти, освобождая
занимаемую данным ресурсом память.

Целевая платформа: Защищенный режим, Windows.

Описание: function FreeResource(ResData: THandle): Bool;

Примечания: Освобождает занимаемую данным ресурсом память.
Параметр ResData должен представлять собой описатель ресурса,
созданный LoadResource.

FreeResource уменьшает счетчик ссылок для заданного ресурса.
FreeResource не выполняет фактического освобождения ресурса, пока
счетчик ссылок не станет равным нулю (то есть число вызовов
FreeResource не станет равным числу вызовов LoadResource).

Если FreeResource завершается неудачно, и ресурс не освобож-
дается, то возвращаемое значение равно True; если функция завер-
шается успешно, то возвращается значение False.

См. также: LoadResource.



B.Pascal 7 & Objects/PG - 178 -


Функция FreeSelector модуль WinAPI
-----------------------------------------------------------------

Назначение: Освобождает селектор.

Целевая платформа: Защищенный режим, Windows.

Описание: function FreeSelector(Selector: Word): Word;

Примечания: Освобождает селектор, созданный первоначально с
помощью AllocSelector или AllocDStoCSAlias. После вызова
FreeSelector селектор становится недопустимым и больше использо-
ваться не может. В случае успешного выполнения функции возвращае-
мое значение равно 0, в противном случае возвращается значение
заданного селектора.

См. также: AllocDStoCSAlias, AllocSelector.

Функция FSearch модуль Dos
-----------------------------------------------------------------

Назначение: Ищет файл в списке каталогов.

Целевая платформа: Реальный режим, защищенный режим.

Описание: function FSearch(Path: PathStr; L: String):
PathStr;

Примечания: Функция выполняет поиск файла, заданного пара-
метром Path, в списке каталогов, заданных параметром L. Каталоги
в списке должны разделяться точкой с запятой аналогично тому, как
это делается в команде операционной системы DOS PATH. Поиск начи-
нается всегда с текущего каталога на текущем диске. Возвращаемое
значение представляет собой конкатенацию одного из маршрутов ка-
талогов и имени файла или, в том случае, если файл найден не бу-
дет, пустую строку. Тип PathStr описан в модуле Dos (см. выше).

Для нахождения выполняемых файлов с помощью команды DOS PATH
нужно вызвать процедуру GetEnv('PATH') и передать результат функ-
ции FSearch в качестве параметра L.

Результат функции FSearch можно передать функции FExpand для
преобразования его в полное имя файла, то есть имя файла, запи-
санное прописными буквами включающее в себя буквенную метку дис-
ковода и маршрут доступа к каталогу, начиная от корневого катало-
га. Кроме того, для разделения имени файла на строку, определяю-
щую каталог, и строку, задающую дисковод можно использовать функ-
цию FSplit.

См. также: FExpand, FSplit, GetEnv.

Пример:

B.Pascal 7 & Objects/PG - 179 -


uses Dos;
var
S: PathStr;
begin
S: := FSearch('TURBO.EXE', GetEv('PATH'));
if S = '' then
WriteLn('Файл TURBO.EXE не найден');
else
WriteLn('Найден файл ',FExpand(S));
end.

Процедура FSplit модуль Dos
-----------------------------------------------------------------

Назначение: Разделяет имя файла на три компоненты.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure FSplit(Path: PathStr; var Dir: DirStr;
var Name: NameStr; var Ext: ExtStr);

Примечания: Имя файла, заданное параметром Path, разделяется
на три его компоненты. Для переменной Dir устанавливается значе-
ние буквенной метки дисковода и маршрута доступа к каталогу со
всеми начальными и конечными знаками обратной косой черты, пере-
менной Name присваивается значение имени файла, а переменной Ext
- расширение имени файла с предшествующей точкой. Каждый из этих
составляющих строку элементов может оказаться пустым (в том слу-
чае, если Path не содержит соответствующего элемента).

Типы PathStr, DirStr, ExtStr и NameStr определены в модуле
Dos (см. строковые типы работы с файлом).

При разделении имени файла на компоненты FSplit не добавляет
и не удаляет никаких символов. При конкатенации результирующих
переменных Dir, Name и Ext будет получен заданный маршрут.

Пример:

uses Dos;
var
P: PathStr;
D: DirStr;
N: NameStr;
E: ExtStr;
begin
Write('Имя файла (WORK.PAS) : ')
ReadLn(P);
FSplit(p, D, N, E);
if N = '' then N:='WORK';
if E = '' then E:='.PAS';
P := D + N + E;

B.Pascal 7 & Objects/PG - 180 -

WriteLn('Результирующее имя = ',P);
end.

-------------------------------------------------------------
Процедура GetArcCoords модуль Graph
-----------------------------------------------------------------

Назначение: Позволяет пользователю выдавать запрос о коорди-
натах последнего обращения к процедуре Arс.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure GetArcCoords(var Coords: ArcCoordsType);

Примечания: Данная процедура возвращает переменную (коорди-
наты) типа CoordType, который является предописанным и определен
в модуле Graph.

Процедура GetArcCoords возвращает переменную, содержащую
точку центра (Х,Y), начальную позицию (Хbeg,Ybeg) и конечную по-
зицию (Хend,Yend) последней команды Arс. Эти значения могут быть
полезными, если вы хотите, например, провести прямую, начинающую-
ся от конца дуги.

Ограничения: Должен использоваться графический режим.

См. также: Arc, Ellipse, PieSlice, PieSliceXY.

Пример:

uses Graph;
var
GraphDriver, GraphMode : integer;
ArcCoords : ArcCoordsType;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if GraphResult <> grOk then
Halt(1);
Arc(100,100,0,89,30);
GetArcCoords(ArcCoorsType);
MoveTo(100,100);
with ArcCoords do
Line(Xstart, Ystart, Xend, Yend);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 181 -


Функция GetArgCount модуль WinDos
-----------------------------------------------------------------

Назначение: Возвращает число параметров, переданных програм-
ме в командной строке.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure GetArgCount: Integer;

См. также: GetArgStr, ParamCount, ParamStr.

Функция GetArgStr модуль WinDos
-----------------------------------------------------------------

Назначение: Возвращает параметр командной строки, заданный
Index.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure GetArgSrt(Dest: PChar; Index: Integer;
MaxLen: Word): PChar;

Примечания: Если Index имеет значение, меньшее 0 или большее
GetArgCount, то данная функция возвращает пустую строку. Макси-
мальная длина возвращаемой строки определяется параметром MaxLen.

См. также: GetArgCount, ParamCount, ParamStr.



B.Pascal 7 & Objects/PG - 182 -


Процедура GetAspectRatio модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает действующую разрешающую способность
графического экрана, с помощью которого можно вычислить коэффици-
ент относительного удлинения (Хk,Yk).

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure GetAspectRatio(var Хk, Yk: Word);

Примечания: Для каждого драйвера и графического режима име-
ется связанный с ним коэффициент относительного удлинения (част-
ное от деления максимального разрешения по y на максимальное раз-
решение по x). Это отношение можно вычислить путем обращения к
процедуре GetAspectRatio и последующего деления параметра Хk на
параметр Yk. Это отношение используется при вычерчивании окруж-
ностей, дуг и закруглений.

Ограничения: Должен использоваться графический режим.

См. также: Arc, Circle, GetMaxX, GetMaxY, PieSlice,
SetAspectRatio.

Пример:

uses Graph;
var
Xasp, Yasp : word;
GraphDriver, GraphMode : integer;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if GraphResult <> grOk then
Halt(1);
GetAspectRatio(Xasp,Yasp);
XSideLength := 20;
{ выровнять длину по Y в соответствии с коэффициентом
относительного удлинения }
YSideLength := Round((Xasp/Yasp)*XSideLength);
{ нарисовать на экране "квадратный" прямоугольник }
Rectangle(0,0,XSideLength,YSideLength);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 183 -


Функция GetBkColor модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает текущее значение фонового цвета.

Целевая платформа: Реальный режим, защищенный режим.

Описание: function GetBkColor: Word;

Примечания: Фоновый цвет может принимать значения в диапазо-
не от 0 до 15 (в зависимости от текущего графического драйвера и
текущего графического режима).

Если запись 0 палитры была изменена обращением к процедурам
SetPalette или SetAllPalette, то функция GetBkColor будет возвра-
щать значение 0.

Ограничения: Должен использоваться графический режим.

См. также: GetColor, GetPalette, InitGraph, SetAllPalette,
SetBkColor, SetColor, SetPalette.

Пример:

uses Graph;
var
GraphDriver, GraphMode : integer;
Color : word;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if GraphResult <> grOk then
Halt(1);
Randomize;
repeat
Color := Succ(GetBkColor);
if Color > PaletteSize then
Color := 0;
SetBkColor(Color);
LineTo(Random(GetMaxX), Random(GetMaxY));
until False; { для выхода нажмите ^Break }
end.



B.Pascal 7 & Objects/PG - 184 -


Процедура GetCBreak модуль Dos
-----------------------------------------------------------------

Назначение: Возвращает состояние Ctrl+Break, которое прове-
ряется операционной системой DOS.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure GetCBreak(var Break: boolean);

Примечания: Данная процедура возвращает состояние
Ctrl+Break, проверяемое в DOS. В выключенном состоянии (False)
DOS проверяет Ctrl+Break только при выводе на консоль, устройство
печати или в коммуникационные порты. Во включенном состоянии
(True) проверки делаются при каждом обращении к системе.

См. также: SetCBreak.



B.Pascal 7 & Objects/PG - 185 -


Функция GetColor модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает текущее значение основного цвета, ус-
тановленное при предыдущем успешном обращении к процедуре
SetColor.

Целевая платформа: Реальный режим, защищенный режим.

Описание: function GetColor: Word;

Примечания: Если данная процедура возвращает значение 0, то
это означает, что текущим цветом, используемым для вычерчивания,
является первый цвет палитры. Основной цвет может принимать зна-
чения от 0 до 15, в зависимости от текущего графического режима и
графического драйвера.

Ограничения: Должен использоваться графический режим.

См. также: GetBkColor, GetPalette, InitGraph, SetAllPalette,
SetColor, SetPalette.

Пример:

var
GraphDriver, GraphMode : integer;
Color : word;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
Randomize;
repeat
Color := Succ(GetBkColor);
if Color > PaletteSize then
Color := 0;
SetBkColor(Color);
LineTo(Random(GetMaxX), Random(GetMaxY));
until False; { для выхода нажмите ^Break }
end.



B.Pascal 7 & Objects/PG - 186 -


Функция GetCurDir модуль WinDos
-----------------------------------------------------------------

Назначение: Возвращает текущий каталог на заданном диске.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function GetCurDir(Dir: PChar; Drive: Byte):
PChar;

Примечания: Возвращаемая в Dir строка всегда начинается с
буквенной метки диска, двоеточия и обратной косой черты. Drive =
0 указывает текущий диск, 1 - диск A, 2 - диск B и т.д. Возвраща-
емое значение записывается в Dir. Об ошибках сообщается в
DosError.

Если заданный параметром Drive диск недопустим, то в Dir
возвращается 'X:\', как если бы это был корневой каталог недопус-
тимого диска.

Максимальная длина полученной в результате строки определя-
ется константой fsDirectory. Текущий каталог на данном диске в
виде строки Паскаля возвращается функцией GetDir.

См. также: SetCurDir, CreateDir, RemoveDir.

Процедура GetDate модуль Dos, WinDos
-----------------------------------------------------------------

Назначение: Возвращает текущую дату, установленную в опера-
ционной системе.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure GetDate(var Year, M, Day, D: Word);

Примечания: Возвращаемые значения имеют следующие диапазоны:
Year (год) - 1980..2099, M (месяц) - 1..12, Day (число) 1..31, D
(день недели) - 0..6 (где значение 0 соответствует воскресенью).

См. также: SetDate, GetTime, SetTime.



B.Pascal 7 & Objects/PG - 187 -


Функция GetDefaultPalette модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает запись описания палитры.

Целевая платформа: Реальный режим, защищенный режим.

Описание: function GetDefaultPalette(var Palette:
PaletteType): PaletteType;

Примечания: Данная функция возвращает запись PaletteType,
содержащую палитру Palette, инициализированную драйвером при вы-
зове процедуры InitGraph.

Ограничения: Должен использоваться графический режим.

См. также: InitGraph, GetPalette, SetAllPalette, SetPalette.

Пример:

uses
Crt, Graph;
var
Driver, Mode,
i : integer;
MyPal, OldPal : PletteType;
begin
DirectVideo := false;
Randomize;
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult < 0 then
Halt(1);
GetDefultPalette(OldPal); { сохранить старую палитру }
MyPal := OldPal; { скопировать и изменить }
{ вывести информацию на экран }
for i = 0 to MyPal.Size - 1 do
begin
GetColor(i);
OutTextXY(10, i * 10, '...нажмите любую клавишу...');
end;
repeat { менять палитру, пока нажата клавиша }
with MyPl do
Colors[Random(Size)] := Random(Size + 1);
SetAllPalette(MyPal);
until KeyPressed;
SetAllPalette(OldPal); { восстановить исходную палитру }
ClearDevice;
OutTextXY(10, 10, 'Нажмите клавишу Enter...')
ReadLn;
CloseGraph;
end.

B.Pascal 7 & Objects/PG - 188 -


Процедура GetDir модуль System
-----------------------------------------------------------------

Назначение: Возвращает текущий каталог на заданном диске.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure GetDir(d: Byte; var s: String);

Примечания: Параметр d представляет собой выражение целого
типа, а s - переменную строкового типа. Значение текущего катало-
га на диске, заданного параметром d, возвращается в переменной s.
Значение d = 0 указывает на текущий дисковод, 1 - задает дисковод
A, 2 - В и т.д.

GetDir не выполняет проверки на ошибки. Если в параметре d
задан недопустимый диск, то в s возвращается 'X:\', как если бы
это был корневой каталог на недопустимом диске.

Функция GetCurDir выполняет те же функции, что и GetDir, но
в качестве аргумента воспринимает строку с завершающим нулем, а
не строку Паскаля.

См. также: ChDir, MkDir, RmDir.



B.Pascal 7 & Objects/PG - 189 -


Функция GetDOSEnviroment модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает указатель на текущую строку операци-
онной строки задачи.

Целевая платформа: Защищенный режим, Windows.

Описание: function GetDOSEnviroment: PChar;

Примечания: В отличие от прикладной программы динамически
компонуемая библиотека не имеет копии строки операционной среды и
для получения строки должна использовать эту функцию.

Пример: В данном примере выводится содержимое текущей опера-
ционной среды задачи.

uses Strings, WinAPI; { в Windows используйте также WinCrt }
var
P: PChar;
begin
P: := GetDOSEnviroment;
while P[0] <> #0 do
begin
Whiteln(P);
Inc(P, StrLen(P) + 1);
end;
end.



B.Pascal 7 & Objects/PG - 190 -


Функция GetDriverName модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает строку, содержащую имя текущего драй-
вера.

Целевая платформа: Реальный режим, защищенный режим.

Описание: function GetDriverName: String;

Примечания: После обращения к InitGraph данная функция возв-
ращает имя активного драйвера.

Ограничения: Должен использоваться графический режим.

См. также: InitGraph, GetModeName.

Пример:

uses Graph;
var
Driver, Mode : integer;
begin
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult < 0 then
Halt(1);
OutText('Используется драйвер ' + GetDriverName);
ReadLn;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 191 -


Функция GetEnv модуль Dos
-----------------------------------------------------------------

Назначение: Возвращает значение заданной переменной операци-
онной среды.

Целевая платформа: Реальный режим, защищенный режим.

Описание: function GetEnv(Env: String): String;

Примечания: Функция GetEnv возвращает значение заданной пе-
ременной Env. Имя переменной может указываться как строчными, так
и прописными буквами, но оно не должно включать в себя знак ра-
венства (=). Если заданная переменная операционной среды не су-
ществует, то функция GetEnv возвращает пустую строку.

Более подробная информация об операционной среде DOS содер-
жится в справочных руководствах по DOS.

См. также: EnvCount, EnvStr, GetDOSEnviroment.

Пример:

{$M 8192,0,0}
uses Dos;
var
Command: string[79];
begin
Write('Введите команду DOS: ');
ReadLn(Command);
if Command <> '' then
Command := '/C/ + Command;
SwapVectors;
Exec(GetEnv(COMSPEC'), Command);
SwapVectors;
if DosError <> 0 then
Writeln('Нельзя выполнить COMMAND.COM');
end.



B.Pascal 7 & Objects/PG - 192 -


Функция GetEnvVar модуль WinDos
-----------------------------------------------------------------

Назначение: Возвращает указатель на значение заданной пере-
менной операционной среды.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function GetEnvVar(Env: String): String;

Примечания: Функция GetEnvVar возвращает указатель на значе-
ние заданной переменной операционной среды, например, указатель
на первый символ после знака равенства (=) в записи операционной
среды, заданной VarName. Переменная может быть записана в верхнем
или нижнем регистре, но не должна включать в себя символ равенс-
тва. Если заданная переменная операционной среды не существует,
то GetEnvVar возвращает nil.

Пример:

uses WinDow; { в Windows используйте также WinCrt }
begin
Writeln('Текущим маршрутом является ', GetEnvVar('PATH'));
end.



B.Pascal 7 & Objects/PG - 193 -


Процедура GetFAttr модуль Dos
-----------------------------------------------------------------

Назначение: Возвращает атрибуты файла.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure GetAttr(var f; var Attr : Word);

Примечания: Параметр f должен представлять собой файловую
переменную (соответствующую типизированному, нетипизированному
или текстовому файлу) для которого должно быть выполнено присваи-
вание файловой переменой, но который не должен быть открыт. Про-
верка атрибутов Attr выполняется путем сравнения их с масками,
заданными в виде констант в модуле Dos (см. выше).

Коды ошибок можно получить с помощью функции DosError. Воз-
можными кодами ошибок являются код 3 (недопустимый маршрут) и код
5 (файл недоступен).

Ограничения: Файл f не должен быть открыт.

См. также: SetFAttr, GetFAttr, SetFTime.

Пример:

uses Dos;
var
f : file;
attr : byte;
begin
{ получить из командной строки имя файла }
Assign(f, ParamStr(1));
GetFAttr(f, attr);
Writeln(ParamStr(1));
ifDosError <> 0 then
Writeln('Код ошибки DOS = ', DosError)
else
begin
Writeln('Атрибут = ', attr);
{ определить тип атрибута файла с помощью флагов в модуле
Dos }
if attr and ReadOnly <> 0 then
Writeln('Файл доступен только по чтению');
if attr and Hidden <> 0 then
Writeln('Скрытый файл');
if attr and SysFile <> 0 then
Writeln('Системный файл');
if attr and VolumeId <> 0 then
Writeln('Идентификатор тома');
if attr and Directory <> 0 then

B.Pascal 7 & Objects/PG - 194 -

Writeln('Каталог');
if attr and Archive <> 0 then
Writeln('Архивизируемый (обычный) файл');
end; { else }
end.

Процедура GetFillPattern модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает текущий образец заполнителя, заданный
последним обращением к процедуре SetFillPattern.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure GetFillPattern(var Pattern:
FillPatternType);

Примечания: Параметр Pattern - это образец заполнителя. Тип
FillPatternType описан в модуле Graph. Если пользователь не обра-
щался к процедуре SetFillPattern, то процедура GetFillPattern
возвратит массив, заполненный $FF.

Ограничения: Должен использоваться графический режим.

См. также: SetFillPattern, GetFillSettings, SetFillStyle.



B.Pascal 7 & Objects/PG - 195 -


Процедура GetFillSettings модуль Graph
-----------------------------------------------------------------

Назначение: Позволяет выдавать запрос о текущем типе запол-
нителя и его цвете, которые установлены процедурами SetFillStyle
или SetFillPattern.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure GetFillSetings(var Inf:
FillSettingsType);

Примечания: Данная процедура возвращает переменную Inf (ин-
формация о заполнителе) типа FillSettingsType, который описывает-
ся в модуле Graph.

Поле Pattern содержит выбранный в качестве текущего тип за-
полнителя. Поле Color содержит выбранный в качестве текущего цвет
закраски. И образец, и цвет закраски можно изменить путем обраще-
ния к процедурам SetFillStyle и SetFillPattern. Если Pattern рав-
но UserFill, то для получения определенного пользователем образца
закраски используйте GetFillPatrtern.

Ограничения: Должен использоваться графический режим.

См. также процедуры FillPoly, SetFillStyle, SetFillPattern.
!seealso: FillPoly SetFillStyle SetFillPattern

Пример:

uses Graph;
var
Gd, Gm : integer;
FillInfo : FillSttingsType;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
GetFillSettings(FillInfo); { сохранить стиль закраски и
цвет }
Bar(0, 0, 50, 50);
SetFillStyle(XHatchFill, GetMaxColor); { новый стиль }
Bar(50, 0, 100, 50);
with FillInfo do
SetFillStyle(Pattern, Color); { восстановить старый цвет
закраски }
Bar(100, 0, 150, 50);
Readln;
CloseGraph;
end.


B.Pascal 7 & Objects/PG - 196 -

Функция GetFreeSpace модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает общий объем свободной памяти в дина-
мически распределяемой области.

Целевая платформа: Защищенный режим, Windows.

Описание: procedure GetFreeSpace(Flag: Word): Longint;

Примечание: Переменная Flag игнорируется и должна быть равна
0. Она существует только для совместимости с реальным режимом
Windows. Возвращается значение объема свободной памяти в байтах.
Из-за фрагментации маловероятно, чтобы можно было выделить блок
такого размера. Чтобы найти размер наибольшего непрерывного блока
памяти, вызовите подпрограмму GlobalCompact.

См. также: GlobalCompact, GlobalAlloc.



B.Pascal 7 & Objects/PG - 197 -


Процедура GetFTime модуль Dos, WinDos
-----------------------------------------------------------------

Назначение: Возвращает дату и время последней записи файла.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure GetFTime(var f; var Time: Longint);

Примечания: Параметр f должен представляет собой файловую
переменную (соответствующую типизированному, нетипизированному
или текстовому файлу) для которого должно быть выполнено присваи-
вание файловой переменной, но который не должен быть открыт. Зна-
чение времени, возвращаемое в параметре Time, может быть распако-
вано путем обращения к процедуре UnpackTime. Коды ошибок можно
получить с помощью функции DosError. Единственным возможным кодом
ошибки является код 6 (недопустимый описатель файла).

Ограничения: Файл должен быть открыт.

См. также: SetFTime, PackTime, UnPackTime, DosError.

Функция GetGraphMode модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает текущий графический режим.

Целевая платформа: Реальный режим, защищенный режим.

Описание: function GetGraphMode: Integer;

Примечания: Данная процедура возвращает текущий графический
режим, установленный с помощью процедур InitGraph и SetGraphMode.
Значение режима представляет собой целое число в диапазоне от 0
до 5 и зависит от текущего драйвера.


B.Pascal 7 & Objects/PG - 198 -


Определены следующие константы режима:

------------T---------T--------T-----------T------------T-------¬
¦Графический¦ Имя ¦Значение¦ Столбцов ¦ Палитра ¦Страниц¦
¦ драйвер ¦константы¦ ¦ х строк ¦ ¦ ¦
+-----------+---------+--------+-----------+------------+-------+
¦ CGA ¦ CGAC0 ¦ 0 ¦ 320x200 ¦ C0 ¦ 1 ¦
¦ ¦ CGAC1 ¦ 1 ¦ 320x200 ¦ C1 ¦ 1 ¦
¦ ¦ CGAC2 ¦ 2 ¦ 320x200 ¦ C2 ¦ 1 ¦
¦ ¦ CGAC3 ¦ 3 ¦ 320x200 ¦ C3 ¦ 1 ¦
¦ ¦ CGAHi ¦ 4 ¦ 640x200 ¦ 2 цвета ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
+-----------+---------+--------+-----------+------------+-------+
¦ MCGA ¦ MCGAC0 ¦ 0 ¦ 320x200 ¦ C0 ¦ 1 ¦
¦ ¦ MCGAC1 ¦ 1 ¦ 320x200 ¦ C1 ¦ 1 ¦
¦ ¦ MCGAC2 ¦ 2 ¦ 320x200 ¦ C2 ¦ 1 ¦
¦ ¦ MCGAC3 ¦ 3 ¦ 320x200 ¦ C3 ¦ 1 ¦
¦ ¦ MCGAMed ¦ 4 ¦ 640x200 ¦ 2 цвета ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
+-----------+---------+--------+-----------+------------+-------+
¦ EGA ¦ EGALo ¦ 0 ¦ 640x200 ¦ 16 цветов ¦ 1 ¦
¦ ¦ EGAHi ¦ 1 ¦ 640x350 ¦ 16 цветов ¦ 2 ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
+-----------+---------+--------+-----------+------------+-------+
¦ EGA64 ¦ EGA64Lo ¦ 0 ¦ 640x200 ¦ 16 цветов ¦ 1 ¦
¦ ¦ EGA64Hi ¦ 1 ¦ 640x350 ¦ 4 цвета ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
+-----------+---------+--------+-----------+------------+-------+
¦ EGA- ¦ EGAMonoH¦ 3 ¦ 640x350 ¦ 2 цвета ¦ 1* ¦
¦ MONO ¦ EGAMonoH¦ 3 ¦ 640x350 ¦ 2 цвета ¦ 1** ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
+-----------+---------+--------+-----------+------------+-------+
¦ HERC ¦ HercMono¦i 0 ¦ 720x348 ¦ 2 цвета ¦ 2 ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
+-----------+---------+--------+-----------+------------+-------+
¦ ATT400 ¦ ATT400C0¦ 0 ¦ 320x200 ¦ C0 ¦ 1 ¦
¦ ¦ ATT400C1¦ 1 ¦ 320x200 ¦ C1 ¦ 1 ¦
¦ ¦ ATT400C2¦ 2 ¦ 320x200 ¦ C2 ¦ 1 ¦
¦ ¦ ATT400C3¦ 3 ¦ 320x200 ¦ C3 ¦ 1 ¦
¦ ¦ ATT400Me¦ 4 ¦ 640x200 ¦ 2 цвета ¦ 1 ¦
¦ ¦ ATT400Hi¦ 5 ¦ 640x200 ¦ 2 цвета ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
+-----------+---------+--------+-----------+------------+-------+
¦ VGA ¦ VGALo ¦ 0 ¦ 640x200 ¦ 16 цветов ¦ 2 ¦
¦ ¦ VGAMed ¦ 1 ¦ 640x350 ¦ 16 цветов ¦ 2 ¦
¦ ¦ VGAHi ¦ 2 ¦ 640x480 ¦ 16 цветов ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
+-----------+---------+--------+-----------+------------+-------+
¦ PC3270 ¦ PC3270Hi¦ 0 ¦ 640x200 ¦ 2 цвета ¦ 1 ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
+-----------+---------+--------+-----------+------------+-------+
¦ 8514 ¦ IBM8514L¦ 0 ¦ 640x480 ¦ 256 цветов¦ 1 ¦

B.Pascal 7 & Objects/PG - 199 -

¦ 8514 ¦ IBM8514H¦ 0 ¦ 1024x768 ¦ 256 цветов¦ 1 ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦
L-----------+---------+--------+-----------+------------+--------
* - 64К на плате EGAMono
** - 256К на плате EGAMomo

Ограничения: Должен использоваться графический режим.

См. также: ClearDevice, DetectGraph, InitGraph,
RestoreCrtMode, SetGraphMode.

Пример:

uses Graph;
var
Gd, Gm : integer;
Mode : integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
OutText('Для выхода из средств графики нажмите Enter:');
Readln;
RestoreCRTMode;
Writeln('Теперь вы в текстовом режиме');
Writeln('Для перехода в графический режим нажмите Enter');
Readln;
SetGraphMode(GetGraphMode);
OutTextXY(0, 0, 'Вы снова в графическом режиме');
OutTextXY(0, TextHeight('H'), 'Для выхода нажмите Enter');
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 200 -


Процедура GetImage модуль Graph
-----------------------------------------------------------------

Назначение: Сохраняет в буфере двоичный образ заданной об-
ласти экрана.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure GetImage(х1, у1, х2, у2: Integer; var
BitMap);

Примечания: Параметры х1, у1, х2, у2 определяют прямоуголь-
ную область экрана. Параметр BArray (битовый массив) является не-
типизированным параметром, который должен быть больше или равен
4, плюс размер памяти, отведенный для области экрана. Первые два
слова параметра BitMap используются для хранения ширины и высоты
области экрана; третье слово свободное.

Оставшаяся часть параметра BitMap используется для сохране-
ния самого двоичного образа. Для определения размера памяти, не-
обходимой для параметра BitMap, используйте функцию ImageSize.

Ограничения: Должен использоваться графический режим.

См. также: ImageSize, PutImage.

Пример:

var
P : pointer;
Size : word;
Gd, Gm : pointer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
Bar(0, 0, GetMaxX, GetMaxY);
Size := ImageSize(10,20,30,40);
GetMem(p,Size); { выделить память в динамически
распределяемой области }
GetImage(10,20,30,40,P^);
Readln;
ClearDevice;
PutImage(100, 100, P^, NormalPut);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 201 -


Процедура GetIntVec модуль Dos
-----------------------------------------------------------------

Назначение: Возвращает адрес указанного вектора прерываний.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure GetIntVec(Int: Byte; var Vec: Pointer);

Примечания: Параметр Int задает номер вектора прерывания (от
0 до 255), а его адрес возвращается в параметре Vec.

Ограничения: В защищенном режиме DOS и в стандартном и улуч-
шенном режиме Windows GetIntVec возвращает вектор прерывания за-
щищенного режима с заданным номером вектора прерывания. Функцию
GetIntVec нельзя использовать для запроса векторов прерывания ре-
ального режима или векторов исключительных ситуаций защищенного
режима.

См. также: SetIntVec.


B.Pascal 7 & Objects/PG - 202 -

Процедура GetLineSettings модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает текущий стиль линии, образец линии и
ее толщину, установленные процедурой SetLineStyle.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure GetLineSettings(var LineInfo:
LineSettingsType);

Примечания: См. описание типа LineSettingType.

Ограничения: Должен использоваться графический режим.

См. также: SetLineStyle.

Пример:

var
GraphDriver, GraphMode : integer;
OldStyle: LineSettingsType;
begin
GraphDiver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if Graphesult <> grOk then
Halt(1);
Line(0, 0, 100, 0);
GetLineSettings(OldStyle);
SetLineSettings(DottesLn, 0, ThickWidth);
Line(0, 10, 100, 10);
with OldStyle do { восстановить старый стиль линии }
SetLineStyle(LineStyle, Pattern, Thickness);
Line(0, 20, 100, 20);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 203 -


Процедура GetMaxColor модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает наибольшее значение цвета, которое
можно передать процедуре SetColor.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure GetMaxColor: Word;

Примечания: Например, при использовании адаптера EGA с 256К
процедура GetMaxColor всегда возвращает значение 15. Это означа-
ет, что допускается любое обращение к процедуре SetColor со зна-
чением от 0 до 15. При использовании адаптера CGA в режиме с вы-
соким разрешением или монохромного адаптера Hercules, поскольку
эти адаптеры поддерживают только значения основного цвета 0 или
1, процедура GetMaxColor возвращает значение 1.

Ограничения: Должен использоваться графический режим.

См. также: SetColor.



B.Pascal 7 & Objects/PG - 204 -


Функция GetMaxMode модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает для текущего загруженного драйвера
максимальное значение номера режима.

Целевая платформа: Реальный режим, защищенный режим.

Описание: function GetMaxMode: Word;

Примечания: Данная функция позволяет вам непосредственно из
драйвера найти для текущего драйвера максимальное значение номера
режима. (Ранее единственный способ, с помощью которого вы могли
получить это значение, состоял в использовании процедуры
GetModeRange. Теперь эта процедура также поддерживается, но толь-
ко для драйверов фирмы Borland.) Значение, возвращаемое функцией
GetMaxMode, представляет собой максимальное значение, которое
можно передать процедуре SetGraphMode. В каждом драйвере поддер-
живаются режимы 0..GetMaxMode.

Ограничения: Должен использоваться графический режим.

См. также: GetModeRange, SetGraphMode.

Пример:

uses
Graph;
var
Driver, Mode : integer;
i : integer;

begin
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult < 0 then
Halt(1);
for i := 0 to GetMaxMode do { вывести на экран все
названия режимов }
OutTextXY(10, 10 * Succ(i), GetModeName(i));
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 205 -


Функция GetMахХ модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает для текущего графического режима и
драйвера самый правый столбец (разрешение по х).

Целевая платформа: Реальный режим, защищенный режим.

Описание: function GetMaxX: Integer;

Примечания: Возвращает для текущего графического режима и
драйвера максимальное значение х. В режиме 320х200 CGA, например,
данная процедура будет возвращать значение 319.

GetМахХ и GetМахY чрезвычайно полезны для центрирования, оп-
ределения границ области экрана и т.д.

Ограничения: Должен использоваться графический режим.

См. также: GetMaxY, GetX, GetY, MoveTo.

Пример:

uses
Graph;
var
Driver, Mode : integer;
i : integer;
begin
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult < 0 then
Halt(1);
Rectangle(0,0,GetMaxX,GetMexY); { нарисовать полную рамку
экрана }
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 206 -


Функция GetМахY модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает для текущего графического режима и
драйвера самую нижнюю строку (разрешение по y).

Целевая платформа: Реальный режим, защищенный режим.

Описание: function GetMaxY: Integer;

Примечания: Возвращает для текущего графического режима и
драйвера максимальное значение y. В режиме 320х200 CGA, например,
данная процедура будет возвращать значение 199.

Процедуры GetМахХ и GetМахY чрезвычайно полезны для центри-
рования, определения границ области экрана и т.д.

Ограничения: Должен использоваться графический режим.

См. также: GetMaxX, GetX, GetY, MoveTo.

Пример:

uses
Graph;
var
Driver, Mode : integer;
i : integer;
begin
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult < 0 then
Halt(1);
Rectangle(0,0,GetMaxX,GetMexY); { нарисовать полную рамку
экрана }
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 207 -


Процедура GetMem модуль System
-----------------------------------------------------------------

Назначение: Создает новую динамическую переменную указанного
размера и помещает адрес блока в переменную-указатель.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure GetMem(var p: Pоinter; Size: Word);

Примечания: Параметр р является переменной-указателем и мо-
жет относится к любому типу указателей. Параметр Size имеет длину
в слово и задает размер (в байтах) области памяти, выделяемой для
динамической переменной. На вновь созданную переменную можно ссы-
латься с помощью p.

Если для выделения памяти под новую динамическую переменную
в динамически распределяемой области недостаточно свободной памя-
ти, то во время выполнения программы происходит ошибка. (Этой
ошибки можно избежать - см. раздел "Функция обработки ошибки ди-
намически распределяемой области памяти" в Главе 21 "Руководства
по языку".)

Ограничения: Наибольший блок, который может быть выделен в
динамически распределяемой области памяти, составляет 65521 байт
(64К - $8).

См. также: New, FreeMem.



B.Pascal 7 & Objects/PG - 208 -


Функция GetModeName модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает строку, содержащую имя заданного гра-
фического режима Mode.

Целевая платформа: Реальный режим, защищенный режим.

Описание: function GetModeName(Mode: Integer): String;

Примечания: Имена режимов встроены в каждый драйвер. Возвра-
щаемые значения (320х200 CGA P1, 640х200 CGA и т.д.) можно ис-
пользовать для создания меню, вывода режимов экрана и т.д.

Ограничения: Должен использоваться графический режим.

См. также: GetMaxMode, GetModeRange, GetDriverName.

Пример:

uses
Graph;
var
Driver, Mode : integer;
i : integer;
begin
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult < 0 then
Halt(1);
for i := 0 to GetMaxMode do { вывести все имена режимов }
OutText(10, 10 * Succ(i), GetModeName(i));
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 209 -


Процедура GetModeRange модуль Graph
-----------------------------------------------------------------

Назначение: Для данного драйвера возвращает наименьший и на-
ибольший графический режим.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure GetModeRange(GraphDriver: Integer; var
LoMode, HiMode: Integer);

Примечания: Вывод следующей программы:

uses Graph;
var
Lovest, Highest : integer;
begin
GetModeRange(EGA64, Lowest, Highest);
Write('Наименьшее значение = ', Lowest);
Write('Наибольшее значение = ', Highest);
end.

даст наименьшее значение = 0 и наибольшее значение = 1. Если зна-
чение GraphDriver является недопустимым, то LoMode и HiMode будут
равны -1.

См. также: SetGraphMode, InitGraph, DetectGraph,
GetGraphMode.



B.Pascal 7 & Objects/PG - 210 -


Функция GetModuleFileName модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает имя выполняемого файла модуля.

Целевая платформа: Защищенный режим, Windows.

Описание: function GetModuleFileName(Module: THandle;
FileName: PChar; Size: Integer): Integer;

Примечания: Данная функция возвращает полностью расширенное
имя выполняемого файла модуля, из которого был загружен данный
модуль. Параметр Module - это описатель экземпляра модуля, полу-
чаемый обычно из переменной HInstance в модуле System или создан-
ный LoadLibrary. Параметры FileName и Size задают адрес и размер
буфера, в который копируется строка с завершающим нулем. Возвра-
щаемое значение равно фактической длине скопированной в буфер
строки.

Функция GetModuleHandle модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает описатель заданного модуля.

Целевая платформа: Защищенный режим, Windows.

Описание: function GetModuleHandleName(ModuleName: PChar):
THandle;

Примечания: Параметр ModuleName задает имя модуля. Строка не
может быть именем файла. Другими словами, она не может содержать
маршрута или расширения. Возвращаемое значение представляет собой
описатель заданного модуля или 0, если в данный момент такой мо-
дуль не загружен.



B.Pascal 7 & Objects/PG - 211 -


Функция GetModuleUsage модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает счетчик ссылки на модуль.

Целевая платформа: Защищенный режим, Windows.

Описание: function GetModuleUsage(Module: THandle): Integer;

Примечания: Параметр Module - это строка экземпляра модуля,
получаемая обычно из переменной HInstance модуля System или соз-
даваемая LoadLibrary. Возвращаемое значение специфицирует счетчик
ссылок на модуль.


B.Pascal 7 & Objects/PG - 212 -

Процедура GetPalette модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает текущую палитру Palette и ее размер.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure GetPalette(var Palette: PaletteType);

Примечания: Возвращает в переменной типа PaletteType текущую
палитру и ее размер. Тип PaletteType описан в модуле Graph.

Ограничения: Должен использоваться графический режим и адап-
теры EGA, EGA 64 или VGA (а не IBM 8514 или 256-цветный режим
VGA).

См. также: SetPalette, SetAllPalette, GetPaletteSize,
GetDefaultPalette.

Пример:

uses
Graph;
var
Driver, Mode : integer;
i : integer;
begin
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult < 0 then
Halt(1);
GetPalette(Palette);
If Palette.Size <> 1 then
for i := 0 to Pred(Palette.Size) do
begin
SetColor(Color);
Line(o, Color*5, 100, Color*5);
end
else
Line(0, 0, 100, 0);
Readln;
CloseGraph;
end.


B.Pascal 7 & Objects/PG - 213 -


Функция GetPaletteSize модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает размер таблицы палитры цветов.

Целевая платформа: Защищенный режим, реальный режим.

Описание: function GetPaletteSize: Integer;

Примечания: Данная функция показывает, сколько записей па-
литры можно задать для текущего графического режима. Например,
при использовании цветного режима и адаптера EGA функция возвра-
тит значение 16.

Ограничения: Должен использоваться графический режим.

См. также: GetMaxColor, GetDefaultPalette, GetPalette,
SetPalette.



B.Pascal 7 & Objects/PG - 214 -


Процедура GetPixel модуль Graph
-----------------------------------------------------------------

Назначение: Получает значение элемента изображения в точке
Х,Y.

Целевая платформа: Защищенный режим, реальный режим.

Описание: function GetPixel(X, Y: Integer): Word;

Примечания: Получает цвет элемента изображения в точке Х,Y.

Ограничения: Должен использоваться графический режим.

См. также: PutPixel, GetImage, PutImage, SetWriteMode.

Пример:

uses
Graph;
var
Gd, Gm : integer;
PixelColor: word;
begin
Gd := Detect; { перевести в графический режим }
InitGraph(Gd, Gm, '');
if GraphResult < 0 then
Halt(1);
PixelColor := GetPixel(10, 10);
if PixelColor = 0 then
PutPixel(10, 10, GetMaxColor);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 215 -


Функция GetProcAddress модуль WinAPI
-----------------------------------------------------------------

Назначение: Находит адрес экспортируемой процедуры или функ-
ции.

Целевая платформа: Защищенный режим, Windows.

Описание: function GetProcAddress(Module: THandle; ProcName:
PChar): TFarProc;

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

В случае успешного выполнения GetProcAddress возвращает ука-
затель на точку входа процедуры или функции, либо nil, если про-
цедура или функция не найдена. Если заданное параметром ProcName
порядковое значение не определено, GetProcAddress все равно может
возвращать значение, отличное от nil. В случаях, когда процедура
или функция может не существовать, ее следует искать не по поряд-
ковому значению, а по имени.

Ограничения: GertProcAddress следует использовать только для
поиска адресов экспортируемых процедур и функций, принадлежащих
DLL.

Пример: Следующая библиотека экспортирует одну функцию Test
по порядковому значению 5.

library Lib;

function Test: PChar; export;
begin
Test := 'Это тест';
end;

exports Test index 5;

begin
end.

Следующая программа динамически импортирует функцию Test из
указанной выше библиотеки. Функция GetProcAddress используется
для просмотра экспортируемой функции по имени и порядковому зна-
чению:


B.Pascal 7 & Objects/PG - 216 -

uses WinAPI; { под Windows используйте также WinCrt }

L: THandle;
Test: function: PChar;
begin
L := LoadLibrary('LIB.DLL');
if L >= 32 then
begin
@Test := GetProcAddress(L, 'TEXT'); { поиск по имени }
if @Test <> nil then WriteLn(Test); { если найдена,
вызвать ее }
@Test := GetProcAddress(L, PChar(5)); { поиск по
порядковому значению }
if @Test <> nil then WriteLn(Test); { если найдена,
вызвать ее }
FreeLibrary(L);
end;
end.

См. также: LoadLibrary.

Функция GetSelectorBase модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает базовый адрес селектора.

Целевая платформа: Защищенный режим, Windows.

Описание: function GetSelectorBase(Selector: Word): Longint;

Примечания: Selector задает селектор, для которого возвраща-
ется базовый адрес.

См. также: GetSelectorLimit, SetSelectorLimit,
SetSelectorBase.

Функция GetSelectorLimit модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает предельное значение заданного селек-
тора.

Целевая платформа: Защищенный режим, Windows.

Описание: function GetSelectorLimit(Selector: Word):
Longint;

Примечания: Selector задает селектор, для которого возвраща-
ется предельное значение.

См. также: GetSelectorBase, SetSelectorLimit,
SetSelectorBase.


B.Pascal 7 & Objects/PG - 217 -


Процедура GetTextSettings модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает текущий тип текстового шрифта, его
направление, размер и выравнивание, установленные с помощью про-
цедур SetTextStyle и SetTextJustify.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure GetTextSettings(var TextInfo:
TextSettingsType);

Примечания: См. в данной главе определение констант шрифта и
описание типа TextSettingType.

Ограничения: Должен использоваться графический режим.

См. также: InitGraph, SetTextJustify, SetTextStyle,
TextHeight, TextWidth.

Пример:

uses
Graph;
var
Gd, Gm : integer;
OldStyle : TextSettingsType;
begin
Gd := Detect; { перевести в графический режим }
InitGraph(Gd, Gm, '');
if GraphResult < 0 then
Halt(1);
GetTextSettings(OldStyle);
SetTextJustify(LeftText, CenterText);
SetTextStyle(TriplexFont, VertDir, 4);
OutTextXY(GetMaxX, div 2, GetMaxY div 2, 'Новый тип');
with OldStyle do
begin { восстановить старый тип текста }
SetTextJustify(Horiz, Vert);
SetTextStyle(Font, Direction, CharSize);
end;
OutTextXY(0, TextHeight('H'), 'Снова старый тип');
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 218 -


Процедура GetTime модуль Dos
-----------------------------------------------------------------

Назначение: Возвращает установленное в операционной системе
текущее время.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure GetTime(var hour, min, sec, ssec: Word);

Примечания: Возвращаемые параметры принимают следующие зна-
чения: hour (час) - от 0 до 23, min (минута) - от 0 до 59, sec
(секунда) - от 0 до 59 и ssec (сотая доля секунды) - от 0 до 99.

См. также: SetTime, GetDate, SetDate, UnpackTime.

Процедура GetVerify модуль Dos, WinDos
-----------------------------------------------------------------

Назначение: Возвращает состояние флага проверки DOS.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure GetVerify(var Flag: Boolean);

Примечания: Данная процедура возвращает состояние флага про-
верки DOS. При сброшенном флаге (False) проверка при записи на
диск не выполняется. При установленном флаге (True) для обеспече-
ния правильности записи все операции записи на диск проверяются.

См. также: SetVerify.



B.Pascal 7 & Objects/PG - 219 -


Функция GetVersion модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает текущий номер версии Windows и DOS.

Целевая платформа: Защищенный режим, Windows.

Описание: function GetVersion: Longint;

Примечания: Младшее слово возвращаемого значения содержит
версию Windows. Старший байт задает вспомогательный номер версии
(в виде двузначного десятичного номера), например, в Windows 3.1
младшим номером будет 10. Младший байт задает основной номер вер-
сии.

Старшее слово возвращаемого значения содержит номер версии
DOS. Старший байт задает основной номер версии (в виде двузначно-
го десятичного номера). Мдалший байт задает вспомогательный номер
версии.

Пример:

uses WinAPI; { под Windows используйте также WinCrt }
type
TVersion = record
WinMajor, WinMinor, DosMinor, DosMajor: Byte;
end;
var
Version: Longint;
begin
Version := GetVersion;
with TVersion(Version) do
begin
Writeln('Версия Windows ', WinMajor, '.', WinMinor);
Writeln('DOS version ', DosMajor, '.', DosMinor);
end;
end.

См. также: DosVersion.



B.Pascal 7 & Objects/PG - 220 -


Процедура GetViewSettings модуль Graph
-----------------------------------------------------------------

Назначение: Позволяет пользователю выдать запрос о текущей
области просмотра на экране и параметрах "вырезанного" изображе-
ния.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure GetViewSettings(var ViewPort:
ViewPortType);

Примечания: Данная процедура возвращает переменную типа
ViewPortType. Этот тип описан в модуле Graph (см. выше описание
записи ViewPortType).

Ограничения: Должен использоваться графический режим.

См. также: SetViewPort, ViewPortType, ClearViewPort.

Пример:

uses
Graph;
var
Gd, Gm : integer;
ViewPortType = ViewPortType;
begin
Gd := Detect; { перевести в графический режим }
InitGraph(Gd, Gm, '');
if GraphResult < 0 then
Halt(1);
GetViewSettings(ViePort);
with ViewPort do
begin
Rectangle(0, 0, x2 - x1, y2 - y1);
if Clip then
OutText('Отсечение изображения не активно');
else
OutText('Сегодня отсечение изображения не действует');
end;
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 221 -


Функция GetWinFlags модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает память и флаги системной конфигура-
ции.

Целевая платформа: Защищенный режим, реальный режим.

Описание: function GetWinFlags: Longint;

Примечания: Информацию о памяти и конфигурации системы вы
можете получить с помощью флагов wf_XXXX, проверяя биты возвраща-
емого GetWinFlags значения. См. описание флагов конфигурации
fw_XXXX. В защищенном режиме DOS флаги wf_Standard, wf_Enchanced,
wf_LargeFrame и wf_SmallFrame всегда равны нулю.

Флаг fw_DPMI может использоваться для определения того, ра-
ботают ли прикладная программа или библиотека под Windows или DOS
в защищенном режиме.

Пример:

uses WinAPI;
begin
.
.
.
if GetWinFlags and wf_DPMI <> 0 then
{ работает в защищенном режиме DOS }
else
{ работает в под Windows }
.
.
.
end;

См. также: Флаги конфигурации wf_XXXX.



B.Pascal 7 & Objects/PG - 222 -


Функция GetX модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает Х-координату текущего указателя.

Целевая платформа: Защищенный режим, реальный режим.

Описание: function GetX: Integer;

Примечания: Процедура GetХ зависит от области просмотра. Та-
ким образом, ее значение всегда равно абсолютной Х-координате те-
кущего указателя, минус ViewPort.х1. В следующем примере:

1. SetViewPort(0, 0, GetMaxX, GetMaxY, True);
Перемещает текущий указатель в точку с абсолютными коор-
динатами (0,0), а GetX возвращает значение 0.

2. MoveTo(5, 5);
Перемещает текущий указатель в точку с абсолютными коор-
динатами (5,5), а GetX возвращает значение 5.

3. SetViewPort(10, 10, 100, 100, True);
Перемещает текущий указатель в точку с абсолютными коор-
динатами (10,10), а GetX возвращает значение 0.

4. MoveTo(5, 5);
Перемещает текущий указатель в точку с абсолютными коор-
динатами (15,15), а GetX возвращает значение 5.

Ограничения: Должен использоваться графический режим.

См. также: процедуры GetViewSettings, GetY, InitGraph,
MoveTo, SetViewPort.

Пример:

uses Graph;
var
GraphDriver, GraphMode : integer;
x, y : integer;
begin
GraphDiver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if Graphesult <> grOk then
Halt(1);
OutText('Начнем здесь.');
x := GetX;
y := GetY;
OutText(20,10,'Теперь перейдем сюда...');
OutText(x,y,'А теперь вернемся назад.');
Readln;
CloseGraph;

B.Pascal 7 & Objects/PG - 223 -

end.

Функция GetY модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает Y-координату текущего указателя.

Целевая платформа: Защищенный режим, реальный режим.

Описание: function GetY: Integer;

Примечания: Процедура GetY зависит от области просмотра. Та-
ким образом, ее значение всегда равно абсолютной Y-координате те-
кущего указателя. См. пример предыдущей функции.

Ограничения: Должен использоваться графический режим.

См. также: GetViewSettings, GetX, InitGraph, MoveTo,
SetViewPort.

Пример:

uses Graph;
var
GraphDriver, GraphMode : integer;
x, y : integer;
begin
GraphDiver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if Graphesult <> grOk then
Halt(1);
OutText('Начнем здесь.');
x := GetX;
y := GetY;
OutText(20,10,'Теперь перейдем сюда...');
OutText(x,y,'А теперь вернемся назад.');
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 224 -


Функция GlobalAlloc модуль WinAPI
-----------------------------------------------------------------

Назначение: Выделяет блок памяти в глобальной динамически
распределяемой области памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalAlloc(Flags: Word; Bytes: Longint):
THandle;

Примечания: GlobalAlloc распределяет блок с атрибутами и
размером, заданными параметрами Flags и Bytes, и возвращает опи-
сатель блока. Если блок выделить нельзя, то возвращаемое значение
равно 0.

Администраторы памяти Windows и защищенного режима DOS под-
держивают следующие типы блоков памяти: фиксированный (fixed),
перемещаемый (moveable) и выгружаемый (discardable). Фиксирован-
ный блок гарантированно остается в одном и том же месте линейной
памяти. Перемещаемый блок может перемещаться в линейной памяти и
освобождать место для других запросов, а выгружаемый блок может
выгружаться из памяти, чтобы освободить место для других блоков.
С помощью параметра Flags вы можете выбрать один из трех типов:

------------------T----------------------------------¬
¦ Тип ¦ Флаги ¦
+-----------------+----------------------------------+
¦ Фиксированный ¦ gmem_Fixed ¦
¦ Перемещаемый ¦ gmem_Moveable ¦
¦ Выгружаемый ¦ gmem_Moveable + gmem_Discardable ¦
L-----------------+-----------------------------------

Кроме того, флаги gmem_ZeroInit и gmem_Norify поддерживаются
как в Windows, так и в защищенном режиме DOS. Все другие флаги
памяти gmem_XXXX в защищенном режиме DOS игнорируются. Если задан
флаг gmem_ZeroInit, то блок будет заполняться нулями. Для выгру-
жаемого блока задан флаг gmem_Notify, то при выгрузке блока вызы-
вается процедура уведомления прикладной программы.

При успешном выполнении GlobalAlloc она выделяет объем памя-
ти не меньше запрошенного. Если выделено больше памяти, чем было
запрошено, то прикладная программа может использовать весь объем.
Чтобы определить фактический размер блока памяти, используйте
функцию GlobalSize.

Перед тем как обращаться к блоку памяти вы можете заблокиро-
вать его с помощью функции GlobalLock, а когда закончите к нему
обращаться, то нужно разблокировать его с помощью функции
GlobalUnlock. GlobalLock возвращает полный 32-битовый указатель
на первый байт в блоке. Смещение указателя всегда равно нулю. В
защищенном режиме DOS селектор указателя всегда совпадает с опи-

B.Pascal 7 & Objects/PG - 225 -

сателем блока, но в Windows это не всегда так.

Чтобы освободить блок памяти, прикладная программа должна
использовать функцию GlobalFree. Чтобы изменить размер или атри-
буты выделенного блока памяти, прикладная программа может исполь-
зовать функцию GlobalReAlloc.

В Windows наибольший блок памяти, который вы можете распре-
делить на процессоре 80286, на 1 мегабайт меньше 16. На процессо-
ре 80386 это на 64К меньше 12мегабайт.

В защищенном режиме DOS наибольший распределяемый блок равен
16 мегабайтам. Заметим, что администратор памяти защищенного ре-
жима транслирует запросы на большие (> 64К) выгружаемые и переме-
щаемые блоки.

См. также: GlobalFree, GlobalLock, GlobalReAlloc,
GlobalSize, GlobalUnlock, флаги памяти gmem_XXXX.



B.Pascal 7 & Objects/PG - 226 -


Функция GlobalAllocPrt модуль WinAPI
-----------------------------------------------------------------

Назначение: Выделяет и блокирует блок памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalAllocPrt(Flags: Word; Bytes:
Longint): THandle;

Примечания: Эта функция комбинирует в одной операции функции
GlobalAlloc и GlobalLock. Реализация GlobalAllocPrt соответствует
функции, показанной ниже:

function GlobalAlloc(Flags: Word; Bytes: Longint): THandle;
begin
GlobalAllocPtr := GlobalLock(GlobalAloc(Flags, Bytes));
end;

Комбинируя часто используемые последовательности вызовов
функций администратора памяти в одной операции, семейство функций
GlobalXXXXPtr устраняет необходимость поддерживать блокировку и
разблокировку блоков и позволяет прикладной программе работать
вместо описателей с указателями.

Ограничения: Функция GlobalAllocPtr не может использоваться
для распределения выгружаемых блоков.

См. также: GlobalFreePrt, GlobalPrtHandle, GlobalReAllocPrt.



B.Pascal 7 & Objects/PG - 227 -


Функция GlobalCompact модуль WinAPI
-----------------------------------------------------------------

Назначение: Упаковывает глобальную динамически распределяе-
мую память.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalCompact(MinFree: Longint): Longint;

Примечания: GlobalCompact пытается создать блок свободной
памяти размером не менее MinFree байт, переупорядочивая перемеща-
емые блоки памяти и освобождая ее от выгружаемых блоков. Возвра-
щаемое значение - это число байт в наибольшем блоке памяти после
упаковки и выгрузки блоков. Он может оказаться меньше MinFree.

Если MinFree равно 0, то возвращаемое значение специфицирует
число байт в наибольшем свободном блоке, который может создать
администратор памяти после перемещения и выгрузки блоков.

Ограничения: Если ваша прикладная программа передает возвра-
щаемое GlobalCompact значение функции GlobalAlloc, то не исполь-
зуйте gmem_NoCompact или gmem_NoDiscard.

См. также: флаги памяти gmem_XXXX, GlobalAlloc.

Функция GlobalDiscard модуль WinAPI
-----------------------------------------------------------------

Назначение: Выгружает блок глобальной памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalDiscard(Mem: THandle): THandle;

Примечания: Эта функция выгружает блок памяти, заданный па-
раметром Mem. Блок памяти должен быть выгружаемым (выделяться с
флагом gmem_Discardable), а счетчик блокировки для него должен
быть равен 0.

Хотя GlobalDiscard удаляет блок глобальной памяти из памяти,
его описатель остается допустимым. Прикладная программа может пе-
редать описатель функции GlobalReAlloc для выделения другого бло-
ка памяти, идентифицированного тем же описателем.

См. также: GlobalReAlloc, флаги памяти gmem_XXXX.



B.Pascal 7 & Objects/PG - 228 -


Функция GlobalDosAlloc модуль WinAPI
-----------------------------------------------------------------

Назначение: Распределяет блок памяти, доступный в реальном
режиме.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalDosAlloc(Bytes: Longint): Longint;

Примечания: Эта функция выделяет блок глобальной памяти, ко-
торый доступен как в реальном, так и в защищенном режиме. Пара-
метр Bytes задает размер блока в байтах. Обеспечивает выделение
блока в первом мегабайте линейного адресного пространства.

Младшее слово возвращаемого значения содержит селектор бло-
ка, а старшее слово - базовый адрес сегмента блока. Селектор ис-
пользуется для доступа к блоку в защищенном режиме, а базовый ад-
рес сегмента - для доступа к блоку в реальном режиме. Если адми-
нистратор памяти не может выделить блок требуемого размера, то
возвращается нулевое значение.

Ограничения: Поскольку памяти для распределения объекта нем-
ного, в прикладной программе следует использовать эту функцию
только в случае крайней необходимости.

См. также: GlobalDosFree.



B.Pascal 7 & Objects/PG - 229 -


Функция GlobalDosFree модуль WinAPI
-----------------------------------------------------------------

Назначение: Освобождает блок памяти, доступный в реальном
режиме.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalDosFree(Selector: Word): Word;

Примечания: Эта функция освобождает блок глобальной памяти,
выделенный ранее с помощью функции GlobalDosAlloc. Параметр
Selector определяет селектор для блока, соответствующего младшему
слову значения, возвращаемого GlobalDOSAlloc. Возвращаемое значе-
ние равно 0 в случае успешного выполнения и Selector в противном
случае.

См. также: GlobalDoaAlloc.

Процедура GlobalFix модуль WinAPI
-----------------------------------------------------------------

Назначение: Блокирует блок памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: procedure GlobalFix(Mem: THandle);

Примечания: Эта процедура блокирует в линейной памяти блок,
заданный параметром Mem, и увеличивает на 1 счетчик блокировки
блока. Блок остается заблокированным (зафиксированным в памяти),
пока счетчик блокировки через вызов GlobalUnfix не уменьшается до
нуля.

Эта процедура используется в основном для предотвращения пе-
ремещения блоков при взаимодействии с кодом реального режима.
Прикладным программам редко требуется фиксировать память в линей-
ном адресном пространстве.

См. также: GlobalUnfix.



B.Pascal 7 & Objects/PG - 230 -


Функция GlobalFlags модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает информацию о блоке памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalDosFree(Mem: THandle): Word;

Примечания: Старший байт возвращаемого значения содержит 0
или более следующих установленных флагов:

---------------------T------------------------------------------¬
¦ Константа ¦ Описание ¦
+--------------------+------------------------------------------+
¦ gmem_DDEShare ¦ Блок может использоваться совместно. При-¦
¦ ¦ меняет только для динамического обмена¦
¦ ¦ данными (DDE). ¦
¦ ¦ ¦
¦ gmem_Discardable ¦ Блок может быть выгружаемым. ¦
¦ ¦ ¦
¦ gmem_Discarded ¦ Блок был выгружен. ¦
¦ ¦ ¦
¦ gmem_Not_Banked ¦ Блок не может быть банкируемым. ¦
L--------------------+-------------------------------------------

Младший байт возвращаемого значения содержит счетчик блоки-
ровки блока. Для получения значения счетчика блокировки вы можете
использовать gmem_LockCount.

Ограничения: На счетчик блокировки блока глобальной памяти
влияют следующие функции:

--------------------------T--------------------¬
¦ Увеличивают счетчик ¦ Уменьшают счетчик ¦
+-------------------------+--------------------+
¦ GlobalFix ¦ GlobalUnfix ¦
¦ GlobalLock ¦ GlobalUnlock ¦
¦ LockSegment ¦ UnlockSegment ¦
L-------------------------+---------------------

См. также: флаги памяти gmem_XXXX, GlobalSize.



B.Pascal 7 & Objects/PG - 231 -


Функция GlobalFree модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает блок памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalFree(Mem: THandle): THandle;

Примечания: GlobalFree освобождает блок памяти, заданный па-
раметром Mem и делает недопустимым описатель блока памяти. Если
функция выполняется успешно, то возвращается нулевое значение. В
противном случае возвращается значение, равное Mem. Если объект
памяти заблокирован, то есть имеет счетчик блокировки, больший 0,
то GlobalFree не может использоваться для освобождения объекта.

Ограничения: Использование описателя объекта освобождаемой
памяти может вызвать общий сбой по нарушению защиты памяти.

См. также: GlobalDiscard, GlobalFlags, GlobalLock.
GlobalUnlock.

Функция GlobalFreePtr модуль WinAPI
-----------------------------------------------------------------

Назначение: Разблокирует и освобождает блок памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalFreePtr(P: Pointer): THandle;

Примечания: Данная функция комбинирует в одной операции
функции GlobalUnlock и GlobalFree. Реализация функции
GlobalFreePrt соответствует показанной ниже функции:

function GlobalFreePrt(P: Pointer): THandle;
var
H: THandle;
begin
H := GlobalPtrHandle(P);
GlobalUnock(H);
GlobalFreePtr := GlobalFree(H);
end;

Комбинируя часто используемые последовательности вызовов
функций администратора памяти в одной операции, семейство функций
GlobalXXXXPtr устраняет необходимость поддерживать блокировку и
разблокировку блоков и позволяет прикладной программе работать
вместо описателей с указателями.

См. также: GlobalAllocPrt, GlobalPtrHandle,
GlobalReAllocPtr.

B.Pascal 7 & Objects/PG - 232 -


Функция GlobalHandle модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает описатель блока памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalHandle(Mem: Word): Longint;

Примечания: Данная функция возвращает описатель блока памя-
ти, селектор которого задается параметром Mem. Младшее поле возв-
ращаемого значения содержит описатель блока, а старшее - селектор
блока. Если Mem не идентифицирует блок памяти, то возвращаемое
значение равно 0.

См, также: GlobalPtrHandle.

Функция GlobalLock модуль WinAPI
-----------------------------------------------------------------

Назначение: Блокирует блок памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalLock(Mem: THAndle): Pointer;

Примечания: Данная функция блокирует блок памяти, заданный
параметром Mem, и возвращает указатель на первый байт блока. Если
блок не является выгружаемым, его счетчик блокировки увеличивает-
ся на 1, и обеспечивается сохранение блока в памяти, пока его
счетчик блокировки не уменьшается до 0 (с помощью вызова
GlobalUnlock).

При успешном выполнении GlobalLock возвращаемое значение
представляет собой указатель на первый байт блока памяти. Если
блок выгружен или Mem не является допустимым описателем, возвра-
щаемое значение равно nil.

См. также: GlobalSize, GlobalHandle, GlobalUnlock.



B.Pascal 7 & Objects/PG - 233 -


Функция GlobalLRUNewest модуль WinAPI
-----------------------------------------------------------------

Назначение: Перемещает блок памяти в самую "новую" последнюю
используемую позицию в памяти (LRU).

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalLRUNewest(Mem: THAndle): THandle;

Примечания: Данная функция перемещает заданный объект в са-
мую "новую" последнюю позицию LRU, уменьшая шансы на выгрузку
объекта, но это не предотвращает того, что в итоге блок может
быть выгружен.

Ограничения: GlobalLRUNewest полезно использовать только в
том случае, если Mem - это выгружаемый объект.

См. также: GlobalLRUOldest.

Функция GlobalLRUOldest модуль WinAPI
-----------------------------------------------------------------

Назначение: Перемещает блок памяти в самую "старую" послед-
нюю используемую позицию в памяти (LRU).

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalLRUOldest(Mem: THAndle): THandle;

Примечания: Данная функция перемещает заданный объект в са-
мую "старую" последнюю позицию LRU, что делает его следующим выг-
ружаемым объектом.

Ограничения: GlobalLRUNewest полезно использовать только в
том случае, если Mem - это выгружаемый объект.

См. также: GlobalLRUNewest.



B.Pascal 7 & Objects/PG - 234 -


Функция GlobalNotify модуль WinAPI
-----------------------------------------------------------------

Назначение: Устанавливает для текущей задачи процедуру уве-
домления.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalNotify(NotifyProc: TFarProc);

Примечания: Данная функция устанавливает для текущей задачи
функцию уведомления. Администратор памяти вызывает процедуру уве-
домления, когда распределенный с gmem_Notify блок памяти должен
быть выгружен.

Параметр NotifyProc должен быть адресом функции вызова со
следующим описанием:

function Notify(Mem: THAndle): Bool; export

где Notify можете быть любым определенным пользователем именем.
Заметим, что функция должна описываться с директивой export и на-
ходиться в фиксированном сегменте кода. Кроме того, в Windows,
если функция уведомления находится в прикладной программе (в от-
личие от DLL), передаваемый GlobalNotify указатель NotifyProc
должен создаваться с помощью MakeProcInstance.

Когда администратор памяти вызывает функцию уведомления, в
параметр Mem он передает описатель блока, который должен быть
выгружен. Если функция уведомления возвращает значение True, то
администратор памяти выгружает блок. Если возвращается значение
False, то блок не выгружается.

Ограничения: Вызов процедуры уведомления не гарантируется
через стек, в котором она находится, и, следовательно, в ней не
следует полагаться на сегмент стека. Кроме того, в процедуре уве-
домления не следует вызывать никаких функций API, вызывающих пе-
ремещения в памяти.

См. также: GlobalReAlloc, флаги памяти gmem_XXXX.



B.Pascal 7 & Objects/PG - 235 -


Функция GlobalPageLock модуль WinAPI
-----------------------------------------------------------------

Назначение: Увеличивает для блока памяти счетчик блокировки
страницы.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalPageLock(Selector: THandle): Word;

Примечания: Данная функция увеличивает для блока памяти, за-
данного параметром Selector, счетчик блокировки страницы. В улуч-
шенном режиме Windows пока счетчик блокировки страницы имеет не-
нулевое значение, блок не будет выгружаться на диск и остается в
памяти по одному и тому же физическому адресу. Блок остается заб-
локированным, пока счетчик блокировки страницы с помощью вызовов
GlobalPageUnlock не станет равным нулю.

Ограничения: Эта функция имеет смысл только в улучшенном ре-
жиме Windows. В защищенном режиме DOS функции GlobalPageLock со-
ответствует функция GlobalFix.

См. также: GlobalPageUnlock.

Функция GlobalPageUnLock модуль WinAPI
-----------------------------------------------------------------

Назначение: Уменьшает для блока памяти счетчик блокировки
страницы.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalPageUnLock(Selector: THandle):
Word;

Примечания: Данная функция уменьшает для блока памяти, за-
данного параметром Selector, счетчик блокировки страницы. Блок
должен быть ранее заблокирован с помощью функции GlobalPageLock.
В улучшенном режиме Windows пока счетчик блокировки страницы име-
ет ненулевое значение, блок не будет выгружаться на диск и оста-
ется в памяти по одному и тому же физическому адресу в памяти.
Блок остается заблокированным, пока счетчик блокировки страницы с
помощью вызовов GlobalPageUnlock не станет равным нулю. Возвраща-
емое значение определяет полученный в результате счетчик блоки-
ровки. Если функция выполняется неуспешно, то результирующее зна-
чение будет нулевым.

Ограничения: Эта функция имеет смысл только в улучшенном ре-
жиме Windows. В защищенном режиме DOS функции GlobalPageUnLock
соответствует функция GlobalUnFix.

См. также: GlobalPageLock.

B.Pascal 7 & Objects/PG - 236 -


Функция GlobalPtrHandle модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает описатель блока памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalPtrHandle(P: Pointer): THandle;

Примечания: Данная функция возвращает описатель блока памя-
ти, адрес которого задан параметром P. Если P не идентифицирует
блок памяти, то возвращается нулевое значение. Функцию
GlobalPtrHandle можно использовать для того, чтобы найти описа-
тель блока памяти, выделенного с помощью GlobalAllocPtr.

См. также: GlobalAllocPrt, GlobalFreePrt, GlobalReAllocPtr.



B.Pascal 7 & Objects/PG - 237 -


Функция GlobalReAlloc модуль WinAPI
-----------------------------------------------------------------

Назначение: Изменяет размер или атрибуты блока памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalReAlloc(Mem: THandle; Bytes:
Longint; Flags: Word): THandle;

Примечания: Данная функция увеличивает или уменьшает размер
блока памяти, заданного параметром Mem, на число байт Bytes. Па-
раметр Flags определяет, как нужно перераспределить блок. Возвра-
щаемое значение представляет собой новый описатель блока (см. ни-
же) или 0, если блок не перераспределен.

Если для фиксированного блока в параметре Flags установлен
флаг gmem_Moveable, то блок можно перемещать в новый фиксирован-
ный адрес.

Если для выгружаемого блока в параметре Flags установлен
флаг gmem_Moveable, а параметр Bytes равен 0, блок при нулевом
значении счетчика блокировки выгружается.

Если при увеличении размера блока в параметре Flags установ-
лен флаг gmem_ZeroInit, дополнительное содержимое инициализирует-
ся нулем.

В GlobalReAlloc Windows поддерживает дополнительные флаги
памяти gmem_XXXX, но в защищенном режиме DOS они игнорируются.

Функция GlobalReAlloc возвращает новый описатель блока, ко-
торый может отличаться от описателя, переданного функции, если
старый или новый размер блока превышает 64К. Однако в тех случа-
ях, когда и старый, и новый размер блока меньше 64К,
GlobalReAlloc всегда может изменить размер блока без изменения
описателя.

Функцию GlobalReAlloc можно также использовать для изменения
атрибутов блока памяти. Это можно сделать, установив в параметре
Flags наряду с комбинацией gmem_Moveable и gmem_Discardable флаг
gmem_Modify. Флаг gmem_Modify приводит к игнорированию параметра
Bytes.

См. также: GlobalDiscard, флаги памяти gmem_XXXX,
GlobalAlloc.



B.Pascal 7 & Objects/PG - 238 -


Функция GlobalReAllocPtr модуль WinAPI
-----------------------------------------------------------------

Назначение: Изменяет размер или атрибуты блока памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalReAllocPtr(P: Pointer; Bytes:
Longint; Flags: Word): Pointer;

Примечания: Данная функция комбинирует в одной операции
функции GlobalUnlock, GlobalReAlloc и GlobalLock. Реализация
функции GlobalReAllocPtr соответствует показанной ниже функции:

function GlobalReAllocPtr(P: Pointer; Bytes: Longint; Flags:
Word): Pointer;
var
H: THandle;
begin
H: := GlobalPtrHandle(P);
GlobalUnlock(H);
GlobalReAllocPtr := GlobalLock(GlobalReAllock(H, Bytes,
Flags));
end;

Комбинируя часто используемые последовательности вызовов
функций администратора памяти в одной операции, семейство функций
GlobalXXXXPtr устраняет необходимость поддерживать блокировку и
разблокировку блоков и позволяет прикладной программе работать
вместо описателей с указателями.

См. также: GlobalFreePrt, GlobalAllocPrt, GlobalReAllocPrt.



B.Pascal 7 & Objects/PG - 239 -


Функция GlobalSize модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает размер блока памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalSize(Mem: THandle): Longint;

Примечания: Данная функция возвращает значение размера блока
памяти, заданного параметром Mem, в байтах. Если описатель Mem
недопустимы, или блок памяти выгружен, то возвращается ноль.
Иногда фактический размер блока памяти, запрошенный при распреде-
лении. Для выгружаемых блоков перед вызовом функции GlobalSize
для проверки того, не выгружена ли заданная память, прикладная
программа должны вызывать функцию GlobalFlags.

См. также: GlobalFlags.

Функция GlobalUnfix модуль WinAPI
-----------------------------------------------------------------

Назначение: Разблокирует блок памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalUnfix(Mem: THandle): Bool;

Примечания: Данная функция уменьшает значение счетчика бло-
кировки блока памяти, заданного параметром Mem. Если значение
счетчика блокировки становится равным нулю, то блок разблокирует-
ся и объект перемещается или выгружается. Если значение счетчика
блокировки стало равным нулю, то возвращаемое значение равно
False, в противном случае оно равно True.

Каждый раз, когда прикладная программа вызывает для блока
памяти функцию GlobalFix, в итоге она всегда должна вызывать для
этого блока GlobalUnfix.

См. также: GlobalFix, GlobalFlags.



B.Pascal 7 & Objects/PG - 240 -


Функция GlobalUnlock модуль WinAPI
-----------------------------------------------------------------

Назначение: Разблокирует блок памяти.

Целевая платформа: Защищенный режим, Windows.

Описание: function GlobalUnlock(Mem: THandle): Bool;

Примечания: Данная функция уменьшает значение счетчика бло-
кировки блока памяти, заданного параметром Mem. Если блок выгру-
жаемый, значение его счетчикам блокировки уменьшается на 1. Если
значение счетчика блокировки становится равным нулю, то блок
разблокируется и объект перемещается или выгружается. Если значе-
ние счетчика блокировки стало равным нулю, то возвращаемое значе-
ние равно False, в противном случае оно равно True.

Каждый раз, когда прикладная программа вызывает для блока
памяти функцию GlobalLock, в итоге она всегда должна вызывать для
этого блока GlobalUnLock.

См. также: GlobalLock, GlobalFlags.

Процедура GotoXY модуль Crt
-----------------------------------------------------------------

Назначение: Позиционирует курсор в точку с заданными коорди-
натами.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procvedure GoToXY(X, Y: Byte);

Примечания: Курсор перемещается в ту позицию внутри текущего
окна, которая задана координатами Х и Y (Х задает столбец, Y за-
дает строку). Верхний левый угол задается координатами (1,1).

Эта процедура зависит от текущего окна. Например:

Window(1,10,60,20);
GotoXY(1,1);

переместит курсор в верхний левый угол активного окна (абсолютные
координаты (1,10)).

Ограничения: Если задаются недопустимые координаты, то обра-
щение к процедуре игнорируется.

См. также: Window, WhereX, WhereY.



B.Pascal 7 & Objects/PG - 241 -


Процедура GotoXY модуль WinCrt
-----------------------------------------------------------------

Назначение: Позиционирует курсор в точку с заданными коорди-
натами.

Целевая платформа: Windows.

Описание: procvedure GoToXY(X, Y: Byte);

Примечания: Верхний левый угол задается координатами (1,1).
Переменная Cursor устанавливается в (X-1,Y-1), поскольку в ней
хранится позиция относительно точки (0,0), а не (1,1).

Подпрограммы GotoXY, WhereX и WhereY предназначены в основ-
ном для совместимости с модулем Crt, предусмотренной в Borland
Pascal для DOS. Отсчитываемые от 1 координаты этих подпрограмм не
согласуются с остальными подпрограммами и переменными модуля
WinCrt, поэтому вместо них рекомендуется использовать подпрограм-
му CursorTo и переменную Cursor.

См. также: WhereX, WhereY.

Процедура GraphDefaults модуль Graph
-----------------------------------------------------------------

Назначение: Сбрасывает установленные для графических средств
параметры.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure GraphDefaults;

Примечания: Возвращает текущий указатель в нулевую точку и
устанавливает для графической системы параметры:

- область просмотра;
- палитру;
- фоновый и основной цвет;
- тип линии и образец линии;
- тип заполнителя, образец заполнителя и цвет заполнителя,
принятые по умолчанию.

Ограничения: Должен использоваться графический режим.

См. также: InitGraph.



B.Pascal 7 & Objects/PG - 242 -


Функция GraphErrorMsg модуль Graph
-----------------------------------------------------------------

Назначение: Для заданного кода ошибки (ErrorCode) возвращает
строку сообщения об ошибке.

Целевая платформа: Защищенный режим, реальный режим.

Описание: function GraphErrorMsg(ErrorCode: Integer):
String;

Примечания: Данная функция возвращает строку, содержащую со-
общение об ошибке, соответствующее коду ошибки графической систе-
мы. Это облегчает вывод описывающего ошибку сообщения в пользова-
тельской программе. Например:

"Device driver not found" (не найден драйвер устройства)

вместо:

"error code - 3" (код ошибки - 3).

Ограничения: Должен использоваться графический режим.

См. также: GraphResult, DetectGraph, InitGraph.

Пример:

uses Graph;
var
GraphDriver, GraphMode : integer;
ErrorCode : integer;
begin
GraphDiver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if Graphesult <> grOk then
Halt(1);
begin
Writeln('Ошибка графики: ',GraphErrorMsg(ErrorCode);
Readln;
Halt(1);
end;
Line(0, 0, GetMaxX, GetMaxY);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 243 -


Функция GraphResult модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает для последней графической операции
код ошибки.

Целевая платформа: Защищенный режим, реальный режим.

Описание: function GraphResult: Integer;

Примечания: Возвращает код ошибки для последней графической
операции. См. ниже список констант grXXXX.

GraphResult устанавливают следующие подпрограммы:

Bar GetGraphMode SetAllPalette
Bar3D ImageSize SetFillPattern
ClearViewPort InitGraph SetFillStyle
CloseGraph InstallUserDriver SetGraphBufSize
DetectGraph InstallUserFont SetGraphMode
DrawPoly PieSlice SetLineStyle
FillPoly RegisterBGIdriver SetPalette
FloodFill RegisterBGIfont SetTextJustify
SetTextStyle

Заметим, что GraphResult (код ошибки) сбрасывается в 0 после
обращения к данной процедуре (аналогично функции IOResult). Таким
образом пользователю следует сохранить значение кода ошибки во
временной переменной и затем проверить ее.

См. также: GraphErrorMsg, константы grXXXX.

B.Pascal 7 & Objects/PG - 244 -

Пример:

uses
Graph;
var
ErrorCode : integer;
GrDriver, GrMode : integer;
begin
GrDriver := Detect;
InitGraph(GrDriver,GrMode);
ErrorCode := Grapesult; { проверка на ошибки }
if ErorCode <> grOk then
begin
Writeln('Ошибка графики: ');
Writeln(GraphErrorMsg(ErroeCode));
Writeln('Программа аварийно завершила работу!...');
Halt(1);
end;
{ выполнить некоторые графические функции }
ClearDevice;
Rectangle(0,0,GetMaxX,GetMaxY);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 245 -


Процедура Halt модуль System
-----------------------------------------------------------------

Назначение: Останавливает выполнение программы и возвращает
управление операционной системе.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure Наlt [ (ExtCode: Word) ];

Примечания: Параметр ExtCode (код завершения) представляет
собой необязательное выражение длиной в слово, которое задает код
завершения программы. Процедура Наlt без параметров соответствует
вызову Наlt(0). Код завершения может проверяться порождающим про-
цессом с помощью функции EхitCode модуля Dos или с помощью про-
верки ERRORLEVEL в командном файле DOS.

Заметим, что процедура Наlt инициализирует выполнение имею-
щихся в модуле процедур завершения Exit. Дополнительную информа-
цию вы можете найти в Главе 22 ("Вопросы управления") "Руководс-
тва по языку".

См. также: RunError, Exit.

Функция Hi модуль System
-----------------------------------------------------------------

Назначение: Возвращает старший байт аргумента.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function Нi(x): Byte;

Примечания: Параметр x представляет собой выражение целого
типа или слово. Функция Нi возвращает старший байт x в виде зна-
чения без знака.

См. также: Lo, Swap.

Пример:

var
w : word;
begin
w := Hi($1234); { $12 }
end;



B.Pascal 7 & Objects/PG - 246 -


Функция HiByte модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает старший байт аргумента типа Word.

Целевая платформа: Защищенный режим, Windows.

Описание: function НiByte(A: Word): Byte;

Примечания: Функция НiByte возвращает старший байт значения
A.

См. также: LoByte.

Функция High модуль System
-----------------------------------------------------------------

Назначение: Возвращает старший байт аргумента.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function Нigh(x);

Примечания: Параметр x представляет собой идентификатор ссы-
лочной переменной. Обозначенный x тип или тип переменной, обозна-
ченной x, должен быть порядковым типом, массивом или строковым
типом. Для порядкового типа High возвращает старшее значение в
диапазоне индексного типа массива. Для строкового типа High возв-
ращает описанный размер строки. Для открытого массива или строко-
вого параметра High возвращает значение типа Word, показывая чис-
ло элементов в фактическом параметре, минус 1.

См. также: Low.

Пример:

function Sum(var X: array of Real): Real;
var
I: Word;
S: Real;
begin
S: := 0;
for I := 0 to High(X) do S := S + X[I];
Sum := S;
end;



B.Pascal 7 & Objects/PG - 247 -


Процедура HighVideo модуль Crt
-----------------------------------------------------------------

Назначение: Устанавливает для символов подсветку.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure HighVideo;

Примечания: В модуле Crt имеется байтовая переменная
TextAttr, которая используется для хранения текущих атрибутов
изображения. Процедура HighVideo устанавливает для цвета символов
переменной TextAttr бит подсветки. Таким образом, цвета 0..7
отображаются в цвета 8..15.

См. также: NormVideo, LowVideo, TextColor, TextBackGround.

Пример:

uses Crt;
begin
TextAttr := LightGray;
HighVideo; { цвет становится белым }
end;

Функция HiWord модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает старшее слово значения LongInt.

Целевая платформа: Защищенный режим, Windows.

Описание: function НiWord(A: Longint): Word;

Примечания: Функция НiWord возвращает старший байт значения
A.

См. также: LoWord.



B.Pascal 7 & Objects/PG - 248 -


Процедура ImageSize модуль Graph
-----------------------------------------------------------------

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

Целевая платформа: Защищенный режим, реальный режим.

Описание: function ImageSize(x1, y1, x2, y2: Integer): Word;

Примечания: Параметры x1, y1, x2 и y2 определяют прямоуголь-
ную область экрана. Функция ImageSize определяет число байт, не-
обходимых функции Getimage для сохранения заданной области экра-
на. Размер двоичного образа области экрана включает в себя память
размером в несколько слов. В первом слове хранится ширина облас-
ти, а во втором - высота. Следующие несколько слов содержат атри-
буты самой области. Последнее слово резервируется.

Если объем памяти, необходимый для сохранения области, пре-
вышает или равен 64К, то возвращается значение 0 и функция
GraphResult возвращает значение -11 (grError).

Ограничения: Должен использоваться графический режим.

См. также: GetImage, PutImage.

Пример:

uses Graph;
var
Gd, Gm : integer;
P : pointer;
Size : word;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
Bar(0, 0, GetMaxX, GetMaxY);
Size := ImageSize(10,20,30,40)
GetMem(P, Size) { Выделить память в динамически
распределяемой области }
GetImage(10,20,30,40,P^);
Readln;
ClearDevice;
PutImage(100, 100, P^, NormalPut);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 249 -


Процедура Inc модуль System
-----------------------------------------------------------------

Назначение: Увеличивает значение переменной.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure Inc(x [ ; n : longint ] );

Примечания: Параметр x представляет собой переменную пере-
числимого типа, а n - целочисленное выражение. Значение x увели-
чивается на 1 (или на n в случае явного задания n). То есть
Inс(x) соответствует x := x+1, а Inс(x,n) соответствует x := x+n.
Функция Inс порождает оптимизированный код и особенно полезна в
больших циклах.

См. также: Dec, Pred, Succ.

Пример:

var
IntVar : intege;
LongIntVar : longint;
begin
Inc(IntVar); { intVar := IntVar + 1 }
Inc(LongIntVar); { LongIntVar := LongIntVar + 5 }



B.Pascal 7 & Objects/PG - 250 -


Процедура Include модуль System
-----------------------------------------------------------------

Назначение: Включает элемент в множество.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure Include(var S: set of T; I: T);

Примечания: S - это переменная множественного типа, а I -
выражение типа, совместимого с базовым типом S. Заданный I эле-
мент включается в множество, заданное S. Конструкция:

Include(S, I)

соответствует:

S := S + [I]

но процедура Include генерирует более эффективный код.

См. также: Exclude.

Процедура InitGraph модуль Graph
-----------------------------------------------------------------

Назначение: Инициализирует графическую систему и переводит
аппаратуру в графический режим.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure InitGraph(var GrDriver: Integer; var
Mode: Integer; Path : String);

Примечания: И параметр GrDriver (графический драйвер), и па-
раметр Mode (графический режим) являются параметрами-переменными
(var).

Если параметр GrDriver равняется Detect, то выполняется вы-
зов процедуры DetectGraph, загружается соответствующий драйвер и
выбирается графический режим.

Если параметр GrDriver не равен 0, то значение этого пара-
метра рассматривается, как номер драйвера. Этот драйвер загружа-
ется и система переводится в режим, определяемый параметром Mode.
Заметим, что если значение автоматического распознавания аппара-
туры изменено, то вы должны для требуемого драйвера обеспечить
правильный параметр Mode.

Параметр Path определяет маршрут доступа к каталогу, в кото-
ром находятся графические драйверы. Если этот параметр пуст, то
подразумевается, что файлы драйверов содержатся в текущем катало-

B.Pascal 7 & Objects/PG - 251 -

ге.

Обычно InitGraph загружает графический драйвер, выделяя для
него память (с помощью вызов GraphGetMem), затем загружает с дис-
ка соответствующий файл .BGI. В качестве альтернативы этой дина-
мической схеме загрузки вы можете скомпоновать графический драй-
вер (или несколько драйверов) непосредственно с выполняемым кодом
своей программы. Это можно сделать, конвертировав сначала файл
.BGI в файл .OBJ (с помощью утилиты BINOBJ), затем включив для
регистрации графических драйверов в исходный код вызовы
RegisterBGIdriver (перед вызовом InitGraph). При построении своей
программы вы должны выполнить компоновку с файлами .OBJ зарегист-
рированных драйверов. Вы можете также загрузить драйвер BGI в ди-
намически распределяемую область памяти, а затем зарегистрировать
его с помощью RegisterBGIdriver.

С помощью обращения к процедуре GraphGetМем в динамически
распределяемой области для графического драйвера выделяется па-
мять. При обращении к процедуре CloseGraph эта память освобожда-
ется.

После обращения к процедуре InitGraph для параметра GrDriver
будет установлено значение, соответствующее текущему графическому
драйверу, а для параметра Mode будет установлено значение, соот-
ветствующее текущему графическому режиму.

Если происходит ошибка, то процедура GraphDriver и функция
GraphResult возвращают одно из значений grXXXX: grNotDetected,
grFileNotFound, grInvalidDriver, grNoLoadMem или grInvalidMode
(см. выше).

Процедура InitGraph сбрасывает все графические параметры
(текущий указатель, палитру, цвет, область просмотра и т.д.) и
устанавливает для них предусмотренные по умолчанию значения.

Для установки поставляемых фирмами драйверов можно использо-
вать процедуру InstallDriver (более подробная информация содер-
жится в описании процедуры InstallUserDriver).

Для каждого поддерживаемого графического драйвера определен
ряд полезных констант (см. в начале главы).

Ограничения: Должен использоваться графический режим. Если
вы работаете с графическим интерфейсом фирмы Borland (BGI) и пла-
той Zenith Z-449, код автообнаружения Borland Pascal всегда будет
распознавать улучшенный режим EGA. Если этот режим несовместим с
вашим монитором, то выберите в вызове InitGraph другой режим.
Кроме того, Pascal не может автоматически распознавать графичес-
кую плату IBM 8514 (логика автообнаружения распознает ее как
VGA). Таким образом, чтобы использовать IBM 8514, переменной
GraphDriver нужно при вызове InitGraph присвоить значение IBM8514
(которое определено в модуле Graph). При наличии платы IBM 8514,
если вы не эмулируете режим VGA, использовать DetectGraph (или

B.Pascal 7 & Objects/PG - 252 -

Detect с InitGraph) не следует.

См. также: CloseGraph, DetectGraph, RestoreCrtMode,
SetGraphMode, GraphResult, InstallUserDriver, SetGraphBufSize,
RegisterBGIDriver, RegisterBGIFont, GraphDefaults.

Пример:

uses Graph;
var
grDriver : integer;
grMode : integer;
EmCode : integer;
begin
gDriver := Detect;
InitGraph(grDiver,grMode,'');
ErrCode := GraphResult;
it ErrCode <> grOk then
begin { выполнить графические функции }
Line(0, 0, GetMaxX, GetMaxY);
Readln;
CloseGraph;
end
else
Writeln('Ошибка графики : ',GraphErrorMsg(ErrCode));
end.



B.Pascal 7 & Objects/PG - 253 -


Процедура InitWinCrt модуль WinCrt
-----------------------------------------------------------------

Назначение: Создает окно CRT (если оно еще не создано).

Целевая платформа: Windows.

Описание: procedure InitCrt;

Примечания: Подпрограммы Read, Readln, Write или Writeln с
файлом, присвоенным CRT, для обеспечения существования окна CRT
автоматически вызывают процедуру InitWinCrt.

Для определения характеристик окна CRT InitWinCrt использует
переменные WindowOrg, WindowSize, ScreenSize и WindowTitle.

Процедура Insert модуль System
-----------------------------------------------------------------

Назначение: Вставляет в строку подстроку.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure Insert(String1: String; var s: String;
Indx: Integer);

Примечания: Параметр String1 представляет собой выражение
строкового типа. Параметр s - переменная строкового типа любой
длины. Параметр Indx является выражением целого типа. Данная про-
цедура вставляет строку, задаваемую параметром String1, в строку,
задаваемую параметром s, начиная с позиции, определяемой парамет-
ром Indx. Если получившаяся в результате строка превышает 256
символов, то она усекается до 255 символов.

См. также: Delete, Copy, ConCat, Pos, Length.

Пример:

var
s : string;
begin
s := 'Honest Lincoln';
Insert('Abe',s,8); { Honest Abe Lincoln }
end;



B.Pascal 7 & Objects/PG - 254 -


Процедура InsLine модуль Crt
-----------------------------------------------------------------

Назначение: Начиная с позиции курсора вставляет пустую стро-
ку.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure InsLine;

Примечания: Все строки, расположенные ниже добавленной стро-
ки, перемещаются на одну строку вниз, а нижняя строка исчезает с
экрана (при этом используется программа прокрутки изображения на
экране базовой системы ввода-вывода).

Всем позициям символов новой строки присваивается значение
пробела с текущими атрибутами текста. Таким образом, если проце-
дурой TextВасkGround не установлен фоновый черный цвет, то новая
строка имеет черный фоновый цвет.

Данная процедура зависит от используемого окна. Например:

Window(1, 10, 60, 20);
InsLine;

приведет к вставке строки длиной в 60 символов в точке с абсолют-
ными координатами (1,10).

См. также: DelLine, Window.



B.Pascal 7 & Objects/PG - 255 -


Функция InstallUserDriver модуль Graph
-----------------------------------------------------------------

Назначение: Включает в таблицу драйверов устройств BGI
(Borland) драйверы, поставляемые другими фирмами.

Целевая платформа: Реальный режим, защищенный режим.

Описание: function InstallUserDriver(Name: String;
AutoDetectPtr: Pointer): Integer;

Примечания: Данная процедура позволяет вам использовать
драйверы устройств, отличающиеся от драйверов фирмы Borland. Па-
раметр Name представляет собой имя нового драйвера устройства.
AutoDetectPrt - это указатель на необязательную функцию автомати-
ческого распознавания, которая может прилагаться к новому драйве-
ру. Эта функция автоматического распознавания не требует парамет-
ров и возвращает целое значение.

Если внутренняя таблица драйверов заполнена, то процедура
InstallUserDriver возвращает значение -11 (grError). В противном
случае данная процедура присваивает и возвращает для нового драй-
вера устройства номер этого драйвера.

Драйвер пользователя можно использовать двумя способами.
Предположим, у вас имеется новая видеоплата SGA и фирма, изготав-
ливающая эту плату, поставляет для нее драйвер SGA.BGI. Наиболее
простой способ использования этого драйвера состоит в его уста-
новке с помощью процедуры InstallUserDriver и передачи возвращае-
мого значения (присвоенного номера драйвера) непосредственно про-
цедуре InitGraph:

var
Driver, Mode : integer;
begin
Driver := InstallUserDriver('SGA.BGI', Nil);
if Driver = grError then { таблица переполнена? }
Halt(1);
Mode := 0; { каждый драйвер поддерживает режим 0 }
InitGraph(Driver, Mode, ''); { изменить автоматическое
распознавание }
... { нет графики }
end.

Значение nil параметра AutoDetectPtr при обращении к проце-
дуре InstallUserDriver показывает, что для платы SGA функция ав-
томатического распознавания отсутствует.

Другой, более общепринятый способ состоит в использовании
этого драйвера для связи функции автоматического распознавания,
которая будет вызываться при работе процедуры InitGraph. Предпо-
ложим, фирма-изготовитель платы SGA предоставила вам функцию ав-

B.Pascal 7 & Objects/PG - 256 -

томатического распознавания, которая выглядит следующим образом:

{$F+}
function DetectSGA : integer;
var Found : Boolean;
begin
DetectSGA := grError; { предположим, плата отсутствует }
Found := ... { поиск соответствующего аппарат-
ного обеспечения }
if not Found then
Exit; { код возврата = -11 }
DetectSGA := 3; { возвратить рекомендуемый и наз-
начаемый по умолчанию видео-
режим }
end.
{$F-}

Задача функции DetectSGA состоит в поиске во время работы
программы аппаратного обеспечения SGA. Если плата SGA не обнару-
жена, то данная функция возвращает значение -11 (grError). В про-
тивном случае возвращаемое значение представляет собой принятый
по умолчанию видеорежим для платы SGA (обычно он обеспечивает на-
илучшее сочетание цвета и разрешающей способности, которые можно
достичь на данном аппаратном обеспечении).

Заметим, что эта функция не требует параметров и возвращает
целочисленное значение со знаком. Она должна иметь дальний тип
обращения. При установке драйвера (путем обращения к процедуре
InstallUserDriver) вы передаете наряду с именем файла, содержаще-
го драйвер устройства, адрес DetectSGA:

var
Driver, Mode : integer;
begin
Driver := InstallUserDriver('SGA.GBI', @DetectSGA);
if Driver = grError then
Halt(1);
Driver := Detect;
{ не будем учитывать драйвер SGA, доверимся средствам
автоматического распознавания }
InitGraph(Driver, Mode, '');
.
.
.
end.

После того, как вы установите драйвер устройства и функцию
автоматического распознавания, можно вызвать процедуру InitGraph,
которая выполнит обычный процесс автоматического распознавания.
Перед тем, как процедура InitGraph вызывает свою встроенную функ-
цию автоматического распознавания (DetectGraph), она вызывает
сначала функцию DetectSGA. Если DetectSGA не найдет аппаратных
средств SGA, то возвращается значение -11 (grError), а процедура

B.Pascal 7 & Objects/PG - 257 -

InitGraph продолжит выполнение обычного процесса автоматического
распознавания (который также может включать в себя вызов пользо-
вательских функций автоматического распознавания в том порядке, в
котором они были установлены). Если же функция DetectSGA опреде-
лит наличие SGA, то она возвращает неотрицательное значение режи-
ма, а InitGraph найдет и загрузит файл SGA.BGI, переведет аппа-
ратное обеспечение в нужный режим (рекомендованный функцией
DetectSGA) и, наконец, передаст управление вашей программе.

См. также: InitGraph, RegisterBGIDriver.

Пример:

uses Graph;
var
Driver, Mode,
TestDriver,
ErrCode : integer;
{$F+}
function TestDetect : integer;
{ функция автоматического распознавания: если имеются соот-
ветствующие аппаратные средства, она возвращает значение,
равное соответствующему принимаемому по умолчанию режиму }
begin
TestDetect := 1; { по умолчанию режим = 1 }
end;
{$F-}
begin
{ установить драйвер }
TestDriver := InstallDriver('TEST', @TestDetect);
if GraphResult <> grOk then
begin
Writeln('Ошибка при установке драйвера');
Halt(1);
end;
Driver := Detect; { перейти в графический режим }
InitGraph(Driver, Mode, '');
ErrCode := GraphResult;
If ErrCode <> grOk then
begin
Writeln('Устанавливаемый драйвер поддерживается...');
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 258 -


Функция InstallUserFont модуль Graph
-----------------------------------------------------------------

Назначение: Устанавливает новый шрифт, не предусмотренный в
системе фирмы Borland (BGI).

Целевая платформа: Реальный режим, защищенный режим.

Описание: function InstallUserFont(Name: String): Integer;

Примечания: Параметр Name представляет собой имя файла век-
торного шрифта. Функция InstallUserFont возвращает номер шрифта,
который можно передать процедуре SetTextStyle для выбора этого
шрифта. Если внутренняя таблица шрифтов переполнена, то возвраща-
ется значение 0 (DefaultFont).

Прочее: См. также процедуру SetTextStyle.

Пример:

uses Graph;
var
Driver, Mode : integer;
TestFont : integer;
begin
TestFont := InstallUserFont('TEST'); { установить шрифт }
if GraphResult <> grOk then
begin
Writeln('Ошибка при установке шрифта TestFont; будет
использоваться DefaultFont');
Readln;
end;
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult <> grOk then
Halt(1);
SetTextStyle(TestFOnt, HorizDir, 2); { использовать новый
шрифт }
OutText('Поддерживается новый установленный шрифт...');
Readln
GloseGraph;
end.



B.Pascal 7 & Objects/PG - 259 -


Функция Int модуль System
-----------------------------------------------------------------

Назначение: Возвращает целую часть аргумента.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function Int(x : Real): Real;

Примечания: Параметр x представляет собой выражение вещест-
венного типа. Результатом будет целая часть x, то есть x округля-
ется в сторону нуля.

См. также: Frаc, Trunc, Round.

Пример:

var
r : real;
begin
r := Int(123.456); { 123 }
r := Int(-123.456); { -123 }
end.



B.Pascal 7 & Objects/PG - 260 -


Процедура Intr модуль Dos, WinDos
-----------------------------------------------------------------

Назначение: Выполняет заданное программное прерывание.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание:

procedure Intr(IntNum: Byte; var Regs: Registers); { DOS }

procedure Intr(IntNum: Byte; var Regs: TRegisters);{Windows}

Примечания: Параметр IntNum - это номер программного преры-
вания (0...255). TRegisters является записью, определенной в мо-
дуле WinDos (см. описание регистрового типа).

Перед выполнением указанного программного прерывания функция
Intr, используя запись Rеgs, загружает регистры AХ, BХ, CХ, DХ,
ВР, SI, DI, DS и ЕS процессора 8086. После того, как прерывание
будет выполнено, содержимое регистров AХ, BХ, CХ, DХ, ВР, SI, DI,
DS, ES и регистров флагов опять сохраняется в записи Regs.

Для получения более подробной информации по разработке про-
цедур обработки прерываний см. раздел "Обработка прерываний" в
Главе 22 "Руководства по языку".

Ограничения: Программные прерывания, для которых на входе
требуется задание определенных значений в SР или SS или изменяют
значения SР и SS на выходе, с использованием данной процедуры вы-
полняться не могут.

См. также: процедуру MsDos.



B.Pascal 7 & Objects/PG - 261 -


Функция IOResult модуль System
-----------------------------------------------------------------

Назначение: Возвращает целое значение, представляющее собой
состояние последней выполненной операции ввода-вывода.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function IOResult: Integer;

Примечания: Чтобы перехватить ошибки ввода-вывода с помощью
функции IORеsult, проверка ввода-вывода должна быть выключена
(директива компилятора {$I-}). Если проверка ввода-вывода выклю-
чена и происходит ошибка ввода-вывода, то, пока выполняется обра-
щение к функции IORеsult, все последующие операции ввода-вывода
игнорируются. Обращение в функции IORеsult сбрасывает ее внутрен-
ний флаг ошибки.

Перечень возвращаемых кодов ошибок приведен в Главе 4. Зна-
чение 0 отражает успешное выполнение операции ввода-вывода.

Пример:

var
f : file of byte;
begin
{ получить командную строку с именем файла }
Assign(f, ParamStr(1));
{$I-}
Reset(f);
{$I+}
if IOResult = 0 then
Writeln('Размер файла в байтах :',FileSize(f));
else
Writeln('Файл не найден');
end.



B.Pascal 7 & Objects/PG - 262 -


Процедура Keep модуль Dos
-----------------------------------------------------------------

Назначение: Процедура Кееp (завершить работу и оставить в
памяти) прерывает работу программы и оставляет ее резидентной в
памяти.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure Keep(Code: Word);

Примечания: Весь код программы, включая сегмент данных, сег-
мент стека и динамически распределяемую область, остается рези-
дентным в памяти. Поэтому необходимо убедиться в том, что с по-
мощью директивы компилятора $М вы задали максимальный размер
динамически распределяемой области. Параметр Code соответствует
коду завершения, передаваемому стандартной процедуре Наlt.

Ограничения: Данной процедурой следует пользоваться с осто-
рожностью. Программы, завершающие работу и остающиеся резидентны-
ми в памяти, довольно сложны, и для них не предусмотрено никакой
другой поддержки. Более подробная информация содержится в техни-
ческой документации по DOS.

См. также: DosExitCode.

Функция KeyPressed модуль Crt
-----------------------------------------------------------------

Назначение: Возвращает значение Truе, если на клавиатуре на-
жата клавиша и False в противном случае.

Целевая платформа: Реальный режим, защищенный режим.

Описание: function KeyPressed: Boolean;

Примечания: Символ (или символы) остаются в буфере клавиату-
ры. Данная процедура не распознает клавиш перевода регистра, та-
ких, как Shift, Аlt, NumLock и т.д. Клавишу можно считать с по-
мощью функции ReadKey.

См. также: ReadKey.

Пример:

uses Crt;
begin
repeat
Write('Xx'); { заполнять экран, пока нажата кла-
виша }
until KeyPressed;
end;

B.Pascal 7 & Objects/PG - 263 -


Функция KeyPressed модуль WinCrt
-----------------------------------------------------------------

Назначение: Возвращает значение Truе, если на клавиатуре на-
жата клавиша и False в противном случае.

Целевая платформа: Windows.

Описание: function KeyPressed: Boolean;

Примечания: Символ (или символы) остаются в буфере клавиату-
ры. Данная процедура не распознает клавиш перевода регистра, та-
ких, как Shift, Аlt, NumLock и т.д. Клавишу можно считать с по-
мощью функции ReadKey.

См. также: ReadKey.

Пример:

uses Crt;
begin
repeat
Write('Xx'); { заполнять экран, пока нажата кла-
виша }
until KeyPressed;
end;



B.Pascal 7 & Objects/PG - 264 -


-------------------------------------------------------------
Функция Length модуль System
-----------------------------------------------------------------

Назначение: Возвращает динамическую длину строки.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: Length(s: String): Integer;

Примечания: Параметр s представляет собой выражение строко-
вого типа. Результатом будет длина s.

См. также: Concat, Copy, Delete, Insert, Pos.

Пример:

var
s : string;
i : word;
begin
s := 'abc';
for i := 1 to Lenth(s) do
s[i] := UpCase(s[i]);
Writeln(s); { ABC }
end.



B.Pascal 7 & Objects/PG - 265 -


Процедура Line модуль Graph
-----------------------------------------------------------------

Назначение: Рисует прямую линию из точки (x1,y1) в точку
(x2,y2).

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure Line(x1, y1, x2, y2: Integer);

Примечания: Рисует прямую, толщина и тип которой задаются
процедурой SetLineStyle, а цвет устанавливается процедурой
SetColor. Для определения того, будет ли строка копироваться на
экран или выводиться с использованием операции XOR, применяйте
SetWriteMode.

Заметим, что

MoveTo(100,100);
LineTo(200,200);

эквивалентно

LineTo(100,100,200,200);
MoveTo(200,200);

Используйте данную процедуру только в том случае, когда те-
кущий указатель находится в одном из концов строки, или когда вы
хотите, чтобы позиция текущего указателя после вычерчивания линии
автоматически изменилась. Заметим, что линия не изменяет текущий
указатель.

Ограничения: Должен использоваться графический режим. Кроме
того, при изображении горизонтальной линии подпрограмма Bar рабо-
тает быстрее, чем Line.


B.Pascal 7 & Objects/PG - 266 -

См. также: LineTo, LineRel, SetWriteMode, GetLineStyle,
MoveTo, Rectangle, SetColor, SetLineStyle.

Пример:

uses Crt, Graph;
var
Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(gd, Gm, '');
if GraphResult <> 0 then
Halt(1);
Randomize;
repeat
Line(Random(200),Random(200),Random(200),Random(200));
until KeyPressed;
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 267 -


Процедура LineRel модуль Graph
-----------------------------------------------------------------

Назначение: Проводит прямую в точку, заданную относительным
расстоянием от текущего указателя (CP).

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure LineRel(Dx,Dy: Integer);

Примечания: Данная процедура вычерчивает прямую линию из те-
кущей точки в точку, заданную относительным расстоянием (Dх,Dу)
от текущего указателя. Процедура рисует прямую, толщина и тип ко-
торой задаются процедурой SetLineStyle, а цвет устанавливается
процедурой SetColor. Относительные команды перемещения и рисова-
ния полезны при вычерчивании различных объектов на экране, у ко-
торых начальная точка может быть изменена (чтобы, например, вы-
чертить ту же самую фигуру в другом месте экрана). Для определе-
ния того, будет ли строка копироваться на экран или выводиться с
использованием операции XOR, применяйте SetWriteMode.

Ограничения: Должен использоваться графический режим.

См. также: GetLineStyle, Line, LineTo, MoveRel, MoveTo,
SetLineStyle, SetWriteMode.

Пример:

uses Graph;
var
Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(gd, Gm, '');
if GraphResult <> 0 then
Halt(1);
begin
MoveTo(1,2);
LineRel(100,100); { провести прямую в точку (101,102) }
end;
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 268 -


Процедура LineTo модуль Graph
-----------------------------------------------------------------

Назначение: Рисует прямую линию из точки, в которой находит-
ся текущий указатель, в точку (X,Y).

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure LineTo(X, Y: Integer);

Примечания: Рисует прямую, толщина и тип которой задаются
процедурой SetLineStyle, а цвет устанавливается процедурой
SetColor.

Заметим, что операторы:

MoveTo(100, 100);
LineTo(200, 200);

эквивалентны вызову:

Line(100, 100, 200, 200);

Первый метод требует больше времени для выполнения и больше-
го объема памяти для выполняемого кода. Используйте процедуру
LineТо только когда текущий указатель находится в одном из концов
прямой. Отметим, что второй метод не изменяет значения текущего
указателя.

Процедура LinеТо перемещает текущий указатель в точку (X,Y).

Ограничения: Должен использоваться графический режим.

См. также: GetLineStyle, Line, LineRel, MoveTo, MoveRel,
SetLineStyle, SetWriteMode.

Пример:

var
Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(gd, Gm, '');
if GraphResult <> 0 then
Halt(1);
Randomize;
repeat
LineTo(Random(200),Random(200));
until KeyPressed;
Readln;
CloseGraph;
end.

B.Pascal 7 & Objects/PG - 269 -


Функция Ln модуль System
-----------------------------------------------------------------

Назначение: Возвращает натуральный логарифм аргумента.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function Ln(x: Real): Real;

Примечания: Параметр x является выражением вещественного ти-
па. Результатом будет натуральный логарифм выражения x.

См. также: Exp.

Функция Lo модуль System
-----------------------------------------------------------------

Назначение: Возвращает младший байт аргумента.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function Lо(x): Byte;

Примечания: Параметр x - это параметр целого типа или пара-
метр длиной в слово. Функция Lо возвращает младший байт x в ка-
честве беззнакового значения.

См. также: Hi, Swap.

Пример:

var
w : word;
begin
w := Lo($1234); { $34 }
end.



B.Pascal 7 & Objects/PG - 270 -


Функция LoadLibrary модуль WinAPI
-----------------------------------------------------------------

Назначение: Загружает библиотечный модуль.

Целевая платформа: Защищенный режим, Windows.

Описание: function LоadLibrary(LibFileName: PChar): THandle;

Примечания: Параметр LibFileName должен указывать на завер-
шающуюся нулем строку с именем загружаемого файла DLL. Возвращае-
мое значение - это описатель загруженной библиотеки в случае ус-
пешного выполнения функции и значение < 32 (код ошибки) в против-
ном случае.

В Windows, если параметр LibFileName не задает диск и ката-
лог, LoadLibrary будет выполнять поиск в следующих каталогах (в
указанном порядке):

* в текущем каталоге;

* в каталоге Windows (имя маршрута этого каталога возвращает
функция GetWindowsDirectory);

* в системном каталоге Windows (имя маршрута этого каталога
возвращает функция GetSystemDirectory);

* в каталогах, перечисленных в переменной операционной среды
PATH.

В защищенном режиме DOS, если параметр LibFileName не задает
диск и каталог, LoadLibrary будет выполнять поиск в следующих ка-
талогах (в указанном порядке):

* в текущем каталоге;

* в каталоге, содержащем файл .EXE текущей прикладной прог-
раммы;

* в каталогах, перечисленных в переменной операционной среды
PATH.


B.Pascal 7 & Objects/PG - 271 -


Значения ошибок, возвращаемых LoadLibrary, перечислены в
следующей таблице:

----------T----------------------------------------------------¬
¦Значение ¦ Смысл ¦
+---------+----------------------------------------------------+
¦ 0 ¦ Нет памяти, запорчен выполняемый файл, либо переме-¦
¦ ¦ щения недопустимы. ¦
¦ ¦ ¦
¦ 2 ¦ Файл не найден. ¦
¦ ¦ ¦
¦ 3 ¦ Маршрут не найден. ¦
¦ ¦ ¦
¦ 5 ¦ Попытка динамической компоновки или совместного ис-¦
¦ ¦ пользования дала нарушение защиты в сети. ¦
¦ ¦ ¦
¦ 6 ¦ Библиотека требует для каждой задачи отдельных сег-¦
¦ ¦ ментов данных. ¦
¦ ¦ ¦
¦ 8 ¦ Для запуска прикладной программы не хватает памяти.¦
¦ ¦ ¦
¦ 10 ¦ Некорректная версия Windows. ¦
¦ ¦ ¦
¦ 11 ¦ Недопустимый файл .EXE (не приложение Windows или¦
¦ ¦ ошибка в образе .EXE). ¦
¦ ¦ ¦
¦ 12 ¦ Приложение создано для другой операционной системы.¦
¦ ¦ ¦
¦ 13 ¦ Приложение версии 4.0 DOS. ¦
¦ ¦ ¦
¦ 14 ¦ Неизвестный тип .EXE. ¦
¦ ¦ ¦
¦ 15 ¦ Попытка в защищенном режиме (стандартном или улуч-¦
¦ ¦ шенном режиме 386) загрузить файл .EXE, созданный в¦
¦ ¦ более ранней версии Windows. ¦
¦ ¦ ¦
¦ 16 ¦ Попытка загрузить второй экземпляр файла .EXE, со-¦
¦ ¦ держащий несколько записываемых сегментов данных. ¦
¦ ¦ ¦
¦ 17 ¦ Попытка в режиме EMS с большим кадром загрузить¦
¦ ¦ второй экземпляр приложения, которая компонуется с¦
¦ ¦ уже используемой неразделяемой DLL. ¦
¦ ¦ ¦
¦ 18 ¦ Попытка в реальном режиме загрузить прикладную¦
¦ ¦ программу, помеченную только для защищенного режи-¦
¦ ¦ ма. ¦

B.Pascal 7 & Objects/PG - 272 -

----------T----------------------------------------------------¬
¦Значение ¦ Смысл ¦
+---------+----------------------------------------------------+
¦ ¦ ¦
¦ 19 ¦ Была попытка загрузки упакованного выполняемого¦
¦ ¦ файла. Перед загрузкой файл должен быть распакован.¦
¦ ¦ ¦
¦ 20 ¦ Недопустимая библиотека динамической компоновки¦
¦ ¦ (DLL), или одна из DLL, требуемая для выполнения¦
¦ ¦ прикладной программы, была недопустимой. ¦
¦ ¦ ¦
¦ 21 ¦ Приложение требует 32-битовых расширений Microsoft¦
¦ ¦ Windows. ¦
L---------+-----------------------------------------------------

См. также: FreeLibrary, GetProcAddress.



B.Pascal 7 & Objects/PG - 273 -


Функция LoadResource модуль WinAPI
-----------------------------------------------------------------

Назначение: Загружает ресурс в память.

Целевая платформа: Защищенный режим, Windows.

Описание: function LoadResource(Instance: THandle; ResInfo:
THandle): THandle;

Примечания: Загружает ресурс, указанный параметром ResInfo,
из выполняемого файла, заданного параметром Instance, и возвраща-
ет описатель содержащего ресурс блока глобальной памяти. Если ре-
сурс не найден, возвращаемое значение равно 0. Параметр Instance
- это описатель экземпляра модуля, получаемый обычно из перемен-
ной HInstance модуля System или создаваемый функцией LoadLibrary.
Параметр ResInfo должен быть описателем информации о ресурсе,
созданным подпрограммой FindResource.

Функция LoadResoure загружает ресурс в память только в том
случае, если он не был ранее загружен. В противном случае она
просто возвращает описатель существующего ресурса. LoadResource
увеличивает на 1 значения счетчика ссылок для ресурса. Ресурс ос-
тается загруженным, пока счетчик ссылок путем вызовов
FreeResource не уменьшается до нуля.

Ограничения: Фактическая загрузка ресурса не выполняется,
пока для трансляции описателя, возвращаемого функцией
LoadResource, в указатель на данные ресурса не вызывается функция
LockResource.



B.Pascal 7 & Objects/PG - 274 -


Функция LoadString модуль WinAPI
-----------------------------------------------------------------

Назначение: Загружает в память строку ресурса.

Целевая платформа: Защищенный режим, Windows.

Описание: function LoadResource(Instance: THandle; ID: Word;
Buffer: PChar; BufferMax: Integer): Integer;

Примечания: Загружает из выполняемого файла, заданного пара-
метром Instance, строку ресурса, заданного параметром ID. Пара-
метр Instance - это описатель экземпляра модуля, получаемый обыч-
но из переменной HInstance модуля System или создаваемый функцией
LoadLibrary. Параметр ID - это целочисленный идентификатор на
загружаемую строку. Параметры Buffer и BufferMax задают адрес и
размер буфера, в который копируется строка с завершающим нулем.
Возвращаемое значение представляет собой число копируемых в буфер
символов или 0, если строка ресурсов не существует.

Функция LoByte модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает младший байт параметра Word:

Целевая платформа: Защищенный режим, Windows.

Описание: function LoByte(A: Word): Byte;

Примечания: LoByte возвращает младший байт значения, задан-
ного A.

См. также: HiByte.



B.Pascal 7 & Objects/PG - 275 -


Функция LockResource модуль WinAPI
-----------------------------------------------------------------

Назначение: Блокирует ресурс.

Целевая платформа: Защищенный режим, Windows.

Описание: function LockByte(ResData: THAndle): Pointer;

Примечания: LockByte блокирует ресурс, заданный параметром
ResData, и возвращает указатель на первый байт ресурса. Если ре-
сурс является выгружаемым, то счетчик его блокировки увеличивает-
ся на 1, и ресурс остается в памяти, пока счетчик блокировки не
будет уменьшен до 0 с помощью вызовов функции UnlockResource.

Возвращаемое значение - это указатель на первый байт ресурса
при успешном выполнении LockResource и nil в противном случае.

Ограничения: Функции LockResource не следует передавать зна-
чение, возвращаемое FindResource.

См. также: FreeResource, LoadResource.

Функция LockSegment модуль WinAPI
-----------------------------------------------------------------

Назначение: Блокирует выгружаемый сегмент.

Целевая платформа: Защищенный режим, Windows.

Описание: function LockSegment(Segment: Word): THandle;

Примечания: Параметр Segment задает селектор блокируемого
сегмента. Если сегмент выгружаемый, то счетчик блокировки увели-
чивается на 1, и сегмент будет оставаться в памяти, пока счетчик
блокировки для него путем вызова функции UnlockSegment не станет
равным нулю. Для невыгружаемых сегментов функция LockSegment не
действует. В случае успешного выполнения LockSegment возвращает
ненулевое значение; если сегмент был выгружен, или произошла
ошибка, то возвращаемое значение равно 0.

См. также: UnlockSegment.



B.Pascal 7 & Objects/PG - 276 -


Функция LoWord модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает младшее слово параметра типа Longint.

Целевая платформа: Защищенный режим, Windows.

Описание: function LoWord(A: Longint): Byte;

Примечания: LoWord возвращает младший байт значения, задан-
ного A.

См. также: HiWord.



B.Pascal 7 & Objects/PG - 277 -


Функция Low модуль System
-----------------------------------------------------------------

Назначение: Возвращает младшее значение в диапазоне аргумен-
та.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Low(X);

Примечания: Параметр X - это идентификатор типа или ссылка
на переменную. Тип, обозначенный X, или тип переменной, обозна-
ченный X, должен быть порядковым типом, типом массива или строко-
вым типом. Для порядкового типа функция Low возвращает младшее
значение в диапазоне типа. Для типа массива Low возвращает млад-
шее значение в диапазоне индексного типа массива. Для строкового
типа Low возвращает 0. Для открытого массива или строкового пара-
метра Low возвращает 1.

См. также: High.

Пример:

{ под Windows используйте WinCrt }
var
A: array[1..100] of Integer;
I: Integer;
begin
for I := Low(A) to High(A) do A(I) := 0;
end.

type
TDay = (Понедельник, Вторник, Среда, Четверг, Пятница,
Суббота, Воскресенье);
const
DayName: array[TDay] of string[3] = (
'Пон', 'Втр', 'Срд', 'Чет', 'Птн', 'Суб', 'Вос');
var
Day: TDAy:
Hourse: array[TDay] of 0..24;
begin
for Day := Low(TDay) to High(TDay) do
begin
Write('Сколько рабочих часов в ', DayName[Day], '? ');
Readln(Hours[Day]);
end;
end.



B.Pascal 7 & Objects/PG - 278 -


Процедура LowVideo модуль Crt
-----------------------------------------------------------------

Назначение: Выбирает символы с пониженной яркостью.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure LowVideo;

Примечания: В модуле Crt имеется байтовая переменная
TextAttr, которая используется для хранения текущих атрибутов
изображения. Процедура LowVideo очищает для цвета символов пере-
менной TextAttr бит подсветки. Таким образом, цвета 0..7 отобра-
жаются в цвета 8..15.

См. также: HighVideo, NormVideo, TextColor, TextBackGround.

Пример:

uses Crt;
begin
TextAttr := White;
LowVideo; { цвет становится светло-серым }
end.


Функция MakeLong модуль WinAPI
-----------------------------------------------------------------

Назначение: Создает из двух значений типа Word значение типа
Longint.

Целевая платформа: Защищенный режим, Windows.

Описание: function MakeLong(A, B: Word): Longint;

Примечания: Параметры A и B задают младшее и старшее слово
возвращаемого значения.



B.Pascal 7 & Objects/PG - 279 -


Функция MaxAvail модуль System
-----------------------------------------------------------------

Назначение: Возвращает размер наибольшего свободного блока в
динамически распределяемой области памяти.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function MaxAvail: Longint;

Примечания: MaxAvail возвращает размер наибольшего непрерыв-
ного свободного блока в динамически распределяемой области памя-
ти, который можно распределить с помощью процедуры New или
GetMem. Для получения общего объема свободной динамически распре-
деляемой памяти используйте функцию MemAvail.

В реальном режиме DOS MaxAvail сравнивает размер наибольшего
свободного блока ниже указателя динамически распределяемой памяти
с размером свободной памяти над указателем и возвращает большее
из двух значений. Минимальные и максимальные требования к динами-
чески распределяемой области ваша программа может задать с по-
мощью директивы $M.

В защищенном режиме DOS MaxAvail сравнивает размер наиболь-
шего свободного блока ниже указателя динамически распределяемой
памяти внутри пространства вторичного распределения с размером
свободной памяти в глобальной динамически распределяемой области
(значение, возвращаемое GlobalCompact) и возвращает большее из
двух значений.

Прочее: См. также процедуру MemAvail.

Пример:

type
PBuffer = ^TBuffer;
TBuffer = array[0..16383] of Chap;
var
Buffer: PBuffer;
begin
.
.
.
if MaxAvail < SizeOf(TBuffer) then
Writeln('Не хватает памяти');
else
begin
{ выделить память в динамически распределяемой области }
New(Buffer);
.
.

B.Pascal 7 & Objects/PG - 280 -

.
end;
.
.
.
end.

Функция MemAvail модуль System
-----------------------------------------------------------------

Назначение: Возвращает число свободных блоков в динамически
распределяемой области памяти.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function MemAvail: Longint;

Примечания: Данное число определяется путем сложения разме-
ров всех свободных блоков, расположенных ниже указателя динами-
чески распределяемой области памяти, с объемом свободной памяти,
расположенной выше указателя динамически распределяемой области.
Заметим, что пока нет обращений к процедурам Dispose и FrееМем,
из-за фрагментации динамически распределяемой области памяти ма-
ловероятно, что будет доступен блок памяти, размер которого соот-
ветствует возвращаемому значению. Для получения размера наиболь-
шего свободного блока используйте функцию МахAvail.

В реальном режиме DOS MamAvail вычисляется путем сложения
размеров всех свободных блоков ниже указателя динамически распре-
деляемой памяти с размером свободной памяти над указателем и
возвращает большее из двух значений. Минимальные и максимальные
требования к динамически распределяемой области ваша программа
может задать с помощью директивы $M.

В защищенном режиме DOS MemAvail вычисляет объем свободной
динамически распределяемой памяти с помощью вызова функции
GetFreeSpace и сложения этого размера с размером каждого свобод-
ного блока в области вторичного распределения администратора ди-
намически распределяемой области памяти.

См. также: МахAvail.

Пример:

{ под Windows используйте WinCrt }
begin
Writeln('Доступно ', MemAvail, 'байт');
Writeln('Наибольший свободный блок равен ', MaxAvail,
' байт.');
end.



B.Pascal 7 & Objects/PG - 281 -


Функция MessageBox модуль WinAPI
-----------------------------------------------------------------

Назначение: Выводит на экран и обслуживает окно сообщений.

Целевая платформа: Защищенный режим, Windows.

Описание: function MessageBox(WndParent: THandle; Txt,
Caption: PChar; TextType: Word): Integer;

Примечания: Данная функция выводит и обслуживает диалоговое
окно, содержащее заданный заголовок и сообщение, а также комбина-
цию предопределенных пиктограмм, описанных константами mb_XXXX.

Параметр WndHandle - это описатель окна, которому принадле-
жит окно сообщений или 0, если окно сообщений не имеет владельца.
Параметр Text представляет собой указатель на строку с завершаю-
щим нулем, содержащую выводимое сообщение. Параметр Caption - это
указатель на строку с завершающим нулем, которая содержит заголо-
вок диалогового окна. Если Caption имеет значение nil, то исполь-
зуется 'Error'. Параметр TextType специфицирует пиктограмму, ко-
мандные кнопки и атрибуты окна сообщения - это комбинация конс-
тант mb_XXXX.

Если для создания диалогового окна не хватает памяти, то
MessageBox возвращает 0. В противном случае возвращается значение
константы id_XXXX, соответствующее активизированной для заверше-
ния диалога командной кнопке. См. определение констант id_XXXX.

Когда создается модальное окно для указания, что система на-
ходится в нижних адресах памяти, строки, на которые указывают
Text и Caption, не должны извлекаться из файла ресурса, поскольку
загрузка ресурса может завершиться неудачно. Если прикладная
программа вызывает MessageBox и задает mb_IconHand и
mb_SystemModal, то, независимо от доступной памяти, Windows выво-
дит результирующее окно сообщения. Когда задаются эти флаги,
Windows ограничивает длину текста окна сообщения тремя строками.
Однако, так как Windows не разбивает автоматически строки, чтобы
они помещались в окно сообщений, строка сообщений должна содер-
жать в нужных местах возвраты каретки.

Если окно сообщений создается при наличии диалогового окна,
используйте в качестве описателя диалогового окна HWnd. HWnd не
следует использовать для идентификации дочернего окна.

В защищенном режиме DOS функция MessageBox не создает диало-
гового окна. Вместо этого она выводит на экране заголовок и сооб-
щение, за которыми следует список элементов выбора, соответствую-
щих требуемому набору командных кнопок, например:

MessageBox(0, 'Сохранить текущие изменения?', 'TextEdit',
mbYesNoCancel);

B.Pascal 7 & Objects/PG - 282 -


будет выводить:

TextEdit: Сохранить текущие изменения?
Yes (Y), No (N), Cancel (C):

и ждет от пользователя нажатия клавиши Y, N или C.

В защищенном режиме DOS параметр WndParent игнорируется, как
и все константы mb_XXXX, не определяющие командные кнопки.

См. также: Константы Id_XXXX, mb_XXXX.



B.Pascal 7 & Objects/PG - 283 -


Процедура MkDir модуль System
-----------------------------------------------------------------

Назначение: Создает подкаталог.

Целевая платформа: Защищенный режим, Windows.

Описание: procedure MkDir(s: String);

Примечания: Параметр s представляет собой выражение строко-
вого типа. Создается новый каталог с маршрутом доступа, заданным
строкой s. Последний элемент этой записи не может задавать имя
существующего файла.

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае. Те же
функции выполняет процедура CreateDir, но она воспринимает не
строку Паскаля, а строку с завершающим нулем.

См. также: RmDir, ChDir, GetDir.

Пример:

begin
{$I-}
{ получить из командной строки имя каталога }
MkDir(ParamStr(1));
If IOResult <> 0 then
Writeln('создание каталога невозможно');
else
Writeln('создан новый каталог');
end.



B.Pascal 7 & Objects/PG - 284 -


Процедура Move модуль System
-----------------------------------------------------------------

Назначение: Копирует заданное число непрерывных байт из
заданного диапазона в указанный целевой диапазон.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure Моvе(var Src, Dst; Count: Word);

Примечания: Параметры Src и Dst представляют собой ссылки на
переменные любого типа. Параметр Count - это выражение типа Word.
Процедура Моvе копирует байтовый блок из Src, размер которого (в
байтах) задается параметром Count, в блок, начинающийся первого
байта, заданного параметром Dst. С данной процедурой следует ра-
ботать аккуратно, поскольку никаких проверок не выполняется.

Когда области, задаваемые параметрами Src и Dst, находятся
в одном сегменте, то есть когда адреса сегментов у них совпадают,
то процедура Моvе автоматически обнаруживает и компенсирует ка-
кие-либо перекрытия. Для статически и динамически распределяемых
переменных внутрисегментных перекрытий никогда не происходит (ес-
ли только это не делается специально) и, таким образом, они не
могут обнаруживаться.

Там, где это возможно, для определения параметра Count сле-
дует использовать функцию SizeOf.

См. также: FillChar.

Пример:

var
a : array[1..4] of char;
b : longint;
begin
Move(a, b, SizeOf(a)); { для надежности исполь-
зуется функция SizeOf }
end.



B.Pascal 7 & Objects/PG - 285 -


Процедура MoveRel модуль Graph
-----------------------------------------------------------------

Назначение: Перемещает текущий указатель на расстояние, за-
данное относительными координатами от его текущей позиции.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure MoveRel(Dx, Dy: Integer);

Примечания: Процедура МоvеRеl перемещает текущий указатель в
точку, заданную относительным расстоянием (Dх,Dy) от точки, в ко-
торой находится текущий указатель.

Относительные команды перемещения и рисования полезны при
вычерчивании различных объектов на экране, у которых начальная
точка может быть изменена (чтобы, например, вычертить ту же самую
фигуру в другом месте экрана).

Ограничения: Должен использоваться графический режим.

См. также: GetMaxX, GetMaxY, GetX, GetY, LineRel, LineTo,
MoveTo.

Пример:

uses Graph;
var
Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(gd, Gm, '');
if GraphResult <> 0 then
Halt(1);
MoveTo(1,2);
MoveRel(10,10) { переместить в точку с координатами
(11,12) }
PutPixel(GeyX, GetY, GetMaxColor);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 286 -


Процедура MoveTo модуль Graph
-----------------------------------------------------------------

Назначение: Перемещает текущий графический указатель в точку
(x,y).

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure MoveTo(x, y: Integer);

Примечания: Текущий указатель перемещается в точку с коорди-
натами (x,y). Текущий указатель аналогичен курсору, который ис-
пользуется в текстовом режиме. Различает их то, что текущий ука-
затель невидим. Текущий указатель перемещают процедуры:

ClearDevice InitGraph MoveRel SetGraphMode
ClearViewPort LineRel MoveTo SetViewPort
GraphDefaults LineTo OutText

Если активна текущая область просмотра, то текущий указатель
зависит от данной области (значения x и y будут суммироваться со
значениями x1, y1 текущей области просмотра). В границах текущей
области просмотра текущий указатель никогда не отсекается.

См. также: GetMaxX, GetMaxY, GetX, GetY, MoveRel.

Пример:

uses Graph;
var
Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(gd, Gm, '');
if GraphResult <> 0 then
Halt(1);
MoveTo(0,0); { левый верхний угол окна }
LineTo(GetMaxX, GetMaxY);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 287 -


Функция MsDos модуль Dos
-----------------------------------------------------------------

Назначение: Выполняет функциональный вызов DOS.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание:

procedure MsDos(var Regs: Registers); { DOS }

procedure MsDos(var Regs: TRegisters); { Windows }

Примечания: Результат обращения к функции MsDos будет тот же
самый, что и при обращении к функции Intr с номером прерывания
IntNo $21. Registers представляет собой запись, описанную в моду-
ле Dos. Если вы пишете программу для Windows, используйте
тип TRegisters.

Ограничения: Программные прерывания, для которых на входе
требуется задание определенных значений в SР или SS или изменяют
значения SР и SS на выходе, с использованием данной функции вы-
полняться не могут.

См. также: Dos3Call, Registers, TRegisters, Intr.

Процедура New модуль System
-----------------------------------------------------------------

Назначение: Создает новую динамическую переменную и устанав-
ливает на нее указатель.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure New(var p: Pointer);

Примечания: Параметр p является переменной-указателем и от-
носится к указателям любого типа. Размер выделяемого блока памяти
соответствует размеру того типа, на который указывает p. На вновь
созданную переменную можно ссылаться с помощью p^. Если для выде-
ления памяти под новую динамическую переменную в динамически
распределяемой области недостаточно свободной памяти, то во время
выполнения программы происходит ошибка. (Этой ошибки можно избе-
жать - см. раздел "Функция HeapError" в Главе 21 "Руководства по
языку".)

См. также: Dispose, FreeMem, HeapError, GetMem.



B.Pascal 7 & Objects/PG - 288 -


Процедура NormVideo модуль Crt
-----------------------------------------------------------------

Назначение: Выбирает обычный атрибут текста для позиции кур-
сора во время загрузки и запуска программы.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure NormVideo;

Примечания: В блоке Crt имеется байтовая переменная
(ТехtAttr), которая используется для сохранения текущего видеоат-
рибута. Данная процедура восстанавливает для TехtAttr то значе-
ние, которое эта переменная имела до запуска программы.

См. также: HighVideo, LowVideo, TextColor, TextBackGround.

Процедура NoSound модуль Crt
-----------------------------------------------------------------

Назначение: Выключает внутренний динамик.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure NoSound;

Примечания: Следующий фрагмент программы вызывает звучание
сигнала частотой 440 герц в течении половины секунды.

Sound(440);
Delay(500);
NoSound;

См. также: Sound.



B.Pascal 7 & Objects/PG - 289 -


Функция Odd модуль System
-----------------------------------------------------------------

Назначение: Проверяет, является ли аргумент нечетным числом.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Odd(x: Longint): Boolean;

Примечания: Параметр x - это выражение длинного целого типа.
Результат принимает значение Truе, если x представляет собой не-
четное число и False - в противном случае.

Функция Ofs модуль System
-----------------------------------------------------------------

Назначение: Возвращает для заданного объекта смещение.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Ofs(x): Longint;

Примечания: Параметр x представляет собой любую переменную
или идентификатор процедуры или функции. Результат длиной в слово
представляет собой смещение для x.

См. также: Seg, Addr.



B.Pascal 7 & Objects/PG - 290 -


Функция Ord модуль System
-----------------------------------------------------------------

Назначение: Возвращает порядковый номер для значения пере-
числимого типа.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Ord(x): Longint;

Примечания: Параметр x представляет собой выражение перечис-
лимого типа. Результат имеет длинный целый тип и его значение яв-
ляется порядковым значением для x.

См. также: Chr.

Процедура OutText модуль Graph
-----------------------------------------------------------------

Назначение: Пересылает строку на устройство вывода в то
место, в котором находится текущий указатель.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure ОutTехt(TextString: String);

Примечания: Параметр TextString выводится в месте расположе-
ния текущего указателя. При этом используются текущие параметры
выравнивания. Если строка слишком длинная и не умещается на экра-
не или в текущей области просмотра, то она усекается. Если акти-
вен шрифт, используемый по умолчанию (шрифт с побитовым отображе-
нием), а строка слишком велика и не умещается на экране, то она
не выводится.

В данной процедуре используется шрифт, установленный проце-
дурой SetTextStyle. Чтобы обеспечить совместимость выполняемого
кода при использовании нескольких шрифтов, для определения разме-
ров строки используйте вызовы процедур TехtWidth и TехtHeight.

Процедура OutText использует параметры вывода, установленные
процедурой SetTextJustify (выравнивание, центрирование, поворот
на 90 градусов и т.д.).

Текущий указатель изменяется процедурой OutText только в том
случае, если направление вывода текста горизонтальное и задано
выравнивание по левой границе. Направление вывода текста (гори-
зонтальное или вертикальное) задается с помощью процедуры
SetTextStyle, а выравнивание - с помощью процедуры SetTextJustify
(текущий указатель слева от строки, центрируется или расположен
справа от строки, записывается над строкой, под строкой).


B.Pascal 7 & Objects/PG - 291 -

Если параметр горизонтального выравнивания текста, установ-
ленный с помощью процедуры SetTextJustify, равен CenterText или
RightText, то Y элементов текущего указателя (СРY) будут смещены
следующим образом:

CPY := CPY + TextHeight(TextString)

Если параметр горизонтального выравнивания текста, установ-
ленный с помощью процедуры SetTextJustify, равен LeftText, то Х
элементов текущего указателя (СРХ) будут смещены следующим обра-
зом:

CPX := CPX + TextWidth(TextString)

В следующем примере в блоке 1 выводится ABCDEF и текущий
указатель перемещается (текст выводится горизонтально и выравни-
вается слева), в блоке 2 выводится ABC а DEF записывается справа
над этим текстом, так как текст выравнивается справа, аналогично,
в блоке 3 выводится текст ABC и над ним справа выводится DEF (так
как текст выводится вертикально).

program CPupdate;
uses Graph;
var
Driver, Mode : integer;
begin
Driver := Detect;
InitGraph(Driver, Mode, '');
if GraphResult < 0 then
Halt(1);
{ блок 1 }
MoveTo(0, 0);
SetTextStyle(DefaultFont, HorizDir, 1) { разм. симв. =1 }
SetTextJustify(LeftText, TopText);
OutText('ABC'); { текущий указатель изменяется }
OutText('DEF'); { текущий указатель изменяется }
{ блок 2 }
MoveTo(100, 50);
SetTextStyle(DefaultFont, HorizDir, 1) { разм. симв. =1 }
SetTextJustify(RightText, TopText);
OutText('ABC'); { текущий указатель изменяется }
OutText('DEF'); { текущий указатель изменяется }
{ блок 3 }
MoveTo(100, 100);
SetTextStyle(DefaultFont, VerDir, 1) { разм. симв. =1 }
SetTextJustify(LeftText, TopText);
OutText('ABC'); { текущий указатель не изменяется }
OutText('DEF'); { текущий указатель не изменяется }
Readln;
CloseGraph;
end.

Процедурой OutTextXY текущий указатель никогда не изменяет-

B.Pascal 7 & Objects/PG - 292 -

ся.

Выбираемый по умолчанию шрифт (шрифт с битовым образом 8х8)
не границе экране не отсекается. В этом случае, если какая-либо
часть строки не может быть помещена на экран, текст просто не вы-
водится. Следующие операторы, например, не приведут к выводу
текста:

SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn);
SetTextJustify(LeftText, TopText);
OutTextXY(-5, 0); { эта точка выходит за границу экрана }
OutText(GetMaxX -1, 0, 'ABC'); { буква 'A' }
{ 'BC' не помещаются }

Однако векторные шрифты отсекаются на границе экрана.

Ограничения: Должен использоваться графический режим.

См. также: OutTextXY, SetTextStyle, SetTextJustify,
GetTextSettings, TextHeight, TextWidth.

Пример:

uses Graph;
var
Gd, Gm : integer;
begin

Gd := Detect;
InitGraph(gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
OutText('Легко использовать');
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 293 -


Процедура OutTextXY модуль Graph
-----------------------------------------------------------------

Назначение: Пересылает строку на устройство вывода.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure OutTextXY(Х, Y: Integer; S: String);

Примечания: Строка, заданная параметром S, выводится в точке
(Х,У). Если строка слишком длинная и выходит за пределы экрана
или текущей области просмотра, то она усекается.

Процедура OutText используется для вывода текста в месте
расположения текущего указателя, процедура OutTextXY используется
для вывода текста в любом заданном месте экрана.

См. также: OutText, SetTextStyle, SetTextJustify,
GetTextSettings, TextHeight, TextWidth.

Пример:

uses Graph;
var
Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
MoveTo(0,0);
OutText('Неэффективно');
OutTextXY(GetX,GetY,'Также неэффективно');
OutTextXY(0,0,'Превосходно!'); {заменяет выведенное ранее}
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 294 -


Процедура OvrClearBuf модуль Overlay
-----------------------------------------------------------------

Назначение: Очищает оверлейный буфер.

Целевая платформа: Реальный режим.

Описание: procedure OvrClearBuf;

Примечания: Перед вызовом процедуры из оверлейного буфера
выводятся все загруженные в данный момент оверлеи. Это приведет к
тому, что при последующих обращениях к оверлейным программам
оверлеи будут загружаться из оверлейного файла (или из памяти
EMS). Если процедура OvrClearBuf вызывается из оверлея, то перед
возвратом из OvrClearBuf этот оверлей будет немедленно перезагру-
жен.

Подсистема управления оверлеями не требует от вас вызова
процедуры OvrClearBuf. Фактически, при обращениях к этой процеду-
ре производительность вашей прикладной программы только ухудшит-
ся, поскольку это приведет к необходимости перезагрузки оверлеев.
Процедура OvrClearBuf предназначена только для особых случаев,
например, для временного освобождения памяти, занимаемой оверлей-
ным буфером.

См. также: OvrGetBuf, OvrSetBuf.

Процедура OvrGetBuf модуль Overlay
-----------------------------------------------------------------

Назначение: Возвращает текущий размер оверлейного буфера.

Целевая платформа: Реальный режим.

Описание: function OvrGetBuf; Longint;

Примечания: Размер оверлейного буфера устанавливается с по-
мощью обращения к процедуре OvrSetBuf. Первоначально оверлейный
буфер имеет минимальный возможный размер, соответствующий размеру
наибольшего оверлея. При выполнении оверлейной программы буфер
такого размера выделяется автоматически. Начальный размер буфера
может превышать 64К, поскольку он включает в себя и код наиболь-
шего оверлея, и его корректировочную информацию.

См. также: OvrInit, OvrInitEMS, OvrSetBuf.

Пример:

{$M 16384,65536,655360 }
use Overlay;
const
ExtractSize = 49152; { 48K }

B.Pascal 7 & Objects/PG - 295 -

begin
OvrInit('EDITOR.OVR');
Writeln('Начальный размер оверлейного буфера = ',
OvrGetBuf, 'байт');
OvrSetBuf(OvrGetBuf+ExtractSize);
Writeln('Размер оверлейного буфера увеличен теперь до ',
OvrGetBuf, 'байт');
end.

Функция OvrGetRetry модуль Overlay
-----------------------------------------------------------------

Назначение: Возвращает текущий размер пробной области.

Целевая платформа: Реальный режим.

Описание: function OvrRetry: Longint;

Примечания: Данная функция текущий размер пробной области,
значение которой устанавливается OvrSetRetry.

См. также: OvrSetRetry.



B.Pascal 7 & Objects/PG - 296 -


Процедура OvrInit модуль Overlay
-----------------------------------------------------------------

Назначение: Инициализирует подсистему управления оверлеями и
открывает оверлейный файл.

Целевая платформа: Реальный режим.

Описание: procedure OvrInit(FileName: String);

Примечания: Если в параметре имени файла FileName буквенная
метка дисковода или подкаталог не заданы, то подсистема управле-
ния оверлеями ищет файл в текущем каталоге, в каталоге, содержа-
щем файлы .EXE (при работе в DOS версии 3.х) и в каталогах, за-
данных с помощью переменной операционной среды PATH. Возможные
ошибки могут быть получены с помощью переменной операционной сре-
ды OvrResult. Значение ovrOk говорит об успешном завершении,
ovrError показывает, что оверлейный файл имеет неправильный фор-
мат, или что программа не содержит оверлеев. Значение ovrNotFound
означает, что не найден оверлейный файл.

В случае ошибки подсистема управления оверлеями остается не-
установленной и попытки вызова оверлейной программы приведут к
ошибке этапа выполнения 208 (Overlay manager not installed - ад-
министратор оверлеев не установлен).

Процедура OvrInit должна вызываться перед любыми другими
процедурами подсистемы управления оверлеями.

См. также: OvrGetBuf, OvrInitEMS, OvrSetBuf.

Пример:

use Overlay;
const
begin
OvrInit('EDITOR.OVR');
if OvrResult <> ovrOk then
begin
case OvrResult of
ovrError: Writeln('Программа не содержит оверлеев');
ovrNotFound: Writeln('Оверлейный файл не найден');
end;
Halt(1);
end;
end.

Процедура OvrInitEMS модуль Overlay
-----------------------------------------------------------------

Назначение: Если это возможно, загружает оверлейный файл в
память EMS.

B.Pascal 7 & Objects/PG - 297 -


Целевая платформа: Реальный режим.

Описание: procedure OvrInitEMS;

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

Возможные ошибки могут быть получены с помощью переменной
операционной среды OvrResult. Значение ovrOk говорит об успешном
завершении, ovrError показывает, что процедура OvrInit заверши-
лась неудачно или не была вызвана, ovrIOError говорит о том, что
при чтении оверлейного файла произошла ошибка, ovrNoEMSDriver оз-
начает, что не найден драйвер расширенной памяти, ovrNoEMSMemory
- что для загрузки оверлейного файла в памяти EMS нет достаточно-
го пространства.

В случае ошибки подсистема управления оверлеями будет про-
должать работу, но оверлеи будут считываться с диска.

Драйвер расширенной памяти должен отвечать соглашениям фирм
Lotus, Intel и Microsoft (Expanded Memory Specification - EMS).
Если вы используете псевдодиск, размещенный в дополнительной па-
мяти, то нужно убедиться в том, что команда, загружающая в файле
CONFIG.SYS драйвер виртуального диска, оставляет некоторый сво-
бодный объем расширенной памяти, который может использовать ваша
прикладная задача.

См. также: OvrGetBuf, OvrInit, OvrSetBuf, OvrReault.

B.Pascal 7 & Objects/PG - 298 -


Пример:

use Overlay;
const
begin
OvrInit('EDITOR.OVR');
if OvrResult <> ovrOk then
begin
Writeln('Подсистема управления оверлеями',
' не установлена из-за ошибки');
Halt(1);
end;
OvrInitEMS;
case OvrResult of
ovrIOError: Writeln('Ошибка ввода-вывода при чтении',
' оверлейного файла');
ovrNoEMSDriver: Writeln('Не установлен драйвер',
' дополнительной памяти');
ovrNoEMSMemory('Не хватает объема памяти EMS');
else
Writeln('Для более быстрой работы с оверлеями',
' используется память EMS');
end;
end.



B.Pascal 7 & Objects/PG - 299 -


Процедура OvrSetBuf модуль Overlay
-----------------------------------------------------------------

Назначение: Устанавливает размер оверлейного буфера.

Целевая платформа: Реальный режим.

Описание: procedure OvrSetBuf(BufSize: Longint);

Примечания: Параметр BufSize должен быть больше или равен
начальному размеру оверлейного буфера и меньше или равен MemAvail
+ OvrGetBuf. Начальный размер оверлейного буфера представляет со-
бой размер, возвращаемый процедурой OvrGetBuf перед обращениями к
OvrSetBuf. Если заданный размер превышает текущий размер, то из
начала динамически распределяемой области добавляется дополни-
тельная память, и, таким образом, размер динамически распределяе-
мой области памяти уменьшается. Если же заданный размер меньше
текущего, то избыточное пространство присоединяется к динамически
распределяемой области.

Процедура OverSetBuf требует, чтобы динамически распределяе-
мая область памяти была пустой. Если с помощью процедур New и
GetMem уже выделены динамические переменные, то возникает ошибка.
Поэтому необходимо убедиться в том, что процедура OvrSetBuf ис-
пользуется перед вызовом процедуры InitGraph, поскольку процедура
InitGraph выделяет память в динамически распределяемой области,
после чего все обращения к процедуре OvrSetBuf игнорируются.

Если для увеличения размера оверлейного буфера вы используе-
те процедуру OvrSetBuf, то для соответствующего увеличения мини-
мального размера динамически распределяемой области в программу
необходимо также включить директиву компилятора $M.

Возможные ошибки могут быть получены с помощью переменной
OvrResult. Значение ovrOk говорит об успешном завершении,
ovrError - о том, что процедура OvrInit завершилась неудачно или
не была вызвана, что значение BufSize слишком мало или что для
увеличения размера оверлейного буфера не хватает памяти.

См. также: OvrGetBuf, OvrInit, OvrInitEMS, OvrResult, конс-
танты ovXXXX.

Пример:

{$M 17384,65536,655360}
use Overlay;
const
ExtractSize = 49152; { 48K }
begin
OvrInit('EDITOR.OVR');
OvrSetBuf(OvrGetBuf + ExtactSize);
end.

B.Pascal 7 & Objects/PG - 300 -


Процедура OvrSetRetry модуль Overlay
-----------------------------------------------------------------

Назначение: Устанавливает размер пробной области в оверлей-
ном буфере.

Целевая платформа: Реальный режим.

Описание: procedure OvrSetRetry(Size: Longint);

Примечания: Если после размещения оверлея в буфере до конца
буфера остается Size байт, он автоматически помещается в пробную
область. Любое свободное пространство в оверлейном буфере расс-
матривается как часть пробной области. В целях совместимости с
более ранними версиями администратора оверлеев по умолчанию проб-
ная область имеет нулевой размер, что приводит к запрету механиз-
ма проб/повторов.

Эмпирической формулы для определения оптимального размера
пробной области не существует, однако эксперименты показывают,
что наилучшие результаты дают значения от 1/3 до 1/2 оверлейного
буфера.

См. также: OvrGetRetry.

Пример:

OvrInit'PROG.OVR');
OvrSetBuf(BufferSize);
OvrSetRetry(BufferSize div 3);



B.Pascal 7 & Objects/PG - 301 -


Процедура PackTime модуль Dos
-----------------------------------------------------------------

Назначение: Преобразует запись DateTime (дата и время) в че-
тырехбайтовое значение, конвертируя длинный целый тип представле-
ния даты и времени, используемый процедурой SetTime.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание:

{ DOS }
procedure PackTime(var DT: DateTime; var Time: Longint);

{ Windows }
procedure PackTime(var DT: TDateTime; var Time: Longint);

Примечания: Запись DateTime описана в модуле Dos. Для полей
данной записи не выполняется проверка на правильность границ. Ес-
ли вы пишете программу, используя модуль WinDos, применяйте тип
TDateTime. См. описание данного типа.

См. также: UnPackTime, GetTime, SetTime, GetFTime,
SetFTime.

Функция ParamCount модуль System
-----------------------------------------------------------------

Назначение: Возвращает число параметров, переданных в ко-
мандной строке.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function ParamCount: Word;

Примечания: Разделителями служат пробелы и символы табуля-
ции.

См. также функцию ParamStr.

Пример:

{ в Windows используйте WinCrt }
begin
if ParamCount < 1 then
Writeln('В командной строке нет параметров');
else
Writeln(ParamCount,' параметров');
end.


B.Pascal 7 & Objects/PG - 302 -


Функция ParamStr модуль System
-----------------------------------------------------------------

Назначение: Возвращает заданный параметр командной строки.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: function РаrамStr(Indx): String;

Примечания: Параметр Indx представляет собой выражение типа
Word.. Данная функция возвращает из командной строки параметр,
номер которого задается параметром Indx, или пустую строку, если
Indx равняется нулю или больше, чем РаrамCоunt.

См. также: ParamCount.

Пример:

{ в Windows используйте WinCrt }
var i : word;
begin
for i := 1 to ParamCount do
Writeln(PaamStr(i));
end.

Функция Pi модуль System
-----------------------------------------------------------------

Назначение: Возвращает значение 3.1415926535897932385 (зна-
чение числа Pi).

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: function Pi: Real;

Примечания: В зависимости от того, работает ли компилятор в
режиме с сопроцессором 8087 (80287, 80387), или только в режиме
программного обеспечения, точность может меняться.



B.Pascal 7 & Objects/PG - 303 -


Процедура PieSlice модуль Graph
-----------------------------------------------------------------

Назначение: Рисует и заполняет цветом сектор круга. Точка
(Х,Y) при этом используется в качестве центра окружности, а сек-
тор рисуется от начального угла (SStart) до конечного угла
(SEnd).

Целевая платформа: Реальный режим. Защищенный режим.

Описание: procedure PieSlice(X, Y: Integer; SStart, SEnd, R:
Word);

Примечания: Контур сектора вычерчивается текущим цветом, а
при закрашивании используются тип и цвет закраски, заданные про-
цедурами SetFillStyle и SetFillPattern.

В каждом графическом драйвере содержится коэффициент относи-
тельного удлинения, который используется в процедурах Circle, Arс
и РieSlice. Начальный угол, равный 0 и конечный угол, равный 359,
задают вычерчивание полной окружности.

Ограничения: Должен использоваться графический режим.

См. также: Arc, Circle, Ellipse, GetArcCoords,
GetAspectRatio, Sector, SetFillStyle, SetFillPattern,
SetGraphBufSize.

Пример:

uses Graph;
const
Radius = 30;
var
Gr, Gm : integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
PieSlice(100, 100, 0, 270, Radius);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 304 -


Функция Pos модуль System
-----------------------------------------------------------------

Назначение: Ищет подстроку в строке.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: function Pos(Sub, S: String): Byte;

Примечания: Параметры Sub и S являются выражениями строково-
го типа. Данная функция ищет подстроку, заданную параметром Sub,
в строке S и возвращает целое значение, являющееся позицией пер-
вого символа подстроки в строке S. Если подстрока не найдена, то
функция возвращает значение 0.

См. также: Concat, Copy, Delete, Insert, Length.

Пример:

var
s : string;
begin
s := ' 123.5'; { преобразует пробелы в нули }
while Pos(' ',s) > 0 do
s[Pos(' ',s)] := '0';
end.



B.Pascal 7 & Objects/PG - 305 -


Функция Pred модуль System
-----------------------------------------------------------------

Назначение: Возвращает предшествующее значение аргумента.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: function Pred(x);

Примечания: Параметр x - выражение перечислимого типа. Ре-
зультат, имеющий тот же тип, что и x, является предшествующим
значением x.

См. также: Succ, Dec.

Функция Ptr модуль System
-----------------------------------------------------------------

Назначение: Преобразует адрес, заданный в виде базового сег-
мента и смещения, в значение типа указатель.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: function Ptr(Seg, Offs: Word): Pointer;

Примечания: Параметры Seg (сегмент) и Offs (смещение) предс-
тавляют собой выражения типа Word. Результатом является указатель
на адрес, заданный параметрами Seg и Offs. Как и указатель типа
nil, результат функции Рtr совместим по присваиванию с указателя-
ми любых типов.

Результат функции можно проанализировать, например:

if Prt($40, $49)^ = 7 then
Writeln('видеорежим = моно');

См. также: Addr.

Пример:

var
p^ : byte;
begin
p := Ptr($0040, $49);
Writeln('Текущим видеорежимом является ', p^);
end;



B.Pascal 7 & Objects/PG - 306 -


Процедура PutImage модуль Graph
-----------------------------------------------------------------

Назначение: Выводит из буфера на экран двоичный образ задан-
ной области экрана.

Целевая платформа: Реальный режим. Защищенный режим.

Описание: procedure PutImage(х, у: Integer; var Mass; Oper:
Word);

Примечания: Точка с координатами (х,у) определяет верхний
левый угол прямоугольной области экрана. Параметр Mass является
нетипизированным параметром, который определяет ширину и высоту
области экрана. Параметр Oper определяет, какая двоичная операция
будет использоваться для вывода двоичного образа области на эк-
ран (см. перечень операций BitBlt).

Каждая константа соответствует двоичной операции. Например,
PutImage(x,y,BitMap,NormalPut) выводит на экран двоичный образ,
сохраненный в массиве BitMap, начиная с точки (x,y). При этом для
вывода каждого байта двоичного образа используется инструкция ас-
семблера МОV.

Аналогично:

PutImage(x,y,BitMap,XORPut);

выводит на экран двоичный образ, сохраненный в массиве BitMap,
начиная с точки (x,y). При этом для вывода каждого байта двоично-
го образа используется инструкция ассемблера ХОR. Этот метод час-
то используется для мультипликации и перемещения изображения по
экрану.

PutImage(x,y,BitMap,NotPut);

инвертирует биты в BitMap и выводит двоичный образ, сохраненный в
BitMap, начиная с точки (x,y). При этом для каждого байта двоич-
ного образа используется инструкция ассемблера MOV. Таким обра-
зом, двоичный образ при выводе получает негативное по отношению к
исходному изображение.

Заметим, что процедура PutImage никогда не выполняет отсече-
ние изображения на границах текущей области просмотра. Более то-
го, за одним исключением оно не отсекается также на границе всего
экрана. В этом случае, если какая-либо часть изображения не поме-
щается в поле экрана, оно вообще не выводится. В следующем приме-
ре первый образ экрана будет выведен, а средние три вызова
PutImage не приведут к выводу изображения.

program NoClip;
uses Graph;

B.Pascal 7 & Objects/PG - 307 -

var
Driver, Mode : integer;
p : pointer;
begin
Driver := Detect;
InitGraph(Driver, Mode, '');
if GraphResult <> grOk then
Halt(1);
SetViewPort(0, 0, GetMaxX, GetMaxY, ClipOn);
GetMem(p, ImageSize(0, 0, 0, 99, 49));
PieSlice(50, 25, 0, 360, 45);
GetImage(0, 0, 99, 49, p^); { ширина = 100,
высота = 50 }
ClearDevice;
PutImage(GetMaxX - 99, 0, p^, NormalPut);
{ x + высота > GetMaxX }
PutImage(-1, 0, p^, NormalPut); { -1,0 не находится на
экране }
PutImage(0, -1, p^, NormalPut); { 0,-1 не находится на
экране }
PutImage(0, GetMaxY - 30, p^, NormalPut)
{ выведет 31 "строку" }
Readln;
CloseGraph;
end.

В последнем обращении к PutImage высота отсекается по нижне-
му краю экрана, и часть изображения выводится. Это единственный
случай, когда процедура PutImage отсекает выводимое изображение.


B.Pascal 7 & Objects/PG - 308 -

Ограничения: Должен использоваться графический режим.

См. также: GetImage, ImageSize.

Пример:

uses Graph;
var
p : pointer;
Size : word;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
Bar(0, 0, GetMaxX, GetMaxY);
Size := ImageSize(10,20,30,40);
GetMem(p, Size); { выделить память в динамически распре-
деляемой области }
GetImage(10,20,30,40,p^); { считать двоичный образ }
PutImage(100,100,p^,NormalPut); { скопировать двоичный
образ }
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 309 -


Процедура PutPixel модуль Graph
-----------------------------------------------------------------

Назначение: Строит элемент изображения в точке (x,y).

Целевая платформа: Реальный режим. Защищенный режим.

Описание: procedure PutPixel(x, y: Integer; Pixel: Word);

Примечания: Строит в (x,y) точку, цвет которой определяется
параметром Pixel.

Ограничения: Должен использоваться графический режим.

См. также: GetImage, GetPixel, PutImage.

Пример:

uses Graph;
var
p : pointer;
Color : word;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
ig GraphResult <> grOk then
Halt(1);
Color := GetMaxColor;
Randomize;
repeat
PutPixel(Random(100),Random(100),Color); { строит
"звездочки" }
Delay(10);
until KeyPressed;
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 310 -


Функция Random модуль System
-----------------------------------------------------------------

Назначение: Возвращает случайное число.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: function Random[ (Range: Word) ];

Примечания: Если параметр Range (диапазон) не задан, то ре-
зультатом будет вещественное число x в диапазоне 0 <= х < 1. Если
задан параметр Range, то он должен представлять собой выражение
целого типа, а результатом будет случайное число длиной в слово в
диапазоне 0 <= х < N, где N - значение, заданное параметром
Range. Если параметр Range меньше или равен нулю, то возвращаемое
значение будет равно нулю.

Генератор случайных чисел Random должен инициализироваться
обращением к процедуре Randomize.

См. также: Randomize.

Пример:

uses Crt;
begin
Randomize;
repeat
{ вывести текст со случайно выбранным цветом }
TexAttr := Random(256);
Write('!');
until KeyPressed;
end.

Процедура Randomize модуль System
-----------------------------------------------------------------

Назначение: Инициализирует встроенный генератор случайных
чисел случайным значением.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: procedure Randomize;

Примечания: Случайное значение получается от системного тай-
мера. Число, получаемое в результате работы генератора случайных
чисел, хранится в предописаной переменной с именем RandSeed.

См. также: Random.


B.Pascal 7 & Objects/PG - 311 -


Процедура Read (текстовые файлы) модуль System
-----------------------------------------------------------------

Назначение: Считывает одно или более значений из текстового
файла в одну или более переменных.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: procedure Read( [ var f: Text; ] v1, [, v2,...,vn
] );

Примечания: Параметр f (если он указан) является файловой
переменой, соответствующей текстовому файлу. Если он опущен, то
подразумевается использование стандартной файловой переменной
Input. Каждый параметр v является переменной символьного, строко-
вого, целого или вещественного типа.

* В случае строкового типа процедура Rеаd считывает из файла
один символ и присваивает его переменной. Если перед вы-
полнением процедуры Rеаd функция Eof(f) принимала значение
Truе, то переменной присваивается значение Chr(26) (символ
Ctrl-Z). Если функция Eoln(f) принимала истинное значение
(Truе), то переменной присваивается значение Chr(3) (сим-
вол возврата каретки). Следующая операция Rеаd начнется со
следующего символа в файле.

* В случае переменной целого типа процедура Rеаd ожидает
поступления последовательности символов, образующих число
со знаком (синтаксис см. в разделе "Числа" Главы 2 "Руко-
водства по языку"). Любые пробелы, знаки табуляции или
метки конца строки, предшествующие числовой строке, про-
пускаются. Считывание прекращается при обнаружении первого
пробела, символа табуляции или метки конца строки, которые
следуют за числовой строкой, или в том случае, если функ-
ция Eof(f) принимает значение Truе. Если числовая строка
не соответствует ожидаемому формату, то происходит ошибка
ввода-вывода. В противном случае переменной присваивается
значение. Если функция Eof(f) перед выполнением процедуры
Rеаd имела значение Truе, или функция Eof(f) приняла зна-
чение Truе при пропуске начальных пробелов, знаков табуля-
ции или меток конца строки, то переменной присваивается
нулевое значение. Следующая операция Rеаd начнется с про-
бела, символа табуляции или метки конца строки, которыми
завершилась числовая строка.

* В случае переменной вещественного типа процедура Rеаd ожи-
дает поступления последовательности символов, которые об-
разуют число (синтаксис см. в разделе "Числа" Главы 2 "Ру-
ководства по языку"), но шестнадцатиричное представление
не допускается. Любые пробелы, знаки табуляции или метки
конца строки, предшествующие числовой строке, пропускают-

B.Pascal 7 & Objects/PG - 312 -

ся. Считывание прекращается при обнаружении первого пробе-
ла, символа табуляции или метки конца строки, которые сле-
дуют за числовой строкой, или в том случае, если функция
Eof(f) принимает значение Truе. Если числовая строка не
соответствует ожидаемому формату, то происходит ошибка
ввода-вывода. В противном случае переменной присваивается
значение. Если функция Eof(f) имела значение Truе перед
выполнением процедуры Rеаd, или функция Eof(f) приняла
значение Truе при пропуске начальных пробелов, знаков та-
буляции или меток конца строки, то переменной присваивает-
ся нулевое значение. Следующая операция Rеаd начнется с
пробела, символа табуляции или метки конца строки, которы-
ми завершилась числовая строка.

* В случае переменной строкового типа процедура Rеаd считы-
вает все символы, вплоть до следующей метки конца строки
(но не включая ее), или пока функция Eof(f) не примет зна-
чение Truе. Переменной присваивается получившаяся в ре-
зультате символьная строка. Если длина результирующей
строки превышает длину, максимально допустимую для строко-
вой переменной, то она усекается. Следующая операция Rеаd
начинается с метки конца строки, которой завершилась пре-
дыдущая строка.

* Когда разрешен расширенный синтаксис, Read можно использо-
вать для считывания строк с завершающим нулем в соответс-
твующие массивы. При наличии символьного массива вида
array[0..N] of Char Read считывает до N символов, или пока
Eoln(F) или Eof(F) не примут значение True, а затем добав-
ляют к строке нулевой завершающий символ NULL (#0).

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

Ограничения: Процедура Rеаd со строковой переменной не дела-
ет после считывания пропуск до следующей строки. Поэтому для счи-
тывания последовательности строк нельзя использовать последова-
тельные обращения к процедуре Rеаd, поскольку при этом вы никогда
не перейдете дальше первой строки. После первого обращения к про-
цедуре Rеаd последующие операции Rеаd будут обнаруживать метку
конца строки и возвращать строку нулевой длины. Поэтому для счи-
тывания последовательности строк используйте обращения к процеду-
ре Rеаdln.

См. также: Readln, ReadKey, Write, Writeln.



B.Pascal 7 & Objects/PG - 313 -


Процедура Read (типизированные файлы) модуль System
-----------------------------------------------------------------

Назначение: Считывает в переменную элемент файла.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: procedure Read(f, v1, [, v2,...,vn]);

Примечания: Параметр f является файловой переменной, соот-
ветствующей любому типу файла, кроме текстового, а каждый элемент
v представляет собой переменную того же типа, что и элемент файла
f. При каждом считывании в переменную текущая позиция в файле
продвигается к следующему элементу. Попытка считывания следующего
элемента файла в тот момент, когда текущая позиция файла находит-
ся в конце файла (то есть когда Eof(f) имеет значение Truе) явля-
ется ошибкой.

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

Ограничения: Файл должен быть открыт.

См. также: Write.



B.Pascal 7 & Objects/PG - 314 -


Функция ReadBuf модуль WinCrt
-----------------------------------------------------------------

Назначение: Считывает из окна CRT строку.

Целевая платформа: Windows.

Описание: function ReadBuf(Buffer: PChar; Count: Word):
Word;

Примечания: Параметр Buffer указывает на буфер строки, в ко-
тором может поместиться до Count символов. Можно ввести до Count
- 2 символов, а при нажатии пользователем клавиши Enter автомати-
чески добавляется маркер конца строки (#13 и #12). Если CheckEOF
равно True, пользователь может также завершить строку ввода, на-
жав клавиши Ctrl+Z. К строке в этом случае добавится маркер конца
файла (#26). Возвращаемым значением будет число считанных симво-
лов, включая маркер конца файла.

См. также ReadKey.

Функция ReadKey модуль Crt
-----------------------------------------------------------------

Назначение: Считывает символ с клавиатуры.

Целевая платформа: Реальный режим. Защищенный режим.

Описание: function ReadKey: Char;

Примечания: Считываемый символ не отображается на экране.
Если перед обращением к функции RеаdКеу функция КеyРressed имела
значение Truе, то символ считывается немедленно, в противном слу-
чае функция ожидает нажатия клавиши.

Специальные клавиши на клавиатуре компьютера РС генерируют
расширенные коды клавиш. Специальными клавишами являются функцио-
нальные клавиши, клавиши управления курсором, клавиши Alt и т.д.
При нажатии специальной клавиши функция RеаdКеу возвращает снача-
ла нулевой символ (#0), а затем расширенный код клавиши. Нулевые
символы не могут быть получены никаким другим путем. Этим обеспе-
чивается то, что следующим символом будет расширенный код клави-
ши.

В следующем фрагменте программы в переменную с именем Ch
считывается символ или расширенный код клавиши и для переменной
FuncKey булевского типа устанавливается значение Truе, если сим-
вол является кодом специальной клавиши.

Ch := ReadKey;
if Ch <> #0 then FuncKey := False else
begin

B.Pascal 7 & Objects/PG - 315 -

FuncKey := True;
Ch := ReadKey;
end;

Переменная ChесkВrеаk управляет тем, будет ли программа
прекращать работу при нажатии клавиш Ctrl+Вrеаk, или они будут
рассматриваться, как любые другие клавиши. Когда переменная
ChесkВrеаk имеет значение False, функция ReаdКеy возвращает для
клавиш Ctrl+Вrеаk значение Ctrl+С (#3).

См. также: KeyPressed.



B.Pascal 7 & Objects/PG - 316 -


Функция ReadKey модуль WinCrt
-----------------------------------------------------------------

Назначение: Считывает символ с клавиатуры.

Целевая платформа: Windows

Описание: function ReadKey: Char;

Примечания: Функция ReadKey поддерживает только стандартные
коды ASCII. Расширенные коды клавиш, например, клавиш управления
курсором, не поддерживаются.

См. также: KeyPressed.

Процедура ReadLn модуль System
-----------------------------------------------------------------

Назначение: Выполняет процедуру Rеаd, затем переходит к сле-
дующей строке файла.

Целевая платформа: Реальный режим. Защищенный режим, Windows

Описание: procedure Readln([ var f: Text; ] v1 [, v2,...,vn
] );

Примечания: Процедура RеаdLn является расширением процедуры
Rеаd и определена для текстовых файлов. После выполнения процеду-
ры Rеаd процедура RеаdLn делает пропуск до начала следующей стро-
ки.

Вызов функции RеаdLn(f) без параметров приводит к перемеще-
нию текущей позиции файла на начало следующей строки (если она
имеется, в противном случае происходит переход к концу файла).
Функция RеаdLn без списка параметров полностью соответствует об-
ращению RеаdLn(Input).

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

Ограничения: Функция работает только для текстовых файлов,
включая стандартный ввод. Файл должен быть открыт для ввода.

См. также: Read.



B.Pascal 7 & Objects/PG - 317 -


Процедура Rectangle модуль Graph
-----------------------------------------------------------------

Назначение: Рисует прямоугольник, используя текущий цвет и
тип строки.

Целевая платформа: Реальный режим. Защищенный режим.

Описание: procedure Rectangle(x1, y1, x2, x2: Integer);

Примечания: Точка с координатами (х1,у1) определяет верхний
левый угол прямоугольника, а точка с координатами (х2,у2) опреде-
ляет нижний правый угол (0 <= х1 < х2 <= GetМахХ и 0 <= у1 < у2
<= GetМахY).

При вычерчивании прямоугольника будут использоваться текущий
тип строки и цвет, которые устанавливаются процедурами
SetLineStyle и SetColor. Чтобы определить, копируется ли прямоу-
гольник на экран, или для его вывода используется операция XOR,
вызовите SetWriteMode.

Ограничения: Должен использоваться графический режим.

См. также: Bar, Bar3D, GetViewSettings, InitGraph, SetColor,
SetLineStyle, SetWriteMode, SetViewPort, GetViewSettings.

Пример:

uses Graph;
var
GraphDriver, GraphMode : integer;
x1, y1, x2, y2 : integer;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if GraphResult <> grOk then
Halt(1);
Randomize;
repeat
x1 := Random(GetMaxX);
y1 := Random(GetMaxY);
x2 := Random(GetMaxX - x1) + x1;
y2 := Random(GetMaxY - y1) + y1;
Rectangle(x1,y1,x2,y2);
until KeyPressed;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 318 -


Функция RegisterBGIdriver модуль Graph
-----------------------------------------------------------------

Назначение: Регистрирует в графической системе загруженный
пользователем или скомпонованный с программой драйвер формата BGI
(формат фирмы Borland).

Целевая платформа: Реальный режим. Защищенный режим.

Описание: function RegisterBGIdriver(Driver: Pointer):
Integer;

Примечания: В случае ошибок возвращаемое значение меньше ну-
ля. В противном случае возвращается внутренний номер драйвера.
Эта программа позволяет пользователю загрузить файл драйвера и
зарегистрировать драйвер, передав его адрес в памяти функции
RegisterBGIdriver. После этого драйвер может непосредственно ис-
пользоваться процедурой InitGraph, а не загружаться с диска моду-
лем Graph. Драйвер пользователя можно загрузить с диска в динами-
чески распределяемую область памяти или преобразовать в файл .OBJ
(с помощью утилиты BINOBJ.EXE), после чего скомпоновать с прог-
раммой в файл .EXE.

Возможной возвращаемой ошибкой является grInvalidDriver (не-
допустимый графический драйвер).

Следующая программа загружает в динамически распределяемую
область памяти драйвер CGA, регистрирует его в графической систе-
ме и вызывает процедуру InitGraph.

program LoadDriv;
uses Graph;
var
Driver, Mode : Integer;
DriverF : file;
DriverP : pointer;
begin
{ открыть файл драйвера, считать его в память и
зарегистрировать }
Assign(DriverF, 'CGA.BGI');
Reset(DriverF, 1);
GetMem(DriverP, FileSize(DriverF));
if RegisterBGIdriver < 0 then
begin
Writeln('Ошибка регистрации драйвера: ',
GraphErrorMSG(GraphResult));
Halt(1);
end;
{ инициализация графики }
Driver := CGA;
Mode := CGAHi;
InitGraph(Driver,Mode,'');

B.Pascal 7 & Objects/PG - 319 -

if GraphResult <> grOk then
Halt(1);
OutText('Драйвер загружен программой пользователя');
Readln;
CloseGraph;
end.

Эта программа начинает работу с загрузки драйвера CGA с дис-
ка и регистрации его с помощью модуля Graph. Затем для инициали-
зации графической системы выполняется обращение к процедуре
InitGraph. Вы можете при желании разместить один или более файлов
непосредственно в файле .EXE. При этом графические драйверы, ко-
торые требуются вашей программе, окажутся встроенными и для рабо-
ты потребуется только файл .EXE. Процесс размещения драйвера в
выполняемом файле довольно прост и заключается в следующем:

1. Выполнить для файла (или файлов) программу BINOBJ.

2. Скомпоновать результирующие файлы *.OBJ с вашей програм-
мой.

3. Перед вызовом процедуры Init зарегистрировать скомпоно-
ванные файлы (файл) драйвера.

Более подробное описание этого процесса можно найти в ком-
ментариях, содержащихся в шапке программы-примера GRLINK.PAS на
диске 3. Документация по утилите BINOBJ содержится в файле
UTILS.DOC на дистрибутивном диске.

Имеется также возможность регистрации в системе файлов шриф-
тов (см. описание функции RegisterBGIfont).

Ограничения: Заметим, что драйвер должен быть зарегистриро-
ван перед обращением к процедуре InitGraph. Если функция
RegisterBGIdriver вызывается, когда средства графики уже активи-
зированы, то возвращается grError.

См. также: InitGraph, InstallUserDriver, RegisterGBIfont.



B.Pascal 7 & Objects/PG - 320 -


Функция RegisterBGIfont модуль Graph
-----------------------------------------------------------------

Назначение: Регистрирует загружаемый пользователем или ском-
понованный с программой шрифт формата BGI (формат фирмы Borland)
в графической системе.

Целевая платформа: Реальный режим. Защищенный режим.

Описание: function RegisterBGIfont(Font: Pointer): Integer;

Примечания: В случае ошибки возвращаемое значение будет
меньше 0. В противном случае возвращается внутренний номер шриф-
та. Эта программа позволяет пользователю загрузить файл шрифта и
"зарегистрировать" шрифт Font, передав его адрес в памяти проце-
дуре RegisterBGIfont. После этого данный шрифт можно выбирать с
помощью обращения к процедуре SetTextStyle. Выбранный шрифт будет
непосредственно использоваться без необходимости загрузки его с
диска модулем Graph. Зарегистрированный пользователем шрифт можно
загрузить с диска в динамически распределяемую область памяти или
преобразовать (с помощью утилиты BINOBJ.EXE) в файл .OBJ, а затем
скомпоновать с программой в выполняемый файл.

Для загрузки и регистрации файлов шрифтов имеется несколько
причин. Во-первых, модуль Graph в каждый момент времени хранит в
памяти только один векторный шрифт. Если у вас имеется программа,
которая должна быстро переключаться с одного шрифта не другой, то
возможно вы предпочтете в начале программы выполнить регистрацию
и загрузку шрифта. При этом при обращении к процедуре
SetTextStyle модулю Graph не понадобится каждый раз загружать и
разгружать шрифт.

Во-вторых, вы можете захотеть разместить файл шрифта непос-
редственно в файле .EXE. Таким образом, файл шрифта, который ис-
пользует ваша программа, окажется встроенным, и для запуска прог-
раммы потребуется только выполняемый файл (файл .EXE). Процесс
размещения файла шрифта в выполняемом файле довольно прост:

1. Выполнить для файла (или файлов) программу BINOBJ.

2. Скомпоновать результирующие файлы ,OBJ с вашей програм-
мой.

3. Перед вызовом процедуры Init зарегистрировать скомпоно-
ванные файлы (файл) драйвера.

Более подробное описание этого процесса можно найти в ком-
ментариях, содержащихся в шапке программы-примера GRLINK.PAS на
диске 3. Документация по утилите BINOBJ содержится в файле
UTILS.DOC на дистрибутивном диске.

Заметим, что в используемый по умолчанию шрифт (с битовой

B.Pascal 7 & Objects/PG - 321 -

матрицей 8х8) встроен в модуль GRAPH.TPU и, таким образом, все
время находится в памяти. При выборе и загрузке векторного шрифта
ваша программа имеет возможность переключаться между используемым
по умолчанию и векторным шрифтом без необходимости перезагружать
какой-либо из них.

Можно также регистрировать файлы драйверов (см. описание
функции RegisterBGIdriver).

Следующая программа загружает в динамически распределяемую
область шрифт Triplex, регистрирует его в графической системе, а
затем предоставляет возможность выбора между этим шрифтом и дру-
гим штриховым шрифтом, который модуль Graph загружает с диска
(SansSerifFont).

program LoadFont;
uses Graph;
var Driver, Mode : integer;
FontF : file;
FontP : pointer;
begin
{ открыть файл шрифта, считать его в память и
зарегистрировать }
Assign(FontF, 'TRIP.CHR');
Reset(FontF, 1);
GetMem(FontP, FontP^, FileSize(FontF));
if RegisterBGIfont(FontP) < 0 then
begin
Writeln('Ошибка регистрации шрифта: ',
GraphErrorMsg(GraphResult));
Halt(1);
end;
{ инициализировать графику }
Driver := Detect;
InitGraph(Driver, Mode, '..\');
if GraphResult < 0 then
Halt(1);
Readln;
{ выбрать зарегистрированный шрифт }
SetTextStyle(TriplexFont, HorizDir, 4);
OutText('Программой загружен шрифт Triplex');
MoveTo(0, TextHeight('a'));
Readln;
{ выбрать шрифт который должен быть загружен с диска }
SetTextStyle(SanSerifFont, HorizDir, 4);
OutText('Диск должен быть готов...');
MoveTo(0, GetY + TextHeight('a'));
Readln;
{ выбрать зарегистрированный шрифт (уже загруженный
в память)}
SetTextStyle(TriplexFont, HorizDir, 4);
OutText('Программой снова выбран шрифт Triplex');
Readln;

B.Pascal 7 & Objects/PG - 322 -

CloseGraph;
end.

Программа начинает свою работу с загрузки с диска шрифта
Triplex и регистрации его модулем Graph. Затем для инициализации
графической системы вызывается процедура InitGraph. Проверьте,
есть ли обращение к диску и нажмите клавишу Enter. Поскольку те-
перь шрифт Triplex уже загружен в память и зарегистрирован, моду-
лю Graph не надо считывать его с диска (таким образом, отпадает
необходимость обращения к дисководу). Затем программа активизиру-
ет шрифт SansSerifFont, загружая его с диска (он не зарегистриро-
ван). Снова нажмите клавишу Enter и посмотрите, есть ли обращение
к диску (при обращении к диску загорается лампочка-индикатор на
панели компьютера). Наконец, программа снова выбирает шрифт
Triplex. Поскольку он уже зарегистрирован, то при этом программа,
когда вы нажмете клавишу Enter, обращаться к диску не будет.

См. также: InitGraph, InstallUserDriver, InstallUserFont,
RegisterGBIfont, SetTextStyle.



B.Pascal 7 & Objects/PG - 323 -


Процедура RemoveDir модуль WinDos
-----------------------------------------------------------------

Назначение: Удаляет пустой подкаталог.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: procedure RemoveDir(Dir: PChar);

Примечания: Удаляется подкаталог по маршруту, заданному па-
раметром Dir. Об ошибках (таких как несуществующий каталог или
непустой каталог) сообщается в переменной DosError.

Пустой подкаталог удаляет также подпрограмма RmDir, но вмес-
то строки с завершающим нулем она воспринимает строку Паскаля.

См. также: GetCurDir, GreateDir, SetCurDir.

Процедура Rename модуль System
-----------------------------------------------------------------

Назначение: Переименовывает внешний файл.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: procedure Rename(var f; NewName);

Примечания: Параметр f представляет собой файловую перемен-
ную, соответствующую любому файловому типу. Параметр NewName яв-
ляется выражением строкового типа или типа PChar (если разрешен
расширенный синтаксис). Внешнему файлу, связанному с переменной
f, присваивается новое имя, заданное параметром NewName. Дальней-
шие операции с f будут выполняться с внешним файлом с новым име-
нем.

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

Ограничения: Процедура Rename не должна использоваться для
открытого файла.

См. также: Erase.



B.Pascal 7 & Objects/PG - 324 -


Процедура Reset модуль System
-----------------------------------------------------------------

Назначение: Открывает существующий файл.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: procedure Reset(f [: file; Size : Word ] );

Примечания: Параметр f является файловой переменной, соот-
ветствующей любому типу файла. Он должен быть связан с внешним
файлом с помощью процедуры Assign. Параметр размера Size предс-
тавляет собой необязательное выражение длиной в слово и может
указываться только в том случае, если f является нетипизированным
файлом.

Процедура Reset открывает существующий внешний файл, имя ко-
торого было присвоено f. Если внешний файл с указанным именем от-
сутствует, то это является ошибкой. Если файл f уже открыт, то он
сначала закрывается, а затем открывается вновь. Текущая позиция в
файле устанавливается на начало файла. Если f было присвоено пус-
тое имя (например, Assign(f'')), то после обращения к процедуре
Reset f будет ссылкой на стандартный файл ввода (стандартный ка-
нал 0).

Если f - текстовый файл, то он становится доступным только
по чтению. После обращения к процедуре Reset Eof(f) принимает
значение Truе, если файл пуст, и значение False в противном слу-
чае.

Если f является нетипизированным файлом, то параметр Size
определяет размер записи, который должен использоваться при пере-
даче данных. Если этот параметр опущен, то он подразумевается
равным по умолчанию 128 байтам.

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

См. также: Append, Assign, Close, Rewrite.

Пример:

function FileExists(FileName: string) : boolean;
{ булевская функция, возвращающая значение Truе, если файл
существует и значение False в противном случае }
var
f : file;
begin
{$I-}
Assign(f, FileName);

B.Pascal 7 & Objects/PG - 325 -

Reset(f);
Close(f);
{I+}
FileExists := (IOResult = 0) and (FileName <> '');
end; { FileExists };
begin
if FileExists(ParamStr(1)) then { получить из командной
строки имя файла }
Writeln('Файл существует');
else
Writeln('Файл не найден');
end.

Процедура RestoreCrtMode модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает режим экрана в исходное состояние
(то, какое существовало до инициализации графики).

Целевая платформа: Реальный режим. Защищенный режим.

Описание: procedure RestoreCrtMode;

Примечания: Восстанавливает исходный видеорежим, обнаружен-
ный процедурой InitGraph. Данная процедура может использоваться
вместе с процедурой SetGraphMode для переключения между текстовым
и графическим режимом.

Ограничения: Должен использоваться графический режим.

См. также: CloaseGraph, DetectGraph, InitGraph,
SetGraphMode.

Пример:

uses Graph;
var
GraphDriver, GraphMode : integer;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if GraphResult <> grOk then
Halt(1);
OutText('Для выхода из графики нажмите Enter:');
Readln;
RestoreCrtMode;
Writeln('Теперь вы в текстовом режиме');
Readln;
SetGraphMode(GetGraphMode);
OutTextXY(0, 0, 'Вы снова в графическом режиме');
OutText(0, TextHeight('H'), 'Для выхода нажмите Enter');
Readln;
CloseGraph;

B.Pascal 7 & Objects/PG - 326 -

end.



B.Pascal 7 & Objects/PG - 327 -


Процедура Rewrite модуль System
-----------------------------------------------------------------

Назначение: Создает и открывает новый файл.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: procedure Rewrite(f [ : file; Size: Word ] );

Примечания: Параметр f является файловой переменной, соот-
ветствующей любому типу файла. Он должен быть связан с внешним
файлом с помощью процедуры Assign. Параметр размера Size предс-
тавляет собой необязательное выражение длиной в слово и может
указываться только в том случае, если f является нетипизированным
файлом. Если этот параметр опущен, то подразумевается размер за-
писи в 128 байт.

Процедура Rewrite создает новый внешний файл, имя которого
присвоено f. Если внешний файл с указанным именем уже существует,
то он удаляется, и на его месте создается новый пустой файл. Если
файл f уже открыт, то он сначала закрывается, а затем открывается
вновь. Текущая позиция в файле устанавливается на начало файла.
Если f было присвоено пустое имя (например, Assign(f,'')), то
после обращения к процедуре Reset(f) будет ссылкой на стандартный
файл ввода (стандартный описатель файла номер 1).

Если f - текстовый файл, то он становится доступным только
по записи. После обращения к процедуре Rewrite Eof(f) принимает
значение Truе, если файл пуст, и значение False в противном слу-
чае.

Если f является нетипизированным файлом, то параметр Size
определяет размер записи, который должен использоваться при пере-
даче данных. Если этот параметр опущен, то он подразумевается
равным по умолчанию 128 байтам.

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

См. также: FileMode, Truncate, Lst, Reset, Append, Assign.

B.Pascal 7 & Objects/PG - 328 -


Пример:

{ в Windows используйте WinCrt }
var f : text;
begin
Assign(f,'NEWFILE,$$$');
Writeln(f,'Создается файл, в который записывается эта',
' строка');
Close(f);
end.



B.Pascal 7 & Objects/PG - 329 -


Процедура RmDir модуль System
-----------------------------------------------------------------

Назначение: Удаляет пустой подкаталог.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: procedure RmDir(s: String);

Примечания: Параметр s является выражением строкового типа.
Удаляется подкаталог с путем доступа, заданным строкой s. Если
путь доступа не существует, является непустым или если он задает
текущий каталог, то происходит ошибка ввода-вывода.

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

Пустой подкаталог удаляет также подпрограмма RemoveDir, но
вместо строки Паскаля она воспринимает строку с завершающим ну-
лем.

См. также: RemoveDir, MkDir, ChDir, GetDir.

Пример:

{ в Windows используйте WinCrt }
begin
{$I-}
{ получить имя каталога из командной строки }
RmDir(ParamStr(1));
if IOResult <> 0 then
Writeln('Каталог удалить нельзя');
else
Writeln('Каталог удален');
end.



B.Pascal 7 & Objects/PG - 330 -


Функция Round модуль System
-----------------------------------------------------------------

Назначение: Округляет значение вещественного типа до значе-
ния целого типа.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: function Round(x: Real): Longint;

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

См. также: Trunc, Int.

Процедура RunError модуль System
-----------------------------------------------------------------

Назначение: Останавливает выполнение программы и генерирует
ошибку этапа выполнения.

Целевая платформа: Реальный режим. Защищенный режим,
Windows.

Описание: procedure RunError [ (ErrCode : Word ) ];

Примечания: Процедура RunError аналогична процедуре Halt, но
в дополнение к остановке программы она генерирует на текущем опе-
раторе ошибку этапа выполнения. Параметр ErrCode представляет со-
бой номер ошибки этапа выполнения (0 опущен). Если текущий модуль
был скомпилирован с установленным параметром Debug Information
(Отладочная информация), и вы запускаете программу из среды инте-
рактивной отладки IDE, то Borland Pascal обрабатывает обращение к
RunError, как обычную ошибку этапа выполнения.

См. также: Halt.

Пример:

{$IFDEF Debug}
if P = nil then RunError(204);
{$EDNIF}



B.Pascal 7 & Objects/PG - 331 -


-------------------------------------------------------------
Процедура ScrollTo модуль WinCrt
-----------------------------------------------------------------

Назначение: Прокручивает окно CRT для вывода ячейки вирту-
ального экрана с координатами левого верхнего угла (X,Y).

Целевая платформа: Windows.

Описание: procedure ScrollTo(X, Y: Integer);

Примечания: Ячейка с координатами (0,0) соответствует верх-
нему левому углу виртуального экрана.

Процедура Sector модуль Graph
-----------------------------------------------------------------

Назначение: Вычерчивает и заполняет эллиптический сектор.

Целевая платформа: Реальный режим, защищенный режим.

Целевая платформа: Windows.

Описание: procedure Sector(X, Y: Integer; SStart, SEnd XRad,
YRad: Word);

Примечания: Процедура использует (X,Y) как точку центра, па-
раметры XRad, YRad определяют, соответственно, горизонтальный и
вертикальный радиусы. Сектор вычерчивается от начального угла
SStart до конечного угла SEnd. Сектор рисуется текущим цветом и
закрашивается с использованием образца закраски и цвета, заданных
с помощью процедур SetFillStyle или SetFillPattern.

Если задан начальный угол 0 и конечный угол 360, то будет
нарисован и закрашен полный эллипс. Углы для процедур Arc,
Ellipse, FillEllipse, PieSlice задаются против часовой стрелки,
при этом углу 0 соответствует 3 часа, 90 градусов - 12 часов и т.
д.

Если при заполнении сектора происходит ошибка, то функция
GraphResult возвращает значение grNoScanMem.

Ограничения: Должен использоваться графический режим.

См. также: Arc, Circle, Ellipse, FillEllipse, GetArcCoords,
GetAspectRatio, PieSlice, SetFillStyle, SetFillPattern,
SetGraphBufSize.

Пример:

uses
Graph;
const

B.Pascal 7 & Objects/PG - 332 -

R = 50;
var
Driver, Mode : integer;
Xasp, Yasp : word;
begin
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult < 0 then
Halt(1);
Sector(GetMaxX div 2, GetMaxY div 2, 0, 45, R, R);
GetAspectRatio(Xasp, Yasp); { нарисовать сектор круга }
Sector(GetMAxX div 2, GetMaxY div 2, { точка центра }
180, 135, { зеркальное отображение выбран-
ного ранее угла }
R, R * LongInt(Xasp) div Yasp);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 333 -


Процедура Seek модуль System
-----------------------------------------------------------------

Назначение: Перемещает текущую позицию в файле к заданному
элементу.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure Seek(f, n: Longint);

Примечания: Параметр f является любой файловой переменной,
кроме текстовой, а n представляет собой выражение целого типа.
Текущая позиция в файле f перемещается к элементу с номером n.
Номер первого элемента файла равен 0. Для того, чтобы расширить
файл, можно выполнить поиск элемента файла, расположенного за
последним элементом. То есть оператор Sееk(f,FileSize(f)) переме-
щает текущую позицию в файле в конец файла.

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

Ограничения: Процедуру нельзя использовать для текстовых
файлов. Файл должен быть открыт.

См. также: FilePos.

Функция SeekEof модуль System
-----------------------------------------------------------------

Назначение: Возвращает для файла состояние "конец файла"
(end-of-file).

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function SeekEof [ (var f: Text) ]: Boolean;

Примечания: За исключением того, что функция SееkEof пропус-
кает все пробелы, знаки табуляции и метки конца строки, она пол-
ностью соответствует функции Eof. Ее полезно использовать при
считывании числовых значений из текстового файла.

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

Ограничения: Функцию можно использовать только для текстовых
файлов. Файл должен быть открыт.

См. также: Eof, SeekEoln.

B.Pascal 7 & Objects/PG - 334 -


Функция SeekEoln модуль System
-----------------------------------------------------------------

Назначение: Возвращает для файла состояние "конец строки"
(end-of-line).

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function SeekEoln [ (var f : Text) ];

Примечания: За исключением того, что функция SееkEоln про-
пускает все пробелы и знаки табуляции, она полностью соответству-
ет функции Eoln. Ее полезно использовать при считывании из текс-
тового файла числовых значений.

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

Ограничения: Функцию можно использовать только для текстовых
файлов. Файл должен быть открыт.

См. также функции Eoln, SeekEof.

Функция Seg модуль System
-----------------------------------------------------------------

Назначение: Возвращает сегмент для указанного объекта.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: function Seg(x): Word;

Примечания: Параметр x представляет собой любую переменную
или идентификатор процедуры или функции. Результат длиной в слово
является адресом сегмента для x.

См. также: Ofs, Addr.



B.Pascal 7 & Objects/PG - 335 -


Процедура SetActivePage модуль Graph
-----------------------------------------------------------------

Назначение: Устанавливает для графического вывода активную
страницу.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetActivePage(Page: Word);

Примечания: Страница, заданная параметром Page, становится
активной. Весь графический вывод будет теперь направляться в эту
страницу.

Возможность использования нескольких страниц поддерживается
только в графических адаптерах EGА (256K), VGА и Неrcules. При
использовании нескольких графических страниц программа может вы-
водить графическую информацию в страницу, не выводимую в данный
момент на экран, а затем быстро вывести на экран этот двоичный
образ, сменив отображаемую страницу с помощью процедуры
SetVisualPage. Этот метод особенно полезен при программировании
мультипликации.

Ограничения: Должен использоваться графический режим.

См. также: SetVisualPage.

Пример:

uses Graph;
var
GraphDriver, GraphMode : integer;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if GraphResult <> grOk then
Halt(1);
begin
ClearDivice;
SetVisualPage(0);
SetActivePage(1);
Rectangle(10,20,30,40);
SetVisualPage(1);
end;
else
OutText('Страничный режим не поддерживается');
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 336 -


Процедура SetAllPalette модуль Graph
-----------------------------------------------------------------

Назначение: Изменяет все цвета палитры на указанные.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetAllPalette(var Palette);

Примечания: Параметр Palette является нетипизированным пара-
метром. Первое его слово представляет собой длину палитры. Следу-
ющие n байт заменяют текущие цвета палитры. Каждый цвет может
принимать значение от -1 до 15. Значение -1 не изменяет предыду-
щее значение записи.

Имейте в виду, что допустимые цвета зависят от текущего гра-
фического драйвера и текущего графического режима.

При передаче SetAllPalette недопустимого ввода GraphResult
возвращает значение -11 (rgError), и изменений в значении палитры
не происходит.

Изменения, вносимые в палитру, немедленно отображаются на
экране. При любом изменении цвета палитры все места на экране,
где этот цвет используется, будут изменены в соответствии с вновь
заданным значением.

См. описание констант цветов для SetRGBPalette, где вы най-
дете определение констант цветов и записи PaletteType.

Ограничения: Должен использоваться графический режим. Может
использоваться с EGA, EGA64 или VGA (но не с IBM 8514 или VGA с
256-цветным режимом).

См. также: GetBkColor, GetColor, GetPalette, SetBkColor,
SetColor, SetPalette, SetRGBPalette.

B.Pascal 7 & Objects/PG - 337 -


Пример:

uses Graph;
var
GraphDriver, GraphMode : integer;
Palette : PaletteType;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if GraphResult <> grOk then
Halt(1);
begin
Line(0, 0, GetMaxX, GetMaxY);
with Palette do
begin
Size := 4;
Colors[0] := LightCyan; { светло-голубой }
Colors[1] := Red; { красный }
Colors[2] := Yellow; { желтый }
Colors[3] := White; { белый }
SetAllPalette(Palette);
end;
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 338 -


Процедура SetAspectRatio модуль Graph
-----------------------------------------------------------------

Назначение: Изменяет принятое по умолчанию значение коэффи-
циента относительного удлинения.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetAspectRatio(Xasp, Yasp: Word);

Примечания: Процедура SetAspectRatio применяется для измене-
ния принятого по умолчанию для текущего графического режима коэф-
фициента относительного удлинения. Коэффициент относительного уд-
линения используется при вычерчивании окружностей. Если окруж-
ность выглядит эллиптической, значит монитор не настроен должным
образом. Его можно настроить с помощью аппaратных средств или
программным путем, изменив с помощью процедуры SetAspectRatio ко-
эффициент относительного удлинения. Для получения текущего коэф-
фициента относительного удлинения можно использовать процедуру
GetAspectRatio.

Ограничения: Должен использоваться графический режим.

См. также: GetAspectRatio.


B.Pascal 7 & Objects/PG - 339 -

Пример:

uses
Crt, Graph;
const
R = 50;
var
Driver, Mode: integer;
Xasp, Yasp: word;
begin
DirectVideo := false;
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult <> 0 then
Halt(1)
GetAspectRatio(Xasp, Yasp); { получить используемый по
умолчанию коэффициент отно-
сительного удлинения }
{ Настроить на VGA и 8514. При этом коэффициент
относительного удлинения = 1.1 }
if Xasp = Yasp then
Xasp := 5 * Xasp;
{ Продолжить изменение значения коэффициента
относительного удлинения до получения 1:1 или пока
не будет нажата клавиша }
while (Xasp < Yasp) and not KeyPressed do
begin
GetAspectRatio(Xasp, Yasp);
Circle(GatMaxX div 2, GetMaxY div 2, R);
Inc(Xasp, 20);
end;
SetTextJustify(CenterText, CenterText);
OutTextXY(GetMaxX div 2, GetMaxY div 2, 'Выполнено!');
Readln;
CloseGraph;
end.

B.Pascal 7 & Objects/PG - 340 -


Процедура SetBkColor модуль Graph
-----------------------------------------------------------------

Назначение: Используя палитру устанавливает текущий фоновый
цвет.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetBkColor(Color: Word);

Примечания: SetBkColor(0) задает использование первого цвета
палитры в качестве текущего фонового цвета. Фоновые цвета могут
принимать значения в диапазоне от 0 до 15, в зависимости от теку-
щего графического драйвера и текущего графического режима. Для
адаптера CGA данная процедура задает цвет развертки.

Например, в режиме CGAC1 палитра содержит четыре цвета: чер-
ный, красный, желтый и зеленый. SetBkColor(0) выбирает в качестве
фонового цвета черный, значение 1 задает красный цвет и т.д.

Ограничения: Должен использоваться графический режим.

См. также: GetBkColor, GetColor, GetPalette, SetAllPalette,
SetColor, SetPalette.

Пример:

uses Crt, Graph;
var
GraphDriver, GraphMode : integer;
Palette : PaletteType
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
Randomize;
If GraphResult <> grOk then
Halt(1);
GetPalette(Palette);
repeat
SetBkColor(Random(Palette.Size));
LineTo(Random(GetMatX),Random(GetMatY));
until KeyPressed { для выхода нажмите клавишу }
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 341 -


Процедура SetCBreak модуль Dos
-----------------------------------------------------------------

Назначение: Устанавливает проверяемое операционной системой
DOS состояние Ctrl+Break.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetCBreak(Break: Boolean);

Примечания: Данная процедура устанавливает проверяемое DOS
состояние Ctrl+Break. Когда это состояние выключено (False), DOS
проверяет Ctrl+Break только во время выполнения ввода-вывода на
консоль, устройство печати или порты. Во включенном состоянии
(True) проверки выполняются при каждом системном выводе.

См. также: GetCBreak.



B.Pascal 7 & Objects/PG - 342 -


Процедура SetColor модуль Graph
-----------------------------------------------------------------

Назначение: Используя палитру устанавливает текущий цвет ри-
сунка (Color).

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetColor(Color: Word);

Примечания: SetColor(0) задает использование первого цвета
палитры в качестве текущего цвета рисунка. Цвета рисунка могут
принимать значения в диапазоне о 0 до 15, в зависимости от ис-
пользуемого графического драйвера и графического режима.

Наибольший допустимый цвет для текущего драйвера и режима
возвращает подпрограмма GetMaxColor.

Ограничения: Должен использоваться графический режим.

См. также: DrawPoly, SetRGBPalette, GetBkColor, GetColor,
GetPalette, SetAllPalette, GetColor, SetPalette.

Пример:

uses Crt, Graph;
var
GraphDriver, GraphMode : integer;
Palette : PaletteType
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
Randomize;
If GraphResult <> grOk then
Halt(1);
GetPalette(Palette);
repeat
SetBkColor(Random(Palette.Size));
LineTo(Random(GetMatX),Random(GetMatY));
until KeyPressed;
end.



B.Pascal 7 & Objects/PG - 343 -


Процедура SetCurDir модуль WinDos
-----------------------------------------------------------------

Назначение: Изменяет текущий каталог на маршрут, заданный
параметром Dir.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetCurDir(Dir: PChar);

Примечания: Если Dir задает буквенную метку диска, то теку-
щий диск также изменяется. Об ошибках сообщается в DosError.

Те же функции, что и SetCurDir, выполняет подпрограмма
ChDir, но вместо строки с завершающим нулем она воспринимает
строку Паскаля.

См. также: GetCurDir, GreateDir, RemoveDir.

Процедура SetDate модуль Dos
-----------------------------------------------------------------

Назначение: Устанавливает текущую дату в операционной систе-
ме.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure SetDate(var Y, M, D, Dw: Word);

Примечания: Возвращаемые значения имеют следующие допустимые
диапазоны: Y (год) - 1980..2099, M (месяц) - 1..12, D (число)
1..31, Dw (день недели) - 0..6 (где значение 0 соответствует
воскресенью). Если дата указана неверно, то запрос игнорируется.

См. также: GetDate, GetTime, SetTime.



B.Pascal 7 & Objects/PG - 344 -


Процедура SetFAttr модуль Dos
-----------------------------------------------------------------

Назначение: Возвращает атрибуты файла.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure SetAttr(var f; Attr: Word);

Примечания: Параметр f должен представлять собой файловую
переменную (соответствующую типизированному, нетипизированному
или текстовому файлу) для которого должно быть выполнено присваи-
вание файловой переменой, но который не должен быть открыт. Фор-
мирование атрибутов выполняется путем добавления соответствующих
масок, заданных в виде констант в модуле Dos (см. константы атри-
бутов файла).

Коды ошибок можно получить с помощью функции DosError. Воз-
можными кодами ошибок являются код 3 (недопустимый маршрут) и код
5 (доступ к файлу запрещен).

Ограничения: Файл не может быть открыт.

См. также: GetFAttr, GetFTime, SetFTime.

Пример:

{ в Windows используйте модуль WinCrt }
uses Dos;
var
f : file;
begin
Assign(f,'C:\AUTOEXEC.BAT');
SetFAttr(f, Hidden); { или faHidden под Windows }
Readln;
SetFAttr(f, Archive); { или faArchive под Windows }
end.



B.Pascal 7 & Objects/PG - 345 -


Процедура SetFillPattern модуль Graph
-----------------------------------------------------------------

Назначение: Выбирает заданный пользователем образец закрас-
ки.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetFillPattern(Pattern: FillPatternType;
Color: Word);

Примечания: Устанавливает тип закраски и ее цвет для всех
типов закраски, выполняемых процедурами FillPoly, Bar, FloodFill,
Bar3D и PieSlice, битовый образец закраски, задаваемый процедурой
Pattern, и цвет, задаваемый процедурой Color. Тип FillPatternType
определен в модуле Graph.

Образец закраски основывается на внутренних байтовых значе-
ниях, содержащихся в массиве Pattern. Этот массив имеет длину 8
байт, и каждый байт соответствует 8 элементам изображения в об-
разце закраски. Если бит в байте образца закраски принимает зна-
чение 1, то элемент изображения будет построен. Следующий образец
закраски представляет собой, например, закраску в виде "шахматной
доски" (50% полутон):

----------------------------------------------------------------¬
¦ Двоичный вид Шестнадцатиричный вид ¦
+---------------------------------------------------------------+
¦ 10101010 = $AA (первый байт) ¦
¦ 01010101 = $55 (второй байт) ¦
¦ 10101010 = $AA (третий байт) ¦
¦ 01010101 = $55 (четвертый байт) ¦
¦ 10101010 = $AA (пятый байт) ¦
¦ 01010101 = $55 (шестой байт) ¦
¦ 10101010 = $AA (седьмой байт) ¦
¦ 01010101 = $55 (восьмой байт) ¦
L----------------------------------------------------------------

Определенные пользователем типы закраски позволяют вам соз-
давать типы закраски, отличающиеся от заранее определенных, кото-
рые могут выбираться с помощью процедуры SetFillStyle. Всякий
раз, когда вы выбираете новый образец закраски с помощью процедур
SetFillPattern или SetFillStyle все операции закраски будут вы-
полняться с использованием этого типа закраски. При обращении ви-
да SetFillStyle(UserField, SomeColor) всегда будет выбираться об-
разец, заданный пользователем. Это позволяет вам определять и
использовать с помощью процедуры SetFillPattern новый образец
закраски, а затем переходить от встроенного образца закраски к
новому, заданному вами, обращаясь к процедуре YetTextStyle.

Ограничения: Должен использоваться графический режим.


B.Pascal 7 & Objects/PG - 346 -

См. также: Bar, Bar3D, FillPoly, GetFillPattern,
GetFillSettings GraphResult, константы grXXXX, PieSlice.

Пример:

uses Graph;
const
Gray50 : FillPatternType = ($AA, $55, $AA, $55, $AA, $55,
$AA, $55);
var
Driver, Mode: integer;
begin
Driver := Detect; { перевести в графический режим }
InitGraph(Driver, Mode, '');
if GraphResult <> 0 then
Halt(1)
SetFillPattern(Gray50, White);
Bar(0, 0, 100, 100); { нарисовать столбец, используя 50%
полутон }
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 347 -


Процедура SetFillStyle модуль Graph
-----------------------------------------------------------------

Назначение: Устанавливает тип закраски и ее цвет.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetFillStyle(Pattern: Word; Color:
Word);

Примечания: Устанавливает образец Pattern и цвет Color зак-
раски для всех видов закраски, выполняемых процедурами FillPoly,
Bar, Bar3D, и PieSlice. Можно использовать множество типов зак-
раски. По умолчанию выбирается сплошная закраска белого цвета.
См. определение констант образцов закраски.

Если процедуре SetFillStyle передан недопустимый ввод, то
GraphResult возвращает значение grError, а текущая закраска не
изменяется. Если Pattern равно UserFill, то активным образцом
закраски становится образец, определенный пользователем (с по-
мощью подпрограммы SetFillPattern).

Ограничения: Должен использоваться графический режим.

См. также: Bar, Bar3D, FillPoly, FillPatternType,
GetFillSettings, PieSlice, GetMaxColor, GraphResult.

Пример:

SetFillStyle(SolidFill,0);
Bar(x1, y1, x2, y2);
SetFillStyle(XHatchFill,0);
Bar(x1, y1, x2, y2);



B.Pascal 7 & Objects/PG - 348 -


Процедура SetFTime модуль Dos, WinDos
-----------------------------------------------------------------

Назначение: Устанавливает дату и время последней записи фай-
ла.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure SetTime(var f; Time: Longint);

Примечания: Параметр f должен быть файловой переменной, со-
ответствующей типизированному, нетипизированному или текстовому
файлу. Параметр времени Time можно сформировать с помощью обраще-
ния к процедуре РасkТiме. Ошибки можно получить с помощью функции
DosError. Единственно возможным кодом ошибки является код 6 (не-
допустимый файловый канал).

Ограничения: Файл f должен быть открыт.

См. также: DosError, GetFTime, PackTime, UnPackTime,
SetFAttr.

Процедура SetGraphMode модуль Graph
-----------------------------------------------------------------

Назначение: Позволяет вам изменить размер буфера, используе-
мого для закраски.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetGraphBufSise(BufSize: Word);

Примечания: Для внутреннего буфера устанавливается размер,
соответствующий параметру BufSize. Этот буфер выделяется в дина-
мически распределяемой области памяти при обращении к процедуре
InitGraph.

По умолчанию буфер имеет размер 4К. Этого достаточно для за-
полнения многоугольника штриховкой примерно из 650 линий. В неко-
торых достаточно редких ситуациях может потребоваться изменить
размеры буфера, чтобы избежать его переполнения.

Ограничения: Если обращение к процедуре InitGraph уже было,
то вызов процедуры SetGraphBufSize игнорируется.

См. также: FloodFill, FillPoly, InitGraph.



B.Pascal 7 & Objects/PG - 349 -


Процедура SetGraphMode модуль Graph
-----------------------------------------------------------------

Назначение: Устанавливает для системы графический режим и
очищает экран.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetGraphMode(Mode: Integer);

Примечания: Параметр Mode должен задавать для текущего драй-
вера устройства допустимый графический режим. Данная процедура
используется для выбора графического режима, отличного от того,
который по умолчанию устанавливается процедурой InitGraph.

Процедура SetGraphMode может также использоваться вместе с
процедурой RestoreCrtMode для переключения между текстовым и гра-
фическим режимами.

Процедура SetGraphMode сбрасывает все графические параметры
(текущий указатель, палитру, цвет, область просмотра и т.д.) в те
значения, которые назначаются для них по умолчанию.

Если делается попытка выбрать для текущего драйвера устройс-
тва недопустимый режим, то функция GraphResult возвращает значе-
ние -10 (grInvalidMode).

См. описание констант драйвера и режима, а также список
драйверов и режимов.

Ограничения: Перед обращением к данной процедуре необходимо
выполнить (с нормальным завершением) вызов процедуры InitGraph.

См. также: ClearDevice, CloseGraph, DetectGraph,
GetGraphMode, InitGraph, RestoreCrtMode, GraphResult,
GetModeRange, константы драйвера и режима.

Пример:

uses Graph;
var
GraphDriver : integer;
GraphMode : integer;
LowMode : integer;
HighMode : integer;
begin
GraphDriver := Detect;
InitGraph(GraphDriver, GraphMode, '');
if GraphResult <> grOk then
Halt(1);
GetModeRange(GraphDriver, LowMode, HighMode);
SetGraphMode(LowMode); { выбрать режим с низким

B.Pascal 7 & Objects/PG - 350 -

разрешением }
Line(0, 0, GetMaxX, GetMaxY);
Readln;
CloseGraph;
end.

Процедура SetIntVec модуль Dos, WinDos
-----------------------------------------------------------------

Назначение: Устанавливает по указанному адресу заданный век-
тор прерывания.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetIntVec(IntNum: Byte; Vec: Pointer);

Примечания: Параметр IntNum задает номер вектора прерывания
(0...255), а параметр Vec задает его адрес. Чтобы получить адрес
процедуры обработки, прерываний параметр Vec часто задается с ис-
пользованием оператора @. Предположим, что Int1BSave является пе-
ременной типа указатель и Int1BHandler - идентификатор процедуры
обработки прерываний. Тогда следующая последовательность операто-
ров задает новый обработчик прерывания $В1, а затем восстанавли-
вает исходный обработчик прерывания:

GetIntVec($1B,Int1BSave);
SetIntVec($1b,@Int1BHandler);
.
.
.
SetIntVec($1B,Int1BSave);

Ограничения: В защищенном режиме DOS, а также в стандартном
и улучшенном режимах Windows SetIntVec устанавливает вектор пре-
рывания защищенного режима с заданным номером вектора прерывания.
SetIntVec нельзя использовать для модификации векторов прерываний
реального режима или векторов исключительных ситуаций защищенного
режима.

См. также: GetIntVec.



B.Pascal 7 & Objects/PG - 351 -


Процедура SetLineStyle модуль Graph
-----------------------------------------------------------------

Назначение: Устанавливает текущую толщину S и тип линии
SType.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetLineStyle(SType: Word; Pattern: Word;
S: Word);

Примечания: Данная процедура влияет на все типы линий, вы-
черчиваемые процедурами Line, LineTo, RecTangle, DrawPoly, Arc,
Circle и др. Могут вычерчиваться непрерывные, пунктирные линии,
линии, состоящие из точек или точек и тире. Если процедуре
SetLineStyle передаются неверные параметры, то GraphResult будет
возвращать значение grError и текущие установки останутся неизме-
ненными. См. константы типов линий. SType - это значение от
SolidLn до IserBitLn(0..4). Если SType не равно UserBitLn,
Pattern игнорируется. S - это NormWidth или ThickWidth. Когда
SType равно UserBitLn, линия выводится с помощью 16-битового об-
разца, определенного параметром Pattern. Например, если Pattern =
$AAAA, то 16-битовый образец выглядит следующим образом

1010101010101010 { NormWidth }

1010101010101010 { ThickWidth }
1010101010101010
1010101010101010

Ограничения: Должен использоваться графический режим.

См. также: SetLineStyle, Line, LineRel, LineTo,
SetWriteMode, GraphResult.

B.Pascal 7 & Objects/PG - 352 -


Пример:

uses Graph;
var
GraphDriver, GraphMode : integer;
x1, y1, x2, y2 : integer;
begin
GraphDriver := Detect;
InitGraph(GraphDriver,GraphMode,'');
if GraphResult <> grOk then
Halt(1);
x1 := 10;
y1 := 10;
x2 := 200;
y2 := 150;
SetLineStyle(DottedLn,0,NormVidth);
Rectangle(x1,y1,x2,y2);
SetLineStyle(UserBitLn,$C3,ThickWidth);
Rectangle(Pred(x1), Pred(y1), Succ(x2), Succ(y2));
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 353 -


Процедура SetPalette модуль Graph
-----------------------------------------------------------------

Назначение: Изменяет один из цветов палитры в соответствии с
параметрами N (номер цвета) и Color (цвет).

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetPalette(N: Word; Color: Shortint);

Примечания: Изменяет в палитре запись N на Color. SetPalette
(0,LightCyan) устанавливает в качестве первого цвета палитры
светло-бирюзовый. В зависимости от текущего графического драйвера
и текущего графического режима параметр N может принимать значе-
ния от 0 до 15. При передаче SetPalette недопустимого ввода
GraphResult возвращает значение grError.

Внесенные в палитру изменения немедленно отображаются на эк-
ране. В приведенном далее примере на экране рисуется несколько
линий, затем палитра случайным образом изменяется. Каждый раз,
когда изменяется цвет палитры, все места на экране, где использу-
ется данный цвет, будут изменяться в соответствии с новым значе-
нием.

Ограничения: Должен использоваться графический режим. Может
применяться только с EGA, EGA 64 или EGA (но не с IBM 8514).

См. также: GetBkColor, GetColor, SetAllPalette, SetBkColor,
SetColor, SetRGBPalette, GraphResult.

Пример:

uses Crt, Graph; var
Graphriver, GraphMode : integer;
Color : word;
Palette : PaletteType;
begin
GraphDriver := Detect;
InitGraph(GraphDriver, GraphMode,'');
if GraphResult <> grOk then
Halt(1);
SetPalette(Palette);
for Color := 0 to Pred(Palette.Size) do
begin
SetColor(Color);
Line(Color, Color, Color*5, Color*5);
end;
Randomize;
repeat;
SetPalette(Random(Palette.Size),
Random(Palette.Size));
until KeyPressed;

B.Pascal 7 & Objects/PG - 354 -

end;
else
Line(0, 0, 100, 0);
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 355 -


Функция SetPrnFont модуль WinPrn
-----------------------------------------------------------------

Назначение: Начинает печать, используя выбранный шрифт.

Целевая платформа: Windows.

Описание: function SetPrnFont(var F: Text; Font: HFont):
HFont;

Примечания: Функция SetPrnFont вызывает печать файла с ис-
пользованием данного шрифта. Возвращается описатель шрифта, ис-
пользуемого в данный момент принтером. Если возвращаемый описа-
тель не предполагается использовать далее в программе, то его
можно уничтожить, вызвав подпрограмму DeleteObject. Описатель
шрифта можно создать с помощью функций API Windows CreateFont или
CreateFontIndirect.

Пример:

program Test;
uses WinTypes, WinProcs, WinCrt, WinPrn;
Prn: Text;
OldFont: HFont;
begin
Writeln(' Печать... ');
AssingDefPrn(Prn);
Rewrite(Prn);
Writeln(Prn, 'Некоторый текст');
OldFont := SetPrnFont(Prn, CreateFont(100, 0, 0, 0, 0, 0,
0, 1, Old_Default_Precis, Clip_Default_Precis,
Default_Quality, ff_Roman, nil);
Writeln(Prn, 'Некоторый текст новым шрифтом');
DeleteObject(SetPrnFont(Prn, OldFont));
Writeln(Prn, 'Снова старый шрифт');
Close(Prn);
Writeln('Выполнено');
end.

См. также: AbortPrn, AssingDefPrn, AssingPrn, TitlePrn.



B.Pascal 7 & Objects/PG - 356 -


Процедура SetRGBPalette модуль Graph
-----------------------------------------------------------------

Назначение: Позволяет изменить записи палитры для драйверов
IBM 8514 и VGA.

Целевая платформа: Реальный режим, защищенный режим.

Описание: procedure SetRGBPalette(N, RedVavue, GreenValue,
BlueValue: Integer);

Примечания: Параметр N задает запись палитры, которую нужно
загрузить, а RedValue, GreenValue и BlueValue - цвета, составляю-
щие запись палитры.

Для дисплея IBM 8514 N принимает значения в диапазоне
0..255. Для VGA в цветном режиме и 256К N (номер цвета) принимает
значения в диапазоне 0..15. Используется только младший байт
RedValue, GreenValue и BlueValue и только 6 старших бит этого
байта загружаются в палитру.

Замечание: В целях совместимости с другими графическими
адаптерами фирмы IBM драйвер BGI определяет первые 16 записей па-
литры IBM 8514 для адаптеров EGA/VGA. Эти значения могут исполь-
зоваться непосредственно или изменяться с помощью процедуры
SetRGBPalette.

Ограничения: Процедура SetGRBPalette может использоваться
только при наличии графического адаптера VGA и драйвера IBM 8514.

См. также: SetBkColopr, GetColor, GetPalette, GraphResult,
SetAllPalette, SetBkColor, SetColor, SetPalette.

Пример:

uses Graph;
type
GRBRec = record
RedVal, GreenVal, BlueVal : integer;
end;
const
EGAColors : array[0..MaxColors] of
GRBRec =( { Назв. Цвет }
(RedVal:$00;GreenVal:$00;BlueVal:$00), {черный EGA 0}
(RedVal:$00;GreenVal:$00;BlueVal:$FC), {голуб. EGA 1}
(RedVal:$24;GreenVal:$FC;BlueVal:$24), {зелен. EGA 2}
(RedVal:$00;GreenVal:$FC;BlueVal:$FC), {бирюз. EGA 3}
(RedVal:$FC;GreenVal:$14;BlueVal:$14), {красн. EGA 4}
(RedVal:$B0;GreenVal:$00;BlueVal:$FC), {малин. EGA 5}
(RedVal:$70;GreenVal:$48;BlueVal:$FC), {корич. EGA 20}
(RedVal:$C4;GreenVal:$C4;BlueVal:$C4), {белый EGA 7 }
(RedVal:$34;GreenVal:$34;BlueVal:$34), {серый EGA 56}

B.Pascal 7 & Objects/PG - 357 -

(RedVal:$00;GreenVal:$00;BlueVal:$70), {св.гол.EGA 57}
(RedVal:$00;GreenVal:$70;BlueVal:$00), {св.зел.EGA 58}
(RedVal:$00;GreenVal:$70;BlueVal:$70), {св.бир.EGA 59}
(RedVal:$70;GreenVal:$00;BlueVal:$00), {св.кр. EGA 60}
(RedVal:$70;GreenVal:$00;BlueVal:$70), {св.мал.EGA 61}
(RedVal:$FC;GreenVal:$FC;BlueVal:$24), {желтый EGA 62}
(RedVal:$FC;GreenVal:$FC;BlueVal:$FC), {я.белыйEGA 63}
);
var
Driver, Mode,
i : integer;
begin
Driver := IBM8514; { отменить автообнаружение }
Mode := IBM8514Hi;
InitGraph(Driver, Mode, ''); { перевести в
графический режим }
if GraphResult < 0 then
Halt(1);
{ нулевая палитра, весь графический вывод невидим }
for i := 0 to MaxColors do
with EGAColors[i] do
SetRGBPalette(i, 0, 0, 0);
{ вывести что-нибудь на экран }
{ изменить первый 16 записей палитры для 8514 }
for i := 1 to MaxColors do
begin
SetColor(i);
OutText(10, i*10, '...Нажмите любую клавишу..');
end;
{ восстановить принятые по умолчанию цвета EGA в
палитру 8514 }
for i := 0 to MaxColors do
with EGAColors[i] do
SetRGBPalette(i, RedVal, GreenVal, BlueVal);
Readln;
CloseGraph;
end.

B.Pascal 7 & Objects/PG - 358 -


Функция SetSelectorBase модуль WinAPI
-----------------------------------------------------------------

Назначение: Устанавливает базовый адрес селектора.

Целевая платформа: Защищенный режим, Windows.

Описание: function SetSelectorBase(Selector: Word; Base:
Longint): Word;

Примечания: Устанавливает базовый адрес селектора, заданный
параметром Selector, для линейного адреса, заданного параметром
Base. При успешном выполнении функции возвращаемое значение равно
Selector, в противном случае - нулю.

См. также: GetSelectorBase, GetSelectorLimit,
SetSelectorLimit.

Функция SetSelectorLimit модуль WinAPI
-----------------------------------------------------------------

Назначение: Устанавливает предельное значение селектора.

Целевая платформа: Защищенный режим, Windows.

Описание: function SetSelectorLimit(Selector: Word; Base:
Longint): Word;

Примечания: Устанавливает предельное значение селектора, за-
данного параметром Selector, в значение, заданное параметром
Limit. В стандартном режиме Windows и в защищенном режиме DOS за-
даваемое Limit значение не должно превышать $10000 (64K). Возвра-
щаемое значение всегда равно 0.

См. также: GetSelectorBase, GetSelectorLimit,
SetSelectorBase.



B.Pascal 7 & Objects/PG - 359 -


Процедура SetTextBuf модуль System
-----------------------------------------------------------------

Назначение: Назначает для текстового файла буфер ввода-выво-
да.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure SetTextBuf(var f: Text; var Buf [ ;
Size: Word]);

Примечания: Параметр f представляет собой файловую перемен-
ную, соответствующую текстовому файлу. Параметр Buf (буфер) - лю-
бая переменная, а параметр Size (размер) - необязательное выраже-
ние длиной в слово.

Каждая файловая переменная для текстового файла имеет внут-
ренний буфер размером в 128 байт, который по умолчанию использу-
ется для буферизации операций чтения и записи. Этот буфер подхо-
дит для использования во многих прикладных задачах, однако прог-
раммы, выполняющие значительное количество операций ввода-вывода
(например, задачи, осуществляющие копирование или преобразование
текстовых файлов) будут лучше работать с буфером большего разме-
ра, поскольку это уменьшает перемещение головки по поверхности
диска и избыточное использование файловой системы.

Процедура SetTextBuf переназначает буфер, используемый для
текстового файла f: вместо внутреннего буфера файла f использует-
ся буфер, заданный параметром Buf. Параметр Size задает размер
буфера в байтах. Если этот параметр опущен, то подразумевается
использование SizeOf(Buf), то есть по умолчанию в качестве буфера
используется вся область памяти, занятая буфером. Новый буфер
действует до тех пор, пока для f вновь не выполняется процедура
Assign.

Ограничения: Данная процедура никогда не должна применяться
для открытого файла, хотя вызывать ее можно немедленно вслед за
обращением к процедурам Reset, Rewrite и Appеnd. Вызов процедуры
SetTextBuf для открытого файла во время выполнения операций вво-
да-вывода может из-за смены буфера привести к потере данных.

Borland Pascal не обеспечивает существования буфера на все
время выполнения операций ввода-вывода для файла. Общей ошибкой,
в частности, является введение в качестве буфера локальной пере-
менной и затем использование файла вне процедуры, в которой опи-
сывается буфер.

Пример:

{ в Windows используйте модуль WinCrt }
var

B.Pascal 7 & Objects/PG - 360 -

f : text;
ch : char;
buf : char; { буфер 10 К }
begin
{ назначить для файла считывание из командной строки }
Assign(f, ParamStr(1));
{ ввести для более быстрого чтения буфер большего
размера }
SetTextBuffer(f, buf);
Reset(f);
{ вывести текстовый файл на экран }
while not Eof(f) do
begin
Read(f, ch);
Write(ch);
end;
end.



B.Pascal 7 & Objects/PG - 361 -


Процедура SetTextJustify модуль Graph
-----------------------------------------------------------------

Назначение: Устанавливает значения выравнивания текста, ко-
торые используются процедурами OutText и OutTextXY.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure SetTextJustify(Goriz, Vert: Word);

Примечания: После процедуры SetTextJustify вывод текста бу-
дет выравниваться по текущему указателю заданным способом. При
использовании двух следующих операторов:

SetTextJustify(CenterText, CenterText);
OutTextXY(100, 100, 'ABC');

в середине точки с координатами (100,100) появится буква B. Уста-
новленные по умолчанию параметры выравнивания можно восстановить
с помощью вызова SetTextJustify(LeftText,TopText). Если процедуре
SetTextJustify передаются недопустимые параметры, функция
GraphResult будет возвращать значение -11 (grError), а текущие
параметры выравнивания текста останутся неизмененными. См. описа-
ние констант выравнивания.

Ограничения: Должен использоваться графический режим.

См. также: SetLineStyle, OutTextXY, GetTextSettings,
OutText, TextHeight, TextWidth, SetUserCharSize, GraphResult.

Пример:

uses Graph;
var
Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
{ выравнивание текста относительно центра экрана }
SetTextJustify(CenterText, CenterText);
OutTextXY(Succ(GetMaxX) div 2,
Succ(GetMaxY) div 2,
'Легко центрируется');
ReadLn;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 362 -


Процедура SetTextStyle модуль Graph
-----------------------------------------------------------------

Назначение: Устанавливает текущий шрифт Font, тип S и коэф-
фициент размера символа Size.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure SetTextStyle(Font: word; S: word; Size:
CharSizeType);

Примечания: Процедура влияет на весь текстовый вывод, выпол-
няемый процедурами OutText и OutTextXY. Можно использовать один
шрифт с двоичным образом 8х8 и несколько векторных шрифтов. Под-
держивается нормальное (слева направо) расположение шрифта и вер-
тикальное (развернутое на 90 градусов относительно нормального
расположения), при котором текст начинается с нижней границы эк-
рана и продолжается вверх. Размер каждого символа может увеличи-
ваться на коэффициент, задаваемый параметром Size. Значение раз-
мера символа, равное единице, приводит к выводу двоичного образа
шрифта 8х8 в прямоугольную область экрана, содержащую 8х8 элемен-
тов изображения, параметр Size, равный 2 приведет к выводу на эк-
ран двоичного образа шрифта 8х8 в прямоугольную область элементов
изображения размером 16х16 и т. д. (вплоть до десятикратного уве-
личения нормального размера). Для определения действительных раз-
меров шрифта всегда используйте процедуры TextHeight и TextWidth.

Нормальными значениями размера для шрифта являются 1 для
принятого по умолчанию шрифта и 4 для векторного шрифта. Эти зна-
чения можно передавать процедуре SetTextStyle в параметра Size.
Для настройки размера векторного текстового шрифта можно исполь-
зовать процедуру SetUserFont.

Обычно векторные шрифты при обращении к процедуре
SetTextStyle шрифты загружаются с диска в динамически распределя-
емую область памяти. Однако, вы сами можете загрузить шрифты или
скомпоновать их непосредственно с вашим файлом .EXE. В этом слу-
чае для регистрации шрифта модулем Graph используйте процедуру
RegisterBGIfont.

Когда векторные шрифты хранятся на диске, при попытке их
загрузки могут происходить ошибки. При наличии ошибок функция
GraphResult возвращает одно из следующих значений: grFontMem,
grNoFontMem, grError, rgIOError, rgInvalidFont или
grInvalidFontNum.

Ограничения: Должен использоваться графический режим.

См. также: SetTextJustify, TextHeight, SetTextSettings,
TextWidth, GetTextSettings, RegisterBGIfont, GraphResult,
SetUserCharSize.


B.Pascal 7 & Objects/PG - 363 -

Пример:

uses Graph;
var
Gd, Gm : integer;
Y, Size : integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
Y := 0;
for Size := 1 to 4 do
begin
SetTextStyle(DefaultFont, HorizDir, Size);
OutText(1,y,'Размер = '+Chr(Size+48));
Inc(Y, TextHeight('H') + 1);
end;
Readln;
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 364 -


Процедура SetTime модуль Dos
-----------------------------------------------------------------

Назначение: Устанавливает в операционной системе текущее
время.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure SetTime(var Hour, Min, Sec, Ssec: Word);

Примечания: Возвращаемые параметры принимают следующие зна-
чения: Hour (час) - от 0 до 23, Min (минута) - от 0 до 59, Sec
(секунда) - от 0 до 59 и Ssec (сотая доля секунды) - от 0 до 99.

См. также: GetTime, GetDate, PackTime, SetDate, UnpackTime.

Процедура SetUserCharSize модуль Graph
-----------------------------------------------------------------

Назначение: Позволяет пользователю изменять высоту и ширину
символа для векторных шрифтов.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure SetUserCharSize(MultX, DivX, MultY,
DivY: Word);

Примечания: Параметр MultX:DivX представляет собой отноше-
ние, умноженное для активного шрифта на обычную ширину.
MultY:DivY - это отношение, умноженное для активного шрифта на
нормальную высоту. Например, чтобы сделать шрифт вдвое выше, ис-
пользуйте для MultX значение 2, а DivX задайте равным 1 (2 div 1
= 2).

После вызова процедуры SetUserCharSize для того, чтобы шрифт
получил новый размер, вам не нужно сразу вызывать процедуру
SetTextStyle. При обращении к процедуре SetUserCharSize для теку-
щего символа устанавливается заданный размер.

Ограничения: Должен использоваться графический режим.


B.Pascal 7 & Objects/PG - 365 -

Пример: В данном примере показано, как можно изменить высоту
и ширину шрифта.

uses Graph;
var
Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
SetTextStyle(TriplexFont, HorizDir, 4);
OutText(Нормальный размер');
SetUserCharSize(1, 3, 1, 1);
OutText(Уменьшенный по высоте размер');
SetUserCharSize(3, 1, 1, 1);
OutText(Широкий шрифт');
Readln;
CloseGraph;
end.


B.Pascal 7 & Objects/PG - 366 -


Процедура SetVerify модуль Dos
-----------------------------------------------------------------

Назначение: Устанавливает в DOS состояние флага проверки.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure SetVerify(Verify: Boolean);

Примечания: Процедура SetVerify устанавливает в операционной
системе DOS состояние флага проверки. В сброшенном состоянии
(False) проверка операций записи на диск не выполняется. В уста-
новленном состоянии флага (True) при операциях записи на диск вы-
полняется поверки правильности выполнения операции.

См. также: GetVerify.

Процедура SetViewPort модуль Graph
-----------------------------------------------------------------

Назначение: Устанавливает для графического вывода текущую
область просмотра или окно.

Целевая платформа: Защищенный режим, реальный режим.

Описание: SetViewPort(х1, у1, х2, у2: Word; Clip: Boolean);

Примечания: Точка (x1,y1) задает верхний левый угол области
просмотра, а точка с координатами (x2,y2) определяет нижний пра-
вый угол (0 <= y1 < x2 и 0 <= y1 < y2). Левый верхний угол экрана
задается координатами (0,0).

Булевская переменная Cliр определяет, будет ли изображение
отсекаться текущими границами области просмотра. Процедура
SetVievPort(0,0,GetMaxX,GetMaxY,True) всегда задает в качестве
области просмотра все поле графического экрана. Определены следу-
ющие константы:

const
ClipOn := true;
ClipOff := false;

Все графические команды (например, GetX, ОutТехt, Rectangle,
МоvеТо и т. д.) зависят от текущей области просмотра. В качестве
примера заметим, что процедура МоvеТо перемещает текущий указа-
тель в точку (5,5) внутри области просмотра (абсолютными коорди-
натами данной точки были бы координаты (15,25)).


B.Pascal 7 & Objects/PG - 367 -

(0,0) (GetMaxX,0)
------------------------------------¬
¦ ¦
¦ --------¬ ¦
¦ ¦ ¦ ¦
¦ ¦ . ¦ ¦
¦ ¦ ¦ ¦
¦ L-------- ¦
¦ ¦
L------------------------------------
(0,GetMaxY) (GetMaxX,GetMaxY)

Если булевская переменная Cliр установлена в значение Truе,
то, когда выполняется обращение к процедуре SetViewPort, все ри-
сунки будут обрезаться на границах текущей области просмотра. За-
метим, что текущий указатель никогда не отсекается. В следующем
примере прямая линия не будет нарисована полностью, поскольку она
будет обрезана на границе области просмотра:

SetWiewPort(10, 10, 20, 20, ClipOn);
Line(0, 5, 15, 5);

Если бы не выполнялось отсечение, то прямая должна была бы
начинаться в точке с абсолютными координатами (10,15) и заканчи-
ваться в точке с абсолютными координатами (25,15). Но, поскольку
выполнялось отсечение, то в действительности прямая будет вычер-
чиваться, начиная с точки с абсолютными координатами (10,15), и
заканчиваться в точке (20,15).

Процедуры InitGraph, ClearDevice и SetGraphMode сбрасывают
определение текущей области просмотра и устанавливают в качестве
области просмотра весь экран. Текущее определение области прос-
мотра можно получить с помощью процедуры GetViewSettings, которая
воспринимает параметры следующего глобального типа:

type
ViewPortType = record
x1, y1, x2, y2 : word;
Clip : boolean;
end;

Процедура SetViewPort перемещает текущий указатель в точку с
координатами (0,0).

Ограничения: Должен использоваться графический режим.

См. также: ClearViewPort, GetViewSettings, GraphResult.


B.Pascal 7 & Objects/PG - 368 -

Пример:

uses Graph;
var
Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
if (gd = HercMono)
or (gd = EGA or (Gd = EGA64) or (Gd = VGA)
then
begin
SetVisualPage(0);
SetActivePage(1);
Rectangle(10, 20, 30, 40);
SetVisualPage(1);
end;
else
OutText('Страничный режим не поддерживается');
Readln;
CloseGraph;
end.

B.Pascal 7 & Objects/PG - 369 -


Процедура SetVisualPage модуль Graph
-----------------------------------------------------------------

Назначение: Задает номер отображаемой графической страницы.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure SetVisualPage(Page: Word);

Примечания: Страница, определяемая параметром Page, стано-
вится отображаемой графической страницей.

Несколько графических страниц поддерживается только графи-
ческими адаптерами EGA (256K), VGA и Неrcules. При использовании
нескольких графических страниц программа может выводить графичес-
кую информацию в страницу, не выводимую в данный момент на экран,
а затем быстро вывести на экран этот двоичный образ, сменив отоб-
ражаемую страницу с помощью процедуры SetVisualPage. Этот метод
особенно полезен в мультипликации.

Ограничения: Должен использоваться графический режим.

См. также: SetActivePage.

Пример:

uses Graph;
var
Gd, Gm : integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
if (gd = HercMono)
or (gd = EGA or (Gd = EGA64) or (Gd = VGA)
then
begin
SetVisualPage(0);
SetActivePAge(1);
Rectangle(10, 20, 30, 40);
SetVisualPage(1);
end;
else
OutText('Страничный режим не поддерживается');
Readln;
CloseGraph;
end.

B.Pascal 7 & Objects/PG - 370 -


Процедура SetWriteMode модуль Graph
-----------------------------------------------------------------

Назначение: Устанавливает режим записи Mode при вычерчивании
линии.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure SetWriteMode(Mode: Integer);

Примечания: См. список операций BitBlt, используемых в
SetWriteMode. Каждая константа соответствует двоичной операции
между каждым байтом строки и соответствующим байтом экрана. Для
константы CopyPut используется инструкция Ассемблера MOV. При
этом вычерчиваемая линия "затирает" то, что было на экране. Для
константы XORPut для комбинирования линии с изображением на экра-
не используется инструкция XOR. Две последовательные операции XOR
приведут к стиранию линии и восстановлению исходного изображения
на экране.

Процедура SetWriteMode влияет только на обращение к следую-
щим процедурам: DrawPoly, Line, LineRel, LineTo и Rectangle.

См. также: PutImage, SetLineStyle операции BitBlt, Line,
LineTo.

Пример:

uses Graph;
var
Gd, Gm : integer;
i : integer;
x1, y1, dx, dy : integer;
FillInfo : FillSettingsType;
begin
DirectVideo := false; { "выключить" запись на экран }
Randomize;
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
{ заполнить экран используемым по умолчанию
образцом }
GetFillSettings(FillInfo); { получить текущие параметры }
SetFillStyle(WideDotFill, FillInfo.Color);
Bar(0, 0, GetMaxX, GetMaxY);
dx := GetMAxX div 4; { задать размер прямоугольника }
dy := GetMaxY div 4;
SetLineStyle(SolidLn, 0, ThickWidth);
SetWriteMode(XORPut); { режим XOR для прямоугольника }
repeat
x1 := Random(GetMaxX - dx);

B.Pascal 7 & Objects/PG - 371 -

y1 := Random(GetMaxY - dy); { нарисовать его }
Delay(0); { короткая пауза }
Rectangle(x1, y1, x1 + dx, y1 + dy) { стереть его }
until KeyPressed;
Readln;
CloseGraph;
end.

B.Pascal 7 & Objects/PG - 372 -

Функция Sin модуль System
-----------------------------------------------------------------

Назначение: Возвращает синус аргумента.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Sin(x: Real): Real;

Примечания: Параметр x является выражением вещественного ти-
па. Результатом будет синус x. Предполагается, что это значение
задает угол в радианах.

Пример:

var
r : real;
begin
r := Sin(Y);
end.


B.Pascal 7 & Objects/PG - 373 -

Функция SizeOf модуль System
-----------------------------------------------------------------

Назначение: Возвращает число байт, занимаемых аргументом.

Целевая платформа: Защищенный режим, реальный режим,
Windows.
Описание: function SizeOf(x): Word;

Примечания: Параметр x является ссылкой на переменную или
идентификатором типа. Данная функция возвращает число байт памя-
ти, занимаемых x.

При передаче значений функциям FillChar, Моvе, GetМем всегда
следует использовать функцию SizeOf:

FillChar(s, SizeOf(s), 0);
GetMem(p, SizeOf(RecordType));

Пример:

type
CustRec = record
Name : string[30];
Phone : string[14];
end;
var
p : ^CustRec;
begin
GetMem(p, SizeOf(CustRec));
end.


B.Pascal 7 & Objects/PG - 374 -


Процедура SizeofResource модуль WinAPI
-----------------------------------------------------------------

Назначение: Возвращает размер ресурса.

Целевая платформа: Защищенный режим, Windows.

Описание: function SizeofResource(Instance, ResInfo:
THandle): Word;

Примечания: SizeofResource возвращает размер ресурса, задан-
ный параметрами Instance и ResInfo. Параметр Instance - это эк-
земпляр модуля, получаемый обычно из переменной HInstance модуля
System или создаваемой LoadLibrary. Параметр ResInfo должен быть
информацией о ресурсе, созданной подпрограммой FindResource. Если
ресурс не найден, возвращаемое значение равно 0.

Ограничения: Из-за выравнивания в выполняемом файле возвра-
щаемый размер может превышать фактический размер ресурса. Прик-
ладная программа не должна рассчитывать, что SizeofResource дает
точный размер ресурса.

См. также: AccessResource, FindResource.

Процедура Sound модуль Crt
-----------------------------------------------------------------

Назначение: Включает внутренний динамик.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Sound(Herz: Word);

Примечания: Параметр Herz задает частоту генерируемого сиг-
нала в герцах. Звуковой сигнал будет звучать до тех пор, пока он
не будет явным образом выключен обращением к процедуре NoSound.

См. также: NoSound.

Пример:

uses Crt;
begin
Sound(220); { сигнал }
Delay(200); { пауза }
NoSound; { выключить }
end;



B.Pascal 7 & Objects/PG - 375 -


Функция SPtr модуль System
-----------------------------------------------------------------

Назначение: Возвращает текущее значение регистра SP.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function SPtr: Word;

Примечания: Результат длиной в слово представляет собой сме-
щение указателя стека внутри сегмента стека.

См. также: Sseg.

Функция Sqr модуль System
-----------------------------------------------------------------

Назначение: Возвращает квадрат аргумента.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Sqr(x);

Примечания: Параметр x - это выражение целого или веществен-
ного типа. Результат, имеющий тот же тип, что и x, представляет
собой квадрат x, то есть x*x.



B.Pascal 7 & Objects/PG - 376 -


Функция Sqrt модуль System
-----------------------------------------------------------------

Назначение: Возвращает квадратный корень аргумента.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Sqrt(x: Real): Real;

Примечания: Параметр x представляет собой выражение вещест-
венного типа. Результатом является квадратный корень x.

Функция SSeg модуль System
-----------------------------------------------------------------

Назначение: Возвращает текущее значение регистра SS.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function SSeg: Word;

Примечания: Результат типа Word представляет собой адрес
сегмента стека.

См. также: Sptr, Cseg, Dseg.



B.Pascal 7 & Objects/PG - 377 -


Процедура Str модуль System
-----------------------------------------------------------------

Назначение: Преобразует численное значение в его строковое
представление.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure Str(х [: Size [: Dec ] ], var S:
String);

Примечания: Параметр x является выражением целого или ве-
щественного типа. Параметры Size и Dec представляют собой выраже-
ния целого типа. Параметр s - строковая переменная. Данная функ-
ция преобразует x в его строковое представление в соответствии в
параметрами форматирования Size (размер) и Dec. За исключением
того, что результирующая строка сохраняется в параметре s, а не
записывается в текстовый файл, результат выполнения процедуры бу-
дет в точности тот же самый, что и при обращении к стандартной
процедуре Write.

См. также: Val, Write.

Пример:

{ в Windows используйте WinCrt }
function IntToStr(i : longint) : string;
{ преобразует любое значение целого типа в строку }
var
s : string[1];
begin
Str(i,s);
IntToStr := s;
end;
begin
Writeln(IntToSt(-5322));
end.



B.Pascal 7 & Objects/PG - 378 -


Функция StrCat модуль Strings
-----------------------------------------------------------------

Назначение: Присоединяет копию одной строки к концу другой и
возвращает результат такой конкатенации.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrCat(Dest, Source: PChar): PChar;

Примечания: StrCat добавляет к Dest копию строки Source и
возвращает Dest. Эта функция не выполняет проверки длины. Вы
должны обеспечить, чтобы в буфере, заданном параметром Dest, было
достаточно места для StrLen(Dest) + StrLen(Source) + 1 символ.
Если вы хотите выполнять проверку длины, используйте функцию
StrCat.

См. также: StrCat.

Пример:

{ в Windows используйте WinCrt }
uses Strings;
const
Borland: PChar = 'Borland';
Pascal: PChar = 'Pascal';
var
S: array[0..15] of Char;
begin
StrCopy(S, Borland);
StrCatS, ' ');
StrCat(S, PAscal);
Writeln(S);
end.



B.Pascal 7 & Objects/PG - 379 -


Функция StrComp модуль Strings
-----------------------------------------------------------------

Назначение: Сравнивает две строки.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrCat(Str1, Str2: PChar): Integer;

Примечания: Функция StrComp сравнивает строку Str1 с Str2.
Возвращаемое значение меньше 0, если Str1 < Str2, равно 0, если
Str1 = Str2 или больше 0, если Str1 > Str2.

См. также: StrIComp, StrLComp, StrLIComp.

Пример:

{ в Windows используйте WinCrt }
uses Strings;
var
C: Integer;
Result: PChar;
S1, S2: array[0..79] of Char;
begin
Readln(S1);
Readln(S2);
C := StrComp(S1, S2);
if C < 0 then Result := ' меньше чем ' else
if C > 0 then Result := ' больше чем ' else
Result := ' равно ';
Writeln(S1, Result, S2);
end.



B.Pascal 7 & Objects/PG - 380 -


Функция StrCopy модуль Strings
-----------------------------------------------------------------

Назначение: Копирует одну строку в другую.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrCopy(Dest, Source: PChar): PChar;

Примечания: Функция StrCopy копирует строку Source в Dest и
возвращает результат в Dest. StrCopy не выполняет проверки длины.
Вы должны обеспечить, чтобы в буфере, заданном параметром Dest,
было достаточно места для StrLen(Source) + 1 символа. Если вы хо-
тите выполнять проверку длины, используйте функцию StrLCopy.

См. также: StrECopy, StrLCopy.

Пример:

{ в Windows используйте WinCrt }
uses Strings;
var
S: array[0..15] of Char;
begin
StrCopy(S, 'Borland Pascal');
Writeln(S);
end.

Функция StrDispose модуль Strings
-----------------------------------------------------------------

Назначение: Уничтожает строку в динамически распределяемой
области памяти.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrDispose(Str: PChar);

Примечания: Функция StrDispose уничтожает строку, распреде-
ленную ранее с помощью функции StrNew. Если Str имеет значение
nil, то функция StrDispose не делает ничего.

См. также: StrNew.



B.Pascal 7 & Objects/PG - 381 -


Функция StrECopy модуль Strings
-----------------------------------------------------------------

Назначение: Копирует одну строку в другую, возвращая указа-
тель на конец строки-результата.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrECopy(Dest, Source: PChar): PChar;

Примечания: Функция StrECopy копирует строку Source в Dest и
возвращает StrEnd(Dest). Вы должны обеспечить, чтобы в буфере,
заданном параметром Dest, было достаточно места для
StrLen(Source) + 1 символа. Для конкатенации последовательности
строк можно использовать вложенные вызовы StrECopy (см. пример).

См. также: StrCopy, StrEnd.

Пример:

{ в Windows используйте WinCrt }
uses Strings;
const
Borland: PChar = 'Borland';
Pascal: PChar = 'Pascal';
var
S: array[0..15] of Char;
begin
StrECopy(StrECopy(StrECopy(S, Borland), ' '), Pascal);
Writeln(S);
end.



B.Pascal 7 & Objects/PG - 382 -


Функция StrEnd модуль Strings
-----------------------------------------------------------------

Назначение: Возвращает указатель на конец строки.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrEnd(Str: PChar): PChar;

Примечания: Функция StrEnd возвращает указатель на нулевой
символ, завершающий строку Str.

См. также: StrLen.

Пример:

{ в Windows используйте WinCrt }
uses Strings;
const
S: array[0..79] of Char;
var
Readln(s);
Writeln('Длина строки равна ', StrEnd(S) - S);
end.

Функция StrIComp модуль Strings
-----------------------------------------------------------------

Назначение: Сравнивает две строки, не различая регистр сим-
волов.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrIComp(Str1, Str2: PChar): Integer;

Примечания: Функция StrIComp сравнивает строку Str1 со стро-
кой Str2, не учитывая регистр символов. Возвращаемое значение
меньше 0, если Str1 < Str2, равно 0, если Str1 = Str2 или больше
0, если Str1 > Str2.

См. также: StrComp, StrLComp, StrLIComp.



B.Pascal 7 & Objects/PG - 383 -


Функция StrLCat модуль Strings
-----------------------------------------------------------------

Назначение: Присоединяет копию одной строки к концу другой и
возвращает результат такой конкатенации.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrLCat(Dest, Source: PChar; MaxLen:
Word): PChar;

Примечания: StrCat добавляет к Dest копию строки Source (не
более MaxLen - StrLen(Dest) символов) и возвращает результат в
Dest. Для определения параметра MaxLen вы можете использовать
функцию SizeOf.

См. также: StrCat.

Пример:

{ в Windows используйте WinCrt }
uses Strings;
var
S: array[0..9] of Char;
begin
StrLCopy(S, 'Borland', SizeOf(S) - 1);
StrLCat(S, ' ', SizeOf(S) - 1);
StrLCat(S, 'Pascal', SizeOf(S) - 1);
Writeln(S);
end.



B.Pascal 7 & Objects/PG - 384 -


Функция StrLComp модуль Strings
-----------------------------------------------------------------

Назначение: Сравнивает две строки до максимальной длины.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrLComp(Str1, Str2: PChar; MaxLen:
Word): Integer;

Примечания: Функция StrLComp сравнивает строку Str1 с Str2
до максимальной длины MaxLen символов, Возвращаемое значение
меньше 0, если Str1 < Str2, равно 0, если Str1 = Str2 или больше
0, если Str1 > Str2.

См. также: StrComp, StrIComp, StrLIComp.

Пример:

{ в Windows используйте модуль WinCrt }
uses Strings;
var
Result: PChar;
S1, S2: array[0..79] of Char;
begin
Readln(S1);
Readln(S2);
if StrLComp(S1, S2, 5) = 0 then
Result := 'равны'
else
Result := 'не равны'
Writeln('Первые пять символов ', Result);
end;



B.Pascal 7 & Objects/PG - 385 -


Функция StrLCopy модуль Strings
-----------------------------------------------------------------

Назначение: Копирует символы из одной строки в другую.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrLCopy(Dest, Source: PChar; MaxLen:
Word): PChar;

Примечания: Функция StrLCopy копирует не более MaxLen симво-
лов из строки Source в Dest и возвращает результат в Dest. Для
определения параметра MaxLen можно использовать стандартную функ-
цию SizeOf (см. пример).

См. также: StrCopy.

Пример:

{ в Windows используйте WinCrt }
uses Strings;
const
var
S: array[0..9] of Char;
begin
StrLCopy(S, 'Borland Pascal', SizeOf(S) - 1);
Writeln(S);
end.

Функция StrLen модуль Strings
-----------------------------------------------------------------

Назначение: Возвращает число символов в Str.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrLen(Str: PChar): Word;

Примечания: Функция StrLen возвращает число символов в Str,
не считая нулевого завершающего символа.

См. также: StrEnd.

Пример:

{ в Windows используйте модуль WinCrt }
uses Strings;
var
S: array[0..79] of Char;
begin

B.Pascal 7 & Objects/PG - 386 -

Readln(S);
Writeln('Длина строки равна ', StrLen(S));
end.

Функция StrLIComp модуль Strings
-----------------------------------------------------------------

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

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrLIComp(Str1, Str2: PChar; MaxLen:
Word): Integer;

Примечания: Функция StrLComp сравнивает строку Str1 с Str2
до максимальной длины MaxLen символов без различия регистра сим-
волов. Возвращаемое значение меньше 0, если Str1 < Str2, равно 0,
если Str1 = Str2 или больше 0, если Str1 > Str2.

См. также: StrComp, StrIComp, StrLComp.

Функция StrLower модуль Strings
-----------------------------------------------------------------

Назначение: Преобразует строку в нижний регистр.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrLower(Str: PChar): PChar;

Примечания: Функция StrLower преобразует строку Str в нижний
регистр и возвращает результат в Str.

См. также: StrUpper.

Пример:

{ в Windows используйте модуль WinCrt }
uses Strings;
var
S: array[0..79] of Char;
begin
Readln(S);
Writeln(StrLower(S));
Writeln(StrUpper(S));
end.



B.Pascal 7 & Objects/PG - 387 -


Функция StrMove модуль Strings
-----------------------------------------------------------------

Назначение: Копирует символы из одной строки в другую.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrMove(Dest, Source: PChar; Count:
Word): PChar;

Примечания: Функция StrMove копирует ровно Count символов из
строки Source в Dest и возвращает результат в Dest. Source и Dest
могут перекрываться.

См. также: StrCopy.

Пример:

{ распределить память для строки в динамической области }
function StrNew(S: PChar): PChar;
var
L: Word;
P: PChar;
begin
if (S = nil) or (S^ = #0) then StrNew := nil else
begin
L := StrLen(S) + 1;
GetMem(P, L);
StrNew := StrMove(P, S, L);
end;
end;

{ освободить память для строки в динамической области }
procedure StrDispose(S: PChar);
begin
if S <> nil then FreeMem(S, StrLen(S) + 1);
end;



B.Pascal 7 & Objects/PG - 388 -


Функция StrNew модуль Strings
-----------------------------------------------------------------

Назначение: Выделяет память для строки в динамически распре-
деляемой области.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrNew(Str: PChar): PChar;

Примечания: Функция StrNew выделяет память для строки Str в
динамически распределяемой области. Если Str равно nil или указы-
вает на пустую строку, функция StrNew возвращает значение nil и
не выделяет память в динамической области. В противном случае
StrNew создает копию Str, получая память через вызов GetMem, и
возвращает указатель на строку-дубликат. Выделенная память имеет
размер StrLen(Str) + 1 байт.

См. также: Dispose.

Пример:

{ в Windows используйте модуль WinCrt }
uses Strings;
var
P: PChar;
S: array[0..79] of Char;
begin
Readln(S);
P := StrNew(S);
Wruiteln(P);
StrDispose(P);
end.



B.Pascal 7 & Objects/PG - 389 -


Функция StrPas модуль Strings
-----------------------------------------------------------------

Назначение: Преобразует строку с завершающим нулем в строку
Паскаля.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrPas(Str: PChar): String;

Примечания: Функция StrPas преобразует строку Str в строку
Паскаля.

См. также: StrCopy.

Пример:

{ в Windows используйте модуль WinCrt }
uses Strings;
var
A: array[0..79] of Char;
S: String[79];
begin
Readln(A);
S := StrPas(A);
Writeln(S);
end.



B.Pascal 7 & Objects/PG - 390 -


Функция StrPCopy модуль Strings
-----------------------------------------------------------------

Назначение: Копирует строку Паскаля в строку с завершающим
нулем.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrPCopy(Dest: PChar; Source: String):
PChar;

Примечания: Функция StrPCopy копирует строку Паскаля Source
в Dest и возвращает результат в Dest. Вы должны обеспечить, чтобы
в буфере, заданном параметром Dest, было достаточно места для
StrLen(Source) + 1 символа.

См. также: StrCopy.

Пример:

{ в Windows используйте модуль WinCrt }
uses Strings;
var
A: array[0..79] of Char;
S: string[79];
begin
Readln(S);
StrPCopy(A, S);
Writeln(A);
end.



B.Pascal 7 & Objects/PG - 391 -


Функция StrPos модуль Strings
-----------------------------------------------------------------

Назначение: Возвращает указатель на первое вхождение строки
в другой строке.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrPos(Str1, Str2: PChar): PChar;

Примечания: Функция StrPos возвращает указатель на первый
экземпляр Str2 в Str1. Если Str2 не содержится в Str1, то возвра-
щается значение nil.

См. также: StrCopy.

Пример:

{ в Windows используйте модуль WinCrt }
uses Strings;
var
P: PChar;
S, Substr: array[0..79] of Char;
begin
Readln(S);
Readln(SubStr);
P := StrPos(S, SubStr);
if P = nil then
Writeln('Подстрока не найдена');
else
Writeln('Подстрока найдена; индекс: ', P - S);
end.



B.Pascal 7 & Objects/PG - 392 -


Функция StrRScan модуль Strings
-----------------------------------------------------------------

Назначение: Возвращает указатель на последнее вхождение сим-
вола в строке.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrRScan(Str: PChar; Chr: Char): PChar;

Примечания: Функция StrRScan возвращает указатель на послед-
нее вхождение символа Chr в строке Str. Если Chr не содержится в
Str, то возвращается значение nil. Нулевой завершающий символ
считается частью строки.

См. также: StrScan.

Пример:

{ возвращает указатель на имя файла в полном имени
маршрута }
function NamePart(FileName: PChar): PChar;
var
P: PChar;
begin
P := StrRScan(FileName, '\');
if P = nil then P := FileName;
end;
NamePart := P;
end.



B.Pascal 7 & Objects/PG - 393 -


Функция StrScan модуль Strings
-----------------------------------------------------------------

Назначение: Возвращает указатель на первое вхождение символа
в строке.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrScan(Str: PChar; Chr: Char): PChar;

Примечания: Функция StrRScan возвращает указатель на первое
вхождение символа Chr в строке Str. Если Chr не содержится в Str,
то возвращается значение nil. Нулевой завершающий символ считает-
ся частью строки.

См. также: StrRScan.

Пример:

{ возвращает True, если имя файла содержит трафаретные сим-
волы }
function Wildcards(FileName: PChar): Boolean;
begin
HasWildcards := (StrScan(FileName, '*') <> nil) or
(StrScan(FileName, '?') <> nil);
end;

B.Pascal 7 & Objects/PG - 394 -


Функция StrUpper модуль Strings
-----------------------------------------------------------------

Назначение: Преобразует строку в верхний регистр.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function StrUpper(Str: PChar): PChar;

Примечания: Функция StrUpper преобразует строку Str в верх-
ний регистр и возвращает результат в Str.

См. также: StrLower.

Пример:

{ в Windows используйте модуль WinCrt }
uses Strings;
var
S: array[0..79] of Char;
begin
Readln(S);
Writeln(StrLower(S));
Writeln(StrUpper(S));
end.



B.Pascal 7 & Objects/PG - 395 -


Функция Succ модуль System
-----------------------------------------------------------------

Назначение: Возвращает следующее значение аргумента.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Succ(x);

Примечания: Параметр x - выражение перечислимого типа. Ре-
зультат, имеющий тот же тип, что и x, является следующим элемен-
том x.

См. также: Dec, Pred, Inc.

Функция Swap модуль System
-----------------------------------------------------------------

Назначение: Переставляет местами старший и младший байты ар-
гумента.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Swap(x);

Примечания: Параметр x - выражение типа Integer или Word.

См. также функции Hi, Lo.

Пример:

var
x : word;
begin
x := Swap($1234); { $3412 }
end.



B.Pascal 7 & Objects/PG - 396 -


Процедура SwapVectors модуль Dos
-----------------------------------------------------------------

Назначение: Меняет местами внутренние векторы.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure SwapVectors;

Примечания: Меняет местами содержимое указателей SaveIntXX в
модуле System и текущее содержимое векторов прерываний. Процедура
SwapVectors обычно вызывается непосредственно перед и непосредс-
твенно после вызова Exec. Таким образом обеспечивается, что вы-
полняемый по вызову Exec процесс не использует никаких обработчи-
ков прерываний, установленных текущим процессом и наоборот.

См. также: Еxec.

Пример:

{$M 8192,0,0}
uses Dos;
var
Command: string[79];
begin
Write('Введите команду DOS:');
Readln(Command);
if Command <> '' then
Command := '/C' + Command;
Swapvectors;
Exec(GetEnv('COMSPEC'), Command);
SvapVectors;
if DosError <> 0 then
Writeln('Командный файл COMMAND.COM выполнить нельзя');
end.



B.Pascal 7 & Objects/PG - 397 -


Процедура TextBackGround модуль Crt
-----------------------------------------------------------------

Назначение: Выбирает фоновый цвет.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure TextBackGroud(Color: byte);

Примечания: Параметр Color представляет собой выражение це-
лого типа в диапазоне 0...7, соответствующее одной из первых
восьми констант цветов.

В модуле Crt имеется байтовая переменная ТехtAttr, которая
используется для сохранения текущего видеоатрибута. Процедура
ТехtBackGround устанавливает биты 4-6 этой переменой в соответс-
твии с параметром Color. Фоновый цвет для всех выводимых далее
символов будет соответствовать заданному цвету.

См. также: TextColor, HighVideo, LowVideo, NormVideo, конс-
танты цветов.



B.Pascal 7 & Objects/PG - 398 -


Процедура TextColor модуль Crt
-----------------------------------------------------------------

Назначение: Выбирает цвет символа.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure TextColor(Color: Byte);

Примечания: Параметр Color представляет собой выражение це-
лого типа в диапазоне 0...15, соответствующее одной из констант
цветов, определенных в модуле Crt.

В модуле Crt имеется байтовая переменная ТехtAttr, которая
используется для сохранения текущего видеоатрибута. Процедура
ТехtBасkGround устанавливает биты 0-3 этой переменой в соответс-
твии с параметром Color. Если параметр Color превышает значение
15, то устанавливается также бит мерцания (бит 7), в противном
случае он очищается.

Вы можете задать мерцание символов путем прибавления 128 к
значению цвета. Для этой цели определена константа Blink. Факти-
чески ради совместимости с версией 3.0 любое значение цвета, пре-
вышающее 15 вызывает мерцание символа. Цвет всех выводимых далее
символов будет соответствовать указанному цвету.

См. также: TextBackGround, HighVideo, NormVideo, LowVideo,
константы цветов.

Пример:

TextColor(Green); ( выбрать зеленые символы }
TextColor(LightRed+Blink) ( выбрать мерцающие светло-
красные символы }
TextColor(14); ( выбрать желтые символы }



B.Pascal 7 & Objects/PG - 399 -


Функция TextHeight модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает высоту строки в элементах изображе-
ния.

Целевая платформа: Защищенный режим, реальный режим.

Описание: function TехtНеight(S: String): Word;

Примечания: На основе размера текущего шрифта и коэффициента
размера определяет строки, заданной параметром S, в элементах
изображения. Это полезно использовать для выбора интервала между
строками, вычисления высоты области просмотра, определения разме-
ра заголовка, чтобы он поместился в заданном рисунке или в задан-
ную область и т.д. Например, при использовании шрифта с двоичным
образом 8х8 и коэффициента размера 1 (установленных процедурой
SetTextStyle) строка Тurbо будет иметь высоту 8 элементов изобра-
жения.

Очень важно использовать процедуру TextHeight для вычисления
высоты строк, вместо того, чтобы делать это вручную. Тогда при
выборе различных шрифтов отпадает необходимость изменения текста
программы.

Ограничения: Должен использоваться графический режим.

См. также: OutText, OutTextXY, SetTextStyle, TextWidth,
SetUserCharSize.

Пример:

uses Graph;
var
Gd, Gm : integer;
Y, Size : integer;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
Y := 0;
for Size := 1 to 5 do
begin
SetTextStyle(DefaultFont, HorizText, Size);
OutTextXY(0, Y, 'Графика Borland');
Inc(Y, TextWidth('Графика Borland'));
end;
Readln;
CloseGraph;
end.


B.Pascal 7 & Objects/PG - 400 -


Процедура TextMode модуль Crt
-----------------------------------------------------------------

Назначение: Выбирает указанный текстовый режим.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure TехtМоdе(Mode: Integer);

Примечания: При вызове процедуры TехtМоdе сбрасывается теку-
щее окно и в качестве текущего окна рассматривается вся область
экрана, для DirectVideo устанавливается значение True, для
CheckSnow также устанавливается значение Truе (если был выбран
цветной режим), и текущий текстовый атрибут сбрасывается в нор-
мальное состояние, соответствующее обращению к процедуре
NormVideo, а текущий видеорежим сохраняется в LastMode. При ини-
циализации программы LastMode получает значение текущего видеоре-
жима.

Задание TextMode(LastMode) приводит к тому, что вновь будет
выбран последний активный текстовый режим. Это бывает полезно в
том случае, когда после использования графических средств вы хо-
тите вернуться в текстовый режим.

Обращение вида:

TextMode(c80 + Font8x8)

приведет к тому, что дисплей будет сброшен в состояние, при кото-
ром используется 43 строки и 80 позиций в строке и графический
адаптер VGA с цветным монитором. Обращение TextMode(Lo(LastMode))
всегда выключает 43 или 50-строчные режимы и сбрасывает дисплей
(хотя его видеорежим остается неизмененным), а вызов:

TextMode(lo(LastMode)+Font8x8)

оставит видеорежим тем же самым, но сбросит дисплей в 43 или
50-строчный режим.

Если при загрузке программы Borland Pascal ваша система на-
ходится в 43 или 50-строчном режиме, этот режим будет сохранен в
секции инициализации модуля Crt, и переменная, в которой отслежи-
вается максимальное число строк на экране (WindMax) будет инициа-
лизирована правильно.

Приведем пример "корректной" программы, которая восстанавли-
вает видеорежим в исходное состояние.

program Video;
uses Crt;
var
OrigMode : integer;

B.Pascal 7 & Objects/PG - 401 -

begin
OrigMode := LastMode; { сохранить исходный режим }
.
.
.
TextMode(OrigMode);
end.

Заметим, что процедура TextMode не поддерживает графических
режимов. Таким образом TextMode(OrigMode) будет восстанавливать
только те режимы, которые поддерживаются процедурой TextMode.

См. также: RestoreCrtMode, константы режима Crt.



B.Pascal 7 & Objects/PG - 402 -


Функция TextWidth модуль Graph
-----------------------------------------------------------------

Назначение: Возвращает ширину строки в элементах изображе-
ния.

Целевая платформа: Защищенный режим, реальный режим.

Описание: function TехtWidth(S: String): Word;

Примечания: На основе длины строки (в символах), размера те-
кущего шрифта и коэффициента размера определяет длину строки, за-
данной параметром S, в элементах изображения. Это полезно исполь-
зовать для выбора интервала между строками, вычисления ширины
области просмотра, определения размера заголовка, чтобы он помес-
тился в заданном рисунке или в заданную область и т.д.

Например, при использовании шрифта с двоичным образом 8х8 и
коэффициента размера 1 (установленными процедурой SetTextStyle)
строка Тurbо будет иметь длину 40 элементов изображения.

Очень важно использовать процедуру TextWidth для вычисления
ширины строк, вместо того, чтобы делать это вручную. Тогда при
выборе различных шрифтов отпадает необходимость изменения текста
программы.

См. также: OutText, OutTextXY, SetTextStyle, TextHeight,
SetUserCharSize.

B.Pascal 7 & Objects/PG - 403 -


Пример:

uses Graph;
var
Gd, Gm : integer;
Row, Size : integer;
Title : string;
begin
Gd := Detect;
InitGraph(Gd, Gm, '');
if GraphResult <> grOk then
Halt(1);
Row := 0;
Title := 'Turbo Graphics';
Size := 1;
while TextWidth(Title) < WindiwWidth do
begin
OutTextXY(0, Row, Title);
Inc(Row, TextHeight('M'));
Inc(Size);
SetTextStyle(DefaultFont, HorizDir, Size);
end;
Readln
CloseGraph;
end.



B.Pascal 7 & Objects/PG - 404 -


Процедура TitlePrn модуль WinPrn
-----------------------------------------------------------------

Назначение: Создает заголовок печатаемого файла.

Целевая платформа: Windows.

Описание: procedure TitlePrn(var F: Text; Title: PChar);

Примечания: Выводит заголовок задания печати для администра-
тора печати Windows и заголовки, выводимые при печати в сети.
Процедура TitlePrn должна вызываться перед ReWrite, иначе она не
действует.

Пример: См. пример для AbortPrn.

См. также: AbortPrn, AssingDefPrn, AssignPrn, SetPrnFont.

Процедура TrackCursor модуль WinCrt
-----------------------------------------------------------------

Назначение: Прокручивает окно Crt для обеспечения видимости
курсора.

Целевая платформа: Windows.

Описание: procedure TrackCursor;

См. также: ScrollTo.



B.Pascal 7 & Objects/PG - 405 -


Функция Trunc модуль System
-----------------------------------------------------------------

Назначение: Округляет значение вещественного типа до значе-
ния целого типа.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function Trunc(x: Real): Longint;

Примечания: Параметр x представляет собой выражение вещест-
венного типа. Функция Round возвращает значение длинного целого
типа, которое является значением x, округленным в сторону нуля.

Ограничения: Если округленное значение x не соответствует
диапазону представления длинного целого типа, то происходит ошиб-
ка этапа выполнения.

См. также: Round, Int.

Процедура Truncate модуль System
-----------------------------------------------------------------

Назначение: Усекает размер файла до текущей позиции в файле.

Описание: procedure Truncate(var f);

Примечания: Параметр f является файловой переменной любого
типа. Все записи после текущей позиции в файле f удаляются, и те-
кущая позиция в файле становится концом файла (функция Eof(f)
принимает значение True).

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

Ограничения: Файл f должен быть открыт.

См. также: Seek, Reset.



B.Pascal 7 & Objects/PG - 406 -


Функция TypeOf модуль System
-----------------------------------------------------------------

Назначение: Возвращает указатель на таблицу виртуальных ме-
тодов объекта (VMT).

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function TypeOf(X): Pointer;

Примечания: X - идентификатор объекта или экземпляра объект-
ного типа. В любом случае TypeOf возвращает адрес таблицы вирту-
альных методов объектного типа. TypeOf может применяться только к
объектным типам, имеющим таблицу виртуальных методов. Все другие
методы дают в результате ошибку. См. Главу 21 ("Вопросы использо-
вания памяти") в "Руководстве по языку".

Функция UnlockResource модуль WinAPI
-----------------------------------------------------------------

Назначение: Разблокирует ресурс.

Целевая платформа: Защищенный режим, Windows.

Описание: function UnlockResource(ResData: THandle): Bool;

Примечания: Данная функция разблокирует ресурс, заданный
параметром ResData. Параметр ResData должен представлять собой
описатель ресурса, созданный с помощью LoadResource. Если ресурс
является выгружаемым, то его счетчик блокировки уменьшается на 1.
Если значение счетчика блокировки становится нулевым, то ресурс
разблокируется и подлежит выгрузке. Если счетчик блокировки ре-
сурса уменьшен до 0, то возвращаемое значение равно False, в про-
тивном случае возвращается значение True.

Каждый раз, когда прикладная программа вызывает для ресурса
функцию LockResource, она должна в итоге вызывать для этого ре-
сурса функцию UnlockResource.

См. также: LoadResource, LockResource.



B.Pascal 7 & Objects/PG - 407 -


Функция UnlockSegment модуль WinAPI
-----------------------------------------------------------------

Назначение: Разблокирует сегмент.

Целевая платформа: Защищенный режим, Windows.

Описание: function UnlockSegment(Segment: Word): THandle;

Примечания: Параметр Segment задает селектор разблокируемого
сегмента. Если сегмент является выгружаемым, то его счетчик бло-
кировки уменьшается на 1. Если значение счетчика блокировки ста-
новится нулевым, то разблокируется и подлежит выгрузке. Если
счетчик блокировки ресурса уменьшен до 0, то возвращаемое значе-
ние равно False, в противном случае возвращается значение True.
Для невыгружаемых сегментов функция UnlockSegment не действует.

Каждый раз, когда прикладная программа вызывает для ресурса
функцию LockResource, она должна в итоге вызывать для этого ре-
сурса функцию UnlockResource.

См. также: LockSegment.

Процедура UnpackTime модуль Dos, WinDos
-----------------------------------------------------------------

Назначение: Преобразует четырехбайтовое значение, представ-
ляющее собой упакованный длинный целый тип представления даты и
времени, возвращаемый процедурами GetTime, FindFirst и FindNext,
в распакованную запись DateTime (дата и время)

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure UnpackTime(Time: Longint; var DT:
DatewTime);

Примечания: Запись DateTime описана в модуле Dos. Проверка
диапазона для полей времени Time не выполняется.

См. также: PackTime, GetFTime, SetFTime, GetTime, SetTime.



B.Pascal 7 & Objects/PG - 408 -


Функция UpCase модуль System
-----------------------------------------------------------------

Назначение: Преобразует символ в верхний регистр.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: function UpCase(Ch: Char);

Примечания: Параметр Ch представляет собой выражение сим-
вольного типа. Результатом символьного типа будет символ, задава-
емый параметром Ch, преобразованный в символ верхнего регистра.
Значения символов, не лежащие в диапазоне а...z, остаются без из-
менений.

Процедура Val модуль System
-----------------------------------------------------------------

Назначение: Преобразует строковое значение в его численное
представление.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure Val(s: String; var v; var Code:
Integer);

Примечания: Параметр s представляет собой выражение строко-
вого типа. Параметр v является переменной целого или вещественно-
го типа. Параметр Code - это переменная целого типа, которая фор-
мирует все число со знаком. Функция Val преобразует строку s в ее
численное представление и сохраняет результат в v. Если где-либо
в строке встречается недопустимый символ, то его номер сохраняет-
ся в параметре Code. В противном случае этот параметр равен нулю.

В зависимости от состояния {$R} и типа параметра v функция
Val по-разному выполняет проверку диапазона.

Если состояние проверки диапазона установлено, то есть зада-
но {$R+}, то выражения, выходящие за границу диапазона, всегда
будут генерировать ошибку этапа выполнения.

Если состояние проверки диапазона сброшено, то есть задано
{$R-}, то выражения, выходящие за границу диапазона, будут вызы-
вать эффект, зависящий от их типа. Если v имеет тип real или
longint, то значение v становится неопределенным и в параметре
Code возвращается ненулевое значение. Для любого другого числово-
го типа в параметре Code возвращается нулевое значение, а v будет
содержать результат вычислений с переполнением (если предполо-
жить, что строковое значение попадает в диапазон представления
длинного целого).

B.Pascal 7 & Objects/PG - 409 -


Таким образом, передав процедуре Val переменную длинного це-
лого типа (longint) и перед тем, как присваивать полученное зна-
чение, следует выполнять проверку диапазона. Например:

{$R-}
Val('65536', LongIntVar, Code);
if (Code <>0) or
(LOngIntVar < 0) or (LongIntVar > 65535) then
. { ошибка }
.
.
else
WordVar := LongIntVar;

В этом примере LongIntVar будет установлена в 65536, а Code
будет равно 0. Поскольку для переменной Word значение 65536 выхо-
дит за допустимый диапазон, будет сообщаться об ошибке.

Ограничения: Предшествующие пробелы должны быть удалены.

См. также: Str.

Пример:

var
i, code : integer;
begin
{ получить текст из командной строки }
Val(ParamStr(1), i, code);
{ ошибка при преобразовании в целое значение? }
if code <> 0 then
Writeln('Ошибка на позиции :', code);
else
Writeln('Значение = ', i);
end.



B.Pascal 7 & Objects/PG - 410 -


Функция WhereX модуль Crt
-----------------------------------------------------------------

Назначение: Возвращает для текущей позиции курсора относи-
тельно текущего окна координату Х.

Целевая платформа: Защищенный режим, реальный режим.

Описание: function WhereX: Byte;

См. также: WhereY, GotoXY, Window.

Функция WhereX модуль WinCrt
-----------------------------------------------------------------

Назначение: Возвращает для текущей позиции курсора относи-
тельно текущего окна координату Х текущей позиции курсора.

Целевая платформа: Windows.

Описание: function WhereX: Byte;

Примечание: Возвращаемое значение является координатой, отс-
читываемой от 1, и соответствует Cursor.X + 1.

См. также: WhereY, GotoXY, Window.

Функция WhereY модуль Crt
-----------------------------------------------------------------

Назначение: Возвращает для текущей позиции курсора относи-
тельно текущего окна координату Y.

Целевая платформа: Защищенный режим, реальный режим.

Описание: function WhereY: Byte;

См. также: WhereX, GotoXY, Window.



B.Pascal 7 & Objects/PG - 411 -


Функция WhereY модуль WinCrt
-----------------------------------------------------------------

Назначение: Возвращает для текущей позиции курсора относи-
тельно текущего окна координату Y текущей позиции курсора.

Целевая платформа: Windows.

Описание: function WhereY: Byte;

Примечание: Возвращаемое значение является координатой, отс-
читываемой от 1, и соответствует Cursor.Y + 1.

См. также: WhereX, GotoXY, Window.

Процедура Window модуль Crt
-----------------------------------------------------------------

Назначение: Определяет на экране текстовое окно.

Целевая платформа: Защищенный режим, реальный режим.

Описание: procedure Window(X1, Y1, X2, Y2: Byte);

Примечания: Параметры Х1, Y1 представляют собой координаты
верхнего левого угла окна, параметры Х2, Y2 - это координаты пра-
вого нижнего угла. Правый левый угол экрана соответствует коорди-
нате (1,1). Минимальный размер текстового окна - один столбец на
одну строку. Если координаты являются каким-то образом недопусти-
мыми, то обращение к процедуре Window игнорируется.

В 80-символьных режимах по умолчанию определяется окно (1,1,
80,25), а в 40-символьных режимах - (1,1,40,25), что соответству-
ет всему экрану.

Все координаты экрана (кроме самих координат окна) являются
относительными координатами данного окна. Например, GotoXY(1,1)
всегда позиционирует курсор на верхний левый угол текущего окна.

Многие процедуры и функции модуля Crt, включая ClrEol,
ClrScr, DelLine, GotoXY, InsLine, WhereX, WhereY, Read, Readln,
Write, Writeln, зависят от текущего окна.

Процедуры WindMin и WindМах сохраняют текущее определение
окна.

Пример:

uses Crt;
var
x, y : byte;
begin

B.Pascal 7 & Objects/PG - 412 -

TextBackGround(Black); { очистить экран }
ClrScr;
repeat
x := Succ(Random(80)); { нарисовать случайным
образом окна }
y := Succ(random(25));
Window(x, y, x + Random(10), y + Random(8));
TextBackGround(Random(16)); { использовать случайные
фоновые цвета }
ClrScr;
until KeyPressed;
end.

Процедура Write (текстовые файлы) модуль System
-----------------------------------------------------------------

Назначение: Записывает одно или более значений из одной или
более переменных в текстовый файл.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure Write( [var f: Text;] v1 [,v2,...,vn]);

Примечания: Параметр f (если он указан) является файловой
переменой, соответствующей текстовому файлу. Если он опущен, то
подразумевается использование стандартной файловой переменной
Output. Каждый параметр v является записываемым параметром. Каж-
дый записываемый параметр включает в себя выводимое выражение,
значение которого должно быть записано в файл. Каждое выводимое
выражение должно быть символьного, целого, вещественного, строко-
вого, упакованного строкового или булевского типа.

Записываемый параметр имеет вид:

вывод_выраж [ : мин_разм [ : дес_знак ]]

где "вывод_выраж" представляет собой выводимое выражение, а "мин_
разм" и "дес_знак" являются выражениями целого типа. "мин_разм"
задает минимальную ширину поля, которая должна быть больше нуля.
Если "вывод_выраж" имеет значение, которое должно быть представ-
лено числом символов, превышающим задаваемое параметром
"мин_разм", то записывается ровно столько символов, сколько опре-
делено в параметре "мин_разм" (при необходимости используются
предшествующие пробелы). В этом случае, чтобы представить значе-
ние "вывод_выраж", записывается достаточное количество символов.
Аналогично, если параметр "мин_разм" опущен, то для того, чтобы
представить значение "вывод_выраж", записывается достаточное ко-
личество символов.

Параметр "дес_знак" задает число десятичных знаков в предс-
тавлении вещественного значения с фиксированной точкой. Оно мо-
жет указываться только в том случае, если "вывод_выраж" имеет ве-

B.Pascal 7 & Objects/PG - 413 -

щественный тип, а также указан параметр "мин_разм". Если параметр
"мин_разм" указан, то он должен быть больше нуля или равен нулю.

Что касается записи символьного значения, то, если параметр
"мин_разм" опущен, в файл записывается символьное выражение "вы-
вод_выраж".

В противном случае значение параметра "мин_разм" -1 опреде-
ляет запись пробелов и далее символьного значения "вывод_выраж".

При записи целочисленного значения, если опущен параметр
"мин_разм", то десятичное представление "вывод_выраж" записывает-
ся в файл без предшествующих пробелов. Если параметр "мин_разм"
указывается, и его значение превышает длину десятичной строки, то
перед десятичной строкой записывается количество пробелов, доста-
точное для того, чтобы длина десятичной строки соответствовала
параметру "мин_разм".

При записи вещественного значения, в файл записывается деся-
тичное представление вещественного значения "вывод_выраж". Формат
представления зависит от наличия или отсутствия параметра
"дес_знак".

Если параметр "дес_знак" опущен (или если он присутствует,
но имеет отрицательное значение), то записывается десятичная
строка с плавающей точкой. Если параметр "мин_разм" также опу-
щен, то по умолчанию он подразумевается равным 17. В противном
случае, если параметр "мин_разм" меньше 8, то его значение подра-
зумевается равным 8. Десятичная строка с плавающей точкой имеет
следующий формат:

[!-] <эцифра>.<эдесят_знаки>E[+!-<эпоказатель_степени>]


B.Pascal 7 & Objects/PG - 414 -


Элементы выводимой строки приведены ниже:

-----------------T----------------------------------------------¬
¦ [!-] ¦ Знак, соответствующий знаку "вывод_выраж" ¦
+----------------+----------------------------------------------+
¦ <эцифра> ¦ Отдельная цифра или ноль (в том случае, ¦
¦ ¦ когда "вывод_выраж" равно 0. ¦
+----------------+----------------------------------------------+
¦ <эдесят_знаки> ¦ Цифровая строка длиной "мин_разм"-7 (но не¦
¦ ¦ более 10 цифр). ¦
+----------------+----------------------------------------------+
¦ E ¦ Символ E в верхнем регистре. ¦
+----------------+----------------------------------------------+
¦ [+!-] ¦ Знак, соответствующий знаку показателя степе-¦
¦ ¦ ни. ¦
+----------------+----------------------------------------------+
¦ <эпоказатель_ ¦ Десятичный показатель степени из двух цифр. ¦
¦ степени> ¦ ¦
L----------------+-----------------------------------------------

Если присутствует параметр "дес_знак", то записывается деся-
тичная строка с фиксированной точкой. Если значение данного пара-
метра превышает 11, то оно считается равным 11. Строка с фиксиро-
ванной точкой имеет следующий формат:

[<эпробелы>][-]<эцифры>[.<эдесят_знаки>]

Элементы строки с фиксированной точкой приведены ниже:

-------------------T--------------------------------------------¬
¦ [.<эпробелы>] ¦ Пробелы (чтобы длины строки соответствова-¦
¦ ¦ ла параметру "мин_разм"). ¦
+------------------+--------------------------------------------+
¦ [-] ¦ Знак -, если "вывод_выраж" отрицательно. ¦
+------------------+--------------------------------------------+
¦ <эцифры> ¦ По крайней мере одна цифра. Начальные ну-¦
¦ ¦ ли не допускаются. ¦
+------------------+--------------------------------------------+
¦ <.десят_знаки> ¦ Десятичные знаки, если параметр "дес_знак"¦
¦ ¦ больше нуля. ¦
L------------------+---------------------------------------------

Запись значения строкового типа производится следующим обра-
зом. Если параметр "мин_разм" опущен, то в файл записывается
строковое значение "вывод_выраж", а предшествующие пробелы от-
сутствуют. Если указан параметр "мин_разм" и его значение превы-
шает длину "вывод_выраж", то перед десятичной строкой для того,
чтобы ее длина соответствовала параметру "мин_разм", записывается
достаточное количество пробелов.

При записи значения упакованного строкового типа, эффект бу-
дет тем же самым, что и при записи строки, длина которой соот-

B.Pascal 7 & Objects/PG - 415 -

ветствует числу элементов в выражении упакованного строкового ти-
па.

При записи булевского значения выполняются такие же дейс-
твия, как при записи строк Truе или False, в зависимости от зна-
чения "вывод_выраж".

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

Ограничения: Файл должен быть открыт для вывода.

См. также: Writeln.

Процедура Write (типизированные файлы) модуль System
-----------------------------------------------------------------

Назначение: Записывает переменную в элемент файла.

Целевая платформа: Защищенный режим, реальный режим,
Windows.

Описание: procedure Write(f, v1 [, v2,...,vn] );

Примечания: Параметр f является файловой переменной, а каж-
дый элемент v представляет собой переменную того же типа, что и
элемент файла f. При каждой записи переменной текущая позиция в
файле продвигается к следующему элементу. Если текущая позиция
файла находится в конце файла (то есть когда Eof(f) имеет значе-
ние Truе), то файл расширяется.

При указании директивы компилятора {$I-} функция IORеsult
будет возвращать значение 0 в том случае, если операция заверши-
лась успешно, и ненулевой код ошибки в противном случае.

См. также: Writeln.



B.Pascal 7 & Objects/PG - 416 -


Функция WriteBuf модуль WinCrt
-----------------------------------------------------------------

Назначение: Записывает блок символов в окно CRT.

Целевая платформа: Windows.

Описание: function WriteBuf(Buffer: PChar; Count: Word):
Word;

Примечания: Параметр Buffer указывает на первый символ бло-
ка, а Count - это число записываемых символов. Если AutoTracking
равно True, то окно CRT при необходимости прокручивается, обеспе-
чивая видимость курсора после записи блока символа.

Функция WriteChar модуль WinCrt
-----------------------------------------------------------------

Назначение: Записывает в окно CRT одиночный символ.

Целевая платформа: Windows.

Описание: procedure WriteChar(Ch: Char);

Примечания: Вызывая функцию WriteBuf(@Ch,1), записывает сим-
вол Char в окно CRT в текущей позиции курсора.

См. также: WriteBuf



B.Pascal 7 & Objects/PG - 417 -


Процедура Writeln
-----------------------------------------------------------------

Назначение: Выполняет процедуру Write, а затем записывает в
файл метку конца строки.

Целевая платформа: Реальный режим, защищенный режим,
Windows.

Описание: procedure Writeln([var f:Text;] v1, [,v2,...,vn]);

Примечания: Данная процедура является расширением процедуры
Write для текстовых файлов. После выполнения процедуры Write про-
цедура Writeln записывает метку конца строки (возврат каретки /
перевод строки). При вызове данной процедуры без параметров
(Write(f)), в файл записывается метка конца строки. (Процедура
Writeln без указания списка параметров полностью соответствует
процедуре Writeln (Output)).

Ограничения: Файл должен быть открыт для вывода.

См. также: Write.



B.Pascal 7 & Objects/PG - 418 -

-------------------------------------------------------------
Глава 2. Директивы компилятора
-----------------------------------------------------------------

В данной главе описываются директивы компилятора, которые вы
можете использовать для управления средствами компилятора Borland
Pascal. Они описываются в алфавитном порядке. Каждая директива
компилятора классифицируется как переключатель, параметр или ди-
ректива условной компиляции. Некоторые из директив, применимые
только к определенным целевым платформам, отмечены словами "ре-
альный режим", "защищенный режим" или "Windows". За списком ди-
ректив компилятор следует краткое описание использования директив
условной компиляции. Данный справочный раздел описывает, как ис-
пользовать условные конструкции и идентификаторы для получения из
одного и того же текста различного кода.

Директива компилятора представляет собой комментарий со спе-
циальным синтаксисом. Borland Pascal допускает директивы компиля-
тора везде, где допускаются комментарии. Директива компилятора
начинается со знака $, стоящего первым после открывающего гранич-
ного знака комментария. Непосредственно после знака $ следует имя
(одна или несколько букв), которое определяет конкретные директи-
вы. Имеются три типа директив:

- Директивы-переключатели. Эти директивы включают конкретные
возможности компилятора или выключают их с помощью указа-
ния знака плюса "+" или минуса "-" сразу после имени ди-
рективы.

Глобальные директивы влияют на всю компиляцию и должны
следовать перед описательной частью компилируемой програм-
мы или модуля.

Локальные директивы влияют только на ту часть компилируе-
мого кода, которая простирается от директивы до следующего
вхождения той же директивы.

Директивы-переключатели могут объединяться в одной дирек-
тиве-комментарии компилятора и разделяться запятыми без
пробелов. Например:

{$B+,R-,S-}

- Директивы с параметрами. Эти директивы задают параметры,
оказывающие влияние на компиляцию, такие, например, как
имена файлов и размеры памяти.

- Условные директивы. Эти директивы используются для управ-
ления условной компиляцией частей исходного текста, осно-
ванной на определении пользователем условных идентификато-
ров.

Все директивы, за исключением директив-переключателей, долж-
ны иметь крайней мере один пробел между именем директивы и пара-

B.Pascal 7 & Objects/PG - 419 -

метром. Ниже приводятся некоторые примеры директив компилятора:

{$B+}
{$R- Turn off range-checking}
{$I TYPES.INC}
{$O EdFormat}
{$M 65520,8192,655360}
{$DEFINE Debug}
{$IFDEF Debug}
{$ENDIF}

Директивы компилятора вы можете разместить непосредственно в
исходном коде программы. Можно также изменить используемые по
умолчанию директивы с помощью компилятора, использующего команд-
ную строку (TPC.EXE или BPC.EXE) или с помощью компилятора, рабо-
тающего в интегрированной интерактивной среде (TURBO.EXE, BP.EXE
или BPW.EXE). Все директивы компилятора можно задавать с помощью
меню выбора параметров компилятора (Options¦Compiler). Все вноси-
мые вами в меню изменения будут иметь силу при последующих компи-
ляциях.

Вы можете выбрать один из двух компиляторов, работающих в
режиме командной строки: BPC.EXE или TPC.EXE, BPC.EXE работает в
защищенном режиме DOS и предназначен для приложений реального ре-
жима, Windows и защищенного режима. TPC.EXE работает только в ре-
альном режиме DOS и предназначен только для приложений DOS реаль-
ного режима.

При использовании командного компилятора директивы компиля-
тора можно либо задавать в командной строке (например, TPC /$R+
MYPROG), либо поместить их в файл конфигурации TPC.CFG (более де-
тальное описание дается в Главе 3). Директивы компилятора, кото-
рые содержатся в исходном коде, всегда отменяют принятые по умол-
чанию значения директив. Это справедливо как для компилятора, ра-
ботающего в режиме командной строки, так и для интерактивного
компилятора (IDE).

Если работаете в IDE для DOS или в IDE для Windows, исполь-
зуя альтернативный набор команд, и хотите быстро просмотреть, ка-
кие действуют директивы компилятора, нажмите клавиши Ctrl+O O.
Borland Pascal выведет текущие установки в начале файла в окне
редактирования.



B.Pascal 7 & Objects/PG - 420 -


Выравнивание данных переключатель
-----------------------------------------------------------------

Синтаксис: {$A+} или {$A-}

По умолчанию: {$A+}

Тип: Глобальный.

Замечание: Данная директива позволяет переключаться между
выравниванием переменных и типизированных констант на границу
слова и на границу байта. Для процессора 8088 выравнивание на
границу слова игнорируется. Однако для всех процессоров 80х86 вы-
равнивание на границу слова означает более быстрое выполнение,
поскольку адресация ко всем элементам, имеющим размер в слово,
или четным адресам происходит за один цикл обращения к памяти
вместо двух.

В состоянии {$A+} все переменные и типизированные константы,
превышающие по размеру один байт, выравниваются на границу машин-
ного слова (адреса с четными значениями). В случае необходимости
между переменными для достижения выравнивания на границу слова
включаются дополнительные неиспользуемые байты. Директива {$A+}
не влияет ни на переменные размером в байт, ни на поля структур
или элементы массивов. Поле записи будет выравниваться на границу
слова только в том случае, если общий размер всех следующих перед
ним полей будет иметь четное значение. Аналогично, для любого
элемента массива выравнивание на границу слова будет иметь место
только когда размер элементов имеет четное значение.

В состоянии {$A-} никаких действий по выравниванию не предп-
ринимается. Переменные и типизированные константы независимо от
их размера помещаются в этом случае просто по следующему доступ-
ному адресу.

Независимо от директивы $A+ в разделе описаний каждое описа-
ние var и const всегда начинается на границе слова. Аналогично,
компилятор всегда старается поддерживать указатель стека (SP) вы-
ровненным на границу слова, для чего в случае необходимости для
стека процедуры выделяется дополнительный неиспользуемый байт.



B.Pascal 7 & Objects/PG - 421 -


Булевские вычисления переключатель
-----------------------------------------------------------------

Синтаксис: {$B+} или {$B-}

Значение по умолчанию: {$B+}

Тип: Локальный.

Замечание: Эта директива осуществляет два различных вида ге-
нерации кода для булевских операций and и or.

В состоянии {$B+} компилятор генерирует код для полного вы-
числения булевского выражения. Это значит, что каждый операнд бу-
левского выражения, участвующие в операциях and и or, будет вы-
числен, даже если результат всего выражения заранее известен.

В состоянии {$B-} компилятор генерирует код для вычисления
булевского выражения по короткой схеме, то есть вычисление прек-
ратится сразу, как только станет очевидным результат вычисления
всего этого выражения. Более подробно смотрите информацию в Главе
6 ("Выражения") "Руководства по языку".



B.Pascal 7 & Objects/PG - 422 -


Атрибут сегмента кода параметр
-----------------------------------------------------------------

Синтаксис: {$C атрибут атрибут ...}

Значение по умолчанию: {$С MOVEABLE DEMANDLOAD DISCARDABLE}

Тип: Глобальный.

Замечание (только для Windows и защищенного режима): Данная
директива используется для управления атрибутами сегмента кода.
Каждый сегмент кода в прикладной программе или библиотеке имеет
набор атрибутов, которые определяют поведение кодового сегмента
при его загрузке в память. Например, вы можете задать, что сег-
мент кода является перемещаемым (MOVEABLE). Это означает, что
Windows может при необходимости перемещать сегмент кода в памяти.
Либо вы можете задать фиксированный сегмент (FIXED). Это означа-
ет, что адрес сегмента кода в памяти изменяться не может.

Директива $C влияет только на тот сегмент кода программного
модуля (модуля, программы или библиотеки), в котором она размеще-
на. В следующей таблицы параметры атрибута сегмента показаны по-
парно: каждый параметр имеет противоположный вариант.

--------------------T-------------------------------------------¬
¦ Атрибут ¦ Значение ¦
+-------------------+-------------------------------------------+
¦ MOVEABLE ¦ Система может изменить расположение сег-¦
¦ ¦ мента в линейной памяти. ¦
¦ ¦ ¦
¦ FIXED ¦ Система не может изменить расположение¦
¦ ¦ сегмента в линейной памяти. ¦
+-------------------+-------------------------------------------+
¦ DEMANDLOAD ¦ Сегмент кода загружается только при необ-¦
¦ ¦ ходимости. ¦
¦ ¦ ¦
¦ PRELOAD ¦ Сегмент кода загружается, когда программа¦
¦ ¦ начинает выполнение. ¦
+-------------------+-------------------------------------------+
¦ DISCARDABLE ¦ Когда сегмент кода больше не нужен, он мо-¦
¦ ¦ жет быть выгружен. ¦
¦ ¦ ¦
¦ PERMANENT ¦ После загрузки сегмент кода остается в¦
¦ ¦ памяти. ¦
L-------------------+--------------------------------------------

Первый параметр каждой группы задается по умолчанию. В ди-
рективе $C вы можете задать несколько атрибутов сегмента. Если в
директиве $C заданы оба параметра группы, то действует только
последний, например:

{$C FIXED MOVEABLE DISCARDABLE}

B.Pascal 7 & Objects/PG - 423 -


Данная директива сделает сегмент кода перемещаемым и выгру-
жаемым (когда сегмент больше не требуется).

Информация для отладки переключатель
-----------------------------------------------------------------

Синтаксис: {$D+} или {$D-}

По умолчанию: {$D+}

Тип: Глобальный.

Замечание: Данная директива задает или отменяет генерацию
информации для отладке. Отладочная информация состоит из таблицы
номеров строк для каждой процедуры, устанавливающей соответствие
адресов объектных кодов с номерами строк исходного текста.

Когда эта возможность задана для данной программы или моду-
ля, встроенный отладчик Borland Pascal позволяет проходить этот
модуль по шагам и устанавливать точки останова. Кроме того, при
появлении ошибки во время выполнения программы или программного
модуля, который был скомпилирован с включенным параметром генера-
ции информации для отладки ({$D+}), Borland Pascal использует эту
информацию для определения оператора в исходном тексте, приведше-
го к появлению ошибки.

Для программных модулей отладочная информация записывается в
файл модуля вместе с объектным кодом. Отладочная информация при-
водит к увеличению размера файлов модуля и требует дополнительно-
го пространства при компиляции использующей данный модуль прог-
раммы, но на размер и скорость работы выполняемой программы влия-
ния не оказывает.

Если программа или модуль компилируются в состоянии {$D+},
встроенный отладчик Borland Pascal позволяет вам выполнять этот
модуль по шагам и устанавливать в нем точки останова. (В BWP.EXE
эта функциональная возможность недоступна.)

Параметры Standalone debugging (Автономная отладка) меню
Options¦Debugger (Параметры¦Отладчик) и Map File (Файл Map) меню
Options¦Linker (Параметры¦Компоновщик) позволяют включить для
данного модуля полную информацию (если этот модуль компилировался
в состоянии {$D+}).

B.Pascal 7 & Objects/PG - 424 -


Переключатель отладочной информации обычно используется
вместе с переключателем локальных идентификаторов, который позво-
ляет включить или выключить генерацию отладочной информации о ло-
кальных идентификаторах.

Если вы хотите использовать для отладки программ Турбо от-
ладчик, то задайте компиляцию на диск (для чего нужно установить
параметр Compile¦Destination (Компиляция¦Назначение) в значение
Disk и проверить параметр Standalone (Автономная отладка) меню
Options¦Debugger¦Debugging).



B.Pascal 7 & Objects/PG - 425 -


Директива DEFINE условная компиляция
-----------------------------------------------------------------

Синтаксис: {$DEFINE имя}

Замечание: Директива $DEFINE определяет условный идентифика-
тор с данным именем. Идентификатор будет определенным для остав-
шейся части исходного компилируемого кода или до тех пор, пока он
не появится в директиве {$UNDEFINE имя}. Если "имя" уже определе-
но, директива {$DEFINE имя} не вызывает никаких действий.

Описание параметр
-----------------------------------------------------------------

Синтаксис: {$D текст}

Тип: Глобальный.

Замечание (только для Windows и защищенного режима): Дирек-
тива $D вставляет заданным вами текст в запись описания модуля в
заголовке файла .EXE или .DLL. Обычно этим текстом является имя и
номер версии, но вы можете задать по своему выбору любой текст,
например:

{$D моя версия приложения 13.1}



B.Pascal 7 & Objects/PG - 426 -


Директива ELSE условная компиляция
-----------------------------------------------------------------

Синтаксис: {$ELSE}

Замечание: Директива ELSE приводит к компиляции или игнори-
рованию исходного текста, ограниченного последним {$IFxxx} и сле-
дующим {$ENDIF}.

Эмуляция переключатель
-----------------------------------------------------------------

Синтаксис: {$E+} или {$E-}

По умолчанию: {$E-}

Тип: Глобальный.

Замечание: Эмуляция разрешает или запрещает компоновку с
библиотекой исполняющей системы, которая будет эмулировать работу
сопроцессора 8087 в случае его отсутствия.

Для реального и защищенного режима: Когда вы компилируете
программу в состоянии {$N+,E+}, Borland Pascal выполняет компо-
новку с полным эмулятором 8087. Полученный в результате выполняе-
мый файл может использоваться на любом компьютере независимо от
наличия сопроцессора 8087. Если исполняющая система находит такой
сопроцессор, то она его использует. В противном случае он эмули-
руется с помощью библиотеки исполняющей системы.

В состоянии {$N+,E-} Borland Pascal создавать программу, ко-
торая может использоваться только при наличии сопроцессора 8087.

При использовании в программном модуле переключатель эмуля-
ции сопроцессора 8087 никакого влияния не оказывает. Он действует
только при компиляции программы. Более того, если программа была
скомпилирована в состоянии {$N+}, а все используемые этой прог-
раммой модули - в состоянии {$N-}, то необходимость использования
библиотеки исполняющей системы отпадает, и переключатель эмуляции
сопроцессора 8087 игнорируется.



B.Pascal 7 & Objects/PG - 427 -


Директива ENDIF условная компиляция
-----------------------------------------------------------------

Синтаксис: {$ENDIF}

Замечание: Директива ENDIF заканчивает условную компиляцию,
начатую последней директивой {$IFxxx}.

Принудительный дальний тип вызова переключатель
-----------------------------------------------------------------

Синтаксис: {$F+} или {$F-}

По умолчанию: {$F-}

Тип: Локальный.

Данная директива управляет выбором типа вызова последова-
тельно компилируемых процедур и функций. Процедуры и функции,
скомпилированные в состоянии {$F+}, всегда используют дальний тип
обращений. При указании директивы {$F-} Borland Pascal автомати-
чески выбирает соответствующий тип обращений: дальний (far), если
процедура или функция описывается в разделе интерфейс программной
единицы, и ближний (near) в противном случае.

Дальний и ближний тип вызова описываются полностью в Главе
22 ("Вопросы управления") "Руководства по языку".



B.Pascal 7 & Objects/PG - 428 -


Генерация кода для процессора 80286 переключатель
-----------------------------------------------------------------

Синтаксис: {$G+} или {$G-}

По умолчанию: {$G-} для реального режима; {G+} для защищен-
ного режима и Windows.

Тип: Глобальный.

Замечание: Директива $G разрешает или запрещает генерацию
кода для процессора 80286. В состоянии {$G-} генерируются только
инструкции процессора 8086, и программы, сгенерированные в этом
состоянии, могут выполняться на любом процессоре серии 80х86.

В состоянии {$G+} компилятор использует дополнительные инс-
трукции процессора 80286, которые улучшают генерацию кода, но
программы, скомпилированные в этом состоянии, не смогут работать
на процессорах 8086 или 8088. Эти дополнительные инструкции вклю-
чают в себя непосредственные инструкции ENTER, LEAVE, PUSH, рас-
ширенную инструкцию IMUL и расширенные инструкции SHL и SHR.

В Windows эта директива отмечает файл .EXE, как предназна-
ченный только для защищенного режима. Директива {$G+} в модуле
отмечает итоговый файл, как предназначенный только для защищенно-
го режима.

Данная директива определяет также, где хранятся строки и
константы множественного типа. Если ваша программа компилируется
с директивой {G+} под Windows, то константы строкового и множест-
венного типа хранятся в сегменте кода (как в реальном режиме).
Если ваша программа предназначена для реального режима Windows и
содержит директиву {G-}, то константы хранятся в сегменте данных,
уменьшая в сегменте данных объем памяти, доступной для глобальных
переменных и типизированных констант. См. Главу 4 ("Сообщения об
ошибках"), где вы найдете более подробную информацию о том, как
избежать получения сообщения об ошибке, указывающего, что ваш
сегмент данных слишком велик.

B.Pascal 7 & Objects/PG - 429 -


Сегменты групп модулей параметр
-----------------------------------------------------------------

Синтаксис: {$G имя_модуля, имя_модуля ...}

Тип: Глобальный.

Замечание (только для Windows и защищенного режима): Дирек-
тива $G позволяет вам задать группы модулей, которые компоновщих
должен размещать в одном сегменте. Группирование модулей в одном
сегменте обеспечивает, что свопинг этих модулей в память и из па-
мяти выполняется одновременно. Директива $G используется в основ-
ном для группирования модулей, содержащих выгружаемый код.

Каждая директива $G задает группу модулей. Директива $G до-
пускается только в операторе uses программы или библиотеки. Если
вы используете модуль в более чем в одной группе, то компилятор
выводит сообщение об ошибке. Кроме того, для любой группы, соз-
данной по директиве $G, компилятор поддерживает используемую по
умолчанию группу, которая включает в себя все явно не сгруппиро-
ванные модули.

Компоновщик минимизирует число сегментов кода в выполняемом
файле, комбинируя все модули, принадлежащие к одной группе. Два
или более модуля, если они принадлежат к одной группе и имеют
одинаковые атрибуты сегмента кода, если их общий размер не превы-
шает допустимого размера сегмента, помещаются в один сегмент ко-
да.

Примечание: Атрибутами сегмента кода можно управлять с
помощью директивы $C. Допустимый размер сегмента устанавли-
вается директивой $S.

Компоновщик никогда не помещает в сегмент кода модули, при-
надлежащие к одному сегменту кода.

Директива IFDEF условная компиляция
-----------------------------------------------------------------

Синтаксис: {$IFDEF идентификатор}

Замечание: Директива IFDEF компилирует следующий за ней ис-
ходный текст, если имя "идентификатор" определено.

B.Pascal 7 & Objects/PG - 430 -


Директива IFNDEF условная компиляция
-----------------------------------------------------------------

Синтаксис: {$IFNDEF идентификатор}

Замечание: Директива IFNDEF компилирует следующий за ней ис-
ходный текст, если имя "идентификатор" не определено.

Директива IFOPT условная компиляция
-----------------------------------------------------------------

Синтаксис: {$IFOPT переключатель}

Директива IFOPT компилирует следующий исходный текст, если
"переключатель" находится в данное время в указанном состоянии.
Переключатель (директива) состоит из имени директивы-переключате-
ля, за которым следует знак плюс (+) или знак минус (-). Напри-
мер, конструкция:

{$IFOPT N+}
type real = extended;
{$ENDIF}

скомпилирует описание типа, если директива $N является в данное
время действующей.



B.Pascal 7 & Objects/PG - 431 -


Включение файла параметр
-----------------------------------------------------------------

Синтаксис: {$I имя_файла}

Тип: Локальный.

Замечание: Данная директива сообщает компилятору о необходи-
мости включить в компиляцию названный файл. Фактически файл
вставляется в скомпилированный текст непосредственно за директи-
вой {$I имя_файла}. Расширением по умолчанию для параметра
"имя_файла" является .PAS. Если параметр "имя_файла" не указывает
каталога, то в дополнение к поиску файлов в текущем каталоге
Borland Pascal осуществляет поиск его в каталогах, указанных в
меню Options¦Directories¦Include Directories, или в каталогах,
указанных в параметре /I командной строки компилятора BPC или
TPC.

Имеется одно ограничение на использование включаемых файлов:
включаемый файл не может указываться в середине раздела операто-
ров. Это означает, что все операторы между операторными скобками
begin и end раздела операторов должны постоянно находиться в од-
ном и том же исходном файле.

Проверка ошибок ввода-вывода переключатель
-----------------------------------------------------------------

Синтаксис: {$I+} или {$I-}

По умолчанию: {$I+}

Тип: Локальный.

Замечание: Данная директива задает или отменяет генерацию
автоматического кода, проверяющего результат обращения к процеду-
ре ввода-вывода. Процедуры ввода-вывода описываются в Главе 14
("Ввод и вывод") "Руководства по языку". Если процедура ввода-вы-
вода возвращает ненулевой результат ввода-вывода при включенном
переключателе (+), то программа завершает работу, выводя на экран
сообщения об ошибке этапа выполнения. Если переключатель выключен
(-), то результат операции ввода-вывода нужно проверять с помощью
функции OIResult.



B.Pascal 7 & Objects/PG - 432 -


Эффективные вызовы переключатель
-----------------------------------------------------------------

Синтаксис: {$K+} или {$K-}

По умолчанию: {$K+}

Тип: Глобальный.

Замечание (только для Windows) Директива $K управляет гене-
рацией эффективных вызовов экспортируемых приложением процедур и
функций. Когда прикладная программа генерируется в состоянии
{$K-}, то при создании вызываемых подпрограмм API Windows она
должна использовать подпрограммы MakeProcInstance и
FreeProcInstance. В состоянии по умолчанию ({$K+}) прикладная
программа сама может вызывать экспортированные точки входа, и ис-
пользовать подпрограммы MakeProcInstance и FreeProcInstance нет
необходимости.

Подробнее об эффективных вызовах рассказывается в разделе
"Код входа и выхода" Главы 22 "Руководства по языку".

Компоновка объектного файла параметр
-----------------------------------------------------------------

Синтаксис: {$L имя_файла }

Тип: Локальный.

Замечание: Данная директива предписывает компилятору скомпо-
новать указанный файл с компилируемой программой или программным
модулем. Директива $L используется для компоновки кода, написан-
ного на языке ассемблера для подпрограмм, описанных как внешние
(external). Указанный файл должен быть перемещаемым объектным
файлом в формате Intel (файл .OBJ). Расширением по умолчанию для
параметра "имя_файла" является .OBJ. Если в параметре "имя_файла"
каталог не задан, то в дополнение к поиску файла в текущем ката-
логе Borland Pascal просматривает каталоги, указанные в меню
Options¦Directories¦Object Directories или в каталогах, указанных
в параметре /0 командной строки компилятора TPC или BPC.

Более подробно о редактировании с языком Ассемблера, смотри-
те в Главе 25 ("Компоновка с кодом Ассемблера") "Руководства по
языку".



B.Pascal 7 & Objects/PG - 433 -


Информация о локальных идентификаторах переключатель
-----------------------------------------------------------------

Синтаксис: {$L+} или {$L-}

По умолчанию: {$L+}

Тип: Глобальный.

Замечание: Данная директива приводит в действие или отменяет
генерацию информации о локальных идентификаторах. Информация о
локальных идентификаторах состоит из имен и типов всех локальных
переменных и констант данного модуля, то есть из идентификаторов
в секции реализации модуля и идентификаторов, содержащихся в про-
цедурах и функциях этого модуля.

Для модулей информация о локальных идентификаторах записыва-
ется в объектном файле наряду с объектным кодом модуля. Эта ин-
формация увеличивает размер файлов (требуется дополнительное
пространство). Однако на размер и скорость работы выполняемой
программы это влияния не оказывает.

Когда для данного модуля задана генерация информации о ло-
кальных идентификаторах, встроенный отладчик Borland Pascal поз-
воляет вам проверять и модифицировать локальные переменные моду-
ля. Кроме того, с помощью меню Debug¦Calls Stack (Отладчик¦Стек
вызова) можно проверять обращения к процедурам и функциям модуля.

Объектные методы, реализованные на ассемблере, можно скомпо-
новать с программами Borland Pascal с помощью директивы компиля-
тора $L и ключевого слова External.

Параметры Map File (Файл Map) меню Options¦Linker (Параметры
¦Компоновщик) и Standalone debugging (Автономная отладка) меню
Options¦Debugger (Параметры¦Отладчик) позволяют получить информа-
цию о локальных идентификаторах для данного модуля, если этот мо-
дуль компилировался в состоянии {$L+}.

Переключатель, задающий включение информации о локальных
идентификаторах, обычно используется вместе с переключателем
включения в файл отладочной информации, который позволяет вклю-
чить или выключить генерацию таблицы номеров строк для отладки.
Заметим, что в том случае, если переключатель отладочной информа-
ции выключен ({$D-}), директива $L будет игнорироваться.



B.Pascal 7 & Objects/PG - 434 -


Размеры выделяемой памяти параметр
-----------------------------------------------------------------

Синтаксис:

{$M размер_стека,мин_разм_динам_области,
макс_разм_динам_области} (реальный режим)
{$M размер_стека} (защищенный режим)
{$M размер_стека, разм_динам_области} (Windows)

По умолчанию:

{$M 16384,0,655360} (реальный режим)
{$M 16384} (защищенный режим)
{$M 8192,8192} (Windows)

Тип: Глобальный.

Замечание: Данная директива указывает параметры распределе-
ния памяти программы. Параметр "размер_стека" должен быть целым
числом в диапазоне от 1024 до 65520, которое указывает размер
сегмента стека. "Размер_стека" должен быть числом в диапазоне от
1024 до 65520. Для реального режима DOS "мин_разм_динам_области"
и "макс_разм_динам_области" задают соответственно минимальный и
максимальный размер динамически распределяемой области памяти.
"Мин_разм_динам_области" должен лежать в диапазоне от 0 до
655360, а "макс_разм_динам_области" - от "мин_разм_динам_области"
до 655360.

Директива $M при использовании ее в программном модуле не
оказывает влияния на компиляцию программы. Кроме того, для библи-
отеки "размер_стека" в директиве игнорируется.



B.Pascal 7 & Objects/PG - 435 -


Сопроцессор математических вычислений переключатель
-----------------------------------------------------------------

Синтаксис: {$N+} или {$N-}

По умолчанию: {$N-}

Тип: Глобальный.

Замечание: Данная директива осуществляет выбор одной из двух
моделей генерации кода вычисления с плавающей запятой, имеющихся
в Borland Pascal. При указании директивы {$N-} генерируется код
для выполнения в программном обеспечении всех вычислений типа
real с помощью вызова программ библиотеки исполняющей системы
Borland Pascal. При указании директивы {$N+} генерируется код для
выполнения всех вычислений типа real с помощью сопроцессора мате-
матических вычислений 8087.

Заметим, что для эмуляции сопроцессора 8087 вы можете также
использовать директиву {$E+}. Это дает вам возможность применять
типы данных с плавающей точкой без необходимости установки мик-
росхемы сопроцессора 8087.

Генерация оверлейного кода переключатель
-----------------------------------------------------------------

Синтаксис: {$O+} или {$O-}

По умолчанию: {$O-}

Тип: Глобальный.

Замечание (только для реального режима): Директива $O разре-
шает или запрещает генерацию оверлейного кода. Borland Pascal
разрешает использовать модуль в качестве оверлейного только в том
случае, если он был скомпилирован с директивой {$O+}. В этом слу-
чае генератор выполняемого кода принимает особые меры при переда-
че строки от одного оверлейного модуля другому и установке посто-
янных параметров.

Указание данной директивы в модуле не обязывает вас исполь-
зовать данный модуль в качестве оверлейного. Она просто указывает
Borland Pascal, чтобы он обеспечил возможность использования дан-
ного модуля в качестве оверлейного, если это потребуется. Если вы
разрабатываете модули, которые планируется применять как в овер-
лейном, так и в неоверлейном варианте, то директива {$O+} обеспе-
чит вам возможность использования в обоих случаях одной и той же
версии модуля.

Отметим, что директива компилятора {$O+} почти всегда указы-
вается совместно с директивой компилятора {$F+}, что позволяет
выполнить требования администратора оверлеев по использованию

B.Pascal 7 & Objects/PG - 436 -

дальнего типа вызовов (far).

Более подробная информация по генерации оверлейного кода со-
держится в Главе 20 ("Использование оверлеев") "Руководства по
языку".

Имя оверлейного модуля параметр
-----------------------------------------------------------------

Синтаксис: {$O имя_модуля}

Тип: Локальный.

Замечание (только для реального режима): Директива {$O
имя_модуля} при использовании ее в модуле не действует, а при
компиляции программы задает, какие используемые в программе моду-
ли нужно поместить вместо .EXE в файл .OVR.

Директивы {$O имя_модуля} должны указываться после оператора
uses программы. Если вы пытаетесь использовать в качестве овер-
лейного модуль, который не был скомпилирован в состоянии {$O+},
то Borland Pascal сообщает об ошибке.

Открытые строковые параметры переключатель
-----------------------------------------------------------------

Синтаксис: {$P+} или {$P-}

По умолчанию: {$P-}

Тип: Локальный.

Примечания: Директива $P управляет смыслом параметров-пере-
менных, описанных с помощью ключевого слова string. В состоянии
{$P-} параметры-переменные, описанные с ключевым словом string,
являются нормальными параметрами, но в состоянии {$P+} они явля-
ются открытыми строковыми параметрами. Независимо от установки
директивы $P, для описания открытых строковых параметров всегда
может использоваться идентификатор OpenString. Подробнее об отк-
рытых параметрах рассказывается в Главе 9 ("Процедуры и функции")
"Руководства по языку".

B.Pascal 7 & Objects/PG - 437 -


Проверка переполнения переключатель
-----------------------------------------------------------------

Синтаксис: {$Q+} или {$Q-}

По умолчанию: {$Q-}

Тип: Локальный.

Замечание: Директива $Q управляет генерацией кода проверки
переполнения. В состоянии {$Q+} отдельные арифметические операции
(+, -, *, Abs, Sqr, Succ и Pred) проверяются на переполнение. За
кодом каждой из этих целочисленных арифметических операций следу-
ет дополнительный код, проверяющий, лежит ли результат в заданном
диапазоне. Если проверка переполнения дает ошибку, программа
прекращает работу и выводит на экран сообщение об ошибке.

Директива {$Q+} не влияет на стандартные директивы Inc и
Dec. Эти процедуры никогда не проверяются на переполнение.

Переключатель $Q обычно используется в сочетании с переклю-
чателем $R, который разрешает или запрещает генерацию кода про-
верки диапазона. Разрешение проверки переполнения замедляет рабо-
ту программы и несколько увеличивает ее объем, поэтому используй-
те {$Q+} только для отладки.

B.Pascal 7 & Objects/PG - 438 -


Проверка границ переключатель
-----------------------------------------------------------------

Синтаксис: {$R+} или {$R-}

По умолчанию: {$R-}

Тип: Локальный.

Замечание: Данный переключатель приводит в действие и отме-
няет генерацию кода с проверкой границ. При указании {$R+} все
выражения с индексированными строками и массивы проверяются на
предмет нахождения их внутри указанных границ, а все операторы
присваивания скалярным величинам и переменным поддиапазонов про-
веряются на нахождение в заданных границах. Если обнаруживается
нарушение диапазона, программа завершает свою работу, выводя со-
общения об ошибке этапа выполнения. Приведенная в действие про-
верка границ замедляет работу программы и увеличивает ее размер.
Используйте эту директиву при отладке, а затем, после получения
отлаженной программы, удалите ее.

Если директива $R включена, то все обращения к виртуальным
методам проверяются на состояние инициализации для экземпляра
объекта, выполняющего вызов. Если экземпляр объекта, выполняющий
вызов, не инициализирован своим конструктором, то происходит
ошибка этапа выполнения по нарушению диапазона.

Разрешение проверки границ и вызовов виртуальных методов за-
медляет выполнение ваших программ и несколько увеличивает их раз-
мер, поэтому директиву {$R+} следует использовать только для от-
ладки.

B.Pascal 7 & Objects/PG - 439 -


Файл ресурсов параметр
-----------------------------------------------------------------

Синтаксис: {$R имя_файла}

Тип: Локальный.

Замечание (только для Windows и защищенного режима): Дирек-
тива $R задает имя файла ресурсов, который должен включаться в
прикладную программу или библиотеку. Указанный файл должен предс-
тавлять собой файл ресурсов Windows. По умолчанию он имеет расши-
рение .RES.

Когда директива {$R имя_файла} используется в модуле, ука-
занное имя файла просто записывается в получаемый файл модуля.
Никаких проверок для обеспечения корректности файла с указанным
именем и его существования не выполняется.

При компоновке прикладной программы или библиотеки (после
компиляции программы или исходного файла библиотеки), обрабатыва-
ются файлы ресурсов, заданные во всех используемых модулях, прог-
рамме или в библиотеке, и каждый ресурс в каждом файле ресурсов
копируется в создаваемый файл .EXE или .DLL. На этапе обработки
ресурсов компоновщик Borland Pascal ищет файлы ресурсов в текущем
каталоге и в каталогах, заданных в окне ввода O¦D¦Resource
Directories (Параметры¦Каталоги¦Каталоги файлов ресурсов) или в
каталогах, заданных в директиве /R компилятора TPC или BPC.



B.Pascal 7 & Objects/PG - 440 -


Допустимый размер сегмента параметр
-----------------------------------------------------------------

Синтаксис: {$S размер_сегмента}

По умолчанию: {$S 16384}

Тип: Глобальный.

Замечание (только для Windows и защищенного режима) Директи-
ва-параметр $S допустима только в основной программе или библио-
теке. Директива задает предпочитаемый размер сегмента кода для
группирования модулей. Указанный размер должен лежать в диапазоне
0..65535. Модули, превышающие заданный размер, размещаются в сво-
их собственных сегментах кода.

При группировании модулей компилятор помещает модули с оди-
наковыми атрибутами сегмента кода в один и тот же сегмент кода,
пока он не превысит заданный размер. Это ограничение применяется
также к группам, заданным по директиве $G.

Примечание: Группирование модулей поясняется в дирек-
тиве $G.

Директива $S никогда не дает предупреждений или сообщений об
ошибках. Если модули нельзя разместить в сегменте кода с другими
модулями, он автоматически помещается в отдельный сегмент.

Установка допустимого размера сегмента в 0 вынуждает разме-
щать каждый модуль в отдельном сегменте кода; в предыдущих верси-
ях компиляторов такое поведение использовалось в компиляторе по
умолчанию.

B.Pascal 7 & Objects/PG - 441 -


Проверка переполнения стека параметр
-----------------------------------------------------------------

Синтаксис: {$S+} или {$S-}

По умолчанию: {$S+}

Тип: Локальный.

Замечание: Данная директива приводит в действие или отменяет
генерирование кода с проверкой переполнения стека. При указании
{$S+} компилятор генерирует в начале каждой процедуры или функции
код, который проверяет, достаточное ли место в стеке выделено для
локальных переменных. Если в стеке места недостаточно, то обраще-
ние к процедуре или функции, скомпилированное с указанием {$S+},
приводит к завершению работы программы, которая при этом выводит
сообщение об ошибке этапа выполнения. При указании {$S-} такое
обращение наиболее вероятно приведет к фатальной ошибке системы.

Указатели с проверкой типов переключатель
-----------------------------------------------------------------

Синтаксис: {$T+} или {$T-}

По умолчанию: {$T-}

Тип: Глобальный.

Замечание: Директива $T управляет типами значений указате-
лей, генерируемых операцией @. В состоянии {$T-} тип результата
операции @ всегда является нетипизированным указателем, совмести-
мым со всеми другими типами указателей. Когда к ссылке на пере-
менную в состоянии {$T+} применяется операция @, типом результата
будет ^T, где T совместим только с указателями на тип переменной.

B.Pascal 7 & Objects/PG - 442 -


Директива UNDEF условная компиляция
-----------------------------------------------------------------

Синтаксис: {$UNDEF имя}

Замечание: Директива $UNDEF отменяет ранее определенный ус-
ловный идентификатор. Для оставшейся части исходного компилируе-
мого кода или до тех пор, пока он не появится в директиве
{$DEFINE имя} идентификатор отменяется (становится неопределен-
ным). Если "имя" уже отменено, директива {$UNDEF имя} не вызывает
никаких действий.

Проверка параметров-переменных строкового типа переключатель
-----------------------------------------------------------------

Синтаксис: {$V+} или {$V-}

По умолчанию: {$V+}

Тип: Локальный.

Замечание: Проверка параметров-переменных строкового типа
управляет проверкой типа при передаче строк в качестве парамет-
ров-переменных. В состоянии {$V+} выполняется строгая проверка
типа, при которой требуется, чтобы формальный и фактический пара-
метр имели идентичные строковые типы (string). В состоянии {$V-}
в качестве фактического параметра допускается использовать любую
переменную строкового типа, даже если ее описанная длина не сов-
падает с длиной соответствующего формального параметра.

Состояние {$V-} по существу обеспечивает "ненадежную" версию
открытых строковых параметров. Хотя {$V-} поддерживается, вам
следует использовать открытые строковые параметры. Дополнительную
информацию вы можете найти в Главе 9 "Руководства по языку".

B.Pascal 7 & Objects/PG - 443 -


Кадры стека Windows переключатель
-----------------------------------------------------------------

Синтаксис: {$W+} или {$W-}

По умолчанию: {$W+}

Тип: Локальный.

Замечание (только для Windows): Директива $W управляет гене-
рацией специфического для Windows кода входа и выхода для проце-
дур и функций с дальним типом вызова (far). В состоянии {$W+} для
процедур и функций far генерируется специальная запись кода и вы-
хода, благодаря чему подсистема управления памятью реального ре-
жима Windows может корректно идентифицировать дальние кадры стека
при настройке на цепочки вызова после перемещения сегмента кода
или данных.

В состоянии {$W-} генерируется дополнительная запись входа
или выхода. Если программа работает в стандартном режиме Windows
или только в улучшенном режиме Windows 386, директиву $W можно
запретить (состояние {$W-}).

Дополнительную информацию вы можете найти в Главе 22 "Руко-
водства по языку".

Расширенный синтаксис переключатель
-----------------------------------------------------------------

Синтаксис: {$X+} или {$X-}

По умолчанию: {$X+}

Тип: Глобальный.

Замечание: Директива компилятора $X разрешает или запрещает
расширенный синтаксис Borland Pascal.

* Операторы функций. В режиме {$X+} вызовы функций можно ис-
пользовать, как операторы, то есть результат функции может
отбрасываться. В общем случае вычисления, выполняемые
функцией, представляются через результат, поэтому в отбра-
сывании результата смысла мало. Однако в определенных слу-
чаях функция на основе своих параметров может выполнять
много операций. В некоторых из таких случаев результат
функции не имеет смысла. В таких ситуациях расширения, до-
пускаемые по директиве {$X+}, позволяют интерпретировать
функцию, как процедуру.

Примечание: Директива {$X+} не применяется к встроенным
функциям (то есть функциям, определенным в модуле System).


B.Pascal 7 & Objects/PG - 444 -

* В строках с завершающим нулем. Директива компилятора {$X+}
разрешает поддержку в Borland Pascal строк с завершающим
нулем, активизируя специальные правила, которые применяют-
ся к встроенному типу PChar и в использующих нули масси-
вах. Подробнее о строках с завершающим нулем рассказывает-
ся в Главе 18 ("Использование строк с завершающим нулем")
в "Руководстве по языку".

По умолчанию расширенный синтаксис разрешается.

Информация о ссылках на идентификаторы переключатель
-----------------------------------------------------------------

Синтаксис: {$Y+} или {$Y-}

По умолчанию: {$Y+}

Тип: Глобальный.

Замечание: Директива $Y разрешает или запрещает генерацию
для идентификаторов ссылочной информации. Эта информация состоит
из таблиц, содержащих номера строк для всех описаний и ссылок на
каждый идентификатор в модуле.

Для модулей информация о ссылках на идентификатор записыва-
ется в файл .TPU, .TPW или .TPP наряду с объектным кодом модуля.
Информация о ссылках на идентификаторы увеличивает размер файлов
.TPU, .TPW или .TPP, но на размер и скорость выполняемой програм-
мы влияния не оказывает.

Когда программа или модуль компилируются в состоянии {$Y+},
встроенное средство просмотра Borland Pascal может выводить для
этого модуля определения идентификатора и ссылочную информацию.

Директива $Y используется обычно в сочетании с переключате-
лями $D и $L, которые управляют генерацией отладочной информации
и информацией о локальных идентификаторах. Директива $Y не оказы-
вает влияния, если не разрешены директивы $D и $L.

Использование директив условной компиляции
-----------------------------------------------------------------

Директивы условной компиляции Borland Pascal позволяют полу-
чать различный код из одного и того же исходного текста при помо-
щи использования условных идентификаторов.

Имеются две основные конструкции условной компиляции, кото-
рые весьма похожи на оператор Паскаля if. Первой конструкцией яв-
ляется конструкция:

{$IFxxx}
.
.

B.Pascal 7 & Objects/PG - 445 -

.
{$ENDIF}

которая приводит к компиляции исходного текста между {$IFxxx} и
{$ENDIF} только в случае, если условие, указанное в {$IFxxx},
удовлетворяется (имеет значение True). Если же это условие имеет
значение False, то исходный текст между этими двумя директивами
игнорируется.

Второй конструкцией условной компиляции является конструк-
ция:

{$IFxxx}
.
.
.
{$ELSE}
.
.
.
{$ENDIF}

которая приводит к компиляции либо исходного текста между
{$IFxxx} и {$ELSE}, или исходного текста между {$ELSE} и {$ENDIF}
в зависимости от условия, указанного с помощью {$IFxxx}.

Приведем некоторые примеры конструкций условной компиляции.

{$IFDEF Debug}
Writeln('X=',X);

{$ENDIF}

{$IFDEF CPU87}
{$N+}
type
real = double;
{$ELSE}
{$N-}
type
single = real;
double = real;
extended = real;
comp = real;
{$ENDIF}

Конструкции условной компиляции могут вкладываться одна в
другую (до 16 уровней вложенности). Для каждого {$IFxxx} соот-
ветствующее {$ENDIF} должно находиться в том же исходном файле,
что значит, что в каждом исходном файле должно быть равное коли-
чество {$IFxxx} и {$ENDIF}.


B.Pascal 7 & Objects/PG - 446 -

Условные идентификаторы
-----------------------------------------------------------------

Условная компиляция основывается на вычислении условных
идентификаторов. Условные идентификаторы определяются и разопре-
деляются (становятся неопределенными) с помощью директив:

{$DEFINE name}
{$UNDEF name}

Вы можете также воспользоваться переключателем /D в компиля-
торе TPC или BPC и блоком ввода Conditional Defines (Условные оп-
ределения) меню Options¦Compiler (Параметры¦Компилятор) интегри-
рованной среды IDE.

Условные идентификаторы лучше всего сравнить с булевскими
переменными: они могут принимать значения True (определено) или
False (не определено). Директива {$DEFINE} устанавливает данный
идентификатор в значение True, а директива {$UNDEF} устанавливает
его в значение False.

Условные идентификаторы следуют точно таким же правилам, что
и идентификаторы Паскаля: они должны начинаться буквой, за кото-
рой следуют сочетания букв, цифр, подчеркиваний. Они могут иметь
любую длину, но только первые 63 символа являются значащими.

Условные идентификаторы и идентификаторы Паскаля не имеют
друг с другом никакой связи. На условные идентификаторы не могут
осуществляться ссылки в действующей программе, а на идентификато-
ры программы нельзя ссылаться в условных директивах. Например,
конструкция:

const
Debug = True;
begin
{$IFDEF Debug}
Writeln('Debug is on');
{$ENDIF}
end;

не приведет к компиляции оператора Writeln, также как и конструк-
ция:

{$DEFINE Debug}
begin
if Debug then writeln ('Debug is on');
end;

приведет к ошибке в операторе IF из-за неизвестного идентификато-
ра.


B.Pascal 7 & Objects/PG - 447 -

В Borland Pascal определены следующие стандартные идентифи-
каторы:
VER70 Всегда определен, указывая, что данная версия явля-
ется версией 7.0 Borland Pascal. Другие версии (на-
чиная с 4.0) определяют собственные соответствующие
символы версий, например, символ VER80 будет для
версии 8.0 и т.д.

WINDOWS Определен для приложения Windows и указывает, что
операционной средой является MS-Windows.

MSDOS Всегда определен, указывая, что данная операционная
система является операционной системой DOS. Версии
Borland Pascal для других операционных систем будут
определять символьное имя для конкретной операцион-
ной системы.

CPU86 Всегда определен, указывая, что процессор принадле-
жит к семейству процессоров 80х86. Версии Borland
Pascal для других процессоров будут определять сим-
вольное имя для конкретного процессора.

CPU87 Определен, если арифметический сопроцессор 8087
присутствует во время компиляции. Если конструкция:

{$IFDEF CPU87} {$N+} {$ELSE} {$N-} {$ENDIF}

появляется в начале компиляции, то Borland Pascal
автоматически выберет соответствующую модель гене-
рации кода вычисления с плавающей точкой для этой
конкретной ЭВМ.

DPMI Определен для приложений защищенного режима DOS и
указывает, что операционной системой является DPMI
(интерфейс DOS защищенного режима).

Остальные условные идентификаторы могут устанавливаться пе-
ред компиляцией с помощью блока ввода Conditional Defines (Услов-
ные определения) меню Options¦Compiler (Параметры¦Компилятор) ин-
тегрированной среды IDE.

B.Pascal 7 & Objects/PG - 448 -

--------------------------------------------------------------------
Глава 3. Компилятор, работающий в режиме командной строки
-----------------------------------------------------------------

Компиляторы Borland Pascal, работающие в режиме командной
строки (TPC.EXE и BPC.EXE), позволяют вам вызывать все функции
компиляторов с IDE (BP.EXE, TURBO.EXE и BPW.EXE) из командной
строки DOS. Вы можете выбрать один из двух компиляторов режима
командной строки - BPC.EXE или TPC.EXE. BPC.EXE работает в защи-
щенном режиме DOS и предназначен для таких целевых платформ, как
DOS реального режима, Windows и DOS защищенного режима. TPC.EXE
работает только в DOS реального режима и предназначен только для
приложений DOS реального режима. Хотя в примерах данной главы ис-
пользуется TPC, вы можете в любом из них подставить BPC. Парамет-
ры, доступные только для компилятора BPC, отмечены словами "толь-
ко BPC".

Примечание: Если при работе с компилятором режима ко-
мандной строки вам потребуется помощь, вы можете получить
оперативную справку, набрав в командной строке THELP. До-
полнительную информацию об использовании THELP вы можете
найти в "Руководстве по инструментальным средствам и утили-
там".

Для запуска компилятора из командной стpоки DOS используется
следующий синтаксис:

TPC [параметры] имя_файла [паpаметpы]
BPC [параметры] имя_файла [паpаметpы]

где "параметры" - это 0 или более необязательных параметров, пе-
редающих компилятору дополнительную информацию, "имя_файла" - это
имя исходного файла для компиляции. Если вы наберете просто TPC
или BPC, вам выведется справочная информация по параметрам ко-
мандной строки и синтаксису команды.

Если имя файла не имеет расширения, то компилятор режима ко-
мандной строки будет предполагать расширение .PAS. Если вам нуж-
но, чтобы компилируемый файл вообще не имел расширения, то после
имени файла необходимо поставить точку (.). Если в исходном файле
содержится программа, то компилятор TPC создаст исполнимый файл с
расширением .EXE и именем исходного файла, а если этот файл со-
держит модуль, то TPC создаст файл модуля Borland Pascal с именем
исходного файла и pасшиpением .TPU.

Для компилятора BPC, если в исходном файле содержится прог-
рамма, то компилятор создаст выполняемый файл с расширением .EXE
и именем исходного файла, а если этот файл содержит модуль, то
TPC создаст файл модуля Borland Pascal с именем исходного файла и
pасшиpением .TPU, .TPP или .TPW, в зависимости от выбранной целе-
вой платформы. В случае, если файл содеpжит динамически компонуе-
мую библиотеку, BPC.EXE создаст библиотечный файл с именем исход-
ного файла и pасшиpением .DDL. Связь между расширениями имен фай-
лов и целевыми платформами показана в следующей таблице:

B.Pascal 7 & Objects/PG - 449 -


Целевые платформы компилятора Таблица 3.1
-------------------------T-------------------------¬
¦ Целевая платформа ¦ Расширение файла модуля ¦
+------------------------+-------------------------+
¦ Реальный режим DOS ¦ .TPU ¦
¦ Защищенный режим DOS ¦ .TPP ¦
¦ Windows ¦ .TPW ¦
L------------------------+--------------------------

Хотя в приведенных ниже примерах для модулей указывается
расширение .TPU, при использовании компилятора BPC.EXE для компи-
ляции программ DOS защищенного режима или Windows вы можете подс-
тавить .TPC или .TPW.

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

Параметры компилятора
-----------------------------------------------------------------

В IDE у вас имеется возможность задавать различные параметры
с помощью системы меню. Компилятор, работающий в режиме командной
строки, позволяет указывать большинство из этих параметров, ис-
пользуя описанный ранее метод. Имеется также альтернативный ме-
тод: вместо косой черты (/) можно использовать знак минус (-).
Однако параметры, начинающиеся с минуса, должны отделяться друг
от друга пробелами. Поэтому, например, следующие две строки экви-
валентны и допустимы:

TPC -IC:\TPW\TVISION -DDEBUG sortname -$S- -$F+
TPC /IC:\TPW\TVISION/DDEBUG sortname /$S-/$F+

В первой строке используется минус и поэтому по крайней мере
один пробел отделяет один параметр от другого. Во второй строке
используется косая черта, поэтому разделений не требуется.


B.Pascal 7 & Objects/PG - 450 -


В Таблице 3.2 приведен список всех параметров командной
строки.

Параметры командной строки Таблица 3.2
--------------T-------------------------------------------------¬
¦ Параметр ¦ Описание ¦
+-------------+-------------------------------------------------+
¦ /$A+ ¦ Выравнивание данных на границу слова. ¦
¦ /$A- ¦ Выравнивание данных на границу байта. ¦
¦ /$B+ ¦ Вычисление булевского выражения по полной схеме.¦
¦ /$B- ¦ Вычисление булевского выражения по короткой схе-¦
¦ ¦ ме. ¦
¦ /$D+ ¦ Включение отладочной информации. ¦
¦ /$D- ¦ Выключение отладочной информации. ¦
¦ /$E+ ¦ Включение эмуляции. ¦
¦ /$E- ¦ Выключение эмуляции. ¦
¦ /$F+ ¦ Принудительное использование дальних вызовов. ¦
¦ /$F- ¦ Выключение принудительного использования дальних¦
¦ ¦ вызовов. ¦
¦ /$G+ ¦ Включение генерации кода процессора 80286. ¦
¦ /$G- ¦ Выключение генерации кода процессора 80286. ¦
¦ /$I+ ¦ Включение проверки ввода-вывода. ¦
¦ /$I- ¦ Выключение проверки ввода-вывода. ¦
¦ /$K+ ¦ Включение эффективных вызовов (только для BPC). ¦
¦ /$K- ¦ Выключение эффективных вызовов (только для BPC).¦
¦ /$L+ ¦ Включение локальных идентификаторов. ¦
¦ /$L- ¦ Выключение локальных идентификаторов. ¦
¦ /$M ¦ Размеры памяти. ¦
¦ /$N+ ¦ Включение использования арифметического сопро-¦
¦ ¦ цессора. ¦
¦ /$N- ¦ Выключение использования арифметического сопро-¦
¦ ¦ цессора. ¦
¦ /$R+ ¦ Включение проверки диапазона. ¦
¦ /$R- ¦ Выключение проверки диапазона. ¦
¦ /$S+ ¦ Включение проверки стека. ¦
¦ /$S- ¦ Выключение проверки стека. ¦
¦ /$T+ ¦ Включение указателей с проверкой типов. ¦
¦ /$T- ¦ Выключение указателей с проверкой типов. ¦
¦ /$V+ ¦ Строгая проверка строковых переменных. ¦
¦ /$V- ¦ Ослабленная проверка строковых переменных. ¦
¦ /$W+ ¦ Включение проверки кадра стека Windows (только¦
¦ ¦ для BPC). ¦
¦ /$W- ¦ Выключение проверки кадра стека Windows (только¦
¦ ¦ для BPC). ¦
¦ /$X+ ¦ Включение поддержки расширенного синтаксиса. ¦
¦ /$X- ¦ Выключение поддержки расширенного синтаксиса. ¦
¦ /B ¦ Построение всех модулей. ¦
¦ /CD ¦ Компиляция для реального режима DOS (только для¦
¦ ¦ BPC). ¦
¦ /CP ¦ Компиляция для защищенного режима DOS (только¦
¦ ¦ для BPC). ¦
¦ /CW ¦ Компиляция для Windows (только для BPC). ¦

B.Pascal 7 & Objects/PG - 451 -

¦ /Dопредел ¦ Определение условного идентификатора. ¦
¦ /Eмаршрут ¦ Каталог EXE и TPU. ¦
¦ /Fсегм:смещ¦ Поиск ошибки этапа выполнения. ¦
¦ /GS ¦ Файл MAP с сегментом. ¦
¦ /GP ¦ Файл MAP с общедоступными идентификаторами. ¦
¦ /GD ¦ Подробный файл MAP. ¦
¦ /Iмаршрут ¦ Каталоги включаемых файлов. ¦
¦ /Q ¦ Компиляция с сокращенными выводом. ¦
¦ /Rмаршрут ¦ Каталог ресурсов. ¦
¦ /T ¦ Каталоги TPL и CFG. ¦
¦ /Uмаршрут ¦ Каталоги модулей. ¦
¦ /V ¦ Отладочная информация в EXE. ¦
L-------------+--------------------------------------------------

Параметры-директивы компилятора
-----------------------------------------------------------------

Borland Pascal поддерживает несколько директив компилятора,
которые подробно рассмотрены в Главе 2 "Директивы компилятора".
Эти директивы обычно включаются в исходный текст и имеют одну из
следующих форм:

{$директива+}
{$директива-}
{$директива информация}

где "директива" обозначает одиночную букву. Кроме того, эти ди-
рективы могут указываться в командной строке с помощью параметра
/$ или /D, что эквивалентно включению соответствующих директив
компилятора в начало каждого компилируемого исходного файла.

Параметр-переключатель

Параметр /$ позволяет вам изменить используемое по умолчанию
состояние всех директив-переключателей. При этом используется
следующий синтаксис: указывается параметр /$, за которым следует
буква директивы и знак плюс (+) или минус (-). Например, команда:

tpc mystuff /$r-

скомпилирует MYSTUFF.PAS с выключенной проверкой диапазона, в то
время, как команда:

tpc mystuff /$r+

скомпилирует его с установленной проверкой диапазона. Нужно заме-
тить, что если вы исходном тексте встречаются директивы компиля-
тора {$R+} и {$R-}, они отменяют параметр командной строки /$R.

Вы можете указать с этим несколько параметров-переключателей
компилятора:

tpc mystuff /$r-/$i-/$v-/$f+

B.Pascal 7 & Objects/PG - 452 -


Кроме того, параметр-переключатель позволяет указывать спи-
сок директив (кроме $M), разделенных запятыми:

tpc mystuff /$r-,i-,v-,f+

Примечание: Отметим, что необходимо указать только
первый знак доллара.

Кроме изменения директив-переключателей, параметр /$ позво-
ляет также задавать параметры распределения памяти с помощью со-
ответствующего параметра распределения памяти ($M). Этот параметр
имеет формат:

/$Mстек,мин_разм_динами_области,макс_разм_динам_области

где "стек" обозначает размер стека, а "мин_разм_динами_области" и
"макс_разм_динам_области" обозначает минимальный и максимальный
размер динамически распределяемой области памяти. Оба значения
указываются в байтах и представляют собой десятичные числа, если
только им не предшествует знак доллара ($), который означает, что
числа являются шестнадцатиричными. Поэтому, например, следующие
командные строки эквивалентны:

tpc mystuff /$M16384,256,4096
tpc mystuff /$M$4000,$100,$1000

Отметим, что из-за этого формата нельзя использовать пара-
метр $M в списке директив, разделенных запятыми.

Условные определения

Параметр /D позволяет вам определять условные идентификато-
ры, соответствующие директиве компилятора $DEFINE <эидентифика-
тоp>, или команде интегрированной среды O¦C¦Conditional Defines.
За параметром /D должен следовать один или более условных иденти-
фикаторов, разделенный точкой с запятой (;). Например, следующая
командная строка:

TPC MYSTUFF /DIOCHECK;DEBUG;LIST

определяет для компиляции программы MYSTUFF.PAS три условных
идентификаторов: iocheck, debug и list. Это эквивалентно внесению
в начало исходного текста программы директив:

{$DEFINE IOCHECK}
{$DEFINE DEBUG}
{$DEFINE LIST}

Если задано несколько директив компилятора /D, то выполняет-
ся конкатенация списков идентификаторов. То есть команда:

TPC MYSTUFF /DIOCHECK/DDEBUG/DLIST

B.Pascal 7 & Objects/PG - 453 -


эквивалентна первому примеру.

Параметры режима компилятора
-----------------------------------------------------------------

Несколько параметров определяют функционирование самого ком-
пилятора. К ним относятся параметры /C (Compile - компилировать),
/М (Make - сформировать), /В (Build - построить) и /F (Find error
- найти ошибку), /L (Link Buffer - буфер компоновки) и /Q (Quiet
- компиляция с сокращенным выводом). Как и в случае других пара-
метров, здесь также можно использовать формат с минусом, однако
следует помнить, что параметры нужно разделять хотя бы одним про-
белом.

Параметр компиляции /C
-----------------------------------------------------------------

BPC поддерживает три целевых платформы: реальный режим DOS,
защищенный режим DOS и Windows. Параметр /C используется для вы-
бора при компиляции нужной платформы. За параметром /C должна
указываться буква: D (реальный режим DOS), P (защищенный режим
DOS) или W (Windows). Например:

BPC /CD MYPROG компиляция для реального режима DOS
BPC /CP MYPROG компиляция для защищенного режима DOS
BPC /CW MYPROG компиляция для Windows

По умолчанию используется /CD - BPC компилирует программу
для реального режима DOS.

Параметр /C управляет тем, на какую целевую платформу будет
влиять параметр /M. По этой причине при использовании параметра
/C он должен указываться в командной строке перед параметром /$M,
например:

BPC /$M8192 /CP MYPROG

будет устанавливать размер стека для компиляции в реальном режиме
DOS в 8192 байта, а затем переключать целевую платформу на защи-
щенный режим DOS, что приведет к игнорированию /$M. Корректной
записью будет:

BPC /CP /$M8192 MYPROG

где сначала в качестве целевой платформы указывается защищенный
режим DOS, а затем размер стека устанавливается в 8192 байта.



B.Pascal 7 & Objects/PG - 454 -

Параметр формирования /М
-----------------------------------------------------------------

Компилятор, работающий в режиме командной строки, имеет
встроенную утилиту MAKE, облегчающую ведение пpоектов. Параметр
/М указывает компилятору, что нужно проверить те все модули, от
которых зависит компилируемая программа.

Модуль будет перекомпилироваться в следующих случаях:

- Изменения исходного файла (.PAS) данного модуля являются
более поздними, чем дата и время создания файла модуля.

- Какой-либо файл, включаемый по директиве $I, или объектный
файл, компонуемый по директиве $L, является более новым,
чем файл .TPU данного модуля.

- Изменена интерфейсная часть модуля, на которую имеется
ссылка в операторе uses.

Модули из библиотеки TURBO.TPL (библиотеки исполняющей сис-
темы для приложений реального режима DOS), библиотеки TPP.TPL
(библиотеки исполняющей системы для приложений защищенного режима
DOS) и TPW.TPL (библиотеки исполняющей системы для приложений
Windows), в этом процессе не участвуют.

Если использовать этот параметр в предыдущем примере, то ко-
манда будет иметь вид:

tpc myprog /m



B.Pascal 7 & Objects/PG - 455 -

Параметр построения /B
-----------------------------------------------------------------

Вместо того, чтобы для определения изменений, полагаться на
параметр /M, вы можете указать компилятору, работающему в режиме
командной строки, что нужно обновить все модули, от которых зави-
сит ваша программа. Для этого следует использовать параметр /B.

Примечание: Нельзя одновременно указывать параметры /M
и /B.

Если использовать этот параметр в предыдущем примере, то ко-
манда будет иметь вид:

tpc myprog /b

Параметр поиска ошибки /F
-----------------------------------------------------------------

При обнаружении ошибки на этапе выполнения, вам сообщается
код ошибки и адрес ее расположения (сегмент:смещение). Параметр
/Fсегмент:смещение позволяет вам найти оператор исходного кода,
на котором произошла ошибка. При этом предполагается, что вы соз-
дали выполняемый файл, содержащий информацию для отладки (с по-
мощью директивы компилятора $D).

Допустим, что имеется файл ERRTST.PAS, содержащий следующую
программу:

program ErrTst;
var
x : real;
begin
x := 0;
x := x / x; { вызывает ошибку деления на ноль }
end.

Скомпилируем эту программу с помощью компилятора, использую-
щего командную строку.

tpc errtst

Если вы дадите команду DIR errtst.*, то DOS выведет имена
двух файлов:

ERRTST.PAS - ваш исходный код
ERRTST.EXE - выполняемый файл

Теперь запустим ErrTst и получим сообщение об ошибке на эта-
пе выполнения:

C:\ > test
Runtime error 200 at 0000:003D

B.Pascal 7 & Objects/PG - 456 -

(Ошибка этапа выполнения 200 по адресу 0000:003D)

Отметим, что здесь указан код ошибки (200) и сегмент со сме-
щением (0000:003D в шестнадцатиричном виде), соответствующий ука-
зателю инструкций (CS:IP) для команды, где произошла ошибка. Как
при этом установить, какая строка исходного кода вызвала появле-
ние этой ошибки? Для этого нужно просто вызвать компилятор с па-
раметром поиска ошибки на этапе выполнения /F и указать сегмент и
смещение из сообщения об ошибке:

C:\ >tpc errtst /F0:18
Borland Pascal 7.0 Copyright(c)1983,92 Borland Intеrnational
ERRTST.PAS(7)
ERRTST.PAS(6): Target address found (указанный адрес найден)
x := x DIV x;
^

Чтобы компилятор смог найти ошибку этапа выполнения, ваша
программа и модули должны компилироваться с теми же параметрами,
с которыми вы ее компилировали в первый раз.

Компилятор указывает имя файла и номер строки, а также выво-
дит строку исходного кода, вызвавшую появление ошибки.

Как уже говорилось, вы должны выполнять компиляцию с разре-
шением генерации информации для отладки (по умолчанию генерация
этой информации для всех программ и модулей разрешена). Если вы
запретите с помощью директивы компилятора {$D-} или параметра
/$D- генерацию информации для отладки, то компилятор, работающий
в режиме командной строки, не сможет найти ошибки на этапе выпол-
нения.



B.Pascal 7 & Objects/PG - 457 -

Параметр буфера компоновки /L
-----------------------------------------------------------------

Параметр /L запрещает организацию в памяти буферов при ком-
поновке файлов модулей для создания файла .EXE. Встроенный компо-
новщик Borland Pascal представляет собой двухпроходный компонов-
щик. При первом просмотре файлов модулей он помечает каждую про-
цедуру, которая вызывается другими процедурами. На втором прохо-
де, извлекая отмеченные процедуры из файлов модулей, он генериру-
ет выполняемый файл .EXE.

По умолчанию между этими двумя проходами файлы модулей хра-
нятся в памяти, однако, если задается параметр /L, то они будут
вновь считываться на втором проходе. Механизм, использующийся по
умолчанию, повышает скорость работы, но для успешной компоновки
больших программ вам, возможно, придется использовать параметр
/L.

Параметр сокращенного вывода /Q
-----------------------------------------------------------------

Параметр режима сокращенного вывода позволяет подавить вывод
во время компиляции имен файлов и номеров строк. Когда компиля-
тор, работающий в режиме командной строки, вызывается с этим па-
раметром:

TPC MYPROG /Q

выходная информация будет ограничиваться сообщением о завершении
компиляции и обычной статистикой, выводимой в конце компиляции. В
случае ошибки о ней будет сообщено.



B.Pascal 7 & Objects/PG - 458 -

Параметры для pаботы с каталогами
-----------------------------------------------------------------

Компилятор, работающий в режиме командной строки, поддержи-
вает несколько параметров, которые позволяют указать шесть ката-
логов, используемых компилятором: каталог TPL & CFG. EXE & TPU,
каталог включаемых файлов (Include), каталог модулей (Unit), ка-
талог объектных файлов (Object). Кроме того, BPC позволяет вам
задать каталог файлов ресурсов (Resource).

Исключая параметр каталогов EXE и TPU, в каждом параметре
каталогов командной строки вы можете задать один или несколько
каталогов. Если вы указываете несколько каталогов, то разделите
их точкой с запятой (;). Если вы задаете несколько директив, то
указанные в них списки каталогов объединяются.


Параметр каталога /T
-----------------------------------------------------------------

Пpи выполнении TPC ищет два файла: файл конфигуpации
TPC.CFG и файл pезидентной библиотеки TURBO.TPL. Аналогично, пpи
выполнении BPC ищет файл конфигуpации BPC.CFG и файл pезидентной
библиотеки TPP.TPL. Пpи этом автоматически пpосматpиваются теку-
щий каталог и каталог, содеpжащий файл .EXE. Паpаметp /T позволя-
ет указать дpугие пpосматpиваемые каталоги. Напpимеp, можно ввес-
ти:

TPC /TC:\TPW\BIN MYSTUFF

Если вы хотите, чтобы паpаметp /T влиял на поиск файла
TPC.CFG, он должен быть самым пеpвым аpгументом в командной
стpоке, как это показано в предыдущем примере.



B.Pascal 7 & Objects/PG - 459 -

Параметр каталога
выполняемых файлов и файлов модулей (/E)
-----------------------------------------------------------------

Этот параметр указывает компилятору, работающий в режиме ко-
мандной строки, куда нужно поместить создаваемые файлы .EXE и
файлы модулей:

TPC MYSTUFF /EC:\TP\BIN

Если этот параметр не задан, то TPC создает файлы .EXE и
файлы модулей в том же каталоге, где находятся соответствующие
исходные файлы.

Примечание: Вы можете задать только один каталог EXE и
TPU.

Параметр каталога включаемых файлов (/I)
-----------------------------------------------------------------

Borland Pascal поддерживает включаемые файлы, указанные с
помощью директивы компилятора {$Iимя_файла}. Паpаметp позволяет
указывать список каталогов, в которых следует искать включаемые
файлы. Каталоги в списке отделяются дpуг от дpуга точкой с запя-
той (;). Например, в случае команды:

TPC MYSTUFF /IC:\TPW\INCLUDE;D:\INC

TPC будет осуществлять поиск этих включаемых файлов в каталогах
C:\TP\INCLUDE и D:\INC после просмотра текущего каталога.

Если указывается несколько директив /I, то каталоги сцепля-
ются. Например, команда:

TPC MYSTUFF /IC:\TP\INCLUDE/ID:\INC

эквивалентна первому примеру.



B.Pascal 7 & Objects/PG - 460 -

Параметр каталогов модулей (/R) (только для BPC)
-----------------------------------------------------------------

При компиляции программы для целевой платформы DOS защищен-
ного режима или Windows BPC ищет файлы ресурса в текущем катало-
ге. Параметр /R позволяет вам указать дополнительные каталоги,
где BPC ищет файлы ресурсов.

Параметр каталогов модулей (/U)
-----------------------------------------------------------------

При компиляции программы, использующей модули, компилятор,
работающий в режиме командной строки, сначала проверяет, не нахо-
дятся ли используемые модули в .TPL (который загружается вместе с
компилятором). Если нет, то компилятор ищет файл, имя которого
составлено из имени модуля и расширения .TPU, (.TPP, .TPW), в те-
кущем каталоге. Параметр /U позволяет задать для поиска модулей
дополнительные каталоги. Как и в других параметрах, можно указать
несколько маршрутов поиска - они отделяются друг от друга точкой
с запятой.

Параметр каталогов объектных файлов (/О)
-----------------------------------------------------------------

С помощью директив компилятора {$Lимя_файла} Borland Pascal
позволяет компоновать внешние подпрограммы на языке ассемблера.
Эта возможность разъясняется в Главе 25 "Руководства по языку".
Паpаметp /О указывает позволяет указывать список каталогов, в ко-
тоpых должен осуществляться поиск этих объектных файлов. Можно
указывать несколько каталогов, разделяя их точкой с запятой (;).
Например, в случае команды:

TPC MYSTUFF /OC:\TPC\ASM;D:\OBJECT

объектные файлы, не найденные компилятором в текущем каталоге,
будут искаться в каталогах C:\TPC\ASM и D:\OBJECT.



B.Pascal 7 & Objects/PG - 461 -

Параметры отладки
-----------------------------------------------------------------

В компиляторе, работающем в режиме командной строки, имеется
два параметра командной строки, которые позволяют вам генериро-
вать информацию для отладки.

Параметр файла MAP (/G)
-----------------------------------------------------------------

Параметр /G компилятору, работающему в режиме командной
строки, что необходимо генерировать файл схемы памяти .MAP. Бук-
ва, указываемая в параметре после G, показывает желаемый уровень
выводимой в файле .МAР информации: S (информация только о сегмен-
тах), Р (сегменты и общедоступные имена) или D (подробная инфор-
мация).

Примечание: В отличие от файлов .EXE, .TPU, .TPP и
.TPW, имеющих двоичный формат, файл .МAР представляет собой
обычный текстовый файл, который можно вывести на устройство
печати или загрузить в редактор.

Файл MAP разбит на три раздела:

- сегменты;
- общедоступные идентификаторы;
- номера строк.

Параметр /GS выводит только раздел сегментов, /GP выводит
раздел сегментов Segment и общедоступных имен Publics, а /GD вы-
водит все три раздела.

Для программ и модулей, откомпилированных с директивами
{$D+, L+} (они используются по умолчанию) в разделе общедоступных
идентификаторов Publics указываются все глобальные переменные,
процедуры и функции. В разделе с номерами строк показываются но-
мера строк всех процедур и функций данной программы. При исполь-
зовании директив {$D+,L-} в разделе общедоступных идентификаторов
перечисляются только идентификаторы, определенные в интерфейсной
части модуля.

Для модулей, откомпилированных с директивой {$D-}, отсутс-
твуют записи в секции с номерами строк Line Numbers.


Параметр автономной отладки (/V)
-----------------------------------------------------------------

Когда в командной строке указывается параметр /V, компиля-
тор, работающий в режиме командной строки, добавляет в конец фай-
ла .EXE информацию для отладки, с которой может работать Турбо
отладчик. Турбо отладчик включает в себя отладку на уровне машин-
ных и исходных кодов, расширенное использование точек останова

B.Pascal 7 & Objects/PG - 462 -

(включая точки останова по условию и с использованием выражений).

Хотя информация для отладки, генерируемая по директиве /V,
увеличивает объем результирующего файла .EXE, на реальные коды в
файле .EXE она влияния не оказывает, и при выполнении дополни-
тельной памяти не тpебуется.

Размер дополнительной присоединяемой к файлу .EXE информации
зависит от директив компилятора $L и $D в каждой из программ или
модулей. Для программ, компилируемых с директивами {$D+,L+} (по
умолчанию), отладчику будут известны все константы, переменные,
типы, процедуры и функции. При использовании директив {$D+,L-}
отладчику будут известны только символы, определенные в интер-
фейсной части модуля (секция interface). Наконец, для программ и
модулей, скомпилированных с директивой {$D-}, при отладке прик-
ладной программы отладчик не сможет выводит на экран строки ис-
ходного текста.



B.Pascal 7 & Objects/PG - 463 -

Файлы TPC.CFG и BPC.CFG
-----------------------------------------------------------------

Вы можете указать список параметров в файле конфигурации
TPC.CFG или BPC.EXE, который можно использовать вместе с парамет-
рами, вводимыми в командной строке. Каждая строка в файле конфи-
гурации представляет собой дополнительный аргумент командной
строки, вставляемый перед действительными аргументами командной
строки. Таким образом, создав файл конфигурации, вы можете изме-
нить любую принятую по умолчанию установку параметра командной
строки.

Компилятор, работающий в режиме командной строки, позволяет
вводить один и тот же параметр командной строки несколько раз,
при этом игнорируются все его вхождения за исключением последне-
го. Поэтому даже если вы изменили некоторые установки в файле
конфигурации, вы можете отменить их в командной строке.

При запуске TPC осуществляет поиск TPC.CFG в текущем катало-
ге. Если там его нет, и если вы работаете под управлением опера-
ционной системы DOS версии 3.х или старше, то просматривается
также каталог, в котором находится TPC.EXE. Для того, чтобы ком-
пилятор TPC просматривал также и другие каталоги (помимо текуще-
го), следует указать в командной строке в качестве первого пара-
метра параметр /Т.

Если TPC.CFG или BPC.EXE содержит строку, которая не начина-
ется с косой черты (/) или просто дефиса (-), то эта строка опре-
деляет принимаемое по умолчанию имя файла для компиляции. В этом
случае при запуске TPC или BPC с пустой командной строкой (или с
командной строкой, содержащей только параметры командной строки)
будет скомпилирован файл с именем, принятым по умолчанию, а не
выводятся итоговые сообщения по синтаксису.

Приведем пример файла TPC.CFG, в котором определяется нес-
колько каталогов для файлов: включаемых, объектных и модулей и
изменяются принимаемые по умолчанию значения директив $F и $S:

/IC:\TP\INC;C:\TPW\SRC
/OC:\TP\ASM
/UC:\TP\UNIT
/$F+
/$S-

Теперь, если в командной строке DOS ввести команду:

TPC MYSTUFF

то TPC будет действовать так, как если бы вы ввели следующее:

TPC /IC:\TP\INC;C:\TPW\SRC /OC:\TP\ASM /UC:\TP\UNIT
/$F+ /$S- MYSTUFF


B.Pascal 7 & Objects/PG - 464 -

Параметры компилятора,
специфические для конкретной платформы (только для BPC)
-----------------------------------------------------------------

Когда вы используете с BPC.EXE директиву компилятора /$,
компилятор изменяет установки переключателя для всех целевых
платформ. В определенных ситуациях вам может потребоваться задать
для разных платформ различные значения директивы-переключателя.
Чтобы изменить значение переключателя для конкретной платформы,
добавьте после переключателя букву D (реальный режим DOS), P (за-
щищенный режим DOS) или W (Windows). Например, файл BPC.CFG, со-
держащий строки:

/$FD+
/$FP+
/$FW-
/$S-

приведет к тому, что прикладные программы реального режима DOS
будут компилировать в параметром {$F+}, а программы защищенного
режима DOS и Windows - с параметром {$F-}. Кроме того, он вызыва-
ет для всех целевых платформ включение проверки стека.

Параметр /$M также поддерживает спецификаторы платформ. Нап-
ример:

/$MW16384,4096

изменяет размеры стека и динамически распределяемой области памя-
ти для Windows, не влияя на другие целевые платформы. Директива
/$W без спецификатора платформы всегда применяется к платформе,
выбранной последним параметром /C.



B.Pascal 7 & Objects/PG - 465 -

--------------------------------------------------------------------
Глава 4. Сообщения об ошибках
-----------------------------------------------------------------

В данной главе приводятся возможные сообщения об ошибках,
которые вы можете получить в Borland Pascal. Сообщения сгруппиро-
ваны по следующим категориям:

- Сообщения компилятора об ошибках.

- Ошибки DOS.

- Ошибки ввода-вывода.

- Критические ошибки.

- Фатальные ошибки.

- Ошибки DPMI.

Ошибки этапа выполнения подразделяются на ошибки DOS, ошибки
ввода-вывода, критические и фатальные ошибки. Ошибки интерфейса
DOS защищенного режима (DPMI) включают в себя ошибки установки,
ошибки фиктивного модуля, ошибки этапа выполнения и ошибки серве-
ра. В каждой из этих групп ошибки перечисляются в порядке номе-
ров.

Некоторые сообщения об ошибках, которые применимы только к
определенным платформам, помечены словами "Реальный режим", "За-
щищенный режим" или "Windows".

Примечание: Сообщения утилит Borland Pascal вы можете
найти в "Руководстве по инструментальным средствам и утили-
там".

Сообщения компилятора об ошибках
-----------------------------------------------------------------

При наличии возможности компилятор будет выводить на экран
дополнительную диагностическую информацию в виде идентификатора
или имени файла, например:

Error 15: File not found (WINDOW.TPU)
(Ошибка 15: файл не найден (WINDOW.TPU).)

При обнаружении ошибки Borland Pascal (в интегрированной
среде IDE) автоматически загружает исходный файл и помещает кур-
сор около ошибки. Компилятор, работающий в режиме командной стро-
ки, выводит на экран сообщение об ошибке, номер и исходную стро-
ку, используя для указания места ошибки символ каре (^). Учтите,
что некоторые ошибки в исходном тексте до определенного времени
не обнаруживаются. Например, несоответствие типов в операторе
присваивания не может быть обнаружено до тех пор, пока не будет
вычислено целиком выражение со знаком :=. В таких случаях ищите

B.Pascal 7 & Objects/PG - 466 -

ошибку слева от курсора или над ним в предыдущем тексте.

Ошибки 1 - 50
-----------------------------------------------------------------

1 Out memory
(Выход за границы памяти)

Данная ошибка появляется, если компилятор выполняется вне
допустимых границ памяти. Имеется ряд возможных решений этой
проблемы:

- Если в меню Compile¦Destination (Компиляция¦Назначение)
устанавливается значение Memory (Память), установите его в
интегрированной интерактивной среде в значение Disk
(Диск).

- Если буфер в меню Options¦Linker¦Link Buffer (Парамет-
ры¦Компоновщик¦Буфер компоновки) кнопка с зависимой фикса-
цией установлена на Memory (Память), переключите ее на
Disk. При использовании компилятора, работающего в режиме
командной строки, применяйте для компоновки на диске пара-
метр /L.

Если ни одна из рекомендаций не помогает, то возможно ваша
программа или программный модуль просто слишком велики, чтобы
компилироваться в таком объеме памяти. В этом случае вы должны
разбить его на два или более программных модуля.

2 Identifier expected
(Не указан идентификатор)

Идентификатор должен находиться в этом месте. Возможно вы
пытаетесь использовать зарезервированное слово.

3 Unknown identifier
(Неизвестный идентификатор)

Этот идентификатор не был описан.

4 Duplicate identifier
(Повторный идентификатор)

Идентификатор уже представляет имя программы/модуля, конс-
танты, переменной, типа, процедуры или функции, описанных в теку-
щем блоке.

5 Syntax error
(Синтаксическая ошибка)

В исходном тексте найден неверный символ. Возможно, вы забы-
ли заключить в кавычки строковую константу.


B.Pascal 7 & Objects/PG - 467 -

6 Error in real constant
(Ошибка в вещественной константе).

Синтаксис констант вещественного типа (типа real) определя-
ется в Главе 2 ("Лексемы и константы") "Руководства по языку".

7 Error in integer constant
(Ошибка в целой константе).

Синтаксис констант типа integer (целое) определяется в Главе
2 "Лексемы и константы" "Руководства по языку". Учтите, что после
чисел, превышающих диапазон представления целых чисел должны ста-
виться точка и ноль, например, 12345678912.0.

8 String constant exceeds line.
(Строковая константа превышает размеры строки)

Вероятно, вы забыли поставить кавычку в конце строковой
константы.

10 Unexpected end of file
(Неправильный конец файла)

Вы могли получить это сообщение об ошибке по одной из следу-
ющих причин:

- Ваш исходный файл закончился перед последним end основного
раздела операторов. Вероятно, у вас неодинаковое количест-
во операторов begin и end.

- Включаемый файл заканчивается в середине раздела операто-
ров. Каждый раздел операторов должен целиком помещаться в
одном файле.

- Вы не закончили комментарий.

11 Line too long
(Строка слишком длинная)

Максимальная длина строки может равняться 126 символам.

12 Type identifier expected
(Нужен идентификатор типа)

Не указан тип идентификатора, как это должно быть.

13 Too many open files
(Слишком много открытых файлов)

Если появляется эта ошибка, то это обозначает, что ваш файл
CONFIG.SYS не включает параметр FILES=xx, или этот параметр ука-
зывает слишком мало файлов. Увеличьте число файлов какого-либо
подходящего значения, например, 20.

B.Pascal 7 & Objects/PG - 468 -


14 Invalid file name
(Неверное имя файла)

Имя файла неверно или указывает не существующий маршрут.

15 File not found
(Файл не найден)

Файл не может быть найден ни в текущем каталоге, ни в каком-
либо другом исследуемом каталоге, предназначенном для этого типа
файлов.

16 Disk full
(Диск заполнен)

Удалите некоторые файлы или воспользуйтесь новым диском.

17 Invalid compiler directive
(Неправильная директива компилятора)

Неверная буква в директиве компилятора, один из параметров
директивы компилятора неверный, или вы пользуетесь глобальной ди-
рективой компилятора, когда компиляция тела программы уже нача-
лась.

18 Too many files
(Слишком много файлов)

В компиляции программы или программного модуля участвуют
слишком много файлов. Попытайтесь не использовать так много фай-
лов, например, объединяя включаемые файлы или делая короче имена
файлов.

19 Undefined type in pointer definition
(Неопределенный тип в определении ссылки)

Была осуществлена ссылка на тип в описании ссылочного типа
(указателя), приведенном ранее, но он не был описан.

20 Variable identifier expected
(Нужен идентификатор переменной)

Идентификатор не описывает переменную, как это должно быть.

21 Error in type
(Ошибка в определении типа)

Определение типа не может начинаться с этого символа.

22 Structure too large
(Слишком большая структура)


B.Pascal 7 & Objects/PG - 469 -

Максимально допустимый размер структурного типа - 65535
байт.

23 Set base type of range
(Базовый тип множества нарушает границы)

Базовый тип множества должен представлять собой отрезок типа
с границами в пределах от 0 до 255 или перечислимым типом с не
более чем 256 значениями.

24 File components may not be files or objects
(Компоненты файла не могут быть файлами или объектами)

Тип компоненты файлового типа не может иметь объектный тип
или файловый тип и не может быть структурным типом с компонентами
файлового или объектного типа: конструкции file of file или file
of object не допускаются.

25 Invalid string length
(Неверная длина строки)

Максимальная описываемая длина строки должна находиться в
диапазоне от 1 до 255.

26 Type mismatch
(Несоответствие типов)

Это может произойти по следующим причинам:

- несовместимые типы переменной и выражения в операторе
присваивания;

- несовместимые типы фактического и формального параметров в
обращении к процедуре или функции;

- тип выражения, не совместимый с типом индекса при индекси-
ровании массива;

- несовместимые типы операндов в выражении.

27 Invalid subrange base type
(Неправильный базовый тип отрезка типа)

Все порядковые типы являются допустимыми базовыми типами.

28 Lower bound greater than upper bound
(Нижняя граница больше верхней)

Описание отрезка типа (поддиапазона) указывает нижнюю грани-
цу большей, чем верхняя.

29 Ordinal type expected
(Нужен порядковый тип)

B.Pascal 7 & Objects/PG - 470 -


Типы действительные, строковые, структурные типы и ссылочные
в данном случае не допускаются.

30 Integer constant expected
(Нужна целая константа)

31 Constant expected
(Нужна константа)

32 Integer or real constant expected
(Нужна целая или вещественная константа)

33 Pointer type identifier expected
(Нужен идентификатор типа указателя)

Данный идентификатор не обозначает тип указателя, как это
требуется.

34 Invalid function result type
(Неправильный тип результата функции)

Правильными типами результата функции являются все простые
типы, строковые типы и ссылочные типы.

35 Label identifier expected
(Нужен идентификатор метки)

Метка не обозначена с помощью идентификатора, как это требу-
ется.

36 BEGIN expected
(Нужен BEGIN)

37 END expected
(Нужен END)

38 Integer expression expected
(Нужно выражение типа Integer)

Предыдущее выражение должно иметь тип целый тип Integer.

39 Ordinal expression expected
(Нужно выражение порядкового типа)

Предшествующее выражение должно иметь порядковый тип.

40 Boolean expression expected
(Нужно выражение типа Boolean)

Предшествующее выражение должно иметь тип boolean.

41 Operand types do not match operator

B.Pascal 7 & Objects/PG - 471 -

(Типы операндов не соответствуют оператору)

Данный оператор не может быть применен к операндам этого ти-
па, например, 'A' разделить на '2'.

42 Error in expression
(Ошибка в выражении)

Данный идентификатор не может участвовать в выражении ука-
занным образом. Возможно, вы забыли указать операцию между двумя
операндами, например 'A' div '2'.

43 Illegal assignment
(Неверное присваивание)

- Нетипизированным файлам и переменным нельзя присваивать
значения.

- Идентификатору функции можно присваивать значения только
внутри раздела операторов данной функции.

44 Field identifier expected
(Нужен идентификатор поля)

Данный идентификатор не упоминает поле предшествующей пере-
менной типа запись.

45 Object file too large
(Объектный файл слишком большой)

Borland Pascal не может компоновать файлы .OBJ, размером
превышающие 64К.

46 Undefined external
(Не определена внешняя процедура)

Внешняя процедура или функция не имеет соответствующего оп-
ределения PUBLIC в объектном файле. Убедитесь, что вы указали все
объектные файлы в директивах {$L имя_файла} и проверьте написание
идентификаторов процедуры или функции в файле .ASM.

47 Invalid object file record
(Неправильная запись объектного файла)

Файл .OBJ содержит неверную объектную запись. Убедитесь, что
данный файл является действительно файлом .OBJ.

48 Code segment too large
(Сегмент кода слишком большой)

Максимальный размер кода программы или программного модуля
равняется 65520 байтам. Если вы компилируете программный модуль,
разбейте его на два или более программных модуля.

B.Pascal 7 & Objects/PG - 472 -


49 Data segment too large
(Сегмент данных слишком велик)

Максимальный размер сегмента данных программы равен 65520
байтам, включая данные, описываемые используемыми программными
модулями. Если вам нужно большее количество глобальных данных,
опишите большие структуры с помощью указателей и выделяйте для
них память динамически с помощью процедуры New.

Вы можете также получить это сообщение при компиляции прог-
раммы Windows с директивой (G-}. В этом случае, если вы собирае-
тесь запускать программу в защищенном режиме или поместить в ней
строковые константы в строковый файл ресурса, попробуйте скомпи-
лировать ее с директивой {G+}.

50 DO expected (Нужен оператор DO)

Ошибки 51 - 100
-----------------------------------------------------------------
51 Invalid PUBLIC definition
(Неверное определение PUBLIC)

- Две или более директивы PUBLIC на языке ассемблера опре-
деляют один и тот же идентификатор.

- Объектный файл .OBJ определяет идентификаторы PUBLIC, ко-
торые не находятся в сегменте CODE.

52 Invalid EXTRN definition
(неправильное определение EXTRN)

- На идентификатор имеется ссылка в директиве EXTRN в языке
ассемблера, но он не описан в программе или модуле на Пас-
кале, или в интерфейсной части какого-либо из используемых
модулей.

- Идентификатор обозначает абсолютную переменную.

- Идентификатор обозначает процедуру или функцию типа
inline.

53 Too many EXTRN definition
(Слишком много определений EXTRN)

Borland Pascal не может обрабатывать файлы .OBJ при более
чем 256 определениях EXTRN.

54 OF expected
(Требуется OF)

55 INTERFACE expected
(Требуется интерфейсная секция)

B.Pascal 7 & Objects/PG - 473 -


56 Invalid relocatable reference
(Недопустимая перемещаемая ссылка)

- Файл .OBJ содержит данные и перемещаемые ссылки в сегмен-
тах, отличных от CODE. Например, вы пытаетесь описать ини-
циализированные переменные в сегменте DATA.

- Файл .COМ содержит ссылки с размерами в байтах на переме-
щаемые идентификаторы. Такая ошибка происходит в случае,
если вы используете операторы HIGH и DOWN с перемещаемыми
идентификаторами или если вы ссылаетесь в директивах DB на
перемещаемые идентификаторы.

- Операнд ссылается на перемещаемый идентификатор, который
не был определен в сегменте CODE или в сегменте DATA.

- Операнд ссылается на процедуру EXTRN или функцию EXTRN со
смещением, например, CALL SortProc+8.

57 THEN expected
(Требуется THEN)

В нужном месте отсутствует ключевое слово then.

58 TO or DOWNTO expected
(Требуется ТО или DOWNTO)

В нужном месте отсутствует ключевое слово to или downto.

59 Undefined forward
(Не определено опережающее описание)

- Были описаны процедура или функция в интерфейсной секции
программного модуля, но их определение отсутствует в сек-
ции реализации.

- Процедуры или функции были описаны с помощью описания
forward, но их определение не найдено.

61 Invalid typecast
(Неверное преобразование типа)

- Размеры ссылки на переменную и тип результата отличаются
друг от друга при изменении типа переменной.

- Вы пытаетесь осуществить приведение типа выражения, когда
разрешается только ссылка на переменную, процедуру или
функцию.

62 Division by zero
(Деление на ноль)


B.Pascal 7 & Objects/PG - 474 -

Предшествующий операция пытается выполнить деление на ноль.

63 Invalid file type
(Неверный файловый тип)

Данный файловый тип не обслуживается процедурой обработки
файлов. Например, процедура Readln используется для типизирован-
ного файла, или процедура Seek - для текстового файла.

64 Cannot Read or Write variables of this type
(Нельзя считать или записать переменные данного типа)

- Процедуры Read и Readln могут считывать переменные сим-
вольного, целого, вещественного и строкового типа.

- Процедуры Write и Writeln могут выводить переменные сим-
вольного, целого, действительного, булевского и строкового
типа.

65 Pointer variable expected
(Нужно использовать переменную-указатель)

Предыдущая переменная должна иметь типа указатель.

66 String variable expected
(Нужна строковая переменная)

Предшествующая переменная должна иметь строковый тип.

67 String expression expected
(Нужно выражение строкового типа)

Предшествующее выражение должно иметь строковый тип.

68 Circular unit reference
(Циклическая ссылка на модуль)

В секции interface два модуля не могут ссылаться друг на
друга, но могут это делать в секции implementation. Переупорядо-
чите операторы uses таким образом, чтобы циклические ссылки имели
место только в секции implementation. Подробности см. в разделе
"Циклические ссылки на модули" в Главе 10 "Руководства по языку".

69 Unit name mismatch
(Несоответствие имен программных модулей)

Имя программного модуля, найденное в файле .TPU, .TPW или
.TPP, не соответствует имени, указанному в операторе uses.

70 Unit version mismatch
(Несоответствие версий программных модулей)

Один или несколько программных модулей используемых данной

B.Pascal 7 & Objects/PG - 475 -

программой, были изменены после их компиляции. Воспользуйтесь ко-
мандой Compile¦Make (Компиляция¦Формирование) или Compile¦Build
(Компиляция¦Построение) в интегрированной интерактивной среде
программирования и параметрами /М или /В в компиляторе, работаю-
щем в режиме командной строки, что позволит автоматически скомпи-
лировать программные модули, нуждающиеся в перекомпиляции.

71 Internal stack overflow
(Переполнение внутреннего стека)

Внутренний стек компилятора исчерпан из-за слишком большого
уровня вложенности операторов. Переорганизуйте исходный код и
уменьшите уровень вложенности. Например, переместите внутренние
уровни вложенных операторов в отдельную процедуру.

72 Unit file format error
(Ошибка формата файла программного модуля)

Файл .TPU, .TPW или .TPP (в зависимости от платформы) явля-
ется недействительным. Возможно, он создан с помощью старой вер-
сии Turbo Pascal или Borland Pascal. В этом случае нужно переком-
пилировать исходный код модуля и создать новый модуль.

73 Implementation expected
(Требуется секция реализации)

Ключевое слово implementation отсутствует там, где оно долж-
но быть. Возможно, вы включили реализацию процедуры, функции или
метода в интерфейсную часть модуля.

74 Constant and case types do not match
(Типы констант и тип выражения оператора case не соответс-
твуют друг другу)

Тип константы оператора case не совместим с выражением се-
лектора в операторе варианта.

75 Record variable expected
(Нужна переменная типа запись)

Предшествующая переменная должна иметь тип запись.

76 Constant out of range
(Константа нарушает границы)

- Вы пытаетесь указать массив с константами, нарушающими
границы.

- Вы пытаетесь присвоить константу вне диапазона переменной.

- Вы пытаетесь передать константу вне диапазона в качестве
параметра процедуре или функции.


B.Pascal 7 & Objects/PG - 476 -

77 File variable expected
(Нужна файловая переменная)

Предшествующая переменная должна иметь файловый тип.

78 Pointer expression expected
(Нужно выражение типа указатель)

Предшествующее выражение должно иметь ссылочный тип.

79 Integer or real expression expected
(Нужно выражение типа real или integer).

Предшествующее выражение должно иметь тип integer или real.

80 Label not withhin current block
(Метка не находится внутри текущего блока)

Оператор goto не может ссылаться на метку, находящуюся вне
текущего блока.

81 Label already defined
(Метка уже определена)

Данная метка уже помечает оператор.

82 Undefined label in processing statement part
(Неопределенная метка в предшествующем разделе операторов)

Данная метка была описана, и на нее осуществлялась ссылка в
предшествующем разделе операторов, но она не определена.

83 Invalid @ argument
(Недействительный аргумент оператора @)

Действительными аргументами являются ссылки на переменные и
идентификаторы процедур или функций.

84 Unit expected
(Нужно ключевое слово UNIT)

Не указано ключевое слово unit, как это требуется.

85 ";" expected
(Нужно указать ";")

Не указана, там где это требуется, точка с запятой.

86 ":" expected
(Нужно указать ":")

Не указано, там где это требуется, двоеточие.


B.Pascal 7 & Objects/PG - 477 -

87 "," expected (Нужно указать ",")

Не указана, там где это требуется, запятая.

88 "(" expected
(Нужно указать "(")

Не указана, там где это требуется, открывающая круглая скоб-
ка.

89 ")" expected
(Нужно указать ")")

Не указана, там где это требуется, закрывающая скобка.

90 "=" expected
(Нужно указать "=")

Нужно указать знак равенства.

91 ":=" expected
(Нужно указать ":=")

Требуется использовать операцию присваивания.

92 "[" or "(." expected
(Нужно "[" или "(.")

Требуется указать квадратную скобку или (..

93 "]" or ".)" expected
(Нужно "]" или ".)")

Требуется указать квадратную скобку или .).

94 "." expected
(Нужно ".")

Требуется указать точку. Убедитесь, что тип не используется
как переменная, или что имя программы не переопределяет важного
идентификатора другого модуля.

95 ".." expected
(Нужно "..")

Требуется указать точки. Там, где это нужно, не указан под-
диапазон.

96 Too many variables
(Слишком много переменных)

- Общий размер глобальных переменных, описанных в программе
или программном модуле, не может превышать 64К.

B.Pascal 7 & Objects/PG - 478 -


- Размер локальных переменных, описанных в программе или
функции, не может превышать 64 Кбайт.

97 Invalid FOR control variable
(Недопустимая управляющая переменная оператора FOR)

Управляющая переменная оператора FOR должна быть переменной
перечислимого типа, определенной в разделе описаний текущей подп-
рограммы.

98 Integer variable expected
(Нужна переменная целого типа)

Предшествующая переменная должна иметь тип integer.

99 Files are not allowed here
(Здесь не допускаются файлы)

Типизированная константа не может иметь файловый тип.

100 String length mismatch
(Несоответствие длины)

Длина строковой константы не соответствует количеству эле-
ментов символьного массива.

Ошибки 101 - 150
-----------------------------------------------------------------
101 Invalid ordering of fields
(Неверный порядок полей)

Поля в константе типа запись должны записываться в порядке
их описания.

102 String constant expected
(Нужна константа строкового типа)

103 Integer or real variable expected
(Нужна переменная типа integer или real)

Предшествующая переменная должна иметь целый или веществен-
ный тип.

104 Ordinal variable expected
(Нужна переменная порядкового типа)

Предшествующая переменная должна иметь порядковый тип.

105 INLINE error
(Ошибка в операторе INLINE)

Оператор < не допускается в сочетании с перемещаемыми ссыл-

B.Pascal 7 & Objects/PG - 479 -

ками на переменные. Такие ссылки всегда имеют размер в слово.

106 Character expression expected
(Предшествующее выражение должно иметь символьный тип)

Предшествующее выражение должно иметь тип Char.

107 Too many relocation items
(Слишком много перемещаемых элементов)
[Только реальный режим.]

Размер раздела таблицы перемещения файла .EXE превышает 64К,
что является верхним пределом в Borland Pascal. Если вы обнаружи-
ли эту ошибку, то это значит, что программа просто слишком велика
для обработки компоновщиком Borland Pascal. Возможно также, что
она слишком велика для выполнения в DOS.

- Преобразуйте некоторые модули программы в оверлейные. Это
уменьшит число перемещаемых элементов в файле .EXE и объем
памяти, требуемый для выполнения приложения.

- Измените программу на приложение защищенного режима DOS.

112 CASE constant out of range
(Константа CASE нарушает допустимые границы)

108 Overflow in arithmetic operation
(Переполнение в арифметической операции).

Результат предшествующей операции не находится в диапазоне
Longint (-2147483648..2147483647). Исправьте операцию или исполь-
зуйте вместо целочисленных значения вещественного типа.

109 No enclosing FOR, WHILE оr REPEAT statement
(Нет включающего оператора FOR, WHILE или REPEAT)

Стандартные процедуры Break и Continue не могут использо-
ваться вне операторов for, while или repeat.

112 CASE constant out of range
(Константа case вне диапазона)

Для целочисленных операторов case константы должны лежать в
диапазоне от -32768 до 32767.

113 Error in statement
(Ошибка в операторе)

Данный идентификатор не может начинать оператор.

114 Cannot call an interrupt procedure
(Нет возможности вызвать процедуру прерывания)


B.Pascal 7 & Objects/PG - 480 -

Вы не можете непосредственно вызвать процедуру прерывания.

116 Must be in 8087 mode tp compile this
(Для компиляции необходим режим 8087)

Данная конструкция может компилироваться только в режиме
{$N+}. В состоянии {$N-} операции с действительными типами, оди-
ночной и двойной точности, расширенными и совместимыми не допус-
каются.

117 Target address not found
(Адрес назначения не найден)

Команда Search¦Find Error (Компиляция¦Поиск ошибки) в интег-
рированной интерактивной среде или параметр /F в командной строке
компилятора не позволяют обнаружить оператор, соответствующий
указанному адресу.

118 Include files are not allowed here
(В такой ситуации включаемые файлы не допускаются)

Каждый раздел операторов должен целиком размещаться в одном
файле.

119 No inherited methods are accessible here
(Наследуемые методы здесь недоступны)

Вы используете ключевое слово inherited вне метода или в ме-
тоде или объектном типе, не имеющем предка.

121 Invalid qualifier
(Неверный квалификатор)

- Вы пытаетесь индексировать переменную, которая не является
массивом.

- Вы пытаетесь указать поля в переменной, которая не являет-
ся записью.

- Вы пытаетесь разыменовать переменную, которая не является
указателем.

122 Invalid variable reference
(Недопустимая ссылка на переменную)

Предыдущая конструкция удовлетворяет синтаксису ссылки на
переменную, но она не указывает адрес памяти. Наиболее вероятно,
что вы модифицируете параметр const или вызываете функцию-указа-
тель, но забываете разыменовать результат.

123 Too many symbols
(Слишком много идентификаторов)


B.Pascal 7 & Objects/PG - 481 -

Программа или программный модуль описывает более 64К иденти-
фикаторов. Если вы компилируете программу с помощью директивы
{$D+}, то попробуйте отключить эту директиву. Учтите, однако, что
это не гарантирует отсутствие ошибок этапа выполнения в таком мо-
дуле. В противном случае вы можете попытаться поместить некоторое
описание в отдельный модуль.

124 Statement part too large
(Слишком большой раздел операторов)

Borland Pascal ограничивает размер раздела операторов до ве-
личины примерно 24К. Если вы обнаружили эту ошибку, поместите
части разделов оператора в одну или несколько процедур. В любом
случае, при наличии раздела операторов такого размера, стоит не
пожалеть времени и усилий сделать более ясной и понятной структу-
ру своей программы.

126 Files must be var parameters
(Файлы должны иметь параметры var)

Вы пытаетесь описать параметр значения файлового типа. Пара-
метры файлового типа должны быть параметрами-переменными.

127 Too many conditional symbols
(Слишком много условных идентификаторов)

Отсутствует место для определения условных идентификаторов.
Попытайтесь удалить некоторые идентификаторы или сократить неко-
торые из символьных имен.

128 Misplaced conditional directive
(Пропущена условная директива)

Компилятор обнаружил директиву {$ELSE} или {$ENDIF} без со-
ответствующих директив {$IFDEF}, {$IFNDEF} или {$IFOPT}.

129 ENDIF directive missing
(Пропущена директива ENDIF)

Исходный файл закончился внутри конструкции условной компи-
ляции. В исходном файле должно быть равное количество директив
{$IFxxx} и {$ENDIF}.

130 Error in initial conditional defines
(Ошибка в начальных условных определениях)

Исходные условные идентификаторы, указанные в меню IDE
Options¦Compiler¦Conditional Defines (Параметры¦Компилятор¦Услов-
ные определения) или в параметре /D компилятора командной строки,
являются недопустимыми. Borland Pascal требует 0 или более иден-
тификаторов, разделенных пробелами, запятыми или точками с запя-
тыми.


B.Pascal 7 & Objects/PG - 482 -

131 Header does not match previous definition
(Заголовок не соответствует предыдущему определению)

Заголовок процедуры или функции, указанный в интерфейсной
секции или описании forward, не соответствует самому заголовку
процедуры или функции.

132 Cannot evaluate this expression
(Нельзя вычислить данное выражение)

В выражении-константе или в отладочном выражении вы пытае-
тесь использовать неподдерживаемые средства, например, в описании
константы пытаетесь использовать функцию Sin или вызвать в отла-
дочном выражении определенную пользователем функцию. Описание до-
пустимого синтаксиса выражения-константы содержится в Главе 2
("Лексемы и константы") "Руководства по языку". Описание допусти-
мого синтаксиса отладочных выражений можно найти в Главе 3
("Константы") "Руководства по языку".

134 Expression incorrectly terminated
(Некорректное завершение выражения)
[Только для встроенного отладчика]

Borland Pascal ожидает в данном месте конец выражения
или операцию, но не находит ни того, ни другого.

135 Invalid format specifier
(Неверный спецификатор формата)
[Только для встроенного отладчика]

Используется неверный спецификатор формата или числовой ар-
гумент спецификатора формата выходит за допустимые границы. Спи-
сок допустимых спецификаторов формата содержится в Главе 6 "Руко-
водства пользователя" ("Отладка программ в интегрированной сре-
де").

136 Invalid indirect reference
(Недопустимая косвенная ссылка)

Оператор пытается осуществить недопустимую косвенную ссылку.
Например, вы используете абсолютную переменную (absolute), базо-
вая переменная которой в текущем модуле неизвестна, или использу-
ете подпрограмму типа inline, в которой делается ссылка на пере-
менную, не определенную в текущем модуле.

137 Structured variable are not allowed here
(Здесь не допускается использование структурной переменной)

Делается попытка выполнить над структурной переменной непод-
держиваемую операцию. Например, вы пытаетесь перемножить две за-
писи.

138 Cannot evaluate without System unit

B.Pascal 7 & Objects/PG - 483 -

(Нельзя вычислить без блока System)
[Только для встроенного отладчика]

Чтобы отладчик смог вычислить выражение, в файле .TPL должен
содержаться модуль System.

139 Cannot access this symbol
(Доступ к данному идентификатору отсутствует)
[Только для встроенного отладчика]

Как только вы скомпилируете программу, все множество ее
идентификаторов становится доступным. Однако к отдельным иденти-
фикаторам (например, к переменным) нельзя получить доступ, пока
вы не запустите программу.

140 Invalid floating-point operation
(Недопустимая операция с плавающей точкой)

При операции с двумя действительными значениями было получе-
но переполнение или деление на ноль.

141 Cannot compile overlay to memory
(Нельзя выполнить компиляцию оверлеев в память)
[Реальный режим]

Программа, использующая оверлеи, должна компилироваться на
диск.

142 Procedure or function variable expected
(Должна использоваться процедурная или функциональная пере-
менная)

Стандартная процедура Assigned требует аргумента типа пере-
менной-указателя или процедурного типа.

143 Invalid procedure or function reference
(Недопустимая ссылка на процедуру или функцию)

- Попытка вызова процедуры или функции в выражении.

- Если ее нужно присвоить переменной-процедуре, то процедура
или функция должны компилироваться в состоянии {$F+} и не
может описываться с помощью ключевых слов inline или
interrupt.

144 Cannot overlay this unit
(Этот модуль не может использоваться в качестве оверлейного)
[Реальный режим]

Попытка использовать в качестве оверлейного модуль, который
не был скомпилирован с директивой {$O+}.

146 File access denied

B.Pascal 7 & Objects/PG - 484 -

(Файл недоступен)

Файл не можете быть открыт или создан. Вероятно, компилятор
пытается записать файл, доступный только по чтению.

147 Object type expected
(Нужен объектный тип)

Идентификатор не определяет объектный тип.

149 VIRTUAL expected
(Требуется VIRTUAL)

Отсутствует ключевое слово virtual.

150 Method identifier expected
(Нужен идентификатор метода)

Идентификатор не является идентификатором метода.

Ошибки 151 - 169
-----------------------------------------------------------------
151 Virtual constructor are not allowed
(Виртуальный конструктор не допускается)

Метод конструктора должен быть статическим.

152 Constructor identifier expected
(Нужен идентификатор конструктора)

Идентификатор не является идентификатором конструктора.

153 Destructor identifier expected
(нужен идентификатор деструктора)

Идентификатор не является идентификатором деструктора.

154 Fail only allowed within constructors
(Fail допускается только внутри конструкторов)

Стандартная процедура Fail может использоваться только внут-
ри конструктора.

155 Invalid combination of opcode and operands
(Недопустимая комбинация кода операции и операндов)

Код операции ассемблера не воспринимает данное сочетание
операндов. Возможны следующие причины:

- Для данного кода операции ассемблера слишком много или
слишком мало операндов, например, INC AX,BX или MOV AX.

- Число операндов корректно, но их тип и порядок не соот-

B.Pascal 7 & Objects/PG - 485 -

ветствуют коду операции, например, DEC 1, MOV AX,CL или
MOV AX,[BX+SI].

- В операторе ассемблера содержится комментарий, например
MOV { начальное значение } AX,1.

156 Memory reference expected
(Требуется ссылка на память)

Операнд ассемблера не является ссылкой на память, которая
здесь требуется. Скорее всего, вы забыли указать в индексном опе-
раторе квадратные скобки, например, MOV AX,BX+SI вместо MOV
AX,[BX+SI].

157 Cannot add or substract relocatable symbols
(Нельзя складывать или вычитать перемещаемые идентификаторы)

Единственная операция, которую допускается выполнять с пере-
мещаемыми идентификаторами в операнде Ассемблера - это сложение с
константой или вычитание константы. Переменные, процедуры, функ-
ции и метки представляют собой перемещаемые идентификаторы. Пред-
положим, что Var - это переменная, а Const - константа. Тогда ин-
струкции MOV AX,Const+Const и MOV AX,Var+Const являются
допустимыми, а MOV AX,Var+Var - нет.

158 Invalid register combination
(Недопустимое сочетание регистров)

Допустимыми сочетаниями индексных регистров являются [BX],
[BP], [SI], [DI], [BX+SI], [BX+DI], [BP+SI] и [BP+DI]. Другое со-
четание индексных регистров, например, [AX], [BP+BX] и [SI+DX] не
допускается.

Локальные переменные (переменные, описанные в процедуре или
функции) всегда размещаются в стеке и доступны через регистр BP.
При ссылках на такие переменные ассемблер автоматически добавляет
[BP], поэтому, хотя конструкция типа Local[BX] (где Local - ло-
кальная переменная) выглядит допустимой, это не так, поскольку в
итоге операндом будет Local[BP+BX].

159 286/287 Instructions not allowed
(Инструкции процессоров 286/287 не разрешены)

Для разрешения кодов операций указанных процессоров исполь-
зуйте директиву компилятора {$G+}, но имейте в виду, что резуль-
тирующий код не сможет работать на машинах с процессорами 8086 и
8088.

160 Invalid symbol reference
(Недопустимая ссылка на идентификатор)

Данный идентификатор в операнде ассемблера недоступен. Воз-
можны следующие причины:

B.Pascal 7 & Objects/PG - 486 -


- В операнде ассемблера вы пытаетесь обратиться к стандарт-
ной процедуре, стандартной функции, или специальным масси-
вам Mem, MemW, MemL, Port, PortW.

- В операнде ассемблера вы обращаетесь к строке, значению с
плавающей точкой или константе-множеству.

- В операнде ассемблера вы пытаетесь обратиться к процедуре
или функции типа inline.

- Вне функции вы пытаетесь обратиться к специальному иденти-
фикатору @Result.

- Вы пытаетесь сгенерировать короткую инструкцию JMP, кото-
рая выполняет переход не на метку, а на что-то другое.

161 Code generation error
(Ошибка генерации кода)

Предшествующая часть оператора содержит инструкции LOOPNE,
LOOPE, LOOP или JCXZ, которые не могут достичь целевой метки.

162 ASM expected
(Нужно ключевое слова ASM)

163 Duplicate dynamic method index
(Дублируется идентификатор динамического метода)

Этот индекс динамического метода уже используется другим ме-
тодом. Возможно, вы пытаетесь переопределить динамический метод,
но неправильно набрали его имя, введя, таким образом, новый ме-
тод.

164 Duplicate resource identifier
(Дублирование идентификатора ресурса)
[Только Windows или защищенный режим]

Данный файл ресурса содержит ресурс с именем или идентифика-
тором, которые уже используются для другого ресурса.

165 Duplicete or invalid export index
(Дублирующийся или недопустимый индекс экспорта)
[Только Windows или защищенный режим]

Порядковый номер, заданный в операторе Index, не находится в
диапазоне 1..32767, или уже используется другой экспортируемой
подпрограммой.

166 Procedure or function identifier expected
(Ожидается идентификатор процедуры или функции)
[Только Windows или защищенный режим]


B.Pascal 7 & Objects/PG - 487 -

Оператор export допускает экспорт только процедур и функций.

167 Cannot export this symbol
(Этот идентификатор экспортировать нельзя)
[Только Windows или защищенный режим]

Процедура или функция не может экспортироваться, если она не
описана в операторе процедуры export.

168 Duplicate export name
(Дублирование экспортируемого имени)
[Только Windows или защищенный режим]

Имя, заданное в операторе name, уже используется для другой
экспортируемой подпрограммы.

169 Executable file header too large
(Слишком велик заголовок выполняемого файла)
[Только Windows или защищенный режим]

Генерируемый заголовок файла EXE превышает 64K (верхний пре-
дел для компоновщика). Вероятно, вы импортируете или экспортируе-
те по имени слишком много процедур или функций. Рассмотрите воз-
можность использования порядковых значений. Возможно также, что у
вас слишком много именованных ресурсов. Попробуйте также исполь-
зовать порядковые значения.



B.Pascal 7 & Objects/PG - 488 -

Ошибки этапа выполнения
-----------------------------------------------------------------

Некоторые ошибки этапа выполнения приводят к тому, что прог-
рамма выводит на экран сообщение об ошибке и завершает свою рабо-
ту:

Runtime error nnn at xxxx:yyyy
(Ошибка этапа выполнения nnn по адресу xxxx:yyyy)

где nnn - номер ошибки времени выполнения, а xxxx:yyyy - это ад-
рес ошибки этапа выполнения (сегмент и смещение). Ошибки этапа
выполнения делятся на две категории: ошибки DOS (коды ошибок с 1
до 99), ошибки ввода-вывода (с 100 по 149), критические ошибки
(со 150 по 199) и фатальные ошибки (коды ошибок с 200 до 255).

Ошибки DOS
-----------------------------------------------------------------

1 Invalid function number
(Недопустимый номер функции)

Вы обратились не несуществующей функции DOS.

2 File not found
(Не найден файл)

Ошибка генерируется процедурами Reset, Append, Rename или
Erase в случае, если имя присвоенное файловой переменной, указы-
вает несуществующий файл.

3 Path not found
(Маршрут не найден)

- Ошибка генерируется процедурами Reset, Rewrite, Append или
Erase в случае, если имя присвоенное файловой переменной,
является недействительным или указывает на несуществующий
подкаталог.

- Описывается ChDir, MkDir или RmDir в случае, если маршрут
является недействительным или указывает несуществующий
подкаталог.

4 Too many open files
(Слишком много открытых файлов)

Ошибка генерируется процедурами Reset, Rewrite или Append в
случае, если программа имеет слишком много открытых файлов. Опе-
рационная система DOS не позволяет использовать более 15 открытых
файлов для каждого процесса. Если вы получили эту ошибку при на-
личии менее 15 открытых файлов, то она может указывать на то, что
файл CONFIG.SYS не включает параметров FILES=xxx или что этот па-
раметр задает слишком мало файлов. Увеличьте число файлов до ка-

B.Pascal 7 & Objects/PG - 489 -

кого-либо подходящего значения, например, до 20.

5 File access defined
(Нет доступа к файлу)

- Данная ошибка генерируется процедурой Reset или Append в
случае, если FileMode допускает запись, а имя, присвоенное
файловой переменной, указывает каталог или файл, доступные
только для чтения.

- Данная ошибка генерируется процедурой Rewrite в случае,
если каталог заполнен, или если имя, присвоенное файловой
переменной, задает каталог или существующий файл, доступ-
ный только для чтения.

- Данная ошибка генерируется процедурой Rename в случае, ес-
ли имя, присвоенное файловой переменной, указывает каталог
или если новое имя указывает существующий файл.

- Данная ошибка генерируется процедурой Erase в случае, если
имя, присвоенное файловой переменной, указывает каталог
или файл, доступный только для чтения.

- Данная ошибка генерируется процедурой MkDir в случае, если
файл с тем же именем уже существует в порождающем катало-
ге, если нет места в порождающем каталоге, или если марш-
рут задает устройство.

- Данная ошибка генерируется процедурой RmDir в случае, если
каталог не является, пустым, если маршрут не определяет
каталог, или если маршрут задает корневой каталог.

- Данная ошибка генерируется процедурой Read или BlockRead в
случае типизированного или нетипизированного файла, если
файл не открыт для чтения.

- Данная ошибка генерируется процедурой Write или BlockWrite
для типизированного или нетипизированного файла в случае,
если этот файл не открыт для записи.

6 Invalid file handle
(Недопустимый описатель файла)

Данная ошибка генерируется в том случае, если системному вы-
зову DOS передается недопустимый описатель файла. Эта ошибка воз-
никать не должна. Если же она появляется, то это является свиде-
тельством того, что файловая переменная испорчена каким-либо об-
разом.

12 Invalid file access code
(Недействительный код доступа к файлам)

Ошибка генерируется процедурами Reset или Append в файле с

B.Pascal 7 & Objects/PG - 490 -

типом или без типа в случае, если значение FileMode является не
действительным.

15 Invalid drive number
(Недопустимый номер дисковода)

Ошибка генерируется процедурой GetDir в случае, если номер
дисковода недопустим.

16 Cannot remove current directory
(Нельзя удалить текущий каталог)

Ошибка генерируется процедурой RmDir в случае, если маршрут
указывает текущий каталог.

17 Cannot rename across drives
(Нельзя при переименовании указывать разные дисководы)

Описывается Rename в случае, если оба файла не находятся на
одном и том же диске.

18 No more files
(Нет файлов)

Сообщается через переменную DosError в модуле Dos и WinDos,
когда вызов FindFirst или FindNest не находит файлов, совпадающих
с заданными именем или набором атрибутов.

Ошибки ввода-вывода
-----------------------------------------------------------------

Если один из операторов компилировался с директивой {$I+},
то эта ошибка приводит к прекращению выполнения программы. В сос-
тоянии {$I-} программа продолжает выполняться, а ошибка генериру-
ется функцией IOResult.

100 Disk read error
(Ошибка чтения диска)

Описывается Read в типизированном файле в случае, если вы
пытаетесь осуществить считывание после конца файла.

101 Disk write error
(Ошибка записи на диск)

Ошибка генерируется процедурами Close, Write, Writeln, Flush
или Page в случае, если диск переполнен.

102 File not assigned
(Файлу не присвоено имя)

Ошибка генерируется процедурами Reset, Rewrite, Append
Rename и Erase в случае, если файловой переменной не было присво-

B.Pascal 7 & Objects/PG - 491 -

ено имя с помощью обращения к процедуре Assign.

103 File not open
(Файл не открыт)

Ошибка генерируется процедурами Close, Read, Write, Seek,
Eof, FilePos, FileSize, Flush, BlockRead или BlockWrite в случае,
сели файл не открыт.

104 File not open for input
(Файл не открыт для ввода)

Ошибка генерируется процедурами Read, Readln, Eof, Eoln,
SeekEof или SeekEoln в текстовом файле в случае, если файл не от-
крыт для ввода.

105 File not open for output
(Файл не открыт для вывода)

Ошибка генерируется процедурами Write, Writeln и Page в
текстовом файле в случае, если файл не открыт для вывода.

106 Invalid numeric format
(Неверный числовой формат)

Описывается Read или Readln в случае, если числовое значе-
ние, считанное из текстового файла, не соответствует правильному
числовому формату.



B.Pascal 7 & Objects/PG - 492 -

Критические ошибки
-----------------------------------------------------------------

Примечание: Только для реального или защищенного режи-
ма.

Более подробная информация о критических ошибках приведена в
"Руководстве программиста по операционной системе DOS".

150 Disk is write protected
(Диск защищен от записи)

151 Unknown unit
(Неизвестный модуль)

152 Drive not ready
(Дисковод находится в состоянии "не готов")

153 Unknown command
(Неопознанная команда)

154 CRC error in data
(Ошибка в данных)

155 Bad drive requiest structure length
(При запросе к диску указана неверная длина структуры)

156 Disk seek error
(Ошибка при операции установки головок на диске)

157 Unknown media type
(Неизвестный тип носителя)

158 Sector not found
(Сектор не найден)

159 Printer out of paper
(Кончилась бумага на устройстве печати)

160 Device write fault
(Ошибка при записи на устройство)

161 Device read fault
(Ошибка при чтении с устройства)

162 Hardware failure (Сбой аппаратуры)

DOS сообщает об этой ошибке в результате нарушения совмест-
ного доступа или различных сетевых ошибок.



B.Pascal 7 & Objects/PG - 493 -

Фатальные ошибки
-----------------------------------------------------------------

Эти ошибки всегда приводят к немедленной остановке програм-
мы.

200 Division by zero
(Деление на ноль)

В программе при операции /, mod или div предпринимается по-
пытка разделить число на 0.

201 Range check error
(Ошибка при проверке границ)

Ошибка генерируется процедурами операторами, скомпилирован-
ными в состоянии {$R+},при возникновении одной из следующих ситу-
аций:

- индексное выражение квалификатора массива находилось вне
допустимого диапазона;

- была осуществлена попытка присвоить переменной значение,
находящееся вне диапазона переменной;

- была осуществлена попытка передать значение, находящееся
вне допустимого диапазона, в качестве параметра процедуре
или функции.

202 Stack overflow error
(Переполнение стека)

Эта ошибка генерируется на входе в процедуру или функцию,
скомпилированные в режиме {$S+}, в случае, если нет достаточной
области для размещения локальных переменных подпрограммы. Уве-
личьте размер стека, используя директиву компилятора $M.

Данная ошибка может также вызываться циклической рекурсией
или процедурой на ассемблере, которая не поддерживает стек.

203 Heap overflow error
(Переполнение динамически распределяемой области памяти)

Эта ошибка генерируется процедурами New или GetMem, в том
случае, если нет достаточного свободного места в динамической об-
ласти памяти, чтобы выделить память для блока требуемого размера.

Полное описание программы управления динамически распределя-
емой областью памяти (администратора динамической области) содер-
жится в Главе 21 ("Использование памяти") "Руководства по языку".

204 Invalid pointer operation
(Недействительная операция ссылки)

B.Pascal 7 & Objects/PG - 494 -


Эта ошибка генерируется процедурами Dispose или FreeMem в
случае, если ссылка имеет значение nil или указывает на адрес,
лежащий за пределами динамически распределяемой области памяти,
или если список свободных блоков не может быть расширен.

205 Floating point overflow
(Переполнение при операции с плавающей точкой)

Операция с плавающей запятой привела к переполнению.

206 Floating point underflow
(Исчезновение порядка при операции с плавающей точкой)

Операция с плавающей точкой привела к исчезновению порядка.
Эта ошибка генерируется только в том случае, если вы используете
сопроцессор математических вычислений 8087 с управляющим словом,
которое демаскирует ошибки, возникающие при исчезновении порядка.
По умолчанию исчезновение порядка приводит к возвращению резуль-
тата равного нулю.

207 Invalid floating point operation
(Недопустимая операция с плавающей точкой)

- Действительное значение, передаваемое Trunc или Round, не
может быть преобразовано в целое число, находящееся внутри
диапазона типа longint (от -2147483648 до 2147483647).

- Аргумент, передаваемый функцией Sqrt (Извлечение квадрат-
ного корня), отрицательный.

- Аргумент, передаваемый функцией Ln (логарифм), равен нулю
или имеет отрицательное значение.

- Произошло переполнение стека 8087. Более подробно о прави-
лах программирования 8087 смотрите в соответствующей гла-
ве.

208 Overlay manager not installed
(Не установлена подсистема управления оверлеями)
[Только реальный режим]

Ваша программа вызывает оверлейную процедуру или функцию, а
подсистема управления оверлеями не инициализирована. Вероятнее
всего отсутствует обращение к процедуре OvrInit, или обращение к
этой процедуре завершилось с ошибкой. Нужно иметь в виду, что ес-
ли в каком-либо из оверлейных модулей у вас содержится код иници-
ализации, то вы должны создать дополнительный неоверлейный мо-
дуль, вызывающий процедуру OvrInit, и использовать этот модуль
перед любым из оверлейных модулей.

209 Overlay file read error
(Ошибка чтения оверлейного файла)

B.Pascal 7 & Objects/PG - 495 -

[Только реальный режим]

Когда подсистема управления оверлеями пыталась считать овер-
лей из оверлейного файла, произошла ошибка чтения.

210 Object not initialized
(Объект не инициализирован)

При включенной проверке диапазона вы обращаетесь к виртуаль-
ному методу объекта до того, как объект инициализируется с по-
мощью вызова конструктора.

211 Call to abstract method
(Вызов абстрактного метода)

Данная ошибка генерируется процедурой Abstract модуля
Objects и указывает, что ваша программа пытается выполнить абс-
трактный виртуальный метод. Когда объектный тип содержит один или
более абстрактных методов, он называется абстрактным объектным
типом. Инициализация объектов абстрактного типа считается ошибкой
- абстрактные объектные типы существуют только для того, чтобы вы
могли из них наследовать и переопределять абстрактные методы.

Например, метод Compare типа TSortedCollection в модуле
Objects является абстрактным и показывает, что для реализации от-
сортированного набора вы должны создать объектный тип, наследую-
щий из TSortedCollection и переопределяющий метод Compare.

212 Stream registration error
(Ошибка регистрации потока)

Данная ошибка генерируется процедурой RegisterType в модуле
Objects и указывает, что произошла одна из следующих ошибок:

- Запись регистрации потока не находится в текущем сегменте
данных.

- Поле ObType записи регистрации потока является нулевым.

- Тип уже зарегистрирован.

- Уже зарегистрирован другой тип с тем же значением ObValue.

213 Collection index out of range
(Индекс набора вне диапазона)

Индекс, передаваемый методу TCollection, выходит за границы
диапазона.

214 Collection overflow error
(Ошибка переполнения набора)

Данная ошибка выводится TCollection при попытке добавить

B.Pascal 7 & Objects/PG - 496 -

элемент, когда набор уже расширить нельзя.

215 Arithmetic overflow error
(Арифметическое переполнение)

Эту ошибку дают операторы, скомпилированные в состоянии
{$G+}, когда арифметическая операция приводит к переполнению,
например, когда результат операции лежит вне допустимого диапазо-
на.

216 General Protection fault
(Общее нарушение защиты)
[Только защищенный режим]

Эта ошибка является результатом того, что вы пытаетесь полу-
чить доступ к памяти, к которой ваша программа обращаться не мо-
жет. Операционная система останавливает вашу прикладную программу
и сообщает вам об общем нарушении защиты (GP), но это не приводит
к сбою системы. Ситуацию GP вызывают следующие причины:

- загрузка в сегментные регистры значений-констант;

- выполнение арифметических операций с сегментными регистра-
ми или селекторами;

- использование сегментных регистров для временной записи в
сегменты кода;

- доступ к памяти вне локального адресного пространства, за-
данного в прикладной программе;

- разыменование указателей nil.

Подробное описание вы можете найти в Главе 17 ("Программиро-
вание в защищенном режиме DOS") в "Руководстве по языку".



B.Pascal 7 & Objects/PG - 497 -

Ошибки DPMI
-----------------------------------------------------------------

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

Примечания: Подробное описание средств DPMI вы можете
найти в Главе 17 ("Программирование в защищенном режиме
DOS") в "Руководстве по языку".

Ошибки DPMIINST
-----------------------------------------------------------------

A20 line already enabled, so test is meaningless
(Строка A20 уже разрешена, проверка не имеет смысла)

DPMIINST генерирует это сообщение, когда вы выполняет ее для
нахождения и дополнения информации о вашей машине в базу данных
ядра. Если вы обнаруживаете ряд таких сообщений, возможно это оз-
начает, что HIMEM.SYS загружен. Удалите HIMEM.SYS и загрузитесь с
обычными файлами CONFIG.SYS и AUTOEXEC.BAT. Затем снова запустите
DPMIINST перед перезагрузкой HIMEM.SYS. См. сообщение Machine not
in database.

Ошибки фиктивного модуля
-----------------------------------------------------------------

Фиктивный модуль, программа реального режима, встроенная в
вашу программу защищенного режима, отвечает за загрузку DPMI-сер-
вера и администратора этапа выполнения (если они отсутствуют).
Сообщения об ошибках фиктивного модуля имеют следующий текстовый
формат:

Stub error (xxxx) : xxxx

где Stub error указывает на ошибку, генерируемую фиктивным моду-
лем, (xxxx) - это сообщение об ошибке, а xxxx - текст сообщения.

Stub error (0001): needs at least 286
(Ошибка фиктивного модуля: требуется процессор, не младше
286)

Эта ошибка возникает, если вы пытаетесь выполнить программу
.EXE защищенного режима в системе с процессором, младше 286.

Stub error (2002): can't find rtm.exe
(Ошибка фиктивного модуля: не найден файл rtm.exe)

Файл администратора этапа выполнения rtm.exe должен нахо-
диться по маршруту или в текущем каталоге.

B.Pascal 7 & Objects/PG - 498 -


Stub error (2003): can't find DPMI16BI.OVL
(Ошибка фиктивного модуля: на найден DPMI16BI.OVL)

Файл DPMI16BI.OVL должен находиться по маршруту или в теку-
щем каталоге.

Stub error (0012): file not found
(Ошибка фиктивного модуля: файл не найден)

Эта ошибка возникает, если фиктивный модуль не может найти
файл вашей прикладной программы. Убедитесь, что вы задали кор-
ректное имя и маршрут.

Stub error (0013): path not found
(Ошибка фиктивного модуля: маршрут не найден)

Stub error (0015): file access denied)
(Ошибка фиктивного модуля: файл недоступен)

Stub error (0018): not enough memory to load file
(Ошибка фиктивного модуля: для загрузки файла не хватает
памяти)

Stub error (001A): invalid enviroment
(Ошибка фиктивного модуля: недопустимая операционная среда)

Эта ошибка возникает, если запорчена спецификация среды DOS
вашей системы.

Stub error (001B): invalid file
(Ошибка фиктивного модуля: недопустимый файл)

Error: no DOS extrensions in DPMI server
(Ошибка: в DPMI-сервере нет расширений DOS)

Возможно, используемый вами DPMI-сервер не поддерживает от-
раслевых стандартов. Попробуйте использовать DPMI-сервер Borland
или Windows.

Error: needs DOS 3.x or higher
(Ошибка: требуется DOS версии 3.x или старше)

Failed to locate DPMI-server (DPMI16BI.OVL)
(Не удается найти DPMI-сервер)

Убедитесь, что файл DPMI16BI.OVL находится по указанному ва-
ми маршруту (как и прикладная программа защищенного режима).



B.Pascal 7 & Objects/PG - 499 -

Ошибки администратора этапа выполнения
-----------------------------------------------------------------

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

Loader error (xxxx): xxxx
(Ошибка загрузчика (xxxx): xxxx)

где Loader error представляет ошибку, генерируемую загрузчиком
фиктивного модуля, (xxxx) - номер ошибки, а xxxx - текст сообще-
ния.

Большинство сообщений администратора этапа выполнения вызы-
ваются нехваткой памяти. В большинстве случаев вы можете устра-
нить приводящую к ошибке ситуацию.

Если вы работаете в диалоговом окне DOS Windows, и ваш файл
информации о прикладной программе (PIF) находится слишком "низко"
в памяти и не может запускаться администратором этапа выполнения.
Измените установку файла PIF, чтобы для загрузки администратора
этапа выполнения было достаточно памяти.

Если вы работаете под DOS и

* переменная операционной среды DPIMEME у вас установлена в
MAXMEM, попробуйте увеличить значение MAXMEM;

* если у вас есть псевдодиск или установлен кэш диска, поп-
робуйте уменьшить их размер.

Loader error (0001): out of memory
(Ошибка загрузчика: нет памяти)

Loader error (0002): out of selectors
(Ошибка загрузчика: нет селекторов)

Не хватает селекторов. Если вы используете 386^MAX (версии
6.00 или старше), попробуйте добавить в 386.pro/bluemax.pro клю-
чевое слово DPMIMEM=1200.

Loader error (0003): out of internal tables
(Ошибка загрузчика: не хватает внутренних таблиц)

Загрузчик превысил предельное значение внутренних таблиц.

Loader error (0020): invalid dynamic link
(Ошибка загрузчика: недопустимая динамическая компоновка)

Недопустимая ссылка импорта из DLL. Эта ошибка происходит,

B.Pascal 7 & Objects/PG - 500 -

если вы:

* ссылаетесь на несуществующую функцию DLL;

* используете функции ядра или пользовательские функции, ко-
торые Borland Pascal не эмулирует в модуле Winapi.

Loader error (0022): could't open file
(Ошибка загрузчика: невозможно открыть файл)

Файл или импортируемая файлом DLL не найдены или не могут
быть открыты. Убедитесь, что DLL находится по указанному маршруту
или попробуйте увеличить число доступных описателей файлов в
CONFIG.SYS (FILE=30).

Loader error (0023): invalid exe format
(Ошибка загрузчика: недопустимый формат файла .exe)

Файл или импортируемая файлом DLL не найдены или имеют недо-
пустимый формат NEWEXE.

Loader error (0024): wrong version
(Ошибка загрузчика: неверная версия)

Убедитесь, что файла DPMI16.OVL находится по корректному
маршруту и является первым файлом, доступным для загрузки. Убеди-
тесь, что вы используете корректный загрузчик, а не тот, который
предназначен для другой прикладной программы, например, Paradox.

Loader error (0025): cannot initialize
(Ошибка загрузчика: невозможно инициализировать)

Loader error (0026): DLL initialization error
(Ошибка загрузчика: ошибка инициализации DLL)

Неудачно завершилась (то есть возвратила ненулевой код ошиб-
ки) одна из подпрограмм инициализации DLL. Убедитесь, что DLL за-
писана корректно и не требует больше памяти, чем у вас доступно в
данный момент.

Error: error in the enviroment string
(Ошибка: ошибка в строке операционной среды)

Некорректные параметры в строке операционной среды "RTM".

Runtime error: invalid entry point called
(Ошибка этапа выполнения: вызов недопустимой точки входа)

Прикладная программа ссылается на несуществующее имя или по-
рядковый номер одного из модулей. Обычно это вызывается некор-
ректной ссылка на .DLL.

Application load & execute error 0001

B.Pascal 7 & Objects/PG - 501 -

Application load & execute error FFE0
(Ошибка загрузки и выполнения прикладной программы)

Для загрузки прикладной программы защищенного режима не хва-
тает дополнительной памяти.



B.Pascal 7 & Objects/PG - 502 -

Ошибки DPMI-сервера
-----------------------------------------------------------------

Сообщения об ошибках DPMI-сервера генерируются только
DPMI-сервером Borland и выводятся на экран в формате:

DPMI error (xxxx): xxxx

где DPMI error представляет ошибку, генерируемую DPMI-сервером,
(xxxx) - номер сообщения, а xxxx - текст сообщения.

DPMI error (4001): insufficient memory for initialization
(Ошибка DPMI: не хватает памяти для инициализации)

Не хватает памяти для запуска сервера.

DPMI error (4002): memory manager does not support DPMI of
VCPI
(Ошибка DPMI: администратор памяти не поддерживает DPMI или
VCPI)

Не обнаружены DPMI или VCPI. Возможно, ваша система исполь-
зует старую или недопустимую версию администратора памяти.

DPMI error (4004): unrecognized hardware, run DPMIINST
(Ошибка DPMI: нераспознанная аппаратура, запустите DPMIINST)

DPMI-сервер не распознает используемую вами аппаратуру. Это
сообщение может появиться, если вы работаете на машинах с процес-
сором младше 286.

DPMI error (4005): unrecognized enviroment parameters
(Ошибка DPMI: нераспознанные параметры операционной среды)

Параметры переменной операционной среды DPMIMEM некорректны.

DPMI error (4007): bad A20 off parameter
(Ошибка DPMI: неверный параметр A20)

DPMI-сервер не может корректно работать с параметром A20.
Убедитесь, что администратор памяти, такой как HIMEM.SYS, уста-
новлен корректно.

DPMI error (4008): bad A20 on parameter
(Ошибка DPMI: неверный параметр A20)

См. выше.

DPMI error (4009): bad switch parameter
(Ошибка DPMI: неверный параметр-переключатель)

Это сообщение об ошибке может указывать на неверную работу
драйвера XMM DOS, HIMEM.SYS или QEMM.

B.Pascal 7 & Objects/PG - 503 -


DPMI error (4009): insufficient extended memory
(Ошибка DPMI: не хватает расширенной памяти)

Для работы сервера недостаточно расширенной памяти. Если у
вас установлен псевдодиск или программа кэширования диска, попро-
буйте уменьшить их размеры.

DPMI error (400C): cannot create linear address space
(Ошибка DPMI: невозможно создать линейное адресное прост-
ранство)

DPMI error (400D): cannot create system linear space
(Ошибка DPMI: невозможно создать системное линейное прост-
ранство)

DPMI error (400E): cannot copy kernel to high memory
(Ошибка DPMI: невозможно скопировать ядро в старшие адреса
памяти)

DPMI error (400F): undefined error
(Ошибка DPMI: неопределенная ошибка)

DPMI error (4010): unable to copy DOSX
(Ошибка DPMI: невозможно скопировать DOSX)

DPMI error (4011): unable to copy IDT
(Ошибка DPMI: невозможно скопировать IDT)

DPMI error (4012): unable to create int chain table
(Ошибка DPMI: невозможно создать таблицу цепочек прерываний)

DPMI error (4013): unable to create PM stack
(Ошибка DPMI: невозможно создать стек защищенного режима)

DPMI error (4014): unable to initialize swapping
(Ошибка DPMI: невозможно инициализировать свопинг)

Сообщения DMPI с 400C по 4014 вы получать не должны. Если
это происходит, то возможно вы запускаете прикладную программу с
недостаточным объемом памяти. Чтобы устранить ошибку, увеличьте
объем доступно расширенной памяти, например, если вы используете
программу кэширования диска, то попробуйте уменьшить выделяемые
буферы.

Bad eiviroment params
(Неверные параметры операционной среды)

Используя корректный синтаксис, заново задайте значение пе-
ременной операционной среды DPMIMEM.

B.Pascal 7 & Objects/PG - 504 -


Machine not in database (run DPMIINST)
(Машины нет в базе данных, выполните DPMIINST)

DPMI-сервер выполняет поиск в базе данных ядра и не может
найти информации о вашей машине. Выполните программу DPMIINST
(при необходимости несколько раз), чтобы обновить эту базу дан-
ных. DPMIINST генерирует также файл .DB, который вы можете пос-
лать Borland. См. сообщение: A20 line already enabled, so test is
meaningless.

Not enough memory for PM init
(Не хватает памяти для инициализации защищенного режима)

Чтобы DPMI-сервер мог инициализировать защищенный режим, не
хватает памяти.

V86 task without vcpi
(Задача V86 без VCPI)

Выполняется другая задача, что не позволяет DPMI-серверу пе-
реключиться в защищенный режим. Удалите мешающую прикладную прог-
рамму, например администратор рабочей области или отладчик, затем
перезагрузитесь.



B.Pascal 7 & Objects/PG - 505 -

--------------------------------------------------------------------
Приложение A. Использование редактора
-----------------------------------------------------------------

В этом приложении вы найдете информацию по всем используемым
в Borland Pascal командам редактирования. В IDE для Windows вы
можете работать с двумя наборами команд - CUA (команды общего ин-
терфейса с пользователем) и альтернативным. В IDE для DOS досту-
пен только альтернативный набор команд. В Таблице A.1 имеются
сноски, указывающие команды, которые более подробно описаны в
Таблицах A.2, A.3 и A.4.

Команды редактирования Таблица A.1
--------------------------------T---------T----------T----------¬
¦ Команда ¦ Оба реж.¦ CUA ¦ Альтерн. ¦
+-------------------------------+---------+----------+----------+
¦ Команды перемещения курсора ¦
+-------------------------------T---------T----------T----------+
¦ ¦ ¦ ¦ ¦
¦Символ влево ¦ <- ¦ ¦ Ctrl+S ¦
¦ ¦ ¦ ¦ ¦
¦Символ вправо ¦ -> ¦ ¦ Ctrl+D ¦
¦ ¦ ¦ ¦ ¦
¦Слово влево ¦ Ctrl <- ¦ ¦ Ctrl+A ¦
¦ ¦ ¦ ¦ ¦
¦Слово вправо ¦ Ctrl -> ¦ ¦ Ctrl+F ¦
¦ ¦ ¦ ¦ ¦
¦Строка вверх ¦ ¦ ¦ Ctrl+E ¦
¦ ¦ ¦ ¦ ¦
¦Строка вниз ¦ ¦ ¦ Ctrl+X ¦
¦ ¦ ¦ ¦ ¦
¦Прокрутка вверх на одну строку ¦ Ctrl-W ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Прокрутка вниз на одну строку ¦ Ctrl-Z ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Страница вверх ¦ PgUр ¦ ¦ Ctrl+R ¦
¦ ¦ ¦ ¦ ¦
¦Страница вниз ¦ PgDn ¦ ¦ Ctrl+C ¦
¦ ¦ ¦ ¦ ¦
¦К началу строки ¦ Home ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦ ¦ Ctrl+Q S¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦К концу строки ¦ End ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦ ¦ Ctrl+Q D¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦К верхнему краю окна ¦ Ctrl+Q E¦ Ctrl+E ¦ Ctrl+Home¦
¦ ¦ ¦ ¦ ¦
¦К нижнему краю окна ¦ Ctrl+Q X¦ Ctrl+X ¦ Ctrl+End ¦
¦ ¦ ¦ ¦ ¦
¦К началу файла ¦ Ctrl+Q R¦ Ctrl+Home¦ Ctrl+PgUp¦
¦ ¦ ¦ ¦ ¦
¦К концу файла ¦ Ctrl+Q C¦ Ctrl+End ¦ Ctrl+PgDn¦

B.Pascal 7 & Objects/PG - 506 -

¦ ¦ ¦ ¦ ¦
¦К последней позиции курсора ¦ Ctrl+P ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
+-------------------------------+---------+----------+----------+
¦ Команды вставки и удаления ¦
+--------------------------------T----------T---------T---------+
¦Удалить символ по месту курсора ¦ Del ¦ ¦ Ctrl+G ¦
¦ ¦ ¦ ¦ ¦
¦Удалить символ слева от курсора ¦ Backsрace¦ ¦ Ctrl+H ¦
¦ ¦ ¦ ¦ ¦
¦ ¦ Shift+Tab¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Удалить строку ¦ Ctrl+Y ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Удалить символы до конца строки ¦ Ctrl+Q Y ¦ Shift+ ¦ ¦
¦ ¦ ¦ Ctrl+Y ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Удалить слово справа от курсора ¦ Ctrl+T ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Вставить строку ¦ Ctrl+N ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Вкл./выкл. режим вставки ¦ Ins ¦ ¦ Ctrl+V ¦
¦ ¦ ¦ ¦ ¦
+--------------------------------+----------+---------+---------+
¦ Команды работы с блоками ¦
+---------------------------------T----------T------------------+
¦К началу блока ¦ Ctrl+Q B ¦ ¦
¦ ¦ ¦ ¦
¦К концу блока ¦ Ctrl+Q K ¦ ¦
¦ ¦ ¦ ¦
¦Начало отметки блока * ¦ Ctrl+K B ¦ ¦
¦ ¦ ¦ ¦
¦Конец отметки блока * ¦ Ctrl+K K ¦ ¦
¦ ¦ ¦ ¦
¦Выход в меню ¦ Ctrl+K D ¦ ¦
¦ ¦ ¦ ¦
¦Спрятать/показать блок * ¦ Ctrl+K H ¦ ¦
¦ ¦ ¦ ¦
¦Отметить строку ¦ Ctrl+K L ¦ ¦
¦ ¦ ¦ ¦
¦Отпечатать блок ¦ Ctrl+K P ¦ ¦
¦ ¦ ¦ ¦
¦Пометить одно слово ¦ Ctrl+K T ¦ ¦
¦ ¦ ¦ ¦
¦Удалить блок ¦ Ctrl+K Y ¦ ¦
¦ ¦ ¦ ¦
¦Скопировать блок * ¦ Ctrl+K C ¦ ¦
¦ ¦ ¦ ¦
¦Переместить блок * ¦ Ctrl+K V ¦ ¦
¦ ¦ ¦ ¦
¦Скопировать блок в буфер + ¦ Ctrl+Ins ¦ ¦
¦ ¦ ¦ ¦
¦Скопировать блок в буфер с ¦ Shift+Del¦ ¦

B.Pascal 7 & Objects/PG - 507 -

¦удалением из текста + ¦ ¦ ¦
¦ ¦ ¦ ¦
¦Удалить блок ¦ Ctrl+Del ¦ ¦
¦ ¦ ¦ ¦
¦Задать структурный отступ блока ¦ Ctrl+K I ¦ Shift+Ctrl+I ¦
¦ ¦ ¦ ¦
¦Скопировать из буфера + ¦ Shift+Ins¦ ¦
¦ ¦ ¦ ¦
¦Считать блок с диска + ¦ Ctrl+K R ¦ Shift+Ctrl+R ¦
¦ ¦ ¦ ¦
¦Отменить структурный отступ ¦ Ctrl+K U ¦ Shift+Ctrl+U ¦
¦блока ¦ ¦ ¦
¦ ¦ ¦ ¦
¦Записать блок на диск + ¦ Ctrl+K W ¦ Shift+Ctrl+W ¦
¦ ¦ ¦ ¦
+---------------------------------+----------+------------------+
¦ Дополнительные команды работы с блоками ¦
+----------------------T-----------------T---------T------------+
¦Символ влево ¦ Shift+ <- ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Символ вправо ¦ Shift+ -> ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦К концу строки ¦ Shift+End ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦К началу строки ¦ Shift+Home ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Строка вниз ¦ Shift+"стр.вниз"¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Строка вверх ¦ Shift+"стр.верх"¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Страница вниз ¦ Shift+PgDn ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Страница вверх ¦ Shift+PgUр ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Слово влево ¦ Shift+Ctrl+<- ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Слово вправо ¦ Shift+Ctrl+-> ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦К концу файла ¦ Shift+Ctrl+End ¦ ¦ Shift+Ctrl+¦
¦ ¦ ¦ ¦ PgDn ¦
¦ ¦ ¦ ¦ ¦
¦К началу файла ¦ Shift+Ctrl+Home ¦ ¦ Shift+Ctrl+¦
¦ ¦ ¦ ¦ PgUp ¦
+----------------------+-----------------+---------+------------+
¦ Другие команды редактирования ¦
+----------------------------------T-----------T--------T-------+
¦Задать/отменить режим автома- ¦ Ctrl+O I ¦ ¦ ¦
¦тического отступа v ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Включить/выключить режим пере- ¦ Ctrl+O R ¦ ¦ ¦
¦мещения курсора по позициям ¦ ¦ ¦ ¦
¦табуляции v ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦

B.Pascal 7 & Objects/PG - 508 -

¦Выйти из интегрированной среды ¦ ¦ Alt+F4 ¦ Alt+X ¦
¦ ¦ ¦ ¦ ¦
¦Найти позицию маркера (отметки ¦ Ctrl+Q ¦ ¦ ¦
¦текста) v ¦ (*) ¦ ¦ ¦
¦ ¦ ¦ Ctrl+N ¦ ¦
¦ ¦ ¦ (*) ¦ ¦
¦Подсказка ¦ F1 ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Индекс подсказки ¦ Shift+F1 ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Вставить управляющий символ ¦ Ctrl+P (*)¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Распахнуть окно ¦ ¦ ¦ F5 ¦
¦ ¦ ¦ ¦ ¦
¦Открыть файл v ¦ ¦ ¦ F3 ¦
¦ ¦ ¦ ¦ ¦
¦Задать/отменить режим опти- ¦ Ctrl+O F ¦ ¦ ¦
¦мального заполнения v ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Найти парный символ ¦ Ctrl+Q [ ¦ Alt+[, ¦ ¦
¦ ¦ ¦ ¦ ¦
¦ ¦ Ctrl+Q ] ¦ Alt+] ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Сохранить файл v ¦ Ctrl+K S ¦ ¦ F2 ¦
¦ ¦ ¦ ¦ ¦
¦Поиск ¦ Ctrl+Q F ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Повторить последний поиск ¦ ¦ F3 ¦ Ctrl+L¦
¦ ¦ ¦ ¦ ¦
¦Поиск с заменой ¦ Ctrl+Q A ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Установить маркер ¦ Ctrl+K ¦ Shift+ ¦ ¦
¦ ¦ (*) ¦Ctrl ¦ ¦
¦ ¦ ¦ (*) ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Вкл/Выкл режим использ. табуляции ¦ Ctrl+O T ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Контекстная подсказка ¦ Ctrl+F1 ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Отменить изменения (Undo) ¦ Alt+ ¦ ¦ ¦
¦ ¦ Backspace¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Отменить отмену (повтор - Redo) ¦ Alt+Shift+¦ ¦ ¦
¦ ¦ Backspace¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
¦Вкл/Выкл режим структурных от- ¦ Ctrl+O U ¦ ¦ ¦
¦cтупов ¦ ¦ ¦ ¦
¦ ¦ ¦ ¦ ¦
+----------------------------------+-----------+--------+-------+
¦ (*) представляет число в диапазоне от 0 до 9. ¦
¦ ¦
¦ Управляющие символы вводятся путем первоначального нажатия¦
¦ комбинации клавиш Ctrl+P с последующим нажатием нужного уп-¦

B.Pascal 7 & Objects/PG - 509 -

¦ равляющего символа. ¦
¦ ¦
¦ + См. Таблицу A.2. ¦
¦ ¦
¦ * См. Таблицу A.3. ¦
¦ ¦
¦ v См. Таблицу A.4. ¦
L----------------------------------------------------------------



B.Pascal 7 & Objects/PG - 510 -

Подробное описание команд работы с блоками Таблица A.2
------------T----------T----------T-----------------------------¬
¦Команда ¦ CUA ¦Альтернат.¦ Функция ¦
+-----------+----------+----------+-----------------------------+
¦Скопировать¦Ctrl+Ins ¦Ctrl+Ins ¦Копирует отмеченный ранее¦
¦блок ¦Shift+Ins ¦Shift+Ins ¦блок в текстовый буфер и¦
¦ ¦ ¦ ¦вклеивает его в текущую пози-¦
¦ ¦ ¦ ¦цию курсора. Первоначальный¦
¦ ¦ ¦ ¦блок остается неизменным. Ес-¦
¦ ¦ ¦ ¦ли выделенного блока нет,¦
¦ ¦ ¦ ¦то ничего не происходит. ¦
+-----------+----------+----------+-----------------------------+
¦Скопировать¦Ctrl+Ins ¦ Ctrl+Ins ¦Копирует выделенный текст в¦
¦ ¦ ¦ ¦текстовый буфер. ¦
+-----------+----------+----------+-----------------------------+
¦Вырезать ¦Shift+Del ¦Shift+Del ¦Вырезает выделенный текст в¦
¦ ¦ ¦ ¦текстовый буфер. ¦
+-----------+----------+----------+-----------------------------+
¦Удалить ¦Ctrl+Del ¦ Ctrl+Del ¦Удаляет помеченный ранее¦
¦ ¦ ¦ ¦блок. Можно восстановить¦
¦ ¦ ¦ ¦изменение с помощью команды¦
¦ ¦ ¦ ¦UNDO. ¦
+-----------+----------+----------+-----------------------------+
¦Переместить¦Shift+Del ¦ Shift+Del¦Перемещает помеченный ранее¦
¦блок ¦Shift+Ins ¦ Shift+Ins¦блок из занимаемой им ранее¦
¦ ¦ ¦ ¦позиции в текстовый буфер и¦
¦ ¦ ¦ ¦вклеивает его в текущую пози-¦
¦ ¦ ¦ ¦цию курсора. Этот блок исче-¦
¦ ¦ ¦ ¦зает из исходной позиции; Ес-¦
¦ ¦ ¦ ¦ли маркированного блока нет,¦
¦ ¦ ¦ ¦то ничего не происходит. ¦
+-----------+----------+----------+-----------------------------+
¦Скопировать¦Shift+Ins ¦ Shift+Ins¦Перемещает блок из текстового¦
¦блок из ¦ ¦ ¦буфера в текущую позицию кур-¦
¦текстового ¦ ¦ ¦сора. ¦
¦буфера ¦ ¦ ¦ ¦
+-----------+----------+----------+-----------------------------+
¦Считать ¦Shift+ ¦ Ctrl+K R ¦Считывает файл на диске в те-¦
¦блок с ¦Ctrl+R ¦ ¦кущий текст в позицию курсо-¦
¦диска ¦ ¦ ¦ра в точности так же, как ес-¦
¦ ¦Ctrl+K R ¦ ¦ли бы это был блок. Считанный¦
¦ ¦ ¦ ¦текст маркируется как блок.¦
¦ ¦ ¦ ¦Когда выполняется эта коман-¦
¦ ¦ ¦ ¦да, выдается запрос на имя¦
¦ ¦ ¦ ¦файла, который должен быть¦
¦ ¦ ¦ ¦считан. Для выбора считывае-¦
¦ ¦ ¦ ¦мого файла можно воспользо-¦
¦ ¦ ¦ ¦ваться метасимволами; в ре-¦
¦ ¦ ¦ ¦зультате будет отображен ка-¦
¦ ¦ ¦ ¦талог. Заданным файлом может¦
¦ ¦ ¦ ¦быть любое допустимое имя¦
¦ ¦ ¦ ¦файла. ¦
+-----------+----------+----------+-----------------------------+

B.Pascal 7 & Objects/PG - 511 -

¦Записать ¦Shift+ ¦ Ctrl+K W ¦Записывает маркированный ра-¦
¦блок на ¦Ctrl+W ¦ ¦нее блок в файл. Когда вы вы-¦
¦диск ¦ ¦ ¦полняете эту команду, вам¦
¦ ¦Ctrl+K W ¦ ¦выдается запрос на имя файла,¦
¦ ¦ ¦ ¦в который должна быть произ-¦
¦ ¦ ¦ ¦ведена запись. Этому файлу¦
¦ ¦ ¦ ¦необходимо задать любое до-¦
¦ ¦ ¦ ¦пустимое имя (стандартное¦
¦ ¦ ¦ ¦расширение имени .CPP). Если¦
¦ ¦ ¦ ¦вы предпочитаете пользоваться¦
¦ ¦ ¦ ¦именем файла без расширения,¦
¦ ¦ ¦ ¦то добавьте к концу имени¦
¦ ¦ ¦ ¦точку. ¦
L-----------+----------+----------+------------------------------

Если вы пользовались редакторами фирмы Borland ранее, то
можно воспользоваться командами работы с блоками, приведенными в
следующей таблице; эти команды работают в обоих наборах команд.

Имеются три команды перемещения курсора, которые нуждаются в
дополнительных пояснениях:



B.Pascal 7 & Objects/PG - 512 -

Описание команд работы с блоками фирмы Borland Таблица A.3

------------------------T----------T----------------------------¬
¦ Команда ¦ Клавиши ¦ Функция ¦
+-----------------------+----------+----------------------------+
¦Установить начало блока¦ Ctrl+K B ¦ Начало выбора текста. ¦
+-----------------------+----------+----------------------------+
¦Установить конец блока ¦ Ctrl+K K ¦ Конец выбора текста. ¦
+-----------------------+----------+----------------------------+
¦Спрятать/Показать ¦ Ctrl+K H ¦ Показывает или прячет выде-¦
¦выбранный текст ¦ ¦ ленный текст. ¦
+-----------------------+----------+----------------------------+
¦Копировать выделенный ¦ Ctrl+K C ¦ Копирует выделенный текст в¦
¦текст в позицию курсора¦ ¦ позицию курсора. Полезно¦
¦ ¦ ¦ только при включенном¦
¦ ¦ ¦ Persistent Blocks. ¦
+-----------------------+----------+----------------------------+
¦Переместить выделенный ¦ Ctrl+K C ¦ Перемещает выделенный текст¦
¦текст в позицию курсора¦ ¦ в позицию курсора. Полезно¦
¦ ¦ ¦ только при включенном¦
¦ ¦ ¦ параметре Persistent Blocks¦
L-----------------------+----------+-----------------------------

Примечание: Выделенный текст показывается цветовым ат-
рибутом только в том случае, если отмечены и начало и конец
блока, и начало отмечено раньше конца.

Другие команды редактирования
-----------------------------------------------------------------

Представленная ниже таблица более подробно описывает некото-
рые команды редактирования.

Подробное описание других команд редактирования Таблица A.4
------------T----------T----------T-----------------------------¬
¦ Команда ¦ CUA ¦Альтернат.¦ Функция ¦
+-----------+----------+----------+-----------------------------+
¦Задать/от- ¦Ctrl+O I ¦ Ctrl+O I ¦Обеспечивает автоматическое¦
¦менить ре- ¦ ¦ ¦структуирование последова-¦
¦жим автома-¦ ¦ ¦тельно вводимых строк. Экви-¦
¦тического ¦ ¦ ¦валентную данной операцию¦
¦отступа. ¦ ¦ ¦можно выполнить с помощью ко-¦
¦ ¦ ¦ ¦манды меню Options¦¦
¦ ¦ ¦ ¦Environment¦Editor¦Autoindent¦
+-----------+----------+----------+-----------------------------+
¦Перемещение¦Ctrl+O R ¦ Ctrl+O R ¦При включенном положении это-¦
¦курсора ¦ ¦ ¦го параметра при нажатии кла-¦
¦между ¦ ¦ ¦виш управления курсором кур-¦
¦позициями ¦ ¦ ¦сор будет перемещаться¦
¦табуляции. ¦ ¦ ¦посередине между позициями¦
¦ ¦ ¦ ¦табуляции; в противном случае¦
¦ ¦ ¦ ¦при перемещении через нес-¦
¦ ¦ ¦ ¦колько символов табуляции он¦

B.Pascal 7 & Objects/PG - 513 -

¦ ¦ ¦ ¦перепрыгивает через несколько¦
¦ ¦ ¦ ¦столбцов. Нажатие Ctrl+O R¦
¦ ¦ ¦ ¦осуществляет триггерное пе-¦
¦ ¦ ¦ ¦реключение режима. ¦
+-----------+----------+----------+-----------------------------+
¦Найти ¦Ctrl ¦ Ctrl+Q¦Позволяет производить поиск¦
¦отмеченную ¦ ¦ (*) ¦до десяти отмеченных позиций¦
¦позицию. ¦Ctrl+Q ¦ ¦в тексте ( может быть лю-¦
¦ ¦ ¦ ¦бым числом в диапазоне от 0¦
¦ ¦ ¦ ¦до 9). Курсор может быть пе-¦
¦ ¦ ¦ ¦ремещен к любому установлен-¦
¦ ¦ ¦ ¦ному ранее положению путем¦
¦ ¦ ¦ ¦нажатия комбинации клавиш¦
¦ ¦ ¦ ¦Ctrl+Q, после которой нажима-¦
¦ ¦ ¦ ¦ется клавиша номера позиции. ¦
+-----------+----------+----------+-----------------------------+
¦Открыть ¦ ¦ F3 ¦Позволяет вам загрузить в ок-¦
¦файл. ¦ ¦ ¦но редактирования существую-¦
¦ ¦ ¦ ¦щий файл. ¦
+-----------+----------+----------+-----------------------------+
¦Оптимальное¦Ctrl+O F ¦ Ctrl+O F ¦Включает и выключает режим¦
¦заполнение.¦ ¦ ¦оптимального заполнения. При¦
¦ ¦ ¦ ¦использовании этого режима¦
¦ ¦ ¦ ¦каждая строка начинается с¦
¦ ¦ ¦ ¦минимального количества сим-¦
¦ ¦ ¦ ¦волов за счет сочетания¦
¦ ¦ ¦ ¦использования символов пробе-¦
¦ ¦ ¦ ¦ла и табуляции. Позволяет¦
¦ ¦ ¦ ¦создавать строки, состоящие¦
¦ ¦ ¦ ¦из меньшего количества симво-¦
¦ ¦ ¦ ¦лов. ¦
+-----------+----------+----------+-----------------------------+
¦Сохранить ¦ ¦ F2 ¦Сохраняет файл и возвращается¦
¦файл. ¦ ¦ ¦в редактор. ¦
+-----------+----------+----------+-----------------------------+
¦Задать ¦Shift+ ¦Ctrl+K ¦Позволяет пометить до десяти¦
¦отмеченную ¦Ctrl ¦ (*) ¦позиций в тексте путем нажа-¦
¦позицию. ¦ (*) ¦ ¦тия комбинации клавиш Ctrl+K,¦
¦ ¦ ¦ ¦за которой следует нажатие¦
¦ ¦Ctrl+K ¦ ¦одной клавиши, представляющей¦
¦ ¦ (*) ¦ ¦номер маркера (от 0 до 9).¦
¦ ¦ ¦ ¦После того, как ваша позиция¦
¦ ¦ ¦ ¦была маркирована, вы можете¦
¦ ¦ ¦ ¦работать в произвольном месте¦
¦ ¦ ¦ ¦файла, а затем оперативно¦
¦ ¦ ¦ ¦вернуться к помеченной пози-¦
¦ ¦ ¦ ¦ции при помощи команды Ctrl+Q¦
¦ ¦ ¦ ¦ (помните, что нужно ис-¦
¦ ¦ ¦ ¦пользовать тот же самый номер¦
¦ ¦ ¦ ¦маркера позиции). В каждом¦
¦ ¦ ¦ ¦окне может присутствовать де-¦
¦ ¦ ¦ ¦сять маркеров позиции. ¦
+-----------+----------+----------+-----------------------------+

B.Pascal 7 & Objects/PG - 514 -

¦Показать ¦Alt+F7 ¦ Alt+F7 ¦Перемещает курсор в точку, к ¦
¦предыдущую ¦ ¦ ¦которой относится предыдущее ¦
¦ошибку. ¦ ¦ ¦сообщение об ошибке или ¦
¦ ¦ ¦ ¦предупреждении. Эта команда¦
¦ ¦ ¦ ¦работает только в том случае,¦
¦ ¦ ¦ ¦если в окне сообщений имеются¦
¦ ¦ ¦ ¦сообщения со связанными с¦
¦ ¦ ¦ ¦ними номерами строк. ¦
+-----------+----------+----------+-----------------------------+
¦Показать ¦Alt+F8 ¦ Alt+F8 ¦Перемещает курсор в точку, к¦
¦следующую ¦ ¦ ¦которой относится следующее¦
¦ошибку. ¦ ¦ ¦сообщение об ошибке или¦
¦ ¦ ¦ ¦предупреждении. Эта команда¦
¦ ¦ ¦ ¦работает только в том случае,¦
¦ ¦ ¦ ¦если в окне сообщений имеются¦
¦ ¦ ¦ ¦сообщения со связанными с ни-¦
¦ ¦ ¦ ¦ми номерами строк. ¦
+-----------+----------+----------+-----------------------------+
¦Режим ¦Ctrl+O T ¦ Ctrl+O T ¦Изменяет на противоположный¦
¦использов. ¦ ¦ ¦режим использования табуляции¦
¦табуляции. ¦ ¦ ¦Использование символов табу-¦
¦ ¦ ¦ ¦ляции описывается в интегри-¦
¦ ¦ ¦ ¦рованной среде в пункте¦
¦ ¦ ¦ ¦Options¦Environment¦Editor ¦
¦ ¦ ¦ ¦Use Tab Character. ¦
+-----------+----------+----------+-----------------------------+
¦Режим ¦Ctrl+O U ¦ Ctrl+O U ¦Изменяет на противоположное¦
¦структурн. ¦ ¦ ¦состояние команды Unindent¦
¦отступов ¦ ¦ ¦Включить и выключить Unindent¦
¦ ¦ ¦ ¦можно в интегрированной среде¦
¦ ¦ ¦ ¦в команде Options¦Environment¦
¦ ¦ ¦ ¦Editor Backspace Unindent. ¦
L-----------+----------+----------+------------------------------

(*) представляет цифры от 0 до 9.



B.Pascal 7 & Objects/PG - 515 -

Поиск с регулярными выражениями
-----------------------------------------------------------------

Вы можете искать текст, используя в строке поиска трафарет-
ные символы. Эти трафаретные символы перечислены в следующей таб-
лице:

Трафаретные символы регулярных выражений Таблица A.5
---------------T------------------------------------------------¬
¦ Выражение ¦ Функция ¦
+--------------+------------------------------------------------+
¦ ^ ¦ Каре в начале строки соответствует началу стро-¦
¦ ¦ ки. ¦
+--------------+------------------------------------------------+
¦ $ ¦ Знак доллара в конце выражения соответствует¦
¦ ¦ концу строки. ¦
+--------------+------------------------------------------------+
¦ . ¦ Точка соответствует любому символу. ¦
+--------------+------------------------------------------------+
¦ * ¦ Символ, следующий за звездочкой, соответствует¦
¦ ¦ любому числу вхождений данного символа (включая¦
¦ ¦ 0). Например bo* соответствует bot, b, boo и¦
¦ ¦ be. ¦
+--------------+------------------------------------------------+
¦ + ¦ Символ, следующий за знаком +, соответствует¦
¦ ¦ любому числу вхождений данного символа, исклю-¦
¦ ¦ чая 0. Например, bo+ соответствует bot, boo, но¦
¦ ¦ не be или b. ¦
+--------------+------------------------------------------------+
¦ [ ] ¦ Символы в скобках соответствуют любому, символу¦
¦ ¦ указанному в скобках, но не другим. Например,¦
¦ ¦ [bot] соответствует b, o или t. ¦
+--------------+------------------------------------------------+
¦ [^] ¦ Каре в начале строки в скобках означает НЕ.¦
¦ ¦ Следовательно, [^bot] соответствует любым сим-¦
¦ ¦ волам, кроме b, o или t. ¦
+--------------+------------------------------------------------+
¦ [-] ¦ Минус в скобках обозначает диапазон символов.¦
¦ ¦ Например, [b-o] соответствует любому символу¦
¦ ¦ от b до o. ¦
+--------------+------------------------------------------------+
¦ \ ¦ Обратная косая черта перед трафаретным симво-¦
¦ ¦ лом Borland Pascal сообщает Borland, что это¦
¦ ¦ символ нужно интерпретировать как литерал, а¦
¦ ¦ не как трафаретный символ. Например, \^ соот-¦
¦ ¦ ветствует ^, а не началу строки. ¦
L--------------+-------------------------------------------------



B.Pascal 7 & Objects/PG - 516 -

Приложение B. Краткий справочник по директивам компилятора
-----------------------------------------------------------------

В данном приложении перечисляются все директивы компилятора
Borland Pascal. Здесь приведен синтаксис, используемый для зада-
ния директивы в исходном коде, соответствующий эквивалент в ко-
мандной строке и краткое описание каждой директивы. Звездочкой
(*) отмечены директивы, используемые по умолчанию. В некоторых
случаях директивы могут зависеть от целевой платформы. Например,
по умолчанию в защищенном режиме DOS и в Windows генерируется код
процессора 80286, а в приложениях реального режима DOS эта дирек-
тивы выключена. В таких случаях пометка (PM) означает "для защи-
щенного режима", (WN) - "для Windows", а (RM) - "для реального
режима".

Директивы компилятора Таблица B.1
-----------------------T-------------T---------T----------------¬
¦ Директива ¦ Синтаксис ¦ Переклю-¦ Описание ¦
¦ ¦ в исходном ¦чатель ¦ ¦
¦ ¦ коде ¦командной¦ ¦
¦ ¦ ¦ строки ¦ ¦
+----------------------+-------------+---------+----------------+
¦ Выравнивание данных ¦ {$A+} ¦ /$A+ ¦ Выравнивает пе-¦
¦ на границу слова. (*)¦ ¦ ¦ ременные и¦
¦ ¦ ¦ ¦ типизированные ¦
¦ ¦ ¦ ¦ константы на¦
¦ ¦ ¦ ¦ границу слова. ¦
+----------------------+-------------+---------+----------------+
¦ Выравнивание данных ¦ {$A-} ¦ /$A- ¦ Выравнивает пе-¦
¦ на границу байта. ¦ ¦ ¦ ременные и¦
¦ ¦ ¦ ¦ типизированные ¦
¦ ¦ ¦ ¦ константы на¦
¦ ¦ ¦ ¦ границу байта. ¦
+----------------------+-------------+---------+----------------+
¦ Полное вычисление ¦ {$B+} ¦ /$B+ ¦ Вычисляет бу-¦
¦ булевских выражений. ¦ ¦ ¦ левские выра-¦
¦ ¦ ¦ ¦ жения по полной¦
¦ ¦ ¦ ¦ схеме. ¦
+----------------------+-------------+---------+----------------+
¦ Вычисление булевских ¦ {$B-} ¦ /$B- ¦ Вычисляет бу-¦
¦ выражений по короткой¦ ¦ ¦ левские выра-¦
¦ схеме. (*) ¦ ¦ ¦ жения по корот-¦
¦ ¦ ¦ ¦ кой схеме. ¦
+----------------------+-------------+---------+----------------+
¦ Атрибут сегмента ¦ {$C атриб} ¦ ¦ Управляет атри-¦
¦ кода. ¦ ¦ ¦ бутами сегмента¦
¦ ¦ ¦ ¦ кода. ¦
+----------------------+-------------+---------+----------------+
¦ Включение отладочной ¦ {$D+} ¦ /$D+ ¦ Генерирует от-¦
¦ информации. (*) ¦ ¦ ¦ ладочную инфор-¦
¦ ¦ ¦ ¦ мацию. ¦
+----------------------+-------------+---------+----------------+
¦ Выключение отладочной¦ {$D-} ¦ /$D- ¦ Выключает гене-¦

B.Pascal 7 & Objects/PG - 517 -

¦ информации. ¦ ¦ ¦ рацию отладоч-¦
¦ ¦ ¦ ¦ ной информации.¦
+----------------------+-------------+---------+----------------+
¦ Определение DEFINE. ¦ {DEFINE имя}¦ /Dимя ¦ Определяет ус-¦
¦ ¦ ¦ ¦ ловный иденти-¦
¦ ¦ ¦ ¦ фикатор "имя". ¦
+----------------------+-------------+---------+----------------+
¦ Описание. ¦ {$D текст} ¦ ¦ Включение текс-¦
¦ ¦ ¦ ¦ та в EXE или¦
¦ ¦ ¦ ¦ DLL. ¦
+----------------------+-------------+---------+----------------+
¦ ELSE ¦ {ELSE} ¦ ¦ Переключение ¦
¦ ¦ ¦ ¦ между компиля-¦
¦ ¦ ¦ ¦ цией и игнори-¦
¦ ¦ ¦ ¦ рованием исход-¦
¦ ¦ ¦ ¦ ного кода, раз-¦
¦ ¦ ¦ ¦ граниченного ¦
¦ ¦ ¦ ¦ директивами ¦
¦ ¦ ¦ ¦ {$IFxxx} и¦
¦ ¦ ¦ ¦ {$ENDIF}. ¦
+----------------------+-------------+---------+----------------+
¦ Включение эмуляции. ¦ {$E+} ¦ /$E+ ¦ Разрешает ком-¦
¦ (*) ¦ ¦ ¦ поновку с биб-¦
¦ ¦ ¦ ¦ лиотекой управ-¦
¦ ¦ ¦ ¦ ляющей системы,¦
¦ ¦ ¦ ¦ эмулирующей ¦
¦ ¦ ¦ ¦ сопроцессор ¦
¦ ¦ ¦ ¦ 80х87. ¦
+----------------------+-------------+---------+----------------+
¦ Выключение эмуляции. ¦ {$E-} ¦ /$E- ¦ Запрещает ком-¦
¦ ¦ ¦ ¦ поновку с биб-¦
¦ ¦ ¦ ¦ лиотекой ис-¦
¦ ¦ ¦ ¦ полняющей сис-¦
¦ ¦ ¦ ¦ темы, эмулирую-¦
¦ ¦ ¦ ¦ щей сопроцессор¦
¦ ¦ ¦ ¦ 80х87. ¦
+----------------------+-------------+---------+----------------+
¦ ENDIF ¦ {$ENDIF} ¦ ¦ Завершает ус-¦
¦ ¦ ¦ ¦ ловную компиля-¦
¦ ¦ ¦ ¦ цию, начатую¦
¦ ¦ ¦ ¦ последней ди-¦
¦ ¦ ¦ ¦ рективой ¦
¦ ¦ ¦ ¦ {$IFxxx}. ¦
+----------------------+-------------+---------+----------------+
¦ Расширенный синтаксис (см. $X) ¦
+----------------------T---------------T-------T----------------+
¦ Принудительное ¦ {$F+} ¦ /$F+ ¦ Скомпилирован- ¦
¦ использование дальних¦ ¦ ¦ ные процедуры и¦
¦ вызовов. ¦ ¦ ¦ функции всегда¦
¦ ¦ ¦ ¦ используют ¦
¦ ¦ ¦ ¦ дальнюю модель¦
¦ ¦ ¦ ¦ вызова. ¦
+----------------------+---------------+-------+----------------+

B.Pascal 7 & Objects/PG - 518 -

¦ Выключение ¦ {$F-} ¦ /$F- ¦ Для скомпилиро-¦
¦ принудительного ¦ ¦ ¦ ванных процедур¦
¦ использование дальних¦ ¦ ¦ и функций выби-¦
¦ вызовов. (*) ¦ ¦ ¦ рается подходя-¦
¦ ¦ ¦ ¦ щая модель -¦
¦ ¦ ¦ ¦ дальняя или¦
¦ ¦ ¦ ¦ ближняя. ¦
+----------------------+---------------+-------+----------------+
¦ Включение генерации ¦ {$G+} ¦ /$G+ ¦ Для улучшения¦
¦ кода процессора ¦ ¦ ¦ генерации кода¦
¦ 80286. (PM, WN) (*) ¦ ¦ ¦ используются ¦
¦ ¦ ¦ ¦ инструкции про-¦
¦ ¦ ¦ ¦ цессора 80286. ¦
+----------------------+---------------+-------+----------------+
¦ Включение генерации ¦ {$G-} ¦ /$G- ¦ Генерируются ¦
¦ кода процессора ¦ ¦ ¦ только инструк-¦
¦ 80286. (RM) (*) ¦ ¦ ¦ ции процессора¦
¦ ¦ ¦ ¦ 8086. ¦
+----------------------+---------------+-------+----------------+
¦ Проверка ¦ {$I+} ¦ /$I+ ¦ Разрешается ав-¦
¦ ввода-вывода. (*) ¦ ¦ ¦ томатическая ¦
¦ ¦ ¦ ¦ генерация кода,¦
¦ ¦ ¦ ¦ проверяющего ¦
¦ ¦ ¦ ¦ результат вызо-¦
¦ ¦ ¦ ¦ ва процедуры¦
¦ ¦ ¦ ¦ ввода-вывода. ¦
+----------------------+---------------+-------+----------------+
¦ Выключение проверки ¦ {$I-} ¦ /$I- ¦ Запрещается ав-¦
¦ ввода-вывода. ¦ ¦ ¦ томатическая ¦
¦ ¦ ¦ ¦ генерация кода,¦
¦ ¦ ¦ ¦ проверяющего ¦
¦ ¦ ¦ ¦ результат вызо-¦
¦ ¦ ¦ ¦ ва процедуры¦
¦ ¦ ¦ ¦ ввода-вывода. ¦
+----------------------+---------------+-------+----------------+
¦ Включение файал ¦ {$I имя_файла}¦ ¦ Включает ука-¦
¦ ¦ ¦ ¦ занный файл и¦
¦ ¦ ¦ ¦ использует его¦
¦ ¦ ¦ ¦ в компиляции. ¦
+----------------------+---------------+-------+----------------+
¦ IFDEF ¦ {IFDEF имя} ¦ ¦ Если "имя" оп-¦
¦ ¦ ¦ ¦ ределено, ком-¦
¦ ¦ ¦ ¦ пилирует после-¦
¦ ¦ ¦ ¦ дующий текст. ¦
+----------------------+---------------+-------+----------------+
¦ IFNDEF ¦ {IFNDEF имя} ¦ ¦ Если "имя" не¦
¦ ¦ ¦ ¦ определено, ¦
¦ ¦ ¦ ¦ компилирует ¦
¦ ¦ ¦ ¦ последующий ¦
¦ ¦ ¦ ¦ текст. ¦
+----------------------+---------------+-------+----------------+
¦ IFOPT ¦ {IFOPT перекл}¦ ¦ Если переключа-¦
¦ ¦ ¦ ¦ тель находится¦

B.Pascal 7 & Objects/PG - 519 -

¦ ¦ ¦ ¦ в заданном сос-¦
¦ ¦ ¦ ¦ тоянии, компи-¦
¦ ¦ ¦ ¦ лирует последу-¦
¦ ¦ ¦ ¦ ющий текст. ¦
+----------------------+---------------+-------+----------------+
¦ Эффективные вызовы. ¦ {$K+} ¦ ¦ Разрешает гене-¦
¦ (*) ¦ ¦ ¦ рацию эффектив-¦
¦ ¦ ¦ ¦ ных вызовов. ¦
+----------------------+---------------+-------+----------------+
¦ Выключение ¦ {$K-} ¦ ¦ Запрещает гене-¦
¦ эффективных вызовов. ¦ ¦ ¦ рацию эффектив-¦
¦ ¦ ¦ ¦ ных вызовов. ¦
+----------------------+---------------+-------+----------------+
¦ Компоновка с ¦ {$L имя_файла}¦ ¦ Компонует ука-¦
¦ объектным файлом. ¦ ¦ ¦ занный объект-¦
¦ ¦ ¦ ¦ ный файл с¦
¦ ¦ ¦ ¦ программой или¦
¦ ¦ ¦ ¦ модулем. ¦
+----------------------+---------------+-------+----------------+
¦ Включение информации ¦ {$L+} ¦ /$L+ ¦ Генерирует ин-¦
¦ о локальных ¦ ¦ ¦ формацию о ло-¦
¦ идентификаторах. (*) ¦ ¦ ¦ кальных иденти-¦
¦ ¦ ¦ ¦ фикаторах. ¦
+----------------------+---------------+-------+----------------+
¦ Выключение информации¦ {$L-} ¦ /$L- ¦ Запрещает гене-¦
¦ о локальных ¦ ¦ ¦ рацию информа-¦
¦ идентификаторах. ¦ ¦ ¦ ции о локальных¦
¦ ¦ ¦ ¦ идентификато- ¦
¦ ¦ ¦ ¦ рах. ¦
+----------------------+---------------+-------+----------------+
¦ Размеры ¦ {$M} стек,мин,¦ /Mстк,¦ Задает парамет-¦
¦ распределяемой ¦ макс ¦мин,мак¦ ры распределе-¦
¦ памяти. ¦ ¦ ¦ ния памяти для¦
¦ ¦ ¦ ¦ прикладной ¦
¦ ¦ ¦ ¦ программы или¦
¦ ¦ ¦ ¦ библиотеки. ¦
+----------------------+---------------+-------+----------------+
¦ Использование ¦ {$N+} ¦ /N+ ¦ Генерирует код,¦
¦ арифметического ¦ ¦ ¦ который выпол-¦
¦ сопроцессора. ¦ ¦ ¦ няет вычисления¦
¦ ¦ ¦ ¦ вещественного ¦
¦ ¦ ¦ ¦ типа с исполь-¦
¦ ¦ ¦ ¦ зованием про-¦
¦ ¦ ¦ ¦ цессора 80х87. ¦
+----------------------+---------------+-------+----------------+
¦ Выключение ¦ {$N-} ¦ /$N- ¦ Генерирует код,¦
¦ арифметического ¦ ¦ ¦ который выпол-¦
¦ сопроцессора. (*) ¦ ¦ ¦ няет вычисления¦
¦ ¦ ¦ ¦ вещественного ¦
¦ ¦ ¦ ¦ типа путем вы-¦
¦ ¦ ¦ ¦ зова подпрог-¦
¦ ¦ ¦ ¦ рамм библиотеки¦
¦ ¦ ¦ ¦ исполняющей ¦

B.Pascal 7 & Objects/PG - 520 -

¦ ¦ ¦ ¦ системы. ¦
+----------------------+---------------+-------+----------------+
¦ Включение открытых ¦ {$P+} ¦ /$P+ ¦ Разрешает пара-¦
¦ параметров. ¦ ¦ ¦ метры вида от-¦
¦ ¦ ¦ ¦ крытых строк и¦
¦ ¦ ¦ ¦ массивов в опи-¦
¦ ¦ ¦ ¦ саниях процедур¦
¦ ¦ ¦ ¦ и функций. ¦
+----------------------+---------------+-------+----------------+
¦ Выключение открытых ¦ {$P-} ¦ /$P- ¦ Запрещает пара¦
¦ параметров. (*) ¦ ¦ ¦ метры вида от-¦
¦ ¦ ¦ ¦ крытых строк и¦
¦ ¦ ¦ ¦ массивов в опи-¦
¦ ¦ ¦ ¦ саниях процедур¦
¦ ¦ ¦ ¦ и функций. ¦
+----------------------+---------------+-------+----------------+
¦ Включение проверки ¦ {$Q+} ¦ /$Q+ ¦ Разрешает гене-¦
¦ переполнения. ¦ ¦ ¦ рацию кода с¦
¦ ¦ ¦ ¦ проверкой пере-¦
¦ ¦ ¦ ¦ полнения. ¦
+----------------------+---------------+-------+----------------+
¦ Выключение проверки ¦ {$Q-} ¦ /$Q- ¦ Запрещает гене-¦
¦ переполнения. (*) ¦ ¦ ¦ рацию кода с¦
¦ ¦ ¦ ¦ проверкой пере-¦
¦ ¦ ¦ ¦ полнения. ¦
+----------------------+---------------+-------+----------------+
¦ Генерация оверлейного¦ {$O+} ¦ /$O+ ¦ Разрешает гене-¦
¦ кода. ¦ ¦ ¦ рацию оверлей-¦
¦ ¦ ¦ ¦ ного кода. ¦
+----------------------+---------------+-------+----------------+
¦ Генерация оверлейного¦ {$O-} ¦ /$O- ¦ Запрещает гене-¦
¦ кода. (RM) (*) ¦ ¦ ¦ рацию оверлей-¦
¦ ¦ ¦ ¦ ного кода. ¦
+----------------------+---------------+-------+----------------+
¦ Проверка диапазона. ¦ {$R+} ¦ /$R+ ¦ Генерирует код¦
¦ ¦ ¦ ¦ проверки диапа-¦
¦ ¦ ¦ ¦ зона. ¦
+----------------------+---------------+-------+----------------+
¦ Выключение проверки ¦ {$R-} ¦ /$R- ¦ Запрещает гене-¦
¦ диапазона. (*) ¦ ¦ ¦ рацию кода про-¦
¦ ¦ ¦ ¦ верки диапазо-¦
¦ ¦ ¦ ¦ на. ¦
+----------------------+---------------+-------+----------------+
¦ Файл ресурса. ¦ {$R имя_файла}¦ ¦ Задает имя фай-¦
¦ ¦ ¦ ¦ ла ресурса, ко-¦
¦ ¦ ¦ ¦ торый нужно¦
¦ ¦ ¦ ¦ включить в¦
¦ ¦ ¦ ¦ прикладную ¦
¦ ¦ ¦ ¦ программу или¦
¦ ¦ ¦ ¦ библиотеку. ¦
+----------------------+---------------+-------+----------------+
¦ Проверка ¦ {$S+} ¦ /$S+ ¦ Генерирует код¦
¦ переполнения стека. ¦ ¦ ¦ проверки пере-¦

B.Pascal 7 & Objects/PG - 521 -

¦ (*) ¦ ¦ ¦ полнения стека.¦
+----------------------+---------------+-------+----------------+
¦ Выключение проверки ¦ {$S-} ¦ /$S-} ¦ Запрещает гене-¦
¦ переполнения стека. ¦ ¦ ¦ рацию кода про-¦
¦ ¦ ¦ ¦ верки перепол-¦
¦ ¦ ¦ ¦ нения стека. ¦
+----------------------+---------------+-------+----------------+
¦ Ссылки на идентификатор (см. $Y) ¦
+----------------------T---------------T-------T----------------+
¦ Указатели с проверкой¦ {$T+} ¦ /$T+ ¦ Разрешает гене-¦
¦ типа. ¦ ¦ ¦ рацию при ис-¦
¦ ¦ ¦ ¦ пользовании ¦
¦ ¦ ¦ ¦ операции @ ука-¦
¦ ¦ ¦ ¦ зателей с про-¦
¦ ¦ ¦ ¦ веркой типа. ¦
+----------------------+---------------+-------+----------------+
¦ Выключение проверки ¦ {$T-} ¦ /$T- ¦ Запрещает гене-¦
¦ типа указателей. (*) ¦ ¦ ¦ рацию при ис-¦
¦ ¦ ¦ ¦ пользовании ¦
¦ ¦ ¦ ¦ операции @ ука-¦
¦ ¦ ¦ ¦ зателей с про-¦
¦ ¦ ¦ ¦ веркой типа. ¦
+----------------------+---------------+-------+----------------+
¦ UNDEF ¦ {UNDEF имя} ¦ ¦ Разопределяет ¦
¦ ¦ ¦ ¦ определенный ¦
¦ ¦ ¦ ¦ ранее условный¦
¦ ¦ ¦ ¦ идентификатор. ¦
+----------------------+---------------+-------+----------------+
¦ Выключение проверки ¦ {$V-} ¦ /$V- ¦ Ослабленная ¦
¦ строковых параметров-¦ ¦ ¦ проверка типа. ¦
¦ переменных. ¦ ¦ ¦ ¦
+----------------------+---------------+-------+----------------+
¦ Включение проверки ¦ {$V+} ¦ /$V+ ¦ Разрешает стро-¦
¦ строковых параметров-¦ ¦ ¦ гую проверку¦
¦ переменных. (*) ¦ ¦ ¦ типа. ¦
+----------------------+---------------+-------+----------------+
¦ Включение проверки ¦ {$W+} ¦ ¦ Генерирует для¦
¦ кадра стека Windows. ¦ ¦ ¦ процедур и фун-¦
¦ ¦ ¦ ¦ кций код входа¦
¦ ¦ ¦ ¦ и выхода. ¦
+----------------------+---------------+-------+----------------+
¦ Выключение проверки ¦ {$W-} ¦ ¦ Запрещает гене-¦
¦ кадра стека Windows. ¦ ¦ ¦ рацию кода вхо-¦
¦ (*) ¦ ¦ ¦ да и выхода для¦
¦ ¦ ¦ ¦ процедур и¦
¦ ¦ ¦ ¦ функций. ¦
+----------------------+---------------+-------+----------------+
¦ Включение ¦ {$X+} ¦ /$X+ ¦ Разрешает рас-¦
¦ расширенного ¦ ¦ ¦ ширенный син-¦
¦ синтаксиса. (*) ¦ ¦ ¦ таксис. ¦
+----------------------+---------------+-------+----------------+
¦ Выключение ¦ {$X-} ¦ /$X- ¦ Запрещает рас-¦
¦ расширенного ¦ ¦ ¦ ширенный син-¦

B.Pascal 7 & Objects/PG - 522 -

¦ синтаксиса. ¦ ¦ ¦ таксис. ¦
+----------------------+---------------+-------+----------------+
¦ Включение информации ¦ {$Y+} ¦ /$Y+ ¦ Разрешает ге-¦
¦ о ссылка на ¦ ¦ ¦ нерацию инфор-¦
¦ идентификаторы. (*) ¦ ¦ ¦ мации о ссылках¦
¦ ¦ ¦ ¦ на идентифика-¦
¦ ¦ ¦ ¦ торы. ¦
+----------------------+---------------+-------+----------------+
¦ Выключение информации¦ {$Y-} ¦ /$Y- ¦ Запрещает ге-¦
¦ о ссылка на ¦ ¦ ¦ нерацию инфор-¦
¦ идентификаторы. ¦ ¦ ¦ мации о ссылках¦
¦ ¦ ¦ ¦ на идентифика-¦
¦ ¦ ¦ ¦ торы. ¦
L----------------------+---------------+-------+-----------------




B.Pascal 7 & Objects/PG - 523 -

Приложение C. Зарезервированные слова и стандартные директивы
-----------------------------------------------------------------

В данном приложении перечисляются зарезервированные слова и
стандартные директивы Borland Pascal. Borland Pascal не различает
регистр символов, и вы можете использовать в своих программах
буквы нижнего или верхнего регистра.

Ключевые слова имеют для Borland Pascal специальный смысл, и
переопределить их вы не можете.

Зарезервированные слова Borland Pascal Таблица C.1
----------------------------------------------------------------¬
¦ and exports mod srh ¦
¦ array file nil string ¦
¦ asm for not then ¦
¦ begin function object to ¦
¦ case goto of type ¦
¦ const if or unit ¦
¦ constructor implementation packed until ¦
¦ destructor in procedure uses ¦
¦ div inherited program var ¦
¦ do inline record while ¦
¦ downto interface repeat with ¦
¦ else label set xor ¦
¦ end library shl ¦
L----------------------------------------------------------------

Ниже приведены стандартные директивы Borland Pascal. В отли-
чие от зарезервированных слов вы можете их переопределить. Реко-
мендуется избегать определяемых пользователем идентификаторов,
имена которых совпадают с директивами, так как это может привести
к непредвиденным результатам и создает трудности в отладке прог-
раммы.

Стандартные директивы Borland Pascal Таблица C.2
----------------------------------------------------------------¬
¦ absolute far name resident ¦
¦ assembler forward near virtual ¦
¦ export index private ¦
¦ external interrupt public ¦
L----------------------------------------------------------------

public и private являются зарезервированными словами в опи-
саниях объектного типа; в противном случае они интерпретируются
как директивы.




B.Pascal 7 & Objects/PG - 524 -

Приложение D. Символы ASCII
-----------------------------------------------------------------

В данном приложении приведена таблица, в которой перечислены
символы кода ASCII. Американский стандартный код для обмена ин-
формацией (ASCII) - это код, переводящий алфавитно-цифровые знаки
и символы и управляющие инструкции в восьмибитный двоичный код.
Таблица D.1 показывает только печатаемые символы и псевдографику
из американской таблицы ASCII.
-----------------T---------------T---------------T--------------¬
¦ DEC HEX CHAR ¦ DEC HEX CHAR ¦ DEC HEX CHAR ¦ DEC HEX CHAR ¦
+----------------+---------------+---------------+--------------+
¦ 0 0 ¦ 32 20 ¦ 64 40 @ ¦ 96 60 ' ¦
¦ 1 1 ¦ 33 21 ! ¦ 65 41 A ¦ 97 61 a ¦
¦ 2 2 ¦ 34 22 " ¦ 66 42 B ¦ 98 62 b ¦
¦ 3 3 ¦ 35 23 # ¦ 67 43 C ¦ 99 63 c ¦
¦ 4 4 ¦ 36 24 $ ¦ 68 44 D ¦ 100 64 d ¦
¦ 5 5 ¦ 37 25 % ¦ 69 45 E ¦ 101 65 e ¦
¦ 6 6 ¦ 38 26 & ¦ 70 46 F ¦ 102 66 f ¦
¦ 7 7 ¦ 39 27 ' ¦ 71 47 G ¦ 103 67 g ¦
¦ 8 8 ¦ 40 28 ( ¦ 72 48 H ¦ 104 68 h ¦
¦ 9 9 ¦ 41 29 ) ¦ 73 49 I ¦ 105 69 i ¦
¦ 10 A ¦ 42 2A * ¦ 74 4A J ¦ 106 6A j ¦
¦ 11 B ¦ 43 2B + ¦ 75 4B K ¦ 107 68 k ¦
¦ 12 C ¦ 44 2C ' ¦ 76 4C L ¦ 108 6C l ¦
¦ 13 D ¦ 45 2D - ¦ 77 4D M ¦ 109 6D m ¦
¦ 14 E ¦ 46 2E . ¦ 78 4E N ¦ 110 6E n ¦
¦ 15 F ¦ 47 2F / ¦ 79 4F O ¦ 111 6F o ¦
¦ 16 10 ¦ 48 30 0 ¦ 80 50 P ¦ 112 70 p ¦
¦ 17 11 ¦ 49 31 1 ¦ 81 51 Q ¦ 113 71 q ¦
¦ 18 12 ¦ 50 32 2 ¦ 82 52 R ¦ 114 72 r ¦
¦ 19 13 ¦ 51 33 3 ¦ 83 53 S ¦ 115 73 s ¦
¦ 20 14 ¦ 52 34 4 ¦ 84 54 T ¦ 116 74 t ¦
¦ 21 15 ¦ 53 35 5 ¦ 85 55 U ¦ 117 75 u ¦
¦ 22 16 ¦ 54 36 6 ¦ 86 56 V ¦ 118 76 v ¦
¦ 23 17 ¦ 55 37 7 ¦ 87 57 W ¦ 119 77 w ¦
¦ 24 18 ¦ 56 38 8 ¦ 88 58 X ¦ 120 78 x ¦
¦ 25 19 ¦ 57 39 9 ¦ 89 59 Y ¦ 121 79 y ¦
¦ 26 1A ¦ 58 3A : ¦ 90 5A Z ¦ 122 7A z ¦
¦ 27 1B ¦ 59 3B ; ¦ 91 5B [ ¦ 123 7B { ¦
¦ 28 1C ¦ 60 3C < ¦ 92 5C \ ¦ 124 7C | ¦
¦ 29 1D ¦ 61 3D = ¦ 93 5D ] ¦ 125 7D } ¦
¦ 30 1E ¦ 62 3E > ¦ 94 5E ^ ¦ 126 7E ~ ¦
¦ 31 1F ¦ 63 3F ? ¦ 95 5F _ ¦ 127 7F ¦
L----------------+---------------+---------------+---------------
-----------------T---------------T---------------T--------------¬
¦ 128 80 ¦160 A0 ¦192 C0 L ¦ 224 E0 ¦
¦ 129 81 ¦161 A1 ¦193 C1 + ¦ 225 E1 ¦
¦ 130 82 ¦162 A2 ¦194 C2 T ¦ 226 E2 ¦
¦ 131 83 ¦163 A3 ¦195 C3 + ¦ 227 E3 ¦
¦ 132 84 ¦164 A4 ¦196 C4 - ¦ 228 E4 ¦
¦ 133 85 ¦165 A5 ¦197 C5 + ¦ 229 E5 ¦

B.Pascal 7 & Objects/PG - 525 -

¦ 134 86 ¦166 A6 ¦198 C6 ¦ ¦ 230 E6 ¦
¦ 135 87 ¦167 A7 ¦199 C7 ¦ ¦ 231 E7 ¦
¦ 136 88 ¦168 A8 ¦200 C8 L ¦ 232 E8 ¦
¦ 137 89 ¦169 A9 ¦201 C9 г ¦ 233 E9 ¦
¦ 138 8A ¦170 AA ¦202 CA ¦ ¦ 234 EA ¦
¦ 139 8B ¦171 AB ¦203 CB T ¦ 235 EB ¦
¦ 140 8C ¦172 AC ¦204 CC ¦ ¦ 236 EC ¦
¦ 141 8D ¦173 AD ¦205 CD = ¦ 237 ED ¦
¦ 142 8E ¦174 AE ¦206 CE + ¦ 238 EE ¦
¦ 143 8F ¦175 AF ¦207 CF ¦ ¦ 239 EF ¦
¦ 144 90 ¦176 B0 - ¦208 D0 ¦ ¦ 240 F0 ¦
¦ 145 91 ¦177 B1 - ¦209 D1 T ¦ 241 F1 ¦
¦ 146 92 ¦178 B2 - ¦210 D2 T ¦ 242 F2 ¦
¦ 147 93 ¦179 B3 ¦ ¦211 D3 L ¦ 243 F3 ¦
¦ 148 94 ¦180 B4 + ¦212 D4 L ¦ 244 F4 ¦
¦ 149 95 ¦181 B5 ¦ ¦213 D5 - ¦ 245 F5 ¦
¦ 150 96 ¦182 B6 ¦ ¦214 D6 г ¦ 246 F6 ¦
¦ 151 97 ¦183 B7 ¬ ¦215 D7 + ¦ 247 F7 ¦
¦ 152 98 ¦184 B8 ¬ ¦216 D8 + ¦ 248 F8 ¦
¦ 153 99 ¦185 B9 ¦ ¦217 D9 - ¦ 249 F9 ¦
¦ 154 9A ¦186 BA ¦ ¦218 DA - ¦ 250 FA ¦
¦ 155 9B ¦187 BB ¬ ¦219 DB - ¦ 251 FB ¦
¦ 156 9C ¦188 BC - ¦220 DC - ¦ 252 FC ¦
¦ 157 9D ¦189 BD - ¦221 DD ¦ ¦ 253 FD ¦
¦ 158 9E ¦190 BE - ¦222 DE ¦ ¦ 254 FE ¦
¦ 159 9F ¦191 BF ¬ ¦223 DF - ¦ 255 FF ¦
L----------------+---------------+---------------+---------------

DEC - десятичный; HEX - шестнадцатиричный; CHAR - символ.



Назад
 


Новые поступления

Украинский Зеленый Портал Рефератик создан с целью поуляризации украинской культуры и облегчения поиска учебных материалов для украинских школьников, а также студентов и аспирантов украинских ВУЗов. Все материалы, опубликованные на сайте взяты из открытых источников. Однако, следует помнить, что тексты, опубликованных работ в первую очередь принадлежат их авторам. Используя материалы, размещенные на сайте, пожалуйста, давайте ссылку на название публикации и ее автора.

© il.lusion,2007г.
Карта сайта
  
  
 
МЕТА - Украина. Рейтинг сайтов Союз образовательных сайтов