Ignore:
Timestamp:
Jun 22, 2008, 11:57:21 AM (14 years ago)
Author:
Pascal Terjan
Message:
  • First more or less working version of attach
File:
1 edited

Legend:

Unmodified
Added
Removed
  • neercs/trunk/src/main.c

    r2473 r2474  
    7171    printf("Options :\n");
    7272    printf("\t--pid\t\t-P <pid>\t\tattach <pid>\n");
     73    printf("\t\t\t-R\t\t\tre-attach another neercs\n");
    7374    printf("\t--version\t-v \t\t\tdisplay version and exit\n");
    7475    printf("\t--help\t\t-h \t\t\tthis help\n");
     
    8687    long long unsigned int last_key_time = 0;
    8788    int lock_offset = 0;
    88 
     89    int mainret = 0;
    8990
    9091    default_shell = getenv("SHELL");
     
    101102
    102103    /* Create main canvas and associated caca window */
     104    /* FIXME: do not create display for -R/-h/-v */
    103105    cv = cucul_create_canvas(0, 0);
    104106    dp = caca_create_display(cv);
     
    141143    screen_list->locked = 0;
    142144    screen_list->attached = 1;
     145    screen_list->socket = 0;
     146    screen_list->socket_dir = NULL;
     147    screen_list->socket_path = NULL;
    143148    memset(screen_list->lockmsg, 0, 1024);
    144149    memset(screen_list->lockpass, 0, 1024);
    145 
    146150
    147151    if(!read_configuration_file("neercs.ini", screen_list))
     
    169173    {
    170174        int option_index = 0;
     175        char **sockets;
     176        int grab = 0;
    171177        static struct myoption long_options[] =
    172178            {
     
    178184            };
    179185#if defined USE_GRAB
    180         int c = mygetopt(argc, argv, "P:hv", long_options, &option_index);
     186        int c = mygetopt(argc, argv, "RP:hv", long_options, &option_index);
    181187#else
    182         int c = mygetopt(argc, argv, "hv", long_options, &option_index);
     188        int c = mygetopt(argc, argv, "Rhv", long_options, &option_index);
    183189#endif
    184190        if(c == -1)
     
    190196            add_screen(screen_list,create_screen_grab(w, h, atoi(myoptarg)));
    191197            s+=2;
     198            grab = 1;
     199            break;
     200        case 'R':
     201            if(grab)
     202            {
     203                fprintf(stderr, "-P and -R can not be used together!\n");
     204                mainret = -1;
     205                goto end;
     206            }
     207            sockets = list_sockets(screen_list->socket_dir);
     208            if(sockets && sockets[0])
     209            {
     210                request_attach(sockets[0]);
     211                for(i=0; sockets[i]; i++)
     212                    free(sockets[i]);
     213                free(sockets);
     214            }
     215            goto end;
    192216            break;
    193217        case 'h': /* --help */
    194218            usage(argc, argv);
    195             return 0;
     219            goto end;
    196220            break;
    197221        case 'v': /* --version */
     
    200224            break;
    201225        default:
    202             fprintf(stderr, "Unknow argument #%d\n", myoptind);
    203             return -1;
     226            fprintf(stderr, "Unknown argument #%d\n", myoptind);
     227            mainret = -1;
     228            goto end;
    204229            break;
    205230        }
     
    233258
    234259        refresh |= update_screens_contents(screen_list);
     260
     261        refresh |= read_socket(screen_list, cv, &dp);
    235262
    236263        /* No more screens, exit */
     
    510537    }
    511538
     539    if(screen_list->socket_path) {
     540        unlink(screen_list->socket_path);
     541        free(screen_list->socket_path);
     542    }
     543    if(screen_list->socket)
     544        close(screen_list->socket);
     545
    512546    free(screen_list->screen);
    513547
     
    536570    free(recurrent_list);
    537571
    538     return 0;
     572    return mainret;
    539573}
    540574
Note: See TracChangeset for help on using the changeset viewer.