fixes
authorken <ken@mihrtec.com>
Sat, 14 Jan 2017 04:25:42 +0000 (20:25 -0800)
committerken <ken@mihrtec.com>
Sat, 14 Jan 2017 04:25:42 +0000 (20:25 -0800)
src/apc.c
src/ir.c
src/scanner.c

index 0e7c124..0b784ed 100644 (file)
--- a/src/apc.c
+++ b/src/apc.c
@@ -35,8 +35,12 @@ extern //scanner.c
 void scanner_quit(void);
 extern //scanner.c
 int  scanner_scanpath(char const*);
-//extern //ir.c
-//int  ir_init(void);
+extern //ir.c
+int  ir_init(void);
+extern //ir.c
+int  ir_linker(void);
+extern //ir.c
+int  ir_condenser(void);
 
 /* Main entry from terminal
    parses the command line and kicks off recursive scanning
@@ -61,9 +65,7 @@ int main
 
  getopt:
   switch (opt = getopt(argc, argv, OPTS))
-  { case DONE:
-      break;
-    case 'd' :
+  { case 'd' :
     case 'o' :
       if (strnlen(optarg, MAXSTR) != MAXSTR)
         { cargs[opt] = optarg;
@@ -77,16 +79,22 @@ int main
       printf(USAGE);
       printf(USAGE_LONG);
       exit(EXIT_SUCCESS);
+    case DONE:
   }
   if ((sys_pagesize = sysconf(_SC_PAGESIZE)) == 0)
     sys_pagesize = DEFAULT_PAGESIZE;
 
-  if (scanner_init())// || ir_init())
+  if (scanner_init() || ir_init())
     { perror("init");
       exit(EXIT_FAILURE);
     }
-  scanner_scanpath(SCANPATH);
-  scanner_quit();  
+  if (scanner_scanpath(SCANPATH))
+    { perror("scanner");
+      exit(EXIT_FAILURE);
+    }
+  scanner_quit();
+  ir_linker();
+  ir_condenser();
   exit(EXIT_SUCCESS);
 }
 
index 0e52459..4cec206 100644 (file)
--- a/src/ir.c
+++ b/src/ir.c
@@ -34,7 +34,7 @@ struct pagenode_t {
 };\r
 struct pagelist_t {\r
   struct pagenode_t* root, * head;\r
-  size_t             page_size;\r
+  size_t             pagesize;\r
 };\r
 /* Set link data */\r
 enum dtype { FSDAT, MSDAT, ADAT, LDAT, FBDAT };\r
@@ -49,7 +49,7 @@ struct ir_classld_t
   struct ir_namelist_t* namelist, * namelist_head;\r
 };\r
 struct ir_setld_t\r
-{ struct classld_t*     classld;\r
+{ struct ir_classld_t*  classld;\r
   long long             ref;\r
   struct ir_namelist_t* namelist, * namelist_head;\r
 };\r
@@ -101,6 +101,8 @@ struct ir_set_t
 };\r
 /* Functions */\r
 static inline\r
+int                   init_pagelist(struct pagelist_t*,size_t);\r
+static inline\r
 struct ir_framebox_t* ir_set_add_framebox(struct ir_set_t*, uint8_t*);\r
 static\r
 void                  ir_free_pagenodes(struct pagenode_t*);\r
@@ -137,9 +139,9 @@ union ir_setdata_t*   ir_framedata (enum dtype,uint8_t*,apc_facing,int,int);
 #define struct_alloc(_T) ((struct _T*) stack_alloc(sizeof(struct _T)))\r
 #define DATA_PAGESIZE   (sys_pagesize)\r
 #define NAME_PAGESIZE   (APC_NAME_MAX * 1024)\r
-#define PL_HEADERSIZE   (sizeof struct pagenode_header_t)\r
+#define PL_HEADERSIZE   (sizeof(struct pagenode_header_t))\r
 #define PL_HEADSIZE(_PL) (_PL.head->header.head - _PL.head->root)\r
