Example #1
0
File: vartree.c Project: dzhus/knr
void printGroup(Group * g)
{
  if (g != NULL)
    {
      printGroup(g->left);

      printf("Group %s, %d variables:\n", g->tag, g->total_count);
      printVariable(g->var);
      
      printGroup(g->right);
    }
}
Example #2
0
static void printGroups(int *x, int *y, SmiModule *smiModule)
{
    SmiNode *smiNode;

    for(smiNode = smiGetFirstNode(smiModule, SMI_NODEKIND_ANY);
	smiNode;
	smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_ANY)) {
	if (isGroup(smiNode)) {
	    printGroup(x, y, smiNode);
	}
	if (smiNode->nodekind == SMI_NODEKIND_ROW) {
	    printGroup(x, y, smiNode);
	}
    }
}
void EntityManager_Print(FILE *ofp, const char *header, const EntityManager *entityManager) {
  htab *t = NULL;

  if (header != NULL) fprintf(ofp, "%s\n", header); // print the header even for NULL items
  if (entityManager == NULL) {
    snprintf(errStr, sizeof(errStr), "EntityManager_Print: entityManager must not be NULL");
    return;
  }
  t = entityManager->Users->Items;
  if (hfirst(t)) {
    do {
      printUser(ofp, "", (void *)hstuff(t));
    } while (hnext(t));
  }
  t = entityManager->Groups->Items;
  if (hfirst(t)) {
    do {
      printGroup(ofp, "", (void *)hstuff(t));
    } while (hnext(t));
  }
  t = entityManager->Resources->Items;
  if (hfirst(t)) {
    do {
      printResource(ofp, "", (void *)hstuff(t));
    } while (hnext(t));
  }
  fprintf(ofp, "\n");
}
// Print group information include its properties
STATIC void fullPrintGroup(FILE *ofp, const char *header, const void *u) {
  const groupData *entity = NULL;

  printGroup(ofp, header, u);
  if (u == NULL) return;
  entity = (const groupData *)u;
  printProperties(ofp, entity->PropertiesData);
}
void checkForReqView(struct group *groups, struct slName *reqViews)
{
int errs = 0;
for(; groups; groups = groups->next)
    {
    struct slName *view = reqViews;
    for(; view; view = view->next)
        {
        if (groups->viewHash != NULL)
            {
            if (groups->repHash != NULL)
                {
                struct hashCookie cook = hashFirst(groups->repHash);
                struct hashEl *hel;

                while((hel = hashNext(&cook)) != NULL)
                    {
                    char buffer[10*1024];
                    safef(buffer, sizeof buffer, "%s-%s",view->name, 
                        (char *)hel->name);
                    if (hashLookup(groups->viewHash, buffer) == NULL)
                        {
                        printf("didn't find view %s for replicate %s in ", 
                            view->name,(char *)hel->name);
                        printGroup(groups);
                        errs++;
                        }
                    }
                }
            else
                {
                if (hashLookup(groups->viewHash, view->name) == NULL)
                    {
                    printf("didn't find view %s in group\n", view->name);
                    printGroup(groups);
                    errs++;
                    }
                }
            }
        }
    }
if (errs > 0)
    errAbort("aborting");
}
void checkOverlap(struct mdbObj *mdbObjs, struct group *groups)
{
int errs = 0;
for(; mdbObjs; mdbObjs = mdbObjs->next)
    {
    struct mdbVar *mdbVar = hashFindVal(mdbObjs->varHash, "objType");
    if (sameString(mdbVar->val, "composite"))
        continue;
    struct group *ourGroup = findGroup(mdbObjs, groups);
    if (ourGroup == NULL)
        errAbort("cannot find group for %s\n", mdbObjs->obj);
    mdbVar = hashFindVal(mdbObjs->varHash, "view");

    if (mdbVar == NULL)
        errAbort("obj %s has no view", mdbObjs->obj);


    struct hashEl *hel;
    if (ourGroup->viewHash == NULL)
        ourGroup->viewHash = newHash(10);

    struct mdbVar *mdbReplicate = hashFindVal(mdbObjs->varHash, "replicate");
    char buffer[10*1024];

    if (mdbReplicate != NULL)
        {
        if (ourGroup->repHash == NULL)
            ourGroup->repHash = newHash(10);
        hashStore(ourGroup->repHash, mdbReplicate->val);
        safef(buffer, sizeof buffer, "%s-%s",mdbVar->val, mdbReplicate->val);
        }
    else
        safef(buffer, sizeof buffer, "%s",mdbVar->val);

    if ((hel = hashLookup(ourGroup->viewHash, buffer)) != NULL)
        {
        printf("two views of type %s in same group\n",buffer);
        printf("objects are %s and %s\n", (char *)hel->val, mdbObjs->obj);
        printGroup(ourGroup);
        errs++;
        }
    else
        hashAdd(ourGroup->viewHash, buffer, mdbObjs->obj);
    }
if (errs)
    errAbort("aborting");
}
Example #7
0
int main (int argc, char *argv[])
{
    int len;
    EIBConnection *eibcon;
    eibaddr_t eibdest;
    eibaddr_t eibsrc;
    uchar eibbuf[200];
    int tmpeibval;
    int sw_verbose = -1;

    FILE *fh_cfg_file = NULL; // Файл с соответствиями KNX телеграммы <-> IPкоманды
    listGroupAddr myListGA[LENGTH_OF_LIST_OF_GADDR];
    eibaddr_t testga;
    int index_gaddr;  // index for group address array
    char *parsed_cfg_str; // Будет равна LENGTH_OF_CMD_STR
    char mcom[] = "next\n";
    int size_of_list_gaddr;	// real length of list of group address - counting due to read

    if (argc < 3)
        die ("usage: %s Url(ip:localhost:6720) file(with list of cmd)", argv[0]);
//Prepare KNX connection
    if (argc > 3)
        sw_verbose = strncmp(argv[3], "--v", 3); // Выводить сообщения в stdout если присутствует ключ --v
    else
        sw_verbose = 1;
    eibcon = EIBSocketURL (argv[1]);
    if (!eibcon)
        die ("Open failed");
    if (EIBOpen_GroupSocket (eibcon, 0) == -1)
        die ("Connect failed");

//Fill array from file
    if((fh_cfg_file = fopen(argv[2], "r")) == NULL)
        die ("Error Open file with list of group address");
// Читаем командные строки из конфигурационного файла и заполняем массив структур myListGA
    index_gaddr = 0;
    parsed_cfg_str = (char*)malloc(LENGTH_OF_CMD_STR * sizeof(char));
    while(fgets(parsed_cfg_str, LENGTH_OF_CMD_STR, fh_cfg_file) != NULL) {
        // Здесь парсим строку
        convert_str_to_myListGA(parsed_cfg_str, myListGA, index_gaddr);
        index_gaddr++;
        if(index_gaddr == LENGTH_OF_LIST_OF_GADDR)
            break;
    }
    free(parsed_cfg_str);

    size_of_list_gaddr=index_gaddr;	// real number of monitoring group address
    if(sw_verbose == 0) {
        for(index_gaddr=0; index_gaddr != size_of_list_gaddr; index_gaddr++)
            printf("Result N:%d -> %s - %d - %s - %d - %s - %X\n", index_gaddr, myListGA[index_gaddr].group_addr,\
                   myListGA[index_gaddr].value, myListGA[index_gaddr].send_to_ip, myListGA[index_gaddr].send_to_port,\
                   myListGA[index_gaddr].cmd_string, myListGA[index_gaddr].group_addr_in_hex);
    }
    fclose(fh_cfg_file);

    while (1) {
        len = EIBGetGroup_Src (eibcon, sizeof (eibbuf), eibbuf, &eibsrc, &eibdest);
        if (len == -1)
            die ("Read failed");
        if (len < 2)
            die ("Invalid Packet");
        if ((eibbuf[0] & 0x3) || (eibbuf[1] & 0xC0) == 0xC0) {
            if(sw_verbose == 0) {
                printf ("Unknown APDU from ");
                printIndividual (eibsrc);
                printf (" to ");
                printGroup (eibdest);
                printf (": ");
                printHex (len, eibbuf);
                printf ("\n");
            }
        }
        else {
            if(sw_verbose == 0) {
                switch (eibbuf[1] & 0xC0) {
                case 0x00:
                    printf ("Read");
                    break;
                case 0x40:
                    printf ("Response");
                    break;
                case 0x80:
                    printf ("Write");
                    break;
                }
                printf (" from ");
                printIndividual (eibsrc);
                printf (" to ");
                printGroup (eibdest);
                if (eibbuf[1] & 0xC0) {
                    printf (": ");
                    if (len == 2) {
                        printf ("%02X", eibbuf[1] & 0x3F);
                    }
                    else
                        printHex (len - 2, eibbuf + 2);
                }
                printf(" Destination in HEX is ->  %X ", eibdest);
            }

            tmpeibval = eibbuf[1] & 0x3F;
            for(index_gaddr=0; index_gaddr != size_of_list_gaddr; index_gaddr++) {
                if((myListGA[index_gaddr].group_addr_in_hex == eibdest) && (myListGA[index_gaddr].value == tmpeibval)) {
                    if(sw_verbose == 0) {
                        printf("\n Caught command => %s \n", myListGA[index_gaddr].cmd_string);
                    }
                    mpdControl(myListGA[index_gaddr].cmd_string, myListGA[index_gaddr].send_to_ip, myListGA[index_gaddr].send_to_port, sw_verbose);
                }
            }
            fflush (stdout);
        }
    }
    EIBClose (eibcon);
    return 0;
}
Example #8
0
int solveMineSweeper(Board boardh, Board boardv) {
	// Initialize groups
	groupListArrayNumber = 0;
	for (int x = 0; x < boardv.width; x++) {
		for (int y = 0; y < boardv.height; y++) {
			char cell = get(boardv, x,y);
			
			if (cell == MINE || cell == UNKNOWN) {	// Not a number!
				continue;
			}
			
			Group newGroup = buildGroup(boardv, x, y);
			if (newGroup.size != 0) {
				addToList(newGroup);
			}
		}
	}

	while (1) {
		
MAYBE(printf("creation of groups complete\n"));
		for (int i = 0; i < groupListArrayNumber; i++) {
			for (int j = i + 1; j < groupListArrayNumber; j++) {
MAYBE(printf("G%d[%d/%d]; G%d[%d/%d]; GLAN: %d)\n", i, groupList[i].mines, groupList[i].size, j, groupList[j].mines, groupList[j].size, groupListArrayNumber));
				if (groupList[i].size == groupList[j].size	// Groups are
				&& containedIn(groupList[i], groupList[j])) {	// the same
					removeFromList(j);
MAYBE(printf("remove\n"));
				} 
				else if (containedIn(groupList[i], groupList[j])) { 
					//remove elements of i from j
MAYBE(printf("SUB: G%d - G%d\n", j, i));
MAYBE(printGroup(groupList[j]));
MAYBE(printGroup(groupList[i]));
					groupList[j] = subtract(groupList[j],groupList[i]);
MAYBE(printGroup(groupList[j]));
				}
				else if (containedIn(groupList[j], groupList[i])) {
					//remove elements of j from i
					
MAYBE(printf("SUB: G%d - G%d\n", i, j));
MAYBE(printGroup(groupList[i]));
MAYBE(printGroup(groupList[j]));
					groupList[i] = subtract(groupList[i],groupList[j]);
MAYBE(printGroup(groupList[i]));
				}
				else if (intersectSolver(groupList[i], groupList[j])>=0) {
					int x = intersectSolver(groupList[i], groupList[j]);
MAYBE(printf("FIRST: %d, SECOND: %d\n", groupList[i].mines - (groupList[i].size - x), groupList[j].mines - (groupList[j].size - x)));


MAYBE(printf("\nINTERCEPTION: mine:%d\n", x));
MAYBE(printGroup(groupList[i]));
MAYBE(printGroup(groupList[j]));


					Group a, b;
					a = subtract(groupList[i], groupList[j]);	// LEFT
					b = subtract(groupList[i], a);  //isto vai dar merda!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
					b.mines = x;
					addToList(b);
					groupList[i] = subtract(groupList[i], b);
					groupList[j] = subtract(groupList[j], b);
				}
				else {
					continue;
				}
				
				i = -1;	// Reset outer for
				break;
			}
		}

MAYBE(printf("cleaning of groups complete\n"));
		bool stallAlert = 0;
		int forMax = groupListArrayNumber;
		for (int i = 0; i < forMax; i++){
MAYBE(printf("for i:%d forMax:%d\n",i,forMax));
			int result = NEUTRAL;
			if (groupList[i].mines == 0) {
				for (int  j =0; j < groupList[i].size; j++) {
					makePlay(boardh, boardv, groupList[i].positions[j][0], groupList[i].positions[j][1], CLEAR);
MAYBE(printf("Marking Clear (%d,%d)\n", groupList[i].positions[j][0], groupList[i].positions[j][1]));
				}
			} 
			else if (groupList[i].mines == groupList[i].size) {
				for (int  j = 0; j < groupList[i].size; j++) {
					makePlay(boardh, boardv, groupList[i].positions[j][0], groupList[i].positions[j][1], MINE);
MAYBE(printf("Marking Mine (%d,%d)\n", groupList[i].positions[j][0], groupList[i].positions[j][1]));
					
				}
				removeFromList(i);
				i--;
				forMax--;
			} 
			else {
				continue;
			}
			
			// Delete group
			stallAlert = 1;
			// maybe break;
		}
		
		for (int i = 0; i < forMax; i++){
			int result = NEUTRAL;
			if (groupList[i].mines == 0) {
				for (int  j =0; j < groupList[i].size; j++) {
					Group newGroup = buildGroup(boardv, groupList[i].positions[j][0], groupList[i].positions[j][1]); 
					if (newGroup.size > 0) {
						addToList(newGroup);
					}
				}
				
				// Delete group
				removeFromList(i);
				i--;
				forMax--;
			} 
		}
		
		printBoard(boardv);
		
		if (stallAlert == 0) {
			printBoard(boardv);
			printBoard(boardh);
			printf("Stalled!\n glan: %d \n", groupListArrayNumber);
			
			for (int i = 0; i < groupListArrayNumber; i++) {
				printGroup(groupList[i]);
			}
			return NEUTRAL;
		}
	}
}
Example #9
0
File: p1_main.c Project: syzhou/p1
int main() {
	struct Ordered_container* people;
	struct Ordered_container* rooms;
	people = OC_create_container((OC_comp_fp_t)comparePeople);
	rooms = OC_create_container((OC_comp_fp_t)compareRooms);
	while (1) {
		char cmd1;
		char cmd2;
		printf("\nEnter command: ");
		scanf(" %c", &cmd1);
		scanf("%c", &cmd2);
		switch (cmd1) {
		case 'p':
			switch (cmd2) {
			case 'i':
				printIndividual(people);
				break;
			case 'r':
				printRoom(rooms);
				break;
			case 'm':
				printMeeting(rooms);
				break;
			case 's':
				printSchedule(rooms);
				break;
			case 'g':
				printGroup(people);
				break;
			default:
				printErrUnrecCmd();
				break;
			}
			break;
		case 'a':
			switch (cmd2) {
			case 'i':
				addIndividual(people);
				break;
			case 'r':
				addRoom(rooms);
				break;
			case 'm':
				addMeeting(rooms);
				break;
			case 'p':
				addParticipant(rooms, people);
				break;
			default:
				printErrUnrecCmd();
				break;
			}
			break;
		case 'r':
			switch (cmd2) {
			case 'm':
				rescheduleMeeting(rooms);
				break;
			default:
				printErrUnrecCmd();
				break;
			}
			break;
		case 'd':
			switch (cmd2) {
			case 'i':
				deleteIndividual(people, rooms);
				break;
			case 'r':
				deleteRoom(rooms);
				break;
			case 'm':
				deleteMeeting(rooms);
				break;
			case 'p':
				deleteParticipant(rooms, people);
				break;
			case 's':
				deleteSchedule(rooms);
				break;
			case 'g':
				deleteGroup(rooms, people);
				break;
			case 'a':
				deleteAll(rooms, people);
				break;
			default:
				printErrUnrecCmd();
				break;
			}
			break;
		case 's':
			break;
		case 'l':
			break;
		case 'q':
			switch (cmd2) {
			case 'q' :
				printf("All meetings deleted\n");
				printf("All rooms deleted\n");
				printf("All persons deleted\n");
				printf("Done\n");
				return 0;
				break;
			default:
				printErrUnrecCmd();
				break;
			}
			break;
		default:
			printErrUnrecCmd();
			break;
		}
	}
	return 0;
}
static void printGroups(const std::vector<Group>& groups) {
  for (const auto& g : groups) {
    printGroup(g);
  }
}
Example #11
0
static int
printNode(D4printer* out, NCD4node* node, int depth)
{
    int ret = NC_NOERR;
    int i;
    char* fqn = NULL;

    switch (node->sort) {
    case NCD4_GROUP:
	if(node->group.isdataset)
	    printDataset(out,node,depth);
	else
	    printGroup(out,node,depth);
	break;

    case NCD4_DIM:
	INDENT(depth);
	CAT("<Dimension");
	if(node->name != NULL)
	    printXMLAttributeName(out, "name", node->name);
	printXMLAttributeSize(out, "size", node->dim.size);
	if(node->dim.isunlimited)
	    printXMLAttributeString(out, UCARTAGUNLIM, "1");
	CAT("/>");
	break;

    case NCD4_TYPE:
	switch (node->subsort) {
	default: break;
	case NC_OPAQUE:
	    INDENT(depth); CAT("<Opaque");
	    ncbytesclear(out->tmp);
	    printXMLAttributeName(out, "name", node->name);
	    if(node->opaque.size > 0)
	        printXMLAttributeSize(out, "size", node->opaque.size);
	    CAT("/>");
	    break;	    
	case NC_ENUM:
	    INDENT(depth); CAT("<Enumeration");
	    printXMLAttributeName(out, "name", node->name);
	    if(node->basetype->subsort <= NC_MAX_ATOMIC_TYPE)
		printXMLAttributeName(out, "basetype", node->basetype->name);
	    else {
		char* fqn = NULL;
		printXMLAttributeName(out, "basetype", (fqn = NCD4_makeFQN(node->basetype)));
		nullfree(fqn);
	    }
	    CAT(">\n");
	    depth++;
	    for(i=0;i<nclistlength(node->en.econsts);i++) {
		NCD4node* ec = (NCD4node*)nclistget(node->en.econsts,i);
		INDENT(depth);
		CAT("<EnumConst");
		printXMLAttributeName(out, "name", ec->name);
		printXMLAttributeAtomics(out, "value", &ec->en.ecvalue, node->basetype->subsort);
		CAT("/>\n");
	    }
	    depth--;
	    INDENT(depth); CAT("</Enumeration>");
	    break;
	case NC_STRUCT:
	    INDENT(depth);
	    CAT("<Structure");
	    printXMLAttributeName(out, "name", node->name);
	    CAT(">\n");
	    depth++;
	    for(i=0;i<nclistlength(node->vars);i++) {
		NCD4node* field = (NCD4node*)nclistget(node->vars,i);
		printVariable(out,field,depth);
		CAT("\n");
	    }
	    if((ret=printMetaData(out,node,depth))) goto done;
	    depth--;
	    INDENT(depth);
	    CAT("</Structure>");
	    break;
	case NC_SEQ:
	    INDENT(depth);
	    CAT("<Vlen");
	    printXMLAttributeName(out, "name", node->name);
	    printXMLAttributeName(out, "type", (fqn=NCD4_makeFQN(node->basetype)));
	    if(hasMetaData(node)) {
		CAT(">\n");
		depth++;
		if((ret=printMetaData(out,node,depth))) goto done;
		depth--;
		INDENT(depth);
		CAT("</Vlen>");
	    } else
	        CAT("/>");
  	    break;
        } break;
    case NCD4_VAR: /* Only top-level vars are printed here */
	if(ISTOPLEVEL(node)) {
  	    if((ret=printVariable(out,node,depth))) goto done;
	    CAT("\n");
	}
	break;

    default: abort(); break;
    }
done:
    nullfree(fqn);
    return THROW(ret);
}