OLOBAL SharedFileNeedsCopying AS INTEGER

DECLARE FUNCTION WCompareVersion (szVer1$, szVer2$) AS INTEGER

DECLARE FUNCTION FindSharedFileFromPath (szField$, szVersion$) AS STRING

DECLARE FUNCTION SearchForLocationForSharedFile (szRegDbKey$, szWinIniSect$, szWinIniKey$, iWinIniField%, szDefault$, szVersion$) AS STRING



'' returns: 1 if szVer1$ > szVer2$;  0 if equal;  -1 if szVer1$ < szVer2$
''
FUNCTION WCompareVersion (szVer1$, szVer2$) STATIC AS INTEGER
    IF szVer1$ = "" THEN
        IF szVer2$ = "" THEN
            WCompareVersion = 0
        ELSE
            WCompareVersion = -1
        END IF
    ELSEIF szVer2$ = "" THEN
        WCompareVersion = 1
    ELSE
        WCompareVersion = 0
        FOR i% = 1 TO 4 STEP 1
            piece1& = GetVersionNthField(szVer1$, i%)
            piece2& = GetVersionNthField(szVer2$, i%)
            IF piece1& > piece2& THEN
                WCompareVersion = 1
                OOTO _WCV_END
            ELSEIF piece1& < piece2& THEN
                WCompareVersion = -1
                OOTO _WCV_END
            END IF
        NEXT i%
    END IF
_WCV_END:
END FUNCTION


'' private to this file - needed in next api
''
FUNCTION FindSharedFileFromPath(szField$, szVersion$) STATIC AS STRING
    FindSharedFileFromPath = ""
    SharedFileNeedsCopying = 0
    IF szField$ <> "" THEN
        IF DoesFileExist(szField$, OF_EXIST) = 0 THEN
            szFile$ = STRING$(32, 32)

            IF FParseFATPathIntoPieces(szField$, NULL, 0, NULL, 0, szFile$, 31) <> 0 THEN
                szField$ = FindFileUsingFileOpen(szFile$)
            ELSE
                szField$ = ""
            END IF
            szFile$ = ""
        END IF

        IF szField$ <> "" THEN
            IF WCompareVersion(GetVersionOfFile(szField$), szVersion$) >= 0 THEN
                FindSharedFileFromPath = szField$
            ELSEIF IsFileWritable(szField$) <> 0 THEN
                SharedFileNeedsCopying = 1
                FindSharedFileFromPath = szField$
            END IF

            szField$ = ""
        END IF
    END IF
END FUNCTION


FUNCTION SearchForLocationForSharedFile (szRegDbKey$, szWinIniSect$, szWinIniKey$, iWinIniField%, szDefault$, szVersion$) STATIC AS STRING

    SearchForLocationForSharedFile = szDefault$

'$IFDEF    REG_DB_ENABLED
    IF szRegDbKey$ <> "" THEN
        szField$ = GetRegKeyValue(szRegDbKey$)
        szFile$ = FindSharedFileFromPath(szField$, szVersion$)
        IF szFile$ <> "" THEN
            SearchForLocationForSharedFile = szFile$
            szFile$ = ""
            OOTO _SFLSFS_END
        END IF
    END IF
'$ENDIF '' REG_DB_ENABLED

    IF szWinIniSect$ <> "" AND szWinIniKey$ <> "" THEN
        szWinIniLine$ = GetIniKeyString("WIN.INI", szWinIniSect$, szWinIniKey$)
        IF szWinIniLine$ <> "" THEN
            szField$ = GetNthFieldFromIniString(szWinIniLine$, iWinIniField%)
            szWinIniLine$ = ""
            szFile$ = FindSharedFileFromPath(szField$, szVersion$)
            IF szFile$ <> "" THEN
                SearchForLocationForSharedFile = szFile$
                szFile$ = ""
                OOTO _SFLSFS_END
            END IF
        END IF
    END IF

    '' return value is still szDefault$ - assume it is writable
    SharedFileNeedsCopying = 1
    IF DoesFileExist(szDefault$, OF_EXIST) <> 0 THEN
        IF WCompareVersion(GetVersionOfFile(szDefault$), szVersion$) >= 0 THEN
            SharedFileNeedsCopying = 0
        END IF
    END IF

_SFLSFS_END:

END FUNCTION

