⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 color.c

📁 LastWave
💻 C
📖 第 1 页 / 共 3 页
字号:
        for (j=0;j<theColorMaps[i]->size;j++) {          if (i == 0 && theColorMaps[0]->colors[j].name == NULL) break;          if (nColors >= MaxNColors) Errorf("BuildColormap() : Sorry too many colors allocated (max is %d)",MaxNColors);          red[nColors] = theColorMaps[i]->colors[j].red;          green[nColors] = theColorMaps[i]->colors[j].green;          blue[nColors] = theColorMaps[i]->colors[j].blue;          theColorMaps[i]->colors[j].index = nColors;          nColors++;        }        ncm--;      }    }  }  else {    last = 0;    for (i=0;i<ColorMapNMax;i++) {      if (ncm == 0) break;      if (theColorMaps[i] != NULL) {        for (j=0;j<theColorMaps[i]->size;j++) {          if (i == 0 && theColorMaps[0]->colors[j].name == NULL) break;          theColorMaps[i]->colors[j].index = MaxNColors;          for (k=0;k<last;k++) {            if (red[k] == theColorMaps[i]->colors[j].red && green[k] == theColorMaps[i]->colors[j].green && blue[k] == theColorMaps[i]->colors[j].blue) {              theColorMaps[i]->colors[j].index = k;              break;            }          }          if (theColorMaps[i]->colors[j].index == MaxNColors) {            if (nColors >= MaxNColors) Errorf("BuildColormap() : Sorry too many colors allocated (max is %d)",MaxNColors);            red[nColors] = theColorMaps[i]->colors[j].red;            green[nColors] = theColorMaps[i]->colors[j].green;            blue[nColors] = theColorMaps[i]->colors[j].blue;            theColorMaps[i]->colors[j].index = nColors;            nColors++;          }          if (i == 0) last = nColors;        }        ncm--;        last = nColors;      }    }  }            /* Build the colormap */  nAllocColors = WSetColormap(red,green,blue,pixels,nColors,flagShared,mouseMode);  ncm = nColorMaps+1;  for (i=0;i<128;i++) {    if (ncm == 0) break;    if (theColorMaps[i] != NULL) {      for (j=0;j<theColorMaps[i]->size;j++) {         if (i == 0 && theColorMaps[0]->colors[j].name == NULL) break;         theColorMaps[i]->colors[j].pixel = pixels[theColorMaps[i]->colors[j].index];       }          ncm--;    }  }  /* Refresh the windows ???? *//*  if (theWindowsHT && flagRefresh) {    for (r = 0; r<theWindowsHT->nRows;r++) {      for (e = theWindowsHT->rows[r]; e != NULL; e = e->next) {         DrawWholeGObject((GOBJECT) e, YES);      }    }  } */          return(nAllocColors);          }/* * Init  */void ColorsInit(void){  int i;  unsigned short r1,g1,b1,r2,g2,b2;  nColorMaps = 0;  for (i=0;i<128;i++) theColorMaps[i] = NULL;    WBgColor(&r1,&g1,&b1);  WFgColor(&r2,&g2,&b2);  CGetColorMap(NULL,256);  DefineNamedColorRGB("bgDefault",r1,g1,b1);  DefineNamedColorRGB("fgDefault",r2,g2,b2);  bgColor = 0;  fgColor = 1;  mColor = 1;  theMouseMode = Mouse1Color;    colorMapCur = CGetColorMap("bw",2);   DefineColorRGB(colorMapCur,0,r1,g1,b1);  DefineColorRGB(colorMapCur,1,r2,g2,b2);     BuildColormap(YES,theMouseMode);}/* * Setting background/foreground/mouse colors */void C_SetColor(char **argv){  char *action;  unsigned long color;  while (1) {    if (*argv == NULL) break;       argv = ParseArgv(argv,tWORD,&action,-1);    if (!strcmp(action,"-bg")) {      argv = ParseArgv(argv,tCOLOR,&color,-1);	  bgColor = color;	}    else if (!strcmp(action,"-fg")) {      argv = ParseArgv(argv,tCOLOR,&color,-1);	  fgColor = color;	}    else if (!strcmp(action,"-mouse")) {      if (ParseColor_(*argv,0,&color)) {	    mColor = color;	    theMouseMode = Mouse1Color;	  }	  else theMouseMode = MouseInverse;	  BuildColormap(YES,theMouseMode);	}	  }      NoMoreArgs(argv);    }/*  * The main command for managing new colors */void C_Color(char **argv){  char *action,*mode,*name;  LWFLOAT x1,x2,x3;  char flagRGB,flagMap;  int index,cm,i;  char flagInverse;  unsigned long color;  LISTV lv,lv1;    argv = ParseArgv(argv,tWORD,&action,-1);    flagMap = NO;    flagRGB = NO;  /* 'nnew' action */  if (!strcmp(action,"nnew")) {    argv = ParseArgv(argv,tSTR,&name,tWORD,&mode,tFLOAT,&x1,tFLOAT,&x2,tFLOAT,&x3,0);    if (!IsValidSymbol(name)) Errorf("Invalid color name '%s'",name);    if (!strcmp(mode,"rgb")) flagRGB = YES;    else if (!strcmp(mode,"hsv")) flagRGB = NO;    else ErrorUsage();    if (flagRGB) DefineNamedColorRGB(name,x1,x2,x3);    else DefineNamedColorHSV(name,x1,x2,x3);  }  /* 'inew' action */  else if (!strcmp(action,"inew")) {    ParseArgv(argv,tSTR_,NULL,&name,-1);    if (name != NULL) {      if (*name == '_') Errorf("You cannot create a new color in an inversed color map.");      cm = GetColorMap(name);      if (cm == -1) name = NULL;      else argv++;    }     if (name = NULL) {      if (theColorMaps[colorMapCur&ColorMapMask] == NULL) Errorf("Sorry current color map is not defined");      name = theColorMaps[colorMapCur&ColorMapMask]->name;      cm = GetColorMap(name);    }            if (cm == -1) Errorf("Unknown Color Map '%s'",name);    argv = ParseArgv(argv,tINT,&index,tWORD,&mode,tFLOAT,&x1,tFLOAT,&x2,tFLOAT,&x3,0);    if (!strcmp(mode,"rgb")) flagRGB = YES;    else if (!strcmp(mode,"hsv")) flagRGB = NO;    else ErrorUsage();    if (flagRGB) DefineColorRGB(cm,index,x1,x2,x3);    else DefineColorHSV(cm,index,x1,x2,x3);  }  /* 'ilist' action */  else if (!strcmp(action,"ilist")) {    flagInverse = NO;    if (ParseInt_(*argv,0,&index) || *argv == NULL) {      cm = colorMapCur;    }    else {      ParseColorMapInt(*argv,&cm);      argv++;    }    argv = ParseArgv(argv,tINT_,-1,&index,0);    lv = TNewListv();    SetResultValue(lv);    if (index == -1) {      if (!(cm&ColorMapInverseMask)) {        cm = cm &ColorMapMask;        for (i=0;i<theColorMaps[cm]->size;i++) {          lv1 = TNewListv();          AppendInt2Listv(lv1,theColorMaps[cm]->colors[i].red);          AppendInt2Listv(lv1,theColorMaps[cm]->colors[i].green);          AppendInt2Listv(lv1,theColorMaps[cm]->colors[i].blue);          AppendValue2Listv(lv, (VALUE) lv1);        }      } else {        cm = cm &ColorMapMask;        for (i=theColorMaps[cm]->size-1; i>= 0;i--) {          lv1 = TNewListv();          AppendInt2Listv(lv1,theColorMaps[cm]->colors[i].red);          AppendInt2Listv(lv1,theColorMaps[cm]->colors[i].green);          AppendInt2Listv(lv1,theColorMaps[cm]->colors[i].blue);          AppendValue2Listv(lv, (VALUE) lv1);        }      }    }    else if (index < 0 || index >= theColorMaps[cm &ColorMapMask]->size) Errorf("Bad color index '%d'",index);    else if (!(cm&ColorMapInverseMask)) {       cm = cm &ColorMapMask;       AppendInt2Listv(lv,theColorMaps[cm]->colors[index].red);       AppendInt2Listv(lv,theColorMaps[cm]->colors[index].green);       AppendInt2Listv(lv,theColorMaps[cm]->colors[index].blue);    }    else {       cm = cm &ColorMapMask;       index = theColorMaps[cm]->size-1-index;       AppendInt2Listv(lv,theColorMaps[cm]->colors[index].red);       AppendInt2Listv(lv,theColorMaps[cm]->colors[index].green);       AppendInt2Listv(lv,theColorMaps[cm]->colors[index].blue);    }  }    /* 'nlist' action */  else if (!strcmp(action,"nlist")) {    argv = ParseArgv(argv,tSTR_,"*",&name,0);      lv = TNewListv();    SetResultValue(lv);    for (i=0;i<theColorMaps[0]->size;i++) {      if (theColorMaps[0]->colors[i].name == NULL) break;      if (MatchStr(theColorMaps[0]->colors[i].name,name)) {        lv1 = TNewListv();        AppendStr2Listv(lv1,theColorMaps[0]->colors[i].name);        AppendInt2Listv(lv1,theColorMaps[0]->colors[i].red);        AppendInt2Listv(lv1,theColorMaps[0]->colors[i].green);        AppendInt2Listv(lv1,theColorMaps[0]->colors[i].blue);        AppendValue2Listv(lv, (VALUE) lv1);      }    }  }        /* 'animate' action */  else if (!strcmp(action,"animate")) {    argv = ParseArgv(argv,tCOLOR,&color,tWORD,&mode,tFLOAT,&x1,tFLOAT,&x2,tFLOAT,&x3,0);    if (!strcmp(mode,"rgb")) flagRGB = YES;    else if (!strcmp(mode,"hsv")) flagRGB = NO;    else ErrorUsage();    if (!flagRGB) HSVToRGB_(&x1,&x2,&x3);    WAnimateColor(color,(short unsigned) x1,(short unsigned) x2,(short unsigned) x3);  }      /* 'nb' action */  else if (!strcmp(action,"nb")) {    NoMoreArgs(argv);    SetResultInt(WNumOfColors());  }        /* 'install' action */  else if (!strcmp(action,"install")) {    NoMoreArgs(argv);    flagMap = YES;  }  else Errorf("Unknown action '%s'",action);    if (flagMap) SetResultInt(BuildColormap(YES,theMouseMode));}/*  * The main command for managing new colors */void C_ColorMap(char **argv){  char *action,*name;  int size,cm,n,i;  LISTV lv;    argv = ParseArgv(argv,tWORD,&action,-1);    /* 'new' action */    if (!strcmp(action,"new")) {    argv = ParseArgv(argv,tSTR_,NULL,&name,tINT,&size,0);    if (name == NULL) {      if (theColorMaps[colorMapCur&ColorMapMask] == NULL) Errorf("Sorry current color map is not defined");      name = theColorMaps[colorMapCur&ColorMapMask]->name;    }    else {      if (!IsValidSymbol(name)) Errorf("Invalid colormap name '%s'",name);    }    CGetColorMap(name,size);  }    /* 'current' action */  else if (!strcmp(action,"current")) {    argv = ParseArgv(argv,tSTR_,NULL,&name,0);    if (name == NULL) {      if (colorMapCur&ColorMapInverseMask && theColorMaps[colorMapCur&ColorMapMask] != NULL) SetResultf("_%s",theColorMaps[colorMapCur&ColorMapMask]->name);      else if (theColorMaps[colorMapCur] != NULL) SetResultStr(theColorMaps[colorMapCur]->name);      else SetResultStr("None");    }    else {      ParseColorMapInt(name,&cm);            colorMapCur = cm;    }  }  /* 'delete' action */  else if (!strcmp(action,"delete")) {    argv = ParseArgv(argv,tSTR_,NULL,&name,0);    if (name == NULL) {      if (theColorMaps[colorMapCur&ColorMapMask] != NULL) name = theColorMaps[colorMapCur&ColorMapMask]->name;      else Errorf("Sorry current color map is not defined");    }    DeleteColorMap(name);  }  /* 'size' action */  else if (!strcmp(action,"size")) {    argv = ParseArgv(argv,tSTR_,NULL,&name,0);    if (name == NULL) {      if (theColorMaps[colorMapCur&ColorMapMask] != NULL) name = theColorMaps[colorMapCur&ColorMapMask]->name;      else Errorf("Sorry current color map is not defined");    }    if (*name == '_') name++;    cm = GetColorMap(name);    if (cm == -1) Errorf("Unknown color map '%s'",name);    SetResultInt(theColorMaps[cm]->size);  }   /* list action */  else if (!strcmp(action,"list")) {    argv = ParseArgv(argv,tSTR_,"*",&name,0);    n = nColorMaps;    lv = TNewListv();    SetResultValue(lv);    for (i=1;i<ColorMapNMax;i++) {      if (n == 0) break;      if (theColorMaps[i] != NULL && MatchStr(theColorMaps[i]->name,name)) {        AppendStr2Listv(lv,theColorMaps[i]->name);         n--;      }    }  }          else Errorf("Unknown action '%s'",action);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -