|
|
1.1 root 1: #line 1 "TEXT_SEC.C"
2:
3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
4:
5: #include "sbbs.h"
6:
7: #define MAX_TXTSECS 500 /* Maximum number of text file sections */
8: #define MAX_TXTFILES 500 /* Maximum number of text files per section */
9:
10: /****************************************************************************/
11: /* General Text File Section. */
12: /* Called from function main_sec */
13: /* Returns 1 if no text sections available, 0 otherwise. */
14: /****************************************************************************/
15: char text_sec()
16: {
17: char str[256],usrsec[MAX_TXTSECS],usrsecs,cursec,usemenu
18: ,*file[MAX_TXTFILES],addpath[83],addstr[83],*buf,ch;
19: long i,j;
20: long l,length;
21: FILE *stream;
22:
23: // ch=getage(useron.birth); Removed 05/19/96
24: for(i=j=0;i<total_txtsecs;i++) {
25: if(!chk_ar(txtsec[i]->ar,useron))
26: continue;
27: usrsec[j++]=i; }
28: usrsecs=j;
29: if(!usrsecs) {
30: bputs(text[NoTextSections]);
31: return(1); }
32: action=NODE_RTXT;
33: while(online) {
34: sprintf(str,"%sMENU\\TEXT_SEC.*",text_dir);
35: if(fexist(str))
36: menu("TEXT_SEC");
37: else {
38: bputs(text[TextSectionLstHdr]);
39: for(i=0;i<usrsecs && !msgabort();i++) {
40: sprintf(str,text[TextSectionLstFmt],i+1,txtsec[usrsec[i]]->name);
41: if(i<9) outchar(SP);
42: bputs(str); } }
43: ASYNC;
44: mnemonics(text[WhichTextSection]);
45: if((cursec=getnum(usrsecs))<1)
46: break;
47: cursec--;
48: while(online) {
49: sprintf(str,"%sMENU\\TEXT%u.*",text_dir,cursec+1);
50: if(fexist(str)) {
51: sprintf(str,"TEXT%u",cursec+1);
52: menu(str);
53: usemenu=1; }
54: else {
55: bprintf(text[TextFilesLstHdr],txtsec[usrsec[cursec]]->name);
56: usemenu=0; }
57: sprintf(str,"%sTEXT\\%s.IXT",data_dir,txtsec[usrsec[cursec]]->code);
58: j=0;
59: if(fexist(str)) {
60: if((stream=fnopen((int *)&i,str,O_RDONLY))==NULL) {
61: errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
62: return(0); }
63: while(!ferror(stream) && !msgabort()) { /* file open too long */
64: if(!fgets(str,81,stream))
65: break;
66: str[strlen(str)-2]=0; /* chop off CRLF */
67: if((file[j]=MALLOC(strlen(str)+1))==NULL) {
68: errormsg(WHERE,ERR_ALLOC,nulstr,strlen(str)+1);
69: continue; }
70: strcpy(file[j],str);
71: fgets(str,81,stream);
72: if(!usemenu) bprintf(text[TextFilesLstFmt],j+1,str);
73: j++; }
74: fclose(stream); }
75: ASYNC;
76: if(SYSOP) {
77: strcpy(str,"QARE?");
78: mnemonics(text[WhichTextFileSysop]); }
79: else {
80: strcpy(str,"Q?");
81: mnemonics(text[WhichTextFile]); }
82: i=getkeys(str,j);
83: if(!(i&0x80000000L)) { /* no file number */
84: for(l=0;l<j;l++)
85: FREE(file[l]);
86: if((i=='E' || i=='R') && !j)
87: continue; }
88: if(i=='Q' || !i)
89: break;
90: if(i==-1) { /* ctrl-c */
91: for(i=0;i<j;i++)
92: FREE(file[i]);
93: return(0); }
94: if(i=='?') /* ? means re-list */
95: continue;
96: if(i=='A') { /* Add text file */
97: if(j) {
98: bputs(text[AddTextFileBeforeWhich]);
99: i=getnum(j+1);
100: if(i<1)
101: continue;
102: i--; /* number of file entries to skip */ }
103: else
104: i=0;
105: bprintf(text[AddTextFilePath]
106: ,data_dir,txtsec[usrsec[cursec]]->code);
107: if(!getstr(addpath,80,K_UPPER))
108: continue;
109: strcat(addpath,crlf);
110: bputs(text[AddTextFileDesc]);
111: if(!getstr(addstr,74,0))
112: continue;
113: strcat(addstr,crlf);
114: sprintf(str,"%sTEXT\\%s.IXT"
115: ,data_dir,txtsec[usrsec[cursec]]->code);
116: if(i==j) { /* just add to end */
117: if((i=nopen(str,O_WRONLY|O_APPEND|O_CREAT))==-1) {
118: errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_APPEND|O_CREAT);
119: return(0); }
120: write(i,addpath,strlen(addpath));
121: write(i,addstr,strlen(addstr));
122: close(i);
123: continue; }
124: j=i; /* inserting in middle of file */
125: if((stream=fnopen((int *)&i,str,O_RDWR))==NULL) {
126: errormsg(WHERE,ERR_OPEN,str,O_RDWR);
127: return(0); }
128: length=filelength(i);
129: for(i=0;i<j;i++) { /* skip two lines for each entry */
130: fgets(tmp,81,stream);
131: fgets(tmp,81,stream); }
132: l=ftell(stream);
133: if((buf=(char *)MALLOC(length-l))==NULL) {
134: fclose(stream);
135: errormsg(WHERE,ERR_ALLOC,str,length-l);
136: return(0); }
137: fread(buf,1,length-l,stream);
138: fseek(stream,l,SEEK_SET); /* go back to where we need to insert */
139: fputs(addpath,stream);
140: fputs(addstr,stream);
141: fwrite(buf,1,length-l,stream);
142: fclose(stream);
143: FREE(buf);
144: continue; }
145: if(i=='R' || i=='E') { /* Remove or Edit text file */
146: ch=i;
147: if(ch=='R')
148: bputs(text[RemoveWhichTextFile]);
149: else
150: bputs(text[EditWhichTextFile]);
151: i=getnum(j);
152: if(i<1)
153: continue;
154: sprintf(str,"%sTEXT\\%s.IXT"
155: ,data_dir,txtsec[usrsec[cursec]]->code);
156: j=i-1;
157: if((stream=fnopen((int *)&i,str,O_RDONLY))==NULL) {
158: errormsg(WHERE,ERR_OPEN,str,O_RDONLY);
159: return(0); }
160: // length=filelength(i); Removed 05/19/96
161: for(i=0;i<j;i++) { /* skip two lines for each entry */
162: fgets(tmp,81,stream);
163: fgets(tmp,81,stream); }
164: fgets(addpath,81,stream);
165: truncsp(addpath);
166: fclose(stream);
167: if(!strchr(addpath,'\\'))
168: sprintf(tmp,"%sTEXT\\%s\\%s"
169: ,data_dir,txtsec[usrsec[cursec]]->code,addpath);
170: else
171: strcpy(tmp,addpath);
172: if(ch=='R') { /* Remove */
173: if(fexist(tmp)) {
174: sprintf(str,text[DeleteTextFileQ],tmp);
175: if(!noyes(str))
176: if(remove(tmp)) errormsg(WHERE,ERR_REMOVE,tmp,0); }
177: sprintf(str,"%sTEXT\\%s.IXT"
178: ,data_dir,txtsec[usrsec[cursec]]->code);
179: removeline(str,addpath,2,0); }
180: else { /* Edit */
181: strcpy(str,tmp);
182: editfile(str); }
183: continue; }
184: i=(i&~0x80000000L)-1;
185: if(!strchr(file[i],'\\'))
186: sprintf(str,"%sTEXT\\%s\\%s"
187: ,data_dir,txtsec[usrsec[cursec]]->code,file[i]);
188: else
189: strcpy(str,file[i]);
190: attr(LIGHTGRAY);
191: printfile(str,0);
192: sprintf(str,"Read Text File: %s",file[i]);
193: logline("T-",str);
194: pause();
195: sys_status&=~SS_ABORT;
196: for(i=0;i<j;i++)
197: FREE(file[i]); } }
198: return(0);
199: }
200:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.