OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 26 Апрель, 2024 10:41

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: ini - файлы
СообщениеДобавлено: Воскресенье, 26 Февраль, 2006 12:30 

Зарегистрирован: Среда, 22 Февраль, 2006 10:35
Сообщения: 144
Откуда: Новочеркасск
Имеется ли в ББ компонент для работы с ini - файлами, подобный IniFile в Delphi?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 26 Февраль, 2006 14:22 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Нет, к сожалению, в стандартной поставке такого модуля нет. HostRegistry дает ограниченные возможности записи в реестр - только в ветку приложения.

В WinAPI есть ф-и для этого:
CreateIniKeyValue
GetIniKeyString. Сам я с ними не работал.

Я пользовался вместо INI обычными файлы строковых ресурсов ББ (/Rsrc/Strings.odc)? Тогда посмотрите Dialog.MapString.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 21 Март, 2006 11:05 

Зарегистрирован: Среда, 22 Февраль, 2006 10:35
Сообщения: 144
Откуда: Новочеркасск
Цитата:
В WinAPI есть ф-и для этого:

Под WinAPI понимается модуль? Но в модуле я таких функций не нашел...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 21 Март, 2006 12:53 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Нет? Значит, не описаны. Можно сделать свои заголовки по MS SDK. Кстати, а в Дельфе IniFiles реализованы случайно не через эти ф-и API?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 22 Март, 2006 17:39 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 18:08
Сообщения: 76
Есть в модуле WinApi функции для работы с ini-файлами :
Код:
PROCEDURE WritePrivateProfileString* ["WritePrivateProfileStringA"] (lpAppName: PtrSTR; lpKeyName: PtrSTR; lpString: PtrSTR; lpFileName: PtrSTR): BOOL;

PROCEDURE GetPrivateProfileInt* ["GetPrivateProfileIntA"] (lpAppName: PtrSTR; lpKeyName: PtrSTR; nDefault: INTEGER; lpFileName: PtrSTR): INTEGER;

PROCEDURE GetPrivateProfileString* ["GetPrivateProfileStringA"] (lpAppName: PtrSTR; lpKeyName: PtrSTR; lpDefault: PtrSTR; lpReturnedString: PtrSTR; nSize: INTEGER; lpFileName: PtrSTR): INTEGER;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 22 Март, 2006 17:40 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 18:08
Сообщения: 76
В Delphi именно через эти функции и реализован класс TIniFile.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 30 Ноябрь, 2006 01:43 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Илья Ермаков писал(а):
Я пользовался вместо INI обычными файлы строковых ресурсов ББ (/Rsrc/Strings.odc)? Тогда посмотрите Dialog.MapString.

А есть ли стандартные средства для записи в строковые ресурсы? Dialog.MapString позволяет читать значение по имени, а есть ли способ сохранить значение по имени, если оно изменилось в процессе работы? Или это нужно делать вручную: прочитать файл, сделать поиск ключа, изменить значение и сохранить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 30 Ноябрь, 2006 02:41 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Неа, стандартных средств нет... Надо придумать нечто общее. И, кстати, отвязаться наконец от HostRegistry...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 30 Ноябрь, 2006 10:32 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Илья Ермаков писал(а):
Неа, стандартных средств нет... Надо придумать нечто общее. И, кстати, отвязаться наконец от HostRegistry...

Да, передо мной сейчас как раз стоит проблема сохранения настроек программы.

Лично мне нравятся ini-файлы: легко скопировать вместе с программой, легко сделать как глобальные настройки, так и привязанные к пользователю (если писать в каталог "Application Data" текущего пользователя). Легко просмотреть и поправить вручную, наконец. Более читабельны, чем XML.

Конечно, странновато выглядит BlackBox в части того, что касается сохранения настроек. После того, как я его установил, долго не мог понять, почему не сохраняется список открытых файлов. Потом поставил подсистему Desktop из коллекции Зинна, в тех пор проблем почти нет (иногда глючит, правда). Теперь вот нужно сохранять настройки, опять нет готового решения.

Я понимаю, что в OMInc сделали все как можно проще, но неужели никто подобную задачу для себя не решал? В коллекции Зинна я ничего такого не нашел. Там, правда, есть интересная подсистема Reg для чтения/правки реестра на древовидном компоненте, но там только пользовательский интерфейс, нет программного.

Кстати, для справки, если работать через WinApi.XXXPrivateProfileString, то существует ограничение на максимальный размер читаемого/сохраняемого файла: 64Кб. По крайней мере, под Win98 я с этим столкнулся. Под XP не смотрел, так как с тех пор везде использую TMemIniFile (в Delphi), который самостоятельно загружает ini-файл в собственные TStringList. Там такого ограничения нет.

О! У ребят из "Oi Software" кое-что подглядел (правда, исходников нет в открытом доступе)...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 30 Ноябрь, 2006 10:33 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Код:
DEFINITION O3stdConfig;

   CONST
      copyright = "© 1998 - 2002 O³ Software GmbH & Co. KG; http://www.o3-software.de";

   TYPE
      ListPtr = POINTER TO ARRAY OF ARRAY OF CHAR;

      TablePtr = POINTER TO ARRAY OF ARRAY OF ARRAY OF CHAR;

   PROCEDURE New (VAR rec: ANYREC; IN name: ARRAY OF CHAR);
   PROCEDURE NewGlobal (IN qualident: ARRAY OF CHAR);
   PROCEDURE Read (VAR rec: ANYREC; IN name, path: ARRAY OF CHAR);
   PROCEDURE ReadGlobal (IN path: ARRAY OF CHAR);
   PROCEDURE ReadList (IN name, path: ARRAY OF CHAR): ListPtr;
   PROCEDURE ReadTable (IN name, path: ARRAY OF CHAR): TablePtr;

END O3stdConfig.

This module provides support for configuration files.
Data in a software system can be treated differently depending on its lifetime. For very long lifetime CONST declarations are typically used. For short lifetimes databases / files are used. O3stdConfig is for data lifetime somewhere in between. Configuration-Files are modified manually and read in by programs.

Config-files have the following format. Each line starts with an qualident, either in the form "name.field.{field}" if it is a configuration for local variables or with "Module.Name.field{.field}" if it is a globally exported variable. The values follows after at least an TAB or whitespace.
Configuration-file can include comments. A comment has to begin with "#" or "*" and ends at the end of that line. If a string value contains "#" or "*", the value has to be enclosed in " or ' (this symbol is  then not allowed to be used in that value), otherwise everything after "#" / "*" will be treated as an comment.. Empty lines are ignored.

Lists start with "@list" and end with "@end" | "@list" | "@table". "@list" is followed by a List-Name, values are separated by linefeeds. Comments after values are ignored (read into the values).

Tables start with "@table" and end with "@end" | "@list" | "@table". "@table" is followed by a Table-Name, columns are tab-separated, rows are separated by linefeeds. Comments are ignored (read into the values).

PROCEDURE New (VAR rec: ANYREC; IN name: ARRAY OF CHAR);
Generates a New configuration file text out of the given rec. name has to be the same when reading the file by the procedure Read. The resulting text can be copied into another config-file or saved as a new config-file.
   
PROCEDURE NewGlobal (IN qualident: ARRAY OF CHAR);
Generates a New configuration file text out of the given qualident, which has to bee an "module.record".
The resulting text can be copied into another config-file or saved as a new config-file.

PROCEDURE Read (VAR rec: ANYREC; IN name, path: ARRAY OF CHAR);
Fills the fields of rec with the values from the configuration file at location path. The value for a record field rec.field will be taken from the first entry matching "name.fieldname" otherwise the values remains unchanged.
Pre
20   path # ""

PROCEDURE ReadGlobal (IN path: ARRAY OF CHAR);
Fills the fields of globally exported records given in the config-file at location path.
Pre
20   path # ""

PROCEDURE ReadList (IN name, path: ARRAY OF CHAR): ListPtr;
Reads the list name from the configuration file at location path.
Pre
20   path # ""
   
PROCEDURE ReadTable (IN name, path: ARRAY OF CHAR): ListPtr;
Reads the table name from the configuration file at location path.
Pre
20   path # ""


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 30 Ноябрь, 2006 10:44 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
У них интересно то, что сохранение значения переменной опирается на метаинформацию о ней. Я с этой областью пока почти не знаком.

Плохо то, что файл правится только вручную. Нет способа программно изменить сохраненное значение переменной.

