home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #1 / NN_1993_1.iso / spool / vmsnet / sources / 471 < prev    next >
Encoding:
Internet Message Format  |  1993-01-04  |  19.9 KB

  1. Path: sparky!uunet!spool.mu.edu!wupost!usc!news.service.uci.edu!unogate!mvb.saic.com!vmsnet-sources
  2. From: flowers@memstvx1.memst.edu
  3. Newsgroups: vmsnet.sources
  4. Subject: C Swing v3.6.4 patches, part 04/04
  5. Message-ID: <9908351@MVB.SAIC.COM>
  6. Date: Mon, 04 Jan 1993 20:21:21 GMT
  7. Organization: Memphis State University
  8. Lines: 573
  9. Approved: Mark.Berryman@Mvb.Saic.Com
  10.  
  11. Submitted-by: flowers@memstvx1.memst.edu
  12. Posting-number: Volume 4, Issue 25
  13. Archive-name: cswing/patch3_04
  14. Patch-to: cswing: Volume 3, Issue 35-52,93,211-218
  15.  
  16. -+-+-+-+-+-+-+-+ START OF PART 4 -+-+-+-+-+-+-+-+
  17. X!           **    sequence, or a `5EM overstrike string.
  18. X!           */
  19. X!           if (!MOST_B_OPT)
  20. X!             `7B
  21. X!                 if (!MOST_V_OPT)
  22. X!                   `7B
  23. X!                       if ((char1 == '`5B' &&
  24. X!                            (*end == '\033' && *(end + 3) == 'm' &&
  25. X!                             (*(end + 2) == '0' `7C`7C *(end + 2) == '1' `7
  26. VC`7C`20
  27. X!                              *(end + 2) == '4' `7C`7C *(end + 2) == '7')))
  28. V `7C`7C
  29. X!                           (char1 == 'm' &&
  30. X!                            (*(end - 2) == '\033' && *(end - 1) == '`5B' &&
  31. X!                             (*end == '0' `7C`7C *end == '1' `7C`7C
  32. X!                              *end == '4' `7C`7C *end == '7'))) `7C`7C
  33. X!                           ((char1 == '0' `7C`7C char1 == '1' `7C`7C
  34. X!                             char1 == '4' `7C`7C char1 == '7') &&
  35. X!                            (*(end - 1) == '\033' && *end == '`5B' &&
  36. X!                             *(end + 2) == 'm')))
  37. X!                         goto again;
  38. X!                       else
  39. X!                         `7B
  40. X!                             save_pos = C_POS;
  41. X!                             C_POS = end + 1;
  42. X!                             b = beg_of_line1();
  43. X!                             if (!MOST_W_OPT)
  44. X!                               `7B
  45. X!                                   e = end_of_line1();
  46. X!                                   for (i = b; i <= e; i++)
  47. X!                                     if (*i == '\015')
  48. X!                                       `7B
  49. X!                                           M_FLAG = 1;
  50. X!                                           M_POS = i;
  51. X!                                       `7D
  52. X!                               `7D
  53. X!                             else
  54. X!                               e = end_of_line();
  55. X!                             if (M_FLAG && C_POS > M_POS)
  56. X!                               `7B
  57. X!                                   C_POS = save_pos;
  58. X!                                   M_FLAG = 0;
  59. X!                                   goto again;
  60. X!                               `7D
  61. X!                             C_POS = save_pos;
  62. X!                             M_FLAG = 0;
  63. X!                         `7D
  64. X!                   `7D
  65. X!             `7D
  66. X!            `20
  67. X!           /*
  68. X!           **  Now see if the rest of the string matches.
  69. X!           **  If not Binary mode,
  70. X!           **    deal with any embedded backspaces (`5EH)
  71. X!           **    or <ESC>`5B#m sequences if not Verbose mode,
  72. X!           **    and with tabs if not Verbose or explicit Tab modes.
  73. X!           */
  74. X            pos = end;  /* save this position so we start from here again */
  75. X `20
  76. X            if (!MOST_B_OPT && tab_flag)
  77. X**************
  78. X*** 107,114
  79. X `20
  80. X            j = key_len - 2;
  81. X            pos = end;  /* save this position so we start from here again */
  82. X-           while(ch = *end--, ch = upcase(ch),
  83. X-                 ch2 = work`5Bj`5D, (ch == ch2) && (j >= 0)) j--;
  84. X `20
  85. X            if (j < 0)
  86. X              `7B
  87. X--- 411,416 -----
  88. X            **    and with tabs if not Verbose or explicit Tab modes.
  89. X            */
  90. X            pos = end;  /* save this position so we start from here again */
  91. X `20
  92. X            if (!MOST_B_OPT && tab_flag)
  93. X              `7B
  94. X**************
  95. X*** 110,116
  96. X            while(ch = *end--, ch = upcase(ch),
  97. X                  ch2 = work`5Bj`5D, (ch == ch2) && (j >= 0)) j--;
  98. X `20
  99. X!           if (j < 0)
  100. X              `7B
  101. X                  /* make key match 'key' in beg */
  102. X                  end = pos +  1;  /* skip back to beginning of match */
  103. X--- 412,418 -----
  104. X            */
  105. X            pos = end;  /* save this position so we start from here again */
  106. X `20
  107. X!           if (!MOST_B_OPT && tab_flag)
  108. X              `7B
  109. X                  end++;
  110. X                  j = key_len - 1;
  111. X**************
  112. X*** 112,118
  113. X `20
  114. X            if (j < 0)
  115. X              `7B
  116. X!                 /* make key match 'key' in beg */
  117. X                  end = pos +  1;  /* skip back to beginning of match */
  118. X                  for (j = key_len; j > 0; j--) key`5Bj - 1`5D = *end--;
  119. X                  return(end + 1);
  120. X--- 414,516 -----
  121. X `20
  122. X            if (!MOST_B_OPT && tab_flag)
  123. X              `7B
  124. X!                 end++;
  125. X!                 j = key_len - 1;
  126. X!             `7D
  127. X!           else
  128. X!             j = key_len - 2;
  129. X!`20
  130. X!           if (MOST_B_OPT)
  131. X!             `7B
  132. X!                 while(ch = *end--, ch = upcase(ch), ch2 = work`5Bj`5D,
  133. X!                       (ch == ch2 && j >= 0)) j--;
  134. X!             `7D
  135. X!           else
  136. X!             `7B
  137. X!                 while(ch = *end--, ch = upcase(ch), ch2 = work`5Bj`5D,
  138. X!                       ((ch == ch2) `7C`7C
  139. X!                        (!MOST_V_OPT && (ch == '\b' `7C`7C ch == 'm')) `7C`
  140. V7C
  141. X!                        ((!MOST_V_OPT `7C`7C !MOST_T_OPT) &&
  142. X!                          ch == '\t' && ch2 == ' ') &&
  143. X!                        (j >= 0)))
  144. X!                   `7B
  145. X!                       j--;
  146. X!                   `20
  147. X!                       /*
  148. X!                       **  deal with `5EH if not Verbose mode
  149. X!                       */
  150. X!                       if (ch2 != '\b' && ch == '\b')
  151. X!                         `7B
  152. X!                             ch = *(end - 1);
  153. X!                             ch = upcase(ch);
  154. X!                             if (ch == ch2)
  155. X!                               end -= 2;
  156. X!                             else
  157. X!                               break;
  158. X!                         `7D
  159. X!                         `20
  160. X!                       /*
  161. X!                       **  deal with <ESC>`5B#m if not Verbose mode
  162. X!                       */
  163. X!                       else if (ch == 'm' &&
  164. X!                                *(end - 2) == '\033' && *(end - 1) == '`5B'
  165. V &&
  166. X!                                (*end == '0' `7C`7C *end == '1' `7C`7C
  167. X!                                 *end == '4' `7C`7C *end == '7'))
  168. X!                         `7B
  169. X!                             ch = *(end - 3);
  170. X!                             ch = upcase(ch);
  171. X!                             if (ch != ch2) break;
  172. X!                             else end -= 4;
  173. X!                         `7D
  174. X!                        `20
  175. X!                       /*
  176. X!                       **  deal with tabs if not Verbose or explicit Tab mo
  177. Vdes
  178. X!                       */
  179. X!                       else if (ch == '\t' && ch2 == ' ')
  180. X!                         `7B
  181. X!                             j++;
  182. X!                             save_pos = end + 2;
  183. X!                             while (*end == '\t' `7C`7C *end == ' ')
  184. X!                               end--;
  185. X!                             if (save_pos >= EOB)
  186. X!                               s = EOB - apparant_distance(end);
  187. X!                             else if (MOST_W_OPT)
  188. X!                               `7B
  189. X!                                   MOST_W_OPT = 0;
  190. X!                                   s = apparant_distance(save_pos) -
  191. X!                                       apparant_distance(end) - 1;
  192. X!                                   MOST_W_OPT = 1;
  193. X!                               `7D
  194. X!                             else
  195. X!                               s = apparant_distance(save_pos) -
  196. X!                                   apparant_distance(end) - 1;
  197. X!                             if (end < b) s++;
  198. X!                             while (s && work`5Bj`5D == ' ' && j >= 0)
  199. X!                               `7B
  200. X!                                   j--;
  201. X!                                   s--;
  202. X!                               `7D
  203. X!                             if (j < 0)
  204. X!                               `7B
  205. X!                                   S_DIFF = s;
  206. X!                               `7D
  207. X!                             else if (!tab_flag && s != 0 && j >= 0)
  208. X!                               `7B
  209. X!                                   j = 0;
  210. X!                                   break;
  211. X!                               `7D
  212. X!                         `7D
  213. X!                   `7D
  214. X!             `7D
  215. X!             `20
  216. X!           /*
  217. X!           **  if it's a full match
  218. X!           */
  219. X!           if (j < 0)
  220. X!             `7B
  221. X!                 /*`20
  222. X!                 **  make key match 'key' in beg
  223. X!                 */
  224. X                  end = pos +  1;  /* skip back to beginning of match */
  225. X                  for (j = key_len; j > 0; j--)
  226. X                    `7B
  227. X**************
  228. X*** 114,120
  229. X              `7B
  230. X                  /* make key match 'key' in beg */
  231. X                  end = pos +  1;  /* skip back to beginning of match */
  232. X!                 for (j = key_len; j > 0; j--) key`5Bj - 1`5D = *end--;
  233. X                  return(end + 1);
  234. X              `7D
  235. X           `20
  236. X--- 512,556 -----
  237. X                  **  make key match 'key' in beg
  238. X                  */
  239. X                  end = pos +  1;  /* skip back to beginning of match */
  240. X!                 for (j = key_len; j > 0; j--)
  241. X!                   `7B
  242. X!                       if (MOST_B_OPT)
  243. X!                         `7B
  244. X!                             key`5Bj - 1`5D = *end--;
  245. X!                         `7D
  246. X!                       else
  247. X!                         `7B
  248. X!                             /*
  249. X!                             **  deal with overstriking via `5EH if not Ver
  250. Vbose
  251. X!                             */
  252. X!                             if (!MOST_V_OPT && *end == '\b')
  253. X!                               end -= 2;
  254. X!                            `20
  255. X!                             /*
  256. X!                             **  now deal with tabs if not Verbose or
  257. X!                             **    explicit Tab modes,
  258. X!                             **  else just get the character
  259. X!                             */
  260. X!                             if ((!MOST_V_OPT `7C`7C !MOST_T_OPT) &&
  261. X!                                 *end == '\t' && work`5Bj - 1`5D == ' ')
  262. X!                               `7B
  263. X!                                   while (*end == '\t' `7C`7C *end == ' ')
  264. V end--;
  265. X!                                   while (key`5Bj - 1`5D == ' ') j--;
  266. X!                                   j++;
  267. X!                               `7D
  268. X!                             else
  269. X!                               key`5Bj - 1`5D = *end--;
  270. X!                            `20
  271. X!                             /*
  272. X!                             **  now deal with <ESC>`5B#m if not Verbose
  273. X!                             */
  274. X!                             if (!MOST_V_OPT && *end == 'm' &&
  275. X!                                 *(end - 3) == '\033' && *(end - 2) == '`5B
  276. V' &&
  277. X!                                 (*(end - 1) == '0' `7C`7C *(end - 1) == '1
  278. V' `7C`7C
  279. X!                                  *(end - 1) == '4' `7C`7C *(end - 1) == '7
  280. V'))
  281. X!                               end -= 4;
  282. X!                         `7D
  283. X!                   `7D
  284. X                  return(end + 1);
  285. X              `7D
  286. X            else end = pos;
  287. X**************
  288. X*** 117,123
  289. X                  for (j = key_len; j > 0; j--) key`5Bj - 1`5D = *end--;
  290. X                  return(end + 1);
  291. X              `7D
  292. X-          `20
  293. X            else end = pos;
  294. X        `7D
  295. X  `7D
  296. X--- 553,558 -----
  297. X                    `7D
  298. X                  return(end + 1);
  299. X              `7D
  300. X            else end = pos;
  301. X        `7D
  302. X  `7D
  303. X**************
  304. X*** 123,129
  305. X  `7D
  306. X `20
  307. X `20
  308. X!`20
  309. X  int search(unsigned char *from, int repeat, int *col)
  310. X  `7B
  311. X      /* return the line match was found as well as line number,
  312. X--- 558,568 -----
  313. X  `7D
  314. X `20
  315. X `20
  316. X! /*
  317. X! **  Return the line match was found as well as line number.
  318. X! **  Search from 'from' on.
  319. X! **  Assume that line_array match the 'from' so we need no initial lookup.
  320. X! */
  321. X  int search(unsigned char *from, int repeat, int *col)
  322. X  `7B
  323. X      int str_len,i,test,j,save_line,the_col,row;
  324. X**************
  325. X*** 126,134
  326. X `20
  327. X  int search(unsigned char *from, int repeat, int *col)
  328. X  `7B
  329. X!     /* return the line match was found as well as line number,
  330. X!        search from i on; assume that line_array match the i so we need
  331. X!        no initial lookup */
  332. X `20
  333. X      int test,j,save_line, the_col, row;
  334. X      char ch, string`5B80`5D;
  335. X--- 565,574 -----
  336. X  */
  337. X  int search(unsigned char *from, int repeat, int *col)
  338. X  `7B
  339. X!     int str_len,i,test,j,save_line,the_col,row;
  340. X!     char ch,string`5B80`5D;
  341. X!     unsigned char *pos,*save_pos,*found_at;
  342. X!     extern int SCREEN_WIDTH;
  343. X `20
  344. X      /*
  345. X      **  if out out bounds, do nothing
  346. X**************
  347. X*** 130,138
  348. X         search from i on; assume that line_array match the i so we need
  349. X         no initial lookup */
  350. X `20
  351. X!     int test,j,save_line, the_col, row;
  352. X!     char ch, string`5B80`5D;
  353. X!     unsigned char *pos, *save_pos, *found_at;
  354. X `20
  355. X      if ((from < BEG) `7C`7C (from > EOB)) return(-1);
  356. X      save_pos = C_POS;
  357. X--- 570,580 -----
  358. X      unsigned char *pos,*save_pos,*found_at;
  359. X      extern int SCREEN_WIDTH;
  360. X `20
  361. X!     /*
  362. X!     **  if out out bounds, do nothing
  363. X!     */
  364. X!     if ((from < BEG) `7C`7C (from > EOB))
  365. X!       return(-1);
  366. X `20
  367. X      /*
  368. X      **  If not Binary mode,
  369. X**************
  370. X*** 134,140
  371. X      char ch, string`5B80`5D;
  372. X      unsigned char *pos, *save_pos, *found_at;
  373. X `20
  374. X!     if ((from < BEG) `7C`7C (from > EOB)) return(-1);
  375. X      save_pos = C_POS;
  376. X      save_line = C_LINE;
  377. X      found_at = EOB;
  378. X--- 576,620 -----
  379. X      if ((from < BEG) `7C`7C (from > EOB))
  380. X        return(-1);
  381. X `20
  382. X!     /*
  383. X!     **  If not Binary mode,
  384. X!     **    if not Verbose mode and search string has an overstrike
  385. X!     **      (`5EH or `5EM) character or a legal <ESC>`5B#m sequence,
  386. X!     **    else if not Verbose or not explicit Tab mode and search
  387. X!     **      string has a tab,
  388. X!     **    tell the user to implement the appropriate mode(s).
  389. X!     */
  390. X!     if (!MOST_B_OPT)
  391. X!       `7B
  392. X!           if (!MOST_V_OPT `7C`7C !MOST_T_OPT)
  393. X!             `7B
  394. X!                 str_len = strlen(SEARCH_STR);
  395. X!                 for (i = 0; i < str_len; i++)
  396. X!                   `7B
  397. X!                       if ((!MOST_V_OPT) &&
  398. X!                           (SEARCH_STR`5Bi`5D == '\b' `7C`7C SEARCH_STR`5Bi
  399. V`5D == '\015' `7C`7C
  400. X!                            (SEARCH_STR`5Bi`5D == '\033' && i + 3 < str_len
  401. V &&
  402. X!                             SEARCH_STR`5Bi+1`5D == '`5B' && SEARCH_STR`5Bi
  403. V+3`5D == 'm' &&
  404. X!                             (SEARCH_STR`5Bi+2`5D == '0' `7C`7C
  405. X!                              SEARCH_STR`5Bi+2`5D == '1' `7C`7C
  406. X!                              SEARCH_STR`5Bi+2`5D == '4' `7C`7C
  407. X!                              SEARCH_STR`5Bi+2`5D == '7'))))
  408. X!                         `7B
  409. X!                             most_message
  410. X!                               ("Use Verbose mode to search for this string
  411. V.",1);
  412. X!                             return(-1);
  413. X!                         `7D
  414. X!                       else if ((!MOST_V_OPT `7C`7C !MOST_T_OPT) &&
  415. X!                                (SEARCH_STR`5Bi`5D == '\t'))
  416. X!                         `7B
  417. X!                             most_message
  418. X!              ("Use Verbose and explicit Tab mode to search for this string
  419. V.",1);
  420. X!                             return(-1);
  421. X!                         `7D
  422. X!                   `7D
  423. X!             `7D
  424. X!       `7D
  425. X!`20
  426. X      save_pos = C_POS;
  427. X      save_line = C_LINE;
  428. X      found_at = EOB;
  429. X**************
  430. X*** 177,186
  431. X           `20
  432. X            row = -1;
  433. X        `7D
  434. X!     /*
  435. X!     **  expand tabs to get col correct
  436. X!     */
  437. X!     else if ( (!MOST_T_OPT `7C`7C !MOST_V_OPT) && !MOST_B_OPT)
  438. X        `7B
  439. X            find_row_column(found_at,&row,&the_col);
  440. X            *col = apparant_distance(found_at);
  441. X--- 657,664 -----
  442. X           `20
  443. X            row = -1;
  444. X        `7D
  445. X!`20
  446. X!     else
  447. X        `7B
  448. X             find_row_column(found_at,&row,&the_col);
  449. X             *col = the_col;
  450. X**************
  451. X*** 182,189
  452. X      */
  453. X      else if ( (!MOST_T_OPT `7C`7C !MOST_V_OPT) && !MOST_B_OPT)
  454. X        `7B
  455. X!           find_row_column(found_at,&row,&the_col);
  456. X!           *col = apparant_distance(found_at);
  457. X        `7D
  458. X      C_POS = save_pos;
  459. X      C_LINE = save_line;
  460. X--- 660,667 -----
  461. X `20
  462. X      else
  463. X        `7B
  464. X!            find_row_column(found_at,&row,&the_col);
  465. X!            *col = the_col;
  466. X        `7D
  467. X `20
  468. X      S_DIFF = 0;
  469. X**************
  470. X*** 185,190
  471. X            find_row_column(found_at,&row,&the_col);
  472. X            *col = apparant_distance(found_at);
  473. X        `7D
  474. X      C_POS = save_pos;
  475. X      C_LINE = save_line;
  476. X      if (row > 0) CURS_POS = found_at;
  477. X--- 663,670 -----
  478. X             find_row_column(found_at,&row,&the_col);
  479. X             *col = the_col;
  480. X        `7D
  481. X+`20
  482. X+     S_DIFF = 0;
  483. X      C_POS = save_pos;
  484. X      C_LINE = save_line;
  485. X      if (row > 0) CURS_POS = found_at;
  486. X**************
  487. X*** 190,192
  488. X      if (row > 0) CURS_POS = found_at;
  489. X      return( row );
  490. X  `7D
  491. X--- 670,674 -----
  492. X      if (row > 0) CURS_POS = found_at;
  493. X      return( row );
  494. X  `7D
  495. X+`20
  496. X+`20
  497. $ CALL UNPACK SEARCH_C.PAT;364 1514220245
  498. $ create 'f'
  499. X*** disk$disk1:`5Bflowers.swing.vmsnet`5Dswing_38.c;2
  500. X--- disk$disk1:`5Bflowers.swing.src`5Dswing_38.c;4
  501. X**************
  502. X*** 65,71
  503. X      **  so these lines are here as an example,
  504. X      **  but we don't use them.
  505. X      **
  506. X!     most_args`5Bmost_args`5D = (char *) malloc(strlen("-csv")+1);
  507. X      strcpy(most_args`5Bnum_most_args++`5D,"-csv");
  508. X      most_args`5Bnum_most_args`5D = (char *) malloc(strlen("+d")+1);
  509. X      strcpy(most_args`5Bnum_most_args++`5D,"+d");
  510. X--- 65,71 -----
  511. X      **  so these lines are here as an example,
  512. X      **  but we don't use them.
  513. X      **
  514. X!     most_args`5Bnum_most_args`5D = (char *) malloc(strlen("-csv")+1);
  515. X      strcpy(most_args`5Bnum_most_args++`5D,"-csv");
  516. X      most_args`5Bnum_most_args`5D = (char *) malloc(strlen("+d")+1);
  517. X      strcpy(most_args`5Bnum_most_args++`5D,"+d");
  518. $ CALL UNPACK SWING_38_C.PAT;364 427501045
  519. $ create 'f'
  520. X*** disk$disk1:`5Bflowers.swing.vmsnet`5Dswing.c;2
  521. X--- disk$disk1:`5Bflowers.swing.src`5Dswing.c;6
  522. X**************
  523. X*** 1757,1760
  524. X  `09  programs derived from it:  You must freely distribute the source
  525. X  `09  code.).
  526. X `20
  527. X  */
  528. X--- 1757,1763 -----
  529. X  `09  programs derived from it:  You must freely distribute the source
  530. X  `09  code.).
  531. X `20
  532. X+     921128 Foteos Macrides (MACRIDES@SCI.WFEB.EDU, MACRIDES@WFEB2.BITNET)
  533. X+         o Upgraded MOST to 3.03FM, as described in the header of its main.
  534. Vc.
  535. X+`20
  536. X  */
  537. $ CALL UNPACK SWING_C.PAT;364 863834316
  538. $ create 'f'
  539. X*** disk$disk1:`5Bflowers.swing.vmsnet`5Dswing.h;2
  540. X--- disk$disk1:`5Bflowers.swing.src`5Dswing.h;6
  541. X**************
  542. X*** 111,117
  543. X  #define realloc`09VAXC$REALLOC_OPT
  544. X  #endif
  545. X `20
  546. X! #define VERSION`09"C SWING v3.6.3 (S.J.Brown, M.Akerberg, H.Flowers, F.Mac
  547. Vrides & others)"
  548. X  #define DEFAULT_DIR_SPEC`09"*.*"
  549. X `20
  550. X  #define AUTO_CONTINUAL_UPDATE`095
  551. X--- 111,117 -----
  552. X  #define realloc`09VAXC$REALLOC_OPT
  553. X  #endif
  554. X `20
  555. X! #define VERSION`09"C SWING v3.6.4 (S.J.Brown, M.Akerberg, H.Flowers, F.Mac
  556. Vrides & others)"
  557. X  #define DEFAULT_DIR_SPEC`09"*.*"
  558. X `20
  559. X  #define AUTO_CONTINUAL_UPDATE`095
  560. $ CALL UNPACK SWING_H.PAT;364 337474121
  561. $ create 'f'
  562. X*** disk$disk1:`5Bflowers.swing.vmsnet`5Dwindow.c;2
  563. X--- disk$disk1:`5Bflowers.swing.src`5Dwindow.c;3
  564. X**************
  565. X*** 171,176
  566. X      if (NUM_LINES <= wsize)     /* short file */
  567. X        `7B
  568. X            *line = 1;
  569. X            return(0);
  570. X        `7D
  571. X `20
  572. X--- 171,177 -----
  573. X      if (NUM_LINES <= wsize)     /* short file */
  574. X        `7B
  575. X            *line = 1;
  576. X+           most_message("Entire Buffer is in the window.",1);
  577. X            return(0);
  578. X        `7D
  579. X `20
  580. $ CALL UNPACK WINDOW_C.PAT;364 7081570
  581. $ v=f$verify(v)
  582. $ EXIT
  583.  
  584.