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

📄 apinit.c

📁 Solaris环境下的数据挖掘算法:birch聚类算法。该算法适用于对大量数据的挖掘。
💻 C
字号:
/*  ========================================================================  DEVise Data Visualization Software  (c) Copyright 1992-1996  By the DEVise Development Group  Madison, Wisconsin  All Rights Reserved.  ========================================================================  Under no circumstances is this software to be copied, distributed,  or altered in any way without prior permission from the DEVise  Development Group.*//*  $Id: ApInit.c,v 1.4 1996/10/07 22:53:41 wenger Exp $  $Log: ApInit.c,v $  Revision 1.4  1996/10/07 22:53:41  wenger  Added more error checking and better error messages in response to  some of the problems uncovered by CS 737 students.  Revision 1.3  1996/08/02 15:53:31  wenger  Added AttrProj member functions for reading entire records (no projection).  Revision 1.2  1996/05/22 18:50:39  wenger  Greatly simplified Init::DoInit() to only do what's necessary for  attribute projection; other minor changes.  Revision 1.1  1996/04/22 18:01:43  wenger  First version of "attribute projection" code.  The parser (with  the exception of instantiating any TData) compiles and runs.*/#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <stdlib.h>#include <string.h>#include <signal.h>#include <sys/types.h>//#include "Dispatcher.h"#include "Exit.h"#include "ApInit.h"#include "Time.h"#include "Timer.h"#include "BufPolicy.h"#include "Util.h"/*************************************************************Create unique temporary file name **************************************************************/static char uniqueFileName[100];static char *CreateUniqueFileName(char *progname){  progname = StripPath(progname);  pid_t pid = getpid();  for(char char1 = 'a'; char1 <= 'z'; char1++) {    for(char char2 = 'a'; char2 <= 'z'; char2++) {      sprintf(uniqueFileName, "work/%s_%05ld%c%c", progname,	      (long)pid, char1, char2);      int fd = open(uniqueFileName, O_WRONLY, 0666);      if (fd < 0)	return uniqueFileName;      close(fd);    }  }  DOASSERT(0, "Cannot create unique temporary file name");  return NULL; /* keep compiler happy */}Boolean Init::_savePopup = false; /* TRUE if save pop up window 						and wait for button event */Boolean Init::_doPlayback = false; /* TRUE if do journal playback */char *Init::_playbackFile = "";	/* name of playback file */Boolean Init::_prefetch = true; /* TRUE if buffer manager does prefetch */int Init::_bufferSize= 1536;		/* size of buffer */BufPolicy::policy Init::_policy= BufPolicy::FIFO; /* policy for buffer manager*//* TRUE if existing buffers should be checked first in query processing */Boolean Init::_existing = true;	Boolean Init::_tdataQuery = false; /* TRUE if file is tdata, else gdata */Boolean Init::_convertGData = true; /* true if TData is converted into G									while system is idle */Boolean Init::_abort = false; /* TRUE if abort instead of exit() on program 							exit */Boolean Init::_iconify= false; /* TRUE if windows are iconified when							restoring a session */int Init::_gdataPages = -1; /* max # of disk pages for gdata */char *Init::_progName = 0; /* name of program */char *Init::_workDir = 0; /* name of work directory */char *Init::_tmpDir = 0;/* name of temp directory */char *Init::_cacheDir = 0;/* name of cache directory */char *Init::_sessionName = "session.tk";	/* name of program */Boolean Init::_dispLogo = true;char *Init::_batchFile = 0;char *Init::_qpName = "default"; /* name of query processor */Boolean Init::_restore = false; /* TRUE if we need to restore a session file */long Init::_progModTime;	/* when program was modified */Boolean Init::_randomize = true; /* true if TData fetches are randomized */int Init::_pageSize = 16384;	/* size of page */Boolean Init::_hasXLow=false, Init::_hasYLow = false;Boolean Init::_hasXHigh=false, Init::_hasYHigh = false;Coord Init::_xLow, Init::_yLow, Init::_xHigh, Init::_yHigh;Boolean Init::_simpleInterpreter = true; /* true if interpreted	mapping should use its own interpreter to process	simple commands instead of calling tcl */Boolean Init::_printTDataAttr = false; /* true to print	TData attribute list when it's created */Boolean Init::_elimOverlap = true; /* true if overlapping	GData should be eliminated while drawing */Boolean Init::_dispGraphics = true; /* true to display graphics */Boolean Init::_batchRecs = true; /* true if batching records */Boolean Init::_printViewStat = false;  /* true to print view statistics *//**************************************************************Remove positions from index to index+len-1 from argvUpdate argc.***************************************************************/static void MoveArg(int &argc, char **argv, int index, int len){  DOASSERT(index + len <= argc, "Argument too long");  for(int j = index + len; j < argc; j++)    argv[j - len] = argv[j];  argc -= len;}static void Usage(char *prog){  fprintf(stderr, "Usage: %s [options]\n", prog);  fprintf(stderr, "\nOptions are:\n");  fprintf(stderr, "\t-journal file: name of journal file\n");  fprintf(stderr, "\t-play file: journal file to play back\n");  fprintf(stderr, "\t-buffer size: buffer size in pages\n");  fprintf(stderr, "\t-prefetch yes_no: do prefetch or not\n");  fprintf(stderr, "\t-policy policy: buffer replacement policy, one of:\n");  fprintf(stderr, "\t                lru, fifo, lifo, focal, or rnd\n");  fprintf(stderr, "\t-existing yes_no: use existing buffers first or not\n");  fprintf(stderr, "\t-norandom: don't randomize record retrieval\n");  fprintf(stderr, "\t-batch file: batch file to execute\n");  Exit::DoExit(1);}static void CatchInt(int){#if 0  Dispatcher::QuitNotify();#endif}void Init::DoInit(){#if 0  /* set up interrupt handling for INTR */  (void)signal(SIGINT, CatchInt);#endif#if 1  /* Create work directory, if needed */  char *workDir = "/tmp";  _workDir = CopyString(workDir);#endif  /* Get name of cache directory. */  char *cacheDir = getenv("DEVISE_CACHE");  if (!cacheDir) cacheDir = ".";  _cacheDir = CopyString(cacheDir);#if 0  char *journalName = NULL;#define MAXARGS 512  char *args[512];  DOASSERT(argc <= MAXARGS, "Too many arguments");#endif#if 0  for(int j = 0; j < argc; j++)    args[j] = argv[j];    /* init current time */  DeviseTime::Init();#if 0  Timer::InitTimer();#endif  _progName = CopyString(argv[0]);  _progModTime = ModTime(argv[0]);  char *tmpDir =  getenv("DEVISE_TMP");  if (!tmpDir)    tmpDir = "tmp";  CheckAndMakeDirectory(tmpDir);  pid_t pid = getpid();  char buf[512];  DOASSERT(strlen(tmpDir) + 20 <= 512, "String space too small");  sprintf(buf, "%s/DEVise_%ld", tmpDir, (long)pid);  CheckAndMakeDirectory(buf, true);  _tmpDir = CopyString(buf);  /* parse parameters */  int i = 1;  while (i < argc) {    if (argv[i][0] == '-') {      if (strcmp(&argv[i][1], "queryProc") == 0) {	if (i >= argc-1)	  Usage(argv[0]);	_qpName = CopyString(argv[i+1]);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "batch") == 0) {	if (i >= argc - 1)	  Usage(argv[0]);	_batchFile = CopyString(argv[i + 1]);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "session") == 0) {	if (i >= argc-1)	  Usage(argv[0]);	_sessionName = CopyString(argv[i + 1]);	_restore = true;	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "playback") == 0) {	if (i >= argc-1)	  Usage(argv[0]);	_playbackFile = CopyString(argv[i+1]);	_doPlayback = true;	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "journal") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	journalName = CopyString(argv[i+1]);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "buffer") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_bufferSize = atoi(argv[i+1]);	if (_bufferSize <= 0) {	  fprintf(stderr, "invalid buffer size %d\n", _bufferSize);	  Usage(argv[0]);	}	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "pagesize") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_pageSize = atoi(argv[i+1]);	if (_pageSize <= 0) {	  fprintf(stderr, "invalid buffer size %d\n", _pageSize);	  Usage(argv[0]);	}	if ((_pageSize % 4096) != 0) {	  fprintf(stderr, "page %d must be multiple of 4096\n", _pageSize);	  Usage(argv[0]);	}	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "policy") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	if (strcmp(argv[i+1], "lru") == 0)	  _policy = BufPolicy::LRU;	else if (strcmp(argv[i+1], "fifo") == 0)	  _policy = BufPolicy::FIFO;	else if (strcmp(argv[i+1], "lifo") == 0)	  _policy = BufPolicy::LIFO;	else if (strcmp(argv[i+1], "rnd") == 0)	  _policy = BufPolicy::RND;	else if (strcmp(argv[i+1], "focal") == 0)	  _policy = BufPolicy::FOCAL;	else {	  fprintf(stderr, "unknown policy %s\n", argv[i+1]);	  Usage(argv[0]);	}	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "prefetch") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_prefetch = !(atoi(argv[i+1]) == 0);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "printViewStat") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_printViewStat = !(atoi(argv[i+1]) == 0);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "batchRecs") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_batchRecs = !(atoi(argv[i+1]) == 0);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "dispGraphics") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_dispGraphics = !(atoi(argv[i+1]) == 0);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "elimOverlap") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_elimOverlap = !(atoi(argv[i+1]) == 0);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "existing") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_existing = !(atoi(argv[i+1]) == 0);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "gdata") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_tdataQuery = (atoi(argv[i+1]) == 0);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "gdatapages") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_gdataPages = atoi(argv[i+1]);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "convert") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_convertGData = !(atoi(argv[i+1]) == 0);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "iconify") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_iconify = !(atoi(argv[i+1]) == 0);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "printTDataAttr") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_printTDataAttr = !(atoi(argv[i+1]) == 0);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "simpleInterpreter") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_simpleInterpreter = !(atoi(argv[i+1]) == 0);	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "nologo") == 0) {	_dispLogo = false;	MoveArg(argc,argv,i,1);      }      else if (strcmp(&argv[i][1], "abort") == 0) {	_abort = true;	MoveArg(argc,argv,i,1);      }      else if (strcmp(&argv[i][1], "savePopup") == 0) {	_savePopup = true;	MoveArg(argc,argv,i,1);      }      else if (strcmp(&argv[i][1], "norandom") == 0) {	_randomize = false;	MoveArg(argc,argv,i,1);      }      else if (strcmp(&argv[i][1], "xlow") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_xLow = atof(argv[i+1]);	_hasXLow = true;	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "ylow") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_yLow = atof(argv[i+1]);	_hasYLow = true;	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "xhigh") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_xHigh = atof(argv[i+1]);	_hasXHigh = true;	MoveArg(argc,argv,i,2);      }      else if (strcmp(&argv[i][1], "yhigh") == 0) {	if (i >= argc -1)	  Usage(argv[0]);	_yHigh = atof(argv[i+1]);	_hasYHigh = true;	MoveArg(argc,argv,i,2);      }      else i++;    }    else i++;  }#endif#if 0  if (!journalName)    journalName = CreateUniqueFileName(argv[0]);#endif#if 0  Journal::Init(journalName, argc, args);#endif}void Init::BufPolicies(int &bufSize, Boolean &prefetch,		       BufPolicy::policy &policy, Boolean &existing){  bufSize = _bufferSize;  prefetch = _prefetch;  policy = _policy;  existing = _existing;}long Init::ProgModTime(){  return _progModTime;}int Init::PageSize(){  return _pageSize;}BufPolicy::policy Init::Policy(){  return _policy;}Boolean Init::GetXLow(Coord &xLow){   xLow = _xLow;  return _hasXLow;}Boolean Init::GetYLow(Coord &yLow){  yLow = _yLow;  return _hasYLow;}Boolean Init::GetXHigh(Coord &xHigh){  xHigh = _xHigh;  return _hasXHigh;}Boolean Init::GetYHigh(Coord &yHigh){  yHigh = _yHigh;  return _hasYHigh;}

⌨️ 快捷键说明

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