int getContractedLength (unsigned int outputLimit) { int inputLength = scr.cols - ses->winx; wchar_t inputBuffer[inputLength]; int outputLength = outputLimit; unsigned char outputBuffer[outputLength]; readScreenText(ses->winx, ses->winy, inputLength, 1, inputBuffer); contractText(contractionTable, inputBuffer, &inputLength, outputBuffer, &outputLength, NULL, getContractedCursor()); return inputLength; }
static int writeCharacters (const wchar_t *inputLine, size_t inputLength, void *data) { const wchar_t *inputBuffer = inputLine; while (inputLength) { int inputCount = inputLength; int outputCount = outputWidth; if (!outputBuffer) { if (!(outputBuffer = malloc(outputWidth))) { noMemory(data); return 0; } } contractText(contractionTable, inputBuffer, &inputCount, outputBuffer, &outputCount, NULL, CTB_NO_CURSOR); if ((inputCount < inputLength) && outputExtend) { free(outputBuffer); outputBuffer = NULL; outputWidth <<= 1; } else { { int index; for (index=0; index<outputCount; index+=1) if (!putCell(outputBuffer[index], data)) return 0; } inputBuffer += inputCount; inputLength -= inputCount; if (inputLength) if (!putCharacter('\n', data)) return 0; } } return 1; }