===================================================================
RCS file: /home/cvs/OpenXM_contrib2/asir2000/lib/glib,v
retrieving revision 1.18
retrieving revision 1.21
diff -u -p -r1.18 -r1.21
--- OpenXM_contrib2/asir2000/lib/glib	2006/03/08 04:58:15	1.18
+++ OpenXM_contrib2/asir2000/lib/glib	2018/10/22 07:05:55	1.21
@@ -1,10 +1,11 @@
-/* $OpenXM: OpenXM_contrib2/asir2000/lib/glib,v 1.17 2006/03/03 10:36:18 takayama Exp $ */
+/* $OpenXM: OpenXM_contrib2/asir2000/lib/glib,v 1.20 2008/08/07 06:00:34 takayama Exp $ */
 
 /* BUG: this library has not yet been adapted to the new automatic launcher
         of ox_plot. 2002, Aug, 4.  Do not load glib more than twice. 
 */
 
 extern Cfep_loaded$
+extern Cfep_use_opengl$
 
 #define DO_NOT_START_SERVER_EXPLICITLY
 
@@ -37,7 +38,7 @@ def glib_ox_get_errors(P) {
 
 def reset_plot() {   
   extern Glib_process;
-  if (!Cfep_loaded) {
+  if ((!Cfep_loaded) || (!Cfep_use_opengl)) {
     print("  Sending signal to ox_plot",0);
     ox_reset(Glib_process);
     print("  Done.");
@@ -65,7 +66,7 @@ Glib_ps_sy=2$  /* mag=1/2 for PS picture */ 
 def open_Canvas(P,S) {
   extern Glib_process;
   /* print("open_Canvas: ",0);print(S); */
-  if (!Cfep_loaded) {
+  if ((!Cfep_loaded) || (!Cfep_use_opengl)) {
     if (P < 0) P=open_canvas(S); /* BUG, get process No. */
     else open_canvas(P,S);
     Glib_process = P; 
@@ -77,7 +78,7 @@ def open_Canvas(P,S) {
       debug;
     }
     */
-  }else{
+  }else {
     R=cfep.open_canvas(S);
   }
   return(R);
@@ -95,7 +96,7 @@ def glib_open() {
   extern Glib_canvas_x, Glib_canvas_y,
          Glib_process, Glib_canvas,
          Glib_server_started, Glib_process$
-  if (!Cfep_loaded) return glib_openx11();
+  if ((!Cfep_loaded) || (!Cfep_use_opengl)) return glib_openx11();
   else {
     Glib_canvas = open_Canvas(-1,[Glib_canvas_x,Glib_canvas_y])$
     Glib_server_started = 1$ 
@@ -144,7 +145,7 @@ def glib_check_strict() {
   if (Glib_canvas < 0) {
     glib_open();
   }
-  if (Cfep_loaded) return ;
+  if (Cfep_loaded && Cfep_use_opengl) return ;
   E = glib_ox_get_errors(Glib_process);
   if (E != []) {
     ox_pops(Glib_process,200);
@@ -157,10 +158,14 @@ def glib_check_strict() {
   }
 }
 
+/*&usage begin: glib_clear()
+  Clear the screen.
+end: */
 def glib_clear() {
   extern Glib_process, Glib_canvas;
   if (Glib_canvas < 0) glib_open();
-  if (!Cfep_loaded) clear_canvas(Glib_process,Glib_canvas);
+  if ((!Cfep_loaded) || (!Cfep_use_opengl)) clear_canvas(Glib_process,Glib_canvas);
+  else cfep.glib_clear();
 }
 
 /*&usage begin: glib_window(Xmin,Ymin,Xmax,Ymax)
@@ -221,19 +226,20 @@ def glib_putpixel(X,Y) {
            Glib_canvas_y-glib_floor(Glib_ymag*(Y+Glib_yoffset))];
   }
   if ( type(C) != -1 ) {
-    if (!Cfep_loaded) draw_obj(Glib_process,Glib_canvas,Pos,C);
+    if ((!Cfep_loaded) || (!Cfep_use_opengl)) draw_obj(Glib_process,Glib_canvas,Pos,C);
     else cfep.draw_obj2(Glib_process,Glib_canvas,Pos,C);
     if (Glib_ps) glib_history(["putpixel",Pos2,C]);
   }else{
-    if (!Cfep_loaded) draw_obj(Glib_process,Glib_canvas,Pos);
+    if ((!Cfep_loaded) || (!Cfep_use_opengl)) draw_obj(Glib_process,Glib_canvas,Pos);
     else cfep.draw_obj(Glib_process,Glib_canvas,Pos);
     if (Glib_ps) glib_history(["putpixel",Pos2,0]);
   }
 }
 
-/*&usage begin: glib_line(X0,Y0,X1,Y1|color)
-  It draws the line [{X0},{Y0}]-- [{X1},{Y1}] with {color}
+/*&usage begin: glib_line(X0,Y0,X1,Y1|color,shape)
+  It draws the line [{X0},{Y0}]-- [{X1},{Y1}] with {color} and {shape}
   example: glib_line(0,0,5,3/2 | color=0xff00ff);
+           glib_line(0,0,10,0 | shape=arrow);
 end: */
 def glib_line(X0,Y0,X1,Y1) {
   extern Glib_xmag, Glib_ymag, Glib_xoffset, Glib_yoffset;
@@ -244,6 +250,16 @@ def glib_line(X0,Y0,X1,Y1) {
                  glib_floor(Glib_ymag*(Y0+Glib_yoffset)),
                  glib_floor(Glib_xmag*(X1+Glib_xoffset)),
                  glib_floor(Glib_ymag*(Y1+Glib_yoffset)),C);
+  Shape = getopt(shape);
+  if (type(Shape) != 2) return;
+  Px = X0+(7/8)*(X1-X0);
+  Py = Y0+(7/8)*(Y1-Y0);
+  Qx = (Y0-Y1)/8;
+  Qy = (X1-X0)/8;
+  if (type(C)>0) glib_line(X1,Y1,Px+Qx,Py+Qy | color=C);
+  else glib_line(X1,Y1,Px+Qx,Py+Qy);
+  if (type(C)>0) glib_line(X1,Y1,Px-Qx,Py-Qy | color=C);
+  else glib_line(X1,Y1,Px-Qx,Py-Qy);
 }
 
 def glib_clip_line(X0,Y0,X1,Y1,Color) {
@@ -302,11 +318,11 @@ if (Glib_ps) {
            glib_floor(X1),Glib_canvas_y-glib_floor(Y1)];
   }
   if ( type(Color) != -1 ) {
-    if (!Cfep_loaded) draw_obj(Glib_process,Glib_canvas,Pos,Color);
+    if ((!Cfep_loaded) || (!Cfep_use_opengl)) draw_obj(Glib_process,Glib_canvas,Pos,Color);
     else cfep.draw_obj2(Glib_process,Glib_canvas,Pos,Color);
     if (Glib_ps) glib_history(["line",Pos2,Color]);
   }else{
-    if (!Cfep_loaded) draw_obj(Glib_process,Glib_canvas,Pos);
+    if ((!Cfep_loaded) || (!Cfep_use_opengl)) draw_obj(Glib_process,Glib_canvas,Pos);
     else cfep.draw_obj(Glib_process,Glib_canvas,Pos);
     if (Glib_ps) glib_history(["line",Pos2,0]);
   }
@@ -378,11 +394,11 @@ def glib_print(X,Y,Text) {
            Glib_canvas_y-glib_floor(Glib_ymag*(Y+Glib_yoffset))];
   }
   if ( type(C) != -1 ) {
-    if (!Cfep_loaded) draw_string(Glib_process,Glib_canvas,Pos,Text,C);
+    if ((!Cfep_loaded) || (!Cfep_use_opengl)) draw_string(Glib_process,Glib_canvas,Pos,Text,C);
     else cfep.draw_string2(Glib_process,Glib_canvas,Pos,Text,C);
     if (Glib_ps) glib_history(["print",Pos2,Text,C]);
   }else{
-    if (!Cfep_loaded) draw_string(Glib_process,Glib_canvas,Pos,Text);
+    if ((!Cfep_loaded) || (!Cfep_use_opengl)) draw_string(Glib_process,Glib_canvas,Pos,Text);
     else cfep.draw_string(Glib_process,Glib_canvas,Pos,Text);
     if (Glib_ps) glib_history(["print",Pos2,Text,0]);
   }
@@ -511,7 +527,7 @@ end: */
 def glib_flush() {
   extern Glib_canvas;
   if (Glib_canvas < 0) glib_open();
-  if (Cfep_loaded) cfep.draw_flush(Glib_canvas);
+  if (Cfep_loaded && Cfep_use_opengl) cfep.draw_flush(Glib_canvas);
 }
 /*&usage begin: glib_set_pixel_size(P)
   Set the size of putpixel to P. 1.0 is the default.
@@ -520,19 +536,10 @@ end: */
 def glib_set_pixel_size(X) {
   extern  Glib_canvas;
   if (Glib_canvas < 0) glib_open();
-  if (!Cfep_loaded) /*Not implemented.*/ ;
+  if ((!Cfep_loaded) || (!Cfep_use_opengl)) /*Not implemented.*/ ;
   else cfep.glib_set_pixel_size(X);
 }
-/*&usage begin: glib_clear()
-  Clear the screen.
- (cfep only).
-end: */
-def glib_clear() {
-  extern  Glib_canvas;
-  if (Glib_canvas < 0) glib_open();
-  if (!Cfep_loaded) /*Not implemented.*/ ;
-  else cfep.glib_clear();
-}
+
 /*&usage begin: glib_remove_last()
   Remove the last object.  glib_flush() should also be called to remove
   the last object.
@@ -541,9 +548,13 @@ end: */
 def glib_remove_last() {
   extern  Glib_canvas;
   if (Glib_canvas < 0) glib_open();
-  if (!Cfep_loaded) /*Not implemented.*/ ;
+  if ((!Cfep_loaded) || (!Cfep_use_opengl)) /*Not implemented.*/ ;
   else cfep.glib_remove_last();
 }
+
+if (Cfep_loaded && (!Cfep_use_opengl)) {
+  printf("OpenGL is no longer supported on cfep.asir. Use X11 instead.\n")$
+}else{;}$
 
 end$