|
|
1.1 root 1: /* scandirs.cpp */
2:
3: /* Synchronet file database scanning routines */
4:
5: /* $Id: scandirs.cpp,v 1.2 2000/12/11 23:21:12 rswindell Exp $ */
6:
7: /****************************************************************************
8: * @format.tab-size 4 (Plain Text/Source Code File Header) *
9: * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) *
10: * *
11: * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html *
12: * *
13: * This program is free software; you can redistribute it and/or *
14: * modify it under the terms of the GNU General Public License *
15: * as published by the Free Software Foundation; either version 2 *
16: * of the License, or (at your option) any later version. *
17: * See the GNU General Public License for more details: gpl.txt or *
18: * http://www.fsf.org/copyleft/gpl.html *
19: * *
20: * Anonymous FTP access to the most recent released source is available at *
21: * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net *
22: * *
23: * Anonymous CVS access to the development source and modification history *
24: * is available at cvs.synchro.net:/cvsroot/sbbs, example: *
25: * cvs -d :pserver:[email protected]:/cvsroot/sbbs login *
26: * (just hit return, no password is necessary) *
27: * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src *
28: * *
29: * For Synchronet coding style and modification guidelines, see *
30: * http://www.synchro.net/source.html *
31: * *
32: * You are encouraged to submit any modifications (preferably in Unix diff *
33: * format) via e-mail to [email protected] *
34: * *
35: * Note: If this box doesn't appear square, then you need to fix your tabs. *
36: ****************************************************************************/
37:
38: #include "sbbs.h"
39:
40: /****************************************************************************/
41: /* Used to scan single or multiple directories. 'mode' is the scan type. */
42: /****************************************************************************/
43: void sbbs_t::scandirs(long mode)
44: {
45: char ch,str[256];
46: char tmp[512];
47: int s;
48: uint i,k;
49:
50: if(!usrlibs) return;
51: mnemonics(text[DirLibOrAll]);
52: ch=(char)getkeys("DLA\r",0);
53: if(sys_status&SS_ABORT || ch==CR) {
54: lncntr=0;
55: return; }
56: if(ch!='A') {
57: if(mode&FL_ULTIME) { /* New file scan */
58: bprintf(text[NScanHdr],timestr(&ns_time));
59: str[0]=0; }
60: else if(mode==FL_NO_HDR) { /* Search for a string */
61: if(!getfilespec(tmp))
62: return;
63: padfname(tmp,str); }
64: else if(mode==FL_FINDDESC) { /* Find text in description */
65: if(!noyes(text[SearchExtendedQ]))
66: mode=FL_EXFIND;
67: if(sys_status&SS_ABORT) {
68: lncntr=0;
69: return; }
70: bputs(text[SearchStringPrompt]);
71: if(!getstr(str,40,K_LINE|K_UPPER)) {
72: lncntr=0;
73: return; } } }
74: if(ch=='D') {
75: if((s=listfiles(usrdir[curlib][curdir[curlib]],str,0,mode))==-1)
76: return;
77: bputs("\r\1>");
78: if(s>1)
79: bprintf(text[NFilesListed],s);
80: else if(!s && !(mode&FL_ULTIME))
81: bputs(text[FileNotFound]);
82: return; }
83: if(ch=='L') {
84: k=0;
85: for(i=0;i<usrdirs[curlib] && !msgabort();i++) {
86: attr(LIGHTGRAY);
87: outchar('.');
88: if(i && !(i%5))
89: bputs("\b\b\b\b\b \b\b\b\b\b");
90: if(mode&FL_ULTIME /* New-scan */
91: && (cfg.lib[usrlib[curlib]]->offline_dir==usrdir[curlib][i]
92: || cfg.dir[usrdir[curlib][i]]->misc&DIR_NOSCAN))
93: continue;
94: else if((s=listfiles(usrdir[curlib][i],str,0,mode))==-1)
95: return;
96: else k+=s; }
97: bputs("\r\1>");
98: if(k>1)
99: bprintf(text[NFilesListed],k);
100: else if(!k && !(mode&FL_ULTIME))
101: bputs(text[FileNotFound]);
102: return; }
103:
104: scanalldirs(mode);
105: }
106:
107: /****************************************************************************/
108: /* Scan all directories in all libraries for files */
109: /****************************************************************************/
110: void sbbs_t::scanalldirs(long mode)
111: {
112: char str[256];
113: char tmp[512];
114: int s;
115: uint i,j,k,d;
116:
117: if(!usrlibs) return;
118: k=0;
119: if(mode&FL_ULTIME) { /* New file scan */
120: bprintf(text[NScanHdr],timestr(&ns_time));
121: str[0]=0; }
122: else if(mode==FL_NO_HDR) { /* Search for a string */
123: if(!getfilespec(tmp))
124: return;
125: padfname(tmp,str); }
126: else if(mode==FL_FINDDESC) { /* Find text in description */
127: if(!noyes(text[SearchExtendedQ]))
128: mode=FL_EXFIND;
129: if(sys_status&SS_ABORT) {
130: lncntr=0;
131: return; }
132: bputs(text[SearchStringPrompt]);
133: if(!getstr(str,40,K_LINE|K_UPPER)) {
134: lncntr=0;
135: return; } }
136: for(i=d=0;i<usrlibs;i++) {
137: for(j=0;j<usrdirs[i] && !msgabort();j++,d++) {
138: attr(LIGHTGRAY);
139: outchar('.');
140: if(d && !(d%5))
141: bputs("\b\b\b\b\b \b\b\b\b\b");
142: if(mode&FL_ULTIME /* New-scan */
143: && (cfg.lib[usrlib[i]]->offline_dir==usrdir[i][j]
144: || cfg.dir[usrdir[i][j]]->misc&DIR_NOSCAN))
145: continue;
146: else if((s=listfiles(usrdir[i][j],str,0,mode))==-1)
147: return;
148: else k+=s; }
149: if(j<usrdirs[i]) /* aborted */
150: break; }
151: bputs("\r\1>");
152: if(k>1)
153: bprintf(text[NFilesListed],k);
154: else if(!k && !(mode&FL_ULTIME))
155: bputs(text[FileNotFound]);
156: }
157:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.