1 #define INCL_WINSHELLDATA /* Or use INCL_WIN, INCL_PM, */
14 #define Prf_Open(pszFileName) SaveWinError(pPrfOpenProfile(Perl_hab, (pszFileName)))
15 #define Prf_Close(hini) (!CheckWinError(pPrfCloseProfile(hini)))
17 BOOL (*pPrfCloseProfile) (HINI hini);
18 HINI (*pPrfOpenProfile) (HAB hab, PCSZ pszFileName);
19 BOOL (*pPrfQueryProfile) (HAB hab, PPRFPROFILE pPrfProfile);
20 BOOL (*pPrfQueryProfileData) (HINI hini, PCSZ pszApp, PCSZ pszKey, PVOID pBuffer,
21 PULONG pulBufferLength);
23 LONG (*pPrfQueryProfileInt) (HINI hini, PCSZ pszApp, PCSZ pszKey, LONG sDefault);
25 BOOL (*pPrfQueryProfileSize) (HINI hini, PCSZ pszApp, PCSZ pszKey,
28 ULONG (*pPrfQueryProfileString) (HINI hini, PCSZ pszApp, PCSZ pszKey,
29 PCSZ pszDefault, PVOID pBuffer, ULONG ulBufferLength);
31 BOOL (*pPrfReset) (HAB hab, __const__ PRFPROFILE *pPrfProfile);
32 BOOL (*pPrfWriteProfileData) (HINI hini, PCSZ pszApp, PCSZ pszKey,
33 CPVOID pData, ULONG ulDataLength);
35 BOOL (*pPrfWriteProfileString) (HINI hini, PCSZ pszApp, PCSZ pszKey,
40 Prf_Get(pTHX_ HINI hini, PSZ app, PSZ key) {
45 if (CheckWinError(pPrfQueryProfileSize(hini, app, key, &len))) return &PL_sv_undef;
48 if (CheckWinError(pPrfQueryProfileData(hini, app, key, SvPVX(sv), &len))
49 || (len == 0 && (app == NULL || key == NULL))) { /* Somewhy needed. */
59 Prf_GetLength(HINI hini, PSZ app, PSZ key) {
62 if (CheckWinError(pPrfQueryProfileSize(hini, app, key, &len))) return -1;
66 #define Prf_Set(hini, app, key, s, l) \
67 (!(CheckWinError(pPrfWriteProfileData(hini, app, key, s, l))))
69 #define Prf_System(key) \
70 ( (key) ? ( (key) == 1 ? HINI_USERPROFILE \
71 : ( (key) == 2 ? HINI_SYSTEMPROFILE \
72 : (die("Wrong profile id %i", key), 0) )) \
82 PRFPROFILE info = { 257, user, 257, system};
84 if (CheckWinError(pPrfQueryProfile(Perl_hab, &info))) return &PL_sv_undef;
85 if (info.cchUserName > 257 || info.cchSysName > 257)
86 die("Panic: Profile names too long");
87 av_push(av, newSVpv(user, info.cchUserName - 1));
88 av_push(av, newSVpv(system, info.cchSysName - 1));
95 Prf_SetUser(pTHX_ SV *sv)
99 PRFPROFILE info = { 257, user, 257, system};
101 if (!SvPOK(sv)) die("User profile name not defined");
102 if (SvCUR(sv) > 256) die("User profile name too long");
103 if (CheckWinError(pPrfQueryProfile(Perl_hab, &info))) return 0;
104 if (info.cchSysName > 257)
105 die("Panic: System profile name too long");
106 info.cchUserName = SvCUR(sv) + 1;
107 info.pszUserName = SvPVX(sv);
108 return !CheckWinError(pPrfReset(Perl_hab, &info));
111 MODULE = OS2::PrfDB PACKAGE = OS2::Prf PREFIX = Prf_
114 Prf_Open(pszFileName)
122 Prf_Get(hini, app, key)
127 RETVAL = Prf_Get(aTHX_ hini, app, key);
132 Prf_Set(hini, app, key, s, l = (SvPOK(ST(3)) ? SvCUR(ST(3)): -1))
140 Prf_GetLength(hini, app, key)
152 RETVAL = Prf_Profiles(aTHX);
160 RETVAL = Prf_SetUser(aTHX_ sv);
166 AssignFuncPByORD(pPrfQueryProfileSize, ORD_PRF32QUERYPROFILESIZE);
167 AssignFuncPByORD(pPrfOpenProfile, ORD_PRF32OPENPROFILE);
168 AssignFuncPByORD(pPrfCloseProfile, ORD_PRF32CLOSEPROFILE);
169 AssignFuncPByORD(pPrfQueryProfile, ORD_PRF32QUERYPROFILE);
170 AssignFuncPByORD(pPrfReset, ORD_PRF32RESET);
171 AssignFuncPByORD(pPrfQueryProfileData, ORD_PRF32QUERYPROFILEDATA);
172 AssignFuncPByORD(pPrfWriteProfileData, ORD_PRF32WRITEPROFILEDATA);