1 /*------------------------------------------------------------\
2 |                                                             |
3 | This file is part of the Alliance CAD System Copyright      |
4 | (C) Laboratoire LIP6 - D�partement ASIM Universite P&M Curie|
5 |                                                             |
6 | Home page      : http://www-asim.lip6.fr/alliance/          |
7 | E-mail         : mailto:alliance-users@asim.lip6.fr       |
8 |                                                             |
9 | This progam is  free software; you can redistribute it      |
10 | and/or modify it under the  terms of the GNU Library General|
11 | Public License as published by the Free Software Foundation |
12 | either version 2 of the License, or (at your option) any    |
13 | later version.                                              |
14 |                                                             |
15 | Alliance VLSI  CAD System  is distributed  in the hope that |
16 | it  will be useful, but WITHOUT  ANY WARRANTY;              |
17 | without even the  implied warranty of MERCHANTABILITY or    |
18 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General       |
19 | Public License for more details.                            |
20 |                                                             |
21 | You should have received a copy  of the GNU General Public  |
22 | License along with the GNU C Library; see the file COPYING. |
23 | If not, write to the Free Software Foundation, Inc.,        |
24 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.                     |
25 |                                                             |
26 \------------------------------------------------------------*/
27 /*------------------------------------------------------------\
28 |                                                             |
29 | Tool    :                     Vbh                           |
30 |                                                             |
31 | File    :                   vbhview.c                       |
32 |                                                             |
33 | Date    :                   03.12.96                        |
34 |                                                             |
35 | Author  :               Jacomme Ludovic                     |
36 |                                                             |
37 \------------------------------------------------------------*/
38 /*------------------------------------------------------------\
39 |                                                             |
40 |                         Include Files                       |
41 |                                                             |
42 \------------------------------------------------------------*/
43 
44 # include "mut.h"
45 # include "aut.h"
46 # include "vex.h"
47 # include "vbh.h"
48 
49 # include <stdio.h>
50 # include <string.h>
51 
52 /*------------------------------------------------------------\
53 |                                                             |
54 |                           Constants                         |
55 |                                                             |
56 \------------------------------------------------------------*/
57 
58   static char *VBH_TIME_UNIT_NAME[ VBH_MAX_TIME_UNIT ] =
59   {
60     "UNKNOWN",
61     "FS",
62     "PS",
63     "NS",
64     "MS"
65   };
66 
67 /*------------------------------------------------------------\
68 |                                                             |
69 |                            Types                            |
70 |                                                             |
71 \------------------------------------------------------------*/
72 /*------------------------------------------------------------\
73 |                                                             |
74 |                          Functions                          |
75 |                                                             |
76 \------------------------------------------------------------*/
77 /*------------------------------------------------------------\
78 |                                                             |
79 |                        View  Functions                      |
80 |                                                             |
81 \------------------------------------------------------------*/
82 /*------------------------------------------------------------\
83 |                                                             |
84 |                    Local Get Vbh Type                       |
85 |                                                             |
86 \------------------------------------------------------------*/
87 
loc_getvbhtypename(Type)88 static char *loc_getvbhtypename( Type )
89 
90     vbtyp_list *Type;
91 {
92   static char NotDefined[] = "not defined !";
93 
94   if ( Type == (vbtyp_list *)0 )
95   {
96     return( NotDefined );
97   }
98 
99   return( Type->NAME );
100 }
101 
102 /*------------------------------------------------------------\
103 |                                                             |
104 |                    Local View Vbh Port                      |
105 |                                                             |
106 \------------------------------------------------------------*/
107 
loc_viewvbpor(BePor)108 static void loc_viewvbpor( BePor  )
109 
110   vbpor_list *BePor;
111 {
112   fprintf( stdout, "  > [%ld]", BePor->LINE );
113   viewvexexprbound( BePor->TARGET );
114   fprintf( stdout, " TYPE %s ", loc_getvbhtypename( BePor->TYPE ) );
115   fprintf( stdout, " DIR  %c ", BePor->DIR );
116   fprintf( stdout, " KIND %d ", BePor->KIND );
117   if ( BePor->VEX != (vexexpr *)0 )
118   {
119     fprintf( stdout, " := " );
120     viewvexexprbound( BePor->VEX );
121   }
122   fprintf( stdout, "\n" );
123 }
124 
125 /*------------------------------------------------------------\
126 |                                                             |
127 |                    Local View Vbh Generic                   |
128 |                                                             |
129 \------------------------------------------------------------*/
130 
loc_viewvbgen(BeGen)131 static void loc_viewvbgen( BeGen  )
132 
133   vbgen_list *BeGen;
134 {
135   fprintf( stdout, "  > [%ld]", BeGen->LINE );
136   viewvexexprbound( BeGen->TARGET );
137   fprintf( stdout, " TYPE %s ", loc_getvbhtypename( BeGen->TYPE ) );
138   if ( BeGen->VEX != (vexexpr *)0 )
139   {
140     fprintf( stdout, " := " );
141     viewvexexprbound( BeGen->VEX );
142   }
143   fprintf( stdout, "\n" );
144 }
145 
146 /*------------------------------------------------------------\
147 |                                                             |
148 |                    Local View Vbh Ifs                       |
149 |                                                             |
150 \------------------------------------------------------------*/
151 
loc_viewvbifs(ScanIfs)152 static void loc_viewvbifs( ScanIfs  )
153 
154   vbifs_list  *ScanIfs;
155 {
156   fprintf( stdout, "[%ld] ", ScanIfs->LINE );
157   fprintf( stdout, "IF (" );
158   viewvexexprbound( ScanIfs->CND );
159   fprintf( stdout, ")\nTHEN\n" );
160 
161   if ( ScanIfs->CNDTRUE != (ptype_list *)0 )
162   {
163     vbh_viewvbinst( ScanIfs->CNDTRUE );
164   }
165 
166   if ( ScanIfs->CNDFALSE != (ptype_list *)0 )
167   {
168     fprintf( stdout, "ELSE\n" );
169     vbh_viewvbinst( ScanIfs->CNDFALSE );
170   }
171   fprintf( stdout, "END IF\n" );
172 }
173 
174 /*------------------------------------------------------------\
175 |                                                             |
176 |                    Local View Vbh Var                       |
177 |                                                             |
178 \------------------------------------------------------------*/
179 
loc_viewvbvar(ScanVar)180 static void loc_viewvbvar( ScanVar  )
181 
182   vbvar_list  *ScanVar;
183 {
184   fprintf( stdout, "[%ld] ", ScanVar->LINE );
185   viewvexexprbound( ScanVar->TARGET );
186   fprintf( stdout, " TYPE %s ", loc_getvbhtypename( ScanVar->TYPE ) );
187   fprintf( stdout, " := " );
188   viewvexexprbound( ScanVar->VEX );
189   fprintf( stdout, "\n" );
190 }
191 
192 /*------------------------------------------------------------\
193 |                                                             |
194 |                    Local View Vbh Asg                       |
195 |                                                             |
196 \------------------------------------------------------------*/
197 
loc_viewvbasg(ScanAsg)198 static void loc_viewvbasg( ScanAsg  )
199 
200   vbasg_list  *ScanAsg;
201 {
202   fprintf( stdout, "[%ld] ", ScanAsg->LINE );
203   viewvexexprbound( ScanAsg->TARGET );
204   fprintf( stdout, " TYPE %s ", loc_getvbhtypename( ScanAsg->TYPE ) );
205   fprintf( stdout, " <= " );
206   viewvexexprbound( ScanAsg->VEX );
207   fprintf( stdout, "\n" );
208 }
209 
210 /*------------------------------------------------------------\
211 |                                                             |
212 |                    Local View Vbh Case                      |
213 |                                                             |
214 \------------------------------------------------------------*/
215 
loc_viewvbcas(ScanCase)216 static void loc_viewvbcas( ScanCase  )
217 
218   vbcas_list  *ScanCase;
219 {
220   vbcho_list    *ScanChoice;
221   chain_list    *ScanChain;
222   int            Offset;
223 
224   fprintf( stdout, "[%ld] ", ScanCase->LINE );
225   fprintf( stdout, "CASE (" );
226   viewvexexprbound( ScanCase->VEX );
227   fprintf( stdout, ") IS\n" );
228 
229   for ( Offset = 0; Offset < ScanCase->SIZE; Offset++ )
230   {
231     ScanChoice = &ScanCase->CHOICE[ Offset ];
232 
233     fprintf( stdout, "WHEN " );
234 
235     for ( ScanChain  = ScanChoice->VALUES;
236           ScanChain != (chain_list *)0;
237           ScanChain  = ScanChain->NEXT )
238     {
239       fprintf( stdout, "%s ", (char *)ScanChain->DATA );
240 
241       if ( ScanChain->NEXT != (chain_list *)0 )
242       {
243         fprintf( stdout, " | " );
244       }
245     }
246 
247     fprintf( stdout, "=> " );
248 
249     vbh_viewvbinst( ScanChoice->INSTRUCTION );
250   }
251 
252   fprintf( stdout, "END CASE\n" );
253 }
254 
255 /*------------------------------------------------------------\
256 |                                                             |
257 |                    Local View Vbh Wait                      |
258 |                                                             |
259 \------------------------------------------------------------*/
260 
loc_viewvbwas(ScanWait)261 static void loc_viewvbwas( ScanWait  )
262 
263   vbwas_list  *ScanWait;
264 {
265   chain_list *ScanSens;
266 
267   fprintf( stdout, "[%ld] ", ScanWait->LINE );
268   fprintf( stdout, "WAIT" );
269 
270   if ( ScanWait->SEN != (chain_list *)0 )
271   {
272     fprintf( stdout, " ON " );
273     for ( ScanSens  = ScanWait->SEN;
274           ScanSens != (chain_list *)0;
275           ScanSens  = ScanSens->NEXT )
276     {
277       fprintf( stdout, "%s", (char *)ScanSens->DATA );
278       if ( ScanSens->NEXT != (chain_list *)0 )
279       {
280         fprintf( stdout, ", " );
281       }
282     }
283   }
284 
285   if ( ScanWait->CND != (vexexpr *)0 )
286   {
287     fprintf( stdout, " UNTIL " );
288     viewvexexprbound( ScanWait->CND );
289   }
290 
291   if ( ScanWait->TIMEOUT != (vexexpr *)0 )
292   {
293     fprintf( stdout, " FOR " );
294     viewvexexprbound( ScanWait->TIMEOUT );
295 
296     if ( ScanWait->TIME_UNIT < VBH_MAX_TIME_UNIT )
297     {
298       fprintf( stdout, " %s", VBH_TIME_UNIT_NAME[ ScanWait->TIME_UNIT ] );
299     }
300     else
301     {
302       fprintf( stdout, " unknown (%d)", ScanWait->TIME_UNIT );
303     }
304   }
305 
306   fprintf( stdout, "\n" );
307 }
308 
309 /*------------------------------------------------------------\
310 |                                                             |
311 |                    Local View Vbh For                       |
312 |                                                             |
313 \------------------------------------------------------------*/
314 
loc_viewvbfor(ScanFor)315 static void loc_viewvbfor( ScanFor )
316 
317   vbfor_list  *ScanFor;
318 {
319   fprintf( stdout, "[%ld] ", ScanFor->LINE );
320   fprintf( stdout, "%s : ", ScanFor->LABEL );
321 
322   fprintf( stdout, "FOR " );
323   viewvexexprbound( ScanFor->VARIABLE );
324   fprintf( stdout, "IN " );
325 
326   viewvexexprbound( ScanFor->LEFT );
327   if ( ScanFor->UP ) fprintf( stdout, " TO "     );
328   else               fprintf( stdout, " DOWNTO " );
329   viewvexexprbound( ScanFor->RIGHT );
330 
331   fprintf( stdout, "\nLOOP\n" );
332 
333   vbh_viewvbinst( ScanFor->INSTRUCTION );
334 
335   fprintf( stdout, "END LOOP %s\n", ScanFor->LABEL );
336 }
337 
338 /*------------------------------------------------------------\
339 |                                                             |
340 |                    Local View Vbh Loop                      |
341 |                                                             |
342 \------------------------------------------------------------*/
343 
loc_viewvblop(ScanLoop)344 static void loc_viewvblop( ScanLoop )
345 
346   vblop_list  *ScanLoop;
347 {
348   fprintf( stdout, "[%ld] ", ScanLoop->LINE );
349   fprintf( stdout, "%s : ", ScanLoop->LABEL );
350 
351   fprintf( stdout, "LOOP\n" );
352 
353   vbh_viewvbinst( ScanLoop->INSTRUCTION );
354 
355   fprintf( stdout, "END LOOP %s\n", ScanLoop->LABEL );
356   fprintf( stdout, "\n" );
357 }
358 
359 /*------------------------------------------------------------\
360 |                                                             |
361 |                    Local View Vbh While                     |
362 |                                                             |
363 \------------------------------------------------------------*/
364 
loc_viewvbwhi(ScanWhile)365 static void loc_viewvbwhi( ScanWhile )
366 
367   vbwhi_list  *ScanWhile;
368 {
369   fprintf( stdout, "[%ld] ", ScanWhile->LINE );
370   fprintf( stdout, "%s : ", ScanWhile->LABEL );
371 
372   fprintf( stdout, "WHILE ( " );
373   viewvexexprbound( ScanWhile->CND );
374   fprintf( stdout, " )\n" );
375   fprintf( stdout, "LOOP\n" );
376 
377   vbh_viewvbinst( ScanWhile->INSTRUCTION );
378 
379   fprintf( stdout, "END LOOP %s\n", ScanWhile->LABEL );
380   fprintf( stdout, "\n" );
381 }
382 
383 /*------------------------------------------------------------\
384 |                                                             |
385 |                    Local View Vbh Aggregate                 |
386 |                                                             |
387 \------------------------------------------------------------*/
388 
loc_viewvbagr(ScanAggreg)389 static void loc_viewvbagr( ScanAggreg )
390 
391   vbagr_list  *ScanAggreg;
392 {
393   fprintf( stdout, "[%ld] ", ScanAggreg->LINE );
394   fprintf( stdout, "AGGREGATE (\n" );
395   vbh_viewvbinst( ScanAggreg->ASSIGN );
396   fprintf( stdout, ")\n\n" );
397 }
398 
399 /*------------------------------------------------------------\
400 |                                                             |
401 |                    Local View Vbh Exit                      |
402 |                                                             |
403 \------------------------------------------------------------*/
404 
loc_viewvbext(ScanExit)405 static void loc_viewvbext( ScanExit  )
406 
407   vbext_list  *ScanExit;
408 {
409   fprintf( stdout, "[%ld] ", ScanExit->LINE );
410   fprintf( stdout, "EXIT" );
411 
412   if ( ScanExit->LABEL != (char *)0 )
413   {
414     fprintf( stdout, " %s", ScanExit->LABEL );
415   }
416 
417   if ( ScanExit->CND != (vexexpr *)0 )
418   {
419     fprintf( stdout," WHEN ( " );
420     viewvexexprbound( ScanExit->CND );
421     fprintf( stdout, " )\n" );
422   }
423   else
424   {
425     fprintf( stdout, "\n" );
426   }
427 }
428 
429 /*------------------------------------------------------------\
430 |                                                             |
431 |                    Local View Vbh Next                      |
432 |                                                             |
433 \------------------------------------------------------------*/
434 
loc_viewvbnxt(ScanNext)435 static void loc_viewvbnxt( ScanNext  )
436 
437   vbnxt_list  *ScanNext;
438 {
439   fprintf( stdout, "[%ld] ", ScanNext->LINE );
440   fprintf( stdout, "NEXT" );
441 
442   if ( ScanNext->LABEL != (char *)0 )
443   {
444     fprintf( stdout, " %s", ScanNext->LABEL );
445   }
446 
447   if ( ScanNext->CND != (vexexpr *)0 )
448   {
449     fprintf( stdout," WHEN ( " );
450     viewvexexprbound( ScanNext->CND );
451     fprintf( stdout, " )\n" );
452   }
453   else
454   {
455     fprintf( stdout, "\n" );
456   }
457 }
458 
459 /*------------------------------------------------------------\
460 |                                                             |
461 |                    Local View Vbh Return                    |
462 |                                                             |
463 \------------------------------------------------------------*/
464 
loc_viewvbret(ScanReturn)465 static void loc_viewvbret( ScanReturn  )
466 
467   vbret_list  *ScanReturn;
468 {
469   fprintf( stdout, "[%ld] ", ScanReturn->LINE );
470   fprintf( stdout, "RETURN " );
471 
472   viewvexexprbound( ScanReturn->RET );
473 
474   fprintf( stdout, "\n" );
475 }
476 
477 /*------------------------------------------------------------\
478 |                                                             |
479 |                    Local View Vbh Call                      |
480 |                                                             |
481 \------------------------------------------------------------*/
482 
loc_viewvbcal(ScanCall)483 static void loc_viewvbcal( ScanCall  )
484 
485   vbcal_list  *ScanCall;
486 {
487   fprintf( stdout, "[%ld] ", ScanCall->LINE );
488   fprintf( stdout, "CALL " );
489 
490   viewvexexprbound( ScanCall->CALL );
491 
492   fprintf( stdout, "\n" );
493 }
494 
495 /*------------------------------------------------------------\
496 |                                                             |
497 |                    Local View Vbh Instruction               |
498 |                                                             |
499 \------------------------------------------------------------*/
500 
vbh_viewvbinst(Instruction)501 void vbh_viewvbinst( Instruction )
502 
503   ptype_list *Instruction;
504 {
505   while ( Instruction != (ptype_list *)0 )
506   {
507     switch ( Instruction->TYPE )
508     {
509       case VBH_BEIFS : loc_viewvbifs( Instruction->DATA );
510       break;
511 
512       case VBH_BEASG : loc_viewvbasg( Instruction->DATA );
513       break;
514 
515       case VBH_BEVAR : loc_viewvbvar( Instruction->DATA );
516       break;
517 
518       case VBH_BECAS : loc_viewvbcas( Instruction->DATA );
519       break;
520 
521       case VBH_BEWAS : loc_viewvbwas( Instruction->DATA );
522       break;
523 
524       case VBH_BEFOR : loc_viewvbfor( Instruction->DATA );
525       break;
526 
527       case VBH_BEWHI : loc_viewvbwhi( Instruction->DATA );
528       break;
529 
530       case VBH_BELOP : loc_viewvblop( Instruction->DATA );
531       break;
532 
533       case VBH_BENXT : loc_viewvbnxt( Instruction->DATA );
534       break;
535 
536       case VBH_BEEXT : loc_viewvbext( Instruction->DATA );
537       break;
538 
539       case VBH_BERET : loc_viewvbret( Instruction->DATA );
540       break;
541 
542       case VBH_BECAL : loc_viewvbcal( Instruction->DATA );
543       break;
544 
545       case VBH_BEAGR : loc_viewvbagr( Instruction->DATA );
546       break;
547 
548       default        : fprintf( stdout, "ERROR unknown instruction %ld\n",
549                                 Instruction->TYPE );
550     }
551 
552     Instruction = Instruction->NEXT;
553   }
554 }
555 
556 /*------------------------------------------------------------\
557 |                                                             |
558 |                         View Vbh Type                       |
559 |                                                             |
560 \------------------------------------------------------------*/
561 
vbh_viewvbtyp(BeTyp)562 void vbh_viewvbtyp( BeTyp )
563 
564   vbtyp_list *BeTyp;
565 {
566   int Index;
567 
568   fprintf( stdout, " > [%ld]\n", BeTyp->LINE );
569   fprintf( stdout, "   NAME   : %s\n",      BeTyp->NAME  );
570   fprintf( stdout, "   LEFT   : %d\n", (int)BeTyp->LEFT  );
571   fprintf( stdout, "   RIGHT  : %d\n", (int)BeTyp->RIGHT );
572   fprintf( stdout, "   VALUE  : \n" );
573 
574   for ( Index = 0; Index < BeTyp->SIZE; Index++ )
575   {
576     fprintf( stdout, "%s ", BeTyp->VALUE[ Index ] );
577   }
578 
579   if ( BeTyp->SIZE != 0 ) fprintf( stdout, "\n" );
580 
581   fprintf( stdout, "   SIZE   : %d\n", BeTyp->SIZE   );
582   fprintf( stdout, "   BYTE   : %d\n", BeTyp->BYTE   );
583   fprintf( stdout, "   CLASS  : %c\n", BeTyp->CLASS  );
584   fprintf( stdout, "   INDEX  : %d\n", BeTyp->INDEX  );
585 
586   if ( BeTyp->BASE != (vbtyp_list *)0 )
587   {
588     fprintf( stdout, "   BASE   : %s\n", BeTyp->BASE->NAME );
589   }
590   else
591   {
592     fprintf( stdout, "   BASE   : none\n" );
593   }
594 
595   if ( BeTyp->RESOLV != (vbfun_list *)0 )
596   {
597     fprintf( stdout, "   RESOLV : %s\n", BeTyp->RESOLV->NAME );
598   }
599   else
600   {
601     fprintf( stdout, "   RESOLV : none\n" );
602   }
603 
604   if ( BeTyp->DYNAMIC )
605   {
606     fprintf( stdout, "   DYNAMIC: %lx %lx ",
607              (long)BeTyp->DYNAMIC_LEFT, (long)BeTyp->DYNAMIC_RIGHT );
608 
609     viewvexexprbound( BeTyp->DYNAMIC_LEFT );
610     if ( BeTyp->DYNAMIC == VBH_DYNAMIC_TO ) fprintf( stdout, " TO "     );
611     else                                    fprintf( stdout, " DOWNTO " );
612     viewvexexprboundln( BeTyp->DYNAMIC_RIGHT );
613   }
614 }
615 
616 /*------------------------------------------------------------\
617 |                                                             |
618 |                         View Vbh Instance                   |
619 |                                                             |
620 \------------------------------------------------------------*/
621 
loc_viewvbins(BeIns)622 static void loc_viewvbins( BeIns )
623 
624   vbins_list *BeIns;
625 {
626   vbmap_list *BeMap;
627 
628   fprintf( stdout, "  > [%ld]", BeIns->LINE );
629   fprintf( stdout, " NAME   %s ", BeIns->NAME   );
630   fprintf( stdout, " MODEL  %s\n", BeIns->MODEL  );
631   fprintf( stdout, " PORT_MAP\n" );
632 
633   for ( BeMap  = BeIns->PORT_MAP;
634         BeMap != (vbmap_list *)0;
635         BeMap  = BeMap->NEXT )
636   {
637     fprintf( stdout, "  > [%ld] FORMAL: ", BeMap->LINE );
638     viewvexexprbound( BeMap->FORMAL );
639     fprintf( stdout, " ACTUAL: " );
640     viewvexexprboundln( BeMap->ACTUAL );
641   }
642 
643   fprintf( stdout, "\n" );
644 
645   fprintf( stdout, " GEN_MAP\n" );
646 
647   for ( BeMap  = BeIns->GEN_MAP;
648         BeMap != (vbmap_list *)0;
649         BeMap  = BeMap->NEXT )
650   {
651     fprintf( stdout, "  > [%ld] FORMAL: ", BeMap->LINE );
652     viewvexexprbound( BeMap->FORMAL );
653     fprintf( stdout, " ACTUAL: " );
654     viewvexexprboundln( BeMap->ACTUAL );
655   }
656 
657   fprintf( stdout, "\n" );
658 }
659 
660 /*------------------------------------------------------------\
661 |                                                             |
662 |                         View Vbh Aux                        |
663 |                                                             |
664 \------------------------------------------------------------*/
665 
loc_viewvbaux(BeAux)666 static void loc_viewvbaux( BeAux )
667 
668   vbaux_list *BeAux;
669 {
670   fprintf( stdout, "  > [%ld]", BeAux->LINE );
671   viewvexexprbound( BeAux->TARGET );
672   fprintf( stdout, " TYPE %s ", loc_getvbhtypename( BeAux->TYPE ) );
673   fprintf( stdout, " KIND %d ", (int)BeAux->KIND );
674   if ( BeAux->VEX != (vexexpr *)0 )
675   {
676     fprintf( stdout, " := " );
677     viewvexexprbound( BeAux->VEX );
678   }
679   fprintf( stdout, "\n" );
680 }
681 
682 /*------------------------------------------------------------\
683 |                                                             |
684 |                         View Vbh Pcs                        |
685 |                                                             |
686 \------------------------------------------------------------*/
687 
loc_viewvbpcs(BePcs)688 static void loc_viewvbpcs( BePcs )
689 
690   vbpcs_list *BePcs;
691 {
692   ptype_list *ScanPtype;
693   vbvar_list *BeVar;
694 
695   fprintf( stdout, "  > [%ld]\n", BePcs->LINE );
696 
697   if ( BePcs->LABEL != (char *)0 )
698   {
699     fprintf( stdout, "LABEL : %s\n", BePcs->LABEL );
700   }
701 
702   fprintf( stdout, "TYPE  : %x\n", (int)BePcs->TYPE );
703 
704   fprintf( stdout, "VARIABLE\n" );
705 
706   for ( ScanPtype  = BePcs->VARIABLE;
707         ScanPtype != (ptype_list *)0;
708         ScanPtype  = ScanPtype->NEXT )
709   {
710     BeVar = (vbvar_list *)ScanPtype->DATA;
711 
712     fprintf( stdout, "  > [%ld]\n", BeVar->LINE );
713     fprintf( stdout, " TYPE %s ", loc_getvbhtypename( BeVar->TYPE ) );
714     viewvexexprbound( BeVar->TARGET );
715     if ( BeVar->VEX != (vexexpr *)0 )
716     {
717       fprintf( stdout, " := " );
718       viewvexexprbound( BeVar->VEX );
719     }
720     fprintf( stdout, "\n" );
721   }
722 
723   fprintf( stdout, "INSTRUCTION\n" );
724 
725   vbh_viewvbinst( BePcs->INSTRUCTION );
726 }
727 
728 /*------------------------------------------------------------\
729 |                                                             |
730 |                         View Vbh Gnr                        |
731 |                                                             |
732 \------------------------------------------------------------*/
733 
loc_viewvbgnr(BeGnr)734 static void loc_viewvbgnr( BeGnr )
735 
736   vbgnr_list *BeGnr;
737 {
738   vbins_list *BeIns;
739   vbpcs_list *BePcs;
740 
741   fprintf( stdout, "  > [%ld]\n", BeGnr->LINE );
742 
743   if ( BeGnr->LABEL != (char *)0 )
744   {
745     fprintf( stdout, "LABEL : %s\n", BeGnr->LABEL );
746   }
747 
748   fprintf( stdout, "TYPE  : %x\n", (int)BeGnr->TYPE );
749 
750   if ( BeGnr->TYPE == VBH_GENERATE_IF )
751   {
752     fprintf( stdout, "IF (" );
753     viewvexexprbound( BeGnr->IF_COND );
754     fprintf( stdout, ")" );
755   }
756   else
757   {
758     fprintf( stdout, "FOR " );
759     viewvexexprbound( BeGnr->FOR_VARIABLE );
760     fprintf( stdout, " IN " );
761 
762     viewvexexprbound( BeGnr->FOR_LEFT );
763     if ( BeGnr->FOR_UP ) fprintf( stdout, " TO "     );
764     else                 fprintf( stdout, " DOWNTO " );
765     viewvexexprbound( BeGnr->FOR_RIGHT );
766   }
767 
768   fprintf( stdout, "\nGENERATE\n" );
769 
770   fprintf( stdout, "BEINS\n" );
771 
772   for ( BeIns  = BeGnr->BEINS;
773         BeIns != (vbins_list *)0;
774         BeIns  = BeIns->NEXT )
775   {
776     loc_viewvbins( BeIns );
777   }
778 
779   fprintf( stdout, "BEPCS\n" );
780 
781   for ( BePcs  = BeGnr->BEPCS;
782         BePcs != (vbpcs_list *)0;
783         BePcs  = BePcs->NEXT )
784   {
785     loc_viewvbpcs( BePcs );
786   }
787 
788   fprintf( stdout, "BEGNR\n" );
789 
790   for ( BeGnr  = BeGnr->BEGNR;
791         BeGnr != (vbgnr_list *)0;
792         BeGnr  = BeGnr->NEXT )
793   {
794     loc_viewvbgnr( BeGnr );
795   }
796 
797   fprintf( stdout, "\nEND GENERATE\n" );
798 }
799 
800 /*------------------------------------------------------------\
801 |                                                             |
802 |                         View Vbh Figure                     |
803 |                                                             |
804 \------------------------------------------------------------*/
805 
vbh_viewvbfig(Figure)806 void vbh_viewvbfig( Figure )
807 
808   vbfig_list *Figure;
809 {
810   vbgnr_list *BeGnr;
811   vbgen_list *BeGen;
812   vbins_list *BeIns;
813   vbmod_list *BeMod;
814   vbaux_list *BeAux;
815   vbatr_list *BeAtr;
816   vbcst_list *BeCst;
817   vbpor_list *BePor;
818   vbpcs_list *BePcs;
819   vbfun_list *BeFun;
820   vbarg_list *BePar;
821   vbvar_list *BeVar;
822   vbtyp_list *BeTyp;
823   chain_list *ScanPack;
824   ptype_list *ScanPtype;
825 
826   fprintf( stdout, "NAME: %s\n", Figure->NAME );
827   fprintf( stdout, "FLAG: %d\n", Figure->FLAG );
828   fprintf( stdout, "PACK: %d\n", Figure->IS_PACKAGE );
829 
830   fprintf( stdout, "PACK_LIST\n" );
831 
832   for ( ScanPack  = Figure->PACK_LIST;
833         ScanPack != (chain_list *)0;
834         ScanPack  = ScanPack->NEXT )
835   {
836     fprintf( stdout, "%s\n", (char *)ScanPack->DATA );
837   }
838 
839   fprintf( stdout, "BETYP\n" );
840 
841   for ( BeTyp  = Figure->BETYP;
842         BeTyp != (vbtyp_list *)0;
843         BeTyp  = BeTyp->NEXT )
844   {
845     vbh_viewvbtyp( BeTyp );
846   }
847 
848   fprintf( stdout, "BEPOR\n" );
849 
850   for ( BePor  = Figure->BEPOR;
851         BePor != (vbpor_list *)0;
852         BePor  = BePor->NEXT )
853   {
854     loc_viewvbpor( BePor );
855   }
856 
857   fprintf( stdout, "BEGEN\n" );
858 
859   for ( BeGen  = Figure->BEGEN;
860         BeGen != (vbgen_list *)0;
861         BeGen  = BeGen->NEXT )
862   {
863     loc_viewvbgen( BeGen );
864   }
865 
866   fprintf( stdout, "BEMOD\n" );
867 
868   for ( BeMod  = Figure->BEMOD;
869         BeMod != (vbmod_list *)0;
870         BeMod  = BeMod->NEXT )
871   {
872     fprintf( stdout, "  > [%ld]", BeMod->LINE );
873     fprintf( stdout, " NAME   %s\n", BeMod->NAME   );
874     fprintf( stdout, " BEPOR\n" );
875 
876     for ( BePor  = BeMod->BEPOR;
877           BePor != (vbpor_list *)0;
878           BePor  = BePor->NEXT )
879     {
880       loc_viewvbpor( BePor );
881     }
882 
883     fprintf( stdout, " BEGEN\n" );
884 
885     for ( BeGen  = BeMod->BEGEN;
886           BeGen != (vbgen_list *)0;
887           BeGen  = BeGen->NEXT )
888     {
889       loc_viewvbgen( BeGen );
890     }
891 
892     fprintf( stdout, "\n" );
893   }
894 
895   fprintf( stdout, "BEATR\n" );
896 
897   for ( BeAtr  = Figure->BEATR;
898         BeAtr != (vbatr_list *)0;
899         BeAtr  = BeAtr->NEXT )
900   {
901     fprintf( stdout, "  > [%ld]", BeAtr->LINE );
902     fprintf( stdout, " NAME   %s ", BeAtr->NAME   );
903     fprintf( stdout, " ENTITY %s ", BeAtr->ENTITY );
904     fprintf( stdout, " TYPE   %d ", BeAtr->TYPE   );
905     fprintf( stdout, " VALUE  %s ", BeAtr->VALUE  );
906 
907     fprintf( stdout, "\n" );
908   }
909 
910   fprintf( stdout, "BECST\n" );
911 
912   for ( BeCst  = Figure->BECST;
913         BeCst != (vbcst_list *)0;
914         BeCst  = BeCst->NEXT )
915   {
916     fprintf( stdout, "  > [%ld]", BeCst->LINE );
917     viewvexexprbound( BeCst->TARGET );
918     fprintf( stdout, " TYPE %s ", loc_getvbhtypename( BeCst->TYPE ) );
919     if ( BeCst->VEX != (vexexpr *)0 )
920     {
921       fprintf( stdout, " := " );
922       viewvexexprbound( BeCst->VEX );
923     }
924     fprintf( stdout, "\n" );
925   }
926 
927   fprintf( stdout, "BEFUN\n" );
928 
929   for ( BeFun  = Figure->BEFUN;
930         BeFun != (vbfun_list *)0;
931         BeFun  = BeFun->NEXT )
932   {
933     fprintf( stdout, "  > [%ld]\n", BeFun->LINE );
934     fprintf( stdout, "    NAME : %s\n", BeFun->NAME );
935     fprintf( stdout, "    TYPE : %x\n", (int)BeFun->TYPE );
936 
937     fprintf( stdout, "ARGUMENT\n" );
938 
939     for ( BePar  = BeFun->ARGUMENT;
940           BePar != (vbarg_list *)0;
941           BePar  = BePar->NEXT )
942     {
943       fprintf( stdout, "  > [%ld]\n", BePar->LINE );
944       viewvexexprbound( BePar->TARGET );
945       fprintf( stdout, " TYPE  %s ", loc_getvbhtypename( BePar->TYPE ) );
946       fprintf( stdout, " DIR   %c ", BePar->DIR );
947       fprintf( stdout, " CLASS %d ", BePar->CLASS );
948       fprintf( stdout, "\n" );
949     }
950 
951     if ( BeFun->RETURN != (vbarg_list *)0 )
952     {
953       BePar = BeFun->RETURN;
954 
955       fprintf( stdout, "  > [%ld]\n", BePar->LINE );
956       fprintf( stdout, "RETURN\n" );
957 
958       fprintf( stdout, "  < " );
959       viewvexexprbound( BePar->TARGET );
960       fprintf( stdout, " TYPE %s ", loc_getvbhtypename( BePar->TYPE ) );
961       fprintf( stdout, "\n" );
962     }
963 
964     fprintf( stdout, "VARIABLE\n" );
965 
966     for ( ScanPtype  = BeFun->VARIABLE;
967           ScanPtype != (ptype_list *)0;
968           ScanPtype  = ScanPtype->NEXT )
969     {
970       BeVar = (vbvar_list *)ScanPtype->DATA;
971 
972       fprintf( stdout, "  > [%ld]\n", BeVar->LINE );
973       fprintf( stdout, " TYPE %s ", loc_getvbhtypename( BeVar->TYPE ) );
974       viewvexexprbound( BeVar->TARGET );
975       if ( BeVar->VEX != (vexexpr *)0 )
976       {
977         fprintf( stdout, " := " );
978         viewvexexprbound( BeVar->VEX );
979       }
980       fprintf( stdout, "\n" );
981     }
982 
983     fprintf( stdout, "INSTRUCTION\n" );
984 
985     vbh_viewvbinst( BeFun->INSTRUCTION );
986   }
987 
988   fprintf( stdout, "BEINS\n" );
989 
990   for ( BeIns  = Figure->BEINS;
991         BeIns != (vbins_list *)0;
992         BeIns  = BeIns->NEXT )
993   {
994     loc_viewvbins( BeIns );
995   }
996 
997   fprintf( stdout, "BEAUX\n" );
998 
999   for ( BeAux  = Figure->BEAUX;
1000         BeAux != (vbaux_list *)0;
1001         BeAux  = BeAux->NEXT )
1002   {
1003     loc_viewvbaux( BeAux );
1004   }
1005 
1006   fprintf( stdout, "BEPCS\n" );
1007 
1008   for ( BePcs  = Figure->BEPCS;
1009         BePcs != (vbpcs_list *)0;
1010         BePcs  = BePcs->NEXT )
1011   {
1012     loc_viewvbpcs( BePcs );
1013   }
1014 
1015   fprintf( stdout, "BEGNR\n" );
1016 
1017   for ( BeGnr  = Figure->BEGNR;
1018         BeGnr != (vbgnr_list *)0;
1019         BeGnr  = BeGnr->NEXT )
1020   {
1021     loc_viewvbgnr( BeGnr );
1022   }
1023 }
1024