?login_element?

Subversion Repositories NedoOS

Rev

Rev 2155 | Blame | Compare with Previous | Last modification | View Log | Download

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <intrz80.h>
  4. #include <stdlib.h>
  5. #include <oscalls.h>
  6. #include <../common/terminal.c>
  7. #include <tcp.h>
  8. #include <osfs.h>
  9. #include <intrz80.h>
  10. #include <ctype.h>
  11. #include <math.h>
  12.  
  13. unsigned int RBR_THR = 0xf8ef;
  14. unsigned int IER = 0xf9ef;
  15. unsigned int IIR_FCR = 0xfaef;
  16. unsigned int LCR = 0xfbef;
  17. unsigned int MCR = 0xfcef;
  18. unsigned int LSR = 0xfdef;
  19. unsigned int MSR = 0xfeef;
  20. unsigned int SR = 0xffef;
  21. unsigned int divider = 1;
  22. unsigned char comType = 0;
  23. unsigned int espType = 32;
  24. unsigned char netDriver = 0;
  25.  
  26. unsigned char uVer[] = "0.65";
  27. unsigned char curPath[128];
  28. unsigned char curLetter;
  29. unsigned char oldBinExt;
  30. unsigned int errn, headlng;
  31. unsigned long contLen;
  32. unsigned char saveFlag, saveBak;
  33. unsigned char crlf[2] = {13, 10};
  34.  
  35. unsigned char status, curFormat;
  36.  
  37. struct sockaddr_in targetadr;
  38. struct readstructure readStruct;
  39. struct sockaddr_in dnsaddress;
  40.  
  41. FILE *fp2;
  42.  
  43. struct window
  44. {
  45.         unsigned char x;
  46.         unsigned char y;
  47.         unsigned char w;
  48.         unsigned char h;
  49.         unsigned char text;
  50.         unsigned char back;
  51.         unsigned char tittle[80];
  52.  
  53. } cw;
  54.  
  55. struct configuration
  56. {
  57.         unsigned char kernelName[32];
  58.         unsigned char machineName[32];
  59.         unsigned char kernelLink[256];
  60.         unsigned char is_atm;
  61. } config;
  62.  
  63. unsigned char netbuf[4096];
  64.  
  65. unsigned char cmdlist1[] = " HTTP/1.1\r\nHost: nedoos.ru\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE5.01; NedoOS)\r\n\r\n\0";
  66. unsigned char binLink[] = "http://nedoos.ru/images/sysbin.zip";
  67. unsigned char pkunzipLink[] = "/svn/dl.php?repname=NedoOS&path=/release/bin/pkunzip.com";
  68. unsigned char tarLink[] = "/svn/dl.php?repname=NedoOS&path=/release/bin/tar.com";
  69. unsigned char cmdLink[] = "/svn/dl.php?repname=NedoOS&path=/release/bin/cmd.com";
  70. unsigned char termLink[] = "/svn/dl.php?repname=NedoOS&path=/release/bin/term.com";
  71. unsigned char updLink[] = "/svn/dl.php?repname=NedoOS&path=/release/bin/updater.com";
  72. unsigned char newsLink[] = "/svn/dl.php?repname=NedoOS&path=/release/doc/updater.new";
  73. unsigned char wizNetLink[] = "/svn/dl.php?repname=NedoOS&path=/release/bin/wizcfg.com";
  74. unsigned char netIniLink[] = "/svn/dl.php?repname=NedoOS&path=/release/bin/net.ini";
  75. unsigned char relLink[] = "http://nedoos.ru/images/release.zip";
  76. unsigned char nameBuf1[256];
  77. unsigned char *nameBuf = nameBuf1;
  78. const unsigned char sendOk[] = "SEND OK";
  79. const unsigned char gotWiFi[] = "WIFI GOT IP";
  80. unsigned char cmd[256];
  81. unsigned char link[512];
  82. unsigned char dataBuffer[4096];
  83.  
  84. void clearStatus(void)
  85. {
  86.         AT(1, 24);
  87.         printf("                                                                                \r");
  88. }
  89.  
  90. void printTable(void)
  91. {
  92.         unsigned int cycle;
  93.  
  94.         for (cycle = 32; cycle < 256; cycle++)
  95.         {
  96.                 printf("%03u:", cycle);
  97.                 putchar(cycle);
  98.                 printf(" ");
  99.                 if (cycle % 10 == 0)
  100.                 {
  101.                         printf("\r\n");
  102.                 }
  103.         }
  104. }
  105.  
  106. void delay(unsigned long counter)
  107. {
  108.         unsigned long start, finish;
  109.         counter = counter / 20;
  110.         if (counter < 1)
  111.         {
  112.                 counter = 1;
  113.         }
  114.         start = time();
  115.         finish = start + counter;
  116.  
  117.         while (start < finish)
  118.         {
  119.                 start = time();
  120.         }
  121. }
  122. void printNews(void) // max 20 lines in total and 59 col.
  123. {
  124.         FILE *fpNews;
  125.         unsigned char str[1];
  126.         unsigned char curLine, nbyte;
  127.  
  128.         fpNews = OS_OPENHANDLE("updater.new", 0x80);
  129.         if (((int)fpNews) & 0xff)
  130.         {
  131. #include <printnews.c>
  132.                 return;
  133.         }
  134.         curLine = 0;
  135.         while (curLine < 20)
  136.         {
  137.                 AT(20, 3 + curLine);
  138.                 while (1)
  139.                 {
  140.                         OS_READHANDLE(str, fpNews, sizeof(str));
  141.  
  142.                         if (errno != 0)
  143.                         {
  144.                                 OS_CLOSEHANDLE(fpNews);
  145.                                 return;
  146.                         }
  147.  
  148.                         nbyte = str[0];
  149.  
  150.                         if (nbyte != 13)
  151.                         {
  152.                                 putchar(nbyte);
  153.                         }
  154.                         else
  155.                         {
  156.                                 break;
  157.                         }
  158.                 }
  159.                 OS_READHANDLE(str, fpNews, sizeof(str));
  160.                 curLine++;
  161.         }
  162.         OS_CLOSEHANDLE(fpNews);
  163. }
  164.  
  165. void drawWindow(struct window w)
  166. {
  167.         unsigned char wcount, tempx, tittleStart;
  168.  
  169.         AT(w.x, w.y - 1);
  170.         tittleStart = w.x + (w.w / 2) - (strlen(w.tittle) / 2) + 1;
  171.         BOX(w.x, w.y, w.w + 1, w.h, w.back, 32);
  172.         AT(w.x, w.y);
  173.         ATRIB(w.text);
  174.         putchar(201);
  175.         for (wcount = 0; wcount < w.w; wcount++)
  176.         {
  177.                 putchar(205);
  178.         }
  179.         putchar(187);
  180.  
  181.         AT(w.x, w.y + w.h);
  182.         putchar(200);
  183.         for (wcount = 0; wcount < w.w; wcount++)
  184.         {
  185.                 putchar(205);
  186.         }
  187.         putchar(188);
  188.  
  189.         tempx = w.x + w.w + 1;
  190.         for (wcount = 1; wcount < w.h; wcount++)
  191.         {
  192.                 AT(w.x, w.y + wcount);
  193.                 putchar(186);
  194.                 AT(tempx, w.y + wcount);
  195.                 putchar(186);
  196.         }
  197.  
  198.         AT(w.x, w.y + 2);
  199.         putchar(199);
  200.         for (wcount = 0; wcount < w.w; wcount++)
  201.         {
  202.                 putchar(196);
  203.         }
  204.         putchar(182);
  205.  
  206.         AT(tittleStart, w.y + 1);
  207.         printf("%s", w.tittle);
  208. }
  209.  
  210. void fatalError(unsigned char *message)
  211. {
  212.         strcpy(cw.tittle, "FATAL ERROR!");
  213.  
  214.         if (strlen(message) > strlen(cw.tittle))
  215.         {
  216.                 cw.w = strlen(message) + 2;
  217.         }
  218.         else
  219.                 cw.w = strlen(cw.tittle) + 2;
  220.         cw.x = 80 / 2 - cw.w / 2;
  221.         cw.y = 11;
  222.         cw.h = 4;
  223.         cw.text = 97;
  224.         cw.back = 41;
  225.         drawWindow(cw);
  226.         AT(cw.x + 2, cw.y + 3);
  227.         printf("%s", message);
  228.         AT(1, 1);
  229.         do
  230.         {
  231.                 YIELD();
  232.         } while (_low_level_get() == 0);
  233.         exit(0);
  234. }
  235.  
  236. void infoBox(unsigned char *message)
  237. {
  238.         strcpy(cw.tittle, "nedoOS system updater ");
  239.         strcat(cw.tittle, uVer);
  240.  
  241.         if (strlen(message) > strlen(cw.tittle))
  242.         {
  243.                 cw.w = strlen(message) + 2;
  244.         }
  245.         else
  246.                 cw.w = strlen(cw.tittle) + 2;
  247.         cw.x = 80 / 2 - cw.w / 2;
  248.         cw.y = 15;
  249.         cw.h = 4;
  250.         cw.text = 97;
  251.         cw.back = 42;
  252.  
  253.         drawWindow(cw);
  254.         AT(cw.x + 2, cw.y + 3);
  255.         printf("%s", message);
  256.         AT(1, 1);
  257. }
  258.  
  259. unsigned char OS_SHELL(unsigned char *command)
  260. {
  261.         unsigned char fileName[] = "bin/cmd.com";
  262.         unsigned char appCmd[128] = "cmd.com ";
  263.         unsigned int shellSize, loaded, loop, adr;
  264.         unsigned char pgbak;
  265.         union APP_PAGES shell_pg;
  266.         union APP_PAGES main_pg;
  267.         FILE *fp3;
  268.         main_pg.l = OS_GETMAINPAGES();
  269.         pgbak = main_pg.pgs.window_3;
  270.         OS_GETPATH((unsigned int)&curPath);
  271.         OS_CHDIR("/");
  272.  
  273.         strcat(appCmd, command);
  274.         fp3 = OS_OPENHANDLE(fileName, 0x80);
  275.         if (((int)fp3) & 0xff)
  276.         {
  277.                 clearStatus();
  278.                 AT(1, 24);
  279.                 printf("%s", fileName);
  280.                 printf(" not found.");
  281.                 do
  282.                 {
  283.                         YIELD();
  284.                 } while (_low_level_get() == 0);
  285.                 exit(0);
  286.         }
  287.  
  288.         shellSize = OS_GETFILESIZE(fp3);
  289.  
  290.         OS_CHDIR(curPath);
  291.  
  292.         OS_NEWAPP((unsigned int)&shell_pg);
  293.         shell_pg.l = OS_GETAPPMAINPAGES(shell_pg.pgs.pId);
  294.         SETPG32KHIGH(shell_pg.pgs.window_0);
  295.         memcpy((unsigned char *)(0xC080), (unsigned char *)(&appCmd), strlen(appCmd) + 1);
  296.  
  297.         loop = 0;
  298.         while (loop < shellSize)
  299.         {
  300.                 loaded = OS_READHANDLE(netbuf, fp3, sizeof(netbuf));
  301.                 adr = 0xC100 + loop;
  302.                 memcpy((unsigned char *)(adr), &netbuf, loaded);
  303.                 loop = loop + loaded;
  304.         }
  305.         OS_CLOSEHANDLE(fp3);
  306.         SETPG32KHIGH(pgbak);
  307.         clearStatus();
  308.         AT(1, 24);
  309.         printf("Shell [pId:%u][%s][%s]", shell_pg.pgs.pId, curPath, appCmd);
  310.         AT(1, 24);
  311.         delay(300);
  312.         OS_RUNAPP(shell_pg.pgs.pId);
  313.         AT(1, 4);
  314.         OS_WAITPID(shell_pg.pgs.pId);
  315.         return shell_pg.pgs.pId;
  316. }
  317.  
  318. ///////////////////////////
  319. #include <../common/esp-com.c>
  320. #include <../common/network.c>
  321. //////////////////////////
  322.  
  323. unsigned char saveBuf(unsigned char *fileNamePtr, unsigned char operation, unsigned int sizeOfBuf)
  324. {
  325.         if (operation == 00)
  326.         {
  327.                 fp2 = OS_CREATEHANDLE(fileNamePtr, 0x80);
  328.                 if (((int)fp2) & 0xff)
  329.                 {
  330.                         clearStatus();
  331.                         AT(1, 24);
  332.                         printf("%s", fileNamePtr);
  333.                         printf(" creating error.");
  334.                         exit(0);
  335.                 }
  336.                 OS_CLOSEHANDLE(fp2);
  337.  
  338.                 fp2 = OS_OPENHANDLE(fileNamePtr, 0x80);
  339.                 if (((int)fp2) & 0xff)
  340.                 {
  341.                         clearStatus();
  342.                         AT(1, 24);
  343.                         printf("%s", fileNamePtr);
  344.                         printf(" opening error. ");
  345.  
  346.                         exit(0);
  347.                 }
  348.                 AT(1, 24);
  349.                 return 0;
  350.         }
  351.  
  352.         if (operation == 01)
  353.         {
  354.                 OS_WRITEHANDLE(netbuf + headlng, fp2, sizeOfBuf);
  355.                 return 0;
  356.         }
  357.  
  358.         if (operation == 02)
  359.         {
  360.                 OS_CLOSEHANDLE(fp2);
  361.                 return 0;
  362.         }
  363.         return 0;
  364. }
  365.  
  366. unsigned int cutHeader(unsigned int todo)
  367. {
  368.         unsigned int err;
  369.         unsigned char *count1;
  370.  
  371.         err = httpError();
  372.         if (err != 200)
  373.         {
  374.                 BOX(1, 1, 80, 25, 40, 32);
  375.                 AT(1, 1);
  376.                 printf("HTTP ERROR %u", err);
  377.                 puts("^^^^^^^^^^^^^^^^^^^^^");
  378.                 puts(netbuf);
  379.                 getchar();
  380.                 fatalError("Server response error!");
  381.         }
  382.         count1 = strstr(netbuf, "Content-Length:");
  383.         if (count1 == NULL)
  384.         {
  385.                 printf("contLen  not found \r\n");
  386.                 contLen = 0;
  387.         }
  388.         else
  389.         {
  390.                 contLen = atol(count1 + 15);
  391.                 // printf("Content-Length: %lu \n\r", contLen);
  392.         }
  393.  
  394.         count1 = strstr(netbuf, "\r\n\r\n");
  395.         if (count1 == NULL)
  396.         {
  397.                 printf("header not found\r\n");
  398.         }
  399.         else
  400.         {
  401.                 headlng = ((unsigned int)count1 - (unsigned int)netbuf + 4);
  402.                 // printf("header %u bytes\r\n", headlng);
  403.         }
  404.         return todo - headlng;
  405. }
  406.  
  407. unsigned char getFile(unsigned char *fileLink, unsigned char *fileNamePtr)
  408. {
  409.         int todo;
  410.         char socket;
  411.         unsigned int fileSize1;
  412.         unsigned long downloaded = 0;
  413.  
  414.         unsigned char sizeLink;
  415.         unsigned char byte, count = 0, try = 0;
  416.         unsigned char *count1;
  417.  
  418.         strcpy(netbuf, "GET ");
  419.         strcat(netbuf, fileLink);
  420.         strcat(netbuf, cmdlist1);
  421.         clearStatus();
  422.         AT(1, 24);
  423.         printf("%s", fileNamePtr);
  424.  
  425.         if (netDriver == 0)
  426.         {
  427.                 clearStatus();
  428.                 socket = OpenSock(AF_INET, SOCK_STREAM);
  429.                 testOperation("OS_NETSOCKET", socket);
  430.  
  431.                 todo = netConnect(socket, 10);
  432.                 testOperation("OS_NETCONNECT", todo);
  433.  
  434.                 todo = tcpSend(socket, (unsigned int)&netbuf, strlen(netbuf), 10);
  435.                 testOperation("OS_WIZNETWRITE", todo);
  436.                 clearStatus();
  437.                 do
  438.                 {
  439.                         headlng = 0;
  440.                         todo = tcpRead(socket, 10);
  441.                         testOperation("OS_WIZNETREAD", todo);
  442.                         if (todo == 0)
  443.                         {
  444.                                 break;
  445.                         }
  446.                         if (downloaded == 0)
  447.                         {
  448.                                 todo = cutHeader(todo);
  449.                                 fileSize1 = contLen / 1024;
  450.                                 saveBuf(fileNamePtr, 00, 0);
  451.                         }
  452.                         downloaded = downloaded + todo;
  453.                         printf(" %lu of %u kb   \r", downloaded / 1024, fileSize1);
  454.                         saveBuf(fileNamePtr, 01, todo);
  455.                         if (_low_level_get() == 27)
  456.                         {
  457.                                 fatalError("File download aborted!");
  458.                         }
  459.                 } while (downloaded < contLen);
  460.                 netShutDown(socket, 0);
  461.                 saveBuf(fileNamePtr, 02, 00);
  462.  
  463.                 if (downloaded != contLen)
  464.                 {
  465.                         fatalError("File download error!");
  466.                 }
  467.         }
  468.         if (netDriver == 1)
  469.         {
  470.                 strcpy(link, netbuf);
  471.                 sizeLink = strlen(link);
  472.                 try = 0;
  473.                 do
  474.                 {
  475.                         try++;
  476.                         if (try > 1)
  477.                         {
  478.                                 clearStatus();
  479.                                 printf("----->Retry:%u", try);
  480.                                 delay(500);
  481.                         }
  482.                         sendcommand("AT+CIPSTART=\"TCP\",\"nedoos.ru\",80");
  483.                         getAnswer2(); // CONNECT or ERROR or link is not valid
  484.                         count1 = strstr(netbuf, "CONNECT");
  485.                 } while (count1 == NULL);
  486.  
  487.                 getAnswer2(); // OK
  488.  
  489.                 sprintf(cmd, "AT+CIPSEND=%u", sizeLink + 2); // second CRLF in send command
  490.                 sendcommand(cmd);
  491.                 getAnswer2();
  492.                 do
  493.                 {
  494.                         byte = uart_readBlock();
  495.                         // putchar(byte);
  496.                 } while (byte != '>');
  497.                 sendcommand(link);
  498.                 count = 0;
  499.  
  500.                 do
  501.                 {
  502.                         byte = uart_readBlock();
  503.                         if (byte == sendOk[count])
  504.                         {
  505.                                 count++;
  506.                         }
  507.                         else
  508.                         {
  509.                                 count = 0;
  510.                         }
  511.                 } while (count < strlen(sendOk));
  512.                 uart_readBlock(); // CR
  513.                 uart_readBlock(); // LF
  514.                 clearStatus();
  515.                 do
  516.                 {
  517.                         headlng = 0;
  518.                         todo = recvHead();
  519.                         getdataEsp(todo); // Requested size
  520.                         if (downloaded == 0)
  521.                         {
  522.                                 todo = cutHeader(todo);
  523.                                 fileSize1 = contLen / 1024;
  524.                                 saveBuf(fileNamePtr, 00, 0);
  525.                         }
  526.                         downloaded = downloaded + todo;
  527.                         printf("%lu of %u kb   \r", downloaded / 1024, fileSize1);
  528.                         saveBuf(fileNamePtr, 01, todo);
  529.  
  530.                         if (_low_level_get() == 27)
  531.                         {
  532.                                 fatalError("File download aborted!");
  533.                         }
  534.                 } while (downloaded < contLen);
  535.                 saveBuf(fileNamePtr, 02, 00);
  536.                 sendcommand("AT+CIPCLOSE");
  537.                 getAnswer2(); // CLOSED
  538.                 getAnswer2(); // OK
  539.         }
  540.         return 0;
  541. }
  542.  
  543. unsigned char getConfig(void)
  544. {
  545.         config.is_atm = (unsigned char)OS_GETCONFIG();
  546.         // H=system drive, L= 1-Evo 2-ATM2 3-ATM3 6-p2.666 ;E=pgsys(system page) D= TR-DOS page
  547.         switch ((config.is_atm))
  548.         {
  549.         case 1:
  550.                 strcpy(config.machineName, "ZX-Evolution");
  551.                 strcpy(config.kernelName, "sd_boot.$C");
  552.                 strcpy(config.kernelLink, "/svn/dl.php?repname=NedoOS&path=/release/sd_boot.%24C");
  553.                 break;
  554.         case 2:
  555.                 strcpy(config.machineName, "TURBO 2+");
  556.                 strcpy(config.kernelName, "osatm2hd.$C");
  557.                 strcpy(config.kernelLink, "/svn/dl.php?repname=NedoOS&path=/release/osatm2hd.%24C");
  558.  
  559.                 break;
  560.  
  561.         case 3: // SD HDD versions
  562.                 strcpy(config.machineName, "TURBO 3 [SD]");
  563.                 strcpy(config.kernelName, "osatm3hd.$C");
  564.                 strcpy(config.kernelLink, "/svn/dl.php?repname=NedoOS&path=/release/osatm3hd.%24C");
  565.                 break;
  566.         case 6: // SD HDD versions
  567.                 strcpy(config.machineName, "P2.666 [SD]");
  568.                 strcpy(config.kernelName, "osp26sd.$C");
  569.                 strcpy(config.kernelLink, "/svn/dl.php?repname=NedoOS&path=/release/osp26sd.%24C");
  570.                 break;
  571.  
  572.         default:
  573.                 strcpy(config.machineName, "NOT DETECED (ZX-Evo)");
  574.                 strcpy(config.kernelName, "sd_boot.$C");
  575.                 strcpy(config.kernelLink, "/svn/dl.php?repname=NedoOS&path=/release/sd_boot.s%24C");
  576.                 break;
  577.         }
  578.         return config.is_atm;
  579. }
  580. // Downloading minimal tools for updating/boot
  581. void getTools(void)
  582. {
  583.         ATRIB(cw.text);
  584.         ATRIB(cw.back);
  585.         getFile(wizNetLink, "bin/wizcfg.com");
  586.         getFile(newsLink, "updater.new");
  587.         getFile(pkunzipLink, "bin/pkunzip.com");
  588.         getFile(tarLink, "bin/tar.com");
  589.         getFile(cmdLink, "bin/cmd.com");
  590.         getFile(termLink, "bin/term.com");
  591.         getFile(updLink, "bin/updater.com");
  592.         getFile(netIniLink, "bin/net.ini");
  593. }
  594.  
  595. unsigned char ren2old(unsigned char *name)
  596. {
  597.         unsigned char counter = 255; // For OLD must be 255
  598.         OS_MKDIR((void *)name);
  599.         sprintf(nameBuf, "%s.old", name);
  600.         while (OS_RENAME((void *)name, (void *)nameBuf) != 0)
  601.         {
  602.                 counter++;
  603.                 sprintf(nameBuf, "%s.%u", name, counter);
  604.                 if (counter == 255)
  605.                 {
  606.                         fatalError("Unable to rename old folder");
  607.                 }
  608.         }
  609.         return counter;
  610. }
  611.  
  612. void ren2tar(void)
  613. {
  614.         unsigned int counter = 2400;
  615.         do
  616.         {
  617.                 sprintf(nameBuf, "bin.r%u", counter);
  618.  
  619.                 errn = OS_RENAME((void *)nameBuf, "bin.tar");
  620.                 counter--;
  621.                 if (counter < 2000)
  622.                 {
  623.                         fatalError("Unable to rename TAR file");
  624.                 }
  625.         } while (errn != 0);
  626. }
  627.  
  628. void ren2bin(void)
  629. {
  630.         unsigned char counter = 20;
  631.         sprintf(nameBuf, "bin.r%u", counter);
  632.         do
  633.         {
  634.                 errn = OS_RENAME((void *)nameBuf, "bin");
  635.                 counter++;
  636.                 sprintf(nameBuf, "bin.r%u", counter);
  637.                 if (counter > 99)
  638.                 {
  639.                         fatalError("Unable to rename BIN folder");
  640.                 }
  641.         } while (errn != 0);
  642. }
  643.  
  644. void restoreConfig(unsigned char oldBinExt)
  645. {
  646.         unsigned char count;
  647.         errn = OS_CHDIR("/");
  648.         errn = OS_RENAME("bin/autoexec.bat", "bin/autoexec.bat.new");
  649.         errn = OS_RENAME("bin/net.ini", "bin/net.ini.new");
  650.         errn = OS_RENAME("bin/nv.ext", "bin/nv.ext.new");
  651.         errn = OS_RENAME("bin/gp/gp.ini", "bin/gp/gp.ini.new");
  652.         errn = OS_RENAME("/bin/browser/index.gph", "/bin/browser/index.gph.new");
  653.         // errn = OS_RENAME("/bin/browser/espcom.ini", "/bin/browser/espcom.ini.new");
  654.  
  655.         if (oldBinExt == 255)
  656.         {
  657.                 errn = OS_SHELL("copy bin.old/autoexec.bat bin/autoexec.bat");
  658.  
  659.                 errn = OS_SHELL("copy bin.old/net.ini bin/net.ini");
  660.  
  661.                 errn = OS_SHELL("copy bin.old/nv.ext bin/nv.ext");
  662.  
  663.                 errn = OS_SHELL("copy bin.old/gp/gp.ini bin/gp/gp.ini");
  664.                 errn = OS_SHELL("copy bin.old/browser/index.gph bin/browser/index.gph");
  665.                 // errn = OS_SHELL("copy bin.old/browser/espcom.ini bin/browser/espcom.ini");
  666.         }
  667.         else
  668.         {
  669.                 sprintf(nameBuf, "copy bin.%u/autoexec.bat bin/autoexec.bat", oldBinExt);
  670.                 OS_SHELL((void *)nameBuf);
  671.  
  672.                 sprintf(nameBuf, "copy bin.%u/net.ini bin/net.ini", oldBinExt);
  673.                 OS_SHELL((void *)nameBuf);
  674.  
  675.                 sprintf(nameBuf, "copy bin.%u/nv.ext bin/nv.ext", oldBinExt);
  676.                 OS_SHELL((void *)nameBuf);
  677.                 sprintf(nameBuf, "copy bin.%u/gp/gp.ini bin/gp/gp.ini", oldBinExt);
  678.                 OS_SHELL((void *)nameBuf);
  679.                 sprintf(nameBuf, "copy bin.%u/browser/index.gph bin/browser/index.gph", oldBinExt);
  680.                 OS_SHELL((void *)nameBuf);
  681.         }
  682.         AT(1, 4);
  683.         ATRIB(40);
  684.         for (count = 0; count < 15; count++)
  685.         {
  686.                 putchar(176);
  687.         }
  688.         errn = OS_RENAME("bin/autoexec.bat.new", "bin/autoexec.bat"); // If file already exist we dont rename
  689.         errn = OS_RENAME("bin/net.ini.new", "bin/net.ini");
  690.         errn = OS_RENAME("bin/nv.ext.new", "bin/nv.ext");
  691.         errn = OS_RENAME("bin/gp/gp.ini.new", "bin/gp/gp.ini");
  692.         errn = OS_RENAME("bin/browser/index.gph.new", "bin/browser/index.gph");
  693. }
  694.  
  695. // Download, backup, unpack release.bin
  696. void fullUpdate(void)
  697. {
  698.         BOX(1, 1, 80, 25, 40, 176);
  699.         cw.x = 20;
  700.         cw.y = 5;
  701.         cw.w = 40;
  702.         cw.h = 7;
  703.         cw.text = 97;
  704.         cw.back = 45;
  705.  
  706.         AT(1, 1);
  707.         ATRIB(cw.text);
  708.         ATRIB(cw.back);
  709.         printf("                   [FULL UPDATE - UPDATING ALL SYSTEM FILES]                    ");
  710.  
  711.         strcpy(cw.tittle, "nedoOS FULL updater ");
  712.         strcat(cw.tittle, uVer);
  713.         getConfig();
  714.  
  715.         errn = OS_CHDIR("/");
  716.  
  717.         strcat(cw.tittle, " (");
  718.         strcat(cw.tittle, config.machineName);
  719.         strcat(cw.tittle, ")");
  720.         drawWindow(cw);
  721.  
  722.         OS_DELETE("release.zip");
  723.  
  724.         clearStatus();
  725.         AT(cw.x + 2, cw.y + 3);
  726.         printf("1.Downloading release.zip...");
  727.         YIELD();
  728.         errn = getFile(relLink, "release.zip"); //  Downloading the file
  729.  
  730.         clearStatus();
  731.         AT(cw.x + 2, cw.y + 4);
  732.         printf("2.Backuping old system...\r\n");
  733.         YIELD();
  734.         oldBinExt = ren2old("bin");
  735.         ren2old("doc");
  736.         ren2old("ini");
  737.         ren2old("nedodemo");
  738.         ren2old("nedogame");
  739.  
  740.         AT(cw.x + 2, cw.y + 5);
  741.         printf("3.Downloading tools...\r\n");
  742.  
  743.         OS_MKDIR("bin");
  744.         YIELD();
  745.         getTools();
  746.  
  747.         BOX(1, 1, 80, 25, 40, 32);
  748.         AT(1, 1);
  749.         printf("Depacking release. Its take about 5 hours. Please wait.\r\n");
  750.  
  751.         printNews();
  752.         YIELD();
  753.  
  754.         OS_SHELL("pkunzip.com release.zip");
  755.  
  756.         BOX(1, 1, 80, 25, 40, 176);
  757.         drawWindow(cw);
  758.         AT(cw.x + 2, cw.y + 3);
  759.         printf("1.Downloading release.zip...");
  760.         AT(cw.x + 2, cw.y + 4);
  761.         printf("2.Backuping old system...\r\n");
  762.         AT(cw.x + 2, cw.y + 5);
  763.         printf("3.Downloading tools...\r\n");
  764.         AT(cw.x + 2, cw.y + 6);
  765.         ATRIB(cw.text);
  766.         ATRIB(cw.back);
  767.         printf("Restoring configs...");
  768. }
  769.  
  770. unsigned char testConect(void)
  771. {
  772.         unsigned char *count1;
  773.         if (netDriver == 1)
  774.         {
  775.                 sendcommand("AT+CIPSTART=\"TCP\",\"nedoos.ru\",80");
  776.                 getAnswer2(); // CONNECT or ERROR or link is not valid
  777.                 count1 = strstr(netbuf, "CONNECT");
  778.  
  779.                 if (count1 == NULL)
  780.                 {
  781.                         YIELD();
  782.                         uart_flush();
  783.                         return 0;
  784.                 }
  785.                 getAnswer2(); // OK
  786.                 sendcommand("AT+CIPCLOSE");
  787.                 getAnswer2(); // CLOSED
  788.                 getAnswer2(); // OK
  789.         }
  790.         return 1;
  791. }
  792.  
  793. // Updating only BIN folders, where is OS lives.
  794. void binUpdate(void)
  795. {
  796.         BOX(1, 1, 80, 25, 40, 176);
  797.         cw.x = 20;
  798.         cw.y = 5;
  799.         cw.w = 40;
  800.         cw.h = 11;
  801.         cw.text = 97;
  802.         cw.back = 44;
  803.  
  804.         AT(1, 1);
  805.         ATRIB(cw.text);
  806.         ATRIB(cw.back);
  807.         printf("                  [STANDART UPDATE - UPDATING ONLY BIN FOLDER]                  ");
  808.  
  809.         strcpy(cw.tittle, "nedoOS BIN updater ");
  810.         strcat(cw.tittle, uVer);
  811.         getConfig();
  812.         strcat(cw.tittle, " (");
  813.         strcat(cw.tittle, config.machineName);
  814.         strcat(cw.tittle, ")");
  815.         drawWindow(cw);
  816.  
  817.         OS_CHDIR("/");
  818.         clearStatus();
  819.         AT(cw.x + 2, cw.y + 10);
  820.         printf(">To full update start 'updater.com F'<");
  821.  
  822.         AT(cw.x + 2, cw.y + 3);
  823.         ATRIB(cw.text);
  824.         ATRIB(cw.back);
  825.         printf("1.Backuping bin to bin.old...");
  826.  
  827.         YIELD();
  828.         YIELD();
  829.  
  830.         oldBinExt = ren2old("bin");
  831.  
  832.         OS_MKDIR("bin");
  833.  
  834.         AT(cw.x + 2, cw.y + 4);
  835.         printf("2.Downloading bin.zip...");
  836.         getFile(binLink, "bin/bin.zip"); //  Downloading the file
  837.  
  838.         clearStatus();
  839.         AT(cw.x + 2, cw.y + 5);
  840.         printf("3.Downloading tools...");
  841.         getTools();
  842.  
  843.         BOX(1, 1, 80, 25, 40, 32);
  844.         AT(1, 1);
  845.         printf("Depacking release. Its take about 10 minutes. Please wait...\r\n");
  846.  
  847.         printNews();
  848.         YIELD();
  849.  
  850.         OS_CHDIR("bin");
  851.         OS_SHELL("pkunzip.com bin.zip");
  852.  
  853.         BOX(1, 1, 80, 25, 40, 176);
  854.         AT(1, 1);
  855.         ATRIB(cw.text);
  856.         ATRIB(cw.back);
  857.         printf("                  [STANDART UPDATE - UPDATING ONLY BIN FOLDER]                  ");
  858.         drawWindow(cw);
  859.  
  860.         ATRIB(cw.text);
  861.         ATRIB(cw.back);
  862.         AT(cw.x + 2, cw.y + 3);
  863.         printf("1.Backuping bin to bin.old...");
  864.         AT(cw.x + 2, cw.y + 4);
  865.         printf("2.Downloading bin.zip...");
  866.         AT(cw.x + 2, cw.y + 5);
  867.         printf("3.Downloading tools...");
  868.         AT(cw.x + 2, cw.y + 6);
  869.         printf("4.Downloading kernel [%s]...", config.machineName);
  870.         errn = OS_CHDIR("/");
  871.         errn = getFile(config.kernelLink, config.kernelName); //  Downloading the file
  872.         AT(cw.x + 2, cw.y + 7);
  873.         ATRIB(cw.text);
  874.         ATRIB(cw.back);
  875.         printf("5.Restoring configs...");
  876. }
  877.  
  878. C_task main(int argc, char *argv[])
  879. {
  880.         unsigned char test;
  881.         os_initstdio();
  882.  
  883.         targetadr.family = AF_INET;
  884.         targetadr.porth = 00;
  885.         targetadr.portl = 80;
  886.         targetadr.b1 = 31;
  887.         targetadr.b2 = 31;
  888.         targetadr.b3 = 65;
  889.         targetadr.b4 = 35;
  890.  
  891.         clearStatus();
  892.  
  893.         OS_GETPATH((unsigned int)&curPath);
  894.         curLetter = curPath[0];
  895.  
  896.         if (argc > 1)
  897.         {
  898.                 if (argv[1][0] == 'F')
  899.                 {
  900.                         netDriver == 0;
  901.                         get_dns();
  902.                         test = dnsResolve("nedoos.ru");
  903.                         if (test)
  904.                         {
  905.                                 fullUpdate();
  906.                         }
  907.                 }
  908.                 else if (argv[1][0] == 'e')
  909.                 {
  910.                         netDriver = 1;
  911.                         clearStatus();
  912.                         printf("    ESP-COM mode enabled...");
  913.                         loadEspConfig();
  914.                         uart_init(divider);
  915.                         espReBoot();
  916.                         test = testConect();
  917.                         if (test)
  918.                         {
  919.                                 binUpdate();
  920.                         }
  921.                 }
  922.                 else if (argv[1][0] == 'E')
  923.                 {
  924.                         netDriver = 1;
  925.                         clearStatus();
  926.                         printf("    ESP-COM mode enabled...");
  927.                         loadEspConfig();
  928.                         uart_init(divider);
  929.                         espReBoot();
  930.                         test = testConect();
  931.                         if (test)
  932.                         {
  933.                                 fullUpdate();
  934.                         }
  935.                 }
  936.                 else
  937.                 {
  938.                         AT(1, 1);
  939.                         // printTable();
  940.                         //  printNews();
  941.                         // getchar();
  942.                         fatalError("Use 'F' key to FULL update");
  943.                         exit(0);
  944.                 }
  945.         }
  946.         else
  947.         {
  948.                 netDriver == 0;
  949.                 get_dns();
  950.                 test = dnsResolve("nedoos.ru");
  951.                 if (test)
  952.                 {
  953.                         binUpdate();
  954.                 }
  955.         }
  956.  
  957.         if (!test)
  958.         {
  959.                 fatalError("Check connection to the server!");
  960.         }
  961.         restoreConfig(oldBinExt);
  962.         OS_DELETE("bin/bin.zip");
  963.         clearStatus();
  964.         infoBox("System Updated successfully!");
  965.         delay(2000);
  966.         // getchar();
  967.         // OS_DELETE("release.zip");
  968.         ATRIB(40);
  969.         ATRIB(32);
  970.         AT(1, 25);
  971.         exit(0);
  972. }
  973.