Changeset 2480
- Timestamp:
- Jun 23, 2008, 11:39:11 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
neercs/trunk/src/main.c
r2479 r2480 3 3 * Copyright (c) 2006 Sam Hocevar <sam@zoy.org> 4 4 * 2008 Jean-Yves Lamoureux <jylam@lnxscene.org> 5 * 2008 Pascal Terjan <pterjan@linuxfr.org> 5 6 * All Rights Reserved 6 7 * … … 83 84 int lock_offset = 0; 84 85 int mainret = 0; 86 int attach = 0; 87 int *to_grab = NULL; 88 int nb_to_grab = 0; 85 89 86 90 default_shell = getenv("SHELL"); … … 95 99 if(args==0) 96 100 args = 1; 97 98 /* Create main canvas and associated caca window */99 /* FIXME: do not create display for -R/-h/-v */100 cv = cucul_create_canvas(0, 0);101 dp = caca_create_display(cv);102 if(!dp)103 return 1;104 caca_set_cursor(dp, 1);105 106 w = cucul_get_canvas_width(cv);107 h = cucul_get_canvas_height(cv);108 109 101 110 102 /* Create screen list */ … … 122 114 } 123 115 124 125 116 screen_list->count = 0; 126 screen_list->width = cucul_get_canvas_width(cv);127 117 screen_list->mini = 1; 128 118 screen_list->help = 0; 129 119 screen_list->status = 1; 130 screen_list->height = cucul_get_canvas_height(cv) - ((screen_list->mini*6) + (screen_list->status));131 120 screen_list->wm_type = WM_VSPLIT; 132 121 screen_list->in_bell = 0; … … 168 157 { 169 158 int option_index = 0; 170 char **sockets; 171 int grab = 0; 159 int pidopt; 172 160 static struct myoption long_options[] = 173 161 { … … 189 177 { 190 178 case 'P': /* --pid */ 191 add_screen(screen_list,create_screen_grab(w, h, atoi(myoptarg))); 179 pidopt = atoi(myoptarg); 180 if(pidopt <= 0) 181 { 182 fprintf(stderr, "Invalid pid %d\n", pidopt); 183 if(to_grab) 184 free(to_grab); 185 return -1; 186 } 187 if(!to_grab) 188 { 189 /* At most argc-1-s times -P <pid> */ 190 to_grab = (int *)malloc(((argc-1-s)/2)*sizeof(int)); 191 if(!to_grab) 192 { 193 fprintf(stderr, "Can't allocate memory at %s:%d\n", __FUNCTION__, __LINE__); 194 return -1; 195 } 196 } 197 to_grab[nb_to_grab++] = pidopt; 192 198 s+=2; 193 grab = 1;194 199 break; 195 200 case 'R': 196 if(grab) 197 { 198 fprintf(stderr, "-P and -R can not be used together!\n"); 199 mainret = -1; 200 goto end; 201 } 202 caca_free_display(dp); 203 dp = NULL; 204 sockets = list_sockets(screen_list->socket_dir); 205 if(sockets && sockets[0]) 206 { 207 request_attach(sockets[0]); 208 for(i=0; sockets[i]; i++) 209 free(sockets[i]); 210 free(sockets); 211 } 212 else 213 { 214 fprintf(stderr, "No socket found!\n"); 215 mainret = -1; 216 } 217 goto end; 201 attach = 1; 202 s+=1; 218 203 break; 219 204 case 'h': /* --help */ 220 205 usage(argc, argv); 221 goto end;206 return 0; 222 207 break; 223 208 case 'v': /* --version */ 224 209 version(); 225 goto end;210 return 0; 226 211 break; 227 212 default: 228 213 fprintf(stderr, "Unknown argument #%d\n", myoptind); 229 mainret = -1; 230 goto end; 231 break; 232 } 233 } 234 235 236 if(s == 0 && argc<2) 214 return -1; 215 break; 216 } 217 } 218 219 if(attach) 220 { 221 char **sockets; 222 if(nb_to_grab || (argc-1 > s)) 223 { 224 fprintf(stderr, "-R can be associated with commands or pids!\n"); 225 return -1; 226 } 227 sockets = list_sockets(screen_list->socket_dir); 228 if(sockets && sockets[0]) 229 { 230 request_attach(sockets[0]); 231 fprintf(stderr, "Failed to attach!\n"); 232 for(i=0; sockets[i]; i++) 233 free(sockets[i]); 234 free(sockets); 235 } 236 else 237 { 238 fprintf(stderr, "No socket found!\n"); 239 } 240 return -1; 241 } 242 243 /* Create main canvas and associated caca window */ 244 cv = cucul_create_canvas(0, 0); 245 dp = caca_create_display(cv); 246 if(!dp) 247 return 1; 248 caca_set_cursor(dp, 1); 249 250 w = cucul_get_canvas_width(cv); 251 h = cucul_get_canvas_height(cv); 252 253 screen_list->width = cucul_get_canvas_width(cv); 254 screen_list->height = cucul_get_canvas_height(cv) - ((screen_list->mini*6) + (screen_list->status)); 255 256 if(nb_to_grab == 0 && s == argc -1) 237 257 { 238 258 add_screen(screen_list, create_screen(w, h, default_shell)); 239 259 } 260 261 /* Attach processes */ 262 for(i=0; i<nb_to_grab - s; i++) 263 { 264 add_screen(screen_list,create_screen_grab(w, h, to_grab[i])); 265 } 266 free(to_grab); 240 267 241 268 /* Launch command line processes */ … … 244 271 add_screen(screen_list, create_screen(w, h, argv[i+s+1])); 245 272 } 246 247 273 248 274 /* Windows are in a temporary state, resize them to the right dimensions */ … … 534 560 } 535 561 536 end:537 562 /* Clean up */ 538 563 if(dp)
Note: See TracChangeset
for help on using the changeset viewer.