home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1266 / makesseg.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-28  |  2.5 KB  |  123 lines

  1. #include "xenixomf.h"
  2. #include <stdio.h>
  3. #include <fcntl.h>
  4.  
  5. #define I386        1
  6.  
  7. #define L_DGROUP    2
  8. #define L_IGROUP    3
  9. #define L_BEGDATA    4
  10. #define L_ENDDATA    5
  11. #define L_ENDCODE    6
  12. #define L_C_ETEXT    7
  13. #define L_BSS        8
  14. #define L_DATA        9
  15. #define L_CODE        10
  16. #define L_EEND        11
  17. #define L_NULL        12
  18. #define L_UBSS        13
  19. #define L_EDATA        14
  20. #define L_STACK        15
  21. #define L_UDATA        16
  22. #define L_CONST        17
  23. #define L_UTEXT        18
  24. #define L_ENDBSS    19
  25.  
  26. extern int outfile;
  27. char *lnames[] = {
  28.     "",
  29.     "",
  30.     "DGROUP",
  31.     "IGROUP",
  32.     "BEGDATA",
  33.     "ENDDATA",
  34.     "ENDCODE",
  35.     "C_ETEXT",
  36.     "BSS",
  37.     "DATA",
  38.     "CODE",
  39.     "EEND",
  40.     "NULL",
  41.     "_BSS",
  42.     "EDATA",
  43.     "STACK",
  44.     "_DATA",
  45.     "CONST",
  46.     "_TEXT",
  47.     "ENDBSS"
  48. };
  49.  
  50. #define NLNAMES        ((sizeof(lnames) / sizeof(char *)) - 1)
  51.  
  52. struct segtable {
  53.     unsigned char attrib;
  54.     long length;
  55.     unsigned nameindex;
  56.     unsigned classindex;
  57. };
  58.  
  59. /* SEGDEF's */
  60.  
  61. static struct segtable segt[] = {
  62.     {0, 0, 0, 0},
  63.     {SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_UTEXT, L_CODE},
  64.     {SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_C_ETEXT, L_ENDCODE},
  65.     {SD_PARA|SD_PUBLIC|SD_PGRES,  0, L_NULL, L_BEGDATA},
  66.     {SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_UDATA, L_DATA},
  67.     {SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_CONST, L_CONST},
  68.     {SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_EDATA, L_ENDDATA},
  69.     {SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_UBSS, L_BSS},
  70.     {SD_DWORD|SD_PUBLIC|SD_PGRES, 0, L_EEND, L_ENDBSS},
  71.     {SD_PARA|SD_STACK|SD_PGRES,   0, L_STACK, L_STACK},
  72. };
  73.  
  74. #define SDEF_SIZE    ((sizeof(segt) / sizeof(struct segtable)) - 1)
  75.  
  76. unsigned int dgroup_tab[] = {3, 4, 5, 6, 7, 8, 9};
  77. #define DGRPTABSIZ (sizeof(dgroup_tab) / sizeof(int))
  78. unsigned int igroup_tab[] = {1, 2};
  79. #define IGRPTABSIZ (sizeof(igroup_tab) / sizeof(int))
  80.  
  81. main()
  82. {
  83.     int i;
  84.  
  85.     if ((outfile = creat("Sseg.o", 0644)) < 0)
  86.     {
  87.         fprintf(stderr, "cannot open Sseg.o\n");
  88.         exit(-1);
  89.     }
  90.     omf_theadr("Sseg.asm");        /* Lies, Lies */
  91.  
  92.     omf_start_lnames();
  93.     for (i = 1; i <= NLNAMES; i++)
  94.         omf_lnames(lnames[i]);
  95.     omf_end_lnames();
  96.  
  97.     for (i = 1; i <= SDEF_SIZE; i++)
  98.         omf_segdef(I386, segt[i].attrib, 0, 0L, segt[i].length,
  99.                segt[i].nameindex, segt[i].classindex);
  100.  
  101.     omf_start_grpdef(L_DGROUP);
  102.     for (i = 0; i < DGRPTABSIZ; i++)
  103.         omf_grpdef(dgroup_tab[i]);
  104.     omf_end_grpdef();
  105.  
  106.     omf_start_grpdef(L_IGROUP);
  107.     for (i = 0; i < IGRPTABSIZ; i++)
  108.         omf_grpdef(igroup_tab[i]);
  109.     omf_end_grpdef();
  110.  
  111.     omf_start_pubdef(I386, 0, 2, 0);
  112.     omf_pubdef(I386, "_etext", 0, 0);
  113.     omf_end_pubdef();
  114.     omf_start_pubdef(I386, 0, 8, 0);
  115.     omf_pubdef(I386, "_end", 0, 0);
  116.     omf_end_pubdef();
  117.     omf_start_pubdef(I386, 0, 6, 0);
  118.     omf_pubdef(I386, "_edata", 0, 0);
  119.     omf_end_pubdef();
  120.  
  121.     omf_modend(I386);
  122. }
  123.