Mercurial > mplayer.hg
comparison input/input.c @ 36137:5302a565ada7
Simplify and clean up code.
author | reimar |
---|---|
date | Sat, 04 May 2013 21:41:37 +0000 |
parents | b4199449fc69 |
children | c3b4a1b48c7d |
comparison
equal
deleted
inserted
replaced
36136:b4199449fc69 | 36137:5302a565ada7 |
---|---|
1579 | 1579 |
1580 free(binds); | 1580 free(binds); |
1581 | 1581 |
1582 } | 1582 } |
1583 | 1583 |
1584 static void strmove(char *dst, const char *src) { | |
1585 memmove(dst, src, strlen(src) + 1); | |
1586 } | |
1587 | |
1584 static int | 1588 static int |
1585 mp_input_parse_config(char *file) { | 1589 mp_input_parse_config(char *file) { |
1586 int fd; | 1590 int fd; |
1587 int bs = 0,r,eof = 0,comments = 0; | 1591 int eof = 0,comments = 0; |
1588 char *iter,*end; | 1592 char *iter,*end; |
1589 char buffer[BS_MAX]; | 1593 char buffer[BS_MAX]; |
1590 int n_binds = 0, keys[MP_MAX_KEY_DOWN+1] = { 0 }; | 1594 int n_binds = 0, keys[MP_MAX_KEY_DOWN+1] = { 0 }; |
1591 | 1595 |
1592 fd = open(file,O_RDONLY); | 1596 fd = open(file,O_RDONLY); |
1597 return 0; | 1601 return 0; |
1598 } | 1602 } |
1599 | 1603 |
1600 mp_msg(MSGT_INPUT,MSGL_V,"Parsing input config file %s\n",file); | 1604 mp_msg(MSGT_INPUT,MSGL_V,"Parsing input config file %s\n",file); |
1601 | 1605 |
1606 buffer[0] = 0; | |
1602 while(1) { | 1607 while(1) { |
1608 int bs = strlen(buffer); | |
1603 if(! eof && bs < BS_MAX-1) { | 1609 if(! eof && bs < BS_MAX-1) { |
1604 if(bs > 0) bs--; | 1610 int r = read(fd,buffer+bs,BS_MAX-1-bs); |
1605 r = read(fd,buffer+bs,BS_MAX-1-bs); | |
1606 if(r < 0) { | 1611 if(r < 0) { |
1607 if(errno == EINTR) | 1612 if(errno == EINTR) |
1608 continue; | 1613 continue; |
1609 mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrReadingInputConfig,file,strerror(errno)); | 1614 mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrReadingInputConfig,file,strerror(errno)); |
1610 close(fd); | 1615 close(fd); |
1611 return 0; | 1616 return 0; |
1612 } else if(r == 0) { | |
1613 eof = 1; | |
1614 } else { | |
1615 bs += r+1; | |
1616 buffer[bs-1] = 0; | |
1617 } | 1617 } |
1618 eof = r == 0; | |
1619 bs += r; | |
1620 buffer[bs] = 0; | |
1618 } | 1621 } |
1619 // Empty buffer : return | 1622 // Empty buffer : return |
1620 if(bs <= 1) { | 1623 if(!buffer[0]) { |
1621 mp_msg(MSGT_INPUT,MSGL_V,"Input config file %s parsed: %d binds\n",file,n_binds); | 1624 mp_msg(MSGT_INPUT,MSGL_V,"Input config file %s parsed: %d binds\n",file,n_binds); |
1622 close(fd); | 1625 close(fd); |
1623 return 1; | 1626 return 1; |
1624 } | 1627 } |
1625 | 1628 |
1626 iter = buffer; | 1629 iter = buffer; |
1627 | 1630 |
1628 if(comments) { | 1631 if(comments) { |
1632 // search for newline ending comment | |
1629 for( ; iter[0] && iter[0] != '\n' ; iter++) | 1633 for( ; iter[0] && iter[0] != '\n' ; iter++) |
1630 /* NOTHING */; | 1634 /* NOTHING */; |
1631 if(!iter[0]) { // Buffer was full of comment | 1635 if(!iter[0]) { // Buffer was full of comment |
1632 bs = 0; | 1636 buffer[0] = 0; |
1633 continue; | 1637 continue; |
1634 } | 1638 } |
1635 iter++; | |
1636 r = strlen(iter); | |
1637 memmove(buffer,iter,r+1); | |
1638 bs = r+1; | |
1639 comments = 0; | 1639 comments = 0; |
1640 strmove(buffer, iter+1); | |
1640 continue; | 1641 continue; |
1641 } | 1642 } |
1642 | 1643 |
1643 // Find the wanted key | 1644 // Find the wanted key |
1644 if(keys[0] == 0) { | 1645 if(keys[0] == 0) { |
1645 // Jump beginning space | 1646 // Jump beginning space |
1646 for( ; iter[0] && strchr(SPACE_CHAR,iter[0]) != NULL ; iter++) | 1647 for( ; iter[0] && strchr(SPACE_CHAR,iter[0]) != NULL ; iter++) |
1647 /* NOTHING */; | 1648 /* NOTHING */; |
1648 if(!iter[0]) { // Buffer was full of space char | 1649 if(!iter[0]) { // Buffer was full of space char |
1649 bs = 0; | 1650 buffer[0] = 0; |
1650 continue; | 1651 continue; |
1651 } | 1652 } |
1652 if(iter[0] == '#') { // Comments | 1653 if(iter[0] == '#') { // Comments |
1653 comments = 1; | 1654 comments = 1; |
1654 continue; | 1655 continue; |
1656 // Find the end of the key code name | 1657 // Find the end of the key code name |
1657 for(end = iter; end[0] && strchr(SPACE_CHAR,end[0]) == NULL ; end++) | 1658 for(end = iter; end[0] && strchr(SPACE_CHAR,end[0]) == NULL ; end++) |
1658 /*NOTHING */; | 1659 /*NOTHING */; |
1659 if(!end[0]) { // Key name doesn't fit in the buffer | 1660 if(!end[0]) { // Key name doesn't fit in the buffer |
1660 if(buffer == iter) { | 1661 if(buffer == iter) { |
1661 if(eof && (buffer-iter) == bs) | 1662 mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrBuffer2SmallForKeyName,iter); |
1662 mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrUnfinishedBinding,iter); | |
1663 else | |
1664 mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrBuffer2SmallForKeyName,iter); | |
1665 return 0; | 1663 return 0; |
1666 } | 1664 } |
1667 memmove(buffer,iter,end-iter); | 1665 strmove(buffer,iter); |
1668 bs = end-iter; | |
1669 continue; | 1666 continue; |
1670 } | 1667 } |
1671 { | 1668 end[0] = 0; |
1672 char name[end-iter+1]; | 1669 if(! mp_input_get_input_from_name(iter,keys)) { |
1673 strncpy(name,iter,end-iter); | 1670 mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrUnknownKey,iter); |
1674 name[end-iter] = 0; | |
1675 if(! mp_input_get_input_from_name(name,keys)) { | |
1676 mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrUnknownKey,name); | |
1677 close(fd); | 1671 close(fd); |
1678 return 0; | 1672 return 0; |
1679 } | 1673 } |
1680 } | 1674 strmove(buffer,end+1); |
1681 if( bs > (end-buffer)) | |
1682 memmove(buffer,end,bs - (end-buffer)); | |
1683 bs -= end-buffer; | |
1684 continue; | 1675 continue; |
1685 } else { // Get the command | 1676 } else { // Get the command |
1686 while(iter[0] == ' ' || iter[0] == '\t') iter++; | 1677 while(iter[0] == ' ' || iter[0] == '\t') iter++; |
1687 // Found new line | 1678 // Found new line |
1688 if(iter[0] == '\n' || iter[0] == '\r') { | 1679 if(iter[0] == '\n' || iter[0] == '\r') { |
1690 mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrNoCmdForKey,mp_input_get_key_name(keys[0])); | 1681 mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrNoCmdForKey,mp_input_get_key_name(keys[0])); |
1691 for(i = 1; keys[i] != 0 ; i++) | 1682 for(i = 1; keys[i] != 0 ; i++) |
1692 mp_msg(MSGT_INPUT,MSGL_ERR,"-%s",mp_input_get_key_name(keys[i])); | 1683 mp_msg(MSGT_INPUT,MSGL_ERR,"-%s",mp_input_get_key_name(keys[i])); |
1693 mp_msg(MSGT_INPUT,MSGL_ERR,"\n"); | 1684 mp_msg(MSGT_INPUT,MSGL_ERR,"\n"); |
1694 keys[0] = 0; | 1685 keys[0] = 0; |
1695 if(iter > buffer) { | 1686 strmove(buffer,iter+1); |
1696 memmove(buffer,iter,bs- (iter-buffer)); | |
1697 bs -= (iter-buffer); | |
1698 } | |
1699 continue; | 1687 continue; |
1700 } | 1688 } |
1701 for(end = iter ; end[0] != '\n' && end[0] != '\r' && end[0] ; end++) | 1689 for(end = iter ; end[0] != '\n' && end[0] != '\r' && end[0] ; end++) |
1702 /* NOTHING */; | 1690 /* NOTHING */; |
1703 if(!end[0] && ! (eof && ((end+1) - buffer) == bs)) { | 1691 if(!end[0]) { |
1704 if(iter == buffer) { | 1692 if(iter == buffer) { |
1705 mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrBuffer2SmallForCmd,buffer); | 1693 mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrBuffer2SmallForCmd,buffer); |
1706 close(fd); | 1694 close(fd); |
1707 return 0; | 1695 return 0; |
1708 } | 1696 } |
1709 memmove(buffer,iter,end - iter); | 1697 strmove(buffer,iter); |
1710 bs = end - iter; | |
1711 continue; | 1698 continue; |
1712 } | 1699 } |
1713 { | 1700 end[0] = 0; |
1714 char cmd[end-iter+1]; | 1701 mp_input_bind_keys(keys,iter); |
1715 strncpy(cmd,iter,end-iter); | |
1716 cmd[end-iter] = 0; | |
1717 //printf("Set bind %d => %s\n",keys[0],cmd); | |
1718 mp_input_bind_keys(keys,cmd); | |
1719 n_binds++; | 1702 n_binds++; |
1720 } | |
1721 keys[0] = 0; | 1703 keys[0] = 0; |
1722 end++; | 1704 strmove(buffer,end+1); |
1723 if(bs > (end-buffer)) | |
1724 memmove(buffer,end,bs-(end-buffer)); | |
1725 bs -= (end-buffer); | |
1726 continue; | 1705 continue; |
1727 } | 1706 } |
1728 } | 1707 } |
1729 mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrWhyHere); | 1708 mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrWhyHere); |
1730 close(fd); | 1709 close(fd); |