home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / xbase / library / clipper / window / tsdwin / demo20.prg < prev    next >
Text File  |  1992-08-31  |  128KB  |  2,944 lines

  1. /*
  2. ┌──────────────────────────────────────────────────────────────────────────┐
  3. │                                                                          │
  4. │                            DEMO20.PRG                                    │
  5. │                                                                          │
  6. │                    Source File for TSDWIN.LIB                            │
  7. │                   Clipper 5.0 Interface Library                          │
  8. │                                                                          │
  9. │      Copyright ( C ) 1992 by Trilateral Systems Development Ltd.         │
  10. │    All Rights Reserved * Version 2.00 * Release Date: Aug 1, 1992        │
  11. │                                                                          │
  12. │                         18  Bond St. South                               │
  13. │                         Dundas, ON, Canada                               │
  14. │                              L9H 3H1                                     │
  15. │                           416-628-5086                                   │
  16. │                                                                          │
  17. │                                                                          │
  18. │     Documented: 08-26-92      at 11:47:41am                              │
  19. └──────────────────────────────────────────────────────────────────────────┘
  20. */
  21.  
  22. #include "twinkey.ch"
  23. #include "tsdwin.ch"
  24. #include "demo20.ch"
  25. #include "getexit.ch"
  26.  
  27. #define K_UNDO          K_CTRL_U
  28.  
  29. STATIC lMono := .F., lOKMouse := .F.
  30. /*
  31. ┌──────────────────────────────────────────────────────────────────────────┐
  32. │  Description: Main Menu for TSDDEMO                                      │
  33. │       Author: Vic Lewis                                                  │
  34. │ Date created: 08-26-92                                                   │
  35. │ Time created: 11:49:18am                                                 │
  36. │    Copyright: Trilateral Systems Development Ltd.                        │
  37. ├──────────────────────────────────────────────────────────────────────────┤
  38. │     FUNCTION Main( cCmdLine )                                            │
  39. │                                                                          │
  40. │    Arguments: cCmdLine (/THIN /M /50 /?)                                 │
  41. │                                                                          │
  42. └──────────────────────────────────────────────────────────────────────────┘
  43. */
  44. FUNCTION Main( cCmdLine )
  45. LOCAL nChoice := 1, nStartRow, nStartCol, nX, lExitRequested := .F.
  46. LOCAL aMenu := {}, nExit, nThickness := 2, cClrTemp, aArea :=  { 24, 24 }
  47. LOCAL aPrompts := { " «1.» TSDWIN Highlights  ",;
  48.                     " «2.» Window Functions   ",;
  49.                     " «3.» Message Functions  ",;
  50.                     " «4.» Menu Functions     ",;
  51.                     " «5.» Browse Systems     ",;
  52.                     " «6.» Mouse Support      ",;
  53.                     " «7.» Miscellaneous      ",;
  54.                     " «8.» Hardware Functions ",;
  55.                     " «9.» Placing an Order   ",;
  56.                     " «Q.» End the Demo       " }
  57.  
  58. /*
  59. ┌──────────────────────────────────────────────────────────────────────────
  60. │ Set Up Environment
  61. └──────────────────────────────────────────────────────────────────────────
  62. */
  63. SET CURSOR OFF
  64. SET SCOREBOARD OFF
  65. SET WRAP ON
  66.  
  67. /*
  68. ┌──────────────────────────────────────────────────────────────────────────
  69. │ Link in the Screen Savers
  70. └──────────────────────────────────────────────────────────────────────────
  71. */
  72. EXTERNAL twSSaveAsc
  73. EXTERNAL twWSaveAsc
  74. SET KEY 287 TO twSSaveAsc
  75. SET KEY 273 TO twWSaveAsc
  76.  
  77. /*
  78. ┌──────────────────────────────────────────────────────────────────────────
  79. │ Parse the command line
  80. └──────────────────────────────────────────────────────────────────────────
  81. */
  82. lMono := IIF( ISCOLOR(), .F. , .T. )
  83. IF cCmdLine != NIL
  84.     IF "/THIN" $ UPPER( cCmdLine )
  85.         nThickness := 1
  86.     ENDIF
  87.     IF "/M" $ UPPER( cCmdLine )
  88.         lMono := .T.
  89.     ENDIF
  90.     IF "/50" $ UPPER( cCmdLine )
  91.         aArea := { 49, 49 }
  92.         SETMODE( 50, 80 )
  93.     ENDIF
  94.     IF "/?" $ cCmdLine
  95.         cClrTemp := SETCOLOR( IIF( !lMono, "gr+/n", "w+/n" ))
  96.         QOUT( "         Usage: TSDDEMO <options>" )
  97.         QOUT( "" )
  98.         SETCOLOR( IIF( !lMono, "bg+/n", "w+/n" ))
  99.         QOUT( "     Options: '/THIN' for Thin Shadows." )
  100.         QOUT( "              '/M' for Monochrome" )
  101.         QOUT( "              '/50' for VGA Mode" )
  102.         SETCOLOR( IIF( !lMono, "rb+/n", "w+/n" ))
  103.         QOUT( "" )
  104.         QOUT( "              TSDWIN.LIB " )
  105.         QOUT( "     Clipper 5.01 Interface Library" )
  106.         QOUT( "   Trilateral Systems Development Ltd." )
  107.         QOUT( "             416-628-5086" );QOUT( "" );QOUT( "" )
  108.         SETCOLOR( cClrTemp )
  109.         RETURN NIL
  110.     ENDIF
  111. ENDIF
  112.  
  113. /*
  114. ┌──────────────────────────────────────────────────────────────────────────
  115. │ Initialize windows to thick or thin shadows
  116. │ and allow for Monchrome Override if Graphics card installed
  117. │ Save environment and DOS screen
  118. └──────────────────────────────────────────────────────────────────────────
  119. */
  120. twInit( nThickness )
  121. twOpen()
  122.  
  123. /*
  124. ┌──────────────────────────────────────────────────────────────────────────
  125. │ Initialize the Mouse
  126. └──────────────────────────────────────────────────────────────────────────
  127. */
  128. #IFNDEF NOMOUSE
  129.     lOKMouse := twMouseInit()
  130. #ENDIF
  131.  
  132. /*
  133. ┌──────────────────────────────────────────────────────────────────────────
  134. │ Initialize TSDWIN 'meta' variables from the header file.
  135. └──────────────────────────────────────────────────────────────────────────
  136. */
  137. INITGLOBALS
  138.  
  139. /*
  140. ┌──────────────────────────────────────────────────────────────────────────
  141. │ Initialize TSDWIN Message Systems
  142. └──────────────────────────────────────────────────────────────────────────
  143. */
  144. twAlertInit( , { { CBUTTON, CFBUTTON }, ;
  145.                  { CCHECK,  CFCHECK }, ;
  146.                  { CRADIO,  CFRADIO } } ) // Alert Initialization
  147. twAMsgInit(  , { COLORW, COLORN }, aArea )  // Area Message Initialization
  148. twMsgInit(   , { { COLORE, TCOLOR },;
  149.                  { COLORW, TCOLOR },;
  150.                  { COLORM, TCOLOR },;
  151.                  { COLORW, TCOLOR },;
  152.                  { COLORW, TCOLOR } })      // Messages
  153.  
  154. /*
  155. ┌──────────────────────────────────────────────────────────────────────────
  156. │ Begin Main Menu
  157. └──────────────────────────────────────────────────────────────────────────
  158. */
  159. SETCOLOR( IIF( ! lMono, "n/bg", "n/w" ))
  160. twExplode( .T. )
  161. twOpen( FULLSCREEN, COLORN, DSHADOW, DFRAME,, COLORFN )
  162.  
  163. twExplode( DEXPLODE )
  164. SETBLINK( DBLINK )
  165. twInfoLine( -2, "TSDWIN Interface Library for Clipper 5.01", "C", 0 )
  166. twInfoLine( -2, "«T»rilateral «S»ystems «D»evelopment Ltd.", "C" )
  167. TSDSetup( lMono )
  168.  
  169. nStartRow := 2;nStartCol := 2
  170.  
  171. FOR nX := 1 TO 10
  172.     twCreateButton( nStartRow, nStartCol, SPACE( 21 ), .T.,, DSHADOW );nStartRow += 2
  173. NEXT
  174.  
  175. twAttrib( .F., "n/w",  2, 28, 20, 75 )
  176. twBox( 2, 28, 20, 75, 1, "n/w" )
  177. twReplicate( 21, 29, "▀", 48, IIF( ! lMono, "n/b", "n/w" ))
  178. @ twRow( 2 ), twCol( 76 ) SAY "▄" COLOR IIF( ! lMono, "n/b", "n/w" )
  179. FOR nX = 1 TO 18
  180.     @ twRow( nX + 2 ), twCol( 76 ) SAY "█" COLOR "n/n"
  181. NEXT
  182.  
  183. DO WHILE .T.
  184.     nStartRow := 2;nStartCol := 2
  185.     twMenuInit( 2, twRow( 3 ), twCol( 30 ), IIF( ! lMono, "n/w,r/w", "n/w,w+/n" ), .T. )
  186.  
  187.     FOR nX := 1 TO 10
  188.         @ nStartRow, nStartCol WPROMPT aPrompts[ nX ] MESSAGE StoreDesc( nX ) COLOR MENUCLR ;nStartRow += 2
  189.     NEXT
  190.  
  191.     WMENU TO nChoice
  192.  
  193.     DO CASE
  194.         CASE nChoice = 1;TSD10000()
  195.         CASE nChoice = 2;TSD20000()
  196.         CASE nChoice = 3;TSD30000()
  197.         CASE nChoice = 4;TSD40000()
  198.         CASE nChoice = 5;TSD50000()
  199.         CASE nChoice = 6;TSD60000()
  200.         CASE nChoice = 7;TSD70000()
  201.         CASE nChoice = 8;TSD80000()
  202.         CASE nChoice = 9;TSD90000()
  203.         CASE nChoice = 10 .OR. nChoice = 0 .OR. LASTKEY() = K_ESC
  204.             nExit := AskUser({ "Yes, I'm Finished", "No, Resume the Demo" },;
  205.                      "Are you sure you've seen enough?" )
  206.             IF nExit != 2
  207.                 EXIT
  208.             ELSE
  209.                 nChoice := 1
  210.             ENDIF
  211.     ENDCASE
  212.  
  213. ENDDO
  214. twAMPop();twAMPop()
  215. twPop();twPop()
  216. SETMODE( 25, 80 )
  217. CLS
  218. RETURN NIL
  219.  
  220. /*
  221. ┌──────────────────────────────────────────────────────────────────────────┐
  222. │  Description: TSDWIN Highlights (Quick Reference File)                   │
  223. │       Author: Vic Lewis                                                  │
  224. │ Date created: 04-18-92                                                   │
  225. │ Time created: 12:40:07pm                                                 │
  226. │    Copyright: Trilateral Systems Development Ltd.                        │
  227. ├──────────────────────────────────────────────────────────────────────────┤
  228. │     Function: TSD10000()                                                 │
  229. │                                                                          │
  230. │    Arguments: None.                                                      │
  231. │                                                                          │
  232. │ Return Value: NIL                                                        │
  233. │                                                                          │
  234. └──────────────────────────────────────────────────────────────────────────┘
  235. */
  236. FUNCTION TSD10000()
  237. twTextFile( FULLSCREEN, "TSWINQRF.DOC", COLORN, ;
  238.            0, DFRAME, COLORFN,, ;
  239.            {|| twTitle( "TSDWIN Quick Reference", "n/w" )})
  240. RETURN NIL
  241.  
  242. /*
  243. ┌──────────────────────────────────────────────────────────────────────────┐
  244. │  Description: Basic Window Operations                                    │
  245. │       Author: Vic Lewis                                                  │
  246. │ Date created: 04-18-92                                                   │
  247. │ Time created: 12:54:26pm                                                 │
  248. │    Copyright: Trilateral Systems Development Ltd.                        │
  249. ├──────────────────────────────────────────────────────────────────────────┤
  250. │     Function: TSD20000                                                   │
  251. │                                                                          │
  252. │    Arguments: None.                                                      │
  253. │                                                                          │
  254. │ Return Value: NIL                                                        │
  255. │                                                                          │
  256. └──────────────────────────────────────────────────────────────────────────┘
  257. */
  258. FUNCTION TSD20000()
  259. LOCAL nWin1, nWin2, nWin3, nWin4, nWin5, nWin6, nKey := 0
  260. LOCAL nCol := 14, nRow := 4, nHandle, nX, nType, xTemp
  261. LOCAL aColors := { IIF( ! lMono, "gr+/r" ,"n/w" ),;
  262.                    IIF( ! lMono, "w+/g" ,"w/n" ),;
  263.                    IIF( ! lMono, "n/*gr" ,"w+/n" ),;
  264.                    IIF( ! lMono, "r/w" ,"n/w" ),;
  265.                    IIF( ! lMono, "n/bg" ,"w/n" ),;
  266.                    IIF( ! lMono, "gr+/*b" ,"w+/n" ),;
  267.                    IIF( ! lMono, "w+/r" ,"n/w" ),;
  268.                    IIF( ! lMono, "rb+/n" ,"w/n" ),;
  269.                    IIF( ! lMono, "n/w" ,"w+/n" ),;
  270.                    IIF( ! lMono, "g+/bg" ,"n/w" )}
  271.  
  272. nWin1 := twOpen( FULLSCREEN, COLORN, DSHADOW, DFRAME, "", COLORFN )
  273.  
  274. /*
  275. ┌──────────────────────────────────────────────────────────────────────────
  276. │ Shadowing
  277. └──────────────────────────────────────────────────────────────────────────
  278. */
  279. twTitle( PADC( "Window Shadows", 30 ), TCOLOR, "T", "C" )
  280. twTitle( "Press a Key or Button or Wait", TCOLOR, "B", "C" )
  281. twOpen( 4, 5, 10, 34, COLORM, 1, DFRAME )
  282. twCenter( 3, "Shadow Type 1" )
  283. twOpen( 4, 45, 10, 74, COLORM, 7, DFRAME )
  284. twCenter( 3, "Shadow Type 7" )
  285. twOpen( 14, 5, 20, 34, COLORM, 9, DFRAME )
  286. twCenter( 3, "Shadow Type 9" )
  287. twOpen( 14, 45, 20, 74, COLORM, 3, DFRAME )
  288. twCenter( 3, "Shadow Type 3" )
  289. DemoWait( 3 )
  290. BEEPER
  291. UserMsg( { "Remember, You Can Change Your", ;
  292.            "Shadow Thickness with twInit()",;
  293.            "    Try 'TSDDEMO /THIN'" }, 3 )
  294. FOR nX = 1 TO 4
  295.     twPop()
  296. NEXT
  297.  
  298. /*
  299. ┌──────────────────────────────────────────────────────────────────────────
  300. │ Frames
  301. └──────────────────────────────────────────────────────────────────────────
  302. */
  303. twTitle( PADC( "Window and Box Borders", 30 ), TCOLOR, "T", "C" )
  304. twOpen( 3, 10, 21, 70, COLORM, DSHADOW, DFRAME,, COLORFM )
  305. twCenter( 2, "Windows and Boxes can have 14 different frames." )
  306. FOR  nX = 1 TO 14
  307.     twFrame( nX );DemoWait( .5 )
  308. NEXT
  309. twFrame( DFRAME )
  310. DemoWait( 1 )
  311. BEEPER
  312. twCenter( 4, "You can also vary the frame colour." )
  313. DemoWait( 1 )
  314. twFrame( 2, IIF( !lMono, "gr+/r",  "w/n" ))
  315. DemoWait( 1 )
  316. twFrame( 2, IIF( !lMono, "n/bg",   "n/w" ))
  317. DemoWait( 1 )
  318. twFrame( 2, IIF( !lMono, "w+/*rb", "w+/n" ))
  319. DemoWait( 1 )
  320. twFrame( DFRAME, COLORFM )
  321. BEEPER
  322. twCenter( 6, "You can also specify separate colours to be used" )
  323. twCenter( 7, "to identify ACTIVE and INACTIVE windows!" )
  324. DemoWait( 2 )
  325. UserMsg( "See What I Mean!!",2, 2, 2 )
  326.  
  327. /*
  328. ┌──────────────────────────────────────────────────────────────────────────
  329. │ Lines
  330. └──────────────────────────────────────────────────────────────────────────
  331. */
  332. nHandle := _twHandle( nWin1 )
  333. twTitle( PADC( "Lines and Boxes", 30 ), TCOLOR, "T", "C" )
  334. _twHandle( nHandle )
  335.  
  336. twClear( .F. )
  337. twCenter( 2, "There are a variety of horizontal line options." )
  338.  
  339. FOR nX = 1 TO 11
  340.     nType := PADL( STRINT( nX ), 2 )
  341.     twLeft( nX + 3, "            Type  " + nType + ":" )
  342.     twHLine( nX + 3, 23, 24, nX )
  343. NEXT
  344. DemoWait( 3 )
  345. twClear( .F. )
  346. twCenter( 2, "And vertical lines as well." )
  347. twCenter( 4, "Types")
  348. twCenter( 5, "  1  2  3  4  5  6  7  8  9 10 11 12" )
  349. FOR nX = 1 TO 12
  350.     twVLine( 7, 14 + 3 * ( nX - 1 ), 8, nX )
  351. NEXT
  352. DemoWait( 3 )
  353.  
  354. /*
  355. ┌──────────────────────────────────────────────────────────────────────────
  356. │ Titles
  357. └──────────────────────────────────────────────────────────────────────────
  358. */
  359. nHandle := _twHandle( nWin1 )
  360. twTitle( PADC( "Window Titles", 30 ), TCOLOR, "T", "C" )
  361. _twHandle( nHandle )
  362. twClear( .F.)
  363. twFrame( DFRAME,,, .F. )
  364. twLeft( 3, "  You can center headers." )
  365. DemoWait( 1 )
  366. twTitle( "TSDWIN",, "T", "C" )
  367. DemoWait( 1 )
  368. @ twRow( 3 ), twCol( 27 ) SAY "Or right and left justify them!"
  369. DemoWait( 1 )
  370. twTitle( "Has",, "T", "L" )
  371. DemoWait( 1 )
  372. twTitle( "Windows",, "T", "R" )
  373. DemoWait( 1 )
  374. twCenter( 5, " You can do the same with footers." )
  375. DemoWait( 1 )
  376. twTitle( "Interface Library",, "B", "C" )
  377. DemoWait( 1 )
  378. twTitle( "For",, "B", "L" )
  379. DemoWait( 1 )
  380. twTitle( "You",, "B", "R" )
  381. DemoWait( 1 )
  382. twCenter( 7, " You can even choose their colour!" )
  383. twTitle( "TSDWIN", aColors[1], "T", "C" )
  384. twTitle( "Has", aColors[2], "T", "L" )
  385. twTitle( "Windows", aColors[3], "T", "R" )
  386. twTitle( "Interface Library", aColors[4], "B", "C" )
  387. twTitle( "For", aColors[5], "B", "L" )
  388. twTitle( "You", aColors[6], "B", "R" )
  389. DemoWait( 1 )
  390. FOR nX = 1 TO 5
  391.     twTitle( "Has", aColors[1], "T", "L" )
  392.     twTitle( "TSDWIN", aColors[2], "T", "C" )
  393.     twTitle( "Windows", aColors[3], "T", "R" )
  394.     twTitle( "You", aColors[4], "B", "R" )
  395.     twTitle( "Interface Library", aColors[5], "B", "C" )
  396.     twTitle( "For", aColors[6], "B", "L" )
  397.     xTemp := aColors[1]
  398.     ADEL( aColors, 1 )
  399.     aColors[6] := xTemp
  400. NEXT
  401. DemoWait( 2 )
  402. twCenter( 9, "Delimiters can be inserted." )
  403. DemoWait( 2 )
  404. FOR nX = 1 TO 5
  405.     twTitle( "Has", aColors[1], "T", "L", "[]" )
  406.     twTitle( "TSDWIN", aColors[2], "T", "C", "" )
  407.     twTitle( "Windows", aColors[3], "T", "R", "**" )
  408.     twTitle( "You", aColors[4], "B", "R", "╣╠" )
  409.     twTitle( "Interface Library", aColors[5], "B", "C", "││" )
  410.     twTitle( "For", aColors[6], "B", "L", "╡╞" )
  411.     xTemp := aColors[1]
  412.     ADEL( aColors, 1 )
  413.     aColors[6] := xTemp
  414. NEXT
  415. DemoWait( 4 )
  416. twFrame( DFRAME,,, .F. )
  417.  
  418. /*
  419. ┌──────────────────────────────────────────────────────────────────────────
  420. │ Text Formatting
  421. └──────────────────────────────────────────────────────────────────────────
  422. */
  423. nHandle := _twHandle( nWin1 )
  424. twTitle( PADC( "Text Formatting", 30 ), TCOLOR, "T", "C" )
  425. _twHandle( nHandle )
  426. twClear( .F. )
  427. twLeft( 2, "It's easy to left justify text." )
  428. DemoWait( .5 )
  429. twCenter( 4, "And center it too!" )
  430. DemoWait( .5 )
  431. twRight( 6, "You can right justify, of Course." )
  432. DemoWait( .5 )
  433. twLeft( 8, " You can replicate any character." )
  434. DemoWait( .5 )
  435. twReplicate( 8, 35, "■", 24 )
  436. DemoWait( .5 )
  437. twCenter( 10, "You can also:" )
  438. DemoWait( .5 )
  439. twSay( 12, 10 + 4, "PUT" )
  440. DemoWait( .1 )
  441. twSay( 13, 12 + 4, "TEXT" )
  442. DemoWait( .1 )
  443. twSay( 14, 14 + 4, "ANYWHERE" )
  444. DemoWait( .1 )
  445. twSay( 15, 12 + 4, "YOU" )
  446. DemoWait( .1 )
  447. twSay( 16, 10 + 4, "WANT" )
  448. DemoWait( 1 )
  449. twSay( 12, 46 - 5, " In ", aColors[1] )
  450. DemoWait( .1 )
  451. twSay( 13, 44 - 5, " Any ", aColors[2] )
  452. DemoWait( .1 )
  453. twSay( 14, 42 - 5, " Colour ", aColors[3] )
  454. DemoWait( .1 )
  455. twSay( 15, 44 - 5, " You ", aColors[4] )
  456. DemoWait( .1 )
  457. twSay( 16, 46 - 5, " Want ", aColors[5] )
  458. DemoWait( 1 )
  459. twScroll( 2, .F. )
  460.  
  461. twType( 16, 10, "You can emulate a typewriter if you want.",, .T. )
  462. twType( 17, 11, " And you can turn off the sound, too! ", aColors[ 3 ], .F. )
  463. twScroll( 2, .F. )
  464. twType( 17, 17, "Scrolling your screen  can",, .F. )
  465. twScroll( 1, .F. )
  466. twType( 17, 17, "make your application look",, .F. )
  467. twScroll( 1, .F. )
  468. twType( 17, 17, "neat. With TSDWIN Ver 2.00",, .F. )
  469. twScroll( 1, .F. )
  470. twType( 17, 17, "Library you can scroll all",, .F. )
  471. twScroll( 1, .F. )
  472. twType( 17, 17, "or part of a window,  with",, .F. )
  473. twScroll( 1, .F. )
  474. twType( 17, 17, "or without the border.    ",, .F. )
  475. FOR nX = 1 TO 17
  476.     twScroll( , .F. )
  477.     twInkeyWait( .1 )
  478. NEXT
  479. twCenter( 2, "Neat Tricks are Easy to Perform" )
  480. twBox( 5, 4, 15, 27, 1, BLA_CYH )
  481. twShadow( 5, 4, 15, 27, 1 )
  482. twBox( 5, 33, 15, 56, 1, BLA_CYH )
  483. twShadow( 5, 33, 15, 56, 3 )
  484. nX := 1
  485. DO WHILE nX <= 6
  486.     twSay( 6, 05, " Use Your Imagination ", YEL_RDH )
  487.     twSay( 14, 34, " Use Your Imagination ", YEL_RDH )
  488.     twInkeyWait( .1 )
  489.     twScroll( -1, .F., 6, 5, 14, 26 )
  490.     twScroll( 1, .F., 6, 34, 14, 55 )
  491.     twInkeyWait( .1 )
  492.     twSay( 6, 05, " **  Have a  Ball  ** ", BLA_GNH )
  493.     twSay( 14, 34, " **  Have a  Ball  ** ", BLA_GNH )
  494.     twInkeyWait( .1 )
  495.     twScroll( -1, .F., 6, 5, 14, 26 )
  496.     twScroll( 1, .F., 6, 34, 14, 55 )
  497.     twInkeyWait( .1 )
  498.     twSay( 6, 05, " CLIPPERING is a joy, ", WHH_BLH )
  499.     twSay( 14, 34, " CLIPPERING is a joy, ", WHH_BLH )
  500.     twInkeyWait( .1 )
  501.     twScroll( -1, .F., 6, 5, 14, 26 )
  502.     twScroll( 1, .F., 6, 34, 14, 55 )
  503.     twInkeyWait( .1 )
  504.     twSay( 6, 05, " with  TSD's  Windows ", RDH_YLH )
  505.     twSay( 14, 34, " with  TSD's  Windows ", RDH_YLH )
  506.     twInkeyWait( .1 )
  507.     twScroll( -1, .F., 6, 5, 14, 26 )
  508.     twScroll( 1, .F., 6, 34, 14, 55 )
  509.     twInkeyWait( .1 )
  510.     nX++
  511. ENDDO
  512. twSay( 6, 05, " **Happy Clippering** ", WHH_VIH )
  513. twSay( 14, 34, " **Happy Clippering** ", WHH_VIH )
  514. DemoWait( 2 )
  515. twScroll( 22, .T. )
  516. DemoWait( .5 )
  517. twPop()
  518.  
  519. /*
  520. ┌──────────────────────────────────────────────────────────────────────────
  521. │ Boxes
  522. └──────────────────────────────────────────────────────────────────────────
  523. */
  524. twTitle( PADC( "Boxes with Shadows", 30 ), TCOLOR, "T", "C" )
  525. twTitle( "Press a Key or Button or Wait", TCOLOR, "B", "C" )
  526. twBox( nRow, nCol, nRow + 6, nCol + 20, 1,     BLA_CYH, " " )
  527. twShadow( nRow, nCol, nRow + 6, nCol + 20, 7 )
  528.  
  529. twSay( nRow + 01, nCol + 3, "████████",  RDH_CYH )
  530. twSay( nRow + 02, nCol + 3, "   ██   ",  RDH_CYH )
  531. twSay( nRow + 03, nCol + 3, "   ██   ",  RDH_CYH )
  532. twSay( nRow + 04, nCol + 3, "   ██   ",  RDH_CYH )
  533. twSay( nRow + 05, nCol + 3, "   ██   ",  RDH_CYH )
  534. twSay( nRow + 05, nCol + 9, "RILATERAL", BLU_CYH )
  535.  
  536. twBox( nRow, nCol + 32, nRow + 6, nCol + 52, 1,    BLA_CYH, " " )
  537. twShadow( nRow, nCol + 32, nRow + 6, nCol + 52, 9 )
  538.  
  539. twSay( nRow + 01, nCol + 35, "████████",  YEL_CYH )
  540. twSay( nRow + 02, nCol + 35, "██      ",  YEL_CYH )
  541. twSay( nRow + 03, nCol + 35, "████████",  YEL_CYH )
  542. twSay( nRow + 04, nCol + 35, "      ██",  YEL_CYH )
  543. twSay( nRow + 05, nCol + 35, "████████",  YEL_CYH )
  544. twSay( nRow + 05, nCol + 44, "YSTEMS",    BLU_CYH )
  545.  
  546. twBox( nRow + 9, nCol, nRow + 15, nCol + 24, 1,   BLA_CYH, " " )
  547. twShadow( nRow + 9, nCol, nRow + 15, nCol + 24, 1 )
  548.  
  549. twSay( nRow + 10, nCol + 3, "████████", WHI_CYH )
  550. twSay( nRow + 11, nCol + 3, "██     ▐", WHI_CYH )
  551. twSay( nRow + 12, nCol + 3, "██     ▐", WHI_CYH )
  552. twSay( nRow + 13, nCol + 3, "██     ▐", WHI_CYH )
  553. twSay( nRow + 14, nCol + 3, "████████", WHI_CYH )
  554. twSay( nRow + 14, nCol + 12, "EVELOPMENT", BLU_CYH )
  555.  
  556. twBox( nRow + 9, nCol + 32, nRow + 15, nCol + 52, 1,  BLA_CYH, " " )
  557. twShadow( nRow + 9, nCol + 32, nRow + 15, nCol + 52, 3 )
  558. twSay( nRow + 12, nCol + 39, "Limited",  BLU_CYH )
  559. DemoWait( 1 )
  560. BEEPER
  561.  
  562. twTitle( PADC( "You Can Clear a Box", 30 ), TCOLOR, "T", "C" )
  563. DemoWait( 1 )
  564. twClear( .F., " ", nRow, nCol, nRow + 6, nCol + 20 )
  565. DemoWait( 1 )
  566. BEEPER
  567.  
  568. twTitle( PADC( "Or Include the Border", 30 ), TCOLOR, "T", "C" )
  569. DemoWait( 1 )
  570. twClear( .T., " ", nRow, nCol + 32, nRow + 6, nCol + 52 )
  571. DemoWait( 1 )
  572. BEEPER
  573.  
  574. twTitle( PADC( "And You Can Fill It", 30 ), TCOLOR, "T", "C" )
  575. DemoWait( 1 )
  576. twClear( .T., "▒", nRow + 9, nCol, nRow + 15, nCol + 24 )
  577. DemoWait( 1 )
  578. twClear( .F., "▒", nRow + 9, nCol + 32, nRow + 15, nCol + 52 )
  579. DemoWait( 1 )
  580. BEEPER
  581.  
  582. twTitle( PADC( "You Can Also Change Colours", 30 ), TCOLOR, "T", "C" )
  583. DemoWait( 1 )
  584. twSay( nRow + 11, nCol + 3, "See What" )
  585. twAttrib( .T., YEL_RED, nRow + 9, nCol, nRow + 15, nCol + 24 )
  586. DemoWait( 1 )
  587. twSay( nRow + 11, nCol + 35, "I Mean" )
  588. twAttrib( .F., IIF( ! lMono, "w+/br*", "w+/n" ), nRow + 9, nCol + 32, nRow + 15, nCol + 52 )
  589. DemoWait( 1 )
  590. twAttrib( .F., IIF( ! lMono, "b+/w", "n/w" ))
  591. DemoWait( 1 )
  592. twAttrib( .T., IIF( ! lMono, "gr+/rb", "w+/n" ))
  593. DemoWait( 1 )
  594. twCenter( 0, "Patterns can Easily be made!" )
  595. twClearWith( .F., " TSDWIN ",,,,, IIF( ! lMono, "gr+/b", "w+/n" ) )
  596. DemoWait( 1 )
  597. twClearWith( .F., "▓▓▒▒▒░░░░",,,,, IIF( ! lMono, "gr+/b", "w+/n" ) )
  598. DemoWait( 1 )
  599. twClearWith( .F., "██│█▐▄",,,,, IIF( ! lMono, "gr+/b", "w+/n" ) )
  600. DemoWait( 1 )
  601. twClearWith( .F., "│░▒▓█▓▒░│",,,,, IIF( ! lMono, "gr+/b", "w+/n" ) )
  602. DemoWait( 1 )
  603. twClearWith( .F., "│▐▄▌█▐▀▌│",,,,, IIF( ! lMono, "gr+/b", "w+/n" ) )
  604. DemoWait( 1 )
  605. twClear( .F. )
  606.  
  607. /*
  608. ┌──────────────────────────────────────────────────────────────────────────
  609. │ Activation
  610. └──────────────────────────────────────────────────────────────────────────
  611. */
  612. twTitle( "Window Activation: USE 'F1', 'F2', 'F3', 'F4', 'ESC to Exit'", TCOLOR, "T", "C" )
  613. twTitle( "Press a Key or Button or Wait", TCOLOR, "B", "C" )
  614. nWin1 := twOpen( 02, 05, 12, 44, COLORN, 1, DFRAME,, COLORFN )
  615. twTitle( "Window 1", TCOLOR )
  616. nWin5 := twOpen( 12, 42, 20, 70, COLORE, 1, DFRAME, "", COLORFE )
  617. twTitle( "I'm and Extra!!", TCOLOR )
  618. nWin2 := twOpen( 05, 10, 15, 49, COLORE, 7, DFRAME,, COLORFE )
  619. twTitle( "Window 2", TCOLOR, "T", "L" )
  620. nWin3 := twOpen( 08, 15, 18, 54, COLORM, 9, DFRAME,, COLORFM )
  621. twTitle( "Window 3", TCOLOR, "T", "R" )
  622. nWin4 := twOpen( 11, 20, 21, 59, COLORW, 3, DFRAME,, COLORFW )
  623. twTitle( "Window 4", TCOLOR, "B", "L" )
  624.  
  625. DO WHILE nKey != K_ESC
  626.     nKey := DemoWait( 0 )
  627.     DO CASE
  628.         CASE nKey == K_F1
  629.             Window( nWin1 )
  630.         CASE nKey == K_F2
  631.             Window( nWin2 )
  632.         CASE nKey == K_F3
  633.             Window( nWin3 )
  634.         CASE nKey == K_F4
  635.             Window( nWin4 )
  636.     ENDCASE
  637. ENDDO
  638.  
  639. nWin6 :=  twNew( 2, 2, 21,   76, COLORN, 3, 4, "░", COLORFN, "Complex Windows can be Displayed FAST!!!" )
  640. twBox(  1, 2, 10, 10, 2, YEL_BLU, " ",, 3, nWin6 )
  641. twBox( 12, 2, 17, 10, 2, YEL_BLU, " ",, 3, nWin6 )
  642. twBox( 1, 14, 17, 70, 2, YEL_BLU, " ",, 3, nWin6 )
  643. twVLine(  2, 35, 15, 2, YEL_BLU, nWin6 )
  644. twSay( 1, 35, "╦", YEL_BLU,, nWin6 )
  645. twSay( 17, 35, "╩", YEL_BLU,, nWin6 )
  646. twHLine(  3, 35, 35, 5, YEL_BLU, nWin6 )
  647. twSay( 3, 35, "╠", YEL_BLU,, nWin6 )
  648. twSay( 3, 70, "╣", YEL_BLU,, nWin6 )
  649. twSay( 2, 38, "Continental Information", YEL_BLU,, nWin6 )
  650. twHLine(  8, 15, 20, 4, YEL_BLU, nWin6 )
  651. twSay( 8, 14, "╟", YEL_BLU,, nWin6 )
  652. twSay( 8, 35, "╢", YEL_BLU,, nWin6 )
  653. twVLine(  4, 40, 13, 1, YEL_BLU, nWin6 )
  654. twSay( 3, 40, "╤", YEL_BLU,, nWin6 )
  655. twSay( 17, 40, "╧", YEL_BLU,, nWin6 )
  656. FOR nX := 1 TO 13
  657.     twSay( 3 + nX, 37, PADL( STRINT( nX ), 2 ), WHH_BLU,, nWin6 )
  658. NEXT
  659. FOR nX := 1 TO 8
  660.     twSay( 1 + nX, 5, PADL( STRINT( nX ), 3, "0" ), WHH_BLU,, nWin6 )
  661. NEXT
  662. USE Windemo INDEX Windemo
  663. FOR nX := 1 TO 13
  664.     twSay( 3 + nX, 42, Windemo->Continent, WHT_BLU,, nWin6 )
  665.     SKIP
  666. NEXT
  667. FOR nX := 1 TO 6
  668.     twSay( 1 + nX, 17, Windemo->Codekey, WHT_BLU,, nWin6 )
  669.     SKIP
  670.     twSay( 1 + nX, 23, Windemo->Codekey, WHT_BLU,, nWin6 )
  671.     SKIP
  672. NEXT
  673. twSay( 10, 20, "T S D W I N", WHT_BLU,, nWin6 )
  674. twSay( 12, 20, "     IS    ", WHT_BLU,, nWin6 )
  675. twSay( 14, 20, " Beautiful ", WHT_BLU,, nWin6 )
  676. twSay( 13, 4, "Jack", WHT_BLU,, nWin6 )
  677. twSay( 14, 4, " 'n ", WHT_BLU,, nWin6 )
  678. twSay( 15, 4, "Jill", WHT_BLU,, nWin6 )
  679. twSay( 16, 4, "Went", WHT_BLU,, nWin6 )
  680. CLOSE Windemo
  681.  
  682. twShow( nWin6 );DemoWait( 15 );twPop()
  683.  
  684. UserMsg( { "It's Easy to Hide and", ;
  685.            " Unhide Windows with ",;
  686.            "    TSDWIN v2.00     " }, 3 )
  687.  
  688. twActivate( nWin1 )
  689. twActivate( nWin2 )
  690. twActivate( nWin3 )
  691. twActivate( nWin4 )
  692.  
  693. twHide( nWin1 );DemoWait( .5 )
  694. twHide( nWin2 );DemoWait( .5 )
  695. twHide( nWin3 );DemoWait( .5 )
  696. twHide( nWin4 );DemoWait( .5 )
  697. twHide( nWin5 );DemoWait( .5 )
  698. twUnHide( nWin5 );DemoWait( .5 )
  699. twUnHide( nWin4 );DemoWait( .5 )
  700. twUnHide( nWin3 );DemoWait( .5 )
  701. twUnHide( nWin2 );DemoWait( .5 )
  702. twUnHide( nWin1 );DemoWait( .5 )
  703.  
  704. twFrame( DFRAME,,, .F. )
  705. twTitle( "Moving Windows is Easy!", TCOLOR )
  706. twMove( -8, -20 )
  707. DemoWait( 1 )
  708. twPop()
  709.  
  710. twFrame( DFRAME,,, .F. )
  711. twTitle( "I Move Around a Lot!", TCOLOR )
  712. twMove( 8, -20 )
  713. DemoWait( 1 )
  714. twPop()
  715.  
  716. twFrame( DFRAME,,, .F. )
  717. twTitle( "Sliding is Fun!", TCOLOR )
  718. twSlide( "R", 30 );twSlide( "U", 7 );twSlide( "R", 6 );twSlide( "U", 5 )
  719. twSlide( "L", 50 );twSlide( "D", 10 );twSlide( "R", 15 );twSlide( "U", 2 )
  720. DemoWait( 1 )
  721. twPop()
  722.  
  723. twFrame( DFRAME,,, .F. )
  724. twTitle( "Watch me go too!", TCOLOR )
  725. twSlide( "R", 30 );twSlide( "D", 7 );twSlide( "R", 6 );twSlide( "D", 5 )
  726. twSlide( "L", 50 );twSlide( "U", 10 );twSlide( "R", 15 );twSlide( "D", 2 )
  727. DemoWait( 1 )
  728. twPop()
  729.  
  730. twSlide( "L", 30 )
  731. twSlide( "U", 10 )
  732. twTitle( "Try Sizing this window", TCOLOR )
  733. twTitle( "Use the Cursor Keys", TCOLOR, "B", "C" )
  734. DO WHILE .T.
  735.  
  736.     nKey := DemoWait(0)
  737.     DO CASE
  738.         CASE nKey == K_UP
  739.             twSize( "V", -1 )
  740.         CASE nKey == K_DOWN
  741.             twSize( "V", 1 )
  742.         CASE nKey == K_LEFT
  743.             twSize( "H", -1 )
  744.         CASE nKey == K_RIGHT
  745.             twSize( "H", 1 )
  746.         OTHERWISE
  747.             EXIT
  748.     ENDCASE
  749. ENDDO
  750.  
  751. twPop();twPop()
  752. RETURN NIL
  753.  
  754. /*
  755. ┌──────────────────────────────────────────────────────────────────────────┐
  756. │  Description: Window Activation Routines                                 │
  757. │       Author: Vic Lewis                                                  │
  758. │ Date created: 04-18-92                                                   │
  759. │ Time created: 08:07:18pm                                                 │
  760. │    Copyright: Trilateral Systems Development Ltd.                        │
  761. ├──────────────────────────────────────────────────────────────────────────┤
  762. │    Procedure: Window                                                     │
  763. │                                                                          │
  764. │    Arguments: nHandle - Handle of window to activate.                    │
  765. │                                                                          │
  766. └──────────────────────────────────────────────────────────────────────────┘
  767. */
  768. PROCEDURE Window( nHandle )
  769. STATIC nRow1 :=  0, nRow2 :=  0, nRow3 :=  0, nRow4 :=  0
  770. LOCAL nRow, lOk := .T., GetList := {}
  771. DO CASE
  772.     CASE nHandle = 4
  773.         nRow1 := IIF( nRow1 > 6, 1, nRow1 + 1 ); nRow := nRow1
  774.     CASE nHandle = 6
  775.         nRow2 := IIF( nRow2 > 6, 1, nRow2 + 1 ); nRow := nRow2
  776.     CASE nHandle = 7
  777.         nRow3 := IIF( nRow3 > 6, 1, nRow3 + 1 ); nRow := nRow3
  778.     CASE nHandle = 8
  779.         nRow4 := IIF( nRow4 > 6, 1, nRow4 + 1 ); nRow := nRow4
  780. ENDCASE
  781. twActivate( nHandle )
  782. tw_Say2( twRow( nRow + 1 ), twCol( 1 + nRow ), "Activation «" + ALLTRIM( STR( nRow )) + "»", twVattr( twStdClr( _twColor())), twVattr( twEnhClr( _twColor())))
  783. @ twRow( nRow ), twCol( 27 ) SAY "OK?" GET lOk PICTURE "Y"
  784. twReadModal( GetList, .T. )
  785. RETURN
  786.  
  787. /*
  788. ┌──────────────────────────────────────────────────────────────────────────┐
  789. │  Description: Message System Functions                                   │
  790. │       Author: Vic Lewis                                                  │
  791. │ Date created: 04-18-92                                                   │
  792. │ Time created: 09:32:23pm                                                 │
  793. │    Copyright: Trilateral Systems Development Ltd.                        │
  794. ├──────────────────────────────────────────────────────────────────────────┤
  795. │     Function: TSD30000                                                   │
  796. │                                                                          │
  797. │    Arguments: None.                                                      │
  798. │                                                                          │
  799. │ Return Value: NIL                                                        │
  800. │                                                                          │
  801. └──────────────────────────────────────────────────────────────────────────┘
  802. */
  803. FUNCTION TSD30000()
  804. LOCAL lExit := .F., nGetExit
  805. LOCAL nWin1 := twOpen( FULLSCREEN, COLORN, DSHADOW, DFRAME, "", COLORFN )
  806. LOCAL aActionKeys :=   {{ 1, { || TSD30001() }},;
  807.                         { 2, { || TSD30002() }},;
  808.                         { 3, { || TSD30003() }},;
  809.                         { 4, { || TSD30004() }}}
  810.  
  811. twTitle( PADC( "TSDWIN Message Systems", 30 ), TCOLOR )
  812. DO WHILE !lExit
  813.  
  814.     nGetExit := twButtonBox( "V", ;
  815.                "Welcome to «TSDWIN»'s Message Systems. "+ ;
  816.                "With «TSDWIN V2.00» looking after the details, you get "+ ;
  817.                "more time to look after the important part of "+ ;
  818.                "your application... «The Data»!", ;
  819.                { "This is a twButtonBox() Acting Like a Menu", TCOLOR },, ;
  820.                { "Alert Messages", ;
  821.                  "Windowed Messages", ;
  822.                  "Line/Area Messages", ;
  823.                  "Mouse Support", ;
  824.                  "Main Menu" },, ;
  825.                5, 5, 17, 74, DSHADOW, DFRAME,, aActionKeys )
  826.  
  827.     IF nGetExit = 5 .OR. nGetExit  =  0
  828.         lExit := .T.
  829.     ENDIF
  830.  
  831. ENDDO
  832. twPop()
  833.  
  834. RETURN NIL
  835.  
  836. /*
  837. ┌──────────────────────────────────────────────────────────────────────────┐
  838. │  Description: Alert System                                               │
  839. │       Author: Vic Lewis                                                  │
  840. │ Date created: 08-26-92                                                   │
  841. │ Time created: 01:30:48pm                                                 │
  842. │    Copyright: Trilateral Systems Development Ltd.                        │
  843. ├──────────────────────────────────────────────────────────────────────────┤
  844. │     FUNCTION TSD30001()                                                  │
  845. │                                                                          │
  846. │    Arguments:                                                            │
  847. │                                                                          │
  848. │ Return Value: NIL                                                        │
  849. │                                                                          │
  850. └──────────────────────────────────────────────────────────────────────────┘
  851. */
  852. FUNCTION TSD30001()
  853. LOCAL RetVal, cClrTemp
  854. LOCAL AText1 := ;
  855.       "One function is used in TSDWIN to create various types of " + ;
  856.       "alert boxes: PushButton Boxes, Radio Boxes and Select Boxes. " + ;
  857.       "Default buttons are created of none are passed, or, if passed " + ;
  858.       "as an array, buttons are created and displayed. In the case of " + ;
  859.       "PushButtons, they are shadowed with a thin shadow of the same " + ;
  860.       "type as the controlling window. The frame type is the same as " + ;
  861.       "that of the controlling window. The colour for each type of box " + ;
  862.       "defaults to an initial value, but is defineable. Shadow and frame " + ;
  863.       "type are defineable with each function call. The Buttons, or other " + ;
  864.       "select devices may be positioned horizontally or vertically."
  865. LOCAL ATEXT2 := ;
  866.       "The return values are, for twButtonBox() and twRadioBox(), the element " + ;
  867.       "of the array in which the buttons are held. For twCheckBox(), an array " + ;
  868.       "of checked elements is returned. All three of these functions act " + ;
  869.       "like similar constructs in MS-Windows. For the twButtonBox() function, " + ;
  870.       "the default Exit key is the Enter or Escape key. For twCheckBox() and " + ;
  871.       "twRadioBox(), Enter or Space toggles the selection and the Escape key " + ;
  872.       "exits the routine. Only SINGLE choices are allowed with twButtonBox() " + ;
  873.       "and twRadioBox(). Multiple choices are allowed with twCheckBox(). " + ;
  874.       "You may pass either new Exit keys or additonal " + ;
  875.       "Action keys to the function. With this feature, you may use any one " + ;
  876.       "of these functions to present a pop-up menu with very little " + ;
  877.       "code. The menu choice can then be simply the function itself. With " + ;
  878.       "Action keys, you can extend the usefulness of these functions in any " + ;
  879.       "number of ways. More examples will be available on the TSD support " + ;
  880.       "board."
  881. LOCAL AText3 := ;
  882.       "Watch while we demonstrate the same functions called with a vertical " + ;
  883.       "configuration. Remember, all that need be passed is the message text " + ;
  884.       "and an array of choices! We'll show the RETURN values with another " + ;
  885.       "TSDWIN Messaging function twInfo(), after you make a selection."
  886.  
  887. twCheckBox( "H", ;                                // Style
  888.           AText1, ;                             // Message
  889.           {  "twCheckBox() with Custom Features", TCOLOR },, ; // Title ( No Button Number )
  890.           { "Check", "As", "Many", ;            // Button
  891.             "As", "You", "Want" }, ;            //   Array
  892.           2, 3, 5, 18, 74, DSHADOW, DFRAME )               // Start, Coords, Shadow, Frame
  893.  
  894. twRadioBox( "H", ;                                // Style
  895.           AText2, ;                             // Message
  896.           { "This Uses twRadioBox()", TCOLOR },, ;            // Title ( No Button Number )
  897.           { "What's On", "The Radio", ;         // Button
  898.             "Tonight", "Dear" }, ;              //   Array
  899.           3, 2, 3, 21, 76, DSHADOW, DFRAME )               // Start, Coords, Shadow, Frame
  900.  
  901. RetVal := twCheckBox( "V", ;
  902.           AText3, ;
  903.           { "Here's twCheckBox() Vertical", TCOLOR },, ;
  904.           { "Who Says", "You Can", "Only Pick", "One??" }, ;
  905.           1,, 7,, 71, DSHADOW, DFRAME )
  906. CheckRtn( RetVal )
  907.  
  908. RetVal := twRadioBox( "V", ;
  909.           AText3, ;
  910.           { "I Know Why These are Called Radio Boxes!", TCOLOR },, ;
  911.           { "WKRP", "CHFI", "WNYC", "CKFM", "C100", "TSDL" }, ;
  912.           5, 2, 5, 16, 54, DSHADOW, DFRAME )
  913. CheckRtn( RetVal )
  914.  
  915. RetVal := twButtonBox( "V", ;
  916.           AText3 + " Have a look at the DEMO to see how easy " + ;
  917.           "it is to do things like this!", ;
  918.           { "LISTEN HERE!", TCOLOR },, ;
  919.           {"Well Now", ;
  920.            "It's About Time", ;
  921.            "We Got", ;
  922.            "A Few Things Straight, Dont' You?", ;
  923.            "TSDWIN Can", ;
  924.            "Make Your Life Easier", ;
  925.            "And Your Applications", ;
  926.            "More Coherent", ;
  927.            "Have No Doubt About That" }, ;
  928.            5, 2, 5, 22, 73, DSHADOW, DFRAME )
  929. CheckRtn( RetVal )
  930.  
  931. twButtonBox( "H", "Now, wasn't that fun? You have seen some of the best Clipper functions"+;
  932.           " ever made. "+;
  933.           " TSD Ltd. will also be the first to provide Clipper users with a pseudo-object which turns lead into"+;
  934.           " gold, with the correct parameters! The parameter list will be supplied on"+;
  935.           " registration. One of the parameters will trigger a previously undocumented DOS"+;
  936.           " interrupt which starts a process rolling which will ultimately set the lead into gold routine into motion."+;
  937.           " After a suitable processing time, thin sheets of pure gold will start issuing"+;
  938.           " from the access door of the floppy drive designated as 'A' on your machine. "+;
  939.           " TSD recommends you advise your customers to have Brinks on hand when using this function."+;
  940.           " Please be warned that this particular routine may fail with some combinations of hardware."+;
  941.           " This routine has been tested on some types of hardware."+;
  942.           " Consult your hardware dealer for details about your BIOS if it doesn't work for you...", "GOLD! GOLD!! GOLD!!!", ;
  943.           1,,, 2, 5, 22, 75, DSHADOW, DFRAME )
  944.  
  945. RETURN NIL
  946.  
  947. /*
  948. ┌──────────────────────────────────────────────────────────────────────────┐
  949. │  Description: Message System                                             │
  950. │       Author: Vic Lewis                                                  │
  951. │ Date created: 08-26-92                                                   │
  952. │ Time created: 01:31:40pm                                                 │
  953. │    Copyright: Trilateral Systems Development Ltd.                        │
  954. ├──────────────────────────────────────────────────────────────────────────┤
  955. │     FUNCTION TSD30002()                                                  │
  956. │                                                                          │
  957. │    Arguments:                                                            │
  958. │                                                                          │
  959. │ Return Value:                                                            │
  960. │     See Also:                                                            │
  961. │                                                                          │
  962. └──────────────────────────────────────────────────────────────────────────┘
  963. */
  964. FUNCTION TSD30002()
  965. LOCAL Var2Read := SPACE( 20 ), Var2 := SPACE( 20 )
  966.  
  967. twWarn( " Trying a Warning Message ",,,,, DSHADOW, DFRAME )
  968. twInfo( " Trying an Info Message ",,,,, DSHADOW, DFRAME )
  969. twTextMsg("Trying a Text Message. With this one we have to have the thing do a word"+;
  970.         "wrap to put it into the box.",,,5,5,15,45,, DSHADOW, DFRAME )
  971.  
  972. twInquire( {"Trying out an Inquire Message:",;
  973.            "Let's see if more lines will work out OK too?",;
  974.            "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",;
  975.            "";
  976.            },, Var2Read,,, DSHADOW, DFRAME )
  977.  
  978. twInquire( "Trying out another Inquire Message:","Trying", Var2 )
  979.  
  980. twInfo( {" Trying an Info Message ",;
  981.        "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6",;
  982.        "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12" };
  983.        ,,,,, DSHADOW, DFRAME )
  984.  
  985. twMsgInit( 1, IIF( !lMono, "gr+/r,w/n,,,w+/n", "n/w,w+/n,,,w/n"))
  986.  
  987. twInfo( {" You can change colours ",;
  988.        "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7" };
  989.        ,,,,, DSHADOW, DFRAME )
  990.  
  991. twMsgInit( 1, { COLORE, TCOLOR })
  992. RETURN NIL
  993.  
  994. /*
  995. ┌──────────────────────────────────────────────────────────────────────────┐
  996. │  Description: Area Message System                                        │
  997. │       Author: Vic Lewis                                                  │
  998. │ Date created: 08-26-92                                                   │
  999. │ Time created: 01:32:05pm                                                 │
  1000. │    Copyright: Trilateral Systems Development Ltd.                        │
  1001. ├──────────────────────────────────────────────────────────────────────────┤
  1002. │     FUNCTION TSD30003()                                                  │
  1003. │                                                                          │
  1004. │    Arguments:                                                            │
  1005. │                                                                          │
  1006. │ Return Value:                                                            │
  1007. │     See Also:                                                            │
  1008. │                                                                          │
  1009. └──────────────────────────────────────────────────────────────────────────┘
  1010. */
  1011. FUNCTION TSD30003()
  1012. BEEPER
  1013. twInfoLine( 5, "twInfoLine() Puts Messages in a Pre-Defined Area. ( «Any Key» or «Button» )" , "L" )
  1014. BEEPER
  1015. twInfoLine( 5, "You Pick the Justification ( «Any Key» or «Button» )" , "C" )
  1016. BEEPER
  1017. twInfoLine( 5, "You can also Change the Area! ( «Any Key» or «Button» )" , "R", 20 )
  1018. BEEPER
  1019. twInfoLine( 5, "You can have «TWO» Colour Attributes too! ( «Any Key» or «Button» )" )
  1020. BEEPER
  1021. twWarnLine( 5, "twWarnLine() is the same «EXCEPT» for the default colour." )
  1022. RETURN NIL
  1023.  
  1024. /*
  1025. ┌──────────────────────────────────────────────────────────────────────────┐
  1026. │  Description: Messages Mouse Support                                     │
  1027. │       Author: Vic Lewis                                                  │
  1028. │ Date created: 08-26-92                                                   │
  1029. │ Time created: 01:32:36pm                                                 │
  1030. │    Copyright: Trilateral Systems Development Ltd.                        │
  1031. ├──────────────────────────────────────────────────────────────────────────┤
  1032. │     FUNCTION TSD30004()                                                  │
  1033. │                                                                          │
  1034. │    Arguments:                                                            │
  1035. │                                                                          │
  1036. │ Return Value:                                                            │
  1037. │                                                                          │
  1038. └──────────────────────────────────────────────────────────────────────────┘
  1039. */
  1040. FUNCTION TSD30004()
  1041. LOCAL aMsg := {}
  1042. AADD( aMsg, "Mouse support for the TSDWIN message systems is automatic." )
  1043. AADD( aMsg, "" )
  1044. AADD( aMsg, "When using twInfo() and twWarn() the right button  returns" )
  1045. AADD( aMsg, "the ESC key and the left button, the ENTER key." )
  1046. AADD( aMsg, "" )
  1047. AADD( aMsg, "With the Alert Boxes,  the  Right Button always enters ESC" )
  1048. AADD( aMsg, "The left will 'Select' in twButtonBox() and 'Tag  or Mark'" )
  1049. AADD( aMsg, "in twCheckBox() and twRadioBox()" )
  1050. AADD( aMsg, "" )
  1051. AADD( aMsg, "twInfoLine() and twWarnLine() simply wait for a button  or" )
  1052. AADD( aMsg, "key press, IF they are in a waiting state. " )
  1053. AADD( aMsg, "" )
  1054. AADD( aMsg, "The windowed and area messages may be called to:" )
  1055. AADD( aMsg, "       Wait for a button or key press" )
  1056. AADD( aMsg, "       Leave their display on the screen" )
  1057. AADD( aMsg, "       Leave their display then remove it later." )
  1058. UserMsg( aMsg )
  1059. RETURN NIL
  1060.  
  1061. /*
  1062. ┌──────────────────────────────────────────────────────────────────────────┐
  1063. │  Description: Check a return value and display it.                       │
  1064. │       Author: Vic Lewis                                                  │
  1065. │ Date created: 04-19-92                                                   │
  1066. │ Time created: 08:32:36am                                                 │
  1067. │    Copyright: Trilateral Systems Development Ltd.                        │
  1068. ├──────────────────────────────────────────────────────────────────────────┤
  1069. │     Function: CheckRtn                                                   │
  1070. │                                                                          │
  1071. │    Arguments: RetVal                                                     │
  1072. │                                                                          │
  1073. │ Return Value:                                                            │
  1074. │                                                                          │
  1075. └──────────────────────────────────────────────────────────────────────────┘
  1076. */
  1077. FUNCTION CheckRtn( RetVal )
  1078. LOCAL aTempArray := {}, aLen, Cntr
  1079. IF VALTYPE( RetVal ) == 'N'
  1080.     AADD( aTempArray, "Your Return Value Was:" )
  1081.     AADD( aTempArray, "Element Number: "+STRINT( RetVal ))
  1082.     twInfo( aTempArray,,,,, DSHADOW, DFRAME )
  1083. ELSEIF VALTYPE( RetVal ) == 'A'
  1084.     aLen := LEN( RetVal );Cntr:=0
  1085.     AADD( aTempArray, "You Picked:" )
  1086.     AEVAL( RetVal, {|| Cntr++, AADD( aTempArray, RetVal[ Cntr] ) } )
  1087.     twInfo( aTempArray,,,,, DSHADOW, DFRAME )
  1088. ENDIF
  1089. RETURN .T.
  1090.  
  1091. /*
  1092. ┌──────────────────────────────────────────────────────────────────────────┐
  1093. │  Description: TSDWIN Menu Systems                                        │
  1094. │       Author: Vic Lewis                                                  │
  1095. │ Date created: 04-19-92                                                   │
  1096. │ Time created: 09:25:16am                                                 │
  1097. │    Copyright: Trilateral Systems Development Ltd.                        │
  1098. ├──────────────────────────────────────────────────────────────────────────┤
  1099. │     Function: TSD40000                                                   │
  1100. │                                                                          │
  1101. │    Arguments: None.                                                      │
  1102. │                                                                          │
  1103. │ Return Value: NIL                                                        │
  1104. │                                                                          │
  1105. └──────────────────────────────────────────────────────────────────────────┘
  1106. */
  1107. FUNCTION TSD40000()
  1108. LOCAL amArray, nChoice, cHeader, aMsg, wT, wL, nX
  1109. LOCAL nRowSkip, cJustify, cUser, nStartRow, lSBar
  1110. LOCAL aItems := { "one","two","three","four","five","six","seven","eight",;
  1111.                 "nine","ten","eleven","twelve","thirteen","fourteen",;
  1112.                 "fifteen","sixteen","seventeen","eighteen","nineteen",;
  1113.                 "twenty" }
  1114. LOCAL nRow := 5, nStartCol := 1, nEndCol := MAXCOL() - 1
  1115. LOCAL nStart := 0
  1116.  
  1117. UserMsg( { "The Main Menu in this demo uses  'twMenuTo().",;
  1118.            "This demonstration shows how  twPopMenu() and",;
  1119.            "twPopChoice() can be used to create menus.", "",;
  1120.            "The main differences between the two are  the",;
  1121.            "automatic handling of HotKeys in  twPopMenu()",;
  1122.            "and the different mouse confinement when  you",;
  1123.            "use twPopChoice().", "",;
  1124.            "For a more detailed description of the Choice",;
  1125.            "functions, see the section on Browses!", "",;
  1126.            "twLineMenu() gives you an expandable bar line",;
  1127.            "menu with indicators and mouse support." })
  1128.  
  1129. twOpen( FULLSCREEN, COLORN, DSHADOW, D2FRAME, "", COLORFN )
  1130. twTitle( PADC( "TSDWIN Menus", 30 ), TCOLOR, "T", "C" )
  1131.  
  1132. amArray := { "«1.» Menu Item 1", ;
  1133.              "«2.» Menu Item 2", ;
  1134.              "«3.» Menu Item 3", ;
  1135.              "«4.» Menu Item 4", ;
  1136.              "«5.» Menu Item 5", ;
  1137.              "«Q.» Quit" }
  1138. nChoice := 1
  1139. DO WHILE nChoice != 0
  1140.     cHeader    := "twPopMenu()"
  1141.     aMsg       := NIL
  1142.     wT         := 7
  1143.     wL         := 15
  1144.     nRowSkip   := 1
  1145.     nChoice := twPopMenu( amArray, cHeader, aMsg, wT, wL, nChoice, MENUPCLR, ;
  1146.                           DSHADOW, D2FRAME, MENUFCLR, MENUTCLR, nRowSkip )
  1147.     DO CASE
  1148.         CASE nChoice >= 1 .AND. nChoice <= 5
  1149.             UserMsg( "You Chose " + STRINT( nChoice ))
  1150.         CASE nChoice = 6
  1151.             EXIT
  1152.     ENDCASE
  1153. ENDDO
  1154.  
  1155. nChoice := 1
  1156. SETBLINK( .F. )
  1157. DO WHILE nChoice != 0
  1158.     cHeader    := "twPopMenu()"
  1159.     aMsg       := NIL
  1160.     wT         := 5
  1161.     wL         := 15
  1162.     nRowSkip   := 2
  1163.     nChoice := twPopMenu( amArray, cHeader, aMsg, wT, wL, nChoice, MENUPCLR, ;
  1164.                           DSHADOW, D2FRAME, MENUFCLR, MENUTCLR, nRowSkip )
  1165.     DO CASE
  1166.         CASE nChoice >= 1 .AND. nChoice <= 5
  1167.             UserMsg( "You Chose " + STRINT( nChoice ))
  1168.         CASE nChoice = 6
  1169.             EXIT
  1170.     ENDCASE
  1171. ENDDO
  1172.  
  1173. nX := 0
  1174. AEVAL( amArray, {|| nX++, amArray[ nX ] := ;
  1175.                  STRTRAN( STRTRAN( amArray[ nX ], "»", "" ), "«", "" )})
  1176. nChoice := 1
  1177. DO WHILE nChoice != 0
  1178.     cHeader    := "twPopChoice()"
  1179.     aMsg       := NIL
  1180.     wT         := 8
  1181.     wL         := 45
  1182.     cJustify   := "L"
  1183.     cUser      := NIL
  1184.     nStartRow  := 3
  1185.     lSBar      := .F.
  1186.     nChoice := twPopChoice( amArray, cHeader, wT, wL, nChoice, MENUPCLR, DSHADOW, ;
  1187.                             D2FRAME, MENUFCLR, cJustify, cUser, nStartRow, lSbar )
  1188.     DO CASE
  1189.         CASE nChoice >= 1 .AND. nChoice <= 5
  1190.             twInfo( "You Chose " + STRINT( nChoice ))
  1191.         CASE nChoice = 6
  1192.             EXIT
  1193.     ENDCASE
  1194. ENDDO
  1195.  
  1196. amArray := {}
  1197. FOR nChoice = 1 TO 30
  1198.     AADD( amArray, PADL( STRINT( nChoice ), 2 ) +   ". Menu Item " + STRINT( nChoice ))
  1199. NEXT
  1200. nChoice := 1
  1201. SETBLINK( .F. )
  1202. DO WHILE nChoice != 0
  1203.     cHeader    := "twPopChoice()"
  1204.     aMsg       := NIL
  1205.     wT         := 8
  1206.     wL         := 45
  1207.     cJustify   := "L"
  1208.     cUser      := NIL
  1209.     nStartRow  := 3
  1210.     lSBar      := .T.
  1211.     nChoice := twPopChoice( amArray, cHeader, wT, wL, nChoice, MENUPCLR, DSHADOW, ;
  1212.                             D2FRAME, MENUFCLR, cJustify, cUser, nStartRow, lSbar )
  1213.     IF nChoice >= 1 .AND. nChoice <= 30
  1214.         twInfo( "You Chose " + STRINT( nChoice ))
  1215.     ELSE
  1216.         EXIT
  1217.     ENDIF
  1218. ENDDO
  1219.  
  1220.  
  1221. DO WHILE .T.
  1222.  
  1223.     nChoice := twLineMenu( nRow, nStartCol, nEndCol, aItems, 2, MENUPCLR )
  1224.  
  1225.     IF nChoice = 0
  1226.         EXIT
  1227.     ENDIF
  1228.  
  1229.     UserMsg( "You Chose " + aItems[ nChoice ] )
  1230.  
  1231. ENDDO
  1232.  
  1233. aItems := {}
  1234. nRow += 3
  1235. USE Windemo
  1236. DO WHILE !EOF()
  1237.     AADD( aItems, " " +TRIM( Windemo->Ice_Cream ) )
  1238.     SKIP
  1239. ENDDO
  1240.  
  1241. DO WHILE .T.
  1242.  
  1243.     nChoice := twLineMenu( nRow, nStartCol + 2, nEndCol - 2, aItems,, MENUPCLR;
  1244.                             ,, .F.,, {|| twTitle( "Windowed twLineMenu() Test", TCOLOR) },;
  1245.                             , .T., DSHADOW, D2FRAME, MENUFCLR )
  1246.  
  1247.     IF nChoice = 0
  1248.         EXIT
  1249.     ENDIF
  1250.  
  1251.     UserMsg( "You Chose " + aItems[ nChoice ] )
  1252. ENDDO
  1253.  
  1254. twPop()
  1255. RETURN NIL
  1256.  
  1257. /*
  1258. ┌──────────────────────────────────────────────────────────────────────────┐
  1259. │  Description: TSDWIN Browse Systems                                      │
  1260. │       Author: Vic Lewis                                                  │
  1261. │ Date created: 04-19-92                                                   │
  1262. │ Time created: 10:20:04am                                                 │
  1263. │    Copyright: Trilateral Systems Development Ltd.                        │
  1264. ├──────────────────────────────────────────────────────────────────────────┤
  1265. │     Function: TSD50000                                                   │
  1266. │                                                                          │
  1267. │    Arguments: None                                                       │
  1268. │                                                                          │
  1269. │ Return Value: NIL                                                        │
  1270. │                                                                          │
  1271. └──────────────────────────────────────────────────────────────────────────┘
  1272. */
  1273. FUNCTION TSD50000()
  1274. LOCAL nTop, nLeft, nBottom, nRight, cUser, nStartItem, nWinRow, aSrch
  1275. LOCAL nTag, cACColor, cBarColor, wT, wL, wB, wR, nChoice, amArray, aLogicals
  1276. LOCAL nButRow, nButCol, aMouseID, f, nParts, nCost, nSell, aHelp, aColumns
  1277. LOCAL cTitle, cTopKey, bScopeBlock, lEditFlag, aActionKeys, wColor, wSType
  1278. LOCAL wFType, wFColor, lScBar, lMsgs, lAlite, nFreeze, lStabilize, bPreRun
  1279. LOCAL bPostRun, nExitKey, aSeparators, lOKAppend, lSound, nCount, aTemp
  1280.  
  1281. UserMsg( { "To conserve space, only the new  browses in  TSDWIN V 2.00",;
  1282.            "will be demonstrated here. They automatically invoke mouse",;
  1283.            "support if you have called twMouseInit() at the  beginning",;
  1284.            "of your program.", "",;
  1285.            "We shall show you:", "",;
  1286.            "    twACChoice() - a moused replacement for ACHOICE()",;
  1287.            "    twABBrowse() - a simple array browser.",;
  1288.            "    twRABrowse() - a totally configurable array browser.",;
  1289.            "    twBRBrowse() - a totally configurable DBF browser.", "",;
  1290.            "You should consult TSDWIN.NG for more information on these",;
  1291.            "functions, as they are very flexible.", "",;
  1292.            "During the demo, the line at the bottom of the screen, and",;
  1293.            "displayed buttons will be Mouse Hot Spots." })
  1294.  
  1295. twOpen( FULLSCREEN, COLORM, DSHADOW, DFRAME, "∙", COLORFM )
  1296. twTitle( PADC( "TSDWIN Browse Systems", 30 ), TCOLOR, "T", "C" )
  1297.  
  1298. twOpen( 3, 3, 21, 76, COLORN, DSHADOW, DFRAME,, COLORFN )
  1299.  
  1300. nTop       := twRow( 3 )
  1301. nLeft      := twCol( 4 )
  1302. nBottom    := twRow( 10 )
  1303. nRight     := twCol( 22 )
  1304. cUser      := NIL
  1305. nStartItem := 1
  1306. nWinRow    := 1
  1307. lScBar     := .T.
  1308. nTag       := 0
  1309. cACColor   := IIF( ! lMono, "w+/br,gr+/r,n/bg,w+/r,w/br", ;
  1310.                             "w+/n,n/w,n/w,w/n,w+/n" )
  1311. cBarColor  := IIF( ! lMono, "w+/g" , "n/w" )
  1312.  
  1313. twClear( .F.)
  1314. twTitle( PADC( "twACChoice() with No Tagging + Logicals", 55 ), "n/w")
  1315. twSay( 12, 3, "Right Button: Exit   │ Left Button: Select" )
  1316. twSay( 13, 3, "       ENTER: Select │         ESC: Exit" )
  1317. twSay( 14, 3, 'cACColor  := "w+/br,gr+/r,n/bg,w+/r,w/br"' )
  1318. twSay( 15, 3, 'cBarColor := "w+/g"' )
  1319. twSay( 16, 3, '     nTag := 0' )
  1320. twBox( 2, 3, 11, 24, 1 )
  1321. nChoice := 1
  1322. DO WHILE nChoice != 0
  1323.  
  1324.     amArray := {}
  1325.     FOR nChoice = 1 TO 30
  1326.         AADD( amArray, PADL( STRINT( nChoice ), 2 ) +   ". Menu Item " + STRINT( nChoice ))
  1327.     NEXT
  1328.     aLogicals := ARRAY( 30 )
  1329.     AFILL( aLogicals, .T. )
  1330.     aLogicals[ 04 ] := .F.
  1331.     aLogicals[ 14 ] := .F.
  1332.     aLogicals[ 15 ] := .F.
  1333.     aLogicals[ 20 ] := .F.
  1334.     aLogicals[ 22 ] := .F.
  1335.     aLogicals[ 23 ] := .F.
  1336.     aLogicals[ 24 ] := .F.
  1337.     aLogicals[ 25 ] := .F.
  1338.     aLogicals[ 26 ] := .F.
  1339.  
  1340.     nChoice := twACChoice( nTop, nLeft, nBottom, nRight, amArray, ;
  1341.                         aLogicals, cUser, nStartItem, nWinRow, ;
  1342.                         lScBar, nTag, cACColor, cBarColor )
  1343.     UserMsg( "You Chose " + STRINT( nChoice ))
  1344.  
  1345. ENDDO
  1346.  
  1347. twClear( .F.)
  1348. nButRow := _twTop()
  1349. nButCol := 50
  1350. cACColor   := IIF( ! lMono, "w+/g,bg+/n,n/bg,w+/r,w/gr", ;
  1351.                             "w+/n,n/w,n/w,w/n,w+/n" )
  1352. cBarColor  := IIF( ! lMono, "n/bg+" , "n/w" )
  1353.  
  1354. aMouseID := ARRAY( 7 )
  1355. twCreateButton( nButRow, nButCol, PADC( "Help", 13), .F., IIF( !lMono, "gr+/r", "n/w"))
  1356.  
  1357. #IFNDEF NOMOUSE
  1358.     aMouseID[ 1 ] := twACHotSpot( twRow( nButRow ), twCol( nButCol ), twRow( nButRow ), twCol( nButCol + 13 ), ;
  1359.                     {|| SpotDeactivate( aMouseID ),;
  1360.                         _twKBoard( K_F1 ),;
  1361.                         SpotActivate( aMouseID ) } , 1, , .T. )
  1362. #ENDIF
  1363. nButRow += 2
  1364. twCreateButton( nButRow, nButCol, PADC( "Tag All", 13), .F., IIF( !lMono, "gr+/r", "n/w"))
  1365.  
  1366. #IFNDEF NOMOUSE
  1367.     aMouseID[ 2 ] := twACHotSpot( twRow( nButRow ), twCol( nButCol ), twRow( nButRow ), twCol( nButCol + 13 ), ;
  1368.                     {|| _twKBoard( K_F7 ) } , 1, , .T. )
  1369. #ENDIF
  1370. nButRow += 2
  1371. twCreateButton( nButRow, nButCol, PADC( "UnTag All", 13), .F., IIF( !lMono, "gr+/r", "n/w"))
  1372. #IFNDEF NOMOUSE
  1373.     aMouseID[ 3 ] := twACHotSpot( twRow( nButRow ), twCol( nButCol ), twRow( nButRow ), twCol( nButCol + 13 ), ;
  1374.                     {|| _twKBoard( K_F8 ) } , 1, , .T. )
  1375. #ENDIF
  1376. nButRow += 2
  1377. twCreateButton( nButRow, nButCol, PADC( "Swap Tags", 13), .F., IIF( !lMono, "gr+/r", "n/w"))
  1378. #IFNDEF NOMOUSE
  1379.     aMouseID[ 4 ] := twACHotSpot( twRow( nButRow ), twCol( nButCol ), twRow( nButRow ), twCol( nButCol + 13 ), ;
  1380.                     {|| _twKBoard( K_F9 ) } , 1, , .T. )
  1381. #ENDIF
  1382. nButRow += 2
  1383. twCreateButton( nButRow, nButCol, PADC( "Tag Current", 13), .F., IIF( !lMono, "gr+/r", "n/w"))
  1384. #IFNDEF NOMOUSE
  1385.     aMouseID[ 5 ] := twACHotSpot( twRow( nButRow ), twCol( nButCol ), twRow( nButRow ), twCol( nButCol + 13 ), ;
  1386.                     {|| __keyboard( CHR( 32 ))} , 1, , .T. )
  1387. #ENDIF
  1388. nButRow += 2
  1389. twCreateButton( nButRow, nButCol, PADC( "Select", 13), .F., IIF( !lMono, "gr+/r", "n/w"))
  1390. #IFNDEF NOMOUSE
  1391.     aMouseID[ 6 ] := twACHotSpot( twRow( nButRow ), twCol( nButCol ), twRow( nButRow ), twCol( nButCol + 13 ), ;
  1392.                     {|| __keyboard( CHR( 13 ))} , 1, , .T. )
  1393. #ENDIF
  1394. nButRow += 2
  1395. twCreateButton( nButRow, nButCol, PADC( "Done", 13), .F., IIF( !lMono, "gr+/r", "n/w"))
  1396. #IFNDEF NOMOUSE
  1397.     aMouseID[ 7 ] := twACHotSpot( twRow( nButRow ), twCol( nButCol ), twRow( nButRow ), twCol( nButCol + 13 ), ;
  1398.                     {|| __keyboard( CHR( 27 ))} , 1, , .T. )
  1399. #ENDIF
  1400.  
  1401. SETKEY( K_F1, {|| HelpACChoice() } )
  1402.  
  1403. nTag       := 1 // Allow Tagging, NOT pretagged
  1404.  
  1405. twTitle( PADC( "twACChoice() with Default Tagging + NIL Logicals", 55 ), "n/w")
  1406. twSay( 12, 3, "Right Button: Tag    │ Left Button: Select" )
  1407. twSay( 13, 3, "       ENTER: Select │         ESC: Exit" )
  1408. twSay( 14, 3, "       SPACE: Tag" )
  1409. twSay( 15, 3, 'cACColor  := "w+/b,bg+/n,n/bg,w+/r,w/gr"' )
  1410. twSay( 16, 3, 'cBarColor := "n/bg+"' )
  1411. twSay( 17, 3, '     nTag := 1' )
  1412. nChoice := 1
  1413. DO WHILE nChoice != 0
  1414.  
  1415.     amArray := {}
  1416.     FOR nChoice = 1 TO 30
  1417.         AADD( amArray, PADL( STRINT( nChoice ), 2 ) +   ". Menu Item " + STRINT( nChoice ))
  1418.     NEXT
  1419.     aLogicals := ARRAY( 30 )
  1420.     aLogicals := NIL
  1421.  
  1422.     nChoice := twACChoice( nTop, nLeft, nBottom, nRight, amArray, ;
  1423.                         aLogicals, cUser, nStartItem, nWinRow, ;
  1424.                         lScBar, nTag, cACColor, cBarColor )
  1425.     UserMsg( "You Chose " + STRINT( nChoice ))
  1426. ENDDO
  1427.  
  1428. nTag       := 2 // Allow tagging - PreTagged
  1429.  
  1430. nChoice := 1
  1431. cACColor   := IIF( ! lMono, "n/bg,gr+/r,r/w,w+/g,w/b", ;
  1432.                             "w+/n,n/w,n/w,w/n,w+/n" )
  1433. cBarColor  := IIF( ! lMono, "w+/b" , "n/w" )
  1434. twTitle( PADC( "twACChoice() with Pre-Tagging + True Logicals", 55 ), "n/w")
  1435. twSay( 12, 3, "Right Button: Tag    │ Left Button: Select" )
  1436. twSay( 13, 3, "       ENTER: Select │         ESC: Exit" )
  1437. twSay( 14, 3, "       SPACE: Tag" )
  1438. twSay( 15, 3, 'cACColor   := "n/bg,gr+/r,r/w,w+/g,w/b"' )
  1439. twSay( 16, 3, 'cBarColor  := "w+/b"' )
  1440. twSay( 17, 3, '     nTag := 2' )
  1441. DO WHILE nChoice != 0
  1442.     amArray := {}
  1443.     FOR nChoice = 1 TO 30
  1444.         AADD( amArray, PADL( STRINT( nChoice ), 2 ) +   ". Menu Item " + STRINT( nChoice ))
  1445.     NEXT
  1446.     aLogicals := ARRAY( 30 )
  1447.     AFILL( aLogicals, .T. )
  1448.     FOR f = 1 TO LEN( amArray )
  1449.         // Create some tags
  1450.         IF f / 2 == INT( f / 2 )
  1451.             amArray[ f ] := amArray[ f ] + "√"
  1452.         ELSE
  1453.             amArray[ f ] := amArray[ f ] + " "
  1454.         ENDIF
  1455.     NEXT
  1456.  
  1457.     nChoice := twACChoice( nTop, nLeft, nBottom, nRight, amArray, ;
  1458.                         aLogicals, cUser, nStartItem, nWinRow, ;
  1459.                         lScBar, nTag, cACColor, cBarColor )
  1460.     UserMsg( "You Chose " + STRINT( nChoice ))
  1461. ENDDO
  1462. twPop()
  1463.  
  1464. #IFNDEF NOMOUSE
  1465.     FOR nChoice = 1 TO 7
  1466.         twACRemHotSpot( aMouseID[ nChoice ] )
  1467.     NEXT
  1468. #ENDIF
  1469.  
  1470. SET DELETED ON
  1471. SET CONFIRM ON
  1472.  
  1473. USE PART INDEX PART1 ALIAS Part NEW
  1474. nParts := 0; nCost := 0; nSell := 0
  1475. DBEVAL( {|| nParts += Part->PonHand, ;
  1476.             nCost += ( Part->PonHand * Part->PCost ),;
  1477.             nSell += ( Part->PonHand * Part->PSell ) } )
  1478. GO TOP
  1479.  
  1480. aHelp := {}
  1481. AADD( aHelp, {|| BRHelp( "GENHLP.DOC", "twBRBrowse() Demo Help", aMouseID ) } )
  1482. AADD( aHelp, {|| BRHelp( "COLHLP.DOC", "twBRBrowse() Demo Help", aMouseID ) } )
  1483. AADD( aHelp, {|| BRHelp( "ACTHLP.DOC", "twBRBrowse() Demo Help", aMouseID ) } )
  1484. AADD( aHelp, {|| BRHelp( "HOTHLP.DOC", "twBRBrowse() Demo Help", aMouseID ) } )
  1485. AADD( aHelp, {|| BRHelp( "MSEHLP.DOC", "twBRBrowse() Demo Help", aMouseID ) } )
  1486. AADD( aHelp, {|| BRHelp( "CARHLP.DOC", "twBRBrowse() Demo Help", aMouseID ) } )
  1487.  
  1488. wT          := 3
  1489. wL          := 11
  1490. wB          := 21
  1491. wR          := 68
  1492. aColumns    := {}
  1493. cTitle      := NIL
  1494. cTopKey     := NIL
  1495. bScopeBlock := NIL
  1496. lEditFlag   := .T.
  1497. aActionKeys := {}
  1498. wColor   := IIF( ! lMono, "w+/b,gr+/r,,gr+/b,bg+/b,br+/b,g+/b,n/w", ;
  1499.                           "w+/n,n/w,,w/n,w+/n,w/n,w+/n,n/w" )
  1500. wSType      := 3
  1501. wFType      := 10
  1502. wFColor     := IIF( !lMono, { "w+/b", "w/b" }, { "w+/n", "w/n"} )
  1503. lScBar      := .T.
  1504. lMsgs       := .T.
  1505. lAlite      := .T.
  1506. nFreeze     := 3
  1507. lStabilize  := .T.
  1508. bPreRun     := {|x,y| twTitle( "Sample Inventory Maintenance", "n/w", "T", "C" ),;
  1509.                     x := twBRGetBrowse(), y := x:GETCOLUMN( 2 ),;
  1510.                     y:colorblock := {|| { 5, 2 } },;
  1511.                     y := x:GETCOLUMN( 3 ),;
  1512.                     y:colorblock := {|| IIF( Part->POnHand > 500, { 1, 2 }, ;
  1513.                                         IIF( Part->POnHand < 100,  { 7,  2 }, { 6, 2 } )) },;
  1514.                     x:ColPos := 1 }
  1515. bPostRun    := NIL
  1516. nExitKey    := K_ALT_X
  1517. aSeparators := { "═", "  ", "─" }
  1518. lOKAppend   := .T.
  1519. lSound      := .T.
  1520. /*
  1521.  aSrch array structure
  1522.  
  1523.   { Column Number in which to start key display,
  1524.     Hilite Bar Exception Color
  1525.     Code block for search access to dbf.
  1526.     Prefix for common keys in scoped browses,
  1527.     Mask for display bar. }
  1528.  
  1529.   add columns
  1530.   AADD( aColumns, { cHead, bBlk, nWid, cFoot, lEdit, cPic, bWhn, bVld, ;
  1531.                     bRdr, aClr, bClr, cCsep, cHsep, cFsep })
  1532.  
  1533. */
  1534. aColumns := {}
  1535. AADD( aColumns, { "Part;Number", ;
  1536.                     {|x| IIF( x=NIL, Part->Pnumber, Part->Pnumber := x ) } ;
  1537.                     ,,, .T., "@! XXX-999999999",,, {|x| BRGetReader(x,,.T.) } })
  1538. AADD( aColumns, { "Part;Description", ;
  1539.                     {|x| IIF( x=NIL, Part->PDesc, Part->PDesc := x ) } ;
  1540.                     ,, "Total;Values;", .T., "@X",,, {|x| BRGetReader(x,,.T.) } })
  1541. AADD( aColumns, { "Number;On Hand", ;
  1542.                     {|x| IIF( x=NIL, Part->POnHand, Part->POnHand := x ) } ;
  1543.                     ,, TRANSFORM( nParts, "999999" ) + ";     $",;
  1544.                     .T., "9999",, {|x| ShowParts(x, @nParts, @nSell, @nCost ) }, {|x| BRGetReader(x,,.T.) } })
  1545. AADD( aColumns, { "Selling;Price", ;
  1546.                     {|x| IIF( x=NIL, Part->PSell, Part->PSell := x ) } ;
  1547.                     ,, "  ;" + TRANSFORM( nSell, "9999999.99" ),;
  1548.                     .T., "9999.99",, {|x| ShowSell(x, @nSell ) }, {|x| BRGetReader(x,,.T.) } })
  1549. AADD( aColumns, { "Cost;Price", ;
  1550.                     {|x| IIF( x=NIL, Part->PCost, Part->PCost := x ) } ;
  1551.                     ,, "  ;" + TRANSFORM( nCost, "9999999.99" ), .T., "9999.99",, {|x| ShowCost(x, @nCost ) } })
  1552.                     //,, .T., "9999.99",, {|x| ShowCost(x, @nCost ) }, {|x| BRGetReader(x,.F.) } })
  1553.  
  1554. /*
  1555. ┌──────────────────────────────────────────────────────────────────────────
  1556. │ add actionkeys
  1557. └──────────────────────────────────────────────────────────────────────────
  1558. */
  1559.  
  1560. aActionKeys := {}
  1561. AADD( aActionKeys, { K_F1, aHelp[ 1 ] })
  1562. AADD( aActionKeys, { K_F2, aHelp[ 2 ] })
  1563. AADD( aActionKeys, { K_F3, aHelp[ 3 ] })
  1564. AADD( aActionKeys, { K_F4, aHelp[ 4 ] })
  1565. AADD( aActionKeys, { K_F5, aHelp[ 5 ] })
  1566. AADD( aActionKeys, { K_F6, aHelp[ 6 ] })
  1567.  
  1568. #IFNDEF NOMOUSE
  1569. /*
  1570. ┌──────────────────────────────────────────────────────────────────────────
  1571. │ add hot spots
  1572. └──────────────────────────────────────────────────────────────────────────
  1573. */
  1574.  
  1575.     aMouseID := ARRAY( 6 )
  1576.     aMouseID[ 1 ] := twBRHotSpot( 24, 0, 24, 9,   aHelp[ 1 ], ;
  1577.                                     1,, .T. )
  1578.     aMouseID[ 2 ] := twBRHotSpot( 24, 11, 24, 20, aHelp[ 2 ], ;
  1579.                                     1,, .T. )
  1580.     aMouseID[ 3 ] := twBRHotSpot( 24, 22, 24, 34, aHelp[ 3 ], ;
  1581.                                     1,, .T. )
  1582.     aMouseID[ 4 ] := twBRHotSpot( 24, 36, 24, 47, aHelp[ 4 ], ;
  1583.                                     1,, .T. )
  1584.     aMouseID[ 5 ] := twBRHotSpot( 24, 49, 24, 56, aHelp[ 5 ], ;
  1585.                                     1,, .T. )
  1586.     aMouseID[ 6 ] := twBRHotSpot( 24, 58, 24, 65, aHelp[ 6 ], ;
  1587.                                     1,, .T. )
  1588.     aMouseID[ 6 ] := twBRHotSpot( 24, 67, 24, 74, {|| __keyboard( CHR( K_ESC )) } , ;
  1589.                                     1,, .T. )
  1590. #ENDIF
  1591.  
  1592. twInfoLine( -2, "«F1»∙General «F2»∙Columns «F3»∙Actionkeys «F4»∙Hot Spots «F5»∙Mouse «F6»∙Cargo «ESC»∙Exit" )
  1593. DO WHILE .T.
  1594.  
  1595.     twBRBrowse( wT, wL, wB, wR, aColumns, cTitle, cTopKey, ;
  1596.                 bScopeBlock, lEditFlag, aActionKeys, wColor, wSType, wFType, ;
  1597.                 wFColor, lScBar, lMsgs, lAlite, nFreeze, lStabilize, ;
  1598.                 bPreRun, bPostRun, nExitKey, aSeparators, ;
  1599.                 lOKAppend, lSound )
  1600.  
  1601.     IF LASTKEY() == K_ESC
  1602.         EXIT
  1603.     ENDIF
  1604. ENDDO
  1605.  
  1606. lAlite  := .F.
  1607. bPreRun := NIL
  1608. cTitle  := "Now Try The Speed Searching"
  1609. aSrch   := { 1, IIF( ! lMono, "n/*gr" , "w+/n" ) }
  1610.  
  1611. DO WHILE .T.
  1612.  
  1613.     twBRBrowse( wT, wL, wB, wR, aColumns, cTitle, cTopKey, ;
  1614.                 bScopeBlock, lEditFlag, aActionKeys, wColor, wSType, wFType, ;
  1615.                 wFColor, lScBar, lMsgs, lAlite, nFreeze, lStabilize, ;
  1616.                 bPreRun, bPostRun, nExitKey, aSeparators, ;
  1617.                 lOKAppend, lSound,,, aSrch )
  1618.  
  1619.     IF LASTKEY() == K_ESC
  1620.         EXIT
  1621.     ENDIF
  1622. ENDDO
  1623.  
  1624. /*
  1625. ┌──────────────────────────────────────────────────────────────────────────
  1626. │ Remove hot spots. MUST release memory
  1627. └──────────────────────────────────────────────────────────────────────────
  1628. */
  1629.  
  1630. #IFNDEF NOMOUSE
  1631.     FOR nCount = 1 TO LEN( aMouseID )
  1632.         twBRRemHotSpot( aMouseID[ nCount ] )
  1633.     NEXT
  1634. #ENDIF
  1635.  
  1636. twAMPop()
  1637.  
  1638. aTemp := {}
  1639. FOR nCount = 1 TO 10
  1640.     AADD( aTemp, "Array Element " + STR( nCount, 3 ) )
  1641. NEXT
  1642.  
  1643. wT          := 3
  1644. wL          := 25
  1645. wB          := 21
  1646. wR          := 54
  1647. wColor   := IIF( ! lMono, "bg+/rg,gr+/n,,w+/rg,bg+/b,r/w,w+/b,w+/g,n/w", ;
  1648.                           "w+/n,n/w,,w+/n,w/n,n/w,w+/n,w/n,n/w" )
  1649. wFColor     := IIF( !lMono, { "gr+/g", "w/b" }, { "w+/n", "w/n"} )
  1650. aColumns := {}
  1651. AADD( aColumns, { "      Column Header", 1,, "      Column Footer", .F.,,,,, ;
  1652.                      { 5, 2 }, {|| IIF( twRAGetCurrent() % 3 = 0,;
  1653.                                 { 4, 6 }, { 7, 8 } ) },;
  1654.                      , "═", "■" } )
  1655.  
  1656. twInfoLine( -2, "«Single Element» Array  «ESC»∙Exit" )
  1657. nChoice := twRABrowse( wT, wL, wB, wR, aTemp, aColumns, ;
  1658.                        "Single Element Array" , ;
  1659.                        .T.,, wColor, ;
  1660.                        3, 1, wFColor, .T., .T., 1, .T.,;
  1661.                        ,, K_ALT_X,,, "Array Element New", .T. )
  1662. twAMPop()
  1663.  
  1664. wT          := 3
  1665. wL          := 5
  1666. wB          := 21
  1667. wR          := 74
  1668. aTemp := twDirectory( "*.*" )
  1669. ASORT( aTemp,,, {|x,y| x[ 1 ] < y[ 1 ] } )
  1670. aColumns := {}
  1671. AADD( aColumns, { "File Name", 1,, "Col1", .T., "@X", {|| 1=1 }, {|| 1=1 }} )
  1672. AADD( aColumns, { "Size",      2,, "Col2", .T., "@X", {|| 1=2 }, {|| 1=1 },, ;
  1673.                         { 4, 2 }, {|| IIF( twRAGetElement( 2 ) > 2000, ;
  1674.                                       IIF( twRAGetElement( 2 ) > 10000, { 4, 2 },;
  1675.                                                          { 7, 2 } ), { 5, 2 } ) },;
  1676.                         " > ", "═", "═" })
  1677. AADD( aColumns, { "Date",      3,, "Col3", .T., "@X", {|| 1=1 }, {|| 1=1 },,;
  1678.                         { 5, 2 }, {|| { 8, 2 }}, " < ", "═", "═" } )
  1679. AADD( aColumns, { "Time",      4,, "Col4", .T., "@X", {|| 1=2 }, {|| 1=1 }} )
  1680. AADD( aColumns, { "Attribute", 5,, "Col5", .T., "@X", {|| 1=1 }, {|| 1=1 },,;
  1681.                         { 7, 2 }} )
  1682.  
  1683. twInfoLine( -2, "«Nested» Array with special column display  «ESC»∙Exit" )
  1684. nChoice := twRABrowse( wT, wL, wB, wR, aTemp, aColumns, ;
  1685.                        "Directory of Files in " + CURDIR() , ;
  1686.                        .T.,, ;
  1687.                        IIF( ! lMono, "bg+/rg,gr+/n,,g+/rg,gr+/rg,gr+/r,br+/rg,n/w", ;
  1688.                                      "w+/n,n/w,,w/n,w+/n,n/w,w+/n,n/w" ), ;
  1689.                        3, 1, IIF( ! lMono, "gr+/g", "w+/n" ), ;
  1690.                        .T., .T., 1, .T.,,, K_ALT_X )
  1691.  
  1692. UserMsg( "You Chose: " + STRINT( nChoice )  + IIF( nChoice =  0, '', aTemp [ nChoice, 1 ]))
  1693. twAMPop()
  1694.  
  1695. twPop()
  1696. RETURN NIL
  1697.  
  1698. /*
  1699. ┌──────────────────────────────────────────────────────────────────────────┐
  1700. │  Description: Disable Mouse Spots in twACChoice() Demo                   │
  1701. │       Author: Vic Lewis                                                  │
  1702. │ Date created: 04-19-92                                                   │
  1703. │ Time created: 05:39:05pm                                                 │
  1704. │    Copyright: Trilateral Systems Development Ltd.                        │
  1705. ├──────────────────────────────────────────────────────────────────────────┤
  1706. │     Function: SpotDeactivate                                             │
  1707. │                                                                          │
  1708. │    Arguments: xSpot - Spots to Disable                                   │
  1709. │                                                                          │
  1710. │ Return Value: NIL                                                        │
  1711. │                                                                          │
  1712. └──────────────────────────────────────────────────────────────────────────┘
  1713. */
  1714. FUNCTION SpotDeactivate( xSpot )
  1715. LOCAL nX
  1716. #IFNDEF NOMOUSE
  1717.     IF VALTYPE( xSpot ) = 'A'
  1718.         FOR nX = 1 TO LEN( xSpot )
  1719.             twACSpotOff( xSpot[ nX ] )
  1720.         NEXT
  1721.     ELSE
  1722.         twACSpotOff( xSpot )
  1723.     ENDIF
  1724. #ENDIF
  1725. RETURN NIL
  1726.  
  1727. /*
  1728. ┌──────────────────────────────────────────────────────────────────────────┐
  1729. │  Description: Reactivate Mouse Spots in twACChoice() Demo                │
  1730. │       Author: Vic Lewis                                                  │
  1731. │ Date created: 04-19-92                                                   │
  1732. │ Time created: 05:37:52pm                                                 │
  1733. │    Copyright: Trilateral Systems Development Ltd.                        │
  1734. ├──────────────────────────────────────────────────────────────────────────┤
  1735. │     Function: SpotActivate                                               │
  1736. │                                                                          │
  1737. │    Arguments: xSpot - Spot to reactivate                                 │
  1738. │                                                                          │
  1739. │ Return Value: NIL                                                        │
  1740. │                                                                          │
  1741. └──────────────────────────────────────────────────────────────────────────┘
  1742. */
  1743. FUNCTION SpotActivate( xSpot )
  1744. LOCAL nX
  1745. #IFNDEF NOMOUSE
  1746.     IF VALTYPE( xSpot ) = 'A'
  1747.         FOR nX = 1 TO LEN( xSpot )
  1748.             twACSpotOn( xSpot[ nX ] )
  1749.         NEXT
  1750.     ELSE
  1751.         twACSpotOn( xSpot )
  1752.     ENDIF
  1753. #ENDIF
  1754. RETURN NIL
  1755.  
  1756. /*
  1757. ┌──────────────────────────────────────────────────────────────────────────┐
  1758. │  Description: Help  for twACChoice() Demo                                │
  1759. │       Author: Vic Lewis                                                  │
  1760. │ Date created: 04-19-92                                                   │
  1761. │ Time created: 05:37:08pm                                                 │
  1762. │    Copyright: Trilateral Systems Development Ltd.                        │
  1763. ├──────────────────────────────────────────────────────────────────────────┤
  1764. │     Function: HelpACChoice                                               │
  1765. │                                                                          │
  1766. │    Arguments: None                                                       │
  1767. │                                                                          │
  1768. │ Return Value: NIL                                                        │
  1769. │                                                                          │
  1770. └──────────────────────────────────────────────────────────────────────────┘
  1771. */
  1772. FUNCTION HelpACChoice()
  1773. LOCAL aMsg := {}, bF1 := SETKEY( K_F1, NIL )
  1774. AADD( aMsg, "twACChoice() has  different default key and mouse actions" )
  1775. AADD( aMsg, "depending on the setting of the 'tagging' parameter:" )
  1776. AADD( aMsg, "" )
  1777. AADD( aMsg, "       nTag = 0 ( No Tagging )" )
  1778. AADD( aMsg, "" )
  1779. AADD( aMsg, "Left Button - Select │ Right Button - Exit w/o choice" )
  1780. AADD( aMsg, "      ENTER - Select │          ESC - Exit w/o choice" )
  1781. AADD( aMsg, "" )
  1782. AADD( aMsg, "       nTag = 1 ( Start with untagged array )" )
  1783. AADD( aMsg, "       nTag = 2 ( Start with Pre-Tagged array )" )
  1784. AADD( aMsg, "" )
  1785. AADD( aMsg, "Left Button - Select │ Right Button - Tag current" )
  1786. AADD( aMsg, "      ENTER - Select │        SPACE - Tag Current" )
  1787. AADD( aMsg, "               ESC - EXIT w/o choice" )
  1788. AADD( aMsg, "" )
  1789. AADD( aMsg, "       F7 - Tag All" )
  1790. AADD( aMsg, "       F8 - Untag All" )
  1791. AADD( aMsg, "       F9 - Swap tagged with untagged" )
  1792. twInfo( aMsg, "twACChoice() Help",,,, 3, 10 )
  1793. SETKEY( K_F1, bF1 )
  1794. RETURN NIL
  1795.  
  1796. /*
  1797. ┌──────────────────────────────────────────────────────────────────────────┐
  1798. │  Description: Read Help for twBRBrowse() Demo                            │
  1799. │       Author: Vic Lewis                                                  │
  1800. │ Date created: 04-19-92                                                   │
  1801. │ Time created: 05:35:35pm                                                 │
  1802. │    Copyright: Trilateral Systems Development Ltd.                        │
  1803. ├──────────────────────────────────────────────────────────────────────────┤
  1804. │     Function: BRHelp                                                     │
  1805. │                                                                          │
  1806. │    Arguments: cFile  - File Name                                         │
  1807. │               cTitle - Title                                             │
  1808. │               aMouseSpots - Mouse Spots to disable                       │
  1809. │                                                                          │
  1810. │ Return Value: NIL                                                        │
  1811. │                                                                          │
  1812. └──────────────────────────────────────────────────────────────────────────┘
  1813. */
  1814. FUNCTION BRHelp( cFile, cTitle, aMouseSpots )
  1815. LOCAL aHandles, cMemo, nX
  1816.  
  1817. #IFNDEF NOMOUSE
  1818.     FOR nX := 1 TO LEN( aMouseSpots )
  1819.         twBRSpotOff( aMouseSpots[ nX ] )
  1820.     NEXT
  1821. #ENDIF
  1822.  
  1823. twInfoLine( -2, "«Up/Dn»∙«Page»∙Scroll Text «ESC»∙Done" )
  1824. twTextFile( 7, 08, 20, 71, cFile, "n/w", ;
  1825.         3, 10, "b+/w", cTitle )
  1826. twAMPop()
  1827.  
  1828. #IFNDEF NOMOUSE
  1829.     FOR nX := 1 TO LEN( aMouseSpots )
  1830.         twBRSpotOn( aMouseSpots[ nX ] )
  1831.     NEXT
  1832. #ENDIF
  1833. RETURN NIL
  1834.  
  1835. /*
  1836. ┌──────────────────────────────────────────────────────────────────────────┐
  1837. │  Description: Footers display for twBRBrowse() Demo VALID clause         │
  1838. │       Author: Vic Lewis                                                  │
  1839. │ Date created: 04-19-92                                                   │
  1840. │ Time created: 05:40:19pm                                                 │
  1841. │    Copyright: Trilateral Systems Development Ltd.                        │
  1842. ├──────────────────────────────────────────────────────────────────────────┤
  1843. │     Function: ShowParts                                                  │
  1844. │                                                                          │
  1845. │    Arguments: oGet   - Active Get                                        │
  1846. │               nParts - Parts on hand                                     │
  1847. │               nSell  - Selling price                                     │
  1848. │               nCost  - Cost price                                        │
  1849. │                                                                          │
  1850. │ Return Value: TRUE for the VALID                                         │
  1851. │                                                                          │
  1852. └──────────────────────────────────────────────────────────────────────────┘
  1853. */
  1854. FUNCTION ShowParts( oGet, nParts, nSell, nCost )
  1855. LOCAL oB := twBRGetBrowse(), oCol
  1856. LOCAL nOldValue := Part->POnHand, nDiff, nNewValue := EVAL( oGet:block )
  1857. LOCAL nNewDollars
  1858. nDiff := nOldValue - nNewValue
  1859. oCol := oB:GETCOLUMN( 3 )
  1860. nParts -= nDiff
  1861. oCol:Footing := TRANSFORM( nParts, "999999" ) + ";     $"
  1862. nOldValue := Part->POnHand * Part->PSell
  1863. nNewDollars := nNewValue * Part->PSell
  1864. nDiff := nOldValue - nNewDollars
  1865. nSell -= nDiff
  1866. oCol := oB:GETCOLUMN( 4 )
  1867. oCol:Footing := "  ;" + TRANSFORM( nSell, "9999999.99" )
  1868. nOldValue := Part->POnHand * Part->PCost
  1869. nNewDollars := nNewValue * Part->PCost
  1870. nDiff := nOldValue - nNewDollars
  1871. nCost  -= nDiff
  1872. oCol := oB:GETCOLUMN( 5 )
  1873. oCol:Footing := "  ;" + TRANSFORM( nCost, "9999999.99" )
  1874. oB:Configure()
  1875. RETURN .T.
  1876.  
  1877. /*
  1878. ┌──────────────────────────────────────────────────────────────────────────┐
  1879. │  Description: VALID clause for selling price in twBRBrowse() Demo        │
  1880. │       Author: Vic Lewis                                                  │
  1881. │ Date created: 04-19-92                                                   │
  1882. │ Time created: 05:43:16pm                                                 │
  1883. │    Copyright: Trilateral Systems Development Ltd.                        │
  1884. ├──────────────────────────────────────────────────────────────────────────┤
  1885. │     Function: ShowSell                                                   │
  1886. │                                                                          │
  1887. │    Arguments: oGet  - Active Get                                         │
  1888. │               nSell - Selling price                                      │
  1889. │                                                                          │
  1890. │ Return Value: TRUE for the VALID                                         │
  1891. │                                                                          │
  1892. └──────────────────────────────────────────────────────────────────────────┘
  1893. */
  1894. FUNCTION ShowSell( oGet, nSell )
  1895. LOCAL oB := twBRGetBrowse(), oCol
  1896. LOCAL nOldValue := Part->PSell * Part->POnHand
  1897. LOCAL nDiff := nOldValue  -  ( Part->POnHand * EVAL( oGet:block ))
  1898. oCol := oB:GETCOLUMN( 4 )
  1899. nSell -= nDiff
  1900. oCol:Footing := "  ;" + TRANSFORM( nSell, "9999999.99" )
  1901. oB:Configure()
  1902. RETURN .T.
  1903.  
  1904. /*
  1905. ┌──────────────────────────────────────────────────────────────────────────┐
  1906. │  Description: VALID clause for cost price in twBRBrowse() Demo           │
  1907. │       Author: Vic Lewis                                                  │
  1908. │ Date created: 04-19-92                                                   │
  1909. │ Time created: 05:44:44pm                                                 │
  1910. │    Copyright: Trilateral Systems Development Ltd.                        │
  1911. ├──────────────────────────────────────────────────────────────────────────┤
  1912. │     Function: ShowCost                                                   │
  1913. │                                                                          │
  1914. │    Arguments: oGet  - Active get                                         │
  1915. │                    nCost - Cost price                                    │
  1916. │                                                                          │
  1917. │ Return Value: TRUE for the VALID                                         │
  1918. │                                                                          │
  1919. └──────────────────────────────────────────────────────────────────────────┘
  1920. */
  1921. FUNCTION ShowCost( oGet, nCost )
  1922. LOCAL oB := twBRGetBrowse(), oCol
  1923. LOCAL nOldValue := Part->PCost * Part->POnHand
  1924. LOCAL nDiff := nOldValue  -  ( Part->POnHand * EVAL( oGet:block ))
  1925. oCol := oB:GETCOLUMN( 5 )
  1926. nCost -= nDiff
  1927. oCol:Footing := "  ;" + TRANSFORM( nCost, "9999999.99" )
  1928. oB:Configure()
  1929. RETURN .T.
  1930.  
  1931. /*
  1932. ┌──────────────────────────────────────────────────────────────────────────┐
  1933. │  Description: Mouse Support Display                                      │
  1934. │       Author: Vic Lewis                                                  │
  1935. │ Date created: 04-19-92                                                   │
  1936. │ Time created: 05:52:57pm                                                 │
  1937. │    Copyright: Trilateral Systems Development Ltd.                        │
  1938. ├──────────────────────────────────────────────────────────────────────────┤
  1939. │     Function: TSD60000                                                   │
  1940. │                                                                          │
  1941. │    Arguments: None                                                       │
  1942. │                                                                          │
  1943. │ Return Value: NIL                                                        │
  1944. │                                                                          │
  1945. └──────────────────────────────────────────────────────────────────────────┘
  1946. */
  1947. FUNCTION TSD60000()
  1948. LOCAL nCount := 0, nTime :=  SECONDS(), lShowPresses := .F.
  1949. LOCAL nMRow, nMCol, nButton := 0
  1950. UserMsg( { "In TSDWIN, Mouse support is almost automatic. A call to twMouseInit()",;
  1951.            "at the beginning of a program is all it takes.",;
  1952.            "All the message and browse systems have default mouse  support  which",;
  1953.            "you can augment by creating Mouse Hot Spots with the right associated",;
  1954.            "tw??HotSpot() or tw??MouseLine() functions. See TSDWIN.NG for more.",;
  1955.            "When you use Mouse Hot Spots, be sure to release the memory they  use",;
  1956.            "with the correct tw??RemHotSpot() or tw??LinePop() function.",;
  1957.            "In TSDWIN, the left button usually defaults to a 'Selection' key. For",;
  1958.            "instance, in a browse, pressing the left button on the current choice",;
  1959.            "will select it. The same holds for Alert Boxes.",;
  1960.            "Sometimes the left button is used for tagging, if multiple selections",;
  1961.            "are allowed. In browses in Edit mode, double clicking the left button",;
  1962.            "initiates an edit.",;
  1963.            "The right hand button usually defaults to the ESC key, except in case",;
  1964.            "of multiple choice selections again, where it is a selction key.",;
  1965.            "Scroll Bar arrows cause a line up or down with the left button and  a",;
  1966.            "page up or down with the right button. Both buttons take you  to  the",;
  1967.            "top or bottom of the browse. Clicking in the scroll  bars  themselves",;
  1968.            "moves the pointer proportionately." ;
  1969.             } )
  1970. #IFNDEF NOMOUSE
  1971.     IF AskUser( { "Continue with Demo", "EXIT to Main Menu" }, ;
  1972.                 "The following demonstrates routines showing you " +;
  1973.                 "how the low-level mouse functions work.." ) != 1
  1974.         RETURN NIL
  1975.     ENDIF
  1976.  
  1977.     twOpen( FULLSCREEN, COLORN, DSHADOW, DFRAME,, COLORFN )
  1978.     twTitle( PADC( "TSDWIN Low-Level Mouse Support", 30 ), TCOLOR, "T", "C" )
  1979.     @ twRow( 03 ), twCol( 2 ) SAY "               FUNCTION                             0     1     2"
  1980.     @ twRow( 04 ), twCol( 2 ) SAY "------------------------------------------------------------------"
  1981.     @ twRow( 05 ), twCol( 2 ) SAY "                        Which Button Pressed  :"
  1982.     @ twRow( 06 ), twCol( 2 ) SAY "                       X coordinate of Mouse  :"
  1983.     @ twRow( 07 ), twCol( 2 ) SAY "                       Y coordinate of Mouse  :"
  1984.     @ twRow( 08 ), twCol( 2 ) SAY "  Status of Button 0 Pressed ( 0, 1, 2,  3 )  :"
  1985.     @ twRow( 09 ), twCol( 2 ) SAY "                    No. of Presses of Button  :"
  1986.     @ twRow( 10 ), twCol( 2 ) SAY "     Get X coordinate of Last Button Pressed  :"
  1987.     @ twRow( 11 ), twCol( 2 ) SAY "     Get Y coordinate of Last Button Pressed  :"
  1988.     @ twRow( 12 ), twCol( 2 ) SAY "    Status of Button Released ( 0, 1, 2, 3 )  :"
  1989.     @ twRow( 13 ), twCol( 2 ) SAY "                   No. of Releases of Button  :"
  1990.     @ twRow( 14 ), twCol( 2 ) SAY "        X coordinate of Last Button Released  :"
  1991.     @ twRow( 15 ), twCol( 2 ) SAY "        Y coordinate of Last Button Released  :"
  1992.     @ twRow( 16 ), twCol( 2 ) SAY "               Horizontal Direction of Mouse  :"
  1993.     @ twRow( 17 ), twCol( 2 ) SAY "                 Vertical Direction of Mouse  :"
  1994.     @ twRow( 19 ), twCol( 2 ) SAY " Counter for Presses/Releases Display  ( 0-400 ):"
  1995.     @ twRow( 20 ), twCol( 2 ) SAY "                       Seconds to Full Display:"
  1996.  
  1997.     _twM1()
  1998.  
  1999.     @ twRow( 21 ), twCol( 30 ) SAY "Press ESC or Click Here to QUIT" COLOR twEnhClr( SETCOLOR() )
  2000.     DO WHILE INKEY() != 27
  2001.         nCount++
  2002.         IF SECONDS() - nTime >= 60
  2003.             lShowpresses := .T.
  2004.         ELSE
  2005.             @ twRow( 20 ), twCol( 50 ) SAY STR( 60 - ( SECONDS() - nTime ), 7, 2 )
  2006.         ENDIF
  2007.         @ twRow( 05 ), twCol( 50 ) SAY STR( _twM3B(), 5 ) //  Get Which Button Pressed
  2008.         @ twRow( 06 ), twCol( 50 ) SAY STR( _twM3C()   , 5 ) //  Get X coordinate of Mouse
  2009.         @ twRow( 07 ), twCol( 50 ) SAY STR( _twM3D()   , 5 ) //  Get Y coordinate of Mouse
  2010.         @ twRow( 08 ), twCol( 50 ) SAY STR( _twM5A( 0 ), 5 ) + " " + STR( _twM5A( 1 ), 5 ) + " " + STR( _twM5A( 2 ), 5 )  // <int M2>  Status of Button Pressed ( 0 = up, 1 = down )
  2011.         IF lShowPresses
  2012.             @ twRow( 10 ), twCol( 50 ) SAY STR( _twM5C( 0 ), 5 ) + " " + STR( _twM5C( 1 ), 5 ) + " " + STR( _twM5C( 2 ), 5 )  // <int M2>  Get X coordinate of Last Button Pressed
  2013.             @ twRow( 11 ), twCol( 50 ) SAY STR( _twM5D( 0 ), 5 ) + " " + STR( _twM5D( 1 ), 5 ) + " " + STR( _twM5D( 2 ), 5 )  // <int M2>  Get Y coordinate of Last Button Pressed
  2014.             @ twRow( 14 ), twCol( 50 ) SAY STR( _twM6C( 0 )  , 5 ) + " " + STR( _twM6C( 1 )  , 5 ) + " " + STR( _twM6C( 2 )  , 5 )  // <int M2>  Get X coordinate of Last Button Released
  2015.             @ twRow( 15 ), twCol( 50 ) SAY STR( _twM6D( 0 )  , 5 ) + " " + STR( _twM6D( 1 )  , 5 ) + " " + STR( _twM6D( 2 )  , 5 )  // <int M2>  Get Y coordinate of Last Button Released
  2016.             lShowPresses := .F.
  2017.         ENDIF
  2018.         @ twRow( 12 ), twCol( 50 ) SAY STR( _twM6A( 0 ), 5 ) + " " + STR( _twM6A( 1 ), 5 ) + " " + STR( _twM6A( 2 ), 5 )  // <int M2>  Status of Button Released ( 0 = up, 1 = down )
  2019.         @ twRow( 16 ), twCol( 50 ) SAY STR( _twM11C()   , 5 )  // Get Horizontal Direction of Mouse
  2020.         @ twRow( 17 ), twCol( 50 ) SAY STR( _twM11D()   , 5 )  // Get Vertical Direction of Mouse
  2021.         IF nCount = 400
  2022.             @ twRow( 09 ), twCol( 50 ) SAY STR( _twM5B( 0 ), 5 ) + " " + STR( _twM5B( 1 ), 5 ) + " " + STR( _twM5B( 2 ), 5 )  // <int M2>  No. of Presses of Button
  2023.             @ twRow( 13 ), twCol( 50 ) SAY STR( _twM6B( 0 )  , 5 ) + " " + STR( _twM6B( 1 )  , 5 ) + " " + STR( _twM6B( 2 )  , 5 )  // <int M2>  No. of Releases of Button
  2024.             nCount := 0
  2025.             lShowPresses := IIF( lShowPresses, .F., .T. )
  2026.         ENDIF
  2027.         @ twRow( 19 ), twCol( 50 ) SAY STR( nCount, 7 )
  2028.         nButton := twMGetPress( @nMRow, @nMCol )
  2029.         nMRow := INT( nMRow / 8 );nMCol := INT( nMCol / 8 )
  2030.  
  2031.         IF nMRow = 22 .AND. ( nMCol >= 30 .AND. nMCol <= 47 ) .AND. ( nButton == 1 )
  2032.             EXIT
  2033.         ENDIF
  2034.     ENDDO
  2035.  
  2036.     _twM2()
  2037. #ENDIF
  2038. twPop()
  2039. RETURN NIL
  2040.  
  2041. /*
  2042. ┌──────────────────────────────────────────────────────────────────────────┐
  2043. │  Description: Miscellaneous Functions                                    │
  2044. │       Author: Vic Lewis                                                  │
  2045. │ Date created: 04-19-92                                                   │
  2046. │ Time created: 06:45:03pm                                                 │
  2047. │    Copyright: Trilateral Systems Development Ltd.                        │
  2048. ├──────────────────────────────────────────────────────────────────────────┤
  2049. │     Function: TSD70000                                                   │
  2050. │                                                                          │
  2051. │    Arguments: None                                                       │
  2052. │                                                                          │
  2053. │ Return Value: NIL                                                        │
  2054. │                                                                          │
  2055. └──────────────────────────────────────────────────────────────────────────┘
  2056. */
  2057. FUNCTION TSD70000()
  2058. LOCAL nKey, nGetTry := 0, GetList := {}, dGetTry := DATE()
  2059. LOCAL aNtxArray := {}, lMsgs := .F., nStartTime
  2060. LOCAL cFileSpec := "*.PRG,*.DOC        "
  2061. LOCAL cDest := "A:", cPath := ".\                  "
  2062. LOCAL wT := 3, wL := 10, wB := 15, wR := 70, cTitle := "Title String"
  2063. LOCAL cFooters := "Footer String"
  2064. LOCAL cMemo := "Printer Not Ready! You can try it if you want but it will not work."+;
  2065.         " Oh Well... I knew you had to go ahead and see for yourself. That really"+;
  2066.         " is a pity. Lack of trust will defeat us all, then that will be it! "+;
  2067.         "I wonder where it will all end. Probably at my own crucification!"+;
  2068.         " Whatever became of good old deceit and corporate skullduggery?"+;
  2069.         " I guess Santa ain't coming to town yet, eh?"
  2070. LOCAL tString
  2071. LOCAL mUdf, ActionKeys
  2072. LOCAL wColor, wSType, wFType, wFColor, lWrap, lEditMode, nLineLength
  2073. LOCAL nTabSize, nTBufRow, nTBufColumn
  2074. LOCAL nWinRow, nWinColumn, lScBar, lWindow
  2075.  
  2076. MEMVAR mDest
  2077.  
  2078. twOpen( FULLSCREEN, COLORN, DSHADOW, DFRAME,, COLORFN )
  2079. twOpen( 3, 10, 21, 70, COLORM, DSHADOW, DFRAME,, COLORFM )
  2080. twTitle( PADC( 'TSD twCalculator()',  30 ), TCOLOR, 'T', 'C' )
  2081. twTitle( PADC( 'Shift-F1 to Call Calculator', 30 ), TCOLOR, 'B', 'C' )
  2082. twCalcInit( 2, 3, MAINCLC, 3, 10, .T. )
  2083. SET KEY K_SH_F1 TO twCallCalc()
  2084.  
  2085. DO WHILE .T.
  2086.     @ twRow( 4 ), twCol( 10 ) SAY "Get a Value:" GET nGetTry PICTURE "##########.####"
  2087.     twReadModal( GetList, .T. ); GetList := {}
  2088.  
  2089.     IF LASTKEY() == K_ESC
  2090.         EXIT
  2091.     ENDIF
  2092.  
  2093. ENDDO
  2094. twPop()
  2095.  
  2096. SET KEY K_SH_F1 TO
  2097. twOpen( 3, 10, 21, 70, COLORM, DSHADOW, DFRAME,, COLORFM )
  2098. twTitle( PADC( 'TSD twCalendar()', 30 ), TCOLOR, 'T', 'C' )
  2099.  
  2100. twDateInit( 2, 3, MAINCYN, 7, 10,, .F. )
  2101.  
  2102. DO WHILE .T.
  2103.     @ twRow( 6 ), twCol( 10 ) SAY "Get a Date:" GET dGetTry PICTURE "@D" WHEN twCalendar( @dGetTry )
  2104.     twReadModal( GetList, .T. ); GetList := {}
  2105.  
  2106.     IF LASTKEY() == K_ESC
  2107.         EXIT
  2108.     ENDIF
  2109.  
  2110. ENDDO
  2111. twPop()
  2112. twCenter( 02, "The TSDWIN Indexer makes use of the new GaugeBar Class." )
  2113. twCenter( 03, "It gives your users what they want to see... what's" )
  2114. twCenter( 04, "going on... and frees you from the drudgery of creating" )
  2115. twCenter( 05, "needed but complex routines." )
  2116. DemoWait( 1 )
  2117. twCenter( 07, "twIndexMaker Function Description" )
  2118. DemoWait( 1 )
  2119. twSay( 09, 16, "Watch how these two lines of code operate:" )
  2120. twSay( 11, 6, "AADD( aNtxArray, { 'Windemo', 'Windemo', 'C', 'UPPER( CodeKey )' }) " )
  2121. twSay( 13, 6, "twIndexMaker( aNtxArray,,,,, COLORM, DSHADOW, D2FRAME, ; " )
  2122. twSay( 14, 16, "'Handy Index Maker',, .F. ) " )
  2123. DemoWait( 1 )
  2124. twCenter( 22, " Press a Key or Button or Wait!! " )
  2125. DemoWait( 5 )
  2126.  
  2127. AADD( aNtxArray, { "Windemo", "Windemo",   "C", "UPPER( CodeKey )" } )
  2128.  
  2129. twIndexMaker( aNtxArray,,,,, COLORM, DSHADOW, D2FRAME, ;
  2130.                "Handy Index Maker",, .F. )
  2131. twCenter( 16, "How was That??" )
  2132. DemoWait( 1 )
  2133. twClear( .F. )
  2134.  
  2135. twTitle( PADC( "twBackUp() Demonstration",  30  ), TCOLOR, "T", "C" )
  2136. DO WHILE .T.
  2137.     @ twRow( 2 ), twCol( 10 ) SAY "       Path:" GET cPath PICTURE "@!@S25"
  2138.     @ twRow( 4 ), twCol( 10 ) SAY "   FileSpec:" GET cFileSpec PICTURE "@!"
  2139.     @ twRow( 6 ), twCol( 10 ) SAY "Destination:" GET cDest PICTURE "@!"
  2140.     @ twRow( 8 ), twCol( 10 ) SAY "Messages:" GET lMsgs PICTURE "Y"
  2141.     twReadModal( GetList ); GetList := {}
  2142.     IF LASTKEY() == K_ESC
  2143.         EXIT
  2144.     ENDIF
  2145.     nStartTime := SECONDS()
  2146.     twBackUp( cPath, cFileSpec, cDest, lMsgs, COLORM, DSHADOW, D2FRAME, COLORFM )
  2147.     UserMsg( "Backup Took: " + ALLTRIM( STR( (SECONDS() - nStartTime)/60 )) + " Minutes" )
  2148.  
  2149.     MEMVAR->mDest := cDest +  "*.*"
  2150.     ERASE &mDest
  2151. ENDDO
  2152. RELEASE mDest
  2153.  
  2154. twTitle( PADC( "Memo Handling Demonstration",  30  ), TCOLOR, "T", "C" )
  2155. twClear( .F. )
  2156. lMsgs      := .T.
  2157. lEditMode  := .T.
  2158. nWinColumn := NIL
  2159. lScBar     := .T.
  2160. lWindow    := .T.
  2161. nLineLength := 100
  2162. cTitle      := "Testing twMemoEdit()"
  2163.  
  2164. cMemo := cMemo + cMemo + cMemo + cMemo + cMemo
  2165.  
  2166. cMemo := twMemoEdit( wT, wL, wB, wR, cMemo, cTitle, cFooters, mUdf, ActionKeys, ;
  2167.                      COLORM, DSHADOW, DFRAME, COLORFM, .T., lEditMode, .T., ;
  2168.                      nLineLength, nTabSize, nTBufRow, nTBufColumn, ;
  2169.                      nWinRow, nWinColumn, lScBar, lWindow )
  2170.  
  2171. twMemoView( wT, wL, wB, wR, cMemo, "Testing twMemoView()", cFooters, ;
  2172.             COLORM, DSHADOW, DFRAME, COLORFM )
  2173.  
  2174. twPop()
  2175. RETURN NIL
  2176.  
  2177. /*
  2178. ┌──────────────────────────────────────────────────────────────────────────┐
  2179. │  Description: TSDWIN Hardware Functions                                  │
  2180. │       Author: Vic Lewis                                                  │
  2181. │ Date created: 04-19-92                                                   │
  2182. │ Time created: 07:39:52pm                                                 │
  2183. │    Copyright: Trilateral Systems Development Ltd.                        │
  2184. ├──────────────────────────────────────────────────────────────────────────┤
  2185. │     Function: TSD80000                                                   │
  2186. │                                                                          │
  2187. │    Arguments: None                                                       │
  2188. │                                                                          │
  2189. │ Return Value: NIL                                                        │
  2190. │                                                                          │
  2191. └──────────────────────────────────────────────────────────────────────────┘
  2192. */
  2193. FUNCTION TSD80000()
  2194. LOCAL nKey := 0, aKeyTry := {}, nX := 0, nRow := 3
  2195. LOCAL cDrStat := "0", nDrive := 0, GetList := {}, RetVal
  2196.  
  2197. twOpen( FULLSCREEN, COLORN, DSHADOW, DFRAME,, COLORFN )
  2198. twTitle( "twIsDrive()Demonstration", TCOLOR )
  2199. twTitle( "Get out a Diskette or Two!!!!!!!!!!!!!",, "B", "C" )
  2200. BEEPER
  2201. DO WHILE .T.
  2202.     twSay( 2, 5, "Enter Drive to Check ( 0 for Drive A:, 1 for Drive B: )!" )
  2203.     @ twRow( 4 ), twCol( 12 ) GET nDrive PICTURE "#"
  2204.     twReadModal( GetList ); GetList := {}
  2205.     IF LASTKEY() == K_ESC
  2206.         EXIT
  2207.     ENDIF
  2208.  
  2209.     twIsDrive( nDrive, 3, 4 )
  2210.  
  2211. ENDDO
  2212. twPop()
  2213.  
  2214. twOpen( FULLSCREEN, COLORN, DSHADOW, DFRAME,, COLORFN )
  2215. twTitle( "Testing tw_GetKSt() - Try the Keys!!!", TCOLOR )
  2216. AADD( aKeyTry, RSHIFT        )
  2217. AADD( aKeyTry, LSHIFT        )
  2218. AADD( aKeyTry, CTRL          )
  2219. AADD( aKeyTry, ALT           )
  2220. AADD( aKeyTry, SCROLLSTAT    )
  2221. AADD( aKeyTry, NUMLOCKSTAT   )
  2222. AADD( aKeyTry, CAPLOCKSTAT   )
  2223. AADD( aKeyTry, INSERTSTAT    )
  2224. AADD( aKeyTry, CTRLNUMLKSTAT )
  2225. AADD( aKeyTry, SCROLLOCK     )
  2226. AADD( aKeyTry, NUMLOCK       )
  2227. AADD( aKeyTry, CAPLOCK       )
  2228. AADD( aKeyTry, INSERT        )
  2229. twSay( nRow++, 15, "        Right Shift:")
  2230. twSay( nRow++, 15, "         Left Shift:")
  2231. twSay( nRow++, 15, "            Control:")
  2232. twSay( nRow++, 15, "          Alternate:")
  2233. twSay( nRow++, 15, " Scroll Lock Status:")
  2234. twSay( nRow++, 15, "Number Lock Status :")
  2235. twSay( nRow++, 15, "   Caps Lock Status:")
  2236. twSay( nRow++, 15, "      Insert Status:")
  2237. twSay( nRow++, 15, "Ctrl NumLock Status:")
  2238. twSay( nRow++, 15, "    Scroll Lock Key:")
  2239. twSay( nRow++, 15, "    Number Lock Key:")
  2240. twSay( nRow++, 15, "      Caps Lock Key:")
  2241. twSay( nRow++, 15, "         Insert Key:")
  2242.  
  2243. DO WHILE ( nkey := Inkey()) != 27
  2244.     twTitle( "Counter" + STRINT( ++nX ), "", "B", "C" )
  2245.     nRow := 3
  2246.     twSay( nRow++, 35, STR( tw_GetKSt( RSHIFT        )), ;
  2247.         IIF( tw_GetKSt( RSHIFT )= 0,;
  2248.         twStdClr( SETCOLOR()),twEnhClr( SETCOLOR())))
  2249.     twSay( nRow++, 35, STR( tw_GetKSt( LSHIFT        )), ;
  2250.         IIF( tw_GetKSt( LSHIFT )= 0,;
  2251.         twStdClr( SETCOLOR()),twEnhClr( SETCOLOR())))
  2252.     twSay( nRow++, 35, STR( tw_GetKSt( CTRL          )), ;
  2253.         IIF( tw_GetKSt( CTRL )= 0,;
  2254.         twStdClr( SETCOLOR()),twEnhClr( SETCOLOR())))
  2255.     twSay( nRow++, 35, STR( tw_GetKSt( ALT           )), ;
  2256.         IIF( tw_GetKSt( ALT )= 0,;
  2257.         twStdClr( SETCOLOR()),twEnhClr( SETCOLOR())))
  2258.     twSay( nRow++, 35, STR( tw_GetKSt( SCROLLSTAT    )), ;
  2259.         IIF( tw_GetKSt( SCROLLSTAT )= 0,;
  2260.         twStdClr( SETCOLOR()),twEnhClr( SETCOLOR())))
  2261.     twSay( nRow++, 35, STR( tw_GetKSt( NUMLOCKSTAT   )), ;
  2262.         IIF( tw_GetKSt( NUMLOCKSTAT )= 0,;
  2263.         twStdClr( SETCOLOR()),twEnhClr( SETCOLOR())))
  2264.     twSay( nRow++, 35, STR( tw_GetKSt( CAPLOCKSTAT   )), ;
  2265.         IIF( tw_GetKSt( CAPLOCKSTAT )= 0,;
  2266.         twStdClr( SETCOLOR()),twEnhClr( SETCOLOR())))
  2267.     twSay( nRow++, 35, STR( tw_GetKSt( INSERTSTAT    )), ;
  2268.         IIF( tw_GetKSt( INSERTSTAT )= 0,;
  2269.         twStdClr( SETCOLOR()),twEnhClr( SETCOLOR())))
  2270.     twSay( nRow++, 35, STR( tw_GetKSt( CTRLNUMLKSTAT )), ;
  2271.         IIF( tw_GetKSt( CTRLNUMLKSTAT )= 0,;
  2272.         twStdClr( SETCOLOR()),twEnhClr( SETCOLOR())))
  2273.     twSay( nRow++, 35, STR( tw_GetKSt( SCROLLOCK     )), ;
  2274.         IIF( tw_GetKSt( SCROLLOCK )= 0,;
  2275.         twStdClr( SETCOLOR()),twEnhClr( SETCOLOR())))
  2276.     twSay( nRow++, 35, STR( tw_GetKSt( NUMLOCK       )), ;
  2277.         IIF( tw_GetKSt( NUMLOCK )= 0,;
  2278.         twStdClr( SETCOLOR()),twEnhClr( SETCOLOR())))
  2279.     twSay( nRow++, 35, STR( tw_GetKSt( CAPLOCK       )), ;
  2280.         IIF( tw_GetKSt( CAPLOCK )= 0,;
  2281.         twStdClr( SETCOLOR()),twEnhClr( SETCOLOR())))
  2282.     twSay( nRow++, 35, STR( tw_GetKSt( INSERT        )), ;
  2283.         IIF( tw_GetKSt( INSERT )= 0,;
  2284.         twStdClr( SETCOLOR()),twEnhClr( SETCOLOR())))
  2285. ENDDO
  2286. DemoWait( 3 )
  2287. twPop()
  2288.  
  2289. RETURN NIL
  2290.  
  2291. /*
  2292. ┌──────────────────────────────────────────────────────────────────────────┐
  2293. │  Description: Place an Order                                             │
  2294. │       Author: Vic Lewis                                                  │
  2295. │ Date created: 04-19-92                                                   │
  2296. │ Time created: 07:54:56pm                                                 │
  2297. │    Copyright: Trilateral Systems Development Ltd.                        │
  2298. ├──────────────────────────────────────────────────────────────────────────┤
  2299. │     Function: TSD9000                                                    │
  2300. │                                                                          │
  2301. │    Arguments: None                                                       │
  2302. │                                                                          │
  2303. │ Return Value: NIL                                                        │
  2304. │                                                                          │
  2305. └──────────────────────────────────────────────────────────────────────────┘
  2306. */
  2307. FUNCTION TSD90000()
  2308. LOCAL nWin1
  2309. nWin1 := twOpen( FULLSCREEN, COLORW, DSHADOW, DFRAME,, COLORFW )
  2310. twOpen( 16, 64, 22, 78, WHH_CYN )
  2311. twSay( 00, 0, " ▄▄▄▄▄▄▄▄▄▄▄▄▄ ", RDH_CYN )
  2312. twSay( 01, 0, " ▀     █     ▀ ", RDH_CYN )
  2313. twSay( 02, 0, "       █       ", RDH_CYN )
  2314. twSay( 03, 0, "       █       ", RDH_CYN )
  2315. twSay( 04, 0, "       █       ", RDH_CYN )
  2316. twSay( 05, 0, "       █       ", RDH_CYN )
  2317. twSay( 06, 0, "       █       ", RDH_CYN )
  2318. twSay( 07, 0, "      ▄█▄      ", RDH_CYN )
  2319. twSlide( "U", 13 )
  2320. twSlide( "L", 61 )
  2321. twOpen( 15, 63, 22, 77, WHH_CYN )
  2322. twSay( 00, 0, "▄▄▄▄▄▄▄▄▄▄▄▄▄▄", YEL_CYN )
  2323. twSay( 01, 0, "█            █", YEL_CYN )
  2324. twSay( 02, 0, "█            █", YEL_CYN )
  2325. twSay( 03, 0, "█             ", YEL_CYN )
  2326. twSay( 04, 0, "▀▀▀▀▀▀▀▀▀▀▀▀▀█", YEL_CYN )
  2327. twSay( 05, 0, "             █", YEL_CYN )
  2328. twSay( 06, 0, "█            █", YEL_CYN )
  2329. twSay( 07, 0, "█            █", YEL_CYN )
  2330. twSay( 08, 0, "█▄▄▄▄▄▄▄▄▄▄▄▄█", YEL_CYN )
  2331. twSlide( "U", 7 )
  2332. twSlide( "L", 60 )
  2333. SETCOLOR( YEL_CYN )
  2334. @5 + 3, 3 say "▄▄▄▄▄▄▄█▄▄▄▄▄▄"
  2335. @6 + 3, 3 say "█     ▄█▄    █"
  2336. SETCOLOR( RDH_CYN )
  2337. @5 + 3, 10 say "█"
  2338. @6 + 3, 09 say "▄█▄"
  2339. twOpen( 16, 64, 22, 77, WHH_CYN )
  2340. twSay( 00, 0, "  ▄▄▄▄▄▄▄▄▄▄  ", WHH_CYN )
  2341. twSay( 01, 0, "  ██       █  ", WHH_CYN )
  2342. twSay( 02, 0, "  ██       █  ", WHH_CYN )
  2343. twSay( 03, 0, "  ██       █  ", WHH_CYN )
  2344. twSay( 04, 0, "  ██       █  ", WHH_CYN )
  2345. twSay( 05, 0, "  ██       █  ", WHH_CYN )
  2346. twSay( 06, 0, "  ██▄▄▄▄▄▄▄█  ", WHH_CYN )
  2347. twSlide( "U", 02 )
  2348. twSlide( "L", 61 )
  2349. SETCOLOR( YEL_CYN )
  2350. @11 + 3, 3 say "█ ▄▄▄▄▄▄▄▄▄▄ █"
  2351. @12 + 3, 3 say "█▄██▄▄▄▄▄▄▄█▄█"
  2352. SETCOLOR( WHH_CYN )
  2353. @11 + 3, 5 say "▄▄▄▄▄▄▄▄▄▄"
  2354. @12 + 3, 5 say "██"
  2355. @12 + 3, 14 say "█"
  2356. _twHandle( nWin1 )
  2357. twSay( 15 + 2, 20, "█   █ ▀█▀ █▄▄▄" )
  2358. twSay( 16 + 2, 20, "█ █ █  █  █  █" )
  2359. twSay( 17 + 2, 20, "█▄█▄█ ▄█▄ █  █         CLIPPER 5.01 Windowing Library" )
  2360. DemoWait( .5 )
  2361. twCenter( 21, "VISA - MasterCard - American Express - Discover", GNH_CYN )
  2362.  
  2363. twHLine( 01, 21, 56, 1, BLH_CYN )
  2364.  
  2365. twSay( 02, 21, "TSDWIN.LIB v2.00 is a ShareWare Product. You are free to", RED_CYN )
  2366. twSay( 03, 21, "use it in order  to judge its  usefulness to you in your", RED_CYN )
  2367. twSay( 04, 21, "   situation. If you like and continue to  use TSDWIN,  ", RED_CYN )
  2368. twSay( 05, 21, "                 please register:                       ", RED_CYN )
  2369. twSay( 09, 29, "1. Register Your Version 2.00 $ 95.00 US" )
  2370. twSay( 11, 29, "We include your Disk Format with Manual" )
  2371. twSay( 12, 29, "and NG on disk. Support BBS membership." )
  2372. twSay( 14, 29, "See ORDERFRM.DOC for Details." )
  2373. twSay( 17, 36, "TSDWIN's customers are the most important", BLA_CYN )
  2374. twSay( 18, 36, "      factor in its evolving design!", BLA_CYN )
  2375. DemoWait( 30 )
  2376. _twHandle( nWin1 )
  2377. twTitle( "Any Key or Button", TCOLOR, "B", "C" )
  2378. DemoWait( 30 )
  2379. twSay( 17, 36, "                                         ", BLA_CYN )
  2380. twSay( 18, 36, "  Here's where you can place your order!", RED_CYN )
  2381. DemoWait( 3 )
  2382. twScroll( 15, .F., 1, 21, 16, 77 )
  2383. DemoWait( 1 )
  2384. twSay( 02, 21, "          CANADA              U.S.A. -  Central/West   " , RED_CYN )
  2385. twSay( 03, 21, "       TSD Limited             FOX Business Systems    " , WHH_CYN )
  2386. twSay( 04, 21, "     18 Bond St. South             217 McCall Rd.      " , BLA_CYN )
  2387. twSay( 05, 21, "    Dundas, ON,  Canada        Manhattan, KS,  66502   " , BLA_CYN )
  2388. twSay( 06, 21, "          L9H 3H1               Voice: 913-776-1452    " , BLA_CYN )
  2389. twSay( 07, 21, "    Voice: 416-628-5086           BBS: 913-776-0111    " , BLA_CYN )
  2390. twSay( 08, 21, "      BBS: 519-650-0389                                " , BLA_CYN )
  2391. twSay( 09, 21, "     Toll Free Order Line: 1-800-795-0199 (Can/USA)    " , RED_CYN )
  2392.  
  2393. twSay( 10, 21, "       U.S.A -  East                   EUROPE          " , RED_CYN )
  2394. twSay( 11, 21, "     Ahlstedt Software       Meisal SoftWare Production" , WHH_CYN )
  2395. twSay( 12, 21, "  2212 Wade Hampton Blvd.            Torgvegen 17      " , BLA_CYN )
  2396. twSay( 13, 21, "Greenville, SC, 29615-2249      Kleppe, Norway, N4060  " , BLA_CYN )
  2397. twSay( 14, 21, "    Voice: 803-292-2249           Voice: +474-425625   " , BLA_CYN )
  2398. twSay( 15, 21, "                                         +474-627555   " , BLA_CYN )
  2399.  
  2400. twTitle( "Press a Key or Button to Exit or Wait", TCOLOR, "B", "C" )
  2401. DemoWait( 30 )
  2402. _twHandle( LEN( _twStack()))
  2403. twPop();twPop();twPop();twPop()
  2404. RETURN NIL
  2405.  
  2406. /*
  2407. ┌──────────────────────────────────────────────────────────────────────────┐
  2408. │  Description: Black Box for twButtonBox()                                │
  2409. │       Author: Vic Lewis                                                  │
  2410. │ Date created: 04-18-92                                                   │
  2411. │ Time created: 10:02:25am                                                 │
  2412. │    Copyright: Trilateral Systems Development Ltd.                        │
  2413. ├──────────────────────────────────────────────────────────────────────────┤
  2414. │     Function: AskUser                                                    │
  2415. │                                                                          │
  2416. │    Arguments: aChoices  - array of prompts                               │
  2417. │               cQuestion - prompt string                                  │
  2418. │               cTitle    - optional title for window                      │
  2419. │                                                                          │
  2420. │                                                                          │
  2421. │ Return Value: Choice number or zero on K_ESC.                            │
  2422. │                                                                          │
  2423. └──────────────────────────────────────────────────────────────────────────┘
  2424. */
  2425. FUNCTION AskUser( aChoices, cQuestion, cTitle )
  2426. LOCAL nRetVal, nRowAdd
  2427. LOCAL nWinWidth := 0, nLeft, nRight, x := 0
  2428. DEFAULT aChoices TO { "Yes", "No" },;
  2429.         cQuestion TO "Proceed?",;
  2430.         cTitle TO NIL
  2431.  
  2432. AEVAL( aChoices, {|x| nWinWidth += ( LEN( x ) + 4 ) } )
  2433.  
  2434. nWinWidth += 3
  2435. nLeft   := INT( ( MAXCOL() / 2 ) - ( nWinWidth / 2 ))
  2436. nRight  := INT( ( MAXCOL() / 2 ) + ( nWinWidth / 2 ))
  2437. nRowAdd := INT( LEN( cQuestion ) / ( nRight - nLeft ))
  2438.  
  2439. RETURN ( twButtonBox( "H", cQuestion, cTitle,, aChoices,, 6, nLeft, ;
  2440.                 12 + nRowAdd, nRight, DSHADOW, DFRAME ))
  2441.  
  2442. /*
  2443. ┌──────────────────────────────────────────────────────────────────────────┐
  2444. │  Description: Informative Message Black Box                              │
  2445. │       Author: Vic Lewis                                                  │
  2446. │ Date created: 04-18-92                                                   │
  2447. │ Time created: 01:01:50pm                                                 │
  2448. │    Copyright: Trilateral Systems Development Ltd.                        │
  2449. ├──────────────────────────────────────────────────────────────────────────┤
  2450. │     Function: UserMsg                                                    │
  2451. │                                                                          │
  2452. │    Arguments: nT, nB   - Coordinates to start the box                    │
  2453. │               xMessage - Display string or array                         │
  2454. │               nWait    - Wait Time                                       │
  2455. │                                                                          │
  2456. │ Return Value:                                                            │
  2457. │                                                                          │
  2458. └──────────────────────────────────────────────────────────────────────────┘
  2459. */
  2460. FUNCTION UserMsg( xMessage, nWait, nT, nB )
  2461. RETURN twInfo( xMessage,, nWait, nT, nB, DSHADOW, DFRAME )
  2462.  
  2463. /*
  2464. ┌──────────────────────────────────────────────────────────────────────────┐
  2465. │  Description: Store the menu descriptions.                               │
  2466. │       Author: Vic Lewis                                                  │
  2467. │ Date created: 04-18-92                                                   │
  2468. │ Time created: 09:59:19am                                                 │
  2469. │    Copyright: Trilateral Systems Development Ltd.                        │
  2470. ├──────────────────────────────────────────────────────────────────────────┤
  2471. │     Function: StoreDesc                                                  │
  2472. │                                                                          │
  2473. │    Arguments: nX - Message to return                                     │
  2474. │                                                                          │
  2475. │ Return Value: Message array                                              │
  2476. │                                                                          │
  2477. └──────────────────────────────────────────────────────────────────────────┘
  2478. */
  2479. FUNCTION StoreDesc( nX )
  2480. LOCAL aMessages := {}
  2481.  
  2482. AADD( aMessages, {"One of the most powerful features of «TSDWIN»", ;
  2483.                   "is its ability to operate on any  window in", ;
  2484.                   "the stack.  You  can «write to either active»", ;
  2485.                   "«or inactive windows».","", ;
  2486.                   "All the other features let you  design YOUR", ;
  2487.                   "interface the way YOU want it.  «TSDWIN» does", ;
  2488.                   "not interfere with  «your personal style»  of", ;
  2489.                   "interface design.","", ;
  2490.                   "«TSDWIN» is a granular library.  ONLY modules", ;
  2491.                   "you need are linked.  We have respect for a", ;
  2492.                   "need to  conserve  memory and have designed", ;
  2493.                   "«TSDWIN» accordingly!", "", ;
  2494.                   "Your continued  support is  appreciated and", ;
  2495.                   "helps to make this the product YOU want."} )
  2496.  
  2497. AADD( aMessages, {"«TSDWIN» lets  you configure  your windows to", ;
  2498.                   "match your own personal interface style. We", ;
  2499.                   "offer:", ;
  2500.                   "         ∙ Multiple «frame» types.", ;
  2501.                   "         ∙ Multiple «shadow» types.", ;
  2502.                   "         ∙ «Lines» and «Boxes».", ;
  2503.                   "         ∙ Various «title» schemes.", ;
  2504.                   "         ∙ Window «reactivation».", ;
  2505.                   "         ∙ Varied «text formatting».", ;
  2506.                   "         ∙ «Hiding» and «Unhiding».", ;
  2507.                   "         ∙ «Create» before «Display».", ;
  2508.                   "         ∙ Easy «Mouse Support».", ;
  2509.                   "         ∙ Mouse Support is «Optional».", ;
  2510.                   "         ∙ Comprehensive «documentation».", ;
  2511.                   "         ∙ «Moving», «Sizing» and «Sliding»",;
  2512.                   "         ∙ «BBS» and voice «support»." ;
  2513.                   } )
  2514.  
  2515. AADD( aMessages, {"«TSDWIN» offers three message systems:", ;
  2516.                   "", ;
  2517.                   "   ∙ Windowed informative and warning", ;
  2518.                   "     messages with automatic formatting.", ;
  2519.                   "   ∙ «Line» or «Area» messages with the", ;
  2520.                   "     option to use embedded colours.", ;
  2521.                   "   ∙ Three types of «Alert» boxes using", ;
  2522.                   "", ;
  2523.                   "           «Pushbutton»", ;
  2524.                   "           «Checkmark»", ;
  2525.                   "           and «Radio» selection.", ;
  2526.                   "", ;
  2527.                   "   ∙ Optional «ActionKeys».", ;
  2528.                   "   ∙ Automatic «Mouse Support».", ;
  2529.                   "   ∙ Initialization schemes to ensure", ;
  2530.                   "     consistency.", ;
  2531.                   "   ∙ On-the-Fly control of defaults." ;
  2532.                   } )
  2533.  
  2534. AADD( aMessages, {"«TSDWIN»'s MENU TO  replacement gives you the", ;
  2535.                   "option to «control colours». It also includes", ;
  2536.                   "automatic  «hot keys»  and  «Mouse Support».", ;
  2537.                   "", ;
  2538.                   "There  are three  types  of «message systems»", ;
  2539.                   "including  multi-line messages  with direct", ;
  2540.                   "screen writes for speed. This menu is using", ;
  2541.                   "multi-line messages.", ;
  2542.                   "", ;
  2543.                   "Menus  may include «security» and also «action", ;
  2544.                   "blocks» to execute external code.", ;
  2545.                   "", ;
  2546.                   "Windowed «PopUp» menus  are available in both", ;
  2547.                   "the MENU TO and ACHOICE() format.", ;
  2548.                   "", ;
  2549.                   "An  expandable «Line Menu»  accepts a varying", ;
  2550.                   "number of prompts." } )
  2551.  
  2552. AADD( aMessages, {"«TSDWIN» offers a choice of fast «DBF» and «Array»", ;
  2553.                   "browsers, with or without «Mouse Support».", ;
  2554.                   "", ;
  2555.                   "The new browses in «TSDWIN» 2.00  give you the", ;
  2556.                   "most complete control of column  definitions", ;
  2557.                   "and on-the-fly modification methods you will", ;
  2558.                   "find available.", ;
  2559.                   "", ;
  2560.                   "«Append» and «Edit» modes are availables in both", ;
  2561.                   "DBF and Array browses.", ;
  2562.                   "", ;
  2563.                   "«ActionKeys» and «Mouse Hot Spots»  make it very", ;
  2564.                   "easy to construct comprehensive mouse driven",;
  2565.                   "modules.", ;
  2566.                   "", ;
  2567.                   "You can build  whole applications around the", ;
  2568.                   "new browses in «TSDWIN» V2.00." ;
  2569.                   } )
  2570.  
  2571. AADD( aMessages, {"Mouse support in «TSDWIN» is almost automatic.", ;
  2572.                   "", ;
  2573.                   "With the  exception  of «Mouse Hot Spots», one", ;
  2574.                   "call to «twMouseInit()» at the  beginning of a", ;
  2575.                   "program  provides  you  with «automatic» mouse", ;
  2576.                   "operations.", ;
  2577.                   "", ;
  2578.                   "There  are «High and Level» mouse functions to", ;
  2579.                   "allow  you to extend and customize the mouse", ;
  2580.                   "operations already available in «TSDWIN».", ;
  2581.                   "", ;
  2582.                   "Two  methods of handling «Mouse Hot Spots» are", ;
  2583.                   "included:  one based on information  held in", ;
  2584.                   "the  calling  routine and another managed by", ;
  2585.                   "«TSDWIN».", ;
  2586.                   "", ;
  2587.                   "Mousing is «Optional» with «TSDWIN v2.00»."} )
  2588.  
  2589. AADD( aMessages, {"«TSDWIN» offers many functions which allow you", ;
  2590.                   "to provide your «clients» with  little  extras", ;
  2591.                   "to keep them «coming back».", ;
  2592.                   "", ;
  2593.                   "We  provide a  comprehensive «Calculator» with", ;
  2594.                   "memory  and a «Calendar» system to  use either", ;
  2595.                   "for data entry or as a driver for other date", ;
  2596.                   "operations.", ;
  2597.                   "", ;
  2598.                   "Creating «indexes» is easy and informative for", ;
  2599.                   "your clients when you use twIndexMaker().", ;
  2600.                   "", ;
  2601.                   "«File Backup» is available  with this version,", ;
  2602.                   "with or without the interface we provide.", ;
  2603.                   "", ;
  2604.                   "You will find replacements for MEMOEDIT()." ;
  2605.                   } )
  2606.  
  2607. AADD( aMessages, {"«TSDWIN» offers some functions  which directly", ;
  2608.                   "affect the computer hardware.", ;
  2609.                   "", ;
  2610.                   "We believe this area to be well-supported in",;
  2611.                   "other third party products and so our thrust",;
  2612.                   "is to provide only functions  which directly",;
  2613.                   "affect the «user interface».",;
  2614.                   "",;
  2615.                   "We offer easy and complete disk «Drive Status»",;
  2616.                   "checks which you can  call  Low-Level or use",;
  2617.                   "our windowed interface.", ;
  2618.                   "", ;
  2619.                   "There is the ability to check and/or set the", ;
  2620.                   "status of 'dead' keys (CTRL ALT DEL etc.).", ;
  2621.                   "", ;
  2622.                   "An on-screen «Clock» can be called directly or", ;
  2623.                   "fitted into your window scheme by «TSDWIN»." ;
  2624.                   } )
  2625.  
  2626. AADD( aMessages, {"", ;
  2627.                   "  «TSDWIN Version 2.00» is a «Major» Upgrade!", ;
  2628.                   "", ;
  2629.                   "You can order «TSDWIN» V2.00 on our  «Toll Free»",;
  2630.                   "order line. «Next day» shipment can  now", ;
  2631.                   "be guaranteed. For surface mail allow 2 to 4", ;
  2632.                   "weeks for delivery.", ;
  2633.                   "", ;
  2634.                   "Current registered users should inquire about", ;
  2635.                   "«upgrading» to TSDWIN V2.00.", "",;
  2636.                   "«Only» MAXI source is available  for  2.00 but", ;
  2637.                   "you can now get printed documentation." ;
  2638.                   } )
  2639.  
  2640. AADD( aMessages, {"", ;
  2641.                   "", ;
  2642.                   "", ;
  2643.                   "",;
  2644.                   "     Trilateral Systems Development Ltd.",;
  2645.                   "",;
  2646.                   "has enjoyed bringing you this demonstration.";
  2647.                   } )
  2648.  
  2649. RETURN aMessages[ nX ]
  2650.  
  2651. /*
  2652. ┌──────────────────────────────────────────────────────────────────────────┐
  2653. │  Description: Display Corporate Colours                                  │
  2654. │       Author: Vic Lewis                                                  │
  2655. │ Date created: 04-18-92                                                   │
  2656. │ Time created: 02:00:01pm                                                 │
  2657. │    Copyright: Trilateral Systems Development Ltd.                        │
  2658. ├──────────────────────────────────────────────────────────────────────────┤
  2659. │     Function: TSDSetup                                                   │
  2660. │                                                                          │
  2661. │    Arguments: lMono                                                      │
  2662. │                                                                          │
  2663. │ Return Value: NIL                                                        │
  2664. │                                                                          │
  2665. └──────────────────────────────────────────────────────────────────────────┘
  2666. */
  2667. FUNCTION TSDSetup( lMono )
  2668. IF ! lMono
  2669.     @ 0, 19 SAY "T" COLOR "r+/bg"
  2670.     @ 0, 20 SAY "S" COLOR "gr+/bg"
  2671.     @ 0, 21 SAY "D" COLOR "w+/bg"
  2672. ENDIF
  2673. IF ! lMono
  2674.     @ MAXROW(), 22 SAY "T" COLOR "r+/bg"
  2675.     @ MAXROW(), 33 SAY "S" COLOR "gr+/bg"
  2676.     @ MAXROW(), 41 SAY "D" COLOR "w+/bg"
  2677. ENDIF
  2678.  
  2679. RETURN NIL
  2680.  
  2681. /*
  2682. ┌──────────────────────────────────────────────────────────────────────────┐
  2683. │  Description: GetReader for twBRBrowse() Demo                            │
  2684. │       Author: Vic Lewis                                                  │
  2685. │ Date created: 04-19-92                                                   │
  2686. │ Time created: 05:46:50pm                                                 │
  2687. │    Copyright: Trilateral Systems Development Ltd.                        │
  2688. ├──────────────────────────────────────────────────────────────────────────┤
  2689. │    Procedure: BRGetReader                                                │
  2690. │                                                                          │
  2691. │    Arguments: get - Get Object                                           │
  2692. │               lGoRight - stuff a oDB:Right()                             │
  2693. │               lRightOnEnter - stuff a oDB:Right() and write get          │
  2694. │     See Also:                                                            │
  2695. │                                                                          │
  2696. └──────────────────────────────────────────────────────────────────────────┘
  2697. */
  2698. PROCEDURE BRGetReader( get, lGoRight, lRightOnEnter )
  2699. DEFAULT lGoRight TO .T., ;
  2700.         lRightOnEnter TO .F.
  2701. // read the GET IF the WHEN condition is satisfied
  2702. IF ( GetPreValidate( get ))
  2703.     // activate the GET for reading
  2704.     get:SetFocus()
  2705.     DO WHILE ( get:exitState == GE_NOEXIT )
  2706.  
  2707.         // check for initial typeout ( no editable positions )
  2708.         IF ( get:typeOut )
  2709.             get:exitState := GE_ENTER
  2710.         ENDIF
  2711.  
  2712.         // apply keystrokes until exit
  2713.         DO WHILE ( get:exitState == GE_NOEXIT )
  2714.             BRGetApplyKey( get, INKEY( 0 ), lGoRight, lRightOnEnter )
  2715.         ENDDO
  2716.  
  2717.         // disallow exit IF the VALID condition is not satisfied
  2718.         IF ( !GetPostValidate( get ))
  2719.             get:exitState := GE_NOEXIT
  2720.         ENDIF
  2721.     ENDDO
  2722.     // de-activate the GET
  2723.     get:KillFocus()
  2724. ENDIF
  2725. RETURN
  2726.  
  2727. /*
  2728. ┌──────────────────────────────────────────────────────────────────────────┐
  2729. │  Description: Custom GET Key Handler for Parts Browse (twBRBrowse() )    │
  2730. │       Author: Vic Lewis                                                  │
  2731. │ Date created: 04-19-92                                                   │
  2732. │ Time created: 05:49:33pm                                                 │
  2733. │    Copyright: Trilateral Systems Development Ltd.                        │
  2734. ├──────────────────────────────────────────────────────────────────────────┤
  2735. │    Procedure: BRGetApplyKey                                              │
  2736. │                                                                          │
  2737. │    Arguments: get - Get Object                                           │
  2738. │               key - key passed from get reader                           │
  2739. │               lGoRight - stuff a oDB:Right()                             │
  2740. │               lRightOnEnter - stuff a oDB:Right() and write get          │
  2741. │                                                                          │
  2742. └──────────────────────────────────────────────────────────────────────────┘
  2743. */
  2744. PROCEDURE BRGetApplyKey( get, key, lGoRight, lRightOnEnter )
  2745. LOCAL cKey
  2746. LOCAL bKeyBlock
  2747. // check for SET KEY first
  2748. IF (( bKeyBlock := SETKEY( key )) <> NIL )
  2749.     GetDoSetKey( bKeyBlock, get )
  2750.     RETURN                                  // NOTE
  2751. ENDIF
  2752.  
  2753. DO CASE
  2754.     CASE ( key == K_UP )
  2755.         get:exitState := GE_UP
  2756.  
  2757.     CASE ( key == K_SH_TAB )
  2758.         get:exitState := GE_UP
  2759.  
  2760.     CASE ( key == K_DOWN )
  2761.         get:exitState := GE_DOWN
  2762.  
  2763.     CASE ( key == K_TAB )
  2764.         get:exitState := GE_DOWN
  2765.  
  2766.     CASE ( key == K_ENTER )
  2767.         IF lGoRight
  2768.             get:exitState := GE_ENTER
  2769.             IF lRightOnEnter
  2770.                 __keyboard( CHR( K_RIGHT ))
  2771.             ENDIF
  2772.         ELSE
  2773.             IF lRightOnEnter
  2774.                 get:exitState := GE_WRITE
  2775.                 __keyboard( CHR( K_RIGHT ))
  2776.             ELSE
  2777.                 get:exitState := GE_WRITE
  2778.                 __keyboard( CHR( K_CTRL_HOME ) + IIF( !( RECNO() = LASTREC() + 1 ), CHR( K_DOWN ), "" ))
  2779.             ENDIF
  2780.         ENDIF
  2781.  
  2782.     CASE ( key == K_ESC )
  2783.         IF ( SET( _SET_ESCAPE ))
  2784.             get:undo()
  2785.             get:exitState := GE_ESCAPE
  2786.         ENDIF
  2787.  
  2788.     CASE ( key == K_PGUP )
  2789.         get:exitState := GE_WRITE
  2790.  
  2791.     CASE ( key == K_PGDN )
  2792.         get:exitState := GE_WRITE
  2793.  
  2794.     CASE ( key == K_CTRL_HOME )
  2795.         get:exitState := GE_TOP
  2796.  
  2797.         #ifdef CTRL_END_SPECIAL
  2798.         // both ^W and ^End go to the last GET
  2799.     CASE ( key == K_CTRL_END )
  2800.         get:exitState := GE_BOTTOM
  2801.  
  2802.         #ELSE
  2803.         // both ^W and ^End terminate the READ ( the default )
  2804.     CASE ( key == K_CTRL_W )
  2805.         get:exitState := GE_WRITE
  2806.         #ENDIF
  2807.  
  2808.     CASE ( key == K_INS )
  2809.         SET( _SET_INSERT, !SET( _SET_INSERT ))
  2810.         BRShowScoreboard()
  2811.  
  2812.     CASE ( key == K_UNDO )
  2813.         get:Undo()
  2814.  
  2815.     CASE ( key == K_HOME )
  2816.         get:Home()
  2817.  
  2818.     CASE ( key == K_END )
  2819.         get:End()
  2820.  
  2821.     CASE ( key == K_RIGHT )
  2822.         get:exitState := GE_WRITE
  2823.         IF lGoRight
  2824.             __keyboard( CHR( K_RIGHT ))
  2825.         ELSE
  2826.             __keyboard( CHR( K_CTRL_HOME ) + IIF( !( RECNO() = LASTREC() + 1 ), CHR( K_DOWN ), "" ))
  2827.         ENDIF
  2828.  
  2829.     CASE ( key == K_LEFT )
  2830.         get:exitState := GE_WRITE
  2831.         __keyboard( CHR( K_LEFT ))
  2832.  
  2833.     CASE ( key == K_CTRL_RIGHT )
  2834.         get:Right()
  2835.  
  2836.     CASE ( key == K_CTRL_LEFT )
  2837.         get:Left()
  2838.  
  2839.     CASE ( key == K_BS )
  2840.         get:BackSpace()
  2841.  
  2842.     CASE ( key == K_DEL )
  2843.         get:Delete()
  2844.  
  2845.     CASE ( key == K_CTRL_T )
  2846.         get:DelWordRight()
  2847.  
  2848.     CASE ( key == K_CTRL_Y )
  2849.         get:DelEnd()
  2850.  
  2851.     CASE ( key == K_CTRL_BS )
  2852.         get:DelWordLeft()
  2853.  
  2854.     OTHERWISE
  2855.  
  2856.         IF ( key >= 32 .AND. key <= 255 )
  2857.             cKey := CHR( key )
  2858.             IF ( get:type == "N" .AND. ( cKey == "." .OR. cKey == ", " ))
  2859.                 get:ToDecPos()
  2860.             ELSE
  2861.                 IF ( SET( _SET_INSERT ))
  2862.                     get:Insert( cKey )
  2863.                 ELSE
  2864.                     get:Overstrike( cKey )
  2865.                 ENDIF
  2866.                 IF ( get:typeOut .AND. !SET( _SET_CONFIRM ))
  2867.                     IF ( SET( _SET_BELL ))
  2868.                         ?? CHR( 7 )
  2869.                     ENDIF
  2870.                     IF lGoRight
  2871.                         get:exitState := GE_ENTER
  2872.                         IF lRightOnEnter
  2873.                             __keyboard( CHR( K_RIGHT ))
  2874.                         ENDIF
  2875.                     ELSE
  2876.                         get:exitState := GE_WRITE
  2877.                         __keyboard( CHR( K_CTRL_HOME ) + IIF( !( RECNO() = LASTREC() + 1 ), CHR( K_DOWN ), "" ))
  2878.                     ENDIF
  2879.                 ENDIF
  2880.             ENDIF
  2881.         ENDIF
  2882. ENDCASE
  2883. RETURN
  2884.  
  2885. /**********************************
  2886. *
  2887. *   wacky compatibility services
  2888. *
  2889. */
  2890. // display coordinates for SCOREBOARD
  2891. #define SCORE_ROW       0
  2892. #define SCORE_COL       60
  2893.  
  2894. /*
  2895. ┌──────────────────────────────────────────────────────────────────────────┐
  2896. │  Description: Compatibility PROC  for get reader                         │
  2897. │       Author: Vic Lewis                                                  │
  2898. │ Date created: 04-19-92                                                   │
  2899. │ Time created: 05:51:35pm                                                 │
  2900. │    Copyright: Trilateral Systems Development Ltd.                        │
  2901. ├──────────────────────────────────────────────────────────────────────────┤
  2902. │    Procedure: BRShowScoreBoard                                           │
  2903. │                                                                          │
  2904. │    Arguments: None                                                       │
  2905. │                                                                          │
  2906. └──────────────────────────────────────────────────────────────────────────┘
  2907. */
  2908. STATIC PROCEDURE BRShowScoreboard()
  2909. LOCAL nRow, nCol
  2910. IF ( SET( _SET_SCOREBOARD ))
  2911.     nRow := ROW()
  2912.     nCol := COL()
  2913.     SETPOS( SCORE_ROW, SCORE_COL )
  2914.     DISPOUT( IIF( SET( _SET_INSERT ), "Ins", "   " ))
  2915.     SETPOS( nRow, nCol )
  2916. ENDIF
  2917. RETURN
  2918.  
  2919. /*
  2920. ┌──────────────────────────────────────────────────────────────────────────┐
  2921. │  Description: Wait State                                                 │
  2922. │       Author: Vic Lewis                                                  │
  2923. │ Date created: 08-26-92                                                   │
  2924. │ Time created: 02:56:09pm                                                 │
  2925. │    Copyright: Trilateral Systems Development Ltd.                        │
  2926. ├──────────────────────────────────────────────────────────────────────────┤
  2927. │     FUNCTION DemoWait( nWait )                                           │
  2928. │                                                                          │
  2929. │    Arguments:                                                            │
  2930. │                                                                          │
  2931. │ Return Value:                                                            │
  2932. │     See Also:                                                            │
  2933. │                                                                          │
  2934. └──────────────────────────────────────────────────────────────────────────┘
  2935. */
  2936. FUNCTION DemoWait( nWait )
  2937. LOCAL nKey
  2938. #IFNDEF NOMOUSE
  2939.     nKey := twMInkeyWait( nWait, .T., .T. )
  2940. #ELSE
  2941.     nKey := twInkeyWait( nWait )
  2942. #ENDIF
  2943. RETURN nKey
  2944.