MCPcopy Create free account
hub / github.com/NetHack/NetHack / DupNewWindow

Function DupNewWindow

sys/amiga/amiwind.c:799–838  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

797#endif
798
799struct NewWindow *
800DupNewWindow(struct NewWindow *win)
801{
802 struct NewWindow *nwin;
803 struct Gadget *ngd, *gd, *pgd = NULL;
804 struct PropInfo *pip;
805 struct StringInfo *sip;
806
807 /* Copy the (Ext)NewWindow structure */
808
809 nwin = (struct NewWindow *) alloc(sizeof(struct NewWindow));
810 *nwin = *win;
811
812 /* Now do the gadget list */
813
814 nwin->FirstGadget = NULL;
815 for (gd = win->FirstGadget; gd; gd = gd->NextGadget) {
816 ngd = (struct Gadget *) alloc(sizeof(struct Gadget));
817 *ngd = *gd;
818 if (gd->GadgetType == STRGADGET) {
819 sip = (struct StringInfo *) alloc(sizeof(struct StringInfo));
820 *sip = *((struct StringInfo *) gd->SpecialInfo);
821 sip->Buffer = (UBYTE *) alloc(sip->MaxChars);
822 *sip->Buffer = 0;
823 ngd->SpecialInfo = (APTR) sip;
824 } else if (gd->GadgetType == PROPGADGET) {
825 pip = (struct PropInfo *) alloc(sizeof(struct PropInfo));
826 *pip = *((struct PropInfo *) gd->SpecialInfo);
827 ngd->SpecialInfo = (APTR) pip;
828 }
829 if (pgd)
830 pgd->NextGadget = ngd;
831 else
832 nwin->FirstGadget = ngd;
833 pgd = ngd;
834 ngd->NextGadget = NULL;
835 ngd->UserData = (APTR) 0x45f35c3d; // magic cookie for FreeNewWindow()
836 }
837 return (nwin);
838}
839
840void
841FreeNewWindow(struct NewWindow *win)

Callers 1

DoMenuScrollFunction · 0.85

Calls 1

allocFunction · 0.70

Tested by

no test coverage detected