Subversion Repositories SvarDOS

Rev

Rev 416 | Rev 421 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 416 Rev 420
1
#ifndef HELPERS_H
1
#ifndef HELPERS_H
2
#define HELPERS_H
2
#define HELPERS_H
3
 
3
 
4
/* case-insensitive comparison of strings, returns non-zero on equality */
4
/* case-insensitive comparison of strings, returns non-zero on equality */
5
int imatch(const char *s1, const char *s2);
5
int imatch(const char *s1, const char *s2);
6
 
6
 
7
/* returns zero if s1 starts with s2 */
7
/* returns zero if s1 starts with s2 */
8
int strstartswith(const char *s1, const char *s2);
8
int strstartswith(const char *s1, const char *s2);
9
 
9
 
10
/* outputs a NULL-terminated string to stdout */
10
/* outputs a NULL-terminated string to stdout */
11
void output_internal(const char *s, unsigned short nl);
11
void output_internal(const char *s, unsigned short nl);
12
 
12
 
13
#define output(x) output_internal(x, 0)
13
#define output(x) output_internal(x, 0)
14
#define outputnl(x) output_internal(x, 1)
14
#define outputnl(x) output_internal(x, 1)
15
 
15
 
16
/*
16
/*
17
 * FileInfoRec (DTA) format:
17
 * FileInfoRec (DTA) format:
18
 * offset size desc
18
 * offset size desc
19
 *    +0   21  reserved
19
 *    +0   21  reserved
20
 *  +15h    1  file attr (1=RO 2=Hidden 4=System 8=VOL 16=DIR 32=Archive
20
 *  +15h    1  file attr (1=RO 2=Hidden 4=System 8=VOL 16=DIR 32=Archive
21
 *  +16h    2  time: bits 0-4=bi-seconds (0-30), bits 5-10=minutes (0-59), bits 11-15=hour (0-23)
21
 *  +16h    2  time: bits 0-4=bi-seconds (0-30), bits 5-10=minutes (0-59), bits 11-15=hour (0-23)
22
 *  +18h    2  date: bits 0-4=day(0-31), bits 5-8=month (1-12), bits 9-15=years since 1980
22
 *  +18h    2  date: bits 0-4=day(0-31), bits 5-8=month (1-12), bits 9-15=years since 1980
23
 *  +1ah    4  DWORD file size, in bytes
23
 *  +1ah    4  DWORD file size, in bytes
24
 *  +1eh   13  13-bytes max ASCIIZ filename
24
 *  +1eh   13  13-bytes max ASCIIZ filename
25
 */
25
 */
26
_Packed struct DTA {
26
_Packed struct DTA {
27
  char reserved[21];
27
  char reserved[21];
28
  unsigned char attr;
28
  unsigned char attr;
-
 
29
  unsigned short time_sec2:5;
29
  unsigned short time;
30
  unsigned short time_min:6;
-
 
31
  unsigned short time_hour:5;
-
 
32
  unsigned short date_dy:5;
-
 
33
  unsigned short date_mo:4;
30
  unsigned short date;
34
  unsigned short date_yr:7;
31
  unsigned long size;
35
  unsigned long size;
32
  char fname[13];
36
  char fname[13];
33
};
37
};
34
 
38
 
-
 
39
 
-
 
40
/* this is also known as the "Country Info Block" or "CountryInfoRec":
-
 
41
 * offset size desc
-
 
42
 *   +0      2   wDateFormat  0=USA (m d y), 1=Europe (d m y), 2=Japan (y m d)
-
 
43
 *   +2      5  szCrncySymb  currency symbol (ASCIIZ)
-
 
44
 *   +7      2  szThouSep    thousands separator (ASCIIZ)
-
 
45
 *   +9      2  szDecSep     decimal separator (ASCIIZ)
-
 
46
 * +0bH      2  szDateSep    date separator (ASCIIZ)
-
 
47
 * +0dH      2  szTimeSep    time separator (ASCIIZ)
-
 
48
 * +0fH      1  bCrncyFlags  currency format flags
-
 
49
 * +10H      1  bCrncyDigits decimals digits in currency
-
 
50
 * +11H      1  bTimeFormat  time format 0=12h 1=24h
-
 
51
 * +12H      4  pfCasemap    Casemap FAR call address
-
 
52
 * +16H      2  szDataSep    data list separator (ASCIIZ)
-
 
53
 * +18H     10  res          reserved zeros
-
 
54
 *          34               total length
-
 
55
 */
-
 
56
_Packed struct nls_patterns {
-
 
57
  unsigned short dateformat;
-
 
58
  char currency[5];
-
 
59
  char thousep[2];
-
 
60
  char decsep[2];
-
 
61
  char datesep[2];
-
 
62
  char timesep[2];
-
 
63
  unsigned char currflags;
-
 
64
  unsigned char currdigits;
-
 
65
  unsigned char timefmt;
-
 
66
  void far *casemapfn;
-
 
67
  char datalistsep[2];
-
 
68
  char reserved[10];
-
 
69
};
-
 
70
 
-
 
71
 
35
#define DOS_ATTR_RO   1
72
#define DOS_ATTR_RO   1
36
#define DOS_ATTR_HID  2
73
#define DOS_ATTR_HID  2
37
#define DOS_ATTR_SYS  4
74
#define DOS_ATTR_SYS  4
38
#define DOS_ATTR_VOL  8
75
#define DOS_ATTR_VOL  8
39
#define DOS_ATTR_DIR 16
76
#define DOS_ATTR_DIR 16
40
#define DOS_ATTR_ARC 32
77
#define DOS_ATTR_ARC 32
41
 
