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");