Compare commits

...

3 Commits

Author SHA1 Message Date
Bobbi Webber-Manners
37e05b8508 veserver.py: Fix data corruption bug when writing 2022-09-08 20:55:18 -04:00
Bobbi Webber-Manners
a6190dd720 VEServer.py: Log filename when switching drives. 2022-09-08 18:54:54 -04:00
Bobbi Webber-Manners
ee7e383e83 Fix ticket #15 (muddled vers/minvers parameters) 2022-09-08 18:10:04 -04:00
3 changed files with 46 additions and 44 deletions

View File

@ -310,10 +310,10 @@ void err(enum errtype severity, const char *fmt, ...);
void flushall(void); void flushall(void);
int readdiskblock(uchar device, uint blocknum, char *buf); int readdiskblock(uchar device, uint blocknum, char *buf);
int writediskblock(uchar device, uint blocknum, char *buf); int writediskblock(uchar device, uint blocknum, char *buf);
void fixcase(char *in, char *out, uchar minvers, uchar vers, uchar len); void fixcase(char *in, char *out, uchar vers, uchar minvers, uchar len);
void lowercase(char *p, uchar len, uchar *minvers, uchar *vers); void lowercase(char *p, uchar len, uchar *vers, uchar *minvers);
void uppercase(char *p, uchar len, uchar *minvers, uchar *vers); void uppercase(char *p, uchar len, uchar *vers, uchar *minvers);
void initialcase(uchar mode, char *p, uchar len, uchar *minvers, uchar *vers); void initialcase(uchar mode, char *p, uchar len, uchar *vers, uchar *minvers);
void firstblk(char *dirname, uchar *device, uint *block); void firstblk(char *dirname, uchar *device, uint *block);
void readdatetime(uchar time[4], struct datetime *dt); void readdatetime(uchar time[4], struct datetime *dt);
void writedatetime(struct datetime *dt, uchar time[4]); void writedatetime(struct datetime *dt, uchar time[4]);
@ -570,26 +570,26 @@ int writediskblock(uchar device, uint blocknum, char *buf) {
* as a bitmap representing which characters are upper and which are * as a bitmap representing which characters are upper and which are
* lowercase * lowercase
*/ */
void fixcase(char *in, char *out, uchar minvers, uchar vers, uchar len) { void fixcase(char *in, char *out, uchar vers, uchar minvers, uchar len) {
uint i; uint i;
uchar idx = 0; uchar idx = 0;
if (!(vers & 0x80)) { if (!(minvers & 0x80)) {
for (idx = 0; idx < NMLEN; ++idx) for (idx = 0; idx < NMLEN; ++idx)
out[idx] = in[idx]; out[idx] = in[idx];
out[len] = '\0'; out[len] = '\0';
return; return;
} }
vers <<= 1; minvers <<= 1;
for (i = 0; i < 7; ++i) { for (i = 0; i < 7; ++i) {
out[idx] = ((vers & 0x80) ? tolower(in[idx]) : in[idx]);
++idx;
vers <<= 1;
}
for (i = 0; i < 8; ++i) {
out[idx] = ((minvers & 0x80) ? tolower(in[idx]) : in[idx]); out[idx] = ((minvers & 0x80) ? tolower(in[idx]) : in[idx]);
++idx; ++idx;
minvers <<= 1; minvers <<= 1;
} }
for (i = 0; i < 8; ++i) {
out[idx] = ((vers & 0x80) ? tolower(in[idx]) : in[idx]);
++idx;
vers <<= 1;
}
out[len] = '\0'; out[len] = '\0';
} }
@ -597,28 +597,28 @@ void fixcase(char *in, char *out, uchar minvers, uchar vers, uchar len) {
* Convert filename pointed to by p into lower case (which is recorded * Convert filename pointed to by p into lower case (which is recorded
* as a bitmap in the vers and minvers fields. * as a bitmap in the vers and minvers fields.
*/ */
void lowercase(char *p, uchar len, uchar *minvers, uchar *vers) { void lowercase(char *p, uchar len, uchar *vers, uchar *minvers) {
uint i; uint i;
uchar idx = 0; uchar idx = 0;
*vers = 0x01; *vers = 0x00;
*minvers = 0x00; *minvers = 0x01;
for (i = 0; i < 7; ++i) { for (i = 0; i < 7; ++i) {
*vers <<= 1;
if ((idx < len) && isalpha(p[idx++]))
*vers |= 0x01;
}
for (i = 0; i < 8; ++i) {
*minvers <<= 1; *minvers <<= 1;
if ((idx < len) && isalpha(p[idx++])) if ((idx < len) && isalpha(p[idx++]))
*minvers |= 0x01; *minvers |= 0x01;
} }
for (i = 0; i < 8; ++i) {
*vers <<= 1;
if ((idx < len) && isalpha(p[idx++]))
*vers |= 0x01;
}
} }
/* /*
* Convert filename pointed to by p into upper case (which is recorded * Convert filename pointed to by p into upper case (which is recorded
* as a bitmap in the vers and minvers fields. * as a bitmap in the vers and minvers fields.
*/ */
void uppercase(char*, uchar, uchar *minvers, uchar *vers) { void uppercase(char*, uchar, uchar *vers, uchar *minvers) {
*vers = 0x00; *vers = 0x00;
*minvers = 0x00; *minvers = 0x00;
} }
@ -629,27 +629,27 @@ void uppercase(char*, uchar, uchar *minvers, uchar *vers) {
* If mode = 0 then just uppercase the initial char ("Read.me") * If mode = 0 then just uppercase the initial char ("Read.me")
* otherwise camel-case the name ("Read.Me") * otherwise camel-case the name ("Read.Me")
*/ */
void initialcase(uchar mode, char *p, uchar len, uchar *minvers, uchar *vers) { void initialcase(uchar mode, char *p, uchar len, uchar *vers, uchar *minvers) {
uint i; uint i;
uchar idx = 0; uchar idx = 0;
uchar capsflag = 1; uchar capsflag = 1;
*vers = 0x01; *vers = 0x00;
*minvers = 0x00; *minvers = 0x01;
for (i = 0; i < 7; ++i) { for (i = 0; i < 7; ++i) {
*vers <<= 1; *minvers <<= 1;
if ((idx < len) && isalpha(p[idx++])) if ((idx < len) && isalpha(p[idx++]))
if (!capsflag) if (!capsflag)
*vers |= 0x01; *minvers |= 0x01;
if ((mode == 1) && !isalpha(p[idx-1])) if ((mode == 1) && !isalpha(p[idx-1]))
capsflag = 1; capsflag = 1;
else else
capsflag = 0; capsflag = 0;
} }
for (i = 0; i < 8; ++i) { for (i = 0; i < 8; ++i) {
*minvers <<= 1; *vers <<= 1;
if ((idx < len) && isalpha(p[idx++])) if ((idx < len) && isalpha(p[idx++]))
if (!capsflag) if (!capsflag)
*minvers |= 0x01; *vers |= 0x01;
if ((mode == 1) && !isalpha(p[idx-1])) if ((mode == 1) && !isalpha(p[idx-1]))
capsflag = 1; capsflag = 1;
else else

Binary file not shown.

View File

@ -82,13 +82,13 @@ def appendbyte(l, b, csin):
# #
# Pretty print info about each request # Pretty print info about each request
# #
def printinfo(drv, blknum, isWrite, isError, cs): def printinfo(drv, blknum, isWrite, isError, cs, filename):
global systemd, prevblk, prevdrv, prevop, prevcs, col global systemd, prevblk, prevdrv, prevop, prevcs, col
if drv != prevdrv: if drv != prevdrv:
if systemd: if systemd:
print('\nDrive {}'.format(drv)) print('\nDrive {} ({})'.format(drv, filename))
else: else:
print('\n{}Drive {}{}'.format(BLU, drv, ENDC)) print('\n{}Drive {} ({}){}'.format(BLU, drv, filename, ENDC))
col = 0 col = 0
e = '+' if ((blknum == prevblk) and (drv == prevdrv) and (isWrite == prevop) and (cs == prevcs)) else ' ' e = '+' if ((blknum == prevblk) and (drv == prevdrv) and (isWrite == prevop) and (cs == prevcs)) else ' '
e = 'X' if isError else e e = 'X' if isError else e
@ -127,7 +127,7 @@ def select_filename(filename, ip):
return filename return filename
filename_with_ip = augment_filename(filename, ip) filename_with_ip = augment_filename(filename, ip)
try: try:
with open(filename_with_ip, "rb"): with open(filename_with_ip, 'r+b'):
pass pass
except: except:
return filename return filename
@ -142,21 +142,21 @@ def read3(dataport, addr, ip, d):
d = dataport.recvmore(d, 3) d = dataport.recvmore(d, 3)
if d[1] == 0x03: if d[1] == 0x03:
file = file1 filename = file1
drv = 1 drv = 1
skip = skip1 skip = skip1
else: else:
file = file2 filename = file2
drv = 2 drv = 2
skip = skip2 skip = skip2
file = select_filename(file, ip) filename = select_filename(filename, ip)
blknum = d[2] + 256 * d[3] blknum = d[2] + 256 * d[3]
err = False err = False
try: try:
with open(file, 'rb') as f: with open(filename, 'r+b') as f:
b = blknum * BLKSZ + skip b = blknum * BLKSZ + skip
f.seek(b) f.seek(b)
block = f.read(BLKSZ) block = f.read(BLKSZ)
@ -189,7 +189,7 @@ def read3(dataport, addr, ip, d):
appendbyte(l, cs, cs) # Checksum for datablock appendbyte(l, cs, cs) # Checksum for datablock
printinfo(drv, blknum, False, err, cs) printinfo(drv, blknum, False, err, cs, filename)
b = dataport.sendto(bytearray(l), addr) b = dataport.sendto(bytearray(l), addr)
#print('Sent {} bytes to {}'.format(b, ip)) #print('Sent {} bytes to {}'.format(b, ip))
@ -203,15 +203,15 @@ def write(dataport, addr, ip, d):
d = dataport.recvmore(d, BLKSZ + 4) d = dataport.recvmore(d, BLKSZ + 4)
if d[1] == 0x02: if d[1] == 0x02:
file = file1 filename = file1
drv = 1 drv = 1
skip = skip1 skip = skip1
else: else:
file = file2 filename = file2
drv = 2 drv = 2
skip = skip2 skip = skip2
file = select_filename(file, ip) filename = select_filename(filename, ip)
cs = 0 cs = 0
for i in range (0, BLKSZ): for i in range (0, BLKSZ):
@ -222,7 +222,7 @@ def write(dataport, addr, ip, d):
err = False err = False
if cs == d[517]: if cs == d[517]:
try: try:
with open(file, 'rb') as f: with open(filename, 'r+b') as f:
b = blknum * BLKSZ + skip b = blknum * BLKSZ + skip
f.seek(b) f.seek(b)
for i in range (0, BLKSZ): for i in range (0, BLKSZ):
@ -247,7 +247,7 @@ def write(dataport, addr, ip, d):
appendbyte(l, d[3], 0) # Block num MSB appendbyte(l, d[3], 0) # Block num MSB
appendbyte(l, cs, 0) # Checksum of datablock appendbyte(l, cs, 0) # Checksum of datablock
printinfo(drv, blknum, True, err, cs) printinfo(drv, blknum, True, err, cs, filename)
b = dataport.sendto(bytearray(l), addr) b = dataport.sendto(bytearray(l), addr)
#print('Sent {} bytes to {}'.format(b, ip)) #print('Sent {} bytes to {}'.format(b, ip))
@ -258,7 +258,7 @@ def write(dataport, addr, ip, d):
# #
def check2MG(filename): def check2MG(filename):
try: try:
with open(filename, 'rb') as f: with open(filename, 'r+b') as f:
hdr = f.read(16) hdr = f.read(16)
except: except:
return 0 return 0
@ -362,7 +362,7 @@ for a, v in args:
elif a in ('-b', '--baud'): elif a in ('-b', '--baud'):
baud_rate = int(v) baud_rate = int(v)
print("VEServer v1.2") print("VEServer v1.3")
if pd25: if pd25:
print("ProDOS 2.5+ Clock Driver") print("ProDOS 2.5+ Clock Driver")
else: else:
@ -387,3 +387,5 @@ with DataPort(serial_port, baud_rate) as dataport:
write(dataport, address, ip, data) write(dataport, address, ip, data)
except DataPort.Timeout: except DataPort.Timeout:
pass pass