home *** CD-ROM | disk | FTP | other *** search
- /* XEDIT v1.16 copyright (c) 1990 by M. Kimes */
-
- #include "msgg.h"
- #include "twindow.h"
- #include "keys.h"
-
- extern char msk78[];
- #define msk35 msk78+43
- #define mskst msk35+33
- #define mskzip msk35+30
- #define mskcit msk35+11
- #define msk1 msk78+77
- #define msk3 msk35+32
- #define msk4 msk35+31
- #define msk5 msk35+30
- #define msk6 msk35+29
- #define msk47 msk78+31
- #define msk46 msk78+32
- #define msk51 msk78+28
- #define msk40 msk46+6
- #define msk39 msk46+7
- #define msk12 msk78+66
- #define msk65 msk78+13
- #define msk19 msk78+59
- #define msk26 msk78+52
- #define msk24 msk78+54
- #define msk58 msk78+20
- #define msk10 msk78+68
-
- #define MAXNUMDIRS 1024
- #define MAXNUMAREA 1024
- #define MAXPROTOCOLS 130
- #define MAXARCHIVERS 256
- #define MAXDOORS 4096
-
- extern WINDOW *wnd4;
-
- struct _mmboard {
- char name[48];
- char forceto[36];
- word attr;
- word max;
- word number;
- word substat1;
- word substat2;
- char descr[79];
- signed char age;
- word flags;
- word zone;
- word net;
- word node;
- word point;
- char yourname[36];
- word minwrite;
- };
-
- struct _ffboard {
- char name[47];
- char flags;
- word security;
- char dpath[79];
- char upath[79];
- char descr[79];
- signed char age;
- word userflags;
- char leechpercent;
- };
-
- extern struct _mmboard huge *marea;
- extern struct _mmboard huge *currarea;
- extern word higharea;
- extern word maxareas;
- extern char msgareasfile[133];
- extern struct _ffboard huge *curdir;
- extern struct _ffboard huge *dir;
- extern word numdirs;
- extern char fileareasfile[133];
-
- struct _door {
- char name[25];
- char type[4];
- char spawn[79];
- char descr[79];
- };
- extern struct _door huge *door;
-
- extern word numdoors;
-
- struct _archiver {
- char ext[5];
- char move[41];
- char extract[41];
- char list[41];
- char error[41];
- char aname[13];
- char ename[13];
- char id[25];
- char pick[2];
- int skip;
- int errline;
- };
- extern struct _archiver huge *archiver;
- extern word numarchivers;
-
- extern char filename[133];
- extern char textname[133];
-
- extern void pascal swap_msgareas(word,word);
- extern int pascal sort_msgareas(void);
- extern void pascal swap_fileareas(word,word);
- extern int pascal sort_fileareas(void);
- extern word pascal select_area(word);
- extern char * pascal msgarea_attr(void);
- extern char * pascal filearea_attr (char flags);
- extern char * pascal rstrip(char *);
- extern char * pascal lstrip(char *);
- extern char * pascal stripcr(char *);
- extern void pascal load_fileareas(char *);
- extern void pascal load_msgareas(char *);
- extern word pascal find_msgarea(word);
- extern word pascal find_filearea(char *);
- extern word pascal list_msgareas(char *);
- extern word pascal list_fileareas(char *);
- extern word pascal check_area(word);
- extern word pascal edit_msgarea(word);
- extern word pascal edit_filearea(word);
- extern int pascal setup_msg(void);
- extern int pascal setup_file(void);
- extern int addbackslash (char *,int);
- extern int nomorethan4095 (char *,int);
-
- void pascal make_msgmenu(void);
- void pascal make_filemenu(void);
- void pascal load_archivers(char *);
- word pascal list_archivers(char *);
- word pascal edit_archiver(word);
-
-
-
-
- void pascal make_msgmenu (void) {
-
- FILE *fp;
- word register x,y;
- char seclvl=0;
- char secl[2]="0";
- WINDOW *fwnd;
- FIELD *ffld;
- int returncode;
-
- fwnd=establish_window(15,5,6,42);
- set_border(fwnd,3);
- set_title(fwnd," File Security ");
- set_colors(fwnd,BORDER,7,0,0);
- display_window(fwnd);
- Again:
- wprompt(fwnd,2,2,"Security Level (0-9):");
- ReDo:
- init_template(fwnd);
- ffld=establish_field(fwnd,26,2,msk1,secl,'N');
- field_window(ffld,"fileseclvl",40,1);
-
- prep_template(fwnd);
- AskOver:
- returncode=data_entry(fwnd);
- if (returncode==ESC) {
- delete_window(fwnd);
- return;
- }
- if(returncode!=F10)goto ReDo;
- seclvl=(char)atoi(secl);
- if(seclvl<0 || seclvl>9) {
- error_message(" Invalid security level #...must be 0-9! ");
- pause_msg();
- goto ReDo;
- }
- delete_window(fwnd);
-
- remove("MSGS.BAK");
- rename("MSGS.XBS","MSGS.BAK");
-
- fp=fopen("MSGS.XBS","wt");
- if(!fp) {
- error_message(" Sorry, couldn't create MSGS.XBS ");
- rename("MSGS.BAK","MSGS.XBS");
- pause_msg();
- return;
- }
- any_message(" Working... ");
- fprintf(fp,"\01lStart\n\01~\01p1\01a1\01\x1b\x1b[0;1;36m\01;\n\n");
- fprintf(fp,"\01;\n\01;Please note there is minimal security level checking in this menu!\n");
- fprintf(fp,"\01;XEdit creates this to give you a starting place for a customized menu.\n");
- fprintf(fp,"\01;You could also simply call Bulls-mode with \01* (see docs).\n");
- fprintf(fp,"\01;This is only one of many ways to make a msg area menu.\n");
- fprintf(fp,"\01;Note use of MSGHELP.HYP as hypertext help file (you have to make it).\n\01;\n");
- fprintf(fp,"\01lReStart\n\n\01C\n\n\01\05*^ *T mins left\n\n");
- fprintf(fp,"\01G0,33,1,Quit Read Scan Write Locate Non-stop_Read Change_Areas Help\n");
- fprintf(fp,"\n\01%cC=Q\nlQuit\n\01\%cC=R\nlRead\n\01%cC=S\nlScan\n\01%cC=N\nlNonStop\n",'0','0','0','0');
- fprintf(fp,"\01%cC=W\nlWrite\n\01\%cC=C\nlChange\n\01%cC=H\nlHelp\n\01%cC=L\nlLocate\n\01RlStart",'0','0','0','0');
- fprintf(fp,"\n\01lQuit\n\01q\n");
- fprintf(fp,"\n\01lNonStop\n\01r4,0\n\01h\01RlReStart\n");
- fprintf(fp,"\n\01lRead\n\01r0,0\n\01h\01RlReStart\n");
- fprintf(fp,"\n\01lScan\n\01r128,0\n\01h\01RlReStart\n");
- fprintf(fp,"\n\01lWrite\n\01%cA\n\01%cb\01w0,0\n\01RlReStart\n",'0','0');
- fprintf(fp,"\n\01lHelp\n\01|0MSGHELP.HYP\n\01|1General\n\01|2\n\01RlStart\n");
- fprintf(fp,"\n\01lLocate\n\01r16,0\n\01h\01RlReStart\n");
- fprintf(fp,"\n\01lChange\n\01p0\01a0\01DlGoHere\n");
- fprintf(fp,"\01\x1b\x1b[0;1;37m\01;\nAvailable Message Areas:\n");
- fprintf(fp,"\01\x1b\x1b[0;1;32m\01;\n");
- for(x=0;x<maxareas;x++) {
- fprintf(fp,"\01lL%u\n",marea[x].number);
- if(x<(maxareas-1))fprintf(fp,"\01S<0%01u lL%u\n",marea[x].substat1,marea[x+1].number);
- else fprintf(fp,"\01S<0%01u lGoHere\n",marea[x].substat1);
- if(marea[x].age!=0) {
- if(x<(maxareas-1)) {
- if(marea[x].age>0) fprintf(fp,"\01La<%01hd,lL%u\n",abs(marea[x].age),marea[x+1].number);
- else fprintf(fp,"\01La>%01hd,lL%u\n",abs(marea[x].age),marea[x+1].number);
- }
- else {
- if(marea[x].age>0) fprintf(fp,"\01La<%01hd,lGoHere\n",abs(marea[x].age));
- else fprintf(fp,"\01La<%01hd,lGoHere\n",abs(marea[x].age));
- }
- }
- if(marea[x].flags!=0) {
- if(x<(maxareas-1)) {
- for(y=0;y<16;y++) {
- if(marea[x].flags & y) fprintf(fp,"\01LF%u,lL%u\n",y,marea[x+1].number);
- }
- }
- else {
- for(y=0;y<16;y++) {
- if(marea[x].flags & y) fprintf(fp,"\01LF%u,lGoHere\n",y);
- }
- }
- }
- if(marea[x].attr & ANSI) fprintf(fp,"\01\x1b\x1b[0;1;35m");
- fprintf(fp,"%5u. %s",marea[x].number,marea[x].name);
- if(marea[x].descr && *marea[x].descr)fprintf(fp," -- %s",marea[x].descr);
- if(marea[x].attr & ANSI) fprintf(fp,"\01\x1b\x1b[0;1;32m");
- fprintf(fp,"\n");
- }
- fprintf(fp,"\01lGoHere\n\01p1\01a1\01\x1b\x1b[0;1;33m\01;\n\n");
- fprintf(fp,"Enter area number: ");
- fprintf(fp,"\01%cI6 0 0 0 3\n",'0');
- fprintf(fp,"\01%cC=\nlStart\n",'0');
- for(x=0;x<maxareas;x++) {
- fprintf(fp,"\n\01l%u\n",marea[x].number);
- if(x<(maxareas-1)) {
- if(marea[x].attr & ANSI) {
- fprintf(fp,"\01LGlOK%u\n",marea[x].number);
- fprintf(fp,"\01bl%u\n",marea[x+1].number);
- fprintf(fp,"\01lOK%u\n",marea[x].number);
- }
- fprintf(fp,"\01S<0%01u l%u\n",marea[x].substat1,marea[x+1].number);
- if(marea[x].age!=0) {
- if(marea[x].age>0) fprintf(fp,"\01La<%01hd,l%u\n",abs(marea[x].age),marea[x+1].number);
- else fprintf(fp,"\01La>%01hd,l%u\n",abs(marea[x].age),marea[x+1].number);
- }
- if(marea[x].flags!=0) {
- for(y=0;y<16;y++) {
- if(marea[x].flags & y) fprintf(fp,"\01LF%u,\01l%u\n",y,marea[x+1].number);
- }
- }
- fprintf(fp,"\01%cC!%u\nl%u\n",'0',marea[x].number,marea[x+1].number);
- }
- else {
- if(marea[x].attr & ANSI) {
- fprintf(fp,"\01LGlOK%u\n",marea[x].number);
- fprintf(fp,"\01blDuh\n");
- fprintf(fp,"\01lOK%u\n",marea[x].number);
- }
- fprintf(fp,"\01S<0%01u lDuh\n",marea[x].substat1);
- if(marea[x].age!=0) {
- if(marea[x].age>0) fprintf(fp,"\01La<%01hd,lDuh\n",abs(marea[x].age));
- else fprintf(fp,"\01La<%01hd,lDuh\n",abs(marea[x].age));
- }
- if(marea[x].flags!=0) {
- for(y=0;y<16;y++) {
- if(marea[x].flags & y) fprintf(fp,"\01LF%u,lDuh\n",y);
- }
- }
- fprintf(fp,"\01%cC!%u\nlDuh\n",'0',marea[x].number);
- }
- fprintf(fp,"\01M%s,%u,%u,%u,%u,%u,",marea[x].name,marea[x].attr,marea[x].max,marea[x].number,marea[x].substat1,marea[x].substat2);
- if(marea[x].forceto && *marea[x].forceto) fprintf(fp,"%s",marea[x].forceto);
- fprintf(fp,",%u\n",marea[x].minwrite);
- fprintf(fp,"\n\01blFindFile\n\01;");
- }
- fprintf(fp,"\n\01lDuh\n\nUnknown msg area...\01P2\n\n\01RlStart\n");
- fprintf(fp,"\n\01lFindFile\n\01&F%s,@0,%01hu\n\01RlReStart\n",fileareasfile,seclvl);
-
- if(ferror(fp)) {
- error_message(" Write Error occurred... ");
- pause_msg();
- }
-
- fclose(fp);
-
- any_message(" Created \"MSGS.XBS\" in current directory ");
- pause_msg();
- }
-
-
-
- void pascal make_filemenu (void) {
-
- FILE *fp;
- word register x,y;
- char seclvl=0;
- char secl[2]="0";
- WINDOW *fwnd;
- FIELD *ffld;
- int returncode;
-
- fwnd=establish_window(15,5,6,42);
- set_border(fwnd,3);
- set_title(fwnd," File Security ");
- set_colors(fwnd,BORDER,7,0,0);
- display_window(fwnd);
- Again:
- wprompt(fwnd,2,2,"Security Level (0-9):");
- ReDo:
- init_template(fwnd);
- ffld=establish_field(fwnd,26,2,msk1,secl,'N');
- field_window(ffld,"fileseclvl",40,1);
-
- prep_template(fwnd);
- AskOver:
- returncode=data_entry(fwnd);
- if (returncode==ESC) {
- delete_window(fwnd);
- return;
- }
- if(returncode!=F10)goto ReDo;
- seclvl=(char)atoi(secl);
- if(seclvl<0 || seclvl>9) {
- error_message(" Invalid security level #...must be 0-9! ");
- pause_msg();
- goto ReDo;
- }
- delete_window(fwnd);
-
- remove("FILES.BAK");
- rename("FILES.XBS","FILES.BAK");
-
- fp=fopen("FILES.XBS","wt");
- if(!fp) {
- error_message(" Sorry, couldn't create FILES.XBS ");
- rename("FILES.BAK","FILES.XBS");
- pause_msg();
- return;
- }
- any_message(" Working... ");
- fprintf(fp,"\01lStart\n\01~\01p1\01a1\01\x1b\x1b[0;1;36m\01;\n");
- fprintf(fp,"\01%cAFILES.BBS\n\01%cFD\n\01e<1 lGotFiles\nNo Files Available This Area\n\n\01lGotFiles\n",'0','0');
- fprintf(fp,"\01;\n\01;Please note there is minimal security level checking in this menu!\n");
- fprintf(fp,"\01;XEdit creates this to give you a starting place for a customized menu.\n");
- fprintf(fp,"\01;This is only one of many ways to make a file area menu.\n");
- fprintf(fp,"\01;You could also simply call Files-mode with \01, (see docs).\n");
- fprintf(fp,"\01;Note use of FILEHELP.HYP as hypertext help file (you have to make it).\n\01;\n");
- fprintf(fp,"\01lReStart\n\n\01\05 File Area: *$ *^ *T mins left\n\n");
- fprintf(fp,"\01G0,33,1,Quit List New Upload Download Change_Areas All_New Search Help Peek\n");
- fprintf(fp,"\n\01%cC=Q\nlQuit\n\01\%cC=L\nlList\n\01%cC=N\nlNew\n\01%cC=U\nlUpload\n",'0','0','0','0');
- fprintf(fp,"\01%cC=D\nlDownload\n\01\%cC=C\nlChange\n\01%cC=H\nlHelp\n\01%cC=A\nlAllNew\n\01%cC=S\nlSearch\n\01%cC=P\nlPeek\n\01RlStart",'0','0','0','0','0','0','0');
- fprintf(fp,"\n\01lQuit\n\01q\n\01;\n\01;You might want to add more to this Peeker line, like an extract dir...\n\01;\n");
- fprintf(fp,"\01\lPeek\n\n\01%cAFILES.BBS\n\01%cFD\n\01e<1 lGotFiles3\n\nNo Files Available This Area\n\01h\01RlStart\n\01lGotFiles3\n",'0','0');
- fprintf(fp,"\01ESPEEKER.EXE #10 T*T B*B G*G C*P D*D L*l S*s0\n\n\01RlStart\n");
- fprintf(fp,"\n\01lList\n\01ff8,FILES.BBS\n\01e>2 lDownload\n\01h\01RlReStart\n");
- fprintf(fp,"\n\01lNew\n\01ff10,FILES.BBS\n\n\01e>2 lDownload\n\01h\01RlReStart\n");
- fprintf(fp,"\n\01lUpload\n");
- fprintf(fp,"\n\01%c=*U\n\01%cC=NUL\\\nlNoUploading\n",'0','0');
- fprintf(fp,"\01Ku\n");
- fprintf(fp,"\n\nNumber of uploads: \01uu Uploaded kilobytes: \01uU\n");
- fprintf(fp,"Number of downloads: \01ud Downloaded kilobytes: \01uD\n");
- fprintf(fp,"\1h\01RlReStart\n");
- fprintf(fp,"\01lNoUploading\n\nSorry, no uploads allowed to this area\n\01h\01RlStart\n");
- fprintf(fp,"\n\01lDownload\n");
- fprintf(fp,"\01%cAFILES.BBS\n\01%cFD\n\01e<1 lGotFiles2\n\nNo Files Available This Area\n\01h\01RlStart\n\01lGotFiles2\n",'0','0');
- fprintf(fp,"\01;\n\01;These next few lines (to the \01Kd line) guard against File Leeches.\n");
- fprintf(fp,"\01;As shown here, a Leech is someone with a ud ratio of less than 10%.\n");
- fprintf(fp,"\01;Adjust or remove to taste.\n\01;\n");
- fprintf(fp,"\01LrlDownAnyway\n\01Lk>10 lLeechAlert\n");
- fprintf(fp,"\01L#>10 lLeechAlert\n\01blDownAnyway\n");
- fprintf(fp,"\01lLeechAlert\n\n");
- fprintf(fp,"Number of uploads: \01uu Uploaded kilobytes: \01uU\n");
- fprintf(fp,"Number of downloads: \01ud Downloaded kilobytes: \01uD\n");
- fprintf(fp,"\nLeech detected and ignored...\n\01ARan afoul of Leech Detection\n");
- fprintf(fp,"\n\01h\n\01RlStart\n");
- fprintf(fp,"\01lDownAnyway\n\01;Do the download...\n\01Kd\n");
- fprintf(fp,"\n\nNumber of uploads: \01uu Uploaded kilobytes: \01uU\n");
- fprintf(fp,"Number of downloads: \01ud Downloaded kilobytes: \01uD\n");
- fprintf(fp,"\01h\01RlReStart\n");
- fprintf(fp,"\n\01lHelp\n\01|0FILEHELP.HYP\n\01|1General\n\01|2\n\01RlStart\n");
- fprintf(fp,"\n\01lChange\n\01p0\01a0\01DlGoHere\n");
- fprintf(fp,"\01\x1b\x1b[0;1;37m\01;\nAvailable File Areas:\n");
- fprintf(fp,"\01\x1b\x1b[0;1;32m\01;\n");
- for(x=0;x<numdirs;x++) {
- fprintf(fp,"\01lL%u\n",x+1);
- if(x<(numdirs-1))fprintf(fp,"\01S<%01hu%01u lL%u\n",seclvl,dir[x].security,x+2);
- else fprintf(fp,"\01S<%01hu%01u lGoHere\n",seclvl,dir[x].security);
- if(dir[x].age!=0) {
- if(x<(numdirs-1)) {
- if(dir[x].age>0) fprintf(fp,"\01La<%01hd,lL%u\n",abs(dir[x].age),x+2);
- else fprintf(fp,"\01La>%01hd,lL%u\n",abs(dir[x].age),x+2);
- }
- else {
- if(dir[x].age>0) fprintf(fp,"\01La<%01hd,lGoHere\n",abs(dir[x].age));
- else fprintf(fp,"\01La<%01hd,lGoHere\n",abs(dir[x].age));
- }
- }
- if(dir[x].userflags!=0) {
- for(y=0;y<16;y++) {
- if(dir[x].userflags & y) fprintf(fp,"\01LF%u,lL%u\n",y,x+1);
- }
- }
- fprintf(fp,"%5u. %s",x+1,dir[x].name);
- if(dir[x].descr && *dir[x].descr)fprintf(fp," -- %s",dir[x].descr);
- fprintf(fp,"\n");
- }
- fprintf(fp,"\01lGoHere\n\01p1\01a1\01\x1b\x1b[0;1;33m\01;\n\n");
- fprintf(fp,"Enter area number: ");
- fprintf(fp,"\01%cI6 0 0 0 3\n",'0');
- fprintf(fp,"\01%cC=\nlStart\n",'0');
- for(x=0;x<numdirs;x++) {
- fprintf(fp,"\n\01l%u\n",x+1);
- if(x<(numdirs-1)) {
- fprintf(fp,"\01S<%01hu%01u l%u\n",seclvl,dir[x].security,x+2);
- if(dir[x].age!=0) {
- if(dir[x].age>0) fprintf(fp,"\01La<%01hd,l%u\n",abs(dir[x].age),x+2);
- else fprintf(fp,"\01La>%01hd,l%u\n",abs(dir[x].age),x+2);
- }
- if(dir[x].userflags!=0) {
- for(y=0;y<16;y++) {
- if(dir[x].userflags & y) fprintf(fp,"\01LF%u,l%u\n",y,x+2);
- }
- }
- fprintf(fp,"\01%cC!%u\nl%u\n",'0',x+1,x+2);
- }
- else {
- fprintf(fp,"\01S<%01hu%01u lDuh\n",seclvl,dir[x].security);
- if(dir[x].age!=0) {
- if(dir[x].age>0) fprintf(fp,"\01La<%01hd,lDuh\n",abs(dir[x].age));
- else fprintf(fp,"\01La<%01hd,lDuh\n",abs(dir[x].age));
- }
- if(dir[x].userflags!=0) {
- for(y=0;y<16;y++) {
- if(dir[x].userflags & y) fprintf(fp,"\01LF%u,lDuh\n",y);
- }
- }
- fprintf(fp,"\01%cC!%u\nlDuh\n",'0',x+1);
- }
- fprintf(fp,"\01F%s,%s,%s,%hu,%hu\n",dir[x].name,dir[x].dpath,dir[x].upath,dir[x].flags,dir[x].leechpercent);
- fprintf(fp,"\01blFindMsg\n\01;");
- }
- fprintf(fp,"\n\01lDuh\n\nUnknown file area...\01P2\n\n\01RlStart\n");
- fprintf(fp,"\n\01lFindMsg\n\01%c=*\n\01&M%s,@0\n\01RlStart\n",'0',msgareasfile);
- fprintf(fp,"\n\01lAllNew\n\01%c=$\n",'9');
- for(x=0;x<numdirs;x++) {
- fprintf(fp,"\01;\n\01lA%u\n",x+1);
- if(x<(numdirs-1)) {
- fprintf(fp,"\01S<%01hu%01u lA%u\n",seclvl,dir[x].security,x+2);
- if(dir[x].age!=0) {
- if(dir[x].age>0) fprintf(fp,"\01La<%01hd,lA%u\n",abs(dir[x].age),x+2);
- else fprintf(fp,"\01La>%01hd,lA%u\n",abs(dir[x].age),x+2);
- }
- if(dir[x].userflags!=0) {
- for(y=0;y<16;y++) {
- if(dir[x].userflags & y) fprintf(fp,"\01LF%u,lA%u\n",y,x+2);
- }
- }
- }
- else {
- fprintf(fp,"\01S<%01hu%01u lDoneNew\n",seclvl,dir[x].security);
- if(dir[x].age!=0) {
- if(dir[x].age>0) fprintf(fp,"\01La<%01hd,lDoneNew\n",abs(dir[x].age));
- else fprintf(fp,"\01La<%01hd,lDoneNew\n",abs(dir[x].age));
- }
- if(dir[x].userflags!=0) {
- for(y=0;y<16;y++) {
- if(dir[x].userflags & y) fprintf(fp,"\01LF%u,lDoneNew\n",y);
- }
- }
- }
- fprintf(fp,"\01F%s,%s,%s,%hu,%hu\n",dir[x].name,dir[x].dpath,dir[x].upath,dir[x].flags,dir[x].leechpercent);
- fprintf(fp,"\01ff10,FILES.BBS\n");
- fprintf(fp,"\01e>3 lAOk%01u\n",x+1);
- fprintf(fp,"\01e>2 lDownload2\n");
- fprintf(fp,"\01e==1 lDoneNew\n",x+1);
- fprintf(fp,"\01blAOk%01u\n",x+1);
- fprintf(fp,"\01lAOk%01u\n",x+1);
- }
- fprintf(fp,"\01lDoneNew\n\01&F%s,@9,%01hu\n",fileareasfile,seclvl);
- fprintf(fp,"\01RlReStart\n");
- fprintf(fp,"\n\01lSearch\n\01%c=$\n",'9');
- fprintf(fp,"\nSearchstring (usually filename without extension):\n -> \01%cI25,0,1,1,1\n",'0');
- fprintf(fp,"\n\01%cC=\nlReStart\n\nSearching...\n",'0');
- for(x=0;x<numdirs;x++) {
- fprintf(fp,"\01;\n\01lS%u\n",x+1);
- if(x<(numdirs-1)) {
- fprintf(fp,"\01S<%01hu%01u lS%u\n",seclvl,dir[x].security,x+2);
- if(dir[x].age!=0) {
- if(dir[x].age>0) fprintf(fp,"\01La<%01hd,lS%u\n",abs(dir[x].age),x+2);
- else fprintf(fp,"\01La>%01hd,lS%u\n",abs(dir[x].age),x+2);
- }
- if(dir[x].userflags!=0) {
- for(y=0;y<16;y++) {
- if(dir[x].userflags & y) fprintf(fp,"\01LF%u,lS%u\n",y,x+2);
- }
- }
- }
- else {
- fprintf(fp,"\01S<%01hu%01u lDoneSearch\n",seclvl,dir[x].security);
- if(dir[x].age!=0) {
- if(dir[x].age>0) fprintf(fp,"\01La<%01hd,lDoneSearch\n",abs(dir[x].age));
- else fprintf(fp,"\01La<%01hd,lDoneSearch\n",abs(dir[x].age));
- }
- if(dir[x].userflags!=0) {
- for(y=0;y<16;y++) {
- if(dir[x].userflags & y) fprintf(fp,"\01LF%u,lDoneSearch\n",y);
- }
- }
- }
- fprintf(fp,"\01F%s,%s,%s,%hu,,%hd,%u,%hu\n",dir[x].name,dir[x].dpath,dir[x].upath,dir[x].flags,dir[x].age,dir[x].userflags,dir[x].leechpercent);
- fprintf(fp,"\01ff12,FILES.BBS,01/01/1980,@0\n");
- fprintf(fp,"\01e>3 lSOk%01u\n",x+1);
- fprintf(fp,"\01e>2 lDownload2\n");
- fprintf(fp,"\01e==1 lDoneSearch\n",x+1);
- fprintf(fp,"\01blSOk%01u\n",x+1);
- fprintf(fp,"\01lSOk%01u\n",x+1);
- }
- fprintf(fp,"\01lDoneSearch\n\01&F%s,@9,%01hu\n",fileareasfile,seclvl);
- fprintf(fp,"\01RlReStart\n");
- fprintf(fp,"\n\01lDownload2\n");
- fprintf(fp,"\01%c=*\n\01&M%s,@0\n\01RlDownload\n",'0',msgareasfile);
-
-
- if(ferror(fp)) {
- error_message(" Write Error occurred... ");
- pause_msg();
- }
-
- fclose(fp);
-
- any_message(" Created \"FILES.XBS\" in current directory ");
- pause_msg();
- }
-
-
-
- word pascal list_archivers (char *name) {
-
- word areano;
- char s[181];
- word lineareas[25];
- word counter;
- register word x;
- int temporary;
- int selection;
-
- set_help("arclist ",18,0);
- if(wnd4)delete_window(wnd4);
- wnd4=establish_window(0,0,25,80);
- set_border(wnd4,1);
- sprintf(s," Listing archivers in file %s ",name);
- s[76]=0;
- set_title(wnd4,s);
- display_window(wnd4);
- wcursor(wnd4,0,0);
- x=0;
- OverAgain:
- counter=0;
- for(temporary=0;temporary<25;temporary++)lineareas[temporary]=0;
- if(x>=numarchivers)x=0;
- while(1) {
- lineareas[counter]=x+1;
- wprintf(wnd4,"%-12.12s %-12.12s [%c",archiver[x].aname,archiver[x].ename,*archiver[x].pick);
- if(!*archiver[x].pick) wprintf(wnd4," ");
- wprintf(wnd4,"] %-4.4s %-19.19s %-19.19s",archiver[x].ext,archiver[x].list,archiver[x].extract);
- x++;
- counter++;
- if (counter>=23 || x>=numarchivers) {
- break;
- }
- wprintf(wnd4,"\n");
- }
- Again:
- selection=get_selection(wnd4,1,NULL);
- if(selection>0 && selection<24) {
- if(lineareas[selection-1])areano=lineareas[selection-1];
- else {
- fputs("\x7",stdout);
- goto Again;
- }
- return areano;
- }
- switch (selection) {
- case HOME: x=0;
- break;
- case END: if(numarchivers>22) x=numarchivers-23;
- else x=0;
- break;
- case PGUP:
- case BS: if(x<24 && numarchivers>22) {
- x=numarchivers-23;
- if(x>numarchivers)x=0;
- break;
- }
- if (x<22) break;
- else if (x<44) x=0;
- else x-=45;
- break;
- case PGDN:
- case FWD: if (x>=numarchivers) x=0;
- else if ((numarchivers-x)<23) {
- if (numarchivers>22) x=numarchivers-23;
- else x=0;
- }
- break;
- case 0: goto BreakOut;
- default: fputs("\x7",stdout);
- break;
- }
- counter=0;
- clear_window(wnd4);
- wcursor(wnd4,0,0);
- goto OverAgain;
- BreakOut:
- return 0;
- }
-
-
-
- word pascal edit_archiver (word areano) {
-
- WINDOW *wnd6;
- FIELD *fld3;
- char s[133];
- char redid=0;
- char skip[6];
- char errline[6];
- register word x;
- int returncode;
-
- wnd6=establish_window(15,9,16,64);
- set_border(wnd6,3);
- set_title(wnd6," Edit Archiver Entry ");
- set_colors(wnd6,BORDER,7,0,0);
- display_window(wnd6);
- wcursor(wnd6,0,0);
- wprintf(wnd6," F10=chng/exit F9=chng F8=Del F7=Add PGUP PGDN ESC=exit\n");
- Again:
- wprompt(wnd6,2,2,"Archive Name:");
- wprompt(wnd6,2,3,"Extract Name:");
- wprompt(wnd6,2,4,"Extension:");
- wprompt(wnd6,2,5,"List command:");
- wprompt(wnd6,2,6,"Move command:");
- wprompt(wnd6,2,7,"Extract command:");
- wprompt(wnd6,2,8,"Error string:");
- wprompt(wnd6,2,9,"ID string:");
- wprompt(wnd6,2,10,"Pick key:");
- wprompt(wnd6,2,11,"Initial skip:");
- wprompt(wnd6,2,12,"Error line #:");
- ReDo:
- if(!numarchivers) goto StartingOut;
- init_template(wnd6);
- sprintf(skip,"%d",archiver[areano].skip);
- sprintf(errline,"%d",archiver[areano].errline);
-
- /* char ext[5];
- char move[41];
- char extract[41];
- char list[41];
- char error[41];
- char aname[13];
- char ename[13];
- char id[25];
- char pick[2];
- int skip;
- int errline; */
-
- fld3=establish_field(wnd6,20,2,msk12,archiver[areano].aname,'A');
- field_window(fld3,"arcaname ",40,6);
- fld3=establish_field(wnd6,20,3,msk12,archiver[areano].ename,'A');
- field_window(fld3,"arcename ",40,6);
- fld3=establish_field(wnd6,20,4,msk3,archiver[areano].ext,'A');
- field_window(fld3,"arcext ",40,6);
- fld3=establish_field(wnd6,20,5,msk40,archiver[areano].list,'a');
- field_window(fld3,"arclist ",40,6);
- fld3=establish_field(wnd6,20,6,msk40,archiver[areano].move,'a');
- field_window(fld3,"arcmove ",40,6);
- fld3=establish_field(wnd6,20,7,msk40,archiver[areano].extract,'a');
- field_window(fld3,"arcextract",40,6);
- fld3=establish_field(wnd6,20,8,msk40,archiver[areano].error,'a');
- field_window(fld3,"arcerror ",40,6);
- fld3=establish_field(wnd6,20,9,msk24,archiver[areano].id,'a');
- field_window(fld3,"arcid ",40,6);
- fld3=establish_field(wnd6,20,10,msk1,archiver[areano].pick,'a');
- field_window(fld3,"arcpick ",40,6);
- fld3=establish_field(wnd6,20,11,msk5,skip,'N');
- field_window(fld3,"arcskip ",40,6);
- fld3=establish_field(wnd6,20,12,msk5,errline,'N');
- field_window(fld3,"arcerrline",40,6);
-
-
- prep_template(wnd6);
- AskOver:
- returncode=data_entry(wnd6);
- if (returncode==PGUP) {
- if(!areano) areano=numarchivers-1;
- else areano--;
- goto ReDo;
- }
- if (returncode==PGDN) {
- if(areano>=(numarchivers-1)) areano=0;
- else areano++;
- goto ReDo;
- }
- if (returncode==F8) {
- if (areano<numarchivers) {
- for(x=areano+1;x<numarchivers;x++) {
- memcpy((void *)&archiver[x-1],(void *)&archiver[x],(word)sizeof(struct _archiver));
- }
- }
- redid=1;
- numarchivers--;
- if(!numarchivers) {
- delete_window(wnd6);
- return (word)redid;
- }
- if(areano>(numarchivers-1)) areano=numarchivers-1;
- goto ReDo;
- }
- if (returncode==F7) {
- if(numarchivers==MAXARCHIVERS) {
- error_message(" Sorry, I'm already maxed out... ");
- pause_msg();
- goto ReDo;
- }
- StartingOut:
- redid=1;
- numarchivers++;
- memset((void *)&archiver[0],0,(unsigned)sizeof(struct _archiver));
- areano=numarchivers-1;
- goto ReDo;
- }
- if (returncode==ESC) goto Quit;
- if (returncode!=F10 && returncode!=F9) goto AskOver;
- rstrip(archiver[areano].aname);
- lstrip(archiver[areano].aname);
- rstrip(archiver[areano].ename);
- lstrip(archiver[areano].ename);
- rstrip(archiver[areano].ext);
- lstrip(archiver[areano].ext);
- rstrip(archiver[areano].list);
- lstrip(archiver[areano].list);
- rstrip(archiver[areano].move);
- lstrip(archiver[areano].move);
- rstrip(archiver[areano].extract);
- lstrip(archiver[areano].extract);
- rstrip(archiver[areano].error);
- rstrip(archiver[areano].id);
- lstrip(archiver[areano].pick);
- rstrip(archiver[areano].pick);
- if(*archiver[areano].pick==' ') *archiver[areano].pick=0;
- archiver[areano].pick[1]=0;
- archiver[areano].skip=atoi(skip);
- archiver[areano].errline=atoi(errline);
- if (!*archiver[areano].aname || !*archiver[areano].ename || !*archiver[areano].list || !*archiver[areano].move || !*archiver[areano].extract || !*archiver[areano].error /* || !strchr(archiver[areano].ext,'.')*/ ) {
- any_message(" WARNING: Blank field ");
- pause_msg();
- if(returncode==F9) goto ReDo;
- delete_window(wnd6);
- if(redid) {
- return 1;
- }
- return 0;
- }
- redid=1;
- if(returncode==F9) goto ReDo;
- delete_window(wnd6);
- return 1;
- Quit:
- delete_window(wnd6);
- if (redid) {
- return 1;
- }
- return 0;
- }
-
-
-
- void pascal load_archivers (char *file) {
-
- FILE *fp;
- struct ffblk f;
- char string[80];
- register word x;
-
- if(findfirst(file,&f,0)) {
- numarchivers=0;
- return;
- }
- numarchivers=(word)(f.ff_fsize/(long)sizeof(struct _archiver));
- if(!(fp=fopen(file,"rb"))) {
- sprintf(string," Can't open %s ",file);
- error_message(string);
- pause_msg();
- return;
- }
- fread((void *)archiver,sizeof(struct _archiver),numarchivers,fp);
- fclose(fp);
- for(x=0;x<numarchivers;x++) {
- archiver[x].ext[4]=0;
- archiver[x].move[40]=0;
- archiver[x].extract[40]=0;
- archiver[x].list[40]=0;
- archiver[x].error[40]=0;
- archiver[x].aname[12]=0;
- archiver[x].ename[12]=0;
- archiver[x].id[24]=0;
- archiver[x].pick[1]=0;
- }
- }