名前: 角藤 日時: 2003-09-22 00:16:22 IPアドレス: 61.22.121.*
>>21970 >しかしEOPの前にEOFが来るというのは,やはり何かおかしいんでしょうか。 0xef は必ずしも special とは限らないので、その場合は 読み返すようにしてみました: void dvi_paper_size (double *width, double *height, char *landscape) { unsigned char opcode, buffer[256], *start, *end; unsigned long n; /* --ak */ seek_absolute(dvi_file, page_loc[0]); while ((opcode = fgetc(dvi_file)) != EOP) { int i, len; char *start = buffer; if (opcode != XXX1) continue; n = ftell(dvi_file); /* --ak */ len = get_unsigned_byte(dvi_file); for (i = 0; i < len; i++) buffer[i] = get_unsigned_byte(dvi_file); start = buffer; end = buffer + len; skip_white(&start, end); if (strncmp(start, "landscape", 9) == 0) *landscape = 1; else if (strncmp(start, "papersize", 9) == 0) { char *key, *val, *val_start, *val_end, *num; double unit; parse_key_val(&start, end, &key, &val); if (key && val) { val_start = val; val_end = val + strlen(val); skip_white(&val_start, val_end); if ((num = parse_number(&val_start, val_end))) { *width = atof(num); RELEASE(num); if ((unit = parse_one_unit(&val_start, val_end)) > 0.0) *width *= unit; } } skip_white(&val_start, val_end); if (val_start < val_end && *(val_start++) == ',') skip_white(&val_start, val_end); if ((num = parse_number(&val_start, val_end))) { *height = atof(num); RELEASE(num); if ((unit = parse_one_unit(&val_start, val_end)) > 0.0) *height *= unit; } if (key) RELEASE(key); if (val) RELEASE(val); } else seek_absolute(dvi_file, n); /* --ak */ } }
この書き込みへの返事: