Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct List_s {
  6.     char *this;
  7.     struct List_s *next;
  8. } List;
  9.  
  10. int main() {
  11.     List *root;
  12.     for (List **pitem = &root;; pitem = &(*pitem)->next) {
  13.         size_t n = 1024;
  14.         *pitem = calloc(1, sizeof(List));
  15.         List *item = *pitem;
  16.         item->this = calloc(1, n);
  17.         fgets(item->this, n, stdin);
  18.         if (item->this[0] == '\n') {
  19.             free(*pitem);
  20.             *pitem = NULL;
  21.             break;
  22.         } else {
  23.             item->this[strlen(item->this) - 1] = '\0';
  24.         }
  25.     }
  26.  
  27.     for (List *item = root; item; item = item->next) {
  28.         char asm_name[255];
  29.         sprintf(asm_name, "%s.asm", item->this);
  30.         FILE *out = fopen(asm_name, "wb");
  31.  
  32.         fprintf(out, "format ELF\n");
  33.         fprintf(out, "include \"__lib__.inc\"\n");
  34.         fprintf(out, "fun      equ __func@%s\n", item->this);
  35.         fprintf(out, "fun_str  equ '%s'\n", item->this);
  36.         fprintf(out, "section '.text'\n");
  37.         fprintf(out, "fun_name db fun_str, 0\n");
  38.         fprintf(out, "section '.data'\n");
  39.         fprintf(out, "extrn lib_name\n");
  40.         fprintf(out, "public fun as fun_str\n");
  41.         fprintf(out, "fun dd fun_name\n");
  42.         fprintf(out, "lib dd lib_name\n");
  43.  
  44.         fclose(out);
  45.     }
  46. }
  47.