Changeset 41413


Ignore:
Timestamp:
12/13/17 18:39:57 (5 years ago)
Author:
gost
Message:

[titan] hd51 fix multiboot menu

File:
1 edited

Legend:

Unmodified
Added
Removed
  • titan/titan/multiboot.h

    r41391 r41413  
    22#define MULTIBOOT_H
    33
     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
    426void screenmultiboot(void)
    527{
    6         char* tmpstr = NULL;
    728        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;
    840       
    941        struct skin* screen = getscreen("multiboot");
     
    1143        struct skin* partitions = getscreennode(screen, "partitions");
    1244
    13         addchoicebox(partitions, "1", "Startup_1");
    14         addchoicebox(partitions, "2", "Startup_2");
    15         addchoicebox(partitions, "3", "Startup_3");
    16         addchoicebox(partitions, "4", "Startup_4");
    17         system("cat /boot/STARTUP | cut -d' ' -f2 | cut -dl -f3 > /tmp/boot");
    18         tmpstr = readsys("/tmp/boot", 1);
    19         setchoiceboxselection(partitions, tmpstr);
    20         free(tmpstr); tmpstr = NULL;
     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
    2186       
    22         drawscreen(screen, 0, 0);
    23         addscreenrc(screen, listbox);
    2487       
    25         struct skin* tmp = NULL;
    26         tmp = listbox->select;
     88                drawscreen(screen, 0, 0);
     89                addscreenrc(screen, listbox);
     90       
     91                struct skin* tmp = NULL;
     92                tmp = listbox->select;
    2793
    28         while(1)
    29         {
    30                 addscreenrc(screen, tmp);
    31                 rcret = waitrc(screen, 0, 0);
    32                 tmp = listbox->select;
    33                 if(rcret == getrcconfigint("rcexit", NULL)) 
    34                         break;
    35                 if(rcret == getrcconfigint("rcok", NULL))
     94                while(1)
    3695                {
    37                         tmpstr = ostrcat("cp /boot/startup_", partitions->ret, 0, 0);
    38                         tmpstr = ostrcat(tmpstr, " /boot/startup", 1, 0);
    39                         system(tmpstr);
    40                         free(tmpstr); tmpstr = NULL;
    41                         break;
     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                        }
    42134                }
     135                delownerrc(screen);
     136                clearscreen(screen);
     137                free(ownpart); ownpart = NULL;
    43138        }
    44         delownerrc(screen);
    45         clearscreen(screen);
     139        if(neustart == 1)
     140                oshutdown(2, 1);
    46141}
    47142
Note: See TracChangeset for help on using the changeset viewer.