-+-+-+-+-+-+-+-+ START OF PART 200 -+-+-+-+-+-+-+-+ X rot3d2 = ptk_stringtoint("menuid", "rotator3d2");`20 X rot2d1 = ptk_stringtoint("menuid", "rotator2d1");`20 X rot2d2 = ptk_stringtoint("menuid", "rotator2d2");`20 X rot1d = ptk_stringtoint("menuid", "rotator1d");`20 X size = ptk_point(0.3, 0.2); X ptk_createrotator(debugwsid, rot3d1, PTKETHREED, &size, "rotator", X 0.02); X ptk_setrotatorattrs(debugwsid, rot3d1, windowtextfont, X bannertextcolourind, arrowcolourind,`20 X arrowedgecolourind,`20 X windowcolourind, bannercolourind, X bannercolourind, tlcolourind, brcolourind); X ptk_createrotator(debugwsid, rot3d2, PTKETHREED, &size, "rotator", X 0.02); X ptk_setrotatorattrs(debugwsid, rot3d2, windowtextfont, X bannertextcolourind, arrowcolourind,`20 X arrowedgecolourind,`20 X windowcolourind, bannercolourind, X bannercolourind, tlcolourind, brcolourind); X size = ptk_point(0.2, 0.2); X ptk_createrotator(debugwsid, rot2d1, PTKETWOD, &size, "rotator", X 0.02); X ptk_setrotatorattrs(debugwsid, rot2d1, windowtextfont, X bannertextcolourind, arrowcolourind,`20 X arrowedgecolourind,`20 X windowcolourind, bannercolourind, X bannercolourind, tlcolourind, brcolourind); X ptk_createrotator(debugwsid, rot2d2, PTKETWOD, &size, "rotator", X 0.02); X ptk_setrotatorattrs(debugwsid, rot2d2, windowtextfont, X bannertextcolourind, arrowcolourind,`20 X arrowedgecolourind,`20 X windowcolourind, bannercolourind, X bannercolourind, tlcolourind, brcolourind); X ptk_createrotator(debugwsid, rot1d, PTKEONED, &size, "rotator", X 0.02); X ptk_setrotatorattrs(debugwsid, rot1d, windowtextfont, X bannertextcolourind, arrowcolourind,`20 X arrowedgecolourind,`20 X windowcolourind, bannercolourind, X bannercolourind, tlcolourind, brcolourind); X`7D /* makemenus */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void do_pickelem(C(Pint *) stid, C(Pint *) elemptr) XPreANSI(Pint *stid) XPreANSI(Pint *elemptr) X`7B X Pqpick pick; X Ppickpathel pathel`5B10`5D; X X *stid = currentcontent; X psetpickfilter(debugwsid, 1, &contentset, &excl); X psetlocmode(debugwsid, 1, PREQUEST, PES_ECHO); X psetpickmode(debugwsid, 1, PREQUEST, PES_ECHO); `20 X pick.pick.pick_path = pathel; X preqpick(debugwsid, 1, 10, &pick); X if (pick.status == PQP_OK) X *elemptr = pick.pick.pick_path`5B1`5D.pick_id; `20 X else X *elemptr = -1; X`7D /* do_pickelem */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void do_scrollterminal() X`7B X Ppoint pos; X ptkboolean quit; X Pevent eventdata; X Ploc inputloc; X ptksgeneralinput geninput; X ptksmenuoutput menuoutput; X Plocrec locrec; X Ptxpath direction; X Pint numlines, maxlines, maxcolumns, txfont, txcolour, err; X X ptk_setrotatortitle(rot1d, "scroll terminal"); X pos = ptk_point(0.1, 0.88); X ptk_setmenuposition(rot1d, &pos); X ptk_postmenu(debugwsid, rot1d); X predrawallstruct(debugwsid, PALWAYS); X psetlocmode(debugwsid, 1, PEVENT, PES_ECHO); X quit = FALSE; X ptk_inqterminaldata(terminalwindow, &maxlines, &maxcolumns, &txfont, X &txcolour, &err); X do X `7B X pawaitevent(0.0, &eventdata); X if ((eventdata.class == PI_LOCATOR) && (eventdata.ws == debugwsid)) X `7B X pgetloc(&inputloc); X geninput.inputclass = PI_LOCATOR; X geninput.ptkugeninput.locpoint = inputloc.position; X if (ptk_scanmenus(debugwsid, &geninput, &menuoutput)) X `7B X psetlocmode(debugwsid, 1, PREQUEST, PES_ECHO); X if (menuoutput.menuid == rot1d) X`09`7B X switch (menuoutput.itemnum) X`09 `7B X`09 case 1: X direction = PTP_DOWN; X numlines = (Pint)(menuoutput.value.y * (Pfloat)maxlines); X break; X X`09 case 2: X direction = PTP_UP; X numlines = (Pint)((1.0 - menuoutput.value.y) *`20 X (Pfloat)maxlines); X break; X`09 `7D X ptk_scrollterminal(terminalwindow, direction, numlines); X predrawallstruct(debugwsid, PALWAYS); X`09`7D X psetlocmode(debugwsid, 1, PEVENT, PES_ECHO); X `7D X else X `7B X quit = TRUE; X `7D X `7D X `7D while (!quit); X ptk_unpostmenu(debugwsid, rot1d); X`7D /* do_scrollterminal */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void do_scrollcontent() X`7B X Ppoint pos; X ptkboolean quit; X Pevent eventdata; X Ploc inputloc; X ptksgeneralinput geninput; X ptksmenuoutput menuoutput; X Plocrec locrec; X Ptxpath direction; X Pint numlines, range1, range2, maxrange2, err, scrollfactor; X X ptk_setrotatortitle(rot1d, "scroll content"); X pos = ptk_point(0.1, 0.88); X ptk_setmenuposition(rot1d, &pos); X ptk_postmenu(debugwsid, rot1d); X predrawallstruct(debugwsid, PALWAYS); X psetlocmode(debugwsid, 1, PEVENT, PES_ECHO); X quit = FALSE; X maxrange2 = ptk_elemcount(currentcontent); X ptk_inqcontentviewrange(contentwindow, &range1, &range2, &err); X scrollfactor = range2 - range1; X if (scrollfactor < 10) X scrollfactor = 10; X do X `7B X pawaitevent(0.0, &eventdata); X if ((eventdata.class == PI_LOCATOR) && (eventdata.ws == debugwsid)) X `7B X pgetloc(&inputloc); X geninput.inputclass = PI_LOCATOR; X geninput.ptkugeninput.locpoint = inputloc.position; X if (ptk_scanmenus(debugwsid, &geninput, &menuoutput)) X `7B X psetlocmode(debugwsid, 1, PREQUEST, PES_ECHO); X if (menuoutput.menuid == rot1d) X`09`7B X switch (menuoutput.itemnum) X`09 `7B X`09 case 1: X numlines = (Pint)(menuoutput.value.y * (Pfloat)scrollfactor); X if (range1 - numlines >= 0) X`09 `7B X range1 -= numlines; X range2 -= numlines; X `7D X else X`09 `7B X range1 = 0; X range2 = scrollfactor; X `7D X break; X X`09 case 2: X numlines = (Pint)((1.0 - menuoutput.value.y) *`20 X (Pfloat)scrollfactor); X if (range2 + numlines <= maxrange2) X`09 `7B X range1 += numlines; X range2 += numlines; X `7D X else X`09 `7B X range1 = maxrange2 - scrollfactor; X range2 = maxrange2; X `7D X break; X`09 `7D X ptk_setcontentviewrange(contentwindow, range1, range2); X predrawallstruct(debugwsid, PALWAYS); X`09`7D X psetlocmode(debugwsid, 1, PEVENT, PES_ECHO); X `7D X else X `7B X quit = TRUE; X `7D X `7D X `7D while (!quit); X ptk_unpostmenu(debugwsid, rot1d); X`7D /* do_scrollcontent */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void do_zoomtopology(C(ptksmenuoutput *) menuout, C(Plimit *) window) XPreANSI(ptksmenuoutput *menuout) XPreANSI(Plimit *window) X`7B X Ppoint scale; X X switch (menuout->itemnum) X `7B X case 1: /* decrease x and y */ X scale = ptk_point(1.0 - (menuout->value.y * 0.1),`20 X 1.0 - (menuout->value.y * 0.1)); X break; X X case 2: /* increase x and y */ X scale = ptk_point(1.0 + ((1.0 - menuout->value.y) * 0.1),`20 X 1.0 + ((1.0 - menuout->value.y) * 0.1)); X break; X X `7D X ptk_scalelimits(&scale, window); X`7D /* do_zoomtopology */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void do_pantopology(C(ptksmenuoutput *) menuout, C(Plimit *) window) XPreANSI(ptksmenuoutput *menuout) XPreANSI(Plimit *window) X`7B X Ppoint shift; X Pfloat movefactor; X X movefactor = (topview.xmax - topview.xmin) / 2.0; X switch (menuout->itemnum) X `7B X case 1: /* decrease y */ X shift = ptk_point(0.0, -(menuout->value.y * movefactor)); X break; X X case 2: /* increase y */ X shift = ptk_point(0.0, ((1.0 - menuout->value.y) * movefactor)); X break; X X case 3: /* increase x */ X shift = ptk_point(((1.0 - menuout->value.x) * movefactor), 0.0); X break; X X case 4: /* decrease x */ X shift = ptk_point(-(menuout->value.x * movefactor), 0.0); X break; X `7D X ptk_shiftlimits(&shift, window); X`7D /* do_pantopology */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void do_topologyview() X`7B X Ppoint pos; X ptkboolean quit; X Pevent eventdata; X Ploc initloc, inputloc; X ptksgeneralinput geninput; X ptksmenuoutput menuoutput; X Plocrec locrec; X X ptk_setrotatortitle(rot2d1, "pan"); X ptk_setrotatortitle(rot1d, "zoom"); X pos = ptk_point(0.1, 0.88); X ptk_setmenuposition(rot2d1, &pos); X pos = ptk_point(0.1, 0.66); X ptk_setmenuposition(rot1d, &pos); X ptk_postmenu(debugwsid, rot2d1); X ptk_postmenu(debugwsid, rot1d); X predrawallstruct(debugwsid, PALWAYS); X psetlocmode(debugwsid, 1, PEVENT, PES_ECHO); X quit = FALSE; X do X `7B X pawaitevent(0.0, &eventdata); X if ((eventdata.class == PI_LOCATOR) && (eventdata.ws == debugwsid)) X `7B X pgetloc(&inputloc); X geninput.inputclass = PI_LOCATOR; X geninput.ptkugeninput.locpoint = inputloc.position; X if (ptk_scanmenus(debugwsid, &geninput, &menuoutput)) X `7B X psetlocmode(debugwsid, 1, PREQUEST, PES_ECHO); X if (menuoutput.menuid == rot2d1) X`09`7B X do_pantopology(&menuoutput, &topview); X ptk_settopologyviewarea(topologywindow, &topview); X predrawallstruct(debugwsid, PALWAYS); X`09`7D X else X if (menuoutput.menuid == rot1d) X`09`7B X do_zoomtopology(&menuoutput, &topview); X ptk_settopologyviewarea(topologywindow, &topview); X predrawallstruct(debugwsid, PALWAYS); X`09`7D X psetlocmode(debugwsid, 1, PEVENT, PES_ECHO); X `7D X else X `7B X quit = TRUE; X `7D X `7D X `7D while (!quit); X ptk_unpostmenu(debugwsid, rot2d1); X ptk_unpostmenu(debugwsid, rot1d); X`7D /* do_topologyview */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void do_spincamera(C(Pint) windid, C(ptksmenuoutput *) menuout) XPreANSI(Pint windid) XPreANSI(ptksmenuoutput *menuout) X`7B X Pfloat angle; X X switch (menuout->itemnum) X `7B X case 1: X angle = menuout->value.y * 10.0; X ptk_rotatepositionxaxis(windid, -angle); X break; X X case 2: X angle = (1.0 - menuout->value.y) * 10.0; X ptk_rotatepositionxaxis(windid, angle); X break; X X case 3: X angle = (1.0 - menuout->value.x) * 10.0; X ptk_rotatepositionyaxis(windid, -angle); X break; X X case 4: X angle = menuout->value.x * 10.0; X ptk_rotatepositionyaxis(windid, angle); X break; X X case 5: X angle = menuout->value.y * 10.0; X ptk_rotatecameraupvector(windid, -angle); X break; X X case 6: X angle = menuout->value.y * 10.0; X ptk_rotatecameraupvector(windid, angle); X break; X `7D X`7D /* do_spincamera */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void do_zoomcamera(C(Pint) windid, C(ptksmenuoutput *) menuout) XPreANSI(Pint windid) XPreANSI(ptksmenuoutput *menuout) X`7B X Pfloat zoomfactor; X X switch (menuout->itemnum) X `7B X case 1:`20 X zoomfactor = menuout->value.y * 0.1; X ptk_scaleviewwindow(windid, 1.0 - zoomfactor); X break; X X case 2:`20 X zoomfactor = (1.0 - menuout->value.y) * 0.1; X ptk_scaleviewwindow(windid, 1.0 + zoomfactor); X break; X `7D X`7D /* do_zoomcamera */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void camerainterface(C(Pint) windid) XPreANSI(Pint windid) X`7B X Ppoint pos; X ptkboolean cameraquit; X Pevent eventdata; X Ploc initloc, inputloc; X ptksgeneralinput geninput; X ptksmenuoutput menuoutput; X Plocrec locrec; X X ptk_setrotatortitle(rot3d1, "rotate"); X ptk_setrotatortitle(rot1d, "zoom"); X pos = ptk_point(0.15, 0.88); X ptk_setmenuposition(rot3d1, &pos); X pos = ptk_point(0.1, 0.66); X ptk_setmenuposition(rot1d, &pos); X ptk_postmenu(debugwsid, rot3d1); X ptk_postmenu(debugwsid, rot1d); X predrawallstruct(debugwsid, PALWAYS); X psetlocmode(debugwsid, 1, PEVENT, PES_ECHO); X cameraquit = FALSE; X do X `7B X pawaitevent(0.0, &eventdata); X if ((eventdata.class == PI_LOCATOR) && (eventdata.ws == debugwsid)) X `7B X pgetloc(&inputloc); X geninput.inputclass = PI_LOCATOR; X geninput.ptkugeninput.locpoint = inputloc.position; X if (ptk_scanmenus(debugwsid, &geninput, &menuoutput)) X `7B X psetlocmode(debugwsid, 1, PREQUEST, PES_ECHO); X if (menuoutput.menuid == rot3d1) X`09`7B X do_spincamera(windid, &menuoutput); X predrawallstruct(debugwsid, PALWAYS); X`09`7D X else X if (menuoutput.menuid == rot1d) X`09`7B X do_zoomcamera(windid, &menuoutput); X predrawallstruct(debugwsid, PALWAYS); X`09`7D X psetlocmode(debugwsid, 1, PEVENT, PES_ECHO); X `7D X else X `7B X cameraquit = TRUE; X `7D X `7D X `7D while (!cameraquit); X ptk_unpostmenu(debugwsid, rot3d1); X ptk_unpostmenu(debugwsid, rot1d); X`7D /* camerainterface */ X X/*-------------------------------------------------------------------------- V*/ X Xstatic void do_debugmenu(C(Pint) menuitem, C(Ppoint *) pos) XPreANSI(Pint menuitem) XPreANSI(Ppoint *pos) X`7B X Ppoint pos2; X Pint stid, elemptr, err; X Peltype eltype; X Pintlst stlist; X +-+-+-+-+-+-+-+- END OF PART 200 +-+-+-+-+-+-+-+-