home *** CD-ROM | disk | FTP | other *** search
-
- #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 msk16 msk35+19
- #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
-
- char fileattrprompts[8][13]={
- "Count DLs:",
- "Free Files:",
- "Associated:",
- "Free Up:",
- "*Reserved:",
- "*Reserved:",
- "*Reserved:",
- "*Reserved:"
- };
- char attrprompts[16][13]={
- "No Origin:",
- "ANSI:",
- "Private:",
- "Public:",
- "Echo:",
- "Net:",
- "MCI:",
- "ReadOnly:",
- "Alternate:",
- "AltEcho:",
- "Anonymous:",
- "Real Name:",
- "Associate:",
- "External:",
- "Force:",
- "Compress:"
- };
-
- 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 word numprotos;
- extern char path[99];
- extern char msgareasfile[133];
- extern char fileareasfile[133];
- extern char msgareasfilebackup[133];
- extern char fileareasfilebackup[133];
-
- 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];
-
- extern word numdoors;
-
- struct _protocol {
- char name[25];
- char key;
- int adj;
- char spawndn[119];
- char spawnup[119];
- char abort[48];
- unsigned wild: 1;
- unsigned multi: 1;
- unsigned simul: 1;
- unsigned list: 1;
- unsigned opus: 1;
- unsigned noname: 1;
- unsigned dszlog: 1;
- unsigned reserved: 1;
- char pad1;
- char pad2;
- };
-
- extern struct _protocol huge *proto;
-
- struct _door {
- char name[25];
- char type[4];
- char spawn[79];
- char descr[79];
- };
- extern struct _door huge *door;
-
- 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 WINDOW *ewnd;
-
- 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);
-
- extern void pascal swap_protocols(word,word);
- extern int pascal sort_protocols(void);
-
-
-
- word pascal edit_msgarea (word areano) {
-
- WINDOW *wnd6;
- FIELD *fld3;
- char redid=0;
- word tempno;
- char descr[79];
- char name[49];
- char forceto[37];
- char maximum[7];
- char number[7];
- char substat1[7];
- char substat2[7];
- char attr[17][3];
- register word x;
- int returncode;
- word prev_num;
- struct ffblk f;
- char age[6];
- char flags[17];
- char zone[7];
- char net[7];
- char node[7];
- char point[7];
- char yourname[37];
- char minwrite[7];
-
- wnd6=establish_window(16,5,25,80);
- set_border(wnd6,3);
- set_title(wnd6," Edit Message Area ");
- 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 F6=Make Menu PGUP PGDN ESC=exit\n");
- wcursor(wnd6,53,16);
- wprintf(wnd6,"*=Unused");
- wcursor(wnd6,0,10);
- reverse_video(wnd6);
- wprintf(wnd6,"=================================Attributes====================================");
- normal_video(wnd6);
- Again:
- wprompt(wnd6,2,2,"Name:");
- wprompt(wnd6,2,3,"Force to:");
- wprompt(wnd6,2,4,"Maximum:");
- wprompt(wnd6,2,5,"Number:");
- wprompt(wnd6,2,6,"SubStat1:");
- wprompt(wnd6,2,7,"SubStat2:");
- wprompt(wnd6,28,7,"Age:");
- wprompt(wnd6,60,7,"MinWrite:");
- wprompt(wnd6,2,8,"User Flags: [ ]");
- wprompt(wnd6,38,8,"Addr:");
- wprompt(wnd6,49,8,":");
- wprompt(wnd6,55,8,"/");
- wprompt(wnd6,61,8,".");
- wprompt(wnd6,2,9,"Name-to-use:");
- for (x=0;x<8;x++) {
- wprompt(wnd6,2,11+x,attrprompts[x]);
- }
- for (x=8;x<16;x++) {
- wprompt(wnd6,28,3+x,attrprompts[x]);
- }
- wprompt(wnd6,2,20,"Description:");
- ReDo:
- if(!maxareas) goto StartingOut;
- if(!((tempno=find_msgarea(areano)))) {
- init_template(wnd6);
- delete_window(wnd6);
- return 0;
- }
- prev_num=currarea->number;
- init_template(wnd6);
- for (x=0;x<16;x++) {
- if (currarea->attr & (1<<x)) attr[x][0]='X';
- else attr[x][0]='-';
- attr[x][1]=0;
- }
- for (x=0;x<16;x++) {
- if (currarea->flags & (1<<x)) flags[x]='X';
- else flags[x]='-';
- }
- flags[16]=0;
- strcpy(name,currarea->name);
- strcpy(forceto,currarea->forceto);
- sprintf(maximum,"%01u",currarea->max);
- sprintf(number,"%01u",currarea->number);
- sprintf(substat1,"%01u",currarea->substat1);
- sprintf(substat2,"%01u",currarea->substat2);
- sprintf(age,"%01hd",currarea->age);
- sprintf(zone,"%01u",currarea->zone);
- sprintf(net,"%01u",currarea->net);
- sprintf(node,"%01u",currarea->node);
- sprintf(point,"%01u",currarea->point);
- strcpy(descr,currarea->descr);
- strcpy(yourname,currarea->yourname);
- sprintf(minwrite,"%01u",currarea->minwrite);
- fld3=establish_field(wnd6,14,2,msk47,name,'a');
- field_window(fld3,"msgname ",40,6);
- fld3=establish_field(wnd6,14,3,msk35,forceto,'a');
- field_window(fld3,"msgforce ",40,6);
- fld3=establish_field(wnd6,14,4,msk5,maximum,'N');
- field_window(fld3,"msgmax ",40,6);
- fld3=establish_field(wnd6,14,5,msk5,number,'N');
- field_window(fld3,"msgnumber ",40,6);
- field_validate(fld3,nomorethan4095);
- fld3=establish_field(wnd6,14,6,msk5,substat1,'N');
- field_window(fld3,"msgsub1 ",40,6);
- fld3=establish_field(wnd6,14,7,msk5,substat2,'N');
- field_window(fld3,"msgsub2 ",40,6);
- fld3=establish_field(wnd6,34,7,msk3,age,'N');
- field_window(fld3,"msgage ",40,6);
- fld3=establish_field(wnd6,70,7,msk5,minwrite,'N');
- field_window(fld3,"minwrite ",40,6);
- fld3=establish_field(wnd6,15,8,msk16,flags,'O');
- field_window(fld3,"msgflags ",34,23);
- fld3=establish_field(wnd6,44,8,msk5,zone,'N');
- field_window(fld3,"msgzone ",40,5);
- fld3=establish_field(wnd6,50,8,msk5,net,'N');
- field_window(fld3,"msgnet ",40,5);
- fld3=establish_field(wnd6,56,8,msk5,node,'N');
- field_window(fld3,"msgnode ",40,5);
- fld3=establish_field(wnd6,62,8,msk5,point,'N');
- field_window(fld3,"msgpoint ",40,5);
- fld3=establish_field(wnd6,16,9,msk35,yourname,'a');
- field_window(fld3,"msgyour ",40,6);
- for (x=0;x<8;x++) {
- fld3=establish_field(wnd6,14,11+x,msk1,attr[x],'O');
- field_window(fld3,"msgattr ",34,23);
- }
- for (x=8;x<16;x++) {
- fld3=establish_field(wnd6,40,3+x,msk1,attr[x],'O');
- field_window(fld3,"msgattr ",34,23);
- }
- fld3=establish_field(wnd6,1,21,msk78,descr,'a');
- field_window(fld3,"msgdescr ",40,1);
-
- prep_template(wnd6);
- AskOver:
- returncode=data_entry(wnd6);
- if (returncode==F6) {
- make_msgmenu();
- goto ReDo;
- }
- if (returncode==PGUP) {
- if(tempno==1) tempno=maxareas;
- else tempno--;
- areano=marea[tempno-1].number;
- goto ReDo;
- }
- if (returncode==PGDN) {
- if(tempno>=maxareas) tempno=1;
- else tempno++;
- areano=marea[tempno-1].number;
- goto ReDo;
- }
- if (returncode==F8) {
- if (tempno!=maxareas) {
- if(marea[tempno-1].number==higharea) higharea--;
- for(x=tempno;x<maxareas;x++) {
- memcpy((void *)&marea[x-1],(void *)&marea[x],(word)sizeof(struct _mmboard));
- }
- }
- redid=1;
- maxareas--;
- sprintf(filename,"%sXDATA.%03x",path,prev_num);
- if(!findfirst(filename,&f,0)) {
- any_message(" Delete message area files? (Y-n) ");
- returncode=toupper(generic_mouse_input(ewnd));
- clear_message();
- if(returncode=='Y' || returncode==13) {
- unlink(filename);
- sprintf(filename,"%sXTEXT.%03x",path,prev_num);
- unlink(filename);
- sprintf(filename,"%sMDUPS.%03x",path,prev_num);
- unlink(filename);
- any_message(" Area deleted ");
- pause_msg();
- }
- }
- if(!maxareas) {
- init_template(wnd6);
- delete_window(wnd6);
- return (word)redid;
- }
- if(tempno>maxareas) tempno=maxareas;
- areano=marea[tempno-1].number;
- goto ReDo;
- }
- if (returncode==F7) {
- if(maxareas==MAXNUMAREA) {
- error_message(" Sorry, I'm already maxed out... ");
- pause_msg();
- goto ReDo;
- }
- StartingOut:
- redid=1;
- maxareas++;
- strcpy(marea[maxareas-1].name,"New Area");
- strset(marea[maxareas-1].forceto,0);
- marea[maxareas-1].max=50;
- marea[maxareas-1].attr=0;
- marea[maxareas-1].substat1=6;
- marea[maxareas-1].substat2=0;
- marea[maxareas-1].age=0;
- marea[maxareas-1].flags=0;
- marea[maxareas-1].zone=0;
- marea[maxareas-1].net=0;
- marea[maxareas-1].node=0;
- marea[maxareas-1].point=0;
- *marea[maxareas-1].yourname=0;
- marea[maxareas-1].minwrite=0;
- strcpy(marea[maxareas-1].descr,"No Description");
- higharea++;
- areano=higharea;
- marea[maxareas-1].number=areano;
- tempno=maxareas;
- goto ReDo;
- }
- if (returncode==ESC) goto Quit;
- if (returncode!=F10 && returncode!=F9) goto AskOver;
- rstrip(name);
- lstrip(name);
- rstrip(forceto);
- lstrip(forceto);
- lstrip(yourname);
- rstrip(yourname);
- rstrip(descr);
- lstrip(descr);
- if (!*name) {
- error_message(" Blank name field ");
- pause_msg();
- if(returncode==F9) goto ReDo;
- delete_window(wnd6);
- if(redid) {
- sort_msgareas();
- return 1;
- }
- return 0;
- }
- strcpy(marea[tempno-1].name,name);
- strcpy(marea[tempno-1].forceto,forceto);
- marea[tempno-1].max=(word)atol(maximum);
- marea[tempno-1].number=(word)atol(number);
- marea[tempno-1].substat1=(word)atol(substat1);
- marea[tempno-1].substat2=(word)atol(substat2);
- marea[tempno-1].age=(signed char)atoi(age);
- marea[tempno-1].zone=(word)atol(zone);
- marea[tempno-1].net=(word)atol(net);
- marea[tempno-1].node=(word)atol(node);
- marea[tempno-1].point=(word)atol(point);
- strcpy(marea[tempno-1].yourname,yourname);
- strcpy(marea[tempno-1].descr,descr);
- marea[tempno-1].minwrite=atol(minwrite);
- for (x=0;x<16;x++) {
- if (attr[x][0]=='X') marea[tempno-1].attr = (marea[tempno-1].attr | (1<<x));
- else marea[tempno-1].attr = (marea[tempno-1].attr & (~(1<<x)));
- }
- for (x=0;x<16;x++) {
- if (flags[x]=='X') marea[tempno-1].flags = (marea[tempno-1].flags | (1<<x));
- else marea[tempno-1].flags = (marea[tempno-1].flags & (~(1<<x)));
- }
- redid=1;
- if(prev_num!=marea[tempno-1].number) {
-
- char swapping=0;
-
- sprintf(filename,"%sXDATA.%03x",path,prev_num);
- if(!findfirst(filename,&f,0)) {
- any_message(" Move message area files? (Y-n) ");
- returncode=toupper(generic_mouse_input(ewnd));
- clear_message();
- if(returncode=='Y' || returncode==13) {
- sprintf(filename,"%sXDATA.%03x",path,marea[tempno-1].number);
- if(!findfirst(filename,&f,0)) {
- _anymsg(" WARNING: New area already exists! "," [D]elete old area [S]wap areas: [S] ");
- returncode=toupper(generic_mouse_input(ewnd));
- clear_message();
- if(returncode=='S' || returncode==13) swapping=1;
- else if(returncode==ESC) goto Outathis;
- else if(returncode=='D') {
- unlink(filename);
- sprintf(filename,"%sXTEXT.%03x",path,marea[tempno-1].number);
- unlink(filename);
- sprintf(filename,"%sMDUPS.%03x",path,marea[tempno-1].number);
- unlink(filename);
- }
- }
- if(swapping) {
- sprintf(filename,"%sXDATA.%03x",path,marea[tempno-1].number);
- sprintf(textname,"%sXDATA.$$$",path);
- unlink(textname);
- rename(filename,textname);
- sprintf(filename,"%sXTEXT.%03x",path,marea[tempno-1].number);
- sprintf(textname,"%sXTEXT.$$$",path);
- unlink(textname);
- rename(filename,textname);
- sprintf(filename,"%sMDUPS.%03x",path,marea[tempno-1].number);
- sprintf(textname,"%sMDUPS.$$$",path);
- unlink(textname);
- rename(filename,textname);
- }
- sprintf(filename,"%sXDATA.%03x",path,prev_num);
- sprintf(textname,"%sXDATA.%03x",path,marea[tempno-1].number);
- rename(filename,textname);
- sprintf(filename,"%sXTEXT.%03x",path,prev_num);
- sprintf(textname,"%sXTEXT.%03x",path,marea[tempno-1].number);
- rename(filename,textname);
- sprintf(filename,"%sMDUPS.%03x",path,prev_num);
- sprintf(textname,"%sMDUPS.%03x",path,marea[tempno-1].number);
- rename(filename,textname);
- if(swapping) {
- sprintf(filename,"%sXDATA.%03x",path,prev_num);
- sprintf(textname,"%sXDATA.$$$",path);
- rename(textname,filename);
- sprintf(filename,"%sXTEXT.%03x",path,prev_num);
- sprintf(textname,"%sXTEXT.$$$",path);
- rename(textname,filename);
- sprintf(filename,"%sMDUPS.%03x",path,prev_num);
- sprintf(textname,"%sMDUPS.$$$",path);
- rename(textname,filename);
- for(x=0;x<maxareas;x++) {
- if(marea[x].number==marea[tempno-1].number && x!=tempno-1) {
- marea[x].number=prev_num;
- break;
- }
- }
- any_message(" Areas swapped ");
- }
- else any_message(" Area moved ");
- pause_msg();
- }
- }
- }
- Outathis:
- if(returncode==F9) goto ReDo;
- sort_msgareas();
- init_template(wnd6);
- delete_window(wnd6);
- return 1;
- Quit:
- init_template(wnd6);
- delete_window(wnd6);
- if (redid) {
- sort_msgareas();
- return 1;
- }
- return 0;
- }
-
-
-
- int pascal sort_msgareas (void) { /* Simple bubble-sort */
-
- register word x;
- char swapped=1;
-
- if(maxareas==1) return 0;
- any_message(" Sorting ");
- while(swapped) {
- swapped=0;
- for(x=1;x<maxareas;x++) {
- if(marea[x].number<marea[x-1].number) {
- swap_msgareas(x-1,x);
- swapped=1;
- }
- }
- }
- clear_message();
- return 0;
- }
-
-
-
- void pascal swap_msgareas (word x, word y) {
-
- static struct _mmboard temp;
-
- memcpy((void *)&temp,(void *)&marea[x],(word)sizeof(struct _mmboard));
- memcpy((void *)&marea[x],(void *)&marea[y],(word)sizeof(struct _mmboard));
- memcpy((void *)&marea[y],(void *)&temp,(word)sizeof(struct _mmboard));
- }
-
-
-
- int pascal setup_msg (void) {
-
- WINDOW *wnd6;
- FIELD *fld3;
- int returncode;
-
- Again:
- wnd6=establish_window(1,18,12,80);
- set_border(wnd6,3);
- set_title(wnd6," Msg Area File ");
- set_colors(wnd6,BORDER,7,0,0);
- display_window(wnd6);
- wcursor(wnd6,0,0);
- wprintf(wnd6,"\n F10 when done\n");
- init_template(wnd6);
- wprompt(wnd6,1,3,"File to edit:");
- wprompt(wnd6,1,5,"Path to msg areas:");
- wprompt(wnd6,1,7,"Backup file:");
- fld3=establish_field(wnd6,0,4,msk78,msgareasfile,'a');
- field_window(fld3,"msgfile ",40,1);
- fld3=establish_field(wnd6,0,6,msk78,path,'a');
- field_window(fld3,"msgpath ",40,2);
- field_validate(fld3,addbackslash);
- fld3=establish_field(wnd6,0,8,msk78,msgareasfilebackup,'a');
- field_window(fld3,"msgbackup ",40,3);
- prep_template(wnd6);
- AskOver:
- returncode=data_entry(wnd6);
- if(returncode==ESC) {
- delete_window(wnd6);
- return 0;
- }
- if (returncode!=F10) goto AskOver;
- lstrip(msgareasfile);
- rstrip(msgareasfile);
- lstrip(path);
- rstrip(path);
- lstrip(msgareasfilebackup);
- rstrip(msgareasfilebackup);
- delete_window(wnd6);
- if(!*msgareasfile || !*path) return 0;
- marea=(struct _mmboard huge*)malloc((MAXNUMAREA*sizeof(struct _mmboard))+sizeof(struct _mmboard));
- if (marea==NULL) {
- error_message(" No memory for msg areas ");
- maxareas=0;
- exit(1);
- }
- return 1;
- }
-
-
-
- int pascal setup_file (void) {
-
- WINDOW *wnd6;
- FIELD *fld3;
- int returncode;
-
- Again:
- wnd6=establish_window(1,18,10,80);
- set_border(wnd6,3);
- set_title(wnd6," File Area File ");
- set_colors(wnd6,BORDER,7,0,0);
- display_window(wnd6);
- wcursor(wnd6,0,0);
- wprintf(wnd6,"\n F10 when done\n");
- init_template(wnd6);
- wprompt(wnd6,1,3,"File to edit:");
- wprompt(wnd6,1,5,"Backup file:");
- fld3=establish_field(wnd6,0,4,msk78,fileareasfile,'a');
- field_window(fld3,"filefile ",40,1);
- fld3=establish_field(wnd6,0,6,msk78,fileareasfilebackup,'a');
- field_window(fld3,"filebackup",40,3);
- prep_template(wnd6);
- AskOver:
- returncode=data_entry(wnd6);
- if(returncode==ESC) {
- delete_window(wnd6);
- return 0;
- }
- if (returncode!=F10) goto AskOver;
- lstrip(fileareasfile);
- rstrip(fileareasfile);
- lstrip(fileareasfilebackup);
- rstrip(fileareasfilebackup);
- delete_window(wnd6);
- if(!*fileareasfile) return 0;
- dir=(struct _ffboard huge*)malloc((MAXNUMDIRS*sizeof(struct _ffboard))+sizeof(struct _ffboard));
- if (dir==NULL) {
- error_message(" No memory for file areas ");
- numdirs=0;
- exit(1);
- }
- return 1;
- }
-
-
-
- int addbackslash (char *bf,int key) {
-
- int register x;
-
- for (x=77;x>(-1);x--) {
- if (bf[x]!=' ') {
- break;
- }
- }
- if (x<0) {
- x=0;
- *bf='\\';
- }
- if (bf[x]!='\\') {
- if (x>77) {
- error_message(" Too long...No room for trailing backslash! ");
- return ERROR;
- }
- bf[x+1]='\\';
- }
- return 0;
- }
-
-
-
- int nomorethan4095 (char *bf,int key) {
-
- if((word)atol(bf)>4095 || (word)atol(bf)<1) {
- error_message(" Valid area numbers are 1-4095 ");
- return ERROR;
- }
- return 0;
- }
-
-
-
- word pascal list_fileareas (char *fileareasname) {
-
- word areano;
- char s[181];
- word lineareas[25];
- word counter;
- register word x;
- int temporary;
- int selection;
-
- set_help("fileareali",18,0);
- if(wnd4)delete_window(wnd4);
- wnd4=establish_window(0,0,25,80);
- set_border(wnd4,1);
- sprintf(s," Listing areas in file %s ",fileareasname);
- 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>=numdirs)x=0;
- while(1) {
- lineareas[counter]=x+1;
- wprintf(wnd4,"%-14.14s %05u ",dir[x].name,dir[x].security);
- wprintf(wnd4,"%s %-20.20s %-20.20s",filearea_attr(dir[x].flags),dir[x].dpath,dir[x].upath);
- x++;
- counter++;
- if (counter>=23 || x>=numdirs) {
- 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;
- }
- find_filearea(dir[areano-1].name);
- return areano;
- }
- switch (selection) {
- case HOME: x=0;
- break;
- case END: if(numdirs>22) x=numdirs-23;
- else x=0;
- break;
- case PGUP:
- case BS: if(x<24 && numdirs>22) {
- x=numdirs-23;
- if(x>numdirs)x=0;
- break;
- }
- if (x<22) break;
- else if (x<44) x=0;
- else x-=45;
- break;
- case PGDN:
- case FWD: if (x>=numdirs) x=0;
- else if ((numdirs-x)<23) {
- if (numdirs>22) x=numdirs-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;
- }
-
-
-
- int pascal sort_fileareas (void) { /* Simple bubble-sort */
-
- register word x;
- char swapped=1;
-
- if(numdirs==1) return 0;
- any_message(" Sorting ");
- while(swapped) {
- swapped=0;
- for(x=1;x<numdirs;x++) {
- if(strcmp(dir[x].name,dir[x-1].name)<0) {
- swap_fileareas(x-1,x);
- swapped=1;
- }
- }
- }
- clear_message();
- return 0;
- }
-
-
-
- void pascal swap_fileareas (word x, word y) {
-
- static struct _ffboard temp;
-
- memcpy((void *)&temp,(void *)&dir[x],(word)sizeof(struct _ffboard));
- memcpy((void *)&dir[x],(void *)&dir[y],(word)sizeof(struct _ffboard));
- memcpy((void *)&dir[y],(void *)&temp,(word)sizeof(struct _ffboard));
- }
-
-
-
- word pascal edit_filearea (word areano) {
-
- WINDOW *wnd6;
- FIELD *fld3;
- char s[133];
- char redid=0;
- char descr[79];
- char name[49];
- char security[7];
- char upload[80];
- char download[80];
- char attr[9][4];
- char userflags[17];
- register word x;
- int returncode;
- char age[6];
- char leech[6];
-
- wnd6=establish_window(1,5,24,80);
- set_border(wnd6,3);
- set_title(wnd6," Edit File Area ");
- 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 F6=Sort\n F5=MD F4=Make Menu PGUP PGDN ESC=exit\n");
- wcursor(wnd6,69,16);
- wprintf(wnd6,"*=Unused");
- reverse_video(wnd6);
- wcursor(wnd6,0,9);
- wprintf(wnd6,"=================================Attributes====================================");
- normal_video(wnd6);
- Again:
- wprompt(wnd6,2,3,"Name:");
- wprompt(wnd6,60,3,"Leech:");
- wprompt(wnd6,2,4,"Security:");
- wprompt(wnd6,32,4,"Age:");
- wprompt(wnd6,47,4,"User Flags: [ ]");
- wprompt(wnd6,2,5,"Download Path:");
- wprompt(wnd6,2,7,"Upload Path:");
- for (x=0;x<8;x++) {
- wprompt(wnd6,2,10+x,fileattrprompts[x]);
- }
- wprompt(wnd6,2,19,"Description:");
- ReDo:
- if(!numdirs) goto StartingOut;
- init_template(wnd6);
- for (x=0;x<8;x++) {
- if (dir[areano].flags & (1<<x)) attr[x][0]='X';
- else attr[x][0]='-';
- attr[x][1]=0;
- }
- for (x=0;x<16;x++) {
- if (dir[areano].userflags & (1<<x)) userflags[x]='X';
- else userflags[x]='-';
- }
- userflags[16]=0;
- strcpy(name,dir[areano].name);
- strcpy(descr,dir[areano].descr);
- sprintf(security,"%01u",dir[areano].security);
- strcpy(download,dir[areano].dpath);
- strcpy(upload,dir[areano].upath);
- sprintf(age,"%01hd",dir[areano].age);
- sprintf(leech,"%01hu",dir[areano].leechpercent);
- fld3=establish_field(wnd6,14,3,msk46,name,'a');
- field_window(fld3,"filename ",40,6);
- fld3=establish_field(wnd6,69,3,msk3,leech,'N');
- field_window(fld3,"leech% ",40,6);
- fld3=establish_field(wnd6,14,4,msk5,security,'N');
- field_window(fld3,"security ",40,6);
- fld3=establish_field(wnd6,37,4,msk3,age,'N');
- field_window(fld3,"fileage ",40,6);
- fld3=establish_field(wnd6,60,4,msk16,userflags,'O');
- field_window(fld3,"fileflags ",34,23);
- fld3=establish_field(wnd6,0,6,msk78,download,'a');
- field_window(fld3,"download ",40,6);
- fld3=establish_field(wnd6,0,8,msk78,upload,'a');
- field_window(fld3,"upload ",40,6);
- for (x=0;x<8;x++) {
- fld3=establish_field(wnd6,13,10+x,msk1,attr[x],'O');
- field_window(fld3,"fileattr ",34,23);
- }
- fld3=establish_field(wnd6,0,20,msk78,descr,'a');
- field_window(fld3,"filedescr ",40,1);
- prep_template(wnd6);
- AskOver:
- returncode=data_entry(wnd6);
- if (returncode==PGUP) {
- if(!areano) areano=numdirs-1;
- else areano--;
- goto ReDo;
- }
- if (returncode==PGDN) {
- if(areano>=(numdirs-1)) areano=0;
- else areano++;
- goto ReDo;
- }
- if (returncode==F4) {
- make_filemenu();
- goto ReDo;
- }
- if (returncode==F6) {
- sort_fileareas();
- goto ReDo;
- }
- if (returncode==F8) {
- if (areano<numdirs) {
- for(x=areano+1;x<numdirs;x++) {
- memcpy((void *)&dir[x-1],(void *)&dir[x],(word)sizeof(struct _ffboard));
- }
- }
- redid=1;
- numdirs--;
- if(!numdirs) {
- delete_window(wnd6);
- return (word)redid;
- }
- if(areano>(numdirs-1)) areano=numdirs-1;
- goto ReDo;
- }
- if (returncode==F7) {
- if(numdirs==MAXNUMDIRS) {
- error_message(" Sorry, I'm already maxed out... ");
- pause_msg();
- goto ReDo;
- }
- StartingOut:
- redid=1;
- numdirs++;
- strcpy(dir[numdirs-1].name,"New Area");
- strcpy(dir[numdirs-1].dpath,"C:\\");
- strcpy(dir[numdirs-1].upath,"NUL");
- dir[numdirs-1].security=6;
- dir[numdirs-1].flags=0;
- dir[numdirs-1].age=0;
- dir[numdirs-1].userflags=0;
- strcpy(dir[numdirs-1].descr,"No Description");
- dir[numdirs-1].leechpercent=0;
- areano=numdirs-1;
- goto ReDo;
- }
- if(returncode==F5) {
- strcpy(s,dir[areano].dpath);
- lstrip(s);
- rstrip(s);
- if(mkdir(s)) {
- any_message(" Download directory--Exists or bad ");
- pause_msg();
- }
- else {
- any_message(" Download directory created ");
- pause_msg();
- }
- strcpy(s,dir[areano].upath);
- lstrip(s);
- rstrip(s);
- strupr(s);
- if(strcmp(s,"NUL") && strcmp(s,"NUL\\")) {
- if(mkdir(s)) {
- any_message(" Upload directory--Exists or bad ");
- pause_msg();
- }
- else {
- any_message(" Upload directory created ");
- pause_msg();
- }
- }
- }
- if (returncode==ESC) goto Quit;
- if (returncode!=F10 && returncode!=F9) goto AskOver;
- rstrip(name);
- lstrip(name);
- rstrip(download);
- lstrip(download);
- rstrip(upload);
- lstrip(upload);
- rstrip(descr);
- lstrip(descr);
- if(!*upload) strcpy(upload,"NUL");
- if (!*name || !*download) {
- error_message(" Blank name and/or download path field(s) ");
- pause_msg();
- if(returncode==F9) goto ReDo;
- delete_window(wnd6);
- if(redid) {
- return 1;
- }
- return 0;
- }
- strcpy(dir[areano].name,name);
- strcpy(dir[areano].dpath,download);
- strcpy(dir[areano].upath,upload);
- dir[areano].security=(word)atol(security);
- dir[areano].age=(signed char)atoi(age);
- strcpy(dir[areano].descr,descr);
- dir[areano].leechpercent=(char)atoi(leech);
- for (x=0;x<8;x++) {
- if (attr[x][0]=='X') dir[areano].flags = (dir[areano].flags | (1<<x));
- else dir[areano].flags = (dir[areano].flags & (~(1<<x)));
- }
- for (x=0;x<16;x++) {
- if (userflags[x]=='X') dir[areano].userflags = (dir[areano].userflags | (1<<x));
- else dir[areano].userflags = (dir[areano].userflags & (~(1<<x)));
- }
- redid=1;
- if(returncode==F9) goto ReDo;
- delete_window(wnd6);
- return 1;
- Quit:
- if (redid) {
- delete_window(wnd6);
- return 1;
- }
- delete_window(wnd6);
- return 0;
- }
-
-
-
- word pascal list_protocols (char *name) {
-
- word areano;
- char s[181];
- word lineareas[25];
- word counter;
- register word x;
- int temporary;
- int selection;
-
- set_help("protolist ",18,0);
- if(wnd4)delete_window(wnd4);
- wnd4=establish_window(0,0,25,80);
- set_border(wnd4,1);
- sprintf(s," Listing protocols 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>=numprotos)x=0;
- while(1) {
- lineareas[counter]=x+1;
- wprintf(wnd4,"%-25.25s [%c] %-43.43s",proto[x].name,proto[x].key,proto[x].spawndn);
- x++;
- counter++;
- if (counter>=23 || x>=numprotos) {
- 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(numprotos>22) x=numprotos-23;
- else x=0;
- break;
- case PGUP:
- case BS: if(x<24 && numprotos>22) {
- x=numprotos-23;
- if(x>numprotos)x=0;
- break;
- }
- if (x<22) break;
- else if (x<44) x=0;
- else x-=45;
- break;
- case PGDN:
- case FWD: if (x>=numprotos) x=0;
- else if ((numprotos-x)<23) {
- if (numprotos>22) x=numprotos-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;
- }