home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume13 / ms_sh-1.6 / patch01-pt2 next >
Encoding:
Text File  |  1990-07-02  |  30.8 KB  |  1,270 lines

  1. Newsgroups: comp.sources.misc
  2. from: istewart@datlog.co.uk
  3. subject: v13i080: MS-Shell 1.6 - Patch 1.  Part 02 of 02
  4. Sender: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  5.  
  6. Posting-number: Volume 13, Issue 80
  7. Submitted-by: istewart@datlog.co.uk
  8. Archive-name: ms_sh-1.6/patch01-pt2
  9.  
  10. #!/bin/sh
  11. # this is PAT.02 (part 2 of 2)
  12. # do not concatenate these parts, unpack them in order with /bin/sh
  13. # file Patch1.6.2 continued
  14. #
  15. if touch 2>&1 | fgrep '[-amc]' > /dev/null
  16.  then TOUCH=touch
  17.  else TOUCH=true
  18. fi
  19. if test ! -r @shar_seq_.tmp; then
  20.     echo "Please unpack part 1 first!"
  21.     exit 1
  22. fi
  23. (read Scheck
  24.  if test "$Scheck" != 2; then
  25.     echo "Please unpack part $Scheck next!"
  26.     exit 1
  27.  else
  28.     exit 0
  29.  fi
  30. ) < @shar_seq_.tmp || exit 1
  31. echo "x - Continuing file Patch1.6.2"
  32. sed 's/^X//' << 'SHAR_EOF' >> Patch1.6.2 &&
  33. X   *
  34. X!  *    $Header: sh1.c 1.16 90/05/31 09:48:06 MS_user Exp $
  35. X   *
  36. X   *    $Log:    sh1.c $
  37. X+  * Revision 1.16  90/05/31  09:48:06  MS_user
  38. X+  * Implement partial write when swapping to disk
  39. X+  * Add some signal lockouts to prevent corruption
  40. X+  * 
  41. X+  * Revision 1.15  90/05/15  21:08:59  MS_user
  42. X+  * Restore original directory on exit
  43. X+  * 
  44. X   * Revision 1.14  90/04/25  22:33:28  MS_user
  45. X   * Fix rsh check for PATH
  46. X   * 
  47. X***************
  48. X*** 100,105 ****
  49. X--- 107,114 ----
  50. X  static char    *search    = ";c:/bin;c:/usr/bin";
  51. X  static char    *ymail     = "You have mail\n";
  52. X  static char    *Path       = "PATH";
  53. X+                 /* Entry directory            */
  54. X+ static char    *Start_directory = (char *)NULL;
  55. X                      /* Original Interrupt 24 address */
  56. X  static void    (interrupt far *Orig_I24_V) (void);
  57. X  #ifdef SIGQUIT
  58. X***************
  59. X*** 142,151 ****
  60. X   * -x.  Some programs!!
  61. X   */
  62. X  
  63. X!      Pre_Process_Argv (argv);
  64. X  
  65. X! /* Process the options */
  66. X  
  67. X      while ((sc = getopt (argc, argv, "abc:defghijklmnopqrtsuvwxyz0")) != EOF)
  68. X      {
  69. X      switch (sc)
  70. X--- 151,164 ----
  71. X   * -x.  Some programs!!
  72. X   */
  73. X  
  74. X!     Pre_Process_Argv (argv);
  75. X  
  76. X! /* Save the start directory for when we exit */
  77. X  
  78. X+     Start_directory = getcwd ((char *)NULL, PATH_MAX + 4);
  79. X+ 
  80. X+ /* Process the options */
  81. X+ 
  82. X      while ((sc = getopt (argc, argv, "abc:defghijklmnopqrtsuvwxyz0")) != EOF)
  83. X      {
  84. X      switch (sc)
  85. X***************
  86. X*** 490,497 ****
  87. X  #endif
  88. X  
  89. X      closeall ();
  90. X-     exit (exstat);
  91. X  
  92. X  /* NOTREACHED */
  93. X  }
  94. X  
  95. X--- 503,524 ----
  96. X  #endif
  97. X  
  98. X      closeall ();
  99. X  
  100. X+ /* Clear swap file if necessary */
  101. X+ 
  102. X+     Clear_Swap_File ();
  103. X+ 
  104. X+ /* If this is a command only - restore the directory because DOS doesn't 
  105. X+  * and the user might expect it
  106. X+  */
  107. X+ 
  108. X+     if (Start_directory != (char *)NULL)
  109. X+     Restore_Dir (Start_directory);
  110. X+ 
  111. X+ /* Exit - hurray */
  112. X+ 
  113. X+     exit (exstat);
  114. X+ 
  115. X  /* NOTREACHED */
  116. X  }
  117. X  
  118. X***************
  119. X*** 1130,1136 ****
  120. X      ps1   = lookup ("PS1", TRUE);
  121. X      ps2   = lookup ("PS2", TRUE);
  122. X      C_dir = lookup ("~", TRUE);
  123. X!     Restore_Dir ();
  124. X  }
  125. X  
  126. X  /*
  127. X--- 1157,1163 ----
  128. X      ps1   = lookup ("PS1", TRUE);
  129. X      ps2   = lookup ("PS2", TRUE);
  130. X      C_dir = lookup ("~", TRUE);
  131. X!     Restore_Dir (C_dir->value);
  132. X  }
  133. X  
  134. X  /*
  135. X***************
  136. X*** 1246,1251 ****
  137. X--- 1273,1279 ----
  138. X  unsigned int    nbytes;
  139. X  {
  140. X      s_region        *np;
  141. X+     void        (*save_signal)(int);
  142. X  
  143. X      if (nbytes == 0)
  144. X      abort ();    /* silly and defeats the algorithm */
  145. X***************
  146. X*** 1255,1266 ****
  147. X      if ((np = (s_region *)calloc (nbytes + sizeof (s_region), 1)) == (s_region *)NULL)
  148. X          return (char *)NULL;
  149. X  
  150. X! /* Link into chain */
  151. X  
  152. X      np->next = areastart;
  153. X      np->area = areanum;
  154. X      areastart = np;
  155. X  
  156. X      return ((char *)np) + sizeof (s_region);
  157. X  }
  158. X  
  159. X--- 1283,1302 ----
  160. X      if ((np = (s_region *)calloc (nbytes + sizeof (s_region), 1)) == (s_region *)NULL)
  161. X          return (char *)NULL;
  162. X  
  163. X! /* Disable signals */
  164. X  
  165. X+     save_signal = signal (SIGINT, SIG_IGN);
  166. X+ 
  167. X+ /* Link into chain */
  168. X+ 
  169. X      np->next = areastart;
  170. X      np->area = areanum;
  171. X      areastart = np;
  172. X  
  173. X+ /* Restore signals */
  174. X+ 
  175. X+     signal (SIGINT, save_signal);
  176. X+ 
  177. X      return ((char *)np) + sizeof (s_region);
  178. X  }
  179. X  
  180. X***************
  181. X*** 1274,1282 ****
  182. X      register s_region    *cp = areastart;
  183. X      s_region        *lp = (s_region *)NULL;
  184. X      s_region        *sp = (s_region *)(s - sizeof (s_region));
  185. X  
  186. X! /* Find the string in the chain */
  187. X  
  188. X      if (s != (char *)NULL)
  189. X      {
  190. X      while (cp != (s_region *)NULL)
  191. X--- 1310,1323 ----
  192. X      register s_region    *cp = areastart;
  193. X      s_region        *lp = (s_region *)NULL;
  194. X      s_region        *sp = (s_region *)(s - sizeof (s_region));
  195. X+     void        (*save_signal)(int);
  196. X  
  197. X! /* Disable signals */
  198. X  
  199. X+     save_signal = signal (SIGINT, SIG_IGN);
  200. X+     
  201. X+ /* Find the string in the chain */
  202. X+ 
  203. X      if (s != (char *)NULL)
  204. X      {
  205. X      while (cp != (s_region *)NULL)
  206. X***************
  207. X*** 1302,1309 ****
  208. X          break;
  209. X      }
  210. X      }
  211. X- }
  212. X  
  213. X  /*
  214. X   * Autodelete space nolonger required.  Ie. Free all the strings in a malloced
  215. X   * area
  216. X--- 1343,1354 ----
  217. X          break;
  218. X      }
  219. X      }
  220. X  
  221. X+ /* Restore signals */
  222. X+ 
  223. X+     signal (SIGINT, save_signal);
  224. X+ }
  225. X+ 
  226. X  /*
  227. X   * Autodelete space nolonger required.  Ie. Free all the strings in a malloced
  228. X   * area
  229. X***************
  230. X*** 1314,1324 ****
  231. X--- 1359,1375 ----
  232. X  {
  233. X      register s_region    *cp = areastart;
  234. X      s_region        *lp = (s_region *)NULL;
  235. X+     void        (*save_signal)(int);
  236. X  
  237. X+ /* Disable signals */
  238. X+ 
  239. X+     save_signal = signal (SIGINT, SIG_IGN);
  240. X+ 
  241. X      while (cp != (s_region *)NULL)
  242. X      {
  243. X  
  244. X  /* Is the area number less than that specified - yes, continue */
  245. X+ 
  246. X      if (cp->area < a)
  247. X      {
  248. X          lp = cp;
  249. X***************
  250. X*** 1348,1353 ****
  251. X--- 1399,1408 ----
  252. X          cp = lp->next;
  253. X      }
  254. X      }
  255. X+ 
  256. X+ /* Restore signals */
  257. X+ 
  258. X+     signal (SIGINT, save_signal);
  259. X  }
  260. X  
  261. X  /*
  262. XIndex: shell/sh10.c
  263. XPrereq: 1.2
  264. X*** ../sh16/shell/sh10.c    Tue May  1 19:48:22 1990
  265. X--- shell/sh10.c    Thu Jun 21 21:46:42 1990
  266. X***************
  267. X*** 12,20 ****
  268. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  269. X   *     (or parts of sources) cannot be sold under any circumstances.
  270. X   *
  271. X!  *    $Header: sh10.c 1.2 90/04/25 22:34:04 MS_user Exp $
  272. X   *
  273. X   *    $Log:    sh10.c $
  274. X   * Revision 1.2  90/04/25  22:34:04  MS_user
  275. X   * Fix case in TELIF where then and else parts are not defined
  276. X   * 
  277. X--- 12,23 ----
  278. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  279. X   *     (or parts of sources) cannot be sold under any circumstances.
  280. X   *
  281. X!  *    $Header: sh10.c 1.3 90/05/31 09:51:06 MS_user Exp $
  282. X   *
  283. X   *    $Log:    sh10.c $
  284. X+  * Revision 1.3  90/05/31  09:51:06  MS_user
  285. X+  * Add some signal lockouts to prevent corruption
  286. X+  * 
  287. X   * Revision 1.2  90/04/25  22:34:04  MS_user
  288. X   * Fix case in TELIF where then and else parts are not defined
  289. X   * 
  290. X***************
  291. X*** 397,402 ****
  292. X--- 400,406 ----
  293. X      char        *name = *t->words;
  294. X      register Fun_Ops    *fp = Fun_Search (name);
  295. X      Fun_Ops        *p_fp = (Fun_Ops *)NULL;
  296. X+     void        (*save_signal)(int);
  297. X  
  298. X  /* Find the entry */
  299. X  
  300. X***************
  301. X*** 404,411 ****
  302. X              (strcmp (*(fp->tree->words), name) != 0);
  303. X              p_fp = fp, fp = fp->next);
  304. X  
  305. X! /* If it already exists, free the tree and delete the entry */
  306. X  
  307. X      if (fp != (Fun_Ops *)NULL)
  308. X      {
  309. X      Set_Free_ExTree (fp->tree, Free_ExTree);
  310. X--- 408,419 ----
  311. X              (strcmp (*(fp->tree->words), name) != 0);
  312. X              p_fp = fp, fp = fp->next);
  313. X  
  314. X! /* Disable signals */
  315. X  
  316. X+     save_signal = signal (SIGINT, SIG_IGN);
  317. X+ 
  318. X+ /* If it already exists, free the tree and delete the entry */
  319. X+ 
  320. X      if (fp != (Fun_Ops *)NULL)
  321. X      {
  322. X      Set_Free_ExTree (fp->tree, Free_ExTree);
  323. X***************
  324. X*** 419,426 ****
  325. X      DELETE (fp);
  326. X      }
  327. X  
  328. X! /* If delete only - exit */
  329. X  
  330. X      if (delete_only)
  331. X      return;
  332. X  
  333. X--- 427,438 ----
  334. X      DELETE (fp);
  335. X      }
  336. X  
  337. X! /* Restore signals */
  338. X  
  339. X+     signal (SIGINT, save_signal);
  340. X+ 
  341. X+ /* If delete only - exit */
  342. X+ 
  343. X      if (delete_only)
  344. X      return;
  345. X  
  346. X***************
  347. X*** 429,440 ****
  348. X--- 441,462 ----
  349. X      if ((fp = (Fun_Ops *)space (sizeof (Fun_Ops))) == (Fun_Ops *)NULL)
  350. X      return;
  351. X  
  352. X+ /* Disable signals */
  353. X+ 
  354. X+     save_signal = signal (SIGINT, SIG_IGN);
  355. X+ 
  356. X+ /* Set up the tree */
  357. X+ 
  358. X      setarea ((char *)fp, 0);
  359. X      Set_Free_ExTree (t, Set_ExTree);
  360. X  
  361. X      fp->tree = t;
  362. X      fp->next = fun_list;
  363. X      fun_list = fp;
  364. X+ 
  365. X+ /* Restore signals */
  366. X+ 
  367. X+     signal (SIGINT, save_signal);
  368. X  }
  369. X  
  370. X  /*
  371. XIndex: shell/sh3.c
  372. XPrereq: 1.15
  373. X*** ../sh16/shell/sh3.c    Tue May  1 19:48:50 1990
  374. X--- shell/sh3.c    Thu Jun 21 21:48:04 1990
  375. X***************
  376. X*** 13,21 ****
  377. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  378. X   *     (or parts of sources) cannot be sold under any circumstances.
  379. X   *
  380. X!  *    $Header: sh3.c 1.15 90/04/30 19:50:11 MS_user Exp $
  381. X   *
  382. X   *    $Log:    sh3.c $
  383. X   * Revision 1.15  90/04/30  19:50:11  MS_user
  384. X   * Stop search path if second character of name is colon
  385. X   * 
  386. X--- 13,44 ----
  387. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  388. X   *     (or parts of sources) cannot be sold under any circumstances.
  389. X   *
  390. X!  *    $Header: sh3.c 1.22 90/06/21 11:10:47 MS_user Exp $
  391. X   *
  392. X   *    $Log:    sh3.c $
  393. X+  * Revision 1.22  90/06/21  11:10:47  MS_user
  394. X+  * Ensure Areanum is set correctly for memory areas
  395. X+  * 
  396. X+  * Revision 1.21  90/06/08  14:53:58  MS_user
  397. X+  * Finally, we've fixed Gen_Full_Path_Name
  398. X+  * 
  399. X+  * Revision 1.20  90/05/31  17:44:11  MS_user
  400. X+  * Ensure Swap file is saved at level 0
  401. X+  * 
  402. X+  * Revision 1.19  90/05/31  09:49:12  MS_user
  403. X+  * Implement partial write when swapping to disk
  404. X+  * Add some signal lockouts to prevent corruption
  405. X+  * Fix a bug in Gen_Full_Path for c:program
  406. X+  * 
  407. X+  * Revision 1.18  90/05/15  21:09:39  MS_user
  408. X+  * Change Restore_Dir parameter to take directory name
  409. X+  * 
  410. X+  * Revision 1.17  90/05/11  18:47:40  MS_user
  411. X+  * Get switchchar for command.com
  412. X+  * 
  413. X+  * Revision 1.16  90/05/09  18:03:08  MS_user
  414. X+  * Fix bug in Gen_Full_Path with programs in root directory
  415. X+  * 
  416. X   * Revision 1.15  90/04/30  19:50:11  MS_user
  417. X   * Stop search path if second character of name is colon
  418. X   * 
  419. X***************
  420. X*** 116,121 ****
  421. X--- 139,145 ----
  422. X  static char    *XMS_emsg = "Warning: XMS Error (%x)\n";
  423. X              /* Extended Command line processing file name    */
  424. X  static char        *Extend_file = (char *)NULL;
  425. X+ static char        *Swap_File = (char *)NULL;    /* Swap file    */
  426. X  
  427. X  /*
  428. X   * execute tree recursively
  429. X***************
  430. X*** 206,212 ****
  431. X  
  432. X      case TCOM:            /* A command process    */
  433. X          rv = forkexec (t, pin, pout, act, wp);
  434. X!         Restore_Dir ();
  435. X          break;
  436. X  
  437. X      case TPIPE:            /* Pipe processing        */
  438. X--- 230,236 ----
  439. X  
  440. X      case TCOM:            /* A command process    */
  441. X          rv = forkexec (t, pin, pout, act, wp);
  442. X!         Restore_Dir (C_dir->value);
  443. X          break;
  444. X  
  445. X      case TPIPE:            /* Pipe processing        */
  446. X***************
  447. X*** 410,422 ****
  448. X   * Restore the original directory
  449. X   */
  450. X  
  451. X! void    Restore_Dir ()
  452. X  {
  453. X      unsigned int    dummy;
  454. X  
  455. X!     _dos_setdrive (tolower(*C_dir->value) - 'a' + 1, &dummy);
  456. X  
  457. X!     if (chdir (&C_dir->value[2]) != 0)
  458. X      {
  459. X      S_puts ("Warning: current directory reset to /\n");
  460. X      chdir ("/");
  461. X--- 434,447 ----
  462. X   * Restore the original directory
  463. X   */
  464. X  
  465. X! void    Restore_Dir (path)
  466. X! char    *path;
  467. X  {
  468. X      unsigned int    dummy;
  469. X  
  470. X!     _dos_setdrive (tolower(*path) - 'a' + 1, &dummy);
  471. X  
  472. X!     if (chdir (&path[2]) != 0)
  473. X      {
  474. X      S_puts ("Warning: current directory reset to /\n");
  475. X      chdir ("/");
  476. X***************
  477. X*** 622,628 ****
  478. X  {
  479. X      Execute_stack_depth = stack;
  480. X      Delete_G_VL ();
  481. X!     Restore_Dir ();
  482. X      restore_std (setstatus (retval), TRUE);
  483. X  }
  484. X  
  485. X--- 647,653 ----
  486. X  {
  487. X      Execute_stack_depth = stack;
  488. X      Delete_G_VL ();
  489. X!     Restore_Dir (C_dir->value);
  490. X      restore_std (setstatus (retval), TRUE);
  491. X  }
  492. X  
  493. X***************
  494. X*** 835,840 ****
  495. X--- 860,866 ----
  496. X      int            nargc = 0;        /* # script args    */
  497. X      char        *p_name;        /* Program name        */
  498. X      int            i;
  499. X+     union REGS        r;
  500. X  
  501. X  /* If the environment is null - It is too big - error */
  502. X  
  503. X***************
  504. X*** 914,921 ****
  505. X              {
  506. X              new_argv[0] = lookup ("COMSPEC", FALSE)->value;
  507. X              new_argv[1] = "/c";
  508. X-             }
  509. X  
  510. X  /* Stick in the pre-fix arguments */
  511. X  
  512. X              else if (nargc)
  513. X--- 940,955 ----
  514. X              {
  515. X              new_argv[0] = lookup ("COMSPEC", FALSE)->value;
  516. X              new_argv[1] = "/c";
  517. X  
  518. X+ /* Get the switch character */
  519. X+ 
  520. X+             r.x.ax = 0x3700;
  521. X+             intdos (&r, &r);
  522. X+ 
  523. X+             if (r.h.al == 0)
  524. X+                 *new_argv[1] = (char)(r.h.dl);
  525. X+             }
  526. X+ 
  527. X  /* Stick in the pre-fix arguments */
  528. X  
  529. X              else if (nargc)
  530. X***************
  531. X*** 1196,1201 ****
  532. X--- 1230,1236 ----
  533. X      size = mp->MCB_len + 1;
  534. X  
  535. X      SW_Blocks = (size / 0x0400) + 1;
  536. X+     SW_SBlocks = ((size - etext + _psp - 1) / 0x0400) + 1;
  537. X  
  538. X  /* OK Now we've set up the FCB's, command line and opened the swap file.
  539. X   * Get some sys info for the swapper and execute my little assembler
  540. X***************
  541. X*** 1275,1309 ****
  542. X  
  543. X      if (Swap_Mode & SWAP_DISK)
  544. X      {
  545. X!     if ((SW_fp = S_open (TRUE, g_tempname (), O_SMASK, 0600)) < 0)
  546. X      {
  547. X          Swap_Mode &= (~SWAP_DISK);
  548. X          print_error ("No Swap files\n");
  549. X          errno = ENOSPC;
  550. X          return -1;
  551. X      }
  552. X  
  553. X!     SW_Mode = 1;            /* Set Disk file swap        */
  554. X  
  555. X! /* Execute the program */
  556. X  
  557. X      res = SA_spawn (envp);
  558. X  
  559. X!     Clear_Extended_File ();
  560. X  
  561. X      if (res == -2)
  562. X      {
  563. X          Swap_Mode &= (~SWAP_DISK);
  564. X          print_warn ("Swap file write failed\n");
  565. X          errno = ENOSPC;
  566. X          res = -1;
  567. X      }
  568. X  
  569. X! /* Close the swap file and return the result */
  570. X  
  571. X-     serrno = errno;
  572. X-     S_close (SW_fp, TRUE);
  573. X-     errno = serrno;
  574. X      return res;
  575. X      }
  576. X  
  577. X--- 1310,1385 ----
  578. X  
  579. X      if (Swap_Mode & SWAP_DISK)
  580. X      {
  581. X!     SW_Pwrite = 0;
  582. X! 
  583. X!     if (Swap_File == (char *)NULL)
  584. X!         SW_fp = S_open (FALSE, (ep = g_tempname ()), O_SMASK, 0600);
  585. X!     
  586. X!     else
  587. X      {
  588. X+         SW_fp = S_open (FALSE, Swap_File, O_SaMASK);
  589. X+         SW_Pwrite = 1;
  590. X+     }
  591. X+ 
  592. X+     if (SW_fp < 0)
  593. X+     {
  594. X+         Clear_Swap_File ();
  595. X          Swap_Mode &= (~SWAP_DISK);
  596. X          print_error ("No Swap files\n");
  597. X          errno = ENOSPC;
  598. X          return -1;
  599. X      }
  600. X  
  601. X! /* Save the swap file name ? */
  602. X  
  603. X!     if ((Swap_File == (char *)NULL) &&
  604. X!         ((Swap_File = strsave (ep, 0)) == null))
  605. X!         Swap_File = (char *)NULL;
  606. X  
  607. X+     SW_Mode = 1;            /* Set Disk file swap        */
  608. X+     
  609. X+ /* Seek to correct location */
  610. X+ 
  611. X+     if (SW_Pwrite)
  612. X+     {
  613. X+             long    loc = (long)(etext - _psp + 1) * 16L;
  614. X+ 
  615. X+         if (lseek (SW_fp, loc, SEEK_SET) != loc)
  616. X+         {
  617. X+         serrno = errno;
  618. X+         S_close (SW_fp, TRUE);
  619. X+         Clear_Swap_File ();
  620. X+         Swap_Mode &= (~SWAP_DISK);
  621. X+         print_error ("No Swap files\n");
  622. X+         errno = serrno;
  623. X+         return -1;
  624. X+         }
  625. X+     }
  626. X+ 
  627. X+ /* Execute the program */
  628. X+ 
  629. X      res = SA_spawn (envp);
  630. X  
  631. X! /* Close the swap file and extended command line files */
  632. X  
  633. X+     Clear_Extended_File ();
  634. X+     serrno = errno;
  635. X+     S_close (SW_fp, TRUE);
  636. X+     errno = serrno;
  637. X+ 
  638. X+ /* Check for out of swap space */
  639. X+ 
  640. X      if (res == -2)
  641. X      {
  642. X+         Clear_Swap_File ();
  643. X          Swap_Mode &= (~SWAP_DISK);
  644. X          print_warn ("Swap file write failed\n");
  645. X          errno = ENOSPC;
  646. X          res = -1;
  647. X      }
  648. X  
  649. X! /* Return the result */
  650. X  
  651. X      return res;
  652. X      }
  653. X  
  654. X***************
  655. X*** 1520,1540 ****
  656. X      char        *ep;
  657. X      char        *new_args[3];
  658. X  
  659. X- /* Find the start of the program name */
  660. X- 
  661. X-     if ((pname = strrchr (path, '/')) == (char *)NULL)
  662. X-     pname = path;
  663. X- 
  664. X-     else
  665. X-     ++pname;
  666. X- 
  667. X  /* Translate process name to MSDOS format */
  668. X  
  669. X      if ((argv[0] = Gen_Full_Path_Name (path)) == (char *)NULL)
  670. X      return -1;
  671. X  
  672. X! /* Extended command line processing */
  673. X  
  674. X      Extend_file == (char *)NULL;        /* Set no file        */
  675. X  
  676. X      if ((*(pl++) != (char *)NULL) &&
  677. X--- 1596,1612 ----
  678. X      char        *ep;
  679. X      char        *new_args[3];
  680. X  
  681. X  /* Translate process name to MSDOS format */
  682. X  
  683. X      if ((argv[0] = Gen_Full_Path_Name (path)) == (char *)NULL)
  684. X      return -1;
  685. X  
  686. X! /* Find the start of the program name */
  687. X  
  688. X+     pname = ((pname = strrchr (path, '\\')) == (char *)NULL) ? path : pname + 1;
  689. X+ 
  690. X+ /* Extended command line processing */
  691. X+ 
  692. X      Extend_file == (char *)NULL;        /* Set no file        */
  693. X  
  694. X      if ((*(pl++) != (char *)NULL) &&
  695. X***************
  696. X*** 1582,1591 ****
  697. X          ((fd = S_open (FALSE, Extend_file = g_tempname (), O_CMASK,
  698. X                 0600)) >= 0))
  699. X      {
  700. X!         if ((ep = space (strlen (Extend_file) + 1)) != (char *)NULL)
  701. X!         strcpy (ep, Extend_file);
  702. X!         
  703. X!         Extend_file = ep;
  704. X  
  705. X  /* Copy to end of list */
  706. X  
  707. X--- 1654,1660 ----
  708. X          ((fd = S_open (FALSE, Extend_file = g_tempname (), O_CMASK,
  709. X                 0600)) >= 0))
  710. X      {
  711. X!         Extend_file = strsave (Extend_file, 0);
  712. X  
  713. X  /* Copy to end of list */
  714. X  
  715. X***************
  716. X*** 1595,1602 ****
  717. X              (write (fd, "\n", 1) != 1))
  718. X          {
  719. X              close (fd);
  720. X!             unlink (Extend_file);
  721. X!             Extend_file == (char *)NULL;
  722. X              errno = ENOSPC;
  723. X              return -1;
  724. X          }
  725. X--- 1664,1670 ----
  726. X              (write (fd, "\n", 1) != 1))
  727. X          {
  728. X              close (fd);
  729. X!             Clear_Extended_File ();
  730. X              errno = ENOSPC;
  731. X              return -1;
  732. X          }
  733. X***************
  734. X*** 1716,1728 ****
  735. X      Extend_file = (char *)NULL;
  736. X  }
  737. X  
  738. X! /* Convert the executable path to the full path name */
  739. X  
  740. X  static char    *Gen_Full_Path_Name (path)
  741. X  char        *path;
  742. X  {
  743. X      char        cpath[PATH_MAX + 4];
  744. X      char        npath[PATH_MAX + NAME_MAX + 4];
  745. X      char        *p;
  746. X      unsigned int    dummy;
  747. X  
  748. X--- 1784,1810 ----
  749. X      Extend_file = (char *)NULL;
  750. X  }
  751. X  
  752. X! /* Clear Disk swap file file */
  753. X  
  754. X+ void    Clear_Swap_File ()
  755. X+ {
  756. X+     if (Swap_File != (char *)NULL)
  757. X+     {
  758. X+     unlink (Swap_File);
  759. X+     DELETE (Swap_File);
  760. X+     }
  761. X+ 
  762. X+     Swap_File = (char *)NULL;
  763. X+ }
  764. X+ 
  765. X+ /* Convert the executable path to the full path name */
  766. X+ 
  767. X  static char    *Gen_Full_Path_Name (path)
  768. X  char        *path;
  769. X  {
  770. X      char        cpath[PATH_MAX + 4];
  771. X      char        npath[PATH_MAX + NAME_MAX + 4];
  772. X+     char        n1path[PATH_MAX + 4];
  773. X      char        *p;
  774. X      unsigned int    dummy;
  775. X  
  776. X***************
  777. X*** 1737,1746 ****
  778. X  /* In current directory ? */
  779. X  
  780. X      if ((p = strrchr (path, '\\')) == (char *)NULL)
  781. X       p = path;
  782. X  
  783. X!     else
  784. X      {
  785. X      *(p++) = 0;
  786. X  
  787. X  /* Change to the directory containing the executable */
  788. X--- 1819,1861 ----
  789. X  /* In current directory ? */
  790. X  
  791. X      if ((p = strrchr (path, '\\')) == (char *)NULL)
  792. X+     {
  793. X       p = path;
  794. X  
  795. X! /* Check for a:program case */
  796. X! 
  797. X!      if (*(p + 1) == ':')
  798. X!      {
  799. X!         p += 2;
  800. X! 
  801. X! /* Switch drives and get the path of the other drive */
  802. X! 
  803. X!         _dos_setdrive (tolower (*path) - 'a' + 1, &dummy);
  804. X!         getcwd (npath, PATH_MAX + 3);
  805. X!         _dos_setdrive (tolower (*cpath) - 'a' + 1, &dummy);
  806. X!      }
  807. X!     }
  808. X! 
  809. X! /* In root directory */
  810. X! 
  811. X!     else if ((p - path) == 0)
  812. X      {
  813. X+     ++p;
  814. X+     strcpy (npath, "x:\\");
  815. X+     *npath = *cpath;
  816. X+     }
  817. X+ 
  818. X+     else if (((p - path) == 2) && (*(path + 1) == ':'))
  819. X+     {
  820. X+     ++p;
  821. X+     strcpy (npath, "x:\\");
  822. X+     *npath = *path;
  823. X+     }
  824. X+ 
  825. X+ /* Find the directory */
  826. X+ 
  827. X+     else
  828. X+     {
  829. X      *(p++) = 0;
  830. X  
  831. X  /* Change to the directory containing the executable */
  832. X***************
  833. X*** 1748,1757 ****
  834. X--- 1863,1884 ----
  835. X      if (*(path + 1) == ':')
  836. X          _dos_setdrive (tolower (*path) - 'a' + 1, &dummy);
  837. X  
  838. X+ /* Save the current directory on this drive */
  839. X+ 
  840. X+     getcwd (n1path, PATH_MAX + 3);
  841. X+ 
  842. X+ /* Find the directory we want */
  843. X+ 
  844. X      if (chdir (path) < 0)
  845. X          return (char *)NULL;
  846. X  
  847. X+ /* Save its full name */
  848. X+ 
  849. X      getcwd (npath, PATH_MAX + 3);
  850. X+ 
  851. X+ /* Restore the original */
  852. X+ 
  853. X+     chdir (n1path);
  854. X  
  855. X  /* Restore our original directory */
  856. X  
  857. XIndex: shell/sh4.c
  858. XPrereq: 1.6
  859. X*** ../sh16/shell/sh4.c    Tue May  1 19:49:02 1990
  860. X--- shell/sh4.c    Thu Jun 21 21:48:52 1990
  861. X***************
  862. X*** 13,21 ****
  863. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  864. X   *     (or parts of sources) cannot be sold under any circumstances.
  865. X   *
  866. X!  *    $Header: sh4.c 1.6 90/04/25 22:35:26 MS_user Exp $
  867. X   *
  868. X   *    $Log:    sh4.c $
  869. X   * Revision 1.6  90/04/25  22:35:26  MS_user
  870. X   * Make anys a global function
  871. X   * 
  872. X--- 13,24 ----
  873. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  874. X   *     (or parts of sources) cannot be sold under any circumstances.
  875. X   *
  876. X!  *    $Header: sh4.c 1.7 90/06/21 11:11:51 MS_user Exp $
  877. X   *
  878. X   *    $Log:    sh4.c $
  879. X+  * Revision 1.7  90/06/21  11:11:51  MS_user
  880. X+  * Ensure Areanum is set correctly for memory areas
  881. X+  * 
  882. X   * Revision 1.6  90/04/25  22:35:26  MS_user
  883. X   * Make anys a global function
  884. X   * 
  885. X***************
  886. X*** 150,158 ****
  887. X  
  888. X          if (FL_TEST ('m') && (vp->status & C_MSDOS))
  889. X          {
  890. X!         cp = space (strlen (sp = wb->w_words[wb->w_nword - 1]) + 1);
  891. X          wb->w_words[wb->w_nword - 1] = cp;
  892. X!         Convert_Slashes (strcpy (cp, sp));
  893. X          }
  894. X      }
  895. X      }
  896. X--- 153,161 ----
  897. X  
  898. X          if (FL_TEST ('m') && (vp->status & C_MSDOS))
  899. X          {
  900. X!         cp = strsave (wb->w_words[wb->w_nword - 1], areanum);
  901. X          wb->w_words[wb->w_nword - 1] = cp;
  902. X!         Convert_Slashes (cp);
  903. X          }
  904. X      }
  905. X      }
  906. XIndex: shell/sh5.c
  907. XPrereq: 1.8
  908. X*** ../sh16/shell/sh5.c    Tue May  1 19:49:12 1990
  909. X--- shell/sh5.c    Thu Jun 21 21:49:29 1990
  910. X***************
  911. X*** 13,21 ****
  912. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  913. X   *     (or parts of sources) cannot be sold under any circumstances.
  914. X   *
  915. X!  *    $Header: sh5.c 1.8 90/04/25 10:58:41 MS_user Exp $
  916. X   *
  917. X   *    $Log:    sh5.c $
  918. X   * Revision 1.8  90/04/25  10:58:41  MS_user
  919. X   * Fix re-reading re-assigned buffers correctly.
  920. X   * 
  921. X--- 13,24 ----
  922. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  923. X   *     (or parts of sources) cannot be sold under any circumstances.
  924. X   *
  925. X!  *    $Header: sh5.c 1.9 90/05/11 18:45:40 MS_user Exp $
  926. X   *
  927. X   *    $Log:    sh5.c $
  928. X+  * Revision 1.9  90/05/11  18:45:40  MS_user
  929. X+  * Fix problem when at end of buffer on re-load from file
  930. X+  * 
  931. X   * Revision 1.8  90/04/25  10:58:41  MS_user
  932. X   * Fix re-reading re-assigned buffers correctly.
  933. X   * 
  934. X***************
  935. X*** 428,434 ****
  936. X  
  937. X      if (ap->afid != AFID_NOBUF)
  938. X      {
  939. X!     if ((i = (ap->afid != bp->id)) || (bp->bufp == bp->ebufp))
  940. X      {
  941. X  
  942. X  /* Are we re-reading a corrupted buffer? */
  943. X--- 431,443 ----
  944. X  
  945. X      if (ap->afid != AFID_NOBUF)
  946. X      {
  947. X! 
  948. X! /* When we reread a buffer, we need to check to see if we have reached the
  949. X!  * end.  If we have, we need to read the next buffer.  Hence, this loop for
  950. X!  * the second read
  951. X!  */
  952. X! 
  953. X!     while (((i = (ap->afid != bp->id)) || (bp->bufp == bp->ebufp)))
  954. X      {
  955. X  
  956. X  /* Are we re-reading a corrupted buffer? */
  957. XIndex: shell/sh6.c
  958. XPrereq: 1.11
  959. X*** ../sh16/shell/sh6.c    Tue May  1 19:49:19 1990
  960. X--- shell/sh6.c    Thu Jun 21 21:49:38 1990
  961. X***************
  962. X*** 13,21 ****
  963. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  964. X   *     (or parts of sources) cannot be sold under any circumstances.
  965. X   *
  966. X!  *    $Header: sh6.c 1.11 90/04/25 22:38:47 MS_user Exp $
  967. X   *
  968. X   *    $Log:    sh6.c $
  969. X   * Revision 1.11  90/04/25  22:38:47  MS_user
  970. X   * Add initialisation for new field in IO_Args
  971. X   * 
  972. X--- 13,27 ----
  973. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  974. X   *     (or parts of sources) cannot be sold under any circumstances.
  975. X   *
  976. X!  *    $Header: sh6.c 1.13 90/05/15 21:10:19 MS_user Exp $
  977. X   *
  978. X   *    $Log:    sh6.c $
  979. X+  * Revision 1.13  90/05/15  21:10:19  MS_user
  980. X+  * Release 1.6.2
  981. X+  * 
  982. X+  * Revision 1.12  90/05/09  20:35:41  MS_user
  983. X+  * Change to release 1.6.1
  984. X+  * 
  985. X   * Revision 1.11  90/04/25  22:38:47  MS_user
  986. X   * Add initialisation for new field in IO_Args
  987. X   * 
  988. X***************
  989. X*** 63,69 ****
  990. X  #include <string.h>
  991. X  #include "sh.h"
  992. X  
  993. X! static char    *Copy_Right1 = "MS-DOS SH Version 1.6 - %s (DOS %d.%d)\n";
  994. X  static char    *Copy_Right2 = "Copyright (c) Data Logic Ltd and Charles Forsyth 1990\n";
  995. X  char        **dolv;        /* Parameter array            */
  996. X  int        dolc;        /* Number of entries in parameter array    */
  997. X--- 69,75 ----
  998. X  #include <string.h>
  999. X  #include "sh.h"
  1000. X  
  1001. X! static char    *Copy_Right1 = "MS-DOS SH Version 1.6.2 - %s (DOS %d.%d)\n";
  1002. X  static char    *Copy_Right2 = "Copyright (c) Data Logic Ltd and Charles Forsyth 1990\n";
  1003. X  char        **dolv;        /* Parameter array            */
  1004. X  int        dolc;        /* Number of entries in parameter array    */
  1005. XIndex: shell/sh7.c
  1006. XPrereq: 1.16
  1007. X*** ../sh16/shell/sh7.c    Tue May  1 19:49:34 1990
  1008. X--- shell/sh7.c    Thu Jun 21 21:50:36 1990
  1009. X***************
  1010. X*** 15,23 ****
  1011. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  1012. X   *     (or parts of sources) cannot be sold under any circumstances.
  1013. X   *
  1014. X!  *    $Header: sh7.c 1.16 90/04/30 19:50:44 MS_user Exp $
  1015. X   *
  1016. X   *    $Log:    sh7.c $
  1017. X   * Revision 1.16  90/04/30  19:50:44  MS_user
  1018. X   * Stop search path if second character of name is colon
  1019. X   * 
  1020. X--- 15,26 ----
  1021. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  1022. X   *     (or parts of sources) cannot be sold under any circumstances.
  1023. X   *
  1024. X!  *    $Header: sh7.c 1.17 90/05/31 09:50:05 MS_user Exp $
  1025. X   *
  1026. X   *    $Log:    sh7.c $
  1027. X+  * Revision 1.17  90/05/31  09:50:05  MS_user
  1028. X+  * Implement partial write when swapping to disk
  1029. X+  * 
  1030. X   * Revision 1.16  90/04/30  19:50:44  MS_user
  1031. X   * Stop search path if second character of name is colon
  1032. X   * 
  1033. X***************
  1034. X*** 505,510 ****
  1035. X--- 508,514 ----
  1036. X  /* Set up new values */
  1037. X  
  1038. X      Swap_Mode = SWAP_OFF;
  1039. X+     Clear_Swap_File ();
  1040. X  
  1041. X      while ((cp = t->words[n++]) != (char *)NULL)
  1042. X      {
  1043. XIndex: shell/sh8.c
  1044. XPrereq: 1.8
  1045. X*** ../sh16/shell/sh8.c    Tue May  1 19:49:46 1990
  1046. X--- shell/sh8.c    Thu Jun 21 21:51:03 1990
  1047. X***************
  1048. X*** 12,20 ****
  1049. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  1050. X   *     (or parts of sources) cannot be sold under any circumstances.
  1051. X   *
  1052. X!  *    $Header: sh8.c 1.8 90/03/26 20:58:11 MS_user Exp $
  1053. X   *
  1054. X   *    $Log:    sh8.c $
  1055. X   * Revision 1.8  90/03/26  20:58:11  MS_user
  1056. X   * Change I/O restore so that "exec >filename" works
  1057. X   * 
  1058. X--- 12,29 ----
  1059. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  1060. X   *     (or parts of sources) cannot be sold under any circumstances.
  1061. X   *
  1062. X!  *    $Header: sh8.c 1.11 90/06/21 11:12:13 MS_user Exp $
  1063. X   *
  1064. X   *    $Log:    sh8.c $
  1065. X+  * Revision 1.11  90/06/21  11:12:13  MS_user
  1066. X+  * Ensure Areanum is set correctly for memory areas
  1067. X+  * 
  1068. X+  * Revision 1.10  90/05/31  11:31:53  MS_user
  1069. X+  * Correct misplaced signal restore
  1070. X+  * 
  1071. X+  * Revision 1.9  90/05/31  09:50:41  MS_user
  1072. X+  * Add some signal lockouts to prevent corruption
  1073. X+  * 
  1074. X   * Revision 1.8  90/03/26  20:58:11  MS_user
  1075. X   * Change I/O restore so that "exec >filename" works
  1076. X   * 
  1077. X***************
  1078. X*** 94,99 ****
  1079. X--- 103,109 ----
  1080. X      s_flist        *fp = (struct s_flist *)NULL;
  1081. X      int            *f_list = (int *)NULL;
  1082. X      char        *f_name = (char *)NULL;
  1083. X+     void        (*save_signal)(int);
  1084. X  
  1085. X  /* Check the permission mask if it exists */
  1086. X  
  1087. X***************
  1088. X*** 117,122 ****
  1089. X--- 127,136 ----
  1090. X      return -1;
  1091. X      }
  1092. X  
  1093. X+ /* Disable signals */
  1094. X+ 
  1095. X+     save_signal = signal (SIGINT, SIG_IGN);
  1096. X+ 
  1097. X  /* Set up the structure.  Change two Unix device names to the DOS
  1098. X   * equivalents and disable create
  1099. X   */
  1100. X***************
  1101. X*** 148,171 ****
  1102. X      DELETE (f_list);
  1103. X      DELETE (fp);
  1104. X      errno = pmask;
  1105. X!     return -1;
  1106. X      }
  1107. X  
  1108. X  /* Make sure everything is in area 0 */
  1109. X  
  1110. X!     setarea ((char *)fp, 0);
  1111. X!     setarea ((char *)f_list, 0);
  1112. X  
  1113. X  /* List into the list */
  1114. X  
  1115. X!     fp->fl_next   = list_start;
  1116. X!     list_start = fp;
  1117. X  
  1118. X  /* Return the file descriptor */
  1119. X  
  1120. X!     return fp->fl_fd[0];
  1121. X! }
  1122. X  
  1123. X  /*
  1124. X   * Scan the File list for the appropriate entry for the specified ID
  1125. X   */
  1126. X--- 162,194 ----
  1127. X      DELETE (f_list);
  1128. X      DELETE (fp);
  1129. X      errno = pmask;
  1130. X!     pmask = -1;
  1131. X      }
  1132. X  
  1133. X  /* Make sure everything is in area 0 */
  1134. X  
  1135. X!     else
  1136. X!     {
  1137. X!     setarea ((char *)fp, 0);
  1138. X!     setarea ((char *)f_list, 0);
  1139. X  
  1140. X  /* List into the list */
  1141. X  
  1142. X!     fp->fl_next   = list_start;
  1143. X!     list_start = fp;
  1144. X  
  1145. X  /* Return the file descriptor */
  1146. X  
  1147. X!     pmask = fp->fl_fd[0];
  1148. X!     }
  1149. X  
  1150. X+ /* Restore signals */
  1151. X+ 
  1152. X+     signal (SIGINT, save_signal);
  1153. X+ 
  1154. X+     return pmask;
  1155. X+ }
  1156. X+ 
  1157. X  /*
  1158. X   * Scan the File list for the appropriate entry for the specified ID
  1159. X   */
  1160. X***************
  1161. X*** 207,215 ****
  1162. X      bool    release = TRUE;
  1163. X      bool    delete = FALSE;
  1164. X      char    *fname;
  1165. X  
  1166. X! /* Find the entry for this ID */
  1167. X  
  1168. X      if (fp != (s_flist *)NULL)
  1169. X      {
  1170. X      for (i = 0; i < fp->fl_count; i++)
  1171. X--- 230,243 ----
  1172. X      bool    release = TRUE;
  1173. X      bool    delete = FALSE;
  1174. X      char    *fname;
  1175. X+     void    (*save_signal)(int);
  1176. X  
  1177. X! /* Disable signals */
  1178. X  
  1179. X+     save_signal = signal (SIGINT, SIG_IGN);
  1180. X+ 
  1181. X+ /* Find the entry for this ID */
  1182. X+ 
  1183. X      if (fp != (s_flist *)NULL)
  1184. X      {
  1185. X      for (i = 0; i < fp->fl_count; i++)
  1186. X***************
  1187. X*** 271,278 ****
  1188. X      DELETE (fname);
  1189. X      }
  1190. X  
  1191. X! /* Restore results and error code */
  1192. X  
  1193. X      errno = serrno;
  1194. X      return i;
  1195. X  }
  1196. X--- 299,310 ----
  1197. X      DELETE (fname);
  1198. X      }
  1199. X  
  1200. X! /* Restore signals */
  1201. X  
  1202. X+     signal (SIGINT, save_signal);
  1203. X+ 
  1204. X+ /* Restore results and error code */
  1205. X+ 
  1206. X      errno = serrno;
  1207. X      return i;
  1208. X  }
  1209. X***************
  1210. X*** 326,331 ****
  1211. X--- 358,364 ----
  1212. X          == (int *)NULL)
  1213. X          return new_fid;
  1214. X  
  1215. X+     setarea ((char *)flist, 0);
  1216. X      memcpy ((char *)flist, (char *)fp->fl_fd, sizeof (int) * fp->fl_size);
  1217. X      DELETE (fp->fl_fd);
  1218. X  
  1219. XIndex: shell/sh9.c
  1220. XPrereq: 1.11
  1221. X*** ../sh16/shell/sh9.c    Tue May  1 19:49:58 1990
  1222. X--- shell/sh9.c    Thu Jun 21 21:51:46 1990
  1223. X***************
  1224. X*** 12,20 ****
  1225. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  1226. X   *     (or parts of sources) cannot be sold under any circumstances.
  1227. X   *
  1228. X!  *    $Header: sh9.c 1.11 90/03/27 20:22:07 MS_user Exp $
  1229. X   *
  1230. X   *    $Log:    sh9.c $
  1231. X   * Revision 1.11  90/03/27  20:22:07  MS_user
  1232. X   * Fix problem with paging down history file - the last item was incorrect
  1233. X   * 
  1234. X--- 12,23 ----
  1235. X   * 2.  The sources (or parts thereof) or objects generated from the sources
  1236. X   *     (or parts of sources) cannot be sold under any circumstances.
  1237. X   *
  1238. X!  *    $Header: sh9.c 1.12 90/05/31 10:39:26 MS_user Exp $
  1239. X   *
  1240. X   *    $Log:    sh9.c $
  1241. X+  * Revision 1.12  90/05/31  10:39:26  MS_user
  1242. X+  * Initialise the input buffer in case of interrupts
  1243. X+  * 
  1244. X   * Revision 1.11  90/03/27  20:22:07  MS_user
  1245. X   * Fix problem with paging down history file - the last item was incorrect
  1246. X   * 
  1247. X***************
  1248. X*** 229,234 ****
  1249. X--- 232,238 ----
  1250. X  /* Set to last history item */
  1251. X  
  1252. X      c_history = l_history;
  1253. X+     memset (l_buffer, 0, LINE_MAX + 1);
  1254. X  
  1255. X  /* Process the input */
  1256. X  
  1257. SHAR_EOF
  1258. echo "File Patch1.6.2 is complete" &&
  1259. $TOUCH -am 0626201490 Patch1.6.2 &&
  1260. chmod 0644 Patch1.6.2 ||
  1261. echo "restore of Patch1.6.2 failed"
  1262. set `wc -c Patch1.6.2`;Wc_c=$1
  1263. if test "$Wc_c" != "65254"; then
  1264.     echo original size 65254, current size $Wc_c
  1265. fi
  1266. rm -f @shar_seq_.tmp
  1267. echo "You have unpacked the last part"
  1268. exit 0
  1269.  
  1270.