*** cli_xcin.c.orig	Tue Sep 28 22:52:05 1999
--- cli_xcin.c	Tue Sep 28 22:52:05 1999
***************
*** 139,142 ****
--- 139,143 ----
  #else
  	u_char res[sizeof(XCIN_RES)];
+ 	int res_len;
  #endif
  	int ofs;
***************
*** 171,175 ****
  	return  res.status;
  #else
! 	memcpy(buf, res+10, res[0] + (res[1]<<8) + (res[2]<<16) + (res[3]<<24));
  	inmdstate.kb_state = res[8];
  	inmdstate._CurInMethod = res[9];
--- 172,178 ----
  	return  res.status;
  #else
! 	res_len = res[0] + (res[1]<<8) + (res[2]<<16) + (res[3]<<24);
! 	memcpy(buf, res+10, res_len);
! 	buf[res_len] = 0;
  	inmdstate.kb_state = res[8];
  	inmdstate._CurInMethod = res[9];
*** convxim.c.orig	Tue Sep 28 22:52:06 1999
--- convxim.c	Tue Sep 28 22:52:06 1999
***************
*** 304,308 ****
    XRectangle s_rect;
    XVaNestedList preedit_attr,status_attr;
!   char     gszAttemptedFontName[MAXSTRING+1];
  
    if (im == NULL || ic == NULL || !overthespot) return;
--- 304,308 ----
    XRectangle s_rect;
    XVaNestedList preedit_attr,status_attr;
!   char     szAttemptedFontName[MAXSTRING+1];
  
    if (im == NULL || ic == NULL || !overthespot) return;
***************
*** 309,314 ****
  
    if (XIMfs) XFreeFontSet(dpy, XIMfs);
!   GetCurFontInfoStr(gszAttemptedFontName);
!   XIMfs=XCreateFontSet(dpy, gszAttemptedFontName,
  		    &missing_list, &missing_count, &def_string);
    fs_ext=XExtentsOfFontSet(XIMfs);
--- 309,314 ----
  
    if (XIMfs) XFreeFontSet(dpy, XIMfs);
!   GetCurFontInfoStr(szAttemptedFontName, sizeof(szAttemptedFontName));
!   XIMfs=XCreateFontSet(dpy, szAttemptedFontName,
  		    &missing_list, &missing_count, &def_string);
    fs_ext=XExtentsOfFontSet(XIMfs);
*** cutpaste.c.orig	Tue Sep 28 22:52:07 1999
--- cutpaste.c	Tue Sep 28 22:52:07 1999
***************
*** 535,541 ****
        SaveCursorPositionInCurText();
     } else {
!       TieLooseEnds();
!       SetCurChoice(NOTHING);
!       if (topSel != NULL) { HighLightReverse(); RemoveAllSel(); }
     }
     saved_top_obj = topObj;
--- 535,539 ----
        SaveCursorPositionInCurText();
     } else {
!       MakeQuiescent();
     }
     saved_top_obj = topObj;
***************
*** 590,593 ****
--- 588,605 ----
  
        return FALSE;
+    } else if (curChoice == DRAWTEXT) {
+       /* we've made a mistake earlier on, should have MakeQuiescent() */
+       struct ObjRec *pasted_top_obj=topObj, *pasted_bot_obj=botObj;
+ 
+       curPage->top = topObj = saved_top_obj;
+       curPage->bot = botObj = saved_bot_obj;
+       RestoreCursorPositionInCurText();
+ 
+       MakeQuiescent();
+ 
+       saved_top_obj = topObj;
+       saved_bot_obj = botObj;
+       curPage->top = topObj = pasted_top_obj;
+       curPage->bot = botObj = pasted_bot_obj;
     }
     if (topObj != NULL) SetFileModified(TRUE);
*** drawing.c.orig	Tue Sep 28 22:52:09 1999
--- drawing.c	Tue Sep 28 22:52:09 1999
***************
*** 1913,1916 ****
--- 1913,1917 ----
           }
           break;
