home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / programming / msdos / xa214f.lzh / xa214f / src / xao.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-01-26  |  2.6 KB  |  100 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.  
  25. #INCLUDE "XAH.H"
  26. #INCLUDE "XAR.H"
  27. #INCLUDE "XA.H"
  28. #INCLUDE "XAT.H"
  29. #INCLUDE "XAO.H"
  30.  
  31. /*
  32. STATIC fOPT *OLIST =null;
  33. STATIC INT MLIST  =0;
  34. STATIC INT NLIST  =0;
  35. */
  36.  
  37. /* SETS FILE OPTION AFTER PASS 1 */
  38. VOID SET_FOPT(INT L, SIGNED CHAR *BUF, INT REALLEN) {$7b}
  39. /*PRINTF("SET_FOPT(%S, L=%D\N",BUF,L);*/
  40. WHILE(AFILE->FO.MLIST<=AFILE->FO.NLIST) {$7b}
  41.   AFILE->FO.MLIST +=5;
  42.   AFILE->FO.OLIST = REALLOC(AFILE->FO.OLIST, AFILE->FO.MLIST*SIZEOF(fOPT));
  43.   IF(!AFILE->FO.OLIST) {$7b}
  44.     FPRINTF(STDERR, "fATAL: cOULDN'T ALLOC MEMORY (%LD BYTES) FOR FOPT LIST!\N",
  45. AFILE->FO.MLIST*SIZEOF(fOPT));
  46.     EXIT(1);
  47.   {$7d}
  48. {$7d}
  49. AFILE->FO.OLIST[AFILE->FO.NLIST].TEXT=MALLOC(L);
  50. IF(!AFILE->FO.OLIST[AFILE->FO.NLIST].TEXT) {$7b}
  51.   FPRINTF(STDERR, "fATAL: cOULDN'T ALLOC MEMORY (%D BYTES) FOR FOPT!\N",L);
  52.   EXIT(1);
  53. {$7d}
  54. MEMCPY(AFILE->FO.OLIST[AFILE->FO.NLIST].TEXT, BUF, L);
  55. AFILE->FO.OLIST[AFILE->FO.NLIST++].LEN = REALLEN;
  56. {$7d}
  57.  
  58. /* WRITES FILE OPTIONS TO A FILE */
  59. VOID O_WRITE(file *FP) {$7b}
  60. INT I,J,L,AFL;
  61. SIGNED CHAR *T;
  62.  
  63. FOR(I=0;I<AFILE->FO.NLIST;I++) {$7b}
  64.   L=AFILE->FO.OLIST[I].LEN;
  65.   T=AFILE->FO.OLIST[I].TEXT;
  66.   T_P2(T, &L, 1, &AFL);
  67.  
  68.   IF(L>254) {$7b}
  69.     ERROUT(e_optlen);
  70.   {$7d} ELSE {$7b}
  71.     FPUTC((L+1)&0XFF,FP);
  72.   {$7d}
  73.           FOR(J=0;J<L;J++) {$7b} 
  74.     FPUTC(T[J],FP);
  75.     /*PRINTF("%02X ", T[J]); */
  76.   {$7d}
  77.   /*PRINTF("\N");*/
  78. {$7d}
  79. FPUTC(0,FP);/* END OPTION LIST */
  80.  
  81. FOR(I=0;I<AFILE->FO.NLIST;I++) {$7b}
  82.   FREE(AFILE->FO.OLIST[I].TEXT);
  83. {$7d}
  84. FREE(AFILE->FO.OLIST);
  85. AFILE->FO.OLIST = null;
  86. AFILE->FO.NLIST = 0;
  87. AFILE->FO.MLIST = 0;
  88. {$7d}
  89.  
  90. SIZE_T O_LENGTH(VOID) {$7b}
  91. INT I;
  92. SIZE_T N = 0;
  93. FOR(I=0;I<AFILE->FO.NLIST;I++) {$7b}
  94. /*PRINTF("FOUND OPTION: %S, LEN=%D, N=%D\N", AFILE->FO.OLIST[I].TEXT, AFILE->FO.OLIST[I].LEN,N);*/
  95.   N += AFILE->FO.OLIST[I].LEN +1;
  96. {$7d}
  97. RETURN ++N;
  98. {$7d}
  99.  
  100.