This is gck_main.c in view mode; [Download] [Up]
/* ******************************************************************** */
/* * GCK * */
/* * A Circuit Simulation Program * */
/* * by Tanju Cataltepe * */
/* * (c) Copyright 1989 * */
/* ******************************************************************** */
/* (c) Copyright 1989, Tanju Cataltepe */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#ifdef Macintosh
#include <console.h>
#include <Files.h>
#else
#include <sys/types.h>
#include <sys/stat.h>
#endif
#include <math.h>
#include <float.h>
#include "gck.h"
#define GLOBAL
#include "gck_vars.h"
#include "gck_protos.h"
#include "gck_errors.h"
void main(argc, argv)
int argc;
char *argv[];
{
long i;
long j;
boolean is_symbol;
boolean have_read_filename;
aWord temp;
#ifdef Macintosh
argc = ccommand(&argv);
#endif
timing.start = clock();
if (argc < 2)
errorReport(ERROR_ARGUMENT_USAGE, progName, ERR_VOID, 0);
initializeGlobals();
/* deal with command line */
have_read_filename = FALSE;
for (i = 1; i < argc; i++) {
is_symbol = FALSE;
strcpy(temp,argv[i]);
if (temp[0] == '-')
parseCommandLineOptions(temp);
else {
for (j = 0; j < (long) strlen(temp); j++) {
if (temp[j] == '=') {
is_symbol = TRUE;
break;
}
}
if (is_symbol == TRUE)
parseCommandLineSymbol(temp);
if (is_symbol == FALSE) {
if (have_read_filename == FALSE) {
have_read_filename = TRUE;
strcpy(rfile.filename,temp);
}
else
errorReport(ERROR_MULTIPLE_INPUT_FILES,0,ERR_VOID,0);
}
}
}
if (PRINT_NORMAL) {
fprintf(stderr,"GCKC, Version %s.",GCK_VERSION_RELEASE);
fprintf(stderr," \"A Circuit Simulation Program.\"\n");
fprintf(stderr,"(c) Copyright 1989, Tanju Cataltepe, University of California, Los Angeles\n");
fprintf(stderr,"(c) Copyright 1992, Roger Hayward, Oregon State University\n");
}
if ((rfile.filePtr[rfile.depth] = fopen(rfile.filename,"r")) == NULL)
errorReport(ERROR_INPUT_NOT_FOUND,rfile.filename,ERR_VOID,0);
/* some conditioning required */
readInputFile();
timing.read_file = clock();
if (PRINT_HIGHLIGHTS) {
fprintf(stderr,"Input Parser Complete. Time : %8lu Seconds.\n",
(clock_t) ((timing.read_file - timing.start) / CLOCKS_PER_SEC));
}
updateSymbols(); /* Update Command Line Symbols */
SetUpCircuit();
InitializeSystem();
CreateSourceList(); /* RdH */
MakeNonlinList();
MakeDigitalList();
MakeLogicalList();
SetUpVariables();
SetUpSources();
SetUpNodes();
SetUpNonlins();
SetUpDigital();
SetUpPrint();
SetUpFFT();
SetUpStubSample();
timing.setup = clock();
if (PRINT_HIGHLIGHTS) {
fprintf(stderr,"Circuit Setup Complete. Time : %8lu Seconds.\n",
(clock_t) ((timing.setup - timing.read_file) / CLOCKS_PER_SEC));
}
if ((PRINT_HIGHLIGHTS)
&& (up_to_date == FALSE)
&& (flag_compiler == COMPILER_QUICK_MODE)) {
fprintf(stderr,"*GCKC Warning: Unable to Quick Compile -- System Not Up-to-date.\n");
}
if ((up_to_date == FALSE)
|| (flag_compiler == COMPILER_FORCE_COMPILATION)
|| (flag_compiler == COMPILER_COMPILE_AND_QUIT))
BuildSystem();
else
BuildQuickSystem();
timing.solve = clock();
if (PRINT_HIGHLIGHTS) {
fprintf(stderr,"Circuit Solution Complete. Time : %8lu Seconds.\n",
(clock_t) ((timing.solve - timing.setup) / CLOCKS_PER_SEC));
}
if (flag_compiler == COMPILER_COMPILE_AND_QUIT) {
if (PRINT_NORMAL) {
fprintf(stderr,"*Simulation Suspended.\n");
fprintf(stderr,"GCKC Program Complete. Time : %8lu Seconds.\n",
(clock_t) ((timing.solve - timing.start) / CLOCKS_PER_SEC));
}
exit_now();
}
fastTick = 0;
RunSources();
while ((((The_Time) < lastTime) && !terminate_on_eof)
|| (terminate_on_eof && !terminate)){ /* RdH */
presentTick = fastTick % NoOfTicks + 1;
GetFromSystem(&presentSys, presentTick);
RunSystem(&presentSys);
RunNonlins();
RunNodes();
RunDigital();
RunLogical();
The_Time += deltaT;
if (GetValue(sampleTicks->value, presentTick) != 0) {
RunPrint();
RunFFT(); /* doesn't really FFT anything */
}
RunSources();
fastTick++;
}
timing.simulate = clock();
if (PRINT_HIGHLIGHTS) {
fprintf(stderr,"Circuit Simulation Complete. Time : %8lu Seconds.\n",
(clock_t) ((timing.simulate - timing.solve) / CLOCKS_PER_SEC));
}
/* post process */
/* perform_fft's_here() */
process_fft();
print_fft();
timing.post_process = clock();
if (PRINT_HIGHLIGHTS) {
fprintf(stderr,"Post Processing Complete. Time : %8lu Seconds.\n",
(clock_t) ((timing.post_process - timing.simulate) / CLOCKS_PER_SEC));
}
if (PRINT_NORMAL) {
fprintf(stderr,"GCKC Program Complete. Time : %8lu Seconds.\n",
(clock_t) ((timing.post_process - timing.start) / CLOCKS_PER_SEC));
}
exit_now();
}
/* End. */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.