CpcAlive is a
programming
environment
Amstrad CPC

compatible
for graphics
 animations
creation.






operation

SmallAsm is a Z80 assembler
for Dos

Cpc basic key words
( English - Español )

Cpc basic error messages

The memory

The Cpc system vectors

Diskettes management

CpcAlive installer for
Windows and DosBox


CpcAlive Documentation






Français

* Merge multiple files into one file *


BAS: <- file header for the emulator CpcAlive
/* Merge multiple files into one file*/
gosub Init

|OUTPUT,"Result",@er%:'name of file result
if er%<>0 then OFileEr

FilePointer=0:'start pointer first file
FileName$="FileName1":'name of first file to merge
gosub FileMerge
FilePointer=0:'start pointer second file
FileName$="FileName2":'name of second file to merge
gosub FileMerge

'...

|OUTPUT,":CLOSE":'close file result
|exit,"successful operation"

FileMerge:
DataSize=-1:'init while loop
while DataSize<>0
    '|INPUT,"FileName:D,BufSize,FilePointer,BufStart",@error_code
    |INPUT,FileName$+":D,&"+HEX$(BufSize)+","+DEC$(FilePointer,"########")+",&"+HEX$(BufStart),@er%
    if er%<>0 then IFileEr
    |INFO,@info$:DataSize=val("&"+mid$(info$,13,4)):'size of data block loaded
    poke SizeAdr1,DataSize:'new ChainSize
    poke SizeAdr2,DataSize:'new ChainSize
    PRINT#8,Buffer$;'output buffer in file result
    PRINT FileName$,FilePointer,DataSize
    FilePointer=FilePointer+DataSize
wend
return

Init:
mode 2:er%=0:info$=STRING$(16,"X"):'infos from |INPUT command
BufSize=255:Buffer$=STRING$(BufSize,"X"):'this string is used to be the I\O buffer
SizeAdr1=@Buffer$:'ChainSize pointer 1
BufStart=peek(SizeAdr1+1)+256*peek(SizeAdr1+2):'address of first character of Buffer$
SizeAdr2=BufStart-2:'ChainSize pointer 2
return

//I/O error messages
IFileEr:
        if er%=1 then |exit,"Input error: parameters error"
        if er%=2 then |exit,"Input error: file not found"
        if er%=3 then |exit,"Input error: directory or file not found"
        if er%=4 then |exit,"Input error: no more Dos handle"
        if er%=5 then |exit,"Input error: refused access"
        |exit,"Input file error"
OFileEr:
        if er%=2 or er%=5 then |exit,"Output error: refused access"
        if er%=3 then |exit,"Output error: directory not found"
        if er%=4 then |exit,"Output error: no more Dos handle"
        |exit,"Output file error"