?login_element?

Subversion Repositories NedoOS

Rev

Rev 1723 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

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