/***************************************************/ /* COP libray based on the NexT Byte Codes library */ /***************************************************/ /*****************************************************************************/ /* File API */ /*****************************************************************************/ /**/ /**/ /**/ /*******************************/ /* this function opens file in */ /* read or write mode */ /*******************************/ byte COP_Fopen(char *name,char *mode) { inline "dseg segment"; inline "FO TFileOpen"; inline "expr_g_byte_tab_COP_Fopen byte[]"; inline "expr_d_byte_tab_COP_Fopen byte[]"; inline "expr_g_byte_COP_Fopen byte"; inline "expr_d_byte_COP_Fopen byte"; inline "expr_byte_tab_COP_Fopen byte[]"; inline "inc_COP_Fopen word"; inline "dseg ends"; if(mode=="w") { inline "mov FO.Filename, COP_Fopen_name"; inline "mov FO.Length, 100"; inline "syscall FileOpenWrite, FO"; inline "mov expr_byte_COP_Fopen, FO.FileHandle"; goto end_fopen; } if(mode=="r") { inline "mov FO.Filename, COP_Fopen_name"; inline "mov FO.Length, 100"; inline "syscall FileOpenRead, FO"; inline "mov expr_byte_COP_Fopen, FO.FileHandle"; } end_fopen: } byte COP_FopenWrite(char *name) { inline "dseg segment"; inline "WW TFileOpen"; inline "dseg ends"; inline "mov WW.Filename, COP_FopenWrite_name"; inline "mov WW.Length, 100"; inline "syscall FileOpenWrite, WW"; inline "mov expr_byte_COP_FopenWrite, WW.FileHandle"; } byte COP_FopenRead(char *name) { inline "dseg segment"; inline "RR TFileOpen"; inline "dseg ends"; inline "mov RR.Filename, COP_FopenRead_name"; inline "mov RR.Length, 100"; inline "syscall FileOpenRead, RR"; inline "mov expr_byte_COP_FopenRead, RR.FileHandle"; } long COP_Fread(byte handle,mod char *buffer,long length) { inline "dseg segment"; inline "FW TFileReadWrite"; inline "dseg ends"; inline "mov FW.FileHandle, COP_Fread_handle"; inline "mov FW.Length, COP_Fread_length"; inline "syscall FileRead, FW"; inline "mov COP_Fread_buffer, FW.Buffer"; inline "mov expr_dword_COP_Fread, FW.Length"; /*return(); , no return required, cause expr_byte_COP_fopen contains the return value */ } long COP_Fwrite(byte handle,char *buffer,long length) { inline "dseg segment"; inline "FR TFileReadWrite"; inline "dseg ends"; inline "mov FR.FileHandle, COP_Fwrite_handle"; inline "mov FR.Buffer, COP_Fwrite_buffer"; inline "mov FR.Length, COP_Fwrite_length"; inline "syscall FileWrite, FR"; inline "mov expr_dword_COP_Fwrite, FR.Length"; /*return(); , no return required, cause dword_COP_fwrite contains the return value */ } void COP_Fclose(byte handle) { inline "dseg segment"; inline "FC TFileClose"; inline "dseg ends"; inline "mov FC.FileHandle, COP_Fclose_handle"; inline "syscall FileClose, FC"; /*return(); , no return required, cause dword_COP_fwrite contains the return value */ }