home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 180.lha / TES.c < prev    next >
C/C++ Source or Header  |  1988-04-28  |  9KB  |  342 lines

  1. /******************************************************************************
  2. **********                                                           **********
  3. **********                THE ELECTRIC SLAVE V1.1a                   **********
  4. **********                                                           **********
  5. **********      This stuff seems to be the ultimate CLI tool...      **********
  6. **********                                                           **********
  7. *******************************************************************************
  8. **********                                                           **********
  9. **********        Designed by Magic Ceee to add ultimate power       **********
  10. **********                                                           **********
  11. ******************************************************************************/
  12.  
  13. #include "exec/types.h"
  14. #include "exec/tasks.h"
  15. #include "exec/execbase.h"
  16. #include "intuition/intuition.h"
  17. #include "intuition/intuitionbase.h"
  18. #include "graphics/gfxbase.h"
  19. #include "libraries/dos.h"
  20.  
  21. /*--------------------------------------------------------------------------*/
  22.  
  23. #define MAGIX_IDCMP    (GADGETUP)
  24.  
  25. #define NO_INTUI    "Intuition won't open!\n"
  26. #define NO_GFX        "Graphics won't open!\n"
  27. #define NO_WINDOW    "Can't open window!\n"
  28.  
  29. /*--------------------------------------------------------------------------*/
  30.  
  31. struct ExecBase     *SysBase;
  32. struct IntuitionBase    *IntuitionBase;
  33. struct GfxBase        *GfxBase;
  34. struct Window        *MagicWindow,*OutputWindow;
  35. struct IntuiMessage    *MagicMsg;
  36. struct DateStamp    MagicDate;
  37.  
  38. long magix=0;
  39.  
  40. char Date[50],Time[50];
  41.  
  42.  
  43. /*****************************************************************************
  44. ***       The following strings contain the CLI-commands to be executed.   ***
  45. *****************************************************************************/
  46.  
  47. char *gad_def[] = { "DIR DF0:","DIR DF1:","DIR RAM:","INFO","RUN ED",
  48.             "","" };
  49.  
  50.  
  51. /****************************************************************************/
  52.  
  53. USHORT Pairs2[] = { -1,0,-1,10,51,10,51,0 };
  54.  
  55. struct Border Border1 = { 0,0,1,0,JAM2,4,&Pairs2,NULL };
  56.  
  57. struct IntuiText TextHELP  = { 3,0,JAM2,10,1,NULL,"Help",NULL };
  58. struct IntuiText TextTIME  = { 3,0,JAM2,9,1,NULL,"Time",NULL };
  59. struct IntuiText TextMAGIC = { 3,0,JAM2,7,1,NULL,"Magic",NULL };
  60. struct IntuiText TextU0    = { 3,0,JAM2,16,1,NULL,"U0",NULL };
  61. struct IntuiText TextU1    = { 3,0,JAM2,16,1,NULL,"U1",NULL };
  62. struct IntuiText TextU2    = { 3,0,JAM2,16,1,NULL,"U2",NULL };
  63. struct IntuiText TextU3    = { 3,0,JAM2,16,1,NULL,"U3",NULL };
  64. struct IntuiText TextU4    = { 3,0,JAM2,16,1,NULL,"U4",NULL };
  65. struct IntuiText TextU5    = { 3,0,JAM2,16,1,NULL,"U5",NULL };
  66. struct IntuiText TextU6    = { 3,0,JAM2,16,1,NULL,"U6",NULL };
  67. struct IntuiText TextQUIT  = { 3,0,JAM2,9,1,NULL,"Quit",NULL };
  68.  
  69. struct Gadget GadgetQUIT = { 
  70. NULL,530,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,    
  71. &Border1,NULL,&TextQUIT,0,NULL,10,NULL };
  72.  
  73. struct Gadget Gadget6 = { 
  74. &GadgetQUIT,477,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,    
  75. &Border1,NULL,&TextU6,0,NULL,9,NULL };
  76.  
  77. struct Gadget Gadget5 = { 
  78. &Gadget6,424,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,    
  79. &Border1,NULL,&TextU5,0,NULL,8,NULL };
  80.  
  81. struct Gadget Gadget4 = { 
  82. &Gadget5,371,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,    
  83. &Border1,NULL,&TextU4,0,NULL,7,NULL };
  84.  
  85. struct Gadget Gadget3 = { 
  86. &Gadget4,318,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,    
  87. &Border1,NULL,&TextU3,0,NULL,6,NULL };
  88.  
  89. struct Gadget Gadget2 = { 
  90. &Gadget3,265,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,    
  91. &Border1,NULL,&TextU2,0,NULL,5,NULL };
  92.  
  93. struct Gadget Gadget1 = { 
  94. &Gadget2,212,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,    
  95. &Border1,NULL,&TextU1,0,NULL,4,NULL };
  96.  
  97. struct Gadget Gadget0 = { 
  98. &Gadget1,159,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,    
  99. &Border1,NULL,&TextU0,0,NULL,3,NULL };
  100.  
  101. struct Gadget GadgetMAGIC = { 
  102. &Gadget0,106,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,    
  103. &Border1,NULL,&TextMAGIC,0,NULL,2,NULL };
  104.  
  105. struct Gadget GadgetTIME = { 
  106. &GadgetMAGIC,53,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,    
  107. &Border1,NULL,&TextTIME,0,NULL,1,NULL };
  108.  
  109. struct Gadget GadgetHELP = { 
  110. &GadgetTIME,0,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,    
  111. &Border1,NULL,&TextHELP,0,NULL,0,NULL };
  112.  
  113. /*--------------------------------------------------------------------------*/
  114.  
  115. struct NewWindow nw = {
  116. 3,0,583,10,1,1,MAGIX_IDCMP,NULL,&GadgetHELP,NULL,NULL,NULL,NULL,
  117. 0,0,0,0,WBENCHSCREEN };
  118.  
  119. /****************************************************************************/
  120.  
  121. OpenStuff() 
  122. {
  123.  if(!(IntuitionBase=(struct Intuitionbase *)
  124.    OpenLibrary("intuition.library",0)))
  125.    {
  126.     Write(Output(),NO_INTUI,strlen(NO_INTUI));
  127.     exit(0);
  128.    } 
  129.  
  130.  if(!(GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0)))
  131.    {
  132.     Write(Output(),NO_GFX,strlen(NO_GFX));
  133.     CloseLibrary(IntuitionBase);
  134.     exit(0);
  135.    } 
  136.  
  137.    OutputWindow=IntuitionBase->FirstScreen->FirstWindow;
  138.  
  139.    if(!(MagicWindow=OpenWindow(&nw)))
  140.    {
  141.     Write(Output(),NO_WINDOW,strlen(NO_WINDOW));
  142.     CloseLibrary(IntuitionBase);
  143.     CloseLibrary(GfxBase);
  144.     exit(0);
  145.    } 
  146.  
  147. }
  148.  
  149. /*****************************************************************************/
  150.  
  151. CloseStuff() 
  152. {
  153.  CloseWindow(MagicWindow);        /* Bye, folx... */
  154.  CloseLibrary(IntuitionBase);
  155.  CloseLibrary(GfxBase);        /* Ceee ya next time! */
  156. }
  157.  
  158. /*****************************************************************************/
  159.  
  160. Update() 
  161. {
  162.  struct MemHeader     *MeH;
  163.  struct MemChunk     *MeC;
  164.  
  165.  char msg[100];
  166.  
  167.  Forbid();    /* All tasks shut up */
  168.  
  169.  for(MeH=(struct MemHeader *)SysBase->MemList.lh_Head;
  170.      MeH->mh_Node.ln_Succ;
  171.      MeH=(struct MemHeader *)MeH->mh_Node.ln_Succ)
  172.             {
  173.           for(MeC=MeH->mh_First;MeC;MeC=MeC->mc_Next)
  174.              {
  175.               if(MeC->mc_Bytes>sizeof(*MeC))
  176.                  setmem((char *)MeC+sizeof(*MeC),
  177.                  MeC->mc_Bytes-sizeof(*MeC),0);
  178.  
  179.               magix+=MeC->mc_Bytes-sizeof(*MeC);
  180.              }  
  181.          }
  182.  
  183.  Permit();            /* Tasks may talk again */
  184.  ActivateWindow(OutputWindow);
  185.  sprintf(msg,"\nCleared %ld bytes.\n\n",magix);
  186.  Write(Output(),msg,strlen(msg));
  187.  magix=0;
  188. }
  189.  
  190. /*****************************************************************************/
  191.  
  192. GetDate(v)
  193. long *v;
  194. {
  195.  int m,d,y;
  196.  long n;
  197.  
  198.  n=v[0]-2251;
  199.  y=(4*n+3)/1461;
  200.  n-=1461*y/4;
  201.  y+=1984;
  202.  m=(5*n+2)/153;
  203.  d=n-(153*m+2)/5+1;
  204.  m+=3;
  205.  
  206.  if(m>12)
  207.    {
  208.     y++;
  209.     m-=12;
  210.    }
  211.    
  212.  sprintf(Date,"%02d.%02d.%d",d,m,y);
  213. }
  214.  
  215. /****************************************************************************/
  216.  
  217. GetTime()
  218. {
  219.  int h,m;
  220.  
  221.  DateStamp(&MagicDate);
  222.  h=MagicDate.ds_Minute/60;
  223.  m=MagicDate.ds_Minute%60;
  224.  sprintf(Time,"%02d:%02d:%02d",h,m,MagicDate.ds_Tick/TICKS_PER_SECOND);
  225. }
  226.  
  227. /****************************************************************************/
  228.  
  229. Assignment()
  230. {
  231.  int i;
  232.  char msg[100];
  233.  
  234.  Write(Output(),"\n",1);
  235.  
  236.  for(i=0;i<=6;i++)
  237.     {
  238.      if(strlen(gad_def[i])<1) 
  239.        {
  240.         sprintf(msg,"Gadget U%d not assigned\n",i);
  241.     Write(Output(),msg,strlen(msg));
  242.        }
  243.        
  244.      else 
  245.          {
  246.       sprintf(msg,"Gadget U%d assigned to <%s>\n",i,gad_def[i]);
  247.       Write(Output(),msg,strlen(msg));
  248.      } 
  249.     } 
  250.  
  251.  Write(Output(),"\n",1);
  252. }
  253.  
  254. /****************************************************************************/
  255.  
  256. ShowTime()
  257. {
  258.  long chip,fast,v[3];
  259.  char msg[100];
  260.  
  261.  DateStamp(v);
  262.  GetDate(v);
  263.  GetTime();
  264.  chip=AvailMem(MEMF_CHIP);
  265.  fast=AvailMem(MEMF_FAST);
  266.  
  267.  sprintf(msg,"\nToday is %s, %s. Free memory: %ld bytes.\n\n",Date,Time,fast+chip);
  268.  ActivateWindow(OutputWindow);
  269.  Write(Output(),msg,strlen(msg));
  270. }
  271.  
  272. /****************************************************************************/
  273.  
  274. Action(what)
  275. int what;
  276. {
  277.  ActivateWindow(OutputWindow);
  278.  Write(Output(),"\n",1);
  279.  Execute(gad_def[what-3],0,0);
  280.  Write(Output(),"\n",1);
  281. }
  282.  
  283. /****************************************************************************/
  284.  
  285. KickThem()
  286. {
  287.  if(strlen(gad_def[0])<1) OffGadget(&Gadget0,MagicWindow,NULL);
  288.  if(strlen(gad_def[1])<1) OffGadget(&Gadget1,MagicWindow,NULL);
  289.  if(strlen(gad_def[2])<1) OffGadget(&Gadget2,MagicWindow,NULL);
  290.  if(strlen(gad_def[3])<1) OffGadget(&Gadget3,MagicWindow,NULL);
  291.  if(strlen(gad_def[4])<1) OffGadget(&Gadget4,MagicWindow,NULL);
  292.  if(strlen(gad_def[5])<1) OffGadget(&Gadget5,MagicWindow,NULL);
  293.  if(strlen(gad_def[6])<1) OffGadget(&Gadget6,MagicWindow,NULL);
  294. }
  295.  
  296. /****************************************************************************/
  297.  
  298. main() 
  299. {
  300.  int end=FALSE,gadg;
  301.  long chip,fast,total,Code,Class,v[3];
  302.  unsigned char w_msg;
  303.  
  304.  OpenStuff();
  305.  KickThem();
  306.  
  307.  while(!end)
  308.       {
  309.        Wait(1<<MagicWindow->UserPort->mp_SigBit);
  310.           
  311.        while(MagicMsg=(struct IntuiMessage *)GetMsg(MagicWindow->UserPort))
  312.         {
  313.          Code=MagicMsg->Code;
  314.          Class=MagicMsg->Class;         
  315.          gadg=((struct Gadget *)(MagicMsg->IAddress))->GadgetID;
  316.          ReplyMsg(MagicMsg);
  317.  
  318.          if(Class==GADGETUP)
  319.            {
  320.             switch(gadg)
  321.               {
  322.                case 0:  Assignment(); break;
  323.                case 1:  ShowTime(); break;
  324.                case 2:  Update(); break;
  325.  
  326.                case 3:
  327.                case 4:
  328.                case 5:
  329.                case 6:
  330.                case 7:
  331.                case 8:
  332.                case 9: Action(gadg); break;
  333.  
  334.                case 10: end=TRUE; break;
  335.               }    
  336.                }
  337.             }
  338.       }
  339.  
  340.  CloseStuff();
  341. }
  342.