home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / progc / xdev_118.arj / XEDIT.LZH / XEDIT6.C < prev    next >
C/C++ Source or Header  |  1992-04-01  |  10KB  |  329 lines

  1. #include "msgg.h"
  2. #include "twindow.h"
  3. #include "keys.h"
  4.  
  5. extern char msk78[];
  6. #define msk35 msk78+43
  7. #define mskst msk35+33
  8. #define mskzip msk35+30
  9. #define mskcit msk35+11
  10. #define msk1 msk78+77
  11. #define msk3 msk35+32
  12. #define msk4 msk35+31
  13. #define msk5 msk35+30
  14. #define msk6 msk35+29
  15. #define msk47 msk78+31
  16. #define msk46 msk78+32
  17. #define msk51 msk78+28
  18. #define msk40 msk46+6
  19. #define msk39 msk46+7
  20. #define msk12 msk78+66
  21. #define msk65 msk78+13
  22. #define msk19 msk78+59
  23. #define msk26 msk78+52
  24. #define msk24 msk78+54
  25. #define msk58 msk78+20
  26. #define msk10 msk78+68
  27.  
  28. #define MAXNUMDIRS      1024
  29. #define MAXNUMAREA      1024
  30. #define MAXPROTOCOLS    130
  31. #define MAXARCHIVERS    256
  32. #define MAXDOORS        4096
  33.  
  34. extern WINDOW *wnd4;
  35.  
  36. struct _mmboard {
  37.   char       name[48];
  38.   char       forceto[36];
  39.   long       attr;
  40.   word       max;
  41.   word       number;
  42.   word       substat1;
  43.   word       substat2;
  44.   char       descr[79];
  45.   signed char age;
  46.   word       flags;
  47.   word       zone;
  48.   word       net;
  49.   word       node;
  50.   word       point;
  51.   char       yourname[36];
  52.   word       minwrite;
  53. };
  54.  
  55. struct _ffboard {
  56.   char       name[47];
  57.   char       flags;
  58.   word       security;
  59.   char       dpath[79];
  60.   char       upath[79];
  61.   char       descr[79];
  62.   signed char age;
  63.   word       userflags;
  64.   char       leechpercent;
  65. };
  66.  
  67. extern struct _mmboard huge *marea;
  68. extern struct _mmboard huge *currarea;
  69. extern word higharea;
  70. extern word maxareas;
  71. extern char msgareasfile[133];
  72. extern struct _ffboard huge *curdir;
  73. extern struct _ffboard huge *dir;
  74. extern word numdirs;
  75. extern char fileareasfile[133];
  76.  
  77. struct   _door {
  78.     char name[25];
  79.     char type[4];
  80.     char spawn[79];
  81.     char descr[79];
  82. };
  83. extern struct _door huge *door;
  84.  
  85. extern word numdoors;
  86.  
  87. struct _archiver {
  88.     char ext[5];
  89.     char move[41];
  90.     char extract[41];
  91.     char list[41];
  92.     char error[41];
  93.     char aname[13];
  94.     char ename[13];
  95.     char id[25];
  96.     char pick[2];
  97.     int  skip;
  98.     int  errline;
  99. };
  100. extern struct _archiver huge *archiver;
  101. extern word numarchivers;
  102.  
  103. extern char filename[133];
  104. extern char textname[133];
  105.  
  106. extern void   pascal swap_msgareas(word,word);
  107. extern int    pascal sort_msgareas(void);
  108. extern void   pascal swap_fileareas(word,word);
  109. extern int    pascal sort_fileareas(void);
  110. extern word   pascal select_area(word);
  111. extern char * pascal msgarea_attr(void);
  112. extern char * pascal filearea_attr (char flags);
  113. extern char * pascal rstrip(char *);
  114. extern char * pascal lstrip(char *);
  115. extern char * pascal stripcr(char *);
  116. extern void   pascal load_fileareas(char *);
  117. extern void   pascal load_msgareas(char *);
  118. extern word   pascal find_msgarea(word);
  119. extern word   pascal find_filearea(char *);
  120. extern word   pascal list_msgareas(char *);
  121. extern word   pascal list_fileareas(char *);
  122. extern word   pascal check_area(word);
  123. extern word   pascal edit_msgarea(word);
  124. extern word   pascal edit_filearea(word);
  125. extern int    pascal setup_msg(void);
  126. extern int    pascal setup_file(void);
  127. extern int        addbackslash (char *,int);
  128. extern int        nomorethan4095 (char *,int);
  129.  
  130.        void   pascal make_msgmenu(void);
  131.        void   pascal make_filemenu(void);
  132.        void   pascal load_archivers(char *);
  133.        word   pascal list_archivers(char *);
  134.        word   pascal edit_archiver(word);
  135.  
  136.  
  137.  
  138. word pascal edit_archiver (word areano) {
  139.  
  140.     WINDOW *wnd6;
  141.     FIELD *fld3;
  142.     char s[133];
  143.     char redid=0;
  144.     char skip[6];
  145.     char errline[6];
  146.     register word x;
  147.     int returncode;
  148.  
  149.     wnd6=establish_window(15,9,16,64);
  150.     set_border(wnd6,3);
  151.     set_title(wnd6," Edit Archiver Entry ");
  152.     set_colors(wnd6,BORDER,7,0,0);
  153.     display_window(wnd6);
  154.     wcursor(wnd6,0,0);
  155.     wprintf(wnd6," F10=chng/exit  F9=chng  F8=Del  F7=Add  PGUP  PGDN  ESC=exit\n");
  156. Again:
  157.     wprompt(wnd6,2,2,"Archive Name:");
  158.     wprompt(wnd6,2,3,"Extract Name:");
  159.     wprompt(wnd6,2,4,"Extension:");
  160.     wprompt(wnd6,2,5,"List command:");
  161.     wprompt(wnd6,2,6,"Move command:");
  162.     wprompt(wnd6,2,7,"Extract command:");
  163.     wprompt(wnd6,2,8,"Error string:");
  164.     wprompt(wnd6,2,9,"ID string:");
  165.     wprompt(wnd6,2,10,"Pick key:");
  166.     wprompt(wnd6,2,11,"Initial skip:");
  167.     wprompt(wnd6,2,12,"Error line #:");
  168. ReDo:
  169.     if(!numarchivers) goto StartingOut;
  170.     init_template(wnd6);
  171.     sprintf(skip,"%d",archiver[areano].skip);
  172.     sprintf(errline,"%d",archiver[areano].errline);
  173.  
  174. /*  char ext[5];
  175.     char move[41];
  176.     char extract[41];
  177.     char list[41];
  178.     char error[41];
  179.     char aname[13];
  180.     char ename[13];
  181.     char id[25];
  182.     char pick[2];
  183.     int  skip;
  184.     int  errline; */
  185.  
  186.     fld3=establish_field(wnd6,20,2,msk12,archiver[areano].aname,'A');
  187.     field_window(fld3,"arcaname  ",40,6);
  188.     fld3=establish_field(wnd6,20,3,msk12,archiver[areano].ename,'A');
  189.     field_window(fld3,"arcename ",40,6);
  190.     fld3=establish_field(wnd6,20,4,msk3,archiver[areano].ext,'A');
  191.     field_window(fld3,"arcext    ",40,6);
  192.     fld3=establish_field(wnd6,20,5,msk40,archiver[areano].list,'a');
  193.     field_window(fld3,"arclist   ",40,6);
  194.     fld3=establish_field(wnd6,20,6,msk40,archiver[areano].move,'a');
  195.     field_window(fld3,"arcmove   ",40,6);
  196.     fld3=establish_field(wnd6,20,7,msk40,archiver[areano].extract,'a');
  197.     field_window(fld3,"arcextract",40,6);
  198.     fld3=establish_field(wnd6,20,8,msk40,archiver[areano].error,'a');
  199.     field_window(fld3,"arcerror  ",40,6);
  200.     fld3=establish_field(wnd6,20,9,msk24,archiver[areano].id,'a');
  201.     field_window(fld3,"arcid     ",40,6);
  202.     fld3=establish_field(wnd6,20,10,msk1,archiver[areano].pick,'a');
  203.     field_window(fld3,"arcpick   ",40,6);
  204.     fld3=establish_field(wnd6,20,11,msk5,skip,'N');
  205.     field_window(fld3,"arcskip   ",40,6);
  206.     fld3=establish_field(wnd6,20,12,msk5,errline,'N');
  207.     field_window(fld3,"arcerrline",40,6);
  208.  
  209.  
  210.     prep_template(wnd6);
  211. AskOver:
  212.     returncode=data_entry(wnd6);
  213.     if (returncode==PGUP) {
  214.         if(!areano) areano=numarchivers-1;
  215.         else areano--;
  216.         goto ReDo;
  217.     }
  218.     if (returncode==PGDN) {
  219.         if(areano>=(numarchivers-1)) areano=0;
  220.         else areano++;
  221.         goto ReDo;
  222.     }
  223.     if (returncode==F8) {
  224.         if (areano<numarchivers) {
  225.             for(x=areano+1;x<numarchivers;x++) {
  226.                 memcpy((void *)&archiver[x-1],(void *)&archiver[x],(word)sizeof(struct _archiver));
  227.             }
  228.         }
  229.         redid=1;
  230.         numarchivers--;
  231.         if(!numarchivers) {
  232.             delete_window(wnd6);
  233.             return (word)redid;
  234.         }
  235.         if(areano>(numarchivers-1)) areano=numarchivers-1;
  236.         goto ReDo;
  237.     }
  238.     if (returncode==F7) {
  239.         if(numarchivers==MAXARCHIVERS) {
  240.             error_message(" Sorry, I'm already maxed out... ");
  241.             pause_msg();
  242.             goto ReDo;
  243.         }
  244. StartingOut:
  245.         redid=1;
  246.         numarchivers++;
  247.         memset((void *)&archiver[0],0,(unsigned)sizeof(struct _archiver));
  248.         areano=numarchivers-1;
  249.         goto ReDo;
  250.     }
  251.     if (returncode==ESC) goto Quit;
  252.     if (returncode!=F10 && returncode!=F9) goto AskOver;
  253.     rstrip(archiver[areano].aname);
  254.     lstrip(archiver[areano].aname);
  255.     rstrip(archiver[areano].ename);
  256.     lstrip(archiver[areano].ename);
  257.     rstrip(archiver[areano].ext);
  258.     lstrip(archiver[areano].ext);
  259.     rstrip(archiver[areano].list);
  260.     lstrip(archiver[areano].list);
  261.     rstrip(archiver[areano].move);
  262.     lstrip(archiver[areano].move);
  263.     rstrip(archiver[areano].extract);
  264.     lstrip(archiver[areano].extract);
  265.     rstrip(archiver[areano].error);
  266.     rstrip(archiver[areano].id);
  267.     lstrip(archiver[areano].pick);
  268.     rstrip(archiver[areano].pick);
  269.     if(*archiver[areano].pick==' ') *archiver[areano].pick=0;
  270.     archiver[areano].pick[1]=0;
  271.     archiver[areano].skip=atoi(skip);
  272.     archiver[areano].errline=atoi(errline);
  273.     if (!*archiver[areano].aname || !*archiver[areano].ename || !*archiver[areano].list || !*archiver[areano].move || !*archiver[areano].extract || !*archiver[areano].error /* || !strchr(archiver[areano].ext,'.')*/ ) {
  274.         any_message(" WARNING: Blank field ");
  275.         pause_msg();
  276.         if(returncode==F9) goto ReDo;
  277.         delete_window(wnd6);
  278.         if(redid) {
  279.             return 1;
  280.         }
  281.         return 0;
  282.     }
  283.     redid=1;
  284.     if(returncode==F9) goto ReDo;
  285.     delete_window(wnd6);
  286.     return 1;
  287. Quit:
  288.     delete_window(wnd6);
  289.     if (redid) {
  290.         return 1;
  291.     }
  292.     return 0;
  293. }
  294.  
  295.  
  296.  
  297. void pascal load_archivers (char *file) {
  298.  
  299.     FILE *fp;
  300.     struct ffblk f;
  301.     char string[80];
  302.     register word x;
  303.  
  304.     if(findfirst(file,&f,0)) {
  305.         numarchivers=0;
  306.         return;
  307.     }
  308.     numarchivers=(word)(f.ff_fsize/(long)sizeof(struct _archiver));
  309.     if(!(fp=fopen(file,"rb"))) {
  310.         sprintf(string," Can't open %s ",file);
  311.         error_message(string);
  312.         pause_msg();
  313.         return;
  314.     }
  315.     fread((void *)archiver,sizeof(struct _archiver),numarchivers,fp);
  316.     fclose(fp);
  317.     for(x=0;x<numarchivers;x++) {
  318.         archiver[x].ext[4]=0;
  319.         archiver[x].move[40]=0;
  320.         archiver[x].extract[40]=0;
  321.         archiver[x].list[40]=0;
  322.         archiver[x].error[40]=0;
  323.         archiver[x].aname[12]=0;
  324.         archiver[x].ename[12]=0;
  325.         archiver[x].id[24]=0;
  326.         archiver[x].pick[1]=0;
  327.     }
  328. }
  329.