Untangle hashstring exporting into loadsave

This commit is contained in:
G.K.MacGregor
2020-11-29 11:48:08 +00:00
parent 1bb11ab20c
commit 492afba8b1
6 changed files with 110 additions and 74 deletions

View File

@@ -414,71 +414,6 @@ void LevelOnePage::loadPagePacket(QByteArray &inLine)
}
}
int LevelOnePage::controlBitsToPS() const
{
//TODO map page language for regions other than 0
int pageStatus = 0x8000 | (controlBit(PageBase::C4ErasePage) << 14) | ((m_defaultNOS & 1) << 9) | ((m_defaultNOS & 2) << 7) | ((m_defaultNOS & 4) << 5);
for (int i=C5Newsflash; i<=C11SerialMagazine; i++)
pageStatus |= controlBit(i) << (i-1);
return pageStatus;
}
QString LevelOnePage::exportURLHash(QString pageHash)
{
int hashDigits[1167]={0};
int totalBits, charBit;
const char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
//TODO deal with "black text allowed"
pageHash.append(QString("#%1:").arg(m_defaultNOS, 1, 16));
for (int r=0; r<25; r++)
for (int c=0; c<40; c++)
for (int b=0; b<7; b++) {
totalBits = (r * 40 + c) * 7 + b;
charBit = ((m_level1Page[r][c]) >> (6 - b)) & 0x01;
hashDigits[totalBits / 6] |= charBit << (5 - (totalBits % 6));
}
for (int i=0; i<1167; i++)
pageHash.append(base64[hashDigits[i]]);
if (packetNeeded(28,0) || packetNeeded(28,4)) {
QString x28StringBegin, x28StringEnd;
x28StringBegin.append(QString("00%1").arg((m_defaultCharSet << 3) | m_defaultNOS, 2, 16, QChar('0')).toUpper());
x28StringBegin.append(QString("%1").arg((m_secondCharSet << 3) | m_secondNOS, 2, 16, QChar('0')).toUpper());
x28StringBegin.append(QString("%1%2%3%4").arg(m_leftSidePanelDisplayed, 1, 10).arg(m_rightSidePanelDisplayed, 1, 10).arg(m_sidePanelStatusL25, 1, 10).arg(m_sidePanelColumns, 1, 16));
x28StringEnd = QString("%1%2%3%4").arg(m_defaultScreenColour, 2, 16, QChar('0')).arg(m_defaultRowColour, 2, 16, QChar('0')).arg(m_blackBackgroundSubst, 1, 10).arg(m_colourTableRemap, 1, 10);
if (packetNeeded(28,0)) {
pageHash.append(":X280=");
pageHash.append(x28StringBegin);
pageHash.append(colourHash(1));
pageHash.append(x28StringEnd);
}
if (packetNeeded(28,4)) {
pageHash.append(":X284=");
pageHash.append(x28StringBegin);
pageHash.append(colourHash(0));
pageHash.append(x28StringEnd);
}
}
if (!localEnhance.isEmpty()) {
pageHash.append(":X26=");
for (int i=0; i<localEnhance.size(); i++) {
pageHash.append(base64[localEnhance.at(i).data() >> 1]);
pageHash.append(base64[localEnhance.at(i).mode() | ((localEnhance.at(i).data() & 1) << 5)]);
pageHash.append(base64[localEnhance.at(i).address()]);
}
//TODO need to add one or more terminators to X26
}
//TODO check if 0x8000 | is needed for zxnet
pageHash.append(QString(":PS=%1").arg(0x8000 | controlBitsToPS(), 0, 16, QChar('0')));
return pageHash;
}
/* void LevelOnePage::setSubPageNumber(int newSubPageNumber) { m_subPageNumber = newSubPageNumber; } */
void LevelOnePage::setCycleValue(int newValue) { m_cycleValue = newValue; };
void LevelOnePage::setCycleType(CycleTypeEnum newType) { m_cycleType = newType; }