Аналог GetRegistryValue() на RSL

Автор:leo
Дата:10.08.2002
Просмотров:4124
Скачиваний:2116
Оценка:, Оценок - 1
Сохранить в файле

Обсудить в форуме

Описание

В некоторых случаях необходимо иметь доступ к реестру настроек RS-Bank, не нет возможности подгрузить модуль BankInter, где имеется стандартная процедура GetRegistryValue(), например, при необходимости получить доступ к реестру настроек из autoinc.mac. Данный пример дублирует эту процедуру на RSL.

Текст примера

 /*----------------------------------------------------------------------------
      Аналог процедуры GetRegistryValue() модуля BankInter на языке RSL.
------------------------------------------------------------------------------
Параметры: PathKey   - полное наименование параметра настроек;
           TypeValue - тип значения переменной настроек,
           Value     - возвращаемое значение параметра настроек,
           ErrCode   - возвращаемый код ошибки при выполнении процедуры
                       (0 - успешное выполнение процедуры).
Возвр.значение: тип возвращаемого значения параметра настроек (V_UNDEF в
                случае ошибки выполнения процедуры).
----------------------------------------------------------------------------*/
macro GetRegistryValueRSL(PathKey, TypeValue, Value, ErrCode)
   const НетОшибки = 0,
         НеверныйТипЗначенияПараметраНастройки = 5,
         НеверноеЗначениеПараметраНастройки = 6,
         ПараметрНастроекНеНайден = 7,
         NumParmValue = 2,
         NumParmErrCode = 3;
   var ob, obj;

   SetParm(NumParmErrCode, НетОшибки);
   ob = TBFile("regparm", "R", 1, "..\\dbfile\\regparm.dbt", "..\\dbfile\\bank.def");
   ob.("ParentID") = 0;
   PathKey = StrUpr(PathKey);
   while (StrBrk(PathKey, "\\") != 0)
      ob.("Name") = SubStr(PathKey, 1, StrBrk(PathKey, "\\")-1);
      if (not ob.getEQ)
         SetParm(NumParmErrCode, ПараметрНастроекНеНайден);
         return V_UNDEF;
      end;
      ob.("ParentID") = ob.("KeyID");
      PathKey = SubStr(PathKey, StrBrk(PathKey, "\\")+1);
   end;
   ob.("Name") = PathKey;
   if (not ob.getEQ)
      SetParm(NumParmErrCode, ПараметрНастроекНеНайден);
      return V_UNDEF;
   end;
   obj = TBFile("regval", "R", 0, "..\\dbfile\\regval.dbt", "..\\dbfile\\bank.def");
   obj.("KeyID") = ob.("KeyID");
   obj.("Oper") = {oper};
   if (obj.getEQ)
      if (TypeValue == V_UNDEF)
         if (obj.("Type") == 0)
            SetParm(NumParmValue, obj.("LintValue"));
            return V_INTEGER;
         elif (obj.("Type") == 1)
            SetParm(NumParmValue, obj.("LdoubleValue"));
            return V_DOUBLE;
         elif (obj.("Type") == 2)
            SetParm(NumParmValue, obj.("StringValue"));
            return V_STRING;
         end;
      elif (TypeValue == V_INTEGER)
         if (obj.("Type") == 0)
            SetParm(NumParmValue, obj.("LintValue"));
            return V_INTEGER;
         else
            SetParm(NumParmErrCode, НеверныйТипЗначенияПараметраНастройки);
            return V_UNDEF;
         end;
      elif (TypeValue == V_DOUBLE)
         if (obj.("Type") == 1)
            SetParm(NumParmValue, obj.("LdoubleValue"));
            return V_DOUBLE;
         else
            SetParm(NumParmErrCode, НеверныйТипЗначенияПараметраНастройки);
            return V_UNDEF;
         end;
      elif (TypeValue == V_STRING)
         if (obj.("Type") == 2)
            SetParm(NumParmValue, obj.("StringValue"));
            return V_STRING;
         else
            SetParm(NumParmErrCode, НеверныйТипЗначенияПараметраНастройки);
            return V_UNDEF;
         end;
      end;
   else
      obj.("KeyID") = ob.("KeyID");
      obj.("Oper") = 0;
      if (not obj.getEQ)
         SetParm(NumParmErrCode, ПараметрНастроекНеНайден);
         return V_UNDEF;
      end;
      if (TypeValue == V_UNDEF)
         if (obj.("Type") == 0)
            SetParm(NumParmValue, obj.("LintValue"));
            return V_INTEGER;
         elif (obj.("Type") == 1)
            SetParm(NumParmValue, obj.("LdoubleValue"));
            return V_DOUBLE;
         elif (obj.("Type") == 2)
            SetParm(NumParmValue, obj.("StringValue"));
            return V_STRING;
         end;
      elif (TypeValue == V_INTEGER)
         if (obj.("Type") == 0)
            SetParm(NumParmValue, obj.("LintValue"));
            return V_INTEGER;
         else
            SetParm(NumParmErrCode, НеверныйТипЗначенияПараметраНастройки);
            return V_UNDEF;
         end;
      elif (TypeValue == V_DOUBLE)
         if (obj.("Type") == 1)
            SetParm(NumParmValue, obj.("LdoubleValue"));
            return V_DOUBLE;
         else
            SetParm(NumParmErrCode, НеверныйТипЗначенияПараметраНастройки);
            return V_UNDEF;
         end;
      elif (TypeValue == V_STRING)
         if (obj.("Type") == 2)
            SetParm(NumParmValue, obj.("StringValue"));
            return V_STRING;
         else
            SetParm(NumParmErrCode, НеверныйТипЗначенияПараметраНастройки);
            return V_UNDEF;
         end;
      end;
   end;
end;