aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rfsv16.h
blob: 08c87f535a2e8298c5638d9494859e23c44f05c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#ifndef _rfsv16_h_
#define _rfsv16_h_

#include "rfsv.h"

class rfsv16 : public rfsv {
	public:
	rfsv16(ppsocket *);
	~rfsv16();
	void reset(); // these 2 added
	void reconnect();

	// these are the original publics
	Enum<rfsv::errs> dir(const char *, bufferArray *);
	/*long read(const char* psionName, const char* localName);
	long write(const char* localName, const char* psionName);*/
	Enum<rfsv::errs> mkdir(const char *);

	// these are FS' promotions
	Enum<rfsv::errs> dircount(const char *, long *);
	Enum<rfsv::errs> copyFromPsion(const char *, const char *, cpCallback_t);
	Enum<rfsv::errs> copyToPsion(const char *, const char *, cpCallback_t);
	Enum<rfsv::errs> rmdir(const char *);
	Enum<rfsv::errs> remove(const char *); // MJG: was this del? FE: yes
	Enum<rfsv::errs> rename(const char *, const char *);
	Enum<rfsv::errs> mktemp(long *, char *);
	Enum<rfsv::errs> fgeteattr(const char *, long *, long *, long *);
	Enum<rfsv::errs> fgetattr(const char *, long *);
	Enum<rfsv::errs> fsetattr(const char *, long seta, long unseta);
	Enum<rfsv::errs> fgetmtime(const char *, long *);
	Enum<rfsv::errs> fsetmtime(const char *, long);
	Enum<rfsv::errs> fopendir(long, const char *, long &);
	Enum<rfsv::errs> fopen(long, const char *, long &);
	Enum<rfsv::errs> fcreatefile(long, const char *, long &);
	Enum<rfsv::errs> freplacefile(long, const char *, long &);
	long fseek(long, long, long);
	long fread(long, unsigned char *, long);
	long fwrite(long, unsigned char *, long);
	Enum<rfsv::errs> fsetsize(long, long);
	Enum<rfsv::errs> fclose(long);

	Enum<rfsv::errs> devlist(long *);
	char *devinfo(int, long *, long *, long *, long *);
	Enum<rfsv::errs> getStatus();
	char *opAttr(long);
	long opMode(long);

	long attr2std(long);
	long std2attr(long);

private:
  enum commands {
    FOPEN = 0, // File Open
    FCLOSE = 2, // File Close
    FREAD = 4, // File Read
    FDIRREAD = 6, // Read Directory entries
    FDEVICEREAD = 8, // Device Information
    FWRITE = 10, // File Write
    FSEEK = 12, // File Seek
    FFLUSH = 14, // Flush
    FSETEOF = 16,
    RENAME = 18,
    DELETE = 20,
    FINFO = 22,
    SFSTAT = 24,
    PARSE = 26,
    MKDIR = 28,
    OPENUNIQUE = 30,
    STATUSDEVICE = 32,
    PATHTEST = 34,
    STATUSSYSTEM = 36,
    CHANGEDIR = 38,
    SFDATE = 40,
    RESPONSE = 42
  };
  
  enum fopen_attrib {
    P_FOPEN = 0x0000, /* Open file */
    P_FCREATE = 0x0001, /* Create file */
    P_FREPLACE = 0x0002, /* Replace file */
    P_FAPPEND = 0x0003, /* Append records */
    P_FUNIQUE = 0x0004, /* Unique file open */
    P_FSTREAM = 0x0000, /* Stream access to a binary file */
    P_FSTREAM_TEXT = 0x0010, /* Stream access to a text file */
    P_FTEXT = 0x0020, /* Record access to a text file */
    P_FDIR = 0x0030, /* Record access to a directory file */
    P_FFORMAT = 0x0040, /* Format a device */
    P_FDEVICE = 0x0050, /* Record access to device name list */
    P_FNODE = 0x0060, /* Record access to node name list */
    P_FUPDATE = 0x0100, /* Read and write access */
    P_FRANDOM = 0x0200, /* Random access */
    P_FSHARE = 0x0400 /* File can be shared */
  };

  enum status_enum {
    P_FAWRITE = 0x0001, /* can the file be written to? */    
    P_FAHIDDEN = 0x0002, /* set if file is hidden */    
    P_FASYSTEM = 0x0004, /* set if file is a system file */
    P_FAVOLUME = 0x0008, /* set if the name is a volume name */    
    P_FADIR = 0x0010, /* set if file is a directory file */    
    P_FAMOD = 0x0020, /* has the file been modified? */    
    P_FAREAD = 0x0100, /* can the file be read? */    
    P_FAEXEC = 0x0200, /* is the file executable? */
    P_FASTREAM = 0x0400, /* is the file a byte stream file? */    
    P_FATEXT = 0x0800 /* is it a text file? */
  };
  
  const char *getConnectName();

  // File handlers
  //long fopen(fopen_attrib a, const char* file, int &handle); // returns status 0=OK
  //long fclose(int fileHandle);

	// Miscellaneous
	Enum<rfsv::errs> convertName(const char*, char *);

	// Communication
	bool sendCommand(enum commands, bufferStore &);
	Enum<rfsv::errs> getResponse(bufferStore &);
  
	// Vars
	ppsocket *skt;
	// MJG: not sure what these are yet
	int serNum;
	Enum<errs> status;	// current connection status
	int tDiff;	// don't think this is used anywhere
};

#endif