/* @brief draws one path square * * XXX lame - alternate algorithms gladly accepted */ static void draw_one(int cx, int cy, path_t *cur, path_t *prev) { int rel_prev, rel_next; float x = cur->pos.x, y = cur->pos.y; rel_prev = rel_dir(cx, cy, prev); rel_next = rel_dir(cx, cy, cur->next); if(rel_prev != DIR_UP) { if(rel_next == DIR_UP) glColor3f(0.1, 0.1, 0.1); else glColor3f(1.0, 1.0, 1.0); glVertex2f(x + GRID_SIZE/2, y + GRID_SIZE/2); glVertex2f(x - GRID_SIZE/2, y + GRID_SIZE/2); } if(rel_prev != DIR_LEFT) { if(rel_next == DIR_LEFT) glColor3f(0.1, 0.1, 0.1); else glColor3f(1.0, 1.0, 1.0); glVertex2f(x - GRID_SIZE/2, y + GRID_SIZE/2); glVertex2f(x - GRID_SIZE/2, y - GRID_SIZE/2); } if(rel_prev != DIR_DOWN) { if(rel_next == DIR_DOWN) glColor3f(0.1, 0.1, 0.1); else glColor3f(1.0, 1.0, 1.0); glVertex2f(x - GRID_SIZE/2, y - GRID_SIZE/2); glVertex2f(x + GRID_SIZE/2, y - GRID_SIZE/2); } if(rel_prev != DIR_RIGHT) { if(rel_next == DIR_RIGHT) glColor3f(0.1, 0.1, 0.1); else glColor3f(1.0, 1.0, 1.0); glVertex2f(x + GRID_SIZE/2, y - GRID_SIZE/2); glVertex2f(x + GRID_SIZE/2, y + GRID_SIZE/2); } }
error_code_t cd_local(char *local_cwd, const char *command) { char *dir = NULL; if (command[3] != '\0' && command[3] != ' ') return INV_CMD; if (command[3] == ' ') { dir = rel_dir(&command[4]); if (chdir(dir) == -1) { if (errno == EACCES) return NO_PERMISSION; if (errno == ENOENT || errno == ENOTDIR) return NO_DIR; else return -1; } free(dir); getcwd(local_cwd, 1024); } return OK; }
void cd_server(receiver_param *rp, struct frame_t *frame_info) { char *dir = rel_dir(frame_info->data); char new_path[1024]; if (chdir(dir) == -1) { if (errno == EACCES) send_error(rp->source_sd, NO_PERMISSION, 0); else if (errno == ENOENT || errno == ENOTDIR) send_error(rp->source_sd, NO_DIR, 0); else perror("WARNING"); } else send_ack(rp->source_sd, 0); getcwd(new_path, 1024); free(dir); }