Minor tweak to throw exceptions instead of returning silently. Add gitea workflow.

This commit is contained in:
sigonasr2 2025-05-05 15:20:20 -04:00
parent 1f20f0c837
commit 98dcfccc9d
3 changed files with 36 additions and 11 deletions

View File

@ -0,0 +1,25 @@
name: Emscripten Build
run-name: Emscripten build initiated by ${{ gitea.actor }} for ${{ gitea.repository }}
on: [push]
jobs:
Build_and_Deploy_Web_Build:
runs-on: emscripten
container:
volumes:
- /home/sigonasr2/divar/server/files/web:/web
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Generate emcmake configuration
run: |
emcmake cmake . -B ${{ gitea.event.repository.name }}
- name: Build Project
run: cmake --build ${{ gitea.event.repository.name }}/
- name: Move Files and Finalize
run: |
mkdir -p /web/${{ gitea.event.repository.name }}
mv ${{ gitea.event.repository.name }}/bin/* /web/${{ gitea.event.repository.name }}
echo "Move files to final directory (/web/${{ gitea.event.repository.name }})"
- name: Cleanup - Web Build Available
run: echo "Emscripten build now available at http://projectdivar.com/files/web/${{ gitea.event.repository.name }}"

View File

@ -48,7 +48,7 @@ struct Rom{
addr=ptr=loc;
}
uint_fast8_t readInt8(){
return data[ptr++];
return data[ptr++];
}
uint_fast16_t readShort(){
return readInt8()|(readInt8()<<8);
@ -128,7 +128,7 @@ struct Rom{
int tmp;
int read{};
while(data[pos]!=0xFF){
if (pos >= data.length())return;
if (pos >= data.length())throw std::exception{"Computed and actual decompressed sizes do not match."};
int commandType{data[pos]>>5};
int len{(data[pos]&0x1F)+1};
if(commandType==7){
@ -136,11 +136,11 @@ struct Rom{
len=((int(data[pos])&3)<<8)+int(data[pos+1])+1;
++pos;
}
if(bpos+len>maxLength||bpos+len<0)return;
if(bpos+len>maxLength||bpos+len<0)throw std::exception{"Computed and actual decompressed sizes do not match."};
++pos;
if(commandType>=4) {
bpos2=(int(data[pos])<<8)+data[pos+1];
if(bpos2>=maxLength||bpos2<0)return;
if(bpos2>=maxLength||bpos2<0)throw std::exception{"Computed and actual decompressed sizes do not match."};
pos+=2;
}
switch(commandType) {
@ -152,7 +152,7 @@ struct Rom{
++pos;
}break;
case RUN_LENGTH_ENCODED_SHORT:{
if(bpos+2*len>maxLength||bpos<0)return;
if(bpos+2*len>maxLength||bpos<0)throw std::exception{"Computed and actual decompressed sizes do not match."};
while(len--!=0){
block[bpos++]=data[pos];
block[bpos++]=data[pos+1];
@ -164,19 +164,19 @@ struct Rom{
while(len--!=0)block[bpos++]=tmp++;
}break;
case REPEAT_PREVIOUS_DATA:{
if(bpos2+len>maxLength||bpos2<0)return;
if(bpos2+len>maxLength||bpos2<0)throw std::exception{"Computed and actual decompressed sizes do not match."};
for(int i:std::views::iota(0,len))block[bpos++]=block[bpos2+i];
}break;
case REVERSE_BITS:{
if(bpos2+len>maxLength||bpos2<0)return;
if(bpos2+len>maxLength||bpos2<0)throw std::exception{"Computed and actual decompressed sizes do not match."};
while(len--!=0)block[bpos++]=Rom::reversedBytes[block[bpos2++]&0xFF];
}break;
case UNKNOWN_1:{
if(bpos2-len+1<0)return;
if(bpos2-len+1<0)throw std::exception{"Computed and actual decompressed sizes do not match."};
while(len--!=0)block[bpos++]=block[bpos2--];
}break;
case UNKNOWN_2:{
return;
throw std::exception{"Computed and actual decompressed sizes do not match."};;
}break;
}
}
@ -211,7 +211,7 @@ struct Rom{
};
uint_fast32_t GetAnimation(){
return (data[13]<<24)+(data[14]<<16)+(data[15]<<8)+data[16];
}
};
};
struct BackgroundPalette{
std::vector<Pixel>colors;
@ -475,7 +475,7 @@ struct Rom{
if(effectVal==0)effectVal=(((background.GetAnimation()>>24)&0xFF));
distorter.effect=std::make_unique<DistortionEffect>(data,effectVal);
}
};
};
std::u8string data;
inline static std::string reversedBytes;
std::vector<BattleBackground>backgrounds;