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 >
C/C++ Source or Header  |  1998-01-26  |  4KB  |  189 lines

  1.  
  2. /*
  3.     XA65 - 6502 CROSS ASSEMBLER AND UTILITY SUITE
  4.     cOPYRIGHT (c) 1989-1998 aNDR{$e9} fACHAT (A.FACHAT@PHYSIK.TU-CHEMNITZ.DE)
  5.  
  6.     tHIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
  7.     IT UNDER THE TERMS OF THE gnu gENERAL pUBLIC lICENSE AS PUBLISHED BY
  8.     THE fREE sOFTWARE fOUNDATION; EITHER VERSION 2 OF THE lICENSE, OR
  9.     (AT YOUR OPTION) ANY LATER VERSION.
  10.  
  11.     tHIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
  12.     BUT without any warranty; WITHOUT EVEN THE IMPLIED WARRANTY OF
  13.     merchantability OR fitness for a particular purpose.  sEE THE
  14.     gnu gENERAL pUBLIC lICENSE FOR MORE DETAILS.
  15.  
  16.     yOU SHOULD HAVE RECEIVED A COPY OF THE gnu gENERAL pUBLIC lICENSE
  17.     ALONG WITH THIS PROGRAM; IF NOT, WRITE TO THE fREE sOFTWARE
  18.     fOUNDATION, iNC., 675 mASS aVE, cAMBRIDGE, ma 02139, usa.
  19. */
  20.  
  21.  
  22. #INCLUDE <STDIO.H>
  23. #INCLUDE <STDLIB.H>
  24. #INCLUDE <STRING.H>
  25.  
  26. #INCLUDE "XAH.H"         /*   STRUCTS        */
  27.  
  28. STATIC INT NINC = 0;
  29. STATIC CHAR **NIP = null;
  30.  
  31. VOID REG_INCLUDE(CHAR *PATH) {$7b}
  32. CHAR **NIP2;
  33. IF(PATH && *PATH) {$7b}
  34.   NIP2 = REALLOC(NIP,SIZEOF(CHAR*)*(NINC+1));
  35.   IF(NIP2) {$7b}
  36.     NIP = NIP2;
  37.     NIP[NINC++] = PATH;
  38.   {$7d} ELSE {$7b}
  39.     FPRINTF(STDERR,"wARNING: COULDN' ALLOC MEM (REG_INCLUDE)\N");
  40.   {$7d}
  41. {$7d}
  42. {$7d}
  43.  
  44. file *XFOPEN(CONST CHAR *FN,CONST CHAR *MODE)
  45. {$7b}
  46. file *FILE;
  47. CHAR C,*CP,N[maxline],PATH[maxline];
  48. CHAR XNAME[maxline], N2[maxline];
  49. INT I,L=(INT)STRLEN(FN);
  50.  
  51. IF(L>=maxline) {$7b}
  52.   FPRINTF(STDERR,"FILENAME '%S' TOO LONG!\N",FN);
  53.   RETURN null;
  54. {$7d}
  55.  
  56. FOR(I=0;I<L+1;I++) {$7b}
  57.   XNAME[I]=((FN[I]=='\\')?dirchar:FN[I]);
  58. {$7d}
  59.  
  60. IF(MODE[0]=='R')
  61. {$7b}
  62.     IF((FILE=FOPEN(FN,MODE))==null 
  63. && (FILE=FOPEN(XNAME, MODE))==null) {$7b}
  64. FOR(I=0;(!FILE) && (I<NINC);I++) {$7b}
  65.   STRCPY(N,NIP[I]);
  66.   C=N[(INT)STRLEN(N)-1];
  67.   IF(C!=dirchar) STRCAT(N,dircstring);
  68.   STRCPY(N2,N);
  69.   STRCAT(N2,XNAME);
  70.   STRCAT(N,FN);
  71. /* PRINTF("NAME=%S,N2=%S,MODE=%S\N",N,N2,MODE); */
  72.   FILE=FOPEN(N,MODE);
  73.   IF(!FILE) FILE=FOPEN(N2,MODE);
  74. {$7d}
  75. IF((!FILE) && (CP=GETENV("xainput"))!=null)
  76. {$7b}
  77. STRCPY(PATH,CP);
  78. CP=STRTOK(PATH,",");
  79. WHILE(CP && !FILE)
  80. {$7b}
  81. IF(CP[0])
  82. {$7b}
  83. STRCPY(N,CP);
  84. C=N[(INT)STRLEN(N)-1];
  85. IF(C!=dirchar&&C!=':')
  86. STRCAT(N,dircstring);
  87. STRCPY(N2,N);
  88. STRCAT(N2,XNAME);
  89. STRCAT(N,FN);
  90. /* PRINTF("NAME=%S,N2=%S,MODE=%S\N",N,N2,MODE); */
  91. FILE=FOPEN(N,MODE);
  92. IF(!FILE) FILE=FOPEN(N2,MODE);
  93. {$7d}
  94. CP=STRTOK(null,",");
  95. {$7d}
  96. {$7d}
  97.     {$7d}
  98. {$7d} ELSE
  99. {$7b}
  100. IF((CP=GETENV("xaoutput"))!=null)
  101. {$7b}
  102. STRCPY(N,CP);
  103. IF(N[0])
  104. {$7b}
  105. C=N[(INT)STRLEN(N)-1];
  106. IF(C!=dirchar&&C!=':')
  107. STRCAT(N,dircstring);
  108. {$7d}
  109. CP=STRRCHR(FN,dirchar);
  110. IF(!CP)
  111. {$7b}
  112. CP=STRRCHR(FN,':');
  113. IF(!CP)
  114. CP=(CHAR*)FN;
  115. ELSE
  116. CP++;
  117. {$7d} ELSE
  118. CP++;
  119. STRCAT(N,CP);
  120. FILE=FOPEN(N,MODE);
  121. {$7d} ELSE
  122. FILE=FOPEN(FN,MODE);
  123. {$7d}
  124. IF(FILE)
  125. SETVBUF(FILE,null,_iofbf,bufsize);
  126.  
  127. RETURN(FILE);
  128. {$7d}
  129.  
  130. #IF 0
  131.  
  132. STATIC CHAR *M_BASE;
  133. STATIC CHAR *M_ACT;
  134. STATIC CHAR *M_END;
  135.  
  136. INT M_INIT(VOID) 
  137. {$7b}
  138.      INT ER=e_nomem;
  139.  
  140.      M_BASE=M_END=M_ACT=0l;
  141. /*
  142.      FPRINTF(STDERR, "memlen=%LD\N",memlen);
  143.      GETCHAR();
  144. */    
  145. /*
  146.      IF ((M_BASE=(CHAR*)MALLOC(memlen))!=null)
  147.      {$7b}
  148.           M_END =M_BASE+memlen;
  149.           M_ACT =(CHAR*)(((LONG)M_BASE+3)&0XFFFFFFFCL);
  150.           ER=e_ok;
  151.      {$7d}
  152.      ELSE M_BASE=null;
  153. */
  154.     ER=e_ok;
  155.  
  156.      RETURN(ER);
  157. {$7d}
  158.  
  159. VOID M_EXIT(VOID)
  160. {$7b}
  161. /*
  162. FREE(M_BASE);
  163. */
  164. {$7d}
  165.  
  166. INT M_ALLOC(LONG N, CHAR **ADR)
  167. {$7b}
  168.      INT ER=e_nomem;
  169.  
  170.      IF((*ADR=CALLOC(N,1))) {$7b}
  171. ER=e_ok;
  172.      {$7d}
  173. /*
  174.      IF(M_ACT+N<M_END)
  175.      {$7b}
  176.           *ADR=M_ACT;
  177.           M_ACT=M_ACT+N;
  178.           ER=e_ok;
  179.      {$7d}
  180. */
  181. /*
  182.      FPRINTF(STDERR, "M_ALLOC N=%LD ADR=%LX\N",N,*ADR);
  183.      GETCHAR();
  184. */     
  185.      RETURN(ER);
  186. {$7d}
  187.  
  188. #ENDIF
  189.