date and time created 83/08/05 13:34:37 by sam
[unix-history] / usr / src / old / dbx / languages.c
CommitLineData
86d66dd9
ML
1/* Copyright (c) 1982 Regents of the University of California */
2
1c6133da 3static char sccsid[] = "@(#)languages.c 1.3 %G%";
86d66dd9
ML
4
5/*
6 * Language management.
7 */
8
9#include "defs.h"
10#include "languages.h"
11#include "c.h"
12#include "pascal.h"
13#include "asm.h"
14
15#ifndef public
16typedef struct Language *Language;
17
18typedef enum {
1c6133da 19 L_PRINTDECL, L_PRINTVAL, L_TYPEMATCH, L_BUILDAREF, L_EVALAREF
86d66dd9
ML
20} LanguageOp;
21
22typedef LanguageOperation();
23#endif
24
25struct Language {
26 String name;
27 String suffix;
28 LanguageOperation *op[10];
29 Language next;
30};
31
32private Language head;
33
34/*
35 * Initialize language information.
36 *
37 * The last language initialized will be the default one
38 * for otherwise indistinguised symbols.
39 */
40
41public language_init()
42{
43 c_init();
1c6133da 44 fortran_init();
86d66dd9
ML
45 pascal_init();
46 asm_init();
47}
48
49public Language findlanguage(suffix)
50String suffix;
51{
52 Language lang;
53
54 lang = head;
55 if (suffix != nil) {
56 while (lang != nil and not streq(lang->suffix, suffix)) {
57 lang = lang->next;
58 }
59 if (lang == nil) {
60 lang = head;
61 }
62 }
63 return lang;
64}
65
66public String language_name(lang)
67Language lang;
68{
69 return (lang == nil) ? "(nil)" : lang->name;
70}
71
72public Language language_define(name, suffix)
73String name;
74String suffix;
75{
76 Language p;
77
78 p = new(Language);
79 p->name = name;
80 p->suffix = suffix;
81 p->next = head;
82 head = p;
83 return p;
84}
85
86public language_setop(lang, op, operation)
87Language lang;
88LanguageOp op;
89LanguageOperation *operation;
90{
91 checkref(lang);
1c6133da 92 assert(ord(op) <= ord(L_EVALAREF));
86d66dd9
ML
93 lang->op[ord(op)] = operation;
94}
95
96public LanguageOperation *language_op(lang, op)
97Language lang;
98LanguageOp op;
99{
100 LanguageOperation *o;
101
102 checkref(lang);
103 o = lang->op[ord(op)];
104 checkref(o);
105 return o;
106}