-#define PL_HEADMEM(_PL)  (_PL.page_size - PL_HEADERSIZE - PL_HEADSIZE(_PL))\r
+#define PL_HEADMEM(_PL)  (_PL.pagesize - PL_HEADERSIZE - PL_HEADSIZE(_PL))\r
 /* Memory */\r
 extern //apc.c\r
 long sys_pagesize;\r
@@ -152,9 +154,9 @@ struct ir_class_t root_class = { .name = (uint8_t*)"." };
 int ir_init\r
 ( void )\r
 { if (init_pagelist(&datapages, (size_t)DATA_PAGESIZE))\r
-    eprintf("Memory allocation error\n");\r
+    eprint("Memory allocation error\n");\r
   if (init_pagelist(&namepages, (size_t)NAME_PAGESIZE))\r
-    eprintf("Memory allocation error\n");\r
+    eprint("Memory allocation error\n");\r
   return 0;\r
 }\r
 \r
@@ -163,7 +165,7 @@ int init_pagelist
 ( struct pagelist_t* pl,\r
   size_t size\r
 )\r
-{ pl->page_size = size;\r
+{ pl->pagesize = size;\r
   pl->root = (struct pagenode_t*) calloc(size,1);\r
   if (pl->root == NULL)\r
     return -1;\r
@@ -184,8 +186,8 @@ void ir_quit
 static\r
 void ir_free_pagenodes\r
 ( struct pagenode_t* pagenode )\r
-{ if (pagenode->next != NULL)\r
-    ir_free_pages(pagenode->next);\r
+{ if (pagenode->header.next != NULL)\r
+    ir_free_pagenodes(pagenode->header.next);\r
   free(pagenode);\r
 }\r
 \r
@@ -303,7 +305,7 @@ struct ir_framebox_t* ir_set_add_framebox
     }\r
   iter = struct_alloc(ir_framebox_t);\r
   iter->header.nextsib = (union ir_setdata_t*) set->frameboxes;\r
-  iter->name = name_alloc(name);\r
+  iter->header.data_name = name_alloc(name);\r
   return set->frameboxes = iter;\r
 }\r
 \r
@@ -391,34 +393,34 @@ void ir_data_assign_path
   uint8_t*            path\r
 )\r
 { if (setdata->header.src_filename != NULL)\r
-    wprintf("Path override: %s -> %s for setdata %s\n"\r
+    wprintf("Path override: %s -> %s for setdata %s\n",\r
            setdata->header.src_filename, path, setdata->header.data_name);\r
   setdata->header.src_filename = name_alloc(path);\r
 }\r
 \r
 union ir_setdata_t* ir_framesheet\r
-( uint8_t* name,\r
+( uint8_t*   name,\r
   apc_facing d,\r
-  int width,\r
-  int height\r
+  int        width,\r
+  int        height\r
 )\r
 { return ir_framedata(FSDAT, name, d, width, height); }\r
 \r
 union ir_setdata_t* ir_mapsheet\r
-( uint8_t* name,\r
+( uint8_t*   name,\r
   apc_facing d,\r
-  int width,\r
-  int height\r
+  int        width,\r
+  int        height\r
 )\r
 { return ir_framedata(MSDAT, name, d, width, height); }\r
 \r
 static inline\r
 union ir_setdata_t* ir_framedata\r
 ( enum dtype type,\r
-  uint8_t* name,\r
+  uint8_t*   name,\r
   apc_facing d,\r
-  int width,\r
-  int height\r
+  int        width,\r
+  int        height\r
 )\r
 { struct ir_framedata_t* framedata = struct_alloc(ir_framedata_t);\r
   framedata->header.type = type;\r
@@ -457,39 +459,45 @@ struct ir_setld_t* ir_setld_from_ref
 \r
 struct ir_setld_t* ir_setld_from_classld\r
 ( struct ir_classld_t* classld,\r
-  uint8_t* name\r
+  uint8_t*             name\r
 )\r
 { struct ir_setld_t* setld;\r
   setld = struct_alloc(ir_setld_t);\r
-  setld->namelist.name = name_alloc(name);\r
+  setld->namelist = struct_alloc(ir_namelist_t);\r
   setld->namelist_head = setld->namelist;\r
-  setld->classld = classld; \r
+  setld->namelist_head->name = name_alloc(name);\r
+  setld->classld = classld;\r
   return setld; \r
 }\r
 \r
 struct ir_setld_t* ir_setld_addchild\r
-( ir_setld_t* setld,\r
-  uint8_t* name\r
+( struct ir_setld_t* setld,\r
+  uint8_t*           name\r
 )\r
-{ setld->namelist_head->nextsib = struct_alloc(ir_namelist_t);\r
-  setld->namelist_head->nextsib.name = name_alloc(name);\r
-  setld->namelist_head = setld->namelist_head->nextsib;\r
+{ if (setld->namelist == NULL)\r
+    { setld->namelist = struct_alloc(ir_namelist_t);\r
+      setld->namelist_head = setld->namelist;\r
+    }\r
+  else\r
+    { setld->namelist_head->nextsib = struct_alloc(ir_namelist_t);\r
+      setld->namelist_head = setld->namelist_head->nextsib;\r
+    }\r
+  setld->namelist_head->name = name_alloc(name);\r
   return setld;\r
 }\r
 \r
 union ir_setdata_t* ir_link\r
-( enum ltype link_type,\r
-  ir_setld_t* setld,\r
-  uint8_t* name\r
+( enum ltype         link_type,\r
+  struct ir_setld_t* setld,\r
+  uint8_t*           name\r
 )\r
 { struct ir_link_t* link;\r
-  int name_len;\r
   link = struct_alloc(ir_link_t);\r
   link->header.type = LDAT;\r
   link->type = link_type; \r
   link->classld = setld->classld;\r
   link->setld = setld;\r
-  if (link_type != ODAT && name != NULL)\r
+  if (link_type != OLINK && name != NULL)\r
     link->header.data_name = name_alloc(name);\r
   return (union ir_setdata_t*) link;\r
 }\r
@@ -503,7 +511,7 @@ void* stack_alloc
   if (PL_HEADMEM(datapages) < bytes) \r
     { datapages.head->header.next = (struct pagenode_t*) calloc(datapages.pagesize,1);\r
       if (datapages.head->header.next == NULL)\r
-       eprintf("Memory allocation error \n");\r
+       eprint("Memory allocation error \n");\r
       datapages.head = datapages.head->header.next; \r
       datapages.head->header.head = datapages.head->root;\r
     }\r
@@ -517,15 +525,15 @@ uint8_t* name_alloc
 { uint8_t* iter, * name;\r
   int      head_mem;\r
  copy:\r
-  name = namepages.head->header.head;\r
+  name = (uint8_t*)namepages.head->header.head;\r
   iter = name_src;\r
   for (head_mem = PL_HEADMEM(namepages); *iter && head_mem; head_mem--)\r
     *(namepages.head->header.head)++ = *iter++;\r
   if (head_mem == 0) //not enough room\r
-    { namepages.head->next = (struct pagenode_t*) calloc(namepages.page_size,1);\r
-      if (namepages.head->next == NULL)\r
-       eprintf("Memory allocation error\n");\r
-      namepages.head = namepages.head->next;\r
+    { namepages.head->header.next = (struct pagenode_t*) calloc(namepages.pagesize,1);\r
+      if (namepages.head->header.next == NULL)\r
+       eprint("Memory allocation error\n");\r
+      namepages.head = namepages.head->header.next;\r
       namepages.head->header.head = namepages.head->root;\r
       goto copy;\r
     }\r
index 6dcbc9d..0baac82 100644 (file)
@@ -68,7 +68,9 @@ int scanner_scanpath
 { DIR* dirp;
   errno = 0;
   if ((dirp = opendir(pathname)) == NULL || errno)
-    return -1;
+    { fprintf(stderr, "Path %s could not be accessed\n", pathname);
+      return -1;
+    }
   if (chdir(pathname))
     return -1;
   return scanner_scandir(dirp);