1 | #ifndef MULTIBOOT_H |
---|
2 | #define MULTIBOOT_H |
---|
3 | |
---|
4 | int install_image(char* part) |
---|
5 | { |
---|
6 | char* imagedir = NULL; |
---|
7 | char* point = NULL; |
---|
8 | char* command = NULL; |
---|
9 | |
---|
10 | imagedir = screendir("/tmp", "*.bz2", NULL, NULL, NULL, NULL, 0, "SELECT", 0, NULL, 0, NULL, 0, 1200, 0, 600, 0, 0); |
---|
11 | if(imagedir == NULL) |
---|
12 | return 2; |
---|
13 | point = strrchr(imagedir,'/'); |
---|
14 | if(point == NULL) |
---|
15 | return 0; |
---|
16 | point[0] = '\0'; |
---|
17 | command = ostrcat("ofgwrite -m", part, 0, 0); |
---|
18 | command = ostrcat(command, " ", 1, 0); |
---|
19 | command = ostrcat(command, imagedir, 1, 0); |
---|
20 | int merksec = status.sec; |
---|
21 | status.sec = 0; //deaktiviere Spinner |
---|
22 | system(command); |
---|
23 | status.sec = merksec; |
---|
24 | free(imagedir); imagedir = NULL; |
---|
25 | free(command); command = NULL; |
---|
26 | return 1; |
---|
27 | } |
---|
28 | |
---|
29 | void screenmultiboot(void) |
---|
30 | { |
---|
31 | int rcret = 0; |
---|
32 | |
---|
33 | DIR *dir; |
---|
34 | struct dirent * member; |
---|
35 | char *tmpstr = NULL; |
---|
36 | char *tmpstr2 = NULL; |
---|
37 | char *tmpstr3 = NULL; |
---|
38 | char *ownpart = NULL; |
---|
39 | char *instpart = NULL; |
---|
40 | char *ownpartname = NULL; |
---|
41 | int neustart = 0; |
---|
42 | int ret = 0; |
---|
43 | int end = 0; |
---|
44 | |
---|
45 | struct skin* screen = getscreen("multiboot"); |
---|
46 | struct skin* listbox = getscreennode(screen, "listbox"); |
---|
47 | struct skin* partitions = getscreennode(screen, "partitions"); |
---|
48 | |
---|
49 | while(end == 0) |
---|
50 | { |
---|
51 | changechoiceboxvalue(partitions, NULL); |
---|
52 | |
---|
53 | tmpstr = readsys("/boot/STARTUP", 1); |
---|
54 | tmpstr2 = ostrstr(tmpstr, "kernel"); |
---|
55 | if(tmpstr2 != NULL) |
---|
56 | { |
---|
57 | tmpstr2[7] = '\0'; |
---|
58 | ownpart = ostrcat(tmpstr2+6, NULL, 0, 0); |
---|
59 | } |
---|
60 | free(tmpstr); tmpstr = NULL; |
---|
61 | tmpstr2 = NULL; |
---|
62 | |
---|
63 | dir = opendir("/boot"); /* oeffne aktuelles Verzeichnis */ |
---|
64 | if (dir) |
---|
65 | { |
---|
66 | while (0 != (member = readdir(dir))) |
---|
67 | { |
---|
68 | if(ostrcmp(".", member->d_name) != 0 && ostrcmp("..", member->d_name) != 0 && ostrcmp("STARTUP", member->d_name) != 0) |
---|
69 | { |
---|
70 | tmpstr = ostrcat("/boot/", member->d_name, 0, 0); |
---|
71 | tmpstr2 = readsys(tmpstr, 1); |
---|
72 | tmpstr3 = ostrstr(tmpstr2, "kernel"); |
---|
73 | if(tmpstr3 != NULL) |
---|
74 | { |
---|
75 | tmpstr3[7] = '\0'; |
---|
76 | if(ostrcmp(ownpart, tmpstr3+6) == 0) |
---|
77 | { |
---|
78 | ownpartname = ostrcat(member->d_name, NULL, 0, 0); |
---|
79 | printf("----> own: %s\n", ownpartname); |
---|
80 | } |
---|
81 | addchoicebox(partitions, member->d_name, member->d_name); |
---|
82 | } |
---|
83 | free(tmpstr); tmpstr = NULL; |
---|
84 | free(tmpstr2); tmpstr2 = NULL; |
---|
85 | tmpstr3 = NULL; |
---|
86 | } |
---|
87 | } |
---|
88 | closedir(dir); |
---|
89 | setchoiceboxselection(partitions, ownpartname); |
---|
90 | } |
---|
91 | |
---|
92 | |
---|
93 | |
---|
94 | drawscreen(screen, 0, 0); |
---|
95 | addscreenrc(screen, listbox); |
---|
96 | |
---|
97 | struct skin* tmp = NULL; |
---|
98 | tmp = listbox->select; |
---|
99 | |
---|
100 | while(1) |
---|
101 | { |
---|
102 | addscreenrc(screen, tmp); |
---|
103 | rcret = waitrc(screen, 0, 0); |
---|
104 | tmp = listbox->select; |
---|
105 | if(rcret == getrcconfigint("rcexit", NULL)) |
---|
106 | { |
---|
107 | end = 1; |
---|
108 | break; |
---|
109 | } |
---|
110 | if(rcret == getrcconfigint("rcok", NULL)) |
---|
111 | { |
---|
112 | tmpstr = ostrcat("cp /boot/", partitions->ret, 0, 0); |
---|
113 | tmpstr = ostrcat(tmpstr, " /boot/startup", 1, 0); |
---|
114 | system(tmpstr); |
---|
115 | free(tmpstr); tmpstr = NULL; |
---|
116 | if(textbox("MultiBoot", _("Do you want to start now the selected image?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 650, 200, 0, 0) == 1) |
---|
117 | neustart = 1; |
---|
118 | else |
---|
119 | neustart = 0; |
---|
120 | end = 1; |
---|
121 | break; |
---|
122 | } |
---|
123 | if(rcret == getrcconfigint("rcred", NULL)) |
---|
124 | { |
---|
125 | tmpstr = ostrcat("/boot/", partitions->ret, 0, 0); |
---|
126 | tmpstr2 = readsys(tmpstr, 1); |
---|
127 | tmpstr3 = ostrstr(tmpstr2, "kernel"); |
---|
128 | if(tmpstr3 != NULL) |
---|
129 | { |
---|
130 | tmpstr3[7] = '\0'; |
---|
131 | instpart = ostrcat(tmpstr3+6, NULL, 0, 0); |
---|
132 | } |
---|
133 | free(tmpstr); tmpstr = NULL; |
---|
134 | free(tmpstr2); tmpstr2 = NULL; |
---|
135 | tmpstr3 = NULL; |
---|
136 | |
---|
137 | if(ostrcmp(ownpartname, partitions->ret) == 0) |
---|
138 | { |
---|
139 | if(textbox("MultiBoot", _("You have chosen the active image\nDo you really want to overwrite this?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 650, 200, 0, 0) == 1) |
---|
140 | ret = install_image(instpart); |
---|
141 | else |
---|
142 | ret = 2; |
---|
143 | } |
---|
144 | else |
---|
145 | { |
---|
146 | if(textbox("MultiBoot", _("Do you really want to overwrite the chosen image?"), _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 650, 200, 0, 0) == 1) |
---|
147 | ret = install_image(instpart); |
---|
148 | else |
---|
149 | ret = 2; |
---|
150 | } |
---|
151 | if(ret == 1) |
---|
152 | textbox("MultiBoot", _("The image was successfully installed"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 650, 200, 0, 0); |
---|
153 | if(ret == 0) |
---|
154 | textbox("MultiBoot", _("ERROR: The installation ends with error"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 650, 200, 0, 0); |
---|
155 | ret = 0; |
---|
156 | free(instpart); instpart = NULL; |
---|
157 | break; |
---|
158 | } |
---|
159 | if(rcret == getrcconfigint("rcgreen", NULL)) |
---|
160 | { |
---|
161 | tmpstr = screeninputhelp(partitions->ret, 0, 0, 0); |
---|
162 | if(tmpstr != NULL) |
---|
163 | { |
---|
164 | tmpstr = ostrcat("/boot/", tmpstr, 0, 1); |
---|
165 | tmpstr2 = ostrcat("/boot/", partitions->ret, 0, 0); |
---|
166 | tmpstr3 = ostrcat("mv ", tmpstr2, 0, 0); |
---|
167 | tmpstr3 = ostrcat(tmpstr3, " ", 1, 0); |
---|
168 | tmpstr3 = ostrcat(tmpstr3, tmpstr, 1, 0); |
---|
169 | system(tmpstr3); |
---|
170 | free(tmpstr); tmpstr = NULL; |
---|
171 | free(tmpstr2); tmpstr2 = NULL; |
---|
172 | free(tmpstr3); tmpstr3 = NULL; |
---|
173 | break; |
---|
174 | } |
---|
175 | } |
---|
176 | } |
---|
177 | delownerrc(screen); |
---|
178 | clearscreen(screen); |
---|
179 | free(ownpart); ownpart = NULL; |
---|
180 | free(ownpartname); ownpartname = NULL; |
---|
181 | } |
---|
182 | if(neustart == 1) |
---|
183 | oshutdown(2, 1); |
---|
184 | } |
---|
185 | |
---|
186 | |
---|
187 | #endif |
---|
188 | |
---|
189 | |
---|