home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fish 'n' More 2
/
fishmore-publicdomainlibraryvol.ii1991xetec.iso
/
fish
/
applications
/
xlispstat
/
src
/
src1.lzh
/
Amiga
/
init.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-10-11
|
4KB
|
128 lines
/* Init.c - Amiga specific initialization routines */
/* Copyright (c) 1990 by J.K. Lindsey */
/* Additions to XLISP-STAT 2.1 Copyright (c) 1990, by Luke Tierney */
/* Additions to Xlisp 2.1, Copyright (c) 1989 by David Michael Betz */
/* You may give out copies of this software; for conditions see the */
/* file COPYING included with this distribution. */
#include <proto/intuition.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <workbench/startup.h>
#include <exec/memory.h>
#include <stdlib.h>
#include <string.h>
#include "autil2.h"
#define V 33
extern struct IntuitionBase *IntuitionBase;
extern struct MathBase *MathBase;
extern struct MathTransBase *MathTransBase;
extern struct GfxBase *GfxBase;
struct DosBase *DosBase;
struct IconBase *IconBase;
openlibs(){
IntuitionBase=0; MathBase=0; MathTransBase=0; GfxBase=0;
IconBase=0; DosBase=0;
if(!(DosBase=(struct DosBase *)OpenLibrary("dos.library",V)))return(1);
if(!(IntuitionBase=(struct IntuitionBase *)OpenLibrary(
"intuition.library",V)))return(1);
if(!(IconBase=(struct IconBase *)OpenLibrary("icon.library",V)))return(1);
if(!(GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",V)))return(1);
if(!(MathBase=(struct MathBase *)OpenLibrary("mathffp.library",V)))return(1);
if(!(MathTransBase=(struct MathTransBase *)OpenLibrary(
"mathtrans.library",V)))return(1);
return(0);}
void closelibs(){
if(MathTransBase)CloseLibrary((struct Library *)MathTransBase);
if(MathBase)CloseLibrary((struct Library *)MathBase);
if(GfxBase)CloseLibrary((struct Library *)GfxBase);
if(IconBase)CloseLibrary((struct Library *)IconBase);
if(IntuitionBase)CloseLibrary((struct Library *)IntuitionBase);
if(DosBase)CloseLibrary((struct Library *)DosBase);}
extern struct WBStartup *WBenchMsg;
int FindRoot(BPTR,char []);
void SplitName(char []);
FindStart(argc,argv,start,project,defdir)
int *argc;
unsigned char *argv[];
char start[],project[],defdir[];{
BPTR lock,plock;
short Cli;
int i;
struct WBArg *arg;
char buffer[80];
if(*argc){
Cli=1;
plock=Lock(argv[0],ACCESS_READ);
lock=ParentDir(plock);
UnLock(plock);
SplitName(argv[0]);}
else {
Cli=0;
*argc=WBenchMsg->sm_NumArgs;
arg=WBenchMsg->sm_ArgList;
lock=arg->wa_Lock;
for(i=0;i<*argc;i++,arg++){
if(!(argv[i]=malloc(strlen(arg->wa_Name)+1)))return(1);
strcpy(argv[i],arg->wa_Name);
if(i==1)CurrentDir(arg->wa_Lock);}}
if(!Cli&&(*argc>1))start[0]=0;
else if(FindRoot(lock,start))return(0);
if(Cli)UnLock(lock);
strcat(start,argv[0]);
if((*argc)>1){
if(Cli){
for(i=1;i<*argc;i++)if(argv[i][0]!='-'){
if(lock=Lock(argv[i],ACCESS_READ)){
plock=ParentDir(lock);
UnLock(lock);
strcpy(buffer,argv[i]);
SplitName(buffer);
if(FindRoot(plock,defdir))return(1);
UnLock(plock);
strcpy(project,defdir);
strcat(project,buffer);}
break;}}
else {
strcpy(project,argv[1]);
defdir[0]=0;}}
if(*argc==1)defdir[0]=project[0]=0;
return(0);}
static FindRoot(lock,dir)
BPTR lock;
char dir[];{
struct FileInfoBlock *FInfo;
BPTR plock;
short i;
char temp[50];
temp[0]=0;
if(!(FInfo=(struct FileInfoBlock *)AllocMem(sizeof(struct FileInfoBlock),
MEMF_PUBLIC)))return(1);
i=0;
while(plock=ParentDir(lock)){
Examine(lock,FInfo);
if(i)UnLock(lock);
else i=1;
lock=plock;
strcpy(dir,FInfo->fib_FileName);
strcat(dir,"/");
strcat(dir,temp);
strcpy(temp,dir);}
Examine(lock,FInfo);
if(i)UnLock(lock);
strcpy(dir,FInfo->fib_FileName);
strcat(dir,":");
strcat(dir,temp);
FreeMem((char *)FInfo,sizeof(struct FileInfoBlock));
return(0);}
static void SplitName(fn)
char fn[];{
int i,j,k;
for(i=(k=strlen(fn))-1;i>=0;i--)if(fn[i]=='/'||fn[i]==':')break;
for(j=i+1;j<=k;j++)fn[j-i-1]=fn[j];}