]> git.sur5r.net Git - rgb2r-2017/blob - relfile.c
Split out relfile routines
[rgb2r-2017] / relfile.c
1 #include <conio.h>
2 #include <cbm.h>
3 #include <errno.h>
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <string.h>
7
8 #include "relfile.h"
9
10 #define RELFILENAME_MAX (FILENAME_MAX + 4) // FOO,L,\xFF\0
11
12 uint8_t relfile_open(struct relfile *rf, char* name)
13 {
14     char namebuf[RELFILENAME_MAX];
15
16     if(strlen(name) > FILENAME_MAX)
17         return ENOENT;
18     snprintf(namebuf,RELFILENAME_MAX,"%s,l,%c",name,rf->recsize);
19     cbm_open(rf->fd, rf->devnr, rf->sa, namebuf);
20     if(_oserror)
21         return _oserror;
22
23     cbm_open(rf->cmdfd,rf->devnr,15,NULL);
24     if(_oserror)
25         return _oserror;
26 }
27
28 uint8_t relfile_is_split_record(struct relfile *rf, uint16_t recnum)
29 {
30     return ((recnum * rf->recsize) % 254) < rf->recsize;
31 }
32
33 uint8_t relfile_pos(struct relfile *rf, uint16_t recnum, uint8_t offset)
34 {
35     char cmdbuf[5]; // 'P' (SA) (RECLO) (RECHI) (OFFSET)
36
37     cmdbuf[0]=80; //P
38     cmdbuf[1]=rf->sa + 0x60;
39     cmdbuf[2]=(uint8_t)(recnum & 0x00FF);
40     cmdbuf[3]=(uint8_t)(recnum >> 8);
41     cmdbuf[4]=offset;
42
43     //cprintf("CMD: %2X %2X %2X %2X %2X\r\n", cmdbuf[0], cmdbuf[1], cmdbuf[2], cmdbuf[3], cmdbuf[4]);
44
45     cbm_write(rf->cmdfd,cmdbuf, 5);
46     return _oserror;
47 }
48
49 uint8_t relfile_read(struct relfile *rf, uint8_t *buf)
50 {
51     cbm_read(rf->fd, buf, rf->recsize);
52     return _oserror;
53 }
54
55 uint8_t relfile_write(struct relfile *rf, uint8_t *buf)
56 {
57     cbm_write(rf->fd, buf, rf->recsize);
58     return _oserror;
59 }
60
61 uint8_t relfile_clear(struct relfile *rf)
62 {
63     cbm_write(rf->fd, "\xFF", 1);
64     return _oserror;
65 }
66
67 void relfile_close(struct relfile *rf)
68 {
69     cbm_close(rf->cmdfd);
70     cbm_close(rf->fd);
71 }
72