В общем, надо придумывать интерфейс для сохранения настроек.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 02 Декабрь, 2006 13:52 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 18:08
Сообщения: 76
Код:
StdCoder.Decode ..,, ..C71...3Qw7uP5PRPPNR9Rbf9b8R79FTvMf1GomCrlAy2xhX,Cb2x
 hXhC6FU1xhiZiVBhihgmRiioedhgrZcZRiXFfaqmSrtuGfa4700zdGrr8rmCLLCJuyKtYcZRiX
 7.2.s,soX,0k,5TWyql.bnayKmKKqGomC5XzET1.PuP.MHT9N9ntumaU2,CJuyKtQC98P9PP7O
 NbXmb.2.AYlk2kA41,6.,U08J99SdfJHPNjvQCJuGKfaqmY6MwdONl1QCh0708T,U..w.QskU.
 sUGpmWbBxhYhAbndMHT9NY6Mw.sQq2Y6cwB.0.Pi9w,gsiE.2.Ad16.86.QC18RdfQHfMf9R9v
 Q7ONbXmb.2.w22U.EBU.U,.JFkns.U.2m,.D,1cUZT1E.cAE.666..cJ9fQ7PMRPM0S45.2UE0
 K1YDIU0KyB.,U.F.UO.,.16.c8.2UwK.s,6.n13s0EMF,eU.k3l,8Mtr.0E..UO.,.1.eWUX,U
 E0,M5kRF,a.w6s,6.H8.I.kdE,U.Q7IU6U.27IU5U.Y9IU7U.oe.E,y.g4IU9.J0K.0EoE,G.0
 EL4.1M.krE,O.0k3,kZ4.5s56.,W.QUO.17.0k,00,6.56.I.ESE,S.0E74.5M3,.z.5636.F.
 5c7kQE,O.gn0k,y,0EN1.3s,kSV6U.QLIU5U.wV,E,G.0kbE,U.2i,E,a.0Et4.3c1,U.wNIU4
 .l,3s06.n236,6.D13.0kPU4.H0a.0EIG.3c,E5E,U.Q0.Q6.2y,U4.ZT.6,6.nM.IU4.v.3M,
 6.Ld.IU5U.Y8QUMU.QCQUB.p.5646.z,u.0kOk,.j,a.0Emk,4V.2.XV.QUHU.oEIU4U.24I.E
 W9.zTHT8Ff8H986HePHfFH9P9vQrN1PM0HOHVuHZ8J,NH19RF99,dFH9P9HK0mdGLtaKrSqtmG
 EGpmWLu.mGEG3O3CLK.POMV9Q9fQb99,tIy4mGECoruKvKKtGrm8rt6PTvN,dCv76b8R79HTvN
 rN1HM1HsETeHb8J,tQHfS9vIdfQHXUgbUAam2av2YdphdZiHBhuhgUgbUAakQbUghV3jABhihg
 n3Yx2Yp2avgV7AVdphqBggBhYRdZBjUgbUIY7pdKBcABd2xf9hcNJYvgV7g,dOKVOFPM0HsIdf
 Qc8,ND,NEZeI1OK,tQHfSC366TeF,tEFOEZuC,N1HM0b0YddRio3Yx2YExd7pdIhcG3YIxdUAc
 GJ8wd43YHZimVvgV7AV6Bgn3hABhnZC...EEmobuoXaIbGpRqk2gV7AV2BhXZidxhiBgmBje2Y
 x2YE,90cEb8JZOE58J,dI9uETeI7869eH7uCPM0kdYg2BhXZCUUgbU28.cI9uEEIGooC4UdgV7
 AV7QhZBju2YHZC6HsCPU72hVRicJ5FOMb9ON0UqBggJbUQeo,.cPN76bPOIbUAdCZe3xc3JeUg
 V7AV3pd2R5Y6ZPN59RTnweGEq1UG,10..90sIEtK466v,.cI.FVm,AZUgcCZ6M1YeZ3D,ND,,.
 .gV7AV7YgjphZhZu2Y0xdDZd3BcCRb72Ze2YgBgnZiUwhkhgmBgoBhjphUwiVRiUQipRgXhgnR
 iahig3YeAZBAV7AVmhgVZgdphbJbUIcD,gV7AV7ogjJihJbUYeZ3DPWkViocjJihBgoZiZJivg
 V7ktCqkuKR0GeK4.QeXBgiphZJiBAV7g6AV7gV7gV7oe,JeUQgjphqJbUQcjpB91sETfP.r,7P
 OZP9N76b9R79FgZu2Y2BhmhAkRqk2qUEJeDRc3ZcJJe33YcYgu2Y2BhX,11,NE79N9ePdfQnf8
 ,78HeH,tQ9vMN76LPNn99,dR19Pp,kImGEuoWSJK0mU8odG3QbBAVEJ8...UHhgoReoJie2YcA
 7iqma5U,JeG,Q6AZg2YC,......SomGrd..YgZpgu2YHZCHXv2YDheI3YqBAQ8kI.......sIA
 diZie2YcA7ER.Q5hPMNX7p7S2H79u2.......ZON19PJ76F,...ZOF18HH79,dH......U5lY.
 ..EmKKnMGR0QbUwdJ,MG.H,.......I8....Ie3lR0mbK3UGVd........CpmCqVyquuKueGIa
 GR0mY.mGEuoW.......UCBghhge2Ycohu2Y7,Q5ktKqleHECJuUd.......kd4KvKKJ0GImqrC
 KR0GXaKqc9NuP5PMdvPZvC,dP1PP9fC,dFH1uokqav2YDh88rmCLR0mYu2M8...Pk428..ICUd
 cH9vRJ76FN8p767ml.Y3...P.V0.b9RZvQL9Q,78HeHCrMeHE4Id..rlbkt8HR0mU83.M8rN1H
 M0hOEAhg2YeJbUA7UvgV7Ic3xc7pdBAV7IhUIbx2YkQbBAV7ocDJeUAhUIbx22,7JT86NOFR88
 bPA7N8,N9,NA,7FTO1HM0HMGB86FtQXtKHPL,t6,7AZ7AlO8,d7,78b1Ut2fd2Ya..WpI0GeWo
 Wuo4aU7AVnJaPJhR3Yug5bPArWvgV7k2aIbCIIeqIq.K2,N1HM09Wvg,C5.V7KPM09eH0mtGLt
 kRqk4aEc.kdWIa0GIWLR0GdkRohu2YAxdC,HdC,7HT0Q5o8Iiu2YG,PM030Et0GRqXs3Yj2YBB
 go3hiAdiZiExhrhgm3ZmYZUQe6xdGZecohdAZvgV7cI98JfeIR869eHdOG9eIFdQ,t8,7ARNBH
 N1HMFRWH3dARbBAVB6I.UG3Yc2ju.22.M8.sCAVK,.qU0,.....y2.I8....Edin4qk2.U6Bgn
 76FNGQBME..eHEm2.aEfEqKKreHEa2UU2hVRicJ5Z00moeHEa2.ZfC,,g,30EqKKr0GRqXAhcC
 tO9PS7N8r76FPM2YugbU2avk2O2.00mqmuKEqGE410m4aU72B.FPMbXf2YDJe23ZfhgtRfdhfd
 QbBk2.p,kJQe6Zdc2hVRCN76X7AHtC,N1H.66p,kJEdWGo4qtY3hN8PM0K2r,F1,dC.i0m269C
 nIiHEWGJ0Go4qt2Yu.s8WqkESmHECnR0GJam46OERgcCZe7h6qokG5VuPjPN2hVFKQe6x7Qe6J
 8.XNAHN8H76L76V,r76F,66x86F7O11xdD,NAXN8r76JN8.I5,,Q3b0EKMBHtC,78.,dC.iWc,
 tVlgav2Ye.Z0.Eo44L7ARNBHN1EEWokCbvgVB..W0CZYZ651kIQeZtIdHJ.69O5A6..r,h0FPM
 I5NuH.,NO.UBkjiqmaLKwfqBggJ5bGta4N00mjWqkC5W2m2g,30kUCpdKIdGJImoWu2AZUobx2
 YmYZUIakAZvgV76O66pV6BA2ZfhAi1aIXYgiohUobU2aUYe6h6,N1Hk2O2.VVD7NRtQHfS0mK0
 0.akYUfhgtR9003d6,7JFOF.HkY6O11v767f9F1rOOv86d8G68J76bPMPPN,7O1XUoiVNR996J
 N8PU7A,a2LPN007np.776d8G.UfhgtdR19P.M068J76BvPffP796196hPMcC,NPT9NHfNn961f
 P796ZPNdPRZfP,d8HN1M0MGYAhPMNvKHPLC0.q.a.YgioiV,enSoiV77r76ZOFdOJM1HU7U3VB
 U7kW.A,90k2K2.Q5akW.a2oBv767ntUI37.7nta4enSYgi.eGE8nRqU7AVBM0uoWSJIyppKqw6
 H9eHGKLi4HN8rN1cF.246H.66P76UTRhZtK22YALXPV3p7UCVYpZfFKIaUIZUYd3p7UdA3,N1c
 F.24.yppKad22.7npsKcCwffhAr090k4EbkjOrkYZUYd3FmoCamIin4EX.6A..2Yh.wfqBAr0p
 VYdRQ9g6.R07Hv698HE.sOAZdM1cF.24.yJv4ad.EmoCi3e1zeR1nhkW.g,o7wfcBAmWAVY7OM
 8HtCEX.6A..66P,sLF1r0pVY7O.K2UCVY7O6981.i4.O2.V,UT3hVlI.6NW4i3e1z8O11MF.9W
 UQbBk2W0HfPbPNZ9R,NOR96d9O996BPOZvQd96b9PT9R,d8HN1AhUIbx6Ar,j8GH8H986FNO,7
 Dv767ntkI0GH0WYpZflhkFkI0GWyY7pd13ZdBZUg6UYtO91I5iqmYYv2YYpZq,Uq,Gac,.F1rl
 2AdCFmuGram4akWkdKKucQrVB6I..6N..MG66FFbUusI8rosCO5plY.amRak4ak2O3CLv4KqeX
 H,g,30..sOAZUo5.UHdQsQRNGR9RduPb8RZPO2ZqBggZ3bfR1nIiHEGKLCpmGrd68LPNmWnpCg
 V7g6.QbBAVB...G4..83.EREta4r76cC83amRak4.UusI.P....A3...CbGhgVZhIxhH,W0m0M
 8r,.F,N,M1..rN1PEc..Em..S2c8.EmUHdQHXv2YDh8O5p,kIin4cJ6OcCm2.H1sFQbBcE...M
 8..2B2YuEYEIiqmsCMOEM2YqBA,dCvFmKKnin4ak2mobyIcqk2MGBmo0mS00EEG3gcMBdI3Y3,
 ak2kp66v,L16Jk4k2a2F1,ND6OsK..HEv66ELO5sC,NFlOGqk2M09WBA,kRU7p7a4PM0HMFg,9
 WUwcZZCQ5qUE,.UY,.U7FJ.cCcQHXv6NI5H0EEy2ERA7UdM1o8QiYhgaZZUQiqFRQ8.ZPNb1.r
 N182...aGE..Q8ktA7.687PNB99YgZN8rN1YADONdvI23Y3HfPhPMa4Y3b1HtCPU7p6bfR2Yx2
 Ydphq,66d8GcR19P,dCMNqk2akWmodKIEqk2AVHVitQCZmBBGpraIrGLICLv4agcR1HKIiZRid
 QbBk2a2ZPNb96576V76d8G.,,669eH7O1akWuYvkWuYU.Q5qUE,.UY,.UGVe.EREta4rFmcC83
 iHEy2ERI8A3PUK,69oCeXH,cQI5...10.kI..sIUndI4aI,6869YAamREm.23Y3H1.NltkIU7p
 6b1,ND.UU.EEe1M1gcA,AVHVitQC36J8pm4KqWmtO5NFv6985H,akYcQ22.UU.22U3p7rV3FE.
 Q5HM1q.03..G4..CpmQ6EI2Yu2Y7V5,aEfko6QTvQN76RvQ9vMplY.EV.ohnhgX3Yug5Vl4AV4
 ,enS66yYYtQH17uHq.HEXYALXPVXUU.PU7AVH,Cb4BhiZgcYgi.YZUIYuIYg2YkYZU2ijN8rN1
 AV7A70rrCLEqHEqmM0GeW2,NGRuEuqtKad2Y3p7kWk4MFQbUgV7cI.RvQ9n4akW66D0Q6sCg,V
 0.....u2e0RX77JUU.bPNsI8roM8Ef.EKogjhCeHEa2UB.U,,ohUobx2ag2Ym24ko.r76BvPfX
 UIbx.PUA,AV7p6HnSktUI,bPN008GFiHEKIg66sCPk2akd.b1....H,A705,,.aY1dNTPRA39e
 H.cNT1,dD,dP,7JF090.EbMOqk2g6i1aIX.Ybx2Yi3YI,b1.8pW.90sQ9vM,,7f9L1gV7g600.
 QbBAVB6I..6N..10.FNGQCm0EvcCcQM8cE.aIX2ZfhA,ND8GFaWa22hPMN96vFFEeUYpZHVo78
 bPN5XqBAHN1aUAVYpZH,UUQZUIYuIYUQZUQhZBjg.0mWM1K24ImG4sCPM1H..0pkGLoGprOoom
 qmCJsKql0GIaIb2iVZicJbUA642.ZuCUgxhXJ5B0bHaMMEEUiBghdCO2cHqadQbBM0h0cOEe.,
 tMFfCCIYk4.koUkEp0GRq1YhjRgUIbxcFH9P6NHfQR7JFPOb983d6HtCPUL,WGqyaiIiZRiUg5
 VN8,d7AhU66N0VPMdnI0mKM8,d7IhUYbUY7ohVhB0mK.2iVZCrOOv862aMFWyo4M059O,dC2iV
 ZCsCaIbUv.H0JHT0Wd22Qgc3YxkL8mI0GeUiBghtKJPL,,V7Kr76J1Q5666PTvMR7JFPOohVhB
 HN1Hk2K2ohVhBr0sMFvC,NGRWeV7Ebg,HMFQ5A70rk.,ND,7Al86d8G..2aMNFNuI9Gqy4Z1pN
 D4nR0Gr44,dCvFF2Y3p7g60Gc4KuY8kdkRqk4..T8Q9fP,78NXucFsQm211AdC3YiVuME..HdC
 GpmsCPUKVnJbUkrgARtIy4r76BfP1PP9X4,u2iHEGrmWLueHEGpmsCI6.HWgxhX3Yx2YCBdA3Y
 I372eVZC.b0FdP1Xg2YgxBN76BfP1Xd2Y3ZdHFnuqk66cP1XY2Y3p7rV7A7ELUx6A,FYM1AV1x
 hipCktAdh3ijJio3ZgxBN,69Cqruag2YnBZvgV7M0HWcQiUQYUod7Zdd2YaktAdH3YIhgsdJEL
 O3aGEGJY.aEbEuKKwAZv6Rc9ZPN19N66pNDGJdKpWiHEG5QiXBgipZ1xhiphZRgoZej3Zn3ZIh
 gsdJsQUdoZI3hdNHT9N99PFN8HtCk283EuKKwgV7AV7gcAVGhcI,ROGNO1HM0o7Pk2KIa...R0
 9WUwdkhArN1P..gcjZiU6Rp762DHdC8YDZ7Q5.cI.df9ZPN.B76df9b18roGqm8LLKqrGr4.9u
 PdvCPk428.IeZlVWqk8LEWGue1sC,tHsMp7658GsCI6.1mdUopZmVdFK0GN0Xvk2GLLCrl.EdK
 qkGqVEICqIiHEGLLGqruqm0GRcTdf9bvM.MNg,EdKqk.rN0Pk4..jeQH9R9vIdfQ66F7Rp,kYs
 QplU83..82..x9RRdQ9Xd,.HUaxhmhhiwemBho,68bP8r76PUo,.mIrin4ak26NT16JM1HMFsJ
 ZPOQ8kRqUB..uomYeZ3jo3YcAZu6JsCPk2O3GrmcCUvEV.o7.HtCgAuGt.0GRcF18HbOFr76Ua
 xBQcjpB.dONgdjFqCLLGqocH9vRFN8H,83UZl4g6o7j1in2qk2..8ZbBhnZiZJiU23Ew66NXu.
 CbAlk.cP1XuME..k2O3OKr44o6EbkRoiu2YIVKVn,in4I6.HeFuLuu011o2FdP1PP0mF0GFAZU
 .M0HWgFEcHmIEUU..b0Ug6PY3Ud.0GnUUI5u4G0R0ak2.u0b1V,cR,dCvFeKKw.bHma4EuuGnU
 mBhYV0BgnhgcAZdQ5M05091MFl9QTfQd1m0EKQAOLKoidQbUYii.,,83A,98H6RR7N.O2gV7A,
 uYBM098H22..g,KIbkW66ZmnQCQb7M1HM103.W06NIiZlrAD,dHI3EW.kRM0h07vMdfC,,QA.0
 moeX7,M182u2u2GqlGrIiHEGqlGLLuKEenS2av6N5Xn,pVlM1HEb.QBmWdNOABamRod3xec.hX
 gMOR1..2BY3H1.PUBM0B0I50HEw7N07vMdnpM8q0,VUU7YgXZiioCi3e13lRYgXlpsK22.Eokh
 .0n4aU3lREd.GqlgV7UUo7in4gVBAVE,UAxhVZge2YcYBe1sQm211.cC.u2aGR0GW.UBEfktmG
 Eqk2QCmWf,hXuUmBBk2CKR0mVkR0momGE05NFqaKrKKR00.AVohgsdCUvg,8quOKnKKteHEC36
 H.GqoCKueHEG2a4.30g,H6R66pNDyIs68NvP599uqkkRM0106R99SQYUo7mGE81r,PUCVWhiap
 AmGEqqkW5Qid.b96pVWUd3YuEMiXgBhi76p,q.j0oj3xho3ZohAaGEG2M0ZON19N50F7R99SmG
 ECqIiXBU7p6dPNoZY,d0q.akYsM,t6,7A78K,7JktipoqJEkliHEaIbCYdN1ak2akWm2,N1M0C
 rhaqiUk2fvg,ak2A7moWsQ7N8,t6,7A,FYElKLnkhmqouqmqJEe1b97r76H0NPORnI0mWu2k2Q
 iUUW.e1VN1M09eHqU7.MFQ5A7mqouaUg5.8pWG3od7769eHUYVUIbx6NHfQRdHM8rN1o6.0HEw
 7NPOM9UBk2CLu8rt683PRB1aqiGGK0mta0F,LPOV96NPN19NH1b9Q1vM0GJa0A7WWP3aR3Yx2Y
 WQbWAZUwdG3YcQC.5d6H76.Uk2fd6Jk4M098Hg,AV7,.3tK3N8,d7QCNOFR88kKML,NDgfWAZU
 Y868MNGro66JN8P.HkY6H.uHE8HEGJY.Orkmqo2YnhgX,u40GJ.HUnhA,dCQCg,A,C3sQRNFl9
 RZPM59RFtQ779,NAN76.mWnhAHtCEtKqqyKvKKEiJEemIq.a.b0..KqlGGK2ag6HkmM8,N9YZU
 QCa0.ki0GJa0A,G4umUGKmK2ZHICrmCKGmWWIYg2YWIYdQ5M0KIb2YBU7gcAFEWGJ0mpKaUIZd
 .Hkd.o6sQ7,vd6N76VVklIg,A,HWkxB,t6qmM00M1M0Q8.90UYEM.NlpM8r76FVZ3jo,,tO9HE
 .a.b0.Uc.VXfAag2YA,7FKoCamR0GI.EEO5fPN,,M0A7WGaK2LXYAZUo5V,Y7oiVZhYAZUobx6
 AHFe.M06N...iqm69,dRk4a.HU3p7U7MFg,AV3,.g6i18pW.7PO59RPM09WUYdjBArN1qk203.
 W0CZY,HXVlIQeVpCJFIm4p,EaMMd1,dPcC.u2iXDVmFR.M8Efko6QIbUA7Uv2YohAe1sC,tQN7
 6cCCZmVvEV.HkU.mqr2YX2YCFKMAHtC,NEbuI90RPM2YXc6mWmIadQbUA6UYpZidD4HK0GNCnI
 in46R66pVChAd0FN8rN1o6.0HEEm.,7FT86M0HeFGaf,Q22YI37RO1AV7A7cR..66k2Q8kto66
 Ni469EK24kIU7A,b0kWcQ687f9.2C0mJ0mMmGEm2GKL.aGK0mpKadM1M0CLEkp66L76DNDD76L
 767f9h1YYBAV7M098HM1M0C5IYP76L767np.,t8,d6ve6PM0Hk2KIbQbU.HsJZPOd1Z1F7R9Xg
 sQ7N8PM0g6qU7g6in4AVGhgbBhnNNWGu.NvPm0M8M0ZPNb96pVhAavgV7MGYCo3.cQ9vQ,,VlW
 uYUg,9WUQeVpCrN1HM103.aIrYivg,O3GKR007Xm,Q582UCVYBZvg,H6N8LEe17P1HMFMGRPOk
 48oWS2AdiBhoBVBgcCZ6cFU0CyIhgstETfPdfQT9PNPNZvQCJuGqVGLtmKWKqtCK.4jZ3D.UiQ
 6G5EWKqtCK.Q6GrkEt.85...CLL.U2V.IS2U.UIU.U76.,6.,..1cUXDJ9XGhighgmRiiQ88pu
 m470,Mwd0UnpZGhighA70,cw5.,6.QJ,k12U.QI2U.sU6S.bf9bWHZitZhZZcZRC,Mw.ELMSN1
 2Umz.0U..2,I96.IEK4.RNEd1YiZ7FCb.6,6..UYU.AU.U.UUQoOF.2UlSw,2UTyB,M.M.6.,U
 0KyB6.2..c4E.k.Ue64VT.E.0t.U..61lbAUgQnPt0lLU8ssH2qqmsQCor..62,U...W.0.A,,
 U.RfnlA9e.az86Utb.rfc7UtwZ.Qe,...
 --- end of encoding ---

