home *** CD-ROM | disk | FTP | other *** search
- #define VERSION "1.18"
- #define LAST_CHANGED "920229"
- static char VersionTag[] = "\0$VER: DT v" VERSION " - MLO " LAST_CHANGED ;
-
- #define OUT_WINDOW_MAX_HT 100
-
- extern struct IntuitionBase *IntuitionBase;
-
- /* _main.c Copyright (C) 1985 Lattice, Inc.
- * Slightly hacked by MLO for DT.c
- */
-
- #include <stdio.h>
- #include <fcntl.h>
- #include <ios1.h>
- #include <stdlib.h>
- #include <workbench/startup.h>
- #include <libraries/dos.h>
- #include <libraries/dosextens.h>
- #include <intuition/intuitionbase.h>
- #include <proto/dos.h>
- #include <proto/exec.h>
- #include <proto/intuition.h>
- #include "mlo.h"
- #include "proto.h"
-
- #define MAXARG 32 /* maximum command line arguments */
- #define QUOTE '"'
-
- #define isspace(c) ((c == ' ') || (c == '\t') || (c == '\n'))
-
- extern int _fmode;
- extern int (*_ONBREAK)();
- extern struct UFB _ufbs[];
-
- static int argc = 0; /* arg count */
- static char **targv; /* arg pointers */
- static char *argv[MAXARG];
-
- #define MAXWINDOW 40
- extern struct WBStartup *WBenchMsg;
-
- /**
- *
- * name _main - process command line, open files, and call "main"
- *
- * synopsis _main(line);
- * char *line; ptr to command line that caused execution
- *
- * description This function performs the standard pre-processing for
- * the main module of a C program. It accepts a command
- * line of the form
- *
- * pgmname arg1 arg2 ...
- *
- * and builds a list of pointers to each argument. The first
- * pointer is to the program name. For some environments, the
- * standard I/O files are also opened, using file names that
- * were set up by the OS interface module XCMAIN.
- *
- **/
- void _main(
- register char *line
- ){
- register char **pargv;
- register int x;
- struct Process *process;
- struct FileHandle *handle;
- static char window[MAXWINDOW+18];
-
- /*
- *
- * Build argument pointer list
- *
- */
- while (argc < MAXARG) {
- while (isspace(*line)) line++;
- if (*line == '\0') break;
- pargv = &argv[argc++];
- if (*line == QUOTE) {
- *pargv = ++line; /* ptr inside quoted string */
- while ((*line != '\0') && (*line != QUOTE)) line++;
- if (*line == '\0') _exit(1);
- else *line++ = '\0'; /* terminate arg */
- } else {
- *pargv = line; /* non-quoted arg */
- while ((*line != '\0') && (!isspace(*line))) line++;
- if (*line == '\0') break;
- else *line++ = '\0'; /* terminate arg */
- }
- }
- targv = (argc == 0) ? (char **) WBenchMsg : (char **) &argv[0];
-
- /*
- *
- * Open standard files
- *
- */
-
- if (argc == 0) {
- long lock; /* running under workbench */
- int sWidth, sHeight;
-
- /* Open intuition library */
-
- if ((IntuitionBase =
- (struct IntuitionBase *) OpenLibrary("intuition.library", 0L))
- == NULL) cleanup(SYS_ABORT_CODE);
-
- lock = LockIBase(0);
- sWidth = IntuitionBase->ActiveScreen->Width;
- sHeight = IntuitionBase->ActiveScreen->Height;
- UnlockIBase(lock);
-
- if (sHeight > OUT_WINDOW_MAX_HT) sHeight = OUT_WINDOW_MAX_HT;
- sprintf(window, "Con:0/0/%d/%d/\"DT\" - v%s - MLO %s ",
- sWidth, sHeight, VERSION, LAST_CHANGED);
- _ufbs[0].ufbfh = Open(window,MODE_NEWFILE);
- _ufbs[1].ufbfh = _ufbs[0].ufbfh;
- _ufbs[1].ufbflg = UFB_NC;
- _ufbs[2].ufbfh = _ufbs[0].ufbfh;
- _ufbs[2].ufbflg = UFB_NC;
- handle = (struct FileHandle *) (_ufbs[0].ufbfh << 2);
- process = (struct Process *) FindTask(NULL);
- process->pr_ConsoleTask = (APTR) handle->fh_Type;
- x = 0;
- } else {
- _ufbs[0].ufbfh = Input(); /* running under CLI */
- _ufbs[1].ufbfh = Output();
- _ufbs[2].ufbfh = Open("*", MODE_OLDFILE);
- x = UFB_NC; /* do not close CLI defaults */
- }
-
- _ufbs[0].ufbflg |= UFB_RA | O_RAW | x;
- _ufbs[1].ufbflg |= UFB_WA | O_RAW | x;
- _ufbs[2].ufbflg |= UFB_RA | UFB_WA | O_RAW;
-
- x = (_fmode) ? 0 : _IOXLAT;
- stdin->_file = 0;
- stdin->_flag = _IOREAD | x;
- stdout->_file = 1;
- stdout->_flag = _IOWRT | x;
- stderr->_file = 2;
- stderr->_flag = _IORW | x;
-
- /* establish control-c handler */
-
- _ONBREAK = CXBRK;
-
- /* Print header (if from CLI) */
-
- if (argc) fprintf(stdout, "\n\t\"DT\" - v%s - MLO %s\n\n",
- VERSION, LAST_CHANGED);
-
- /* Call user's main program */
-
- main(argc, targv);
- exit(0);
- }
-