?login_element?

Subversion Repositories NedoOS

Rev

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

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <oscalls.h>
  5. #include <intrz80.h>
  6. #include <../common/terminal.c>
  7.  
  8. #define COMMANDLINE 0x0080
  9. #define true 1
  10. #define false 0
  11.  
  12. struct process
  13. {
  14.     unsigned char nomer;
  15.     unsigned char nomer2;
  16.     unsigned char name[32];
  17.     unsigned char used;
  18.     unsigned char window_0;
  19.     unsigned char window_1;
  20.     unsigned char window_2;
  21.     unsigned char window_3;
  22. } table[17];
  23.  
  24. struct window
  25. {
  26.     unsigned char x;
  27.     unsigned char y;
  28.     unsigned char w;
  29.     unsigned char h;
  30.     unsigned char text;
  31.     unsigned char back;
  32.     unsigned char tittle[80];
  33. } curWin;
  34.  
  35. int procnum, prccount;
  36. unsigned char c1, c2, pgbak, freemem, sysmem, usedmem, curpos;
  37. unsigned char procname;
  38. union APP_PAGES main_pg;
  39.  
  40. void redraw(void)
  41. {
  42.     unsigned char c3;
  43.  
  44.     BDBOX(13, 4, 41, prccount, 119, ' ');
  45.  
  46.     OS_SETCOLOR(48);
  47.  
  48.     for (c3 = 0; c3 < prccount; c3++)
  49.     {
  50.         OS_SETXY(11, 4 + c3);
  51.         if (c3 == curpos - 1)
  52.         {
  53.             OS_SETCOLOR(6);
  54.             printf("%2X.%s", table[c3].nomer, table[c3].name);
  55.             OS_SETXY(49, 4 + c3);
  56.             printf("%u  ", table[c3].used);
  57.             OS_SETXY(54, 4 + c3);
  58.             printf("%2X.%2X.%2X.%2X ", table[c3].window_0, table[c3].window_1, table[c3].window_2, table[c3].window_3);
  59.             OS_SETXY(11, 4 + c3);
  60.             OS_SETCOLOR(48);
  61.         }
  62.         else
  63.         {
  64.             printf("%2X.%s", table[c3].nomer, table[c3].name);
  65.             OS_SETXY(49, 4 + c3);
  66.             printf("%u  ", table[c3].used);
  67.             OS_SETXY(54, 4 + c3);
  68.             printf("%2X.%2X.%2X.%2X ", table[c3].window_0, table[c3].window_1, table[c3].window_2, table[c3].window_3);
  69.         }
  70.     }
  71.  
  72.     BDBOX(11, 4 + prccount, 55, 1, 87, ' ');
  73.     OS_SETXY(11, 4 + prccount);
  74.     OS_SETCOLOR(22);
  75.     printf("    Free:%u pages     Used:%u pages  Sys:%u pages", freemem, usedmem, sysmem);
  76.  
  77.     BDBOX(11, 5 + prccount, 55, 3, 0, ' ');
  78. }
  79. void filltable(void)
  80. {
  81.     unsigned char c3, c4;
  82.     main_pg.l = OS_GETMAINPAGES();
  83.     pgbak = main_pg.pgs.window_3;
  84.     prccount = 0;
  85.     for (c3 = 0; c3 < 16; c3++)
  86.     {
  87.         c4 = c3 + 1;
  88.         main_pg.l = OS_GETAPPMAINPAGES(c4);
  89.  
  90.         if (errno == 0)
  91.         {
  92.  
  93.             table[prccount].nomer = c4;
  94.             table[c3].nomer2 = prccount;
  95.             table[prccount].window_0 = main_pg.pgs.window_0;
  96.             table[prccount].window_1 = main_pg.pgs.window_1;
  97.             table[prccount].window_2 = main_pg.pgs.window_2;
  98.             table[prccount].window_3 = main_pg.pgs.window_3;
  99.             SETPG32KHIGH(table[prccount].window_0);
  100.             memcpy(table[prccount].name, (char *)(0xc000 + COMMANDLINE), 31);
  101.             prccount++;
  102.         }
  103.         else
  104.         {
  105.             table[c3].nomer2 = 0;
  106.         }
  107.         table[c3].used = 0;
  108.     }
  109.  
  110.     SETPG32KHIGH(pgbak);
  111.  
  112.     freemem = 0;
  113.     sysmem = 0;
  114.     usedmem = 0;
  115.     for (c2 = 0; c2 < 255; c2++)
  116.     {
  117.         unsigned char owner;
  118.         owner = OS_GETPAGEOWNER(c2);
  119.         if (owner == 0)
  120.         {
  121.             freemem++;
  122.         }
  123.         else
  124.  
  125.             if (owner == 255)
  126.         {
  127.             sysmem++;
  128.         }
  129.         else
  130.         {
  131.             table[table[owner - 1].nomer2].used++;
  132.             usedmem++;
  133.         }
  134.     }
  135. }
  136.  
  137. C_task main(void)
  138. {
  139.     OS_HIDEFROMPARENT();
  140.     OS_SETGFX(0x86);
  141.     OS_CLS(0);
  142.     YIELD();
  143.     curpos = 1;
  144.     BDBOX(11, 3, 55, 1, 87, ' ');
  145.     OS_SETXY(32, 3);
  146.     OS_SETCOLOR(87);
  147.     puts("TASK MANAGER");
  148.     while (42)
  149.     {
  150.         filltable();
  151.         redraw();
  152.         do
  153.         {
  154.             procname = OS_GETKEY();
  155.             if (procname == 0)
  156.                 YIELD();
  157.         } while (procname == 0);
  158.  
  159.         if (procname == 27)
  160.         {
  161.             break;
  162.         }
  163.         else if (procname == 250)
  164.         {
  165.             curpos--;
  166.             if (curpos < 1)
  167.             {
  168.                 curpos = prccount;
  169.             }
  170.         }
  171.         else if (procname == 249)
  172.         {
  173.             curpos++;
  174.             if (curpos > prccount)
  175.             {
  176.                 curpos = 1;
  177.             }
  178.         }
  179.         else if (procname > '0' && procname < 58)
  180.         {
  181.             OS_DROPAPP(procname - '0');
  182.         }
  183.         else if (procname > '@' && procname < 'G')
  184.         {
  185.             OS_DROPAPP(procname - 55);
  186.         }
  187.         else if (procname > 96 && procname < 'g')
  188.         {
  189.             OS_DROPAPP(procname - 87);
  190.         }
  191.         else if (procname == 13 || procname == 252)
  192.         {
  193.             OS_DROPAPP(table[curpos - 1].nomer);
  194.         }
  195.     }
  196.     OS_CLS(0);
  197.     OS_SETCOLOR(7);
  198.     return 0;
  199. }
  200.