78
 
42
/* find first matching files using a FindFirst DOS call
79
/* find first matching files using a FindFirst DOS call
43
 * attr contains DOS attributes that files MUST have (ie attr=0 will match all
80
 * attr contains DOS attributes that files MUST have (ie attr=0 will match all
44
 * files)
81
 * files)
45
 * returns 0 on success or a DOS err code on failure */
82
 * returns 0 on success or a DOS err code on failure */
46
unsigned short findfirst(struct DTA *dta, const char *pattern, unsigned short attr);
83
unsigned short findfirst(struct DTA *dta, const char *pattern, unsigned short attr);
47
 
84
 
48
/* find next matching, ie. continues an action intiated by findfirst() */
85
/* find next matching, ie. continues an action intiated by findfirst() */
49
unsigned short findnext(struct DTA *dta);
86
unsigned short findnext(struct DTA *dta);
50
 
87
 
51
/* print s string and wait for a single key press from stdin. accepts only
88
/* print s string and wait for a single key press from stdin. accepts only
52
 * key presses defined in the c ASCIIZ string. returns offset of pressed key
89
 * key presses defined in the c ASCIIZ string. returns offset of pressed key
53
 * in string. keys in c MUST BE UPPERCASE! */
90
 * in string. keys in c MUST BE UPPERCASE! */
54
unsigned short askchoice(const char *s, const char *c);
91
unsigned short askchoice(const char *s, const char *c);
55
 
92
 
56
/* converts a path to its canonic representation, returns 0 on success
93
/* converts a path to its canonic representation, returns 0 on success
57
 * or DOS err on failure (invalid drive) */
94
 * or DOS err on failure (invalid drive) */
58
unsigned short file_truename(const char *src, char *dst);
95
unsigned short file_truename(const char *src, char *dst);
59
 
96
 
60
/* returns DOS attributes of file, or -1 on error */
97
/* returns DOS attributes of file, or -1 on error */
61
int file_getattr(const char *fname);
98
int file_getattr(const char *fname);
62
 
99
 
63
/* returns screen's width (in columns) */
100
/* returns screen's width (in columns) */
64
unsigned short screen_getwidth(void);
101
unsigned short screen_getwidth(void);
65
 
102
 
66
/* returns screen's height (in rows) */
103
/* returns screen's height (in rows) */
67
unsigned short screen_getheight(void);
104
unsigned short screen_getheight(void);
68
 
105
 
69
/* displays the "Press any key to continue" msg and waits for a keypress */
106
/* displays the "Press any key to continue" msg and waits for a keypress */
70
void press_any_key(void);
107
void press_any_key(void);
71
 
108
 
72
/* validate a drive (A=0, B=1, etc). returns 1 if valid, 0 otherwise */
109
/* validate a drive (A=0, B=1, etc). returns 1 if valid, 0 otherwise */
73
int isdrivevalid(unsigned char drv);
110
int isdrivevalid(unsigned char drv);
74
 
111
 
75
/* converts a filename into FCB format (FILENAMEEXT) */
112
/* converts a filename into FCB format (FILENAMEEXT) */
76
void file_fname2fcb(char *dst, const char *src);
113
void file_fname2fcb(char *dst, const char *src);
77
 
114
 
78
/* converts a FCB filename (FILENAMEEXT) into normal format (FILENAME.EXT) */
115
/* converts a FCB filename (FILENAMEEXT) into normal format (FILENAME.EXT) */
79
void file_fcb2fname(char *dst, const char *src);
116
void file_fcb2fname(char *dst, const char *src);
80
 
117
 
81
/* converts an ASCIIZ string into an unsigned short. returns 0 on success. */
118
/* converts an ASCIIZ string into an unsigned short. returns 0 on success. */
82
int atouns(unsigned short *r, const char *s);
119
int atouns(unsigned short *r, const char *s);
83
 
120
 
84
/* appends a backslash if path is a directory
121
/* appends a backslash if path is a directory
85
 * returns the (possibly updated) length of path */
122
 * returns the (possibly updated) length of path */
86
unsigned short path_appendbkslash_if_dir(char *path);
123
unsigned short path_appendbkslash_if_dir(char *path);
87
 
124
 
88
/* get current path drive d (A=1, B=2, etc - 0 is "current drive")
125
/* get current path drive d (A=1, B=2, etc - 0 is "current drive")
89
 * returns 0 on success, doserr otherwise */
126
 * returns 0 on success, doserr otherwise */
90
unsigned short curpathfordrv(char *buff, unsigned char d);
127
unsigned short curpathfordrv(char *buff, unsigned char d);
91
 
128
 
-
 
129
/* fills a nls_patterns struct with current NLS patterns, returns 0 on success, DOS errcode otherwise */
-
 
130
unsigned short nls_getpatterns(struct nls_patterns *p);
-
 
131
 
-
 
132
/* computes a formatted date based on NLS patterns found in p
-
 
133
 * returns length of result */
-
 
134
unsigned short nls_format_date(char *s, unsigned short yr, unsigned char mo, unsigned char dy, const struct nls_patterns *p);
-
 
135
 
-
 
136
/* computes a formatted time based on NLS patterns found in p
-
 
137
 * returns length of result */
-
 
138
unsigned short nls_format_time(char *s, unsigned char ho, unsigned char mn, const struct nls_patterns *p);
-
 
139
 
-
 
140
/* computes a formatted integer number based on NLS patterns found in p
-
 
141
 * returns length of result */
-
 
142
unsigned short nls_format_number(char *s, long num, const struct nls_patterns *p);
-
 
143
 
92
#endif
144
#endif
93
 
145