/* Copyright 1995-1996 : David Atkinson */
/* V1.22 Control.c */
/* Calgor */

#include<clib/alib_protos.h>
#include<clib/exec_protos.h>
#include<clib/dos_protos.h>
#include<clib/icon_protos.h>

#include<time.h>
#include<stdlib.h>
#include<stdio.h>
#include<Workbench/startup.h>
#include<string.h>
#include<hold/mowd.h>
#include<hold/extra.h>

int last=0;
int dem_num=-1;
int stop=0;
int Next=0;
FILE *stdinout=NULL;
LONG Mdtype = UK;
LONG Prilevel=0L;

#ifdef TEST
SHORT Diagnostic = 0;
#endif

int main(int argc, char *argv[])
{
extern void cleanup(void);
extern op_liblob(void);
extern viewstart(void);
extern void viewportstart(void);
extern void bit_init(void);
extern void ras_init(void);
extern void show_display(int);
extern void close_display(void);
extern void acquire_bits(int);
extern void back_drop(void);
extern void get_palette(int);
extern void get_editor(void);
extern void copy_object(int, long, long, struct Bitmap *);
extern void opttext(void);
extern void write_opt(int,long);
extern void menu_opt(void);
extern void clean_args(void);
extern void chose_mode(LONG);
extern LONG scrtime(void);
extern changepri(LONG);

#ifdef TEST
extern void clear_log(void);
extern void write_log(TEXT *,SHORT);
#endif


  #ifndef TEST
    if(argc > 3){
      printf("Usage: Calgor [PAL | NTSC] [0-5] (pri lv)\n");
      exit(10);
    }
  #endif
  #ifdef TEST
    if(argc > 4){
      printf("Usage: Calgor [PAL | NTSC] [0-5] (pri lv) [0-4] (Diagnostic)\n");
      clear_log();
      write_log("Usage: Calgor (PAL | NTSC) Ton\n",PRIZERO);
    }
  #endif
  if(argc > 1){
    if(strcmp(argv[1],"PAL")==0 ) Mdtype = UK;
    if(strcmp(argv[1],"NTSC")==0 ) Mdtype = OTHER;
    if(strcmp(argv[1],"pal")==0 ) Mdtype = UK;
    if(strcmp(argv[1],"ntsc")==0 ) Mdtype = OTHER;
    if(strcmp(argv[1],"?")==0 ){
      #ifdef TEST
        printf("Usage: Calgor [PAL|NTSC] [0-5] (pri lv) [0-4] (Diagnostic)\n");
        clear_log();
        write_log("Usage: Calgor [PAL|NTSC] [0-5] (pri lv) [0-4] (Diagnostic)\n",PRIZERO);
      #endif
      #ifndef TEST
        printf("Usage: Calgor [PAL|NTSC] [0-5] (pri lv)\n");
      #endif
      exit(10);
    }
  }
  if(argc > 2){
    if(strcmp(argv[2],"1")==0 ) Prilevel = 1;
    if(strcmp(argv[2],"2")==0 ) Prilevel = 2;
    if(strcmp(argv[2],"3")==0 ) Prilevel = 3;
    if(strcmp(argv[2],"4")==0 ) Prilevel = 4;
    if(strcmp(argv[2],"5")==0 ) Prilevel = 5;
  }
  #ifdef TEST
    if(argc > 3){
      if(strcmp(argv[3],"1")==0 ) Diagnostic = 1;
      if(strcmp(argv[3],"2")==0 ) Diagnostic = 2;
      if(strcmp(argv[3],"3")==0 ) Diagnostic = 3;
      if(strcmp(argv[3],"4")==0 ) Diagnostic = 4;
    }
    clear_log();
  #endif
  clean_args(); /* Make sure we don't free a random pointer */
  op_liblob();
  changepri(Prilevel);
  chose_mode(Mdtype);
  get_palette(1);
  get_palette(2);
  bit_init();
  acquire_bits(1);
  acquire_bits(2);
  acquire_bits(3);
  get_editor();
  opttext();
  back_drop();
  viewstart();
  ras_init();
  viewportstart();
  show_display(1);
  write_opt(0,0L);
  menu_opt();
  cleanup();
  exit(0);
}

int wbmain(struct WBStartup *wbs){
struct Library *IconBase=0;
struct DiskObject *calicon=0;
char *anotherm = NULL;

   IconBase = OpenLibrary("icon.library",33);
   if(IconBase==0){
     #ifdef TEST
       clear_log();
       write_log("Failed open Icon Library V33\n",PRIZERO);
     #endif
     exit(10);
   }
   if(wbs->sm_NumArgs>1){
     #ifdef TEST
       clear_log();
       write_log("Can't operate on other icons\n",PRIZERO);
     #endif
     if(IconBase!=0)
       CloseLibrary(IconBase);
     exit(10);
   }
   calicon = GetDiskObject("Calgor");
   if(calicon==0){
     #ifdef TEST
       clear_log();
       write_log("Failed to read Calgor.info file\n",PRIZERO);
     #endif
     if(IconBase!=0)
       CloseLibrary(IconBase);
     exit(12);
   }
   else{
     anotherm=FindToolType(calicon->do_ToolTypes,"MODE");
     if(anotherm!=NULL){
       if(strcmp(anotherm,"PAL")==0 ) Mdtype = UK;
       if(strcmp(anotherm,"NTSC")==0 ) Mdtype = OTHER;
       if(strcmp(anotherm,"pal")==0 ) Mdtype = UK;
       if(strcmp(anotherm,"ntsc")==0 ) Mdtype = OTHER;
     }
     anotherm=FindToolType(calicon->do_ToolTypes,"PRIORITY");
     if(anotherm!=NULL){
       if(strcmp(anotherm,"0")==0 ) Prilevel=0;
       if(strcmp(anotherm,"1")==0 ) Prilevel=1;
       if(strcmp(anotherm,"2")==0 ) Prilevel=2;
       if(strcmp(anotherm,"3")==0 ) Prilevel=3;
       if(strcmp(anotherm,"4")==0 ) Prilevel=4;
       if(strcmp(anotherm,"5")==0 ) Prilevel=5;
     }
     #ifdef TEST
       anotherm=FindToolType(calicon->do_ToolTypes,"DIAGNOSTIC");
       if(anotherm!=NULL){
         if(strcmp(anotherm,"0")==0 ) Diagnostic=0;
         if(strcmp(anotherm,"1")==0 ) Diagnostic=1;
         if(strcmp(anotherm,"2")==0 ) Diagnostic=2;
         if(strcmp(anotherm,"3")==0 ) Diagnostic=3;
         if(strcmp(anotherm,"4")==0 ) Diagnostic=4;
       }
     #endif
   }
   if(calicon!=0)
     FreeDiskObject(calicon);
   if(IconBase!=0)
     CloseLibrary(IconBase);
   main(0,NULL);
}
