~ubuntu-branches/ubuntu/maverick/blender/maverick

« back to all changes in this revision

Viewing changes to source/blender/src/keyval.c

  • Committer: Bazaar Package Importer
  • Author(s): Khashayar Naderehvandi, Khashayar Naderehvandi, Alessio Treglia
  • Date: 2009-01-22 16:53:59 UTC
  • mfrom: (14.1.1 experimental)
  • Revision ID: james.westby@ubuntu.com-20090122165359-v0996tn7fbit64ni
Tags: 2.48a+dfsg-1ubuntu1
[ Khashayar Naderehvandi ]
* Merge from debian experimental (LP: #320045), Ubuntu remaining changes:
  - Add patch correcting header file locations.
  - Add libvorbis-dev and libgsm1-dev to Build-Depends.
  - Use avcodec_decode_audio2() in source/blender/src/hddaudio.c

[ Alessio Treglia ]
* Add missing previous changelog entries.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/**
2
 
 * $Id: keyval.c 14444 2008-04-16 22:40:48Z hos $
 
2
 * $Id: keyval.c 16375 2008-09-05 06:05:25Z aligorith $
3
3
 *
4
4
 * ***** BEGIN GPL LICENSE BLOCK *****
5
5
 *
27
27
 * ***** END GPL LICENSE BLOCK *****
28
28
 */
29
29
 
 
30
#include "stdio.h"
 
31
#include "ctype.h"
 
32
#include "string.h"
 
33
 
 
34
#include "BKE_global.h"
30
35
#include "BLI_blenlib.h"
31
36
#include "BLI_arithb.h"
32
37
#include "BIF_keyval.h"
349
354
        
350
355
        return "";
351
356
}
 
357
 
 
358
/* 
 
359
 * Decodes key combination strings [qual1+[qual2+[...]]]keyname
 
360
 * The '+'s may be replaced by '-' or ' ' characters to support different
 
361
 * formats. No additional whitespace is allowed. The keyname may be an internal
 
362
 * name, like "RETKEY", or a more common name, like "Return". Decoding is case-
 
363
 * insensitive.
 
364
 *
 
365
 * Example strings: "Ctrl+L", "ALT-ESC", "Shift A"
 
366
 *
 
367
 * Returns 1 if successful. 
 
368
 */
 
369
int decode_key_string(char *str, unsigned short *key, unsigned short *qual)
 
