source: titan/titan/multiboot.h @ 42143

Last change on this file since 42143 was 41490, checked in by gost, 6 years ago

[titan] hd51 fix ok button if play

  • Property svn:executable set to *
File size: 5.2 KB
Line 
1#ifndef MULTIBOOT_H
2#define MULTIBOOT_H
3
4int 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
29void 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       
Note: See TracBrowser for help on using the repository browser.