MODULE CheckKey_mod CONTAINS integer function CheckKey(featureID) bind(C,name="CheckKey") !DEC$ ATTRIBUTES DLLEXPORT :: CheckKey USE, INTRINSIC :: ISO_C_BINDING use Lime_api_mod use sentinel_api_mod use unikey_api_mod implicit none interface function CheckFileProperties() bind(C, name="CheckFileProperties") !DEC$ ATTRIBUTES STDCALL :: CheckFileProperties import integer :: CheckFileProperties end function end interface integer(c_int), value :: featureID !integer, external :: CheckLimeKey !integer, external :: CheckSentinelKey !integer, external :: CheckUnikey integer :: LL, ierr, Xlrotor_Key_Type=1 character(len=256):: valData integer :: i i = CheckFileProperties() call ReadRegVar('Software\\Xlrotor',valData,'Xlrotor_Key_Type',LL,ierr) if( ierr.eq.0 ) Read(valData,*) Xlrotor_Key_Type select case (Xlrotor_Key_Type) case (1) !Lime CheckKey = CheckLimeKey(featureID) case (2) !sentinel CheckKey = CheckSentinelKey(featureID) case (3) !Unikey CheckKey = CheckUnikey(featureID) case Default CheckKey = 1 end select return end Function CheckKey subroutine ReadRegVar(skey,valData,valname,LL,ierr) use ifwin implicit none character*(*),intent(in)::skey character*(*),intent(out)::valdata character*(*),intent(in)::valname integer*4, intent(out):: LL integer*4, intent(out):: ierr character*255 strx integer(HANDLE) :: regCallStat, hKey, L1, l2 valdata=repeat(' ',len(valdata)) ierr = 0 LL = 0 regCallStat=RegOpenKeyEx(HKEY_CURRENT_USER,skey,0, KEY_EXECUTE,loc(hKey)) if (regCallStat .ne. 0) then ierr = regCallStat return endif L1 = 0 L2 = 256 regCallStat = RegQueryValueEx (hKey, valname, 0, loc(L1),loc(strx),loc(L2)) if (regCallStat .ne. 0) then ierr = regCallStat return endif LL = L2 - 1 ! strip away null termination valdata = strx(1:LL) end subroutine ReadRegVar subroutine WriteRegVar(skey,valData,valName,ValLen,ierr) !call WriteRegVar('Software\\XLTRC2'C, 'testing'C, 'test'C, 7, ierr) use ifwin implicit none character*(*),intent(in)::skey character*(*),intent(in)::valdata character*(*),intent(in)::valName integer*4, intent(in) :: valLen integer*4, intent(out):: ierr character*255 subKey, vname integer(HANDLE) :: regCallStat, hKey, hNewOrOld ierr = len(valdata) ierr = 0 subkey = skey regCallStat=RegCreateKeyEx(HKEY_CURRENT_USER, loc(subKey), 0,'REG_SZ'C,REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, loc(hKey),loc(hNewOrOld)) if(regCallStat .ne. 0) return regCallStat=RegSetValueEx(hKey, valName, 0, REG_SZ, loc(valData), valLen) if(regCallStat .ne. 0) ierr=-1 return end subroutine WriteRegVar END MODULE CheckKey_mod