示例#1
0
int backend_print(class_chain * cls_chain, class_chain * inst_chain, qual_chain * qual_chain, 
			const char * out_file, const char * out_dir,
			const char * ns, unsigned options, const char * extraopts)
{
  FILE * outfile = fopen(out_file,"w");
  if (outfile == NULL) {
    fprintf(stderr,"Failed to open %s\n",out_file);
    return 1;
  }
  
  FILE * qualfile;
  char qual_file[3000];
	
  strcpy(qual_file, out_dir);
  strcat(qual_file, "/");
  strcat(qual_file, ns);
  strcat(qual_file, "/");  
  strcat(qual_file, "qualifiers");
  qualfile = fopen(qual_file, "w");
  if (qualfile == NULL) {
    fprintf(stderr,"Failed to open %s\n",qual_file);
    return 1;
  }  
  
  while (cls_chain && cls_chain->class_item) {
    print_class(outfile, cls_chain->class_item);
    cls_chain = cls_chain -> class_next;
  }
  while (inst_chain && inst_chain->class_item) {
  	print_instance(out_dir, ns, inst_chain->class_item);
    inst_chain = inst_chain -> class_next;
  }
  while (qual_chain && qual_chain->qual_qual) {
  	print_qualifier(qualfile, qual_chain->qual_qual);
    qual_chain = qual_chain -> qual_next;
  }
  fclose(outfile);
  return 0;
}
示例#2
0
void exec_wr(char* format, int pretty, FILE *out){
    Pschema s = parse_schema(format);
    Odescr *op = top_tstack();
    print_instance(op->inst.sval, s, NULL, 0, op->mode, pretty, out); // use the raw instance information
    free_schema(last_parsed_format);
}
示例#3
0
void print_instance(char *instance, Pschema s, char *attr_name, int spaces, Mode mode, int pretty, FILE *out){
    if(attr_name!=NULL && pretty){
        print_spaces(spaces, out);
        fprintf(out, "WR for record attribute \"%s\"\n",attr_name);
    }
    if(pretty){
        print_spaces(spaces, out);
    }
    if(s->type == TY_RECORD || s->type == TY_ARRAY || s->type == TY_ATTR){
        switch(s->type){
            case TY_RECORD:{
                if(pretty){
                    fprintf(out, "WR for a record\n");
                }
                int printed_size = 0;
                Pschema temp = s->child;
                while(temp){
                    print_instance(instance + printed_size, temp->child, temp->id, spaces+1, mode, pretty, out);
                    printed_size += get_schema_size(temp->child);
                    temp = temp->brother;
                }
                break;
            }
            case TY_ARRAY:{
                int i;
                if(pretty){
                    fprintf(out, "WR for an array\n");
                }
                int field_size = get_schema_size(s->child);
                int nfields = s->size;
                for(i=0; i<nfields; i++){
                    print_instance(instance + field_size * i, s->child, NULL, spaces+1, mode, pretty, out);
                }
                break;
            }
            default: machine_error("TY_ATTR cannot be used in input_schema()."); break;
        }
    } else{
        if(mode == EMB){
            Arg inst;
            inst.sval = instance;
            if(pretty){
                fprintf(out, "WR ");
            }
            switch(s->type){
                case TY_INT: {
                    fprintf(out, "%d\n",inst.ival);
                    break;
                }
                case TY_CHAR: {
                    fprintf(out, "%c\n",inst.cval);
                    break;
                }
                case TY_REAL: {
                    fprintf(out, "%f\n",inst.rval);
                    break;
                }
                case TY_STRING: {
                    fprintf(out, "%s\n",inst.sval);
                    break;
                }
                case TY_BOOL: {
                    fprintf(out, "%s\n",inst.cval == '1' ? "true" : "false");
                    break;
                }
                default: {
                    break;
                }
            }
        } else{
            if(pretty){
                fprintf(out, "WR ");
            }
            switch(s->type){
                case TY_INT: {
                    int *inst = (int *)instance;
                    fprintf(out, "%d\n",inst[0]);
                    break;
                }
                case TY_CHAR: {
                    char *inst = (char *)instance;
                    fprintf(out, "%c\n",inst[0]);
                    break;
                }
                case TY_REAL: {
                    float *inst = (float *)instance;
                    fprintf(out, "%f\n",inst[0]);
                    break;
                }
                case TY_STRING: {
                    char **inst = (char **)instance;
                    fprintf(out, "%s\n",inst[0]);
                    break;
                }
                case TY_BOOL: {
                    char *inst = (char *)instance;
                    fprintf(out, "%s\n",inst[0] == '1' ? "true" : "false");
                    break;
                }
                default: {
                    break;
                }
            }
            
        }
    }
}