source: titan/titan/multiboot.h @ 41413

Last change on this file since 41413 was 41413, checked in by gost, 5 years ago

[titan] hd51 fix multiboot menu

  • Property svn:executable set to *
File size: 4.0 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 0;
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        system(command);
21        free(imagedir); imagedir = NULL;
22        free(command); command = NULL;
23        return 1;
24}
25
26void screenmultiboot(void)
27{
28        int rcret = 0;
29       
30        DIR *dir;
31        struct dirent * member;
32        char *tmpstr = NULL;
33        char *tmpstr2 = NULL;
34        char *tmpstr3 = NULL;
35        char *ownpart = NULL;
36        char *ownpartname = NULL;
37        int neustart = 0;
38        int ret = 0;
39        int end = 0;
40       
41        struct skin* screen = getscreen("multiboot");
42        struct skin* listbox = getscreennode(screen, "listbox");
43        struct skin* partitions = getscreennode(screen, "partitions");
44
45        while(end == 0)
46        {
47                tmpstr = readsys("/boot/STARTUP", 1);
48                tmpstr2 = ostrstr(tmpstr, "kernel");
49                if(tmpstr2 != NULL)
50                {
51                        tmpstr2[7] = '\0';
52                        ownpart = ostrcat(tmpstr2+6, NULL, 0, 0);
53                //setchoiceboxselection(partitions, ownpart);
54         }
55         free(tmpstr); tmpstr = NULL;
56         tmpstr2 = NULL;               
57               
58                dir = opendir("/boot"); /* oeffne aktuelles Verzeichnis */
59                if (dir)
60                {
61                        while (0 != (member = readdir(dir)))
62                        {
63                        if(ostrcmp(".", member->d_name) != 0 && ostrcmp("..", member->d_name) != 0 && ostrcmp("STARTUP", member->d_name) != 0)
64                                {
65                                tmpstr = ostrcat("/boot/", member->d_name, 0, 0);
66                                tmpstr2 = readsys(tmpstr, 1);
67                                tmpstr3 = ostrstr(tmpstr2, "kernel");
68                                if(tmpstr3 != NULL)
69                                {
70                                        tmpstr3[7] = '\0';
71                                        if(ostrcmp(ownpart, tmpstr3+6) == 0)
72                                        {
73                                                ownpartname = ostrcat(member->d_name, NULL, 0, 0);
74                                                printf("----> own: %s\n", ownpartname);
75                                        }
76                                        addchoicebox(partitions, member->d_name, member->d_name);
77                                }               
78                                free(tmpstr); tmpstr = NULL;
79                                free(tmpstr2); tmpstr2 = NULL;
80                                tmpstr3 = NULL;
81                        }
82                        }
83                        closedir(dir);
84                }
85
86       
87       
88                drawscreen(screen, 0, 0);
89                addscreenrc(screen, listbox);
90       
91                struct skin* tmp = NULL;
92                tmp = listbox->select;
93
94                while(1)
95                {
96                        addscreenrc(screen, tmp);
97                        rcret = waitrc(screen, 0, 0);
98                        tmp = listbox->select;
99                        if(rcret == getrcconfigint("rcexit", NULL))
100                        {
101                                end = 1;
102                                break;
103                        }
104                        if(rcret == getrcconfigint("rcok", NULL))
105                        {
106                                tmpstr = ostrcat("cp /boot/", partitions->ret, 0, 0);
107                                tmpstr = ostrcat(tmpstr, " /boot/startup", 1, 0);
108                                system(tmpstr);
109                                free(tmpstr); tmpstr = NULL;
110                                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)
111                                        neustart = 1;
112                                else
113                                        neustart = 0;
114                                end = 1;
115                                break;
116                        }
117                        if(rcret == getrcconfigint("rcred", NULL))
118                        {
119                                if(ostrcmp(ownpartname, partitions->ret) == 0)
120                                {
121                                        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)
122                                                ret = install_image(partitions->ret);
123                                }
124                                else
125                                {
126                                        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)
127                                                ret = install_image(partitions->ret);
128                                }       
129                                if(ret)
130                                        textbox("MultiBoot", _("The image was successfully installed"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 650, 200, 0, 0);     
131                                else
132                                        textbox("MultiBoot", _("ERROR: The installation ends with error"), _("OK"), getrcconfigint("rcok", NULL), NULL, 0, NULL, 0, NULL, 0, 650, 200, 0, 0);                           
133                        }
134                }
135                delownerrc(screen);
136                clearscreen(screen);
137                free(ownpart); ownpart = NULL;
138        }
139        if(neustart == 1)
140                oshutdown(2, 1);
141}
142
143
144#endif         
145       
146       
Note: See TracBrowser for help on using the repository browser.