home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / shade2.zip / SHADE2.PRG
Text File  |  1989-02-23  |  20KB  |  636 lines

  1. *******************************************************************************
  2. *    Shade2.prg
  3. *
  4. *
  5. *
  6. *
  7. *    the following program was written as part of a larger system for a client
  8. *    of mine. I extracted a portion of the print routine to show some of the
  9. *    nice tricks the hp laserjet series II is capable of.
  10. *
  11. *    Shaded Boxes are an easy answer to readability questions when you are
  12. *    creating a densly formated Form. With experimentation boxes & fill areas
  13. *    can be shaped & shaded with very little trouble.
  14. *
  15. *    The only real problem I ran into with this was implementing it on a
  16. *    3com network - using either CTRL-ALT-* from the keyboard or issuing a
  17. *    ESC E (printer reset) from within the program had predictable and unhappy
  18. *    consequences for subsequent pages printed in a particular job stream
  19. *
  20. *    I got the inspiration for this from a file uploaded by:
  21. *
  22. *                                 Chris Dunford
  23. *                            The Cove Software Group
  24. *                             CompuServe 76703,2002
  25. *
  26. *                                 Prepared for:
  27. *                               CompuServe IBMNET
  28. *                                    02/01/89
  29. *
  30. *
  31. *
  32. *    Since he explains the process much better than I could. I have included
  33. *    his file (shade.txt in DL 0 of IBMHW Forum) as part of the comments
  34. *    following.
  35. *
  36. *
  37. *    if you have any questions or comments you can reach me at
  38. *
  39. *                                 Kevin Loucks
  40. *                             CompuServe 76276,1333
  41. *
  42. *
  43. *
  44. *******************************************************************************
  45. *___________________SHADE.TXT from DL 0 of IBMHW Forum_________________________
  46. *                       "Green-bar" paper on a LaserJet II
  47. *                       ----------------------------------
  48. *
  49. *    This document explains how to shade every other line of a LaserJet
  50. *    II-printed report so that the result is similar to that produced on
  51. *    "green bar" paper stock.  This makes it easier to read reports such as
  52. *    data file listings, etc., where each line is a record.
  53. *
  54. *
  55. *    Printer functions required
  56. *    --------------------------
  57. *    The technique involves two basic LJ functions: cursor positioning and
  58. *    rectangular area filling.  These are documented in the "LaserJet Series
  59. *    II Printer Technical Reference Manual", available at extra cost from
  60. *    Hewlett-Packard (Part No. 33440-90905).
  61. *
  62. *    The area filling functions allow you to define a rectangular box and
  63. *    fill it with the pattern or shading level of your choice.  We will use a
  64. *    box that is 8.5" wide and 1/6" high--the full width of the paper by one
  65. *    line high.  It is then "filled" by shading.
  66. *
  67. *    The cursor positioning functions move the "cursor", which is the active
  68. *    printing location--where the next character will print.  It is analagous
  69. *    to a screen cursor.  In essence, we will start at the upper left corner
  70. *    of the page and shade every other line by moving the cursor down two
  71. *    lines after each fill.
  72. *
  73. *
  74. *    Algorithm
  75. *    ---------
  76. *    The basic algorithm is:
  77. *
  78. *        Save the "cursor" position
  79. *        Move the cursor to the upper left corner of the page
  80. *        Define the box characteristics
  81. *        Do 30 times
  82. *            Shade the box
  83. *            Move the cursor down two lines
  84. *        End do
  85. *        Restore the initial cursor position
  86. *
  87. *    At the end of this process, every other line has been shaded.  The
  88. *    character data is then sent to the printer as usual for printing.
  89. *
  90. *
  91. *    Specific functions used
  92. *    -----------------------
  93. *    "Ec" is an ASCII ESC character (decimal code 27, hex 1B).  "#" is a
  94. *    variable value that is replaced by a numeric parameter (in ASCII: for
  95. *    example, "50" is transmitted by sending the ASCII characters "5" and
  96. *    "0").
  97. *
  98. *    Note: the LJ-II commands show below have been simplified somewhat, i.e.,
  99. *    the definitions shown don't necessarily convey all possible formats of
  100. *    the commands given.
  101. *
  102. *    1. Cursor positioning
  103. *
  104. *        a. Save/restore cursor position
  105. *
  106. *                Ec&f0S
  107. *
  108. *           This saves the current cursor position by pushing it onto a LIFO
  109. *           stack.  It can be restored (popped) by the control string
  110. *
  111. *                Ec&f1S
  112. *
  113. *            The stack is large enough to save 20 cursor positions.
  114. *
  115. *        b. Set cursor position (horizontal absolute, by dots)
  116. *
  117. *                Ec*p#X
  118. *
  119. *           The variable value # is the horizontal dot number.  The
  120. *           leftmost dot on a row is dot 0, so the control string
  121. *
  122. *                Ec*p0X
  123. *
  124. *           moves the cursor to the left side of the page.
  125. *
  126. *        c. Set cursor position (vertical absolute, by dots)
  127. *
  128. *                Ec*p#Y
  129. *
  130. *           The variable value # is the vertical dot number.  The topmost
  131. *           dot row on the page is row 0.  To put the cursor at the top of
  132. *           the page:
  133. *
  134. *                Ec*p0Y
  135. *
  136. *        d. Set cursor position (vertical relative, by rows)
  137. *
  138. *                Ec&a#R
  139. *
  140. *           The variable value is preceded by a plus or minus sign to
  141. *           indicate whether the cursor is to be moved up (-) or down (+) the
  142. *           specified number of rows.  This moves the cursor down two rows:
  143. *
  144. *                Ec&a+2R
  145. *
  146. *
  147. *    2. Area filling
  148. *
  149. *        a. Define box width (in dots)
  150. *
  151. *                Ec*c#A
  152. *
  153. *           To define a box 8.5" wide (8.5 x 300 = 2550 dots):
  154. *
  155. *                Ec*c2550A
  156. *
  157. *            Note that the printer will clip the box at the left and right
  158. *            margins.
  159. *
  160. *        b. Define box height (in dots)
  161. *
  162. *                Ec*c#B
  163. *
  164. *           To define a box 1/6" (one line) high:
  165. *
  166. *                Ec*c50B
  167. *
  168. *            1/6" at 300 dots per inch is 50 dots.
  169. *
  170. *        c. Define shading level
  171. *
  172. *                Ec*c#G
  173. *
  174. *            The variable value # represents a shading level from 2% to 100%.
  175. *            The printer can actually print eight different levels, and there
  176. *            are some discrepancies in the HP manual regarding these levels.
  177. *            However, 2, 10, 15, 30, 45, 70, 90, and 100% would seem to
  178. *            represent the real levels.  To set 15% shading:
  179. *
  180. *                Ec*c15G
  181. *
  182. *            I suggest 10% or 15% shading for the "green bar" paper.
  183. *
  184. *        d. Print box as currently defined
  185. *
  186. *                Ec*c2P
  187. *
  188. *           This control string performs the gray scale fill using the area
  189. *           dimensions and fill level currently defined.  The box is printed
  190. *           at the current cursor position; the cursor position is not
  191. *           changed.  As always, no physical printing occurs until the page
  192. *           is filled with text data or a formfeed is received.
  193. *
  194. *
  195. *    Combining functions
  196. *    -------------------
  197. *    The LJ-II allows some concatenation of control strings.  Strings may be
  198. *    concatenated if the first two characters following the ESC are the same:
  199. *
  200. *            Ec*p#X
  201. *            Ec*p#Y
  202. *
  203. *    If strings are combined, the trailing character for all control
  204. *    strings except the last one is lowercase, and the first three characters
  205. *    are omitted after the first string.  For example, the three strings
  206. *
  207. *            Ec*c2550A
  208. *            Ec*c50B
  209. *            Ec*c15G
  210. *
  211. *    can be combined into one string as follows:
  212. *
  213. *            Ec*c2550a50b15G
  214. *
  215. *
  216. *    Margins etc.
  217. *    ------------
  218. *    This document assumes that you're using 8.5 x 11 paper at 60 lines per
  219. *    page (i.e., with the default top and bottom margins), six lines per
  220. *    inch, in portrait mode.  If you use anything else, you'll need to adjust
  221. *    some of the parameters.
  222. *
  223. *    The left/right margins have no effect on the printing of the shaded
  224. *    rectangles, but the top margin and text length do.  In other words, dot
  225. *    column 0 is an absolute position on the page, but dot row 0 is relative
  226. *    to the top margin.  If you print shaded boxes beyond the bottom of the
  227. *    text area, a page eject will occur (and you'll have a shaded page
  228. *    with no text).
  229. *
  230. *
  231. *    Sample code
  232. *    -----------
  233. *    Each of the following code samples sends the following control sequences
  234. *    to the printer:
  235. *
  236. *        Ec&f0S                  ; Save curpos
  237. *        Ec*p0x0Y                ; Cursor to (0,0)
  238. *        Ec*c2550a50b10G         ; Define box: 8.5" x 1/6", 10% shading
  239. *        (30 times:)
  240. *            Ec*c2P              ; Print box
  241. *            Ec&a+2R             ; Move down two lines
  242. *        Ec&f1S                  ; Restore curpos
  243. *
  244. *    Some of these have been combined for greater efficiency.
  245. *
  246. *    This code must be executed for each page printed, of course.  If you are
  247. *    going to be printing many pages, it may be faster (especially in dBASE!)
  248. *    to contatenate 30 instances of Ec*c2PEc&a+2R into one string (and print
  249. *    it once per page) than to send the string to the printer thirty times
  250. *    for each page.
  251. *
  252. *
  253. *    BASIC:
  254. *        100 EC$ = CHR$(27)
  255. *        110 LPRINT EC$ + "&f0S" + EC$ + "*p0x0Y" + EC$ + "*c2550a50b10G";
  256. *        120 FOR I = 1 TO 30: LPRINT EC$ + "*c2P" + EC$ + "&a+2R";: NEXT
  257. *        130 LPRINT EC$ + "&f1S";
  258. *
  259. *    C:
  260. *        int i;
  261. *        fprintf (stdprn, "\033&f0S\033*p0x0Y\033*c2550a50b10G");
  262. *        for (i=1; i <= 30; i++)
  263. *            fprintf (stdprn, "\033*c2P\033&a+2R");
  264. *        fprintf (stdprn, "\033&f1S");
  265. *
  266. *    dBASE III+:
  267. *        set print on
  268. *        set console off
  269. *        Ec = chr(27)
  270. *        ?? Ec + "&f0S" + Ec + "*p0x0Y" + Ec + "*c2550a50b10G"
  271. *        i = 1
  272. *        do while i <= 30
  273. *            ?? Ec + "*c2P" + Ec + "&a+2R"
  274. *            i = i+1
  275. *        enddo
  276. *        ?? Ec + "&f1S"
  277. *        set print off
  278. *        set console on
  279. *
  280. *    dBASE IV:
  281. *        ??? "{ESC}&f0S{ESC}*p0x0Y{ESC}*c2550a50b10G"
  282. *        i = 1
  283. *        do while i <= 30
  284. *            ??? "{ESC}*c2P{ESC}&a+2R"
  285. *            i = i+1
  286. *        enddo
  287. *        ??? "{ESC}&f1S"
  288. *
  289. *    REXX:
  290. *        Ec = '1B'x
  291. *        call charout 'prn',Ec'&f0S'Ec'*p0x0Y'Ec'*c2550a50b10G'
  292. *        do 30
  293. *            call charout 'prn',Ec'*c2P'Ec'&a+2R'
  294. *        end
  295. *        call charout 'prn',Ec'&f1S'
  296. *
  297. *
  298. *                ===============================================
  299. *
  300. *                                  Document by:
  301. *                                 Chris Dunford
  302. *                            The Cove Software Group
  303. *                                  PO Box 1072
  304. *                               Columbia, MD 21044
  305. *                                  301/992-9371
  306. *                             CompuServe 76703,2002
  307. *
  308. *                                 Prepared for:
  309. *                               CompuServe IBMNET
  310. *                                    02/01/89
  311. *
  312. *
  313. ******************************************************************************
  314. set talk off
  315. mttype    = 'NEW CUSTOMER Transmittal'
  316. mheader   = "Working Copy"
  317. prtcopies = .t.
  318. t_id      = "89000122"
  319. t_name    = "American Factors Inc"
  320. t_contac  = "Danforth Qualye"
  321. t_addr    = "1600 Pensylvania"
  322. t_cphone  = "(612) 871-9461"
  323. t_city    = "DC"
  324. t_state   = "DC"
  325. t_tzone   = "E"
  326. t_zip     = "01100 "
  327. t_access  = 'D'
  328. t_o_names = "joe and ---------------------------- susy"
  329. t_name1   = "Mutual investments"
  330. t_serv1   = "Monthly"
  331. t_com1    = "first comment"
  332. t_com2    = "2nd"
  333. t_com3    = "3rd"
  334. t_modem   = "Hayes"
  335. t_eqbaud  = "1200"
  336. t_hdware  = "ps/2 70"
  337. t_sftware = "procomm"
  338. t_accph   = "(612) 871-9461"
  339. t_status  = "OP"
  340. t_srep    = "VVV"
  341. t_sadmn   = "WWW"
  342. t_pmngr   = "XXX"
  343. t_padmn   = "YYY"
  344. t_padmn_a = "02/03/89"
  345. t_cas     = "ZZZ"
  346. t_cas_a   = "02/03/89"
  347.  
  348. *ROCEDURE tmprt
  349. *ARAMETERS mheader,prtcopies
  350. mline = REPLICATE("─",80)
  351. mline1 = '╔'+REPLICATE("═",78)+"╗"
  352. mline2 = '╚'+REPLICATE("═",78)+"╝"
  353. mline3 = '╟'+REPLICATE("─",78)+"╢"
  354. muline = REPLICATE("_",80)
  355. mcopies = 1
  356. @ 0,0 clear
  357. IF prtcopies
  358.    @ 24,0 SAY SPACE(80)
  359.    @ 24,5 SAY "How many copies would you like?  " GET mcopies PICTURE '9'
  360.    READ
  361. ELSE
  362.    mcopies = 1
  363. ENDIF
  364. IF mcopies = 0
  365.    RETURN
  366. ENDIF
  367. mheader1 = "Your Company"
  368. mheader  = "Transmittal: "  + TRIM(UPPER(mheader))
  369. mttype =  TRIM(mttype)
  370. mcol = (78 - LEN(mheader))/2
  371. ec = CHR(27)
  372. fillprt = "2g2P"
  373. SET CONSOLE OFF
  374. SET DEVICE TO PRINT
  375. SET PRINT ON
  376. ??  ec + "&l0O"
  377. ??  ec + "&l2A"
  378. ??  ec + "&l6d"
  379. ??  ec + "&l"+LTRIM(STR(mcopies,1,0))+'X'
  380. ??  ec + "*p0x0Y" + ec + "&f0S"
  381.  
  382. *   position for transmittal type
  383. ??  ec + "*p26x140Y"
  384. ??  ec + "*c2350a90b" + fillprt
  385.  
  386. fillprt = "15g2P"
  387. *   position for custof bank etc
  388. ??  ec + "*p300x265Y"
  389. ??  ec + "*c1400a150b"+ fillprt
  390.  
  391. *   position for date entered
  392. ??  ec + "*p2100x265Y"
  393. ??  ec + "*c240a50b"  + fillprt
  394.  
  395. *   position for transmittal id
  396. ??  ec + "*p2100x360Y"
  397. ??  ec + "*c270a50b"  + fillprt
  398.  
  399. *   position for cust name, contact,addr
  400. ??  ec + "*p300x515Y"
  401. ??  ec + "*c900a150b" + fillprt
  402.  
  403. *   position for phone numbers
  404. ??  ec + "*p1925x615Y"
  405. ??  ec + "*c445a150b" + fillprt
  406.  
  407. *   position for city zip
  408. ??  ec + "*p300x665Y"
  409. ??  ec + "*c600a100b" + fillprt
  410.  
  411. *   position for state time zone
  412. ??  ec + "*p1200x670Y"
  413. ??  ec + "*c285a100b" + fillprt
  414.  
  415. *   position for effective date
  416. ??  ec + "*p450x965Y"
  417. ??  ec + "*c260a50b"  + fillprt
  418.  
  419. *   position for expires date
  420. ??  ec + "*p1200x965Y"
  421. ??  ec + "*c260a50b"  + fillprt
  422.  
  423. *   position for oper names
  424. ??  ec + "*p30x1115Y"
  425. ??  ec + "*c2325a50b" + fillprt
  426.  
  427. *   position for acct, name, plan, base, item
  428. ??  ec + "*p30x1260Y"
  429. ??  ec + "*c2325a450b"+ fillprt
  430.  
  431. *   position for comments
  432. ??  ec + "*p300x1810Y"
  433. ??  ec + "*c1830a150b"+ fillprt
  434.  
  435. *   position for equipment
  436. ??  ec + "*p30x2110Y"
  437. ??  ec + "*c2325a50b" + fillprt
  438.  
  439. *   position for salesrep
  440. ??  ec + "*p150x2265Y"
  441. ??  ec + "*c90a50b"   + fillprt
  442.  
  443. *   position for sales admin
  444. ??  ec + "*p450x2265Y"
  445. ??  ec + "*c90a50b"   + fillprt
  446.  
  447. *   position for prod  manager
  448. ??  ec + "*p720x2265Y"
  449. ??  ec + "*c90a50b"   + fillprt
  450.  
  451. *   position for prod admin
  452. ??  ec + "*p1050x2265Y"
  453. ??  ec + "*c90a50b"   + fillprt
  454.  
  455. *   position for CAS id
  456. ??  ec + "*p1800x2265Y"
  457. ??  ec + "*c90a50b"   + fillprt
  458.  
  459. *   position for prod approve
  460. ??  ec + "*p1410x2265Y"
  461. ??  ec + "*c240a50b"  + fillprt
  462.  
  463. *   position for CAS  approve
  464. ??  ec + "*p2130x2265Y"
  465. ??  ec + "*c240a50b"  + fillprt
  466.  
  467. ??  ec + "*p0x0Y" + ec + "&f0S"
  468. ??  ec + "(s16.66H"
  469. @  6, 0  SAY "Customer of "
  470. @  6,102 SAY "Date entered: "
  471. @  7, 0  SAY "Credit Ref...:"
  472. @  8, 0  SAY "Department...:"
  473. @  8,100 SAY "Transmittal ID:"
  474. @ 11, 0  SAY "Customer Name: "
  475. @ 12, 6  SAY "Contact:"
  476. @ 12,102 SAY "Phone Numbers"
  477. @ 13, 6  SAY "Address:"
  478. @ 13,87  SAY "Customer Phone #"
  479. @ 14, 6  SAY "City...:"
  480. @ 14,58  SAY "State:"
  481. @ 14,87  SAY "Customer Fax #"
  482. @ 15, 6  SAY "Zip....:"
  483. @ 15,54  SAY "Time Zone:"
  484. @ 15,87  SAY "Sales Rep  #"
  485. @ 20, 2  SAY "Service Effective "
  486. @ 20,47  SAY "Service Expires"
  487. @ 22, 2  SAY "Operator Names "
  488. @ 25, 2  SAY "Account #"
  489. @ 25,25  SAY "Account Name"
  490. @ 25,78  SAY "Service/Plan         Base $         Items $     Std"
  491. @ 37, 1  SAY "Comments: 1"
  492. @ 38,11  SAY "2"
  493. @ 39,11  SAY "3"
  494. @ 42, 2  SAY "Modem"
  495. @ 42,22  SAY "Baud"
  496. @ 42,30  SAY "Hardware"
  497. @ 42,57  SAY "Software"
  498. @ 42,84  SAY "Access Method"
  499. @ 42,100 SAY "Call Back phone #"
  500. @ 42,125 SAY "Status"
  501. @ 45,12  SAY "Sales"
  502. @ 45,50  SAY "SERVICE"
  503. @ 45,99  SAY "Accounts Services"
  504. @ 46, 2  SAY "Rep             Admin"
  505. @ 46,33  SAY "Mngr             Admin           Approval"
  506. @ 46,95  SAY "Id            Approval"
  507. ??  ec + "(s10H"
  508. ??  ec + "&f1S"
  509. ??  ec + "(1X"                                     && select soft font
  510. ??  ec + "(s1S"                                    && select italics
  511. @ PROW() + 2,0    SAY "Y O U R   C O M P A N Y"    && print logo-like info
  512. ??  ec + "*p0x0Y" + ec + "&f0S"                    && reset cursor position
  513. ??  ec + "(10U"                                    && reset default font
  514. ??  ec + "(s0S"                                    && select upright
  515. @ PROW() + 1,80 - LEN(mheader) SAY mheader
  516. @ PROW() + 1,55 SAY "Credit Query Service"
  517. @ PROW() + 1, 0 SAY mline1
  518. @ PROW() + 1, 0 SAY "║"
  519. @ PROW()    ,(80 - LEN(mttype))/2 + 1 SAY mttype
  520. @ PROW()    ,79 SAY "║"
  521. @ PROW() + 1, 0 SAY mline2
  522. ??  ec + "(s3B"
  523. @ PROW() + 1,10 SAY 'Mike S.'
  524. @ PROW()    ,70 SAY "02/24/89"
  525. @ PROW() + 1,10 SAY '99999999-9'
  526. @ PROW()    ,22 SAY 'Your neighborhood credit reference'
  527. @ PROW() + 1,10 SAY "042-88"
  528. @ PROW()    ,22 SAY "Credit Validation"
  529. @ PROW()    ,70 SAY TRANSFORM(t_id,'@r 99-999999')
  530. @ PROW() + 2,0  SAY mline
  531. @ PROW() + 1,10 SAY t_name
  532. @ PROW() + 1,10 SAY t_contac
  533. @ PROW()    ,50 SAY "╔══════════        ══════════╗"
  534. @ PROW() + 1,10 SAY t_addr
  535. @ PROW()    ,50 SAY "║"
  536. @ PROW()    ,64 SAY t_cphone
  537. @ PROW()    ,79 SAY "║"
  538. @ PROW() + 1,10 SAY t_city
  539. @ PROW()    ,40 SAY t_state
  540. @ PROW()    ,50 SAY "║"
  541. @ PROW()    ,79 SAY "║"
  542. @ PROW() + 1,10 SAY t_zip
  543. DO CASE
  544. CASE t_tzone = 'E'
  545.    @ PROW(),40 SAY "Eastern"
  546. CASE t_tzone = 'C'
  547.    @ PROW(),40 SAY "Central"
  548. CASE t_tzone = 'M'
  549.    @ PROW(),40 SAY "Mountain"
  550. CASE t_tzone = 'P'
  551.    @ PROW(),40 SAY "Pacific"
  552. CASE t_tzone = 'H'
  553.    @ PROW(),40 SAY "Hawaii"
  554. ENDCASE
  555. @ PROW()    ,50 SAY "║"
  556. @ PROW()    ,79 SAY "║"
  557. @ PROW() + 1,50 SAY "╚════════════════════════════╝"
  558. @ PROW() + 3,0  SAY mline1
  559. @ PROW() + 1, 0 SAY "║"
  560. @ PROW()    ,15 SAY "02/28/89"
  561. @ PROW()    ,40 SAY "09/30/92"
  562. @ PROW()    ,79 SAY "║"
  563. @ PROW() + 1,0  SAY mline3
  564. @ PROW() + 1, 0 SAY "║"
  565. @ PROW()    ,79 SAY "║"
  566. @ PROW() + 1, 0 SAY "║"
  567. @ PROW()    , 1 SAY t_o_names
  568. @ PROW()    ,79 SAY "║"
  569. @ PROW() + 1, 0 SAY mline3
  570. @ PROW() + 1, 0 SAY "║"
  571. @ PROW()    ,79 SAY "║"
  572. @ PROW() + 1, 0 SAY "║"
  573. @ PROW()    , 1 SAY "9999999999999"
  574. @ PROW()    ,15 SAY t_name1
  575. @ PROW()    ,46 SAY t_serv1
  576. @ PROW()    ,58 SAY '999.99'
  577. @ PROW()    ,66 SAY '99.9999'
  578. @ PROW()    ,76 SAY "Y"
  579. @ PROW()    ,79 SAY "║"
  580. @ PROW() + 1, 0 SAY "║"
  581. @ PROW()    ,79 SAY "║"
  582. @ PROW() + 1, 0 SAY "║"
  583. @ PROW()    ,79 SAY "║"
  584. @ PROW() + 1, 0 SAY "║"
  585. @ PROW()    ,79 SAY "║"
  586. @ PROW() + 1, 0 SAY "║"
  587. @ PROW()    ,79 SAY "║"
  588. @ PROW() + 1, 0 SAY "║"
  589. @ PROW()    ,79 SAY "║"
  590. @ PROW() + 1, 0 SAY "║"
  591. @ PROW()    ,79 SAY "║"
  592. @ PROW() + 1, 0 SAY "║"
  593. @ PROW()    ,79 SAY "║"
  594. @ PROW() + 1, 0 SAY "║"
  595. @ PROW()    ,79 SAY "║"
  596. @ PROW() + 1,0  SAY mline2
  597. @ PROW() + 2,10 SAY t_com1
  598. @ PROW() + 1,10 SAY t_com2
  599. @ PROW() + 1,10 SAY t_com3
  600. @ PROW() + 2,0  SAY mline1
  601. @ PROW() + 1, 0 SAY "║"
  602. @ PROW()    ,79 SAY "║"
  603. @ PROW() + 1, 0 SAY "║"
  604. @ PROW()    , 1 SAY t_modem
  605. @ PROW()    ,13 SAY t_eqbaud
  606. @ PROW()    ,18 SAY t_hdware
  607. @ PROW()    ,34 SAY t_sftware
  608. if t_access = 'D'
  609.    @ PROW() ,50 SAY "Direct"
  610. endif
  611. if t_access = 'C'
  612.    @ PROW() ,50 SAY "Call Back"
  613. endif
  614. @ PROW()    ,60 SAY t_accph
  615. @ PROW()    ,76 SAY t_status
  616. @ PROW()    ,79 SAY "║"
  617. @ PROW() + 1, 0 SAY "╟──────────────────┬────────────────────────────────────┬──────────────────────╢"
  618. @ PROW() + 1, 0 SAY "║                  │                                    │                      ║"
  619. @ PROW() + 1, 0 SAY "║                  │                                    │                      ║"
  620. @ PROW()    , 5 SAY t_srep
  621. @ PROW()    ,15 SAY t_sadmn
  622. @ PROW()    ,24 SAY t_pmngr
  623. @ PROW()    ,35 SAY t_padmn
  624. @ PROW()    ,47 SAY t_padmn_a
  625. @ PROW()    ,60 SAY t_cas
  626. @ PROW()    ,71 SAY t_cas_a
  627. @ PROW() + 1,0  SAY mline2
  628. @ PROW()    ,19 SAY '╧'
  629. @ PROW()    ,56 SAY '╧'
  630. ??  ec + "(s0B"
  631. eject
  632. SET DEVICE TO SCREEN
  633. SET PRINT OFF
  634. SET CONSOLE ON
  635. RETURN
  636.