+       default: return INVALID;
        }
     } else if ((state & Mod1Mask) && (!(state & ControlMask))) {
***************
*** 1971,1974 ****
--- 1972,1976 ----
        case '<': /*#<*/ LockSelObj(); break;
        case '>': /*#>*/ UnlockSelObj(); break;
+       default: return INVALID;
        }
     } else if ((state & Mod1Mask) && (state & ControlMask)) {
***************
*** 2010,2013 ****
--- 2012,2016 ----
        case '9': /*^#9*/ FindNoCase(); break;
        case '0': /*^#0*/ FindCaseSensitive(); break;
+       default: return INVALID;
        }
     } else if (name != NULL && key_sym == '\0' && state == 0) {
***************
*** 2464,2470 ****
  int ShortHand(input)
     XEvent *input;
!    /* returns BAD if the character is a <CONTROL> or a <META> character */
!    /* returns INVALID if the character is a normal character */
!    /* otherwise, returns the value of sub-functions, such as QuitProc() */
  {
     register int i;
--- 2467,2478 ----
  int ShortHand(input)
     XEvent *input;
!    /*
!     * returns BAD if the character is a <CONTROL> or a <META> character
!     *       this will cause the event to be swollowed
!     * returns INVALID if the character is a normal character, this means
!     *       that the event it not processed and will be handled by a
!     *       routine later
!     * otherwise, returns the value of sub-functions, such as QuitProc()
!     */
  {
     register int i;
*** file.c.orig	Tue Sep 28 22:52:11 1999
--- file.c	Tue Sep 28 22:52:11 1999
***************
*** 2638,2641 ****
--- 2638,2648 ----
        }
        SetCanvasFont();
+ /*
+  *    if (!PRTGIF && SzUnitToFontSize(curSzUnit) != canvasFontSize) {
+  *       curFont = actualCurFont;
+  *       curSzUnit = actualCurSzUnit;
+  *       SetFileModified(TRUE);
+  *    }
+  */
     }
     UpdPageStyle(pageStyle);
*** font.c.orig	Tue Sep 28 22:52:14 1999
--- font.c	Tue Sep 28 22:52:14 1999
***************
*** 162,165 ****
--- 162,169 ----
  int	curUnderlineOn=FALSE;
  
+ int	actualCurFont=(-1);
+ int	actualCurSzUnit=(-1);
+ int	actualCurStyle=(-1);
+ 
  int	curUnderlineYOffset=2;
  
***************
*** 180,188 ****
  
  int	changingFontSizeFromRead=TRUE;
- #ifdef _TGIF_DBG
  int	allowFontFaceSubstitution=TRUE;
- #else /* ~_TGIF_DBG */
- int	allowFontFaceSubstitution=FALSE;
- #endif /* _TGIF_DBG */
  
  char	cmdLineDontReencode[MAXSTRING<<1];
--- 184,188 ----
***************
*** 467,472 ****
  #define PS_FONT_NAME  2
  
! char *GetCurFontInfoStr(retstr)
!    char* retstr;
  {
     int font_index=curFont;
--- 467,473 ----
  #define PS_FONT_NAME  2
  
! void GetCurFontInfoStr(buf, buf_sz)
!    char* buf;
!    int buf_sz;
  {
     int font_index=curFont;
***************
*** 482,487 ****
              fontInfoStr[info_index+X_FONT_SUFFIX]);
     }
!    strcpy(retstr, gszAttemptedFontName);
!    return retstr;
  }
  
--- 483,487 ----
              fontInfoStr[info_index+X_FONT_SUFFIX]);
     }
!    UtilStrCpyN(buf, buf_sz, gszAttemptedFontName);
  }
  
