/****************************************************************************** ********** ********** ********** THE ELECTRIC SLAVE V1.1a ********** ********** ********** ********** This stuff seems to be the ultimate CLI tool... ********** ********** ********** ******************************************************************************* ********** ********** ********** Designed by Magic Ceee to add ultimate power ********** ********** ********** ******************************************************************************/ #include "exec/types.h" #include "exec/tasks.h" #include "exec/execbase.h" #include "intuition/intuition.h" #include "intuition/intuitionbase.h" #include "graphics/gfxbase.h" #include "libraries/dos.h" /*--------------------------------------------------------------------------*/ #define MAGIX_IDCMP (GADGETUP) #define NO_INTUI "Intuition won't open!\n" #define NO_GFX "Graphics won't open!\n" #define NO_WINDOW "Can't open window!\n" /*--------------------------------------------------------------------------*/ struct ExecBase *SysBase; struct IntuitionBase *IntuitionBase; struct GfxBase *GfxBase; struct Window *MagicWindow,*OutputWindow; struct IntuiMessage *MagicMsg; struct DateStamp MagicDate; long magix=0; char Date[50],Time[50]; /***************************************************************************** *** The following strings contain the CLI-commands to be executed. *** *****************************************************************************/ char *gad_def[] = { "DIR DF0:","DIR DF1:","DIR RAM:","INFO","RUN ED", "","" }; /****************************************************************************/ USHORT Pairs2[] = { -1,0,-1,10,51,10,51,0 }; struct Border Border1 = { 0,0,1,0,JAM2,4,&Pairs2,NULL }; struct IntuiText TextHELP = { 3,0,JAM2,10,1,NULL,"Help",NULL }; struct IntuiText TextTIME = { 3,0,JAM2,9,1,NULL,"Time",NULL }; struct IntuiText TextMAGIC = { 3,0,JAM2,7,1,NULL,"Magic",NULL }; struct IntuiText TextU0 = { 3,0,JAM2,16,1,NULL,"U0",NULL }; struct IntuiText TextU1 = { 3,0,JAM2,16,1,NULL,"U1",NULL }; struct IntuiText TextU2 = { 3,0,JAM2,16,1,NULL,"U2",NULL }; struct IntuiText TextU3 = { 3,0,JAM2,16,1,NULL,"U3",NULL }; struct IntuiText TextU4 = { 3,0,JAM2,16,1,NULL,"U4",NULL }; struct IntuiText TextU5 = { 3,0,JAM2,16,1,NULL,"U5",NULL }; struct IntuiText TextU6 = { 3,0,JAM2,16,1,NULL,"U6",NULL }; struct IntuiText TextQUIT = { 3,0,JAM2,9,1,NULL,"Quit",NULL }; struct Gadget GadgetQUIT = { NULL,530,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET, &Border1,NULL,&TextQUIT,0,NULL,10,NULL }; struct Gadget Gadget6 = { &GadgetQUIT,477,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET, &Border1,NULL,&TextU6,0,NULL,9,NULL }; struct Gadget Gadget5 = { &Gadget6,424,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET, &Border1,NULL,&TextU5,0,NULL,8,NULL }; struct Gadget Gadget4 = { &Gadget5,371,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET, &Border1,NULL,&TextU4,0,NULL,7,NULL }; struct Gadget Gadget3 = { &Gadget4,318,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET, &Border1,NULL,&TextU3,0,NULL,6,NULL }; struct Gadget Gadget2 = { &Gadget3,265,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET, &Border1,NULL,&TextU2,0,NULL,5,NULL }; struct Gadget Gadget1 = { &Gadget2,212,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET, &Border1,NULL,&TextU1,0,NULL,4,NULL }; struct Gadget Gadget0 = { &Gadget1,159,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET, &Border1,NULL,&TextU0,0,NULL,3,NULL }; struct Gadget GadgetMAGIC = { &Gadget0,106,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET, &Border1,NULL,&TextMAGIC,0,NULL,2,NULL }; struct Gadget GadgetTIME = { &GadgetMAGIC,53,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET, &Border1,NULL,&TextTIME,0,NULL,1,NULL }; struct Gadget GadgetHELP = { &GadgetTIME,0,0,50,10,GADGHCOMP,GADGIMMEDIATE|RELVERIFY,BOOLGADGET, &Border1,NULL,&TextHELP,0,NULL,0,NULL }; /*--------------------------------------------------------------------------*/ struct NewWindow nw = { 3,0,583,10,1,1,MAGIX_IDCMP,NULL,&GadgetHELP,NULL,NULL,NULL,NULL, 0,0,0,0,WBENCHSCREEN }; /****************************************************************************/ OpenStuff() { if(!(IntuitionBase=(struct Intuitionbase *) OpenLibrary("intuition.library",0))) { Write(Output(),NO_INTUI,strlen(NO_INTUI)); exit(0); } if(!(GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0))) { Write(Output(),NO_GFX,strlen(NO_GFX)); CloseLibrary(IntuitionBase); exit(0); } OutputWindow=IntuitionBase->FirstScreen->FirstWindow; if(!(MagicWindow=OpenWindow(&nw))) { Write(Output(),NO_WINDOW,strlen(NO_WINDOW)); CloseLibrary(IntuitionBase); CloseLibrary(GfxBase); exit(0); } } /*****************************************************************************/ CloseStuff() { CloseWindow(MagicWindow); /* Bye, folx... */ CloseLibrary(IntuitionBase); CloseLibrary(GfxBase); /* Ceee ya next time! */ } /*****************************************************************************/ Update() { struct MemHeader *MeH; struct MemChunk *MeC; char msg[100]; Forbid(); /* All tasks shut up */ for(MeH=(struct MemHeader *)SysBase->MemList.lh_Head; MeH->mh_Node.ln_Succ; MeH=(struct MemHeader *)MeH->mh_Node.ln_Succ) { for(MeC=MeH->mh_First;MeC;MeC=MeC->mc_Next) { if(MeC->mc_Bytes>sizeof(*MeC)) setmem((char *)MeC+sizeof(*MeC), MeC->mc_Bytes-sizeof(*MeC),0); magix+=MeC->mc_Bytes-sizeof(*MeC); } } Permit(); /* Tasks may talk again */ ActivateWindow(OutputWindow); sprintf(msg,"\nCleared %ld bytes.\n\n",magix); Write(Output(),msg,strlen(msg)); magix=0; } /*****************************************************************************/ GetDate(v) long *v; { int m,d,y; long n; n=v[0]-2251; y=(4*n+3)/1461; n-=1461*y/4; y+=1984; m=(5*n+2)/153; d=n-(153*m+2)/5+1; m+=3; if(m>12) { y++; m-=12; } sprintf(Date,"%02d.%02d.%d",d,m,y); } /****************************************************************************/ GetTime() { int h,m; DateStamp(&MagicDate); h=MagicDate.ds_Minute/60; m=MagicDate.ds_Minute%60; sprintf(Time,"%02d:%02d:%02d",h,m,MagicDate.ds_Tick/TICKS_PER_SECOND); } /****************************************************************************/ Assignment() { int i; char msg[100]; Write(Output(),"\n",1); for(i=0;i<=6;i++) { if(strlen(gad_def[i])<1) { sprintf(msg,"Gadget U%d not assigned\n",i); Write(Output(),msg,strlen(msg)); } else { sprintf(msg,"Gadget U%d assigned to <%s>\n",i,gad_def[i]); Write(Output(),msg,strlen(msg)); } } Write(Output(),"\n",1); } /****************************************************************************/ ShowTime() { long chip,fast,v[3]; char msg[100]; DateStamp(v); GetDate(v); GetTime(); chip=AvailMem(MEMF_CHIP); fast=AvailMem(MEMF_FAST); sprintf(msg,"\nToday is %s, %s. Free memory: %ld bytes.\n\n",Date,Time,fast+chip); ActivateWindow(OutputWindow); Write(Output(),msg,strlen(msg)); } /****************************************************************************/ Action(what) int what; { ActivateWindow(OutputWindow); Write(Output(),"\n",1); Execute(gad_def[what-3],0,0); Write(Output(),"\n",1); } /****************************************************************************/ KickThem() { if(strlen(gad_def[0])<1) OffGadget(&Gadget0,MagicWindow,NULL); if(strlen(gad_def[1])<1) OffGadget(&Gadget1,MagicWindow,NULL); if(strlen(gad_def[2])<1) OffGadget(&Gadget2,MagicWindow,NULL); if(strlen(gad_def[3])<1) OffGadget(&Gadget3,MagicWindow,NULL); if(strlen(gad_def[4])<1) OffGadget(&Gadget4,MagicWindow,NULL); if(strlen(gad_def[5])<1) OffGadget(&Gadget5,MagicWindow,NULL); if(strlen(gad_def[6])<1) OffGadget(&Gadget6,MagicWindow,NULL); } /****************************************************************************/ main() { int end=FALSE,gadg; long chip,fast,total,Code,Class,v[3]; unsigned char w_msg; OpenStuff(); KickThem(); while(!end) { Wait(1<UserPort->mp_SigBit); while(MagicMsg=(struct IntuiMessage *)GetMsg(MagicWindow->UserPort)) { Code=MagicMsg->Code; Class=MagicMsg->Class; gadg=((struct Gadget *)(MagicMsg->IAddress))->GadgetID; ReplyMsg(MagicMsg); if(Class==GADGETUP) { switch(gadg) { case 0: Assignment(); break; case 1: ShowTime(); break; case 2: Update(); break; case 3: case 4: case 5: case 6: case 7: case 8: case 9: Action(gadg); break; case 10: end=TRUE; break; } } } } CloseStuff(); }