home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / c / ios_src / wareas.c < prev    next >
C/C++ Source or Header  |  1993-01-31  |  14KB  |  613 lines

  1. /*********************************************************************
  2.  
  3.                     IOS - areas reader
  4.                     
  5.     Program : IOSmail
  6.     Source  : free
  7.     Author  : Rinaldo Visscher
  8.     Date    : 1991
  9.     
  10.     This part contains,
  11.     
  12.     Read AREAS.BIN and parse it.
  13.     
  14. *********************************************************************/
  15.  
  16.  
  17. #include        <stdio.h>
  18. #include        <stdlib.h>
  19.  
  20. #if !defined LATTICE
  21. #include        <ext.h>
  22. #include        <tos.h>
  23. #else
  24. #include        <dos.h>
  25. #include        <sys/stat.h>
  26. #endif
  27. #include        <string.h>
  28.  
  29. #include        "portab.h"
  30.  
  31. #include        "defs.h"
  32. #include        "ioslib.h"
  33. #include        "modules.h"
  34.  
  35. #include        "inmail.h"
  36. #include        "strutil.h"
  37. #include        "lang.h"
  38.  
  39. #include        "vars.h"
  40.  
  41. /*
  42. **    Give every binairy areas.bbs an version number. Versie 0.85
  43. */
  44.  
  45. #define    BINVERSION    0x0059U
  46.  
  47. MLOCAL BYTE *get_frombin(VOID);
  48. MLOCAL CONST BYTE *MAILarea = "MAIL";
  49. MLOCAL CONST BYTE *TRASHarea= "TRASHAREA";
  50. MLOCAL CONST BYTE *PVTarea  = "PRIVATEMAIL";
  51. MLOCAL CONST BYTE *DUPEarea = "DUPE_AREA";
  52.  
  53. VOID uncompile() {
  54.     UWORD     i, j, z,
  55.             zone, net, node, point;
  56.     
  57.     BYTE Odomain[12];
  58.     
  59.     if ((FDUMMY = fopen("AREAS.UNC", "w")) == NULL) {
  60.         log_line(6, Logmessage[M__CANT_MAKE_UNCOM]);
  61.         return;
  62.     }
  63.  
  64.     fprintf(FDUMMY, "%s\n", Mainorg);
  65.     
  66.     for (i = 0; i < msgareas; i++) {
  67.         if (Dareas[i]) break;
  68.         
  69.         if (Areaday[i])
  70.             fprintf(FDUMMY, "-Days %d\n", Areaday[i]);
  71.         
  72.         if (Ausername[i]) 
  73.             fprintf(FDUMMY, "-Name %s\n", Ausername[i]);
  74.         
  75.         if (Areamin[i]) 
  76.             fprintf(FDUMMY, "-Msgs %d\n", Areamin[i]);
  77.  
  78.         if (Areakeep[i] == KEEPMSGS)
  79.             fprintf(FDUMMY, "-Keep\n");
  80.  
  81.         if (Areagroup[i])
  82.             fprintf(FDUMMY, "-Group %c\n", Areagroup[i]);
  83.         
  84.         if (strcmp(Areaorg[i], Mainorg))
  85.             fprintf(FDUMMY, "-Origin %s\n", Areaorg[i]);
  86.         
  87.         if (Randorgfile[i])
  88.             fprintf(FDUMMY, "-File %s\n", Randorgfile[i]);
  89.             
  90.         if (Read_only[i] == READ_ONLY) 
  91.             fprintf(FDUMMY, "-Local\n");
  92.         else if (Read_only[i] == REMOTE_ONLY)
  93.             fprintf(FDUMMY, "-Remote %s\n", ROnode[i]);
  94.         
  95.         fprintf(FDUMMY, "%s ", Areapath[i]);
  96.         fprintf(FDUMMY, "%s ", Areaname[i]);
  97.         
  98.         zone = Tozone[i][0];
  99.         net  = Tonet[i][0];
  100.         node = Tonode[i][0];
  101.         point= Topoint[i][0];
  102.         
  103.         if (zone == (UWORD) -1) {
  104.             fprintf(FDUMMY, "\n");
  105.             continue;
  106.         }
  107.         
  108.         fprintf(FDUMMY, "%u:%u/%u.%u", zone, net, node, point);
  109.         
  110.         if (strlen (Todomain[i])) {
  111.             fprintf (FDUMMY, "@%s", Todomain[i]);
  112.         }
  113.         
  114.         for (j=1; Tozone[i][j] != (UWORD) -1; j++) {
  115.             if (zone == Tozone[i][j] &&
  116.                 net  == Tonet[i][j] &&
  117.                 node == Tonode[i][j]) {
  118.                 
  119.                 fprintf(FDUMMY," .%u", Topoint[i][j]);
  120.                 continue;
  121.             }
  122.             
  123.             zone = Tozone[i][j];
  124.             net  = Tonet[i][j];
  125.             node = Tonode[i][j];
  126.             point= Topoint[i][j];
  127.     
  128.             fprintf(FDUMMY, " %u:%u/%u.%u", zone, net, node, point);
  129.         }
  130.         fprintf(FDUMMY, "\n");
  131.     }
  132.  
  133.     if (strlen(mailarea)) 
  134.     {
  135.         fprintf(FDUMMY, "-Days %d\n", maildays);
  136.         fprintf(FDUMMY, "-Msgs %d\n", mailmin);
  137.         if (mailkeep == KEEPMSGS)
  138.             fprintf(FDUMMY, "-Keep\n");
  139.         
  140.         fprintf(FDUMMY, "%s MAIL\n", mailarea);
  141.     }
  142.     
  143.     if (strlen(privatebox))
  144.     {
  145.         fprintf(FDUMMY, "-Days %d\n", pvtboxdays);
  146.         fprintf(FDUMMY, "-Msgs %d\n", pvtboxmin);
  147.         if (pvtkeep == KEEPMSGS)
  148.             fprintf(FDUMMY, "-Keep\n");
  149.             
  150.         fprintf(FDUMMY, "%s PRIVATEBOXAREA\n", privatebox);
  151.     }
  152.  
  153.     if (strlen(trasharea))
  154.     {
  155.         fprintf(FDUMMY, "-Days %d\n", trashdays);
  156.         fprintf(FDUMMY, "-Msgs %d\n", trashmin);
  157.         if (trashkeep == KEEPMSGS)
  158.             fprintf(FDUMMY, "-Keep\n");
  159.             
  160.         fprintf(FDUMMY, "%s TRASHAREA\n", trasharea);
  161.     }
  162.  
  163.     if (strlen(dupearea))
  164.     {
  165.         fprintf(FDUMMY, "-Days %d\n", dupedays);
  166.         fprintf(FDUMMY, "-Msgs %d\n", dupemin);
  167.         if (dupekeep == KEEPMSGS)
  168.             fprintf(FDUMMY, "-Keep\n");
  169.             
  170.         fprintf(FDUMMY, "%s DUPE_AREA\n", dupearea);
  171.     }
  172.         
  173.     fclose(FDUMMY);
  174.  
  175.     if (i >= msgareas) return;
  176.     
  177.     if ((FDUMMY = fopen("DAREAS.UNC", "w")) == NULL) {
  178.         log_line(6, Logmessage[M__CANT_CREATE_PASSTR]);
  179.         return;
  180.     }
  181.     
  182.     for (z = i; z < msgareas; z++) {
  183.         if (Areagroup[z])
  184.             fprintf (FDUMMY, "-Group %c\n", Areagroup[z]);
  185.  
  186.         fprintf(FDUMMY, "%s ", Areaname[z]);
  187.         
  188.         zone = Tozone[z][0];
  189.         net  = Tonet[z][0];
  190.         node = Tonode[z][0];
  191.         point= Topoint[z][0];
  192.         
  193.         if (zone == (UWORD) -1) {
  194.             fprintf(FDUMMY, "\n");
  195.             continue;
  196.         }
  197.         
  198.         fprintf(FDUMMY, "%u:%u/%u.%u", zone, net, node, point);
  199.         
  200.         if (strlen (Todomain [z]))
  201.             fprintf (FDUMMY, "@%s", Todomain[z]);
  202.         
  203.         for (j=1; Tozone[z][j] != (UWORD) -1; j++) {
  204.             if (zone == Tozone[z][j] &&
  205.                 net  == Tonet[z][j] &&
  206.                 node == Tonode[z][j]) {
  207.                 
  208.                 fprintf(FDUMMY," .%u", Topoint[z][j]);
  209.                 continue;
  210.             }
  211.             
  212.             zone = Tozone[z][j];
  213.             net  = Tonet[z][j];
  214.             node = Tonode[z][j];
  215.             point= Topoint[z][j];
  216.     
  217.             fprintf(FDUMMY, " %u:%u/%u.%u", zone, net, node, point);
  218.         }
  219.         fprintf(FDUMMY, "\n");
  220.     }
  221.     fclose(FDUMMY);
  222. }
  223.     
  224. VOID write_bin_areas() {
  225.     UWORD i, j;
  226.     BYTE buf1[128], buf2[128], *q;
  227.     struct ffblk blok;
  228.     
  229.     if (!findfirst(BIN_AREAS, &blok, 0)) {
  230.         strcpy (buf1, BIN_AREAS);
  231.         strcpy (buf2, BIN_AREAS);
  232.         if ((q = strrchr(buf2, '.')) != NULL) {
  233.             strcpy (++q, "DUP");
  234.             if (!findfirst (buf2, &blok, 0)) {
  235.                 unlink (buf2);
  236.             }
  237.             if (rename (buf1, buf2) != 0) {
  238.                 log_line(6, Logmessage[M__CANT_CREATE_BINAIR], BIN_AREAS);
  239.                 return;
  240.             }
  241.         }
  242.     }
  243.     
  244.     if ((FDUMMY = fopen (BIN_AREAS, "wb")) == NULL) {
  245.         log_line(6, Logmessage[M__CANT_CREATE_BINAIR], BIN_AREAS);
  246.         return;
  247.     }
  248.  
  249.     j = BINVERSION;
  250.     
  251.     fwrite(&j, sizeof(UWORD), 1, FDUMMY);
  252.     
  253.     giveTIMEslice();
  254.  
  255.     fprintf(FDUMMY, Mainorg);
  256.     putc(0, FDUMMY);
  257.     
  258.     for (i=0; i< msgareas; i++) {
  259.         fprintf(FDUMMY, "%s", Areaname[i]);
  260.         putc(0,FDUMMY);
  261.  
  262.         if (strlen(Todomain [i]))
  263.             fprintf (FDUMMY, "%s", Todomain [i]);
  264.         
  265.         putc (0, FDUMMY);
  266.         
  267.         fwrite (&Areagroup[i], sizeof(BYTE), 1, FDUMMY);
  268.  
  269.         fwrite (&Dareas[i], sizeof(WORD), 1, FDUMMY);
  270.  
  271.         if (Dareas[i]) goto write_nodes;
  272.         
  273.         fprintf(FDUMMY, "%s", Areapath[i]);
  274.         putc(0, FDUMMY);
  275.  
  276.         if (strcmp(Areaorg[i], Mainorg)) 
  277.             fprintf(FDUMMY, "%s", Areaorg[i]);
  278.         putc(0, FDUMMY);
  279.         
  280.         if (Ausername[i])
  281.             fprintf(FDUMMY, Ausername[i]);
  282.         putc(0, FDUMMY);
  283.         
  284.         if (Randorgfile[i])
  285.             fprintf(FDUMMY, Randorgfile[i]);
  286.         putc(0, FDUMMY);
  287.         
  288.         giveTIMEslice();
  289.         
  290.         fwrite (&Areaday[i], sizeof(WORD), 1, FDUMMY);
  291.         fwrite (&Areamin[i], sizeof(WORD), 1, FDUMMY);
  292.         
  293.         fwrite (&Areakeep[i], sizeof(BYTE), 1, FDUMMY);
  294.  
  295.         fwrite (&Read_only[i], sizeof(BOOLEAN), 1, FDUMMY);
  296.  
  297.         giveTIMEslice();
  298.         
  299.         if (Read_only[i] == REMOTE_ONLY) {
  300.             fprintf(FDUMMY, "%s", ROnode[i]);
  301.             putc(0, FDUMMY);
  302.         }
  303.         
  304.         write_nodes:
  305.         
  306.         for (j=0; Tozone[i][j] != (UWORD) -1; j++) {
  307.             fwrite(&Tozone[i][j], sizeof(UWORD), 1, FDUMMY);
  308.             fwrite(&Tonet[i][j], sizeof(UWORD), 1, FDUMMY);
  309.             fwrite(&Tonode[i][j], sizeof(UWORD), 1, FDUMMY);
  310.             fwrite(&Topoint[i][j], sizeof(UWORD), 1, FDUMMY);
  311.             giveTIMEslice();
  312.         }
  313.         j = (UWORD) -1;
  314.         fwrite(&j, sizeof(UWORD), 1, FDUMMY);
  315.     }
  316.  
  317.     giveTIMEslice();
  318.     
  319.     j = 0;
  320.     
  321.     if (strlen(mailarea)) {
  322.         fprintf(FDUMMY, MAILarea);
  323.         putc(0, FDUMMY);
  324.         putc(0, FDUMMY);
  325.         putc(0, FDUMMY);
  326.         fwrite(&j, sizeof(WORD), 1, FDUMMY);
  327.         fprintf(FDUMMY, mailarea);
  328.         putc(0, FDUMMY);
  329.         fwrite(&maildays, sizeof(WORD), 1, FDUMMY);
  330.         fwrite(&mailmin, sizeof(WORD), 1, FDUMMY);
  331.         fwrite(&mailkeep, sizeof(BYTE), 1, FDUMMY);
  332.     }
  333.     
  334.     if (strlen(trasharea)) {
  335.         fprintf(FDUMMY, TRASHarea);
  336.         putc(0, FDUMMY);
  337.         putc(0, FDUMMY);
  338.         putc(0, FDUMMY);
  339.         fwrite(&j, sizeof(WORD), 1, FDUMMY);
  340.         fprintf(FDUMMY, trasharea);
  341.         putc(0, FDUMMY);
  342.         fwrite(&trashdays, sizeof(WORD), 1, FDUMMY);
  343.         fwrite(&trashmin, sizeof(WORD), 1,FDUMMY);
  344.         fwrite(&trashkeep, sizeof(BYTE), 1, FDUMMY);
  345.     }
  346.     
  347.     if (strlen(privatebox)) {
  348.         fprintf(FDUMMY, PVTarea);
  349.         putc(0, FDUMMY);
  350.         putc(0, FDUMMY);
  351.         putc(0, FDUMMY);
  352.         fwrite(&j, sizeof(WORD), 1, FDUMMY);
  353.         fprintf(FDUMMY, privatebox);
  354.         putc(0, FDUMMY);
  355.         fwrite(&pvtboxdays, sizeof(WORD), 1, FDUMMY);
  356.         fwrite(&pvtboxmin, sizeof(WORD), 1, FDUMMY);
  357.         fwrite(&pvtkeep, sizeof(BYTE), 1, FDUMMY);
  358.     }
  359.  
  360.     if (strlen(dupearea)) {
  361.         fprintf(FDUMMY, DUPEarea);
  362.         putc(0, FDUMMY);
  363.         putc(0, FDUMMY);
  364.         putc(0, FDUMMY);
  365.         fwrite(&j, sizeof(WORD), 1, FDUMMY);
  366.         fprintf(FDUMMY, dupearea);
  367.         putc(0, FDUMMY);
  368.         fwrite(&dupedays, sizeof(WORD), 1, FDUMMY);
  369.         fwrite(&dupemin, sizeof(WORD), 1, FDUMMY);
  370.         fwrite(&dupekeep, sizeof(BYTE), 1, FDUMMY);
  371.     }
  372.  
  373.     fclose(FDUMMY);
  374.     
  375. }
  376.  
  377. MLOCAL BYTE *get_frombin() {
  378.     MLOCAL BYTE buffer[1024];
  379.     BYTE        *p;
  380.     WORD        j;
  381.     
  382.     p = buffer;
  383.     
  384.     while(1) {
  385.         j = getc(FDUMMY);
  386.         if(feof(FDUMMY)) return (NULL);
  387.         
  388.         if (!j)
  389.         break;
  390.         
  391.         *p++ = (BYTE)j;
  392.     }
  393.     
  394.     *p = EOS;
  395.     
  396.     return (buffer);
  397. }
  398.  
  399. BOOLEAN read_bin_areas() {
  400.     UWORD i, j;
  401.     BYTE *buffer;
  402.     
  403.     if ((FDUMMY = fopen (BIN_AREAS, "rb")) == NULL) {
  404.         if (!read_areas(AREAFILE, 0)) {
  405.             log_line(6, Logmessage[M__CANT_OPEN], BIN_AREAS);
  406.             exit (10);
  407.         }
  408.         read_areas (DAREAFILE, 1);
  409.         write_bin_areas();
  410.         if ((FDUMMY = fopen (BIN_AREAS, "rb")) == NULL) {
  411.             log_line(6, Logmessage[M__CANT_OPEN], BIN_AREAS);
  412.             return (FALSE);
  413.         }
  414.     }
  415.     
  416.     fread(&j, sizeof(UWORD), 1, FDUMMY);
  417.     
  418.     if (j != BINVERSION) {
  419.         log_line(6, Logmessage[M__RECOMPILE_AREAS], j, BINVERSION);
  420.         fclose (FDUMMY);
  421.         return (FALSE);
  422.     }
  423.     
  424.     buffer = get_frombin();
  425.     Mainorg = ctl_string(buffer);
  426.     
  427.     while(!feof(FDUMMY)) {
  428.  
  429.         giveTIMEslice();
  430.         
  431.         buffer = get_frombin();
  432.         if (!buffer) break;
  433.         
  434.         Areaname[msgareas] = ctl_string(buffer);
  435.  
  436.         giveTIMEslice();
  437.  
  438.         buffer = get_frombin();
  439.         if (!buffer) break;
  440.         strcpy (Todomain[msgareas], buffer);
  441.         
  442.         fread(&Areagroup[msgareas], sizeof(BYTE), 1, FDUMMY);
  443.  
  444.         fread(&Dareas[msgareas], sizeof(WORD),  1, FDUMMY);
  445.         
  446.         Read_only[msgareas] = PUBLIC;
  447.         
  448.         if (Dareas[msgareas]) goto read_nodes;
  449.         
  450.         buffer = get_frombin();
  451.         if (!buffer) break;
  452.         
  453.         Areapath[msgareas] = ctl_string(buffer);
  454.  
  455.         giveTIMEslice();
  456.         
  457.         if (!strcmp(Areaname[msgareas], MAILarea)) {
  458.             free(Areaname[msgareas]);
  459.             free(Areapath[msgareas]);
  460.             mailarea = ctl_string(buffer);
  461.             fread(&maildays, sizeof(WORD), 1, FDUMMY);
  462.             fread(&mailmin, sizeof(WORD), 1, FDUMMY);
  463.             fread(&mailkeep, sizeof(BYTE), 1, FDUMMY);
  464.             continue;
  465.         }
  466.         
  467.         if (!strcmp(Areaname[msgareas], TRASHarea)) {
  468.             free(Areaname[msgareas]);
  469.             free(Areapath[msgareas]);
  470.             trasharea = ctl_string(buffer);
  471.             fread(&trashdays, sizeof(WORD), 1, FDUMMY);
  472.             fread(&trashmin, sizeof(WORD), 1, FDUMMY);
  473.             fread(&trashkeep, sizeof(BYTE), 1, FDUMMY);
  474.             continue;
  475.         }
  476.  
  477.         if (!strcmp(Areaname[msgareas], PVTarea)) {
  478.             free(Areaname[msgareas]);
  479.             free(Areapath[msgareas]);
  480.             privatebox = ctl_string(buffer);
  481.             fread(&pvtboxdays, sizeof(WORD), 1, FDUMMY);
  482.             fread(&pvtboxmin, sizeof(WORD), 1, FDUMMY);
  483.             fread(&pvtkeep, sizeof(BYTE), 1, FDUMMY);
  484.             continue;
  485.         }
  486.  
  487.         if (!strcmp(Areaname[msgareas], DUPEarea)) {
  488.             free(Areaname[msgareas]);
  489.             free(Areapath[msgareas]);
  490.             dupearea = ctl_string(buffer);
  491.             fread(&dupedays, sizeof(WORD), 1, FDUMMY);
  492.             fread(&dupemin, sizeof(WORD), 1, FDUMMY);
  493.             fread(&dupekeep, sizeof(BYTE), 1, FDUMMY);
  494.             continue;
  495.         }
  496.  
  497.         buffer = get_frombin();
  498.         if (!buffer) break;
  499.         
  500.         if (!strlen(buffer)) {
  501.             Areaorg[msgareas] = ctl_string(Mainorg);
  502.         } else {
  503.             Areaorg[msgareas] = ctl_string(buffer);
  504.         }
  505.         
  506.         giveTIMEslice();
  507.  
  508.         buffer = get_frombin();
  509.         if (!buffer) break;
  510.         
  511.         if (!strlen(buffer)) {
  512.             Ausername[msgareas] = NULL;
  513.         } else {
  514.             Ausername[msgareas] = ctl_string(buffer);
  515.         }
  516.         
  517.         giveTIMEslice();
  518.         
  519.         buffer = get_frombin();
  520.         if (!strlen(buffer)) {
  521.             Randorgfile[msgareas] = NULL;
  522.         } else {
  523.             Randorgfile[msgareas] = ctl_file(buffer);
  524.         }
  525.         
  526.         fread(&Areaday[msgareas], sizeof(WORD), 1, FDUMMY);
  527.         fread(&Areamin[msgareas], sizeof(WORD), 1, FDUMMY);
  528.         
  529.         fread(&Areakeep[msgareas], sizeof(BYTE), 1, FDUMMY);
  530.         
  531.         fread(&Read_only[msgareas], sizeof(BOOLEAN), 1, FDUMMY);
  532.         
  533.         giveTIMEslice();
  534.         
  535.         if (Read_only[msgareas] == REMOTE_ONLY) {
  536.             buffer = get_frombin();
  537.             ROnode[msgareas] = ctl_string(buffer);
  538.         }
  539.         
  540.         read_nodes:
  541.         
  542.         i = j = 0;
  543.         
  544.         while (j != (UWORD) -1) {
  545.             fread(&j, sizeof(UWORD), 1, FDUMMY);
  546.             if (j == (UWORD) -1) break;
  547.             Tz[i] = j;
  548.             fread(&j, sizeof(UWORD), 1, FDUMMY);
  549.             if (j == (UWORD) -1) break;
  550.             Tnt[i] = j;
  551.             fread(&j, sizeof(UWORD), 1, FDUMMY);
  552.             if (j == (UWORD) -1) break;
  553.             Tne[i] = j;
  554.             fread(&j, sizeof(UWORD), 1, FDUMMY);
  555.             if (j == (UWORD) -1) break;
  556.             Tp[i++] = j;
  557.             giveTIMEslice();
  558.             if(feof(FDUMMY)) break;
  559.         }
  560.         
  561.         Tz[i] = Tnt[i] = Tne[i] = Tp[i] = -1;
  562.  
  563.         Tozone[msgareas] = (UWORD *) myalloc((i+1) * sizeof(UWORD));
  564.         Tonet[msgareas] = (UWORD *) myalloc((i+1) * sizeof(UWORD));
  565.         Tonode[msgareas] = (UWORD *) myalloc((i+1) * sizeof(UWORD));
  566.         Topoint[msgareas] = (UWORD *) myalloc((i+1) * sizeof(UWORD));
  567.         
  568.         memset(Tozone[msgareas], -1,(i+1) * sizeof(WORD));
  569.         memset(Tonet[msgareas], -1, (i+1) * sizeof(WORD));
  570.         memset(Tonode[msgareas], -1, (i+1)* sizeof(WORD));
  571.         memset(Topoint[msgareas], -1, (i+1)* sizeof(WORD));
  572.  
  573.         memmove(Tozone[msgareas], Tz, sizeof(WORD) * i);
  574.         memmove(Tonet[msgareas], Tnt, sizeof(WORD) * i);
  575.         memmove(Tonode[msgareas], Tne, sizeof(WORD) * i);
  576.         memmove(Topoint[msgareas], Tp, sizeof(WORD) * i);
  577.  
  578.         msgareas++;
  579.     }
  580.     fclose (FDUMMY);
  581.     return (TRUE);
  582. }
  583.  
  584. BOOLEAN area_attrib() {
  585.     WORD attrib;
  586.     BYTE buffer[128];
  587.     BOOLEAN retcode = FALSE;
  588.     
  589.     sprintf(buffer, "%s%s",Envpath, AREAFILE);
  590.  
  591.     giveTIMEslice();
  592.         
  593.     attrib = Fattrib(buffer, 0 , -1);
  594.     
  595.     if (attrib != -33 && attrib != -34 && attrib & FA_ARCHIVE)
  596.     {
  597.         retcode = TRUE;
  598.     }
  599.     
  600.     sprintf(buffer, "%s%s",Envpath, DAREAFILE);
  601.     
  602.     giveTIMEslice();
  603.     
  604.     attrib = Fattrib(buffer, 0 , -1);
  605.     
  606.     if (attrib != -33 && attrib != -34 && attrib & FA_ARCHIVE)
  607.     {
  608.         retcode = TRUE;
  609.     }
  610.     
  611.     return (retcode);
  612. }
  613.