Map objects rendered and correctly used.
This commit is contained in:
@@ -6,13 +6,7 @@
|
|||||||
#ifndef STATE_CONSTS_H
|
#ifndef STATE_CONSTS_H
|
||||||
#define STATE_CONSTS_H
|
#define STATE_CONSTS_H
|
||||||
|
|
||||||
#if defined(_WIN32) || defined(_WIN64) || defined(__MINGW32__)
|
|
||||||
#define F_SEP "\\"
|
|
||||||
#elif defined(__linux__) || defined(__GNUC__)
|
|
||||||
#define F_SEP "/"
|
#define F_SEP "/"
|
||||||
#else
|
|
||||||
#error "Unrecognized system."
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum COLORS {
|
enum COLORS {
|
||||||
BAR_COLOR = 1,
|
BAR_COLOR = 1,
|
||||||
|
|||||||
282
src/in_game.c
282
src/in_game.c
@@ -12,6 +12,13 @@
|
|||||||
#include "in_game.h"
|
#include "in_game.h"
|
||||||
#include "map.h"
|
#include "map.h"
|
||||||
|
|
||||||
|
#define MAX_KEYS 15
|
||||||
|
|
||||||
|
static const char *keyMsg = "You picked up a key.";
|
||||||
|
static const char *saysMsg = " says: ";
|
||||||
|
static const char *openDoor = "The door opens.";
|
||||||
|
static const char *doorLock = "This door is locked.";
|
||||||
|
|
||||||
typedef struct PLAYER {
|
typedef struct PLAYER {
|
||||||
unsigned short x;
|
unsigned short x;
|
||||||
unsigned short y;
|
unsigned short y;
|
||||||
@@ -22,12 +29,16 @@ static bool **seen;
|
|||||||
static bool ** wmap;
|
static bool ** wmap;
|
||||||
static bool w_mov = FALSE;
|
static bool w_mov = FALSE;
|
||||||
static bool uK, dK, lK, rK;
|
static bool uK, dK, lK, rK;
|
||||||
static clock_t then;
|
static clock_t then, msgThen;
|
||||||
static player_t player;
|
static player_t player;
|
||||||
static map_cell_t ** map;
|
static map_cell_t ** map;
|
||||||
game_obj_t objs[MAX_OBJECTS];
|
static game_obj_t objs[MAX_OBJECTS];
|
||||||
static int mW, mH, nO;
|
static int mW, mH, nO;
|
||||||
fov_settings_type fov_settings;
|
static fov_settings_type fov_settings;
|
||||||
|
static int keys[MAX_KEYS];
|
||||||
|
static int freeKey;
|
||||||
|
static char msg[128];
|
||||||
|
static bool newMsg = FALSE;
|
||||||
|
|
||||||
void input();
|
void input();
|
||||||
gsname_t update();
|
gsname_t update();
|
||||||
@@ -35,9 +46,12 @@ void render(int, int);
|
|||||||
void drawGui(int, int);
|
void drawGui(int, int);
|
||||||
void setPlayerStart();
|
void setPlayerStart();
|
||||||
void initObjects();
|
void initObjects();
|
||||||
|
void initKeys();
|
||||||
void drawNeon(int, int, floor_t);
|
void drawNeon(int, int, floor_t);
|
||||||
void apply(void *, int, int, int, int, void *);
|
void apply(void *, int, int, int, int, void *);
|
||||||
bool opaque(void *, int, int);
|
bool opaque(void *, int, int);
|
||||||
|
void loadMap(const char *);
|
||||||
|
bool canMoveTo(int, int);
|
||||||
|
|
||||||
void initInGameState( gs_t * gs) {
|
void initInGameState( gs_t * gs) {
|
||||||
int i, j;
|
int i, j;
|
||||||
@@ -72,21 +86,7 @@ void initInGameState( gs_t * gs) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
initObjects();
|
initObjects();
|
||||||
|
loadMap("map_file.map");
|
||||||
errcode_t rc = readMapData("map_file.map", &map, &mW, &mH);
|
|
||||||
if(rc != NO_ERROR){
|
|
||||||
fprintf(stderr, "\t%s: readMapData() returned %d\n", __FILE__, rc);
|
|
||||||
exit(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
game_obj_t * objsP = objs;
|
|
||||||
rc = readMapObjects("map_file.map", &objsP, &nO);
|
|
||||||
if(rc != NO_ERROR){
|
|
||||||
fprintf(stderr, "\t%s: readMapObjects() returned %d\n", __FILE__, rc);
|
|
||||||
exit(rc);
|
|
||||||
}
|
|
||||||
|
|
||||||
setPlayerStart();
|
|
||||||
|
|
||||||
fov_settings_init(&fov_settings);
|
fov_settings_init(&fov_settings);
|
||||||
fov_settings_set_opacity_test_function(&fov_settings, opaque);
|
fov_settings_set_opacity_test_function(&fov_settings, opaque);
|
||||||
@@ -99,7 +99,6 @@ void input(){
|
|||||||
key = getch();
|
key = getch();
|
||||||
|
|
||||||
if(key != ERR){
|
if(key != ERR){
|
||||||
fprintf(stderr, "\t%s: Caught keycode %d\n", __FILE__, key);
|
|
||||||
if(key == KEY_UP) uK = TRUE;
|
if(key == KEY_UP) uK = TRUE;
|
||||||
if(key == KEY_DOWN) dK = TRUE;
|
if(key == KEY_DOWN) dK = TRUE;
|
||||||
if(key == KEY_LEFT) lK = TRUE;
|
if(key == KEY_LEFT) lK = TRUE;
|
||||||
@@ -108,32 +107,133 @@ void input(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
gsname_t update(){
|
gsname_t update(){
|
||||||
int iX, iY;
|
clock_t msgNow, delta;
|
||||||
|
int i, j, k, d, iX, iY, nX, nY;
|
||||||
|
|
||||||
iX = player.x;
|
iX = player.x;
|
||||||
iY = player.y;
|
iY = player.y;
|
||||||
|
nX = iX;
|
||||||
|
nY = iY;
|
||||||
|
|
||||||
|
if(uK) nY = iY - 1 < 0 ? mH - 1 : iY - 1;
|
||||||
|
|
||||||
|
if(dK) nY = (iY + 1) % mH;
|
||||||
|
|
||||||
|
if(lK) nX = iX - 1 < 0 ? mW - 1 : iX - 1;
|
||||||
|
|
||||||
|
if(rK) nX = (iX + 1) % mW;
|
||||||
|
|
||||||
|
/* Find if the player is standing on an exit, then load the next map. */
|
||||||
|
for(i = 0; i < nO; i++){
|
||||||
|
if(objs[i].type == EXIT){
|
||||||
|
if(objs[i].x == iY && objs[i].y == iX){
|
||||||
|
player.x = objs[i].eX;
|
||||||
|
player.y = objs[i].eY;
|
||||||
|
loadMap(objs[i].target);
|
||||||
|
return IN_GAME;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO: use keys.*/
|
||||||
|
for(i = 0; i < nO; i++){
|
||||||
|
if(objs[i].type == KEY){
|
||||||
|
if(objs[i].x == iY && objs[i].y == iX){
|
||||||
|
keys[freeKey] = objs[i].id;
|
||||||
|
objs[i].type = NONE;
|
||||||
|
for(j = 0; keyMsg[j] && j < 128; j++){
|
||||||
|
msg[j] = keyMsg[j];
|
||||||
|
}
|
||||||
|
newMsg = TRUE;
|
||||||
|
msgThen = clock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Listen to a person. */
|
||||||
|
for(i = 0; i < nO; i++){
|
||||||
|
if(objs[i].type == PERSON){
|
||||||
|
if(objs[i].x == nY && objs[i].y == nX){
|
||||||
|
for(k = 0; k < nO; k++)
|
||||||
|
if(objs[k].type == DIALOG && objs[k].id == objs[i].dId) break;
|
||||||
|
|
||||||
|
for(j = 0; objs[i].name[j] && j < 128; j++)
|
||||||
|
msg[j] = objs[i].name[j];
|
||||||
|
|
||||||
|
for(d = 0; saysMsg[d] && j < 128; j++, d++)
|
||||||
|
msg[j] = saysMsg[d];
|
||||||
|
|
||||||
|
for(d = 0; objs[k].dialog[d] && j < 128; j++, d++)
|
||||||
|
msg[j] = objs[k].dialog[d];
|
||||||
|
|
||||||
|
newMsg = TRUE;
|
||||||
|
msgThen = clock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i = 0; i < nO; i++){
|
||||||
|
if(objs[i].type == DOOR){
|
||||||
|
if(objs[i].x == nY && objs[i].y == nX){
|
||||||
|
if(!objs[i].unlocked){
|
||||||
|
for(j = 0; j < MAX_KEYS; j++){
|
||||||
|
if(keys[j] == objs[i].id){
|
||||||
|
objs[i].unlocked = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(objs[i].unlocked){
|
||||||
|
for(j = 0; openDoor[j] && j < 128; j++){
|
||||||
|
msg[j] = openDoor[j];
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
for(j = 0; doorLock[j] && j < 128; j++){
|
||||||
|
msg[j] = doorLock[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
newMsg = TRUE;
|
||||||
|
msgThen = clock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(newMsg){
|
||||||
|
msgNow = clock();
|
||||||
|
delta = msgNow - msgThen;
|
||||||
|
if((int)delta / (int)CLOCKS_PER_SEC >= 4){
|
||||||
|
msgThen = msgNow;
|
||||||
|
for(j = 0; j < 128; j++){
|
||||||
|
msg[j] = '\0';
|
||||||
|
}
|
||||||
|
newMsg = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Move the player. */
|
||||||
if(uK){
|
if(uK){
|
||||||
iY = iY - 1 < 0 ? mH - 1 : iY - 1;
|
iY = iY - 1 < 0 ? mH - 1 : iY - 1;
|
||||||
if((map[iY][iX].f > WINDOW_WALL && map[iY][iX].f <= WATER) || map[iY][iX].f == SECRET_WALL) player.y = iY;
|
if(canMoveTo(iY, iX)) player.y = iY;
|
||||||
uK = FALSE;
|
uK = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dK){
|
if(dK){
|
||||||
iY = (iY + 1) % mH;
|
iY = (iY + 1) % mH;
|
||||||
if((map[iY][iX].f > WINDOW_WALL && map[iY][iX].f <= WATER) || map[iY][iX].f == SECRET_WALL) player.y = iY;
|
if(canMoveTo(iY, iX)) player.y = iY;
|
||||||
dK = FALSE;
|
dK = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lK){
|
if(lK){
|
||||||
iX = iX - 1 < 0 ? mW - 1 : iX - 1;
|
iX = iX - 1 < 0 ? mW - 1 : iX - 1;
|
||||||
if((map[iY][iX].f > WINDOW_WALL && map[iY][iX].f <= WATER) || map[iY][iX].f == SECRET_WALL) player.x = iX;
|
if(canMoveTo(iY, iX)) player.x = iX;
|
||||||
lK = FALSE;
|
lK = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(rK){
|
if(rK){
|
||||||
iX = (iX + 1) % mW;
|
iX = (iX + 1) % mW;
|
||||||
if((map[iY][iX].f > WINDOW_WALL && map[iY][iX].f <= WATER) || map[iY][iX].f == SECRET_WALL) player.x = iX;
|
if(canMoveTo(iY, iX)) player.x = iX;
|
||||||
rK = FALSE;
|
rK = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,7 +242,7 @@ gsname_t update(){
|
|||||||
|
|
||||||
void render(int w, int h){
|
void render(int w, int h){
|
||||||
clock_t now, delta;
|
clock_t now, delta;
|
||||||
int i, j, pi, pj, ioff, joff, di, dj;
|
int i, j, k, pi, pj, ioff, joff, di, dj;
|
||||||
|
|
||||||
now = clock();
|
now = clock();
|
||||||
delta = now - then;
|
delta = now - then;
|
||||||
@@ -151,16 +251,16 @@ void render(int w, int h){
|
|||||||
w_mov = TRUE;
|
w_mov = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
pi = (((w - 1) - 27) / 2) + 27;
|
pi = (((w - 1) - 1) / 2) + 1;
|
||||||
pj = (h - 2) / 2 + 1;
|
pj = (h - 3) / 2 + 1;
|
||||||
|
|
||||||
ioff = (w - 28) / 2;
|
ioff = (w - 28 - 27) / 2;
|
||||||
joff = (h - 2) / 2;
|
joff = (h - 3) / 2;
|
||||||
|
|
||||||
fov_circle(&fov_settings, &map, NULL, player.x, player.y, (MAX_MAP_SIZE / 2) - 1);
|
fov_circle(&fov_settings, &map, NULL, player.x, player.y, (MAX_MAP_SIZE / 2) - 1);
|
||||||
|
|
||||||
for(i = 27; i < w - 1; i++){
|
for(i = 1; i < w - 1; i++){
|
||||||
for(j = 1; j < h - 1; j++){
|
for(j = 1; j < h - 3; j++){
|
||||||
move(j, i);
|
move(j, i);
|
||||||
|
|
||||||
di = i - 27 + player.x - ioff;
|
di = i - 27 + player.x - ioff;
|
||||||
@@ -226,6 +326,23 @@ void render(int w, int h){
|
|||||||
drawNeon(dj, di, BAR);
|
drawNeon(dj, di, BAR);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
move(j, i);
|
||||||
|
for(k = 0; k < nO; k++){
|
||||||
|
if(objs[k].x == dj && objs[k].y == di){
|
||||||
|
if(!vis[dj][di]) attron(COLOR_PAIR(DW_COLOR));
|
||||||
|
else attron(COLOR_PAIR(MN_COLOR));
|
||||||
|
|
||||||
|
if(objs[k].type == DOOR){
|
||||||
|
printw("\u25D9");
|
||||||
|
}else if(objs[k].type == KEY){
|
||||||
|
printw("k");
|
||||||
|
}else if(objs[k].type == PERSON){
|
||||||
|
printw("\u263A");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
attron(COLOR_PAIR(MN_COLOR));
|
attron(COLOR_PAIR(MN_COLOR));
|
||||||
printw(" ");
|
printw(" ");
|
||||||
@@ -323,50 +440,52 @@ void drawNeon(int i, int j, floor_t floor){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void drawGui(int w, int h){
|
void drawGui(int w, int h){
|
||||||
int i, j;
|
int i;
|
||||||
|
|
||||||
attron(COLOR_PAIR(BSC_COLOR));
|
attron(COLOR_PAIR(BSC_COLOR));
|
||||||
|
|
||||||
/* Clear the gui space. */
|
/* Clear the gui space. */
|
||||||
for(i = 1; i < 26; i++){
|
for(i = 1; i < w - 1; i++){
|
||||||
for(j = 1; j < h - 1; j++){
|
move(h - 2, i);
|
||||||
move(j, i);
|
|
||||||
printw(" ");
|
printw(" ");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Upper horizontal bar. */
|
/* Upper horizontal bar. */
|
||||||
move(0, 0);
|
move(0, 0);
|
||||||
printw("\u2554");
|
printw("\u2554");
|
||||||
for(i = 0; i < w - 2; i++){
|
for(i = 0; i < w - 2; i++){
|
||||||
if(i != 25){
|
|
||||||
printw("\u2550");
|
printw("\u2550");
|
||||||
}else{
|
|
||||||
printw("\u2566");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
printw("\u2557");
|
printw("\u2557");
|
||||||
|
|
||||||
/* Lower horizontal bar. */
|
/* Lower horizontal bars. */
|
||||||
|
move(h - 3, 0);
|
||||||
|
printw("\u255A");
|
||||||
|
for(i = 0; i < w - 2; i++){
|
||||||
|
printw("\u2550");
|
||||||
|
}
|
||||||
|
printw("\u255D");
|
||||||
|
|
||||||
move(h - 1, 0);
|
move(h - 1, 0);
|
||||||
printw("\u255A");
|
printw("\u255A");
|
||||||
for(i = 0; i < w - 2; i++){
|
for(i = 0; i < w - 2; i++){
|
||||||
if(i != 25){
|
|
||||||
printw("\u2550");
|
printw("\u2550");
|
||||||
}else{
|
|
||||||
printw("\u2569");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
printw("\u255D");
|
printw("\u255D");
|
||||||
|
|
||||||
/* Vertical bars. */
|
/* Vertical bars. */
|
||||||
for(i = 1; i < h - 1; i++){
|
for(i = 1; i < h - 1; i++){
|
||||||
move(i, 0);
|
move(i, 0);
|
||||||
printw("\u2551");
|
if(i != h - 3) printw("\u2551");
|
||||||
move(i, 26);
|
else printw("\u2560");
|
||||||
printw("\u2551");
|
|
||||||
move(i, w-1);
|
move(i, w-1);
|
||||||
printw("\u2551");
|
if(i != h - 3) printw("\u2551");
|
||||||
|
else printw("\u2563");
|
||||||
|
}
|
||||||
|
|
||||||
|
move(h - 2, 1);
|
||||||
|
for(i = 0; msg[i] && i < w - 2; i++){
|
||||||
|
printw("%c", msg[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -402,6 +521,15 @@ void initObjects(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void initKeys(){
|
||||||
|
int i;
|
||||||
|
|
||||||
|
freeKey = 0;
|
||||||
|
for(i = 0; i < MAX_KEYS; ++i){
|
||||||
|
keys[i] = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void apply(void *map, int x, int y, int dx, int dy, void *src){
|
void apply(void *map, int x, int y, int dx, int dy, void *src){
|
||||||
if(x < 0 || x >= MAX_MAP_SIZE) return;
|
if(x < 0 || x >= MAX_MAP_SIZE) return;
|
||||||
if(y < 0 || y >= MAX_MAP_SIZE) return;
|
if(y < 0 || y >= MAX_MAP_SIZE) return;
|
||||||
@@ -411,12 +539,68 @@ void apply(void *map, int x, int y, int dx, int dy, void *src){
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool opaque(void *m, int x, int y){
|
bool opaque(void *m, int x, int y){
|
||||||
|
int k;
|
||||||
if(x < 0 || x >= MAX_MAP_SIZE) return FALSE;
|
if(x < 0 || x >= MAX_MAP_SIZE) return FALSE;
|
||||||
if(y < 0 || y >= MAX_MAP_SIZE) return FALSE;
|
if(y < 0 || y >= MAX_MAP_SIZE) return FALSE;
|
||||||
|
|
||||||
if(map[y][x].f == SOLID_WALL || map[y][x].f == SECRET_WALL){
|
if(map[y][x].f == SOLID_WALL || map[y][x].f == SECRET_WALL){
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}else{
|
}else{
|
||||||
|
for(k = 0; k < nO; k++){
|
||||||
|
if(objs[k].type == DOOR){
|
||||||
|
if(objs[k].x == y && objs[k].y == x){
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void loadMap(const char * file){
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
errcode_t rc = readMapData(file, &map, &mW, &mH);
|
||||||
|
if(rc != NO_ERROR){
|
||||||
|
fprintf(stderr, "\t%s.loadMap(): readMapData() returned %d\n", __FILE__, rc);
|
||||||
|
exit(rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
game_obj_t * objsP = objs;
|
||||||
|
rc = readMapObjects(file, &objsP, &nO);
|
||||||
|
if(rc != NO_ERROR){
|
||||||
|
fprintf(stderr, "\t%s.loadMap(): readMapObjects() returned %d\n", __FILE__, rc);
|
||||||
|
exit(rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
setPlayerStart();
|
||||||
|
initKeys();
|
||||||
|
|
||||||
|
for ( i = 0; i < MAX_MAP_SIZE; ++i ) {
|
||||||
|
for(j = 0; j < MAX_MAP_SIZE; ++j){
|
||||||
|
vis[i][j] = FALSE;
|
||||||
|
seen[i][j] = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool canMoveTo(int iY, int iX){
|
||||||
|
int k;
|
||||||
|
|
||||||
|
for(k = 0; k < nO; k++){
|
||||||
|
if(objs[k].x == iY && objs[k].y == iX){
|
||||||
|
if(objs[k].type == DOOR){
|
||||||
|
if(objs[k].unlocked) return TRUE;
|
||||||
|
else return FALSE;
|
||||||
|
}else if(objs[k].type == PERSON){
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if((map[iY][iX].f > WINDOW_WALL && map[iY][iX].f <= WATER) || map[iY][iX].f == SECRET_WALL)
|
||||||
|
return TRUE;
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|||||||
12
src/main.c
12
src/main.c
@@ -28,13 +28,7 @@ static bool resize = FALSE;
|
|||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
bool finished = FALSE;
|
bool finished = FALSE;
|
||||||
#if defined(_WIN32) || defined(_WIN64) || defined(__MINGW32__)
|
|
||||||
char * home_dir = getenv("APPDATA");
|
|
||||||
#elif defined(__linux__) || defined(__GNUC__)
|
|
||||||
char * home_dir = getenv("HOME");
|
char * home_dir = getenv("HOME");
|
||||||
#else
|
|
||||||
#error "Unrecognized system."
|
|
||||||
#endif
|
|
||||||
FILE * f; /* To avoid a warning. */
|
FILE * f; /* To avoid a warning. */
|
||||||
clock_t then, now, delta;
|
clock_t then, now, delta;
|
||||||
unsigned int fps = 0, pfps = 0;
|
unsigned int fps = 0, pfps = 0;
|
||||||
@@ -70,15 +64,11 @@ int main() {
|
|||||||
fprintf(stderr, "%s", asctime(current_date));
|
fprintf(stderr, "%s", asctime(current_date));
|
||||||
|
|
||||||
/* Try to create the data directory with permissions 775. */
|
/* Try to create the data directory with permissions 775. */
|
||||||
if(mkdir(data_dir, S_IRWXU | S_IWGRP | S_IRGRP| S_IROTH | S_IXOTH) == 0){
|
if(mkdir(data_dir, S_IRWXU | S_IWGRP | S_IRGRP| S_IROTH | S_IXOTH) != 0){
|
||||||
/* The data directory was sucessfully created. */
|
|
||||||
}else{
|
|
||||||
if(errno != EEXIST){
|
if(errno != EEXIST){
|
||||||
/* The directory does not exists and could not be created. */
|
/* The directory does not exists and could not be created. */
|
||||||
perror("\t" __FILE__);
|
perror("\t" __FILE__);
|
||||||
fprintf(stderr, "\tdata_dir is: %s\n", data_dir);
|
fprintf(stderr, "\tdata_dir is: %s\n", data_dir);
|
||||||
}else{
|
|
||||||
/* The directory already exits. */
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
|||||||
Reference in New Issue
Block a user