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