xref: /csrg-svn/old/dbx/languages.c (revision 21605)
1*21605Sdist /*
2*21605Sdist  * Copyright (c) 1983 Regents of the University of California.
3*21605Sdist  * All rights reserved.  The Berkeley software License Agreement
4*21605Sdist  * specifies the terms and conditions for redistribution.
5*21605Sdist  */
69665Slinton 
7*21605Sdist #ifndef lint
8*21605Sdist static char sccsid[] = "@(#)languages.c	5.1 (Berkeley) 05/31/85";
9*21605Sdist #endif not lint
109665Slinton 
1118221Slinton static char rcsid[] = "$Header: languages.c,v 1.5 84/12/26 10:39:49 linton Exp $";
1218221Slinton 
139665Slinton /*
149665Slinton  * Language management.
159665Slinton  */
169665Slinton 
179665Slinton #include "defs.h"
189665Slinton #include "languages.h"
199665Slinton #include "c.h"
209665Slinton #include "pascal.h"
2116611Ssam #include "modula-2.h"
229665Slinton #include "asm.h"
239665Slinton 
249665Slinton #ifndef public
2516611Ssam 
269665Slinton typedef struct Language *Language;
279665Slinton 
289665Slinton typedef enum {
2916611Ssam     L_PRINTDECL, L_PRINTVAL, L_TYPEMATCH, L_BUILDAREF, L_EVALAREF,
3016611Ssam     L_MODINIT, L_HASMODULES, L_PASSADDR,
3116611Ssam     L_ENDOP
329665Slinton } LanguageOp;
339665Slinton 
349665Slinton typedef LanguageOperation();
3516611Ssam 
3616611Ssam Language primlang;
3716611Ssam 
389665Slinton #endif
399665Slinton 
409665Slinton struct Language {
419665Slinton     String name;
429665Slinton     String suffix;
4316611Ssam     LanguageOperation *op[20];
449665Slinton     Language next;
459665Slinton };
469665Slinton 
479665Slinton private Language head;
489665Slinton 
499665Slinton /*
509665Slinton  * Initialize language information.
519665Slinton  *
529665Slinton  * The last language initialized will be the default one
539665Slinton  * for otherwise indistinguised symbols.
549665Slinton  */
559665Slinton 
569665Slinton public language_init()
579665Slinton {
5816611Ssam     primlang = language_define("$builtin symbols", ".?");
599665Slinton     c_init();
6012540Scsvaf     fortran_init();
619665Slinton     pascal_init();
6216611Ssam     modula2_init();
639665Slinton     asm_init();
649665Slinton }
659665Slinton 
669665Slinton public Language findlanguage(suffix)
679665Slinton String suffix;
689665Slinton {
699665Slinton     Language lang;
709665Slinton 
719665Slinton     lang = head;
729665Slinton     if (suffix != nil) {
739665Slinton 	while (lang != nil and not streq(lang->suffix, suffix)) {
749665Slinton 	    lang = lang->next;
759665Slinton 	}
769665Slinton 	if (lang == nil) {
779665Slinton 	    lang = head;
789665Slinton 	}
799665Slinton     }
809665Slinton     return lang;
819665Slinton }
829665Slinton 
839665Slinton public String language_name(lang)
849665Slinton Language lang;
859665Slinton {
869665Slinton     return (lang == nil) ? "(nil)" : lang->name;
879665Slinton }
889665Slinton 
899665Slinton public Language language_define(name, suffix)
909665Slinton String name;
919665Slinton String suffix;
929665Slinton {
939665Slinton     Language p;
949665Slinton 
959665Slinton     p = new(Language);
969665Slinton     p->name = name;
979665Slinton     p->suffix = suffix;
989665Slinton     p->next = head;
999665Slinton     head = p;
1009665Slinton     return p;
1019665Slinton }
1029665Slinton 
1039665Slinton public language_setop(lang, op, operation)
1049665Slinton Language lang;
1059665Slinton LanguageOp op;
1069665Slinton LanguageOperation *operation;
1079665Slinton {
1089665Slinton     checkref(lang);
10916611Ssam     assert(ord(op) < ord(L_ENDOP));
1109665Slinton     lang->op[ord(op)] = operation;
1119665Slinton }
1129665Slinton 
1139665Slinton public LanguageOperation *language_op(lang, op)
1149665Slinton Language lang;
1159665Slinton LanguageOp op;
1169665Slinton {
1179665Slinton     LanguageOperation *o;
1189665Slinton 
1199665Slinton     checkref(lang);
1209665Slinton     o = lang->op[ord(op)];
1219665Slinton     checkref(o);
1229665Slinton     return o;
1239665Slinton }
124