XYZT copy to clipboard
I modified your new copy X to clipboard to add a procedure to copy 4 levels of the stack. You're welcome to use if you think it is relevant.
I may still add the i/j and the ./x notation, and 4/8 level stack.
I added: void copyRegisterXYZTToClipboard(void)
Output sample: CTRL-D for XYZT (X bottom)
0.01745240643728351
1 + ix3.141592653589793
Testing the ALPHA input
10111011000110#2 (word size = 64)
CTRL-H did a hard copy:
Code from SCREEN.C below:
void copyRegister(calcRegister_t regist) {
longInteger_t lgInt;
int16_t base, sign, n;
uint64_t shortInt;
static const char digits[17] = "0123456789ABCDEF";
switch(getRegisterDataType(regist)) {
case dtLongInteger:
convertLongIntegerRegisterToLongInteger(regist, lgInt);
longIntegerToAllocatedString(lgInt, tmpStr3000, sizeof(tmpStr3000));
longIntegerFree(lgInt);
break;
case dtReal16:
real16ToString(REGISTER_REAL16_DATA(regist), tmpStr3000);
break;
case dtComplex16:
real16ToString(REGISTER_REAL16_DATA(regist), tmpStr3000);
if(real16IsNegative(REGISTER_IMAG16_DATA(regist))) {
strcat(tmpStr3000, " - ix");
real16ChangeSign(REGISTER_IMAG16_DATA(regist));
real16ToString(REGISTER_IMAG16_DATA(regist), tmpStr3000 + strlen(tmpStr3000));
real16ChangeSign(REGISTER_IMAG16_DATA(regist));
}
else {
strcat(tmpStr3000, " + ix");
real16ToString(REGISTER_IMAG16_DATA(regist), tmpStr3000 + strlen(tmpStr3000));
}
break;
case dtTime:
strcpy(tmpStr3000, "Copying a time to the clipboard is to be coded!");
break;
case dtDate:
strcpy(tmpStr3000, "Copying a date to the clipboard is to be coded!");
break;
case dtString:
memcpy(tmpStr3000 + TMP_STR_LENGTH/2, REGISTER_STRING_DATA(regist), stringByteLength(REGISTER_STRING_DATA(regist))+1);
stringToUtf8(tmpStr3000 + TMP_STR_LENGTH/2, (uint8_t *)tmpStr3000);
break;
case dtReal16Matrix:
strcpy(tmpStr3000, "Copying a real16 matrix to the clipboard is to be coded!");
break;
case dtComplex16Matrix:
strcpy(tmpStr3000, "Copying a complex16 matrix to the clipboard is to be coded!");
break;
case dtShortInteger:
convertShortIntegerRegisterToUInt64(regist, &sign, &shortInt);
base = getRegisterShortIntegerBase(regist);
n = ERROR_MESSAGE_LENGTH - 100;
sprintf(errorMessage + n--, "#%d (word size = %u)", base, shortIntegerWordSize);
if(shortInt == 0) {
errorMessage[n--] = '0';
}
else {
while(shortInt != 0) {
errorMessage[n--] = digits[shortInt % base];
shortInt /= base;
}
if(sign) {
errorMessage[n--] = '-';
}
}
n++;
strcpy(tmpStr3000, errorMessage + n);
break;
case dtReal34:
real34ToString(REGISTER_REAL34_DATA(regist), tmpStr3000);
break;
case dtComplex34:
real34ToString(REGISTER_REAL34_DATA(regist), tmpStr3000);
if(real34IsNegative(REGISTER_IMAG34_DATA(regist))) {
strcat(tmpStr3000, " - ix");
real34ChangeSign(REGISTER_IMAG34_DATA(regist));
real34ToString(REGISTER_IMAG34_DATA(regist), tmpStr3000 + strlen(tmpStr3000));
real34ChangeSign(REGISTER_IMAG34_DATA(regist));
}
else {
strcat(tmpStr3000, " + ix");
real34ToString(REGISTER_IMAG34_DATA(regist), tmpStr3000 + strlen(tmpStr3000));
}
break;
default:
sprintf(tmpStr3000, "In function copyRegisterXToClipboard, the data type %" FMT32U " is unknown! Please try to reproduce and submit a bug.", getRegisterDataType(regist));
}
}
void copyRegisterXToClipboard(void) {
char tmpStr3000B[TMP_STR_LENGTH];
char t[50];
GtkClipboard *clipboard;
clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
gtk_clipboard_clear(clipboard);
gtk_clipboard_set_text(clipboard, "", 0); //JM TIP TO PROPERLY CLEAR CLIPBOARD
strcpy(tmpStr3000B, "");
strcpy(t, "\r\n");
copyRegister(REGISTER_X);
strcat(tmpStr3000B, tmpStr3000);
strcat(tmpStr3000B, t);
gtk_clipboard_set_text(clipboard, tmpStr3000B, -1);
}
void copyRegisterXYZTToClipboard(void) {
char tmpStr3000B[TMP_STR_LENGTH];
char t[10];
GtkClipboard *clipboard;
clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
gtk_clipboard_clear(clipboard);
gtk_clipboard_set_text(clipboard, "", 0); //JM TIP TO PROPERLY CLEAR CLIPBOARD
strcpy(tmpStr3000B, "");
strcpy(t, "\r\n");
copyRegister(REGISTER_T);
strcat(tmpStr3000B, tmpStr3000);
strcat(tmpStr3000B, t);
copyRegister(REGISTER_Z);
strcat(tmpStr3000B, tmpStr3000);
strcat(tmpStr3000B, t);
copyRegister(REGISTER_Y);
strcat(tmpStr3000B, tmpStr3000);
strcat(tmpStr3000B, t);
copyRegister(REGISTER_X);
strcat(tmpStr3000B, tmpStr3000);
strcat(tmpStr3000B, t);
gtk_clipboard_set_text(clipboard, tmpStr3000B, -1);
}