Annotation of 42BSD/ucb/dbx/asm.c, revision 1.1.1.1

1.1       root        1: /* Copyright (c) 1982 Regents of the University of California */
                      2: 
                      3: static char sccsid[] = "@(#)asm.c 1.2 12/15/82";
                      4: 
                      5: /*
                      6:  * Assembly language dependent symbol routines.
                      7:  */
                      8: 
                      9: #include "defs.h"
                     10: #include "symbols.h"
                     11: #include "asm.h"
                     12: #include "languages.h"
                     13: #include "tree.h"
                     14: #include "eval.h"
                     15: #include "operators.h"
                     16: #include "mappings.h"
                     17: #include "process.h"
                     18: #include "runtime.h"
                     19: #include "machine.h"
                     20: 
                     21: #define isdouble(range) ( \
                     22:     range->symvalue.rangev.upper == 0 and range->symvalue.rangev.lower > 0 \
                     23: )
                     24: 
                     25: /*
                     26:  * Initialize assembly language information.
                     27:  */
                     28: 
                     29: public asm_init()
                     30: {
                     31:     Language lang;
                     32: 
                     33:     lang = language_define("assembler", ".s");
                     34:     language_setop(lang, L_PRINTDECL, asm_printdecl);
                     35:     language_setop(lang, L_PRINTVAL, asm_printval);
                     36:     language_setop(lang, L_TYPEMATCH, asm_typematch);
                     37: }
                     38: 
                     39: /*
                     40:  * Test if two types are compatible.
                     41:  */
                     42: 
                     43: public Boolean asm_typematch(type1, type2)
                     44: Symbol type1, type2;
                     45: {
                     46:     Boolean b;
                     47: 
                     48:     b = false;
                     49:     return b;
                     50: }
                     51: 
                     52: public asm_printdecl(s)
                     53: Symbol s;
                     54: {
                     55:     switch (s->class) {
                     56:        case VAR:
                     57:        case REF:
                     58:            printf("&%s = 0x%x", symname(s), s->symvalue.offset);
                     59:            break;
                     60: 
                     61:        case PROC:
                     62:        case FUNC:
                     63:            printf("%s (0x%x):", symname(s), codeloc(s));
                     64:            break;
                     65: 
                     66:        default:
                     67:            error("class %s in c_printdecl", classname(s));
                     68:     }
                     69:     putchar('\n');
                     70: }
                     71: 
                     72: /*
                     73:  * Print out the value on the top of the expression stack
                     74:  * in the format for the type of the given symbol.
                     75:  */
                     76: 
                     77: public asm_printval(s)
                     78: register Symbol s;
                     79: {
                     80:     register Symbol t;
                     81:     register Integer len;
                     82: 
                     83:     switch (s->class) {
                     84:        case ARRAY:
                     85:            t = rtype(s->type);
                     86:            if (t->class == RANGE and istypename(t->type, "$char")) {
                     87:                len = size(s);
                     88:                sp -= len;
                     89:                printf("\"%.*s\"", len, sp);
                     90:            } else {
                     91:                printarray(s);
                     92:            }
                     93:            break;
                     94: 
                     95:        default:
                     96:            printf("0x%x", pop(Integer));
                     97:            break;
                     98:     }
                     99: }

unix.superglobalmegacorp.com

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