***************
*** 591,594 ****
--- 591,595 ----
              if (allowFontFaceSubstitution && !IsFontDoubleByte(font_index)) {
                 int default_info_index=InfoIndex(defaultCurFont,defaultCurStyle);
+                char failed_font_name[MAXSTRING];
  
                 LoadAFont(default_info_index, defaultFontSize, FALSE, &xfs,
***************
*** 606,610 ****
                    return NULL;
                 }
!                sprintf(gszMsgBox, TgLoadString(STID_FONT_SUBS_CANNOT_EDIT),
                       fontInfoStr[default_info_index+PS_FONT_NAME],
                       SzUnitToFontSize(defaultCurSzUnit),
--- 607,613 ----
                    return NULL;
                 }
!                GetCurFontInfoStr(failed_font_name, sizeof(failed_font_name));
!                sprintf(gszMsgBox, TgLoadString(STID_FAIL_LOAD_FONT_FONT_SUBS),
!                      gszAttemptedFontName,
                       fontInfoStr[default_info_index+PS_FONT_NAME],
                       SzUnitToFontSize(defaultCurSzUnit),
***************
*** 612,615 ****
--- 615,622 ----
                       SzUnitToFontSize(sz_unit));
                 MsgBox(gszMsgBox, TOOL_NAME, INFO_MB);
+ 
+                actualCurFont = defaultCurFont;
+                actualCurStyle = defaultCurStyle;
+                actualCurSzUnit = defaultCurSzUnit;
              }
           } else if (changingFontSizeFromRead) {
***************
*** 1724,1727 ****
--- 1731,1737 ----
     int vert=FALSE, rc=TRUE;
  
+    actualCurFont = curFont;
+    actualCurStyle = curStyle;
+    actualCurSzUnit = curSzUnit;
     fs_ptr = FindFontInfo(curFont, curStyle, curSzUnit, FALSE);
  
***************
*** 1730,1733 ****
--- 1740,1746 ----
        TgAssert(FALSE, "Font substitution detected in SetCanvasFont()", NULL);
  #endif /* _TGIF_DBG */
+       actualCurFont = defaultCurFont;
+       actualCurStyle = defaultCurStyle;
+       actualCurSzUnit = defaultCurSzUnit;
        fs_ptr = FindFontInfo(defaultCurFont, defaultCurStyle,
              defaultCurSzUnit, FALSE);
*** http.c.orig	Tue Sep 28 22:52:16 1999
--- http.c	Tue Sep 28 22:52:16 1999
***************
*** 1277,1281 ****
           }
        }
!       if (ReadFromSocket(n_socket)) {
           bytes_read = read(n_socket, &buf[len], buf_sz-len-1);
        } else {
--- 1277,1281 ----
           }
        }
!       if (PRTGIF || ReadFromSocket(n_socket)) {
           bytes_read = read(n_socket, &buf[len], buf_sz-len-1);
        } else {
*** miniline.c.orig	Tue Sep 28 22:52:18 1999
--- miniline.c	Tue Sep 28 22:52:19 1999
***************
*** 646,650 ****
     if (SzUnitToFontSize(curSzUnit) != canvasFontSize) {
  #ifdef _TGIF_DBG /* debug, do not translate */
!       TgAssert(FALSE, "read_only detected in RecalcStrSegMetrics()", NULL);
  #endif /* _TGIF_DBG */
        read_only = TRUE;
--- 646,650 ----
     if (SzUnitToFontSize(curSzUnit) != canvasFontSize) {
  #ifdef _TGIF_DBG /* debug, do not translate */
!       fprintf(stderr, "RecalcStrSegMetrics(): read_only detected.\n");
  #endif /* _TGIF_DBG */
        read_only = TRUE;
*** poly.c.orig	Tue Sep 28 22:52:21 1999
--- poly.c	Tue Sep 28 22:52:21 1999
***************
*** 2636,2643 ****
     struct ObjRec *ObjPtr;
  {
!    register int i;
     struct PolyRec *poly_ptr=ObjPtr->detail.p;
!    IntPoint *pv=poly_ptr->vlist, *intvs, *vs;
!    int n=poly_ptr->n, intn;
  
     if (ObjPtr->ctm == NULL) return;
--- 2636,2643 ----
     struct ObjRec *ObjPtr;
  {
!    int i;
     struct PolyRec *poly_ptr=ObjPtr->detail.p;
!    IntPoint *pv=poly_ptr->vlist, *intvs=NULL, *vs=NULL;
!    int n=poly_ptr->n, intn=0;
  
     if (ObjPtr->ctm == NULL) return;
***************
*** 2671,2675 ****
              &(poly_ptr->rotated_n), &(intn), &(intvs),
              drawOrigX, drawOrigY, n, vs);
-       free(intvs);
        break;
     }
--- 2671,2674 ----
***************
*** 2679,2684 ****
           poly_ptr->rotated_vlist[0].y;
  
!    if (poly_ptr->style != LS_PLAIN && !RetractedArrowAttr(ObjPtr) &&
!          !AutoRetractedArrowAttr(ObjPtr,True)) {
        int aw=poly_ptr->aw, dx, dy;
        double len, sin, cos;
--- 2678,2683 ----
           poly_ptr->rotated_vlist[0].y;
  
!    if (poly_ptr->style != LS_PLAIN & !RetractedArrowAttr(ObjPtr) &&
!          !AutoRetractedArrowAttr(ObjPtr,TRUE)) {
        int aw=poly_ptr->aw, dx, dy;
        double len, sin, cos;
***************
*** 2686,2709 ****
        if (aw == 0) aw = 1;
  
!       dx = vs[1].x - vs[0].x;
!       dy = vs[1].y - vs[0].y;
!       if ((poly_ptr->style & LS_LEFT) && (dx != 0 || dy != 0)) {
!          len = (double)sqrt((double)(((double)dx)*((double)dx) +
!                ((double)dy)*((double)dy)));
!          sin = ((double)dy)/len;
!          cos = ((double)dx)/len;
!          vs[0].x = round(vs[0].x+RETREAT*aw*cos);
!          vs[0].y = round(vs[0].y+RETREAT*aw*sin);
        }
!       dx = vs[n-1].x - vs[n-2].x;
!       dy = vs[n-1].y - vs[n-2].y;
!       if ((poly_ptr->style & LS_RIGHT) && (dx != 0 || dy != 0)) {
!          len = (double)sqrt((double)(((double)dx)*((double)dx) +
!                ((double)dy)*((double)dy)));
!          sin = ((double)dy)/len;
!          cos = ((double)dx)/len;
!          vs[n-1].x = round(vs[n-1].x-RETREAT*aw*cos);
!          vs[n-1].y = round(vs[n-1].y-RETREAT*aw*sin);
!       }
        switch (poly_ptr->curved) {
        case LT_STRAIGHT:
--- 2685,2737 ----
        if (aw == 0) aw = 1;
  
!       switch (poly_ptr->curved) {
!       case LT_STRAIGHT:
!       case LT_SPLINE:
!          dx = vs[1].x - vs[0].x;
!          dy = vs[1].y - vs[0].y;
!          if ((poly_ptr->style & LS_LEFT) && (dx != 0 || dy != 0)) {
!             len = (double)sqrt((double)(((double)dx)*((double)dx) +
!                   ((double)dy)*((double)dy)));
!             sin = ((double)dy)/len;
!             cos = ((double)dx)/len;
!             vs[0].x = round(vs[0].x+RETREAT*aw*cos);
!             vs[0].y = round(vs[0].y+RETREAT*aw*sin);
!          }
!          dx = vs[n-1].x - vs[n-2].x;
!          dy = vs[n-1].y - vs[n-2].y;
!          if ((poly_ptr->style & LS_RIGHT) && (dx != 0 || dy != 0)) {
!             len = (double)sqrt((double)(((double)dx)*((double)dx) +
!                   ((double)dy)*((double)dy)));
!             sin = ((double)dy)/len;
!             cos = ((double)dx)/len;
!             vs[n-1].x = round(vs[n-1].x-(RETREAT*aw*cos));
!             vs[n-1].y = round(vs[n-1].y-(RETREAT*aw*sin));
!          }
!          break;
!       case LT_INTSPLINE:
!          dx = intvs[1].x - intvs[0].x;
!          dy = intvs[1].y - intvs[0].y;
!          if ((poly_ptr->style & LS_LEFT) && (dx != 0 || dy != 0)) {
!             len = (double)sqrt((double)(((double)dx)*((double)dx) +
!                   ((double)dy)*((double)dy)));
!             sin = ((double)dy)/len;
!             cos = ((double)dx)/len;
!             intvs[0].x = round(intvs[0].x+RETREAT*aw*cos);
!             intvs[0].y = round(intvs[0].y+RETREAT*aw*sin);
!          }
!          dx = intvs[intn-1].x - intvs[intn-2].x;
!          dy = intvs[intn-1].y - intvs[intn-2].y;
!          if ((poly_ptr->style & LS_RIGHT) && (dx != 0 || dy != 0)) {
!             len = (double)sqrt((double)(((double)dx)*((double)dx) +
!                   ((double)dy)*((double)dy)));
!             sin = ((double)dy)/len;
!             cos = ((double)dx)/len;
!             intvs[intn-1].x = round(intvs[intn-1].x-(RETREAT*aw*cos));
!             intvs[intn-1].y = round(intvs[intn-1].y-(RETREAT*aw*sin));
!          }
!          break;
        }
!    }
!    if (poly_ptr->style != LS_PLAIN) {
        switch (poly_ptr->curved) {
        case LT_STRAIGHT:
***************
*** 2714,2721 ****
           break;
        case LT_INTSPLINE:
!          poly_ptr->rotated_asvlist = MakeIntSplinePolyVertex(
!                &(poly_ptr->rotated_asn), &(intn), &(intvs),
!                drawOrigX, drawOrigY, n, vs);
!          free(intvs);
           break;
        }
--- 2742,2747 ----
           break;
        case LT_INTSPLINE:
!          poly_ptr->rotated_asvlist = MakeSplinePolyVertex(
!                &(poly_ptr->rotated_asn), drawOrigX, drawOrigY, intn, intvs);
           break;
        }
***************
*** 2722,2725 ****
--- 2748,2752 ----
     }
     free(vs);
+    if (intvs != NULL) free(intvs);
  }
  
***************
*** 2841,2846 ****
              v1->x = ZOOMED_SIZE(x+obj_ptr->x-real_x_off);
              v1->y = ZOOMED_SIZE(y+obj_ptr->y-real_y_off);
!             TransformPointThroughCTM(intvlist[n-3].x-obj_ptr->x,
!                   intvlist[n-3].y-obj_ptr->y, obj_ptr->ctm, &x, &y);
              vnminus2->x = ZOOMED_SIZE(x+obj_ptr->x-real_x_off);
              vnminus2->y = ZOOMED_SIZE(y+obj_ptr->y-real_y_off);
--- 2868,2873 ----
              v1->x = ZOOMED_SIZE(x+obj_ptr->x-real_x_off);
              v1->y = ZOOMED_SIZE(y+obj_ptr->y-real_y_off);
!             TransformPointThroughCTM(intvlist[intn-3].x-obj_ptr->x,
!                   intvlist[intn-3].y-obj_ptr->y, obj_ptr->ctm, &x, &y);
              vnminus2->x = ZOOMED_SIZE(x+obj_ptr->x-real_x_off);
              vnminus2->y = ZOOMED_SIZE(y+obj_ptr->y-real_y_off);
***************
*** 2858,2878 ****
              v1->x = ZOOMED_SIZE(x+obj_ptr->x-real_x_off);
              v1->y = ZOOMED_SIZE(y+obj_ptr->y-real_y_off);
!             TransformPointThroughCTM(intvlist[n-2].x-obj_ptr->x,
!                   intvlist[n-2].y-obj_ptr->y, obj_ptr->ctm, &x, &y);
              vnminus2->x = ZOOMED_SIZE(x+obj_ptr->x-real_x_off);
              vnminus2->y = ZOOMED_SIZE(y+obj_ptr->y-real_y_off);
!             TransformPointThroughCTM(intvlist[n-1].x-obj_ptr->x,
!                   intvlist[n-1].y-obj_ptr->y, obj_ptr->ctm, &x, &y);
              vnminus1->x = ZOOMED_SIZE(x+obj_ptr->x-real_x_off);
              vnminus1->y = ZOOMED_SIZE(y+obj_ptr->y-real_y_off);
- 
-             v0->x = ZOOMED_SIZE(intvlist[0].x-real_x_off);
-             v0->y = ZOOMED_SIZE(intvlist[0].y-real_y_off);
-             v1->x = ZOOMED_SIZE(intvlist[1].x-real_x_off);
-             v1->y = ZOOMED_SIZE(intvlist[1].y-real_y_off);
-             vnminus2->x = ZOOMED_SIZE(intvlist[intn-2].x-real_x_off);
-             vnminus2->y = ZOOMED_SIZE(intvlist[intn-2].y-real_y_off);
-             vnminus1->x = ZOOMED_SIZE(intvlist[intn-1].x-real_x_off);
-             vnminus1->y = ZOOMED_SIZE(intvlist[intn-1].y-real_y_off);
           }
        }
--- 2885,2896 ----
              v1->x = ZOOMED_SIZE(x+obj_ptr->x-real_x_off);
              v1->y = ZOOMED_SIZE(y+obj_ptr->y-real_y_off);
!             TransformPointThroughCTM(intvlist[intn-2].x-obj_ptr->x,
!                   intvlist[intn-2].y-obj_ptr->y, obj_ptr->ctm, &x, &y);
              vnminus2->x = ZOOMED_SIZE(x+obj_ptr->x-real_x_off);
              vnminus2->y = ZOOMED_SIZE(y+obj_ptr->y-real_y_off);
!             TransformPointThroughCTM(intvlist[intn-1].x-obj_ptr->x,
!                   intvlist[intn-1].y-obj_ptr->y, obj_ptr->ctm, &x, &y);
              vnminus1->x = ZOOMED_SIZE(x+obj_ptr->x-real_x_off);
              vnminus1->y = ZOOMED_SIZE(y+obj_ptr->y-real_y_off);
           }
        }
***************
*** 2885,2889 ****
     struct ObjRec *ObjPtr;
  {
!    register struct PolyRec *poly_ptr=ObjPtr->detail.p;
     XPoint *v, tmp_v[4];
     XPoint v0, v1, vnminus2, vnminus1;
--- 2903,2907 ----
     struct ObjRec *ObjPtr;
  {
!    struct PolyRec *poly_ptr=ObjPtr->detail.p;
     XPoint *v, tmp_v[4];
     XPoint v0, v1, vnminus2, vnminus1;
*** strtbl.c.orig	Tue Sep 28 22:52:23 1999
--- strtbl.c	Tue Sep 28 22:52:23 1999
***************
*** 1415,1420 ****
     /* STID_TOOL_CANT_HANDLE_DB_FONT */
     N_("The '%s' double-byte font has min_byte1=\\%03o and max_byte1=\\%03o.\n%s does not know how to handle this double-byte font.\nPlease don't use this font and e-mail this error message to %s."),
!    /* STID_FONT_SUBS_CANNOT_EDIT */
!    N_("%s-%1d substituted for %s-%1d.\n\nSuch text cannot be edited and most likely look ugly."),
     /* STID_FONT_SUBSTITUTED */
     N_("%s-%1d substituted for %s-%1d."),
--- 1415,1420 ----
     /* STID_TOOL_CANT_HANDLE_DB_FONT */
     N_("The '%s' double-byte font has min_byte1=\\%03o and max_byte1=\\%03o.\n%s does not know how to handle this double-byte font.\nPlease don't use this font and e-mail this error message to %s."),
!    /* STID_FAIL_LOAD_FONT_FONT_SUBS */
!    N_("Fail to load the following font: '%s'.\n\n%s-%1d substituted for %s-%1d."),
     /* STID_FONT_SUBSTITUTED */
     N_("%s-%1d substituted for %s-%1d."),
***************
*** 2148,2152 ****
     N_("Safest thing to do is to save file and exit.\nPlease try to reproduce this error and\n\tsend bug report to %s."),
     /* STID_FATAL_UNEXPECTED_ERROR */
!    N_("Fatal Unexpected Error:  %s%s%s\n\nSafest thing to do is to save file and exit.\nPlease try to reproduce this error and\n\tsend bug report to %s."),
     /* STID_ENTER_FNAME_TO_WRITE_MSG_BUF */
     N_("Please enter a file name to write the message buffer content:"),
--- 2148,2152 ----
     N_("Safest thing to do is to save file and exit.\nPlease try to reproduce this error and\n\tsend bug report to %s."),
     /* STID_FATAL_UNEXPECTED_ERROR */
!    N_("Fatal Unexpected Error:  %s%s%s\n\nSafest thing to do is to save file and exit.\n\nPlease try to reproduce this error and send bug report to %s."),
     /* STID_ENTER_FNAME_TO_WRITE_MSG_BUF */
     N_("Please enter a file name to write the message buffer content:"),
*** text.c.orig	Tue Sep 28 22:52:26 1999
--- text.c	Tue Sep 28 22:52:26 1999
***************
*** 4385,4388 ****
--- 4385,4391 ----
        ReadMiniLines(FP, NULL, &minilines);
        PopCurFont();
+       if (minilines == NULL) {
+          return FALSE;
+       }
        firstMiniLine = minilines->first;
        lastMiniLine = minilines->last;
*** font.e.orig	Tue Sep 28 22:52:28 1999
--- font.e	Tue Sep 28 22:52:28 1999
***************
*** 95,98 ****
--- 95,102 ----
  extern int	curUnderlineOn;
  
+ extern int	actualCurFont;
+ extern int	actualCurSzUnit;
+ extern int	actualCurStyle;
+ 
  extern int	curUnderlineYOffset;
  
***************
*** 136,140 ****
  		                         char *pszCur));
  extern char	* GetShowFontChar ARGS_DECL((int FontIndex));
! extern char	* GetCurFontInfoStr ARGS_DECL((char *retstr));
  extern void	GetPSFontStr ARGS_DECL((int FontIndex, int Style, char *));
  extern void	MapAliasedPSFontName ARGS_DECL((char *buf, int buf_sz));
--- 140,144 ----
  		                         char *pszCur));
  extern char	* GetShowFontChar ARGS_DECL((int FontIndex));
! extern void	GetCurFontInfoStr ARGS_DECL((char *buf, int buf_sz));
  extern void	GetPSFontStr ARGS_DECL((int FontIndex, int Style, char *));
  extern void	MapAliasedPSFontName ARGS_DECL((char *buf, int buf_sz));
*** strtbl.e.orig	Tue Sep 28 22:52:29 1999
--- strtbl.e	Tue Sep 28 22:52:29 1999
***************
*** 708,712 ****
  #define STID_ILLEGAL_DOUBLE_BYTE_TRUNC     1447
  #define STID_TOOL_CANT_HANDLE_DB_FONT      1448
! #define STID_FONT_SUBS_CANNOT_EDIT         1449
  #define STID_FONT_SUBSTITUTED              1450
  #define STID_CANNOT_GET_IMAGE_OF_SIZE      1451
--- 708,712 ----
  #define STID_ILLEGAL_DOUBLE_BYTE_TRUNC     1447
  #define STID_TOOL_CANT_HANDLE_DB_FONT      1448
! #define STID_FAIL_LOAD_FONT_FONT_SUBS      1449
  #define STID_FONT_SUBSTITUTED              1450
  #define STID_CANNOT_GET_IMAGE_OF_SIZE      1451
*** patchlvl.h.orig	Tue Sep 28 22:52:31 1999
--- patchlvl.h	Tue Sep 28 22:52:31 1999
***************
*** 35,39 ****
  #define _TGIF_PATCHLEVEL_H_
  
! #define TGIF_PATCHLEVEL 20
  
  #endif /*_TGIF_PATCHLEVEL_H_*/
--- 35,39 ----
  #define _TGIF_PATCHLEVEL_H_
  
! #define TGIF_PATCHLEVEL 21
  
  #endif /*_TGIF_PATCHLEVEL_H_*/
*** Imakefile.orig	Tue Sep 28 22:52:32 1999
--- Imakefile	Tue Sep 28 22:52:32 1999
***************
*** 53,57 ****
                    $(MOREDEFINES)
  
! TGIFVERSION	= 4.1.20
  
  XCOMM Things to try to add to the DEFINES line above:
--- 53,57 ----
                    $(MOREDEFINES)
  
! TGIFVERSION	= 4.1.21
  
  XCOMM Things to try to add to the DEFINES line above:
*** HISTORY.orig	Tue Sep 28 22:52:33 1999
--- HISTORY	Tue Sep 28 22:52:33 1999
***************
*** 1,5 ****
  -----------------------> tgif-4.1.19 => tgif-4.1.20 <-----------------------
  1)  Fix a crashing bug with rotated arcs with very small angles.  Thanks to
!     Rainer Krienke <krienke@uni-koblenz.de> for pointingn out this
      ancient bug.
  2)  Fix a crashing bug when redrawing is interrupted immediately after objects
--- 1,15 ----
+ -----------------------> tgif-4.1.20 => tgif-4.1.21 <-----------------------
+ 1)  Fix a crashing bug with pasting compound object into a modified text
+     object in text mode.
+ 2)  Fix a crashing bug with "-print -raw http://...".
+ 3)  Fix <Cntrl>cursorkey bug.  Thanks to Stefan Schippers
+     <kaiserst@tin.it> for pointing out the bug.
+ 4)  Fix arrow problems with rotated interpolated splines.  Thanks to
+     Heiko Scheit <heiko.scheit@mpi-hd.mpg.de> for pointing out
+     the problem.
+ 
  -----------------------> tgif-4.1.19 => tgif-4.1.20 <-----------------------
  1)  Fix a crashing bug with rotated arcs with very small angles.  Thanks to
!     Rainer Krienke <krienke@uni-koblenz.de> for pointing out this
      ancient bug.
  2)  Fix a crashing bug when redrawing is interrupted immediately after objects
