Mercurial > ~mikael > mcabber > hg
comparison mcabber/src/commands.c @ 558:db019a5f874f
Split do_buffer() and use split_arg()
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Thu, 01 Dec 2005 23:37:15 +0100 |
parents | c72a66dfd2d4 |
children | 89c347b3e4c1 |
comparison
equal
deleted
inserted
replaced
557:c72a66dfd2d4 | 558:db019a5f874f |
---|---|
727 | 727 |
728 if (p) g_free(bare_jid); | 728 if (p) g_free(bare_jid); |
729 free_arg_lst(paramlst); | 729 free_arg_lst(paramlst); |
730 } | 730 } |
731 | 731 |
732 // buffer_updown(updown, nblines) | |
733 // updown: -1=up, +1=down | |
734 inline static void buffer_updown(int updown, char *nlines) | |
735 { | |
736 int nblines; | |
737 | |
738 if (!nlines || !*nlines) | |
739 nblines = 0; | |
740 else | |
741 nblines = atoi(nlines); | |
742 | |
743 if (nblines >= 0) | |
744 scr_BufferScrollUpDown(updown, nblines); | |
745 } | |
746 | |
747 static void buffer_search(int direction, char *arg) | |
748 { | |
749 if (!arg || !*arg) { | |
750 scr_LogPrint(LPRINT_NORMAL, "Missing parameter"); | |
751 return; | |
752 } | |
753 | |
754 strip_arg_special_chars(arg); | |
755 scr_BufferSearch(direction, arg); | |
756 } | |
757 | |
758 static void buffer_date(char *date) | |
759 { | |
760 time_t t; | |
761 | |
762 if (!date || !*date) { | |
763 scr_LogPrint(LPRINT_NORMAL, "Missing parameter"); | |
764 return; | |
765 } | |
766 | |
767 strip_arg_special_chars(date); | |
768 | |
769 t = from_iso8601(date, 0); | |
770 if (t) | |
771 scr_BufferDate(t); | |
772 else | |
773 scr_LogPrint(LPRINT_NORMAL, "Wrong parameter"); | |
774 } | |
775 | |
776 static void buffer_percent(char *arg1, char *arg2) | |
777 { | |
778 // Basically, user has typed "%arg1 arg2" | |
779 // "%50" -> arg1 = 50, arg2 null pointer | |
780 // "% 50" -> arg1 = \0, arg2 = 50 | |
781 | |
782 if (!*arg1 && (!arg2 || !*arg2)) { // No value | |
783 scr_LogPrint(LPRINT_NORMAL, "Missing parameter"); | |
784 return; | |
785 } | |
786 | |
787 if (*arg1 && arg2 && *arg2) { // Two values | |
788 scr_LogPrint(LPRINT_NORMAL, "Wrong parameters"); | |
789 return; | |
790 } | |
791 | |
792 scr_BufferPercent(atoi((*arg1 ? arg1 : arg2))); | |
793 } | |
794 | |
732 static void do_buffer(char *arg) | 795 static void do_buffer(char *arg) |
733 { | 796 { |
734 int search_dir = 0; | 797 char **paramlst; |
798 char *subcmd; | |
735 | 799 |
736 if (!current_buddy) return; | 800 if (!current_buddy) return; |
801 | |
737 if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_GROUP) { | 802 if (buddy_gettype(BUDDATA(current_buddy)) & ROSTER_TYPE_GROUP) { |
738 scr_LogPrint(LPRINT_NORMAL, "Groups have no buffer"); | 803 scr_LogPrint(LPRINT_NORMAL, "Groups have no buffer"); |
739 return; | 804 return; |
740 } | 805 } |
741 | 806 |
742 if (!strcasecmp(arg, "top")) { | 807 paramlst = split_arg(arg, 2, 1); // subcmd, arg |
808 subcmd = *paramlst; | |
809 arg = *(paramlst+1); | |
810 | |
811 if (!subcmd || !*subcmd) { | |
812 scr_LogPrint(LPRINT_NORMAL, "Missing parameter"); | |
813 free_arg_lst(paramlst); | |
814 return; | |
815 } | |
816 | |
817 if (!strcasecmp(subcmd, "top")) { | |
743 scr_BufferTopBottom(-1); | 818 scr_BufferTopBottom(-1); |
744 } else if (!strcasecmp(arg, "bottom")) { | 819 } else if (!strcasecmp(subcmd, "bottom")) { |
745 scr_BufferTopBottom(1); | 820 scr_BufferTopBottom(1); |
746 } else if (!strcasecmp(arg, "clear")) { | 821 } else if (!strcasecmp(subcmd, "clear")) { |
747 scr_BufferClear(); | 822 scr_BufferClear(); |
748 } else if (!strncasecmp(arg, "up", 2)) { | 823 } else if (!strcasecmp(subcmd, "up")) { |
749 int nblines; | 824 buffer_updown(-1, arg); |
750 arg += 2; | 825 } else if (!strcasecmp(subcmd, "down")) { |
751 if (*arg && *arg++ != ' ') { | 826 buffer_updown(1, arg); |
752 scr_LogPrint(LPRINT_NORMAL, "Wrong or missing parameter"); | 827 } else if (!strcasecmp(subcmd, "search_backward")) { |
753 return; | 828 buffer_search(-1, arg); |
754 } | 829 } else if (!strcasecmp(subcmd, "search_forward")) { |
755 nblines = atoi(arg); | 830 buffer_search(1, arg); |
756 if (nblines >= 0) | 831 } else if (!strcasecmp(subcmd, "date")) { |
757 scr_BufferScrollUpDown(-1, nblines); | 832 buffer_date(arg); |
758 } else if (!strncasecmp(arg, "down", 4)) { | 833 } else if (*subcmd == '%') { |
759 int nblines; | 834 buffer_percent(subcmd+1, arg); |
760 arg += 4; | 835 } else { |
761 if (*arg && *arg++ != ' ') { | |
762 scr_LogPrint(LPRINT_NORMAL, "Wrong or missing parameter"); | |
763 return; | |
764 } | |
765 nblines = atoi(arg); | |
766 if (nblines >= 0) | |
767 scr_BufferScrollUpDown(1, nblines); | |
768 } else if (!strncasecmp(arg, "search_backward", 15)) { | |
769 arg += 15; | |
770 if (*arg++ == ' ') | |
771 search_dir = -1; | |
772 else | |
773 scr_LogPrint(LPRINT_NORMAL, "Wrong or missing parameter"); | |
774 } else if (!strncasecmp(arg, "search_forward", 14)) { | |
775 arg += 14; | |
776 if (*arg++ == ' ') | |
777 search_dir = 1; | |
778 else | |
779 scr_LogPrint(LPRINT_NORMAL, "Wrong or missing parameter"); | |
780 } else if (!strncasecmp(arg, "date", 4)) { | |
781 arg += 4; | |
782 if (*arg++ != ' ') { | |
783 scr_LogPrint(LPRINT_NORMAL, "Wrong or missing parameter"); | |
784 return; | |
785 } | |
786 while (*arg == ' ') arg++; | |
787 if (*arg) { | |
788 time_t t = from_iso8601(arg, 0); | |
789 if (t) | |
790 scr_BufferDate(t); | |
791 else | |
792 scr_LogPrint(LPRINT_NORMAL, "Wrong or missing parameter"); | |
793 } | |
794 else | |
795 scr_LogPrint(LPRINT_NORMAL, "Wrong or missing parameter"); | |
796 } else if (*arg == '%') { | |
797 arg++; | |
798 while (*arg == ' ') arg++; | |
799 if (*arg) | |
800 scr_BufferPercent(atoi(arg)); | |
801 else | |
802 scr_LogPrint(LPRINT_NORMAL, "Wrong or missing parameter"); | |
803 } else | |
804 scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!"); | 836 scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!"); |
805 | 837 } |
806 if (search_dir) { // It is a string search command | 838 |
807 for ( ; *arg && *arg == ' ' ; arg++) | 839 free_arg_lst(paramlst); |
808 ; | |
809 scr_BufferSearch(search_dir, arg); | |
810 } | |
811 } | 840 } |
812 | 841 |
813 static void do_clear(char *arg) // Alias for "/buffer clear" | 842 static void do_clear(char *arg) // Alias for "/buffer clear" |
814 { | 843 { |
815 do_buffer("clear"); | 844 do_buffer("clear"); |