Тест
Код:
MODULE TestIni;

   IMPORT Files, log := StdLog, IniFiles;
   
   (* TestIni.do *)
   PROCEDURE do*;
      VAR d: IniFiles.Dictionary; loc: Files.Locator; val: IniFiles.String; res: INTEGER;
      i, n: INTEGER;
   BEGIN
      loc := Files.dir.This("");
      d := IniFiles.Load(loc, "test.ini");
      ASSERT(d # NIL, 20);
      d.GetStr("section:key3", "none", val);
      log.String('val = ' + val$); log.Ln;
      n := d.GetSecCount();
      FOR i := 0 TO n - 1 DO
         d.GetSecName(i, val);
         log.Char("#"); log.Int(i); log.String(' ' + val$); log.Ln
      END;
      d.Save(loc, "test1.ini", res);
      ASSERT(res = 0, 20);
   END do;

END TestIni.

Попробуйте. Вчера переписал исходники с языка С для Blackbox-ЁЩЕ НЕ ОБКАТАЛ, могут быть траблы с хэшами. Оригинал функции для вычисления хэша
Код:
unsigned dictionary_hash(char * key)
{
   int         len ;
   unsigned   hash ;
   int         i ;

   len = strlen(key);
   for (hash=0, i=0 ; i<len ; i++) {
      hash += (unsigned)key[i] ;
      hash += (hash<<10);
      hash ^= (hash>>6) ;
   }
   hash += (hash <<3);
   hash ^= (hash >>11);
   hash += (hash <<15);
   return hash ;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 03 Декабрь, 2006 00:18 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Посмотрел, вариант в целом интересный. Особенно раздел CONST. : ) Ну, да ладно, это детали реализации.

Я тоже написал свой вариант. У меня получилась подсистема Cfg. Я постарался сделать ее с прицелом на возможность прозрачной работы с реестром и прочими хранилищами. Не знаю, насколько у меня это получилось.

Краткое описание:
Модуль CfgBase содержит абстрактный тип Group, представляющий некую группу параметров. Общий принцип: хранение параметров в виде пар "имя-значение". Каждый параметр однозначно идентифицируется именем (строка) и содержит строковое значение. Методы: GetVal, SetVal, DeleteKey.
Предполагается, что конечному пользвателю услуг модуля (т.е. тому объекту, который будет сохранять или читать свои свои параметры) достаточно передать экземпляр объекта CfgBase.Group, и он по имени найдет интересующие его значения. Остальное его не касается.

Модуль CfgIni содержит типы Section(CfgBase.Group) и File.
Тип Section представляет поименованную секцию ini-файла и реализует хранение параметров и доступ к ним. Экспортированные процедуры - те же, что в CfgBase.Group, ничего нового.
Тип File представляет набор секций (даже загруженных из нескольких разных файлов и прочих источников). Экспортированы следующие методы: FindSection, GetSection, DeleteSection, Load, Save.
File.FindSection отличается от File.GetSection тем, что последний никогда не вернет NIL. GetSection создает секцию с указанным именем, если она не существует в файле.
Методы Load и Save в качестве параметра принимают объект типа CfgIni.Reader и CfgIni.Writer соотвественно.
Типы Reader и Writer - абстрактные интерфейсы, экспортирующие по одной процедуре (экспорт только для реализации): ReadLine и WriteLine соответственно. Реализация данных райдеров вынесена в модуль CfgIniRiders.

Модуль CfgIniRiders реализует два типа: TextReader(CfgIni.Reader) и TextWriter(CfgIni.Writer). Эти типы поддерживают работу с TextModels.Reader и TextModels.Writer соответственно. При желании работать с другими носителями данных (например, с файлами напрямую), можно добавить в этот модуль реализацию нужных райдеров.

Модуль MateConfig используется в подсистеме Mate для сохранения настроек посредством подсистемы Cfg. В этом модуле мы решили, что хотим 1) работать с ini-файлами, а не, например, реестром; 2) работать через текстовые объекты TextModels.Model, а не, например, прямо с файлом. Оба эти решения локализованы в данном модуле и могут быть изменены без какой-либо правки клиентских модулей или подсистемы Cfg.

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

Код:
MODULE MatePortDlg;

   IMPORT Dialog, CfgBase, CfgMapper, MateConfig, ...;

   CONST
      iniSection = 'MatePortDlg'; (* имя модуля - уникальный идентификатор секции *)

   VAR
      rec*: RECORD
         port*: Dialog.String;
         x*: INTEGER (* это просто для примера *)
      END;

   PROCEDURE GetSection (): CfgBase.Group;
   BEGIN
      RETURN MateConfig.GetSection(iniSection)
   END GetSection;

   PROCEDURE LoadSettings ();
      VAR
         g: CfgBase.Group;
         val: POINTER TO ARRAY OF CHAR;
   BEGIN
      g := GetSection();
      g.GetVal('ComPort', val);
      IF val = NIL THEN
         Dialog.MapString('#Mate:Com1,19200', rec.port)
      ELSE
         rec.port := val$
      END;
      rec.x := CfgMapper.GetInt(g, 'x', rec.x)
   END LoadSettings;

   PROCEDURE SaveSettings ();
      VAR g: CfgBase.Group;
   BEGIN
      g := GetSection();
      g.SetVal('ComPort', rec.port$);
      CfgMapper.SetInt(g, 'x', rec.x)
   END SaveSettings;

(* ...различные процедуры модуля... *)

BEGIN
   LoadSettings()
END MatePortDlg.


Саму подсистему в стандартнокодированном виде выложил сюда: Cfg.

Всяческая критика, особенно конструктивная, категорически приветствуется!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 03 Декабрь, 2006 10:31 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 18:08
Сообщения: 76
Александр Ильин писал(а):
Посмотрел, вариант в целом интересный. Особенно раздел CONST. : )

Зато просто :))). А для больших конфигов надо конечно дорабатывать, но для таких целей (если много данных в конфигурации) имхо лучше yaml, исходники парсеров на С и Яве скачал, теперь репу чешу :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 09 Декабрь, 2006 03:11 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
Вот ещё один :P

