home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CBM Funet Archive
/
cbm-funet-archive-2003.iso
/
cbm
/
programming
/
msdos
/
xa214f.lzh
/
xa214f
/
src
/
xam.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-01-26
|
4KB
|
189 lines
/*
XA65 - 6502 CROSS ASSEMBLER AND UTILITY SUITE
cOPYRIGHT (c) 1989-1998 aNDR{$e9} fACHAT (A.FACHAT@PHYSIK.TU-CHEMNITZ.DE)
tHIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
IT UNDER THE TERMS OF THE gnu gENERAL pUBLIC lICENSE AS PUBLISHED BY
THE fREE sOFTWARE fOUNDATION; EITHER VERSION 2 OF THE lICENSE, OR
(AT YOUR OPTION) ANY LATER VERSION.
tHIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
BUT without any warranty; WITHOUT EVEN THE IMPLIED WARRANTY OF
merchantability OR fitness for a particular purpose. sEE THE
gnu gENERAL pUBLIC lICENSE FOR MORE DETAILS.
yOU SHOULD HAVE RECEIVED A COPY OF THE gnu gENERAL pUBLIC lICENSE
ALONG WITH THIS PROGRAM; IF NOT, WRITE TO THE fREE sOFTWARE
fOUNDATION, iNC., 675 mASS aVE, cAMBRIDGE, ma 02139, usa.
*/
#INCLUDE <STDIO.H>
#INCLUDE <STDLIB.H>
#INCLUDE <STRING.H>
#INCLUDE "XAH.H" /* STRUCTS */
STATIC INT NINC = 0;
STATIC CHAR **NIP = null;
VOID REG_INCLUDE(CHAR *PATH) {$7b}
CHAR **NIP2;
IF(PATH && *PATH) {$7b}
NIP2 = REALLOC(NIP,SIZEOF(CHAR*)*(NINC+1));
IF(NIP2) {$7b}
NIP = NIP2;
NIP[NINC++] = PATH;
{$7d} ELSE {$7b}
FPRINTF(STDERR,"wARNING: COULDN' ALLOC MEM (REG_INCLUDE)\N");
{$7d}
{$7d}
{$7d}
file *XFOPEN(CONST CHAR *FN,CONST CHAR *MODE)
{$7b}
file *FILE;
CHAR C,*CP,N[maxline],PATH[maxline];
CHAR XNAME[maxline], N2[maxline];
INT I,L=(INT)STRLEN(FN);
IF(L>=maxline) {$7b}
FPRINTF(STDERR,"FILENAME '%S' TOO LONG!\N",FN);
RETURN null;
{$7d}
FOR(I=0;I<L+1;I++) {$7b}
XNAME[I]=((FN[I]=='\\')?dirchar:FN[I]);
{$7d}
IF(MODE[0]=='R')
{$7b}
IF((FILE=FOPEN(FN,MODE))==null
&& (FILE=FOPEN(XNAME, MODE))==null) {$7b}
FOR(I=0;(!FILE) && (I<NINC);I++) {$7b}
STRCPY(N,NIP[I]);
C=N[(INT)STRLEN(N)-1];
IF(C!=dirchar) STRCAT(N,dircstring);
STRCPY(N2,N);
STRCAT(N2,XNAME);
STRCAT(N,FN);
/* PRINTF("NAME=%S,N2=%S,MODE=%S\N",N,N2,MODE); */
FILE=FOPEN(N,MODE);
IF(!FILE) FILE=FOPEN(N2,MODE);
{$7d}
IF((!FILE) && (CP=GETENV("xainput"))!=null)
{$7b}
STRCPY(PATH,CP);
CP=STRTOK(PATH,",");
WHILE(CP && !FILE)
{$7b}
IF(CP[0])
{$7b}
STRCPY(N,CP);
C=N[(INT)STRLEN(N)-1];
IF(C!=dirchar&&C!=':')
STRCAT(N,dircstring);
STRCPY(N2,N);
STRCAT(N2,XNAME);
STRCAT(N,FN);
/* PRINTF("NAME=%S,N2=%S,MODE=%S\N",N,N2,MODE); */
FILE=FOPEN(N,MODE);
IF(!FILE) FILE=FOPEN(N2,MODE);
{$7d}
CP=STRTOK(null,",");
{$7d}
{$7d}
{$7d}
{$7d} ELSE
{$7b}
IF((CP=GETENV("xaoutput"))!=null)
{$7b}
STRCPY(N,CP);
IF(N[0])
{$7b}
C=N[(INT)STRLEN(N)-1];
IF(C!=dirchar&&C!=':')
STRCAT(N,dircstring);
{$7d}
CP=STRRCHR(FN,dirchar);
IF(!CP)
{$7b}
CP=STRRCHR(FN,':');
IF(!CP)
CP=(CHAR*)FN;
ELSE
CP++;
{$7d} ELSE
CP++;
STRCAT(N,CP);
FILE=FOPEN(N,MODE);
{$7d} ELSE
FILE=FOPEN(FN,MODE);
{$7d}
IF(FILE)
SETVBUF(FILE,null,_iofbf,bufsize);
RETURN(FILE);
{$7d}
#IF 0
STATIC CHAR *M_BASE;
STATIC CHAR *M_ACT;
STATIC CHAR *M_END;
INT M_INIT(VOID)
{$7b}
INT ER=e_nomem;
M_BASE=M_END=M_ACT=0l;
/*
FPRINTF(STDERR, "memlen=%LD\N",memlen);
GETCHAR();
*/
/*
IF ((M_BASE=(CHAR*)MALLOC(memlen))!=null)
{$7b}
M_END =M_BASE+memlen;
M_ACT =(CHAR*)(((LONG)M_BASE+3)&0XFFFFFFFCL);
ER=e_ok;
{$7d}
ELSE M_BASE=null;
*/
ER=e_ok;
RETURN(ER);
{$7d}
VOID M_EXIT(VOID)
{$7b}
/*
FREE(M_BASE);
*/
{$7d}
INT M_ALLOC(LONG N, CHAR **ADR)
{$7b}
INT ER=e_nomem;
IF((*ADR=CALLOC(N,1))) {$7b}
ER=e_ok;
{$7d}
/*
IF(M_ACT+N<M_END)
{$7b}
*ADR=M_ACT;
M_ACT=M_ACT+N;
ER=e_ok;
{$7d}
*/
/*
FPRINTF(STDERR, "M_ALLOC N=%LD ADR=%LX\N",N,*ADR);
GETCHAR();
*/
RETURN(ER);
{$7d}
#ENDIF