GANN/0000755000175000000040000000000010400461766010236 5ustar qtgeoadmGANN/ReadMe.txt0000644000175000000040000000073310400461765012136 0ustar qtgeoadm------------------------------------------------------------------------------ Geeks Artificial Neural Network (G.A.N.N) ------------------------------------------------------------------------------ This text file contains the last updates on G.A.N.N and the version history Versions -------- Beta-0.5: - Geeks Socket And Neural Map Creator - Optimizations - Bug Fixes ------------------------------------------------------------------------------ GANN/src/0000755000175000000040000000000010400455516011021 5ustar qtgeoadmGANN/src/gsnmc.cpp0000644000175000000040000002120710400452175012634 0ustar qtgeoadm/* Geeks Artificial Neural Network (G.A.N.N) - Socket And Neural Map Creator Copyright GNU/GPL 2006 George Delaportas (qtgeo) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ //Include Prototypes #include "headers/gsnmc.h" //Geeks Socket And Neural Map Creator (Function) void GSNMC() { //Variables int i,j,k; //Counters float v,n,m; //Float Values int GMSType; //Geeks Map Simulation Type int GMCType; //Geeks Map Connections Type int GNNum; //Geeks Neurons Number int Inputs,Outputs; //GSockets I/O int APT[2*MAX_PIN]; //All Pin Types int Tmp; //Temp Variable FILE *GMap; //The Geeks Neural Map FILE *GIOD; //The Geeks I/O Distribution //Create I/O GSockets GSocket InSocket; GSocket OutSocket; //Get User Values To Create The I/O GSockets printf("# Geeks Neural Map Creator #\n"); printf("New I/O GSockets Have To Be Created\n"); printf("Please Make Your Choices To Set Up The New GSockets\n\n"); printf("# Input GSocket #\n"); InSocket.SetST(0); printf("Please Specify Input GPins Number\n"); printf("(Min:1,Max:%i)\n",MAX_PIN); printf("Choice:"); scanf("%i",&i); //Check Inputs if (i>MAX_PIN) { printf("Error: Too Many GPins!\n"); exit(1); } printf("\n"); InSocket.SetPins(i); printf("Now Please Specify Type And State Of Every GPin\n"); printf("(Types Binary:0,Real:1)\n"); printf("(States Off:0,On:1)\n"); for (j=i;j>=1;j--) { printf("GPin %i\n",i-j+1); printf("Choice (Type):"); scanf("%i",&k); printf("\n"); InSocket.SetPT(i-j,k); printf("GPin %i\n",i-j+1); printf("Choice (State):"); scanf("%i",&k); printf("\n"); InSocket.SetPS(i-j,k); } printf("Now Please Assign Values To The GPins\n"); printf("(Values:Binary,Integer,Float)\n"); printf("Please Set Min And Max Values\n"); printf("(Example:5.5,20.6)\n"); for (j=i;j>=1;j--) { m=0.0; printf("GPin %i\n",i-j+1); printf("Choice (Min,Max):"); scanf("%f,%f",&n,&m); printf("\n"); if (m==0.0) InSocket.SetPV(i-j,n); else InSocket.SetPV(i-j,n,m); } printf("# Output GSocket #\n"); OutSocket.SetST(1); printf("Please Specify Output GPins Number\n"); printf("(Min:1,Max:%i)\n",MAX_PIN); printf("Choice:"); scanf("%i",&i); //Check Outputs if (i>MAX_PIN) { printf("Error: Too Many GPins!\n"); exit(1); } printf("\n"); OutSocket.SetPins(i); printf("Now Please Specify Type And State Of Every GPin\n"); printf("(Types Binary:0,Real:1)\n"); printf("(States Off:0,On:1)\n"); for (j=i;j>=1;j--) { printf("GPin %i\n",i-j+1); printf("Choice (Type):"); scanf("%i",&k); printf("\n"); OutSocket.SetPT(i-j,k); printf("GPin %i\n",i-j+1); printf("Choice (State):"); scanf("%i",&k); printf("\n"); OutSocket.SetPS(i-j,k); } printf("Now Please Assign Values To The GPins\n"); printf("(Values:Binary,Integer,Float)\n"); printf("Please Set Min And Max Values\n"); printf("(Example:5.5,20.6)\n"); for (j=i;j>=1;j--) { m=0.0; printf("GPin %i\n",i-j+1); printf("Choice (Min,Max):"); scanf("%f,%f",&n,&m); printf("\n"); if (m==0.0) OutSocket.SetPV(i-j,n); else OutSocket.SetPV(i-j,n,m); } //Get GSockets I/O Inputs=InSocket.GetPins(); Outputs=OutSocket.GetPins(); //Check GSockets Data Types To Set The Simulation Type for (i=0;i1) { printf("Error: Wrong GMap Type!\n"); exit(1); } printf("\n"); printf("Please Specify How Many GNeurons Your GMap Will Have\n"); printf("(Note: GNeurons Must Be Equal Or More Than The Outputs)\n"); printf("(Min:1,Max:%i)\n",MAX_GN); printf("Choice:"); scanf("%i",&GNNum); //Check GNNum if (GNNum>MAX_GN) { printf("Error: Too Many GNeurons!\n"); exit(1); } //Final GNNum GNNum=GNNum+Inputs+Outputs; //Initialize GIOD GIOD=fopen("GIOD","w"); //Set Starting Header fprintf(GIOD,"%i\n%i\n",Inputs,Outputs); //Save I/O GSockets Distribution for (i=0;i<=Inputs-1;i++) { fprintf(GIOD,"+\n"); j=InSocket.GetPT(i); fprintf(GIOD,"%i\n",j); j=InSocket.GetPS(i); fprintf(GIOD,"%i\n",j); v=InSocket.GetPV(i,0); fprintf(GIOD,"%f\n",v); v=InSocket.GetPV(i,1); fprintf(GIOD,"%f\n",v); } for (i=0;i<=Outputs-1;i++) { fprintf(GIOD,"+\n"); j=OutSocket.GetPT(i); fprintf(GIOD,"%i\n",j); j=OutSocket.GetPS(i); fprintf(GIOD,"%i\n",j); v=OutSocket.GetPV(i,0); fprintf(GIOD,"%f\n",v); v=OutSocket.GetPV(i,1); fprintf(GIOD,"%f\n",v); } //Close GIOD fclose(GIOD); //Check For Problematic GMap if (GNNumOutputs) { for (i=0;iNFBase) { //Statistically Weighted Neurons if (CheckType==0) { //Random e if (Err<=25.0) e=rand()%(int)Err; else e=rand()%(int)(50.0-Err+1); //Make Summary Smaller Than NFunc Base (Output:0) GANN[GNNum].Mod=e; } //Statically Weighted Neurons else if (CheckType==1) { //Make Summary Smaller Than NFunc Base (Output:0) GANN[GNNum].Mod=1; } else { printf("Error: Wrong Check Type Specified!\n"); exit(1); } //Zero Mod Check if (GANN[GNNum].Mod==0) GANN[GNNum].Mod=8; } else { //Statistically Weighted Neurons if (CheckType==0) { //Random e if (Err>=25.0) e=rand()%(int)Err; else e=rand()%(int)(100.0-Err); //Make Summary Bigger Than NFunc Base (Output:1) GANN[GNNum].Mod=e; } //Statically Weighted Neurons else if (CheckType==1) { //Make Summary Bigger Than NFunc Base (Output:1) GANN[GNNum].Mod=128; } else { printf("Error: Wrong Check Type Specified!\n"); exit(1); } //Zero Mod Check if (GANN[GNNum].Mod==0) GANN[GNNum].Mod=8; } } else if (NFuncType==1) { } else if (NFuncType==2) { } } /* ------------------------------------------------------------------------ */ GANN/src/ggendata.cpp0000644000175000000040000000311610400451500013265 0ustar qtgeoadm/* Geeks Artificial Neural Network (G.A.N.N) - Generate Random Data Copyright GNU/GPL 2006 George Delaportas (qtgeo) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ //Include Prototypes #include "headers/ggendata.h" //Geeks Generate Data (Function) float GGenData(int FuncType,int Range) { float RandomData; //Randomize GRand(); //Check Function Type (0:Binary,1:Real) if (FuncType==0 && Range==0) { //Produce Random Binary Data RandomData=rand()%2; } else if (FuncType==1 && Range>0) { //Produce Random Real Data RandomData=rand()%Range; } else { printf("Error: Wrong Function Type Of Range Specified!\n"); exit(1); } //Give Results return RandomData; } /* ------------------------------------------------------------------------ */ GANN/src/gsleep.cpp0000644000175000000040000000226310400452151012777 0ustar qtgeoadm/* Geeks Artificial Neural Network (G.A.N.N) - Sleep Copyright GNU/GPL 2006 George Delaportas (qtgeo) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ //Include Prototypes #include "headers/gsleep.h" //Geeks Sleep (Function) void GSleep(int Sec) { //Variables time_t Go; //Time Variable time(&Go); Sec+=Go; while (Go2) { printf("Error: Wrong Simulation Mode Specified!\n"); exit(1); } //Read GMap GMap=fopen("GMap","r"); //Get Header fscanf(GMap,"%i\n%i\n%i",&GNNum,&Inputs,&Outputs); //Create A New GANN GNeuron GANN[GNNum]; //GANN Matrix //Final Data float FinalData[Outputs]; //Last Outputs //Print Input Socket printf("----- Input Socket -----\n"); for (i=0;i-1) GANN[i].Enable(SMode); //Reset k k=-1; //Increase i (Next Neuron) i++; } } //Gather Error Statistics ErrStat=GStat(Data,FinalData); //Check Error Statistics if (ErrStat==0.0) { //Save This G.A.N.N Map To The GKDB GSaveData(GANN,AUTO); printf("----- Final Output -----\n"); for (j=0;jBase) Out=1; else Out=0; printf("Out->%i\n",Out); } else if (FType==1) { //Sign Function if (Summary>Base) Out=1; else Out=-1; printf("Out->%i\n",Out); } else if (FType==2) { //Sigmoid Function (Real Systems Sequence) SigFunc=1/(1+expf(-1*Summary)); if (Summary>Base) Out=SigFunc; else Out=-SigFunc; printf("Out->%.3f\n",Out); } else { printf("Error: Wrong Neuron Function Type Specified!\n"); exit(1); } } public: //Public Variables int Mod; //Modulo //Enable Neuron void Enable(int NFType) { //If This Is A New Neuron,Check And Fix Modulo if (Mod==0) Mod=8; //Set Neuron Function Type Globally NFT=NFType; //Run Functions RandWeights(); Sum(); NFunc(NFType); } //Set Input Data void InData(int Inputs,float Data) { InSlot[Inputs]=Data; In=Inputs+1; printf("InSlot->Input%i:%.3f\n",In,InSlot[Inputs]); } //Give Output Data float OutData() { return Out; } //Get Neuron Function Type int GetNFT() { //Return The Function Type return NFT; } //Get Base float GetBase() { //Return The NFunc Base return Base; } //Get Sum float GetSum() { //Return The Neuron Summary return Summary; } //Get Input Data float GetInData(int DIndex) { return InSlot[DIndex]; } //Get Weights float GetWeights(int WIndex) { return Weights[WIndex]; } }; /* ------------------------------------------------------------------------ */ GANN/src/gsocket.cpp0000644000175000000040000001417710400455252013173 0ustar qtgeoadm/* Geeks Artificial Neural Network (G.A.N.N) - I/O Socket Copyright GNU/GPL 2006 George Delaportas (qtgeo) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ //Geeks Socket (Class - Model) class GSocket { private: //Private Variables int SockType; //Socket Type int SockPins; //Socket Pins //Structure Of A Geeks Pin struct GPin { int Type; int State; float Value; float Range; }; //Load Pins Matrix GPin Pins[MAX_PIN]; //New Pins public: //Set Socket Type (I/O) void SetST(int SType) { //Check Socket Type (0:Input,1:Output) if (SType<0 || SType>1) { printf("Error: Wrong Socket Type Specified!\n"); exit(1); } SockType=SType; } //Set Pins Number void SetPins(int Num) { //Check Socket Pins (Not Less Than 1 Or Not More Than MAX_PIN) if (Num<1 || Num>MAX_PIN) { printf("Error: Wrong Number Of Pins Specifed!\n"); exit(1); } SockPins=Num; } //Set Pin Type void SetPT(int Pin,int PinType) { //Check Socket Pins if (Pin<0 || Pin>SockPins) { printf("Error: Wrong Pin Specified!\n"); exit(1); } //Socket Pin Type (0:Binary,1:Real) if (PinType<0 || PinType>1) { printf("Error: Wrong Pin Type Specified!\n"); exit(1); } Pins[Pin].Type=PinType; } //Set Pin State void SetPS(int Pin,int PinState) { //Check Socket Pins if (Pin<0 || Pin>SockPins) { printf("Error: Wrong Pin Specified!\n"); exit(1); } //Socket Pin State (0:Off,1:On) if (PinState<0 || PinState>1) { printf("Error: Wrong Pin State Specified!\n"); exit(1); } Pins[Pin].State=PinState; } //Set Pin Value void SetPV(int Pin,float Val) { //Check Socket Pins And Values if (Pin<0 || Pin>SockPins) { printf("Error: Wrong Pin Specified!\n"); exit(1); } if (Pins[Pin].Type==0 && Val!=0.0 && Val!=1.0) { printf("Error: Value Mismatch!\n"); exit(1); } //Check Pin Type To Set Right Values if (Pins[Pin].Type==0) { Pins[Pin].Value=Val; Pins[Pin].Range=0.0; } else { Pins[Pin].Value=Val; Pins[Pin].Range=0.0; } } //Set Pin Value With Range [Overloaded] void SetPV(int Pin,float Val1,float Val2) { //Check Socket Pins And Values if (Pin<0 || Pin>SockPins) { printf("Error: Wrong Pin Specified!\n"); exit(1); } if (Val2<=Val1) { printf("Error: Wrong Range Specified!\n"); exit(1); } if (Pins[Pin].Type==0 && Val2>0.0) { printf("Error: Binary Numbers Have No Range!\n"); exit(1); } Pins[Pin].Value=Val1; Pins[Pin].Range=fabsf(Val2-Val1); } //Get Socket Type (I/O) int GetST() { return SockType; } //Get Pins Number int GetPins() { return SockPins; } //Get Pin Type int GetPT(int Pin) { if (Pin<0 || Pin>SockPins) { printf("Error: Wrong Pin Specified!\n"); exit(1); } return Pins[Pin].Type; } //Get Pin State int GetPS(int Pin) { if (Pin<0 || Pin>SockPins) { printf("Error: Wrong Pin Specified!\n"); exit(1); } return Pins[Pin].State; } //Get Pin Value Or Pin Value With Range float GetPV(int Pin,int Choice) { if (Pin<0 || Pin>SockPins) { printf("Error: Wrong Pin Specified!\n"); exit(1); } if (Choice==0) return Pins[Pin].Value; else if (Choice==1) return Pins[Pin].Range; else { printf("Error: Wrong Choice Specified!\n"); exit(1); } } }; /* ------------------------------------------------------------------------ */ GANN/src/gglobal.cpp0000644000175000000040000000210410400373057013130 0ustar qtgeoadm/* Geeks Artificial Neural Network (G.A.N.N) - Global Constants Copyright GNU/GPL 2006 George Delaportas (qtgeo) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ const int AUTO=0; //Automatic Definition (Default:0) const int MAX_GN=32; //Maximum GNeurons (Default:32) const int MAX_PIN=16; //Maximum Pins (Default:16) /* ------------------------------------------------------------------------ */ GANN/src/gstat.cpp0000644000175000000040000000477410400452243012655 0ustar qtgeoadm/* Geeks Artificial Neural Network (G.A.N.N) - Error Statistics Copyright GNU/GPL 2006 George Delaportas (qtgeo) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ //Include Prototypes #include "headers/gstat.h" //Xtra Static Variable static float Buffer; //A Buffer //Geeks Statistics (Function) float GStat(float FirstData[],float LastData[]) { //Variables register int i,j; //Counters register int C; //Distribution Values From GIOD int S; //Outputs Number int Y; //A Tracer float q; //A Float Counter float OK,Error; //OK And Error Values (%) FILE *GIOD; //I/O Distribution //Reset Counter q=0.0; //Reset Tracer Y=0; //Read GTOD GIOD=fopen("GIOD","r"); //Read I/O fscanf(GIOD,"%i",S); //Find Differences Between I/O Distribution And User/G.A.N.N I/O while (C!=EOF) { C=fgetc(GIOD); if (C=='+') i++; if (C=='b') { for (j=0;j=1;j++) ; } if (C!=LastData[S]) { //Enable Tracer Y=1; //Increase q q++; } } //Statistics (%) if (Y==0) { OK=100; Error=0; } else { //OK=((0-q)/0)*100; //Error=(q/0)*100; //Print Buffer if (Buffer #include #include #include #include #include "gglobal.cpp" #include "gsleep.cpp" #include "grand.cpp" #include "gsocket.cpp" #include "gneuron.cpp" #include "gstat.cpp" #include "gerrc.cpp" #include "gdmloader.cpp" #include "ggendata.cpp" #include "greaddata.cpp" #include "gsavedata.cpp" #include "gremdata.cpp" #include "gnmopt.cpp" #include "gsnmc.cpp" #include "gnms.cpp" #include "gumsgs.cpp" #include "headers/gann.h" //Main Function int main(int argc,char **argv) { //Variables int i; //A Counter float Data[MAX_PIN]; //Random Data printf("-------------------------\n"); printf("****** G.A.N.N ******\n"); printf("-------------------------\n"); printf("=========================\n"); printf("George Delaportas\n"); printf("Dimitris Vlachos\n"); printf("Copyright GNU/GPL 2006\n"); printf("=========================\n\n"); printf("Please Select An Option\n"); printf("1.Create A New Neural Net\n"); printf("2.Simulate An Existing Neural Net\n"); printf("3.Create A New Neural Net And Simulate It\n"); printf("4.Exit\n"); printf("Choice:"); scanf("%i",&i); printf("\n"); //Check Choices if (i==1) { //Create GSockets And GMap GSNMC(); //Teach The G.A.N.N printf("Restoring Data...\n"); printf("Please Stand By!\n"); //Load GIOD And GMap Data GDMLoader(); printf("Done\n"); printf("Starting Simulation...\n\n"); //Simulate The G.A.A.N At Learning Mode (Hybrid Simulation Mode) //GNMS(Data,2); } else if (i==2) { printf("Restoring Data...\n"); printf("Please Stand By!\n"); //Load GIOD And GMap Data GDMLoader(); printf("Done\n"); printf("Starting Simulation...\n\n"); //Halt (Very Usefull For Better Randomization - Use After GGenData) GSleep(1); //Simulate The G.A.A.N At Learning Mode (Hybrid Simulation Mode) GNMS(Data,2); //Simulate The G.A.N.N At Running Mode //GNMS(Data,0); } else if (i==3) { //Create GSockets And GMap GSNMC(); //Unfinished } else if (i==4) { printf("Thank You For Using G.A.N.N\n"); printf("Goodbye!\n"); exit(0); } else { printf("Error: Wrong Choice Specified!\n"); exit(1); } exit(0); } /* ------------------------------------------------------------------------ */ GANN/src/greaddata.cpp0000644000175000000040000000557610400452035013447 0ustar qtgeoadm/* Geeks Artificial Neural Network (G.A.N.N) - Read Data Copyright GNU/GPL 2006 George Delaportas (qtgeo) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ //Include Prototypes #include "headers/greaddata.h" //Geeks Read Data (Function) int GReadData(FILE *GIOD,int GNNum) { //Variables int i,j; int GANNType,GNeurons,GNInputs; int GNOut,GNFT,GNSum,GNBase; int GNBits[8],GNWeights[8]; int *GKDB; int Pointer; //Create A File Pointer FILE *FileToOpen; //Read GKDB Pointer=fseek(FileToOpen,0,SEEK_SET); //FileToOpen=fopen("GKDB","r"); printf("Point to:%i\n",Pointer); //Check End Of File //while (EOF==0) //{ //Read Starting Header //fscanf(FileToOpen,"%i\n%i\n%i\n",&GANNType,&GNeurons,&GNInputs); //Fill With Data //*(NKDB+0)=GANNType; //*(NKDB+1)=GNeurons; //*(NKDB+2)=GNInputs; //Check G.A.N.N Type (0:Binary,1:Sign,2:Sigmoid) if (GANNType==0) { for (i=0;i Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.