home *** CD-ROM | disk | FTP | other *** search
- /* «RM120»«PL99999»«TS4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76» «MDBO»from axis.hgh «MDNM»*/
- #include <stdio.h>
- #define EXTERN extern
- #include <typedef.h>
-
- extern double log10();
- extern double pow();
- extern double fabs();
-
- double s, Fract;
-
-
- static int GetExponent(X1)
- double X1;
- {
- if (X1 == 0.)
- return(0);
- else if (fabs(X1) >= 1.)
- return((int)(.01 + log10(fabs(X1))));
- else
- return(-(int)(.01 + log10(fabs(X1))));
- }
-
-
- static void DrawNum(x1, y1, MaxExponent, Number)
- int x1, y1, MaxExponent;
- double Number;
- {
- register int i;
- WrkString StrNumber;
- double t;
-
- sprintf(StrNumber, "%5.2lf", Number * pow(10., -(double)MaxExponent));
- y1 = y1 - 3;
- for (i = 0; i < 5; i++)
- DrawAscii(&x1, &y1, 1, StrNumber[i]);
- }
-
- static int Balance()
- {
- s = s + Fract;
- if (s >= 0) {
- s = s - 1.0;
- return(1);
- }
- else
- return(0);
- }
-
-
- static void DrawExponent(x1,y1,MaxExponent)
- int x1, y1, MaxExponent;
- {
- int i;
- WrkString StrNumber;
-
- y1 = y1-3;
- x1 = x1+1;
- DrawAscii(&x1, &y1, 1, 49);
- DrawAscii(&x1, &y1, 1, 48);
- sprintf(StrNumber, "%3d", MaxExponent);
- y1 = y1-3;
- x1 = x1-7;
- for (i = 0; i < 3; i++)
- DrawAscii(&x1, &y1, 1, StrNumber[i]);
- }
-
-
- void DrawAxis(XDens,YDens,XLeft,YTop,XRight,YBottom,XAxis,YAxis,Arrows)
- int XDens,YDens,XLeft,YTop,XRight,YBottom,XAxis,YAxis,Arrows;
- {
- register int i;
-
- int LineStyleLoc,xk0,yk0,xk1,yk1,xk2,yk2;
- int x2,y2,MaxExponentX,MaxExponentY,ys,xs,Delta,NPoints;
- double Difference,Number,s,Fract;
- int X1RefLoc,X2RefLoc,Y1RefLoc,Y2RefLoc;
- int X1RefLoc2,X2RefLoc2,Y1RefLoc2,Y2RefLoc2;
- int ClippingLoc,DirectModeLoc,HeaderLoc;
-
-
- LineStyleLoc = LineStyleGlb;
- SetLineStyle(0);
- DirectModeLoc = DirectModeGlb;
- DirectModeGlb = TRUE;
-
- X1RefLoc = window[WindowNdxGlb].x1;
- X2RefLoc = window[WindowNdxGlb].x2;
- Y1RefLoc = window[WindowNdxGlb].y1;
- Y2RefLoc = window[WindowNdxGlb].y2;
- ReDefineWindow(WindowNdxGlb, window[WindowNdxGlb].x1+XLeft,
- window[WindowNdxGlb].y1+YTop, window[WindowNdxGlb].x2-XRight,
- window[WindowNdxGlb].y2-YBottom);
- SelectWindow(WindowNdxGlb);
-
- if ((XDens < 0) ^ (YDens < 0)) {
- HeaderLoc = HeaderGlb;
- HeaderGlb = FALSE;
- DrawBorder();
- HeaderGlb = HeaderLoc;
- }
-
- XDens = iabs(XDens);
- YDens = iabs(YDens);
- if (XDens > 9)
- XDens = 0;
- if (YDens > 9)
- YDens = 0;
- xk0 = (X1RefGlb+4) << 3;
- yk0 = Y2RefGlb - 14;
- yk1 = Y1RefGlb + 6;
- xk1 = xk0;
- yk2 = yk0;
- xk2 = (X2RefGlb << 3) - 9;
- if ((XAxis >= 0) || (YAxis >= 0)) {
- ClippingLoc = ClippingGlb;
- ClippingGlb = TRUE;
- X1RefLoc2 = window[WindowNdxGlb].x1;
- X2RefLoc2 = window[WindowNdxGlb].x2;
- Y1RefLoc2 = window[WindowNdxGlb].y1;
- Y2RefLoc2 = window[WindowNdxGlb].y2;
- ReDefineWindow(WindowNdxGlb,X1RefLoc2+4,Y1RefLoc2+6,X2RefLoc2-2,
- Y2RefLoc2-14);
- SelectWindow(WindowNdxGlb);
- DirectModeGlb = FALSE;
- if (XAxis >= 0) {
- SetLineStyle(XAxis);
- DrawLine((double)X1WldGlb, (double)Y1WldGlb+Y2WldGlb,
- (double)X2WldGlb, (double)Y1WldGlb+Y2WldGlb);
- SetLineStyle(0);
- }
- if (YAxis >= 0) {
- SetLineStyle(YAxis);
- DrawLine(0., (double)Y1WldGlb, 0., (double)Y2WldGlb);
- SetLineStyle(0);
- }
- ClippingGlb = ClippingLoc;
- DirectModeGlb = TRUE;
- ReDefineWindow(WindowNdxGlb,X1RefLoc2,Y1RefLoc2,X2RefLoc2,Y2RefLoc2);
- SelectWindow(WindowNdxGlb);
- }
- if (YDens >= 2) {
- DrawLineDirect(xk0, yk0, xk1, yk1);
- if (Arrows) {
- DrawLineDirect(xk0, yk1, xk0 - 4, yk1 + 4);
- DrawLineDirect(xk0, yk1, xk0 + 4, yk1 + 4);
- dp(xk0, yk1 - 1);
- }
- }
- if (XDens >= 2) {
- DrawLineDirect(xk0, yk0, xk2 + 1, yk2);
- if (Arrows) {
- DrawLineDirect(xk2, yk2, xk2 - 4, yk2 - 4);
- DrawLineDirect(xk2, yk2, xk2 - 4, yk2 + 4);
- }
- }
-
- if ((iabs(yk0-yk1) >= 35) && (iabs(xk2-xk1) >= 150)) {
- DrawLineDirect(xk0, yk0, xk0 - 4, yk0);
- DrawLineDirect(xk0, yk0, xk0, yk0 + 4);
- Delta = Y2RefGlb-Y1RefGlb-20;
- NPoints = (int)(Delta / 7.);
- if (YDens >= 4) {
- if (fabs(Y2WldGlb) > fabs(Y1WldGlb))
- MaxExponentY = GetExponent(Y2WldGlb);
- else
- MaxExponentY = GetExponent(Y1WldGlb);
- DrawNum(X1RefGlb << 3, yk0+1, MaxExponentY, Y1WldGlb);
- if (MaxExponentY != 0)
- DrawExponent((X1RefGlb << 3) + 1, yk1 + 2, MaxExponentY);
- }
- Fract = Delta / (double)NPoints - 7.;
- s = -Fract;
- ys = yk0;
- Difference = (Y2WldGlb - Y1WldGlb) / NPoints;
- for (i = 1; i <= NPoints; i++) {
- ys = ys-7-Balance();
- if ((YDens > 2) && (ys > Y1RefGlb+13)) {
- Number = Y1WldGlb + i * Difference;
- DrawLineDirect(xk0, ys, xk0 - 4, ys);
- if ((YDens >= 4) && ((i % (10-YDens)) == 0))
- DrawNum(X1RefGlb << 3, ys + 1, MaxExponentY, Number);
- }
- }
- if (XDens >= 4) {
- if (fabs(X2WldGlb) > fabs(X1WldGlb))
- MaxExponentX = GetExponent(X2WldGlb);
- else
- MaxExponentX = GetExponent(X1WldGlb);
- DrawNum(xk0 - 14, yk0 + 10, MaxExponentX, X1WldGlb);
- if (MaxExponentX != 0)
- DrawExponent(xk2 - 13, yk0 + 10, MaxExponentX);
- }
- Delta = iabs(X2RefGlb-X1RefGlb) * 8 - 41;
- NPoints = (int)(Delta / 30.);
- Fract = (Delta - NPoints * 31) / (double)NPoints;
- s = -Fract;
- xs = xk0 - 1;
- Difference = (X2WldGlb-X1WldGlb) / NPoints;
- for (i = 1; i <= NPoints; i++) {
- xs = xs + 30 + Balance();
- if ((XDens > 2) && (xs < (X2RefGlb << 3) - 17)) {
- Number = X1WldGlb + i * Difference;
- DrawLineDirect(xs, yk0, xs, yk0 + 4);
- if ((XDens>=4) && ((i % (10-XDens)) == 0))
- DrawNum(xs - 14, yk0 + 10, MaxExponentX, Number);
- }
- }
- }
- ReDefineWindow(WindowNdxGlb,X1RefLoc,Y1RefLoc,X2RefLoc,Y2RefLoc);
- SelectWindow(WindowNdxGlb);
- DirectModeGlb = DirectModeLoc;
- SetLineStyle(LineStyleLoc);
- AxisGlb = TRUE;
- X1Glb = XLeft;
- X2Glb = XRight;
- Y1Glb = YTop;
- Y2Glb = YBottom;
- }
-
-
- void ResetAxis()
- {
- AxisGlb = TRUE;
- }
-
-