Pristine Ack-5.5
[Ack-5.5.git] / modules / src / em_opt / initlex.c
1 #ifndef NORCSID
2 static char rcsidp2[] = "$Id: initlex.c,v 1.4 1994/06/24 11:14:07 ceriel Exp $";
3 #endif
4
5 #include <em_mnem.h>
6 #include <em_flag.h>
7 #include <em_spec.h>
8 #include "parser.h"
9 #define op_lab sp_fpseu /* if you change this change nopt.h also */
10
11 #include <idf_pkg.body>
12
13 extern char em_flag[];
14 extern char em_mnem[][4];
15
16 PRIVATE idinit();
17
18 initlex()
19 {
20         register int i,j;
21         init_idf();
22         idinit("lab",op_lab,DEFILB);
23         for(i=sp_fmnem;i<=sp_lmnem;i++) {
24                 j=i-sp_fmnem;
25                 switch(em_flag[j] & EM_PAR) {
26                 case PAR_NO:
27                         idinit(em_mnem[j],i,NOARG); break;
28                 case PAR_C:
29                 case PAR_D:
30                 case PAR_F:
31                 case PAR_L:
32                 case PAR_N:
33                 case PAR_O:
34                 case PAR_R:
35                 case PAR_S:
36                 case PAR_Z:
37                         idinit(em_mnem[j],i,CST); break;
38                 case PAR_W:
39                         idinit(em_mnem[j],i,CSTOPT); break;
40                 case PAR_P:
41                         idinit(em_mnem[j],i,PNAM); break;
42                 case PAR_B:
43                         idinit(em_mnem[j],i,LAB); break;
44                 case PAR_G:
45                         idinit(em_mnem[j],i,EXT); break;
46                 }
47         }
48 }
49
50 PRIVATE
51 idinit(tag,opcode,argfmt)
52         char *tag;
53         int opcode;
54         int argfmt;
55 {
56         struct idf *p;
57         p = str2idf(tag,0);
58         p->id_nextidf = ops;            /* chain into all ops */
59         ops = p;
60         p->id_used = 0;
61         p->id_startpatt = 0;
62         p->id_opcode  = opcode;
63         p->id_argfmt = argfmt;
64 }