jetroff@pcrat.UUCP (10/28/88)
Posting-number: Volume 5, Issue 4 Submitted-by: "A. Nonymous" <jetroff@pcrat.UUCP> Archive-name: jetroff/Patch01 JetRoff, Usenet version 1.1, Patch 01. 10/03/88. This patch was contributed by Lou Salkind (Thanks, Lou!). This bug rears its ugly head on 3B2's for sure. Apply this patch this way: cd root_of_JetRoff_source patch -p <Patch01 "On a machine that does not sign extend its characters, the code in pk16.c and makeDESC.c does not work. Also, I believe the pk_long routines are not quite right". Here are the diffs: *** djet/pk16.c.b Tue Sep 27 04:49:49 1988 --- djet/pk16.c Thu Sep 29 01:12:10 1988 *************** *** 134,149 **** int pk_loc; unsigned char pk_byte() { return (pk[npk]->storage[pk_loc++]); } ! short pk_short() { ! register short a = pk_byte(); return (a*256 + pk_byte()); } long pk_long() { register long a = pk_short(); ! if (a > 32767) a -= 65536; ! return (a*65536 + pk_short()); } /* --- 134,160 ---- int pk_loc; unsigned char pk_byte() { return (pk[npk]->storage[pk_loc++]); } ! ! pk_sbyte() { ! register int a = pk_byte(); ! if (a > 127) a -= 256; ! return(a); ! } ! pk_short() ! { ! register short a = pk_sbyte(); return (a*256 + pk_byte()); } + uint pk_ushort() + { + register ushort a = pk_byte(); + return (a*256 + pk_byte()); + } long pk_long() { register long a = pk_short(); ! return (a*65536 + pk_ushort()); } /* *************** *** 268,275 **** /* dy = 0; not used */ w = pk_byte(); h = pk_byte(); ! hoff = (char) pk_byte(); ! voff = (char) pk_byte(); } if (cc < 0 || cc > 127) error(1, "character code out of range"); --- 279,286 ---- /* dy = 0; not used */ w = pk_byte(); h = pk_byte(); ! hoff = pk_sbyte(); ! voff = pk_sbyte(); } if (cc < 0 || cc > 127) error(1, "character code out of range"); *** font/devjet/makeDESC.c.bak Tue Sep 27 04:50:00 1988 --- font/devjet/makeDESC.c Thu Sep 29 01:20:55 1988 *************** *** 120,135 **** int pk_loc; unsigned char pk_byte() { return (pk[npk]->storage[pk_loc++]); } ! short pk_short() { ! register short a = pk_byte(); return (a*256 + pk_byte()); } long pk_long() { register long a = pk_short(); ! if (a > 32767) a -= 65536; ! return (a*65536 + pk_short()); } /* --- 120,146 ---- int pk_loc; unsigned char pk_byte() { return (pk[npk]->storage[pk_loc++]); } ! ! pk_sbyte() { ! register int a = pk_byte(); ! if (a > 127) a -= 256; ! return(a); ! } ! pk_short() ! { ! register short a = pk_sbyte(); return (a*256 + pk_byte()); } + uint pk_ushort() + { + register ushort a = pk_byte(); + return (a*256 + pk_byte()); + } long pk_long() { register long a = pk_short(); ! return (a*65536 + pk_ushort()); } /* *************** *** 254,261 **** dy = 0; w = pk_byte(); h = pk_byte(); ! hoff = (char) pk_byte(); ! voff = (char) pk_byte(); } if (cc < 0 || cc > 127) error(1, "character code %d out of range", cc); --- 265,272 ---- dy = 0; w = pk_byte(); h = pk_byte(); ! hoff = pk_sbyte(); ! voff = pk_sbyte(); } if (cc < 0 || cc > 127) error(1, "character code %d out of range", cc);