date and time created 88/01/12 00:40:29 by donn
[unix-history] / usr / src / old / dbx / languages.c
CommitLineData
2a24676e
DF
1/*
2 * Copyright (c) 1983 Regents of the University of California.
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 */
86d66dd9 6
2a24676e
DF
7#ifndef lint
8static char sccsid[] = "@(#)languages.c 5.1 (Berkeley) %G%";
9#endif not lint
0022c355
ML
10
11static char rcsid[] = "$Header: languages.c,v 1.5 84/12/26 10:39:49 linton Exp $";
86d66dd9
ML
12
13/*
14 * Language management.
15 */
16
17#include "defs.h"
18#include "languages.h"
19#include "c.h"
20#include "pascal.h"
2fd0f574 21#include "modula-2.h"
86d66dd9
ML
22#include "asm.h"
23
24#ifndef public
2fd0f574 25
86d66dd9
ML
26typedef struct Language *Language;
27
28typedef enum {
2fd0f574
SL
29 L_PRINTDECL, L_PRINTVAL, L_TYPEMATCH, L_BUILDAREF, L_EVALAREF,
30 L_MODINIT, L_HASMODULES, L_PASSADDR,
31 L_ENDOP
86d66dd9
ML
32} LanguageOp;
33
34typedef LanguageOperation();
2fd0f574
SL
35
36Language primlang;
37
86d66dd9
ML
38#endif
39
40struct Language {
41 String name;
42 String suffix;
2fd0f574 43 LanguageOperation *op[20];
86d66dd9
ML
44 Language next;
45};
46
47private Language head;
48
49/*
50 * Initialize language information.
51 *
52 * The last language initialized will be the default one
53 * for otherwise indistinguised symbols.
54 */
55
56public language_init()
57{
2fd0f574 58 primlang = language_define("$builtin symbols", ".?");
86d66dd9 59 c_init();
1c6133da 60 fortran_init();
86d66dd9 61 pascal_init();
2fd0f574 62 modula2_init();
86d66dd9
ML
63 asm_init();
64}
65
66public Language findlanguage(suffix)
67String suffix;
68{
69 Language lang;
70
71 lang = head;
72 if (suffix != nil) {
73 while (lang != nil and not streq(lang->suffix, suffix)) {
74 lang = lang->next;
75 }
76 if (lang == nil) {
77 lang = head;
78 }
79 }
80 return lang;
81}
82
83public String language_name(lang)
84Language lang;
85{
86 return (lang == nil) ? "(nil)" : lang->name;
87}
88
89public Language language_define(name, suffix)
90String name;
91String suffix;
92{
93 Language p;
94
95 p = new(Language);
96 p->name = name;
97 p->suffix = suffix;
98 p->next = head;
99 head = p;
100 return p;
101}
102
103public language_setop(lang, op, operation)
104Language lang;
105LanguageOp op;
106LanguageOperation *operation;
107{
108 checkref(lang);
2fd0f574 109 assert(ord(op) < ord(L_ENDOP));
86d66dd9
ML
110 lang->op[ord(op)] = operation;
111}
112
113public LanguageOperation *language_op(lang, op)
114Language lang;
115LanguageOp op;
116{
117 LanguageOperation *o;
118
119 checkref(lang);
120 o = lang->op[ord(op)];
121 checkref(o);
122 return o;
123}