//#define DEBUG ;test file IO //#define DEBUG2 ;test pasm //#define DEBUG3 ;test readln // PreASMmbler v1.2 32bit // By:Peter Quiring /*---------------------------------------------------------------------------- Version 1.20 NEW : handles single quotes into double quotes (you no longer need to double them up yourself Version 1.11 NEW : expand /t into tab Version 1.10 NEW : no extra spaces between 'include' and 'file' were allowed : major improvment in error handling : \" will work now (use to have to use "" - which will still work) : null strings now work Version 1.04 NEW : Now the INCLUDE enviro str can have multiple paths : seperated by ; Version 1.03 NEW : 32bit using DOS32 : Buffered input/output (greatly increases speed!) : \r=13, \n=10, \0=0 (\n use to =13,10) Version 1.02 NEW : \0 will insert a ,0, into the string Version 1.01 NEW : Now handles comment blocks known bugs: v1.0 -none known bugs: v0.1 áeta -can't not have ; or ' or " within quotes Current version limitations: - Keeps all files open (until they are done), so you need a handle for each file when there are includes... future improvments: -merge duplicate strings (now I could with 32bit power - so much RAM) ----------------------------------------------------------------------------*/ #include #include #include #include #include #include #include #define mh 64 //max handles (the incs) #define bufsiz 8*1024 //buffer size (BUG! make larger after debugging) byte buf[256]; //current line byte *bufo1; byte *bufo2; word bufp1,bufp2; byte * bufin[mh]; word bufip[mh]; word bufis[mh]; byte buffn[mh][80]; word bufln[mh]; word cnum; //current string number int ho1; // handle out for large ASM file (asm.tmp) byte ho1on; //handle above has been created int ho2; // handle out for special data segment! (_str_.tmp) int h; // current file handle int hs[mh]; // handles (all kept in place) (requires a lot of handles in config.sys) byte ch; // current handle # byte foundit; // flag to indicate we found #include! byte EOFF[mh]; // flag (indicates that we have hit EOF) //byte EOFF2[mh]; // flag (indicates that the current buffer is last one) byte *file; //pts to filename to open byte str[255]; byte str2[255]; byte str3[255]; byte enter[3]={13,10,0}; byte *inc; //INCLUDE name from enviroment word incsiz; //size of inc string byte t2[80]; byte anulstr; void flush(void); void prefile(void); #include "err-p.h" #include "readln.h" #include "do.h" #include "pasm.h" void main(void) { byte a; printf("Pre Assembler v1.2 32bit (by : Peter Quiring)\n"); ho1on=0; bufp1=0; bufp2=0; bufo1=(void *)malloc(bufsiz); bufo2=(void *)malloc(bufsiz); if ( ((dword)bufo1==ERROR) || ((dword)bufo2==ERROR) ) error("Out of RAM\n"); for(a=0;a