/*
-** Ullrich von Bassewitz, 2012-06-03. Based on code by Groepaz.
+** 2012-06-03, Ullrich von Bassewitz. Based on code by Groepaz.
+** 2014-07-16, Greg King
*/
#include <fcntl.h>
unsigned char count;
unsigned char buf[128];
- /* Make sure we have a reasonable value for offs */
- if (offs > 0x1000) {
+ /* Make sure that we have a reasonable value for offs. We reject
+ ** negative numbers by converting them to (very high) unsigned values.
+ */
+ if ((unsigned long)offs > 0x1000uL) {
errno = EINVAL;
return;
}
}
/* Skip until we've reached the target offset in the directory */
- o = dir->off = offs;
+ o = dir->off = (unsigned)offs;
while (o) {
/* Determine size of next chunk to read */
- if (o > sizeof (buf)) {
+ if (o > sizeof (buf)) {
count = sizeof (buf);
o -= sizeof (buf);
} else {
- count = offs;
+ count = (unsigned char)o;
o = 0;
}
;
-; Oliver Schmidt, 2012-10-16
+; 2012-10-16, Oliver Schmidt
+; 2014-07-16, Greg King
;
; unsigned char __fastcall__ _syschdir (const char* name);
;
; Multiply first digit by 10
- ldx #8
-@L0: asl
- asl tmp1
- bcc @L1
- clc
- adc #10
-@L1: dex
- bne @L0
+ txa
+ asl a ; * 2
+ asl a ; * 4, carry cleared
+ adc tmp1 ; * 5
+ asl a ; * 10, carry cleared
; Add second digit to product
- clc
adc tmp2
tax
.endproc
;--------------------------------------------------------------------------
-; getdigit
+; getdigit -- Converts PetSCII to binary.
+; Sets carry if the character is outside of '0'-'9'.
.proc getdigit