Annotation of researchv10no/cmd/sml/src/runtime/slinkdata.c, revision 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.