[comp.sources.x] v04i094: xmtool, Patch1

argv@island.uu.net (Dan Heller) (08/18/89)

Submitted-by: ames!mailrus!sharkey!oshima!chang (Peter Chang)
Posting-number: Volume 4, Issue 94
Archive-name: xmtool/patch1
Patch-To: Volume 4, Issue 36 (June 30 1989)

#!/bin/sh
# Patch for xmtool.v2
# To extract, remove the header and type "sh filename"
if `test ! -s ./README.v2`
then
echo "writing ./README.v2"
cat > ./README.v2 << '\End\Of\File\'
Features added:

1. Added resource XtNinput for shell widgets.

2. Added more functions to the status command.

3. Automatically delete a message after it was saved.

4. Handle the new line character that user inserts.

Send comments, flames, etc to chang@edsews.eds.com or

Peter Chang
Electronic Data Systems Corporation
750 Tower Drive
Troy, MI 48007-7019
\End\Of\File\
else
  echo "will not overwrite ./README.v2"
fi
if `test ! -s ./xmtool.c.v2.patch`
then
echo "writing ./xmtool.c.v2.patch"
cat > ./xmtool.c.v2.patch << '\End\Of\File\'
*** xmtool.c.old	Mon Jul  3 14:07:18 1989
--- xmtool.c	Thu Aug 17 11:12:16 1989
***************
*** 248,254 ****
      XtSetArg( arg[2], XtNfromVert, viewport3);
      XtSetArg( arg[3], XtNwidth, 990);
      XtSetArg( arg[4], XtNheight, 250);
!     XtSetArg( arg[5], XtNbackground, stringToPixel(outer,"yellow"));
      textw1 = XtCreateManagedWidget( NULL, asciiDiskWidgetClass, boxtextw1, arg, 6 );
  }
  void selectf()
--- 248,254 ----
      XtSetArg( arg[2], XtNfromVert, viewport3);
      XtSetArg( arg[3], XtNwidth, 990);
      XtSetArg( arg[4], XtNheight, 250);
!     XtSetArg( arg[5], XtNbackground, stringToPixel(outer,"lightBlue"));
      textw1 = XtCreateManagedWidget( NULL, asciiDiskWidgetClass, boxtextw1, arg, 6 );
  }
  void selectf()
***************
*** 879,884 ****
--- 879,885 ----
      int i, j, fd, fp, len, num;
      char msg[80];
      char text[400], dirname[40];
+     delBlank();
      bzero(dirname, 40);
      parsefname(dirname);
      if ((i = stat(dirname, &stbuf)) != 0) {
***************
*** 904,909 ****
--- 905,919 ----
  	  close(fd);
  	  return;
      }
+     /* Check to see whether it is a valid file name */
+     if ((fd = open(filename, 2)) < 0) {
+        if ((fd = creat(filename, 0700)) < 0) {
+ 	  fprintf(stderr, "can't save to the file %s\n", filename);
+ 	  return;
+        } else
+           close(fd);
+     } else
+        close(fd);
      if ((fp = creat(logf3, 0700)) < 0){
         perror("open problem");
         exit(-1);
***************
*** 938,943 ****
--- 948,954 ----
      }
      close(fp);
      system(savecmd);
