home *** CD-ROM | disk | FTP | other *** search
-
- /*
- 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 "XAH.H"
- #INCLUDE "XAR.H"
- #INCLUDE "XA.H"
- #INCLUDE "XAT.H"
- #INCLUDE "XAO.H"
-
- /*
- STATIC fOPT *OLIST =null;
- STATIC INT MLIST =0;
- STATIC INT NLIST =0;
- */
-
- /* SETS FILE OPTION AFTER PASS 1 */
- VOID SET_FOPT(INT L, SIGNED CHAR *BUF, INT REALLEN) {$7b}
- /*PRINTF("SET_FOPT(%S, L=%D\N",BUF,L);*/
- WHILE(AFILE->FO.MLIST<=AFILE->FO.NLIST) {$7b}
- AFILE->FO.MLIST +=5;
- AFILE->FO.OLIST = REALLOC(AFILE->FO.OLIST, AFILE->FO.MLIST*SIZEOF(fOPT));
- IF(!AFILE->FO.OLIST) {$7b}
- FPRINTF(STDERR, "fATAL: cOULDN'T ALLOC MEMORY (%LD BYTES) FOR FOPT LIST!\N",
- AFILE->FO.MLIST*SIZEOF(fOPT));
- EXIT(1);
- {$7d}
- {$7d}
- AFILE->FO.OLIST[AFILE->FO.NLIST].TEXT=MALLOC(L);
- IF(!AFILE->FO.OLIST[AFILE->FO.NLIST].TEXT) {$7b}
- FPRINTF(STDERR, "fATAL: cOULDN'T ALLOC MEMORY (%D BYTES) FOR FOPT!\N",L);
- EXIT(1);
- {$7d}
- MEMCPY(AFILE->FO.OLIST[AFILE->FO.NLIST].TEXT, BUF, L);
- AFILE->FO.OLIST[AFILE->FO.NLIST++].LEN = REALLEN;
- {$7d}
-
- /* WRITES FILE OPTIONS TO A FILE */
- VOID O_WRITE(file *FP) {$7b}
- INT I,J,L,AFL;
- SIGNED CHAR *T;
-
- FOR(I=0;I<AFILE->FO.NLIST;I++) {$7b}
- L=AFILE->FO.OLIST[I].LEN;
- T=AFILE->FO.OLIST[I].TEXT;
- T_P2(T, &L, 1, &AFL);
-
- IF(L>254) {$7b}
- ERROUT(e_optlen);
- {$7d} ELSE {$7b}
- FPUTC((L+1)&0XFF,FP);
- {$7d}
- FOR(J=0;J<L;J++) {$7b}
- FPUTC(T[J],FP);
- /*PRINTF("%02X ", T[J]); */
- {$7d}
- /*PRINTF("\N");*/
- {$7d}
- FPUTC(0,FP);/* END OPTION LIST */
-
- FOR(I=0;I<AFILE->FO.NLIST;I++) {$7b}
- FREE(AFILE->FO.OLIST[I].TEXT);
- {$7d}
- FREE(AFILE->FO.OLIST);
- AFILE->FO.OLIST = null;
- AFILE->FO.NLIST = 0;
- AFILE->FO.MLIST = 0;
- {$7d}
-
- SIZE_T O_LENGTH(VOID) {$7b}
- INT I;
- SIZE_T N = 0;
- FOR(I=0;I<AFILE->FO.NLIST;I++) {$7b}
- /*PRINTF("FOUND OPTION: %S, LEN=%D, N=%D\N", AFILE->FO.OLIST[I].TEXT, AFILE->FO.OLIST[I].LEN,N);*/
- N += AFILE->FO.OLIST[I].LEN +1;
- {$7d}
- RETURN ++N;
- {$7d}
-
-