2 Title : The Ring Package Manager
4 Author: Mahmoud Fayed <msfclipper@yahoo.com>
7 C_ALLPACKAGESINFO_PACKAGENAME = 1
8 C_ALLPACKAGESINFO_RELATED = 2
12 cAllPackagesFile = exefolder()+"allpackages.ring"
15 # [ Package Name , [ List of packages that use this package ] ]
19 if ! fexists(cAllPackagesFile) SaveInfo() return ok
20 cAllPackagesInfo = read(cAllPackagesFile)
21 eval(cAllPackagesInfo)
23 func AddPackage cPackageName
24 if find(aAllPackagesInfo,cPackageName,1) return ok
25 aAllPackagesInfo + [ cPackageName , [] ]
27 func AddRelatedPackage cPackageName,cRelatedPackageName
28 # Second Package ----> First Package
29 # AddRelatedPackage(:FirstPackage,:SecondPackage)
30 AddPackage(cPackageName)
31 nPos = find(aAllPackagesInfo,cPackageName,1)
32 # Add the related package
33 if ! find(aAllPackagesInfo[nPos][C_ALLPACKAGESINFO_RELATED],cRelatedPackageName)
34 aAllPackagesInfo[nPos][C_ALLPACKAGESINFO_RELATED] + cRelatedPackageName
38 if len(aAllPackagesInfo) = 0 remove(cAllPackagesFile) return ok
39 oList2Code = new List2Code
40 write(cAllPackagesFile,
41 "aAllPackagesInfo = " + oList2Code.List2Code(aAllPackagesInfo))
43 func CheckRelatedPackages cPackageName
44 AddPackage(cPackageName)
45 nPos = find(aAllPackagesInfo,cPackageName,1)
46 return aAllPackagesInfo[nPos][C_ALLPACKAGESINFO_RELATED]
48 func RemovePackage cPackageName
49 for t=1 to len(aAllPackagesInfo)
50 aPackage = aAllPackagesInfo[t]
51 for x = len(aPackage[C_ALLPACKAGESINFO_RELATED]) to 1 step -1
52 if aPackage[C_ALLPACKAGESINFO_RELATED][x] = cPackageName
53 del(aAllPackagesInfo[t][C_ALLPACKAGESINFO_RELATED],x)
58 func DeleteAllPackagesFile
59 remove(cAllPackagesFile)