+     delete();
  }
  void rplyf()
  {
***************
*** 1101,1106 ****
--- 1112,1118 ----
  
      XtSetArg(arg[0], XtNwidth, 400);
      XtSetArg(arg[1], XtNheight, 125);
+     XtSetArg(arg[2], XtNinput, True);
      tolevel = XtCreatePopupShell("Subject Cc",applicationShellWidgetClass,toplevel,
  	    arg, 2);
      XtSetArg(arg[0], XtNwidth, 400);
***************
*** 1148,1153 ****
--- 1160,1166 ----
  {
      char fname[38], fname1[45];
      int i, fd;
+     delBlank();
      bzero(mailtcmd, 80);
      if (filename[0] == '-' && filename[1] == '>'){
         bzero(fname, 38);
***************
*** 1247,1253 ****
--- 1260,1353 ----
  {
  /* status for the commands save, reply to sender and reply to all*/
      Arg arg[10];
+     char text[400];
+     int i, j, len, num, fd;
      quithlp1();
+     if ((fd = open(logf4, 1)) < 0) {
+      perror("statusMailf: open problem");
+      quitOnCond();
+      exit(-1);
+     }
+     if (lseek(fd, 0L, 2) < 0){
+      perror("statusMailf: lseek problem");
+      quitOnCond();
+      exit(-1);
+     }
+     if (write(fd, "Range and selected multiple messages information:\n", 50) != 50) {
+      perror("statusMailf: write problem");
+      exit(-1);
+     }
+     if (delete_sw) {
+       if (lseek(fd, 0L, 2) < 0){
+        perror("statusMailf: lseek problem");
+        quitOnCond();
+        exit(-1);
+       }
+       if (write(fd, "Range:\n", 6) != 6) {
+        perror("statusMailf: write problem");
+        exit(-1);
+       }
+       bzero(text, 20);
+       sprintf(text, "%d - ", count);
+       write(fd, text, strlen(text));
+       bzero(text, 20);
+       sprintf(text, "%d\n", countnew);
+       write(fd, text, strlen(text));
+     } else {
+       if (lseek(fd, 0L, 2) < 0){
+        perror("statusMailf: lseek problem");
+        quitOnCond();
+        exit(-1);
+       }
+       if (write(fd, "No range\n", 9) != 9) {
+        perror("statusMailf: write problem");
+        exit(-1);
+       }
+     }
+     if (selectflag) {
+       if (lseek(fd, 0L, 2) < 0){
+        perror("statusMailf: lseek problem");
+        quitOnCond();
+        exit(-1);
+       }
+       if (write(fd, "Selected messages:\n", 19) != 19) {
+        perror("statusMailf: write problem");
+        exit(-1);
+       }
+       num = selectflag / 15;
+       num++;
+       for (j=0; j < num; j++){
+        bzero(text, 400);
+        sprintf(text, "%d", selectList[j*15]);
+        for (i = 1; i <  umailmin(15,selectflag - j*15); i++){
+         len = strlen(text);
+         sprintf(&text[len], " %d", selectList[i+j*15]);
+        }
+        len = strlen(text);
+        sprintf(&text[len], "\n");
+        write(fd, text, strlen(text));
+       }
+     } else {
+       if (lseek(fd, 0L, 2) < 0){
+        perror("statusMailf: lseek problem");
+        quitOnCond();
+        exit(-1);
+       }
+       if (write(fd, "No selected multiple messages\n", 30) != 30) {
+        perror("statusMailf: write problem");
+        exit(-1);
+       }
+     }
+     if (lseek(fd, 0L, 2) < 0){
+      perror("statusMailf: lseek problem");
+      quitOnCond();
+      exit(-1);
+     }
+     if (write(fd, "End of range and selected multiple messages information\n", 56) != 56) {
+      perror("statusMailf: write problem");
+      exit(-1);
+     }
+     close(fd);
      boxtextw1 = XtCreateManagedWidget(NULL, boxWidgetClass, viewport4, NULL, 0);
      XtSetArg( arg[0], XtNfile, logf4);
      XtSetArg( arg[1], XtNtextOptions, scrollVertical );
***************
*** 1256,1262 ****
      XtSetArg( arg[4], XtNy, y2);
      XtSetArg( arg[5], XtNwidth, 990);
      XtSetArg( arg[6], XtNheight, 250);
!     XtSetArg( arg[7], XtNbackground, stringToPixel(outer,"yellow"));
      textw1 = XtCreateManagedWidget( NULL, asciiDiskWidgetClass, boxtextw1, arg, 8 );
  }
  
--- 1356,1362 ----
      XtSetArg( arg[4], XtNy, y2);
      XtSetArg( arg[5], XtNwidth, 990);
      XtSetArg( arg[6], XtNheight, 250);
!     XtSetArg( arg[7], XtNbackground, stringToPixel(outer,"lightBlue"));
      textw1 = XtCreateManagedWidget( NULL, asciiDiskWidgetClass, boxtextw1, arg, 8 );
  }
  
***************
*** 1388,1393 ****
--- 1488,1494 ----
  {
      static XtCallbackRec callback[2];
      Arg arg[10];
+     int fd;
      bzero(mailutildir, 80);
      if (getenv("XMTOOLRESRC") != NULL)
        strcpy(mailutildir, getenv("XMTOOLRESRC"));
***************
*** 1408,1415 ****
       perror("Can't change mode");
       exit(-1);
      }
!     toplevel = XtInitialize( NULL, "xmtool", options, XtNumber(options),
  			     &argc, argv);
  
      appcontxt = XtCreateApplicationContext();
      XtSetArg( arg[0], XtNwidth, 1000 );
--- 1509,1523 ----
       perror("Can't change mode");
       exit(-1);
      }
!     if ((fd = creat(logf4, 0700)) < 0) {
!      perror("createname: can't create file");
!      exit(-1);
!     }
!     close(fd);
!     toplevel = XtInitialize( argv[0], "XMtool", options, XtNumber(options),
  			     &argc, argv);
+     XtSetArg ( arg[0], XtNinput, True);
+     XtSetValues( toplevel, arg, 1);
  
      appcontxt = XtCreateApplicationContext();
      XtSetArg( arg[0], XtNwidth, 1000 );
***************
*** 1640,1646 ****
      XtSetArg( arg[1], XtNtextOptions, scrollVertical );
      XtSetArg( arg[2], XtNheight, 250);
      XtSetArg( arg[3], XtNwidth, 990);
!     XtSetArg( arg[4], XtNbackground, stringToPixel(outer,"yellow"));
      textw1 = XtCreateManagedWidget( NULL, asciiDiskWidgetClass, boxtextw1, arg, 5 );
      XtSetArg(arg[0], XtNx, &x2);
      XtSetArg(arg[1], XtNy, &y2);
--- 1748,1754 ----
      XtSetArg( arg[1], XtNtextOptions, scrollVertical );
      XtSetArg( arg[2], XtNheight, 250);
      XtSetArg( arg[3], XtNwidth, 990);
!     XtSetArg( arg[4], XtNbackground, stringToPixel(outer,"lightBlue"));
      textw1 = XtCreateManagedWidget( NULL, asciiDiskWidgetClass, boxtextw1, arg, 5 );
      XtSetArg(arg[0], XtNx, &x2);
      XtSetArg(arg[1], XtNy, &y2);
***************
*** 1910,1913 ****
--- 2018,2039 ----
  {
  	if (i < j) return i;
  	else return j;
+ }
+ delBlank()
+ {
+     int i;
+     char filename1[110];
+     bzero(filename1, 110);
+     strncpy(filename1, filename, 110);
+     bzero(filename, 110);
+     i = 0;
+     while ((filename1[i] != '\0') && (filename1[i] != '\n') && (i < 110)){
+       filename[i] = filename1[i];
+       i++;
+     }
+     if (i == 110){
+       fprintf(stderr, "save: index i of filename reaches 110\n");
+       quitOnCond();
+       exit(-1);
+     }
  }
\End\Of\File\
else
  echo "will not overwrite ./xmtool.c.v2.patch"
fi
if `test ! -s ./statushlp`
then
echo "writing ./statushlp"
cat > ./statushlp << '\End\Of\File\'
---------------------------------------------------------------------------------------------
|001|001|plus|minus|range|set counter|view|delete|save|                                     | 
---------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
|001|incr|select|reply to sender|reply to all|edit|create|mail to list|status|clear status|update|help|
-------------------------------------------------------------------------------------------------------
                                                                         ^
		                                                         |---status box

status: read the status file that contains possible outputs after you
        select one of the three boxes: save, reply to sender, reply to all.
	Also show the range of messages and list of selected messages.
\End\Of\File\
else
  echo "will not overwrite ./statushlp"
fi