xref: /csrg-svn/old/dbx/languages.c (revision 12540)
19665Slinton /* Copyright (c) 1982 Regents of the University of California */
29665Slinton 
3*12540Scsvaf static char sccsid[] = "@(#)languages.c 1.3 05/18/83";
49665Slinton 
59665Slinton /*
69665Slinton  * Language management.
79665Slinton  */
89665Slinton 
99665Slinton #include "defs.h"
109665Slinton #include "languages.h"
119665Slinton #include "c.h"
129665Slinton #include "pascal.h"
139665Slinton #include "asm.h"
149665Slinton 
159665Slinton #ifndef public
169665Slinton typedef struct Language *Language;
179665Slinton 
189665Slinton typedef enum {
19*12540Scsvaf     L_PRINTDECL, L_PRINTVAL, L_TYPEMATCH, L_BUILDAREF, L_EVALAREF
209665Slinton } LanguageOp;
219665Slinton 
229665Slinton typedef LanguageOperation();
239665Slinton #endif
249665Slinton 
259665Slinton struct Language {
269665Slinton     String name;
279665Slinton     String suffix;
289665Slinton     LanguageOperation *op[10];
299665Slinton     Language next;
309665Slinton };
319665Slinton 
329665Slinton private Language head;
339665Slinton 
349665Slinton /*
359665Slinton  * Initialize language information.
369665Slinton  *
379665Slinton  * The last language initialized will be the default one
389665Slinton  * for otherwise indistinguised symbols.
399665Slinton  */
409665Slinton 
419665Slinton public language_init()
429665Slinton {
439665Slinton     c_init();
44*12540Scsvaf     fortran_init();
459665Slinton     pascal_init();
469665Slinton     asm_init();
479665Slinton }
489665Slinton 
499665Slinton public Language findlanguage(suffix)
509665Slinton String suffix;
519665Slinton {
529665Slinton     Language lang;
539665Slinton 
549665Slinton     lang = head;
559665Slinton     if (suffix != nil) {
569665Slinton 	while (lang != nil and not streq(lang->suffix, suffix)) {
579665Slinton 	    lang = lang->next;
589665Slinton 	}
599665Slinton 	if (lang == nil) {
609665Slinton 	    lang = head;
619665Slinton 	}
629665Slinton     }
639665Slinton     return lang;
649665Slinton }
659665Slinton 
669665Slinton public String language_name(lang)
679665Slinton Language lang;
689665Slinton {
699665Slinton     return (lang == nil) ? "(nil)" : lang->name;
709665Slinton }
719665Slinton 
729665Slinton public Language language_define(name, suffix)
739665Slinton String name;
749665Slinton String suffix;
759665Slinton {
769665Slinton     Language p;
779665Slinton 
789665Slinton     p = new(Language);
799665Slinton     p->name = name;
809665Slinton     p->suffix = suffix;
819665Slinton     p->next = head;
829665Slinton     head = p;
839665Slinton     return p;
849665Slinton }
859665Slinton 
869665Slinton public language_setop(lang, op, operation)
879665Slinton Language lang;
889665Slinton LanguageOp op;
899665Slinton LanguageOperation *operation;
909665Slinton {
919665Slinton     checkref(lang);
92*12540Scsvaf     assert(ord(op) <= ord(L_EVALAREF));
939665Slinton     lang->op[ord(op)] = operation;
949665Slinton }
959665Slinton 
969665Slinton public LanguageOperation *language_op(lang, op)
979665Slinton Language lang;
989665Slinton LanguageOp op;
999665Slinton {
1009665Slinton     LanguageOperation *o;
1019665Slinton 
1029665Slinton     checkref(lang);
1039665Slinton     o = lang->op[ord(op)];
1049665Slinton     checkref(o);
1059665Slinton     return o;
1069665Slinton }
107