24.01.2014 Views

Codice

Codice

Codice

SHOW MORE
SHOW LESS

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 | {

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!