Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | merge with trunk |
---|---|
Timelines: | family | ancestors | descendants | both | wtf-8-experiment |
Files: | files | file ages | folders |
SHA1: |
07ff85073bb89a09ef47cb37e958ee9c |
User & Date: | chw 2019-05-15 21:30:00.890 |
Context
2019-05-18
| ||
04:52 | merge with trunk check-in: 66d5320541 user: chw tags: wtf-8-experiment | |
2019-05-15
| ||
21:30 | merge with trunk check-in: 07ff85073b user: chw tags: wtf-8-experiment | |
21:29 | add tcl upstream changes check-in: 8b0f3656fc user: chw tags: trunk | |
2019-05-14
| ||
04:57 | merge with trunk check-in: fb9b435b98 user: chw tags: wtf-8-experiment | |
Changes
Changes to jni/sdl2tk/generic/tkButton.c.
︙ | ︙ | |||
1612 1613 1614 1615 1616 1617 1618 | const char *name2, /* Second part of variable name. */ int flags) /* Information about what happened. */ { register TkButton *butPtr = clientData; const char *value; Tcl_Obj *valuePtr; | < < < < < < < < < < < < < > > | > > > > > > > > > > > > > > > > > > | 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 | const char *name2, /* Second part of variable name. */ int flags) /* Information about what happened. */ { register TkButton *butPtr = clientData; const char *value; Tcl_Obj *valuePtr; /* * If the variable is being unset, then just re-establish the trace unless * the whole interpreter is going away. */ if (flags & TCL_TRACE_UNSETS) { butPtr->flags &= ~(SELECTED | TRISTATED); if (!Tcl_InterpDeleted(interp)) { ClientData probe = NULL; do { probe = Tcl_VarTraceInfo(interp, Tcl_GetString(butPtr->selVarNamePtr), TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ButtonVarProc, probe); if (probe == (ClientData)butPtr) { break; } } while (probe); if (probe) { /* * We were able to fetch the unset trace for our * selVarNamePtr, which means it is not unset and not * the cause of this unset trace. Instead some outdated * former variable must be, and we should ignore it. */ goto redisplay; } Tcl_TraceVar2(interp, Tcl_GetString(butPtr->selVarNamePtr), NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ButtonVarProc, clientData); } goto redisplay; } |
︙ | ︙ | |||
1707 1708 1709 1710 1711 1712 1713 | */ /* ARGSUSED */ static char * ButtonTextVarProc( ClientData clientData, /* Information about button. */ Tcl_Interp *interp, /* Interpreter containing variable. */ | | | < < < < < < < < < < < < < > | > > > > > > > > > > > > > > > > > > > > > > > > > > | 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 | */ /* ARGSUSED */ static char * ButtonTextVarProc( ClientData clientData, /* Information about button. */ Tcl_Interp *interp, /* Interpreter containing variable. */ const char *name1, /* Not used. */ const char *name2, /* Not used. */ int flags) /* Information about what happened. */ { TkButton *butPtr = clientData; Tcl_Obj *valuePtr; if (butPtr->flags & BUTTON_DELETED) { return NULL; } /* * If the variable is unset, then immediately recreate it unless the whole * interpreter is going away. */ if (flags & TCL_TRACE_UNSETS) { if (!Tcl_InterpDeleted(interp) && butPtr->textVarNamePtr != NULL) { /* * An unset trace on some variable brought us here, but is it * the variable we have stored in butPtr->textVarNamePtr ? */ ClientData probe = NULL; do { probe = Tcl_VarTraceInfo(interp, Tcl_GetString(butPtr->textVarNamePtr), TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ButtonTextVarProc, probe); if (probe == (ClientData)butPtr) { break; } } while (probe); if (probe) { /* * We were able to fetch the unset trace for our * textVarNamePtr, which means it is not unset and not * the cause of this unset trace. Instead some outdated * former textvariable must be, and we should ignore it. */ return NULL; } Tcl_ObjSetVar2(interp, butPtr->textVarNamePtr, NULL, butPtr->textPtr, TCL_GLOBAL_ONLY); Tcl_TraceVar2(interp, Tcl_GetString(butPtr->textVarNamePtr), NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ButtonTextVarProc, clientData); } return NULL; |
︙ | ︙ |
Changes to jni/sdl2tk/generic/tkEntry.c.
︙ | ︙ | |||
3272 3273 3274 3275 3276 3277 3278 | */ /* ARGSUSED */ static char * EntryTextVarProc( ClientData clientData, /* Information about button. */ Tcl_Interp *interp, /* Interpreter containing variable. */ | | | < < < < < < < < < < < < < > > | > > > > > > > > > > > > > > > > > > | 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 | */ /* ARGSUSED */ static char * EntryTextVarProc( ClientData clientData, /* Information about button. */ Tcl_Interp *interp, /* Interpreter containing variable. */ const char *name1, /* Not used. */ const char *name2, /* Not used. */ int flags) /* Information about what happened. */ { Entry *entryPtr = clientData; const char *value; if (entryPtr->flags & ENTRY_DELETED) { /* * Just abort early if we entered here while being deleted. */ return NULL; } /* * If the variable is unset, then immediately recreate it unless the whole * interpreter is going away. */ if (flags & TCL_TRACE_UNSETS) { if (!Tcl_InterpDeleted(interp) && entryPtr->textVarName) { ClientData probe = NULL; do { probe = Tcl_VarTraceInfo(interp, entryPtr->textVarName, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, EntryTextVarProc, probe); if (probe == (ClientData)entryPtr) { break; } } while (probe); if (probe) { /* * We were able to fetch the unset trace for our * textVarName, which means it is not unset and not * the cause of this unset trace. Instead some outdated * former variable must be, and we should ignore it. */ return NULL; } Tcl_SetVar2(interp, entryPtr->textVarName, NULL, entryPtr->string, TCL_GLOBAL_ONLY); Tcl_TraceVar2(interp, entryPtr->textVarName, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, EntryTextVarProc, clientData); entryPtr->flags |= ENTRY_VAR_TRACED; } |
︙ | ︙ |
Changes to jni/sdl2tk/generic/tkListbox.c.
︙ | ︙ | |||
3449 3450 3451 3452 3453 3454 3455 | *---------------------------------------------------------------------- */ static char * ListboxListVarProc( ClientData clientData, /* Information about button. */ Tcl_Interp *interp, /* Interpreter containing variable. */ | | | < < < < < < < < < < < < < | > > > > > > > > > > > > > > > > > > > > > | 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 | *---------------------------------------------------------------------- */ static char * ListboxListVarProc( ClientData clientData, /* Information about button. */ Tcl_Interp *interp, /* Interpreter containing variable. */ const char *name1, /* Not used. */ const char *name2, /* Not used. */ int flags) /* Information about what happened. */ { Listbox *listPtr = clientData; Tcl_Obj *oldListObj, *varListObj; int oldLength, i; Tcl_HashEntry *entry; /* * Bwah hahahaha! Puny mortal, you can't unset a -listvar'd variable! */ if (flags & TCL_TRACE_UNSETS) { if (!Tcl_InterpDeleted(interp) && listPtr->listVarName) { ClientData probe = NULL; do { probe = Tcl_VarTraceInfo(interp, listPtr->listVarName, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ListboxListVarProc, probe); if (probe == (ClientData)listPtr) { break; } } while (probe); if (probe) { /* * We were able to fetch the unset trace for our * listVarName, which means it is not unset and not * the cause of this unset trace. Instead some outdated * former variable must be, and we should ignore it. */ return NULL; } Tcl_SetVar2Ex(interp, listPtr->listVarName, NULL, listPtr->listObj, TCL_GLOBAL_ONLY); Tcl_TraceVar2(interp, listPtr->listVarName, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ListboxListVarProc, clientData); return NULL; } |
︙ | ︙ |
Changes to jni/sdl2tk/generic/tkMenu.c.
︙ | ︙ | |||
2487 2488 2489 2490 2491 2492 2493 | int flags) /* Describes what just happened. */ { TkMenuEntry *mePtr = clientData; TkMenu *menuPtr; const char *value; const char *name, *onValue; | | | > | < < < < < < < < < < < > | > | | | > > | > > > > > > > > > > > > > | 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 | int flags) /* Describes what just happened. */ { TkMenuEntry *mePtr = clientData; TkMenu *menuPtr; const char *value; const char *name, *onValue; if (Tcl_InterpDeleted(interp) || (mePtr->namePtr == NULL)) { /* * Do nothing if the interpreter is going away or we have * no variable name. */ return NULL; } menuPtr = mePtr->menuPtr; if (menuPtr->menuFlags & MENU_DELETION_PENDING) { return NULL; } name = Tcl_GetString(mePtr->namePtr); /* * If the variable is being unset, then re-establish the trace. */ if (flags & TCL_TRACE_UNSETS) { ClientData probe = NULL; mePtr->entryFlags &= ~ENTRY_SELECTED; do { probe = Tcl_VarTraceInfo(interp, name, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MenuVarProc, probe); if (probe == (ClientData)mePtr) { break; } } while (probe); if (probe) { /* * We were able to fetch the unset trace for our * namePtr, which means it is not unset and not * the cause of this unset trace. Instead some outdated * former variable must be, and we should ignore it. */ return NULL; } Tcl_TraceVar2(interp, name, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MenuVarProc, clientData); TkpConfigureMenuEntry(mePtr); TkEventuallyRedrawMenu(menuPtr, NULL); return NULL; } /* * Use the value of the variable to update the selected status of the menu |
︙ | ︙ |
Changes to jni/sdl2tk/generic/tkMenuDraw.c.
︙ | ︙ | |||
471 472 473 474 475 476 477 | * Arrange for an entry of a menu, or the whole menu, to be redisplayed * at some point in the future. * * Results: * None. * * Side effects: | | | 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 | * Arrange for an entry of a menu, or the whole menu, to be redisplayed * at some point in the future. * * Results: * None. * * Side effects: * A when-idle handler is scheduled to do the redisplay, if there isn't * one already scheduled. * *---------------------------------------------------------------------- */ void TkEventuallyRedrawMenu( |
︙ | ︙ |
Changes to jni/sdl2tk/generic/tkMenubutton.c.
︙ | ︙ | |||
877 878 879 880 881 882 883 | const char *name2, /* Second part of variable name. */ int flags) /* Information about what happened. */ { register TkMenuButton *mbPtr = clientData; const char *value; unsigned len; | < < < < < < < < < < < < < > > | > > > > > > > > > > > > > > > > > > | 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 | const char *name2, /* Second part of variable name. */ int flags) /* Information about what happened. */ { register TkMenuButton *mbPtr = clientData; const char *value; unsigned len; /* * If the variable is unset, then immediately recreate it unless the whole * interpreter is going away. */ if (flags & TCL_TRACE_UNSETS) { if (!Tcl_InterpDeleted(interp) && mbPtr->textVarName) { ClientData probe = NULL; do { probe = Tcl_VarTraceInfo(interp, mbPtr->textVarName, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MenuButtonTextVarProc, probe); if (probe == (ClientData)mbPtr) { break; } } while (probe); if (probe) { /* * We were able to fetch the unset trace for our * textVarName, which means it is not unset and not * the cause of this unset trace. Instead some outdated * former variable must be, and we should ignore it. */ return NULL; } Tcl_SetVar2(interp, mbPtr->textVarName, NULL, mbPtr->text, TCL_GLOBAL_ONLY); Tcl_TraceVar2(interp, mbPtr->textVarName, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MenuButtonTextVarProc, clientData); } return NULL; |
︙ | ︙ |
Changes to jni/sdl2tk/generic/tkMessage.c.
︙ | ︙ | |||
834 835 836 837 838 839 840 | const char *name1, /* Name of variable. */ const char *name2, /* Second part of variable name. */ int flags) /* Information about what happened. */ { register Message *msgPtr = clientData; const char *value; | < < < < < < < < < < < < < > > | > > > > > > > > > > > > > > > > > > | 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 | const char *name1, /* Name of variable. */ const char *name2, /* Second part of variable name. */ int flags) /* Information about what happened. */ { register Message *msgPtr = clientData; const char *value; /* * If the variable is unset, then immediately recreate it unless the whole * interpreter is going away. */ if (flags & TCL_TRACE_UNSETS) { if (!Tcl_InterpDeleted(interp) && msgPtr->textVarName) { ClientData probe = NULL; do { probe = Tcl_VarTraceInfo(interp, msgPtr->textVarName, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MessageTextVarProc, probe); if (probe == (ClientData)msgPtr) { break; } } while (probe); if (probe) { /* * We were able to fetch the unset trace for our * textVarName, which means it is not unset and not * the cause of this unset trace. Instead some outdated * former variable must be, and we should ignore it. */ return NULL; } Tcl_SetVar2(interp, msgPtr->textVarName, NULL, msgPtr->string, TCL_GLOBAL_ONLY); Tcl_TraceVar2(interp, msgPtr->textVarName, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MessageTextVarProc, clientData); } return NULL; |
︙ | ︙ |
Changes to jni/sdl2tk/generic/tkScale.c.
︙ | ︙ | |||
1349 1350 1351 1352 1353 1354 1355 | { register TkScale *scalePtr = clientData; const char *resultStr; double value; Tcl_Obj *valuePtr; int result; | < < < < < < < < < < < < < > > | > > > > > > > > > > > > > > > > > > | 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 | { register TkScale *scalePtr = clientData; const char *resultStr; double value; Tcl_Obj *valuePtr; int result; /* * If the variable is unset, then immediately recreate it unless the whole * interpreter is going away. */ if (flags & TCL_TRACE_UNSETS) { if (!Tcl_InterpDeleted(interp) && scalePtr->varNamePtr) { ClientData probe = NULL; do { probe = Tcl_VarTraceInfo(interp, Tcl_GetString(scalePtr->varNamePtr), TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ScaleVarProc, probe); if (probe == (ClientData)scalePtr) { break; } } while (probe); if (probe) { /* * We were able to fetch the unset trace for our * varNamePtr, which means it is not unset and not * the cause of this unset trace. Instead some outdated * former variable must be, and we should ignore it. */ return NULL; } Tcl_TraceVar2(interp, Tcl_GetString(scalePtr->varNamePtr), NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ScaleVarProc, clientData); scalePtr->flags |= NEVER_SET; TkScaleSetValue(scalePtr, scalePtr->value, 1, 0); } return NULL; |
︙ | ︙ |
Changes to jni/sdl2tk/generic/ttk/ttkTrace.c.
︙ | ︙ | |||
22 23 24 25 26 27 28 | /* * Tcl_VarTraceProc for trace handles. */ static char * VarTraceProc( ClientData clientData, /* Widget record pointer */ Tcl_Interp *interp, /* Interpreter containing variable. */ | | | < < < < < < < < < < < | 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | /* * Tcl_VarTraceProc for trace handles. */ static char * VarTraceProc( ClientData clientData, /* Widget record pointer */ Tcl_Interp *interp, /* Interpreter containing variable. */ const char *name1, /* (unused) */ const char *name2, /* (unused) */ int flags) /* Information about what happened. */ { Ttk_TraceHandle *tracePtr = clientData; const char *name, *value; Tcl_Obj *valuePtr; if (flags & TCL_INTERP_DESTROYED) { return NULL; } name = Tcl_GetString(tracePtr->varnameObj); /* * If the variable is being unset, then re-establish the trace: */ if (flags & TCL_TRACE_DESTROYED) { /* |
︙ | ︙ |
Changes to jni/sdl2tk/sdl/SdlTkInt.c.
︙ | ︙ | |||
2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 | #else SdlTkX.screen->mwidth = (width * 254 + 360) / 720; SdlTkX.screen->mheight = (height * 254 + 360) / 720; #endif } dpy = SdlTkX.display->next_display; while (dpy != NULL) { SdlTkGenerateConfigureNotify(dpy, dpy->screens[0].root); dpy = dpy->next_display; } _w = (_Window *) SdlTkX.screen->root; | > < < | 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 | #else SdlTkX.screen->mwidth = (width * 254 + 360) / 720; SdlTkX.screen->mheight = (height * 254 + 360) / 720; #endif } dpy = SdlTkX.display->next_display; while (dpy != NULL) { /* to pick up mwidth/mheight info */ SdlTkGenerateConfigureNotify(dpy, dpy->screens[0].root); dpy = dpy->next_display; } _w = (_Window *) SdlTkX.screen->root; pixel = SDL_MapRGB(SdlTkX.sdlsurf->format, #ifdef ANDROID 0x00, 0x00, 0x00 #else 0x00, 0x4E, 0x78 #endif ); |
︙ | ︙ | |||
2320 2321 2322 2323 2324 2325 2326 | sr.y = oldh; sr.h = height - oldh; sr.x = 0; sr.w = width; SDL_FillRect(SdlTkX.sdlsurf, &sr, pixel); } | < | < | 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 | sr.y = oldh; sr.h = height - oldh; sr.x = 0; sr.w = width; SDL_FillRect(SdlTkX.sdlsurf, &sr, pixel); } SdlTkResizeWindow(SdlTkX.display, (Window) _w, width, height); child = _w->child; while (child != NULL) { if (child->fullscreen) { int xx, yy, ww, hh; _Window *_ww = child; |
︙ | ︙ | |||
4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 | SdlTkUnlock(NULL); } if (objc <= 1) { Tcl_SetResult(interp, buffer, TCL_VOLATILE); } return TCL_OK; } static int ScreensaverObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { int flag; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 | SdlTkUnlock(NULL); } if (objc <= 1) { Tcl_SetResult(interp, buffer, TCL_VOLATILE); } return TCL_OK; } static int SizeObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { int w, h; char buffer[128]; if ((objc != 1) && (objc != 3)) { Tcl_WrongNumArgs(interp, 1, objv, "?width height?"); return TCL_ERROR; } if (objc > 1) { if ((Tcl_GetIntFromObj(interp, objv[1], &w) != TCL_OK) || (Tcl_GetIntFromObj(interp, objv[2], &h) != TCL_OK)) { return TCL_ERROR; } if ((w <= 0) || (h <= 0)) { Tcl_SetResult(interp, "unsupported width or height", TCL_STATIC); return TCL_ERROR; } } if (objc > 1) { SdlTkSetWindowSize(w, h); } else { SdlTkLock(NULL); SDL_GetWindowSize(SdlTkX.sdlscreen, &w, &h); SdlTkUnlock(NULL); sprintf(buffer, "%d %d", w, h); } if (objc <= 1) { Tcl_SetResult(interp, buffer, TCL_VOLATILE); } return TCL_OK; } static int ScreensaverObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { int flag; |
︙ | ︙ | |||
4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 | { "maximize", MaximizeObjCmd, NULL }, { "paintvisrgn", PaintvisrgnObjCmd, NULL }, { "pointer", PointerObjCmd, NULL }, { "powerinfo", PowerinfoObjCmd, NULL }, { "restore", RestoreObjCmd, NULL }, { "root", RootObjCmd, NULL }, { "screensaver", ScreensaverObjCmd, NULL }, { "stat", StatObjCmd, NULL }, { "textinput", TextinputObjCmd, NULL }, { "touchcalibration", TouchcalibObjCmd, NULL }, { "touchtranslate", TouchtranslateObjCmd, NULL }, { "viewport", ViewportObjCmd, NULL }, { "vrmode", VRModeObjCmd, NULL }, { "vsync", VsyncObjCmd, NULL }, | > | 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 | { "maximize", MaximizeObjCmd, NULL }, { "paintvisrgn", PaintvisrgnObjCmd, NULL }, { "pointer", PointerObjCmd, NULL }, { "powerinfo", PowerinfoObjCmd, NULL }, { "restore", RestoreObjCmd, NULL }, { "root", RootObjCmd, NULL }, { "screensaver", ScreensaverObjCmd, NULL }, { "size", SizeObjCmd, NULL }, { "stat", StatObjCmd, NULL }, { "textinput", TextinputObjCmd, NULL }, { "touchcalibration", TouchcalibObjCmd, NULL }, { "touchtranslate", TouchtranslateObjCmd, NULL }, { "viewport", ViewportObjCmd, NULL }, { "vrmode", VRModeObjCmd, NULL }, { "vsync", VsyncObjCmd, NULL }, |
︙ | ︙ |
Changes to jni/sdl2tk/sdl/SdlTkInt.h.
︙ | ︙ | |||
338 339 340 341 342 343 344 345 346 347 348 349 350 351 | extern void SdlTkSetWindowFlags(int flags, int x, int y, int w, int h); extern void SdlTkSetWindowOpacity(double opacity); extern void SdlTkSetWindowTitle(SDL_Window *window, const char *title); extern void SdlTkStartStopTextInput(int on); extern void SdlTkSetTextInputRect(SDL_Rect *rect, int hints); extern void SdlTkWarpPointer(int x, int y); extern int SdlTkShowPointer(int flag); extern int SdlTkKeysym2Unicode(KeySym keysym); extern KeySym SdlTkUnicode2Keysym(int ucs); extern KeySym SdlTkUtf2KeySym(const char *utf, int len, int *lenret); extern void SdlTkMoveWindow(Display *display, Window w, int x, int y); extern void SdlTkMoveResizeWindow(Display *display, Window w, int x, int y, unsigned int width, unsigned int height); extern void SdlTkResizeWindow(Display *display, Window w, | > | 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 | extern void SdlTkSetWindowFlags(int flags, int x, int y, int w, int h); extern void SdlTkSetWindowOpacity(double opacity); extern void SdlTkSetWindowTitle(SDL_Window *window, const char *title); extern void SdlTkStartStopTextInput(int on); extern void SdlTkSetTextInputRect(SDL_Rect *rect, int hints); extern void SdlTkWarpPointer(int x, int y); extern int SdlTkShowPointer(int flag); extern void SdlTkSetWindowSize(int w, int h); extern int SdlTkKeysym2Unicode(KeySym keysym); extern KeySym SdlTkUnicode2Keysym(int ucs); extern KeySym SdlTkUtf2KeySym(const char *utf, int len, int *lenret); extern void SdlTkMoveWindow(Display *display, Window w, int x, int y); extern void SdlTkMoveResizeWindow(Display *display, Window w, int x, int y, unsigned int width, unsigned int height); extern void SdlTkResizeWindow(Display *display, Window w, |
︙ | ︙ |
Changes to jni/sdl2tk/sdl/SdlTkUtils.c.
︙ | ︙ | |||
1087 1088 1089 1090 1091 1092 1093 | } return 1; } static Tcl_HashEntry * ffkAllocEntry(Tcl_HashTable *tablePtr, void *keyPtr) { | < | 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 | } return 1; } static Tcl_HashEntry * ffkAllocEntry(Tcl_HashTable *tablePtr, void *keyPtr) { unsigned size; Tcl_HashEntry *hPtr; size = sizeof (Tcl_HashEntry) + sizeof (FileFaceKey); hPtr = ckalloc(size); memcpy(hPtr->key.words, keyPtr, sizeof (FileFaceKey)); hPtr->clientData = NULL; |
︙ | ︙ |
Changes to jni/sdl2tk/sdl/SdlTkX.c.
︙ | ︙ | |||
5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 | event.user.data2 = (void *) &wreq; SDL_PeepEvents(&event, 1, SDL_ADDEVENT, 0, 0); while (wreq.running) { SdlTkWaitLock(); } return wreq.y; } /* *---------------------------------------------------------------------- * * TimerCallback -- * * SDL timer callback function invoked every 10/20/200/400 ms. | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 | event.user.data2 = (void *) &wreq; SDL_PeepEvents(&event, 1, SDL_ADDEVENT, 0, 0); while (wreq.running) { SdlTkWaitLock(); } return wreq.y; } #ifndef ANDROID static void HandleWindowSize(struct RootSizeRequest *r) { int width, height; if (SdlTkX.is_framebuffer || SdlTkX.arg_fullscreen || !SdlTkX.arg_resizable) { goto done; } SDL_GetWindowSize(SdlTkX.sdlscreen, &width, &height); if ((width == r->width) && (height == r->height)) { goto done; } SDL_SetWindowSize(SdlTkX.sdlscreen, r->width, r->height); done: if (r->running) { r->running = 0; SdlTkNotify(); } } #endif void SdlTkSetWindowSize(int w, int h) { #ifndef ANDROID struct RootSizeRequest root; SDL_Event event; SdlTkLock(NULL); root.running = 1; root.width = w; root.height = h; event.type = SDL_USEREVENT; event.user.windowID = 0; event.user.code = 0; event.user.data1 = (void *) HandleWindowSize; event.user.data2 = (void *) &root; SDL_PeepEvents(&event, 1, SDL_ADDEVENT, 0, 0); while (root.running) { SdlTkWaitLock(); } SdlTkUnlock(NULL); #endif } /* *---------------------------------------------------------------------- * * TimerCallback -- * * SDL timer callback function invoked every 10/20/200/400 ms. |
︙ | ︙ | |||
6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 | SdlTkX.is_framebuffer = 1; #else /* Determine framebuffer mode from video driver. */ if (strcmp(SDL_GetCurrentVideoDriver(), "KMSDRM") == 0) { SdlTkX.is_framebuffer = 1; } else if (strcmp(SDL_GetCurrentVideoDriver(), "RPI") == 0) { SdlTkX.is_framebuffer = 1; } else { SdlTkX.is_framebuffer = 0; } #endif SdlTkX.scale = SdlTkX.scale_min = 1.0f; SdlTkX.outrect = NULL; SdlTkX.viewport.x = 0; | > > | 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 | SdlTkX.is_framebuffer = 1; #else /* Determine framebuffer mode from video driver. */ if (strcmp(SDL_GetCurrentVideoDriver(), "KMSDRM") == 0) { SdlTkX.is_framebuffer = 1; } else if (strcmp(SDL_GetCurrentVideoDriver(), "RPI") == 0) { SdlTkX.is_framebuffer = 1; } else if (strcmp(SDL_GetCurrentVideoDriver(), "jsmpeg") == 0) { SdlTkX.is_framebuffer = 1; } else { SdlTkX.is_framebuffer = 0; } #endif SdlTkX.scale = SdlTkX.scale_min = 1.0f; SdlTkX.outrect = NULL; SdlTkX.viewport.x = 0; |
︙ | ︙ | |||
6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 | markDone = 1; } else if ((sdl_event.user.data1 == HandleRootSize) && (sdl_event.user.data2 != NULL)) { HandleRootSize((struct RootSizeRequest *) sdl_event.user.data2); markDone = 1; #ifndef ANDROID } else if ((sdl_event.user.data1 == HandleWindowFlags) && (sdl_event.user.data2 != NULL)) { HandleWindowFlags((struct WindowFlagsRequest *) sdl_event.user.data2); markDone = 1; #endif #if defined(__APPLE__) || defined(_WIN32) | > > > > > | 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 | markDone = 1; } else if ((sdl_event.user.data1 == HandleRootSize) && (sdl_event.user.data2 != NULL)) { HandleRootSize((struct RootSizeRequest *) sdl_event.user.data2); markDone = 1; #ifndef ANDROID } else if ((sdl_event.user.data1 == HandleWindowSize) && (sdl_event.user.data2 != NULL)) { HandleWindowSize((struct RootSizeRequest *) sdl_event.user.data2); markDone = 1; } else if ((sdl_event.user.data1 == HandleWindowFlags) && (sdl_event.user.data2 != NULL)) { HandleWindowFlags((struct WindowFlagsRequest *) sdl_event.user.data2); markDone = 1; #endif #if defined(__APPLE__) || defined(_WIN32) |
︙ | ︙ |
Changes to jni/sdl2tk/tests/button.test.
︙ | ︙ | |||
3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 | focus -force .top.b update event generate .top.b <space> update ; # shall not trigger error invalid command name ".top.b" } -cleanup { destroy .top.b .top } -result {} imageFinish cleanupTests return # Local variables: # mode: tcl | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 | focus -force .top.b update event generate .top.b <space> update ; # shall not trigger error invalid command name ".top.b" } -cleanup { destroy .top.b .top } -result {} test button-15.1 {Bug [5d991b822e]} { # Want this not to segfault set var INIT button .b -textvariable var trace add variable var unset {apply {args { .b configure -textvariable {} }}} pack .b bind .b <Configure> {unset var} update destroy .b } {} test button-15.2 {Bug [5d991b822e]} { # Want this not to leak traces set var INIT button .b -textvariable var trace add variable var unset {apply {args { .b configure -textvariable new }}} pack .b bind .b <Configure> {unset -nocomplain var} update destroy .b unset new } {} test button-15.3 {Bug [5d991b822e]} { # Want this not to leak traces set var INIT checkbutton .b -variable var trace add variable var unset {apply {args { .b configure -variable {} }}} pack .b bind .b <Configure> {unset var} update destroy .b } {} imageFinish cleanupTests return # Local variables: # mode: tcl |
︙ | ︙ |
Changes to jni/sdl2tk/tests/entry.test.
︙ | ︙ | |||
3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 | destroy .e } -body { catch {entry .e -textvariable thisnsdoesntexist::myvar} result1 set result1 } -cleanup { destroy .e } -result {can't trace "thisnsdoesntexist::myvar": parent namespace doesn't exist} # Gathered comments about lacks # XXX Still need to write tests for EntryBlinkProc, EntryFocusProc, # and EntryTextVarProc. # No tests for DisplayEntry. # XXX Still need to write tests for EntryScanTo and EntrySelectTo. # No tests for EventuallyRedraw | > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 | destroy .e } -body { catch {entry .e -textvariable thisnsdoesntexist::myvar} result1 set result1 } -cleanup { destroy .e } -result {can't trace "thisnsdoesntexist::myvar": parent namespace doesn't exist} test entry-25.1 {Bug [5d991b822e]} { # Want this not to segfault, or write to variable with empty name set var INIT entry .b -textvariable var trace add variable var unset {apply {args { .b configure -textvariable {} }}} pack .b bind .b <Configure> {unset var} update destroy .b info exists {} } 0 test entry-25.2 {Bug [5d991b822e]} { # Want this not to leak traces set var INIT entry .b -textvariable var trace add variable var unset {apply {args { .b configure -textvariable new }}} pack .b bind .b <Configure> {unset -nocomplain var} update destroy .b unset new } {} # Gathered comments about lacks # XXX Still need to write tests for EntryBlinkProc, EntryFocusProc, # and EntryTextVarProc. # No tests for DisplayEntry. # XXX Still need to write tests for EntryScanTo and EntrySelectTo. # No tests for EventuallyRedraw |
︙ | ︙ |
Changes to jni/sdl2tk/tests/listbox.test.
︙ | ︙ | |||
3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 | event generate .l <1> -x 5 -y 5 ; # <<ListboxSelect>> fires selection clear ; # <<ListboxSelect>> fires again update set res } -cleanup { destroy .l } -result {{.l 0} {{} {}}} resetGridInfo deleteWindows option clear # cleanup cleanupTests | > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 | event generate .l <1> -x 5 -y 5 ; # <<ListboxSelect>> fires selection clear ; # <<ListboxSelect>> fires again update set res } -cleanup { destroy .l } -result {{.l 0} {{} {}}} test listbox-32.1 {Bug [5d991b822e]} { # Want this not to segfault, or write to variable with empty name set var INIT listbox .b -listvariable var trace add variable var unset {apply {args { .b configure -listvariable {} }}} pack .b bind .b <Configure> {unset var} update destroy .b info exists {} } 0 test listbox-32.2 {Bug [5d991b822e]} { # Want this not to leak traces set var INIT listbox .b -listvariable var trace add variable var unset {apply {args { .b configure -listvariable new }}} pack .b bind .b <Configure> {unset -nocomplain var} update destroy .b unset new } {} resetGridInfo deleteWindows option clear # cleanup cleanupTests |
︙ | ︙ |
Changes to jni/sdl2tk/tests/menu.test.
︙ | ︙ | |||
3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 | menu .m1 set foo "hello" list [.m1 add checkbutton -variable foo -onvalue hello -offvalue goodbye] \ [set foo "goodbye"] [unset foo] } -cleanup { deleteWindows } -result {{} goodbye {}} test menu-18.1 {TkActivateMenuEntry} -setup { deleteWindows } -body { menu .m1 .m1 add command -label "test" | > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 | menu .m1 set foo "hello" list [.m1 add checkbutton -variable foo -onvalue hello -offvalue goodbye] \ [set foo "goodbye"] [unset foo] } -cleanup { deleteWindows } -result {{} goodbye {}} test menu-17.6 {MenuVarProc [5d991b822e]} -setup { deleteWindows } -body { # Want this not to crash menu .b set var INIT .b add checkbutton -variable var trace add variable var unset {apply {args { .b entryconfigure 1 -variable {} }}} unset var } -cleanup { deleteWindows } -result {} test menu-17.7 {MenuVarProc [5d991b822e]} -setup { deleteWindows } -body { # Want this not to duplicate traces menu .b set var INIT .b add checkbutton -variable var trace add variable var unset {apply {args { .b entryconfigure 1 -variable new }}} unset var } -cleanup { deleteWindows } -result {} test menu-18.1 {TkActivateMenuEntry} -setup { deleteWindows } -body { menu .m1 .m1 add command -label "test" |
︙ | ︙ |
Changes to jni/sdl2tk/tests/menubut.test.
︙ | ︙ | |||
746 747 748 749 750 751 752 753 754 755 756 757 758 759 | menubutton .mb interp hide {} .mb destroy .mb set res1 [list [winfo children .] [interp hidden]] set res2 [list {} $l] expr {$res1 eq $res2} } -result 1 deleteWindows option clear imageFinish | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 | menubutton .mb interp hide {} .mb destroy .mb set res1 [list [winfo children .] [interp hidden]] set res2 [list {} $l] expr {$res1 eq $res2} } -result 1 test menubutton-9.1 {Bug [5d991b822e]} { # Want this not to segfault, or write to variable with empty name unset -nocomplain {} set var INIT menubutton .b -textvariable var trace add variable var unset {apply {args { .b configure -textvariable {} }}} pack .b bind .b <Configure> {unset var} update destroy .b info exists {} } 0 test menubutton-9.2 {Bug [5d991b822e]} { # Want this not to leak traces set var INIT menubutton .b -textvariable var trace add variable var unset {apply {args { .b configure -textvariable new }}} pack .b bind .b <Configure> {unset -nocomplain var} update destroy .b unset new } {} deleteWindows option clear imageFinish |
︙ | ︙ |
Changes to jni/sdl2tk/tests/message.test.
︙ | ︙ | |||
465 466 467 468 469 470 471 472 473 474 | } -body { .m configure -bd 4 .m configure -bg #ffffff lindex [.m configure -bd] 4 } -cleanup { destroy .m } -result {4} cleanupTests return | > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 | } -body { .m configure -bd 4 .m configure -bg #ffffff lindex [.m configure -bd] 4 } -cleanup { destroy .m } -result {4} test message-4.1 {Bug [5d991b822e]} { # Want this not to segfault, or write to variable with empty name unset -nocomplain {} set var INIT message .b -textvariable var trace add variable var unset {apply {args { .b configure -textvariable {} }}} pack .b bind .b <Configure> {unset var} update destroy .b info exists {} } 0 test message-4.2 {Bug [5d991b822e]} { # Want this not to leak traces set var INIT message .b -textvariable var trace add variable var unset {apply {args { .b configure -textvariable new }}} pack .b bind .b <Configure> {unset -nocomplain var} update destroy .b unset new } {} cleanupTests return |
Changes to jni/sdl2tk/tests/scale.test.
︙ | ︙ | |||
1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 | } -body { pack [scale .s] # non-regression test for bug [55b95f578a] - shall just not crash .s configure -from -6.8e99 -to 8.8e99 } -cleanup { destroy .s } -result {} option clear # cleanup cleanupTests return | > > > > > > > > > > > > > > > > > > > > > > > > > > | 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 | } -body { pack [scale .s] # non-regression test for bug [55b95f578a] - shall just not crash .s configure -from -6.8e99 -to 8.8e99 } -cleanup { destroy .s } -result {} test scale-22.1 {Bug [5d991b822e]} { # Want this not to crash set var INIT scale .b -variable var trace add variable var unset {apply {args { .b configure -variable {} }}} pack .b bind .b <Configure> {unset var} update destroy .b } {} test scale-22.2 {Bug [5d991b822e]} { # Want this not to leak traces set var INIT scale .b -variable var trace add variable var unset {apply {args { .b configure -variable new }}} pack .b bind .b <Configure> {unset -nocomplain var} update destroy .b unset new } {} option clear # cleanup cleanupTests return |
Changes to jni/tcl/doc/TraceVar.3.
︙ | ︙ | |||
327 328 329 330 331 332 333 | The return value from \fIproc\fR is only used during read and write tracing. During unset traces, the return value is ignored and all relevant trace procedures will always be invoked. .SH "RESTRICTIONS" .PP A trace procedure can be called at any time, even when there | | | | | | 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 | The return value from \fIproc\fR is only used during read and write tracing. During unset traces, the return value is ignored and all relevant trace procedures will always be invoked. .SH "RESTRICTIONS" .PP A trace procedure can be called at any time, even when there are partially formed results stored in the interpreter. If the trace procedure does anything that could damage this result (such as calling \fBTcl_Eval\fR) then it must use the \fBTcl_SaveInterpState\fR and related routines to save and restore the original state of the interpreter before it returns. .SH "UNDEFINED VARIABLES" .PP It is legal to set a trace on an undefined variable. The variable will still appear to be undefined until the first time its value is set. If an undefined variable is traced and then unset, the unset will fail with an error |
︙ | ︙ |
Changes to jni/tcl/generic/tclObj.c.
︙ | ︙ | |||
2800 2801 2802 2803 2804 2805 2806 | * long range get auto-narrowed to tclIntType, while all the * values in the unsigned long range will fit in a long. */ mp_int big; UNPACK_BIGNUM(objPtr, big); | | | | 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 | * long range get auto-narrowed to tclIntType, while all the * values in the unsigned long range will fit in a long. */ mp_int big; UNPACK_BIGNUM(objPtr, big); if ((size_t) big.used <= (CHAR_BIT * sizeof(long) + MP_DIGIT_BIT - 1) / MP_DIGIT_BIT) { unsigned long value = 0, numBytes = sizeof(long); long scratch; unsigned char *bytes = (unsigned char *) &scratch; if (mp_to_unsigned_bin_n(&big, bytes, &numBytes) == MP_OKAY) { while (numBytes-- > 0) { value = (value << CHAR_BIT) | *bytes++; |
︙ | ︙ | |||
3100 3101 3102 3103 3104 3105 3106 | * Tcl_WideInt, even when auto-narrowing is enabled. */ mp_int big; UNPACK_BIGNUM(objPtr, big); if ((size_t) big.used <= (CHAR_BIT * sizeof(Tcl_WideInt) | | | 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 | * Tcl_WideInt, even when auto-narrowing is enabled. */ mp_int big; UNPACK_BIGNUM(objPtr, big); if ((size_t) big.used <= (CHAR_BIT * sizeof(Tcl_WideInt) + MP_DIGIT_BIT - 1) / MP_DIGIT_BIT) { Tcl_WideUInt value = 0; unsigned long numBytes = sizeof(Tcl_WideInt); Tcl_WideInt scratch; unsigned char *bytes = (unsigned char *) &scratch; if (mp_to_unsigned_bin_n(&big, bytes, &numBytes) == MP_OKAY) { while (numBytes-- > 0) { |
︙ | ︙ | |||
3519 3520 3521 3522 3523 3524 3525 | Tcl_Obj *objPtr, /* Object to set */ mp_int *bignumValue) /* Value to store */ { if (Tcl_IsShared(objPtr)) { Tcl_Panic("%s called with shared object", "Tcl_SetBignumObj"); } if ((size_t) bignumValue->used | | | 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 | Tcl_Obj *objPtr, /* Object to set */ mp_int *bignumValue) /* Value to store */ { if (Tcl_IsShared(objPtr)) { Tcl_Panic("%s called with shared object", "Tcl_SetBignumObj"); } if ((size_t) bignumValue->used <= (CHAR_BIT * sizeof(long) + MP_DIGIT_BIT - 1) / MP_DIGIT_BIT) { unsigned long value = 0, numBytes = sizeof(long); long scratch; unsigned char *bytes = (unsigned char *) &scratch; if (mp_to_unsigned_bin_n(bignumValue, bytes, &numBytes) != MP_OKAY) { goto tooLargeForLong; } |
︙ | ︙ | |||
3544 3545 3546 3547 3548 3549 3550 | } mp_clear(bignumValue); return; } tooLargeForLong: #ifndef TCL_WIDE_INT_IS_LONG if ((size_t) bignumValue->used | | | 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 | } mp_clear(bignumValue); return; } tooLargeForLong: #ifndef TCL_WIDE_INT_IS_LONG if ((size_t) bignumValue->used <= (CHAR_BIT * sizeof(Tcl_WideInt) + MP_DIGIT_BIT - 1) / MP_DIGIT_BIT) { Tcl_WideUInt value = 0; unsigned long numBytes = sizeof(Tcl_WideInt); Tcl_WideInt scratch; unsigned char *bytes = (unsigned char *)&scratch; if (mp_to_unsigned_bin_n(bignumValue, bytes, &numBytes) != MP_OKAY) { goto tooLargeForWide; |
︙ | ︙ |
Changes to jni/tcl/generic/tclStrToD.c.
︙ | ︙ | |||
1851 1852 1853 1854 1855 1856 1857 | * significand (the most significant) corresponds to the * 2**(binExponent+M2 + 1) bit of 2*M2*v. Allocate enough digits to hold * that quantity, then convert the significand to a large integer, scaled * appropriately. Then multiply by the appropriate power of 5. */ msb = binExponent + M2; /* 1008 */ | | | | | 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 | * significand (the most significant) corresponds to the * 2**(binExponent+M2 + 1) bit of 2*M2*v. Allocate enough digits to hold * that quantity, then convert the significand to a large integer, scaled * appropriately. Then multiply by the appropriate power of 5. */ msb = binExponent + M2; /* 1008 */ nDigits = msb / MP_DIGIT_BIT + 1; mp_init_size(&twoMv, nDigits); i = (msb % MP_DIGIT_BIT + 1); twoMv.used = nDigits; significand *= SafeLdExp(1.0, i); while (--nDigits >= 0) { twoMv.dp[nDigits] = (mp_digit) significand; significand -= (mp_digit) significand; significand = SafeLdExp(significand, MP_DIGIT_BIT); } for (i = 0; i <= 8; ++i) { if (M5 & (1 << i)) { mp_mul(&twoMv, pow5+i, &twoMv); } } |
︙ | ︙ | |||
3158 3159 3160 3161 3162 3163 3164 | static inline int ShouldBankerRoundUpPowD( mp_int *b, /* Numerator of the fraction. */ int sd, /* Denominator is 2**(sd*DIGIT_BIT). */ int isodd) /* 1 if the digit is odd, 0 if even. */ { int i; | | | 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 | static inline int ShouldBankerRoundUpPowD( mp_int *b, /* Numerator of the fraction. */ int sd, /* Denominator is 2**(sd*DIGIT_BIT). */ int isodd) /* 1 if the digit is odd, 0 if even. */ { int i; static const mp_digit topbit = ((mp_digit)1) << (MP_DIGIT_BIT - 1); if (b->used < sd || (b->dp[sd-1] & topbit) == 0) { return 0; } if (b->dp[sd-1] != topbit) { return 1; } |
︙ | ︙ | |||
4264 4265 4266 4267 4268 4269 4270 | * The denominator is a power of 2, so we can replace division by * digit shifts. First we round up s2 to a multiple of DIGIT_BIT, * and adjust m2 and b2 accordingly. Then we launch into a version * of the comparison that's specialized for the 'power of mp_digit * in the denominator' case. */ | | | | | 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 | * The denominator is a power of 2, so we can replace division by * digit shifts. First we round up s2 to a multiple of DIGIT_BIT, * and adjust m2 and b2 accordingly. Then we launch into a version * of the comparison that's specialized for the 'power of mp_digit * in the denominator' case. */ if (s2 % MP_DIGIT_BIT != 0) { int delta = MP_DIGIT_BIT - (s2 % MP_DIGIT_BIT); b2 += delta; m2plus += delta; m2minus += delta; s2 += delta; } return ShorteningBignumConversionPowD(&d, convType, bw, b2, b5, m2plus, m2minus, m5, s2/MP_DIGIT_BIT, k, len, ilim, ilim1, decpt, endPtr); } else { /* * Alas, there's no helpful special case; use full-up bignum * arithmetic for the conversion. */ |
︙ | ︙ | |||
4320 4321 4322 4323 4324 4325 4326 | * The denominator is a power of 2, so we can replace division by * digit shifts. First we round up s2 to a multiple of DIGIT_BIT, * and adjust m2 and b2 accordingly. Then we launch into a version * of the comparison that's specialized for the 'power of mp_digit * in the denominator' case. */ | | | | | 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 | * The denominator is a power of 2, so we can replace division by * digit shifts. First we round up s2 to a multiple of DIGIT_BIT, * and adjust m2 and b2 accordingly. Then we launch into a version * of the comparison that's specialized for the 'power of mp_digit * in the denominator' case. */ if (s2 % MP_DIGIT_BIT != 0) { int delta = MP_DIGIT_BIT - (s2 % MP_DIGIT_BIT); b2 += delta; s2 += delta; } return StrictBignumConversionPowD(&d, convType, bw, b2, b5, s2/MP_DIGIT_BIT, k, len, ilim, ilim1, decpt, endPtr); } else { /* * There are no helpful special cases, but at least we know in * advance how many digits we will convert. We can run the * conversion in steps of DIGIT_GROUP digits, so as to have many * fewer mp_int divisions. */ |
︙ | ︙ | |||
4452 4453 4454 4455 4456 4457 4458 | * the significand of a double. */ maxDigits = (int) ((DBL_MAX_EXP * log((double) FLT_RADIX) + 0.5 * log(10.)) / log(10.)); minDigits = (int) floor((DBL_MIN_EXP - DBL_MANT_DIG) * log((double) FLT_RADIX) / log(10.)); | | | 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 | * the significand of a double. */ maxDigits = (int) ((DBL_MAX_EXP * log((double) FLT_RADIX) + 0.5 * log(10.)) / log(10.)); minDigits = (int) floor((DBL_MIN_EXP - DBL_MANT_DIG) * log((double) FLT_RADIX) / log(10.)); log10_DIGIT_MAX = (int) floor(MP_DIGIT_BIT * log(2.) / log(10.)); /* * Nokia 770's software-emulated floating point is "middle endian": the * bytes within a 32-bit word are little-endian (like the native * integers), but the two words of a 'double' are presented most * significant word first. */ |
︙ | ︙ | |||
4656 4657 4658 4659 4660 4661 4662 | /* * Accumulate the result, one mp_digit at a time. */ r = 0.0; for (i=b.used-1 ; i>=0 ; --i) { | | | 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 | /* * Accumulate the result, one mp_digit at a time. */ r = 0.0; for (i=b.used-1 ; i>=0 ; --i) { r = ldexp(r, MP_DIGIT_BIT) + b.dp[i]; } mp_clear(&b); /* * Scale the result to the correct number of bits. */ |
︙ | ︙ | |||
4725 4726 4727 4728 4729 4730 4731 | } else { mp_copy(a, &b); } if (!exact) { mp_add_d(&b, 1, &b); } for (i=b.used-1 ; i>=0 ; --i) { | | | 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 | } else { mp_copy(a, &b); } if (!exact) { mp_add_d(&b, 1, &b); } for (i=b.used-1 ; i>=0 ; --i) { r = ldexp(r, MP_DIGIT_BIT) + b.dp[i]; } r = ldexp(r, bits - mantBits); } } mp_clear(&b); return r; } |
︙ | ︙ | |||
4775 4776 4777 4778 4779 4780 4781 | mp_mul_2d(a, shift, &b); } else if (shift < 0) { mp_div_2d(a, -shift, &b, NULL); } else { mp_copy(a, &b); } for (i=b.used-1 ; i>=0 ; --i) { | | | 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 | mp_mul_2d(a, shift, &b); } else if (shift < 0) { mp_div_2d(a, -shift, &b, NULL); } else { mp_copy(a, &b); } for (i=b.used-1 ; i>=0 ; --i) { r = ldexp(r, MP_DIGIT_BIT) + b.dp[i]; } r = ldexp(r, bits - mantBits); } } mp_clear(&b); return r; } |
︙ | ︙ | |||
4837 4838 4839 4840 4841 4842 4843 | /* * Accumulate the result, one mp_digit at a time. */ r = 0.0; for (i=b.used-1; i>=0; --i) { | | | 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 | /* * Accumulate the result, one mp_digit at a time. */ r = 0.0; for (i=b.used-1; i>=0; --i) { r = ldexp(r, MP_DIGIT_BIT) + b.dp[i]; } mp_clear(&b); /* * Return the result with the appropriate sign. */ |
︙ | ︙ |
Changes to jni/tcl/generic/tclStringObj.c.
︙ | ︙ | |||
2205 2206 2207 2208 2209 2210 2211 | bits = uw; while (uw) { numDigits++; uw /= base; } #endif } else if (useBig && big.used) { | | | | | 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 | bits = uw; while (uw) { numDigits++; uw /= base; } #endif } else if (useBig && big.used) { int leftover = (big.used * MP_DIGIT_BIT) % numBits; mp_digit mask = (~(mp_digit)0) << (MP_DIGIT_BIT-leftover); numDigits = 1 + (((Tcl_WideInt) big.used * MP_DIGIT_BIT) / numBits); while ((mask & big.dp[big.used-1]) == 0) { numDigits--; mask >>= numBits; } if (numDigits > INT_MAX) { msg = overflow; errCode = "OVERFLOW"; |
︙ | ︙ | |||
2245 2246 2247 2248 2249 2250 2251 | bytes = TclGetString(pure); toAppend = length = (int) numDigits; while (numDigits--) { int digitOffset; if (useBig && big.used) { if (index < big.used && (size_t) shift < | | | | 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 | bytes = TclGetString(pure); toAppend = length = (int) numDigits; while (numDigits--) { int digitOffset; if (useBig && big.used) { if (index < big.used && (size_t) shift < CHAR_BIT*sizeof(Tcl_WideUInt) - MP_DIGIT_BIT) { bits |= ((Tcl_WideUInt) big.dp[index++]) << shift; shift += MP_DIGIT_BIT; } shift -= numBits; } digitOffset = (int) (bits % base); if (digitOffset > 9) { if (ch == 'X') { bytes[numDigits] = 'A' + digitOffset - 10; |
︙ | ︙ |
Changes to jni/tcl/generic/tclTomMath.h.
|
| | < < < < < < < < | | | 1 2 3 4 5 6 7 8 9 10 | /* LibTomMath, multiple-precision integer library -- Tom St Denis */ /* SPDX-License-Identifier: Unlicense */ #ifndef BN_H_ #define BN_H_ #include "tclTomMathDecls.h" #ifndef MODULE_SCOPE #define MODULE_SCOPE extern #endif |
︙ | ︙ | |||
111 112 113 114 115 116 117 | # define DIGIT_BIT (((CHAR_BIT * MP_SIZEOF_MP_DIGIT) - 1)) /* bits per digit */ #endif #define MP_DIGIT_BIT DIGIT_BIT #define MP_MASK ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1)) #define MP_DIGIT_MAX MP_MASK | > > | > | | | | > < < < | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < < < < | 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | # define DIGIT_BIT (((CHAR_BIT * MP_SIZEOF_MP_DIGIT) - 1)) /* bits per digit */ #endif #define MP_DIGIT_BIT DIGIT_BIT #define MP_MASK ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1)) #define MP_DIGIT_MAX MP_MASK typedef int mp_sign; #define MP_ZPOS 0 /* positive integer */ #define MP_NEG 1 /* negative */ typedef int mp_ord; #define MP_LT -1 /* less than */ #define MP_EQ 0 /* equal to */ #define MP_GT 1 /* greater than */ typedef int mp_bool; #define MP_YES 1 /* yes response */ #define MP_NO 0 /* no response */ typedef int mp_err; #define MP_OKAY 0 /* ok result */ #define MP_ERR -1 /* unknown error */ #define MP_MEM -2 /* out of mem */ #define MP_VAL -3 /* invalid input */ #define MP_RANGE MP_VAL #define MP_ITER -4 /* Max. iterations reached */ /* Primality generation flags */ #define LTM_PRIME_BBS 0x0001 /* BBS style prime */ #define LTM_PRIME_SAFE 0x0002 /* Safe prime (p-1)/2 == prime */ #define LTM_PRIME_2MSB_ON 0x0008 /* force 2nd MSB to 1 */ /* tunable cutoffs */ /* define this to use lower memory usage routines (exptmods mostly) */ /* #define MP_LOW_MEM */ /* default precision */ #ifndef MP_PREC # ifndef MP_LOW_MEM # define MP_PREC 32 /* default digits of precision */ # elif defined(MP_8BIT) # define MP_PREC 16 /* default digits of precision */ # else # define MP_PREC 8 /* default digits of precision */ # endif #endif /* size of comba arrays, should be at least 2 * 2**(BITS_PER_WORD - BITS_PER_DIGIT*2) */ #define MP_WARRAY (1u << (((sizeof(mp_word) * CHAR_BIT) - (2 * DIGIT_BIT)) + 1)) /* * MP_WUR - warn unused result * --------------------------- * * The result of functions annotated with MP_WUR must be * checked and cannot be ignored. * * Most functions in libtommath return an error code. * This error code must be checked in order to prevent crashes or invalid * results. * * If you still want to avoid the error checks for quick and dirty programs * without robustness guarantees, you can `#define MP_WUR` before including * tommath.h, disabling the warnings. */ #ifndef MP_WUR # if defined(__GNUC__) && __GNUC__ >= 4 # define MP_WUR __attribute__((warn_unused_result)) # else # define MP_WUR # endif #endif #if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 301) # define MP_DEPRECATED(x) __attribute__((deprecated("replaced by " #x))) # define PRIVATE_MP_DEPRECATED_PRAGMA(s) _Pragma(#s) # define MP_DEPRECATED_PRAGMA(s) PRIVATE_MP_DEPRECATED_PRAGMA(GCC warning s) #elif defined(_MSC_VER) && _MSC_VER >= 1500 # define MP_DEPRECATED(x) __declspec(deprecated("replaced by " #x)) # define MP_DEPRECATED_PRAGMA(s) __pragma(message(s)) #else # define MP_DEPRECATED # define MP_DEPRECATED_PRAGMA(s) #endif #define USED(m) ((m)->used) #define DIGIT(m,k) ((m)->dp[(k)]) #define SIGN(m) ((m)->sign) /* the infamous mp_int structure */ #ifndef MP_INT_DECLARED #define MP_INT_DECLARED typedef struct mp_int mp_int; #endif struct mp_int { int used, alloc, sign; mp_digit *dp; }; /* callback for mp_prime_random, should fill dst with random bytes and return how many read [upto len] */ typedef int ltm_prime_callback(unsigned char *dst, int len, void *dat); /* error code to char* string */ const char *mp_error_to_string(int code); /* ---> init and deinit bignum functions <--- */ /* init a bignum */ /* int mp_init(mp_int *a); |
︙ | ︙ |
Changes to jni/tcl/generic/tclTomMathDecls.h.
︙ | ︙ | |||
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #define XFREE(mem, size) TclBNFree(mem) #define XREALLOC(mem, oldsize, newsize) TclBNRealloc(mem, newsize) /* Rename the global symbols in libtommath to avoid linkage conflicts */ #define bn_reverse TclBN_reverse #define fast_s_mp_mul_digs TclBN_fast_s_mp_mul_digs #define fast_s_mp_sqr TclBN_fast_s_mp_sqr #define mp_add TclBN_mp_add #define mp_add_d TclBN_mp_add_d #define mp_and TclBN_mp_and #define mp_clamp TclBN_mp_clamp #define mp_clear TclBN_mp_clear #define mp_clear_multi TclBN_mp_clear_multi #define mp_cmp TclBN_mp_cmp | > > > | 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #define XFREE(mem, size) TclBNFree(mem) #define XREALLOC(mem, oldsize, newsize) TclBNRealloc(mem, newsize) /* Rename the global symbols in libtommath to avoid linkage conflicts */ #define bn_reverse TclBN_reverse #define s_mp_reverse TclBN_reverse #define fast_s_mp_mul_digs TclBN_fast_s_mp_mul_digs #define s_mp_mul_digs_fast TclBN_fast_s_mp_mul_digs #define fast_s_mp_sqr TclBN_fast_s_mp_sqr #define s_mp_sqr_fast TclBN_fast_s_mp_sqr #define mp_add TclBN_mp_add #define mp_add_d TclBN_mp_add_d #define mp_and TclBN_mp_and #define mp_clamp TclBN_mp_clamp #define mp_clear TclBN_mp_clear #define mp_clear_multi TclBN_mp_clear_multi #define mp_cmp TclBN_mp_cmp |
︙ | ︙ | |||
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #define mp_init TclBN_mp_init #define mp_init_copy TclBN_mp_init_copy #define mp_init_multi TclBN_mp_init_multi #define mp_init_set TclBN_mp_init_set #define mp_init_set_int TclBN_mp_init_set_int #define mp_init_size TclBN_mp_init_size #define mp_karatsuba_mul TclBN_mp_karatsuba_mul #define mp_karatsuba_sqr TclBN_mp_karatsuba_sqr #define mp_lshd TclBN_mp_lshd #define mp_mod TclBN_mp_mod #define mp_mod_2d TclBN_mp_mod_2d #define mp_mul TclBN_mp_mul #define mp_mul_2 TclBN_mp_mul_2 #define mp_mul_2d TclBN_mp_mul_2d #define mp_mul_d TclBN_mp_mul_d | > > | 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | #define mp_init TclBN_mp_init #define mp_init_copy TclBN_mp_init_copy #define mp_init_multi TclBN_mp_init_multi #define mp_init_set TclBN_mp_init_set #define mp_init_set_int TclBN_mp_init_set_int #define mp_init_size TclBN_mp_init_size #define mp_karatsuba_mul TclBN_mp_karatsuba_mul #define s_mp_karatsuba_mul TclBN_mp_karatsuba_mul #define mp_karatsuba_sqr TclBN_mp_karatsuba_sqr #define s_mp_karatsuba_sqr TclBN_mp_karatsuba_sqr #define mp_lshd TclBN_mp_lshd #define mp_mod TclBN_mp_mod #define mp_mod_2d TclBN_mp_mod_2d #define mp_mul TclBN_mp_mul #define mp_mul_2 TclBN_mp_mul_2 #define mp_mul_2d TclBN_mp_mul_2d #define mp_mul_d TclBN_mp_mul_d |
︙ | ︙ | |||
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | #define mp_tc_and TclBN_mp_tc_and #define mp_tc_div_2d TclBN_mp_tc_div_2d #define mp_tc_or TclBN_mp_tc_or #define mp_tc_xor TclBN_mp_tc_xor #define mp_to_unsigned_bin TclBN_mp_to_unsigned_bin #define mp_to_unsigned_bin_n TclBN_mp_to_unsigned_bin_n #define mp_toom_mul TclBN_mp_toom_mul #define mp_toom_sqr TclBN_mp_toom_sqr #define mp_toradix_n TclBN_mp_toradix_n #define mp_unsigned_bin_size TclBN_mp_unsigned_bin_size #define mp_xor TclBN_mp_xor #define mp_zero TclBN_mp_zero #define s_mp_add TclBN_s_mp_add #define s_mp_mul_digs TclBN_s_mp_mul_digs #define s_mp_sqr TclBN_s_mp_sqr | > > | 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | #define mp_tc_and TclBN_mp_tc_and #define mp_tc_div_2d TclBN_mp_tc_div_2d #define mp_tc_or TclBN_mp_tc_or #define mp_tc_xor TclBN_mp_tc_xor #define mp_to_unsigned_bin TclBN_mp_to_unsigned_bin #define mp_to_unsigned_bin_n TclBN_mp_to_unsigned_bin_n #define mp_toom_mul TclBN_mp_toom_mul #define s_mp_toom_mul TclBN_mp_toom_mul #define mp_toom_sqr TclBN_mp_toom_sqr #define s_mp_toom_sqr TclBN_mp_toom_sqr #define mp_toradix_n TclBN_mp_toradix_n #define mp_unsigned_bin_size TclBN_mp_unsigned_bin_size #define mp_xor TclBN_mp_xor #define mp_zero TclBN_mp_zero #define s_mp_add TclBN_s_mp_add #define s_mp_mul_digs TclBN_s_mp_mul_digs #define s_mp_sqr TclBN_s_mp_sqr |
︙ | ︙ |
Changes to jni/tcl/generic/tclTomMathInterface.c.
︙ | ︙ | |||
139 140 141 142 143 144 145 | /* * Store the magnitude in the bignum. */ p = a->dp; while (v) { *p++ = (mp_digit) (v & MP_MASK); | | | 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | /* * Store the magnitude in the bignum. */ p = a->dp; while (v) { *p++ = (mp_digit) (v & MP_MASK); v >>= MP_DIGIT_BIT; } a->used = p - a->dp; } /* *---------------------------------------------------------------------- * |
︙ | ︙ | |||
215 216 217 218 219 220 221 | /* * Store the magnitude in the bignum. */ p = a->dp; while (v) { *p++ = (mp_digit) (v & MP_MASK); | | | 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 | /* * Store the magnitude in the bignum. */ p = a->dp; while (v) { *p++ = (mp_digit) (v & MP_MASK); v >>= MP_DIGIT_BIT; } a->used = p - a->dp; } /* * Local Variables: * mode: c * c-basic-offset: 4 * fill-column: 78 * End: */ |