enum Lisp_Type
{
  Lisp_Int                     
  ,Lisp_Record                 
  ,Lisp_Cons                   
  ,Lisp_String                 
  ,Lisp_Vector                 
  ,Lisp_Symbol
  ,Lisp_Char                     
};
typedef
union Lisp_Object
  {
    struct
      {
        enum Lisp_Type type: 3L ;
        unsigned long  markbit: 1;
        unsigned long  val: 32;
      } gu;
    long  i;
  }
Lisp_Object;
extern int initialized;
void
init_device_faces (int *d)
{
  if (initialized)
    {
      Lisp_Object tdevice;
      do {
          tdevice = (union Lisp_Object)
                        { gu:
                          { markbit: 0,
                            type: Lisp_Record,
                            val: ((unsigned long )d)
                          }
                        };
      } while (0);
      call_critical_lisp_code (tdevice);
    }
}
