Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 18th, 2012  |  syntax: None  |  size: 3.60 KB  |  hits: 8  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include "y.tab.h"
  6.  
  7. int main()
  8. {
  9.         printf("/////////////////////////////\n");
  10.         printf("///\tThe Nutshell\n");
  11.         printf("///\t-Joseph Szigeti\n///\t-Dimitar Dinev\n");
  12.         printf("///\tDefault PATH=/bin/\n");
  13.         printf("///\tOur Pipe command only works with single words\n");
  14.         printf("///\t e.g. cmd1 | cmd2\n");
  15.         printf("///\tPipe seems to crash the shell after running\n");
  16.         putenv("PATH=/bin/");
  17.         putenv("PRMPT=shell");
  18.         int i = 0;
  19.         while(1)
  20.         {
  21.                 char * prompt;
  22.                 prompt = getenv("PRMPT");
  23.                 printf("%s %d: ",prompt,i++);
  24.                 yyparse();
  25.         }
  26. }
  27.  
  28. void pip(char * arg1, char * arg2)
  29. {
  30.         printf("\targ1: %s\n",arg1);
  31.         printf("\targ2: %s\n",arg2);
  32.         printf("\t%s | %s\n",arg1,arg2);
  33.  
  34.         int pipefd[2];
  35.  
  36.         char *cmd1[] = {arg1, NULL};
  37.         char *cmd2[] = {arg2, NULL};
  38.  
  39.         pipe(pipefd);
  40.  
  41.         if (fork() == 0)
  42.         {
  43.                 dup2(pipefd[0], 0);
  44.                 close(pipefd[1]);
  45.                 execvp(cmd2[0], cmd2);
  46.         }
  47.         else
  48.         {
  49.                 dup2(pipefd[1], 1);
  50.                 close(pipefd[0]);
  51.                 execvp(cmd1[0], cmd1);
  52.         }
  53. }
  54.  
  55. void bye()
  56. {
  57.         printf("\tbye'd\n");
  58.         exit(1);
  59. }
  60.  
  61. void set()
  62. {
  63.         printf("\tPath: %s\n",getenv("PATH"));
  64.         printf("\tPrompt: %s\n",getenv("PRMPT"));
  65. }
  66.  
  67. void setp(char *prm)
  68. {
  69.         char *var = "PRMPT=";
  70.         char *val = prm;
  71.         char *str3;
  72.         str3 = (char *)calloc(strlen(var)+strlen(val)+1,sizeof(char));
  73.         strcat(str3,var);
  74.         strcat(str3,val);
  75.         printf("\t%s\n",str3);
  76.         putenv(str3);
  77. }
  78.  
  79. void setpa(char *pat)
  80. {
  81.         char *var = "PATH=";
  82.         char *val = pat;
  83.         char *str3;
  84.         str3 = (char *)calloc(strlen(var)+strlen(val)+1,sizeof(char));
  85.         strcat(str3,var);
  86.         strcat(str3,val);
  87.         printf("\t%s\n",str3);
  88.         putenv(str3);
  89. }
  90.  
  91. void cd()
  92. {
  93.         chdir("/home");
  94. }
  95.  
  96. void cdd(char *dir)
  97. {
  98.         int error = chdir(dir);
  99.         if (error != 0) {printf("Error, directory unchanged");}
  100. }
  101.  
  102. void run(char *com)
  103. {
  104.         char *var = "PATH=";
  105.         char *val = com;
  106.         char *str3;
  107.         str3 = (char *)calloc(strlen(var)+strlen(val)+1,sizeof(char));
  108.         strcat(str3,var);
  109.         strcat(str3,val);
  110.         printf("\t%s\n",str3);
  111.         system(str3);
  112. }
  113.  
  114. void aliasList()
  115. {
  116.         char name[10];
  117.         char command[100];
  118.         FILE *fp;        
  119.         if (fp = fopen("alias","r"))
  120.         {
  121.                 while (fscanf(fp,"%s %s",name,command) != EOF)
  122.                         printf("%s = %s\n",name,command);
  123.  
  124.                 fclose(fp);
  125.         }
  126.         else
  127.                 printf("Error: alias file does not exist");
  128. }
  129.  
  130. void alias(char *name, char *command)
  131. {
  132.         FILE *ofp;
  133.         ofp = fopen("alias","a");
  134.         fprintf(ofp,"%s %s",name,command);
  135.         fclose(ofp);
  136. }
  137.  
  138. void unalias(char *search)
  139. {
  140.         char name[10];
  141.         char command[100];
  142.         FILE *ifp, *ofp;
  143.         ofp = fopen("temp","w");       
  144.         if (ifp = fopen("alias","r"))
  145.         {
  146.                 while (fscanf(ifp,"%s %s",name,command) != EOF)
  147.                         if (strcmp(name,search)!=0)
  148.                                 fprintf(ofp,"%s %s\n",name,command);
  149.        
  150.                 fclose(ifp);
  151.                 fclose(ofp);
  152.                 unlink("alias");
  153.                 rename("temp","alias");
  154.         }
  155.         else
  156.                 printf("Error: alias file does not exist");
  157. }
  158.  
  159. int aliasCheck(char *search)
  160. {
  161.         int bool;
  162.         char name[10];
  163.         char command[100];
  164.         FILE *ifp;
  165.  
  166.         if(ifp = fopen("alias","r"))
  167.         {
  168.                 while (fscanf(ifp,"%s %s",name,command) != EOF)
  169.                         if (strcmp(name,search)!=0)
  170.                                 bool=0;
  171.                         else
  172.                                 return 1;
  173.  
  174.                 fclose(ifp);
  175.                 return bool;
  176.         }
  177.         return 0;
  178. }
  179.  
  180. void aliasExec(char *search)
  181. {
  182.         char name[10];
  183.         char command[100];
  184.         FILE *ifp;
  185.  
  186.         if(ifp = fopen("alias","r"))
  187.         {
  188.                 while (fscanf(ifp,"%s %s",name,command) != EOF)
  189.                         if (strcmp(name,search)==0)
  190.                                 system(command);
  191.  
  192.                 fclose(ifp);
  193.         }
  194. }
  195.  
  196. void aliasHelper(char * str)
  197. {
  198.         *str++;
  199.         str[strlen(str)-1] = NULL;
  200.         printf("\t%s\n",str);
  201.         system(str);
  202. }