370
{
 
371
        int i, prev, len, invalid=0;
 
372
 
 
373
        len= strlen(str);
 
374
        *key= *qual= 0;
 
375
 
 
376
        /* Convert to upper case */
 
377
        for (i=0; i<len; i++) {
 
378
                str[i]= toupper(str[i]);
 
379
        }
 
380
 
 
381
        /* Handle modifiers */
 
382
        for (prev=i=0; i<len; i++) {
 
383
                if (str[i]==' ' || str[i]=='+' || str[i]=='-') {
 
384
                        if (!strncmp(str+prev, "CTRL", i-prev)) *qual |= LR_CTRLKEY;
 
385
                        else if (!strncmp(str+prev, "ALT", i-prev)) *qual |= LR_ALTKEY;
 
386
                        else if (!strncmp(str+prev, "SHIFT", i-prev)) *qual |= LR_SHIFTKEY;
 
387
                        else if (!strncmp(str+prev, "COMMAND", i-prev)) *qual |= LR_COMMANDKEY;
 
388
                        prev=i+1;
 
389
                }
 
390
        }
 
391
 
 
392
        /* Compare last part against key names */
 
393
        if ((len-prev==1) || ((len-prev==4) && !strncmp(str+prev, "KEY", 3))) {
 
394
                
 
395
                if (str[prev]>='A' && str[prev]<='Z') {
 
396
                        *key= str[prev]-'A'+AKEY;
 
397
                } else if (str[prev]>='0' && str[prev]<='9') {
 
398
                        *key= str[prev]-'0'+ZEROKEY;
 
399
                } else {
 
400
                        invalid= 1;
 
401
                }
 
402
        
 
403
        } else if (!strncmp(str+prev, "ZEROKEY", len-prev) || !strncmp(str+prev, "ZERO", len-prev)) {
 
404
                *key= ZEROKEY;
 
405
        } else if (!strncmp(str+prev, "ONEKEY", len-prev) || !strncmp(str+prev, "ONE", len-prev)) {
 
406
                *key= ONEKEY;
 
407
        } else if (!strncmp(str+prev, "TWOKEY", len-prev) || !strncmp(str+prev, "TWO", len-prev)) {
 
408
                *key= TWOKEY;
 
409
        } else if (!strncmp(str+prev, "THREEKEY", len-prev) || !strncmp(str+prev, "THREE", len-prev)) {
 
410
                *key= THREEKEY;
 
411
        } else if (!strncmp(str+prev, "FOURKEY", len-prev) || !strncmp(str+prev, "FOUR", len-prev)) {
 
412
                *key= FOURKEY;
 
413
        } else if (!strncmp(str+prev, "FIVEKEY", len-prev) || !strncmp(str+prev, "FIVE", len-prev)) {
 
414
                *key= FIVEKEY;
 
415
        } else if (!strncmp(str+prev, "SIZEKEY", len-prev) || !strncmp(str+prev, "SIX", len-prev)) {
 
416
                *key= SIXKEY;
 
417
        } else if (!strncmp(str+prev, "SEVENKEY", len-prev) || !strncmp(str+prev, "SEVEN", len-prev)) {
 
418
                *key= SEVENKEY;
 
419
        } else if (!strncmp(str+prev, "EIGHTKEY", len-prev) || !strncmp(str+prev, "EIGHT", len-prev)) {
 
420
                *key= EIGHTKEY;
 
421
        } else if (!strncmp(str+prev, "NINEKEY", len-prev) || !strncmp(str+prev, "NINE", len-prev)) {
 
422
                *key= NINEKEY;
 
423
 
 
424
        } else if (!strncmp(str+prev, "ESCKEY", len-prev) || !strncmp(str+prev, "ESC", len-prev)) {
 
425
                *key= ESCKEY;
 
426
        } else if (!strncmp(str+prev, "TABKEY", len-prev) || !strncmp(str+prev, "TAB", len-prev)) {
 
427
                *key= TABKEY;
 
428
        } else if (!strncmp(str+prev, "RETKEY", len-prev) || !strncmp(str+prev, "RETURN", len-prev) || !strncmp(str+prev, "ENTER", len-prev)) {
 
429
                *key= RETKEY;
 
430
        } else if (!strncmp(str+prev, "SPACEKEY", len-prev) || !strncmp(str+prev, "SPACE", len-prev)) {
 
431
                *key= SPACEKEY;
 
432
        } else if (!strncmp(str+prev, "LINEFEEDKEY", len-prev) || !strncmp(str+prev, "LINEFEED", len-prev)) {
 
433
                *key= LINEFEEDKEY;
 
434
        } else if (!strncmp(str+prev, "BACKSPACEKEY", len-prev) || !strncmp(str+prev, "BACKSPACE", len-prev)) {
 
435
                *key= BACKSPACEKEY;
 
436
        } else if (!strncmp(str+prev, "DELKEY", len-prev) || !strncmp(str+prev, "DELETE", len-prev)) {
 
437
                *key= DELKEY;
 
438
        
 
439
        } else if (!strncmp(str+prev, "SEMICOLONKEY", len-prev) || !strncmp(str+prev, "SEMICOLON", len-prev)) {
 
440
                *key= SEMICOLONKEY;
 
441
        } else if (!strncmp(str+prev, "PERIODKEY", len-prev) || !strncmp(str+prev, "PERIOD", len-prev)) {
 
442
                *key= PERIODKEY;
 
443
        } else if (!strncmp(str+prev, "COMMAKEY", len-prev) || !strncmp(str+prev, "COMMA", len-prev)) {
 
444
                *key= COMMAKEY;
 
445
        } else if (!strncmp(str+prev, "QUOTEKEY", len-prev) || !strncmp(str+prev, "QUOTE", len-prev)) {
 
446
                *key= QUOTEKEY;
 
447
        } else if (!strncmp(str+prev, "ACCENTGRAVEKEY", len-prev) || !strncmp(str+prev, "ACCENTGRAVE", len-prev)) {
 
448
                *key= ACCENTGRAVEKEY;
 
449
        } else if (!strncmp(str+prev, "MINUSKEY", len-prev) || !strncmp(str+prev, "MINUS", len-prev)) {
 
450
                *key= MINUSKEY;
 
451
        } else if (!strncmp(str+prev, "SLASHKEY", len-prev) || !strncmp(str+prev, "SLASH", len-prev)) {
 
452
                *key= SLASHKEY;
 
453
        } else if (!strncmp(str+prev, "BACKSLASHKEY", len-prev) || !strncmp(str+prev, "BACKSLASH", len-prev)) {
 
454
                *key= BACKSLASHKEY;
 
455
        } else if (!strncmp(str+prev, "EQUALKEY", len-prev) || !strncmp(str+prev, "EQUAL", len-prev)) {
 
456
                *key= EQUALKEY;
 
457
        } else if (!strncmp(str+prev, "LEFTBRACKETKEY", len-prev) || !strncmp(str+prev, "LEFTBRACKET", len-prev)) {
 
458
                *key= LEFTBRACKETKEY;
 
459
        } else if (!strncmp(str+prev, "RIGHTBRACKETKEY", len-prev) || !strncmp(str+prev, "RIGHTBRACKET", len-prev)) {
 
460
                *key= RIGHTBRACKETKEY;
 
461
        } else if (!strncmp(str+prev, "DELKEY", len-prev) || !strncmp(str+prev, "DELETE", len-prev)) {
 
462
                *key= DELKEY;
 
463
        
 
464
        } else if (!strncmp(str+prev, "LEFTARROWKEY", len-prev) || !strncmp(str+prev, "LEFTARROW", len-prev)) {
 
465
                *key= LEFTARROWKEY;
 
466
        } else if (!strncmp(str+prev, "DOWNARROWKEY", len-prev) || !strncmp(str+prev, "DOWNARROW", len-prev)) {
 
467
                *key= DOWNARROWKEY;
 
468
        } else if (!strncmp(str+prev, "RIGHTARROWKEY", len-prev) || !strncmp(str+prev, "RIGHTARROW", len-prev)) {
 
469
                *key= RIGHTARROWKEY;
 
470
        } else if (!strncmp(str+prev, "UPARROWKEY", len-prev) || !strncmp(str+prev, "UPARROW", len-prev)) {
 
471
                *key= UPARROWKEY;
 
472
 
 
473
        } else if (!strncmp(str+prev, "PAD", 3)) {
 
474
                
 
475
                if (len-prev<=4) {
 
476
                
 
477
                        if (str[prev]>='0' && str[prev]<='9') {
 
478
                                *key= str[prev]-'0'+ZEROKEY;
 
479
                        } else {
 
480
                                invalid= 1;
 
481
                        }
 
482
                
 
483
                } else if (!strncmp(str+prev+3, "PERIODKEY", len-prev-3) || !strncmp(str+prev+3, "PERIOD", len-prev-3)) {
 
484
                        *key= PADPERIOD;
 
485
                } else if (!strncmp(str+prev+3, "SLASHKEY", len-prev-3) || !strncmp(str+prev+3, "SLASH", len-prev-3)) {
 
486
                        *key= PADSLASHKEY;
 
487
                } else if (!strncmp(str+prev+3, "ASTERKEY", len-prev-3) || !strncmp(str+prev+3, "ASTERISK", len-prev-3)) {
 
488
                        *key= PADASTERKEY;
 
489
                } else if (!strncmp(str+prev+3, "MINUSKEY", len-prev-3) || !strncmp(str+prev+3, "MINUS", len-prev-3)) {
 
490
                        *key= PADMINUS;
 
491
                } else if (!strncmp(str+prev+3, "ENTERKEY", len-prev-3) || !strncmp(str+prev+3, "ENTER", len-prev-3)) {
 
492
                        *key= PADENTER;
 
493
                } else if (!strncmp(str+prev+3, "PLUSKEY", len-prev-3) || !strncmp(str+prev+3, "PLUS", len-prev-3)) {
 
494
                        *key= PADPLUSKEY;
 
495
                } else {
 
496
                        invalid= 1;
 
497
                }
 
498
 
 
499
        } else if (!strncmp(str+prev, "F1KEY", len-prev) || !strncmp(str+prev, "F1", len-prev)) {
 
500
                *key= F1KEY;
 
501
        } else if (!strncmp(str+prev, "F2KEY", len-prev) || !strncmp(str+prev, "F2", len-prev)) {
 
502
                *key= F2KEY;
 
503
        } else if (!strncmp(str+prev, "F3KEY", len-prev) || !strncmp(str+prev, "F3", len-prev)) {
 
504
                *key= F3KEY;
 
505
        } else if (!strncmp(str+prev, "F4KEY", len-prev) || !strncmp(str+prev, "F4", len-prev)) {
 
506
                *key= F4KEY;
 
507
        } else if (!strncmp(str+prev, "F5KEY", len-prev) || !strncmp(str+prev, "F5", len-prev)) {
 
508
                *key= F5KEY;
 
509
        } else if (!strncmp(str+prev, "F6KEY", len-prev) || !strncmp(str+prev, "F6", len-prev)) {
 
510
                *key= F6KEY;
 
511
        } else if (!strncmp(str+prev, "F7KEY", len-prev) || !strncmp(str+prev, "F7", len-prev)) {
 
512
                *key= F7KEY;
 
513
        } else if (!strncmp(str+prev, "F8KEY", len-prev) || !strncmp(str+prev, "F8", len-prev)) {
 
514
                *key= F8KEY;
 
515
        } else if (!strncmp(str+prev, "F9KEY", len-prev) || !strncmp(str+prev, "F9", len-prev)) {
 
516
                *key= F9KEY;
 
517
        } else if (!strncmp(str+prev, "F10KEY", len-prev) || !strncmp(str+prev, "F10", len-prev)) {
 
518
                *key= F10KEY;
 
519
        } else if (!strncmp(str+prev, "F11KEY", len-prev) || !strncmp(str+prev, "F11", len-prev)) {
 
520
                *key= F11KEY;
 
521
        } else if (!strncmp(str+prev, "F12KEY", len-prev) || !strncmp(str+prev, "F12", len-prev)) {
 
522
                *key= F12KEY;
 
523
 
 
524
        } else if (!strncmp(str+prev, "PAUSEKEY", len-prev) || !strncmp(str+prev, "PAUSE", len-prev)) {
 
525
                *key= PAUSEKEY;
 
526
        } else if (!strncmp(str+prev, "INSERTKEY", len-prev) || !strncmp(str+prev, "INSERT", len-prev)) {
 
527
                *key= INSERTKEY;
 
528
        } else if (!strncmp(str+prev, "HOMEKEY", len-prev) || !strncmp(str+prev, "HOME", len-prev)) {
 
529
                *key= HOMEKEY;
 
530
        } else if (!strncmp(str+prev, "PAGEUPKEY", len-prev) || !strncmp(str+prev, "PAGEUP", len-prev)) {
 
531
                *key= PAGEUPKEY;
 
532
        } else if (!strncmp(str+prev, "PAGEDOWNKEY", len-prev) || !strncmp(str+prev, "PAGEDOWN", len-prev)) {
 
533
                *key= PAGEDOWNKEY;
 
534
        } else if (!strncmp(str+prev, "ENDKEY", len-prev) || !strncmp(str+prev, "END", len-prev)) {
 
535
                *key= ENDKEY;
 
536
        
 
537
        } else {
 
538
                invalid= 1;
 
539
        }
 
540
 
 
541
        if (!invalid && *key) {
 
542
                return 1;
 
543
        }
 
544
        
 
545
        return 0;
 
546
}