1 /*****************************************************************************/
2 /* */
3 /* (C) Copyright 1992-1997 Alberto Pasquale */
4 /* */
5 /* A L L R I G H T S R E S E R V E D */
6 /* */
7 /*****************************************************************************/
8 /* */
9 /* This source code is NOT in the public domain and it CANNOT be used or */
10 /* distributed without written permission from the author. */
11 /* */
12 /*****************************************************************************/
13 /* */
14 /* How to contact the author: Alberto Pasquale of 2:332/504@fidonet */
15 /* Viale Verdi 106 */
16 /* 41100 Modena */
17 /* Italy */
18 /* */
19 /*****************************************************************************/
20
21 // FilesBbs.Cpp
22
23 #ifdef __OS2__
24 # define INCL_DOS
25 # include <os2.h>
26 #endif
27
28 #if defined(__CYGWIN__)
29 # define NAME_MAX 512
30 #endif
31
32 #include <bbsgenlb.hpp>
33 #include <string.h>
34 #include <stdio.h>
35 #include <stdlib.h>
36 #include <fcntl.h>
37 #include <apgenlib.hpp>
38 #include "misc.hpp"
39 #include "data.hpp"
40 #include "filesbbs.hpp"
41 #include "defines.hpp"
42
43
KillFile(char * fullname)44 void KillFile (char *fullname)
45 {
46 DeleteFile (fullname);
47
48 char filename[NAME_MAX];
49 char filesbbs[PATH_MAX];
50 strcpy (filesbbs, fullname);
51 MoveName (filesbbs, filename);
52
53 FBBS *fbbs = new FBBS (filesbbs, 0, 0, 1024, fb_cont, fb_cpos);
54 switch (fbbs->GetDesc (filename, NULL, NULL, FBBS_REMOVE)) {
55 case -1:
56 vprintlog ("Error deleting description for \"%s\"\n", fullname);
57 myexit (OPEN_ERR);
58 break;
59 case -2:
60 vprintlog ("Created new file: \"%s\"\n", fullname);
61 break;
62 }
63 delete fbbs;
64 }
65
66
67 #define FBBSLSIZE 1024
68
69
SetDesc(char * fullname,char * desc,int day,char * arcname)70 void SetDesc (char *fullname, char *desc, int day, char *arcname)
71 {
72 char path[PATH_MAX]; // path only
73 char file[NAME_MAX]; // name only
74
75 strcpy (path, fullname);
76 MoveName (path, file);
77
78 char days[4];
79 sprintf (days, "%03d", day);
80
81 // build complete description
82
83 char *fulldesc = new char[FBBSLSIZE];
84
85 char *c = desc;
86 char *d = fulldesc;
87
88 while (*c) {
89 if (*c == '%') { // escape char
90 c ++;
91 if (*c == '\0')
92 break;
93
94 if (day != -1)
95 switch (*c) {
96 case 'D': // %D -> Date
97 c ++;
98 d = fl_stpcpy (d, UnixToDate (dayntounix (day)));
99 continue;
100 case 'L': // %L -> Locale Date
101 c ++;
102 d = fl_stpcpy (d, UnixToLDate (dayntounix (day)));
103 continue;
104 case 'd': // %d -> day
105 c ++;
106 d = fl_stpcpy (d, days);
107 continue;
108 }
109
110 switch (*c) {
111 case 'a': // %a -> archiver name
112 c ++;
113 d = fl_stpcpy (d, arcname);
114 continue;
115 }
116 } // default: copy as is (%% -> %)
117 *(d++) = *(c++);
118 }
119 *d = '\0';
120
121
122 FBBS *fbbs = new FBBS (path, 0, 0, FBBSLSIZE, fb_cont, fb_cpos);
123 switch (fbbs->GetDesc (file, NULL, NULL, FBBS_REMOVE)) { // remove old description if present
124 case -1:
125 vprintlog ("Error deleting description for \"%s\"\n", fullname);
126 myexit (OPEN_ERR);
127 break;
128 case -2:
129 vprintlog ("Created new file: \"%s\"\n", fullname);
130 break;
131 }
132 fbbs->SetDesc (file, fulldesc); // append new description
133 delete fbbs;
134
135 delete[] fulldesc;
136 }
137
138