/*\r
- AcessOS Shell Version 2\r
-- Based on IOOS CLI Shell\r
-*/\r
+ * AcessOS Shell Version 3\r
+ */\r
#include <acess/sys.h>\r
#include <stdlib.h>\r
+#include <stdio.h>\r
#include "header.h"\r
\r
#define _stdin 0\r
\r
// ==== LOCAL VARIABLES ====\r
char gsCommandBuffer[1024];\r
-char *gsCurrentDirectory = "/";\r
+char *gsCurrentDirectory = NULL;\r
char gsTmpBuffer[1024];\r
char **gasCommandHistory;\r
int giLastCommand = 0;\r
\r
//Command_Clear(0, NULL);\r
\r
+ {\r
+ char *tmp = getenv("CWD");\r
+ if(tmp) {\r
+ gsCurrentDirectory = malloc(strlen(tmp)+1);\r
+ strcpy(gsCurrentDirectory, tmp);\r
+ } else {\r
+ gsCurrentDirectory = malloc(2);\r
+ strcpy(gsCurrentDirectory, "/");\r
+ }\r
+ } \r
+ \r
write(_stdout, 1, "\n");\r
- write(_stdout, 36, "Acess Shell Version 3\n");\r
- write(_stdout, 30, " Based on CLI Shell for IOOS\n");\r
+ write(_stdout, 22, "Acess Shell Version 3\n");\r
write(_stdout, 2, "\n");\r
for(;;)\r
{\r
if(saArgs[0]) free(saArgs);\r
if(!bCached) free(sCommandStr);\r
bCached = 0;\r
+ write(_stdout, 1, "\n");\r
write(_stdout, strlen(gsCurrentDirectory), gsCurrentDirectory);\r
write(_stdout, 3, "$ ");\r
\r
return;\r
}\r
\r
+ free(gsCurrentDirectory);\r
+ gsCurrentDirectory = malloc(strlen(tmpPath)+1);\r
strcpy(gsCurrentDirectory, tmpPath);\r
}\r
\r
void Command_Dir(int argc, char **argv)\r
{\r
int dp, fp, dirLen;\r
- //char modeStr[11] = "RWXrwxRWX ";\r
+ char modeStr[11] = "RWXrwxRWX ";\r
char tmpPath[1024];\r
char *fileName;\r
t_sysFInfo info;\r
+ t_sysACL acl;\r
\r
// Generate Directory Path\r
if(argc > 1)\r
if(fp == -1) continue;\r
// Get File Stats\r
finfo(fp, &info, 0);\r
+ \r
+ if(info.flags & FILEFLAG_DIRECTORY)\r
+ write(_stdout, 1, "d");\r
+ else\r
+ write(_stdout, 1, "-");\r
+ \r
+ // Print Mode\r
+ acl.group = 0; acl.id = info.uid;\r
+ _SysGetACL(fp, &acl);\r
+ if(acl.perms & 1) modeStr[0] = 'r'; else modeStr[0] = '-';\r
+ if(acl.perms & 2) modeStr[1] = 'w'; else modeStr[1] = '-';\r
+ if(acl.perms & 8) modeStr[2] = 'x'; else modeStr[2] = '-';\r
+ acl.group = 1; acl.id = info.gid;\r
+ _SysGetACL(fp, &acl);\r
+ if(acl.perms & 1) modeStr[3] = 'r'; else modeStr[3] = '-';\r
+ if(acl.perms & 1) modeStr[4] = 'w'; else modeStr[4] = '-';\r
+ if(acl.perms & 1) modeStr[5] = 'x'; else modeStr[5] = '-';\r
+ acl.group = 1; acl.id = -1;\r
+ _SysGetACL(fp, &acl);\r
+ if(acl.perms & 1) modeStr[6] = 'r'; else modeStr[6] = '-';\r
+ if(acl.perms & 1) modeStr[7] = 'w'; else modeStr[7] = '-';\r
+ if(acl.perms & 1) modeStr[8] = 'x'; else modeStr[8] = '-';\r
+ write(_stdout, 10, modeStr);\r
close(fp);\r
\r
// Colour Code\r
if(info.flags & FILEFLAG_DIRECTORY) // Directory: Green\r
write(_stdout, 6, "\x1B[32m");\r
- else\r
- write(_stdout, 6, "\x1B[37m"); // Default: White\r
- \r
- //Print Mode\r
- #if 0\r
- if(stats.st_mode & 0400) modeStr[0] = 'R'; else modeStr[0] = '-';\r
- if(stats.st_mode & 0200) modeStr[1] = 'W'; else modeStr[1] = '-';\r
- if(stats.st_mode & 0100) modeStr[2] = 'X'; else modeStr[2] = '-';\r
- if(stats.st_mode & 0040) modeStr[3] = 'R'; else modeStr[3] = '-';\r
- if(stats.st_mode & 0020) modeStr[4] = 'W'; else modeStr[4] = '-';\r
- if(stats.st_mode & 0010) modeStr[5] = 'X'; else modeStr[5] = '-';\r
- if(stats.st_mode & 0004) modeStr[6] = 'R'; else modeStr[6] = '-';\r
- if(stats.st_mode & 0002) modeStr[7] = 'W'; else modeStr[7] = '-';\r
- if(stats.st_mode & 0001) modeStr[8] = 'X'; else modeStr[8] = '-';\r
- write(_stdout, 10, modeStr);\r
- #endif\r
+ // Default: White\r
\r
// Print Name\r
write(_stdout, strlen(fileName), fileName);\r
+ \r
// Print slash if applicable\r
if(info.flags & FILEFLAG_DIRECTORY)\r
write(_stdout, 1, "/");\r
\r
- // Revert Colour and end line\r
+ // Revert Colour\r
write(_stdout, 6, "\x1B[37m");\r
+ \r
+ // Newline!\r
write(_stdout, 1, "\n");\r
}\r
// Close Directory\r