home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / BBSING / RBBS / RBBS37-2.LBR / RBBSUTIL.AQC / RBBSUTIL.ASC
Text File  |  2000-06-30  |  12KB  |  574 lines

  1. 100   ' RBSUTL35.BAS     A Utility program for use with RBBS35 
  2. 110   ' Revised from Version 2.7/3.1 of RBBSUTIL 
  3. 120   '
  4. 130   '              Dennis Recla 2/01/84
  5. 140   '
  6. 150   ' Removed the SYSOP recognition codes from 2.7 since this
  7. 160   ' version when used with RBBS35 is not required.
  8. 170   ' This version does contains the updates from Bill Bolton
  9. 180   ' vers 2.7 UTIL.BAS--and Ron Fowlers vers. 3.2 RBSUTL31.BAS
  10. 190   '
  11. 200   '
  12. 210   '  Program Starts here.....
  13. 220   '  
  14. 230    DEFINT A-Z
  15. 240     VERS$ = "Vers 3.5"
  16. 250    ON ERROR GOTO 2190
  17. 260    DIM M(200,2)
  18. 270    SEP$ = "=============================================="
  19. 280    CRLF$ = CHR$(13) + CHR$(10)
  20. 290    PURGED = 0:
  21.     BACKUP = 0
  22. 300    GOSUB 2260        ' BUILD MSG INDEX
  23. 310   N$ = "SYSOP":
  24.        O$ = ""
  25. 320    PRINT:
  26.         PRINT "             RBBS Utility ";VERS$
  27. 330    PRINT SEP$
  28. 340    MSGS = 1:
  29.     CALLS = MSGS + 1:
  30.     MNUM = CALLS + 1
  31. 350    PRINT:
  32.     INPUT "Command? ",PROMPT$
  33. 360    PRINT:
  34.     PRINT:
  35.     IF PROMPT$ = "" THEN
  36.         GOSUB 400:
  37.         GOTO 350
  38. 370    B$ = MID$(PROMPT$,1,1):
  39.     GOSUB 1250:
  40.     SM$ = B$:
  41.     SM = INSTR ("TFDPEBKRA",SM$):
  42.     GOSUB 380:
  43.     GOTO 350
  44. 380    IF SM = 0 THEN
  45.         400
  46. 390    ON SM GOTO 740,690,570,1310,510,2010,2440,2520
  47. 400    PRINT:
  48.     PRINT "Commands allowed are:"
  49. 410    PRINT "B   ==> build summary file from message file"
  50. 420    PRINT "D   ==> display an ascii file"
  51. 430    PRINT "E   ==> end the utility program"
  52. 440    PRINT "F   ==> list the disk directory"
  53. 450    PRINT "K   ==> kill a file"
  54. 460    PRINT "P   ==> purge the message files"
  55. 470    PRINT "R   ==> rename a file"
  56. 480    PRINT "T   ==> transfers a disk file to the message file"
  57. 490    RETURN
  58. 500 '
  59. 510 ' END OF PROGRAM
  60. 520 '
  61. 530    PRINT:
  62.     PRINT:
  63.     END
  64. 540 '
  65. 550 ' DISPLAY A FILE
  66. 560 '
  67. 570    B$ = MID$(PROMPT$,2):
  68.     IF B$ = "" THEN
  69.         INPUT "Filename? ",B$:
  70.         PRINT
  71. 580    IF B$ = "" THEN
  72.         RETURN
  73.     ELSE
  74.         GOSUB 1250:
  75.         FILN$ = B$
  76. 590    OPEN "I",1,FILN$
  77. 600    IF EOF(1) THEN
  78.         640
  79. 610    BI = ASC(INKEY$+" "):
  80.     IF BI = 19 THEN
  81.         BI = ASC(INPUT$(1))
  82. 620    IF BI = 11 THEN
  83.         PRINT:
  84.         PRINT "++ Aborted ++":
  85.         PRINT:
  86.         CLOSE:
  87.         RETURN
  88. 630    LINE INPUT #1,LIN$:
  89.     PRINT LIN$:
  90.     GOTO 600
  91. 640    CLOSE:
  92.     PRINT:
  93.     PRINT:
  94.     PRINT "++ End Of File ++":
  95.     PRINT
  96. 650    RETURN
  97. 660 '
  98. 670 ' DISPLAY DIRECTORY
  99. 680 '
  100. 690    B$ = PROMPT$:
  101.     GOSUB 1250:
  102.     IF LEN(B$) > 1 THEN
  103.         SPEC$ = MID$(B$,3)
  104.     ELSE
  105.         SPEC$ = "*.*"
  106. 700    FILES SPEC$:
  107.     PRINT:
  108.     RETURN
  109. 710 '
  110. 720 ' TRANSFER A DISK FILE
  111. 730 '
  112. 740    PRINT "Active # of msg's ";:
  113.     OPEN "R",1,"COUNTERS",5:
  114.     FIELD#1,5 AS RR$:
  115.     GET#1,MSGS:
  116.     M = VAL(RR$)
  117. 750    PRINT STR"$(M) + " "
  118. 760    PRINT "Last caller was # ";:
  119.     GET#1,CALLS:
  120.     PRINT STR$(VAL(RR$))
  121. 770    PRINT "This msg # will be ";:
  122.     GET#1,MNUM:
  123.     U = VAL(RR$):
  124.     PRINT STR$(U + 1):
  125.     CLOSE
  126. 780 '
  127. 790 ' ***ENTER A NEW MESSAGE***
  128. 800 '
  129. 810    IF NOT PURGED THEN
  130.         PRINT "Files must be purged before messages can be added":
  131.         RETURN
  132. 820    OPEN "R",1,"COUNTERS",5:
  133.     PRINT "Msg # will be ";:
  134.     FIELD#1,5 AS RR$:
  135.     GET#1,MNUM:
  136.     V = VAL(RR$)
  137. 830    PRINT STR$(V + 1):
  138.     CLOSE
  139. 840    INPUT "Message file name? ",B$:
  140.     GOSUB 1250:
  141.     FIL$ = B$
  142. 850    INPUT "Todays date (DD/MM|HH/MM)?",B$:
  143.     GOSUB 1250:
  144.     IF B$ = "" THEN
  145.         D$ = DT$
  146.     ELSE
  147.         D$ = B$
  148. 860    INPUT "Who to (C/R for ALL)?";B$:
  149.     GOSUB 1250:
  150.     IF B$ = "" THEN
  151.         T$ = "ALL"
  152.     ELSE
  153.         T$ = B$
  154. 870    INPUT "Subject?",B$:
  155.     GOSUB 1250:
  156.     K$ = B$
  157. 880    INPUT "Password?",B$:
  158.     GOSUB 1250:
  159.     PW$ = B$:
  160.     IF T$ = "ALL" AND LEFT$(PW$,1) = "*" THEN
  161.         PRINT CHR$(7);"You CANNOT use '*' with ALL.":
  162.         GOTO 880
  163. 890    F = 0            ' F IS MESSAGE LENGTH
  164. 900    PRINT "Updating counters":
  165.     OPEN "R",1,"COUNTERS",5:
  166.     FIELD#1,5 AS RR$
  167. 910    GET#1,MNUM:
  168.     LSET RR$ = STR$(VAL(RR$) + 1):
  169.     PUT#1,MNUM
  170. 920    GET#1,MSGS:
  171.     LSET RR$ = STR$(VAL(RR$) + 1):
  172.     PUT#1,MSGS:
  173.     CLOSE#1
  174. 930    PRINT "Updating msg file":
  175.     OPEN "R",1,"MESSAGES",65:
  176.     RL = 65
  177. 940    FIELD#1,65 AS RR$
  178. 950    RE = MX + 7:
  179.     F = 0
  180. 960    OPEN "I",2,FIL$:
  181.     IF EOF(2) THEN
  182.         PRINT "File empty.":
  183.         CLOSE#1:
  184.         CLOSE#2:
  185.         END
  186. 970    IF EOF(2) THEN
  187.         S$ = "9999":
  188.         GOSUB 1260:
  189.         PUT #1,RE:
  190.         CLOSE #2:
  191.         GOTO 1010
  192. 980    LINE INPUT #2,S$
  193. 990    IF LEN(S$) > 63 THEN
  194.         S$ = LEFT$(S$,63)
  195. 1000    PRINT S$:
  196.     GOSUB 1260:
  197.     PUT #1,RE:
  198.     RE = RE + 1:
  199.     F = F + 1:
  200.     GOTO 970
  201. 1010    RE = MX + 1
  202. 1020    S$ = STR$(V + 1):
  203.     GOSUB 1260:
  204.     PUT#1,RE
  205. 1030    RE = RE + 1:
  206.     S$ = D$:
  207.     GOSUB 1260:
  208.     PUT#1,RE
  209. 1040    RE = RE + 1:
  210.     S$ = N$ + " " + O$:
  211.     GOSUB 1260:
  212.     PUT#1,RE
  213. 1050    RE = RE + 1:
  214.     S$ = T$:
  215.     GOSUB 1260:
  216.     PUT#1,RE
  217. 1060    RE = RE + 1:
  218.     S$ = K$:
  219.     GOSUB 1260:
  220.     PUT#1,RE:
  221.     RE = RE + 1:
  222.     S$ = STR$(F):
  223.     GOSUB 1260:
  224.     PUT#1,RE
  225. 1070    CLOSE #1
  226. 1080    IF PW$ <> "" THEN
  227.         PW$ = ";" + PW$
  228. 1090    PRINT "Updating summary file."
  229. 1100    OPEN "R",1,"SUMMARY",30:
  230.     RE = 1:
  231.     FIELD#1,30 AS RR$:
  232.     RL = 30
  233. 1110    RE = MZ * 6 + 1:
  234.     S$ = STR$(V + 1) + PW$:
  235.     GOSUB 1260:
  236.     PUT#1,RE
  237. 1120    RE = RE + 1:
  238.     S$ = D$:
  239.     GOSUB 1260:
  240.     PUT#1,RE
  241. 1130    RE = RE + 1:
  242.     S$ = N$ + " " + O$:
  243.     GOSUB 1260:
  244.     PUT#1,RE
  245. 1140    RE = RE + 1:
  246.     S$ = T$:
  247.     GOSUB 1260:
  248.     PUT#1,RE
  249. 1150    RE = RE + 1:
  250.     S$ = K$:
  251.     GOSUB 1260:
  252.     PUT#1,RE
  253. 1160    RE = RE + 1:
  254.     S$ = STR$(F):
  255.     GOSUB 1260:
  256.     PUT#1,RE
  257. 1170    RE = RE + 1:
  258.     S$ = " 9999":
  259.     GOSUB 1260:
  260.     PUT#1,RE
  261. 1180    CLOSE#1
  262. 1190    MX = MX + F + 6:
  263.     MZ = MZ + 1:
  264.     M(MZ,1) = V + 1:
  265.     M(MZ,2) = F
  266. 1200    U = U + 1
  267. 1210    RETURN
  268. 1220 '
  269. 1230 ' Convert the string B$ to upper case
  270. 1240 '
  271. 1250    FOR ZZ=1 TO LEN(B$):
  272.         MID$(B$,ZZ,1) = CHR$(ASC(MID$(B$,ZZ,1)) + 32 * (ASC(MID$(B$,ZZ,1)) > 96)):
  273.     NEXT ZZ:
  274.     RETURN
  275. 1260 '
  276. 1270 ' FILL AND STORE DISK RECORD
  277. 1280 '
  278. 1290    LSET RR$ = LEFT$(S$ + SPACE$(RL - 2),RL - 2) + CHR$(13) + CHR$(10)
  279. 1300    RETURN
  280. 1310 '
  281. 1320 ' PURGE KILLED MESSAGES FROM FILES
  282. 1330 '
  283. 1340    IF PURGED THEN
  284.         PRINT "Files already purged.":
  285.         RETURN
  286. 1342 INPUT "Create Archive File <Y or N> ?";CRF$
  287. 1344 IF CRF$<>"Y" THEN GOTO 1410
  288. 1350    INPUT "Today's date (DD/MM/YY) ?",DATE$
  289. 1360    IF LEN(DATE$) > 8 THEN
  290.         PRINT "Must be less then 8 characters.":
  291.         GOTO 1350
  292. 1370    IF DATE$ = "" THEN
  293.         DATE$ = DT$
  294. 1380    OPEN "R",1,DATE$+".ARC"
  295. 1390    IF LOF(1) > 0 THEN
  296.         PRINT "Archive file: ";DATE$ + ".ARC";" exists.":
  297.         CLOSE:
  298.         RETURN
  299. 1400    CLOSE
  300. 1410    MSGN = 1:
  301.     INPUT "Renumber messages?",PK$:
  302.     PK$ = MID$(PK$,1,1)
  303. 1420    IF PK$ = "y" THEN
  304.         PK$ = "Y"
  305. 1430    IF PK$ <> "Y" THEN
  306.         1460
  307. 1440    INPUT "Message number to start (CR=1)?",MSG$:
  308.     IF MSG$ = "" THEN
  309.         MSG$="1"
  310. 1450    MSGN = VAL(MSG$):
  311.     IF MSGN = 0 THEN
  312.         PRINT "Invalid msg #.":
  313.         RETURN
  314. 1460    PRINT "Purging summary file...":
  315.     OPEN "R",1,"SUMMARY",30
  316. 1470    FIELD#1,30 AS R1$
  317. 1480    R1 = 1
  318. 1490    OPEN "R",2,"$SUMMARY.$$$",30
  319. 1500    FIELD#2,30 AS R2$
  320. 1510    R2 = 1
  321. 1520    PRINT SEP$:
  322.     GET#1,R1:
  323.     IF EOF(1) THEN
  324.         1650
  325. 1530    IF VAL(R1$) = 0 THEN
  326.         R1 = R1 + 6:
  327.         PRINT "Deletion":
  328.         GOTO 1520
  329. 1540    IF PK$ = "Y" AND VAL(R1$) < 9999 THEN
  330.         IF INSTR(R1$,";") THEN
  331.             PASS$ = MID$(R1$,INSTR(R1$,";"),27)
  332.         ELSE
  333.             PASS$ = SPACE$(28)
  334. 1550    IF PK$ = "Y" AND VAL(R1$) < 9999 THEN
  335.         LSET R2$ = LEFT$(STR$(MSGN) + PASS$,28) + CHR$(13) + CHR$(10):
  336.         MSGN = MSGN + 1:
  337.         GOTO 1570
  338. 1560    LSET R2$ = R1$
  339. 1570    PUT #2,R2
  340. 1580    PRINT LEFT$(R2$,28)
  341. 1590    IF VAL(R1$) > 9998 THEN
  342.         1650
  343. 1600    FOR I = 1 TO 5
  344. 1610        R1 = R1 + 1:
  345.         R2 = R2 + 1:
  346.         GET#1,R1:
  347.         LSET R2$ = R1$:
  348.         PUT#2,R2
  349. 1620        PRINT LEFT$(R2$,28)
  350. 1630    NEXT I
  351. 1640    R1 = R1 + 1:
  352.     R2 = R2 + 1:
  353.     GOTO 1520
  354. 1650    CLOSE:
  355.     OPEN "O",1,"SUMMARY.BAK":
  356.     CLOSE:
  357.     KILL "SUMMARY.BAK":
  358.     NAME "SUMMARY" AS "SUMMARY.BAK":
  359.     NAME "$SUMMARY.$$$" AS "SUMMARY"
  360. 1660    PRINT "Purging message file...":
  361.     MSGN = VAL(MSG$)
  362. 1670    OPEN "R",1,"MESSAGES",65:
  363.     FIELD #1,65 AS R1$
  364. 1680    OPEN "R",2,"$MESSAGS.$$$",65:
  365.     FIELD #2,65 AS R2$
  366. 1690 R1=1:KIL=0:IF CRF$="Y" THEN OPEN "O",3,DATE$+".ARC"
  367. 1700    R1 = 1:
  368.     R2 = 1
  369. 1710    PRINT SEP$:
  370.     GET #1,R1:
  371.     IF EOF(1) THEN
  372.          1910
  373. 1720 IF VAL(R1$)=0 THEN KIL=-1:GOTO 1780
  374. 1730    KIL = 0
  375. 1740    IF PK$ = "Y" AND VAL(R1$) < 9999 THEN
  376.         IF INSTR(R1$,";") THEN
  377.             PASS$ = MID$(R1$,INSTR(R1$,";"),62)
  378.         ELSE
  379.             PASS$ = SPACE$(62)
  380. 1750    IF PK$ = "Y" AND VAL(R1$) < 9999 THEN
  381.         LSET R2$ = LEFT$(STR$(MSGN) + PASS$,63) + CHR$(13) + CHR$(10):
  382.         MSGN = MSGN + 1:
  383.         PRINT LEFT$(R2$,63):
  384.         GOTO 1770
  385. 1760    LSET R2$ = R1$:
  386.     PRINT LEFT$(R2$,6)
  387. 1770    PUT #2,R2
  388. 1780 IF KIL THEN GOSUB 2360:IF CRF$="Y" THEN GOSUB 2800
  389. 1790    IF VAL(R1$) > 9998 THEN
  390.         1910
  391. 1800    FOR I = 1 TO 5
  392. 1810        R1 = R1 + 1:
  393.         IF NOT KIL THEN
  394.             R2 = R2 + 1
  395. 1820 GET #1,R1:IF KIL THEN GOSUB 2360:IF CRF$="Y" THEN GOSUB 2800 ELSE
  396. GOTO 1840:GOTO 1840
  397. 1830        LSET R2$ = R1$:
  398.         PUT #2,R2:
  399.         PRINT LEFT$(R2$,63)
  400. 1840    NEXT I
  401. 1850    FOR I = 1 TO VAL(R1$):
  402.         R1 = R1 + 1:
  403.         IF NOT KIL THEN
  404.             R2 = R2 + 1
  405. 1860 GET #1,R1:IF KIL THEN GOSUB 2360:IF CRF$="Y" THEN GOSUB 2800 ELSE
  406. GOTO 1880:GOTO 1880
  407. 1870        LSET R2$ = R1$:
  408.         PUT #2,R2:
  409.         PRINT LEFT$(R2$,63)
  410. 1880    NEXT I:
  411.     R1 = R1 + 1:
  412.     IF NOT KIL THEN
  413.         R2 = R2 + 1
  414. 1890    GOTO 1710
  415. 1900 '
  416. 1910    CLOSE:
  417.     OPEN "O",1,"MESSAGES.BAK":
  418.     CLOSE:
  419.     KILL "MESSAGES.BAK":
  420.     NAME "MESSAGES" AS "MESSAGES.BAK":
  421.     NAME "$MESSAGS.$$$" AS "MESSAGES"
  422. 1920    PRINT "Updating counters..."
  423. 1930    OPEN "O",1,"COUNTERS.BAK":
  424.     CLOSE:
  425.     KILL "COUNTERS.BAK"
  426. 1940    OPEN "R",1,"COUNTERS",15:
  427.     FIELD #1,10 AS C1$,5 AS C2$
  428. 1950    OPEN "R",2,"COUNTERS.BAK",15:
  429.     FIELD #2,15 AS R2$
  430. 1960    GET #1,1:
  431.     LSET R2$ = C1$ + C2$:
  432.     PUT #2,1
  433. 1970    IF PK$ = "Y" THEN
  434.         LSET C2$ = STR$(MSGN - 1):
  435.         PUT #1,1
  436. 1980    CLOSE
  437. 1990    PURGED = -1:
  438.     GOSUB 2260:
  439.     RETURN
  440. 2000 '
  441. 2010 ' BUILD SUMMARY FILE FROM MESSAGE FILE
  442. 2020 '
  443. 2030    PRINT "Building summary file..."
  444. 2040    OPEN "O",1,"SUMMARY.BAK":
  445.     CLOSE:
  446.     KILL "SUMMARY.BAK"
  447. 2050    OPEN "R",1,"MESSAGES",65:
  448.     FIELD #1,65 AS R1$:
  449.     R1 = 1
  450. 2060    OPEN "R",2,"SUMMARY.$$$",30:
  451.     FIELD #2,30 AS R2$:
  452.     R2 = 1
  453. 2070    PRINT SEP$
  454. 2080    FOR I = 1 TO 6
  455. 2090        GET #1,R1:
  456.         IF EOF(1) THEN
  457.             2140
  458. 2100        LSET R2$ = LEFT$(R1$,28) + CRLF$:
  459.         PUT #2,R2
  460. 2110        R1 = R1 + 1:
  461.         R2 = R2 + 1:
  462.         PRINT LEFT$(R2$,28):
  463.         IF EOF(1) THEN
  464.             2140
  465. 2120        IF I = 1 THEN
  466.             IF VAL(R1$) > 9998 THEN
  467.                 2140
  468. 2130    NEXT I:
  469.     R1 = R1 + VAL(R1$):
  470.     GOTO 2070
  471. 2140    CLOSE:
  472.     NAME "SUMMARY" AS "SUMMARY.BAK":
  473.     NAME "SUMMARY.$$$" AS "SUMMARY"
  474. 2150    PRINT "Summary file built.":
  475.     RETURN
  476. 2160 '
  477. 2170 ' Error handlers
  478. 2180 '
  479. 2190    IF (ERL = 700) AND (ERR = 53) THEN
  480.         PRINT "File not found.":
  481.         RESUME 350
  482. 2200    IF (ERL = 590) AND (ERR = 53) THEN
  483.         PRINT "File not found.":
  484.         CLOSE:
  485.         RESUME 650
  486. 2210    IF (ERL = 2590) AND (ERR = 53) THEN
  487.         PRINT "You cannot rename a file that doesn't already exist":
  488.         RESUME 350
  489. 2220    IF (ERL = 2490) AND (ERR = 53) THEN
  490.         PRINT "That file doesn't exist so you can't erase it":
  491.         RESUME 350
  492. 2230    PRINT "Error number ";ERR;" in line number ";ERL
  493. 2240    RESUME 350
  494. 2250 '
  495. 2260 ' build message index
  496. 2270 '
  497. 2280    MX = 0:
  498.     MZ = 0
  499. 2290    OPEN "R",1,"SUMMARY",30:
  500.     RE = 1:
  501.     FIELD#1,28 AS RR$
  502. 2300    GET#1,RE:
  503.     IF EOF(1) THEN
  504.         2340
  505. 2310    G = VAL(RR$):
  506.     MZ = MZ + 1:
  507.     M(MZ,1) = G:
  508.     IF G = 0 THEN
  509.         2330
  510. 2320    IF G > 9998 THEN
  511.         MZ = MZ - 1:
  512.         GOTO 2340
  513. 2330    GET#1,RE + 5:
  514.     M(MZ,2) = VAL(RR$):
  515.     MX = MX + M(MZ,2) + 6:
  516.     RE = RE + 6:
  517.     GOTO 2300
  518. 2340    CLOSE:
  519.     RETURN
  520. 2350 '
  521. 2360 ' unpack record
  522. 2365 IF CNS$="Y" THEN 2380 ELSE RETURN
  523. 2370 '
  524. 2380    ZZ = LEN(R1$) - 2
  525. 2390    WHILE MID$(R1$,ZZ,1) = " "
  526. 2400    ZZ = ZZ - 1:
  527.     IF ZZ = 1 THEN
  528.         2420
  529. 2410    WEND
  530. 2420    KL$ = LEFT$(R1$,ZZ)
  531. 2430    RETURN
  532. 2440    '
  533. 2450    ' Kill (Erase) a file
  534. 2460    '
  535. 2470    B$ = MID$(PROMPT$,3):
  536.     IF B$ = "" THEN
  537.         INPUT "Filename? ",B$:
  538.         PRINT
  539. 2480    IF B$ = "" THEN
  540.         RETURN
  541.     ELSE
  542.         GOSUB 1250:
  543.         FILN$ = B$
  544. 2490    KILL FILN$
  545. 2500    PRINT
  546. 2510    RETURN
  547. 2520    '
  548. 2530    ' Rename a file
  549. 2540    '
  550. 2550    INPUT "Existing Filename? ",B$:
  551.     PRINT
  552. 2560    IF B$ = "" THEN
  553.         RETURN
  554.     ELSE
  555.         GOSUB 1250:
  556.         EFILN$ = B$
  557. 2570    PRINT:
  558.     INPUT "New Filename? ",B$:
  559.     PRINT
  560. 2580    IF B$ = "" THEN
  561.         RETURN
  562.     ELSE
  563.         GOSUB 1250:
  564.         NFILN$ = B$
  565. 2590    NAME EFILN$ AS NFILN$
  566. 2600    PRINT:
  567.     RETURN
  568. 2800 PRINT #3,KL$:RETURN
  569. EN
  570.         RETURN
  571.     ELSE
  572.         GOSUB 1250:
  573.         NFILN$ = B$
  574. 2590    NAME