// drawHighlighted
//--------------------------------------------------------------------------
void cInputField::drawHighlighted(Surface &dest)
{
    checkCursor();
    checkRepeat();

    inputFieldSurface.fill(Color::black);
    inputFieldSurface.drawButtonBorder(Color::darkGray, Color::white);
    inputFieldSurface.bltStringShadowed(4, 2,
                                        destString+strDisplayStart,
                                        Color::white,
                                        Color::black);

    static float timeForBlink = 0.0f;
    if ((timeForBlink += TimerInterface::getTimeSlice()) > 0.25f) {
        if (timeForBlink > 0.50f) {
            timeForBlink = 0.0f;
        }
    } else {
        int cursorPos=cInputField::cursorPos-strDisplayStart;
        if ((size_t)cursorPos >= maxCharCount) {
            // XXX hardcoded CHAR_PIXX (8)
            inputFieldSurface.bltString(((cursorPos - 1) * 8) + 4, 2, "_", Color::red);
        } else {
            // XXX hardcoded CHAR_PIXX(8)
            inputFieldSurface.bltString(cursorPos * 8 + 4, 2, "_", Color::red);
        }
    }

    inputFieldSurface.blt(dest, pos.x, pos.y);
} // drawHighlighted
Exemplo n.º 2
0
Arquivo: 6_old.cpp Projeto: Jy-Liu/ADA
//When calling checkRepeat, the first call of x and y are in the same group
int checkRepeat(Degree* indegree, int x, int y, Result* result, int key) {
  Node* ptr = (indegree+y)->head;
  int ret = 0;
  if (x == y)
    return 1;
  while(ptr != NULL) {
    if (checkRepeat(indegree, x, ptr->start_point, result, key) != 0) {
      if (ptr->edge_value == key) { //Node need to be deleted
        deleteNode(indegree, y, ptr);
        result->total_number--;
        result->total_weight -= ptr->edge_value;
        //printf("ptr->edege_value == key\n");
      }
      else {
        //printf("ptr->edege_value != key\n");
      }
      ret |= 1;
    }
    else {
      //printf("checkRepeat return 0 (%d, %d) %d\n", x+1, y+1, ptr->edge_value);
    }
    ptr = ptr->next;
  }
  return ret;
}
// draw
//--------------------------------------------------------------------------
void cInputField::draw(Surface &dest)
{
    checkCursor();
    checkRepeat();

    inputFieldSurface.fill(Color::black);
    inputFieldSurface.drawButtonBorder(Color::white, Color::gray64);
    inputFieldSurface.bltString(4, 2, destString+strDisplayStart, Color::white);
    inputFieldSurface.blt(dest, pos.x, pos.y);
} // draw
Exemplo n.º 4
0
Arquivo: 6_old.cpp Projeto: Jy-Liu/ADA
int main () {
  int T;
  scanf("%d", &T);

  while(T--) {
    int n, m;
    scanf("%d%d", &n, &m);

    //Initialize the map matrix for fast search weight
    //int* map = (int* )calloc(n*n, sizeof(int));
    //Initialize the edges array for sort
    Edges* all_edges = (Edges* )malloc(sizeof(Edges) * m);
    //Initialize the indegree tree
    Degree* indegree = (Degree* )malloc(sizeof(Degree) * n);
    for (int i = 0; i < n; i++) {
      (indegree+i)->head = NULL;
      (indegree+i)->tail = NULL;
    }

    //Read (a, b), c into map matrix and edges array
    for (int i = 0; i < m; i++) {
      int a, b, c;
      scanf("%d%d%d", &a, &b, &c);

      //swap
      // if (a > b)
      //   a ^= b ^= a ^= b;

      a--;
      b--;
      (all_edges+i)->x = a;
      (all_edges+i)->y = b;
      (all_edges+i)->weight = c;

      // if (*(map+a*n+b) == 0)
      //   *(map+a*n+b) = c;
      // else {
      //   if (*(map+a*n+b) > c)
      //     *(map+a*n+b) = c;
      // }
    }

    //Initialize the Result ret
    Result ret;
    ret.total_number = 0;
    ret.total_weight = 0;

    //Initialize the group == make_set(n)
    // int* group = (int* )malloc(sizeof(int) * n);
    // for (int i = 0; i < n; i++)
    //   *(group+i) = i;

    //Sort
    qsort(all_edges, m, sizeof(Edges), cmp);

    //Handle all edges
    for (int i = 0; i < m; i++) {
      Edges tmp = *(all_edges+i);
      int isSameGroup_1 = findGroup(indegree, tmp.x, tmp.y);
      int isSameGroup_2 = findGroup(indegree, tmp.y, tmp.x);
      printf("(%d, %d, %d) same group:%d\n", tmp.x+1, tmp.y+1, tmp.weight, isSameGroup_1 || isSameGroup_2);
      if ((isSameGroup_1 || isSameGroup_2) == 0) {
        ret.total_number++;
        ret.total_weight += tmp.weight;
        //update the indegree simultaneously
        Node* insert_node = (Node* )malloc(sizeof(Node));
        insert_node->start_point = tmp.x;
        insert_node->edge_value = tmp.weight;
        insert_node->prev = NULL;
        insert_node->next = NULL;
        insertNode(indegree, tmp.y, insert_node);
        //printf("Hi, %d, %d\n", ret.total_number, ret.total_weight);
      }
      else {
        if (isSameGroup_1) {
          //printf("Oh_1\n");
          checkRepeat(indegree, tmp.x, tmp.y, &ret, tmp.weight);
        }
        else {
          //printf("Oh_2\n");
          checkRepeat(indegree, tmp.y, tmp.x, &ret, tmp.weight);
        }
      }
      printf("<%d, %d>\n", ret.total_number, ret.total_weight);
    }

/*    for (int i = 0; i < m; i++)
      printf("(%d, %d, %d) -> %d\n", ((all_edges+i)->x)+1, ((all_edges+i)->y)+1, (all_edges+i)->weight, *(map+((all_edges+i)->x)*n+((all_edges+i)->y)));
*/
    printf("%d %d\n", ret.total_number, ret.total_weight);
    //Clean up
    //free(map);
    free(all_edges);
    free(indegree);
    //free(group);
  }
  return 0;
}
Exemplo n.º 5
0
/* Función que comprueba si el formato del fichero de configuración es correcto*/
int formatOK(FILE * p, int * errorMemoria)
{

  int numNames = 0; // Número de nombres de la primera linea
  int numInterfaces = 0; // Número de interfaces
  char name[TAM]; // Almacena el nombre de las interfaces para compararlos con los de la primera línea
  char * interfaces = NULL; // Reserva dinámica de memoria para almacenar el nombre de las interfaces
  char head[TAM]; // Cadena que almacena la primera línea del fichero sin en el número de interfaces
  int oct1; // Recoge el primero octeto de la dirección
  int oct2; // Recoge el segundo octeto de la dirección
  int oct3; // Recoge el tercer octeto de la dirección
  int oct4; // Recoge el cuarto octeto de la dirección
  int i = 0; // Contador 1
  int j = 0;  // Contador 2
  int flag = 0; // Bandera 1
  int equal = 0; // Bandera 2
  NODO1 * tableForwarding = NULL; // Puntero al primer elemento de la lista con la tabla de reenvío
  NODO1 * forwardingAux = NULL; // Auxiliar lista con la tabla de reenvío
  NODO1 * dirRepeat = NULL; // Puntero a nodo para recorrer la lista e ir comparando
  NODO3 * first = NULL; // Puntero a lista con cabecera
  NODO3 * aux = NULL; // Auxiliar lista cabecera

  fscanf(p,"%d", &numInterfaces); // Almacena el número de interfaces que debe haber
  
  fgets(head,TAM,p); // Guarda en cabecera la primera línea del fichero (sin el número de interfaces)
  
  for(i=0; i<=TAM; i++)
    {
      if((isspace(head[i]) != 0) && ((head[i+1] >= 'a' && head[i+1] <= 'z') || (head[i+1] >= 'A' && head[i+1] <= 'Z') || (head[i+1] >= '0' && head[i+1] <= '9'))) // El número de nombres de la primera linea es igual al número de espacios
	numNames++;
      else if(head[i] == '\n')
	i = TAM +1; // Hace que finalice el bucle
    }
  i = 0; // Devuelve i a 0
  while(isspace(head[i]) != 0) // Quita los espacios iniciales de la cabecera
    {
      i++;
    }  

  if(numNames == numInterfaces) // Si el número de nombres es igual al de interfaces, hay que comprobar el resto de líneas, si no => Error
    {
      if(fscanf(p,"%d.%d.%d.%d",&oct1,&oct2,&oct3,&oct4) == 4) // Si las direcciones tienen el formato correcto, comprueba los nombres
	{
	  fgets(name, TAM, p);
	  while(isspace(name[j]) != 0) // Quita los espacios del nombre
	    {
	      j++;
	    }

	  while(!feof(p)) // Recorre todo el fichero para comprobar que los nombres han sido dados en la cabecera
	    {
	      while(head[i] != '\n' && equal == 0) 
		{
		  while((name[j] != head[i]) && (head[i] != '\n'))
		    {
		      i++;
		      j = 1;
		    }
		  if(head[i] == '\n')
		    equal = -1;
		  i++;
		  j++;
		  if(name[j] == '\n')
		    {
		      equal = 1;
		      j = 1;		
		      i = 1;
		    }
		}  
	      if((oct1 > 255)||(oct2 > 255)||(oct3 > 255)||(oct4 != 0)) // Comprueba que los octetos no sean mayores de 255
		equal = -1;
	      if((fscanf(p,"%d.%d.%d.%d",&oct1,&oct2,&oct3,&oct4) != 4) && (equal == -1)) // Si el formato de la dirección es erróneo o hay error en los nombres
		flag = 1; // => Error
	      fgets(name, TAM, p);
	      if(equal == 1)	 
		equal = 0;			     
	    }	
	} 
      else // Si el formato de las direcciones es incorrecto => Error
	flag = 1;      
    } 
  else // Si el número de nombres no es igual al de interfaces => Error
    flag = 1;

  if(flag == 0) // Si no ha habido error en los casos contemplados anteriormente, comprobamos otros errores
    {
      interfaces = (char *) calloc(TAM, sizeof(char)); // Reserva dinámica de memoria para almacena el nombre de las interfaces
      if(interfaces != NULL) // Reserva correcta
	{
	  fseek(p, 0, SEEK_SET); // Pone el puntero a fichero de nuevo al principio.
	  fscanf(p,"%d",&numInterfaces); // Almacena el número de interfaces
	  fgets(head, TAM, p); // Lee la primera línea para tener el puntero al comienzo de la tabla
	  fscanf(p,"%d.%d.%d.%d",&oct1,&oct2,&oct3,&oct4); // Almacena la dirección de la siguiente interfaz
	  fscanf(p,"%s",interfaces); // Nombre de la interfaz correspondiente a la dirección anterior
	  while(!feof(p)) // Crea una lista de numInterfaces nodos, para que sirva como tabla de reenvio
	    {
	      forwardingAux = makeNodeConf(oct1, oct2, oct3, oct4, interfaces, errorMemoria); // Crea los nodos
	      linksNodeConf(forwardingAux, &tableForwarding); // Enlaza la lista
	      fscanf(p,"%d.%d.%d.%d",&oct1,&oct2,&oct3,&oct4); // Almacena la dirección de la siguiente interfaz
	      fscanf(p,"%s",interfaces); // Nombre de la interfaz correspondiente a la dirección anterior
	    } 
	  dirRepeat = tableForwarding->sig; // El puntero para comprobar si está repetida va un nodo por delante
	  flag = checkRepeat(tableForwarding, dirRepeat); // Llamada para comprobar si hay alguna dirección repetida
	  if(flag == 0) // Si aún no se ha encontrado el error, seguimos comprobando
	    {
	      fseek(p, 0, SEEK_SET); // Pone el puntero a fichero de nuevo al principio	      
	      fscanf(p,"%d",&numInterfaces); // Almacena el número de interfaces
	      while(numInterfaces > 0) // Bucle para crear una lista con los nombres de la primera linea
		{
		  fscanf(p,"%s",interfaces); // Guarda el primer nombre
		  aux = makeNodeHead(interfaces, errorMemoria); // Crea los nodos de la lista
		  linksNodeHead(aux, &first); // Enlaza los nodos de la lista
		  numInterfaces--; 
		}
	      flag = checkInterface(tableForwarding,first); // Comprueba si hay algún nombre en la primera línea que luego no lleve dirección asignada
	    }
	}
      else // Error de reserva
	{
	printf("Error 6: error de memoria\n");	
	(*errorMemoria) = 1;	
	}    
    }
  free(interfaces); // Libera la reserva dinámica de memoria
  removeHead(&first); // Elimina la lista con la cabecera
  removeConf(&tableForwarding); // Elimina la lista con la tabla de reenvio
  return (flag);
}
Exemplo n.º 6
0
void readOneOut(char *rmskFile)
/* Read .out file rmskFile, check each line, and print OK lines to .tab. */
{
struct lineFile *lf;
char *line, *words[24];
int lineSize, wordCount;

/* Open .out file and process header. */
lf = lineFileOpen(rmskFile, TRUE);
if (!lineFileNext(lf, &line, &lineSize))
    errAbort("Empty %s", lf->fileName);
if (!startsWith("   SW  perc perc", line))
    {
    if (!startsWith("   SW   perc perc", line))
	errAbort("%s doesn't seem to be a RepeatMasker .out file, first "
	    "line seen:\n%s", lf->fileName, line);
    }
lineFileNext(lf, &line, &lineSize);
lineFileNext(lf, &line, &lineSize);

/* Process line oriented records of .out file. */
while (lineFileNext(lf, &line, &lineSize))
    {
    static struct rmskOut2 r;
    char *s;

    wordCount = chopLine(line, words);
    if (wordCount < 14)
        errAbort("Expecting 14 or 15 words line %d of %s", 
	    lf->lineIx, lf->fileName);
    r.swScore = atoi(words[0]);
    r.milliDiv = makeMilli(words[1], lf);
    r.milliDel = makeMilli(words[2], lf);
    r.milliIns = makeMilli(words[3], lf);
    r.genoName = words[4];
    r.genoStart = atoi(words[5])-1;
    r.genoEnd = atoi(words[6]);
    r.genoLeft = parenInt(words[7], lf);
    r.strand[0]  = (words[8][0] == '+' ? '+' : '-');
    r.repName = words[9];
    r.repClass = words[10];
    char *repClassTest = cloneString(r.repClass);
    stripChar(repClassTest, '(');
    stripChar(repClassTest, ')');
    int nonDigitCount = countLeadingNondigits(repClassTest);
    int wordOffset = 0;
    // this repClass is only digits, (or only (digits) with surrounding parens)
    //   this is the sign of an empty field here
    // due to custom library in use that has no class/family indication
    if (0 == nonDigitCount)
        {
        wordOffset = 1;
        r.repClass = cloneString("Unspecified");
        r.repFamily = cloneString("Unspecified");
        }
    else
        {
        s = strchr(r.repClass, '/');
        if (s == NULL)
            r.repFamily = r.repClass;
        else
           {
           *s++ = 0;
           r.repFamily = s;
           }
        }
    r.repStart = parenInt(words[11-wordOffset], lf);
    r.repEnd = atoi(words[12-wordOffset]);
    r.repLeft = parenInt(words[13-wordOffset], lf);
    r.id = atoi(words[14-wordOffset]);
    if (words[8][0] == 'C')
	{
	r.repLeft = parenInt(words[11-wordOffset], lf);
	r.repStart = parenInt(words[13-wordOffset], lf);
	}
    if (checkRepeat(&r, lf))
        {
	FILE *f = getFileForChrom(r.genoName);
        if (!noBin)
            fprintf(f, "%u\t", hFindBin(r.genoStart, r.genoEnd));
        rmskOut2TabOut(&r, f);
        }
    }
}