{ Written by John E. Morrow jmorrow@pirl.lpl.arizona.edu This is virtual shareware. Pretend that every 5 days it pops up a message telling you to send me $50. When you finally get annoyed enough, pretend to send me a check for this amount. Wait 4-6 weeks then imagine getting a registration number which stops the annoying message. In return, I will fantasize about receiving millions of dollars for my work and buying a small island in the pacific for my home. Once this is virtually registered, feel free to distribute, hack, slash, trash, mutilate, etc. as you see fit. } {Globals} var NumString,s:string; w,h,x,y,i,sLen,nMeas,sp:integer; procedure error(s:string); begin PutMessage(s); exit; end; macro '[S] Save Data'; begin s:=' '; {s is a space} w:=300; {width of image which stores data} h:=rCount+1; {height of image} i:=GetNumber ('Number of digits right of decimal?',2); SetNewSize(w,h); MakeNewWindow('Data'); x:=rCount div 256; PutPixel(0,0,x); {store number of measurements} y:=rCount mod 256; PutPixel(1,0,y); for y:=1 to rCount do begin {build string from measurements} NumString:=concat( rArea[y]:1:i,s, rMean[y]:1:i,s, rStdDev[y]:1:i,s, rX[y]:1:i,s,rY[y]:1:i,s, rMin[y]:1:i,s,rMax[y]:1:i,s, rLength[y]:1:i,s, rMajor[y]:1:i,s,rMinor[y]:1:i,s, rAngle[y]:1:i,s, rUser1[y]:1:i,s,rUser2[y]:1:i,s); sLen:=length(NumString); if sLen>w then error('Need to open a wider image window'); for x:=0 to sLen-1 do begin {convert string char by char} LineBuffer[x]:=ord(NumString); Delete(NumString,1,1); PutRow(0,y,sLen); {write string to window} end; {for x} end; {for y} SaveAs('Data'); {save data} dispose; end; procedure GetNumString; begin NumString:=''; i:=GetPixel(x,y); while i<>sp do begin NumString:=concat(NumString,chr(i)); x:=x+1; i:=GetPixel(x,y); end; {while} end; macro '[R] Restore Data'; begin sp:=ord(' '); open(''); {get data file} ResetCounter; {clear out old data} {read number of measurements from file} nMeas:=GetPixel(0,0)*256+GetPixel(1,0); SetCounter(nMeas); for y:=1 to nMeas do begin x:=0; GetNumString; rArea[y]:=StringToNum(NumString); x:=x+1; GetNumString; rMean[y]:=StringToNum(NumString); x:=x+1; GetNumString; rStdDev[y]:=StringToNum(NumString); x:=x+1; GetNumString; rX[y]:=StringToNum(NumString); x:=x+1; GetNumString; rY[y]:=StringToNum(NumString); x:=x+1; GetNumString; rMin[y]:=StringToNum(NumString); x:=x+1; GetNumString; rMax[y]:=StringToNum(NumString); x:=x+1; GetNumString; rLength[y]:=StringToNum(NumString); x:=x+1; GetNumString; rMajor[y]:=StringToNum(NumString); x:=x+1; GetNumString; rMinor[y]:=StringToNum(NumString); x:=x+1; GetNumString; rAngle[y]:=StringToNum(NumString); x:=x+1; GetNumString; rUser1[y]:=StringToNum(NumString); x:=x+1; GetNumString; rUser2[y]:=StringToNum(NumString); x:=x+1; end; {for i} dispose; end; macro '(-'; begin end; macro '[?] About these macros...'; begin PutMessage('Written by John E. Morrow jmorrow@pirl.lpl.arizona.edu'); end;