Код:
MODULE AixRdConf; (* Configuration reader; Alexander Shiryaev, 09.12.06 *)

   (* EBNF:
      conf = { line eoln } [ line ] 0X .
      line = [ spaces ] [ valuable ] [ spaces ] [ comment ] .
      valuable = key [ spaces ] '=' [ spaces ] value .
      comment = '#' IGNORE .
      key = key_ident { key_ident } .
      value = string | integer | boolean .
      string = { string_ident } .
      string_ident = key_ident | '/' | '.' | '-' .
      key_ident = 'a'..'z' | 'A'..'Z' | digit | '_' .
      integer = [ '+' | '-' ] digit { digit } .
      digit = '0'..'9' .
      boolean = "on" | "off" .
      spaces = { ' ' | 09X } .
      eoln = ( 0AX | 0DX ) { 0AX | 0DX } .
   *)
   
   CONST
      ok* = 0;
      unexpectedCharacter* = 1;
      identTooLong* = 2;
      integerTooLong* = 3;
      invalidKey* = 4;
      alreadyAccepted* = 5;
      notAllAccepted* = 6;

   TYPE
      Node* = POINTER TO ABSTRACT RECORD
         next: Node;
         key: POINTER TO ARRAY OF CHAR;
         accepted: BOOLEAN
      END;
      BooleanParameter* = POINTER TO RECORD
         bool-: BOOLEAN
      END;
      BooleanNode = POINTER TO RECORD (Node)
         p: BooleanParameter
      END;
      IntegerParameter* = POINTER TO RECORD
         int-: INTEGER
      END;
      IntegerNode = POINTER TO RECORD (Node)
         p: IntegerParameter
      END;
      StringParameter* = POINTER TO RECORD
         str-: POINTER TO ARRAY OF CHAR
      END;
      StringNode = POINTER TO RECORD (Node)
         p: StringParameter
      END;
      Stream* = POINTER TO ABSTRACT RECORD
      END;

   PROCEDURE CopyString (IN x: ARRAY OF CHAR): POINTER TO ARRAY OF CHAR;
      VAR s: POINTER TO ARRAY OF CHAR;
   BEGIN
      NEW(s, LEN(x$) + 1);
      s^ := x$;
      RETURN s
   END CopyString;

   PROCEDURE BindBoolean* (VAR node: Node; IN key: ARRAY OF CHAR; p: BooleanParameter);
      VAR nb: BooleanNode;
   BEGIN
      NEW(nb);
      nb.key := CopyString(key);
      nb.p := p;
      nb.accepted := FALSE;
      nb.next := node;
      node := nb
   END BindBoolean;

   PROCEDURE BindInteger* (VAR node: Node; IN key: ARRAY OF CHAR; p: IntegerParameter);
      VAR ni: IntegerNode;
   BEGIN
      NEW(ni);
      ni.key := CopyString(key);
      ni.p := p;
      ni.accepted := FALSE;
      ni.next := node;
      node := ni
   END BindInteger;

   PROCEDURE BindString* (VAR node: Node; IN key: ARRAY OF CHAR; p: StringParameter);
      VAR ns: StringNode;
   BEGIN
      NEW(ns);
      ns.key := CopyString(key);
      ns.p := p;
      ns.accepted := FALSE;
      ns.next := node;
      node := ns
   END BindString;
   
   PROCEDURE (s: Stream) Get- (OUT c: CHAR), NEW, ABSTRACT;
   
   PROCEDURE FindNode (n: Node; IN key: ARRAY OF CHAR): Node;
   BEGIN
      WHILE (n # NIL) & (n.key^ # key) DO
         n := n.next
      END;
      RETURN n
   END FindNode;
   
   PROCEDURE Read* (node: Node; s: Stream; OUT res: INTEGER);
      CONST bufLen = 1024;
      VAR c: CHAR;
         str: ARRAY bufLen OF CHAR;
         int: INTEGER;
         bool: BOOLEAN;
         n: Node;
      
      PROCEDURE Next;
      BEGIN
         s.Get(c)
      END Next;
      
      PROCEDURE Spaces;
      BEGIN
         WHILE (c = ' ') OR (c = 09X) DO
            Next
         END
      END Spaces;
      
      PROCEDURE IsKeyIdent (c: CHAR): BOOLEAN;
      BEGIN
         RETURN (c >= 'a') & (c <= 'z') OR (c >= 'A') & (c <= 'Z') OR (c >= '0') & (c <= '9') OR (c = '_')
      END IsKeyIdent;
      
      PROCEDURE IsStringIdent (c: CHAR): BOOLEAN;
      BEGIN
         RETURN IsKeyIdent(c) OR (c = '/') OR (c = '.') OR (c = '-')
      END IsStringIdent;
      
      PROCEDURE IsDigit (c: CHAR): BOOLEAN;
      BEGIN
         RETURN (c >= '0') & (c <= '9')
      END IsDigit;
      
      PROCEDURE EoLn;
      BEGIN
         WHILE (c = 0AX) OR (c = 0DX) DO
            Next
         END
      END EoLn;
      
      PROCEDURE Expect (ch: CHAR);
      BEGIN
         IF c = ch THEN
            Next
         ELSE
            res := unexpectedCharacter
         END
      END Expect;
      
      PROCEDURE Key;
         VAR i: INTEGER;
      BEGIN
         i := 0;
         WHILE (i < bufLen) & IsKeyIdent(c) DO
            str[i] := c;
            INC(i);
            Next
         END;
         
         IF i = bufLen THEN
            res := identTooLong
         ELSE
            str[i] := 0X
         END
      END Key;
      
      PROCEDURE String;
         VAR i: INTEGER;
      BEGIN
         i := 0;
         WHILE (i < bufLen) & IsStringIdent(c) DO
            str[i] := c;
            INC(i);
            Next
         END;
         
         IF i = bufLen THEN
            res := identTooLong
         ELSE
            str[i] := 0X
         END
      END String;
      
      PROCEDURE Integer;
         VAR sign, overflow: BOOLEAN;
            i: INTEGER;
      BEGIN
         IF c = '+' THEN
            sign := FALSE;
            Next
         ELSIF c = '-' THEN
            sign := TRUE;
            Next
         ELSE
            sign := FALSE
         END;
         IF IsDigit(c) THEN
            int := 0;
            LOOP
               i := ORD(c) - ORD('0');
               overflow := (int > (MAX(INTEGER) - i) DIV 10);
               IF overflow THEN EXIT END;
               int := int * 10 + i;
               Next;
               IF ~IsDigit(c) THEN EXIT END
            END;
            IF overflow THEN
               res := integerTooLong
            ELSIF sign THEN
               int := -int
            END
         ELSE
            res := unexpectedCharacter
         END
      END Integer;
      
      PROCEDURE Boolean;
      BEGIN
         IF c = 'o' THEN
            Next;
            IF c = 'n' THEN
               Next;
               bool := TRUE
            ELSIF c = 'f' THEN
               Next;
               IF c = 'f' THEN
                  Next;
                  bool := FALSE
               ELSE
                  res := unexpectedCharacter
               END
            ELSE
               res := unexpectedCharacter
            END
         ELSE
            res := unexpectedCharacter
         END
      END Boolean;
      
      PROCEDURE Value;
      BEGIN
         n := FindNode(node, str);
         IF n # NIL THEN
            IF ~n.accepted THEN
               WITH n: StringNode DO
                  String
               | n: IntegerNode DO
                  Integer
               | n: BooleanNode DO
                  Boolean
               END
            ELSE
               res := alreadyAccepted
            END
         ELSE
            res := invalidKey
         END
      END Value;
      
      PROCEDURE Line;
      BEGIN
         Spaces;
         IF IsKeyIdent(c) THEN
            Key;
            IF res = ok THEN
               Spaces;
               Expect('=');
               IF res = ok THEN
                  Spaces;
                  Value
               END
            END
         END;
         
         IF res = ok THEN
            Spaces;
            
            IF c = '#' THEN
               Next;
               WHILE (c # 0AX) & (c # 0DX) & (c # 0X) DO
                  Next
               END
            END;
            
            IF (c = 0AX) OR (c = 0DX) THEN
               EoLn
            ELSIF c = 0X THEN
            ELSE
               res := unexpectedCharacter
            END;
            
            IF (res = ok) & (n # NIL) THEN
               WITH n: StringNode DO
                  n.p.str := CopyString(str)
               | n: IntegerNode DO
                  n.p.int := int
               | n: BooleanNode DO
                  n.p.bool := bool
               END;
               n.accepted := TRUE
            END
         END
      END Line;
      
   BEGIN
      ASSERT(n = NIL);
      
      res := ok;
      Next;
      WHILE (c # 0X) & (res = ok) DO
         Line
      END;
      
      IF res = ok THEN
         n := node;
         WHILE (n # NIL) & n.accepted DO
            n := n.next
         END;
         IF n # NIL THEN
            res := notAllAccepted
         END
      END
   END Read;

END AixRdConf.


Код:
MODULE TmpRdConfTest;

   IMPORT Log := StdLog, RdConf := AixRdConf;

   TYPE
      Stream = POINTER TO RECORD (RdConf.Stream)
         i: INTEGER
      END;

   PROCEDURE (s: Stream) Get (OUT c: CHAR);
      VAR str: ARRAY 1024 OF CHAR;
   BEGIN
      str := "sleep_time_minutes = 60" + 0AX + "use_certificates = off" + 0AX + "ssh_user_keys_path=.ssh/authorized_keys";
      c := str[s.i];
      INC(s.i)
   END Get;

   PROCEDURE Do*;
      VAR conf: RdConf.Node;
         int: RdConf.IntegerParameter;
         bool: RdConf.BooleanParameter;
         str: RdConf.StringParameter;
         s: Stream;
         res: INTEGER;
   BEGIN
      NEW(int);
      NEW(bool);
      NEW(str);
      NEW(s); s.i := 0;
      
      ASSERT(conf = NIL);
      
      RdConf.BindInteger(conf, "sleep_time_minutes", int);
      RdConf.BindBoolean(conf, "use_certificates", bool);
      RdConf.BindString(conf, "ssh_user_keys_path", str);
      RdConf.Read(conf, s, res);
      
      IF res = RdConf.ok THEN
         Log.Int(int.int);
         Log.Tab;
         Log.Bool(bool.bool);
         Log.Tab;
         Log.String(str.str);
      ELSE
         Log.String("error:");
         Log.Tab;
         Log.Int(res)
      END;
      Log.Ln
   END Do;

END TmpRdConfTest.

(*)TmpRdConfTest.Do


Для пользователя исключены следующие ошибки:
* указаны не все параметры
* дублирование параметров

3 типа значений:
* STRING
* INTEGER
* BOOLEAN


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 09 Декабрь, 2006 05:55 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Вот только что сделал еще одну реализацию - которая, видимо, войдет в BB ServicePack4. Наконец-то отвязал HostRegisrty от реестра, все стандартные опции сохраняются в Host/Rsrc/Config.ini/[Preferences].
Предполагаемо рекомендуемый (во завернул фразу :-) ) формат хранения настроек - у каждой подсистемы свой Rsrc/Config.ini, на быстрый доступ к нему заточена StdIniFiles.Open. Можно читать-писать сразу пачку ключей напрямую в поля записей.
Выкладываю std-coded пакет с тремя файлами:
StdIniFiles, HostIniFiles, HostRegistry.

Код:
StdCoder.Decode ..,1 ..,,....b8R7v9PuP7v9HePHfFH9P9vQRtP7vMWorCLuy0....ZOND
 POb9RZPSRtP7vM.AO,...
 1Ak...QW,...58FTuPE,5TWyqlKrqKKrGrtumdGLmGorCquU2hgnRAXDFTvMUn7FTvMf1G2sET
 fPdPMHfP9fQbf9hOO9vR7ONbvMoedhgrRiioedFWUkTeoxhmhgnpZHZijJC7ONbvM0.,.S.aFA
 E.QklbcjRAktgdjZgZZh2hgnlsDor.kay4.qorGqmQiig76FUHZijJCbnWmqmqKWKqtcw7.,.D
 v3A,wfLE.0E.cUGpmWLuOpoKqvCbHZiYpedhA704TeKKw.bHfEWUmL.6..D.Hs36.,sUGpmWbB
 xhYhAbndMHT9NY6Mw.sQq2Y6cwB.0.bM3w,QVJE.0E.kd5.86.QC18RdfQHfMf9R9vQ7ONb17.
 ,.D,,6.I16.M.6.JFA0z.U.2m,.58.AU0KyB.,U01,UO.,.16.c8.2UwK.606.d.1606.j,K.I
 7AU8U.g3AU2U.I.AU5U.I3,U3U.Y4AU4U.Y3AU72.g7AU6U.g7616.F11s0kdk.e.A7M06.k.q
 .0kek.m.0kSF,8Mtr.0E..UO.,.16.c8W,4.072U4,311c06.D,.R.1.0kuk.K.0knK.1c,kFG
 .1.IBA.EjU4U.I7AUB.X11M,6.L5O.0kd.kHkzrobGoemoW0mdGLmaIraKXaKqKqtin4qk2aoa
 0pb8Je0GXaKqKag2YBhgoBgg2Y9hgmphZZhg2YHBfHZe3hdvgVBAVIBfEhcBAV7QdZBjCBghhg
 e2Yx2Y,JeGBcN3YDpcUQc6BcGRbBAV7QeZRgoBhjphe2Yx2YExd7pdIhcG3YIxdUAc0ReIJe,R
 cI3YGhc1xdGZcBAV7AVjRheIbUIcDxdAhc,pdBAV7gcCZcvgV7AVABhnZie2Yx22.EdKoV.ohZ
 3joJZu2YABhnZivg,aUVhhZdC,NEZeIcAfdB,tHB86k4ak2.YcdJiZRgoxBnf8,ND..10.UUgc
 CZcvUBAVKBcGhV76NHfQP79,tQd9N7OOZP9p767OOZPNUvgV7A,0JdyoVKIWKJdKIEWmtKqleH
 ECpmCKukI0GaaqtI3FN8p76NOOYZUod3xeg2Y,JcH,in4aEc83...sENPN1fQJ79,dH90.k4aE
 c....8pm4Km8oryKqeGEWmYuIEiqmaLR0mZKqwu2iHEyoeGJEWLR0GVy2M8N76ROF..a.....M
 GR9RJ76F,...MGR8J9uF9eIH79,,.......6HHvQe0....1eIkbMGR0QbUoe,JeUYhZphu2Y7p
 7kI........b8RZPORvNJ76FNG.....Q6AZg.......wemBhohg0xhjZB...WLR0GV........
 .AdiZie....H0.........m2...MGR86lfC,NE.A7.........b8RZPO.QB..6S.U1,...PM0.
 Eayqriqu0rYGrmqKEWmYuYmJbUAcCBfGhc1RbUwdJloeHEqomGbiAdohghBZvgV7cJ1GEGrw0r
 meHEiYmViYet3Cr76PvP7fC,tG91gdjZgpZhZRbUAgoZCp76LONU7ZiZNEd9RZvCPM03OFDOGR
 O0Fd8,tMZPN19R996196PPNdPM,NOdPN0GnyKt0mk0mnmqr8qkmKEOrk8ro4Klmqm0Gs4qtCrm
 GKE4qt0Gf42VPMZPMPPNdPNZ96JN8PM0HMMd9RZf9TfMJ96pND,NH99RuGv4KtyIleqRqk2akk
 UoBjk3YugbU.8rmCKeaLsin4ak2.hPOb96pND,,ggs3ijJiohgYRbBA,UVZgm3Yug5bOKb0RNE
 7eIFdQHtCPM0.PvP796pNDuoYmoRqk2.GqmCrl0GRqXH,oe,ZdcQdZJC6J69,tIn0YeN3ecIid
 AZvg,.V9RZ96cH.UZ3jo3Yug5.qomGrkwcZZiI3hdRi7ZiZhhcAgoZCN76HP8PM09eH0Gayqr.
 QbBAVB..W0..Z0J76FdJ1eI8rmCKR0mUu2AZg2YC,98KdOFRuIHeENOFrN1HM0h0H9R9HK0mmm
 qmIbUg7MGsCM0HsQ5fC,NH91buM1fPRPNZvCPM0AViVu2YB,ROMPPNrN1HU7QioJiu2Y,J8aZl
 2amYaUwd432sCk2aKrGrkeHE4Id..a2kRq.aEqKKrmGEaKRAdC,.HcMp7630sCPM0AVjdC,dET
 0.akkmKqyopeHE.U0,PM0442Yug5deIfOFrN1HEayqri4EI8rmCKK0moGrmA3sQ5f95uPRfP9v
 Md9JT98H9R91.buM1nRqk2akfWoYmoW0GzCrlummyqt0GWyo4ak2aktsF99RTeMJfH1PPWGr4q
 qAZvg,Qc,Re33YnRgiYicBBR7Rn9QyIXqk2ak2mLEqomkouKuGpw0LK0maK4CrYuKuG3.8qwGr
 mGpw0LRqk2aU7QiZRgiIeZBgYB7d98RPMPHK0moamRq.akYOIECrmCKLyqp0GeWoWuo4a.HktC
 ao,VORdPGR9RhOMN98HP8Pk2ak2KIaCpWqk2aU7MMUuEX4IaCpWU7gcCN1HUw,sPTHeaLse1AV
 nhA8382WGr44IgdQbBU7A7UjFe.A,bvM.cETvPOpkmaWBZBA,akWm2k2AAER..HMFR0YDUVJim
 Zet3iu.HMGsMR,IcVRiZZet3icAZUgbUgdZVX3hVJiIBD,7JFOFU7sQ9XGVHZCwgcohVhBQCZP
 8r,aU7VZlr6J.a.HWAhcC3ZnZimZYdQZl2Yy2YnRAUAhgi3Zd2YI3d3,a.CLuQfnRgiYC.gZlg
 fUIbx2Yk2fBAV7M0g6i1A,Crl.03b8RZ1hOMN98b9RZ99,tPLP8PM0Hk2gcA,Hk2MMUuEX.M0K
 Ibg,AV3Z7HeF,tQ51cEkw..HXIFE.M0CrmcIMGGLaEIuqkUdphoBgg2YghgiBZvg,A,BuHZ86H
 96pND0HEGpb0maaIbWmtCKL.NWc69,7PAZhAaUYcDh,A,Crl.aIrGqmWLIaKK0mmkI.HUZZhZh
 hi2epZi7FfkouKuQfdhfdgV7k2gcCtCk2o6.qoYu2.m2F,NXd2YIxdUQiXp3.WWh6670A,C5U7
 ,kmkI.HUZViMR.2adgV7A,HkWM1M090Eag6EbQ5sQQ8AV7AVBkW.CrmsPUVZhgx7PM09eH0GdK
 qkQbBM103.UusI.HlfUe2Yco8ICeX,,50...O3a4m0NXu.A7Q5Hk2aktCKR.C3u4M0aErER.u2
 i1AVnZCplU..0mV.M0HXVJ5..A7w6.HMOp76H0.AVj,.rV0,6H.ghcUg.a0QiXpZ1,..UHVvk2
 S3..k2C5D0.F,a0sE.R,YCw7PU7YDUdFe69.b1d0.3PSUu.HMO,dCvltC4kYYiKVdQbBA,aktK
 4jeQH9Ra2F,m0HN1AVw,sPY8e1AV7p6b1EVyqrmKfUUY82Yd32AaUgcARe33Yd3YuEMgcC,Hk2
 C5...Ey.44cCk2a2.MMUckS.CaV,,7JM1M0CLu2YuEF8mRq.aUnRAd1SomQeoJCS4QC.rN1M0C
 rm.Q8EIu4sQAZBA,akWmY7,.30a5.MOUU.k2o6.0XIla..N0mWAhcCNOR9R1P8HN9X7670A,Cr
 l.aYY,gAA3k2MORnki3,dCggghARNGR9Rh0HN1HU7MFRmRU7cF.g7.Ea.m2kkaWUYeD7H9eH.P
 NA.a.H1r06APM0Hk2g6.HktK4U7Fa.UdpBam4a.HMFg,6HKo4A,uYv.bvMC3qk2akWM0PkW66j
 eQHXvgV7g,V0.GKR0GWa4wBaGEyIsKKreWcYhjRgu2Y4BhgFLmorCqkGrr8rR0mYuYaBhghgg2
 YnhgXZCIbUA6kbsEM8p76bONUg2YC,1md.6I....NOObHJ6PI5ktUV,.IbUA6..Y7Y3......U
 1ZhZVU23I5ktUV,.I5..Y3..M1.UHhgoZcdJCUe687fC.kIin4I6o7Ad4FuG40mS0GbaIa0GeW
 2M0GLmG2enSYgBA,9Wvk2G4,,ak4UUQeZZCgAkRM103.yIs.HeHCru8qtartGrmqKKQCUu..Uu
 sI.rN1o8YhdRioJ5BOOQCMGRfNTvCPM030EqaqtGLEenSocdZBYgdJiiYdjRgABhn78BOON1Ee
 WqoCLI8GFamIi1HsJUcYhdRC,t6,dHH8HH76B76F7PHXiohVhhZ3YX2YnhiW,9nI0GWy2aEqEE
 e1NPObHLgAqk2a.i1aIXYhdFEC022.HcI98JfeIR867POZf9T8Q9fPFdFH9P.G3YhdRCRlkM8R
 7JFPOIYGRimRgWAZg2YWQcjphaBhbpZdphdJYg2YnhAkIqk2akWm2M0.uoYmo4ak2o7PkWuYUw
 dkhArN1PMFR8FCJuG4O2cUXDJ9X1xhiZimxhgZhZJinp3dnVGLtmKWKqt2Ul1.UiQ6G5EWKqtC
 K.Q6AA.cQ...sQR,.G20EtV.UIU.U72U.E..k.8ssHpmcIf9P9fQbf9bWGhigFWE.4Te.sQRdI
 f9P9HWE.8z,E.0.LJ.w.QI,E.0U10.bf9bWHZitZhZZcZRC,Mw.ELMSN12Umz.0U..2,I96.IE
 .EL4IuMOU2tQ0U2U...G00k.0.0.0mFf3,E.4vl5UTyB4.4.0E.cUZT1E..UO.,.1.e06.2UEC
 .6..mEw7169rwKiEw3c0Cy2,U1xB..0,0..606.k22.0sfCbsQXX8Utj00MyfU.Qfc7ix6a.6r
 ,...
 1Ak...rc,...58FTuPE,5TWyqlKrqKKrGrtumdGLmGorCquU2hgnRAXDFTvMUn7FTvMf1G2sET
 fPdPMHfP9fQbf9hOO9vR7ONbvMoedhgrRiioedFWUkTeoxhmhgnpZHZijJC7ONbvM0.,.S.GvA
 U.QklbcjRAktgdjZgZZh2hgnlsDor.kay4.qorGqmQiig76FUHZijJCbnWmqmqKWKqtcw7.,.3
 M4A,IzMU.U08J99SdfJHPNjvQCJuGKfaqmY6MwdONl1QCh0708T,U..w.YoMU.sUGpmWbBxhYh
 AbndMHT9NY6Mw.sQq2Y6cwB.0.Rh3w,ooKE.2.gL2U00.bnUGLu8ro8quGrmCLWKqtE0E.kHE.
 0.p.0.4.I3l6w1.0E65.Al16.1cUZT1E..UO.,.1.e0.,6j3.O.IW3k.O.oW,k.2.Aw5k.O.w,
 AU4.Tg.AU4.LQ.wzBxd2heAhcU2djRioBdiBh4BhghgnRbBgV7AdB3eDJeI3YHZiYB7.N76b8R
 ZPORvNb99,dFH9P91FuPbHXaKqULBhiBckBhg2Y9hgmphZZhg2YH3YugbUQeNReIhcBRbBAVBA
 VIBfEhcBAV7QdZBjCBghhgUgbUQeoZA.umZKqwu2in4ak2CpmCKuaqruKEqHE0pbaIbGpW8JEG
 pb0GdKoVyIdGIEWmdGLm.kdKqlG5am4ak2aEnaKqKKR0GYyqt.bHXKLqmKb4qqK4AViBghhgu2
 Y,JeGBcN3Ymgaq2YDpcUQc6BcGhV7AV3pd2RbBAV7YcdJiZRgoxBn96v76V0....6FHfQ91AZU
 gcCZcvUBAVEJeDRc3ZcJJe33YcQiZRgu2YHhgXZC66NOOb9R,78HdC,tId9N.6HHvQdvCPUKBc
 G3YgBhn79,7P1vQdfC,tId1.UvU7AVWhiaJbUAcG,XdBb7Cd76TeF,,in4ak2AVmhgnZZUAhg2
 YeJbUAdCZe3xc3Jevg,3OFDOGRO1HM03XUIbx2YWIYvgV7AVmFEenSwedpBoZ5hgo3emBhqBgo
 hgEJijpgdZBbON51SJICrmCKLuqkqag2YWhiaZZUYd3pdcIgppgdYZUQiZRABPOAZvgV7MO,dC
 v76VtCPM0SJYaIaKIE8quOqhaqi0mF0GMWJEGobqk2ak2aIX0Gq4qt2Yx2YCBdA3YI3d3pdBA,
 HM0ROFj88NPObnIiHEmqkC5pND,7PHvQqk2ak2KIaCpWqk2aU7o7MMbHLuqmWLuamR0022MMbH
 LUBAV7MFR0cO,dCvFM.j02ZWhia,kI0GH0GIeKEmHEmoW6P1vQMMPnIqmMaGEGobq.akYcMffN
 .3ND376d8G9GEmqk.QfehfUIbxcMf1gcARe33YgBA..0Hg0mWuIW.HMGRuEFNOHtC,NGRuEFdO
 HN1HU3,6P1vQd1.UvgV7kYkogV7AV3,Ie3ZeJJeC3YgBBMFRGEmooCbvk428..p,UdsENPN1fQ
 rN1o8IgpdC.8HEyIX.k2aEtcC,NGR0U0,cMOqh0ni0GRq12YWhiaRflgfUIbx.Pk285,,jGr2C
 SJtaKuKKcAhq,y4Q851S3CKLu4m0Y3bPNoAAZBAV3p7CIqK4M0P...p,UdcI9PM7vIdfQ66FNG
 R86LPNnfC,tG9PSR0r76TOJd86bfC,NEZ0yIX00AZvgV7cJcQ9vQp,.M0HcMOKR.AakIao2YDp
 6kRcE.85.U5,..b8RZPOwecQiZRgioBY3LPNn99,d6FuPb9RH0sQuqrGLXyquuKmKKm8GK0GlK
 5m284HVnVaVdQ5Ad4,,t6,d6FuP.sQ..,7JFWBk2CrmCKLyqp0GRqXIJeJhcvgV7M00GRcMYYB
 AV7gcAl4AV7MN.oc,ZdHh6gcCN1H.,dI9PM.in4ak428..pld..aIrGLEWmYu2I5.i16Sp76He
 HUdQ5o8Qiu2Y,,8HO00.AV7AVmFR.sCI6.b1ZON19Nb0SKIiqmaLKM8rN1HkYOYnhgXpZjFeWo
 WU7QeoJCQiiQ8ZPOYejBdiZicQig2YsZZUIiZRidQbBk2C5ERcQ9vQ,ND,7APM0H.P.00A7dvC
 PM0PEc..I5b0.cETvPN96FNGUu...8obyIaKoUuoIin4cJMOp76HeHw6..b1ZmkA7WmpKqwmWd
 BZvg,aIXUiwBG3k2WLEenSAhUQYU2aBA,M0PM09WU.30rN1HUE,.cC..A7mooCbU2Z7,e1..lX
 ,J8sHAdClXEEOpU8JEmqmuKR0mY.a0o8QioJiu2Y,,41U1,AV7AVdZZUohg2YqBggZZUQidxgu
 2Y7,QbBcE.C58ZVtIknW0mWnZimBZvg,aIXUiwB.AVi3Yug5VtC,NO,dCv,Pk2akf.b9RZvKHP
 LC0l8670AV7Fr0GTqHEmoWuYsBZUYe6h6,tQ91I5O2QbUIe3ZeJJ8KIbG2M0hPMN96pND0XUQi
 dxgUIbxMArN1HU7A7CLu.v763N9376d0Ahb,PNAr76H02Y3,M0j02ZnZim,xND,d6Vd6H76B76
 CLu.tND,d6nd6H767uH,dR19P,,X7A,d8,dR19PiGEyIdGIICLuUd2Yh2YDJe2d6Vd6iHEa2..
 H6SrePv86pVnBhbd8,dRQbBA,akY.66vVgIYUY8MGRuEM1ak2akWmY7pcUQCUX6AYe6VnhA.O2
 .k4ak2AV3p7r,akYu2RP8PM0HkW.YhZphUI5uq4aU3l4UU.HGuUvM1H6I.UZdC.kf8roGbHZCw
 gU.cC.kY2YnJ510w7EdaWBEfEtcC6JS2.UmFEe1jGrUL,Vmo.y4Q8kfUioBY369YZUQiZFnkI0
 m4akWkf8rosIUvM1..cCC3.U7pho32sOI5.iXsJbUA7Ud.ktcC.4HP0mb.i1.Q8ktAdiZiIxhH
 ZimBBWGwmGECLuA3sQsJZPOQ8UfFK6RgV7g6.a2rVB6I....U0xhjZhU.cC..82.cJMO.sC.kY
 OYs3YI37AhUI54HEKIaCZUAhUI50HEKIbk2akt.MG23Y3Hn2ak2qU3,EVkRM103....MGY72Yc
 .I5.MG2ju2Y,,y2H0M8EfUgIhg2YUohu2Y7,QbUQioJiu.cAf,Q666eHE42MA.k4.Er.rlo.qU
 7w8Er0GS00U2xdBk2aIX2Zi3Yy2YkAZUo2aKEmHEm2CLu8rIaGEGJYktGbPVuEFmWv2Y7pd1NO
 00.b0QC.Uc2jPphRZZUQid66J96pND01sJUcsKJPL,t6,Vd..UdEW2YnZCr0sQreOiHEa2sC,,
 eaUgcC,AdCFrk2K2r,HeFaKEm1.H76d8G.r06Al8698HbWnZCmoWuIIkIgZUAaR3Yu.o7kt.sI
 .LXgsQdXBMF22kY.i1PEc.kXKKuOoumKqUU2ZgxhXJbUocdZBbHayql4KuyKtiHE66BPONPNpl
 U.T0EEyoecP1PP9fCW2O2Cb4,M8rN1o8ogu2Y4BBkomavgV7M0H6Rp76LONZ1R7Jn9Q9vCP.Hc
 NKKqGKR0mZ.yIleKWKqtCqRqk2aU7ICe1.q..OKEe1BOONntQioZg2BhmpZDZhY3ZgxBN76BPO
 NHGmGEOoUm2HtCMGBGn0mS0Gb.g,aEn.sQ.odZxicYhjRAOoU.M0H0CGEuoYm2.aEnuGdKqnaq
 tGrm8LIOqomaYEF8GK0Ge8peYZUIiZN8M0akYcQ9HECGE0HEGJY.aUa32od7N1HM0HM09WBM0.
 K2rV7A7O4EE.6R,dCvlZKKtUIVDpgcogdQbBk2OKLCIqyqtKqRq.AB2Yu..FPObfFHPN2ZoZZU
 cP1PP8mIi1QeigdDpe33ZHpZKBcA3Z7pdI,N76BP8,t8,dNHPNNHLyKnOqtmGECJL4IW8JIuqk
 qadYZU2dj,QCVPMd9ONONRP8PM0HEagcBM0HcP1XUIbxc63N1HM09eHqU3FESomG5.rN1qUE,U
 cYgu2Y2BhmhAMS0mb0rmuKEWGqyau.6HAAkY.mGECrmYCIbUA6.UdIbUQeZ,in4ak2O3uqkqau
 .UndFf1sCAV7AVnFRQ8.I6o7wcZZi4,68NvP599O4mWiBAamRkYOYiBA0mF0GF8GEGJY.HcHsQ
 9nIin4M0bXioA2Yug5RPMPHGin4a.ErEEe1bPN59R67rN1HUG,0mtKaBAV7gcA,.cHH8HP.Rm4
 UUwdkhArN1HM103...66NOObHEWGqyau.CbAlk..e1..EuA7UnlosCcJ.e1.cF.i1ak2mqoCLu
 m0cCC3.6HsCk28aa,EO0nQOHEy2kRqU7M0ZXg..kRcEcHsF.EIEK.N,A3cM2YuEFQ5aEt66pVL
 dPkX..UHhgX,ROMPntSJI8quOKK.3XdErkIUd322avUL,8aaRfdlF2aM3Y2,HMGBGqEEqXC7H,
 V3,HM0R0NPOA3.pVgBBqU7AV3Z7M0aEbUVFLgAa0EEUVFLUBU3p7r,e424kf.FdM.kIUe,6PUV
 VhA4M1M0NPMb1sKcCIAkRqk2M0HeHABkVIBP.90Eq..EMWpRU7VdN1g6UGVGFq.9WUY7Q5qUE,
 .6F.6658P9XU2ZgFR.bXjNM.00I5.T0M8r,h0B1sQOoosCM0HcQI5.EVEbEXaKqQC7POZf97ON
 NPNdPNF7PTHK.7N8rN1HEn00O2C5cH.YeGh8HtCP.RdIsQ.YYgEFcF10N76ZXdU7kVUBAV3p7C
 YZlRM1.U7phdZivg,HcJ6Np76MNUvg,30EbEmamRqU7QeoZg7FXktQ8d9FHfQ.F7NHN1HMFMGR
 POd1PcE9uFkYuqoGr4KIbGY6xBa2B0IklbeZlVyKrGLtyKqmqm8rtumdGLmCIu8LqGomCrl0ks
 ,.ELCoruKu.GomCb.sETXV,.Z1...bf9.EWE.8D2.Y02.A,,U..U,IklbeZFdKLqKKtCLLC3ZO
 RNX2V.AyI,ktuGdKLqKa2V.Iy12.0E.ses,2UXW.2.52.CLLC3b8Rn9P99F9vQ0ks,Uikwm46.
 Zz,2.,.60cK6.,U00.umUG5kmY62.7.,..Y22U,2.2.2YXK90U.AqXD.zwP0k.0.1.,6.Ikmj,
 6..EBU.U,.J,U.2m,.,.E4Wj.Y,YZPS9L6y0I,5TW.kVy4..V6.2..E2E.U76.2kLRClt45J.n
 T32kwL,,sKFHQvFA,I0....
 1Ak...oD,...58FTuPE,5TWyqlKrqKKrGrtumdGLmGorCquU2hgnRAXDFTvMUn7FTvMf1G2sET
 fPdPMHfP9fQbf9hOO9vR7ONbvMoedhgrRiioedFWUkTeoxhmhgnpZHZijJC7ONbvM0.,.S.4r7
 E.0k,5TWyql.bnayKmKKqGomC5XzET1.PuP.MHT9N9ntumaU2,CJuyKtQC98P9PP7ONbXmb.2.
 wrGk2kP9,,E.cUGpmWLuOpoKqvCbHZiYpedhA704TeKKw.bHfEWUmL.6..D.1f2E.CcIhgsNHT
 9N9ntQ8qorG4704D.CbB,708T1U.Ek1,T.lC22U..Ti,cU.ktAcoZimBhWhiohgnZcZRCY.2.w
 22U.EBE.0.4.I3tfj1.0E65.g0AU0KyBU.2.C12.e,2.AU.Ue.4.072U2U,.,c8fP3bOY3E,5z
 dGLmWom4KmKKtCLLO3U.s.E.sIE.cDE.8.BlRo2B1Fgh3.BFmo2r,V1F2J,tfj1.2G6.1..,c8
 Ye6r.3Qwd0ZORNPNZvQRtIdHdKLq6F9vQ59.X5.bf9ZORNPNG20Et,,U3X5UfW.2.52.CLLC3b
 8Rn9P99F9vQ0ks,Uikwm46.Zz,E..W.840E.cU.UiAco,.2.7.,..Y32U,U.2.2alK96.DOa1k
 Dz41.1.3E.9H,2su30AUc,,U.gjPD.BD03E,5zdYgABhiRhnpZABhiRh2hgnV1.,UD,,U4,,k.
 u1CJuGqVqKmCLLyIsKKrGpryKqGoo4KqyqnWmHCpwCLuKqqyGdCLtCqL4IlyquGrHmGESmU8qr
 6638P1vMLfET9SDN88E,9z4U.kNU.EBE.0.z50EJ0.Q.2Gk6k.0.,MT.IyIU.UW.,U6U..M.V6
 .,U.Ux,.6.6M6.cFE.AUyUH,......D,UU..A0AU.E.q5.U.UWU.2.W.0.U,o,AU.Ux,.6.MLE
 .sE,U.2.1sCsI.U0Jijxinhgm3ZbYcjRgpxZ0JchYddRgZphnhgbYZUwY0ZhVRA66NOO5PNkII
 UDU,2.gD..,.3,,6.2,2..1c1M.,.Xxs1EnVlX4xhgZgnpZ4xhgZg2hgnRAU.2.e6m.K52.U1K
 y9.,.s1sJ6.,.O10E,9z4U...p.0.4.I3k.E6V.w0wzBAVh2YNBfNBfBhd2Zcg2Yiphg2YioZi
 gV7A.Mg.IyJ.,UfUAUF.,k.U.G..1M1M.,U.AK..0.t9.Y,wA2U..QEU..w,A76.EPU002..c4
 E.k.Ue.UE0,M00Uz1Rd9R,6.X3.U.kJE4k6U.M.E.7.U,I.,k.0.0EJK5F4Zz16.,UgV5UN,,k
 ,B06..F.z,,6.IEb.0..Y22U,.,.V,2U.w6.k.E.0.1M,kbk,8Mtr.2..c4E.k.0.eG.U.E.mP
 ,U6U.g4QU8.n5S.0EHl,W.0EIl,i.2O0k,.p1W.0Emk,a.oA616.Py.wzBxd2heAhcU2djRioJ
 eZxgdRioJitRbB2ZeIZBIU0AVkJijJhZRgoBVx2YWIcgBgX,3N1HsPZvN1fPHfS19RHvPRP0v7
 63tRjvRRtP3PNZvPRf959O3N1HsMTfPdfQHfMwhmRi7gbUIYDJgZJC0mqaql8rrCrwCLusQ3N1
 HcR9fQbPOTfPH.3sInvQdXjUX,IUWgV7QAVPSZPOD9OdP0v76...UgBhXhAAVx2YW6FTvM.C4I
 UWgV7QgcBgixgZRi7gbUE,8m4akoCrtKrmCr2q1E,qEJemIqk4akYqIcyIdGJESpouqU0romGE
 WorCb4BhghgnZZUYcdBAYZUQeoJidphbRig2YH7NHePHfFH9P91FuPA7.rN1HM1HcJ1eI,7PTv
 M19P9PG7f8p76HeHdOFDOFZuCPM0HM0bPN5fC,tId1.RtI9vMdPOTfPrN1PM0VeITuE98FfeI9
 86ZmkGqdGLtEJ0GIqk2akpKqweHE4Id8pUaJEyIX0mdWob8JeCIY4IdiHEOpU8JECLu8LR0mU8
 3...IiZRiu2Y7p7k4akIin4ak2OpUsQp761eIENKHP0mbOIECIY42PEVKoXaIbqk2aktc9ZON1
 9N.FtO9PS779,tQHtCPM0aIX0mtKqlumriKEGJYKIbqk2A,dHEenS0mdWob68b97HtCPM0aEtK
 qt0GRqHE0n4ak2KIaCpWqk2ak2.gZlgV7AV3pd2hV7gcC76ZON11kRqk26I..aIrGLJ0GIiqma
 LR.w7C3Q666EweHEaIbsFQbU.Z1.AZvgV7I6.bPNI811WmpKaYEwamRqU7Ad4,y4EE8rm222aU
 gcARe33Ymhgn,PFEKIbGo4..in4ak428..3uPT9PJ76F,p,...EwcETuHNOF1eHr76h0ZXu.S2
 EV..Zmk.FtO9HG.A,B0wB.666A..q0..UvgV7Ec..A7mooCLueGEW0e1...UslU83U7p7S2r,I
 Ce1.H,O3mqmuKR0mY.in4..I811UcQhZ7769,7P9fPHtCPU7p6kr.UUUk..M9...kRqk26I.sJ
 ZPOdPNb8RZPOSKJsOI5.sI.ktGLt...M8rV0,.SJtaKu.23Y2CLu8LGam4akWu2jeQH1Uv...M
 GR9RJ,I5...rFweHEa2S2H,...23Y2WrIqk2..i1..U0xhjZhe.e1...EV.amRq....23Y2...
 r,..kY6Hc8Uu...UKVslU.MG.....EIEG...UvAVBgV728.I8gdZBgnhimhgvgV7AVKVmFR.sC
 .Et.Spou4umXKKu0JtyKnaKqAdiNEFd6HfPd9P379,d6HPH9PMb1379,NAHtCPU2BhVZBumqKK
 u8roCqdartggh3YugbUIiZ76v76VN1K283.Q5q..MGRPOdvCPM0HcJcP1PP999,dMRPMPPNp76
 7OO11CJu8roEE8rmCLK0momGEOLR0mY...h96pNDS3.Opm8rtEIamRqU7YhjRgVVY3YugbUAak
 IaoQb72Ze2YpRiZJiUYgZpgVhigZiUIZdgV7AViBghhgUIbx6GTX4VnNMV9QROMPHGin4aUWph
 VhB,,3dENOE5uG3uHle6r76H96pND0nRqk2we6BdAhcU2Zd3Yw2YsAZUoYU2Z1BcE3ZiBghtKH
 PLH76v763fP11EWyIEaIbCIIaqI0mWuYvg,aIXAhUgbU2bUYe6h6PU7oB22I2N1.HMFNmYOIEW
 Gv0GS0GMaGEO0hnayIW0GNKHPYbUYad2YI3d3,HMO,dCvlMin4aU7w8Er4qqQ90mF0GMWJEGob
 qk2aU7A7WGr44ETqHE8mU8mI0GH0Wi,6Dv763dK3N8,7JFWUohV,IbxsEFeIFtHZ8FFdP11A3L
 76TeI7GF4KFaGEqGEyIdG21e6aGEK2U7AdCRcck4ak2akWuYBM0sC6F.19QUUUiBAG0.cR9fQE
 EenSAapQbB.U1BggZhcIYHZiVJiohikpZHhgohikJYg22379,dQ9vQHtCPUGhgVZA.kt66pNDC
 JuG4HfFELyIsKacIY6xhnZiWYZU6IZPNBPNZPNRvM9vQ3N8PM09WUAdiBhol48oWS2AdiBhohV
 3pd27GTXGVnlwuG,5TeK45uPR9RyKqmqm8rtumdYg1ZimZh2hgn7.X5..RtETfPd16FCb.sEMM
 Ui.Z1...bf9.EWE.8T0E.E8E.k2U..U,IET.0.19.w.A92U.sU.,.60sD6.,U002..676.16.6
 .665hK2U.2U5VT0M66.,U0O1E..US.,.1.4ItaqkmaUbl,.,6Y1.0.UA2Tm.mmBjZAgYvob0Cy
 2xBq4sET1.UM2.,6..U6U..F.,6wlgR0Oxad.az86Utj00uDLaUojC8.Ty,...
 --- end of encoding ---


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 10 Декабрь, 2006 08:39 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
На моё ХО все указанные варианты недостаточно обобщены. Как то была у меня мысль хранить все конфиги на LDAP-сервере, например. Так что предлагаю обобщённый интерфейс для доступа к настройкам, в стиле Oberon-way так сказать. Достоинства - расширяемость и полная прозрачность для клиентов. Конкретная реализация у меня только одна - для реестра, и под несколько не такой интерфейс, доработаю - выложу.
Код:
StdCoder.Decode ..,1 ..A,....bOSb9R9PPTNHT9NTdI9vNHvQdfQnf9T9N5HdKqna4wZBxB
 CJuGqaKqtCrkSqmCLLyKmC4..f8RH9Pbf9T9N.ei,...
 1Ak...9i....58FTuPE,5TWyqlKrqKKrGrtumdGLmGorCquU2hgnRAXDFTvMUn7FTvMf1G2sET
 fPdPMHfP9fQbf9hOO9vR7ONbvMoedhgrRiioedFWUkTeoxhmhgnpZHZijJC7ONbvM0.,.S.Wk3
 E.0k,5TWyql.bnayKmKKqGomC5XzET1.PuP.MHT9N9ntumaU2,CJuyKtQC98P9PP7ONbXmb.2.
 oe8k2Ebe.,E.cUGpmWLuOpoKqvCbHZiYpedhA704TeKKw.bHfEWUmL.6..D.lT06.,sUGpmWbB
 xhYhAbndMHT9NY6Mw.sQq2Y6cwB.0.360w,Iz5U.2.oW0U00.bnUGLu8ro8quGrmCLWKqtE0E.
 kHU.EBE.0Uk3A2.JFyuv.A.2m,U.Q.AU0KyB.,UoU.UW.,EsU.MEZPO19P,tEneImLT,072U4.
 f.3cUZT16.,UbU.2.e,2.AU.Ue.0.,6YUNU1Ikmj,2U.EjU.EBU.kzV.I3.0ES9.g,IUQU1o.I
 UbU1200E,m,Ck2Ub.X6.65E3UyU2Ikmj,2U.EjE.0.p.0.z5,6.J,U.2GE00.3M86,96.IUE3.
 Gk1E,W2,.6F.MBs.9.3caM,3gwP.,6..EBE.0.4.I3.0ES,D.u,Kk1UNU1I,IUHW1w.IUxU3.O
 H.s.J.36lM,B.u2yTIem2aOE8HM0HPakYOrkuKEuIL0mXyKtarkCKoKKvaEJam4qobGoemoW0G
 dKqnaqtGLtarRqk4Gpg0pWqk2SItyqu0raKqtCrkSqmeGEqHE4IVCJe8pUCIe0GdKoVyIdGo4a
 kWuIWin4ak4akXUe2Yx2YExd7pdIhcG3YIxdUAc0R8...cI9vNH1qomCrt.A6.....eGEqXE,.
 ....Goo8rmCKuyathdZ,U,,....Ue2203....aErKKwGLEeHEGoo8rm.PM09eHUKBcGhV7YgdJ
 ih2Yu2Y2,kRqUEJeDRc3ZcJJe33YcYgUIbU.Ud2YD3iZphh2YcAdC3YkBgo3hUIbUAcGJe,BfU
 wd43Y13d,Jed2Yu2YGhgb,mGEuoWSJK0mU8od.rN1VeIT0.6F.EY4KrGKqKKJ0GIOpU8JEqqtS
 KEeHEG2.P0M8N76R0.UB28.cQ,dC,dI.aGE...I8.P0.....sN,dC,tFZvPfnI0GY44...g7..
 ...kb05J76FNGR0U,,...Q5hOEZ0,dCG2.rl28rmCLEeHE83C5cE9uFHeHPM07Xx2YYBhmRbBA
 VL3d7Zd33YY3YX2YCBdA3Y2xdBAV7IiZVx22RtHVPNR98VPMdnIin4ak2aIX0GtKqt0mF0GbEe
 WoWuIE8pWGpe8Jb0GtK49eH7uCAVY32ErKKwGr4akW.ZOFdOJcHH8HPMFR8F,tHVPNin4qEc.E
 V8rr4KmCqkCLueGEWGf.EW.MH.in4O3,7N,dC.kR..MO..UUY6ELWokuKm68PvQDP8rN1HUU.R
 ,.PMFRGE8Ity4kRqk4.UHhgoZcdJie2YcYgU.K4M8rN130RW7p6F7NqHEuoYmoI0mb8JEWGmuG
 rEECGE.d8G90.9eH7W7YgiohZVuUd,7PO0GRqHEgV3VHhgoVvM1.EdKqqyKvKKWaKte00GRUZ,
 Q5hWBsMffQZ99,7QZPNh96p7670UvcEcHQA2Yug5a4aEs8rmO5vFbaYvgV7w8klKLt8bX2YCFE
 .HWXhimlS0Gm0GeW2PM0HM0HWkJiZlS0GbEeEEGqo8LEklK5RdP99SgcARe33YkJiZd9RPNcC.
 u4gcCZ6AV7Ie3,PM0HMFRmREs85,dC.rN1HM05PR2Yu.o3M1k4EE8pmq4kRgV3pd2VbtQc93Qw
 dONQcjphoJijZhghgmRiiQeotEdfQN9F9vQ59.XrmW5.ELCoruKu.GomCrl0U1VVVm,IC...Qi
 i..70,cwE.E8E.k22.,6..M.3QwdONIepZhZJinpZHFdKLq6F6.XDJ.QiiIepZhZ7F6.Zz.6.,
 UfW5UXW.2.52.CLLC3b8Rn9P99F9vQ0ks,Uikwm46.Zz,2.,.60,E.e3,6.,U00.umUG5.70,E
 0E...7,,M.,.,.,tcpW.6.DOa1kDz41.1.,6.Ikmj,6..EBU.U,.JFkns.U.2m,.,.E4WDN.Nt
 arm3Wj.Jklb6.Qcj,.E6E...F.,.aU.E.TptYZVQI,AzJE.nT32UP3BNB7l20v....
 1Ak...B,,...58FTuPE,5TWyqlKrqKKrGrtumdGLmGorCquU2hgnRAXDFTvMUn7FTvMf1G2sET
 fPdPMHfP9fQbf9hOO9vR7ONbvMoedhgrRiioedFWUkTeoxhmhgnpZHZijJC7ONbvM0.,.S.ew5
 E.0k,5TWyql.bnayKmKKqGomC5XzET1.PuP.MHT9N9ntumaU2,CJuyKtQC98P9PP7ONbXmb.2.
 2XDk2E6y.,E.cUGpmWLuOpoKqvCbHZiYpedhA704TeKKw.bHfEWUmL.6..D.ph1E.CcIhgsNHT
 9N9ntQ8qorG4704D.CbB,708T1U.EWn.T.tB12U..7z.cU.ktAcoZimBhWhiohgnZcZRCY.2.w
 22U.EBU.6Q,1,EJYjyC.1.VQ.6.5.1cUZT1E.6B6.c6E.2C6.4ItaqkmKECog8ZwpLUE0,c,k8
 E,8Mtr.0E.s76.,UO.,.16.,Ue.0.,6YU.F.CE,9z4U.EKE.EBU.kzV.I3.0ES9.g.IULU2Ikm
 j,2U...p.0.z5,6.J,U.2Gk0E,i.Gk00.W,0EBE,4.CE2E,W0G.IU0U2A,646.n.4.Ck3E,S0G
 E0E,4,A,IUb.9.G,GE0E,i,CE4UbU2g.636,7.3c46.h.3M.s.L.3s76,E,4,w.IUYU2g.IUI.
 7.3.GE1.s.UYU2g.63E0E,e,CE3E,G0Gk0UI.7.3s56,B.G,C.676,9.G,Y.IUZU1w.IUYU2g.
 IUI.7.3c16,B.363s.UYU2g.63E0E,U12,IUYU2g.63E0E,i.GE1UIU1.3676,9.G,Y.IUFU1.
 G0Gk0E,G,Y.IUCU2o.IUIU1.3676,9.G,Y.I.s.D.3676,9.G,Y.IU86.GE1E,G,C.676,9.G,
 Y.IUEE.Ck2UYU2g.63E1UCU2Y.IUTU2o.IUIU1.G0Gk0UI.B.u.GE0E,m1yTIem2aOE8HM0HPa
 kYOrkuKEuIL0mXyKtarkCKoKKvaEJam4qobGoemoW0GdKqnaqtGLtardGLmqomCrt4qnKqtin4
 qkYqIcyIdGp4aEWaqkmqrSKK0GdKqn.rN1HM1dOKVOFPM0NOOb9RJ76v76VuHHeHdOFZ86duH,
 dI9uETeI7O1HM0RPNl9RJ76p76NOOb9RrN1HM0RPMPPNJ76p767OO19PoZHZimBhixgBAV3pd2
 RbBgV72Ze2Y2BhmhgXZijNS,NP9vQb10GJam4akdKKuKptKKteGEqHE8pWC20GI8pmSanViYcd
 JiZ,qomCrtkIqk2aErMNmGE0rkCrtSrr8LmeGEe144.M0.EdKqn.,NP.b1Y7wcmxhp3inJZUgb
 U...RdI9vNH1qom.H,ZPNbf8,dC,7HM1HMFR0HM1HsF99RDeQTXe2Yx...u0.P0.u49HE6F..r
 N1HM0Z1cI91c9DeQTPRqk2K2U1JiZBgohg5JijhCJ,..UG,MH...70...I8.RtFk4.EIsFZvP2
 Yhhgn,b1.hOMNPR9vQJ76v,..cI.q2kIEtUu6HM1.sFQeoJie2Yx...umXUBhgn,ErEJEW....
 ..UaxhpphYJZUEVyobmoW4Ibqk2KIb.C3b0.......Y6..cR19PJ76p,.UBA,.S2MOIZUg5...
 ...91..Q5ICUExd7,kU8Jd4og0mbOIECIY4Idin4ak2O4.30..C3.J,......U2,.Q5oCUE,..
 .qk2K2U5lYuKueGEq1...MH...70..85EayIbSoYuIein4ak2O4.30.UBsIA7MD...UB,..Y6.
 .cR.N0M1HMF.S2ZON19PJ76v,......6F..Et.8pW4Iain4ak2O4.30.UBsII8.......U2,..
 h1eXGVBAV3,sFIcjxhgJZUg5......U2,..Z1cE.rN1HEn..k4.kdcE........70..O5EV..U
 5ldKKueGEq1......EW..Um,Qe3Zevg,HcN.pFV..M1C3b0q1......EW..Uq,Q8qk2.sFIctZ
 iZRie2Yx.......Y6..sMTPRR9RJFRY7Uvk285I5V0K2..3OKdOFrN1HM0B1cC82..PkdcE.v,
 .kt.ka...G2..QAUu6H.rV7oCUE,90..M1HMFR0qkWuIW0GdK4kd.ktuG,5TeK45uPR9RZvPN9
 P9fQbf9b8R7vEdfQN9F9vQ59.X5..RtETfPd16F9vQ59.C24485Et...ktu0.Y62Um1,.d.,.H
 E.2U..U,IklbeZFdKLqKKtCLLC3ZORNX2V.AyI,ktuGdKLqKa2V.Iy1U.2.i8SU.sc6.,k,,Un
 pZHldGrwmqmGomCb.AS.c9Ajg,0EtT.2.U6E.e30E.cU.UiAco,EWE.Y.2..EGE.4E.E.EECOh
 U.wcNC.zwPA.A.2U.E,9z4U...p.0.4.I3,DX1.0E65.2..N6yY,YZPS9L6y0I,5TW.kVy4..V
 .,..2,2.M00.,wJbHK4mF3kwL,,AzJE.iJoYpY2H.at1...
 1Ak...kQ,...58FTuPE,5TWyqlKrqKKrGrtumdGLmGorCquU2hgnRAXDFTvMUn7FTvMf1G2sET
 fPdPMHfP9fQbf9hOO9vR7ONbvMoedhgrRiioedFWUkTeoxhmhgnpZHZijJC7ONbvM0.,.S.qO9
 U.QklbcjRAktgdjZgZZh2hgnlsDor.kay4.qorGqmQiig76FUHZijJCbnWmqmqKWKqtcw7.,.r
 T3A,QyJE.0E.cUGpmWLuOpoKqvCbHZiYpedhA704TeKKw.bHfEWUmL.6..D.vQ3E.CcIhgsNHT
 9N9ntQ8qorG4704D.CbB,708T1U.kHD,T.zw22U.2.op0U00.bnUGLu8ro8quGrmCLWKqtE0E.
 kHU.EBE.0Uk3A2.JFyuv.A.2m,U.Q.AU0KyB.,UoU.UW.,EsU.MEZPO19P,tEneImLT,072U4.
 f.3cUZT16.,Ul.,UO.,.16.c8U.E.076G6.n.3s0s.3gwP.,6.260.I16.wT2U.I3.0ES9.2,I
 UH0l.3s0s.N.W7GE,9z4U...p.0.4.I3.0ES,DE.IUcU1A,IUQX2w.cJ6,UMU.g0s0s.D.36ps
 .Ug0UfX2o.IUNU2w.IUTU12,IUTX2o.s7k1E,00,s.N.3sv6,B.00,6,D.367s.L.y8GE1UB.D
 .3s6,U1w.IUpW1g,IUoX2o.M46,D.KG.s.F.3ce6,B.3M16,D.00,s.E,G9C.IUkG.GE1UBU2w
 .662U1.3shs.D.3sd6,B.q.w.IUTU1.3MiszFd8HMe,dAV7AhN0HeR1fP,dHR76DuPZPS1vMFP
 NhP0JN8PMHT8Ff8H986ZONDPOb9RZPSf8RH9PbvCPM1HOHVuHZ8JPM0ZONDPOEK0maCrnCLEen
 S0GdK4kdGLmqomCrt4qnKqtin4qEIeGEGoo8rmCKuyat3YhhgnRC66JN8PM1VeITuE98FfeI98
 6bONdPJbPNZf8,78HeH,dP1PP999,7Q1vQbvRTfQ796p761eIZOEn86TeF,tEFOEZO8rN1hOEZ
 86P96p76PuQDHLCpmGreCbmRbBIc3xc7pdBAVhpZiBghhgUIbx2YiBgh77rN1HMPR7Q1vQb1MD
 ,7Q1vQUYQbBAVGhAUiIcmxhVZgXBgnZicghdgV3pd23YHhgotQ85P68IeZxAEEq4...wcmxhp3
 i33jdRioRie2YcIiZxgUIbUIeZ,oZGhgbBBsC,NGR86EE2Y,,.66p763uHT8H9OERuCPcJ1m4a
 kq0GR0maU5hgoxcmxBin48oW.1uIbOFZ8JFdQ9HECGEuoYmIK0GN0nIin4akqoBkSoBY2IiZxg
 i2dVphYZhZ3ZhBZvgV7Ie3ZeJJeC3YhpZmhgn3YX22gV3pd2tFZvPg6kRqUEJ8.ggox6c8,78Z
 1p,DntELkoUv.EE2Y,,.QbUQgmhgVZiZ3Yu2Y0,AZUI5Z0ELSItyquQ5hOEsN,dCq2..HsM,dC
 ,,QcmhAwcmxhpV0,kd.2YX.N,knuGr4qqkS.7,Z1.SqIin4akYOIESKL8rmC5EEGJYKIb0GdKI
 eK3SKLU3pd2RbBMGQgmhA2YI3d3N1HM05f9RPM22.7,HcQ91.5P8rN1aEdK2sMRdQ9n4akWmod
 Ko4ak283EbaIaqk2KIbGo4KIb2299R.qEIsFZvP2Yhhgn,...CJu8LJ0GISKEeHE83C5.iHEaI
 b.,FE42..hOEZ86ZPNb96p7610.M8r,0mqkaU5ldsCPcE.10sN,t6,,N,kq.g5EGkn27Uh,HWh
 pZaxhpphY3YI370GtK4qXhpZmtQ7769eH7O1..P6I.sIQ8e0I5ZmnQC..UgcR19P,dC,,....Q
 8C3rFV..kF..q466cP67MPOrkmKEg5hPMN97rN1S4.g,sI.q..w6aIrGLJ0GISau.C5.i1.,FE
 42.kRYgZpgVhigZiUIbUAdCZe3xc3Jed22a2kRqEf.g7sFA7in482..C0.kqoBkSoBY2..i1H0
 .UBM0HeFWmquGtQiUobx2YBBdC3Z7pdI,HN8,d7,78P1Ybx2YBBcM3Z7pdI,6JFWUI8UH3dDJe
 I3Zhp3AZUgcCZ6HMFQ583EmKKnUBgcC76D0k403.EVaLuKKJ0GISauUbtQ...,FE42...003OK
 dOFH76p7630rN1h0ka..82kU.s6..P1kS.7,D1.kYMP.UBM068kt0GT.8ogGZdAZUo2.m1EVaJ
 eUIVU.sIUH3dD,Uh,HN8H769eH.rVG,YAUBUU.sCPM1V0.sIFvPZ9RHePdf8W0p,Dnt.kR.660
 mU...EEsIF0HeHdO8,dC,tI.in4O3UB,.r,U,,kF..q4Ux.G0HsN..a2P1.g,H.F,CLEu1kdWo
 b.HN8,d7.Y5UH37.Y822.b0Wmd.P1aWUg6.rVG,YAUBUU..M1..moruqnaIrGLJ23e1San,Uv.
 EE2Y,,..UUEayIbSoYuIeaGE6H.rFf.g7.U0,A6.C0.kq.g5EGM0D1.kYMP...qamtQ,NFQ583
 Em.q...rl4.UHlYc8W0p,Dnt.kR.660mU..cR19P,FE.AZvgVK,MHkdMGQ530..5,.AVh,MDUY
 UhdRkSoCin4akn.UB.b0k4.U5ldUGhgVZhe2YcER.b1..660mU..6N.,VH,ZOF18HH76pld.sC
 PcJ.q2w68pm4avgV0,.UX..gBR1g5R17,.UvkYUa,UBM068kto5..AZd2Ya.ES...G300UH,F,
 AZUUB.rVG,YAUBUUw6..P..EdEJUuUbtQ...,FE42...00ZOF1WUEdkR.ka..rFV.42.5,.MP.
 q167sN..a2P1.UI,PHtQiUg6i1Z06N.P..k4.UHFdEJUukmSan,..22,NE..oC0WUMF1mIin4O
 3UB,bWGVvcE..s6.U7gB.v,Y2gBh1qXqlRAVb,.P.C3.P..S23uPT9PJ76FVukmsQ...,FE42.
 .7166IcD,U0,Q5.g7sFI6QbBI6..Q2.UhdPUxcP67..Q5a2oA.UI,PHtQC.Z06N.P.S2.P..C3
 30J,e1San,..22,NE..oC0WU.M8rN1.g7sII6Q530..5,.MP.q167MPO5g5hXvM0D1.q.Q8.q.
 .w6CpmGLJ0GIcCUn,..22,NE..YAUUkdKIeaGEeXHlRqEf.g7sFQ8in482..C0.kqoBkSoBY2.
 .i1H0O4..MP8bn,AVG,YAUB.D0k4.UHldc8ERknQC..UU6610w7.O5,FEkIin4O3UB,bWHlRI6
 ..Q2.k2q4Ux.G0qaq,vFvsCwA.M1kdsIQ5PMFRWGtNC5K3oZ0CyIhgstETfPdfQT9PNPNZvQRt
 IdnVGLtmKWKqtCK.4D..umVyKrG5EWKqtCK.Q6AAICUm,..Unp3.6F6.Z50.G,0.aU.6.,..1c
 UXDJ9XGhighgmRiiQ88pum470,Mwd0UnpZGhighA70,cw5.,6.QJw.QI2U.sU.ktumdsIdPSNP
 N7ONbH.4D.o3aLq.,cwDU.6..FU.I92U.E,,.RNEd1MNG20U2U...G00k.0.0.0mFf3,E.SoA5
 UTyB4.4.0E.cUZT1E..UO.,.1.eWUbl,.,6Y1.0.UA2Tm.mmBjZ92T,eUXDF.sET1.UEU...W.
 0.A,,U.yen791tc0MyfU.az86.r8OmOGW7Wk1...
 --- end of encoding ---


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 10 Декабрь, 2006 11:00 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Иван, а почему у вас в RegistryUtils везде ARRAY OF CHAR, а в RegistryStdMessages везде Dialog.String? Как бы неадекватность получается...

А в целом - действительно, наиболее обобщенная получилась система из предложенных.


Последний раз редактировалось Александр Ильин Воскресенье, 10 Декабрь, 2006 18:06, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Воскресенье, 10 Декабрь, 2006 12:41 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Иван, конечно, система вышла обобщенная, однако мне кажется, что слишком утрированно... HandleMessage - это хорошо для расширения и для организации передачи сообщений в среде многих объектов, но целиком вырождать интерфейс, предназначенный для прямого применения пользователями, до одной процедуры - это слишком... Какие-то базовые сценарии для реестра нужно-таки вынести в классический ОО-интерфейс, а HandleMessage оставить только для периферийных расширений... ИМХО.

По поводу удаленного хранения настроек - тут надо делать драйвер для Files, который позволит удаленно хранить папки-профили...
Поэтому пара loc/file тоже может довольно обобщенно задавать место хранения, да и директорию в моем варианте можно инсталлировать любую, выполнив требуемое расширение.
Поскольку Service Pack 4 для ББ 1.5 планирую на след. неделе, прошу выссказать все замечания по моему варианту или предложить, что туда можно добавить из ваших.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Понедельник, 11 Декабрь, 2006 02:58 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Илья: Ну даже не знаю. А какие именно методы достойны быть непосредственно в составе базового типа? В вашей реализации как минимум не хватает обработки REAL, BOOLEAN и SET. А IntList лишний, хотя может и полезный.
С другой стороны, сообщения позволяют комфортно жить в многопоточной обстановке, а Section.ok - нет.
И ещё. Я расчитывал, что Registry.Open("") откроет настройки, хранящиеся в файле по умолчанию, который в каждой системе свой (и может даже и не файл вовсе).
И вообще, в моём варианте пользователь обычно не будет иметь дел с сообщениями - всё завёрнуто в RegistryUtils (который ещё доработать надо).

Что касается замечаний.
1. Добавить процедуры Handle. Не будем повторять ошибок Files ;)
2. Привести список процедур Get/Set в соответствие базовым типам КП.
3. Интерфейс процедур Get. Вот тут вопрос. Вид Get(... OUT res...) не годится в любом случае - что он вернёт, если значение не найдено? Тут либо Get(... VAR res...) и передавать значение по умолчанию, либо Get(... default ...) : res. По мне так процедуры-функции удобнее
4. Процедура Write. Кажется если ей передать несколько объектов одного типа - будет сохранён только последний.

Александр: Ну, в общем, да. Шизеем потихоньку :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB