From bug-octave-request at bevo dot che dot wisc dot edu Wed Jan 20 12:06:33 1999 Subject: Unidentified subject! From: "John W. Eaton" To: youcef dot sini at dev-lme dot pcc dot philips dot com (sini youcef) Cc: help-octave at bevo dot che dot wisc dot edu, bug-octave@bevo.che.wisc.edu Date: Wed, 20 Jan 1999 12:06:45 -0600 (CST) On 20-Jan-1999, sini youcef wrote: | I am using octave and I am quitre disapointed that fscanf | can not behave like matlab's fscanf in the case of reading short ints | | In effect the behaviour for the following instructions : | fid = fopen('num.txt','r'); | f = fscnf(fid,'%hi'); | | does not lead to read short ints if num.txt is : | 0x8888 | 0x1234 | | We should get | f = [ | -30584 | 4660 | ] | | and not | | f = [ | 34952 | 4660 | ] Please try the following patch. Also, please report bugs to bug-octave at bevo dot che dot wisc dot edu dot Thanks, jwe Wed Jan 20 12:01:14 1999 John W. Eaton * oct-stream.cc (octave_base_stream::do_scanf): Handle short and long ints correctly. *** src/oct-stream.cc~ Tue Aug 18 16:39:09 1998 --- src/oct-stream.cc Wed Jan 20 12:00:49 1999 *************** *** 294,300 **** break; case 'h': case 'l': case 'L': - // We accept these but we don't actually use them. if (modifier != '\0') nconv = -1; else --- 294,299 ---- *************** *** 932,937 **** --- 931,944 ---- do_scanf_conv (istream&, const char*, int*, Matrix&, double*, int&, int, int, bool); + template void + do_scanf_conv (istream&, const char*, long int*, Matrix&, double*, int&, + int, int, bool); + + template void + do_scanf_conv (istream&, const char*, short int*, Matrix&, double*, int&, + int, int, bool); + #if 0 template void do_scanf_conv (istream&, const char*, float*, Matrix&, double*, int&, *************** *** 1038,1047 **** case 'd': case 'i': case 'o': case 'u': case 'x': { ! int tmp; ! do_scanf_conv (is, fmt, &tmp, mval, data, count, ! nr, max_size, discard); } break; --- 1045,1076 ---- case 'd': case 'i': case 'o': case 'u': case 'x': { ! switch (elt->modifier) ! { ! case 'h': ! { ! short int tmp; ! do_scanf_conv (is, fmt, &tmp, mval, data, count, ! nr, max_size, discard); ! } ! break; ! ! case 'l': ! { ! long int tmp; ! do_scanf_conv (is, fmt, &tmp, mval, data, count, ! nr, max_size, discard); ! } ! break; ! default: ! { ! int tmp; ! do_scanf_conv (is, fmt, &tmp, mval, data, count, ! nr, max_size, discard); ! } ! break; ! } } break;