566e5c50b479a61a7c621eddd6d8ba1698bef7ae
[chise/xemacs-chise.git.1] / nt / installer / Wise / pre_wise.py
1 import string\r
2 import re\r
3 import os\r
4 import types\r
5 \r
6 infile=open("xemacs.tmpl","r")\r
7 \r
8 import version\r
9 import dirs\r
10 import filelist\r
11 import packages\r
12 \r
13 def letter(package):\r
14     index = packages.all.index(package)\r
15     if index>29:\r
16         raise "WISE error: too many components"\r
17     return chr(ord("A")+index)\r
18 \r
19 def letters(package_list):\r
20     ret = ""\r
21     for p in package_list: \r
22         ret = ret+letter(p)\r
23     return ret\r
24 \r
25 def describe(package):\r
26     if package in packages.descriptions.keys():\r
27         return ": "+packages.descriptions[package]\r
28     else: return ""\r
29 \r
30 def ifblock(var,val):\r
31     return("item: If/While Statement\n  Variable=%s\n  Value=%s\n  Flags=00001010\nend\n" % (var,val))\r
32 \r
33 def endblock():\r
34     return("item: End Block\nend\n")\r
35 \r
36 def setvar(var,val):\r
37     return("item: Set Variable\n  Variable=%s\n  Value=%s\n  Flags=10000000\nend\n" % (string.upper(var), val))\r
38 \r
39 def default_letters_of_category(cat):\r
40     val = ""\r
41     for p in packages.default:\r
42         if packages.category_of_package(p) == cat:\r
43             val = val + packages.letter_of_package(p)\r
44     return val\r
45 \r
46 def set_category_defaults():\r
47     ret = ""\r
48     for c in packages.category_names:\r
49         ret = ret +  setvar(c, default_letters_of_category(c))\r
50     return ret\r
51 \r
52 def do_category(cat):\r
53     ret = ifblock("COMPONENTS", packages.letter_of_category(cat))\r
54     for pkg in packages.packages_of_category(cat):\r
55         ret = ret + ifblock(string.upper(cat),packages.letter_of_package(pkg))\r
56         for f in files_of_package(pkg):\r
57             ret = ret+install_pkg_file(f)\r
58         ret = ret + endblock()\r
59     ret = ret + endblock()\r
60     return ret\r
61 \r
62 def files_of_package(package):\r
63     manifest_file = dirs.packages + "\\pkginfo\\MANIFEST." + package\r
64     manifest = open(manifest_file,"r")\r
65     lines = manifest.readlines()\r
66     lines = map(lambda s:s[:-1], lines)\r
67     lines = map(lambda s:string.replace(s,'/','\\'), lines)\r
68     return lines\r
69 \r
70 def category_dialog(cat):\r
71     npkg = len(packages.packages_of_category(cat))\r
72     ret=""\r
73     ret=ret+"  item: Dialog\n    Title="+packages.category_descriptions[cat]+" Packages\n"\r
74     ret=ret+"    Width=210\n"\r
75     ret=ret+"    Height=%d\n" % (45+npkg*10)\r
76     ret=ret+"    Font Name=Helv\n"\r
77     ret=ret+"    Font Size=8\n"\r
78     ret=ret+"    item: Push Button\n"\r
79     ret=ret+"      Rectangle=107 %d 147 %d\n" % (5+npkg*10+2, 5+npkg*10+17)\r
80     ret=ret+"      Create Flags=01010000000000010000000000000001\n"\r
81     ret=ret+"      Text=OK\n"\r
82     ret=ret+"    end\n"\r
83     ret=ret+"    item: Push Button\n"\r
84     ret=ret+"      Rectangle=153 %d 193 %d\n" % (5+npkg*10+2, 5+npkg*10+17)\r
85     ret=ret+"      Variable=%s\n" % string.upper(cat)\r
86     ret=ret+"      Value=%%%s_SAVE%%\n" % string.upper(cat)\r
87     ret=ret+"      Create Flags=01010000000000010000000000000000\n"\r
88     ret=ret+"      Flags=0000000000000001\n"\r
89     ret=ret+"      Text=Cancel\n"\r
90     ret=ret+"    end\n"\r
91     ret=ret+"    item: Checkbox\n"\r
92     ret=ret+"      Rectangle=0 5 191 %d\n" % (10*npkg)\r
93     ret=ret+"      Variable=%s\n"%string.upper(cat)\r
94     ret=ret+"      Create Flags=01010000000000010000000000000011\n"\r
95     ret=ret+"      Flags=0000000000000010\n"\r
96     for pkg in packages.packages_of_category(cat):\r
97         ret = ret+"      Text=%s: %s\n"%( pkg, packages.package_descriptions[pkg])\r
98     ret=ret+"      Text=\n"\r
99     ret=ret+"    end\n"\r
100     ret=ret+"  end\n"\r
101     return ret\r
102 \r
103 def src_path(src,name):\r
104     return src + "\\" + name\r
105 \r
106 def dst_path(dst,name):\r
107     return "%MAINDIR%"+"\\"+dst+"\\" + name\r
108 \r
109 def install_file(name,src,dst):\r
110     return("item: Install File\n  Source=%s\n  Destination=%s\n  Flags=0000000010000010\nend\n" % (src_path(src,name),dst_path(dst,name)))\r
111 \r
112 def install_pkg_file(name):\r
113     return install_file(name,dirs.packages,dirs.pkg_dst)\r
114 \r
115 def do_package(package):\r
116     return ifblock("COMPONENTS",letter(package)) + \\r
117            string.join(map(install_pkg_file,files(package)),"")+ \\r
118            endblock()\r
119 \r
120 for line in infile.readlines():\r
121     left=string.find(line,"<<<")\r
122     if left>=0:\r
123         right=string.find(line,">>>")\r
124         expr=line[left+3:right]\r
125         val=eval(expr)\r
126         if type(val)==types.StringType:\r
127             print line[:left] + val + line[right+3:],\r
128         elif type(val)==types.ListType:\r
129             for v in val:\r
130                 print line[:left] + v + line[right+3:],\r
131     else: print line,\r
132 \r
133 \r