Annotation of researchv10no/cmd/sml/src/runtime/slinkdata.c, revision 1.1.1.1

1.1       root        1: /* Copyright 1989 by AT&T Bell Laboratories */
                      2: /* slinkdata.c -- group files into text segment of a .s file */
                      3: 
                      4: #ifndef MIPS
                      5: #define DATALIST           "_datalist"
                      6: #define END_SYMBOL  "_endmo"
                      7: #define WORD        ".long"
                      8: #else
                      9: #define DATALIST           "datalist"
                     10: #define END_SYMBOL  "endmo"
                     11: #define WORD        ".word"
                     12: #endif
                     13: 
                     14: #include "tags.h"
                     15: #include <sys/types.h>
                     16: #include <sys/stat.h>
                     17: #include <stdio.h>
                     18: 
                     19: void die(s)
                     20:     char *s;
                     21: {
                     22:     perror(s);
                     23:     exit(1);
                     24: }
                     25: 
                     26:   
                     27: #define WORDS_PER_LINE 6
                     28: main(argc, argv)
                     29:     int argc;
                     30:     char *argv[];
                     31: {
                     32:     int i, sz, n;
                     33:     struct stat st;
                     34:     FILE *in;
                     35:     int buf[WORDS_PER_LINE];
                     36: 
                     37:     if (argc <= 1) die("Not enough arguments");
                     38: 
                     39:     printf(".text\n.globl %s\n", DATALIST);
                     40: 
                     41: 
                     42:     for (i=1; i<argc; i++) {
                     43:        printf(".align 2\n");
                     44:        printf("1: %s 0x31\n",WORD); /* descriptor */
                     45:        if (i==1) printf("%s: ",DATALIST);
                     46:        printf("%s 2f+4\n",WORD); /* filename */
                     47:        printf("%s 3f+4\n",WORD); /* contents */
                     48:        printf("%s %s\n",WORD,i==argc-1 ? "1" : "1f+4"); /* next entry */
                     49:        printf("2: %s %d\n",WORD,mak_desc(strlen(argv[i]),tag_string));
                     50:        printf(".ascii \"%s\"\n",argv[i]);
                     51:        printf(".align 2\n");
                     52:        if (stat(argv[i], &st) == -1)
                     53:          die("stat");
                     54:        sz = st.st_size;
                     55:        if (sz % 4 != 0) die ("file size not a multiple of 4");
                     56:        printf("3:%s %d\n",WORD,mak_desc(sz,tag_string));
                     57:         if ((in=fopen(argv[i],"r"))==NULL) die ("open");
                     58:        while(n=fread(buf,sizeof(int),WORDS_PER_LINE,in)) {
                     59:            int j=0;
                     60:            printf("%s 0x%x",WORD,buf[0]);
                     61:            for(j=1;j<n;j++) printf(", 0x%x",buf[j]);
                     62:            printf("\n");
                     63:        }
                     64:        fclose(in);
                     65:     }
                     66: }
                     67: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.