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);
int readdiskblock(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 lowercase(char *p, uchar len, uchar *minvers, uchar *vers);
void uppercase(char *p, uchar len, uchar *minvers, uchar *vers);
void initialcase(uchar mode, char *p, uchar len, uchar *minvers, uchar *vers);
void fixcase(char *in, char *out, uchar vers, uchar minvers, uchar len);
void lowercase(char *p, uchar len, uchar *vers, uchar *minvers);
void uppercase(char *p, uchar len, uchar *vers, uchar *minvers);
void initialcase(uchar mode, char *p, uchar len, uchar *vers, uchar *minvers);
void firstblk(char *dirname, uchar *device, uint *block);
void readdatetime(uchar time[4], struct datetime *dt);
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
* 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;
uchar idx = 0;
if (!(vers & 0x80)) {
if (!(minvers & 0x80)) {
for (idx = 0; idx < NMLEN; ++idx)
out[idx] = in[idx];
out[len] = '\0';
return;
}
vers <<= 1;
minvers <<= 1;
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]);
++idx;
minvers <<= 1;
}
for (i = 0; i < 8; ++i) {
out[idx] = ((vers & 0x80) ? tolower(in[idx]) : in[idx]);
++idx;
vers <<= 1;
}
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
* 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;
uchar idx = 0;
*vers = 0x01;
*minvers = 0x00;
*vers = 0x00;
*minvers = 0x01;
for (i = 0; i < 7; ++i) {
*vers <<= 1;
if ((idx < len) && isalpha(p[idx++]))
*vers |= 0x01;
}
for (i = 0; i < 8; ++i) {
*minvers <<= 1;
if ((idx < len) && isalpha(p[idx++]))
*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
* 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;
*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")
* 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;
uchar idx = 0;
uchar capsflag = 1;
*vers = 0x01;
*minvers = 0x00;
*vers = 0x00;
*minvers = 0x01;
for (i = 0; i < 7; ++i) {
*vers <<= 1;
*minvers <<= 1;
if ((idx < len) && isalpha(p[idx++]))
if (!capsflag)
*vers |= 0x01;
*minvers |= 0x01;
if ((mode == 1) && !isalpha(p[idx-1]))
capsflag = 1;
else
capsflag = 0;
}
for (i = 0; i < 8; ++i) {
*minvers <<= 1;
*vers <<= 1;
if ((idx < len) && isalpha(p[idx++]))
if (!capsflag)
*minvers |= 0x01;
*vers |= 0x01;
if ((mode == 1) && !isalpha(p[idx-1]))
capsflag = 1;
else

Binary file not shown.

View File

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