Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
64832b93
Kaydet (Commit)
64832b93
authored
Eyl 20, 2007
tarafından
Vladimir Glazounov
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
INTEGRATION: CWS os2port01 (1.1.2); FILE ADDED
2006/11/29 14:31:18 ydario 1.1.2.1: Forgot some files.
üst
590b1e78
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
1272 additions
and
0 deletions
+1272
-0
dosh.h
sal/osl/os2/helpers/dosh.h
+917
-0
except.h
sal/osl/os2/helpers/except.h
+234
-0
setup.h
sal/osl/os2/helpers/setup.h
+121
-0
No files found.
sal/osl/os2/helpers/dosh.h
0 → 100644
Dosyayı görüntüle @
64832b93
/*
*@@sourcefile dosh.h:
* header file for dosh.c. See remarks there.
*
* Note: Version numbering in this file relates to XWorkplace version
* numbering.
*
*@@include #define INCL_DOSPROCESS
*@@include #define INCL_DOSDEVIOCTL // for doshQueryDiskParams only
*@@include #include <os2.h>
*@@include #include "helpers\dosh.h"
*/
/* This file Copyright (C) 1997-2001 Ulrich Mller,
* Dmitry A. Steklenev.
* This file is part of the "XWorkplace helpers" source package.
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation, in version 2 as it comes in the
* "COPYING" file of the XWorkplace main distribution.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#if __cplusplus
extern
"C"
{
#endif
#ifndef DOSH_HEADER_INCLUDED
#define DOSH_HEADER_INCLUDED
/* ******************************************************************
*
* Wrappers
*
********************************************************************/
// if DOSH_STANDARDWRAPPERS is #define'd before including dosh.h,
// all the following Dos* API calls are redirected to the dosh*
// counterparts
#ifdef DOSH_STANDARDWRAPPERS
#ifdef INCL_DOSPROCESS
APIRET
XWPENTRY
doshSleep
(
ULONG
msec
);
#define DosSleep(a) doshSleep((a))
#endif
#ifdef INCL_DOSSEMAPHORES
APIRET
XWPENTRY
doshCreateMutexSem
(
PSZ
pszName
,
PHMTX
phmtx
,
ULONG
flAttr
,
BOOL32
fState
);
#define DosCreateMutexSem(a, b, c, d) doshCreateMutexSem((a), (b), (c), (d))
APIRET
XWPENTRY
doshRequestMutexSem
(
HMTX
hmtx
,
ULONG
ulTimeout
);
#define DosRequestMutexSem(h, t) doshRequestMutexSem((h), (t))
APIRET
XWPENTRY
doshReleaseMutexSem
(
HMTX
hmtx
);
#define DosReleaseMutexSem(h) doshReleaseMutexSem((h))
#endif
#ifdef INCL_DOSEXCEPTIONS
APIRET
XWPENTRY
doshSetExceptionHandler
(
PEXCEPTIONREGISTRATIONRECORD
pERegRec
);
#define DosSetExceptionHandler(a) doshSetExceptionHandler((a))
APIRET
XWPENTRY
doshUnsetExceptionHandler
(
PEXCEPTIONREGISTRATIONRECORD
pERegRec
);
#define DosUnsetExceptionHandler(a) doshUnsetExceptionHandler((a))
#endif
#endif
/* ******************************************************************
*
* Miscellaneous
*
********************************************************************/
CHAR
doshGetChar
(
VOID
);
BOOL
doshQueryShiftState
(
VOID
);
ULONG
doshIsWarp4
(
VOID
);
PSZ
doshQuerySysErrorMsg
(
APIRET
arc
);
ULONG
doshQuerySysUptime
(
VOID
);
/* ******************************************************************
*
* Memory helpers
*
********************************************************************/
PVOID
doshMalloc
(
ULONG
cb
,
APIRET
*
parc
);
APIRET
doshAllocArray
(
ULONG
c
,
ULONG
cbArrayItem
,
PBYTE
*
ppv
,
PULONG
pcbAllocated
);
PVOID
doshAllocSharedMem
(
ULONG
ulSize
,
const
char
*
pcszName
);
PVOID
doshRequestSharedMem
(
PCSZ
pcszName
);
/* ******************************************************************
*
* Drive helpers
*
********************************************************************/
APIRET
doshIsFixedDisk
(
ULONG
ulLogicalDrive
,
PBOOL
pfFixed
);
#ifdef INCL_DOSDEVIOCTL
// #pragma pack(1)
/*
* DRIVEPARAMS:
* structure used for doshQueryDiskParams.
* removed this, we can directly use BIOSPARAMETERBLOCK
* V0.9.13 (2001-06-14) [umoeller]
*/
/* typedef struct _DRIVEPARAMS
{
BIOSPARAMETERBLOCK bpb;
// BIOS parameter block. This is the first sector
// (at byte 0) in each partition. This is defined
// in the OS2 headers as follows:
typedef struct _BIOSPARAMETERBLOCK {
0 USHORT usBytesPerSector;
// Number of bytes per sector.
2 BYTE bSectorsPerCluster;
// Number of sectors per cluster.
3 USHORT usReservedSectors;
// Number of reserved sectors.
5 BYTE cFATs;
// Number of FATs.
6 USHORT cRootEntries;
// Number of root directory entries.
8 USHORT cSectors;
// Number of sectors.
10 BYTE bMedia;
// Media descriptor.
11 USHORT usSectorsPerFAT;
// Number of secctors per FAT.
13 USHORT usSectorsPerTrack;
// Number of sectors per track.
15 USHORT cHeads;
// Number of heads.
17 ULONG cHiddenSectors;
// Number of hidden sectors.
21 ULONG cLargeSectors;
// Number of large sectors.
25 BYTE abReserved[6];
// Reserved.
31 USHORT cCylinders;
// Number of cylinders defined for the physical
// device.
33 BYTE bDeviceType;
// Physical layout of the specified device.
34 USHORT fsDeviceAttr;
// A bit field that returns flag information
// about the specified drive.
} BIOSPARAMETERBLOCK;
// removed the following fields... these are already
// in the extended BPB structure, as defined in the
// Toolkit's BIOSPARAMETERBLOCK struct. Checked this,
// the definition is the same for the Toolkit 3 and 4.5.
USHORT usCylinders;
// no. of cylinders
UCHAR ucDeviceType;
// device type; according to the IBM Control
// Program Reference (see DSK_GETDEVICEPARAMS),
// this value can be:
// -- 0: 48 TPI low-density diskette drive
// -- 1: 96 TPI high-density diskette drive
// -- 2: 3.5-inch 720KB diskette drive
// -- 3: 8-Inch single-density diskette drive
// -- 4: 8-Inch double-density diskette drive
// -- 5: Fixed disk
// -- 6: Tape drive
// -- 7: Other (includes 1.44MB 3.5-inch diskette drive
// and CD-ROMs)
// -- 8: R/W optical disk
// -- 9: 3.5-inch 4.0MB diskette drive (2.88MB formatted)
USHORT usDeviceAttrs;
// DEVATTR_* flags
} DRIVEPARAMS, *PDRIVEPARAMS;
#pragma pack() */
APIRET
doshQueryDiskParams
(
ULONG
ulLogicalDrive
,
PBIOSPARAMETERBLOCK
pdp
);
BYTE
doshQueryDriveType
(
ULONG
ulLogicalDrive
,
PBIOSPARAMETERBLOCK
pdp
,
BOOL
fFixed
);
APIRET
XWPENTRY
doshHasAudioCD
(
ULONG
ulLogicalDrive
,
HFILE
hfDrive
,
BOOL
fMixedModeCD
,
PBOOL
pfAudio
);
#endif
VOID
XWPENTRY
doshEnumDrives
(
PSZ
pszBuffer
,
PCSZ
pcszFileSystem
,
BOOL
fSkipRemoveables
);
typedef
VOID
XWPENTRY
DOSHENUMDRIVES
(
PSZ
pszBuffer
,
PCSZ
pcszFileSystem
,
BOOL
fSkipRemoveables
);
typedef
DOSHENUMDRIVES
*
PDOSHENUMDRIVES
;
CHAR
doshQueryBootDrive
(
VOID
);
#define ERROR_AUDIO_CD_ROM 10000
#define DRVFL_MIXEDMODECD 0x0001
#define DRVFL_TOUCHFLOPPIES 0x0002
#define DRVFL_CHECKEAS 0x0004
#define DRVFL_CHECKLONGNAMES 0x0008
APIRET
doshAssertDrive
(
ULONG
ulLogicalDrive
,
ULONG
fl
);
#ifdef INCL_DOSDEVIOCTL
/*
*@@ XDISKINFO:
*
*@@added V0.9.16 (2002-01-13) [umoeller]
*/
typedef
struct
_XDISKINFO
{
CHAR
cDriveLetter
;
// drive letter
CHAR
cLogicalDrive
;
// logical drive no.
BOOL
fPresent
;
// if FALSE, drive does not exist
// the following are only valid if fPresent == TRUE
BIOSPARAMETERBLOCK
bpb
;
// 0x00 USHORT usBytesPerSector;
// 0x02 BYTE bSectorsPerCluster;
// 0x03 USHORT usReservedSectors;
// 0x05 BYTE cFATs;
// 0x06 USHORT cRootEntries;
// 0x08 USHORT cSectors;
// 0x0a BYTE bMedia;
// 0x0b USHORT usSectorsPerFAT;
// 0x0d USHORT usSectorsPerTrack;
// 0x0f USHORT cHeads;
// 0x11 ULONG cHiddenSectors;
// 0x15 ULONG cLargeSectors;
// 0x19 BYTE abReserved[6];
// 0x1a USHORT cCylinders;
// 0x1c BYTE bDeviceType;
#ifndef DEVTYPE_48TPI
#define DEVTYPE_48TPI 0x0000
#define DEVTYPE_96TPI 0x0001
#define DEVTYPE_35 0x0002
#define DEVTYPE_8SD 0x0003
#define DEVTYPE_8DD 0x0004
#define DEVTYPE_FIXED 0x0005
#define DEVTYPE_TAPE 0x0006
#endif
#define DEVTYPE_OTHER 0x0007
// includes 1.44 3.5" floppy
#define DEVTYPE_RWOPTICAL 0x0008
#define DEVTYPE_35_288MB 0x0009
// 0x1d USHORT fsDeviceAttr;
#define DEVATTR_REMOVEABLE 0x0001
// drive is removeable
#define DEVATTR_CHANGELINE 0x0002
// device can determine whether media has
// been removed since last I/O operation
#define DEVATTR_GREATER16MB 0x0004
// physical device driver supports physical
// addresses > 16 MB
#define DEVATTR_PARTITIONALREMOVEABLE 0x0008
// undocumented flag; set for ZIP drives
BYTE
bType
;
// do not change these codes, XWorkplace relies
// on them too to parse WPDisk data
#define DRVTYPE_HARDDISK 0
#define DRVTYPE_FLOPPY 1
#define DRVTYPE_TAPE 2
#define DRVTYPE_VDISK 3
#define DRVTYPE_CDROM 4
#define DRVTYPE_LAN 5
#define DRVTYPE_PARTITIONABLEREMOVEABLE 6
#define DRVTYPE_UNKNOWN 255
ULONG
flDevice
;
// any combination of the following:
#define DFL_REMOTE 0x0001
// drive is remote (not local)
#define DFL_FIXED 0x0002
// drive is fixed; otherwise it is removeable!
// always set for harddisks and zip drives
#define DFL_PARTITIONABLEREMOVEABLE 0x0004
// set for zip drives;
// in that case, DFL_FIXED is set also
#define DFL_BOOTDRIVE 0x0008
// drive was booted from
// media flags:
#define DFL_MEDIA_PRESENT 0x1000
// media is present in drive;
// -- always set for harddisks,
// unless the file system is not
// understood
// -- always set for remove drives
// -- always set for A: and B:
// -- set for CD-ROMS only if data
// CD-ROM is inserted
#define DFL_AUDIO_CD 0x2000
// set for CD-ROMs only, if an audio CD
// is currently inserted; in that case,
// DFL_MEDIA_PRESENT is _not_ set
#define DFL_SUPPORTS_EAS 0x4000
// drive supports extended attributes
// (assumption based on DosFSCtl,
// might not be correct for remote drives;
// reports correctly for FAT32 though)
#define DFL_SUPPORTS_LONGNAMES 0x8000
// drive supports long names; this does not
// necessarily mean that we support all IFS
// characters also
// the following are only valid if DFL_MEDIA_PRESENT is set;
// they are always set for drives A: and B:
CHAR
szFileSystem
[
30
];
// e.g. "FAT" or "HPFS" or "JFS" or "CDFS"
LONG
lFileSystem
;
// do not change these codes, XWorkplace relies
// on them too to parse WPDisk data
#define FSYS_UNKNOWN 0
// drive not formatted, or unknown file system
#define FSYS_FAT 1
#define FSYS_HPFS_JFS 2
#define FSYS_CDFS 3
#define FSYS_CDWFS 6 // not used by WPS!
// added V0.9.19 (2002-04-25) [umoeller]
#define FSYS_TVFS 7 // not used by WPS!
#define FSYS_FAT32_EXT2 8 // not used by WPS!
#define FSYS_RAMFS 9 // not used by WPS!
#define FSYS_REMOTE 10
// NOTE: if this has a negative value, this is
// the APIRET code from DosQueryFSAttach
// error codes for various operations
APIRET
arcIsFixedDisk
,
arcQueryDiskParams
,
arcQueryMedia
,
arcOpenLongnames
;
}
XDISKINFO
,
*
PXDISKINFO
;
APIRET
doshGetDriveInfo
(
ULONG
ulLogicalDrive
,
ULONG
fl
,
PXDISKINFO
pdi
);
#endif
APIRET
doshSetLogicalMap
(
ULONG
ulLogicalDrive
);
APIRET
XWPENTRY
doshQueryDiskSize
(
ULONG
ulLogicalDrive
,
double
*
pdSize
);
typedef
APIRET
XWPENTRY
DOSHQUERYDISKSIZE
(
ULONG
ulLogicalDrive
,
double
*
pdSize
);
typedef
DOSHQUERYDISKSIZE
*
PDOSHQUERYDISKSIZE
;
APIRET
XWPENTRY
doshQueryDiskFree
(
ULONG
ulLogicalDrive
,
double
*
pdFree
);
typedef
APIRET
XWPENTRY
DOSHQUERYDISKFREE
(
ULONG
ulLogicalDrive
,
double
*
pdFree
);
typedef
DOSHQUERYDISKFREE
*
PDOSHQUERYDISKFREE
;
APIRET
XWPENTRY
doshQueryDiskFSType
(
ULONG
ulLogicalDrive
,
PSZ
pszBuf
,
ULONG
cbBuf
);
typedef
APIRET
XWPENTRY
DOSHQUERYDISKFSTYPE
(
ULONG
ulLogicalDrive
,
PSZ
pszBuf
,
ULONG
cbBuf
);
typedef
DOSHQUERYDISKFSTYPE
*
PDOSHQUERYDISKFSTYPE
;
APIRET
doshQueryDiskLabel
(
ULONG
ulLogicalDrive
,
PSZ
pszVolumeLabel
);
APIRET
doshSetDiskLabel
(
ULONG
ulLogicalDrive
,
PSZ
pszNewLabel
);
/* ******************************************************************
*
* Module handling helpers
*
********************************************************************/
APIRET
doshQueryProcAddr
(
PCSZ
pcszModuleName
,
ULONG
ulOrdinal
,
PFN
*
ppfn
);
/*
*@@ RESOLVEFUNCTION:
* one of these structures each define
* a single function import to doshResolveImports.
*
*@@added V0.9.3 (2000-04-25) [umoeller]
*/
typedef
struct
_RESOLVEFUNCTION
{
const
char
*
pcszFunctionName
;
PFN
*
ppFuncAddress
;
}
RESOLVEFUNCTION
,
*
PRESOLVEFUNCTION
;
typedef
const
struct
_RESOLVEFUNCTION
*
PCRESOLVEFUNCTION
;
APIRET
doshResolveImports
(
PCSZ
pcszModuleName
,
HMODULE
*
phmod
,
PCRESOLVEFUNCTION
paResolves
,
ULONG
cResolves
);
/* ******************************************************************
*
* Performance Counters (CPU Load)
*
********************************************************************/
#define CMD_PERF_INFO 0x41
#define CMD_KI_ENABLE 0x60
#define CMD_KI_DISABLE 0x61
#ifndef CMD_KI_RDCNT
#define CMD_KI_RDCNT 0x63
typedef
APIRET
APIENTRY
FNDOSPERFSYSCALL
(
ULONG
ulCommand
,
ULONG
ulParm1
,
ULONG
ulParm2
,
ULONG
ulParm3
);
typedef
FNDOSPERFSYSCALL
*
PFNDOSPERFSYSCALL
;
#endif
typedef
struct
_CPUUTIL
{
ULONG
ulTimeLow
;
// low 32 bits of time stamp
ULONG
ulTimeHigh
;
// high 32 bits of time stamp
ULONG
ulIdleLow
;
// low 32 bits of idle time
ULONG
ulIdleHigh
;
// high 32 bits of idle time
ULONG
ulBusyLow
;
// low 32 bits of busy time
ULONG
ulBusyHigh
;
// high 32 bits of busy time
ULONG
ulIntrLow
;
// low 32 bits of interrupt time
ULONG
ulIntrHigh
;
// high 32 bits of interrupt time
}
CPUUTIL
,
*
PCPUUTIL
;
// macro to convert 8-byte (low, high) time value to double
#define LL2F(high, low) (4294967296.0*(high)+(low))
/*
*@@ DOSHPERFSYS:
* structure used with doshPerfOpen.
*
*@@added V0.9.7 (2000-12-02) [umoeller]
*@@changed V0.9.9 (2001-03-14) [umoeller]: added interrupt load
*/
typedef
struct
_DOSHPERFSYS
{
// output: no. of processors on the system
ULONG
cProcessors
;
// output: one CPU load for each CPU
PLONG
palLoads
;
// output: one CPU interrupt load for each CPU
PLONG
palIntrs
;
// each of the following ptrs points to an array of cProcessors items
PCPUUTIL
paCPUUtils
;
// CPUUTIL structures
double
*
padBusyPrev
;
// previous "busy" calculations
double
*
padTimePrev
;
// previous "time" calculations
double
*
padIntrPrev
;
// previous "intr" calculations
// private stuff
HMODULE
hmod
;
BOOL
fInitialized
;
PFNDOSPERFSYSCALL
pDosPerfSysCall
;
}
DOSHPERFSYS
,
*
PDOSHPERFSYS
;
APIRET
doshPerfOpen
(
PDOSHPERFSYS
*
ppPerfSys
);
APIRET
doshPerfGet
(
PDOSHPERFSYS
pPerfSys
);
APIRET
doshPerfClose
(
PDOSHPERFSYS
*
ppPerfSys
);
/* ******************************************************************
*
* File name parsing
*
********************************************************************/
APIRET
doshGetDriveSpec
(
PCSZ
pcszFullFile
,
PSZ
pszDrive
,
PULONG
pulDriveLen
,
PBOOL
pfIsUNC
);
PSZ
doshGetExtension
(
PCSZ
pcszFilename
);
/* ******************************************************************
*
* File helpers
*
********************************************************************/
BOOL
doshIsFileOnFAT
(
const
char
*
pcszFileName
);
APIRET
doshIsValidFileName
(
const
char
*
pcszFile
,
BOOL
fFullyQualified
);
BOOL
doshMakeRealName
(
PSZ
pszTarget
,
PSZ
pszSource
,
CHAR
cReplace
,
BOOL
fIsFAT
);
APIRET
doshQueryFileSize
(
HFILE
hFile
,
PULONG
pulSize
);
APIRET
doshQueryPathSize
(
PCSZ
pcszFile
,
PULONG
pulSize
);
APIRET
doshQueryPathAttr
(
const
char
*
pcszFile
,
PULONG
pulAttr
);
APIRET
doshSetPathAttr
(
const
char
*
pcszFile
,
ULONG
ulAttr
);
/* ******************************************************************
*
* XFILEs
*
********************************************************************/
/*
*@@ XFILE:
*
*@@added V0.9.16 (2001-10-19) [umoeller]
*/
typedef
struct
_XFILE
{
HFILE
hf
;
PSZ
pszFilename
;
// as given to doshOpen
ULONG
flOpenMode
;
// as given to doshOpen
ULONG
cbInitial
,
// intial file size on open (can be 0 if new)
cbCurrent
;
// current file size (raised with each write)
PBYTE
pbCache
;
// if != NULL, cached data from doshReadAt
ULONG
cbCache
,
// size of data in cbCache
ulReadFrom
;
// file offset where pbCache was read from
}
XFILE
,
*
PXFILE
;
#define XOPEN_READ_EXISTING 0x0001
#define XOPEN_READWRITE_EXISTING 0x0002
#define XOPEN_READWRITE_APPEND 0x0003
#define XOPEN_READWRITE_NEW 0x0004
#define XOPEN_ACCESS_MASK 0xffff
#define XOPEN_BINARY 0x10000000
APIRET
doshOpen
(
PCSZ
pcszFilename
,
ULONG
flOpenMode
,
PULONG
pcbFile
,
PXFILE
*
ppFile
);
#define DRFL_NOCACHE 0x0001
#define DRFL_FAILIFLESS 0x0002
APIRET
doshReadAt
(
PXFILE
pFile
,
ULONG
ulOffset
,
PULONG
pcb
,
PBYTE
pbData
,
ULONG
fl
);
APIRET
doshWrite
(
PXFILE
pFile
,
ULONG
cb
,
PCSZ
pbData
);
APIRET
doshWriteAt
(
PXFILE
pFile
,
ULONG
ulOffset
,
ULONG
cb
,
PCSZ
pbData
);
APIRET
doshWriteLogEntry
(
PXFILE
pFile
,
const
char
*
pcszFormat
,
...);
APIRET
doshClose
(
PXFILE
*
ppFile
);
APIRET
doshReadText
(
PXFILE
pFile
,
PSZ
*
ppszContent
,
PULONG
pcbRead
);
APIRET
doshLoadTextFile
(
PCSZ
pcszFile
,
PSZ
*
ppszContent
,
PULONG
pcbRead
);
PSZ
doshCreateBackupFileName
(
const
char
*
pszExisting
);
APIRET
doshCreateTempFileName
(
PSZ
pszTempFileName
,
PCSZ
pcszDir
,
PCSZ
pcszPrefix
,
PCSZ
pcszExt
);
APIRET
doshWriteTextFile
(
const
char
*
pszFile
,
const
char
*
pszContent
,
PULONG
pulWritten
,
PSZ
pszBackup
);
/* ******************************************************************
*
* Directory helpers
*
********************************************************************/
BOOL
doshQueryDirExist
(
PCSZ
pcszDir
);
APIRET
doshCreatePath
(
PCSZ
pcszPath
,
BOOL
fHidden
);
APIRET
doshQueryCurrentDir
(
PSZ
pszBuf
);
APIRET
doshSetCurrentDir
(
PCSZ
pcszDir
);
#define DOSHDELDIR_RECURSE 0x0001
#define DOSHDELDIR_DELETEFILES 0x0002
APIRET
doshDeleteDir
(
PCSZ
pcszDir
,
ULONG
flFlags
,
PULONG
pulDirs
,
PULONG
pulFiles
);
APIRET
doshCanonicalize
(
PCSZ
pcszFileIn
,
PSZ
pszFileOut
,
ULONG
cbFileOut
);
/* ******************************************************************
*
* Process helpers
*
********************************************************************/
ULONG
XWPENTRY
doshMyPID
(
VOID
);
typedef
ULONG
XWPENTRY
DOSHMYPID
(
VOID
);
typedef
DOSHMYPID
*
PDOSHMYPID
;
ULONG
XWPENTRY
doshMyTID
(
VOID
);
typedef
ULONG
XWPENTRY
DOSHMYTID
(
VOID
);
typedef
DOSHMYTID
*
PDOSHMYTID
;
APIRET
doshExecVIO
(
PCSZ
pcszExecWithArgs
,
PLONG
plExitCode
);
APIRET
doshQuickStartSession
(
PCSZ
pcszPath
,
PCSZ
pcszParams
,
BOOL
fForeground
,
USHORT
usPgmCtl
,
BOOL
fWait
,
PULONG
pulSID
,
PPID
ppid
,
PUSHORT
pusReturn
);
APIRET
doshSearchPath
(
PCSZ
pcszPath
,
PCSZ
pcszFile
,
PSZ
pszExecutable
,
ULONG
cbExecutable
);
APIRET
doshFindExecutable
(
PCSZ
pcszCommand
,
PSZ
pszExecutable
,
ULONG
cbExecutable
,
PCSZ
*
papcszExtensions
,
ULONG
cExtensions
);
/********************************************************************
*
* Partition functions
*
********************************************************************/
/*
*@@ LVMINFO:
* informational structure created by
* doshQueryLVMInfo.
*
*@@added V0.9.9 (2001-04-07) [umoeller]
*/
typedef
struct
_LVMINFO
{
HMODULE
hmodLVM
;
}
LVMINFO
,
*
PLVMINFO
;
/* #define DOSH_PARTITIONS_LIMIT 10
#define PAR_UNUSED 0x00 // Unused
#define PAR_FAT12SMALL 0x01 // DOS FAT 12-bit < 10 Mb
#define PAR_XENIXROOT 0x02 // XENIX root
#define PAR_XENIXUSER 0x03 // XENIX user
#define PAR_FAT16SMALL 0x04 // DOS FAT 16-bit < 32 Mb
#define PAR_EXTENDED 0x05 // Extended partition
#define PAR_FAT16BIG 0x06 // DOS FAT 16-bit > 32 Mb
#define PAR_HPFS 0x07 // OS/2 HPFS
#define PAR_AIXBOOT 0x08 // AIX bootable partition
#define PAR_AIXDATA 0x09 // AIX bootable partition
#define PAR_BOOTMANAGER 0x0A // OS/2 Boot Manager
#define PAR_WINDOWS95 0x0B // Windows 95 32-bit FAT
#define PAR_WINDOWS95LB 0x0C // Windows 95 32-bit FAT with LBA
#define PAR_VFAT16BIG 0x0E // LBA VFAT (same as 06h but using LBA-mode)
#define PAR_VFAT16EXT 0x0F // LBA VFAT (same as 05h but using LBA-mode)
#define PAR_OPUS 0x10 // OPUS
#define PAR_HID12SMALL 0x11 // OS/2 hidden DOS FAT 12-bit
#define PAR_COMPAQDIAG 0x12 // Compaq diagnostic
#define PAR_HID16SMALL 0x14 // OS/2 hidden DOS FAT 16-bit
#define PAR_HID16BIG 0x16 // OS/2 hidden DOS FAT 16-bit
#define PAR_HIDHPFS 0x17 // OS/2 hidden HPFS
#define PAR_WINDOWSSWP 0x18 // AST Windows Swap File
#define PAR_NECDOS 0x24 // NEC MS-DOS 3.x
#define PAR_THEOS 0x38 // THEOS
#define PAR_VENIX 0x40 // VENIX
#define PAR_RISCBOOT 0x41 // Personal RISC boot
#define PAR_SFS 0x42 // SFS
#define PAR_ONTRACK 0x50 // Ontrack
#define PAR_ONTRACKEXT 0x51 // Ontrack extended partition
#define PAR_CPM 0x52 // CP/M
#define PAR_UNIXSYSV 0x63 // UNIX SysV/386
#define PAR_NOVELL_64 0x64 // Novell
#define PAR_NOVELL_65 0x65 // Novell
#define PAR_NOVELL_67 0x67 // Novell
#define PAR_NOVELL_68 0x68 // Novell
#define PAR_NOVELL_69 0x69 // Novell
#define PAR_PCIX 0x75 // PCIX
#define PAR_MINIX 0x80 // MINIX
#define PAR_LINUX 0x81 // Linux
#define PAR_LINUXSWAP 0x82 // Linux Swap Partition
#define PAR_LINUXFILE 0x83 // Linux File System
#define PAR_FREEBSD 0xA5 // FreeBSD
#define PAR_BBT 0xFF // BBT
*/
// one-byte alignment
#pragma pack(1)
/*
*@@ PAR_INFO:
* partition table
*/
typedef
struct
_PAR_INFO
{
BYTE
bBootFlag
;
// 0=not active, 80H = active (boot this partition
BYTE
bBeginHead
;
// partition begins at this head...
USHORT
rBeginSecCyl
;
// ...and this sector and cylinder (see below)
BYTE
bFileSysCode
;
// file system type
BYTE
bEndHead
;
// partition ends at this head...
USHORT
bEndSecCyl
;
// ...and this sector and cylinder (see below)
ULONG
lBeginAbsSec
;
// partition begins at this absolute sector #
ULONG
lTotalSects
;
// total sectors in this partition
}
PAR_INFO
,
*
PPAR_INFO
;
/*
*@@ MBR_INFO:
* master boot record table.
* This has the four primary partitions.
*/
typedef
struct
_MBR_INFO
// MBR
{
BYTE
aBootCode
[
0x1BE
];
// abBootCode master boot executable code
PAR_INFO
sPrtnInfo
[
4
];
// primary partition entries
USHORT
wPrtnTblSig
;
// partition table signature (aa55H)
}
MBR_INFO
,
*
PMBR_INFO
;
/*
*@@ SYS_INFO:
*
*/
typedef
struct
_SYS_INFO
{
BYTE
startable
;
BYTE
unknown
[
3
];
BYTE
bootable
;
BYTE
name
[
8
];
BYTE
reservd
[
3
];
}
SYS_INFO
,
*
PSYS_INFO
;
/*
*@@ SYE_INFO:
*
*/
typedef
struct
_SYE_INFO
{
BYTE
bootable
;
BYTE
name
[
8
];
}
SYE_INFO
,
*
PSYE_INFO
;
/*
*@@ EXT_INFO:
*
*/
typedef
struct
_EXT_INFO
{
BYTE
aBootCode
[
0x18A
];
// abBootCode master boot executable code
SYE_INFO
sBmNames
[
4
];
// System Names
BYTE
bReserved
[
16
];
// reserved
PAR_INFO
sPrtnInfo
[
4
];
// partitioms entrys
USHORT
wPrtnTblSig
;
// partition table signature (aa55H)
}
EXT_INFO
,
*
PEXT_INFO
;
typedef
struct
_PARTITIONINFO
*
PPARTITIONINFO
;
/*
*@@ PARTITIONINFO:
* informational structure returned
* by doshGetPartitionsList. One of
* these items is created for each
* bootable partition.
*/
typedef
struct
_PARTITIONINFO
{
BYTE
bDisk
;
// drive number
CHAR
cLetter
;
// probable drive letter or ' ' if none
BYTE
bFSType
;
// file system type
PCSZ
pcszFSType
;
// file system name (as returned by
// doshType2FSName, can be NULL!)
BOOL
fPrimary
;
// primary partition?
BOOL
fBootable
;
// bootable by Boot Manager?
CHAR
szBootName
[
21
];
// Boot Manager name, if (fBootable)
// extended for LVM names V0.9.20 (2002-08-10) [umoeller]
ULONG
ulSize
;
// size MBytes
PPARTITIONINFO
pNext
;
// next info or NULL if last
}
PARTITIONINFO
;
UINT
doshQueryDiskCount
(
VOID
);
APIRET
doshReadSector
(
USHORT
disk
,
void
*
buff
,
USHORT
head
,
USHORT
cylinder
,
USHORT
sector
);
// restore original alignment
#pragma pack()
const
char
*
doshType2FSName
(
unsigned
char
bFSType
);
APIRET
doshGetBootManager
(
USHORT
*
pusDisk
,
USHORT
*
pusPart
,
PAR_INFO
*
BmInfo
);
typedef
struct
_PARTITIONSLIST
{
PLVMINFO
pLVMInfo
;
// != NULL if LVM is installed
// partitions array
PPARTITIONINFO
pPartitionInfo
;
USHORT
cPartitions
;
}
PARTITIONSLIST
,
*
PPARTITIONSLIST
;
APIRET
doshGetPartitionsList
(
PPARTITIONSLIST
*
ppList
,
PUSHORT
pusContext
);
APIRET
doshFreePartitionsList
(
PPARTITIONSLIST
ppList
);
APIRET
doshQueryLVMInfo
(
PLVMINFO
*
ppLVMInfo
);
APIRET
doshReadLVMPartitions
(
PLVMINFO
pInfo
,
PPARTITIONINFO
*
ppPartitionInfo
,
PUSHORT
pcPartitions
);
VOID
doshFreeLVMInfo
(
PLVMINFO
pInfo
);
/* ******************************************************************
*
* Wildcard matching
*
********************************************************************/
BOOL
doshMatchCase
(
PCSZ
pcszMask
,
PCSZ
pcszName
);
BOOL
doshMatchCaseNoPath
(
const
char
*
pcszMask
,
const
char
*
pcszName
);
BOOL
doshMatch
(
PCSZ
pcszMask
,
PCSZ
pcszName
);
#endif
#if __cplusplus
}
#endif
sal/osl/os2/helpers/except.h
0 → 100644
Dosyayı görüntüle @
64832b93
/*
*@@sourcefile except.h:
* header file for except.c. See remarks there.
*
* Note: Version numbering in this file relates to XWorkplace version
* numbering.
*
*@@include #define INCL_DOSEXCEPTIONS
*@@include #define INCL_DOSPROCESS
*@@include #include <os2.h>
*@@include #include <stdio.h>
*@@include #include <setjmp.h>
*@@include #include "helpers\except.h"
*/
/*
* Copyright (C) 1999-2000 Ulrich Mller.
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, in version 2 as it comes in the COPYING
* file of the XFolder main distribution.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#if __cplusplus
extern
"C"
{
#endif
#ifndef EXCEPT_HEADER_INCLUDED
#define EXCEPT_HEADER_INCLUDED
#if defined __IBMCPP__ || defined __IBMC__
#ifndef INCL_DOSEXCEPTIONS
#error except.h requires INCL_DOSEXCEPTIONS to be defined.
#endif
#ifndef INCL_DOSPROCESS
#error except.h requires INCL_DOSPROCESS to be defined.
#endif
#ifndef __stdio_h
#error except.h requires stdio.h to be included.
#endif
#ifndef __setjmp_h
#error except.h requires setjmp.h to be included.
#endif
#endif
/********************************************************************
*
* Declarations
*
********************************************************************/
// forward declaration
typedef
struct
_EXCEPTIONREGISTRATIONRECORD2
*
PEXCEPTIONREGISTRATIONRECORD2
;
// "OnKill" function prototype for EXCEPTIONREGISTRATIONRECORD2
// added V0.9.0 (99-10-22) [umoeller]
// removed V0.9.7 (2000-12-08) [umoeller]
// typedef VOID APIENTRY FNEXCONKILL(PEXCEPTIONREGISTRATIONRECORD2);
// typedef FNEXCONKILL *PFNEXCONKILL;
/*
*@@ EXCEPTIONREGISTRATIONRECORD2:
* replacement EXCEPTIONREGISTRATIONRECORD
* struct for thread exception handling.
*
*@@changed V0.9.0 (99-10-22) [umoeller]: pfnOnKill added
*@@changed V0.9.0 (99-10-22) [umoeller]: renamed from REGREC2
*/
typedef
struct
_EXCEPTIONREGISTRATIONRECORD2
{
PVOID
pNext
;
// as in EXCEPTIONREGISTRATIONRECORD
PFN
pfnHandler
;
// as in EXCEPTIONREGISTRATIONRECORD
jmp_buf
jmpThread
;
// additional buffer for setjmp
EXCEPTIONREPORTRECORD
err
;
// exception handlers copy the report rec here
PVOID
pvUser
;
// user ptr
}
EXCEPTIONREGISTRATIONRECORD2
;
/*
*@@ EXCEPTSTRUCT:
* structure used with TRY_xxx macros.
*/
typedef
struct
_EXCEPTSTRUCT
{
EXCEPTIONREGISTRATIONRECORD2
RegRec2
;
ULONG
ulExcpt
;
// != NULL if exception caught
APIRET
arc
;
// rc of DosSetExceptionHandler
}
EXCEPTSTRUCT
,
*
PEXCEPTSTRUCT
;
// function prototypes for exception hooks (V0.9.0)
// "open traplog file" hook
typedef
FILE
*
APIENTRY
FNEXCOPENFILE
(
VOID
);
typedef
FNEXCOPENFILE
*
PFNEXCOPENFILE
;
// "exception" hook
typedef
VOID
APIENTRY
FNEXCHOOK
(
FILE
*
,
PTIB
,
ULONG
);
// V0.9.16 (2001-12-02) [pr]
typedef
FNEXCHOOK
*
PFNEXCHOOK
;
// "error" hook
typedef
VOID
APIENTRY
FNEXCHOOKERROR
(
const
char
*
pcszFile
,
ULONG
ulLine
,
const
char
*
pcszFunction
,
APIRET
arc
);
typedef
FNEXCHOOKERROR
*
PFNEXCHOOKERROR
;
/********************************************************************
*
* Prototypes
*
********************************************************************/
VOID
excExplainException
(
FILE
*
file
,
PSZ
pszHandlerName
,
PEXCEPTIONREPORTRECORD
pReportRec
,
PCONTEXTRECORD
pContextRec
);
VOID
excRegisterHooks
(
PFNEXCOPENFILE
pfnExcOpenFileNew
,
PFNEXCHOOK
pfnExcHookNew
,
PFNEXCHOOKERROR
pfnExcHookError
,
BOOL
fBeepOnExceptionNew
);
ULONG
_System
excHandlerLoud
(
PEXCEPTIONREPORTRECORD
pReportRec
,
PEXCEPTIONREGISTRATIONRECORD2
pRegRec2
,
PCONTEXTRECORD
pContextRec
,
PVOID
pv
);
ULONG
_System
excHandlerQuiet
(
PEXCEPTIONREPORTRECORD
pReportRec
,
PEXCEPTIONREGISTRATIONRECORD2
pRegRec2
,
PCONTEXTRECORD
pContextRec
,
PVOID
pv
);
extern
PFNEXCHOOKERROR
G_pfnExcHookError
;
extern
ULONG
G_ulExplainExceptionRunning
;
/********************************************************************
*
* Macros
*
********************************************************************/
/* See except.c for explanations how to use these. */
#ifdef __NO_EXCEPTION_HANDLERS__
// exception handlers can completely be disabled
#define TRY_LOUD(excptstruct)
#else
#ifdef __NO_LOUD_EXCEPTION_HANDLERS__
#define TRY_LOUD(e) TRY_QUIET(e)
#else // __NO_LOUD_EXCEPTION_HANDLERS__
#define TRY_LOUD(excptstruct) \
{ \
EXCEPTSTRUCT excptstruct = {0}; \
excptstruct.RegRec2.pfnHandler = (PFN)excHandlerLoud; \
excptstruct.arc = DosSetExceptionHandler( \
(PEXCEPTIONREGISTRATIONRECORD)&(excptstruct.RegRec2)); \
if (excptstruct.arc) \
if (G_pfnExcHookError) \
G_pfnExcHookError(__FILE__, __LINE__, __FUNCTION__, excptstruct.arc); \
else \
DosBeep(1000, 1000); \
excptstruct.ulExcpt = setjmp(excptstruct.RegRec2.jmpThread); \
if (excptstruct.ulExcpt == 0) \
{
#endif // __NO_LOUD_EXCEPTION_HANDLERS__
#endif
#ifdef __NO_EXCEPTION_HANDLERS__
// exception handlers can completely be disabled
#define TRY_QUIET(excptstruct)
#else
#define TRY_QUIET(excptstruct) \
{ \
EXCEPTSTRUCT excptstruct = {0}; \
excptstruct.RegRec2.pfnHandler = (PFN)excHandlerQuiet; \
excptstruct.arc = DosSetExceptionHandler( \
(PEXCEPTIONREGISTRATIONRECORD)&(excptstruct.RegRec2)); \
if (excptstruct.arc) \
if (G_pfnExcHookError) \
G_pfnExcHookError(__FILE__, __LINE__, __FUNCTION__, excptstruct.arc); \
else \
DosBeep(1000, 1000); \
excptstruct.ulExcpt = setjmp(excptstruct.RegRec2.jmpThread); \
if (excptstruct.ulExcpt == 0) \
{
#endif
#ifdef __NO_EXCEPTION_HANDLERS__
// exception handlers can completely be disabled
#define CATCH(excptstruct) if (FALSE) {
#else
#define CATCH(excptstruct) \
DosUnsetExceptionHandler( \
(PEXCEPTIONREGISTRATIONRECORD)&(excptstruct.RegRec2)); \
}
/* end of TRY block */
\
else \
{
/* exception occured: */
\
DosUnsetExceptionHandler((PEXCEPTIONREGISTRATIONRECORD)&(excptstruct.RegRec2));
#endif
#ifdef __NO_EXCEPTION_HANDLERS__
// exception handlers can completely be disabled
#define END_CATCH() }
#else
#define END_CATCH() \
}
/* end of exception-occured block */
\
}
#endif
/*
* CRASH:
* this macro is helpful for testing
* the exception handlers.
* This is not for general use. ;-)
*/
#define CRASH {PSZ p = NULL; *p = 'a'; }
#endif // EXCEPT_HEADER_INCLUDED
#if __cplusplus
}
#endif
sal/osl/os2/helpers/setup.h
0 → 100644
Dosyayı görüntüle @
64832b93
/*
* setup.h:
* sample master include file which gets included
* from all helpers *.c sources.
*/
#ifndef SETUP_HEADER_INCLUDED
#define SETUP_HEADER_INCLUDED
// XWPEXPORT defines the standard linkage for the
// XWorkplace helpers.
#ifdef __EMX__
#define XWPENTRY
#elif defined (__IBMCPP__) || defined (__IBMC__)
#define XWPENTRY _Optlink
#endif
/*************************************************************
* *
* Additional stuff for EMX *
* *
*************************************************************/
#ifdef __EMX__
// EMX doesn't have all these 16-bit typedefs;
// added (99-10-22) [umoeller]
#define APIENTRY16 _Far16 _Pascal
#define PASCAL16 _Far16 _Pascal
#define CDECL16 _Far16 _Cdecl
typedef
unsigned
short
APIRET16
;
typedef
unsigned
long
APIRET32
;
#if 0
//YD do not use with gcc 3.3.5
#define _System
#define APIENTRY
// with VAC++, this defines _System linkage, which
// EMX doesn't have, or does it?!?
#endif // 0
#endif
// the following is a VAC++-specific macro, which doesn't exist
// with EMX, so we need to implement this... this was one of
// the "undefined symbols" we got (99-10-23) [umoeller]
// changed this to prefix underscore, because the STL apparently
// redefines this V0.9.3 (2000-05-15) [umoeller]
#define _min(a,b) ( ((a) > (b)) ? b : a )
#define _max(a,b) ( ((a) > (b)) ? a : b )
// Uncomment the following if you have trouble with the
// exception handlers in helpers\except.c; WarpIN will
// then install _no_ additional exception handlers at all
// (include\helpers\except.h reacts to these defines).
// I'm not sure if the handlers work well with EMX.
#ifdef __EMX__00
#define __NO_EXCEPTION_HANDLERS__
#endif
/*************************************************************
* *
* Additional stuff for VAC++ 3.0 *
* *
*************************************************************/
// all this added V0.9.2 (2000-03-10) [umoeller]
#if ( defined ( __IBMCPP__ ) && ( __IBMCPP__ < 400 ) )
typedef
int
bool
;
#define true 1
#define false 0
#define _BooleanConst // needed for some VAC headers, which define bool also
#endif
#ifndef __stdlib_h // <stdlib.h>
#include <stdlib.h>
#endif
#ifndef __string_h // <string.h>
#include <string.h>
#endif
/*************************************************************
* *
* Debugging *
* *
*************************************************************/
// All the following redone (99-10-23) [umoeller]:
// __DEBUG__ is defined as a macro on the compiler
// command line by the makefiles if DEBUG was enabled
// in \setup.in
#ifdef __DEBUG__
// with debug code, disable the exception handlers
#define __NO_EXCEPTION_HANDLERS__
// If the following is commented out, no PMPRINTF will be
// used at all. WarpIN uses Dennis Bareis' PMPRINTF
// package to do this.
// NOTE: We cannot use PmPrintf with EMX,
// because pmprintf.lib imports the VAC++ runtimes.
// That's the strange errors I was reporting yesterday.
#ifndef __EMX__
#ifdef OS2_INCLUDED
#define _PMPRINTF_
#include "helpers/pmprintf.h"
#endif
#endif
#endif
#ifndef _PMPRINTF_
// not defined: define empty macro so we don't
// get compiler errors
#define _Pmpf(x)
#endif
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment