You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
330 volume VI os16<br />
Sorgenti della libreria generale 331<br />
2810811 | }<br />
2810812 | f += 2;<br />
2810813 | input = next;<br />
2810814 | }<br />
2810815 | else if (format[f+1] == ’o’)<br />
2810816 | {<br />
2810817 | //--------------------------- ptrdiff_t, base 8.<br />
2810818 | value_i = strtointmax (input, &next, 8, width);<br />
2810819 | if (input == next)<br />
2810820 | {<br />
2810821 | return (ass_or_eof (consumed, assigned));<br />
2810822 | }<br />
2810823 | consumed++;<br />
2810824 | if (!flag_star)<br />
2810825 | {<br />
2810826 | ptr_ptrdiff = va_arg (ap, ptrdiff_t *);<br />
2810827 | *ptr_ptrdiff = value_i;<br />
2810828 | assigned++;<br />
2810829 | }<br />
2810830 | f += 2;<br />
2810831 | input = next;<br />
2810832 | }<br />
2810833 | else if (format[f+1] == ’u’)<br />
2810834 | {<br />
2810835 | //-------------------------- ptrdiff_t, base 10.<br />
2810836 | value_u = strtointmax (input, &next, 10, width);<br />
2810837 | if (input == next)<br />
2810838 | {<br />
2810839 | return (ass_or_eof (consumed, assigned));<br />
2810840 | }<br />
2810841 | consumed++;<br />
2810842 | if (!flag_star)<br />
2810843 | {<br />
2810844 | ptr_ptrdiff = va_arg (ap, ptrdiff_t *);<br />
2810845 | *ptr_ptrdiff = value_u;<br />
2810846 | assigned++;<br />
2810847 | }<br />
2810848 | f += 2;<br />
2810849 | input = next;<br />
2810850 | }<br />
2810851 | else if (format[f+1] == ’x’ || format[f+2] == ’X’)<br />
2810852 | {<br />
2810853 | //-------------------------- ptrdiff_t, base 16.<br />
2810854 | value_i = strtointmax (input, &next, 16, width);<br />
2810855 | if (input == next)<br />
2810856 | {<br />
2810857 | return (ass_or_eof (consumed, assigned));<br />
2810858 | }<br />
2810859 | consumed++;<br />
2810860 | if (!flag_star)<br />
2810861 | {<br />
2810862 | ptr_ptrdiff = va_arg (ap, ptrdiff_t *);<br />
2810863 | *ptr_ptrdiff = value_i;<br />
2810864 | assigned++;<br />
2810865 | }<br />
2810866 | f += 2;<br />
2810867 | input = next;<br />
2810868 | }<br />
2810869 | else if (format[f+1] == ’n’)<br />
2810870 | {<br />
2810871 | //----------- signed char, string index counter.<br />
2810872 | ptr_ptrdiff = va_arg (ap, ptrdiff_t *);<br />
2810873 | *ptr_ptrdiff = (ptrdiff_t)<br />
2810874 | (input - start + scanned);<br />
2810875 | f += 2;<br />
2810876 | }<br />
2810877 | else<br />
2810878 | {<br />
2810879 | //------------ unsupported or unknown specifier.<br />
2810880 | f += 1;<br />
2810881 | }<br />
2810882 | }<br />
2810883 | //<br />
2810884 | // Specifiers with no length modifier.<br />
2810885 | //<br />
2810886 | if (format[f] == ’d’)<br />
2810887 | {<br />
2810888 | //----------------------- signed short, base 10.<br />
2810889 | value_i = strtointmax (input, &next, 10, width);<br />
2810890 | if (input == next)<br />
2810891 | {<br />
2810892 | return (ass_or_eof (consumed, assigned));<br />
2810893 | }<br />
2810894 | consumed++;<br />
2810895 | if (!flag_star)<br />
2810896 | {<br />
2810897 | ptr_sshort = va_arg (ap, signed short *);<br />
2810898 | *ptr_sshort = value_i;<br />
2810899 | assigned++;<br />
2810900 | }<br />
2810901 | f += 1;<br />
2810902 | input = next;<br />
2810903 | }<br />
2810904 | else if (format[f] == ’i’)<br />
2810905 | {<br />
2810906 | //------------------------ signed int, base unknown.<br />
2810907 | value_i = strtointmax (input, &next, 0, width);<br />
2810908 | if (input == next)<br />
2810909 | {<br />
2810910 | return (ass_or_eof (consumed, assigned));<br />
2810911 | }<br />
2810912 | consumed++;<br />
2810913 | if (!flag_star)<br />
2810914 | {<br />
2810915 | ptr_sint = va_arg (ap, signed int *);<br />
2810916 | *ptr_sint = value_i;<br />
2810917 | assigned++;<br />
2810918 | }<br />
2810919 | f += 1;<br />
2810920 | input = next;<br />
2810921 | }<br />
2810922 | else if (format[f] == ’o’)<br />
2810923 | {<br />
2810924 | //------------------------------ signed int, base 8.<br />
2810925 | value_i = strtointmax (input, &next, 8, width);<br />
2810926 | if (input == next)<br />
2810927 | {<br />
2810928 | return (ass_or_eof (consumed, assigned));<br />
2810929 | }<br />
2810930 | consumed++;<br />
2810931 | if (!flag_star)<br />
2810932 | {<br />
2810933 | ptr_sint = va_arg (ap, signed int *);<br />
2810934 | *ptr_sint = value_i;<br />
2810935 | assigned++;<br />
2810936 | }<br />
2810937 | f += 1;<br />
2810938 | input = next;<br />
2810939 | }<br />
2810940 | else if (format[f] == ’u’)<br />
2810941 | {<br />
2810942 | //------------------------- unsigned short, base 10.<br />
2810943 | value_u = strtointmax (input, &next, 10, width);<br />
2810944 | if (input == next)<br />
2810945 | {<br />
2810946 | return (ass_or_eof (consumed, assigned));<br />
2810947 | }<br />
2810948 | consumed++;<br />
2810949 | if (!flag_star)<br />
2810950 | {<br />
2810951 | ptr_uint = va_arg (ap, unsigned int *);<br />
2810952 | *ptr_uint = value_u;<br />
2810953 | assigned++;<br />
2810954 | }<br />
2810955 | f += 1;<br />
2810956 | input = next;<br />
2810957 | }<br />
2810958 | else if (format[f] == ’x’ || format[f] == ’X’)<br />
2810959 | {<br />
2810960 | //--------------------------- signed short, base 16.<br />
2810961 | value_i = strtointmax (input, &next, 16, width);<br />
2810962 | if (input == next)<br />
2810963 | {<br />
2810964 | return (ass_or_eof (consumed, assigned));<br />
2810965 | }<br />
2810966 | consumed++;<br />
2810967 | if (!flag_star)<br />
2810968 | {<br />
2810969 | ptr_sint = va_arg (ap, signed int *);<br />
2810970 | *ptr_sint = value_i;<br />
2810971 | assigned++;<br />
2810972 | }<br />
2810973 | f += 1;<br />
2810974 | input = next;<br />
2810975 | }<br />
2810976 | else if (format[f] == ’c’)<br />
2810977 | {<br />
2810978 | //------------------------------------------ char[].<br />
2810979 | if (width == 0) width = 1;<br />
2810980 | //<br />
2810981 | if (!flag_star) ptr_char = va_arg (ap, char *);<br />
2810982 | //<br />
2810983 | for (count = 0;<br />
2810984 | width > 0 && *input != 0;<br />
2810985 | width--, ptr_char++, input++)<br />
2810986 | {<br />
2810987 | if (!flag_star) *ptr_char = *input;<br />
2810988 | //<br />
2810989 | count++;<br />
2810990 | }<br />
2810991 | //<br />
2810992 | if (count) consumed++;<br />
2810993 | if (count && !flag_star) assigned++;<br />
2810994 | //<br />
2810995 | f += 1;<br />
2810996 | }<br />
2810997 | else if (format[f] == ’s’)<br />
2810998 | {<br />
2810999 | //------------------------------------------ string.<br />
2811000 | if (!flag_star) ptr_char = va_arg (ap, char *);<br />
2811001 | //<br />
2811002 | for (count = 0;<br />
2811003 | !isspace (*input) && *input != 0;<br />
2811004 | ptr_char++, input++)<br />
2811005 | {<br />
2811006 | if (!flag_star) *ptr_char = *input;<br />
2811007 | //<br />
2811008 | count++;<br />
2811009 | }<br />
2811010 | if (!flag_star) *ptr_char = 0;<br />
2811011 | //<br />
2811012 | if (count) consumed++;<br />
2811013 | if (count && !flag_star) assigned++;<br />
2811014 | //<br />
2811015 | f += 1;<br />
2811016 | }<br />
2811017 | else if (format[f] == ’[’)<br />
2811018 | {<br />
2811019 | //<br />
2811020 | f++;<br />
2811021 | //<br />
2811022 | if (format[f] == ’^’)<br />
2811023 | {<br />
2811024 | inverted = 1;<br />
2811025 | f++;<br />
2811026 | }<br />
2811027 | else<br />
2811028 | {<br />
2811029 | inverted = 0;<br />
2811030 | }<br />
2811031 | //<br />
2811032 | // Reset ascii array.<br />
2811033 | //<br />
2811034 | for (index = 0; index < 128; index++)<br />
2811035 | {<br />
2811036 | ascii[index] = inverted;<br />
2811037 | }<br />
2811038 | //<br />
2811039 | //<br />
2811040 | //<br />
2811041 | for (count = 0;&format[f] < end_format; count++)<br />
2811042 | {