$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created by VMS_SHARE Version 8.3 $! On 12-APR-1993 08:15:08.58 By user GOATHUNTER (@WKUVX1.BITNET) $! $! The VMS_SHARE software that created this archive $! was written by Andy Harper, Kings College London UK $! -- December 1992 $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. ALLOBJS.H;1 $! 2. EXTENS.DESC;1 $! 3. ICO.C;1 $! 4. ICO.OPT;1 $! 5. LISTEXTENSIONS.C;1 $! 6. MAKE.COM;1 $! 7. OBJCUBE.H;1 $! 8. OBJICO.H;1 $! 9. OBJTETRA.H;1 $! 10. POLYINFO.H;1 $! 11. QUERYEXTENSIONS.C;1 $! 12. STRINGS.MAR;1 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!" $ if f$getsyi("CPU") .gt. 127 then $ goto start $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $unpack: subroutine ! P1=filename, P2=checksum, P3=attributes $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'" $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped" $ delete 'f'* $ exit $dirok: $ x=f$search(P1) $ if x .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped" $ delete 'f'* $ exit $file_absent: $ w "-I-UNPACK, Unpacking file ", P1 $ n=P1 $ if P3 .nes. "" then $ n=f $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='n' PROCEDURE GetHex(s,p)LOCAL x1,x2;x1:=INDEX(t,SUBSTR(s,p,1))-1;x2:=INDEX(t, SUBSTR(s,p+1,1))-1;RETURN 16*x1+x2;ENDPROCEDURE; PROCEDURE SkipPartsep LOOP EXITIF MARK(NONE)=END_OF(b);EXITIF INDEX(ERASE_LINE, "-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE;PROCEDURE ProcessLine LOCAL c,s,l,b, n,p;c := ERASE_CHARACTER(1);s := ERASE_LINE;IF c = "X" THEN SPLIT_LINE; ENDIF; MOVE_HORIZONTAL(-1);l := LENGTH(s);p := 1;LOOP EXITIF p > l;c := SUBSTR(s,p,1); p := p+1;CASE c FROM ' ' TO '`' ['`']: COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[ ' ']: p:=p+1;[INRANGE,OUTRANGE]: COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE; PROCEDURE Decode POSITION(BEGINNING_OF(b));LOOP EXITIF MARK(NONE)=END_OF(b); IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=1 THEN SkipPartSep;ELSE ProcessLine; MOVE_HORIZONTAL(1);ENDIF;ENDLOOP;ENDPROCEDURE;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);t:="0123456789ABCDEF";f:=GET_INFO( COMMAND_LINE,"file_name");b:=CREATE_BUFFER(f,f);Decode;WRITE_FILE(b,GET_INFO( COMMAND_LINE,"output_file"));QUIT; $ if p3 .eqs. "" then $ goto dl $ open/write fdl &f $ write fdl "RECORD" $ write fdl P3 $ close fdl $ w "-I-CONVRFM, Converting record format to ", P3 $ convert/fdl=&f &f-1 &P1 $dl: delete 'f'* $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ endsubroutine $start: $! $ create 'f' X#include`20"objcube.h" X#include`20"objico.h" X#include`20"objtetra.h" $ call unpack ALLOBJS.H;1 1464864396 "" $! $ create 'f' XThis`20file`20features`20a`20program`20previously`20published`20in`20the`20Mar Vch/April`201993`20 Xissue`20of`20Digital`20Systems`20Journal.`20It`20was`20first`20run`20in`20Patr Vick`20L.`20Mahan's`20 Xarticle`20"X`20Views:`20X`20Extensions,"`20which`20ran`20on`20page`2042.`20X V`20extensions`20allow`20 Xyou`20to`20implement`20new`20functions`20into`20X`20without`20changing`20the V`20X`20protocol.`20The`20 Xsource`20code`20here`20shows`20you`20how. $ call unpack EXTENS.DESC;1 6827315 "" $! $ create 'f' X/*`20$XConsortium:`20ico.c,v`201.35`2091/07/19`2023:08:43`20rws`20Exp`20$`20*/ V X/*********************************************************** XCopyright`201987`20by`20Digital`20Equipment`20Corporation,`20Maynard,`20Massac Vhusetts, Xand`20the`20Massachusetts`20Institute`20of`20Technology,`20Cambridge,`20Massac Vhusetts. X X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20All V`20Rights`20Reserved X XPermission`20to`20use,`20copy,`20modify,`20and`20distribute`20this`20software V`20and`20its`20 Xdocumentation`20for`20any`20purpose`20and`20without`20fee`20is`20hereby`20gran Vted,`20 Xprovided`20that`20the`20above`20copyright`20notice`20appear`20in`20all`20copie Vs`20and`20that Xboth`20that`20copyright`20notice`20and`20this`20permission`20notice`20appear V`20in`20 Xsupporting`20documentation,`20and`20that`20the`20names`20of`20Digital`20or`20M VIT`20not`20be Xused`20in`20advertising`20or`20publicity`20pertaining`20to`20distribution`20of V`20the Xsoftware`20without`20specific,`20written`20prior`20permission.`20`20 X XDIGITAL`20DISCLAIMS`20ALL`20WARRANTIES`20WITH`20REGARD`20TO`20THIS`20SOFTWARE, V`20INCLUDING XALL`20IMPLIED`20WARRANTIES`20OF`20MERCHANTABILITY`20AND`20FITNESS,`20IN`20NO V`20EVENT`20SHALL XDIGITAL`20BE`20LIABLE`20FOR`20ANY`20SPECIAL,`20INDIRECT`20OR`20CONSEQUENTIAL V`20DAMAGES`20OR XANY`20DAMAGES`20WHATSOEVER`20RESULTING`20FROM`20LOSS`20OF`20USE,`20DATA`20OR V`20PROFITS, XWHETHER`20IN`20AN`20ACTION`20OF`20CONTRACT,`20NEGLIGENCE`20OR`20OTHER`20TORTIO VUS`20ACTION, XARISING`20OUT`20OF`20OR`20IN`20CONNECTION`20WITH`20THE`20USE`20OR`20PERFORMANC VE`20OF`20THIS XSOFTWARE. X X******************************************************************/ X/***************************************************************************** V* X`20*`20Description X`20*`09Display`20a`20wire-frame`20rotating`20icosahedron,`20with`20hidden`20li Vnes`20removed X`20* X`20*`20Arguments: X`20*`09-r`09`09display`20on`20root`20window`20instead`20of`20creating`20a`20ne Vw`20one X`20*`09=wxh+x+y`09X`20geometry`20for`20new`20window`20(default`20600x600`20cen Vtered) X`20*`09host:display`09X`20display`20on`20which`20to`20run X`20*`20(plus`20a`20host`20of`20others,`20try`20-help) X`20*************************************************************************** V**/ X/*`20Additions`20by`20jimmc@sci: X`20*`20`20faces`20and`20colors X`20*`20`20double`20buffering`20on`20the`20display X`20*`20`20additional`20polyhedra X`20*`20`20sleep`20switch X`20*/ X X X#ifdef`20vax11c X#include`20 X#include`20 X#include`20 X#include`20 X#include`20 X#ifdef`20MULTIBUFFER X#include`20 X#endif`20/*`20MULTIBUFFER`20*/ X#else X#include`20 X#include`20 X#include`20 X#include`20 X#include`20 X#ifdef`20MULTIBUFFER X#include`20 X#endif`20/*`20MULTIBUFFER`20*/ X#endif`20/*`20vax11c`20*/ X Xtypedef`20double`20Transform3D`5B4`5D`5B4`5D; X X#define`20MIN_ICO_WIDTH`205 X#define`20MIN_ICO_HEIGHT`205 X#define`20DEFAULT_ICO_WIDTH`20150 X#define`20DEFAULT_ICO_HEIGHT`20150 X#define`20DEFAULT_DELTAX`2013 X#define`20DEFAULT_DELTAY`209 X X#include`20"polyinfo.h"`09/*`20define`20format`20of`20one`20polyhedron`20*/ X X/*`20Now`20include`20all`20the`20files`20which`20define`20the`20actual`20polyh Vedra`20*/ XPolyinfo`20polys`5B`5D`20=`20`7B X#include`20"allobjs.h" X`7D; Xint`20polysize`20=`20sizeof(polys)/sizeof(polys`5B0`5D); X Xtypedef`20struct`20`7B X`09int`20prevX,`20prevY; X`09unsigned`20long`20*plane_masks;`09/*`20points`20into`20dbpair.plane_masks V`20*/ X`09unsigned`20long`20enplanemask;`09/*`20what`20we`20enable`20for`20drawing V`20*/ X`09XColor`20*colors;`09`09/*`20size`20=`202`20**`20totalplanes`20*/ X`09unsigned`20long`20*pixels;`09/*`20size`20=`202`20**`20planesperbuf`20*/ X`7D`20DBufInfo; X Xtypedef`20struct`20`7B X`09int`20planesperbuf; X`09int`20pixelsperbuf;`09/*`20=`201<`20NumberPrimaries) X`09`09`09`20`20numcolors`20=`20NumberPrimaries; X`09`09`09colornames`20=`20Primaries; X`09`09`09dofaces`20=`201; X`09`09`7D X`09`09else`20if`20(!strcmp(*argv,`20"-bg")) X`09`09`09background_colorname`20=`20*++argv; X`09`09else`20if`20(!strcmp(*argv,`20"-noedges")) X`09`09`09doedges`20=`200; X`09`09else`20if`20(!strcmp(*argv,`20"-faces")) X`09`09`09dofaces`20=`201; X`09`09else`20if`20(!strcmp(*argv,`20"-i")) X`09`09`09invert`20=`201; X`09`09else`20if`20(!strcmp(*argv,`20"-size")) X`09`09`09ico_geom`20=`20*++argv; X`09`09else`20if`20(!strcmp(*argv,`20"-delta")) X`09`09`09delta_geom`20=`20*++argv; X`09`09else`20if`20(!strcmp`20(*argv,`20"-sleep"))`20`7B X`09`09`09float`20f`20=`200.0; X`09`09`09sscanf`20(*++argv,`20"%f",`20`26f); X`09`09`09msleepcount`20=`20(int)`20(f`20*`201000.0); X`09`09`09sleepcount`20=`20msleepcount`20/`201000; X`09`09`7D`20else`20if`20(!strcmp`20(*argv,`20"-obj")) X`09`09`09poly`20=`20findpoly(*++argv); X`09`09else`20if`20(!strcmp(*argv,`20"-dsync")) X`09`09`09dsync`20=`201; X`09`09else`20if`20(!strncmp(*argv,`20"-sync",`20`205))`20 X`09`09`09_Xdebug`20=`201; X`09`09else`20if`20(!strcmp(*argv,`20"-objhelp"))`20`7B X`09`09`09giveObjHelp(); X`09`09`09exit(1); X`09`09`7D X`09`09else`20`7B`09/*`20unknown`20arg`20*/ X`09`09`20`20`20`20char`20**cpp; X X`09`09`20`20usage: X`09`09`20`20`20`20fprintf`20(stderr,`20"usage:`20`20%s`20`5B-options`5D`5Cn V`5Cn",`20ProgramName); X`09`09`20`20`20`20for`20(cpp`20=`20help_message;`20*cpp;`20cpp++)`20`7B X`09`09`09fprintf`20(stderr,`20"%s`5Cn",`20*cpp); X`09`09`20`20`20`20`7D X`09`09`20`20`20`20fprintf`20(stderr,`20"`5Cn"); X`09`09`20`20`20`20exit`20(1); X`09`09`7D X`09`7D X X`09if`20(!dofaces`20`26`26`20!doedges)`20icoFatal("nothing`20to`20draw"); X X`09if`20(!(dpy=`20XOpenDisplay(display))) X`09`20`20`20`20`20`20`20`20`7B X`09`09perror("Cannot`20open`20display`5Cn"); X`09`09exit(-1); X`09`20`20`20`20`20`20`20`20`7D X X#ifdef`20MULTIBUFFER X`09if`20(multibuf`20`26`26`20!XmbufQueryExtension`20(dpy,`20`26mbevbase,`20 V`26mberrbase))`20`7B X`09`20`20`20`20multibuf`20=`200; X`09`20`20`20`20dblbuf`20=`201; X`09`7D X#endif X X`09cmap`20=`20XDefaultColormap(dpy,DefaultScreen(dpy)); X`09if`20(!cmap)`20`7B X`09`09icoFatal("no`20default`20colormap!"); X`09`7D X X`09fg`20=`20WhitePixel(dpy,`20DefaultScreen(dpy)); X`09bg`20=`20BlackPixel(dpy,`20DefaultScreen(dpy)); X`09if`20(background_colorname)`20`7B X`09`20`20`20`20XColor`20cdef,`20igndef; X X`09`20`20`20`20if`20(XAllocNamedColor`20(dpy,`20cmap,`20background_colorname, X`09`09`09`09`20`20`26cdef,`20`26igndef)) X`09`20`20`20`20`20`20bg`20=`20cdef.pixel; X`09`20`20`20`20else`20 X`09`20`20`20`20`20`20icoFatal`20("no`20such`20color`20`5C"%s`5C"",`20backgroun Vd_colorname); X`09`7D X`09if`20(numcolors`20`26`26`20(!dofaces`20`7C`7C`20numcolors`20==`201))`20`7B X`09`20`20`20`20XColor`20cdef,`20igndef; X X`09`20`20`20`20if`20(XAllocNamedColor`20(dpy,`20cmap,`20colornames`5B0`5D,`20 V`26cdef,`20`26igndef)) X`09`20`20`20`20`20`20fg`20=`20cdef.pixel; X`09`20`20`20`20else`20 X`09`20`20`20`20`20`20icoFatal`20("no`20such`20color`20`5C"%s`5C"",`20colorname Vs`5B0`5D); X`09`7D X X`09if`20(invert)`20`7B X`09`20`20`20`20unsigned`20long`20tmp`20=`20fg; X`09`20`20`20`20fg`20=`20bg; X`09`20`20`20`20bg`20=`20tmp; X`09`7D X X X`09/*`20Set`20up`20window`20parameters,`20create`20and`20map`20window`20if`20n Vecessary:`20*/ X X`09if`20(useRoot) X`09`09`7B X`09`09draw_window`20=`20DefaultRootWindow(dpy); X`09`09winX`20=`200; X`09`09winY`20=`200; X`09`09winW`20=`20DisplayWidth(dpy,`20DefaultScreen(dpy)); X`09`09winH`20=`20DisplayHeight(dpy,`20DefaultScreen(dpy)); X`09`09`7D X`09else`20`7B X`09`09winW`20=`20winH`20=`20(multibuf`20?`20300`20:`20600); X`09`09winX`20=`20(DisplayWidth(dpy,`20DefaultScreen(dpy))`20-`20winW)`20>>`201 V; X`09`09winY`20=`20(DisplayHeight(dpy,`20DefaultScreen(dpy))`20-`20winH)`20>> V`201; X`09`09if`20(geom)`20 X`09`09`09XParseGeometry(geom,`20`26winX,`20`26winY, X`09`09`09`09`20`20`20`20`20`20`20(unsigned`20int`20*)`26winW, X`09`09`09`09`20`20`20`20`20`20`20(unsigned`20int`20*)`26winH); X X`09`09xswa.event_mask`20=`20ExposureMask`20`7C`20StructureNotifyMask; X`09`09xswa.background_pixel`20=`20bg; X`09`09xswa.border_pixel`20=`20fg; X`09`09draw_window`20=`20XCreateWindow(dpy,`20DefaultRootWindow(dpy),`20 X`09`09`20`20`20`20winX,`20winY,`20winW,`20winH,`200,`20 X`09`09`20`20`20`20DefaultDepth(dpy,`20DefaultScreen(dpy)),`20 X`09`09`20`20`20`20InputOutput,`20DefaultVisual(dpy,`20DefaultScreen(dpy)), X`09`09`20`20`20`20CWEventMask`20`7C`20CWBackPixel`20`7C`20CWBorderPixel,`20 V`26xswa); X`09`09XChangeProperty(dpy,`20draw_window,`20XA_WM_NAME,`20XA_STRING,`208,`20 X`09`09`09`09PropModeReplace,`20(unsigned`20char`20*)"Ico",`203); X`09`09XMapWindow(dpy,`20draw_window); X`09`09while`20(1)`20`7B X`09`09`20`20`20`20XNextEvent(dpy,`20`26xev); X`09`09`20`20`20`20if`20(xev.type`20==`20Expose) X`09`09`09break; X`09`09`7D X`09`09if`20(XGetWindowAttributes(dpy,draw_window,`26xwa)==0)`20`7B X`09`09`09icoFatal("cant`20get`20window`20attributes`20(size)"); X`09`09`7D X`09`09winW`20=`20xwa.width; X`09`09winH`20=`20xwa.height; X`09`09`7D X X`09if`20(ico_geom)`20 X`09`20`20XParseGeometry`20(ico_geom,`20`26icoX,`20`26icoY, X`09`09`09`20`20(unsigned`20int`20*)`26icoW, X`09`09`09`20`20(unsigned`20int`20*)`26icoH); X`09if`20(icoW`20<=`200)`20icoW`20=`20DEFAULT_ICO_WIDTH; X`09if`20(icoH`20<=`200)`20icoH`20=`20DEFAULT_ICO_HEIGHT; X`09if`20(icoW`20<`20MIN_ICO_WIDTH)`20icoW`20=`20MIN_ICO_WIDTH; X`09if`20(icoH`20<`20MIN_ICO_HEIGHT)`20icoH`20=`20MIN_ICO_HEIGHT; X X`09if`20(delta_geom)`20`7B X`09`20`20`20`20unsigned`20int`20junk; X X`09`20`20`20`20XParseGeometry`20(delta_geom,`20`26icoDeltaX,`20`26icoDeltaY, V`20`26junk,`20`26junk); X`09`20`20`20`20if`20(icoDeltaX`20==`200`20`26`26`20icoDeltaY`20==`200)`20`7B X`09`09icoDeltaX`20=`20DEFAULT_DELTAX; X`09`09icoDeltaY`20=`20DEFAULT_DELTAY; X`09`20`20`20`20`7D X`09`7D X X`09win`20=`20None; X X#ifdef`20MULTIBUFFER X`09if`20(multibuf)`20`7B X`09`20`20`20`20if`20(XmbufCreateBuffers`20(dpy,`20draw_window,`202,`20update_a Vction, X`09`09`09`09`20`20`20`20MultibufferUpdateHintFrequent, X`09`09`09`09`20`20`20`20multibuffers)`20==`202)`20`7B X`09`09XCopyArea`20(dpy,`20draw_window,`20multibuffers`5B1`5D, X`09`09`09`20`20`20DefaultGC(dpy,`20DefaultScreen(dpy)), X`09`09`09`20`20`200,`200,`20winW,`20winH,`200,`200); X`09`09win`20=`20multibuffers`5B1`5D; X`09`20`20`20`20`7D`20else`20 X`09`20`20`20`20`20`20icoFatal`20("unable`20to`20obtain`202`20buffers"); X`09`20`20`20`20dblbuf`20=`201; X`09`7D X#endif`20/*`20MULTIBUFFER`20*/ X`09if`20(win`20==`20None)`20win`20=`20draw_window; X X`09/*`20whether`20or`20not`20we`20are`20emulating`20*/ X`09softdbl`20=`20(dblbuf`20`26`26`20!multibuf); X X X`09/*`20Set`20up`20a`20graphics`20context:`20*/ X X`09vmask`20=`20(GCBackground`20`7C`20GCForeground`20`7C`20GCLineWidth); X`09xgcv.background`20=`20bg; X`09xgcv.foreground`20=`20fg; X`09xgcv.line_width`20=`20linewidth; X`09if`20(dash)`20`7B X`09`20`20`20`20xgcv.line_style`20=`20LineDoubleDash; X`09`20`20`20`20xgcv.dashes`20=`20dash; X`09`20`20`20`20vmask`20`7C=`20(GCLineStyle`20`7C`20GCDashList); X`09`7D X`09gc`20=`20XCreateGC`20(dpy,`20draw_window,`20vmask,`20`26xgcv); X X`09if`20(dofaces`20`26`26`20numcolors>1)`20`7B X`09`20`20`20`20int`20i,t,bits; X`09`09bits`20=`200; X`09`09for`20(t=numcolors;`20t;`20t=t>>1)`20bits++; X`09`09initDBufs(fg,bg,bits); X`09`09/*`20don't`20set`20the`20background`20color`20*/ X`09`09for`20(i=0;`20i>`208; X`09icoY`20=`20((winH`20-`20icoH)`20*`20(rand()`20`26`200xFF))`20>>`208; X X X`09/*`20Bounce`20the`20box`20in`20the`20window:`20*/ X X`09icodeltax2`20=`20icoDeltaX`20*`202; X`09icodeltay2`20=`20icoDeltaY`20*`202; X`09for`20(;;) X`09`09`7B X`09`09int`20prevX; X`09`09int`20prevY; X X`09`09if`20(blocking`20`7C`7C`20XPending(dpy))`20`7B X`09`09`20`20`20`20XNextEvent(dpy,`20`26xev); X X`09`09`20`20`20`20switch`20(xev.type)`20`7B X`09`09`20`20`20`20`20`20case`20ConfigureNotify: X`09`09`09if`20(xev.xconfigure.width`20!=`20winW`20`7C`7C X`09`09`09`20`20`20`20xev.xconfigure.height`20!=`20winH) X`09`09`09`20`20icoX`20=`20icoY`20=`201; X`09`09`09winW`20=`20xev.xconfigure.width; X`09`09`09winH`20=`20xev.xconfigure.height; X`09`09`09break; X`09`09`20`20`20`20`20`20case`20MapNotify: X`09`09`09blocking`20=`20False; X`09`09`09break; X`09`09`20`20`20`20`20`20case`20UnmapNotify: X`09`09`09blocking`20=`20True; X`09`09`09continue; X`09`09`20`20`20`20`7D X`09`09`7D X X`09`09prevX`20=`20icoX; X`09`09prevY`20=`20icoY; X X`09`09icoX`20+=`20icoDeltaX; X`09`09if`20(icoX`20<`200`20`7C`7C`20icoX`20+`20icoW`20>`20winW) X`09`09`09`7B X`09`09`09icoX`20-=`20icodeltax2; X`09`09`09icoDeltaX`20=`20-`20icoDeltaX; X`09`09`09icodeltax2`20=`20icoDeltaX`20*`202; X`09`09`09`7D X`09`09icoY`20+=`20icoDeltaY; X`09`09if`20(icoY`20<`200`20`7C`7C`20icoY`20+`20icoH`20>`20winH) X`09`09`09`7B X`09`09`09icoY`20-=`20icodeltay2; X`09`09`09icoDeltaY`20=`20-`20icoDeltaY; X`09`09`09icodeltay2`20=`20icoDeltaY`20*`202; X`09`09`09`7D X X`09`09drawPoly(poly,`20gc,`20icoX,`20icoY,`20icoW,`20icoH,`20prevX,`20prevY); X`09`09`7D X`09`7D X XgiveObjHelp() X`7B Xint`20i; XPolyinfo`20*poly; X`09printf("%-16s%-12s`20`20#Vert.`20`20#Edges`20`20#Faces`20`20%-16s`5Cn", X`09`09"Name",`20"ShortName",`20"Dual"); X`09for`20(i=0;`20ilongname,`20poly->shortname, X`09`09`09poly->numverts,`20poly->numedges,`20poly->numfaces, X`09`09`09poly->dual); X`09`7D X`7D X XPolyinfo`20* Xfindpoly(name) Xchar`20*name; X`7B Xint`20i; XPolyinfo`20*poly; X`09for`20(i=0;`20ilongname)==0`20`7C`7C X`09`09`20`20`20`20strcmp(name,poly->shortname)==0)`20return`20poly; X`09`7D X`09icoFatal("can't`20find`20object`20%s",`20name); X`7D X XicoClearArea(x,y,w,h) Xint`20x,y,w,h; X`7B X`20`20`20`20if`20(multibuf)`20return; X X`09if`20(dblbuf`20`7C`7C`20dofaces)`20`7B X`09`09XSetForeground(dpy,`20gc,`20dbpair.drawbuf->pixels`5B0`5D); X`09`09`09/*`20use`20background`20as`20foreground`20color`20for`20fill`20*/ X`09`09XFillRectangle(dpy,win,gc,x,y,w,h); X`09`7D X`09else`20`7B X`09`09XClearArea(dpy,win,x,y,w,h,0); X`09`7D X`7D X X/***************************************************************************** V* X`20*`20Description X`20*`09Undraw`20previous`20polyhedron`20(by`20erasing`20its`20bounding`20box). V X`20*`09Rotate`20and`20draw`20the`20new`20polyhedron. X`20* X`20*`20Input X`20*`09poly`09`09the`20polyhedron`20to`20draw X`20*`09gc`09`09X11`20graphics`20context`20to`20be`20used`20for`20drawing X`20*`09icoX,`20icoY`09position`20of`20upper`20left`20of`20bounding-box X`20*`09icoW,`20icoH`09size`20of`20bounding-box X`20*`09prevX,`20prevY`09position`20of`20previous`20bounding-box X`20*************************************************************************** V**/ Xchar`20drawn`5BMAXNV`5D`5BMAXNV`5D; X XdrawPoly(poly,`20gc,`20icoX,`20icoY,`20icoW,`20icoH,`20prevX,`20prevY) XPolyinfo`20*poly; XGC`20gc; Xint`20icoX,`20icoY,`20icoW,`20icoH; Xint`20prevX,`20prevY; X`09`7B X`09static`20int`20initialized`20=`200; X X`09Point3D`20*v`20=`20poly->v; X`09int`20*f`20=`20poly->f; X`09int`20NV`20=`20poly->numverts; X`09int`20NF`20=`20poly->numfaces; X X`09static`20Transform3D`20xform; X`09static`20Point3D`20xv`5B2`5D`5BMAXNV`5D; X`09static`20int`20buffer; X`09register`20int`20p0; X`09register`20int`20p1; X`09register`20XPoint`20*pv2; X`09XSegment`20*pe; X`09register`20Point3D`20*pxv; X`09static`20double`20wo2,`20ho2; X`09XPoint`20v2`5BMAXNV`5D; X`09XSegment`20edges`5BMAXEDGES`5D; X`09register`20int`20i; X`09int`20j,k; X`09register`20int`20*pf; X`09int`20facecolor; X X`09int`20pcount; X`09double`20pxvz; X`09XPoint`20ppts`5BMAXEDGESPERPOLY`5D; X X`09/*`20Set`20up`20points,`20transforms,`20etc.:`20`20*/ X X`09if`20(!initialized)`09 X`09`09`7B X`09`09Transform3D`20r1; X`09`09Transform3D`20r2; X X`09`09FormatRotateMat('x',`205`20*`203.1416`20/`20180.0,`20r1); X`09`09FormatRotateMat('y',`205`20*`203.1416`20/`20180.0,`20r2); X`09`09ConcatMat(r1,`20r2,`20xform); X X`09`09bcopy((char`20*)`20v,`20(char`20*)`20xv`5B0`5D,`20NV`20*`20sizeof(Point3 VD)); X`09`09buffer`20=`200; X X`09`09wo2`20=`20icoW`20/`202.0; X`09`09ho2`20=`20icoH`20/`202.0; X X`09`09initialized`20=`201; X`09`09`7D X X X`09/*`20Switch`20double-buffer`20and`20rotate`20vertices:`20*/ X X`09buffer`20=`20!buffer; X`09PartialNonHomTransform(NV,`20xform,`20xv`5B!buffer`5D,`20xv`5Bbuffer`5D); X X X`09/*`20Convert`203D`20coordinates`20to`202D`20window`20coordinates:`20*/ X X`09pxv`20=`20xv`5Bbuffer`5D; X`09pv2`20=`20v2; X`09for`20(i`20=`20NV`20-`201;`20i`20>=`200;`20--i) X`09`09`7B X`09`09pv2->x`20=`20(int)`20((pxv->x`20+`201.0)`20*`20wo2)`20+`20icoX; X`09`09pv2->y`20=`20(int)`20((pxv->y`20+`201.0)`20*`20ho2)`20+`20icoY; X`09`09++pxv; X`09`09++pv2; X`09`09`7D X X X`09/*`20Accumulate`20edges`20to`20be`20drawn,`20eliminating`20duplicates`20for V`20speed:`20*/ X X`09pxv`20=`20xv`5Bbuffer`5D; X`09pv2`20=`20v2; X`09pf`20=`20f; X`09pe`20=`20edges; X`09bzero(drawn,`20sizeof(drawn)); X X`09if`20(dblbuf) X`09`09setDrawBuf(dbpair.dbufnum); X`09`09`09/*`20switch`20drawing`20buffers`20if`20double`20buffered`20*/ X`09/*`20for`20faces,`20need`20to`20clear`20before`20FillPoly`20*/ X`09if`20(dofaces`20`26`26`20!multibuf)`20`7B`09/*`20multibuf`20uses`20update V`20background`20*/ X`09`09if`20(softdbl) X`09`09`09icoClearArea( X`09`09`09`09dbpair.drawbuf->prevX,`20dbpair.drawbuf->prevY, X`09`09`09`09icoW`20+`201,`20icoH`20+`201); X`09`09icoClearArea(prevX,`20prevY,`20icoW`20+`201,`20icoH`20+`201); X`09`7D X X`09if`20(dsync) X`09`09XSync(dpy,`200); X X`09for`20(i`20=`20NF`20-`201;`20i`20>=`200;`20--i,`20pf`20+=`20pcount) X`09`09`7B X X`09`09pcount`20=`20*pf++;`09/*`20number`20of`20edges`20for`20this`20face`20*/ X`09`09pxvz`20=`200.0; X`09`09for`20(j=0;`20jpixels`5Bfacecolor`5D); X`09`09`09for`20(j=0;`20jx1`20=`20pv2`5Bp0`5D.x; X`09`09`09`09`09pe->y1`20=`20pv2`5Bp0`5D.y; X`09`09`09`09`09pe->x2`20=`20pv2`5Bp1`5D.x; X`09`09`09`09`09pe->y2`20=`20pv2`5Bp1`5D.y; X`09`09`09`09`09++pe; X`09`09`09`09`7D X`09`09`09`7D X`09`09`7D X`09`09`7D X X`09/*`20Erase`20previous,`20draw`20current`20icosahedrons;`20sync`20for`20smoo Vthness.`20*/ X X`09if`20(doedges)`20`7B X`09`09if`20(dofaces)`20`7B X`09`09`09XSetForeground(dpy,`20gc,`20dbpair.drawbuf->pixels`5B0`5D); X`09`09`09`09/*`20use`20background`20as`20foreground`20color`20*/ X`09`09`7D X`09`09else`20`7B X`09`09`09if`20(softdbl) X`09`09`09`09icoClearArea(dbpair.drawbuf->prevX, X`09`09`09`09`09dbpair.drawbuf->prevY, X`09`09`09`09`09icoW`20+`201,`20icoH`20+`201); X`09`09`09if`20(!multibuf) X`09`09`09`20`20icoClearArea(prevX,`20prevY,`20icoW`20+`201,`20icoH`20+`201); X`09`09`09if`20(dblbuf`20`7C`7C`20dofaces)`20`7B X`09`09`09`09XSetForeground(dpy,`20gc,`20dbpair.drawbuf->pixels`5B X`09`09`09`09`09dbpair.pixelsperbuf-1`5D); X`09`09`09`7D X`09`09`7D X`09`09XDrawSegments(dpy,`20win,`20gc,`20edges,`20pe`20-`20edges); X`09`7D X X`09if`20(dsync) X`09`09XSync(dpy,`200); X X`09if`20(dblbuf)`20`7B X`09`09dbpair.drawbuf->prevX`20=`20icoX; X`09`09dbpair.drawbuf->prevY`20=`20icoY; X`09`09setDisplayBuf(dbpair.dbufnum); X`09`7D X`09if`20(dblbuf) X`09`09dbpair.dbufnum`20=`201`20-`20dbpair.dbufnum; X`09if`20(!multibuf`20`26`26`20sleepcount)`20sleep(sleepcount); X`09`7D X Xchar`20*xalloc(nbytes) Xint`20nbytes; X`7B Xchar`20*p,`20*malloc(); X X`09p`20=`20malloc((unsigned`20int)nbytes); X`09if`20(p)`20return`20p; X`09fprintf(stderr,"ico:`20no`20more`20memory`5Cn"); X`09exit(1); X`7D X XinitDBufs(fg,bg,planesperbuf) Xint`20fg,bg; Xint`20planesperbuf; X`7B Xint`20i,j,jj,j0,j1,k,m,t; XDBufInfo`20*b,`20*otherb; X X`09nplanesets`20=`20(softdbl`20?`202`20:`201); X X`09dbpair.planesperbuf`20=`20planesperbuf; X`09dbpair.pixelsperbuf`20=`201<plane_masks`20=`20dbpair.plane_masks`20+`20(i*planesperbuf); X`09`09b->colors`20=`20(XColor`20*) X`09`09`09xalloc(dbpair.totalpixels`20*`20sizeof(XColor)); X`09`09b->pixels`20=`20(unsigned`20long`20*) X`09`09`09xalloc(dbpair.pixelsperbuf`20*`20sizeof(unsigned`20long)); X`09`7D X X`09if`20(dbpair.totalplanes`20==`201)`20`7B X`09`20`20`20`20dbpair.pixels`5B0`5D`20=`20bg; X`09`20`20`20`20dbpair.plane_masks`5B0`5D`20=`20fg`20`5E`20bg; X`09`7D`20else`20`7B X`09`20`20`20`20t`20=`20XAllocColorCells(dpy,cmap,0, X`09`09`20`20`20`20dbpair.plane_masks,dbpair.totalplanes,`20dbpair.pixels,1); X`09`09`09`20`20`20`20/*`20allocate`20color`20planes`20*/ X`09`20`20`20`20if`20(t==0)`20`7B X`09`09`20`20`20`20icoFatal("can't`20allocate`20enough`20color`20planes"); X`09`20`20`20`20`7D X`09`7D X X`09fgcolor.pixel`20=`20fg; X`09bgcolor.pixel`20=`20bg; X`09XQueryColor(dpy,cmap,`26fgcolor); X`09XQueryColor(dpy,cmap,`26bgcolor); X X`09setBufColor(0,`26bgcolor); X`09setBufColor(1,`26fgcolor); X`09for`20(i=0;`20icolors`5Bjj`5D.pixel`20=`20dbpair.pixels`5B0`5D; X`09`09`09for`20(k=0,`20m=j;`20m;`20k++,`20m=m>>1)`20`7B X`09`09`09`09if`20(m`261) X`09`09`09`09`20`20`20b->colors`5Bjj`5D.pixel`20`5E=`20dbpair.plane_masks`5Bk V`5D; X`09`09`09`7D X`09`09`09b->colors`5Bjj`5D.flags`20=`20DoRed`20`7C`20DoGreen`20`7C`20DoBlue; X`09`09`20`20`20`20`7D X`09`09`7D X`09`09b->prevX`20=`20b->prevY`20=`200; X`09`09b->enplanemask`20=`200; X`09`09for`20(j=0;`20jenplanemask`20`7C=`20b->plane_masks`5Bj`5D; X`09`09`7D X`09`09for`20(j=0;`20jpixels`5Bj`5D`20=`20dbpair.pixels`5B0`5D; X`09`09`09for`20(k=0,`20m=j;`20m;`20k++,`20m=m>>1)`20`7B X`09`09`09`09if`20(m`261) X`09`09`09`09`20`20`20b->pixels`5Bj`5D`20`5E=`20b->plane_masks`5Bk`5D; X`09`09`09`7D X`09`09`7D X`09`7D X X`09if`20(!multibuf)`20`7B X`09`20`20`20`20setDrawBuf(0); X`09`20`20`20`20XSetBackground(dpy,`20gc,`20dbpair.bufs`5B0`5D.pixels`5B0`5D); X`09`20`20`20`20XSetWindowBackground(dpy,`20draw_window,`20dbpair.bufs`5B0`5D.p Vixels`5B0`5D); X`09`20`20`20`20XSetPlaneMask(dpy,`20gc,`20AllPlanes); X`09`20`20`20`20icoClearArea(0,`200,`20winW,`20winH);`20/*`20clear`20entire`20w Vindow`20*/ X`09`7D X X/*`09if`20(softdbl)`20setDisplayBuf(1);`20*/ X`7D X XsetBufColname(n,colname) Xint`20n; Xchar`20*colname; X`7B Xint`20t; XXColor`20dcolor,`20color; X X`09t`20=`20XLookupColor(dpy,cmap,colname,`26dcolor,`26color); X`09if`20(t==0)`20`7B`09/*`20no`20such`20color`20*/ X`09`09icoFatal("no`20such`20color`20%s",colname); X`09`7D X`09setBufColor(n,`26color); X`7D X XsetBufColor(n,color) Xint`20n;`09`09/*`20color`20index`20*/ XXColor`20*color;`09/*`20color`20to`20set`20*/ X`7B Xint`20i,j,cx; XDBufInfo`20*b; Xunsigned`20long`20pix; X X`09for`20(i=0;`20icolors`5Bcx`5D.pixel; X`09`09`09b->colors`5Bcx`5D`20=`20*color; X`09`09`09b->colors`5Bcx`5D.pixel`20=`20pix; X`09`09`09b->colors`5Bcx`5D.flags`20=`20DoRed`20`7C`20DoGreen`20`7C`20DoBlue; X`09`09`7D X`09`7D X`7D X XsetDrawBuf`20(n) X`20`20`20`20int`20n; X`7B X`20`20`20`20XGCValues`20xgcv; X`20`20`20`20unsigned`20long`20mask; X X#ifdef`20MULTIBUFFER X`20`20`20`20if`20(multibuf)`20`7B X`09win`20=`20multibuffers`5Bn`5D; X`09n`20=`200; X`20`20`20`20`7D X#endif`20/*`20MULTIBUFFER`20*/ X X`20`20`20`20dbpair.drawbuf`20=`20dbpair.bufs+n; X`20`20`20`20xgcv.foreground`20=`20dbpair.drawbuf->pixels`5Bdbpair.pixelsperbuf V-1`5D; X`20`20`20`20xgcv.background`20=`20dbpair.drawbuf->pixels`5B0`5D; X`20`20`20`20mask`20=`20GCForeground`20`7C`20GCBackground; X`20`20`20`20if`20(softdbl)`20`7B X`09xgcv.plane_mask`20=`20dbpair.drawbuf->enplanemask; X`09mask`20`7C=`20GCPlaneMask; X`20`20`20`20`7D X`20`20`20`20XChangeGC(dpy,`20gc,`20mask,`20`26xgcv); X`7D X XsetDisplayBuf(n) Xint`20n; X`7B X#if`20MULTIBUFFER X`20`20`20`20if`20(multibuf)`20`7B X`09static`20int`20firsttime`20=`201; X X`09XmbufDisplayBuffers`20(dpy,`201,`20`26multibuffers`5Bn`5D,`20msleepcount, V`200); X`09if`20(firsttime)`20`7B X`09`20`20`20`20firsttime`20=`200; X`09`20`20`20`20n`20=`200; X`09`20`20`20`20goto`20storecolors; X`09`7D X`20`20`20`20`7D`20else X#endif X`20`20`20`20`7B X`20`20`20`20`20`20storecolors: X`09dbpair.dpybuf=`20dbpair.bufs+n; X`09if`20(dbpair.totalpixels`20>`202) X`09`20`20`20`20XStoreColors(dpy,cmap,dbpair.dpybuf->colors,dbpair.totalpixels) V; X`20`20`20`20`7D X`7D X XicoFatal(fmt,a0) Xchar`20*fmt; X`7B X`09fprintf(stderr,"ico:`20"); X`09fprintf(stderr,fmt,a0); X`09fprintf(stderr,"`5Cn"); X`09exit(1); X`7D X X/***************************************************************************** V* X`20*`20Description X`20*`09Concatenate`20two`204-by-4`20transformation`20matrices. X`20* X`20*`20Input X`20*`09l`09`09multiplicand`20(left`20operand) X`20*`09r`09`09multiplier`20(right`20operand) X`20* X`20*`20Output X`20*`09*m`09`09Result`20matrix X`20*************************************************************************** V**/ X XConcatMat(l,`20r,`20m) Xregister`20Transform3D`20l; Xregister`20Transform3D`20r; Xregister`20Transform3D`20m; X`09`7B X`09register`20int`20i; X`09register`20int`20j; X X`09for`20(i`20=`200;`20i`20<`204;`20++i) X`09`09for`20(j`20=`200;`20j`20<`204;`20++j) X`09`09`09m`5Bi`5D`5Bj`5D`20=`20l`5Bi`5D`5B0`5D`20*`20r`5B0`5D`5Bj`5D X`09`09`09`20`20`20`20+`20l`5Bi`5D`5B1`5D`20*`20r`5B1`5D`5Bj`5D X`09`09`09`20`20`20`20+`20l`5Bi`5D`5B2`5D`20*`20r`5B2`5D`5Bj`5D X`09`09`09`20`20`20`20+`20l`5Bi`5D`5B3`5D`20*`20r`5B3`5D`5Bj`5D; X`09`7D X X X X/***************************************************************************** V* X`20*`20Description X`20*`09Format`20a`20matrix`20that`20will`20perform`20a`20rotation`20transforma Vtion X`20*`09about`20the`20specified`20axis.`20`20The`20rotation`20angle`20is`20meas Vured X`20*`09counterclockwise`20about`20the`20specified`20axis`20when`20looking X`20*`09at`20the`20origin`20from`20the`20positive`20axis. X`20* X`20*`20Input X`20*`09axis`09`09Axis`20('x',`20'y',`20'z')`20about`20which`20to`20perform`20r Votation X`20*`09angle`09`09Angle`20(in`20radians)`20of`20rotation X`20*`09A`09`09Pointer`20to`20rotation`20matrix X`20* X`20*`20Output X`20*`09*m`09`09Formatted`20rotation`20matrix X`20*************************************************************************** V**/ X XFormatRotateMat(axis,`20angle,`20m) Xchar`20axis; Xdouble`20angle; Xregister`20Transform3D`20m; X`09`7B X`09double`20s,`20c; X`09double`20sin(),`20cos(); X X`09IdentMat(m); X X`09s`20=`20sin(angle); X`09c`20=`20cos(angle); X X`09switch(axis) X`09`09`7B X`09`09case`20'x': X`09`09`09m`5B1`5D`5B1`5D`20=`20m`5B2`5D`5B2`5D`20=`20c; X`09`09`09m`5B1`5D`5B2`5D`20=`20s; X`09`09`09m`5B2`5D`5B1`5D`20=`20-s; X`09`09`09break; X`09`09case`20'y': X`09`09`09m`5B0`5D`5B0`5D`20=`20m`5B2`5D`5B2`5D`20=`20c; X`09`09`09m`5B2`5D`5B0`5D`20=`20s; X`09`09`09m`5B0`5D`5B2`5D`20=`20-s; X`09`09`09break; X`09`09case`20'z': X`09`09`09m`5B0`5D`5B0`5D`20=`20m`5B1`5D`5B1`5D`20=`20c; X`09`09`09m`5B0`5D`5B1`5D`20=`20s; X`09`09`09m`5B1`5D`5B0`5D`20=`20-s; X`09`09`09break; X`09`09`7D X`09`7D X X X X/***************************************************************************** V* X`20*`20Description X`20*`09Format`20a`204x4`20identity`20matrix. X`20* X`20*`20Output X`20*`09*m`09`09Formatted`20identity`20matrix X`20*************************************************************************** V**/ X XIdentMat(m) Xregister`20Transform3D`20m; X`09`7B X`09register`20int`20i; X`09register`20int`20j; X X`09for`20(i`20=`203;`20i`20>=`200;`20--i) X`09`09`7B X`09`09for`20(j`20=`203;`20j`20>=`200;`20--j) X`09`09`09m`5Bi`5D`5Bj`5D`20=`200.0; X`09`09m`5Bi`5D`5Bi`5D`20=`201.0; X`09`09`7D X`09`7D X X X X/***************************************************************************** V* X`20*`20Description X`20*`09Perform`20a`20partial`20transform`20on`20non-homogeneous`20points. X`20*`09Given`20an`20array`20of`20non-homogeneous`20(3-coordinate)`20input`20po Vints, X`20*`09this`20routine`20multiplies`20them`20by`20the`203-by-3`20upper`20left V`20submatrix X`20*`09of`20a`20standard`204-by-4`20transform`20matrix.`20`20The`20resulting V`20non-homogeneous X`20*`09points`20are`20returned. X`20* X`20*`20Input X`20*`09n`09`09number`20of`20points`20to`20transform X`20*`09m`09`094-by-4`20transform`20matrix X`20*`09in`09`09array`20of`20non-homogeneous`20input`20points X`20* X`20*`20Output X`20*`09*out`09`09array`20of`20transformed`20non-homogeneous`20output`20points X`20*************************************************************************** V**/ X XPartialNonHomTransform(n,`20m,`20in,`20out) Xint`20n; Xregister`20Transform3D`20m; Xregister`20Point3D`20*in; Xregister`20Point3D`20*out; X`09`7B X`09for`20(;`20n`20>`200;`20--n,`20++in,`20++out) X`09`09`7B X`09`09out->x`20=`20in->x`20*`20m`5B0`5D`5B0`5D`20+`20in->y`20*`20m`5B1`5D`5B0 V`5D`20+`20in->z`20*`20m`5B2`5D`5B0`5D; X`09`09out->y`20=`20in->x`20*`20m`5B0`5D`5B1`5D`20+`20in->y`20*`20m`5B1`5D`5B1 V`5D`20+`20in->z`20*`20m`5B2`5D`5B1`5D; X`09`09out->z`20=`20in->x`20*`20m`5B0`5D`5B2`5D`20+`20in->y`20*`20m`5B1`5D`5B2 V`5D`20+`20in->z`20*`20m`5B2`5D`5B2`5D; X`09`09`7D X`09`7D $ call unpack ICO.C;1 1399731177 "" $! $ create 'f' XICO.OBJ XSTRINGS.OBJ XSYS$SHARE:DECW$XEXTLIBSHR.EXE/SHARE $ call unpack ICO.OPT;1 908935137 "" $! $ create 'f' X/* X`20*`09Example`201`20-`20ListExtensions.C X`20* X`20*`09Author:`20Patrick`20L.`20Mahan X`20*`09Date:`20`20`20January`203,`201993 X`20* X`20*`09List`20the`20available`20X`20extensions X`20* X`20*`09To`20build`20this`20program,`20issue`20the`20following`20commands X`20* X`20*`09`09$`20CC`20LISTEXTENSIONS.C X`20*`09`09$`20LINK`20LISTEXTENSIONS,SYS$INPUT:/OPT X`20*`09`09SYS$SHARE:DECW$XLIBSHR.EXE/SHARE X`20*`09`09`5EZ X`20*/ X X#include`20 X#include`20 X Xmain(argc,`20argv) Xint`20`20argc; Xchar`20*argv`5B`5D; X`7B X`09int`20n`20=`200; X`09char`20**extensions; X`09Display`20*dpy; X X`09/* X`09`20*`09Open`20the`20display X`09`20*/ X`09dpy`20=`20XOpenDisplay(NULL); X X`09/* X`09`20*`09Get`20the`20extension`20list X`09`20*/ X`09extensions`20=`20XListExtensions(dpy,`20`26n); X X`09/* X`09`20*`09Print`20out`20any`20extensions`20found X`09`20*/ X`09if`20(extensions)`20`7B X`09`09register`20int`20i; X X`09`09fprintf(stdout,`20"Number`20of`20Extensions`20found:`20%d`5Cn",`20n); X`09`09for`20(i`20=`200;`20i`20<`20n;`20i++)`20`7B X`09`09`09fprintf(stdout,`20"`5Ct`5C"%s`5C"`5Cn",`20extensions`5Bi`5D); X`09`09`7D X`09`09XFreeExtensionList(extensions); X`09`7D X`7D $ call unpack LISTEXTENSIONS.C;1 807172158 "" $! $ create 'f' X$`20SAVE_VERIFY='F$VERIFY(0) X$`20if`20p1`20.Eqs.`20"CLEAN"`20then`20goto`20clean X$`20if`20p1`20.Eqs.`20"CLOBBER"`20then`20goto`20clobber X$`20if`20p1`20.Eqs.`20"INSTALL"`20then`20goto`20install X$! X$!`09Compile`20the`20X11R4`20X`20Ico`20application X$! X$`20Set`20Symbol/Scope=NoGlobal X$! X$!`20`20Get`20the`20compiler`20options`20via`20the`20logical`20name`20COPTS X$! X$`20cc_options`20=`20f$trnlnm("COPTS")`20+`20"/define=(MULTIBUFFER)" X$! X$!`20`20Get`20the`20linker`20options`20via`20the`20logical`20name`20LOPTS X$! X$`20link_options`20=`20f$trnlnm("LOPTS") X$! X$!`20`20Compile`20the`20"C"`20files X$! X$!`20procedure`20target`09command`20`09`09`09depends`20upon X$!`20CALL`20MAKE`20FILE.OBJ`09"CC`20''cc_options'`20FILE.C"`09FILE.C X$! X$`20write`20sys$output`20"Compiling`20ICO`20sources" X$`20CALL`20MAKE`20ICO.OBJ`09"CC`20''cc_options'`20ICO.C"`09ICO.C X$`20CALL`20MAKE`20STRINGS.OBJ`20"MAC`20STRINGS.MAR"`09`09STRINGS.MAR X$! X$`20write`20sys$output`20"Building`20ICO`20image" X$`20CALL`20MAKE`20ICO.EXE`09"LINK`20''link_options'`20ICO/OPT"`09*.OBJ X$! X$`20exit X$! X$`20Clobber:`09!`20Delete`20executables,`20Purge`20directory`20and`20clean`20u Vp`20object`20files`20and`20listings X$`20Delete/noconfirm/log`20*.exe;* X$! X$`20Clean:`09!`20Purge`20directory,`20clean`20up`20object`20files`20and`20list Vings X$`20Purge X$`20Delete/noconfirm/log`20*.lis;* X$`20Delete/noconfirm/log`20*.obj;* X$! X$`20exit X$! X$`20Install: X$`20Copy/log`20*.exe`20X11Bin: X$`20exit X$! X$MAKE:`20SUBROUTINE`20`20`20!SUBROUTINE`20TO`20CHECK`20DEPENDENCIES X$`20V`20=`20'F$Verify(0) X$!`20P1`20=`20What`20we`20are`20trying`20to`20make X$!`20P2`20=`20Command`20to`20make`20it X$!`20P3`20-`20P8`20`20What`20it`20depends`20on X$ X$`20If`20F$Search(P1)`20.Eqs.`20""`20Then`20Goto`20Makeit X$`20Time`20=`20F$CvTime(F$File(P1,"RDT")) X$arg=3 X$Loop: X$`09Argument`20=`20P'arg X$`09If`20Argument`20.Eqs.`20""`20Then`20Goto`20Exit X$`09El=0 X$Loop2: X$`09File`20=`20F$Element(El,"`20",Argument) X$`09If`20File`20.Eqs.`20"`20"`20Then`20Goto`20Endl X$`09AFile`20=`20"" X$Loop3: X$`09OFile`20=`20AFile X$`09AFile`20=`20F$Search(File) X$`09If`20AFile`20.Eqs.`20""`20.Or.`20AFile`20.Eqs.`20OFile`20Then`20Goto`20Nex VtEl X$`09If`20F$CvTime(F$File(AFile,"RDT"))`20.Ges.`20Time`20Then`20Goto`20Makeit X$`09Goto`20Loop3 X$NextEL: X$`09El`20=`20El`20+`201 X$`09Goto`20Loop2 X$EndL: X$`20arg=arg+1 X$`20If`20arg`20.Le.`208`20Then`20Goto`20Loop X$`20Goto`20Exit X$ X$Makeit: X$`20Set`20Verify X$`20'P2 X$`20VV='F$Verify(0) X$Exit: X$`20If`20V`20Then`20Set`20Verify X$ENDSUBROUTINE $ call unpack MAKE.COM;1 691436675 "" $! $ create 'f' X/*`20objcube.h`20-`20structure`20values`20for`20cube`20*/ X X`7B`09"cube",`20"cube",`09/*`20long`20and`20short`20names`20*/ X`09"tetrahedron",`09/*`20long`20name`20of`20dual`20*/ X`098,`2012,`206,`09/*`20number`20of`20vertices,`20edges,`20and`20faces`20*/ X`09`7B`09`09/*`20vertices`20(x,y,z)`20*/ X`09`09`09/*`20all`20points`20must`20be`20within`20radius`201`20of`20the`20orig Vin`20*/ X#define`20T`200.577 X`09`09`7B`20`20T,`20`20T,`20`20T`20`7D, X`09`09`7B`20`20T,`20`20T,`20-T`20`7D, X`09`09`7B`20`20T,`20-T,`20-T`20`7D, X`09`09`7B`20`20T,`20-T,`20`20T`20`7D, X`09`09`7B`20-T,`20`20T,`20`20T`20`7D, X`09`09`7B`20-T,`20`20T,`20-T`20`7D, X`09`09`7B`20-T,`20-T,`20-T`20`7D, X`09`09`7B`20-T,`20-T,`20`20T`20`7D, X#undef`20T X`09`7D, X`09`7B`09/*`20faces`20(numfaces`20+`20indexes`20into`20vertices)`20*/ X`09`09/*`20`20faces`20must`20be`20specified`20clockwise`20from`20the`20outside V`20*/ X`09`094,`090,`201,`202,`203, X`09`094,`20`097,`206,`205,`204, X`09`094,`20`091,`200,`204,`205, X`09`094,`093,`202,`206,`207, X`09`094,`092,`201,`205,`206, X`09`094,`090,`203,`207,`204, X`09`7D X`7D,`09`09/*`20leave`20a`20comma`20to`20separate`20from`20the`20next`20include V`20file`20*/ X/*`20end`20*/ $ call unpack OBJCUBE.H;1 1627739575 "" $! $ create 'f' X/*`20objico.h`20-`20structure`20values`20for`20icosahedron`20*/ X X`7B`09"icosahedron",`20"ico",`09/*`20long`20and`20short`20names`20*/ X`09"dodecahedron",`09`09/*`20long`20name`20of`20dual`20*/ X`0912,`2030,`2020,`09/*`20number`20of`20vertices,`20edges,`20and`20faces`20*/ X`09`7B`09`09/*`20vertices`20(x,y,z)`20*/ X`09`09`09/*`20all`20points`20must`20be`20within`20radius`201`20of`20the`20orig Vin`20*/ X`09`09`7B`200.00000000,`20`200.00000000,`20-0.95105650`7D, X`09`09`7B`200.00000000,`20`200.85065080,`20-0.42532537`7D, X`09`09`7B`200.80901698,`20`200.26286556,`20-0.42532537`7D, X`09`09`7B`200.50000000,`20-0.68819095,`20-0.42532537`7D, X`09`09`7B-0.50000000,`20-0.68819095,`20-0.42532537`7D, X`09`09`7B-0.80901698,`20`200.26286556,`20-0.42532537`7D, X`09`09`7B`200.50000000,`20`200.68819095,`20`200.42532537`7D, X`09`09`7B`200.80901698,`20-0.26286556,`20`200.42532537`7D, X`09`09`7B`200.00000000,`20-0.85065080,`20`200.42532537`7D, X`09`09`7B-0.80901698,`20-0.26286556,`20`200.42532537`7D, X`09`09`7B-0.50000000,`20`200.68819095,`20`200.42532537`7D, X`09`09`7B`200.00000000,`20`200.00000000,`20`200.95105650`7D X`09`7D, X`09`7B`09/*`20faces`20(numfaces`20+`20indexes`20into`20vertices)`20*/ X`09`09/*`20`20faces`20must`20be`20specified`20clockwise`20from`20the`20outside V`20*/ X`09`09`203,`090,`20`202,`20`201, X`09`09`203,`090,`20`203,`20`202, X`09`09`203,`090,`20`204,`20`203, X`09`09`203,`090,`20`205,`20`204, X`09`09`203,`090,`20`201,`20`205, X`09`09`203,`091,`20`206,`2010, X`09`09`203,`091,`20`202,`20`206, X`09`09`203,`092,`20`207,`20`206, X`09`09`203,`092,`20`203,`20`207, X`09`09`203,`093,`20`208,`20`207, X`09`09`203,`093,`20`204,`20`208, X`09`09`203,`094,`20`209,`20`208, X`09`09`203,`094,`20`205,`20`209, X`09`09`203,`095,`2010,`20`209, X`09`09`203,`095,`20`201,`2010, X`09`09`203,`0910,`20`206,`2011, X`09`09`203,`096,`20`207,`2011, X`09`09`203,`097,`20`208,`2011, X`09`09`203,`098,`20`209,`2011, X`09`09`203,`099,`2010,`2011 X`09`7D X`7D,`09`09/*`20leave`20a`20comma`20to`20separate`20from`20the`20next`20include V`20file`20*/ X/*`20end`20*/ $ call unpack OBJICO.H;1 339422479 "" $! $ create 'f' X/*`20objtetra.h`20-`20structure`20values`20for`20tetrahedron`20*/ X X`7B`09"tetrahedron",`20"tetra",`09/*`20long`20and`20short`20names`20*/ X`09"cube",`09`09/*`20long`20name`20of`20dual`20*/ X`096,`2012,`208,`09/*`20number`20of`20vertices,`20edges,`20and`20faces`20*/ X`09`7B`09`09/*`20vertices`20(x,y,z)`20*/ X`09`09`09/*`20all`20points`20must`20be`20within`20radius`201`20of`20the`20orig Vin`20*/ X#define`20T`201.0 X`09`09`7B`20`20T,`20`200,`20`200`20`7D, X`09`09`7B`20-T,`20`200,`20`200`20`7D, X`09`09`7B`20`200,`20`20T,`20`200`20`7D, X`09`09`7B`20`200,`20-T,`20`200`20`7D, X`09`09`7B`20`200,`20`200,`20`20T`20`7D, X`09`09`7B`20`200,`20`200,`20-T`20`7D, X#undef`20T X`09`7D, X`09`7B`09/*`20faces`20(numfaces`20+`20indexes`20into`20vertices)`20*/ X`09`09/*`20`20faces`20must`20be`20specified`20clockwise`20from`20the`20outside V`20*/ X`09`093,`090,`204,`202, X`09`093,`090,`202,`205, X`09`093,`090,`205,`203, X`09`093,`090,`203,`204, X`09`093,`091,`202,`204, X`09`093,`091,`205,`202, X`09`093,`091,`203,`205, X`09`093,`091,`204,`203, X`09`7D X`7D,`09`09/*`20leave`20a`20comma`20to`20separate`20from`20the`20next`20include V`20file`20*/ X/*`20end`20*/ $ call unpack OBJTETRA.H;1 975405353 "" $! $ create 'f' X/*`20polyinfo.h X`20*`20This`20is`20the`20description`20of`20one`20polyhedron`20file X`20*/ X X#define`20MAXVERTS`20120 X`09/*`20great`20rhombicosidodecahedron`20has`20120`20vertices`20*/ X#define`20MAXNV`20MAXVERTS X#define`20MAXFACES`2030 X`09/*`20(hexakis`20icosahedron`20has`20120`20faces)`20*/ X#define`20MAXEDGES`20180 X`09/*`20great`20rhombicosidodecahedron`20has`20180`20edges`20*/ X#define`20MAXEDGESPERPOLY`2020 X Xtypedef`20struct`20`7B X`09double`20x,`20y,`20z; X`7D`20Point3D; X X/*`20structure`20of`20the`20include`20files`20which`20define`20the`20polyhedra V`20*/ Xtypedef`20struct`20`7B X`09char`20*longname;`09`09/*`20long`20name`20of`20object`20*/ X`09char`20*shortname;`09/*`20short`20name`20of`20object`20*/ X`09char`20*dual;`09`09/*`20long`20name`20of`20dual`20*/ X`09int`20numverts;`09`09/*`20number`20of`20vertices`20*/ X`09int`20numedges;`09`09/*`20number`20of`20edges`20*/ X`09int`20numfaces;`09`09/*`20number`20of`20faces`20*/ X`09Point3D`20v`5BMAXVERTS`5D;`09/*`20the`20vertices`20*/ X`09int`20f`5BMAXEDGES*2+MAXFACES`5D;`09/*`20the`20faces`20*/ X`7D`20Polyinfo; X X/*`20end`20*/ $ call unpack POLYINFO.H;1 1866597338 "" $! $ create 'f' X/* X`20*`09Example`202`20-`20QueryExtensions.C X`20* X`20*`09Author:`20Patrick`20L.`20Mahan X`20*`09Date:`20`20`20January`203,`201993 X`20* X`20*`09Query`20the`20server`20about`20an`20available`20X`20extension X`20* X`20*`09To`20build`20this`20program,`20issue`20the`20following`20commands X`20* X`20*`09`09$`20CC`20LISTEXTENSIONS.C X`20*`09`09$`20LINK`20LISTEXTENSIONS,SYS$INPUT:/OPT X`20*`09`09SYS$SHARE:DECW$XLIBSHR.EXE/SHARE X`20*`09`09`5EZ X`20* X`20*`09NOTE:`20Extension`20names`20are`20case`20sensitive. X`20*/ X X#include`20 X#include`20 X Xmain(argc,`20argv) Xint`20`20argc; Xchar`20*argv`5B`5D; X`7B X`09int`20major_opcode,`20first_event,`20first_error; X`09Display`20*dpy; X X`09/* X`09`20*`09Open`20the`20display X`09`20*/ X`09dpy`20=`20XOpenDisplay(NULL); X X`09/* X`09`20*`09Get`20the`20extension`20to`20locate`20from`20the`20command`20line X`09`20*/ X`09if`20(argc`20<`202)`20`7B X`09`09fprintf(stderr,`20"Invalid`20number`20of`20arguments`5Cn"); X`09`09exit`20(0); X`09`7D`20else`20`7B X`09`09if`20(XQueryExtension(dpy,`20argv`5B1`5D,`20`26major_opcode,`20`26first_ Vevent,`20`26first_error))`20`7B X`09`09`09fprintf(stdout,`20"`5C"%s`5C"`20Extension`20does`20exist.`20",`20argv V`5B1`5D); X`09`09`09if`20(major_opcode)`20fprintf(stdout,`20"Major`20Opcode:`20%d`20", V`20major_opcode); X`09`09`09if`20(first_event)`20fprintf(stdout,`20"Base`20Event`20Type:`20%d`20" V,`20first_event); X`09`09`09if`20(first_error)`20fprintf(stdout,`20"Base`20Error`20Code:`20%d`20" V,`20first_error); X`09`09`09fprintf(stdout,`20"`5Cn"); X`09`09`7D`20else X`09`09`09fprintf(stdout,`20"`5C"%s`5C"`20Extension`20does`20not`20exist.`5Cn", V`20argv`5B1`5D); X`09`7D X`7D X $ call unpack QUERYEXTENSIONS.C;1 573201325 "" $! $ create 'f' X`09.ident`09"1.0-002" X`09.title`09String`20routines`20for`20Ultrix`20emulation X X`09.psect`09strings,exe,rel,shr,pic,nowrt X X; X;`20`20bcopy(src,`20dest,`20length) X; X;`20`20char`20*src;`09`09`20`20`20`20`20/*`20source`20string`20*/ X;`20`20char`20*dest;`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20/*`20dest`20s Vtring`20`20*/ X;`20`20unsigned`20long`20int`20length;`20/*`20length`20in`20bytes`20*/ X; X;`20`20This`20routine`20copies`20the`20specified`20number`20of`20bytes`20from V`20the`20source`20string X;`20`20to`20the`20destination`20string.`20If`20the`20specified`20length`20is V`20longer`20thatn`20 X;`20`2064kb,`20then`20it`20copies`2064kb`20each`20time`20until`20it`20is`20don Ve. X;`20`20 X.entry`20bcopy,`5EM X`09movl`09#65535,r7`09;`20counter`20 X`09movl`0912(ap),r6`09;`20amount`20to`20copy`20 Xnext_block: X`09cmpl`09r6,r7`09`09;`20are`20we`20done`20yet? X`09bgtru`09do_copy X`09movl`09r6,r7`09`09;`20only`20need`20to`20move`20what's`20left Xdo_copy: X`09movc3`09r7,@4(ap),@8(ap);`20move`20it X`09subl2`09r7,r6`09`09;`20adjust`20counter`20to`20the`20next`20block X`09bleq`09copy_done X`09movl`09r1,4(ap) X`09movl`09r3,8(ap) X`09brw`09next_block`09;`20do`20it`20again Xcopy_done: X`09ret X X`0C X;++ X; X;`20bcmp(`20source,`20dest,`20len`20) X;`20char`20*source,`20*dest; X;`20int`20len; X; X;`20copies`20(len)`20bytes`20from`20(source)`20to`20(dest)`20regardless`20of V`20contents X; X;-- X X.entry`09bcmp,`5Em X X`09cmpc3`2012(ap),@4(ap),@8(ap)`09;`20that's`20all,`20folks... X`09beql`0910$ X`09movl`09#-1,R0`09;fail X`09ret X10$:`09movl`09#0,R0`09;SUCCESS X`09ret X`0C X;++ X; X;`20bzero(`20dest,`20len`20) X;`20char`20*dest; X;`20int`20len; X; X;`20writes`20(len)`20zero`20bytes`20into`20dest X; X;-- X X.entry`09bzero,`5Em X X`09movc5`20#0,@4(ap),#0,8(ap),@4(ap)`09;`20will`20pad`20with`20nuls X`09ret X`0C X;++ X; X;`20int`20ffs(`20i`20) X;`20int`20i; X; X;`20finds`20the`20first`20bit`20set`20in`20the`20argument`20and`20returns`20th Ve`20index X;`20of`20that`20bit`20(starting`20at`201). X; X;-- X X.entry`09ffs,0 X X`09ffs`20#0,#32,4(ap),r0 X`09beql`2010$`09`09`09;`20branch`20if`20arg=0 X`09incl`20r0`09`09`09`09;`20VAX`20counts`20bits`20from`200 X`09ret X10$:`09movl`20#-1,r0`09`09`09;`20no`20set`20bits,`20return`20-1 X`09ret X`0C X;++ X; X;`20char`20*index(`20string,`20c`20) X;`20char`20*string,`20c; X; X;`20returns`20pointer`20to`20first`20occurrence`20of`20character`20c`20within V`20string X;`20or`20zero`20if`20not`20found. X; X;-- X X.entry`09index,0 X X`09locc`20#0,#-1,@4(ap)`09`09;`20find`20end`20of`20string`20first X`09subl`204(ap),r1`09`09`09;`20compute`20length`20of`20string X`09locc`208(ap),r1,@4(ap)`09`09;`20now`20find`20char X`09bneq`2010$ X`09clrl`20r1`09`09`09`09;`20clear`20pointer`20if`20not`20found X10$:`09movl`20r1,r0`09`09`09;`20return`20the`20pointer X`09ret X`0C X;++ X; X;`20char`20*rindex(`20string,`20c`20) X;`20char`20*string,`20c; X; X;`20returns`20pointer`20to`20last`20occurrence`20of`20character`20c`20within V`20string X;`20or`20zero`20if`20not`20found. X; X;-- X X X.entry`09rindex,`5EM X X`09locc`20#0,#-1,@4(ap)`09`09;`20find`20end`20of`20string`20first X`09subl3`204(ap),r1,r0`09`09;`20compute`20length`20of`20string X`09clrl`20r2`09`09`09`09;`20assume`20no`20occurrence X`09movl`204(ap),r1`09`09`09;`20starting`20address X10$:`09locc`208(ap),r0,(r1)`09`09;`20search`20from`20left X`09beql`2020$`09`09`09;`20none`20there,`20done X`09movl`20r1,r2`09`09`09;`20save`20this`20pointer X`09incl`20r1`09`09`09`09;`20start`20again`20one`20byte`20to`20the`20right X`09decl`20r0`09`09`09`09;`20update`20new`20length X`09bgtr`2010$`09`09`09;`20and`20continue`20search X X20$:`09movl`20r2,r0`09`09`09;`20return`20last`20pointer`20found X`09ret X X`09.end $ call unpack STRINGS.MAR;1 538464893 "" $ v=f$verify(v) $ exit